{"version":3,"mappings":"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ACP,UAAW,CACZ,EACD,CACE,MAAO,OACP,UAAW,EACX,SAAU,CACR,CACE,UAAW,SACX,WAAY,GACZ,SAAU,CACR,CACE,MAAO,IACP,IAAK,IACL,SAAU,CAAEC,CAAY,CACzB,EACD,CACE,MAAO,IACP,IAAK,IACL,SAAU,CAAEA,CAAY,CACzB,EACD,CAAE,MAAO,cAAc,MAMlC,EACD,MAAO,CACL,KAAM,YACN,QAAS,CACP,OACA,QACA,MACA,OACA,MACA,MACA,MACA,QACA,MACA,KACD,EACD,iBAAkB,GAClB,aAAc,GACd,SAAU,CACR,CACE,UAAW,OACX,MAAO,UACP,IAAK,IACL,UAAW,GACX,SAAU,CACRC,EACAG,EACAD,EACAD,EACA,CACE,MAAO,KACP,IAAK,KACL,SAAU,CACR,CACE,UAAW,OACX,MAAO,UACP,IAAK,IACL,SAAU,CACRD,EACAC,EACAE,EACAD,MAMX,EACDxf,EAAK,QACH,OACA,MACA,CAAE,UAAW,EAAE,CAChB,EACD,CACE,MAAO,cACP,IAAK,QACL,UAAW,EACZ,EACDqf,EAEA,CACE,UAAW,OACX,IAAK,MACL,SAAU,CACR,CACE,MAAO,SACP,UAAW,GACX,SAAU,CACRI,EAEH,EACD,CACE,MAAO,qBAIZ,EACD,CACE,UAAW,MAMX,MAAO,iBACP,IAAK,IACL,SAAU,CAAE,KAAM,OAAS,EAC3B,SAAU,CAAEC,CAAe,EAC3B,OAAQ,CACN,IAAK,YACL,UAAW,GACX,YAAa,CACX,MACA,OAGL,EACD,CACE,UAAW,MAEX,MAAO,kBACP,IAAK,IACL,SAAU,CAAE,KAAM,QAAU,EAC5B,SAAU,CAAEA,CAAe,EAC3B,OAAQ,CACN,IAAK,aACL,UAAW,GACX,YAAa,CACX,aACA,aACA,OAGL,EAED,CACE,UAAW,MACX,MAAO,SACR,EAED,CACE,UAAW,MACX,MAAOrmB,EAAM,OACX,IACAA,EAAM,UAAUA,EAAM,OACpB8lB,EAIA9lB,EAAM,OAAO,MAAO,IAAK,IAAI,CAC9B,EACF,EACD,IAAK,OACL,SAAU,CACR,CACE,UAAW,OACX,MAAO8lB,EACP,UAAW,EACX,OAAQO,GAGb,EAED,CACE,UAAW,MACX,MAAOrmB,EAAM,OACX,MACAA,EAAM,UAAUA,EAAM,OACpB8lB,EAAa,GACd,EACF,EACD,SAAU,CACR,CACE,UAAW,OACX,MAAOA,EACP,UAAW,CACZ,EACD,CACE,MAAO,IACP,UAAW,EACX,WAAY,MAKrB,EAGH,OAAAQ,GAAiBT,kDCvOjB,SAASU,EAAK5f,EAAM,CAClB,MAAM3G,EAAQ2G,EAAK,MACb6f,EAAM,CAAE,EACRC,EAAa,CACjB,MAAO,OACP,IAAK,KACL,SAAU,CACR,OACA,CACE,MAAO,KACP,SAAU,CAAED,CAAG,CAChB,EAEJ,EACD,OAAO,OAAOA,EAAK,CACjB,UAAW,WACX,SAAU,CACR,CAAE,MAAOxmB,EAAM,OAAO,qBAGpB,qBAAqB,CAAG,EAC1BymB,EAEN,CAAG,EAED,MAAMC,EAAQ,CACZ,UAAW,QACX,MAAO,OACP,IAAK,KACL,SAAU,CAAE/f,EAAK,gBAAgB,CAClC,EACKzF,EAAUyF,EAAK,QACnBA,EAAK,QAAS,EACd,CACE,MAAO,CACL,SACA,MACD,EACD,MAAO,CACL,EAAG,WAGR,EACKggB,EAAW,CACf,MAAO,iBACP,OAAQ,CAAE,SAAU,CAClBhgB,EAAK,kBAAkB,CACrB,MAAO,QACP,IAAK,QACL,UAAW,QACZ,EACF,EACF,EACKigB,EAAe,CACnB,UAAW,SACX,MAAO,IACP,IAAK,IACL,SAAU,CACRjgB,EAAK,iBACL6f,EACAE,EAEH,EACDA,EAAM,SAAS,KAAKE,CAAY,EAChC,MAAMC,EAAgB,CACpB,MAAO,KACR,EACKC,EAAc,CAClB,UAAW,SACX,MAAO,IACP,IAAK,GACN,EACKC,EAAe,CACnB,MAAO,KACR,EACKC,EAAa,CACjB,MAAO,UACP,IAAK,OACL,SAAU,CACR,CACE,MAAO,gBACP,UAAW,QACZ,EACDrgB,EAAK,YACL6f,EAEH,EACKS,EAAiB,CACrB,OACA,OACA,MACA,KACA,MACA,MACA,OACA,OACA,MACD,EACKC,EAAgBvgB,EAAK,QAAQ,CACjC,OAAQ,IAAIsgB,EAAe,KAAK,GAAG,CAAC,IACpC,UAAW,EACf,CAAG,EACKE,EAAW,CACf,UAAW,WACX,MAAO,4BACP,YAAa,GACb,SAAU,CAAExgB,EAAK,QAAQA,EAAK,WAAY,CAAE,MAAO,YAAY,CAAE,CAAG,EACpE,UAAW,CACZ,EAEKygB,EAAW,CACf,KACA,OACA,OACA,OACA,KACA,MACA,QACA,QACA,KACA,KACA,OACA,OACA,OACA,WACA,QACD,EAEKC,EAAW,CACf,OACA,OACD,EAGKC,EAAY,CAAE,MAAO,gBAAkB,EAGvCC,EAAkB,CACtB,QACA,KACA,WACA,OACA,OACA,OACA,SACA,UACA,OACA,MACA,WACA,SACA,QACA,OACA,QACA,OACA,QACA,OACD,EAEKC,EAAiB,CACrB,QACA,OACA,UACA,SACA,UACA,UACA,OACA,SACA,OACA,MACA,QACA,SACA,UACA,SACA,OACA,YACA,SACA,OACA,OACA,UACA,SACA,SACD,EAEKC,EAAgB,CACpB,WACA,KACA,UACA,MACA,MACA,QACA,QACA,gBACA,WACA,UACA,eACA,YACA,aACA,YACA,WACA,UACA,aACA,OACA,UACA,SACA,SACA,SACA,UACA,KACA,KACA,QACA,YACA,SACA,QACA,UACA,UACA,OACA,OACA,QACA,MACA,SACA,OACA,QACA,QACA,SACA,SACA,QACA,SACA,SACA,OACA,UACA,SACA,aACA,SACA,UACA,WACA,QACA,OACA,SACA,QACA,QACA,WACA,UACA,OACA,MACA,WACA,aACA,QACA,OACA,cACA,UACA,SACA,MACD,EAEKC,EAAiB,CACrB,QACA,QACA,QACA,QACA,KACA,KACA,KACA,MACA,YACA,KACA,KACA,QACA,SACA,QACA,SACA,KACA,WACA,KACA,QACA,QACA,OACA,QACA,WACA,OACA,QACA,SACA,SACA,MACA,QACA,OACA,SACA,MACA,SACA,MACA,OACA,OACA,OACA,SACA,KACA,SACA,KACA,QACA,MACA,KACA,UACA,YACA,YACA,YACA,YACA,OACA,OACA,QACA,MACA,MACA,OACA,KACA,QACA,WACA,OACA,KACA,OACA,WACA,SACA,OACA,UACA,KACA,OACA,MACA,OACA,SAEA,SACA,SACA,KACA,OACA,UACA,OACA,QACA,QACA,UACA,QACA,WACA,SACA,MACA,WACA,SACA,MACA,QACA,OACA,SACA,OACA,MACA,OACA,UAEA,MACA,QACA,SACA,SACA,QACA,MACA,SACA,KACD,EAED,MAAO,CACL,KAAM,OACN,QAAS,CACP,KACA,KACD,EACD,SAAU,CACR,SAAU,wBACV,QAASN,EACT,QAASC,EACT,SAAU,CACR,GAAGE,EACH,GAAGC,EAEH,MACA,QACA,GAAGC,EACH,GAAGC,EAEN,EACD,SAAU,CACRR,EACAvgB,EAAK,QAAS,EACdwgB,EACAH,EACA9lB,EACAylB,EACAW,EACAV,EACAC,EACAC,EACAC,EACAP,EAEH,EAGH,OAAAmB,GAAiBpB,kDC/YjB,SAASxgB,EAAEY,EAAM,CACf,MAAM3G,EAAQ2G,EAAK,MAIbpF,EAAsBoF,EAAK,QAAQ,KAAM,IAAK,CAAE,SAAU,CAAE,CAAE,MAAO,MAAM,CAAI,EAAE,EACjFihB,EAAmB,qBACnBC,EAAe,kBAEfC,EAAmB,IACrBF,EAAmB,IACnB5nB,EAAM,SAAS6nB,CAAY,EAC3B,gBAAkB7nB,EAAM,SAJC,UAI4B,EACvD,IAGI+nB,EAAQ,CACZ,UAAW,OACX,SAAU,CACR,CAAE,MAAO,oBAAsB,EAC/B,CAAE,MAAO,uBAAuB,EAGnC,EAKKC,EAAU,CACd,UAAW,SACX,SAAU,CACR,CACE,MAAO,cACP,IAAK,IACL,QAAS,MACT,SAAU,CAAErhB,EAAK,gBAAgB,CAClC,EACD,CACE,MAAO,eAXa,uDAWyB,MAC7C,IAAK,IACL,QAAS,GACV,EACDA,EAAK,kBAAkB,CACrB,MAAO,mCACP,IAAK,qBACN,GAEJ,EAEKshB,EAAU,CACd,UAAW,SACX,SAAU,CACR,CAAE,MAAO,eAAkB,EAC3B,CAAE,MAAO,uFAA4F,EACrG,CAAE,MAAO,qFAA0F,CACpG,EACD,UAAW,CACZ,EAEKC,EAAe,CACnB,UAAW,OACX,MAAO,eACP,IAAK,IACL,SAAU,CAAE,QACR,yGAC0D,EAC9D,SAAU,CACR,CACE,MAAO,OACP,UAAW,CACZ,EACDvhB,EAAK,QAAQqhB,EAAS,CAAE,UAAW,QAAQ,CAAE,EAC7C,CACE,UAAW,SACX,MAAO,OACR,EACDzmB,EACAoF,EAAK,qBAER,EAEK7E,EAAa,CACjB,UAAW,QACX,MAAO9B,EAAM,SAAS6nB,CAAY,EAAIlhB,EAAK,SAC3C,UAAW,CACZ,EAEKwhB,EAAiBnoB,EAAM,SAAS6nB,CAAY,EAAIlhB,EAAK,SAAW,UAoFhEygB,EAAW,CACf,QAnFiB,CACjB,MACA,OACA,QACA,OACA,WACA,UACA,KACA,OACA,OACA,SACA,MACA,UACA,OACA,KACA,SACA,WACA,WACA,SACA,SACA,SACA,gBACA,SACA,SACA,UACA,QACA,WACA,QACA,WACA,WACA,UACA,WACA,YACA,iBACA,gBAEA,UACA,UACA,WACA,gBACA,eAEA,SACD,EAyCC,KAvCc,CACd,QACA,SACA,SACA,WACA,MACA,QACA,OACA,OACA,OACA,QACA,UACA,WACA,aACA,aACA,aACA,aACA,cACA,cACA,eACA,WACA,WACA,WACA,YACA,YACA,YACA,aAEA,QACA,SACA,YAEA,UACA,OACA,WACD,EAKC,QAAS,kBAET,SAAU,kzBASX,EAEKgB,EAAsB,CAC1BF,EACAH,EACAxmB,EACAoF,EAAK,qBACLshB,EACAD,CACD,EAEKK,EAAqB,CAIzB,SAAU,CACR,CACE,MAAO,IACP,IAAK,GACN,EACD,CACE,MAAO,KACP,IAAK,IACN,EACD,CACE,cAAe,wBACf,IAAK,IAER,EACD,SAAUjB,EACV,SAAUgB,EAAoB,OAAO,CACnC,CACE,MAAO,KACP,IAAK,KACL,SAAUhB,EACV,SAAUgB,EAAoB,OAAO,CAAE,MAAM,CAAE,EAC/C,UAAW,EAEnB,CAAK,EACD,UAAW,CACZ,EAEKE,EAAuB,CAC3B,MAAO,IAAMR,EAAmB,eAAiBK,EACjD,YAAa,GACb,IAAK,QACL,WAAY,GACZ,SAAUf,EACV,QAAS,iBACT,SAAU,CACR,CACE,MAAOQ,EACP,SAAUR,EACV,UAAW,CACZ,EACD,CACE,MAAOe,EACP,YAAa,GACb,SAAU,CAAExhB,EAAK,QAAQ7E,EAAY,CAAE,UAAW,gBAAgB,CAAE,CAAG,EACvE,UAAW,CACZ,EAGD,CACE,UAAW,EACX,MAAO,GACR,EACD,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,SAAUslB,EACV,UAAW,EACX,SAAU,CACR7lB,EACAoF,EAAK,qBACLqhB,EACAC,EACAF,EAEA,CACE,MAAO,KACP,IAAK,KACL,SAAUX,EACV,UAAW,EACX,SAAU,CACR,OACA7lB,EACAoF,EAAK,qBACLqhB,EACAC,EACAF,IAIP,EACDA,EACAxmB,EACAoF,EAAK,qBACLuhB,EAEH,EAED,MAAO,CACL,KAAM,IACN,QAAS,CAAE,GAAK,EAChB,SAAUd,EAGV,kBAAmB,GACnB,QAAS,KACT,SAAU,CAAE,EAAC,OACXiB,EACAC,EACAF,EACA,CACEF,EACA,CACE,MAAOvhB,EAAK,SAAW,KACvB,SAAUygB,CACX,EACD,CACE,UAAW,QACX,cAAe,0BACf,IAAK,WACL,SAAU,CACR,CAAE,cAAe,oBAAsB,EACvCzgB,EAAK,YAGjB,CAAO,EACH,QAAS,CACP,aAAcuhB,EACd,QAASF,EACT,SAAUZ,EAEb,EAGH,OAAAmB,GAAiBxiB,kDCpUjB,SAASyiB,EAAI7hB,EAAM,CACjB,MAAM3G,EAAQ2G,EAAK,MAIbpF,EAAsBoF,EAAK,QAAQ,KAAM,IAAK,CAAE,SAAU,CAAE,CAAE,MAAO,MAAM,CAAI,EAAE,EACjFihB,EAAmB,qBACnBC,EAAe,kBAEfC,EAAmB,cACrBF,EAAmB,IACnB5nB,EAAM,SAAS6nB,CAAY,EAC3B,gBAAkB7nB,EAAM,SAJC,UAI4B,EACvD,IAEIyoB,EAAsB,CAC1B,UAAW,OACX,MAAO,oBACR,EAKKT,EAAU,CACd,UAAW,SACX,SAAU,CACR,CACE,MAAO,cACP,IAAK,IACL,QAAS,MACT,SAAU,CAAErhB,EAAK,gBAAgB,CAClC,EACD,CACE,MAAO,eAXa,uDAWyB,MAC7C,IAAK,IACL,QAAS,GACV,EACDA,EAAK,kBAAkB,CACrB,MAAO,mCACP,IAAK,qBACN,GAEJ,EAEKshB,EAAU,CACd,UAAW,SACX,SAAU,CAER,CAAE,MACA,8UAkBD,EAED,CAAE,MACA,8JAeH,EACD,UAAW,CACZ,EAEKC,EAAe,CACnB,UAAW,OACX,MAAO,eACP,IAAK,IACL,SAAU,CAAE,QACR,wFACyC,EAC7C,SAAU,CACR,CACE,MAAO,OACP,UAAW,CACZ,EACDvhB,EAAK,QAAQqhB,EAAS,CAAE,UAAW,QAAQ,CAAE,EAC7C,CACE,UAAW,SACX,MAAO,OACR,EACDzmB,EACAoF,EAAK,qBAER,EAEK7E,EAAa,CACjB,UAAW,QACX,MAAO9B,EAAM,SAAS6nB,CAAY,EAAIlhB,EAAK,SAC3C,UAAW,CACZ,EAEKwhB,EAAiBnoB,EAAM,SAAS6nB,CAAY,EAAIlhB,EAAK,SAAW,UAGhE+hB,EAAoB,CACxB,UACA,UACA,MACA,SACA,MACA,gBACA,gBACA,kBACA,OACA,SACA,QACA,QACA,OACA,QACA,QACA,WACA,YACA,WACA,QACA,UACA,gBACA,YACA,YACA,YACA,WACA,WACA,UACA,SACA,KACA,kBACA,OACA,OACA,WACA,SACA,SACA,QACA,QACA,MACA,SACA,OACA,KACA,SACA,SACA,SACA,UACA,YACA,MACA,WACA,MACA,SACA,UACA,WACA,KACA,QACA,WACA,UACA,YACA,SACA,WACA,WACA,sBACA,WACA,SACA,SACA,gBACA,iBACA,SACA,SACA,eACA,WACA,OACA,eACA,QACA,mBACA,2BACA,OACA,MACA,UACA,SACA,WACA,QACA,QACA,UACA,WACA,QACA,MACA,QACD,EAGKC,EAAiB,CACrB,OACA,OACA,WACA,WACA,UACA,SACA,QACA,MACA,OACA,QACA,OACA,UACA,WACA,SACA,QACA,QACD,EAEKC,EAAa,CACjB,MACA,WACA,UACA,mBACA,SACA,UACA,qBACA,yBACA,qBACA,QACA,aACA,SACA,YACA,mBACA,gBACA,UACA,QACA,aACA,WACA,WACA,QACA,WACA,gBACA,gBACA,OACA,UACA,iBACA,QACA,kBACA,wBACA,cACA,MACA,gBACA,cACA,eACA,qBACA,aACA,QACA,cACA,eACA,cACA,SACA,YACA,QACA,cACA,aACA,gBACA,qBACA,qBACA,gBACA,UACA,SACA,WACA,UACA,cACD,EAEKC,EAAiB,CACrB,QACA,MACA,OACA,QACA,WACA,OACA,OACA,QACA,SACA,OACA,OACA,MACA,OACA,MACA,OACA,OACA,UACA,OACA,WACA,OACA,MACA,OACA,QACA,OACA,UACA,UACA,QACA,OACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,OACA,UACA,QACA,MACA,QACA,YACA,cACA,4BACA,aACA,cACA,SACA,SACA,SACA,SACA,SACA,OACA,OACA,MACA,SACA,UACA,OACA,UACA,QACA,MACA,OACA,WACA,UACA,OACA,SACA,MACA,SACA,QACA,SACA,SACA,SACA,SACA,SACA,UACA,SACA,UACA,UACA,UACA,UACA,UACA,SACA,SACA,OACA,MACA,OACA,YACA,gBACA,UACA,UACA,WACA,QACA,UACA,UACD,EAaKC,EAAe,CACnB,KAAMH,EACN,QAASD,EACT,QAde,CACf,OACA,QACA,UACA,UACA,MACD,EASC,SANe,CAAE,SAAW,EAO5B,YAAaE,CACd,EAEKG,EAAoB,CACxB,UAAW,oBACX,UAAW,EACX,SAAU,CAER,MAAOF,CAAgB,EACzB,MAAO7oB,EAAM,OACX,KACA,eACA,SACA,UACA,aACA,YACA2G,EAAK,SACL3G,EAAM,UAAU,kBAAkB,CAAC,CACtC,EAEKooB,EAAsB,CAC1BW,EACAb,EACAO,EACAlnB,EACAoF,EAAK,qBACLshB,EACAD,CACD,EAEKK,EAAqB,CAIzB,SAAU,CACR,CACE,MAAO,IACP,IAAK,GACN,EACD,CACE,MAAO,KACP,IAAK,IACN,EACD,CACE,cAAe,wBACf,IAAK,IAER,EACD,SAAUS,EACV,SAAUV,EAAoB,OAAO,CACnC,CACE,MAAO,KACP,IAAK,KACL,SAAUU,EACV,SAAUV,EAAoB,OAAO,CAAE,MAAM,CAAE,EAC/C,UAAW,EAEnB,CAAK,EACD,UAAW,CACZ,EAEKE,EAAuB,CAC3B,UAAW,WACX,MAAO,IAAMR,EAAmB,eAAiBK,EACjD,YAAa,GACb,IAAK,QACL,WAAY,GACZ,SAAUW,EACV,QAAS,iBACT,SAAU,CACR,CACE,MAAOlB,EACP,SAAUkB,EACV,UAAW,CACZ,EACD,CACE,MAAOX,EACP,YAAa,GACb,SAAU,CAAErmB,CAAY,EACxB,UAAW,CACZ,EAGD,CACE,MAAO,KACP,UAAW,CACZ,EAED,CACE,MAAO,IACP,eAAgB,GAChB,SAAU,CACRkmB,EACAC,EAEH,EAGD,CACE,UAAW,EACX,MAAO,GACR,EACD,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,SAAUa,EACV,UAAW,EACX,SAAU,CACRvnB,EACAoF,EAAK,qBACLqhB,EACAC,EACAQ,EAEA,CACE,MAAO,KACP,IAAK,KACL,SAAUK,EACV,UAAW,EACX,SAAU,CACR,OACAvnB,EACAoF,EAAK,qBACLqhB,EACAC,EACAQ,IAIP,EACDA,EACAlnB,EACAoF,EAAK,qBACLuhB,EAEH,EAED,MAAO,CACL,KAAM,MACN,QAAS,CACP,KACA,MACA,MACA,MACA,KACA,MACA,KACD,EACD,SAAUY,EACV,QAAS,KACT,iBAAkB,CAAE,oBAAqB,UAAY,EACrD,SAAU,CAAE,EAAC,OACXT,EACAC,EACAS,EACAX,EACA,CACEF,EACA,CACE,MAAO,4MACP,IAAK,IACL,SAAUY,EACV,SAAU,CACR,OACAL,EAEH,EACD,CACE,MAAO9hB,EAAK,SAAW,KACvB,SAAUmiB,CACX,EACD,CACE,MAAO,CAEL,wDACA,MACA,KACD,EACD,UAAW,CACT,EAAG,UACH,EAAG,eAGR,EACJ,EAGH,OAAAE,GAAiBR,kDCjlBjB,SAASS,EAAOtiB,EAAM,CACpB,MAAMuiB,EAAoB,CACxB,OACA,OACA,OACA,UACA,WACA,SACA,UACA,OACA,QACA,MACA,OACA,OACA,QACA,SACA,QACA,QACA,SACA,QACA,OACA,QACD,EACKC,EAAqB,CACzB,SACA,UACA,YACA,SACA,WACA,YACA,WACA,QACA,SACA,WACA,SACA,UACA,MACA,SACA,SACD,EACKC,EAAmB,CACvB,UACA,QACA,OACA,MACD,EACKC,EAAkB,CACtB,WACA,KACA,OACA,QACA,OACA,QACA,QACA,QACA,WACA,KACA,OACA,QACA,WACA,SACA,UACA,QACA,MACA,UACA,OACA,KACA,WACA,KACA,YACA,WACA,KACA,OACA,YACA,MACA,WACA,MACA,WACA,SACA,UACA,YACA,SACA,WACA,SACA,MACA,SACA,SACA,SACA,SACA,aACA,SACA,SACA,SACA,OACA,QACA,MACA,SACA,YACA,SACA,QACA,UACA,OACA,WACA,OACD,EACKC,EAAsB,CAC1B,MACA,QACA,MACA,YACA,QACA,QACA,KACA,aACA,SACA,OACA,MACA,SACA,QACA,OACA,OACA,OACA,MACA,SACA,MACA,UACA,KACA,KACA,UACA,UACA,SACA,SACA,MACA,YACA,UACA,MACA,OACA,QACA,OACA,OACD,EAEKlC,EAAW,CACf,QAASiC,EAAgB,OAAOC,CAAmB,EACnD,SAAUJ,EACV,QAASE,CACV,EACKtnB,EAAa6E,EAAK,QAAQA,EAAK,WAAY,CAAE,MAAO,qBAAsB,EAC1EshB,EAAU,CACd,UAAW,SACX,SAAU,CACR,CAAE,MAAO,eAAkB,EAC3B,CAAE,MAAO,iEAAsE,EAC/E,CAAE,MAAO,qFAA0F,CACpG,EACD,UAAW,CACZ,EACKsB,EAAa,CACjB,UAAW,SACX,MAAO,4BACP,UAAW,CACZ,EACKC,EAAkB,CACtB,UAAW,SACX,MAAO,KACP,IAAK,IACL,SAAU,CAAE,CAAE,MAAO,IAAM,EAC5B,EACKC,EAAwB9iB,EAAK,QAAQ6iB,EAAiB,CAAE,QAAS,KAAM,EACvE9C,EAAQ,CACZ,UAAW,QACX,MAAO,KACP,IAAK,KACL,SAAUU,CACX,EACKsC,EAAc/iB,EAAK,QAAQ+f,EAAO,CAAE,QAAS,KAAM,EACnDiD,EAAsB,CAC1B,UAAW,SACX,MAAO,MACP,IAAK,IAC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,aAAc,CACZ,UAAW,OACX,MAAO,4BAEV,GAGGwjB,EAAY,CAChB,IACA,OACA,UACA,UACA,QACA,QACA,IACA,aACA,OACA,SACA,SACA,UACA,OACA,OACA,KACA,MACA,UACA,MACA,MACA,KACA,KACA,KACA,WACA,aACA,SACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,SACA,OACA,IACA,SACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,OACA,OACA,MACA,SACA,KACA,WACA,SACA,IACA,UACA,IACA,QACA,OACA,UACA,SACA,SACA,OACA,SACA,UACA,MACA,QACA,QACA,KACA,WACA,QACA,KACA,QACA,OACA,KACA,KACA,MACA,OACD,EAEKC,EAAW,CACf,OACA,IACA,SACA,OACA,UACA,MACA,SACA,SACA,UACA,gBACA,sBACA,cACA,mBACA,oBACA,oBACA,UACA,iBACA,UACA,UACA,eACA,WACA,qBACA,SACA,eACA,iBACA,iBACA,OACA,SACA,UACA,QACA,OACA,OACA,UACA,WACA,OACA,OACA,MACA,WACA,QACA,gBACA,UACD,EAEKC,EAAO,CACX,GAAGF,EACH,GAAGC,CACJ,EAKKE,EAAiB,CACrB,YACA,cACA,eACA,QACA,cACA,cACA,sBACA,gBACA,eACA,eACA,gBACA,OACA,SACA,QACA,kBACA,aACA,cACA,iBACA,kBACA,UACA,uBACA,mBACA,yBACA,+BACA,aACA,OACA,YACA,SACA,QAEA,YACA,YACA,aACA,YACF,EAAE,KAAM,EAAC,QAAS,EAGZC,EAAiB,CACrB,SACA,WACA,QACA,UACA,UACA,UACA,UACA,MACA,WACA,OACA,QACA,UACA,QACA,cACA,gBACA,aACA,SACA,QACA,gBACA,eACA,MACA,OACA,eACA,QACA,gBACA,WACA,UACA,KACA,OACA,aACA,eACA,OACA,OACA,aACA,MACA,YACA,UACA,iBACA,eACA,mBACA,cACA,aACA,eACA,WACA,eACA,OACA,oBACA,YACA,aACA,WACA,QACA,OACA,QACA,SACA,gBACA,eACA,QACA,UACA,OACF,EAAE,KAAM,EAAC,QAAS,EAGZC,EAAkB,CACtB,QACA,WACA,SACA,MACA,aACA,eACA,aACA,gBACA,SACA,OACA,cACA,YACA,UACA,gBACF,EAAE,KAAM,EAAC,QAAS,EAEZC,EAAa,CACjB,eACA,gBACA,cACA,aACA,qBACA,MACA,YACA,kBACA,sBACA,qBACA,sBACA,4BACA,iBACA,uBACA,4BACA,aACA,sBACA,aACA,wBACA,wBACA,kBACA,mBACA,mBACA,oBACA,sBACA,oBACA,kBACA,iBACA,aACA,SACA,eACA,qBACA,mBACA,yBACA,yBACA,yBACA,qBACA,2BACA,2BACA,2BACA,qBACA,qBACA,gBACA,sBACA,4BACA,6BACA,sBACA,sBACA,kBACA,eACA,eACA,sBACA,sBACA,qBACA,sBACA,qBACA,gBACA,sBACA,oBACA,0BACA,0BACA,0BACA,sBACA,4BACA,4BACA,4BACA,sBACA,sBACA,cACA,oBACA,oBACA,oBACA,gBACA,eACA,wBACA,0BACA,qBACA,qBACA,qBACA,iBACA,0BACA,4BACA,eACA,aACA,mBACA,yBACA,0BACA,mBACA,mBACA,eACA,SACA,uBACA,aACA,aACA,cACA,eACA,eACA,KACA,KACA,eACA,cACA,QACA,OACA,YACA,YACA,QACA,sBACA,8BACA,gBACA,kBACA,eACA,eACA,cACA,aACA,cACA,oBACA,oBACA,oBACA,cACA,eACA,UACA,UACA,UACA,qBACA,oBACA,gBACA,MACA,YACA,aACA,SACA,YACA,UACA,oBACA,cACA,oBACA,OACA,eACA,YACA,SACA,OACA,aACA,iBACA,YACA,YACA,cACA,YACA,QACA,OACA,cACA,gBACA,OACA,eACA,cACA,wBACA,eACA,yBACA,YACA,mBACA,iBACA,eACA,aACA,iBACA,eACA,oBACA,0BACA,yBACA,uBACA,wBACA,0BACA,cACA,MACA,+BACA,6BACA,OACA,YACA,oBACA,iBACA,iBACA,cACA,kBACA,oBACA,WACA,WACA,eACA,iBACA,gBACA,sBACA,wBACA,qBACA,sBACA,SACA,UACA,OACA,oBACA,kBACA,mBACA,WACA,cACA,QACA,cACA,kBACA,oBACA,eACA,mBACA,qBACA,YACA,UACA,kBACA,gBACA,eACA,OACA,iBACA,iBACA,aACA,cACA,aACA,mBACA,sBACA,kBACA,SACA,aACA,aACA,eACA,OACA,SACA,eACA,mBACA,qBACA,gBACA,gBACA,oBACA,sBACA,cACA,eACA,aACA,QACA,OACA,cACA,mBACA,qBACA,qBACA,oBACA,qBACA,oBACA,YACA,iBACA,aACA,YACA,cACA,gBACA,cACA,YACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,WACA,YACA,WACA,YACA,SACA,OACA,SACA,aACA,kBACA,UACA,QACA,UACA,UACA,gBACA,iBACA,gBACA,gBACA,WACA,gBACA,aACA,aACA,UACA,gBACA,oBACA,sBACA,iBACA,iBACA,qBACA,uBACA,eACA,gBACA,cACA,mBACA,oBACA,oBACA,QACA,cACA,eACA,cACA,qBACA,iBACA,WACA,SACA,IACA,SACA,OACA,aACA,cACA,QACA,SACA,UACA,QACA,gBACA,sBACA,0BACA,4BACA,uBACA,uBACA,2BACA,6BACA,qBACA,sBACA,oBACA,iBACA,uBACA,2BACA,6BACA,wBACA,wBACA,4BACA,8BACA,sBACA,uBACA,qBACA,oBACA,mBACA,mBACA,kBACA,mBACA,kBACA,wBACA,eACA,gBACA,kBACA,aACA,eACA,SACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,eACA,QACA,WACA,MACA,WACA,eACA,cACA,aACA,iBACA,kBACA,uBACA,kBACA,wBACA,uBACA,2BACA,wBACA,4BACA,gBACA,sBACA,yBACA,sBACA,cACA,eACA,mBACA,gBACA,iBACA,cACA,iBACA,wBACA,0BACA,MACA,YACA,gBACA,mBACA,kBACA,aACA,mBACA,sBACA,sBACA,6BACA,YACA,eACA,gBA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A,UACA,SACA,aACD,EACD,IAAK,GACN,EACD,CAAE,MAAO,UAAU,EAEtB,EACD,CACE,UAAW,WACX,MAAO,MACP,IAAK,GACN,EACD,CACE,UAAW,WACX,MAAO,KACP,IAAK,GACN,EACD,CACE,UAAW,WACX,MAAO,KACP,IAAK,KAGV,EAGH+rB,UAAiBD,kDCpDjB,SAASE,EAAKrlB,EAAM,CAClB,MAAM3G,EAAQ2G,EAAK,MACbslB,EAAiB,qFAEjBC,EAAgBlsB,EAAM,OAC1B,uBAEA,8BAGImsB,EAA+BnsB,EAAM,OAAOksB,EAAe,UAAU,EAarEE,EAAgB,CACpB,oBAAqB,CACnB,WACA,WACA,cACD,EACD,oBAAqB,CACnB,OACA,OACD,EACD,QAAS,CACP,QACA,MACA,QACA,QACA,QACA,OACA,QACA,UACA,KACA,OACA,QACA,MACA,MACA,SACA,MACA,KACA,KACA,SACA,OACA,MACA,KACA,OACA,UACA,SACA,QACA,SACA,OACA,QACA,SACA,QACA,OACA,QACA,QACA,GAtDe,CACjB,UACA,SACA,UACA,SACA,UACA,YACA,QACA,OACD,CA8CE,EACD,SAAU,CACR,OACA,SACA,gBACA,cACA,cACA,gBACA,mBACA,iBACD,EACD,QAAS,CACP,OACA,QACA,MAEH,EACKC,EAAY,CAChB,UAAW,SACX,MAAO,YACR,EACKC,EAAa,CACjB,MAAO,KACP,IAAK,GACN,EACKC,EAAgB,CACpB5lB,EAAK,QACH,IACA,IACA,CAAE,SAAU,CAAE0lB,CAAW,EAC1B,EACD1lB,EAAK,QACH,UACA,QACA,CACE,SAAU,CAAE0lB,CAAW,EACvB,UAAW,GAEd,EACD1lB,EAAK,QAAQ,WAAYA,EAAK,gBAAgB,CAC/C,EACK+f,EAAQ,CACZ,UAAW,QACX,MAAO,MACP,IAAK,KACL,SAAU0F,CACX,EACKtC,EAAS,CACb,UAAW,SACX,SAAU,CACRnjB,EAAK,iBACL+f,CACD,EACD,SAAU,CACR,CACE,MAAO,IACP,IAAK,GACN,EACD,CACE,MAAO,IACP,IAAK,GACN,EACD,CACE,MAAO,IACP,IAAK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AClB,OAAON,CAAa,EACpB,OAAOK,CAAqB,CAChC,EAGH,OAAAE,GAAiBd,kDCtbjB,SAASe,EAAGpmB,EAAM,CAyEhB,MAAMygB,EAAW,CACf,QA5BU,CACV,QACA,OACA,OACA,QACA,WACA,UACA,QACA,OACA,cACA,MACA,OACA,KACA,OACA,KACA,SACA,YACA,MACA,UACA,QACA,SACA,SACA,SACA,SACA,OACA,KACD,EAGC,KAnDY,CACZ,OACA,OACA,YACA,aACA,QACA,UACA,UACA,OACA,QACA,QACA,QACA,SACA,QACA,SACA,SACA,SACA,MACA,OACA,UACA,MACD,EA+BC,QA3Ee,CACf,OACA,QACA,OACA,KACD,EAuEC,SAtEgB,CAChB,SACA,MACA,QACA,UACA,OACA,OACA,MACA,OACA,MACA,QACA,QACA,UACA,OACA,UACA,QACD,CAuDA,EACD,MAAO,CACL,KAAM,KACN,QAAS,CAAE,QAAU,EACrB,SAAUA,EACV,QAAS,KACT,SAAU,CACRzgB,EAAK,oBACLA,EAAK,qBACL,CACE,UAAW,SACX,SAAU,CACRA,EAAK,kBACLA,EAAK,iBACL,CACE,MAAO,IACP,IAAK,KAGV,EACD,CACE,UAAW,SACX,SAAU,CACR,CACE,MAAO,6DACP,UAAW,CACZ,EACD,CACE,MAAO,sFACP,UAAW,CACZ,EACD,CACE,MAAO,wBACP,UAAW,CACZ,EACD,CACE,MAAO,uCACP,UAAW,CACZ,EACD,CACE,MAAO,wDACP,UAAW,GAGhB,EACD,CAAE,MAAO,IACR,EACD,CACE,UAAW,WACX,cAAe,OACf,IAAK,cACL,WAAY,GACZ,SAAU,CACRA,EAAK,WACL,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,WAAY,GACZ,SAAUygB,EACV,QAAS,UAKlB,EAGH,OAAA4F,GAAiBD,kDCnJjB,SAASE,EAAQtmB,EAAM,CACrB,MAAM3G,EAAQ2G,EAAK,MACbumB,EAAW,yBACjB,MAAO,CACL,KAAM,UACN,QAAS,CAAE,KAAO,EAClB,iBAAkB,GAClB,kBAAmB,GACnB,SAAU,CACR,QAAS,CACP,QACA,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OACA,SACA,UACA,UACA,SACA,MACA,SACA,WACA,SACA,YACA,SACA,UACA,SACA,WACA,UACA,KACA,SACA,QACA,UACA,MACD,EA0BC,QAnBe,CACf,QACA,OACA,MACD,EAgBC,KAdY,CACZ,OACA,UACA,OACA,QACA,MACA,OACA,QACA,QACD,EAMC,SA1BgB,CAChB,QACA,MACD,CAwBA,EAEKoH,EAAa,CACjB,UAAW,OACX,MAAO,IAAMF,EACb,SAAU,CACR,CACE,MAAO,KACP,IAAK,KACL,SAAU,CAAE,MAAQ,GAGzB,EACK3B,EAAS,CACb,UAAW,SACX,MAAO,KACP,IAAK,KACL,SAAUvF,EACV,UAAW,EACX,SAAU,CAAEzgB,EAAK,oBAAsB,EACvC,WAAY,EACb,EAED,MAAO,CACL,KAAM,OACN,QAAS,CAAE,KAAO,EAClB,SAAUygB,EACV,QAAS,QACT,SAAU,CACRzgB,EAAK,QACH,UACA,OACA,CACE,UAAW,EACX,SAAU,CACR,CAEE,MAAO,OACP,UAAW,CACZ,EACD,CACE,UAAW,SACX,MAAO,eAId,EAED,CACE,MAAO,wBACP,SAAU,SACV,UAAW,CACZ,EACDA,EAAK,oBACLA,EAAK,qBACL,CACE,MAAO,MACP,IAAK,MACL,UAAW,SACX,SAAU,CAAEA,EAAK,gBAAgB,CAClC,EACDA,EAAK,iBACLA,EAAK,kBACL,CACE,MAAO,CACL,oDACA,MACA2nB,CACD,EACD,UAAW,CACT,EAAG,UACH,EAAG,cAEN,EACD,CAEE,MAAO,aACP,MAAO,SACR,EACD,CACE,MAAO,CACLtuB,EAAM,OAAO,WAAYsuB,CAAa,EACtC,MACAA,EACA,MACA,QACD,EACD,UAAW,CACT,EAAG,OACH,EAAG,WACH,EAAG,WAEN,EACD,CACE,MAAO,CACL,SACA,MACAA,CACD,EACD,UAAW,CACT,EAAG,UACH,EAAG,aACJ,EACD,SAAU,CACR3B,EACAhmB,EAAK,oBACLA,EAAK,qBAER,EACD,CAGE,cAAe,wBACf,UAAW,CACZ,EACD,CACE,MAAO,CACL,MAAQ4nB,EAAmB,QAC3B5nB,EAAK,oBACL,WACD,EACD,UAAW,CAAE,EAAG,gBAAkB,EAClC,SAAUygB,EACV,SAAU,CACR,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,SAAUA,EACV,UAAW,EACX,SAAU,CACRoH,EACA7nB,EAAK,iBACLA,EAAK,kBACLsnB,EACAtnB,EAAK,qBAER,EACDA,EAAK,oBACLA,EAAK,qBAER,EACDsnB,EACAO,EAEH,EAGH,OAAAC,GAAiBJ,kDCjSjB,MAAMjuB,EAAW,2BACXgnB,EAAW,CACf,KACA,KACA,KACA,KACA,MACA,QACA,UACA,MACA,MACA,WACA,KACA,SACA,OACA,OACA,QACA,QACA,aACA,OACA,QACA,OACA,UACA,MACA,SACA,WACA,SACA,SACA,MACA,QACA,QACA,QAIA,WACA,QACA,QACA,SACA,SACA,OACA,SACA,SACD,EACKC,EAAW,CACf,OACA,QACA,OACA,YACA,MACA,UACD,EAGKU,EAAQ,CAEZ,SACA,WACA,UACA,SAEA,OACA,OACA,SACA,SAEA,SACA,SAEA,QACA,eACA,eACA,YACA,aACA,oBACA,aACA,aACA,cACA,cACA,gBACA,iBAEA,MACA,MACA,UACA,UAEA,cACA,oBACA,UACA,WACA,OAEA,UACA,YACA,oBACA,gBAEA,UACA,QAEA,OAEA,aACD,EAEK2G,EAAc,CAClB,QACA,YACA,gBACA,aACA,iBACA,cACA,YACA,UACD,EAEKC,EAAmB,CACvB,cACA,aACA,gBACA,eAEA,UACA,UAEA,OACA,WACA,QACA,aACA,WACA,YACA,qBACA,YACA,qBACA,SACA,UACD,EAEKC,EAAqB,CACzB,YACA,OACA,QACA,UACA,SACA,WACA,eACA,iBACA,SACA,QACD,EAEKC,EAAY,GAAG,OACnBF,EACA5G,EACA2G,CACD,EAWD,SAASI,EAAWnoB,EAAM,CACxB,MAAM3G,EAAQ2G,EAAK,MAQbooB,EAAgB,CAACrvB,GAAO,CAAE,MAAAsvB,EAAK,IAAO,CAC1C,MAAMC,GAAM,KAAOvvB,GAAM,CAAC,EAAE,MAAM,CAAC,EAEnC,OADYA,GAAM,MAAM,QAAQuvB,GAAKD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,OACA,CACE,UAAW,EACX,SAAU,CACR,CACE,UAAW,SACX,MAAO,eAId,EACDA,EAAK,oBACL8qB,EACAL,EACAC,EACAE,EACA/C,EACA,CACE,UAAW,WACX,cAAe,MACf,IAAK,QACL,YAAa,GACb,WAAY,GACZ,SAAUpH,EACV,UAAW,EACX,SAAU,CACR,CACE,MAAOzgB,EAAK,oBAAsB,UAClC,YAAa,GACb,UAAW,EACX,SAAU,CAAEA,EAAK,qBAAqB,CACvC,EACD,CACE,UAAW,OACX,MAAO,IACP,IAAK,IACL,SAAU,UACV,UAAW,CACZ,EACD,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,WAAY,GACZ,SAAUygB,EACV,UAAW,EACX,SAAU,CACR,CACE,MAAO,IACP,IAAK,SACL,eAAgB,GAChB,SAAU,CACRsK,EACA/qB,EAAK,oBACL8qB,CACD,EACD,UAAW,CACZ,EACD9qB,EAAK,oBACL8qB,EACAF,EACA/C,EACA1E,EACAnjB,EAAK,cAER,EACD8qB,EAEH,EACD,CACE,MAAO,CACL,wBACA,MACA9qB,EAAK,mBACN,EACD,WAAY,CACV,EAAG,aACJ,EACD,SAAU,wBACV,IAAK,WACL,WAAY,GACZ,QAAS,qBACT,SAAU,CACR,CAAE,cAAe,+CAAiD,EAClEA,EAAK,sBACL,CACE,UAAW,OACX,MAAO,IACP,IAAK,IACL,aAAc,GACd,WAAY,GACZ,UAAW,CACZ,EACD,CACE,UAAW,OACX,MAAO,UACP,IAAK,eACL,aAAc,GACd,UAAW,EACZ,EACD4qB,EACA/C,EAEH,EACD1E,EACA,CACE,UAAW,OACX,MAAO,kBACP,IAAK,IACL,QAAS;AAAA,CACV,EACD0H,EAEH,EAGH,OAAAI,GAAiBT,kDC7RjB,MAAMjvB,EAASyE,IACN,CACL,UAAW,CACT,MAAO,OACP,MAAO,YACR,EACD,cAAeA,EAAK,qBACpB,SAAU,CACR,MAAO,SACP,MAAO,iDACR,EACD,kBAAmB,CACjB,UAAW,WACX,MAAO,cACR,EACD,wBAAyB,CACvB,MAAO,gBACP,MAAO,KACP,IAAK,KACL,QAAS,IACT,SAAU,CACRA,EAAK,iBACLA,EAAK,kBAER,EACD,gBAAiB,CACf,MAAO,SACP,MAAOA,EAAK,UAAY,kGASxB,UAAW,CACZ,EACD,aAAc,CACZ,UAAW,OACX,MAAO,4BAEV,GAGGwjB,EAAY,CAChB,IACA,OACA,UACA,UACA,QACA,QACA,IACA,aACA,OACA,SACA,SACA,UACA,OACA,OACA,KACA,MACA,UACA,MACA,MACA,KACA,KACA,KACA,WACA,aACA,SACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,SACA,OACA,IACA,SACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,OACA,OACA,MACA,SACA,KACA,WACA,SACA,IACA,UACA,IACA,QACA,OACA,UACA,SACA,SACA,OACA,SACA,UACA,MACA,QACA,QACA,KACA,WACA,QACA,KACA,QACA,OACA,KACA,KACA,MACA,OACD,EAEKC,EAAW,CACf,OACA,IACA,SACA,OACA,UACA,MACA,SACA,SACA,UACA,gBACA,sBACA,cACA,mBACA,oBACA,oBACA,UACA,iBACA,UACA,UACA,eACA,WACA,qBACA,SACA,eACA,iBACA,iBACA,OACA,SACA,UACA,QACA,OACA,OACA,UACA,WACA,OACA,OACA,MACA,WACA,QACA,gBACA,UACD,EAEKC,EAAO,CACX,GAAGF,EACH,GAAGC,CACJ,EAKKE,EAAiB,CACrB,YACA,cACA,eACA,QACA,cACA,cACA,sBACA,gBACA,eACA,eACA,gBACA,OACA,SACA,QACA,kBACA,aACA,cACA,iBACA,kBACA,UACA,uBACA,mBACA,yBACA,+BACA,aACA,OACA,YACA,SACA,QAEA,YACA,YACA,aACA,YACF,EAAE,KAAM,EAAC,QAAS,EAGZC,EAAiB,CACrB,SACA,WACA,QACA,UACA,UACA,UACA,UACA,MACA,WACA,OACA,QACA,UACA,QACA,cACA,gBACA,aACA,SACA,QACA,gBACA,eACA,MACA,OACA,eACA,QACA,gBACA,WACA,UACA,KACA,OACA,aACA,eACA,OACA,OACA,aACA,MACA,YACA,UACA,iBACA,eACA,mBACA,cACA,aACA,eACA,WACA,eACA,OACA,oBACA,YACA,aACA,WACA,QACA,OACA,QACA,SACA,gBACA,eACA,QACA,UACA,OACF,EAAE,KAAM,EAAC,QAAS,EAGZC,EAAkB,CACtB,QACA,WACA,SACA,MACA,aACA,eACA,aACA,gBACA,SACA,OACA,cACA,YACA,UACA,gBACF,EAAE,KAAM,EAAC,QAAS,EAEZC,EAAa,CACjB,eACA,gBACA,cACA,aACA,qBACA,MACA,YACA,kBACA,sBACA,qBACA,sBACA,4BACA,iBACA,uBACA,4BACA,aACA,sBACA,aACA,wBACA,wBACA,kBACA,mBACA,mBACA,oBACA,sBACA,oBACA,kBACA,iBACA,aACA,SACA,eACA,qBACA,mBACA,yBACA,yBACA,yBACA,qBACA,2BACA,2BACA,2BACA,qBACA,qBACA,gBACA,sBACA,4BACA,6BACA,sBACA,sBACA,kBACA,eACA,eACA,sBACA,sBACA,qBACA,sBACA,qBACA,gBACA,sBACA,oBACA,0BACA,0BACA,0BACA,sBACA,4BACA,4BACA,4BACA,sBACA,sBACA,cACA,oBACA,oBACA,oBACA,gBACA,eACA,wBACA,0BACA,qBACA,qBACA,qBACA,iBACA,0BACA,4BACA,eACA,aACA,mBACA,yBACA,0BACA,mBACA,mBACA,eACA,SACA,uBACA,aACA,aACA,cACA,eACA,eACA,KACA,KACA,eACA,cACA,QACA,OACA,YACA,YACA,QACA,sBACA,8BACA,gBACA,kBACA,eACA,eACA,cACA,aACA,cACA,oBACA,oBACA,oBACA,cACA,eACA,UACA,UACA,UACA,qBACA,oBACA,gBACA,MACA,YACA,aACA,SACA,YACA,UACA,oBACA,cACA,oBACA,OACA,eACA,YACA,SACA,OACA,aACA,iBACA,YACA,YACA,cACA,YACA,QACA,OACA,cACA,gBACA,OACA,eACA,cACA,wBACA,eACA,yBACA,YACA,mBACA,iBACA,eACA,aACA,iBACA,eACA,oBACA,0BACA,yBACA,uBACA,wBACA,0BACA,cACA,MACA,+BACA,6BACA,OACA,YACA,oBACA,iBACA,iBACA,cACA,kBACA,oBACA,WACA,WACA,eACA,iBACA,gBACA,sBACA,wBACA,qBACA,sBACA,SACA,UACA,OACA,oBACA,kBACA,mBACA,WACA,cACA,QACA,cACA,kBACA,oBACA,eACA,mBACA,qBACA,YACA,UACA,kBACA,gBACA,eACA,OACA,iBACA,iBACA,aACA,cACA,aACA,mBACA,sBACA,kBACA,SACA,aACA,aACA,eACA,OACA,SACA,eACA,mBACA,qBACA,gBACA,gBACA,oBACA,sBACA,cACA,eACA,aACA,QACA,OACA,cACA,mBACA,qBACA,qBACA,oBACA,qBACA,oBACA,YACA,iBACA,aACA,YACA,cACA,gBACA,cACA,YACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,WACA,YACA,WACA,YACA,SACA,OACA,SACA,aACA,kBACA,UACA,QACA,UACA,UACA,gBACA,iBACA,gBACA,gBACA,WACA,gBACA,aACA,aACA,UACA,gBACA,oBACA,sBACA,iBACA,iBACA,qBACA,uBACA,eACA,gBACA,cACA,mBACA,oBACA,oBACA,QACA,cACA,eACA,cACA,qBACA,iBACA,WACA,SACA,IACA,SACA,OACA,aACA,cACA,QACA,SACA,UACA,QACA,gBACA,sBACA,0BACA,4BACA,uBACA,uBACA,2BACA,6BACA,qBACA,sBACA,oBACA,iBACA,uBACA,2BACA,6BACA,wBACA,wBACA,4BACA,8BACA,sBACA,uBACA,qBACA,oBACA,mBACA,mBACA,kBACA,mBACA,kBACA,wBACA,eACA,gBACA,kBACA,aACA,eACA,SACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,eACA,QACA,WACA,MACA,WACA,eACA,cACA,aACA,iBACA,kBACA,uBACA,kBACA,wBACA,uBACA,2BACA,wBACA,4BACA,gBACA,sBACA,yBACA,sBACA,cACA,eACA,mBACA,gBACA,iBACA,c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AK,iBACL2qB,EAEH,EAEK+B,EAAO,CACX,UAAW,WACX,MAAO,eACP,IAAK,KACL,SAAU,CAAE,SACR,gPAGgE,EACpE,SAAU,CAAE/B,CAAQ,CACrB,EAEKgC,EAAa,CAAE,MAAO,IAAM3sB,EAAK,oBAAsB,iBAAmB,EAE1E4sB,EAAO,CACX,UAAW,OACX,MAAO,YACP,IAAK,IACL,SAAU,CACR,SAAU,UACV,QAAS,SAEZ,EAEKC,EAAS,CACb,UAAW,UACX,MAAO,WACP,IAAK,IACL,SAAU,CAAElC,CAAQ,CACrB,EACD,MAAO,CACL,KAAM,WACN,QAAS,CACP,KACA,MACA,MACD,EACD,SAAU,CACR,SAAU,SACV,QAAS,2HAEV,EACD,SAAU,CACR3qB,EAAK,kBACL2qB,EACA1K,EACAyM,EACAC,EACAC,EACAC,EAEH,EAGH,OAAAC,GAAiBL,kDC7EjB,SAASM,EAAK/sB,EAAM,CAClB,MAAM3G,EAAQ2G,EAAK,MACbygB,EAAW,CACf,MACA,SACA,QACA,MACA,QACA,OACA,UACA,QACA,QACA,SACA,QACA,QACA,QACA,OACA,QACA,MACA,SACA,QACA,QACA,WACA,UACA,WACA,MACA,QACA,WACA,UACA,UACA,SACA,MACA,KACA,OACA,OACA,OACA,QACA,WACA,aACA,YACA,cACA,WACA,aACA,MACA,OACA,OACA,SACA,OACA,MACA,QACA,QACA,SACA,QACA,MACA,UACA,OACA,SACA,WACA,OACA,WACA,WACA,WACA,gBACA,gBACA,aACA,WACA,eACA,eACA,YACA,cACA,UACA,cACA,iBACA,mBACA,cACA,WACA,WACA,WACA,gBACA,gBACA,aACA,cACA,aACA,QACA,OACA,SACA,OACA,OACA,KACA,MACA,KACA,QACA,MACA,QACA,OACA,OACA,OACA,OACA,KACA,UACA,SACA,OACA,SACA,QACA,YACA,MACA,QACA,KACA,KACA,MACA,SACA,QACA,SACA,SACA,SACA,SACA,KACA,KACA,OACA,KACA,MACA,MACA,OACA,UACA,KACA,MACA,MACA,OACA,UACA,OACA,MACA,MACA,QACA,SACA,YACA,OACA,MACA,KACA,YACA,KACA,KACA,OACA,OACA,UACA,WACA,WACA,WACA,OACA,OACA,MACA,SACA,UACA,QACA,SACA,UACA,YACA,SACA,QACA,MACA,SACA,OACA,UACA,SACA,SACA,SACA,QACA,OACA,WACA,aACA,YACA,UACA,cACA,cACA,WACA,aACA,aACA,QACA,SACA,SACA,UACA,WACA,WACA,MACA,QACA,SACA,aACA,OACA,SACA,QACA,UACA,OACA,QACA,OACA,QACA,QACA,MACA,SACA,UACA,UACA,UACA,UACA,UACA,SACA,WACA,OACA,UACA,MACA,OACA,OACA,QACA,KACA,WACA,KACA,UACA,QACA,QACA,SACA,SACA,SACA,UACA,QACA,QACA,MACA,QACA,SACA,MACA,OACA,UACA,YACA,OACA,OACA,QACA,QACA,MACA,MACA,KACD,EAGKuM,EAAkB,uBAClBC,EAAgB,CACpB,SAAU,SACV,QAASxM,EAAS,KAAK,GAAG,CAC3B,EACKV,EAAQ,CACZ,UAAW,QACX,MAAO,UACP,IAAK,MACL,SAAUkN,CACX,EACKC,EAAS,CACb,MAAO,OACP,IAAK,IAEN,EACKC,EAAO,CACX,MAAO,OACP,MAAO,yBACR,EACKtN,EAAM,CACV,MAAO,WACP,SAAU,CACR,CAAE,MAAO,MAAQ,EACjB,CAAE,MAAOxmB,EAAM,OACb,sDAGA,wBAED,EACD,CAEE,MAAO,0BACP,UAAW,EAEd,EACD,SAAU,CAAE8zB,CAAM,CACnB,EACKpH,EAAS,CACb,UAAW,SACX,SAAU,CAIR,CAAE,MAAO,oBAAsB,EAE/B,CAAE,MAAO,iDAAmD,EAE5D,CAAE,MAAO,mBAAqB,EAC9B,CAAE,MAAO,gCAAkC,EAC3C,CAAE,MAAO,oBAAsB,CAChC,EACD,UAAW,CACZ,EACKqH,EAAkB,CACtBptB,EAAK,iBACL+f,EACAF,CACD,EACKwN,EAAe,CACnB,IACA,KACA,KACA,KACA,IACA,IACA,GACD,EAMKC,EAAmB,CAACr2B,EAAQs2B,EAAMC,EAAQ,QAAU,CACxD,MAAMC,EAAUD,IAAU,MACtBA,EACAn0B,EAAM,OAAOm0B,EAAOD,CAAI,EAC5B,OAAOl0B,EAAM,OACXA,EAAM,OAAO,MAAOpC,EAAQ,GAAG,EAC/Bs2B,EACA,oBACAE,EACA,oBACAD,EACAR,CACD,CACF,EAMKU,EAAY,CAACz2B,EAAQs2B,EAAMC,IACxBn0B,EAAM,OACXA,EAAM,OAAO,MAAOpC,EAAQ,GAAG,EAC/Bs2B,EACA,oBACAC,EACAR,CACD,EAEGW,EAAwB,CAC5B9N,EACA7f,EAAK,kBACLA,EAAK,QACH,OACA,OACA,CAAE,eAAgB,EAAI,CACvB,EACDktB,EACA,CACE,UAAW,SACX,SAAUE,EACV,SAAU,CACR,CACE,MAAO,kBACP,IAAK,MACL,UAAW,CACZ,EACD,CACE,MAAO,kBACP,IAAK,MACL,UAAW,CACZ,EACD,CACE,MAAO,kBACP,IAAK,MACL,UAAW,CACZ,EACD,CACE,MAAO,kBACP,IAAK,MACL,UAAW,CACZ,EACD,CACE,MAAO,gBACP,IAAK,IACL,UAAW,CACZ,EACD,CACE,MAAO,UACP,IAAK,IACL,UAAW,CACZ,EACD,CACE,MAAO,IACP,IAAK,IACL,SAAU,CAAEptB,EAAK,gBAAgB,CAClC,EACD,CACE,MAAO,IACP,IAAK,GACN,EACD,CACE,MAAO,IACP,IAAK,IACL,SAAU,CAAEA,EAAK,gBAAgB,CAClC,EACD,CACE,MAAO,UACP,UAAW,CACZ,EACD,CACE,MAAO,eACP,UAAW,GAGhB,EACD+lB,EACA,CACE,MAAO,WAAa/lB,EAAK,eAAiB,gDAC1C,SAAU,kCACV,UAAW,EACX,SAAU,CACRA,EAAK,kBACL,CACE,UAAW,SACX,SAAU,CAER,CAAE,MAAOstB,EAAiB,SAAUj0B,EAAM,OAAO,GAAGg0B,EAAc,CAAE,QAAS,EAAI,CAAE,CAAC,CAAG,EAEvF,CAAE,MAAOC,EAAiB,SAAU,MAAO,KAAK,CAAG,EACnD,CAAE,MAAOA,EAAiB,SAAU,MAAO,KAAK,CAAG,EACnD,CAAE,MAAOA,EAAiB,SAAU,MAAO,KAAK,CAAC,CAClD,EACD,UAAW,CACZ,EACD,CACE,UAAW,SACX,SAAU,CACR,CAGE,MAAO,aACP,UAAW,CACZ,EAED,CAAE,MAAOI,EAAU,YAAa,KAAM,IAAI,CAAG,EAE7C,CAAE,MAAOA,EAAU,OAAQr0B,EAAM,OAAO,GAAGg0B,EAAc,CAAE,QAAS,GAAM,EAAG,IAAI,CAAG,EAEpF,CAAE,MAAOK,EAAU,OAAQ,KAAM,IAAI,CAAG,EACxC,CAAE,MAAOA,EAAU,OAAQ,KAAM,IAAI,CAAG,EACxC,CAAE,MAAOA,EAAU,OAAQ,KAAM,IAAI,CAAC,IAI7C,EACD,CACE,UAAW,WACX,cAAe,aACf,IAAK,uBACL,WAAY,GACZ,UAAW,EACX,SAAU,CAAE1tB,EAAK,WAAYmtB,CAAI,CAClC,EACD,CACE,UAAW,QACX,cAAe,QACf,IAAK,OACL,WAAY,GACZ,UAAW,EACX,SAAU,CAAEntB,EAAK,WAAYmtB,EAAMpH,CAAM,CAC1C,EACD,CACE,MAAO,UACP,UAAW,CACZ,EACD,CACE,MAAO,aACP,IAAK,YACL,YAAa,cACb,SAAU,CACR,CACE,MAAO,QACP,IAAK,IACL,UAAW,YAIlB,EACD,OAAAhG,EAAM,SAAW4N,EACjBT,EAAO,SAAWS,EAEX,CACL,KAAM,OACN,QAAS,CACP,KACA,IACD,EACD,SAAUV,EACV,SAAUU,CACX,EAGH,OAAAC,GAAiBb,kDC/ejB,SAASc,EAAW7tB,EAAM,CACxB,MAAM8tB,EAAY,CAChB,UAAW,WACX,MAAO,sEACR,EACKC,EAAgB,yBAuJhBtN,EAAW,CACf,oBAAqB,CACnB,OACA,OACD,EACD,SAAUsN,EACV,QA3IU,CACV,QACA,SACA,SACA,UACA,QACA,SACA,MACA,QACA,WACA,SACA,UACA,KACA,KACA,SACA,OACA,OACA,OACA,QACA,SACA,MACA,OACA,UACA,WACA,WACA,WACA,SACA,WACA,SACA,WACA,SACA,YACA,OACA,gBACA,KACA,SACA,YACA,WACA,WACA,SACA,OACA,OACA,KACA,MACA,QACA,SACA,QACA,SACA,WACA,SACA,UACA,kBACA,WACA,aACA,UACA,OACA,YACA,OACA,SACA,SACA,WACA,mBACA,cACA,WACA,YACA,YACA,YACA,UACA,WACA,UACA,QACA,uBACA,WACA,oBACA,oBACA,kBACA,cACA,kBACA,WACA,WACA,YACA,oBACA,eACA,sBACA,gBACA,SACA,SACA,SACA,oBACA,UACA,WACA,mBACA,kBACA,QACA,eACA,4BACA,iBACA,oBACA,2BACA,YACA,eACA,gBACA,UACA,aACA,uBACA,0BACA,wBACA,uBACA,gBACA,mBACA,YACA,aACA,gBACA,iBACA,eACD,EAyBC,QAxBe,CACf,QACA,OACA,QACA,OACA,MACA,MACA,KACA,MACD,EAgBC,SAfgB,CAChB,kBACA,mBACA,gBACA,iBACA,eACD,EAUC,KA/JY,CACZ,MACA,QACA,OACA,WACA,SACA,QACA,OACA,SACA,UACA,UACA,OACA,OACA,OACA,OACA,OACD,CAgJA,EACKC,EAAiB,CACrB,SAAUD,EACV,QAAS,CACP,aACA,SACA,YACA,kBAEH,EACD,MAAO,CACL,KAAM,cACN,QAAS,CACP,KACA,OACA,QACA,UACA,eACD,EACD,SAAUtN,EACV,QAAS,KACT,SAAU,CACRqN,EACA9tB,EAAK,oBACLA,EAAK,qBACLA,EAAK,cACLA,EAAK,kBACLA,EAAK,iBACL,CACE,UAAW,SACX,SAAU,CACR,CACE,MAAO,KACP,IAAK,IACL,QAAS,MACT,SAAU,CAAEA,EAAK,gBAAgB,GAGtC,EACD,CACE,UAAW,OACX,MAAO,eACP,IAAK,IACL,SAAU,CAAE,QACR,gFACiC,EACrC,SAAU,CACR,CACE,MAAO,OACP,UAAW,CACZ,EACDA,EAAK,QAAQA,EAAK,kBAAmB,CAAE,UAAW,SAAU,EAC5D,CACE,UAAW,SACX,MAAO,QACP,IAAK,IACL,QAAS,KACV,EACDA,EAAK,oBACLA,EAAK,qBAER,EACD,CACE,UAAW,QACX,MAAO,IAAMguB,EAAe,QAAQ,KAAK,GAAG,EAAI,OAChD,IAAK,SACL,WAAY,GACZ,SAAUA,EACV,SAAU,CAAEhuB,EAAK,qBAAqB,CACvC,EACD,CACE,MAAO,MAAQA,EAAK,oBACpB,UAAW,GAGhB,EAGH,OAAAiuB,GAAiBJ,kDChPjB,SAASK,EAAIluB,EAAM,CACjB,MAAM3G,EAAQ2G,EAAK,MAGbmuB,EAAe,yBACf10B,EAAWJ,EAAM,OACrB,2CACA80B,CAAY,EAERC,EAA4B/0B,EAAM,OACtC,yEACA80B,CAAY,EACRxD,EAAW,CACf,MAAO,WACP,MAAO,OAASlxB,CACjB,EACK8nB,EAAe,CACnB,MAAO,OACP,SAAU,CACR,CAAE,MAAO,SAAU,UAAW,EAAI,EAClC,CAAE,MAAO,MAAQ,EAEjB,CAAE,MAAO,MAAO,UAAW,EAAK,EAChC,CAAE,MAAO,KAAO,EAEnB,EACKxB,EAAQ,CACZ,MAAO,QACP,SAAU,CACR,CAAE,MAAO,OAAS,EAClB,CACE,MAAO,OACP,IAAK,MAGV,EACKsO,EAAgBruB,EAAK,QAAQA,EAAK,iBAAkB,CAAE,QAAS,KAAO,EACtEsuB,EAAgBtuB,EAAK,QAAQA,EAAK,kBAAmB,CACzD,QAAS,KACT,SAAUA,EAAK,kBAAkB,SAAS,OAAO+f,CAAK,CAC1D,CAAG,EAEKwO,EAAU,CACd,MAAO,+BACP,IAAK,gBACL,SAAUvuB,EAAK,kBAAkB,SAAS,OAAO+f,CAAK,EACtD,WAAY,CAAC9lB,EAAGC,IAAS,CAAEA,EAAK,KAAK,YAAcD,EAAE,CAAC,GAAKA,EAAE,CAAC,CAAI,EAClE,SAAU,CAACA,EAAGC,IAAS,CAAMA,EAAK,KAAK,cAAgBD,EAAE,CAAC,GAAGC,EAAK,YAAa,CAAG,CACnF,EAEKs0B,EAASxuB,EAAK,kBAAkB,CACpC,MAAO,qBACP,IAAK,eACT,CAAG,EAEKyuB,EAAa;AAAA,GACbtL,EAAS,CACb,MAAO,SACP,SAAU,CACRmL,EACAD,EACAE,EACAC,EAEH,EACKzI,EAAS,CACb,MAAO,SACP,SAAU,CACR,CAAE,MAAO,6BAA+B,EACxC,CAAE,MAAO,+BAAiC,EAC1C,CAAE,MAAO,2CAA6C,EAEtD,CAAE,MAAO,4EAA4E,CACtF,EACD,UAAW,CACZ,EACKrF,EAAW,CACf,QACA,OACA,MACD,EACKgO,EAAM,CAGV,YACA,UACA,WACA,eACA,2BACA,WACA,aACA,gBACA,YAGA,MACA,OACA,OACA,UACA,eACA,QACA,UACA,eAMA,QACA,WACA,MACA,KACA,SACA,OACA,UACA,QACA,WACA,OACA,QACA,QACA,QACA,QACA,WACA,UACA,UACA,KACA,SACA,OACA,SACA,QACA,aACA,SACA,aACA,QACA,YACA,WACA,OACA,OACA,UACA,QACA,UACA,QACA,MACA,UACA,OACA,SACA,OACA,KACA,aACA,aACA,YACA,MACA,UACA,YACA,QACA,WACA,OACA,UACA,QACA,MACA,QACA,SACA,KACA,UACA,YACA,SACA,WACA,OACA,SACA,SACA,SACA,QACA,QACA,MACA,QACA,MACA,MACA,OACA,QACA,MACA,OACD,EAEKxG,EAAY,CAGhB,UACA,iBACA,qBACA,kBACA,gBACA,cACA,iBACA,2BACA,yBACA,kBACA,yBACA,eACA,YACA,oBACA,sBACA,kBACA,gBACA,iBACA,YACA,qBACA,iBACA,eACA,mBACA,2BACA,mBACA,kBACA,gBACA,iBACA,mBACA,mBACA,uBACA,sBACA,gBACA,oBACA,iBACA,aACA,iBACA,yBACA,2BACA,kCACA,6BACA,0BACA,oBACA,4BACA,yBACA,wBACA,gBACA,mBACA,mBACA,sBACA,cACA,gBACA,gBACA,UACA,aACA,aACA,mBACA,cACA,mBACA,WACA,WACA,aACA,oBACA,YACA,qBACA,2BACA,sBAGA,cACA,aACA,UACA,QACA,YACA,WACA,oBACA,eACA,aACA,YACA,cACA,WACA,gBACA,UAGA,YACA,yBACA,SACA,kBACA,OACA,SACA,UACD,EAsBKzH,EAAW,CACf,QAASiO,EACT,SAhBgBC,GAAU,CAE1B,MAAMh4B,EAAS,CAAE,EACjB,OAAAg4B,EAAM,QAAQ7qB,GAAQ,CACpBnN,EAAO,KAAKmN,CAAI,EACZA,EAAK,YAAa,IAAKA,EACzBnN,EAAO,KAAKmN,EAAK,aAAa,EAE9BnN,EAAO,KAAKmN,EAAK,aAAa,CAEtC,CAAK,EACMnN,CACR,GAImB+pB,CAAQ,EAC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,EACD,CACE,MAAO,QACP,SAAU,CACR,CACE,cAAe,OACf,QAAS,OACV,EACD,CACE,cAAe,wBACf,QAAS,SAEZ,EACD,UAAW,EACX,IAAK,KACL,WAAY,GACZ,SAAU,CACR,CAAE,cAAe,oBAAsB,EACvC/lB,EAAK,sBAER,EAID,CACE,cAAe,YACf,UAAW,EACX,IAAK,IACL,QAAS,OACT,SAAU,CAAEA,EAAK,QAAQA,EAAK,sBAAuB,CAAE,MAAO,cAAe,CAAC,CAC/E,EACD,CACE,cAAe,MACf,UAAW,EACX,IAAK,IACL,SAAU,CAER,CACE,MAAO,0BACP,MAAO,SACR,EAEDA,EAAK,sBAER,EACDmjB,EACA4C,EAEH,EAGH,OAAAqJ,GAAiBlB,kDC5lBjB,SAASmB,EAAYrvB,EAAM,CACzB,MAAO,CACL,KAAM,eACN,YAAa,MACb,SAAU,CACR,CACE,MAAO,cACP,IAAK,MACL,YAAa,MACb,SAAU,CAGR,CACE,MAAO,OACP,IAAK,OACL,KAAM,EACP,EACD,CACE,MAAO,KACP,IAAK,IACL,KAAM,EACP,EACD,CACE,MAAO,KACP,IAAK,IACL,KAAM,EACP,EACDA,EAAK,QAAQA,EAAK,iBAAkB,CAClC,QAAS,KACT,UAAW,KACX,SAAU,KACV,KAAM,EAClB,CAAW,EACDA,EAAK,QAAQA,EAAK,kBAAmB,CACnC,QAAS,KACT,UAAW,KACX,SAAU,KACV,KAAM,EACP,KAIR,EAGH,OAAAsvB,GAAiBD,kDC9CjB,SAAS3qB,EAAU1E,EAAM,CACvB,MAAO,CACL,KAAM,aACN,QAAS,CACP,OACA,KACD,EACD,kBAAmB,EACpB,EAGH,OAAAuvB,GAAiB7qB,kDCXjB,SAAS8qB,EAAOxvB,EAAM,CACpB,MAAM3G,EAAQ2G,EAAK,MACbvG,EAAW,WAAoC,2CAC/Cg2B,EAAiB,CACrB,MACA,KACA,SACA,QACA,QACA,QACA,OACA,QACA,WACA,MACA,MACA,OACA,OACA,SACA,UACA,MACA,OACA,SACA,KACA,SACA,KACA,KACA,SACA,QACA,cACA,MACA,KACA,OACA,QACA,SACA,MACA,QACA,OACA,OACD,EAsGKhP,EAAW,CACf,SAAU,sBACV,QAASgP,EACT,SAvGgB,CAChB,aACA,MACA,MACA,MACA,QACA,MACA,OACA,aACA,YACA,QACA,WACA,MACA,cACA,UACA,UACA,UACA,OACA,MACA,SACA,YACA,OACA,OACA,SACA,QACA,SACA,YACA,UACA,UACA,UACA,OACA,OACA,MACA,KACA,QACA,MACA,aACA,aACA,OACA,MACA,OACA,SACA,MACA,MACA,aACA,MACA,OACA,SACA,MACA,OACA,MACA,MACA,QACA,WACA,QACA,OACA,WACA,QACA,MACA,UACA,QACA,SACA,eACA,MACA,MACA,QACA,QACA,OACA,OACA,KACD,EAkCC,QAhCe,CACf,YACA,WACA,QACA,OACA,iBACA,MACD,EA0BC,KArBY,CACZ,MACA,WACA,YACA,OACA,OACA,UACA,UACA,WACA,WACA,MACA,QACA,OACA,OACD,CAQA,EAEKC,EAAS,CACb,UAAW,OACX,MAAO,gBACR,EAEK3P,EAAQ,CACZ,UAAW,QACX,MAAO,KACP,IAAK,KACL,SAAUU,EACV,QAAS,GACV,EAEKkP,EAAkB,CACtB,MAAO,OACP,UAAW,CACZ,EAEKxM,EAAS,CACb,UAAW,SACX,SAAU,CAAEnjB,EAAK,gBAAkB,EACnC,SAAU,CACR,CACE,MAAO,yCACP,IAAK,MACL,SAAU,CACRA,EAAK,iBACL0vB,CACD,EACD,UAAW,EACZ,EACD,CACE,MAAO,yCACP,IAAK,MACL,SAAU,CACR1vB,EAAK,iBACL0vB,CACD,EACD,UAAW,EACZ,EACD,CACE,MAAO,8BACP,IAAK,MACL,SAAU,CACR1vB,EAAK,iBACL0vB,EACAC,EACA5P,EAEH,EACD,CACE,MAAO,8BACP,IAAK,MACL,SAAU,CACR/f,EAAK,iBACL0vB,EACAC,EACA5P,EAEH,EACD,CACE,MAAO,eACP,IAAK,IACL,UAAW,EACZ,EACD,CACE,MAAO,eACP,IAAK,IACL,UAAW,EACZ,EACD,CACE,MAAO,4BACP,IAAK,GACN,EACD,CACE,MAAO,4BACP,IAAK,GACN,EACD,CA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,MAAO71B,EAAM,OACX,KACA,oCACAI,EACAJ,EAAM,UAAU,OAAO,CAAC,CAC3B,EACKm3B,EAAgB,wCAChB/P,EAAW,CACf,WACA,KACA,QACA,QACA,SACA,MACA,QACA,QACA,WACA,QACA,KACA,MACA,OACA,OACA,SACA,QACA,QACA,KACA,MACA,KACA,OACA,KACA,MACA,OACA,QACA,QACA,MACA,OACA,MACA,WACA,OACA,MACA,MACA,SACA,OACA,OACA,SACA,SACA,QACA,QACA,OACA,MACA,OACA,SACA,QACA,SACA,UACA,MACA,UACA,QACA,QACA,OACD,EACKC,EAAW,CACf,OACA,QACA,OACA,OACA,KACA,KACD,EACK+P,EAAW,CAEf,QAEA,OACA,OACA,QACA,OACA,OACA,KACA,QACA,SACA,UACA,QACA,QACA,YACA,aACA,KACA,MACA,QACA,QACA,OACA,OACA,UACA,WACA,SACA,eACA,sBACA,oBACA,iBACA,WAEA,UACA,aACA,YACA,SACA,OACA,OACA,UACA,iBACA,gBACA,mBACA,OACA,YACA,SACA,QACA,UACA,eACA,iBACA,eACA,QACA,kBACA,eACA,cACA,SACA,WACA,UACA,aACA,OACA,iBACA,eACA,OACA,SACA,WACA,eACA,aACA,kBACD,EACKrP,EAAQ,CACZ,KACA,MACA,MACA,MACA,OACA,QACA,KACA,MACA,MACA,MACA,OACA,QACA,MACA,MACA,MACA,OACA,OACA,MACA,SACA,SACA,SACA,KACD,EACD,MAAO,CACL,KAAM,OACN,QAAS,CAAE,IAAM,EACjB,SAAU,CACR,SAAUphB,EAAK,SAAW,KAC1B,KAAMohB,EACN,QAASX,EACT,QAASC,EACT,SAAU+P,CACX,EACD,QAAS,KACT,SAAU,CACRzwB,EAAK,oBACLA,EAAK,QAAQ,OAAQ,OAAQ,CAAE,SAAU,CAAE,MAAM,EAAI,EACrDA,EAAK,QAAQA,EAAK,kBAAmB,CACnC,MAAO,MACP,QAAS,IACjB,CAAO,EACD,CACE,UAAW,SACX,SAAU,CACR,CAAE,MAAO,0BAA4B,EACrC,CAAE,MAAO,iCAAiC,EAE7C,EACD,CACE,UAAW,SACX,MAAO,yBACR,EACD,CACE,UAAW,SACX,SAAU,CACR,CAAE,MAAO,gBAAkBwwB,CAAe,EAC1C,CAAE,MAAO,iBAAmBA,CAAe,EAC3C,CAAE,MAAO,uBAAyBA,CAAe,EACjD,CAAE,MAAO,kDACEA,CAAa,CACzB,EACD,UAAW,CACZ,EACD,CACE,MAAO,CACL,KACA,MACA92B,CACD,EACD,UAAW,CACT,EAAG,UACH,EAAG,iBAEN,EACD,CACE,UAAW,OACX,MAAO,SACP,IAAK,MACL,SAAU,CACR,CACE,UAAW,SACX,MAAO,IACP,IAAK,IACL,SAAU,CACRsG,EAAK,mBAIZ,EACD,CACE,MAAO,CACL,MACA,MACA,cACAtG,CACD,EACD,UAAW,CACT,EAAG,UACH,EAAG,UACH,EAAG,WAEN,EAED,CACE,MAAO,CACL,MACA,MACAA,EACA,MACA,IACD,EACD,UAAW,CACT,EAAG,UACH,EAAG,WACH,EAAG,UAEN,EACD,CACE,MAAO,CACL,OACA,MACAA,CACD,EACD,UAAW,CACT,EAAG,UACH,EAAG,cAEN,EACD,CACE,MAAO,CACL,uCACA,MACAA,CACD,EACD,UAAW,CACT,EAAG,UACH,EAAG,cAEN,EACD,CACE,MAAOsG,EAAK,SAAW,KACvB,SAAU,CACR,QAAS,OACT,SAAUywB,EACV,KAAMrP,EAET,EACD,CACE,UAAW,cACX,MAAO,IACR,EACD8N,EAEH,EAGH,OAAAwB,GAAiBJ,kDC3TjB,MAAM/0B,EAASyE,IACN,CACL,UAAW,CACT,MAAO,OACP,MAAO,YACR,EACD,cAAeA,EAAK,qBACpB,SAAU,CACR,MAAO,SACP,MAAO,iDACR,EACD,kBAAmB,CACjB,UAAW,WACX,MAAO,cACR,EACD,wBAAyB,CACvB,MAAO,gBACP,MAAO,KACP,IAAK,KACL,QAAS,IACT,SAAU,CACRA,EAAK,iBACLA,EAAK,kBAER,EACD,gBAAiB,CACf,MAAO,SACP,MAAOA,EAAK,UAAY,kGASxB,UAAW,CACZ,EACD,aAAc,CACZ,UAAW,OACX,MAAO,4BAEV,GAGGwjB,EAAY,CAChB,IACA,OACA,UACA,UACA,QACA,QACA,IACA,aACA,OACA,SACA,SACA,UACA,OACA,OACA,KACA,MACA,UACA,MACA,MACA,KACA,KACA,KACA,WACA,aACA,SACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,SACA,OACA,IACA,SACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,OACA,OACA,MACA,SACA,KACA,WACA,SACA,IACA,UACA,IACA,QACA,OACA,UACA,SACA,SACA,OACA,SACA,UACA,MACA,QACA,QACA,KACA,WACA,QACA,KACA,QACA,OACA,KACA,KACA,MACA,OACD,EAEKC,EAAW,CACf,OACA,IACA,SACA,OACA,UACA,MACA,SACA,SACA,UACA,gBACA,sBACA,cACA,mBACA,oBACA,oBACA,UACA,iBACA,UACA,UACA,eACA,WACA,qBACA,SACA,eACA,iBACA,iBACA,OACA,SACA,UACA,QACA,OACA,OACA,UACA,WACA,OACA,OACA,MACA,WACA,QACA,gBACA,UACD,EAEKC,EAAO,CACX,GAAGF,EACH,GAAGC,CACJ,EAKKE,EAAiB,CACrB,YACA,cACA,eACA,QACA,cACA,cACA,sBACA,gBACA,eACA,eACA,gBACA,OACA,SACA,QACA,kBACA,aACA,cACA,iBACA,kBACA,UACA,uBACA,mBACA,yBACA,+BACA,aACA,OACA,YACA,SACA,QAEA,YACA,YACA,aACA,YACF,EAAE,KAAM,EAAC,QAAS,EAGZC,EAAiB,CACrB,SACA,WACA,QACA,UACA,UACA,UACA,UACA,MACA,WACA,OACA,QACA,UACA,QACA,cACA,gBACA,aACA,SACA,QACA,gBACA,eACA,MACA,OACA,eACA,QACA,gBACA,WACA,UACA,KACA,OACA,aACA,eACA,OACA,OACA,aACA,MACA,YACA,UACA,iBACA,eACA,mBACA,cACA,aACA,eACA,WACA,eACA,OACA,oBACA,YACA,aACA,WACA,QACA,OACA,QACA,SACA,gBACA,eACA,QACA,UACA,OACF,EAAE,KAAM,EAAC,QAAS,EAGZC,EAAkB,CACtB,QACA,WACA,SACA,MACA,aACA,eACA,aACA,gBACA,SACA,OACA,cACA,YACA,UACA,gBACF,EAAE,KAAM,EAAC,QAAS,EAEZC,EAAa,CACjB,eACA,gBACA,cACA,aACA,qBACA,MACA,YACA,kBACA,sBACA,qBACA,sBACA,4BACA,iBACA,uBACA,4BACA,aACA,sBACA,aACA,wBACA,wBACA,kBACA,mBACA,mBACA,oBACA,sBACA,oBACA,kBACA,iBACA,aACA,SACA,eACA,qBACA,mBACA,yBACA,yBACA,yBACA,qBACA,2BACA,2BACA,2BACA,qBACA,qBACA,gBACA,sBACA,4BACA,6BACA,sBACA,sBACA,kBACA,eACA,eACA,sBACA,sBACA,qBACA,sBACA,qBACA,gBACA,sBACA,oBACA,0BACA,0BACA,0BACA,sBACA,4BACA,4BACA,4BACA,sBACA,sBACA,cACA,oBACA,oBACA,oBACA,gBACA,eACA,wBACA,0BACA,qBACA,qBACA,qBACA,iBACA,0BACA,4BACA,eACA,aACA,mBACA,yBACA,0BACA,mBACA,mBACA,eACA,SACA,uBACA,aACA,aACA,cACA,eACA,eACA,KACA,KACA,eACA,cACA,QACA,OACA,YACA,YACA,QACA,sBACA,8BACA,gBACA,kBACA,eACA,eACA,cACA,aACA,cACA,oBACA,oBACA,oBACA,cACA,eACA,UACA,UACA,UACA,qBACA,oBACA,gBACA,MACA,YACA,aACA,SACA,YACA,UACA,oBACA,cACA,oBACA,OACA,eACA,YACA,SACA,OACA,aACA,iBACA,YACA,YACA,cACA,YACA,QACA,OACA,cACA,gBACA,OACA,eACA,cACA,wBACA,eACA,yBACA,YACA,mBACA,iBACA,eACA,aACA,iBACA,eACA,oBACA,0BACA,yBACA,uBACA,wBACA,0BACA,cACA,MACA,+BACA,6BACA,OACA,YACA,oBACA,iBACA,iBACA,cACA,kBACA,oBACA,WACA,WACA,eACA,iBACA,gBACA,sBACA,wBACA,qBACA,sBACA,SACA,UACA,OACA,oBACA,kBACA,mBACA,WACA,cACA,QACA,cACA,kBACA,oBACA,eACA,mBACA,qBACA,YACA,UACA,kBACA,gBACA,eACA,OACA,iBACA,iBACA,aACA,cACA,aACA,mBACA,sBACA,kBACA,SACA,aACA,aACA,eACA,OACA,SACA,eACA,mBACA,qBACA,gBACA,gBACA,oBACA,sBACA,cACA,eACA,aACA,QACA,OACA,cACA,mBACA,qBACA,qBACA,oBACA,qBACA,oBACA,YACA,iBACA,aACA,YACA,cACA,gBACA,cACA,YACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,WACA,YACA,WACA,YACA,SACA,OACA,SACA,aACA,kBACA,UACA,QACA,UACA,UACA,gBACA,iBACA,gBACA,gBACA,WACA,gBACA,aACA,aACA,UACA,gBACA,oBACA,sBACA,iBACA,iBACA,qBACA,uBACA,eACA,gBACA,cACA,mBACA,oBACA,oBACA,QACA,cACA,eACA,cACA,qBACA,iBACA,WACA,SACA,IACA,SACA,OACA,aACA,cACA,QACA,SACA,UACA,QACA,gBACA,sBACA,0BACA,4BACA,uBACA,uBACA,2BACA,6BACA,qBACA,sBACA,oBACA,iBACA,uBACA,2BACA,6BACA,wBACA,wBACA,4BACA,8BACA,sBACA,uBACA,qBACA,oBACA,mBACA,mBACA,kBACA,mBACA,kBACA,wBACA,eACA,gBACA,kBACA,aACA,eACA,SACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,eACA,QACA,WACA,MACA,WACA,eACA,cACA,aACA,iBACA,kBACA,uBACA,kBACA,wBACA,uBACA,2BACA,wBACA,4BACA,gBACA,sBACA,yBACA,sBACA,cACA,eACA,mBACA,gBACA,iBACA,cACA,iBACA,wBACA,0BACA,MACA,YACA,gBACA,mBACA,kBACA,aACA,mBACA,sBACA,sBACA,6BACA,YACA,eACA,gBACA,iBACA,aACA,gBACA,iBACA,eACA,cACA,cACA,aACA,eACA,eACA,cACA,SACA,QACA,cACA,aACA,eACA,YACA,eACA,IACA,IACA,SACF,EAAE,KAAM,EAAC,QAAS,EAYlB,SAAS6M,EAAK3wB,EAAM,CAClB,MAAMgkB,EAAQzoB,EAAMyE,CAAI,EAClB4wB,EAAoB/M,EACpBgN,EAAmBjN,EAEnBN,EAAgB,WAChBY,EAAe,kBAEfyG,EAAW,CACf,UAAW,WACX,MAAO,OAHQ,0BAGY,OAC3B,UAAW,CACZ,EAED,MAAO,CACL,KAAM,OACN,iBAAkB,GAClB,QAAS,SACT,SAAU,CACR3qB,EAAK,oBACLA,EAAK,qBAGLgkB,EAAM,gBACN,CACE,UAAW,cACX,MAAO,kBACP,UAAW,CACZ,EACD,CACE,UAAW,iBACX,MAAO,oBACP,UAAW,CACZ,EACDA,EAAM,wBACN,CACE,UAAW,eACX,MAAO,OAASN,EAAK,KAAK,GAAG,EAAI,OAEjC,UAAW,CACZ,EACD,CACE,UAAW,kBACX,MAAO,KAAOmN,EAAiB,KAAK,GAAG,EAAI,GAC5C,EACD,CACE,UAAW,kBACX,MAAO,SAAWD,EAAkB,KAAK,GAAG,EAAI,GACjD,EACDjG,EACA,CACE,MAAO,KACP,IAAK,KACL,SAAU,CAAE3G,EAAM,eAAe,CAClC,EACDA,EAAM,aACN,CACE,UAAW,YACX,MAAO,OAASF,EAAW,KAAK,GAAG,EAAI,MACxC,EACD,CAAE,MAAO,4oCAA8oC,EACvpC,CACE,MAAO,IACP,IAAK,QACL,UAAW,EACX,SAAU,CACRE,EAAM,cACN2G,EACA3G,EAAM,SACNA,EAAM,gBACNhkB,EAAK,kBACLA,EAAK,iBACLgkB,EAAM,UACNA,EAAM,kBAET,EAID,CACE,MAAO,oBACP,SAAU,CACR,SAAUV,EACV,QAAS,mBAEZ,EACD,CACE,MAAO,IACP,IAAK,OACL,YAAa,GACb,SAAU,CACR,SAAU,UACV,QAASY,EACT,UAAWP,EAAe,KAAK,GAAG,CACnC,EACD,SAAU,CACR,CACE,MAAOL,EACP,UAAW,SACZ,EACD,CACE,MAAO,eACP,UAAW,WACZ,EACDqH,EACA3qB,EAAK,kBACLA,EAAK,iBACLgkB,EAAM,SACNA,EAAM,gBAET,EACDA,EAAM,kBAET,EAGH,OAAA8M,GAAiBH,kDCl0BjB,SAASI,EAAM/wB,EAAM,CACnB,MAAO,CACL,KAAM,gBACN,QAAS,CACP,UACA,cACD,EACD,SAAU,CACR,CACE,UAAW,cAIX,MAAO,qCACP,OAAQ,CACN,IAAK,gBACL,YAAa,SAIpB,EAGH,OAAAgxB,GAAiBD,kDCVjB,SAASE,EAAIjxB,EAAM,CACjB,MAAM3G,EAAQ2G,EAAK,MACbkxB,EAAelxB,EAAK,QAAQ,KAAM,GAAG,EACrCmjB,EAAS,CACb,UAAW,SACX,SAAU,CACR,CACE,MAAO,IACP,IAAK,IACL,SAAU,CAAE,CAAE,MAAO,IAAM,IAGhC,EACKgO,EAAoB,CACxB,MAAO,IACP,IAAK,IACL,SAAU,CAAE,CAAE,MAAO,IAAM,EAC5B,EAEKzQ,EAAW,CACf,OACA,QAGA,SACD,EAEK0Q,EAAmB,CACvB,mBACA,eACA,gBACA,kBACD,EAEKhQ,EAAQ,CACZ,SACA,SACA,OACA,UACA,OACA,YACA,OACA,OACA,MACA,WACA,UACA,QACA,MACA,UACA,WACA,QACA,QACA,WACA,UACA,OACA,MACA,WACA,OACA,YACA,UACA,UACA,WACD,EAEKiQ,EAAqB,CACzB,MACA,MACA,YACA,OACA,QACA,QACA,OACA,MACD,EAGK5B,EAAiB,CACrB,MACA,OACA,MACA,WACA,QACA,MACA,MACA,MACA,QACA,YACA,wBACA,KACA,aACA,OACA,aACA,KACA,OACA,SACA,gBACA,MACA,QACA,cACA,kBACA,UACA,SACA,SACA,OACA,UACA,OACA,KACA,OACA,SACA,cACA,WACA,OACA,OACA,OACA,UACA,OACA,cACA,YACA,mBACA,QACA,aACA,OACA,QACA,WACA,UACA,UACA,SACA,SACA,YACA,UACA,aACA,WACA,UACA,OACA,OACA,gBACA,MACA,OACA,QACA,YACA,aACA,SACA,QACA,OACA,YACA,UACA,kBACA,eACA,kCACA,eACA,eACA,cACA,iBACA,eACA,oBACA,eACA,eACA,mCACA,eACA,SACA,QACA,OACA,MACA,aACA,MACA,UACA,WACA,UACA,UACA,SACA,SACA,aACA,QACA,WACA,gBACA,aACA,WACA,SACA,OACA,UACA,OACA,UACA,OACA,QACA,MACA,YACA,gBACA,WACA,SACA,SACA,QACA,SACA,OACA,UACA,SACA,MACA,WACA,UACA,QACA,QACA,SACA,cACA,QACA,QACA,MACA,UACA,YACA,OACA,OACA,OACA,WACA,SACA,MACA,SACA,QACA,QACA,WACA,SACA,SACA,OACA,OACA,WACA,KACA,YACA,UACA,QACA,QACA,cACA,SACA,MACA,UACA,YACA,eACA,WACA,OACA,KACA,OACA,aACA,gBACA,cACA,cACA,iBACA,aACA,aACA,uBACA,aACA,MACA,WACA,QACA,aACA,UACA,OACA,UACA,OACA,OACA,aACA,UACA,KACA,QACA,YACA,iBACA,MACA,QACA,QACA,QACA,eACA,kBACA,UACA,MACA,SACA,QACA,SACA,MACA,SACA,MACA,WACA,SACA,QACA,WACA,WACA,UACA,QACA,QACA,MACA,KACA,OACA,YACA,MACA,YACA,QACA,OACA,SACA,UACA,eACA,oBACA,KACA,SACA,MACA,OACA,KACA,MACA,OACA,OACA,KACA,QACA,MACA,QACA,OACA,WACA,UACA,YACA,YACA,UACA,MACA,UACA,eACA,kBACA,kBACA,SACA,UACA,WACA,iBACA,QACA,WACA,YACA,UACA,UACA,YACA,MACA,QACA,OACA,QACA,OACA,YACA,MACA,aACA,cACA,YACA,YACA,aACA,iBACA,UACA,aACA,WACA,WACA,WACA,UACA,SACA,SACA,UACA,SACA,QACA,WACA,SACA,MACA,aACA,OACA,UACA,YACA,QACA,SACA,SACA,SACA,OACA,SACA,YACA,eACA,MACA,OACA,UACA,MACA,OACA,OACA,WACA,OACA,WACA,eACA,MACA,eACA,WACA,aACA,OACA,QACA,SACA,aACA,cACA,cACA,SACA,YACA,kBACA,WACA,MACA,YACA,SACA,cACA,cACA,QACA,cACA,MACA,OACA,OACA,OACA,YACA,gBACA,kBACA,KACA,WACA,YACA,kBACA,cACA,QACA,UACA,OACA,aACA,OACA,WACA,UACA,QACA,SACA,UACA,SACA,SACA,QACA,OACA,QACA,QACA,SACA,WACA,UACA,WACA,YACA,UACA,UACA,aACA,OACA,WACA,QACA,eACA,SACA,OACA,SACA,UACA,MACD,EAKK6B,EAAqB,CACzB,MACA,OACA,YACA,OACA,OACA,MACA,OACA,OACA,UACA,WACA,OACA,MACA,OACA,QACA,YACA,aACA,YACA,aACA,QACA,UACA,MACA,UACA,cACA,QACA,aACA,gBACA,cACA,cACA,iBACA,aACA,aACA,uBACA,aACA,MACA,aACA,OACA,UACA,KACA,MACA,QACA,QACA,MACA,MACA,MACA,YACA,QACA,SACA,eACA,kBACA,kBACA,WACA,iBACA,QACA,OACA,YACA,YACA,aACA,iBACA,UACA,aACA,WACA,WACA,WACA,aACA,MACA,OACA,OACA,aACA,cACA,YACA,kBACA,MACA,MACA,OACA,YACA,kBACA,QACA,OACA,aACA,SACA,QACA,WACA,UACA,WACA,cACD,EAGKC,EAA0B,CAC9B,kBACA,eACA,kCACA,eACA,eACA,iBACA,mCACA,eACA,eACA,cACA,cACA,eACA,YACA,oBACA,gBACD,EAIKC,EAAS,CACb,eACA,cACA,cACA,cACA,WACA,cACA,iBACA,gBACA,cACA,gBACA,gBACA,eACA,cACA,aACA,cACA,eACD,EAEKC,EAAYH,EAEZ7Q,EAAW,CACf,GAAGgP,EACH,GAAG4B,CACP,EAAI,OAAQz0B,GACD,CAAC00B,EAAmB,SAAS10B,CAAO,CAC5C,EAEK+tB,EAAW,CACf,UAAW,WACX,MAAO,qBACR,EAEK+G,EAAW,CACf,UAAW,WACX,MAAO,gDACP,UAAW,CACZ,EAEK7H,EAAgB,CACpB,MAAOxwB,EAAM,OAAO,KAAMA,EAAM,OAAO,GAAGo4B,CAAS,EAAG,OAAO,EAC7D,UAAW,EACX,SAAU,CAAE,SAAUA,CAAS,CAChC,EAGD,SAASE,EAAgB/tB,EAAM,CAC7B,WAAAguB,EAAY,KAAAC,CACb,EAAG,GAAI,CACN,MAAMC,EAAYD,EAClB,OAAAD,EAAaA,GAAc,CAAE,EACtBhuB,EAAK,IAAKE,GACXA,EAAK,MAAM,QAAQ,GAAK8tB,EAAW,SAAS9tB,CAAI,EAC3CA,EACEguB,EAAUhuB,CAAI,EAChB,GAAGA,CAAI,KAEPA,CAEV,EAGH,MAAO,CACL,KAAM,MACN,iBAAkB,GAElB,QAAS,WACT,SAAU,CACR,SAAU,YACV,QACE6tB,EAAgBlR,EAAU,CAAE,KAAOtpB,GAAMA,EAAE,OAAS,EAAG,EACzD,QAASupB,EACT,KAAMU,EACN,SAAUmQ,CACX,EACD,SAAU,CACR,CACE,MAAOl4B,EAAM,OAAO,GAAGm4B,CAAM,EAC7B,UAAW,EACX,SAAU,CACR,SAAU,UACV,QAAS/Q,EAAS,OAAO+Q,CAAM,EAC/B,QAAS9Q,EACT,KAAMU,CACP,CACF,EACD,CACE,UAAW,OACX,MAAO/nB,EAAM,OAAO,GAAG+3B,CAAgB,CACxC,EACDvH,EACAc,EACAxH,EACAgO,EACAnxB,EAAK,cACLA,EAAK,qBACLkxB,EACAQ,EAEH,EAGH,OAAAK,GAAiBd,kDChqBjB,SAAS94B,EAAOC,EAAI,CAClB,OAAKA,EACD,OAAOA,GAAO,SAAiBA,EAE5BA,EAAG,OAHM,KAUlB,SAASC,EAAUD,EAAI,CACrB,OAAOE,EAAO,MAAOF,EAAI,GAAG,EAO9B,SAASE,KAAUG,EAAM,CAEvB,OADeA,EAAK,IAAKtB,GAAMgB,EAAOhB,CAAC,CAAC,EAAE,KAAK,EAAE,EAQnD,SAASuB,EAAqBD,EAAM,CAClC,MAAMd,EAAOc,EAAKA,EAAK,OAAS,CAAC,EAEjC,OAAI,OAAOd,GAAS,UAAYA,EAAK,cAAgB,QACnDc,EAAK,OAAOA,EAAK,OAAS,EAAG,CAAC,EACvBd,GAEA,CAAE,EAab,SAASgB,KAAUF,EAAM,CAMvB,MAHe,KADFC,EAAqBD,CAAI,EAE5B,QAAU,GAAK,MACrBA,EAAK,IAAKtB,GAAMgB,EAAOhB,CAAC,CAAC,EAAE,KAAK,GAAG,EAAI,IAI7C,MAAM66B,EAAiBp1B,GAAWtE,EAChC,KACAsE,EACA,MAAM,KAAKA,CAAO,EAAI,KAAO,IAC9B,EAGKq1B,EAAc,CAClB,WACA,MACF,EAAE,IAAID,CAAc,EAGdE,EAAsB,CAC1B,OACA,MACF,EAAE,IAAIF,CAAc,EAGdG,EAAe,CACnB,MACA,MACD,EAGKC,EAAW,CAIf,QACA,MACA,iBACA,QACA,QACA,OACA,MACA,KACA,YACA,QACA,OACA,QACA,QACA,UACA,YACA,WACA,cACA,OACA,UACA,QACA,SACA,SACA,cACA,KACA,UACA,OACA,OACA,OACA,YACA,cACA,qBACA,cACA,QACA,MACA,OACA,MACA,QACA,KACA,SACA,WACA,QACA,SACA,QACA,QACA,kBACA,WACA,KACA,KACA,WACA,cACA,OACA,MACA,QACA,WACA,cACA,cACA,OACA,WACA,WACA,WACA,UACA,UACA,kBACA,SACA,iBACA,UACA,WACA,gBACA,SACA,SACA,WACA,WACA,SACA,MACA,OACA,SACA,SACA,YACA,QACA,SACA,SACA,QACA,QACA,OACA,MACA,YACA,kBACA,oBACA,UACA,MACA,OACA,QACA,QACA,SACD,EAMKC,EAAW,CACf,QACA,MACA,MACD,EAGKC,EAA0B,CAC9B,aACA,gBACA,aACA,OACA,YACA,OACA,OACD,EAIKC,EAAqB,CACzB,gBACA,UACA,aACA,QACA,UACA,SACA,SACA,QACA,UACA,eACA,YACA,YACA,MACA,gBACA,WACA,QACA,YACA,kBACA,UACD,EAGKC,EAAW,CACf,MACA,MACA,MACA,SACA,mBACA,aACA,OACA,aACA,YACA,4BACA,MACA,MACA,cACA,eACA,eACA,eACA,sBACA,QACA,WACA,gBACA,WACA,SACA,OACA,oCACA,YACA,OACA,gBACA,iBACA,uBACA,2BACA,oBACA,aACA,0BACA,KACD,EAGKC,EAAe95B,EACnB,oBACA,kBACA,iBACA,iBACA,iBACA,mCACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBA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UAAW,SACX,MAAO,+DACR,EACD,CACE,MAAO,WACP,IAAK,UACL,YAAa,OACb,aAAc,GACd,WAAY,GACZ,UAAW,CACZ,EACD,CACE,UAAW,OACX,MAAO,SAAWD,CACnB,EAED,CACE,UAAW,OACX,MAAO,KAAOA,EAAiB,GAChC,EACD,CACE,UAAW,OACX,MAAO,IAAMA,CACd,EACD,CACE,UAAW,OACX,MAAO,KAAOA,CACf,EACD,CACE,UAAW,OACX,MAAO,IAAM/1B,EAAK,oBAAsB,GACzC,EACD,CACE,UAAW,OACX,MAAO,MAAQA,EAAK,oBAAsB,GAC3C,EACD,CACE,UAAW,SAEX,MAAO,aACP,UAAW,CACZ,EACDA,EAAK,kBACL,CACE,cAAe0gB,EACf,SAAU,CAAE,QAASA,CAAQ,CAC9B,EACDyV,EAGA,CACE,UAAW,SACX,MAAOn2B,EAAK,YAAc,MAC1B,UAAW,CACZ,EACDq2B,EACAzP,EACAzD,CACD,EAEKoI,EAAc,CAAE,GAAGhwB,CAAO,EAChC,OAAAgwB,EAAY,IAAK,EACjBA,EAAY,KAAK2K,CAAgB,EACjCE,EAAgB,SAAW7K,EAEpB,CACL,KAAM,OACN,iBAAkB,GAClB,QAAS,CAAE,KAAO,EAClB,SAAUhwB,CACX,EAGH,OAAA+6B,GAAiBR,kDClMjB,MAAMr8B,EAAW,2BACXgnB,EAAW,CACf,KACA,KACA,KACA,KACA,MACA,QACA,UACA,MACA,MACA,WACA,KACA,SACA,OACA,OACA,QACA,QACA,aACA,OACA,QACA,OACA,UACA,MACA,SACA,WACA,SACA,SACA,MACA,QACA,QACA,QAIA,WACA,QACA,QACA,SACA,SACA,OACA,SACA,SACD,EACKC,EAAW,CACf,OACA,QACA,OACA,YACA,MACA,UACD,EAGKU,EAAQ,CAEZ,SACA,WACA,UACA,SAEA,OACA,OACA,SACA,SAEA,SACA,SAEA,QACA,eACA,eACA,YACA,aACA,oBACA,aACA,aACA,cACA,cACA,gBACA,iBAEA,MACA,MACA,UACA,UAEA,cACA,oBACA,UACA,WACA,OAEA,UACA,YACA,oBACA,gBAEA,UACA,QA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AE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,KAAK,KAAK,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,KAAK,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,KAAK,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,KAAK,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,KAAK,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,KAAK,KAAK,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,KAAK,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IA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CD,CACE,MAAO,eACP,MAAO,cACR,EACD,CACE,MAAO,WACP,MAAO,UACR,EACD,CACE,MAAO,mBACP,MAAO,kBACR,CACH,EAEaC,GAAmB,CAC9B,CACE,MAAO,WACP,MAAO,UACR,EACD,CACE,MAAO,eACP,MAAO,cACR,EACD,CACE,MAAO,aACP,MAAO,YACR,EACD,CACE,MAAO,iBACP,MAAO,gBACR,CACH,EAEaC,GAAmB,CAC9B,CACE,MAAO,WACP,MAAO,UACR,EACD,CACE,MAAO,eACP,MAAO,cACR,EACD,CACE,MAAO,aACP,MAAO,YACR,EACD,CACE,MAAO,iBACP,MAAO,gBACR,EACD,CACE,MAAO,kBACP,MAAO,iBACR,EACD,CACE,MAAO,eACP,MAAO,cACR,CACH,EAiBaC,GAAmB,CAC9B,CACE,MAAO,WACP,MAAO,UACR,EACD,CACE,MAAO,eACP,MAAO,cACR,EACD,CACE,MAAO,WACP,MAAO,UACR,EACD,CACE,MAAO,mBACP,MAAO,kBACR,EACD,CACE,MAAO,cACP,MAAO,aACR,CACH,EChHaC,GAAoC,CAC/C,CACE,cAAe,eACf,gBAAiB,WACjB,OAAQ,GACR,eAAgB,MAChB,sBAAuB,EACxB,CACH,EAEaC,GAAwC,CACnD,CACE,cAAe,mBACf,gBAAiB,WACjB,OAAQ,GACR,eAAgB,MAChB,sBAAuB,EACxB,CACH,EAEaC,GAA0B,CACrC,CACE,cAAe,SACf,gBAAiB,WACjB,OAAQ,GACR,eAAgB,MAChB,sBAAuB,EACxB,CACH,EAEaC,GAAkB,CAC7B,CACE,YAAa,eACb,cAAe,CAAE,CAClB,CACH,EAEaC,GAA2B,CACtC,CACE,GAAI,WACJ,KAAM,kBACP,EACD,CACE,GAAI,WACJ,KAAM,kBACP,CACH,EAEaC,GAA4B,CACvC,CACE,GAAI,MACJ,KAAM,MACP,EACD,CACE,GAAI,MACJ,KAAM,KACP,EACD,CACE,GAAI,SACJ,KAAM,QACP,EACD,CACE,GAAI,OACJ,KAAM,MACP,EACD,CACE,GAAI,SACJ,KAAM,QACP,CACH,ECrEMC,GAAoB1tC,GACjBA,EAAI,MAAM2tC,GAAQ,OAAOA,GAAS,QAAQ,EAG7CC,GAAqB5tC,GAClBA,EAAI,MAAM2tC,GAAQ,OAAOA,GAAS,QAAQ,EAG7CE,GAAcr+F,IACdA,EAAO,QAAU,EACnBA,EAAS,CAAE,EACFk+F,GAAkBl+F,CAAM,GAAKo+F,GAAmBp+F,CAAM,EAC/DA,EAAS,CAAC,GAAGA,CAAM,EAEnBA,EAASA,EAAO,IAAI2B,GAAOA,EAAI,EAAE,EAE5B3B,GAGHs+F,GAA2BjiG,IAC3BA,EAAK,cAAc,GACrBA,EAAK,cAAgB,CAACA,EAAK,cAAc,EAAE,EAE3CA,EAAK,cAAgB,CAACA,EAAK,aAAa,EAEnCA,EAAK,eAGRkiG,GAAkB/jG,GACN,KAAK,MAAM,KAAK,UAAUA,CAAI,CAAC,EACzB,IAAI6B,IACpB,MAAM,QAAQA,EAAK,aAAa,EAClCA,EAAK,cAAgBgiG,GAAYhiG,EAAK,aAAa,EAC1C,OAAOA,EAAK,eAAkB,SACvCA,EAAK,cAAgBiiG,GAAyBjiG,CAAI,EACxCA,EAAK,cAGfA,EAAK,cAAgB,CAACA,EAAK,aAAa,EAFxCA,EAAK,cAAgB,CAAE,EAIlBA,EACR,ECzBUmiG,GAA8BrvG,IACd,CACzB,KAAM,OACN,KAAM,aACN,KAAM,gBACN,SAAU,eACX,GAEyBA,CAAG,GAAK,aAGvBsvG,GAAqB,CAACC,EAAkBvvG,IAC5CuvG,EAAiB,KAAKC,GACpBA,EAAK,gBAAkBxvG,CAC/B,EAGUyvG,GAAuC,CAClDF,EACAhwG,IAEOgwG,EACJ,KAAKC,GAAQA,EAAK,gBAAkBjwG,CAAI,EACxC,iBAAiB,IAAI2N,IACb,CACL,GAAIA,EACJ,KAAMA,CACP,EACF,EAGQwiG,GAA4B,CAACH,EAAkBvvG,IACnDuvG,EAAiB,KAAKC,GAEzBA,EAAK,gBAAkBxvG,GAAOwvG,EAAK,yBAA2B,UAEjE,EAGUG,GAAwB,CAACJ,EAAkBhwG,IAC/CgwG,EAAiB,KAAKC,GAEzBA,EAAK,gBAAkBjwG,GAAQiwG,EAAK,yBAA2B,MAElE,EAGUI,GAAmB5vG,IACV,CAClB,KAAMouG,GACN,KAAME,GACN,OAAQF,GACR,KAAMA,GACN,KAAMG,GACN,SAAUH,EACX,GAEkBpuG,CAAG,GAAKouG,GAGhByB,GAA+B,CAACN,EAAkBhwG,IACtDgwG,EAAiB,IAAIC,IACnB,CACL,IAAKA,EAAK,cACV,KAAMA,EAAK,uBACX,UAAWH,GAA4BG,EAAK,sBAAsB,EAClE,gBAAiBI,GAAiBJ,EAAK,sBAAsB,EAC7D,oBAAqBjwG,CACtB,EACF,EAGUuwG,GAA2B,CAACnvG,EAASX,EAAM,OAClD,CAACW,GAAW,CAAC,MAAM,QAAQA,CAAO,EAAU,CAAE,EAC3CA,EAAQ,IAAIH,IACV,CACL,GAAIA,EAAER,CAAG,EACT,KAAMQ,EAAE,KACT,EACF,EAGUuvG,GAAmB,CAAC,CAC/B,OAAArK,EACA,MAAAsK,EACA,OAAAC,EACA,YAAAC,EACA,KAAA3wG,EACA,gBAAA4wG,CACF,KACqB,CACjB,aAAcA,EAAkBA,EAAgBzK,CAAM,EAAIA,EAC1D,YAAayK,EAAkBA,EAAgBH,CAAK,EAAIA,EACxD,mBAAoBA,EACpB,UAAWF,GAAyBG,EAAQ,OAAO,EACnD,aAAcH,GAAyBG,EAAQ,OAAO,EACtD,gBAAiBnB,GACjB,QAASoB,CACV,GACiB3wG,CAAI,EAGX6wG,GAAsB,CAAC,CAClC,OAAA1K,EACA,qBAAA2K,EACA,UAAAC,EACA,SAAAC,EACA,UAAA/oC,EACA,iBAAA+nC,EACA,QAAAiB,EACA,UAAAnnG,EACA,oBAAAonG,EACA,MAAAT,EACA,KAAAzwG,CACF,IACMmwG,GAA0BH,EAAkBhwG,CAAI,EAC3C8wG,EAGLV,GAAsBJ,EAAkBhwG,CAAI,EACvCkwG,GAAqCF,EAAkBhwG,CAAI,EAGxC,CAC1B,OAAQkxG,EACR,YAAa/K,EACb,QAAS6K,EACT,SAAUC,EACV,QAASR,EACT,UAAWF,GAAyBQ,CAAS,EAC7C,iBAAkBjnG,EAClB,sBAAuBA,EACvB,aAAcm+D,EACd,aAAcqnC,GACd,SAAUC,EACX,EAE0BvvG,CAAI,EAGpBmxG,GAAc,CAAC9d,EAAQ+d,EAAQ,KAAO,CACjD,MAAMC,EAAShe,EAAO,cAAc,CAAC,EACrC,GAAI,CAACge,EAAQ,MAAO,GACpB,GAAIhe,EAAO,cAAgB,kBAAmB,CAC5C,MAAM3qE,EAAO0oF,EAAM,KAAKzjG,GAAQA,EAAK,UAAY0jG,CAAM,EACvD,GAAI3oF,EAAM,OAAOA,EAAK,SAAS,SAAU,CAC7C,CACE,MAAO,EACT,EAEa4oF,GAAuB3xB,GAC9BA,IAAc,kBACTuvB,GAELvvB,IAAc,sBACTwvB,GAEFC,GAGImC,GAAoB,IACxBlC,GAGImC,GAAyBxB,GAC7BA,EAAiB,IAAIC,IACnB,CACL,IAAKA,EAAK,cACV,KAAMA,EAAK,uBACX,KAAMA,EAAK,sBACZ,EACF,EAGUwB,GAAgC,CAACC,EAAiBlhG,EAAO/P,IAC7DixG,EAAgBlhG,CAAK,EAAE,WAAW,KAAK7C,GAAQA,EAAK,MAAQlN,CAAG,EACnE,UAGQkxG,GAA4Bj7C,GAAW,CAClD,MAAMk7C,EAAa,KAAK,MAAM,KAAK,UAAUl7C,CAAO,CAAC,EACrD,OAAAk7C,EAAW,WAAWA,EAAW,WAAW,OAAS,CAAC,EAAE,eAAiB,KACzEA,EAAW,WAAaC,GAAqBD,EAAW,UAAU,EAAE,QACpEA,EAAW,QAAUE,GAAqBF,EAAW,OAAO,EACrDA,CACT,EAEaG,GAAoB,CAAC/sE,EAAOvkC,IAChCukC,EAAM,KAAKirE,GAAQA,EAAK,MAAQxvG,CAAG,EAG/BuxG,GAA2B,CAEtCC,EAAyB,CAAE,EAE3BC,EAAoB,CAAE,EACtBC,EACAC,IACG,CACH,MAAMpC,EAAmB,CAAE,EAC3B,OAAIiC,EAAuB,QACzBjC,EAAiB,KACf,CACE,IAAK,gCACL,KAAMmC,EACN,SAAU,EACX,EACD,GAAGF,CACJ,EAECC,EAAkB,QACpBlC,EAAiB,KACf,CACE,IAAK,2BACL,KAAMoC,EACN,SAAU,EACX,EACD,GAAGF,CACJ,EAEIlC,CACT,EAQaqC,GAAgB,CAACX,EAAiBjxG,IACtCixG,EAAgBjxG,CAAG,EAAE,WAUjB6xG,GAAoB,CAACZ,EAAiBE,EAAYnxG,IACtDixG,EAAgBE,EAAW,UAAU,EAAE,WAAW,KACvDW,GAAaA,EAAU,MAAQ9xG,CAChC,EAWU+xG,GAAe,CAC1BC,EACAf,EACAE,EACAnxG,IACG,CACH,MAAMiyG,EAAkB3C,GAAmB0C,EAAqBhyG,CAAG,EACnE,OAAIiyG,EACK5C,GAA4B4C,EAAgB,sBAAsB,EAE9DJ,GAAkBZ,EAAiBE,EAAYnxG,CAAG,EACnD,SACd,EAWakyG,GAAe,CAC1BF,EACAf,EACAE,EACA1xG,EACAO,IACG,CACH,GAAIP,IAAS,OAAQ,CACnB,MAAMwyG,EAAkB3C,GAAmB0C,EAAqBhyG,CAAG,EACnE,GAAIiyG,EACF,OAAOrC,GAAiBqC,EAAgB,sBAAsB,CAEpE,CAEE,OADaJ,GAAkBZ,EAAiBE,EAAYnxG,CAAG,EACnD,eACd,EASamyG,GAAyB,CAAClB,EAAiBE,EAAYnxG,IAC3DixG,EAAgBE,EAAW,UAAU,EAAE,WAAW,KACvD3wG,GAAKA,EAAE,MAAQR,CACnB,EAAI,oBASSoyG,GAAkB,CAACC,EAAuBzf,IACjDA,IAAW,sBAAwBA,IAAW,eACzC,GAEF,CAAC,CADKyf,EAAsB,KAAK7xG,GAAKA,EAAE,MAAQoyF,CAAM,EAAE,UC7TlD,SAAS0f,IAAsB,CAC5C,MAAMjwB,EAAUC,GAAiB,EAC3B,CAAE,CAAG,EAAG98C,GAAS,EACjBkgE,EAAS7U,GAAa,kBAAkB,EACxCyf,EAAYzf,GAAa,2BAA2B,EACpD0f,EAAW1f,GAAa,sBAAsB,EAC9C2f,EAAU3f,GAAa,oBAAoB,EAC3Cof,EAASpf,GAAa,kBAAkB,EACxCmf,EAAQnf,GAAa,gBAAgB,EACrCqf,EAAcrf,GAAa,YAAY,EAEvCwf,EAAuB3rE,EAAS,IAAM,CAC1C,CAAE,GAAI,GAAM,KAAM,EAAE,8BAA8B,CAAG,EACrD,CAAE,GAAI,GAAO,KAAM,EAAE,+BAA+B,CAAG,CAC3D,CAAG,EAEK6tE,EAAoB7tE,EAAS,KAC1B,CACL,KAAM,CACJ,KAAM,EAAE,8CAA8C,CACvD,EACD,SAAU,CACR,KAAM,EAAE,kDAAkD,CAC3D,EACD,QAAS,CACP,KAAM,EAAE,iDAAiD,CAC1D,EACD,QAAS,CACP,KAAM,EAAE,iDAAiD,CAC1D,EACD,IAAK,CACH,KAAM,EAAE,6CAA6C,CACtD,CACF,EACF,EAEK+rE,EAAsB/rE,EAAS,IAAM,CACzC,MAAM8tE,EAAgBD,EAAkB,MACxC,MAAO,CACL,GAAG,OAAO,KAAKC,CAAa,EAAE,IAAIhhB,IAAW,CAC3C,GAAIA,EACJ,KAAMghB,EAAchhB,CAAM,EAAE,IACpC,EAAQ,EACF,CAAE,GAAI,MAAO,KAAM,EAAE,sBAAsB,CAAG,CAC/C,CACL,CAAG,EAOKihB,EAAgBzlG,GAAQ,CAC5B,CACE,GAAI,MACJ,KAAM,EAAE,wBAAwB,GAAK,MACtC,EACD,GAAIA,GAAQ,EACb,EAwCD,MAAO,CACL,qBAAAqjG,EACA,kBAAAkC,EACA,oBAAA9B,EACA,2BArCiClxG,GAC1B6wG,GAAoB,CACzB,OAAQ1K,EAAO,MACf,qBAAsB2K,EAAqB,MAC3C,UAAWC,EAAU,MACrB,SAAUC,EAAS,MACnB,iBAAkBluB,EAAQ,0BAA0B,EAAE,MACtD,QAASmuB,EAAQ,MACjB,oBAAqBC,EAAoB,MACzC,MAAOT,EAAM,MACb,UAAA3mG,GACA,UAAAm+D,GACA,KAAAjoE,CACN,CAAK,EAyBD,wBAjB8BA,GACvBwwG,GAAiB,CACtB,OAAQrK,EAAO,MACf,OAAQuK,EAAO,MACf,MAAOD,EAAM,MACb,YAAaE,EAAY,MACzB,UAAA7mG,GACA,KAAA9J,EACA,gBAAiBkzG,CACvB,CAAK,EASD,OAAA/M,EACA,UAAA4K,EACA,SAAAC,EACA,QAAAC,EACA,OAAAP,EACA,MAAAD,EACA,YAAAE,CACD,CACH,CCxHO,MAAMwC,GAAc,CACzB,gBAAiB,CACf,WAAY,CACV,CACE,IAAK,eACL,KAAM,eACN,iBAAkB,eAClB,UAAW,gBACX,gBAAiBtE,EAClB,EACD,CACE,IAAK,UACL,KAAM,kBACN,iBAAkB,mBAClB,UAAW,6BACX,gBAAiBC,EAClB,EACD,CACE,IAAK,QACL,KAAM,QACN,iBAAkB,QAClB,UAAW,aACX,gBAAiBA,EAClB,EACD,CACE,IAAK,WACL,KAAM,QACN,iBAAkB,QAClB,UAAW,eACX,gBAAiBD,EAClB,EACD,CACE,IAAK,wBACL,KAAM,wBACN,iBAAkB,wBAClB,UAAW,eACX,gBAAiBA,EAClB,EACD,CACE,IAAK,eACL,KAAM,eACN,iBAAkB,eAClB,UAAW,aACX,gBAAiBI,EAClB,CACF,EACD,QAAS,CACP,CACE,IAAK,eACL,KAAM,kBACN,iBAAkB,cACnB,EACD,CACE,IAAK,cACL,KAAM,gBACN,iBAAkB,aACnB,EACD,CACE,IAAK,YACL,KAAM,cACN,iBAAkB,WACnB,EACD,CACE,IAAK,eACL,KAAM,iBACN,iBAAkB,cACnB,EACD,CACE,IAAK,qBACL,KAAM,wBACN,iBAAkB,oBACnB,EACD,CACE,IAAK,eACL,KAAM,iBACN,iBAAkB,cACnB,EACD,CACE,IAAK,wBACL,KAAM,2BACN,iBAAkB,uBACnB,EACD,CACE,IAAK,oBACL,KAAM,oBACN,iBAAkB,mBACnB,EACD,CACE,IAAK,sBACL,KAAM,sBACN,iBAAkB,mBACnB,EAED,CACE,IAAK,uBACL,KAAM,uBACN,iBAAkB,sBACnB,EACD,CACE,IAAK,qBACL,KAAM,qBACN,iBAAkB,oBACnB,EACD,CACE,IAAK,kBACL,KAAM,kBACN,iBAAkB,iBACnB,CACF,CACF,EACD,qBAAsB,CACpB,WAAY,CACV,CACE,IAAK,SACL,KAAM,SACN,iBAAkB,SAClB,UAAW,eACX,gBAAiBJ,EAClB,EACD,CACE,IAAK,mBACL,KAAM,mBACN,iBAAkB,mBAClB,UAAW,gBACX,gBAAiBA,EAClB,EACD,CACE,IAAK,eACL,KAAM,gBACN,iBAAkB,eAClB,UAAW,aACX,gBAAiBC,EAClB,EACD,CACE,IAAK,eACL,KAAM,UACN,iBAAkB,eAClB,UAAW,gBACX,gBAAiBD,EAClB,EACD,CACE,IAAK,eACL,KAAM,eACN,iBAAkB,eAClB,UAAW,aACX,gBAAiBI,EAClB,EACD,CACE,IAAK,UACL,KAAM,gBACN,iBAAkB,eAClB,UAAW,aACX,gBAAiBH,EAClB,EACD,CACE,IAAK,QACL,KAAM,QACN,iBAAkB,QAClB,UAAW,aACX,gBAAiBA,EAClB,EACD,CACE,IAAK,WACL,KAAM,QACN,iBAAkB,QAClB,UAAW,eACX,gBAAiBD,EAClB,EACD,CACE,IAAK,wBACL,KAAM,wBACN,iBAAkB,wBAClB,UAAW,eACX,gBAAiBA,EAClB,EACD,CACE,IAAK,WACL,KAAM,WACN,iBAAkB,WAClB,UAAW,eACX,gBAAiBA,EAClB,CACF,EACD,QAAS,CACP,CACE,IAAK,eACL,KAAM,kBACN,iBAAkB,cACnB,EACD,CACE,IAAK,cACL,KAAM,gBACN,iBAAkB,aACnB,EACD,CACE,IAAK,eACL,KAAM,kBACN,iBAAkB,cACnB,EACD,CACE,IAAK,qBACL,KAAM,wBACN,iBAAkB,oBACnB,EACD,CACE,IAAK,eACL,KAAM,iBACN,iBAAkB,cACnB,EACD,CACE,IAAK,wBACL,KAAM,2BACN,iBAAkB,uBACnB,EACD,CACE,IAAK,oBACL,KAAM,oBACN,iBAAkB,mBACnB,EACD,CACE,IAAK,sBACL,KAAM,sBACN,iBAAkB,mBACnB,EACD,CACE,IAAK,uBACL,KAAM,uBACN,iBAAkB,sBACnB,EACD,CACE,IAAK,qBACL,KAAM,qBACN,iBAAkB,oBACnB,EACD,CACE,IAAK,kBACL,KAAM,kBACN,iBAAkB,iBACnB,CACF,CACF,EACD,qBAAsB,CACpB,WAAY,CACV,CACE,IAAK,SACL,KAAM,SACN,iBAAkB,SAClB,UAAW,eACX,gBAAiBA,EAClB,EACD,CACE,IAAK,mBACL,KAAM,mBACN,iBAAkB,mBAClB,UAAW,gBACX,gBAAiBA,EAClB,EACD,CACE,IAAK,eACL,KAAM,gBACN,iBAAkB,eAClB,UAAW,aACX,gBAAiBC,EAClB,EACD,CACE,IAAK,eACL,KAAM,UACN,iBAAkB,eAClB,UAAW,gBACX,gBAAiBD,EAClB,EACD,CACE,IAAK,UACL,KAAM,gBACN,iBAAkB,eAClB,UAAW,aACX,gBAAiBC,EAClB,EACD,CACE,IAAK,eACL,KAAM,eACN,iBAAkB,eAClB,UAAW,aACX,gBAAiBG,EAClB,EACD,CACE,IAAK,cACL,KAAM,WACN,iBAAkB,gBAClB,UAAW,gBACX,gBAAiBF,EAClB,EACD,CACE,IAAK,UACL,KAAM,OACN,iBAAkB,YAClB,UAAW,gBACX,gBAAiBA,EAClB,EACD,CACE,IAAK,QACL,KAAM,QACN,iBAAkB,QAClB,UAAW,aACX,gBAAiBD,EAClB,EACD,CACE,IAAK,WACL,KAAM,QACN,iBAAkB,QAClB,UAAW,eACX,gBAAiBD,EAClB,EACD,CACE,IAAK,wBACL,KAAM,wBACN,iBAAkB,wBAClB,UAAW,eACX,gBAAiBA,EAClB,EACD,CACE,IAAK,WACL,KAAM,WACN,iBAAkB,WAClB,UAAW,eACX,gBAAiBA,EAClB,CACF,EACD,QAAS,CACP,CACE,IAAK,eACL,KAAM,kBACN,iBAAkB,cACnB,EACD,CACE,IAAK,cACL,KAAM,gBACN,iBAAkB,aACnB,EACD,CACE,IAAK,eACL,KAAM,kBACN,iBAAkB,cACnB,EACD,CACE,IAAK,qBACL,KAAM,wBACN,iBAAkB,oBACnB,EACD,CACE,IAAK,eACL,KAAM,iBACN,iBAAkB,cACnB,EACD,CACE,IAAK,wBACL,KAAM,2BACN,iBAAkB,uBACnB,EACD,CACE,IAAK,oBACL,KAAM,oBACN,iBAAkB,mBACnB,EACD,CACE,IAAK,sBACL,KAAM,sBACN,iBAAkB,mBACnB,EACD,CACE,IAAK,uBACL,KAAM,uBACN,iBAAkB,sBACnB,EACD,CACE,IAAK,qBACL,KAAM,qBACN,iBAAkB,oBACnB,EACD,CACE,IAAK,kBACL,KAAM,kBACN,iBAAkB,iBACnB,CACF,CACF,EACD,oBAAqB,CACnB,WAAY,CACV,CACE,IAAK,mBACL,KAAM,mBACN,iBAAkB,mBAClB,UAAW,gBACX,gBAAiBA,EAClB,EACD,CACE,IAAK,QACL,KAAM,QACN,iBAAkB,QAClB,UAAW,aACX,gBAAiBC,EAClB,EACD,CACE,IAAK,eACL,KAAM,gBACN,iBAAkB,eAClB,UAAW,aACX,gBAAiBA,EAClB,EACD,CACE,IAAK,eACL,KAAM,UACN,iBAAkB,eAClB,UAAW,gBACX,gBAAiBD,EAClB,EACD,CACE,IAAK,UACL,KAAM,gBACN,iBAAkB,eAClB,UAAW,aACX,gBAAiBC,EAClB,EACD,CACE,IAAK,cACL,KAAM,WACN,iBAAkB,gBAClB,UAAW,gBACX,gBAAiBC,EAClB,EACD,CACE,IAAK,eACL,KAAM,eACN,iBAAkB,eAClB,UAAW,aACX,gBAAiBE,EAClB,EACD,CACE,IAAK,UACL,KAAM,OACN,iBAAkB,YAClB,UAAW,gBACX,gBAAiBF,EAClB,EACD,CACE,IAAK,WACL,KAAM,QACN,iBAAkB,QAClB,UAAW,eACX,gBAAiBF,EAClB,EACD,CACE,IAAK,wBACL,KAAM,wBACN,iBAAkB,wBAClB,UAAW,eACX,gBAAiBA,EAClB,EACD,CACE,IAAK,WACL,KAAM,WACN,iBAAkB,WAClB,UAAW,eACX,gBAAiBA,EAClB,CACF,EACD,QAAS,CACP,CACE,IAAK,eACL,KAAM,kBACN,iBAAkB,cACnB,EACD,CACE,IAAK,cACL,KAAM,gBACN,iBAAkB,aACnB,EACD,CACE,IAAK,eACL,KAAM,kBACN,iBAAkB,cACnB,EACD,CACE,IAAK,qBACL,KAAM,wBACN,iBAAkB,oBACnB,EACD,CACE,IAAK,eACL,KAAM,iBACN,iBAAkB,cACnB,EACD,CACE,IAAK,wBACL,KAAM,2BACN,iBAAkB,uBACnB,EACD,CACE,IAAK,oBACL,KAAM,oBACN,iBAAkB,mBACnB,EACD,CACE,IAAK,sBACL,KAAM,sBACN,iBAAkB,mBACnB,EACD,CACE,IAAK,qBACL,KAAM,qBACN,iBAAkB,oBACnB,EACD,CACE,IAAK,kBACL,KAAM,kBACN,iBAAkB,iBACnB,CACF,CACF,CACH,EAEauE,GAAyB,CACpC,CACE,IAAK,uBACL,MAAO,sBACR,EACD,CACE,IAAK,uBACL,MAAO,sBACR,EACD,CACE,IAAK,kBACL,MAAO,iBACR,EACD,CACE,IAAK,sBACL,MAAO,qBACR,CACH,EAEaC,GAA0B,CACrC,CACE,IAAK,eACL,MAAO,kBACP,UAAW,eACZ,EACD,CACE,IAAK,cACL,MAAO,gBACP,UAAW,eACZ,EACD,CACE,IAAK,YACL,MAAO,cACP,U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ACpD,CACA,CAEE,MAAO,CACL,sBAAA8jK,EACA,gBAAAC,EACA,mBAAAC,EACA,qBAAAC,EACA,uBAAAE,EACA,iBAAAD,EACA,uBAAAI,EACA,cAAAC,EACA,eAAAC,EACA,qBAAAE,EACA,sBAAAC,CACD,CACH,CCnJO,MAAMv8F,GAAmB,CAC9B,CACE,MAAO,WACP,MAAO,UACR,EACD,CACE,MAAO,eACP,MAAO,cACR,CACH,EAEaC,GAAmB,CAC9B,CACE,MAAO,WACP,MAAO,UACR,EACD,CACE,MAAO,eACP,MAAO,cACR,EACD,CACE,MAAO,aACP,MAAO,YACR,EACD,CACE,MAAO,iBACP,MAAO,gBACR,CACH,EAEaC,GAAmB,CAC9B,CACE,MAAO,WACP,MAAO,UACR,EACD,CACE,MAAO,eACP,MAAO,cACR,EACD,CACE,MAAO,WACP,MAAO,UACR,EACD,CACE,MAAO,mBACP,MAAO,kBACR,CACH,EAEaC,IAAmB,CAC9B,CACE,MAAO,WACP,MAAO,UACR,EACD,CACE,MAAO,eACP,MAAO,cACR,EACD,CACE,MAAO,aACP,MAAO,YACR,EACD,CACE,MAAO,iBACP,MAAO,gBACR,EACD,CACE,MAAO,kBACP,MAAO,iBACR,EACD,CACE,MAAO,eACP,MAAO,cACR,CACH,EAEaq8F,GAAmB,CAC9B,CACE,MAAO,kBACP,MAAO,iBACR,EACD,CACE,MAAO,eACP,MAAO,cACR,EACD,CACE,MAAO,cACP,MAAO,kBACR,CACH,EClFM/hB,IAAc,CAClB,CACE,aAAc,SACd,iBAAkB,SAClB,UAAW,eACX,SAAU,OACV,gBAAiBz6E,GACjB,eAAgB,UACjB,EACD,CACE,aAAc,cACd,iBAAkB,gBAClB,UAAW,gBACX,SAAU,OACV,gBAAiBC,GACjB,eAAgB,UACjB,EACD,CACE,aAAc,WACd,iBAAkB,aAClB,UAAW,gBACX,SAAU,OACV,gBAAiBA,GACjB,eAAgB,UACjB,EACD,CACE,aAAc,UACd,iBAAkB,YAClB,UAAW,gBACX,SAAU,SACV,gBAAiBA,GACjB,eAAgB,UACjB,EACD,CACE,aAAc,aACd,iBAAkB,0BAClB,UAAW,aACX,SAAU,SACV,gBAAiBC,GACjB,eAAgB,UACjB,EACD,CACE,aAAc,cACd,iBAAkB,gBAClB,UAAW,gBACX,SAAU,SACV,gBAAiBD,GACjB,eAAgB,UACjB,EACD,CACE,aAAc,SACd,iBAAkB,SAClB,UAAW,eACX,SAAU,OACV,gBAAiBA,GACjB,eAAgB,UACjB,EACD,CACE,aAAc,mBACd,iBAAkB,mBAClB,UAAW,gBACX,SAAU,OACV,gBAAiBD,GACjB,eAAgB,YACjB,EACD,CACE,aAAc,eACd,iBAAkB,eAClB,UAAW,gBACX,SAAU,OACV,gBAAiBA,GACjB,eAAgB,YACjB,EACD,CACE,aAAc,UACd,iBAAkB,eAClB,UAAW,aACX,SAAU,OACV,gBAAiBE,GACjB,eAAgB,YACjB,EACD,CACE,aAAc,aACd,iBAAkB,aAClB,UAAW,OACX,SAAU,OACV,gBAAiBs8F,GACjB,eAAgB,UACjB,EACD,CACE,aAAc,mBACd,iBAAkB,gBAClB,UAAW,OACX,SAAU,OACV,gBAAiBA,GACjB,eAAgB,UACjB,EACD,CACE,aAAc,UACd,iBAAkB,eAClB,UAAW,aACX,SAAU,OACV,gBAAiBA,GACjB,eAAgB,UACjB,CACH,EAEaC,IAAwB,CACnC,CACE,KAAM,mBACN,UAAW,mBACX,WAAY,CACV,CACE,IAAK,SACL,QAAS,QACV,EACD,CACE,IAAK,cACL,QAAS,eACV,EACD,CACE,IAAK,WACL,QAAS,YACV,EACD,CACE,IAAK,UACL,QAAS,WACV,EACD,CACE,IAAK,aACL,QAAS,yBACV,EACD,CACE,IAAK,cACL,QAAS,eACV,EACD,CACE,IAAK,SACL,QAAS,QACV,EACD,CACE,IAAK,aACL,QAAS,YACV,EACD,CACE,IAAK,mBACL,QAAS,eACV,CACF,CACF,EACD,CACE,KAAM,qBACN,UAAW,qBACX,WAAY,CACV,CACE,IAAK,mBACL,QAAS,kBACV,EACD,CACE,IAAK,eACL,QAAS,cACV,EACD,CACE,IAAK,UACL,QAAS,cACV,CACF,CACF,CACH,EC1KMhiB,IAAc,CAClB,CACE,aAAc,OACd,iBAAkB,OAClB,UAAW,aACX,SAAU,OACV,gBAAiBz6E,GACjB,eAAgB,UACjB,EACD,CACE,aAAc,QACd,iBAAkB,QAClB,UAAW,aACX,SAAU,OACV,gBAAiBE,GACjB,eAAgB,UACjB,EACD,CACE,aAAc,eACd,iBAAkB,eAClB,UAAW,aACX,SAAU,OACV,gBAAiBA,GACjB,eAAgB,UACjB,EACD,CACE,aAAc,aACd,iBAAkB,aAClB,UAAW,aACX,SAAU,SACV,gBAAiBF,GACjB,eAAgB,UACjB,EACD,CACE,aAAc,eACd,iBAAkB,UAClB,UAAW,gBACX,SAAU,SACV,gBAAiBA,GACjB,eAAgB,UACjB,EACD,CACE,aAAc,OACd,iBAAkB,OAClB,UAAW,aACX,SAAU,SACV,gBAAiBE,GACjB,eAAgB,UACjB,EACD,CACE,aAAc,aACd,iBAAkB,aAClB,UAAW,OACX,SAAU,OACV,gBAAiBs8F,GACjB,eAAgB,UACjB,EACD,CACE,aAAc,mBACd,iBAAkB,gBAClB,UAAW,OACX,SAAU,OACV,gBAAiBA,GACjB,eAAgB,UACjB,EACD,CACE,aAAc,UACd,iBAAkB,eAClB,UAAW,aACX,SAAU,OACV,gBAAiBA,GACjB,eAAgB,UACjB,EACD,CACE,aAAc,UACd,iBAAkB,UAClB,UAAW,gBACX,SAAU,OACV,gBAAiBx8F,GACjB,eAAgB,UACjB,CACH,EAEay8F,IAAwB,CACnC,CACE,KAAM,mBACN,UAAW,mBACX,WAAY,CACV,CACE,IAAK,OACL,QAAS,MACV,EACD,CACE,IAAK,QACL,QAAS,OACV,EACD,CACE,IAAK,eACL,QAAS,cACV,EACD,CACE,IAAK,aACL,QAAS,YACV,EACD,CACE,IAAK,eACL,QAAS,SACV,EACD,CACE,IAAK,OACL,QAAS,MACV,EACD,CACE,IAAK,aACL,QAAS,YACV,EACD,CACE,IAAK,mBACL,QAAS,eACV,EACD,CACE,IAAK,UACL,QAAS,SACV,CACF,CACF,CACH,EC5HMC,IAA2B9qM,GAAO,CACtC,OAAQA,EAAG,CACT,IAAK,OACH,MAAO,O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E,EACXA,GAAG,UAAY,YACf,SAASC,GAAGn/L,EAAG,CACb,KAAK,QAAUA,CACjB,CACAm/L,GAAG,QAAU,IAAIA,GAAG,CAAC,EACrBA,GAAG,OAAS,IAAIA,GAAG,CAAC,EACpBA,GAAG,OAAS,IAAIA,GAAG,CAAC,EACpBA,GAAG,QAAU,IAAIA,GAAG,CAAC,EACrBA,GAAG,SAAW,IAAIA,GAAG,CAAC,EACtBA,GAAG,YAAcA,GAAG,SACpB,IAAIC,IAAK,SAASp/L,EAAG,CACrB,EAAGq/L,GAAK,CACN,OAAQL,GACR,QAASG,GACT,MAAOD,GACP,WAAYD,GACZ,KAAM16L,GACN,OAAQu6L,GACR,YAAaD,GACb,SAAUR,IACV,WAAYI,IACZ,UAAWD,GACX,YAAaE,GACb,QAASH,GACT,UAAWI,GACX,UAAWL,GACX,YAAaM,GACb,OAAQQ,GACV,EAAG18L,GAAIc,GACP,SAAS87L,KAAK,CACZ,GAAI97L,GACF,OAAOd,GACTc,GAAK,EACL,IAAIxD,EAAIq/L,GAAIx7L,EAAI7D,EAAE,OAAQoD,EAAIpD,EAAE,KAAMmD,EAAInD,EAAE,OAAQ++L,EAAK/+L,EAAE,UAAWO,EAAIg/L,GAAI,EAC9E,SAAS39L,GAAI,CACR,IAACpB,EAAI,CACN,mBACA,mBACA,mBACA,kBACA,mBACA,mBACA,kBACA,mBAEA,mBACA,kBACA,kBACA,iBACA,kBACA,mBACA,mBACA,mBACA,kBACA,kBACA,oBACA,mBACA,kBACA,iBACA,mBACA,mBACA,mBACA,mBAEA,mBACA,mBACA,iBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,oBACA,mBACA,mBACA,kBACA,kBACA,kBACA,mBACA,kBAEA,kBACA,mBACA,kBACA,kBACA,mBACA,oBACA,oBACA,mBACA,kBACA,kBACA,oBACA,mBACA,mBACA,kBACA,mBACA,mBACA,kBACA,mBAEA,mBACA,kBACA,kBACA,kBACA,mBACA,oBACA,oBACA,mBACA,kBACA,kBACA,mBACA,kBACA,kBACA,kBACA,mBACA,mBACA,kBACA,mBAEA,mBACA,kBACA,kBACA,kBACA,kBACA,oBACA,mBACA,oBACA,kBACA,kBACA,oBACA,kBACA,kBACA,kBACA,mBACA,mBACA,mBACA,mBAEA,kBACA,mBACA,kBACA,kBACA,mBACA,oBACA,oBACA,mBACA,kBACA,kBACA,oBACA,kBACA,kBACA,kBACA,kBACA,mBACA,mBACA,mBAEA,kBACA,mBACA,mBACA,kBACA,kBACA,kBACA,mBACA,kBACA,kBACA,kBACA,oBACA,mBACA,kBACA,mBACA,mBACA,kBACA,mBACA,mBACA,mBACA,mBACA,kBACA,mBACA,mBACA,oBACA,oBACA,oBACA,mBAEA,kBACA,oBACA,mBACA,mBACA,oBACA,mBACA,kBACA,kBACA,mBAEA,mBACA,kBACA,kBACA,kBACA,oBACA,mBACA,mBACA,oBACA,kBACA,kBACA,mBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,mBAEA,kBACA,kBACA,mBACA,mBACA,oBACA,oBACA,iBACA,oBACA,kBACA,iBACA,mBACA,kBACA,mBACA,mBACA,kBACA,mBACA,kBACA,mBAEA,mBACA,kBACA,kBACA,kBACA,oBACA,oBACA,mBACA,mBACA,kBACA,iBACA,mBACA,kBACA,mBACA,mBACA,mBACA,mBACA,kBACA,mBAEA,mBACA,oBACA,mBACA,mBACA,oBACA,oBACA,oBACA,mBACA,iBACA,kBACA,mBACA,kBACA,iBACA,oBACA,mBACA,mBACA,mBACA,mBAEA,mBACA,oBACA,mBACA,mBACA,oBACA,mBACA,mBACA,mBACA,kBACA,kBACA,mBACA,iBACA,kBACA,oBACA,mBACA,kBACA,kBACA,mBACA,mBACA,oBACA,mBACA,kBACA,oBACA,oBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,kBACA,oBACA,kBACA,iBACA,oBACA,oBACA,oBACA,mBACA,mBACA,kBACA,WAAc4C,EAAE,MAAQ,GAAM,QAC9B,WAAcA,EAAE,MAAQ,GAAM,QAC9B,WAAaA,EAAE,MAAQ,GAAM,QAC7B,WAAaA,EAAE,MAAQ,GAAM,QAC7B,UAAYA,EAAE,MAAQ,GAAM,QAC5B,UAAYA,EAAE,MAAQ,GAAM,QAC5B,UAAYA,EAAE,MAAQ,GAAM,QAC5B,SAAWA,EAAE,MAAQ,GAAM,QAC3B,mBACA,mBACA,kBACA,mBACA,mBACA,kBACA,kBAED,EAAmB1C,EAAI,CACtB,CACE,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,oBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,qBACA,qBACD,EACD,CACE,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,qBACA,sBACA,EACA,EACA,EACA,EACA,EACA,EACA,sBACA,sBACA,qBACD,EACD,CACE,kBAEA,iBACA,kBACA,kBAEA,kBACA,iBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,iBAEA,kBACA,kBACA,kBACA,mBACA,mBACA,kBACA,GACA,mBAEA,mBACA,mBACA,mBACA,oBACA,oBACA,oBACA,qBACA,kBAEA,kBACA,kBACA,kBACA,kBACA,kBACA,iBACA,iBACD,EACD,CACE,EACA,EACA,EACA,EACA,EACA,EACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,qBACA,oBACA,qBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,qBACR,CACA,EAAOre,EAAIqe,EAAEH,EAAE,UAAU,EAAGK,EAAIF,EAAEH,EAAE,UAAU,EAAGi/L,EAAK9+L,EAAEH,EAAE,UAAU,EAAGmE,E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A,EAAE,EAAE,EAAIjC,EAAGA,EAAIiC,EAAE,CAAC,EAAIjC,EAAGiC,EAAE,CAAC,EAAIjC,EAAGA,EAAIiC,EAAE,EAAE,EAAIjC,EAAGiC,EAAE,EAAE,EAAIjC,EAAGA,EAAIiC,EAAE,CAAC,EAAIjC,EAAGiC,EAAE,CAAC,EAAIjC,EAAGA,EAAIiC,EAAE,EAAE,EAAIjC,EAAGiC,EAAE,EAAE,EAAIjC,EAAGA,EAAIiC,EAAE,EAAE,EAAIjC,EAAGiC,EAAE,EAAE,EAAIjC,EAAGA,EAAIiC,EAAE,EAAE,EAAIjC,EAAGiC,EAAE,EAAE,EAAIjC,EAAGA,EAAIiC,EAAE,CAAC,EAAIA,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAIjC,EAAGA,EAAIiC,EAAE,EAAE,EAAIjC,EAAGiC,EAAE,EAAE,EAAIjC,EAAGA,EAAIiC,EAAE,EAAE,EAAIjC,EAAGiC,EAAE,EAAE,EAAIjC,EAAGA,EAAIiC,EAAE,CAAC,EAAIjC,EAAGiC,EAAE,CAAC,EAAIjC,EAAGA,EAAIiC,EAAE,CAAC,EAAIjC,EAAGiC,EAAE,CAAC,EAAIjC,EAAGA,EAAIiC,EAAE,EAAE,EAAIjC,EAAGiC,EAAE,EAAE,EAAIjC,EAAGA,EAAIiC,EAAE,EAAE,EAAIjC,EAAGiC,EAAE,EAAE,EAAIjC,EAAGA,EAAIiC,EAAE,CAAC,EAAIjC,EAAGiC,EAAE,CAAC,EAAIjC,EAAGA,EAAIiC,EAAE,CAAC,EAAIjC,EAAGiC,EAAE,CAAC,EAAIjC,EAAGA,EAAIiC,EAAE,EAAE,EAAIjC,EAAGiC,EAAE,EAAE,EAAIjC,EAAGA,EAAIiC,EAAE,EAAE,EAAIjC,EAAGiC,EAAE,EAAE,EAAIjC,EAAGA,EAAIiC,EAAE,EAAE,EAAIjC,EAAGiC,EAAE,EAAE,EAAIjC,EAAGA,EAAIiC,EAAE,EAAE,EAAIjC,EAAGiC,EAAE,EAAE,EAAIjC,EAAGA,EAAIiC,EAAE,EAAE,EAAIjC,EAAGiC,EAAE,EAAE,EAAIjC,EAAGA,EAAIiC,EAAE,EAAE,EAAIjC,EAAGiC,EAAE,EAAE,EAAIjC,EAAGA,EAAIiC,EAAE,CAAC,EAAGA,EAAE,CAAC,GAAKA,EAAE,EAAE,EAAGA,EAAE,EAAE,GAAKjC,EAAGA,EAAIiC,EAAE,CAAC,EAAGA,EAAE,CAAC,GAAKA,EAAE,EAAE,EAAGA,EAAE,EAAE,GAAKjC,EAAGA,EAAIiC,EAAE,EAAE,EAAGA,EAAE,EAAE,GAAKA,EAAE,EAAE,EAAGA,EAAE,EAAE,GAAKjC,EAAGA,EAAIiC,EAAE,EAAE,EAAGA,EAAE,EAAE,GAAKA,EAAE,EAAE,EAAGA,EAAE,EAAE,GAAKjC,EAAGA,EAAIiC,EAAE,CAAC,EAAGA,EAAE,CAAC,GAAKA,EAAE,EAAE,EAAGA,EAAE,EAAE,GAAKjC,EAAGA,EAAIiC,EAAE,CAAC,EAAGA,EAAE,CAAC,GAAKA,EAAE,EAAE,EAAGA,EAAE,EAAE,GAAKjC,EAAGA,EAAIiC,EAAE,EAAE,EAAGA,EAAE,EAAE,GAAKA,EAAE,CAAC,EAAGA,EAAE,CAAC,GAAKjC,EAAGA,EAAIiC,EAAE,EAAE,EAAGA,EAAE,EAAE,GAAKA,EAAE,CAAC,EAAGA,EAAE,CAAC,GAAKjC,EAAGA,EAAIiC,EAAE,CAAC,EAAGA,EAAE,CAAC,GAAKA,EAAE,EAAE,EAAGA,EAAE,EAAE,GAAKjC,EAAGA,EAAIiC,EAAE,CAAC,EAAGA,EAAE,CAAC,GAAKA,EAAE,EAAE,EAAGA,EAAE,EAAE,GAAKjC,EAAGA,EAAIiC,EAAE,EAAE,EAAGA,EAAE,EAAE,GAAKA,EAAE,EAAE,EAAGA,EAAE,EAAE,GAAKjC,EAAGA,EAAIiC,EAAE,EAAE,EAAGA,EAAE,EAAE,GAAKA,EAAE,EAAE,EAAGA,EAAE,EAAE,GAAKjC,EAAGA,EAAIiC,EAAE,EAAE,EAAGA,EAAE,EAAE,GAAKA,EAAE,EAAE,EAAGA,EAAE,EAAE,GAAKjC,EAAGA,EAAIiC,EAAE,EAAE,EAAGA,EAAE,EAAE,GAAKA,EAAE,EAAE,EAAGA,EAAE,EAAE,GAAKjC,EAAGA,EAAIiC,EAAE,EAAE,EAAGA,EAAE,EAAE,GAAKA,EAAE,CAAC,EAAGA,EAAE,CAAC,GAAKjC,EAAGA,EAAIiC,EAAE,EAAE,EAAGA,EAAE,EAAE,GAAKA,EAAE,CAAC,EAAGA,EAAE,CAA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A8B,GACjCA,GAAG,uBAAyBA,GAAG,cAAgBA,GAAG,0BAA4BA,GAAG,4BAA8B,EAC/G,SAASA,IAAK,CACZ,IAAIzmM,EAAI,MAAO6D,EAAI,IAAMT,EAAIqjM,GAAG,0BAA2BtjM,EAAIsjM,GAAG,4BAA6B1H,EAAK,CAClG,CACE,cACA,kBACA,iBACA,iBACA,iBACA,mBACA,gBACA,kBACA,iBACA,mBACA,gBACA,gBACA,iBACA,kBACA,gBACA,iBACA,gBACA,iBACA,gBACA,gBACA,eACD,EACD,CACE,eACA,kBACA,iBACA,iBACA,iBACA,kBACA,iBACA,gBACA,iBACA,kBACA,gBACA,iBACA,iBACA,kBACA,gBACA,iBACA,iBACA,iBACA,gBACA,gBACA,gBACD,EACD,CACE,gBACA,kBACA,iBACA,iBACA,iBACA,kBACA,gBACA,iBACA,iBACA,kBACA,gBACA,iBACA,gBACA,iBACA,gBACA,gBACA,iBACA,iBACA,gBACA,eACA,gBACD,EACD,CACE,gBACA,kBACA,iBACA,gBACA,iBACA,gBACA,gBACA,gBACA,iBACA,iBACA,iBACA,gBACA,iBACA,iBACA,gBACA,gBACA,eACA,gBACA,gBACA,gBACA,gBACD,EACD,CACE,gBACA,kBACA,gBACA,gBACA,iBACA,gBACA,gBACA,iBACA,iBACA,gBACA,gBACA,iBACA,gBACA,iBACA,gBACA,gBACA,gBACA,iBACA,gBACA,gBACA,eACD,EACD,CACE,eACA,iBACA,iBACA,gBACA,iBACA,eACA,iBACA,gBACA,gBACA,iBACA,iBACA,gBACA,gBACA,gBACA,gBACA,gBACA,iBACA,gBACA,iBACA,gBACA,eACD,EACD,CACE,gBACA,kBACA,iBACA,gBACA,eACA,iBACA,gBACA,gBACA,iBACA,gBACA,eACA,iBACA,iBACA,eACA,gBACA,iBACA,gBACA,gBACA,gBACA,gBACA,gBACD,EACD,CACE,gBACA,iBACA,iBACA,iBACA,iBACA,iBACA,gBACA,eACA,gBACA,gBACA,gBACA,iBACA,iBACA,iBACA,gBACA,iBACA,gBACA,gBACA,iBACA,gBACA,gBACD,EACD,CACE,gBACA,gBACA,iBACA,iBACA,iBACA,iBACA,gBACA,iBACA,iBACA,gBACA,gBACA,gBACA,iBACA,iBACA,iBACA,iBACA,cACA,gBACA,eACA,eACA,gBACN,CACG,EAAEx+L,EAAI,CACL,CACE,gBACA,kBACA,kBACA,gBACA,eACD,EACD,CACE,gBACA,kBACA,kBACA,eACA,eACD,EACD,CACE,gBACA,kBACA,kBACA,gBACA,eACD,EACD,CACE,gBACA,kBACA,kBACA,gBACA,eACD,EACD,CACE,gBACA,kBACA,kBACA,gBACA,eACD,EACD,CACE,gBACA,kBACA,kBACA,gBACA,eACD,EACD,CACE,gBACA,kBACA,kBACA,gBACA,eACD,EACD,CACE,gBACA,iBACA,kBACA,gBACA,eACD,EACD,CACE,gBACA,kBACA,kBACA,gBACA,eACN,CACG,EACD,SAASqB,EAAEvf,EAAGue,EAAG4+L,EAAI96L,EAAG+6L,EAAIt5L,EAAG,CAC7B,KAAOs5L,KAAQ,GACbD,EAAG96L,CAAC,EAAI,MAAQriB,EAAEue,EAAI,CAAC,EAAIuF,EAAE,CAAC,EAAIq5L,EAAG96L,EAAI,CAAC,EAAIyB,EAAE,CAAC,EAAI9jB,EAAEue,EAAI,CAAC,EAAIuF,EAAE,CAAC,EAAIq5L,EAAG96L,EAAI,CAAC,EAAIyB,EAAE,CAAC,EAAI9jB,EAAEue,EAAI,CAAC,EAAIuF,EAAE,CAAC,EAAIq5L,EAAG96L,EAAI,CAAC,EAAIyB,EAAE,CAAC,EAAI9jB,EAAEue,EAAI,CAAC,EAAIuF,EAAE,CAAC,EAAIq5L,EAAG96L,EAAI,CAAC,EAAIyB,EAAE,CAAC,EAAI9jB,EAAEue,EAAI,CAAC,EAAIuF,EAAE,CAAC,EAAIq5L,EAAG96L,EAAI,CAAC,EAAIyB,EAAE,CAAC,EAAI9jB,EAAEue,EAAI,CAAC,EAAIuF,EAAE,EAAE,EAAIq5L,EAAG96L,EAAI,CAAC,EAAIyB,EAAE,EAAE,EAAI9jB,EAAEue,EAAI,CAAC,EAAIuF,EAAE,E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A,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACF,EACAA,GAAG,KAAO,CACR,EACA,EACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,GACA,EACA,EACA,GACA,EACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,EACA,GACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACF,EACAA,GAAG,KAAO,CACR,EACA,EACA,EACA,GACA,GACA,EACA,EACA,EACA,EACA,GACA,EACA,EACA,EACA,EACA,EACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,EACA,EACA,GACA,EACA,EACA,GACA,EACA,EACA,EACA,EACA,CACF,EACAA,GAAG,KAAO,CACR,EACA,EACA,EACA,GACA,GACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GACA,EACA,EACA,GACA,EACA,EACA,GACA,EACA,EACA,EACA,EACA,EACA,GACA,EACA,EACA,EACA,EACA,CACF,EACAA,GAAG,MAAQ,CACT,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,EACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACF,EACAA,GAAG,MAAQ,CACT,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,EACA,GACA,GACA,EACA,EACA,EACA,GACA,EACA,EACA,EACA,EACA,EACA,EACA,CACF,EACAA,GAAG,MAAQ,CACT,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,GACA,GACA,EACA,GACA,EACA,EACA,EACA,CACF,EACAA,GAAG,MAAQ,CACT,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,EACA,CACF,EACAA,GAAG,MAAQ,CACT,EACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,GACA,IACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,EACA,CACF,EACAA,GAAG,MAAQ,CACT,EACA,EACA,GACA,GACA,GACA,GACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,GACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,EACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,EACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,EACA,IACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,EACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,EACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,EACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,IACA,KACA,IACA,EACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,KACA,IACA,IACA,EACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,EACA,EACA,EACA,EACA,CACF,EACAA,GAAG,MAAQ,CACT,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,EACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,EACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,EACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACF,EACAA,GAAG,MAAQ,CACT,EACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,EACF,EACAA,GAAG,MAAQ,CACT,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,CACF,EACAA,GAAG,IAAM,CACP,EACA,EACA,EACA,CACF,EACAA,GAAG,IAAM,CACP,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACF,EACAA,GAAG,IAAM,CACP,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACF,EACAA,GAAG,IAAM,CACP,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GACA,EACA,EACA,EACA,EACF,EACAA,GAAG,IAAM,CACP,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACF,EACAA,GAAG,IAAM,CACP,EACA,EACA,EACA,EACA,EACA,GACA,EACA,EACA,EACA,EACA,EACA,GACA,EACA,EACA,EACA,GACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,EACF,EACAA,GAAG,IAAM,CACP,EACA,EACA,EACA,EACA,EACA,GACA,EACA,EACA,EACA,GACA,GACA,GACA,EACA,EACA,EACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACF,EACAA,GAAG,IAAM,CACP,EACA,EACA,EACA,EACA,EACA,GACA,EACA,EACA,EACA,EACA,EACA,GACA,EACA,EACA,EACA,EACA,EACA,GACA,EACA,EACA,EACA,EACA,EACA,GACA,EACA,EACA,EACA,EACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,EACF,EACAA,GAAG,KAAO,CACR,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACF,EACAA,GAAG,KAAO,CACR,EACA,EACA,EACA,EACA,EACA,GACA,EACA,GACA,EACA,EACA,EACA,EACA,GACA,GACA,EACA,GACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,EACF,EACAA,GAAG,KAAO,CACR,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,EACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,EACA,EACA,EACA,EACA,EACA,GACA,EACA,GACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACF,EACAA,GAAG,KAAO,CACR,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACF,EACAA,GAAG,KAAO,CACR,EACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACF,EACAA,GAAG,OAAS,CACV,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACF,EACAA,GAAG,KAAO,CACR,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACF,EACAA,GAAG,KAAO,CACR,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,CACF,EACAA,GAAG,KAAO,CACR,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACF,EACAA,GAAG,KAAO,CACR,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACF,EACAA,GAAG,GAAK,CAEN,IAAID,GAAG,EAAG,EAAG,KAAM,IAAI,EACvB,IAAIA,GAAG,EAAG,EAAGC,GAAG,KAAMA,GAAG,GAAG,EAC5B,IAAID,GAAG,EAAG,EAAGC,GAAG,KAAMA,GAAG,GAAG,EAC5B,IAAID,GAAG,EAAG,EAAGC,GAAG,KAAMA,GAAG,GAAG,EAC5B,IAAID,GAAG,EAAG,EAAG,KAAM,IAAI,EAEvB,IAAIA,GAAG,EAAG,EAAGC,GAAG,KAAMA,GAAG,GAAG,EAC5B,IAAID,GAAG,EAAG,EAAGC,GAAG,KAAMA,GAAG,GAAG,EAC5B,IAAID,GAAG,EAAG,EAAGC,GAAG,KAAMA,GAAG,GAAG,EAC5B,IAAID,GAAG,EAAG,EAAGC,GAAG,KAAMA,GAAG,GAAG,EAC5B,IAAID,GAAG,EAAG,EAAGC,GAAG,KAAMA,GAAG,GAAG,EAC5B,IAAID,GAAG,EAAG,EAAGC,GAAG,MAAOA,GAAG,IAAI,EAC9B,IAAID,GAAG,EAAG,EAAGC,GAAG,MAAOA,GAAG,IAAI,EAC9B,IAAID,GAAG,EAAG,EAAGC,GAAG,MAAOA,GAAG,IAAI,EAC9B,IAAID,GAAG,GAAI,EAAGC,GAAG,MAAOA,GAAG,IAAI,EAC/B,IAAID,GAAG,EAAG,EAAG,KAAMC,GAAG,MAAM,EAE5B,IAAID,GAAG,GAAI,EAAGC,GAAG,MAAOA,GAAG,IAAI,EAC/B,IAAID,GAAG,EAAG,EAAGC,GAAG,MAAOA,GAAG,IAAI,EAC9B,IAAID,GAAG,EAAG,EAAGC,GAAG,MAAOA,GAAG,IAAI,EAC9B,IAAID,GAAG,EAAG,EAAGC,GAAG,MAAOA,GAAG,IAAI,EAC9B,IAAID,GAAG,EAAG,GAAIC,GAAG,MAAOA,GAAG,IAAI,EAC/B,IAAID,GAAG,EAAG,GAAIC,GAAG,MAAOA,GAAG,IAAI,EAC/B,IAAID,GAAG,EAAG,IAAKC,GAAG,MAAOA,GAAG,IAAI,EAChC,IAAID,GAAG,GAAI,KAAMC,GAAG,MAAOA,GAAG,IAAI,EAClC,IAAID,GAAG,GAAI,KAAMC,GAAG,MAAOA,GAAG,IAAI,EAClC,IAAID,GAAG,EAAG,GAAIC,GAAG,MAAOA,GAAG,IAAI,EAC/B,IAAID,GAAG,EAAG,GAAIC,GAAG,MAAOA,GAAG,IAAI,EAC/B,IAAID,GAAG,EAAG,GAAIC,GAAG,MAAOA,GAAG,IAAI,EAC/B,IAAID,GAAG,EAAG,IAAKC,GAAG,MAAOA,GAAG,IAAI,EAChC,IAAID,GAAG,EAAG,IAAKC,GAAG,MAAOA,GAAG,IAAI,EAChC,IAAID,GAAG,EAAG,IAAKC,GAAG,MAAOA,GAAG,IAAI,EAChC,IAAID,GAAG,GAAI,KAAMC,GAAG,MAAOA,GAAG,IAAI,EAClC,IAAID,GAAG,GAAI,KAAMC,GAAG,MAAOA,GAAG,IAAI,EAClC,IAAID,GAAG,EAAG,EAAGC,GAAG,MAAOA,GAAG,IAAI,EAC9B,IAAID,GAAG,EAAG,EAAGC,GAAG,MAAOA,GAAG,IAAI,CAChC,EACAA,GAAG,SAAW,CACZ,MACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,QACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,QACA,QACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,QACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,OACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,MACF,EACAA,GAAG,QAAU,CACX,MACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,MACF,EACAA,GAAG,QAAU,CACX,MACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,MACF,EACAA,GAAG,cAAgB,CACjB,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,EAAE,EAEjE,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAE,EAErE,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAA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EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EACpB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAErB,EAED,IAAIA,EACF,CACE,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACD,EACD,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,GAAG,EACxD,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EACpB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAErB,EAED,IAAIA,EACF,CACE,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACD,EACD,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,GAAG,EACvD,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EACpB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAErB,EAED,IAAIA,EACF,CACE,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACD,EACD,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,GAAG,EACvD,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EACpB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAErB,EAED,IAAIA,EACF,CACE,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACD,EACD,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,GAAG,EACxD,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EACpB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAErB,EAED,IAAIA,EACF,CACE,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACD,EACD,CACE,EAAI,EACJ,GAAK,EACL,GAAK,EACL,GAAK,EACL,GAAK,EACL,GAAK,EACL,IAAM,EACN,IAAM,EACN,IAAM,EACN,IAAM,EACN,IAAM,EACN,IAAM,EACN,IAAM,EACN,IAAM,CACP,EACD,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EACpB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAErB,EAED,IAAIA,EACF,CACE,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACD,EACD,CACE,EAAI,EACJ,GAAK,EACL,GAAK,EACL,GAAK,EACL,GAAK,EACL,GAAK,EACL,IAAM,EACN,IAAM,EACN,IAAM,EACN,IAAM,EACN,IAAM,EACN,IAAM,EACN,IAAM,EACN,IAAM,CACP,EACD,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EACpB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAErB,EAED,IAAIA,EACF,CACE,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACD,EACD,CACE,EAAI,EACJ,GAAK,EACL,GAAK,EACL,GAAK,EACL,IAAM,EACN,IAAM,EACN,IAAM,EACN,IAAM,EACN,IAAM,EACN,IAAM,EACN,IAAM,EACN,IAAM,EACN,IAAM,EACN,IAAM,CACP,EACD,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EACpB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAE5B,CACK,EACD,IAAIF,EAAIS,EAAE9D,EAAItN,EAAI,CAAC,EAAGwR,EAAIJ,EAAE9D,CAAC,EAAGqE,EAAIP,EAAE/Q,CAAC,EAAGuV,EAAIxE,EAAE/Q,CAAC,EACjD,KAAK,MAAQuV,EACb,SAAS26L,EAAGj/L,EAAGR,EAAG,CAChB,IAAIgF,EAAIw6L,EAAG,WAAWx/L,EAAGQ,CAAC,EAC1B,OAAOwE,GAAK5V,EAAG4V,EAAI,KAAK,IAAI,GAAIA,EAAI,GAAKxE,EAAE,QAAQ,EAAGwE,CAC5D,CACI,SAAS9X,EAAEsT,EAAG,CACZ,QAASR,EAAIQ,EAAE,eAAe,IAAI,EAAGwE,EAAIxE,EAAE,eAAe,IAAI,OAAQqE,EAAIrE,EAAE,eAAe,IAAI,EAAGI,GAAIJ,EAAE,eAAe,IAAI,OAAQP,EAAIO,EAAE,eAAgBjhB,EAAIihB,EAAE,eAAgB9Z,EAAI,EAAGA,EAAIoZ,EAAE,QAASpZ,IAAK,CACxM,IAAIuI,EAAIgR,EAAE,cAAc,EAAEvZ,CAAC,EAAGyI,EAAI8Q,EAAE,cAAc,EAAEvZ,EAAI,CAAC,EACzDsZ,EAAEtZ,CAAC,EAAIwc,EAAE,UACT,QAAShS,EAAIjC,EAAGiC,EAAI/B,EAAG+B,IAAK,CAC1B,IAAIuQ,GAAIvQ,EAAI3R,EAAI,KAAMsjB,GAAI48L,EAAGj/L,EAAGiB,EAAC,EACjCzB,EAAEtZ,CAAC,EAAI,KAAK,IAAIsZ,EAAEtZ,CAAC,EAAGmc,EAAC,CACjC,CACA,CACM,QAASnc,EAAI,EAAGA,EAAIoZ,EAAE,OAAQpZ,IAAK,CACjC,IAAIuI,EAAIgR,EAAE,cAAc,OAAOvZ,CAAC,EAAGyI,EAAI8Q,EAAE,cAAc,OAAOvZ,EAAI,CAAC,EACnEse,EAAEte,CAAC,EAAIwc,EAAE,UACT,QAAShS,EAAIjC,EAAGiC,EAAI/B,EAAG+B,IAAK,CAC1B,IAAIuQ,GAAIvQ,EAAI3R,EAAI,KAAMsjB,GAAI48L,EAAGj/L,EAAGiB,EAAC,EACjCuD,EAAEte,CAAC,EAAI,KAAK,IAAIse,EAAEte,CAAC,EAAGmc,EAAC,CACjC,CACA,CACM,QAASnc,EAAI,EAAGA,EAAIoZ,EAAE,QAASpZ,IAAK,CAClC,IAAIuI,EAAIgR,EAAE,cAAc,EAAEvZ,CAAC,EAAGyI,EAAI8Q,EAAE,cAAc,EAAEvZ,EAAI,CAAC,EACzDme,EAAEne,CAAC,EAAIwc,EAAE,UACT,QAAShS,EAAIjC,EAAGiC,EAAI/B,EAAG+B,IAAK,CAC1B,IAAIuQ,GAAIvQ,EAAI3R,EAAI,IAAKsjB,GAAI48L,EAAGj/L,EAAGiB,EAAC,EAChCoD,EAAEne,CAAC,EAAI,KAAK,IAAIme,EAAEne,CAAC,EAAGmc,EAAC,CACjC,CACQgC,EAAEne,CAAC,GAAKuZ,EAAE,cAAc,EAAEvZ,EAAI,CAAC,EAAIuZ,EAAE,cAAc,EAAEvZ,CAAC,CAC9D,CACM,QAASA,EAAI,EAAGA,EAAIoZ,EAAE,OAAQpZ,IAAK,CACjC,IAAIuI,EAAIgR,EAAE,cAAc,OAAOvZ,CAAC,EAAGyI,EAAI8Q,EAAE,cAAc,OAAOvZ,EAAI,CAAC,EACnEka,GAAEla,CAAC,EAAIwc,EAAE,UACT,QAAShS,EAAIjC,EAAGiC,EAAI/B,EAAG+B,IAAK,CAC1B,IAAIuQ,GAAIvQ,EAAI3R,EAAI,IAAKsjB,GAAI48L,EAAGj/L,EAAGiB,EAAC,EAChCb,GAAEla,CAAC,EAAI,KAAK,IAAIka,GAAEla,CAAC,EAAGmc,EAAC,CACjC,CACQjC,GAAEla,CAAC,GAAKuZ,EAAE,cAAc,EAAE,EAAE,EAAIA,EAAE,cAAc,EAAE,EAAE,CAC5D,CACM,GAAIO,EAAE,MAAO,CACX,QAAS9Z,EAAI,EAAGA,EAAIoZ,EAAE,QAASpZ,IAC7BsZ,EAAEtZ,CAAC,EAAI,MACT,QAASA,EAAI,EAAGA,EAAIoZ,EAAE,OAAQpZ,IAC5Bse,EAAEte,CAAC,EAAI,MACT,QAASA,EAAI,EAAGA,EAAIoZ,EAAE,QAASpZ,IAC7Bme,EAAEne,CAAC,EAAI,MACT,QAASA,EAAI,EAAGA,EAAIoZ,EAAE,OAAQpZ,IAC5Bka,GAAEla,CAAC,EAAI,KACjB,CACMuZ,EAAE,IAAI,MAAQ,GAAK,KAAK,MAAMw/L,EAAGj/L,EAAG,EAAE,CAAC,CAC7C,CACI,KAAK,eAAiB,SAASA,EAAG,CAChC,IAAIR,EAAIQ,EAAE,eAAgBwE,EAAIhF,EAAE,QAAS6E,EACzC,GAAI7E,EAAE,qBAAuB,EAAG,CAC9B,IAAKA,EAAE,oBAAsB,EAAGgF,EAAE,gBAAkB,EAAG9X,EAAEsT,CAAC,EAAGK,EAAE,CAAC,EAAI,EAAGgE,EAAI,EAAGA,EAAItV,EAAGsV,IACnFhE,EAAEgE,CAAC,EAAI,KAAK,IAAIA,EAAG,EAAI,CAAC,EAC1B,IAAKA,EAAI,EAAGA,EAAItV,EAAI,EAAGsV,IACrBC,EAAED,CAAC,EAAIA,EAAI,EAAI,KAAK,IAClB,IAAOhE,EAAEgE,CAAC,EAAIhE,EAAEgE,EAAI,CAAC,GACrB,GACD,EACH,IAAKC,EAAED,CAAC,EAAI,GAAKA,EAAI,EAAGA,EAAIrI,EAAGqI,IAC7BnE,EAAEmE,CAAC,EAAI,KAAK,IAAI,GAAIA,EAAI,KAAO,MAAO,EACxC,IAAKA,EAAI,EAAGA,GAAKrI,EAAItN,EAAG2V,IACtBhF,EAAEgF,CAAC,EAAI,KAAK,IAAI,GAAIA,EAAI,IAAM3V,GAAK,GAAI,EACzCqwM,EAAG,aAAav/L,CAAC,EACjB,CACE,IAAIY,GAAGX,EAAG1gB,EAAGmH,EACb,IAAKme,EAAIrE,EAAE,eAAiB,EAAI,GAAIqE,GAAK,KAAOA,GAAK,IAAKjE,GAAI,KAAK,IAAI,GAAIiE,EAAI,EAAI,EAAE,EAAGA,EAAIrE,EAAE,eAAiB,EAAI,GAAIqE,GAAK,KAAOA,GAAK,IAAK5E,EAAI,KAAK,IAAI,GAAI4E,EAAI,EAAI,EAAE,EAAGA,EAAIrE,EAAE,eAAiB,GAAK,GAAIqE,GAAK,KAAOA,GAAK,IAAKtlB,EAAI,KAAK,IAAI,GAAIslB,EAAI,EAAI,EAAE,EAAGA,EAAIrE,EAAE,eAAiB,GAAK,GAAIqE,GAAK,KAAOA,GAAK,IAAKne,EAAInH,EAAI,KAAK,IAAI,GAAIslB,EAAI,EAAI,EAAE,EAAGA,EAAI,EAAGA,EAAI/E,EAAE,QAAS+E,IAAK,CAChX,IAAI5V,EACJ4V,GAAK,EAAI5V,EAAI2R,GAAIiE,GAAK,GAAK5V,EAAIgR,EAAI4E,GAAK,GAAK5V,EAAI1P,EAAI0P,EAAIvI,EAAGsZ,EAAE,MAAM,SAAS6E,CAAC,EAAI5V,CAC9F,CACU,IAAK4V,EAAI,EAAGA,EAAI/E,EAAE,QAAS+E,IAAK,CAC9B,IAAI5V,EACJ4V,GAAK,EAAI5V,EAAI2R,GAAIiE,GAAK,GAAK5V,EAAIgR,EAAI4E,GAAK,GAAK5V,EAAI1P,EAAI0P,EAAIvI,EAAGsZ,EAAE,MAAM,UAAU6E,CAAC,EAAI5V,CAC/F,CACA,CACA,CACA,EAAO,KAAK,MAAQ,SAASuR,EAAGR,EAAGgF,EAAGH,EAAGjE,GAAGX,EAAG,CACzC,IAAI1gB,EAAIihB,EAAE,eAAgB9Z,EAAI,EAAGuI,EAAGE,EAAIwS,EAAE,CAAC,EAAGzQ,EAAGuQ,GAAI,IAAIk+L,EAAGj5M,CAAC,EAAGmc,GAAI4B,EAAE,YAAYjE,EAAGqE,EAAGpD,GAAGxB,CAAC,EAC5FvZ,EAAI+a,GAAE,KACN,IAAItB,GAAIzZ,EAAImc,GACZ,IAAK1C,GAAIM,EAAE,uBAAyBN,GAAIM,EAAE,sBAAuBxR,EAAI,EAAGiC,EAAI,EAAGA,EAAI3R,EAAE,aAAc,EAAE2R,EACnG8T,EAAE9T,CAAC,EAAI,KAAK,IACVuP,EAAE,qBACF/Z,EAAInH,EAAE,YAChB,EAAW4P,EAAE+B,CAAC,EAAI,EAAI8T,EAAE9T,CAAC,EAAI8O,EAAEY,EAAC,EAAE1P,CAAC,EAAI,IAAM8T,EAAE9T,CAAC,EAAG/B,EAAE+B,CAAC,EAAI2T,EAAI,EAAI,IAAM1V,EAAE+B,CAAC,EAAI2T,EAAI,EAAI,GAAI1V,EAAE+B,CAAC,EAAI,IAAM/B,EAAE+B,CAAC,EAAI,GAAI/B,EAAE+B,CAAC,EAAI8T,EAAE9T,CAAC,EAAIuP,EAAE,uBAAyBtR,EAAE+B,CAAC,EAAI,KAAK,IAC9J,EACAuP,EAAE,qBAAuBuE,EAAE9T,CAAC,CACtC,GAAYjC,GAAKE,EAAE+B,CAAC,EACd,GAAIjC,EAAI4T,GACN,IAAK3R,EAAI,EAAGA,EAAI3R,EAAE,aAAc,EAAE2R,EAChC/B,EAAE+B,CAAC,EAAI2R,GAAI1T,EAAE+B,CAAC,EAAIjC,EACtB,IAAKiC,EAAI,EAAGA,EAAI3R,EAAE,aAAc,EAAE2R,EAChC8T,EAAE9T,CAAC,GAAK/B,EAAE+B,CAAC,EAAG2R,IAAK1T,EAAE+B,CAAC,EACxB,IAAKjC,EAAI,EAAGiC,EAAI,EAAGA,EAAI3R,EAAE,aAAc,EAAE2R,EACvCjC,GAAK+V,EAAE9T,CAAC,EACV,GAAIjC,EAAIwR,EAAE,qBAAsB,CAC9B,IAAIiB,GAAI,EACR,IAAKxQ,EAAI,EAAGA,EAAI3R,EAAE,aAAc,EAAE2R,EAChC8T,EAAE9T,CAAC,GAAKuP,EAAE,qBAAsBuE,EAAE9T,CAAC,GAAKjC,EAAGyS,IAAKsD,EAAE9T,CAAC,CAC7D,CACM,OAAOiP,EACb,EAAO,KAAK,YAAc,SAASK,EAAGR,EAAGgF,EAAGH,EAAG,CACzCtE,EAAEC,EAAE,CAAC,EAAIA,EAAE,CAAC,GAAKC,EAAE,oBAAoB,EACvC,IAAIG,GAAI,KAAQ,GAAMZ,GAAK,GAC3BY,GAAI,IAAMA,GAAI,GAAIA,GAAI,KAAQA,GAAI,IAClC,IAAIX,EAAI,EAAIW,GAAI,IAAOJ,EAAE,CAAC,EAAIA,EAAE,CAAC,GACjCP,EAAIQ,EAAE,qBAAuBD,EAAE,CAAC,IAAMP,EAAIQ,EAAE,qBAAuBD,EAAE,CAAC,GAAIP,EAAI,IAAMA,EAAI,GAAIO,EAAE,CAAC,GAAK,MAAQA,EAAE,CAAC,EAAIP,EAAI,KAAOO,EAAE,CAAC,EAAIwE,IAAMxE,EAAE,CAAC,GAAKP,GAAIO,EAAE,CAAC,GAAKP,IAAMO,EAAE,CAAC,GAAKA,EAAE,CAAC,EAAI,IAAKA,EAAE,CAAC,EAAI,MAAOP,EAAIO,EAAE,CAAC,EAAIA,EAAE,CAAC,EAAGP,EAAI4E,IAAMrE,EAAE,CAAC,EAAIqE,EAAIrE,EAAE,CAAC,EAAIP,EAAGO,EAAE,CAAC,EAAIqE,EAAIrE,EAAE,CAAC,EAAIP,GAAIM,EAAEC,EAAE,CAAC,GAAKC,EAAE,oBAAoB,EAAGF,EAAEC,EAAE,CAAC,GAAKC,EAAE,oBAAoB,EAAGF,EAAEC,EAAE,CAAC,EAAIA,EAAE,CAAC,GAAKC,EAAE,oBAAoB,CAC3X,EAAE,KAAK,UAAY,SAASD,EAAGR,EAAGgF,EAAG,CACpC,IAAIH,EAAI,YAAajE,GAAI,YAAaX,EAAI6+L,EAAG,aAAa9+L,EAAG,EAAE,EAAGzgB,EAAIihB,EAAIA,EAAG9Z,EAAI,EACjF,OAAOuZ,GAAK+E,EAAGzlB,EAAI,QAAUmH,EAAI,EAAIo4M,EAAG,aAAav/M,EAAG,GAAKslB,CAAC,GAAIne,EAAI,IAAMA,EAAI,GAAIuZ,GAAKvZ,EAAGuZ,GAAK+E,EAAIH,EAAIjE,GAAG,KAAK,IAAI,GAAI,GAAMX,CAAC,CACtI,EAAO,KAAK,UAAY,SAASO,EAAGR,EAAGgF,EAAGH,EAAG,CACvC,IAAIjE,GAAI,EAAGX,EAAIO,EAAE,eAAgBjhB,EAAGmH,EAAI,EAAGuI,EAAI,EAAGE,EAAI8Q,EAAE,IAAK/O,EAAI8T,EAAE,GAAIvD,GAAIjB,EAAE,KAAO2C,EAAE,SAAW,EAAI,EAAGN,GAAI5C,EAAE,cAC9G,KAAMO,EAAE,KAAO2C,EAAE,UAAY3C,EAAE,KAAO2C,EAAE,UAAYN,GAAI,GAAItjB,EAAI,EAAGA,EAAIylB,EAAE,SAAUzlB,IAAK,CACtF,IAAI4gB,GAAGuB,GAAGq+L,GAAIC,GAAIC,GAAIC,GACtB1/L,EAAE,KAAO2C,EAAE,QAAU3C,EAAE,KAAO2C,EAAE,SAAWzB,GAAI,UAAUvS,EAAE,OAAQA,EAAE,EAAE5P,CAAC,EAAG4P,EAAE,KAAK,EAAIuS,GAAIvS,EAAE,OAASA,EAAE,EAAE5P,CAAC,EAAG0gN,GAAKj7L,EAAE,MAAMzlB,CAAC,EAAGwgN,GAAKr+L,GAAIu+L,GAAID,GAAK9/L,EAAGggM,GAAKD,IAAM,EAAG9/L,GAAI,EACrK,EAAG,CACD,IAAIggM,GAAIC,GACRD,GAAKjvM,EAAExK,CAAC,EAAIwK,EAAExK,CAAC,EAAGyZ,IAAKggM,GAAIH,IAAMG,GAAKJ,GAAKI,GAAKJ,GAAIr5M,IAAK05M,GAAKlvM,EAAExK,CAAC,EAAIwK,EAAExK,CAAC,EAAGyZ,IAAKigM,GAAIJ,IAAMI,GAAKL,GAAKK,GAAKL,GAAIr5M,GACvH,OAAiB,EAAEw5M,GAAK,GAChB,GAAI//L,GAAIuB,IAAKzS,IAAK1P,GAAKugB,EAAE,QAAS,CAChC,IAAIugM,GAAK3+L,GAAIzB,EAAE,MAAM,SAAS1gB,CAAC,EAC/BygN,GAAKK,KAAOL,GAAKK,GAC3B,CACQ,GAAI5+L,IAAK,IAAMC,GAAIs+L,IAAK,CAACx/L,EAAE,QAAS,CAClC,IAAI2pE,GAAKnqE,EAAE,GAAG,EAAEzgB,CAAC,EACjB,GAAI4qF,GAAK,EAAG,CACV,IAAIk2H,GACJA,GAAKlgM,GAAIH,EAAE,IAAI,EAAEzgB,CAAC,EAAIsjB,GAAIsnE,GAAI1oE,IAAK,IAAM4+L,IAAMpgM,EAAE,MAAM,SAAS1gB,CAAC,GAAImiB,GAAI2+L,KAAO3+L,GAAI2+L,GAChG,CACA,CACQ5+L,IAAK,EAAIoD,EAAEjE,IAAG,EAAIc,GAAImD,EAAEjE,IAAG,EAAIc,GAAIzB,EAAE,MAAM,SAAS1gB,CAAC,CAC7D,CACM,IAAIikN,GAAK,IACT,GAAIx+L,EAAE,YAAclF,EAAE,WACpB,QAASzQ,EAAI,IAAKA,KAAO,GAAKsR,EAAE,GAAGzP,EAAE7B,CAAC,EAAG,CAAC,GACxCm0M,GAAKn0M,EACT2V,EAAE,kBAAoBw+L,GACtB,QAASphM,GAAI4C,EAAE,SAAUzlB,EAAIylB,EAAE,OAAQ5C,KAAK7iB,GAAK,EAAG,CAClD,IAAI0gN,GAAIwD,GAAIC,GACZ,IAAKljM,EAAE,KAAO2C,EAAE,QAAU3C,EAAE,KAAO2C,EAAE,SAAWugM,GAAK,UAAUv0M,EAAE,OAAQA,EAAE,EAAEiT,EAAC,EAAGjT,EAAE,KAAK,EAAIu0M,GAAKv0M,EAAE,OAASA,EAAE,EAAEiT,EAAC,EAAG69L,GAAKj7L,EAAE,MAAMzlB,CAAC,EAAGkkN,GAAK,EAAGA,GAAK,EAAGA,KAAM,CACzJ,IAAItjM,GAAI,EAAGuB,GAAGq+L,GAAIC,GAAIE,GAAKD,IAAM,EACjCF,GAAK2D,GAAKzD,GAAID,GAAK9/L,EACnB,EAAG,CACD,IAAIigM,GAAIC,GACRD,GAAKjvM,EAAExK,CAAC,EAAIwK,EAAExK,CAAC,EAAGyZ,IAAKggM,GAAIH,IAAMG,GAAKJ,GAAKI,GAAKJ,GAAIr5M,IAAK05M,GAAKlvM,EAAExK,CAAC,EAAIwK,EAAExK,CAAC,EAAGyZ,IAAKigM,GAAIJ,IAAMI,GAAKL,GAAKK,GAAKL,GAAIr5M,GACzH,OAAmB,EAAEw5M,GAAK,GAChB,GAAI//L,GAAIujM,IAAMz0M,IAAKmT,IAAKtC,EAAE,QAAS,CACjC,IAAIugM,GAAKqD,GAAKzjM,EAAE,MAAM,UAAUmC,EAAC,EACjC49L,GAAKK,KAAOL,GAAKK,GAC7B,CACU,GAAI5+L,IAAK,EAAIC,GAAIs+L,GAAKt+L,GAAIgiM,GAAI,CAACljM,EAAE,SAAW,CAACA,EAAE,SAAU,CACvD,IAAI2pE,GAAKnqE,EAAE,GAAG,EAAEoC,EAAC,EAAEqhM,EAAE,EACrB,GAAIt5H,GAAK,EAAG,CACV,IAAIk2H,GACJA,GAAKlgM,GAAIH,EAAE,IAAI,EAAEoC,EAAC,EAAEqhM,EAAE,EAAI5gM,GAAIsnE,GAAI1oE,IAAK,IAAM4+L,IAAMpgM,EAAE,MAAM,UAAUmC,EAAC,GAAIV,GAAI2+L,KAAO3+L,GAAI2+L,GACvG,CACA,CACU5+L,IAAK,EAAIoD,EAAEjE,IAAG,EAAIc,GAAImD,EAAEjE,IAAG,EAAIc,GAAIzB,EAAE,MAAM,UAAUmC,EAAC,CAChE,CACQ5B,EAAE,cAAgBqE,EAAEjE,GAAI,CAAC,EAAIiE,EAAEjE,GAAI,EAAI,CAAC,IAAMiE,EAAEjE,GAAI,EAAI,CAAC,IAAMiE,EAAEjE,GAAI,CAAC,EAAIiE,EAAEjE,GAAI,EAAI,CAAC,GAAKX,EAAE,OAAQ4E,EAAEjE,GAAI,EAAI,CAAC,EAAIiE,EAAEjE,GAAI,EAAI,CAAC,IAAMiE,EAAEjE,GAAI,EAAI,CAAC,IAAMiE,EAAEjE,GAAI,EAAI,CAAC,EAAIiE,EAAEjE,GAAI,EAAI,CAAC,GAAKX,EAAE,OAC9L,CACM,OAAOhR,CACR,EACD,SAAShC,EAAEuT,EAAG,CACZ,KAAK,EAAIA,CACf,CACI,KAAK,gBAAkB,SAASA,EAAGR,EAAGgF,EAAGH,EAAG,CAC1C,IAAIjE,GAAI,EAAGX,EAAID,EAAE,EAAGzgB,EAAIihB,EAAE,OAC1B,GAAIP,EAAIO,EAAE,OACR,KAAOwE,KAAO,GAAK,CACjB,IAAIte,EACJA,EAAI8Z,EAAE,GAAGP,CAAC,EAAGA,IAAKW,IAAKla,EAAIA,EAAGA,EAAI8Z,EAAE,GAAGP,CAAC,EAAGA,IAAKW,IAAKla,EAAIA,CACnE,SACeuZ,EAAIO,EAAE,WAAY,CACzB,IAAIvR,EAAIqR,EAAE,CAAC,EACX,IAAKrR,EAAE,CAAC,EAAI,EAAGA,EAAE,CAAC,EAAI4V,EAAGG,KAAO,GAAK,CACnC,IAAIte,EACJA,EAAI,KAAK,IAAI8Z,EAAE,GAAGP,CAAC,CAAC,EAAIhR,EAAE1P,EAAE0gB,CAAC,CAAC,EAAGA,IAAKW,IAAKla,EAAIA,EAAGA,EAAI,KAAK,IAAI8Z,EAAE,GAAGP,CAAC,CAAC,EAAIhR,EAAE1P,EAAE0gB,CAAC,CAAC,EAAGA,IAAKW,IAAKla,EAAIA,CAC3G,CACO,KACC,MAAOse,KAAO,GAAK,CACjB,IAAIte,EACJA,EAAI,KAAK,IAAI8Z,EAAE,GAAGP,CAAC,CAAC,EAAIY,EAAEthB,EAAE0gB,CAAC,CAAC,EAAI4E,EAAG5E,IAAKW,IAAKla,EAAIA,EAAGA,EAAI,KAAK,IAAI8Z,EAAE,GAAGP,CAAC,CAAC,EAAIY,EAAEthB,EAAE0gB,CAAC,CAAC,EAAI4E,EAAG5E,IAAKW,IAAKla,EAAIA,CACnH,CACM,OAAOsZ,EAAE,EAAIC,EAAGW,EACtB,EAAO,KAAK,WAAa,SAASJ,EAAGR,EAAGgF,EAAGH,EAAGjE,GAAG,CAC3C,IAAIX,EAAI,EAAG1gB,EAAI,EAAGmH,EAAGuI,EAAGE,EAAI,EAAG+B,EAAI,EAAGuQ,GAAI,EAAGoB,GAAI,IAAK1C,GAAI,EAAGuB,GAAIlB,EAAE,SAAUu/L,GAAK,EAClF,IAAKl7L,EAAE,SAAW,EAAGne,EAAI,EAAGA,EAAI8Z,EAAE,OAAQ9Z,IAAK,CAC7C,IAAIs5M,GAAKx/L,EAAE,aAAekB,GAAEq+L,IAAI,GAAKv/L,EAAE,SAAW,EAAImD,EAAEjd,CAAC,EAAI,IAAM8Z,EAAE,eAAiB,GAAKA,EAAE,cAAcA,EAAE,OAAO9Z,CAAC,CAAC,EAAI,EAAGu5M,GAAK,EAClI,GAAIr/L,IAAK,MAAQA,GAAE,KAAKla,CAAC,GAAKs5M,GAC5BC,GAAKr/L,GAAE,MAAMla,CAAC,EAAGyZ,IAAKK,EAAE,MAAM9Z,CAAC,EAAGse,EAAE/E,GAAG,EAAIggM,GAAKjgM,EAAEzgB,GAAG,EAAG0gN,GAAKr/L,GAAE,UAAUla,CAAC,MACvE,CACH,IAAIw5M,GAAKh6L,EAAE85L,EAAE,EACb,GAAI/wM,EAAIuR,EAAE,MAAM9Z,CAAC,GAAK,EAAGyZ,GAAIK,EAAE,MAAM9Z,CAAC,EAAI8Z,EAAE,kBAAmB,CAC7D,IAAI2/L,GACJA,GAAK3/L,EAAE,kBAAoBL,GAAI,EAAGggM,GAAK,EAAIlxM,EAAIkxM,IAAM,EAAIlxM,EAAI,CACzE,CACU,IAAImxM,GAAK,IAAInzM,EAAEkT,EAAC,EAChB8/L,GAAK,KAAK,gBAAgBz/L,EAAG4/L,GAAInxM,EAAGixM,EAAE,EAAG//L,GAAIigM,GAAG,EAAGx/L,IAAK,OAASA,GAAE,KAAKla,CAAC,EAAIs5M,GAAIp/L,GAAE,MAAMla,CAAC,EAAIu5M,IAAKA,GAAKj7L,EAAE/E,GAAG,EAAIggM,GAAKjgM,EAAEzgB,GAAG,EAAG0gN,GAAKnB,EAAG,WAAW,KAAK,IAAImB,GAAI,KAAK,CAAC,EAAGr/L,IAAK,OAASA,GAAE,UAAUla,CAAC,EAAIu5M,GAChN,CACQ,GAAIr/L,IAAK,OAASA,GAAE,YAAcJ,EAAE,aAAciB,IAAKw+L,GAAIA,GAAK,EAAG,CACjE,IAAII,GACJA,GAAK,KAAK,IAAI,EAAIJ,GAAK,GAAK,GAAK,CAAC,EAAGp7L,EAAE,UAAYw7L,GAAKA,GAAIlxM,IAAK+B,GAAK+uM,EAChF,CACQp9L,GAAI,KAAK,IAAIA,GAAGo9L,EAAE,CAC1B,CACM,OAAOp7L,EAAE,WAAa1V,EAAG0V,EAAE,UAAYpD,GAAGoD,EAAE,WAAa3T,EAAG2T,EAAE,UAAYhC,GAAG1T,CACnF,EAAO,KAAK,UAAY,SAASqR,EAAGR,EAAGgF,EAAGH,EAAGjE,GAAG,CAC1C,IAAIX,EAAIO,EAAE,eAAgBjhB,EAAGmH,EAAGuI,EAAGE,EAAG+B,EAAGuQ,GAAIzB,EAAE,gBAAkB,EAAI,GAAM,EAAG6C,GAAI7C,EAAE,SAAUG,GAAIG,EAAE,OAAO,MAAM,EAAGoB,GAAIpB,EAAE,OAAO,MAAM,EAAGy/L,GAAK,IAAI,gBACnJ,UAAUv/L,EAAGwE,EAAGhF,EAAGG,EAAC,EAAG,WAAWH,EAAGG,GAAGuB,GAAGq+L,GAAI,IAAI,EACnD,IAAIC,GAAK,EACT,IAAKt5M,EAAIsZ,EAAE,SAAUA,EAAE,YAAcF,EAAE,YAAcE,EAAE,kBAAoB,IAAMtZ,EAAI,IAAKnH,EAAI,EAAGA,EAAImH,EAAGnH,IAAK,CAC3G,IAAI0gN,GAAKhgM,EAAE,cAAc,EAAE1gB,CAAC,EAAG2gN,GAAKjgM,EAAE,cAAc,EAAE1gB,EAAI,CAAC,EAAG4gN,GAAKD,GAAKD,GACxE,IAAK9wM,EAAI,EAAG6wM,GAAKE,GAAIF,KACnB7wM,GAAK6Q,EAAE,GAAGggM,EAAE,EAAIhgM,EAAE,GAAGggM,EAAE,EACzB7wM,GAAKgxM,GAAIjvM,EAAI,KAAM+O,EAAE,MAAM,GAAG4E,CAAC,EAAEjE,EAAC,EAAErhB,CAAC,EAAI2R,EAAI/B,EAAG8Q,EAAE,MAAM,KAAK4E,CAAC,EAAEjE,EAAC,EAAErhB,CAAC,EAAI2R,EAAIiP,GAAE5gB,CAAC,EAAImiB,GAAEniB,CAAC,EAAI4gN,GAAIn7L,EAAE,GAAG,EAAEzlB,CAAC,EAAI,GAAK,CAACihB,EAAE,QAAUrR,EAAIA,EAAI6V,EAAE,GAAG,EAAEzlB,CAAC,EAAI4P,EAAI,EAAG8Q,EAAE,MAAM,IAAI4E,CAAC,EAAEjE,EAAC,EAAErhB,CAAC,EAAI2R,EAAI,KAAK,IAAI/B,EAAI6V,EAAE,IAAI,EAAEzlB,CAAC,EAAG0gB,EAAE,IAAI,EAAE1gB,CAAC,CAAC,EAAG0gB,EAAE,MAAM,QAAQ4E,CAAC,EAAEjE,EAAC,EAAErhB,CAAC,EAAI,EAAGygB,EAAE,SAAW,GAAKzgB,GAAK,KAAO0gB,EAAE,MAAM,QAAQ4E,CAAC,EAAEjE,EAAC,EAAErhB,CAAC,EAAI,CAACkiB,GAAIkC,EAAEpkB,CAAC,GAAIA,EAAIugB,EAAE,UAAYS,EAAEsC,GAAEtjB,CAAC,GAAK,CAAC,EAAG0gB,EAAE,MAAM,QAAQ4E,CAAC,EAAEjE,EAAC,EAAErhB,CAAC,GAAKkiB,GAAIoB,GAAEtjB,CAAC,EACtY,CACM,GAAIygB,EAAE,YAAcF,EAAE,WACpB,IAAKpZ,EAAInH,EAAGA,EAAIygB,EAAE,SAAUzgB,EAAIugB,EAAE,QAASvgB,IACzC,QAAS0gN,GAAKhgM,EAAE,cAAc,EAAE1gB,CAAC,EAAG2gN,GAAKjgM,EAAE,cAAc,EAAE1gB,EAAI,CAAC,EAAG4gN,GAAKD,GAAKD,GAAIG,GAAK,EAAGA,GAAK,EAAGA,KAAM,CACrG,IAAKjxM,EAAI,EAAGF,EAAIgxM,GAAIhxM,EAAIixM,GAAIjxM,IAC1BE,GAAK6Q,EAAE,GAAGggM,EAAE,EAAIhgM,EAAE,GAAGggM,EAAE,EAAGA,KAC5B7wM,EAAI,KAAK,IAAIA,EAAIgxM,GAAI,KAAK,EAAGjvM,EAAI,KAAM+O,EAAE,MAAM,KAAK4E,CAAC,EAAEjE,EAAC,EAAE,EAAIrhB,EAAI6gN,EAAE,EAAIlvM,EAAI/B,EAAG8Q,EAAE,MAAM,OAAO4E,CAAC,EAAEjE,EAAC,EAAE,EAAIrhB,EAAI6gN,EAAE,EAAIlvM,EAAIiP,GAAEzZ,CAAC,EAAIgb,GAAEhb,CAAC,EAAIy5M,GAAIn7L,EAAE,GAAG,EAAEzlB,CAAC,EAAE6gN,EAAE,EAAI,EAAIjxM,EAAIA,EAAI6V,EAAE,GAAG,EAAEzlB,CAAC,EAAE6gN,EAAE,EAAIjxM,EAAI,GAAIqR,EAAE,SAAWA,EAAE,YAAcrR,EAAI,GAAI8Q,EAAE,MAAM,MAAM4E,CAAC,EAAEjE,EAAC,EAAE,EAAIrhB,EAAI6gN,EAAE,EAAIlvM,EAAI,KAAK,IAC1Q/B,EAAI6V,EAAE,IAAI,EAAEzlB,CAAC,EAAE6gN,EAAE,EACjBngM,EAAE,IAAI,EAAE1gB,CAAC,CACvB,EAAe0gB,EAAE,MAAM,UAAU4E,CAAC,EAAEjE,EAAC,EAAE,EAAIrhB,EAAI6gN,EAAE,EAAI,GAAKpgM,EAAE,cAAcogM,EAAE,EAAG7gN,EAAIugB,EAAE,UAAYG,EAAE,MAAM,UAAU4E,CAAC,EAAEjE,EAAC,EAAE,EAAIrhB,EAAI6gN,EAAE,GAAK3+L,GAAIoB,GAAEnc,CAAC,GAAIA,GACnJ,CACMuZ,EAAE,MAAM,QAAQ4E,CAAC,EAAEjE,EAAC,EAAIZ,EAAE,YAAaC,EAAE,MAAM,aAAa4E,CAAC,EAAEjE,EAAC,EAAIZ,EAAE,eAAiBA,EAAE,aAAcC,EAAE,MAAM,WAAW4E,CAAC,EAAEjE,EAAC,EAAIZ,EAAE,aAAcC,EAAE,MAAM,KAAK4E,CAAC,EAAEjE,EAAC,EAAIm/L,GAAG,WAAY9/L,EAAE,MAAM,UAAU4E,CAAC,EAAEjE,EAAC,EAAIm/L,GAAG,UAAY,GAAI9/L,EAAE,MAAM,WAAW4E,CAAC,EAAEjE,EAAC,EAAIm/L,GAAG,WAAa,GAAI9/L,EAAE,MAAM,UAAU4E,CAAC,EAAEjE,EAAC,EAAIm/L,GAAG,UAAY,GAAI9/L,EAAE,MAAM,SAAS4E,CAAC,EAAEjE,EAAC,EAAIm/L,GAAG,QAC5V,CACL,CACE,OAAOp5L,GAAKvkB,EAAGukB,EACjB,CACA,IAAI1B,GAAIyiM,GACR,SAASC,IAAK,CACZ,GAAID,GACF,OAAOziM,GACTyiM,GAAK,EACL,IAAI3nM,EAAIq/L,GAAIx7L,EAAI7D,EAAE,OAAQoD,EAAIpD,EAAE,OAAQmD,EAAInD,EAAE,QAAS++L,EAAK/+L,EAAE,OAAQO,EAAIg/L,GAAI,EAAE39L,EAAI0E,GAAI9F,EAAIwC,GAAIjD,EAAI2nM,GAAI,EACxG,SAAS9H,GAAK,CACZ,IAAIl/L,EAAI,KACR,KAAK,MAAQ,KAAM,KAAK,WAAa,SAASR,EAAG,CAC/C,KAAK,MAAQA,EAAGQ,EAAIR,CACrB,EACD,SAAS7d,EAAE6d,EAAG,CACZ,KAAK,KAAO,EAAIA,CACtB,CACI,IAAIU,EAAI,CACN,CAAC,EAAG,CAAC,EAEL,CAAC,EAAG,CAAC,EAEL,CAAC,EAAG,CAAC,EAEL,CAAC,EAAG,CAAC,EAEL,CAAC,EAAG,CAAC,EAEL,CAAC,EAAG,CAAC,EAEL,CAAC,EAAG,CAAC,EAEL,CAAC,EAAG,CAAC,EAEL,CAAC,EAAG,CAAC,EAEL,CAAC,EAAG,CAAC,EAEL,CAAC,EAAG,CAAC,EAEL,CAAC,EAAG,CAAC,EAEL,CAAC,EAAG,CAAC,EAEL,CAAC,EAAG,CAAC,EAEL,CAAC,EAAG,CAAC,EAEL,CAAC,EAAG,CAAC,EAEL,CAAC,EAAG,CAAC,EAEL,CAAC,EAAG,CAAC,EAEL,CAAC,EAAG,CAAC,EAEL,CAAC,EAAG,CAAC,EAEL,CAAC,EAAG,CAAC,EAEL,CAAC,EAAG,CAAC,EAEL,CAAC,EAAG,CAAC,CAEN,EACD,SAAS4+L,EAAGt/L,EAAG1gB,EAAGmH,EAAGuI,EAAGE,EAAG+B,EAAG,CAC5B,IAAIuQ,GAAI,MAASliB,EACjB,IAAK0gB,EAAIA,GAAK,EAAGA,KAAO,GACtB9Q,EAAE+B,GAAG,EAAIuQ,GAAI/a,EAAEuI,GAAG,EAAI,EAAI,EAAGE,EAAE+B,GAAG,EAAIuQ,GAAI/a,EAAEuI,GAAG,EAAI,EAAI,CAC/D,CACI,SAASwV,EAAExE,EAAG1gB,EAAGmH,EAAGuI,EAAGE,EAAG+B,EAAG,CAC3B+O,EAAIA,GAAK,EACT,IAAIwB,GAAIxB,EAAI,EACZ,IAAKA,EAAIA,GAAK,EAAGA,KAAO,GAAK,CAC3B,IAAI4C,GAAG1C,GAAGuB,GAAGq+L,GAAIC,GAAIC,GAAIC,GAAIC,GAC7Bt9L,GAAInc,EAAEuI,GAAG,EAAI1P,EAAG4gB,GAAIzZ,EAAEuI,GAAG,EAAI1P,EAAGygN,GAAK,EAAIn9L,GAAGnB,GAAIhb,EAAEuI,GAAG,EAAI1P,EAAG0gN,GAAK,EAAI9/L,GAAG4/L,GAAKr5M,EAAEuI,GAAG,EAAI1P,EAAG2gN,GAAK,EAAIx+L,GAAGmB,IAAKpC,EAAE,MAAMu/L,EAAE,EAAGG,GAAK,EAAIJ,GAAI5/L,IAAKM,EAAE,MAAMw/L,EAAE,EAAG9wM,EAAE+B,GAAG,EAAI,EAAI2R,GAAGnB,IAAKjB,EAAE,MAAMy/L,EAAE,EAAG/wM,EAAE+B,GAAG,EAAI,EAAIiP,GAAG4/L,IAAMt/L,EAAE,MAAM0/L,EAAE,EAAGhxM,EAAE+B,GAAG,EAAI,EAAIwQ,GAAGvS,EAAE+B,GAAG,EAAI,EAAI6uM,EAChQ,CACM,GAAIt+L,IAAK,EAAG,CACV,IAAIoB,GAAG1C,GAAG6/L,GAAIC,GACdp9L,GAAInc,EAAEuI,GAAG,EAAI1P,EAAG4gB,GAAIzZ,EAAEuI,GAAG,EAAI1P,EAAGygN,GAAK,EAAIn9L,GAAGo9L,GAAK,EAAI9/L,GAAG0C,IAAKpC,EAAE,MAAMu/L,EAAE,EAAG7/L,IAAKM,EAAE,MAAMw/L,EAAE,EAAG9wM,EAAE+B,GAAG,EAAI,EAAI2R,GAAG1T,EAAE+B,GAAG,EAAI,EAAIiP,EACjI,CACA,CACI,SAASq/L,EAAGv/L,EAAG1gB,EAAGmH,EAAGuI,EAAGE,EAAG,CACzB,IAAI+B,EAAGuQ,GAAGoB,GAAI,EAAG1C,GAAGuB,GAAI,EAAGq+L,GAAK,EAAGC,GAAK,EAAGC,GAAK1gN,EAAG2gN,GAAK,EAAGC,GAAKF,GAAIG,GAAK,EAAGC,GAAKpgM,EAAGkqE,GAAK,EACzF,IAAKhqE,GAAIhR,GAAK,MAAQF,EAAE,aAAeE,EAAE,YAAaF,EAAE,YAAcqR,EAAE,WAAamB,GAAI,GAAKA,GAAI,GAAIvQ,EAAI,EAAGA,GAAKuQ,GAAGvQ,IAAK,CACxH,IAAIsyM,GAAK,GACT,IAAKrjM,IAAKlR,EAAE,YAAcqR,EAAE,aAAekjM,GAAKv0M,EAAE,aAAeA,EAAE,SAASiC,CAAC,GAAKjC,EAAE,SAAW,EAAIwR,EAAE,OAAOvP,CAAC,EAAI,IAAMjC,EAAE,eAAiB,GAAKA,EAAE,cAAcA,EAAE,OAAOiC,CAAC,CAAC,EAAI,GAAI4tM,EAAG7vM,EAAE,MAAMiC,CAAC,GAAK,CAAC,EAAGiP,IAAKhR,EAAE,KAAK+B,CAAC,GAAKsyM,GACvN9hM,IAAK,IAAM+C,EACT/C,GACAhb,EACA25M,GACAl2H,GACAg2H,GACAC,EACD,EAAE1+L,GAAI,GAAIq+L,IAAM,IAAMR,EACrBQ,GACAr5M,EACA25M,GACAl2H,GACAg2H,GACAC,EACZ,EAAaL,GAAK,OACL,CACH,IAAI1wM,EAAIJ,EAAE,MAAMiC,CAAC,EACjB,GAAI2R,GAAI5T,EAAE,MAAMiC,CAAC,EAAIjC,EAAE,kBAAmB,CACxC,IAAImT,GACJA,GAAInT,EAAE,kBAAoB4T,GAAI,EAAGM,EAAE,KAAK5jB,EAAG0P,EAAE,kBAAmB,IAAK,CAAC,EAAGI,EAAI+S,GAAG/S,EAAI,IAAMA,EAAI,GAAI6B,EAAIuQ,GAAI,CACtH,CACU,GAAIC,IAAK,GAAKq+L,IAAM,IAAMI,GAAKF,GAAIG,GAAKF,GAAIG,GAAKpgM,EAAGkqE,GAAK61H,IAAK7wM,GAAK,MAAQA,EAAE,WAAa,GAAK+B,GAAK/B,EAAE,YAAcA,EAAE,KAAK+B,CAAC,EAAI,GAAKsyM,IAAMr0M,EAAE,KAAK+B,CAAC,GAAKwQ,IAAK,IAAM+C,EACjK/C,GACAhb,EACA25M,GACAl2H,GACAg2H,GACAC,EACZ,EAAa1+L,GAAI,EAAGy+L,GAAKF,GAAIG,GAAKF,GAAIG,GAAKpgM,EAAGkqE,GAAK61H,IAAKD,IAAM1wM,IAAM0wM,IAAM,IAAMR,EACpEQ,GACAr5M,EACA25M,GACAl2H,GACAg2H,GACAC,EACZ,EAAaL,GAAK,EAAGI,GAAKF,GAAIG,GAAKF,GAAIG,GAAKpgM,EAAGkqE,GAAK61H,IAAKt+L,IAAKrS,GAAIA,GAAK,EAAG,CAC9D0wM,IAAM,IAAMR,EACVQ,GACAr5M,EACA25M,GACAl2H,GACAg2H,GACAC,EACD,EAAEL,GAAK,GAAIr+L,IAAK,IAAM+C,EACrB/C,GACAhb,EACA25M,GACAl2H,GACAg2H,GACAC,EACd,EAAe1+L,GAAI,GACP,KACZ,CACA,CACQxQ,GAAKuQ,KAAMy+L,IAAMjxM,EAAE,MAAMiC,CAAC,EAAG8uM,IAAM/wM,EAAE,MAAMiC,CAAC,EAAG2R,IAAK5T,EAAE,MAAMiC,CAAC,EACrE,CACMwQ,IAAK,IAAM+C,EACT/C,GACAhb,EACA25M,GACAl2H,GACAg2H,GACAC,EACD,EAAE1+L,GAAI,GAAIq+L,IAAM,IAAMR,EACrBQ,GACAr5M,EACA25M,GACAl2H,GACAg2H,GACAC,EACR,EAASL,GAAK,EACd,CACI,SAAS75L,EAAEjG,EAAG1gB,EAAGmH,EAAG,CAClB,IAAIuI,EAAI,EAAGE,EAAI,EACf,EAAG,CACD,IAAI+B,EAAI+O,EAAE1gB,GAAG,EAAGkiB,GAAIxB,EAAE1gB,GAAG,EACzB0P,EAAIiC,IAAMjC,EAAIiC,GAAI/B,EAAIsS,KAAMtS,EAAIsS,GACjC,OAAQliB,EAAImH,GACb,OAAOuI,EAAIE,IAAMF,EAAIE,GAAIF,CAC/B,CACI,SAASiR,EAAED,EAAG1gB,EAAGmH,EAAGuI,EAAGE,EAAG+B,EAAG,CAC3B,IAAIuQ,GAAIE,EAAE,GAAG1S,CAAC,EAAE,KAAO,MAAQ0S,EAAE,GAAGxS,CAAC,EAAE,KAAM0T,GAAI,EAAG1C,GACpD,EAAG,CACD,IAAIuB,GAAIzB,EAAE1gB,GAAG,EAAGwgN,GAAK9/L,EAAE1gB,GAAG,EAC1BmiB,IAAK,IAAMA,GAAI,KAAOA,GAAI,GAAImB,IAAKpB,IAAIC,IAAK,IAAKq+L,IAAM,IAAMA,GAAK,KAAOA,GAAK,GAAIl9L,IAAKpB,IAAIC,IAAKq+L,IAAKl9L,IAAKlB,EAAE,SAASD,EAAC,CACvH,OAAQniB,EAAImH,GACb,OAAOyZ,GAAI0C,GAAI,MAAOA,KAAM,GAAIA,GAAI1C,KAAM0C,GAAI1C,GAAGlR,EAAIE,GAAI+B,EAAE,MAAQ2R,GAAG5T,CAC5E,CACI,SAASK,EAAE2Q,EAAG1gB,EAAGmH,EAAGuI,EAAG,CACrB,IAAIE,EAAI,EAAG+B,EAAIyQ,EAAE,GAAG,CAAC,EAAE,KACvB,EAAG,CACD,IAAIF,GAAIxB,EAAE1gB,EAAI,CAAC,EAAI,EAAI0gB,EAAE1gB,EAAI,CAAC,EAC9BA,GAAK,EAAG4P,GAAK+B,EAAEuQ,EAAC,CACjB,OAAQliB,EAAImH,GACb,OAAOuI,EAAE,MAAQE,EAAG,CAC1B,CACI,SAASI,EAAE0Q,EAAG1gB,EAAGmH,EAAGuI,EAAGE,EAAG,CACxB,IAAI+B,EAAI,EAAGuQ,GAAGoB,GAAIlB,EAAE,GAAG1S,CAAC,EAAE,KAAMkR,GAChClR,GAAK,EAAIkR,GAAIwB,EAAE,QAAUxB,GAAIwB,EAAE,QAC/B,EAAG,CACD,IAAID,GAAIzB,EAAE1gB,EAAI,CAAC,EAAIsjB,GAAI5C,EAAE1gB,EAAI,CAAC,EAC9BA,GAAK,EAAG2R,GAAKiP,GAAEuB,EAAC,CACjB,OAAQniB,EAAImH,GACb,OAAO+a,GAAIvQ,EAAI,MAAOA,IAAM,GAAIA,EAAIuQ,KAAMvQ,EAAIuQ,GAAGxS,KAAME,EAAE,MAAQ+B,EAAGjC,CAC1E,CACI,SAASuN,EAAEyD,EAAG1gB,EAAGmH,EAAGuI,EAAGE,EAAG,CACxB,IAAI+B,EAAI,EAAGuQ,GAAI,EAAGoB,GAAI,EAAG1C,GAAIwB,EAAE,GAAG1S,CAAC,EAAE,KAAMyS,GAAIC,EAAE,GAAG1S,CAAC,EAAE,KAAM8wM,GAAKp+L,EAAE,GAAG1S,EAAI,CAAC,EAAE,KAAM+wM,GAAKr+L,EAAE,GAAG1S,EAAI,CAAC,EAAE,KACrG,EAAG,CACD,IAAIgxM,GAAKhgM,EAAE1gB,EAAI,CAAC,EAAI4gB,GAAIF,EAAE1gB,EAAI,CAAC,EAC/BA,GAAK,EAAG2R,GAAKwQ,GAAEu+L,EAAE,EAAGx+L,IAAKs+L,GAAGE,EAAE,EAAGp9L,IAAKm9L,GAAGC,EAAE,CAC5C,OAAQ1gN,EAAImH,GACb,IAAIw5M,GAAKjxM,EACT,OAAOiC,EAAIuQ,KAAMvQ,EAAIuQ,GAAGy+L,MAAOhvM,EAAI2R,KAAM3R,EAAI2R,GAAGq9L,GAAKjxM,EAAI,GAAIE,EAAE,MAAQ+B,EAAGgvM,EAChF,CACI,IAAIhxM,EAAI,CACN,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACD,SAASE,EAAE6Q,EAAG1gB,EAAGmH,EAAGuI,EAAG,CACrB,IAAIE,EAAI+W,EAAEjG,EAAG1gB,EAAGmH,CAAC,EACjB,OAAQyI,EAAC,CACP,IAAK,GACH,OAAOA,EACT,IAAK,GACH,OAAOG,EAAE2Q,EAAG1gB,EAAGmH,EAAGuI,CAAC,EACrB,IAAK,GACL,IAAK,GACH,OAAOM,EACL0Q,EACA1gB,EACAmH,EACAwI,EAAEC,EAAI,CAAC,EACPF,CACD,EACH,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACH,OAAOuN,EACLyD,EACA1gB,EACAmH,EACAwI,EAAEC,EAAI,CAAC,EACPF,CACD,EACH,QACE,GAAIE,EAAI2Q,EAAE,UACR,OAAO7Q,EAAE,KAAO6Q,EAAE,WAAY,GAChC3Q,GAAK,GACL,IAAI+B,EACJ,IAAKA,EAAI,GAAIA,EAAI,IAAM,EAAEyQ,EAAE,GAAGzQ,CAAC,EAAE,QAAU/B,GAAI+B,IAC7C,CACF,IAAIuQ,GACJ,IAAKA,GAAIvQ,EAAI,EAAGuQ,GAAI,IAAM,EAAEE,EAAE,GAAGF,EAAC,EAAE,QAAUtS,GAAIsS,KAChD,CACF,OAAOvB,EAAED,EAAG1gB,EAAGmH,EAAG+a,GAAGvQ,EAAGjC,CAAC,CACnC,CACA,CACI,KAAK,mBAAqB,SAASgR,EAAG1gB,EAAGmH,EAAG,CAC1C,IAAIuI,EAAI1P,EAAE,OAAQ4P,EAAI,KAAK,IAAI,IAAK5P,EAAE,kBAAoB,GAAK,GAAK,CAAC,EACrE,IAAKmH,GAAK,OAASA,EAAE,WAAa,GAAIyI,EAAI,GAAK,EAAEF,EAAEE,EAAI,CAAC,EAAIF,EAAEE,EAAI,CAAC,GAAIA,GAAK,EAC1E,CACF5P,EAAE,OAAS4P,EACX,QAAS+B,EAAI,EAAGuQ,GAAI,EAAGtS,EAAI,EAAGA,GAAK,EAAG,CACpC,IAAI0T,GACJ,KAAM5T,EAAEE,EAAI,CAAC,EAAIF,EAAEE,EAAI,CAAC,EAAIF,EAAEE,EAAI,CAAC,EAAIF,EAAEE,EAAI,CAAC,GAAK,YAAc,EAC/D,MACF0T,KAAM5T,EAAEE,EAAI,CAAC,EAAI,EAAIF,EAAEE,EAAI,CAAC,GAAK,EAAIF,EAAEE,EAAI,CAAC,GAAK,EAAIF,EAAEE,EAAI,CAAC,EAAG+B,GAAKyQ,EAAE,KAAKkB,EAAC,EAAGpB,IAAKE,EAAE,KAAKkB,EAAC,CACpG,CACM,IAAI1C,GAAIjP,EACR,GAAI3R,EAAE,mBAAqB,EAAG2R,EAAIuQ,KAAMtB,GAAIsB,GAAGliB,EAAE,mBAAqB,GAAIA,EAAE,WAAa4gB,GAAG5gB,EAAE,WAAa4P,EAAGA,GAAK,EACjH,OAAOgR,GACT,GAAI5gB,EAAE,YAAc+gB,EAAE,WACpBpP,EAAI,EAAI+O,EAAE,cAAc,EAAE,CAAC,EAAG/O,EAAI3R,EAAE,aAAe2R,EAAI3R,EAAE,YAAakiB,GAAIliB,EAAE,mBACrEA,EAAE,YAAc+gB,EAAE,WACzB,GAAIpP,EAAI3R,EAAE,cAAgB0gB,EAAE,OAAO9Q,EAAI,CAAC,EAAGsS,GAAIliB,EAAE,cAAgB0gB,EAAE,OAAO9Q,EAAI,CAAC,EAAG2vM,EAAG5tM,EAAIuQ,GAAI,EAAInB,EAAE,OAAO,EAAGmB,GAAIxB,EAAE,cAAc,EAAE/O,EAAIuQ,GAAI,CAAC,EAAGvQ,EAAI+O,EAAE,cAAc,EAAE/O,EAAI,CAAC,EAAGuQ,GAAItS,EAAG,CAClL,IAAIuS,GAAI,IAAItf,EAAE+d,EAAC,EACf5gB,EAAE,aAAa,CAAC,EAAI6P,EAAEH,EAAGwS,GAAGtS,EAAGuS,EAAC,EAAGvB,GAAIuB,GAAE,IACnD,OAEQniB,EAAE,cAAgB,EAAGA,EAAE,cAAgB+gB,EAAE,QAAU,EAAI,EAAI,EAAGpP,EAAI+O,EAAE,cAAc,EAAE,CAAK,EAAGwB,GAAItS,EAAG+B,EAAIuQ,KAAMvQ,EAAIuQ,IACnH,GAAIvQ,EAAI,KAAK,IAAIA,EAAG/B,CAAC,EAAGsS,GAAI,KAAK,IAAIA,GAAGtS,CAAC,EAAG,EAAI+B,EAAG,CACjD,IAAIwQ,GAAI,IAAItf,EAAE+d,EAAC,EACf5gB,EAAE,aAAa,CAAC,EAAI6P,EAAEH,EAAG,EAAGiC,EAAGwQ,EAAC,EAAGvB,GAAIuB,GAAE,IACjD,CACM,GAAIxQ,EAAIuQ,GAAG,CACT,IAAIC,GAAI,IAAItf,EAAE+d,EAAC,EACf5gB,EAAE,aAAa,CAAC,EAAI6P,EAAEH,EAAGiC,EAAGuQ,GAAGC,EAAC,EAAGvB,GAAIuB,GAAE,IACjD,CACM,GAAIzB,EAAE,kBAAoB,IAAM1gB,EAAE,eAAiB4gB,GAAG,oBAAoBF,EAAG1gB,CAAC,EAAG4gB,GAAI5gB,EAAE,gBAAiBmH,GAAK,MAAQnH,EAAE,YAAc+gB,EAAE,UAAW,CAChJ,QAASy/L,GAAK,EAAG9/L,EAAE,cAAc,EAAE8/L,EAAE,EAAIxgN,EAAE,YACzCwgN,KACFr5M,EAAE,WAAaq5M,EACvB,CACM,OAAO5/L,EACb,EAAO,KAAK,WAAa,SAASF,EAAG1gB,EAAGmH,EAAGuI,EAAG,CACxC,IAAIE,EAAIzI,EAAE,OAAQwK,EAAI4O,EAAE,UAAYW,EAAE,OAAO/Z,EAAE,WAAW,EAC1D,GAAIA,EAAE,UAAYwK,EAChB,OAAO4O,EAAE,WACX,GAAI0/L,EAAGjgN,EAAG4P,EAAGsR,EAAE,OAAO/Z,EAAE,WAAW,EAAGA,EAAGuI,CAAC,EAAGgR,EAAE,gBAAkB,EAC/D,QAASwB,GAAI,EAAGoB,GAAInc,EAAE,YAAcA,EAAE,eAAgByZ,GAAI,iBAAoBM,EAAE,OAAOoC,EAAC,EAAGnB,GAAI,EAAGA,GAAIhb,EAAE,OAAQgb,KAAK,CACnH,IAAIq+L,GAAKr5M,EAAE,MAAMgb,EAAC,EAClB,GAAIzB,EAAE,WAAWyB,EAAC,GAAK,EACrBD,IAAKs+L,OACF,CACH,IAAIC,GACJ,IAAKA,GAAKv+L,GAAGA,IAAKs+L,GAAIC,GAAKv+L,GAAG,EAAEu+L,GAC9B7wM,EAAE6wM,EAAE,EAAIzgN,EAAEygN,EAAE,GAAK7/L,GAAIhR,EAAE6wM,EAAE,EAAI,CAC3C,CACA,CACM,OAAO,KAAK,mBAAmB//L,EAAGvZ,EAAGuI,CAAC,CACvC,EACD,SAAS0U,EAAE1D,EAAG1gB,EAAGmH,EAAGuI,EAAGE,EAAG+B,EAAGuQ,GAAG,CAC9B,QAASoB,GAAItjB,EAAE,WAAY4gB,GAAI,EAAGA,IAAK,GAAQA,KAC7ClR,EAAEkR,EAAC,EAAIL,EAAE,WACX,QAASK,GAAI,EAAGA,GAAI,GAAIA,KAAK,CAC3B,IAAIuB,GAAIzB,EAAE,cAAc,EAAEE,GAAI,CAAC,EAC/B,GAAIuB,IAAKmB,GACP,MACF,IAAIk9L,GAAK,EAAGC,GAAK,IAAI59M,EAAE29M,EAAE,EAAGE,GAAK7wM,EAAE1I,EAAG,EAAGgb,GAAGs+L,EAAE,EAC9CD,GAAKC,GAAG,KACR,QAASE,GAAK,EAAGA,GAAK,EAAGA,KAAM,CAC7B,IAAIC,GAAKlgM,EAAE,cAAc,EAAEE,GAAI+/L,GAAK,CAAC,EACrC,GAAIC,IAAMt9L,GACR,MACF,IAAIu9L,GAAKL,GACTC,GAAK,IAAI59M,EAAEg+M,EAAE,EACb,IAAIC,GAAKjxM,EAAE1I,EAAGgb,GAAGy+L,GAAIH,EAAE,EACvBI,GAAKJ,GAAG,KAAM/wM,EAAEkR,GAAI+/L,EAAE,EAAIE,KAAOnxM,EAAEkR,GAAI+/L,EAAE,EAAIE,GAAIjxM,EAAEgR,GAAI+/L,EAAE,EAAI//L,GAAGjP,EAAEiP,GAAI+/L,EAAE,EAAID,GAAIx+L,GAAEtB,GAAI+/L,EAAE,EAAIG,GACtG,CACA,CACA,CACI,SAASxgM,EAAEI,EAAG1gB,EAAGmH,EAAGuI,EAAGE,EAAG+B,EAAGuQ,GAAGoB,GAAG,CACjC,QAAS1C,GAAI5gB,EAAE,WAAYmiB,GAAI,EAAGA,GAAIpB,EAAE,QAAU,EAAGoB,KAAK,CACxD,IAAIq+L,GAAK9/L,EAAE,cAAc,EAAEyB,EAAC,EAC5B,GAAIq+L,IAAM5/L,GACR,MACF,IAAI6/L,GAAK7wM,EAAEuS,GAAI,CAAC,EAAIniB,EAAE,WACtB,GAAImH,EAAE,gBAAkBs5M,GACtB,MACF,IAAIC,GAAK,IAAI79M,EAAE49M,EAAE,EAAGE,GAAK9wM,EAAEH,EAAG8wM,GAAI5/L,GAAG8/L,EAAE,EACvCD,GAAKC,GAAG,KAAM,EAAEv5M,EAAE,gBAAkBs5M,MAAQt5M,EAAE,OAAOnH,CAAC,EAAGmH,EAAE,eAAiBs5M,GAAIt5M,EAAE,cAAgBwK,EAAEwQ,GAAI,CAAC,EAAGhb,EAAE,cAAgBgb,GAAI,EAAIxQ,EAAEwQ,GAAI,CAAC,EAAGhb,EAAE,aAAa,CAAC,EAAI+a,GAAEC,GAAI,CAAC,EAAGhb,EAAE,aAAa,CAAC,EAAImc,GAAEnB,GAAI,CAAC,EAAGhb,EAAE,aAAa,CAAC,EAAIw5M,GACxO,CACA,CACI,KAAK,oBAAsB,SAASjgM,EAAG1gB,EAAG,CACxC,IAAImH,EAAI,IAAI6Z,EAAKtR,EAAI1P,EAAE,OAAQ4P,EAAI+T,EAAE,EAAU,EAAGhS,EAAIgS,EAAE,EAAU,EAAGzB,GAAIyB,EAAE,EAAU,EAAGL,GAAIK,EAAE,EAAU,EACxG,GAAI,EAAE3jB,EAAE,YAAc+gB,EAAE,YAAcL,EAAE,SAAW,GAAI,CACrDvZ,EAAE,OAAOnH,CAAC,EAAGA,EAAE,YAAc+gB,EAAE,YAAcqD,EAAE1D,EAAG1gB,EAAG0P,EAAGE,EAAG+B,EAAGuQ,GAAGoB,EAAC,EAAGhD,EACnEI,EACAvZ,EACAnH,EACA0P,EACAE,EACA+B,EACAuQ,GACAoB,EACV,GACQ,IAAI1C,GAAIzZ,EAAE,WACV,GAAI,EAAEyZ,IAAK,IAAMlR,EAAEkR,GAAI,CAAC,EAAIlR,EAAEkR,GAAI,CAAC,GAAK,KAAOA,GAAI5gB,EAAE,OAAS,EAAG,EAAE4gB,GAAI,MAAO,CAC5EzZ,EAAE,OAAOnH,CAAC,EAAGmH,EAAE,OAASyZ,GACxB,QAASuB,GAAI,EAAGq+L,GAAK,EAAG5/L,GAAIzZ,EAAE,WAAYyZ,IAAK,EAAG,CAChD,IAAI6/L,KAAO/wM,EAAEkR,GAAI,CAAC,EAAI,EAAIlR,EAAEkR,GAAI,CAAC,GAAK,EAAIlR,EAAEkR,GAAI,CAAC,GAAK,EAAIlR,EAAEkR,GAAI,CAAC,EACjEuB,IAAKC,EAAE,KAAKq+L,EAAE,EAAGD,IAAMp+L,EAAE,KAAKq+L,EAAE,CAC5C,CACU,GAAIt5M,EAAE,WAAayZ,GAAGzZ,EAAE,mBAAqB,EAAGgb,GAAIq+L,KAAOr+L,GAAIq+L,GAAIr5M,EAAE,mBAAqB,GAAIA,EAAE,WAAagb,GAAGhb,EAAE,YAAc4Z,EAAE,UAChIT,EACEI,EACAvZ,EACAnH,EACA0P,EACAE,EACA+B,EACAuQ,GACAoB,EACD,MACE,CACH,GAAInc,EAAE,eAAiBgb,GAAGA,GAAIzB,EAAE,cAAc,EAAE,CAAK,EAAGyB,GAAIvB,KAAMuB,GAAIvB,IAAIuB,GAAI,EAAG,CAC/E,IAAIu+L,GAAK,IAAI79M,EAAEsE,EAAE,cAAc,EAC/BA,EAAE,aAAa,CAAC,EAAI0I,EAAEH,EAAG,EAAGyS,GAAGu+L,EAAE,EAAGv5M,EAAE,eAAiBu5M,GAAG,IACxE,CACY,GAAI9/L,GAAIuB,GAAG,CACT,IAAIu+L,GAAK,IAAI79M,EAAEsE,EAAE,cAAc,EAC/BA,EAAE,aAAa,CAAC,EAAI0I,EAAEH,EAAGyS,GAAGvB,GAAG8/L,EAAE,EAAGv5M,EAAE,eAAiBu5M,GAAG,IACxE,CACY1gN,EAAE,eAAiBmH,EAAE,gBAAkBnH,EAAE,OAAOmH,CAAC,CAC7D,CACA,CACA,CACK,EACD,IAAIga,EAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAE,EAAGG,EAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAAGiE,EAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAAG26L,EAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAC5NE,EAAG,UAAY76L,EAAG66L,EAAG,UAAYF,EACjC,SAASvyM,EAAE+S,EAAG1gB,EAAG,CACf,QAASmH,EAAGuI,EAAI1P,EAAE,GAAG,CAAC,EAAE0gB,CAAC,EAAG9Q,EAAI5P,EAAE,GAAG,CAAC,EAAE0gB,CAAC,EAAG/O,EAAI,EAAGA,EAAIyQ,EAAE,WAAW,OAAS,EAAGzQ,IAAK,CACnF,IAAKxK,EAAIib,EAAE,WAAWzQ,CAAC,EAAGxK,EAAIib,EAAE,WAAWzQ,EAAI,CAAC,GAAK,EAAE/B,EAAE,SAASzI,CAAC,GAAKuI,EAAE,SAASvI,CAAC,GAAKuI,EAAE,SAASvI,CAAC,GAAK,GAAIA,IAC5G,CACF,GAAIA,GAAKib,EAAE,WAAWzQ,EAAI,CAAC,EAAG,CAC5B,IAAKxK,EAAIib,EAAE,WAAWzQ,CAAC,EAAGxK,EAAIib,EAAE,WAAWzQ,EAAI,CAAC,EAAGxK,IACjDuI,EAAE,SAASvI,CAAC,EAAI,GAClBnH,EAAE,MAAM0gB,CAAC,EAAE/O,CAAC,EAAI,CAC1B,CACA,CACM,IAAIuQ,GAAI,EAAGoB,GAAI,EACf,IAAKnc,EAAI,EAAGA,EAAI,GAAIA,IAClBuI,EAAE,SAASvI,CAAC,GAAK,KAAOmc,KAAKpB,GAAIxS,EAAE,SAASvI,CAAC,IAAM+a,GAAIxS,EAAE,SAASvI,CAAC,IACrE,QAASyZ,GAAI,EAAGuB,GAAI,EAAGhb,EAAI4Z,EAAE,QAAS5Z,IACpCuI,EAAE,SAASvI,CAAC,GAAK,KAAOgb,KAAKvB,GAAIlR,EAAE,SAASvI,CAAC,IAAMyZ,GAAIlR,EAAE,SAASvI,CAAC,IACrE,QAASwK,EAAI,EAAGA,EAAI,GAAIA,IACtB,GAAIuQ,GAAIf,EAAExP,CAAC,GAAKiP,GAAIU,EAAE3P,CAAC,EAAG,CACxB,IAAI6uM,GAAKj7L,EAAE5T,CAAC,EAAI2R,GAAI48L,EAAGvuM,CAAC,EAAIwQ,GAC5BzS,EAAE,aAAe8wM,KAAO9wM,EAAE,aAAe8wM,GAAI9wM,EAAE,kBAAoBiC,EAC7E,CACA,CACI,KAAK,oBAAsB,SAAS+O,EAAG1gB,EAAGmH,EAAGuI,EAAG,CAC9C,IAAIE,EAAIF,EAAE,GAAG1P,CAAC,EAAEmH,CAAC,EAAGwK,EAAGuQ,GAAGoB,GAAG1C,GAAGuB,GAAI,EACpC,IAAKmB,GAAI,EAAG3R,EAAI,EAAGA,EAAI/B,EAAE,OAAQ+B,IAAK,CACpC,IAAI6uM,GAAK5wM,EAAE,MAAM+B,CAAC,EAClB,IAAK2R,IAAKk9L,GAAI5/L,GAAI,CAAC4/L,GAAI5/L,GAAI,GAAKhR,EAAE,OAAOgR,GAAI0C,EAAC,GAAK,EAAG1C,KACpD,CACFA,IAAK,IAAMhR,EAAE,SAAS+B,CAAC,EAAIwQ,GAAI,GACvC,CACM,GAAIvS,EAAE,gBAAkB,GAAKA,EAAE,SAAW,EAAG,CAC3C,IAAI6wM,GAAK,EACT,IAAK9uM,EAAI,EAAGA,EAAI/B,EAAE,OAAQ+B,IACxB/B,EAAE,SAAS+B,CAAC,EAAI,IAAM8uM,IAAM7wM,EAAE,SAAS+B,CAAC,GAC1C,GAAI,EAAE8uM,GAAK,IAAMA,IAAM,EAAG,CACxB,IAAK9uM,EAAI,EAAGA,EAAI/B,EAAE,OAAQ+B,IACxB/B,EAAE,SAAS+B,CAAC,EAAI,IAAM/B,EAAE,SAAS+B,CAAC,IAAM,GAC1C/B,EAAE,eAAiBuS,GAAI,CACjC,CACA,CACM,GAAIvS,EAAE,SAAW,GAAKA,EAAE,YAAcmR,EAAE,YAAcL,EAAE,SAAW,EAAG,CACpE,IAAK/O,EAAI,GAAIA,EAAIoP,EAAE,SAAW,EAAEnR,EAAE,SAAS+B,CAAC,EAAIuP,EAAE,OAAOvP,CAAC,GAAK/B,EAAE,SAAS+B,CAAC,GAAK,IAAKA,IACnF,CACF,GAAIA,GAAKoP,EAAE,QAAS,CAClB,IAAKpP,EAAI,GAAIA,EAAIoP,EAAE,QAASpP,IAC1B/B,EAAE,SAAS+B,CAAC,EAAI,IAAM/B,EAAE,SAAS+B,CAAC,GAAKuP,EAAE,OAAOvP,CAAC,GACnD/B,EAAE,QAAUuS,GAAI,CAC1B,CACA,CACM,IAAKD,GAAI,EAAGA,GAAI,EAAGA,KACjBxS,EAAE,MAAMvI,CAAC,EAAE+a,EAAC,EAAI,EAClB,IAAKxB,EAAE,SAAW,GAAK1gB,GAAK,GAAK0P,EAAE,GAAG,CAAC,EAAEvI,CAAC,EAAE,YAAc4Z,EAAE,YAAcrR,EAAE,GAAG,CAAC,EAAEvI,CAAC,EAAE,YAAc4Z,EAAE,aAAepT,EAAExG,EAAGuI,CAAC,EAAGyS,GAAI,GAAIxQ,EAAI,EAAGA,EAAI/B,EAAE,OAAQ+B,IACxJ/B,EAAE,SAAS+B,CAAC,GAAK,KAAO/B,EAAE,SAAS+B,CAAC,EAAI,GAC1CwQ,IAAK,IAAMzB,EAAE,SAAW,EAAI,KAAK,eAAe9Q,CAAC,EAAI,KAAK,mBAAmB8Q,EAAG9Q,CAAC,EAClF,EACD,SAASlC,EAAEgT,EAAG1gB,EAAG,CACf,QAASmH,EAAI,EAAGA,EAAInH,EAAG,EAAEmH,EACvB,GAAIuZ,EAAEvZ,CAAC,EAAI,EACT,MAAO,GACX,MAAO,EACb,CACI,IAAI8Z,EAAI,CACN,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,GACD,EAAER,EAAI,CACL,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,GACD,EAAEgF,EAAI,CACL,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACD,KAAK,eAAiB,SAAS/E,EAAG,CAChC,IAAI1gB,EAAGmH,EAAGuI,EAAI,EAAGE,EAAI,EAAG+B,EAAGuQ,GAAIxB,EAAE,SACjC,GAAI6+L,EAAG7xM,EAAEwU,GAAGxB,EAAE,MAAM,CAAC,EAAGA,EAAE,YAAcK,EAAE,WACxCpP,EAAIsP,EAAGP,EAAE,kBAAoB,IAAM/O,EAAI8O,WAChC9O,EAAI8T,EAAG/E,EAAE,SAAW,EAAG,CAC9B,IAAKvZ,EAAI,GAAIA,EAAI4Z,EAAE,SAAW,EAAEmB,GAAE/a,CAAC,EAAI+Z,EAAE,OAAO/Z,CAAC,GAAIA,IACnD,CACF,GAAIA,GAAK4Z,EAAE,QACT,IAAKL,EAAE,QAAU,EAAGvZ,EAAI,GAAIA,EAAI4Z,EAAE,QAAS5Z,IACzC+a,GAAE/a,CAAC,GAAK+Z,EAAE,OAAO/Z,CAAC,CAC9B,CACM,IAAKA,EAAI,EAAGA,EAAIuZ,EAAE,UAAWvZ,IAC3BuI,EAAIwS,GAAE/a,CAAC,IAAMuI,EAAIwS,GAAE/a,CAAC,GACtB,KAAOA,EAAIuZ,EAAE,OAAQvZ,IACnByI,EAAIsS,GAAE/a,CAAC,IAAMyI,EAAIsS,GAAE/a,CAAC,GACtB,IAAKuZ,EAAE,aAAeH,EAAE,WAAYvgB,EAAI,EAAGA,EAAI,GAAIA,IACjD0P,EAAIyR,EAAEnhB,CAAC,GAAK4P,EAAI0R,EAAEthB,CAAC,GAAK0gB,EAAE,aAAe/O,EAAE3R,CAAC,IAAM0gB,EAAE,aAAe/O,EAAE3R,CAAC,EAAG0gB,EAAE,kBAAoB1gB,GACjG,OAAO0gB,EAAE,cAAgBH,EAAE,UAC5B,EACD,IAAI+E,EAAI,CACN,CAAC,GAAI,GAAI,EAAG,CAAC,EACb,CAAC,GAAI,GAAI,EAAG,CAAC,EACb,CAAC,EAAG,EAAG,EAAG,CAAC,EACX,CAAC,GAAI,GAAI,GAAI,CAAC,EACd,CAAC,EAAG,EAAG,EAAG,CAAC,EACX,CAAC,EAAG,EAAG,EAAG,CAAC,CACZ,EACD,KAAK,mBAAqB,SAAS5E,EAAG1gB,EAAG,CACvC,IAAImH,EAAGuI,EAAGE,EAAG+B,EAAGuQ,GAAGoB,GAAG1C,GAAGuB,GAAGq+L,GAAK78L,EAAE,CAAC,EAAG88L,GAAKzgN,EAAE,SAC9C,IAAKA,EAAE,SAAW,EAAImH,EAAI,EAAIA,EAAI,EAAGyZ,GAAI,EAAGA,GAAI,EAAGA,KACjD4/L,GAAG5/L,EAAC,EAAI,EACV,GAAI5gB,EAAE,YAAc+gB,EAAE,WAAY,CAChCrR,EAAI,EACJ,IAAIgxM,GAAKx/L,EAAE,gBAAgB/Z,CAAC,EAAEuI,CAAC,EAC/B,IAAKyS,GAAI,EAAGvS,EAAI,EAAGA,EAAI,EAAGA,IACxB,IAAK+B,EAAI+uM,GAAG9wM,CAAC,EAAI,EAAGgR,GAAI,EAAGA,GAAIjP,EAAGiP,KAAKuB,KACrC,IAAKD,GAAI,EAAGA,GAAI,EAAGA,KACjBu+L,GAAGt+L,GAAI,EAAID,EAAC,EAAIs+L,GAAG5wM,CAAC,IAAM4wM,GAAG5wM,CAAC,EAAI6wM,GAAGt+L,GAAI,EAAID,EAAC,EAC5D,KAAa,CACLxS,EAAI,EACJ,IAAIgxM,GAAKx/L,EAAE,gBAAgB/Z,CAAC,EAAEuI,CAAC,EAC/B,IAAKyS,GAAI,EAAGvS,EAAI,EAAGA,EAAI,EAAGA,IACxB,IAAK+B,EAAI+uM,GAAG9wM,CAAC,EAAGgR,GAAI,EAAGA,GAAIjP,EAAGiP,KAAKuB,KACjCs+L,GAAGt+L,EAAC,EAAIq+L,GAAG5wM,CAAC,IAAM4wM,GAAG5wM,CAAC,EAAI6wM,GAAGt+L,EAAC,EAC1C,CACM,IAAKmB,GAAI,GAAI1T,EAAI,EAAGA,EAAI,EAAGA,IACzB4wM,GAAG5wM,CAAC,EAAI0V,EAAEne,CAAC,EAAEyI,CAAC,IAAM0T,GAAI,IAC1B,GAAI,CAACA,GAAG,CACN,IAAIq9L,GAAIC,GAAIC,GAAIC,GAChB,IAAK9gN,EAAE,oBAAsBkhB,EAAE,gBAAgB/Z,CAAC,EAAEuI,CAAC,EAAGE,EAAI,EAAGA,EAAI,EAAGA,IAClE5P,EAAE,KAAK4P,CAAC,EAAIyR,GAAEm/L,GAAG5wM,CAAC,CAAC,EACrB,OAAQ+wM,GAAK3gN,EAAE,KAAK,CAAC,EAAG4gN,GAAK5gN,EAAE,KAAK,CAAC,EAAG6gN,GAAK7gN,EAAE,KAAK,CAAC,EAAG8gN,GAAK9gN,EAAE,KAAK,CAAC,EAAGmH,EAAC,CACvE,IAAK,GACHnH,EAAE,mBAAqB2gN,GAAK,EAAIC,IAAM,IAAMC,IAAM,GAAKC,GACvD,MACF,IAAK,GACH9gN,EAAE,kBAAoB,KAAO2gN,GAAK,EAAIC,IAAM,GAAKC,GACjD,MACF,IAAK,GACH7gN,EAAE,kBAAoB,IAAM2gN,GAAK,EAAIC,GACrC,MACF,QACEv8L,EAAE,IAAI,OAAO;AAAA,CACxB,EACW,KACZ,CACA,CACM,GAAI,CAACf,GACH,IAAKi8L,EAAGv/M,EAAE,qBAAuB,IAAI,EAAGA,EAAE,aAAe,EAAG4P,EAAI,EAAGA,EAAI,EAAGA,IACxE5P,EAAE,cAAgBA,EAAE,KAAK4P,CAAC,EAAI5P,EAAE,oBAAoB4P,CAAC,EACzD,OAAO0T,EACR,EACD,IAAIjC,GAAI,CACN,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACD,EACD,KAAK,aAAe,SAASX,EAAG,CAC9B,QAAS1gB,EAAI,EAAGA,GAAK,IAAKA,GAAK,EAAG,CAChC,QAASmH,EAAI,EAAGuI,EAAGgR,EAAE,cAAc,EAAE,EAAEvZ,CAAC,EAAInH,GAC1C,CACF,IAAK0P,EAAI0R,EAAEja,CAAC,EAAE,CAAC,EAAGuZ,EAAE,cAAc,EAAEhR,EAAI,CAAC,EAAI1P,GAC3C0P,IACF,IAAKA,EAAI,IAAMA,EAAI0R,EAAEja,CAAC,EAAE,CAAC,GAAIuZ,EAAE,OAAO1gB,EAAI,CAAC,EAAI0P,EAAGA,EAAI0R,EAAEja,CAAC,EAAE,CAAC,EAAGuZ,EAAE,cAAc,EAAEhR,EAAIgR,EAAE,OAAO1gB,EAAI,CAAC,EAAI,CAAC,EAAIA,GAC1G0P,IACFA,EAAI,IAAMA,EAAI0R,EAAEja,CAAC,EAAE,CAAC,GAAIuZ,EAAE,OAAO1gB,EAAI,CAAC,EAAI0P,CAClD,CACK,CACL,CACE,OAAOgW,GAAK06L,EAAI16L,EAClB,CACA,IAAI2B,GAAIghM,GACR,SAASvjM,IAAK,CACZ,GAAIujM,GACF,OAAOhhM,GACTghM,GAAK,EACL,IAAI7nM,EAAIq/L,GAAIx7L,EAAI7D,EAAE,OAAQoD,EAAIpD,EAAE,OAAQmD,EAAInD,EAAE,SAAU++L,EAAK/+L,EAAE,YAAaO,EAAIP,EAAE,QAAS4B,EAAI5B,EAAE,OAAQQ,EAAIonM,GAAE,EAAI7nM,EAAIuG,GAAIs5L,EAAKL,GAAI,EAAE7+L,EAAI0B,GAC1I/f,EAAE,GAAK,SAASue,EAAG4+L,EAAI,CACrB,OAAO,KAAK,IAAI5+L,CAAC,EAAI,KAAK,IAAI4+L,CAAE,EAAI,KAAK,IAAI5+L,EAAI4+L,CAAE,GAAK,KAAK,IAAI5+L,CAAC,EAAI,KAAO,KAAK,IAAIA,EAAI4+L,CAAE,GAAK,KAAK,IAAIA,CAAE,EAAI,IACjH,EAAEn9M,EAAE,IAAM,SAASue,EAAG4+L,EAAI,CACzB,MAAO,CAACn9M,EAAE,GAAGue,EAAG4+L,CAAE,CACnB,EACD,SAASn9M,GAAI,CACX,IAAIue,EAAI8F,GAAI,EAAE84L,EAAK,KAAM96L,EAAI,MAAO+6L,EAAK,KAAMt5L,EAAI,KAAMhG,EAAI,KAAM5Q,EAAI,KACvE,KAAK,WAAa,SAAS/P,EAAGmH,EAAGuI,EAAGE,EAAG,CACrCqwM,EAAKjgN,EAAG2mB,EAAIxf,EAAGwZ,EAAIjR,EAAGK,EAAIH,CAC3B,EACD,IAAII,EAAI,KAAMiN,EAAI,EAAGtN,EAAI,EAAGE,EAAI,EAChC,KAAK,aAAe,SAAS7P,EAAG,CAC9B,IAAImH,EAAInH,EAAE,eAAgB0P,EAC1BvI,EAAE,eAAiB,EAAIuI,EAAI6Q,EAAE,cAAcvgB,EAAE,OAAO,EAAEmH,EAAE,aAAa,EAAIuI,EAAI1P,EAAE,MAC/E,IAAI4P,EAAI,GAAK5P,EAAE,QAAU,GAAK,KAAO0P,EAAI1P,EAAE,eAAiBmH,EAAE,QAC9D,MAAO,GAAIyI,CACZ,EACD,SAASwU,EAAEpkB,EAAG,CACZqkB,EAAE,UAAUrkB,EAAE,OAAOA,EAAE,KAAK,EAAE,IAAK,EAAGgQ,EAAGL,EAAG3P,EAAE,YAAY,EAAG2P,GAAK3P,EAAE,aAAcid,GAAKjd,EAAE,aAAe,EAAGA,EAAE,MAAQA,EAAE,MAAQ,EAAIkhB,EAAE,eAAiB,CAC5J,CACI,SAASZ,EAAEtgB,EAAGmH,EAAGuI,EAAG,CAClB,KAAOA,EAAI,GAAK,CACd,IAAIE,EACJC,GAAK,IAAMA,EAAI,EAAGF,IAAKyS,EAAEzS,EAAIyR,EAAE,iBAAiB,EAAGgB,EAAEpiB,EAAE,OAAOA,EAAE,KAAK,EAAE,cAAgBid,CAAC,EAAGjd,EAAE,OAAOA,EAAE,KAAK,EAAE,cAAgBid,GAAKmH,EAAEpkB,CAAC,EAAGgQ,EAAEL,CAAC,EAAI,GAAIC,EAAI,KAAK,IAAIF,EAAGG,CAAC,EAAGH,GAAKE,EAAGC,GAAKD,EAAGI,EAAEL,CAAC,GAAKxI,GAAKuI,GAAKG,EAAGoN,GAAKrN,CACzN,CACA,CACI,SAASuR,EAAEnhB,EAAGmH,EAAGuI,EAAG,CAClB,KAAOA,EAAI,GAAK,CACd,IAAIE,EACJC,GAAK,IAAMA,EAAI,EAAGF,IAAKyS,EAAEzS,EAAIyR,EAAE,iBAAiB,EAAGpR,EAAEL,CAAC,EAAI,GAAIC,EAAI,KAAK,IAAIF,EAAGG,CAAC,EAAGH,GAAKE,EAAGC,GAAKD,EAAGI,EAAEL,CAAC,GAAKxI,GAAKuI,GAAKG,EAAGoN,GAAKrN,CACpI,CACA,CACI,SAAS0R,EAAEthB,EAAGmH,EAAG,CACf,IAAIuI,EAAI1P,EAAE,eAAgB4P,EAC1B,GAAIzI,GAAK,IAAMmZ,EAAE5Q,EAAG,GAAI,CAAC,EAAGvI,GAAK,GAAIA,GAAK,IAAMmZ,EAAE5Q,EAAG,GAAI,CAAC,EAAGvI,GAAK,GAAIA,GAAK,IAAMmZ,EAAE5Q,EAAG,GAAI,CAAC,EAAGvI,GAAK,GAAIA,GAAK,IAAMmZ,EAAE5Q,EAAG,GAAI,CAAC,EAAGvI,GAAK,GAAIA,GAAK,GAAI,CAC/I,IAAIwK,EAAIgP,EAAE,oBAAqB,EAC/B,GAAIxZ,GAAK,GACP,IAAKyI,EAAI,EAAGA,EAAI+B,EAAE,QAAUxK,GAAK,EAAG,EAAEyI,EACpCzI,GAAK,EAAGmZ,EAAE5Q,EAAGiC,EAAE,OAAO/B,CAAC,EAAG,CAAC,CACvC,CACM,KAAOzI,GAAK,EAAGA,GAAK,EAClBmZ,EAAE5Q,EAAGA,EAAE,eAAgB,CAAC,EAAGA,EAAE,gBAAkB1P,EAAE,kBAAoB,EAAI,CACjF,CACI,SAASulB,EAAEvlB,EAAGmH,EAAGuI,EAAG,CAClB,QAASE,EAAI5P,EAAE,OAAOA,EAAE,KAAK,EAAE,IAAK0P,EAAI,GAAK,CAC3C,IAAIiC,EAAI,KAAK,IAAIjC,EAAG,GAAKE,EAAI,EAAE,EAC/BF,GAAKiC,EAAG3R,EAAE,OAAOA,EAAE,KAAK,EAAE,IAAI4P,GAAK,CAAC,GAAKzI,GAAKuI,GAAK,GAAKE,EAAI,GAAK+B,EAAG/B,GAAK+B,CACjF,CACM3R,EAAE,OAAOA,EAAE,KAAK,EAAE,IAAM4P,CAC9B,CACI,SAASswM,EAAGlgN,EAAGmH,EAAG,CAChBnH,IAAM,EACN,QAAS0P,EAAI,EAAGA,EAAI,EAAGA,IACrB1P,IAAM,EAAGmH,IAAM,GAAIA,EAAInH,GAAK,QAAUmH,GAAK+d,GAC7C,OAAO/d,CACb,CACI,KAAK,gBAAkB,SAASnH,EAAGmH,EAAG,CACpC,IAAIuI,EAAI,MACRA,EAAIwwM,EAAG/4M,EAAE,CAAC,EAAI,IAAKuI,CAAC,EAAGA,EAAIwwM,EAAG/4M,EAAE,CAAC,EAAI,IAAKuI,CAAC,EAC3C,QAASE,EAAI,EAAGA,EAAI5P,EAAE,aAAc4P,IAClCF,EAAIwwM,EAAG/4M,EAAEyI,CAAC,EAAI,IAAKF,CAAC,EACtBvI,EAAE,CAAC,EAAI,KAAKuI,GAAK,CAAC,EAAGvI,EAAE,CAAC,EAAI,KAAKuI,EAAI,GAAG,CACzC,EACD,SAAS/B,EAAE3N,EAAGmH,EAAG,CACf,IAAIuI,EAAI1P,EAAE,eAAgB4P,EAAG+B,EAAGuQ,GAChC,GAAItS,EAAIF,EAAE,QAASA,EAAE,OAAOA,EAAE,KAAK,EAAE,IAAM,EAAGkU,EAAE,KAAKlU,EAAE,OAAOA,EAAE,KAAK,EAAE,IAAK,EAAGA,EAAE,aAAc,CAAC,EAAG1P,EAAE,eAAiB,KAAOulB,EAAE7V,EAAG,KAAM,EAAE,EAAI6V,EAAE7V,EAAG,KAAM,EAAE,EAAG6V,EAAE7V,EAAG1P,EAAE,QAAS,CAAC,EAAGulB,EAAE7V,EAAG,EAAO,CAAC,EAAG6V,EAAE7V,EAAG1P,EAAE,iBAAmB,EAAI,EAAG,CAAC,EAAGulB,EAAE7V,EAAGA,EAAE,cAAe,CAAC,EAAG6V,EAAE7V,EAAGA,EAAE,iBAAkB,CAAC,EAAG6V,EAAE7V,EAAGA,EAAE,QAAS,CAAC,EAAG6V,EAAE7V,EAAG1P,EAAE,UAAW,CAAC,EAAGulB,EAAE7V,EAAG1P,EAAE,KAAK,QAAO,EAAI,CAAC,EAAGulB,EAAE7V,EAAGA,EAAE,SAAU,CAAC,EAAG6V,EAAE7V,EAAG1P,EAAE,UAAW,CAAC,EAAGulB,EAAE7V,EAAG1P,EAAE,SAAU,CAAC,EAAGulB,EAAE7V,EAAG1P,EAAE,SAAU,CAAC,EAAGA,EAAE,kBAAoBulB,EAAE7V,EAAG,EAAG,EAAE,EAAG1P,EAAE,SAAW,EAAG,CACze,IAAKoiB,EAAExS,EAAE,iBAAmB,CAAC,EAAG2V,EAAE7V,EAAGE,EAAE,gBAAiB,CAAC,EAAGF,EAAE,cAAgB,EAAI6V,EAAE7V,EAAGE,EAAE,aAAc,CAAC,EAAI2V,EAAE7V,EAAGE,EAAE,aAAc,CAAC,EAAGsS,GAAI,EAAGA,GAAIxS,EAAE,aAAcwS,KAAK,CACnK,IAAIoB,GACJ,IAAKA,GAAI,EAAGA,GAAI,EAAGA,KACjBiC,EAAE7V,EAAGE,EAAE,MAAMsS,EAAC,EAAEoB,EAAC,EAAG,CAAC,CACjC,CACQ,IAAK3R,EAAI,EAAGA,EAAI,EAAGA,IACjB,IAAKuQ,GAAI,EAAGA,GAAIxS,EAAE,aAAcwS,KAAK,CACnC,IAAItB,GAAIhR,EAAE,GAAG+B,CAAC,EAAEuQ,EAAC,EACjBqD,EAAE7V,EAAGkR,GAAE,eAAiBA,GAAE,aAAc,EAAE,EAAG2E,EAAE7V,EAAGkR,GAAE,WAAa,EAAG,CAAC,EAAG2E,EAAE7V,EAAGkR,GAAE,YAAa,CAAC,EAAG2E,EAAE7V,EAAGkR,GAAE,kBAAmB,CAAC,EAAGA,GAAE,YAAcw/L,EAAG,WAAa76L,EAAE7V,EAAG,EAAG,CAAC,EAAG6V,EAAE7V,EAAGkR,GAAE,WAAY,CAAC,EAAG2E,EAAE7V,EAAGkR,GAAE,iBAAkB,CAAC,EAAGA,GAAE,aAAa,CAAC,GAAK,KAAOA,GAAE,aAAa,CAAC,EAAI,IAAK2E,EAAE7V,EAAGkR,GAAE,aAAa,CAAC,EAAG,CAAC,EAAGA,GAAE,aAAa,CAAC,GAAK,KAAOA,GAAE,aAAa,CAAC,EAAI,IAAK2E,EAAE7V,EAAGkR,GAAE,aAAa,CAAC,EAAG,CAAC,EAAG2E,EAAE7V,EAAGkR,GAAE,cAAc,CAAC,EAAG,CAAC,EAAG2E,EAAE7V,EAAGkR,GAAE,cAAc,CAAC,EAAG,CAAC,EAAG2E,EAAE7V,EAAGkR,GAAE,cAAc,CAAC,EAAG,CAAC,IAAM2E,EAAE7V,EAAG,EAAG,CAAC,EAAGkR,GAAE,aAAa,CAAC,GAAK,KAAOA,GAAE,aAAa,CAAC,EAAI,IAAK2E,EAAE7V,EAAGkR,GAAE,aAAa,CAAC,EAAG,CAAC,EAAGA,GAAE,aAAa,CAAC,GAAK,KAAOA,GAAE,aAAa,CAAC,EAAI,IAAK2E,EAAE7V,EAAGkR,GAAE,aAAa,CAAC,EAAG,CAAC,EAAGA,GAAE,aAAa,CAAC,GAAK,KAAOA,GAAE,aAAa,CAAC,EAAI,IAAK2E,EAAE7V,EAAGkR,GAAE,aAAa,CAAC,EAAG,CAAC,EAAGwB,EAAE,GAAKxB,GAAE,eAAiBA,GAAE,cAAgB,EAAE,EAAGwB,EAAE,GAAKxB,GAAE,eAAiBA,GAAE,cAAgB,CAAC,EAAG2E,EAAE7V,EAAGkR,GAAE,cAAe,CAAC,EAAG2E,EAAE7V,EAAGkR,GAAE,cAAe,CAAC,GAAI2E,EAAE7V,EAAGkR,GAAE,QAAS,CAAC,EAAG2E,EAAE7V,EAAGkR,GAAE,eAAgB,CAAC,EAAG2E,EAAE7V,EAAGkR,GAAE,mBAAoB,CAAC,CACt8B,CACO,KACC,KAAKwB,EAAExS,EAAE,iBAAmB,CAAC,EAAG2V,EAAE7V,EAAGE,EAAE,gBAAiB,CAAC,EAAG2V,EAAE7V,EAAGE,EAAE,aAAcF,EAAE,YAAY,EAAGiC,EAAI,EAAGuQ,GAAI,EAAGA,GAAIxS,EAAE,aAAcwS,KAAK,CACvI,IAAItB,GAAIhR,EAAE,GAAG+B,CAAC,EAAEuQ,EAAC,EACjBqD,EAAE7V,EAAGkR,GAAE,eAAiBA,GAAE,aAAc,EAAE,EAAG2E,EAAE7V,EAAGkR,GAAE,WAAa,EAAG,CAAC,EAAG2E,EAAE7V,EAAGkR,GAAE,YAAa,CAAC,EAAG2E,EAAE7V,EAAGkR,GAAE,kBAAmB,CAAC,EAAGA,GAAE,YAAcw/L,EAAG,WAAa76L,EAAE7V,EAAG,EAAG,CAAC,EAAG6V,EAAE7V,EAAGkR,GAAE,WAAY,CAAC,EAAG2E,EAAE7V,EAAGkR,GAAE,iBAAkB,CAAC,EAAGA,GAAE,aAAa,CAAC,GAAK,KAAOA,GAAE,aAAa,CAAC,EAAI,IAAK2E,EAAE7V,EAAGkR,GAAE,aAAa,CAAC,EAAG,CAAC,EAAGA,GAAE,aAAa,CAAC,GAAK,KAAOA,GAAE,aAAa,CAAC,EAAI,IAAK2E,EAAE7V,EAAGkR,GAAE,aAAa,CAAC,EAAG,CAAC,EAAG2E,EAAE7V,EAAGkR,GAAE,cAAc,CAAC,EAAG,CAAC,EAAG2E,EAAE7V,EAAGkR,GAAE,cAAc,CAAC,EAAG,CAAC,EAAG2E,EAAE7V,EAAGkR,GAAE,cAAc,CAAC,EAAG,CAAC,IAAM2E,EAAE7V,EAAG,EAAG,CAAC,EAAGkR,GAAE,aAAa,CAAC,GAAK,KAAOA,GAAE,aAAa,CAAC,EAAI,IAAK2E,EAAE7V,EAAGkR,GAAE,aAAa,CAAC,EAAG,CAAC,EAAGA,GAAE,aAAa,CAAC,GAAK,KAAOA,GAAE,aAAa,CAAC,EAAI,IAAK2E,EAAE7V,EAAGkR,GAAE,aAAa,CAAC,EAAG,CAAC,EAAGA,GAAE,aAAa,CAAC,GAAK,KAAOA,GAAE,aAAa,CAAC,EAAI,IAAK2E,EAAE7V,EAAGkR,GAAE,aAAa,CAAC,EAAG,CAAC,EAAGwB,EAAE,GAAKxB,GAAE,eAAiBA,GAAE,cAAgB,EAAE,EAAGwB,EAAE,GAAKxB,GAAE,eAAiBA,GAAE,cAAgB,CAAC,EAAG2E,EAAE7V,EAAGkR,GAAE,cAAe,CAAC,EAAG2E,EAAE7V,EAAGkR,GAAE,cAAe,CAAC,GAAI2E,EAAE7V,EAAGkR,GAAE,eAAgB,CAAC,EAAG2E,EAAE7V,EAAGkR,GAAE,mBAAoB,CAAC,CACh7B,CACM5gB,EAAE,kBAAoB,gBAAgB0P,EAAGA,EAAE,OAAOA,EAAE,KAAK,EAAE,GAAG,EAC9D,CACE,IAAIyS,GAAIzS,EAAE,MACV0S,EAAE1S,EAAE,OAAOyS,EAAC,EAAE,KAAOzS,EAAE,aAAe,CAAC,EAAGA,EAAE,MAAQyS,GAAI,EAAIjB,EAAE,eAAiB,EAAGxR,EAAE,OAAOA,EAAE,KAAK,EAAE,aAAeA,EAAE,OAAOyS,EAAC,EAAE,aAAehb,EAAGuI,EAAE,OAASA,EAAE,OAAS2U,EAAE,IAAI,QAAQ;AAAA,CAC5L,CACD,CACA,CACI,SAAS3W,EAAE1N,EAAGmH,EAAG,CACf,IAAIuI,EAAI6Q,EAAE,GAAGpZ,EAAE,mBAAqB,EAAE,EAAGyI,EAAG+B,EAAI,EAAGuQ,GAAI/a,EAAE,WAAYmc,GAAInc,EAAE,WAC3E,IAAKib,EAAEjb,EAAE,mBAAqB,CAAC,EAAGyI,GAAKzI,EAAE,OAASA,EAAE,YAAc,EAAGyI,EAAI,EAAG,EAAEA,EAAG,CAC/E,IAAIgR,GAAI,EAAGuB,GAAI,EAAGq+L,GAClBA,GAAKr5M,EAAE,OAAO+a,GAAI,CAAC,EAAGs+L,IAAM,IAAMr+L,IAAK,EAAGhb,EAAE,GAAGmc,GAAI,CAAC,EAAI,GAAK1C,MAAM4/L,GAAKr5M,EAAE,OAAO+a,GAAI,CAAC,EAAGs+L,IAAM,IAAMr+L,IAAK,EAAGvB,IAAK,EAAGzZ,EAAE,GAAGmc,GAAI,CAAC,EAAI,GAAK1C,MAAM4/L,GAAKr5M,EAAE,OAAO+a,GAAI,CAAC,EAAGs+L,IAAM,IAAMr+L,IAAK,EAAGvB,IAAK,EAAGzZ,EAAE,GAAGmc,GAAI,CAAC,EAAI,GAAK1C,MAAM4/L,GAAKr5M,EAAE,OAAO+a,GAAI,CAAC,EAAGs+L,IAAM,IAAMr+L,KAAKvB,IAAK,EAAGzZ,EAAE,GAAGmc,GAAI,CAAC,EAAI,GAAK1C,MAAMsB,IAAK,EAAGoB,IAAK,EAAGhD,EAAEtgB,EAAG4gB,GAAIlR,EAAE,MAAMyS,EAAC,EAAGzS,EAAE,KAAKyS,EAAC,CAAC,EAAGxQ,GAAKjC,EAAE,KAAKyS,EAAC,CACvW,CACM,OAAOxQ,CACb,CACI,SAASsP,EAAEjhB,EAAGmH,EAAGuI,EAAGE,EAAG+B,EAAG,CACxB,IAAIuQ,GAAI3B,EAAE,GAAGpZ,CAAC,EAAGmc,GAAI,EACrB,GAAInc,GAAK,EACP,OAAOmc,GACT,QAAS1C,GAAIlR,EAAGkR,GAAIhR,EAAGgR,IAAK,EAAG,CAC7B,IAAIuB,GAAI,EAAGq+L,GAAK,EAAGC,GAAKv+L,GAAE,KAAMw+L,GAAKx+L,GAAE,KAAMy+L,GAAK,EAAGC,GAAKjvM,EAAE,OAAOiP,EAAC,EAAGigM,GAAKlvM,EAAE,OAAOiP,GAAI,CAAC,EAC1F,GAAIggM,IAAM,IAAMjvM,EAAE,GAAGiP,EAAC,EAAI,GAAK+/L,KAAMx+L,MAAMhb,EAAI,GAAI,CACjD,GAAIy5M,GAAK,GAAI,CACX,IAAIE,GAAKF,GAAK,GACdx+L,EAAE0+L,IAAM5+L,GAAE,MAAM,EAAGy+L,IAAMG,IAAM,EAAGN,GAAKC,GAAIG,GAAK,EAC5D,CACU,GAAIC,GAAK,GAAI,CACX,IAAIj2H,GAAKi2H,GAAK,GACdz+L,EAAEwoE,IAAM1oE,GAAE,MAAM,EAAGy+L,KAAOF,GAAIE,IAAM/1H,GAAI41H,IAAMC,GAAII,GAAK,EACnE,CACUH,GAAK,EACf,CACQG,IAAM,IAAMF,KAAO,EAAGhvM,EAAE,GAAGiP,GAAI,CAAC,EAAI,GAAK+/L,KAAMx+L,MAAMy+L,GAAKA,GAAKF,GAAKG,GAAIL,IAAMr+L,GAAGA,IAAKD,GAAE,KAAK0+L,EAAE,EAAGtgM,EAAEtgB,EAAGkiB,GAAE,MAAM0+L,EAAE,EAAGz+L,EAAC,EAAG7B,EAAEtgB,EAAG2gN,GAAIH,EAAE,EAAGl9L,IAAKnB,GAAIq+L,EACvJ,CACM,OAAOl9L,EACb,CACI,SAAS7C,EAAEzgB,EAAGmH,EAAG,CACf,IAAIuI,EAAI,EAAI1P,EAAE,cAAc,EAAE,CAAC,EAC/B0P,EAAIvI,EAAE,aAAeuI,EAAIvI,EAAE,YAC3B,IAAIyI,EAAIqR,EAAEjhB,EAAGmH,EAAE,aAAa,CAAC,EAAG,EAAGuI,EAAGvI,CAAC,EACvC,OAAOyI,GAAKqR,EACVjhB,EACAmH,EAAE,aAAa,CAAC,EAChBuI,EACAvI,EAAE,WACFA,CACR,EAASyI,CACT,CACI,SAAS6V,EAAEzlB,EAAGmH,EAAG,CACf,IAAIuI,EAAGE,EAAG+B,EAAGuQ,GACbxS,EAAIvI,EAAE,WACN,IAAImc,GAAInc,EAAE,cAAgB,EAC1B,OAAOib,EAAEkB,GAAItjB,EAAE,cAAc,EAAE,MAAM,EAAG2R,EAAI3R,EAAE,cAAc,EAAEsjB,EAAC,EAAGA,IAAKnc,EAAE,cAAgB,EAAGib,EAAEkB,GAAItjB,EAAE,cAAc,EAAE,MAAM,EAAGkiB,GAAIliB,EAAE,cAAc,EAAEsjB,EAAC,EAAG3R,EAAIjC,IAAMiC,EAAIjC,GAAIwS,GAAIxS,IAAMwS,GAAIxS,GAAIE,EAAIqR,EAAEjhB,EAAGmH,EAAE,aAAa,CAAC,EAAG,EAAGwK,EAAGxK,CAAC,EAAGyI,GAAKqR,EACpOjhB,EACAmH,EAAE,aAAa,CAAC,EAChBwK,EACAuQ,GACA/a,CACD,EAAEyI,GAAKqR,EACNjhB,EACAmH,EAAE,aAAa,CAAC,EAChB+a,GACAxS,EACAvI,CACR,EAASyI,CACT,CACI,SAAS0V,EAAEtlB,EAAG,CACZ,IAAImH,EAAGuI,EAAGE,EAAG+B,EAAGuQ,GAAI,EAAGoB,GAAItjB,EAAE,eAAgB4gB,GAAI0C,GAAE,QACnD,GAAItjB,EAAE,SAAW,EACf,IAAKmH,EAAI,EAAGA,EAAI,EAAGA,IACjB,IAAKuI,EAAI,EAAGA,EAAI4T,GAAE,aAAc5T,IAAK,CACnC,IAAIyS,GAAIvB,GAAE,GAAGzZ,CAAC,EAAEuI,CAAC,EAAG8wM,GAAKx/L,EAAE,UAAUmB,GAAE,iBAAiB,EAAGs+L,GAAKz/L,EAAE,UAAUmB,GAAE,iBAAiB,EAC/F,IAAKxQ,EAAI,EAAG/B,EAAI,EAAGA,EAAIuS,GAAE,UAAWvS,IAClCuS,GAAE,SAASvS,CAAC,GAAK,KAAO0Q,EAAEgD,GAAGnB,GAAE,SAASvS,CAAC,EAAG4wM,EAAE,EAAG7uM,GAAK6uM,IACxD,KAAO5wM,EAAIuS,GAAE,OAAQvS,IACnBuS,GAAE,SAASvS,CAAC,GAAK,KAAO0Q,EAAEgD,GAAGnB,GAAE,SAASvS,CAAC,EAAG6wM,EAAE,EAAG9uM,GAAK8uM,IACxDr+L,EAAEzQ,GAAKwQ,GAAE,YAAY,EAAGA,GAAE,YAAci+L,EAAG,WAAazuM,GAAK8O,EAAE6C,GAAGnB,EAAC,EAAIxQ,GAAK8T,EAAEnC,GAAGnB,EAAC,EAAGxQ,GAAKjE,EAAE4V,GAAGnB,EAAC,EAAGC,EAAEzQ,GAAKwQ,GAAE,eAAiBA,GAAE,YAAY,EAAGD,IAAKvQ,CAC/J,KAEQ,KAAKxK,EAAI,EAAGuI,EAAI,EAAGA,EAAI4T,GAAE,aAAc5T,IAAK,CAC1C,IAAIyS,GAAIvB,GAAE,GAAGzZ,CAAC,EAAEuI,CAAC,EAAGgxM,GAAIC,GAAIC,GAAK,EACjC,GAAIx+L,EAAED,GAAE,qBAAuB,IAAI,EAAGxQ,EAAI,EAAG/B,EAAI,EAAG+wM,GAAK,EAAGx+L,GAAE,YAAci+L,EAAG,WAAY,CACzF,KAAOO,GAAK,EAAGA,KAAM,CACnB,IAAIE,GAAK1+L,GAAE,oBAAoBw+L,EAAE,EAAI,EAAGG,GAAK3+L,GAAE,KAAKw+L,EAAE,EACtD,IAAKD,GAAK,EAAGA,GAAKG,GAAIH,KAAM9wM,IAC1B0Q,EACEgD,GACA,KAAK,IAAInB,GAAE,SAASvS,EAAI,EAAI,CAAC,EAAG,CAAC,EACjCkxM,EAClB,EAAmBxgM,EACDgD,GACA,KAAK,IAAInB,GAAE,SAASvS,EAAI,EAAI,CAAC,EAAG,CAAC,EACjCkxM,EAClB,EAAmBxgM,EACDgD,GACA,KAAK,IAAInB,GAAE,SAASvS,EAAI,EAAI,CAAC,EAAG,CAAC,EACjCkxM,EAClB,EAAmBF,IAAM,EAAIE,EAC7B,CACYnvM,GAAK8O,EAAE6C,GAAGnB,EAAC,CACvB,KAAiB,CACL,KAAOw+L,GAAK,EAAGA,KAAM,CACnB,IAAIE,GAAK1+L,GAAE,oBAAoBw+L,EAAE,EAAGG,GAAK3+L,GAAE,KAAKw+L,EAAE,EAClD,IAAKD,GAAK,EAAGA,GAAKG,GAAIH,KAAM9wM,IAC1B0Q,EAAEgD,GAAG,KAAK,IAAInB,GAAE,SAASvS,CAAC,EAAG,CAAC,EAAGkxM,EAAE,EAAGF,IAAME,EAC5D,CACYnvM,GAAK8T,EAAEnC,GAAGnB,EAAC,CACvB,CACUxQ,GAAKjE,EAAE4V,GAAGnB,EAAC,EAAGC,EAAEzQ,GAAKwQ,GAAE,cAAc,EAAGC,EAAEw+L,IAAMz+L,GAAE,YAAY,EAAGD,IAAK0+L,GAAKjvM,CACrF,CACM,OAAOuQ,EACb,CACI,SAASb,IAAI,CACX,KAAK,MAAQ,CACnB,CACI,SAASX,EAAE1gB,EAAGmH,EAAG,CACf,IAAIuI,EAAI1P,EAAE,eAAgB4P,EAAG+B,EAAGuQ,GAAGoB,GAAG1C,GACtC,OAAOA,GAAIlR,EAAE,MAAO4T,GAAI5T,EAAE,MAAQ,EAAG4T,IAAK,KAAOA,GAAIpC,EAAE,eAAiB,GAAItR,EAAIF,EAAE,OAAO4T,EAAC,EAAE,aAAerG,EAAG9V,EAAE,MAAQyI,EAAGA,GAAK,IAAM+B,EAAI,EAAI2R,GAAI1C,GAAG0C,GAAI1C,KAAMjP,EAAI,EAAI2R,GAAI1C,GAAIM,EAAE,gBAAiBtR,GAAK+B,EAAI,EAAIjC,EAAE,cAAewS,GAAI89L,EAAG,aAAahgN,CAAC,EAAG4P,GAAKsS,GAAG/a,EAAE,OAAS+a,GAAG/a,EAAE,MAAQ,GAAK,EAAIA,EAAE,MAAQ,EAAIA,EAAE,MAAQ,EAAIA,EAAE,MAAQA,EAAE,MAAQ,EAAGA,EAAE,OAASwI,EAAI,EAAGC,EAAI,GAAKyU,EAAE,IAAI,QAAQ;AAAA,CAClY,EAAGzU,CACJ,CACI,KAAK,gBAAkB,SAAS5P,EAAG,CACjC,IAAImH,EAAInH,EAAE,eAAgB0P,EAAGE,EAAG+B,EAAIxK,EAAE,MAAQ,EAC9C,GAAIwK,GAAK,KAAOA,EAAIuP,EAAE,eAAiB,GAAIxR,EAAIvI,EAAE,QAAS,GAAGyI,EAAI8Q,EAAE1gB,EAAG,IAAIqhB,EAAG,GAAK,GAAI,CACpF,GAAIC,EAAEthB,EAAG4P,CAAC,EAAGwS,EAAEjb,EAAE,OAAOwK,CAAC,EAAE,aAAe,KAAK,aAAa3R,CAAC,GAAKid,CAAC,EAAG9V,EAAE,SAAW,EAAGuI,EAAE,gBAAkB,EAAGvI,EAAE,eAAgB,CAC7H,IAAI+a,GAAI+9L,EAAG,aAAa94M,EAAE,MAAM,EAChCib,EAAE,IAAIF,GAAG,aAAa,uBAAuB,CAAC,EAAG/a,EAAE,UAAY,KAAK,MAAM+a,GAAI,GAAK,EAAG,EAAI,CACpG,CACQ/a,EAAE,iBAAmBA,EAAE,iBAAmB,KAAK,KAAK,KAAK,MAAMA,EAAE,WAAa,KAAK,EAAI,GAAK,EAAE,EAAI,EAAGA,EAAE,iBAAmB,IAAM,GAAGnH,EAAE,MAAO,CAAC,GAAK,GAAGA,EAAE,MAAO,CAAC,GAAKmH,EAAE,YAAc,KAAK,MAAM,MAAQA,EAAE,WAAa,GAAG,EAAI,IAAMA,EAAE,YAAc,GAC3P,CACK,EAAE,KAAK,eAAiB,SAASnH,EAAGmH,EAAGuI,EAAG,CACzC,QAASE,EAAI5P,EAAE,eAAgB2R,EAAGjC,KAAM,GACtC,IAAKyR,EAAEvR,EAAGzI,EAAG,CAAC,EAAGwK,EAAI,EAAGA,EAAIuP,EAAE,eAAgB,EAAEvP,EAC9C/B,EAAE,OAAO+B,CAAC,EAAE,cAAgB,CACtC,EAAO,KAAK,iBAAmB,SAAS3R,EAAG,CACrC,IAAImH,EAAInH,EAAE,eAAgB0P,EAC1BA,EAAIvI,EAAE,QACN,IAAIyI,EAAI,KAAK,aAAa5P,CAAC,EAC3BshB,EAAEthB,EAAG0P,EAAE,aAAa,EAAG/B,EAAE3N,EAAG4P,CAAC,EAC7B,IAAI+B,EAAI,EAAIxK,EAAE,aACd,GAAIwK,GAAK2T,EAAEtlB,CAAC,EAAGshB,EAAEthB,EAAG0P,EAAE,cAAc,EAAGiC,GAAKjC,EAAE,eAAgBA,EAAE,kBAAoBE,EAAI+B,GAAK,EAAG+O,EAAE1gB,EAAG,IAAIqhB,EAAG,GAAKla,EAAE,UAAYkd,EAAE,IAAI,QAAQ,sDAAsD,EAAG3U,EAAE,gBAAkB,GAAKvI,EAAE,WAAakd,EAAE,IAAI,OAClP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,EAAI3U,EAAE,gBACNvI,EAAE,SACFuI,EAAE,eACFA,EAAE,cACF,EAAIvI,EAAE,aACNwK,EAAIjC,EAAE,eAAiB,EAAIvI,EAAE,aAC7BwK,EACAA,EAAI,EACJ/B,CACD,EAAEyU,EAAE,IAAI,QAAQ,yDAAyD,EAAGA,EAAE,IAAI,QAAQ,4EAA4E,EAAGA,EAAE,IAAI,QAAQ,kCAAkC,EAAGA,EAAE,IAAI,QAAQ,oCAAoC,EAAGld,EAAE,SAAWuI,EAAE,gBAAkB,GAAIuN,EAAI,IAAK,CAC9T,IAAIiF,GACJ,IAAKA,GAAI,EAAGA,GAAIhB,EAAE,eAAgB,EAAEgB,GAClC/a,EAAE,OAAO+a,EAAC,EAAE,cAAgBjF,EAC9BA,EAAI,CACZ,CACM,MAAO,EACb,EAAO,KAAK,YAAc,SAASjd,EAAGmH,EAAGuI,EAAGE,EAAG+B,EAAG,CAC5C,IAAIuQ,GAAIvS,EAAI,EACZ,GAAIuS,IAAK,EACP,MAAO,GACT,GAAItS,GAAK,GAAKsS,GAAItS,EAChB,MAAO,GACT,GAAIyU,EAAE,UAAUrU,EAAG,EAAG7I,EAAGuI,EAAGwS,EAAC,EAAGvS,EAAI,GAAIE,EAAI,EAAG8B,GAAK,EAAG,CACrD,IAAI2R,GAAIvC,EAAE,CAAC,EACX,GAAIuC,GAAE,CAAC,EAAItjB,EAAE,UAAW+P,EAAE,eAAeuT,GAAGnc,EAAGuI,EAAGwS,EAAC,EAAGliB,EAAE,UAAYsjB,GAAE,CAAC,EAAGpB,GAAI,IAAMliB,EAAE,eAAe,eAAiBkiB,IAAIliB,EAAE,mBAC1H,QAAS4gB,GAAI2+L,EAAG,CAAC,EAAG,IAAI,CAAC,EAAGp9L,GAAID,GAAGs+L,GAAK,GAAIC,GAAID,IAAM,GACpD,GAAIA,GAAK75L,EAAE,sBACT3mB,EAAE,IACFmH,EACAuI,EACAyS,GACAvB,GAAE,CAAC,EACHA,GAAE,CAAC,CACjB,EAAeuB,GAAI,EAAGq+L,IAAM,KAAOA,GAAK,GAAIA,GAAK,EAAG,CACtC,GAAIxgN,EAAE,eAAgB,CACpB,IAAKygN,GAAK,EAAGA,GAAKD,GAAIC,KACpB7/L,GAAE,CAAC,EAAE6/L,EAAE,EAAIzgN,EAAE,WAAaA,EAAE,WAAa4gB,GAAE,CAAC,EAAE6/L,EAAE,EAAI,CAAC7/L,GAAE,CAAC,EAAE6/L,EAAE,EAAIzgN,EAAE,aAAeA,EAAE,WAAa,CAAC4gB,GAAE,CAAC,EAAE6/L,EAAE,GAC1G,GAAIzgN,EAAE,aAAe,EACnB,IAAKygN,GAAK,EAAGA,GAAKD,GAAIC,KACpB7/L,GAAE,CAAC,EAAE6/L,EAAE,EAAIzgN,EAAE,WAAaA,EAAE,WAAa4gB,GAAE,CAAC,EAAE6/L,EAAE,EAAI,CAAC7/L,GAAE,CAAC,EAAE6/L,EAAE,EAAIzgN,EAAE,aAAeA,EAAE,WAAa,CAAC4gB,GAAE,CAAC,EAAE6/L,EAAE,EAC5H,CACc,GAAIzgN,EAAE,gBAAkBigN,EAAG,eACzBjgN,EAAE,OACF4gB,GAAE,CAAC,EACH,EACAA,GAAE,CAAC,EACH,EACA4/L,GACAxgN,EAAE,YACH,GAAI,aAAa,oBAChB,MAAO,EACvB,EAEA,CACM,OAAOkiB,EACb,EAAO,KAAK,kBAAoB,SAASliB,EAAG,CACtCgQ,EAAI2T,EAAEvC,EAAE,iBAAiB,EAAGphB,EAAE,MAAQA,EAAE,MAAQ,EAAGA,EAAE,OAAOA,EAAE,KAAK,EAAE,aAAe,EAAG2P,EAAI,GAAIE,EAAI,EAAGoN,EAAI,CAC3G,CACL,CACE,OAAOoK,GAAKxkB,EAAGwkB,EACjB,CACA,IAAI1F,GAAI2mM,GACR,SAASphM,IAAK,CACZ,GAAIohM,GACF,OAAO3mM,GACT2mM,GAAK,EACL,IAAI9nM,EAAIq/L,GAAIx7L,EAAI7D,EAAE,OAAQoD,EAAIpD,EAAE,QAASmD,EAAInD,EAAE,WAAY++L,EAAK/+L,EAAE,UAAWO,EAAIP,EAAE,UAAW4B,EAAI5B,EAAE,YAAaQ,EAAIR,EAAE,OAAQD,EAAIukM,IAAI1E,EAAK6E,IAAI/jM,EAAI0B,GAAI/f,EAAIikN,IAAI1lM,EAAIimM,IAAIrH,EAAK8H,IAAI5iM,EAAIJ,GAAI,EAAEm7L,EAAKn5L,GAAIH,EAAIo5L,GAAI,EAC5M,SAASp/L,GAAI,CACX,IAAI5Q,EAAIwwM,GAAIvwM,EAAI,KAAMiN,EAAI,IAAM,KAChC0D,EAAE,GAAK,IAAKA,EAAE,GAAK,IAAKA,EAAE,GAAK,IAAKA,EAAE,GAAK,IAAKA,EAAE,GAAK,IAAKA,EAAE,GAAK,IAAKA,EAAE,GAAK,IAAKA,EAAE,GAAK,IAAKA,EAAE,GAAK,IAAKA,EAAE,GAAK,IAAKA,EAAE,MAAQ,IAAKA,EAAE,SAAW,KAAMA,EAAE,QAAU,KAAMA,EAAE,OAAS,KAAMA,EAAE,cAAgB,KAAMA,EAAE,aAAe,KAAMA,EAAE,OAAS,KAAMA,EAAE,YAAc,KAC7Q,IAAIhR,EAAI,MAAQsN,EAChB0D,EAAE,kBAAoBhR,EACtB,IAAIE,EAAGuU,EAAG9D,EAAGa,EAAGG,EAAGiE,EAAI,IAAIhF,EAAK2/L,EAAIvyM,EAAGD,EACvC,KAAK,IAAM,IAAIiZ,EAAK,KAAK,WAAa,SAAS7W,EAAG+S,GAAGqhM,GAAIC,GAAIC,GAAIC,GAAIC,GAAIC,GAAIC,GAAI,CAC/E30M,EAAIC,EAAGsU,EAAIvB,GAAGvC,EAAI4jM,GAAI/iM,EAAIgjM,GAAI7iM,EAAI8iM,GAAIlE,EAAKmE,GAAI12M,EAAI42M,GAAI72M,EAAI82M,GAAI,KAAK,IAAI,WAAWpgM,EAAGmB,EAAGpE,EAAG++L,CAAE,CAC/F,EACD,SAASj/L,GAAI,CACX,KAAK,YAAc,EAAG,KAAK,kBAAoB,EAAG,KAAK,YAAcs+L,EAAG54L,EAAE,OAAO,EAAG,KAAK,YAAc44L,EAAG54L,EAAE,OAAO,CACzH,CACI,SAASlG,GAAI,CACX,KAAK,WAAa,CACxB,CACI,SAASgF,EAAE3V,EAAG+S,GAAG,CACf,KAAK,QAAUA,EACrB,CACI,IAAIyC,EAAI,WACR,SAASjE,GAAEvR,EAAG,CACZ,IAAI+S,GACJ,OAAO/S,EAAE,SAAWwV,EAAGzC,GAAI/S,EAAE,eAAiB,IAAIoR,EAAKpR,EAAE,KAAOC,EAAE,QAASD,EAAE,SAAW,EAAGA,EAAE,cAAgB,MAAOA,EAAE,aAAe,EAAGA,EAAE,YAAc,GAAIA,EAAE,aAAe,GAAIA,EAAE,QAAU,GAAIA,EAAE,aAAe,KAAM+S,GAAE,cAAgB,GAAI/S,EAAE,YAAc,EAAGA,EAAE,aAAe,EAAGA,EAAE,aAAe,GAAIA,EAAE,cAAgB,GAAIA,EAAE,IAAM8T,EAAE,QAAS9T,EAAE,MAAQ,EAAGA,EAAE,SAAW,GAAIA,EAAE,sBAAwB,IAAKA,EAAE,qBAAuB,EAAGA,EAAE,qBAAuB,EAAGA,EAAE,aAAe,EAAG+S,GAAE,gBAAkB,EAAGA,GAAE,gBAAkB,GAAI/S,EAAE,WAAa,GAAIA,EAAE,iBAAmB,GAAIA,EAAE,MAAQ,GAAI+S,GAAE,eAAiB,EAAGA,GAAE,SAAS,CAAC,EAAI,IAAKA,GAAE,SAAS,CAAC,EAAI,IAAKA,GAAE,YAAY,CAAC,EAAI,EAAGA,GAAE,YAAY,CAAC,EAAI,EAAGA,GAAE,cAAgB,EAAGA,GAAE,MAAM,WAAa,GAAIA,GAAE,MAAM,aAAe,GAAI/S,EAAE,MAAQ,GAAIA,EAAE,WAAa,GAAIA,EAAE,QAAU,GAAIA,EAAE,iBAAmB,GAAIA,EAAE,kBAAoB,EAAGA,EAAE,YAAc,KAAMA,EAAE,aAAe,GAAI+S,GAAE,qBAAuB8D,EAAE,SAAWA,EAAE,UAAW7W,EAAE,gBAAkB,EAAG+S,GAAE,QAAU8D,EAAE,SAAWA,EAAE,UAAW7W,EAAE,eAAiB,GAAIA,EAAE,kBAAoB,GAAI+S,GAAE,kBAAoB,GAAIA,GAAE,eAAiB,GAAIA,GAAE,eAAiB,GAAIA,GAAE,UAAY,EAAGA,GAAE,eAAiB,EAAGA,GAAE,iBAAmB,EAAGA,GAAE,YAAc,GAAI/S,EAAE,OAAS,EAAGA,EAAE,uBAAyB,GAAI,CACvvC,CACI,KAAK,UAAY,UAAW,CAC1B,IAAIA,EAAI,IAAIswM,EACZ,OAAO/+L,GAAEvR,CAAC,EAAGA,EAAE,mBAAqB,EAAGA,CACxC,EACD,SAAS4Q,EAAE5Q,EAAG,CACZ,OAAOA,EAAI,EAAI,EAAIA,GAAK,EAAI,EAAI,KAAK,IAAI,KAAK,GAAK,EAAIA,CAAC,CAC9D,CACI,KAAK,wBAA0B,SAASA,EAAG,CACzC,IAAI+S,GAAI,CACN,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,GACR,EAASqhM,GAAK,EAAGC,GAAK,EAAGC,GAAK,EAAGC,GAAK,EAChCA,GAAKxhM,GAAE,EAAE,EAAGuhM,GAAK,GAAID,GAAKthM,GAAE,EAAE,EAAGqhM,GAAK,GACtC,QAASI,GAAK,EAAGA,GAAK,GAAIA,KACxB,GAAI,KAAK,IAAIx0M,EAAG+S,GAAEyhM,GAAK,CAAC,CAAC,GAAKx0M,EAAG,CAC/Bu0M,GAAKxhM,GAAEyhM,GAAK,CAAC,EAAGF,GAAKE,GAAK,EAAGH,GAAKthM,GAAEyhM,EAAE,EAAGJ,GAAKI,GAC9C,KACV,CACM,OAAOD,GAAKv0M,EAAIA,EAAIq0M,GAAKD,GAAKE,EAC/B,EACD,SAASpkN,EAAE8P,EAAG+S,GAAG,CACf,IAAIqhM,GAAK,MACT,OAAOrhM,IAAK,KAAOqhM,GAAK,KAAOrhM,IAAK,MAAQqhM,GAAK,MAAQrhM,IAAK,KAAOqhM,GAAK,KAAOrhM,IAAK,KAAOqhM,GAAK,KAAOrhM,IAAK,MAAQqhM,GAAK,MAAQrhM,IAAK,KAAOqhM,GAAK,KAAOrhM,IAAK,KAAOqhM,GAAK,KAAOrhM,IAAK,MAAQqhM,GAAK,MAAQrhM,IAAK,MAAQqhM,GAAK,KAAMp0M,GAAK,GAAKo0M,IAAMp0M,GAAK,QAAUo0M,GAAK,OAAQp0M,GAAK,QAAUo0M,GAAK,MAAOp0M,GAAK,QAAUo0M,GAAK,MAAOp0M,GAAK,OAASo0M,GAAK,OAAQp0M,GAAK,OAASo0M,GAAK,MAAOp0M,GAAK,OAASo0M,GAAK,MAAOp0M,GAAK,OAASo0M,GAAK,OAAQp0M,GAAK,OAASo0M,GAAK,KAAMrhM,GAAIqhM,GAAKrhM,GAAI,MAAQ,KAAOA,GAAI,KAAO,MAAQA,GAAI,KAAO,KAAOA,GAAI,MAAQ,KAAOA,GAAI,KAAO,MAAQA,GAAI,KAAO,KAAOA,GAAI,MAAQ,KAAOA,GAAI,IAAM,MAAQ,IAAMqhM,GACpnB,CACI,SAAS/8M,EAAE2I,EAAG+S,GAAG,CACf,OAAQ/S,EAAC,CACP,IAAK,OACH,OAAO+S,GAAE,QAAU,EAAG,EACxB,IAAK,MACH,OAAOA,GAAE,QAAU,EAAG,EACxB,IAAK,MACH,OAAOA,GAAE,QAAU,EAAG,EACxB,IAAK,OACH,OAAOA,GAAE,QAAU,EAAG,EACxB,IAAK,MACH,OAAOA,GAAE,QAAU,EAAG,EACxB,IAAK,MACH,OAAOA,GAAE,QAAU,EAAG,EACxB,IAAK,OACH,OAAOA,GAAE,QAAU,EAAG,EACxB,IAAK,MACH,OAAOA,GAAE,QAAU,EAAG,EACxB,IAAK,KACH,OAAOA,GAAE,QAAU,EAAG,EACxB,QACE,OAAOA,GAAE,QAAU,EAAG,EAChC,CACA,CACI,SAASnT,EAAEI,EAAG+S,GAAGqhM,GAAI,CACnBA,GAAK,OAASrhM,GAAI,GAClB,QAASshM,GAAKlE,EAAG,cAAcp9L,EAAC,EAAE,CAAC,EAAGuhM,GAAK,EAAGA,IAAM,GAAIA,KACtDnE,EAAG,cAAcp9L,EAAC,EAAEuhM,EAAE,EAAI,GAAK,KAAK,IAAInE,EAAG,cAAcp9L,EAAC,EAAEuhM,EAAE,EAAIt0M,CAAC,EAAI,KAAK,IAAIq0M,GAAKr0M,CAAC,IAAMq0M,GAAKlE,EAAG,cAAcp9L,EAAC,EAAEuhM,EAAE,GACzH,OAAOD,EACb,CACI,SAASv0M,EAAEE,EAAG+S,GAAGqhM,GAAI,CACnBA,GAAK,OAASrhM,GAAI,GAClB,QAASshM,GAAK,EAAGA,IAAM,GAAIA,KACzB,GAAIlE,EAAG,cAAcp9L,EAAC,EAAEshM,EAAE,EAAI,GAAKlE,EAAG,cAAcp9L,EAAC,EAAEshM,EAAE,GAAKr0M,EAC5D,OAAOq0M,GACX,MAAO,EACb,CACI,SAASxyM,EAAE7B,EAAG+S,GAAG,CACf,IAAIqhM,GAAK,CACP,IAAIz+L,EAAE,EAAG,GAAG,EACZ,IAAIA,EAAE,GAAI,IAAI,EACd,IAAIA,EAAE,GAAI,IAAI,EACd,IAAIA,EAAE,GAAI,IAAI,EACd,IAAIA,EAAE,GAAI,GAAG,EACb,IAAIA,EAAE,GAAI,IAAI,EACd,IAAIA,EAAE,GAAI,GAAG,EACb,IAAIA,EAAE,GAAI,IAAI,EACd,IAAIA,EAAE,GAAI,KAAK,EACf,IAAIA,EAAE,GAAI,KAAK,EACf,IAAIA,EAAE,IAAK,KAAK,EAChB,IAAIA,EAAE,IAAK,IAAI,EACf,IAAIA,EAAE,IAAK,KAAK,EAChB,IAAIA,EAAE,IAAK,KAAK,EAChB,IAAIA,EAAE,IAAK,KAAK,EAChB,IAAIA,EAAE,IAAK,KAAK,EAChB,IAAIA,EAAE,IAAK,KAAK,CACjB,EAAE0+L,GAAKn0M,EAAE,wBAAwB6S,EAAC,EACnC/S,EAAE,WAAao0M,GAAGC,EAAE,EAAE,OAC5B,CACI,SAASjiM,GAAEpS,EAAG,CACZ,IAAI+S,GAAI/S,EAAE,eAAgBo0M,GAAK,GAAIC,GAAK,GACxC,GAAIthM,GAAE,SAAW,EAAG,CAClB,QAASuhM,GAAK,IAAKC,GAAK,EAAGA,IAAM,GAAIA,KAAM,CACzC,IAAIC,GAAKD,GAAK,GACdC,IAAMzhM,GAAE,WAAaqhM,GAAK,KAAK,IAAIA,GAAIG,EAAE,GAAIxhM,GAAE,SAAWyhM,IAAMA,GAAKzhM,GAAE,WAAauhM,GAAK,KAAK,IAAIA,GAAIC,EAAE,EAClH,CACQD,IAAM,IAAMvhM,GAAE,UAAYqhM,GAAK,KAAQ,GAAKrhM,GAAE,UAAYuhM,GAAK,KAAQ,GAAIvhM,GAAE,SAAWqhM,GAAK,EACrG,CACM,GAAIrhM,GAAE,UAAY,GAAKA,GAAE,UAAY,IAAO,IAAO,MAAQA,GAAE,UAAY,EAAGA,GAAE,UAAY,EAAGwB,EAAE,IAAI,QAAQ;AAAA,CAChH,GAAIxB,GAAE,UAAY,EAAG,CACd,QAAS0hM,GAAK,GAAIF,GAAK,EAAGA,IAAM,GAAIA,KAAM,CACxC,IAAIC,GAAKD,GAAK,GACdC,IAAMzhM,GAAE,YAAcshM,GAAK,KAAK,IAAIA,GAAIE,EAAE,GAAIxhM,GAAE,UAAYyhM,IAAMA,GAAKzhM,GAAE,YAAc0hM,GAAK,KAAK,IAAIA,GAAIF,EAAE,EACrH,CACQxhM,GAAE,UAAYshM,GAAK,GAAII,IAAM,GAAK1hM,GAAE,WAAashM,GAAK,KAAQ,GAAKthM,GAAE,WAAa0hM,GAAK,KAAQ,EACvG,CACM,QAASF,GAAK,EAAGA,GAAK,GAAIA,KAAM,CAC9B,IAAIG,GAAIC,GAAIH,GAAKD,GAAK,GACtBxhM,GAAE,UAAYA,GAAE,UAAY2hM,GAAK9jM,GAAGmC,GAAE,UAAYyhM,KAAOzhM,GAAE,UAAYA,GAAE,UAAY,MAAM,EAAI2hM,GAAK,EAAG3hM,GAAE,SAAWA,GAAE,SAAW4hM,GAAK/jM,GAAG4jM,GAAKzhM,GAAE,WAAaA,GAAE,SAAWA,GAAE,SAAW,MAAM,EAAI4hM,GAAK,EAAG5hM,GAAE,WAAWwhM,EAAE,EAAIG,GAAKC,EACzO,CACA,CACI,SAASnhM,GAAExT,EAAG,CACZ,IAAI+S,GAAI/S,EAAE,eACV,OAAQA,EAAE,QAAO,CACf,QACA,IAAK,GACH+S,GAAE,SAAW,EAAGA,GAAE,cAAgB,EAAGA,GAAE,kBAAoB,EAAGA,GAAE,mBAAqB,EAAGA,GAAE,iBAAmB,EAAGA,GAAE,gBAAkB,EACpI,MACF,IAAK,GACH/S,EAAE,QAAU,EACd,IAAK,GACH+S,GAAE,SAAW,EAAGA,GAAE,cAAgB,EAAGA,GAAE,kBAAoB,EAAGA,GAAE,mBAAqB,EAAGA,GAAE,iBAAmB,EAAGA,GAAE,gBAAkB,EACpI,MACF,IAAK,GACHA,GAAE,SAAW,EAAGA,GAAE,eAAiB,IAAMA,GAAE,cAAgB,GAAIA,GAAE,kBAAoB,EAAGA,GAAE,mBAAqB,EAAGA,GAAE,eAAiB,KAAOA,GAAE,cAAgB,GAAIA,GAAE,iBAAmB,EAAGA,GAAE,gBAAkB,EAC9M,MACF,IAAK,GACHA,GAAE,SAAW,EAAGA,GAAE,eAAiB,IAAMA,GAAE,cAAgB,GAAIA,GAAE,kBAAoB,EAAGA,GAAE,mBAAqB,EAAGA,GAAE,eAAiB,KAAOA,GAAE,cAAgB,GAAIA,GAAE,iBAAmB,EAAGA,GAAE,gBAAkB,EAC9M,MACF,IAAK,GACHA,GAAE,SAAW,EAAGA,GAAE,eAAiB,IAAMA,GAAE,cAAgB,GAAIA,GAAE,kBAAoB,EAAGA,GAAE,mBAAqB,EAAGA,GAAE,eAAiB,KAAOA,GAAE,cAAgB,GAAIA,GAAE,iBAAmB,EAAGA,GAAE,gBAAkB,EAC9M,MACF,IAAK,GACHA,GAAE,SAAW,EAAGA,GAAE,eAAiB,IAAMA,GAAE,cAAgB,GAAIA,GAAE,kBAAoB,EAAGA,GAAE,mBAAqB,EAAGA,GAAE,eAAiB,KAAOA,GAAE,cAAgB,GAAIA,GAAE,iBAAmB,EAAGA,GAAE,gBAAkB,EAC9M,MACF,IAAK,GACHA,GAAE,SAAW,EAAGA,GAAE,eAAiB,IAAMA,GAAE,cAAgB,GAAIA,GAAE,iBAAmB,IAAMA,GAAE,gBAAkB,GAAIA,GAAE,kBAAoB,EAAGA,GAAE,mBAAqB,EAAGA,GAAE,eAAiB,KAAOA,GAAE,cAAgB,GAAIA,GAAE,iBAAmB,EAAGA,GAAE,gBAAkB,EACjQ,MACF,IAAK,GACHA,GAAE,SAAW,EAAGA,GAAE,eAAiB,IAAMA,GAAE,cAAgB,GAAIA,GAAE,iBAAmB,IAAMA,GAAE,gBAAkB,GAAIA,GAAE,kBAAoB,EAAGA,GAAE,mBAAqB,EAAGA,GAAE,eAAiB,KAAOA,GAAE,cAAgB,GAAIA,GAAE,iBAAmB,EAAGA,GAAE,gBAAkB,EACjQ,MACF,IAAK,GACHA,GAAE,SAAW,EAAGA,GAAE,eAAiB,IAAMA,GAAE,cAAgB,GAAIA,GAAE,iBAAmB,IAAMA,GAAE,gBAAkB,GAAIA,GAAE,kBAAoB,EAAGA,GAAE,mBAAqB,EAAGA,GAAE,eAAiB,KAAOA,GAAE,cAAgB,GAAIA,GAAE,iBAAmB,EAAGA,GAAE,gBAAkB,EACjQ,KACV,CACA,CACI,SAASjC,GAAE9Q,EAAG,CACZ,IAAI+S,GAAI/S,EAAE,eACVA,EAAE,SAAW,EAAGA,EAAE,wBAA0BnC,EAAE,gBAAgBmC,CAAC,EAAG+S,GAAE,wBAA0B9B,EAAE,CAAC,GAAI,CAAK,CAAC,EAAG8B,GAAE,uBAAyB9B,EAAE,CAAC,GAAI,CAAS,CAAC,EAAG8B,GAAE,WAAa,EAAG/S,EAAE,cAAgBowM,EAAG,WAAWpwM,CAAC,CACtN,CACI,KAAK,iBAAmB,SAASA,EAAG,CAClC,IAAI+S,GAAI/S,EAAE,eACV,GAAI+S,GAAE,SAAW,EAAGA,GAAE,KAAO,OAASA,GAAE,IAAM,IAAIhgB,GAAMggB,GAAE,KAAO,OAASA,GAAE,IAAM,IAAI5B,GAAM4B,GAAE,QAAU,OAASA,GAAE,OAAS,IAAIzB,GAAMyB,GAAE,YAAc/S,EAAE,aAAc+S,GAAE,aAAe,IAAM/S,EAAE,KAAOC,EAAE,MAAO8S,GAAE,aAAe/S,EAAE,MAAQC,EAAE,KAAO,EAAI,EAAG8S,GAAE,SAAW8D,EAAE,aAAc7W,EAAE,MAAQC,EAAE,OAASD,EAAE,SAAW,IAAKA,EAAE,KAAO8T,EAAE,SAAW9T,EAAE,uBAAyB,KAAOA,EAAE,OAAS,IAAMA,EAAE,MAAQA,EAAE,uBAAwBA,EAAE,KAAO8T,EAAE,SAAW9T,EAAE,KAAO8T,EAAE,UAAY9T,EAAE,KAAO8T,EAAE,SAAW9T,EAAE,YAAc,IAAKA,EAAE,KAAO8T,EAAE,SAAW9T,EAAE,OAAS,GAAKoV,EAAE,GAAGpV,EAAE,kBAAmB,CAAC,IAAMA,EAAE,kBAAoB,QAASA,EAAE,KAAO8T,EAAE,SAAW9T,EAAE,kBAAoB,IAAMA,EAAE,gBAAkB,IAAMA,EAAE,eAAiB,iBAAiB,IAAI,IAAOA,EAAE,aAAa,CAAC,GAAIA,EAAE,MAAQ,EAAIA,EAAE,eAAiB,GAAK+S,GAAE,cAAgB,IAAM/S,EAAE,mBAAoB+S,GAAE,iBAAmB1b,EAAE2I,EAAE,eAAgBA,CAAC,EAAGA,EAAE,cAAgBA,EAAE,MAAQJ,EACn5BI,EAAE,MACFA,EAAE,QACFA,EAAE,cACH,IAAIA,EAAE,gBAAkB,IAAMA,EAAE,eAAiB,MAAQA,EAAE,sBAAwB,KAAK,IACvFA,EAAE,sBACF,CACR,EAASA,EAAE,sBAAwB,KAAK,IAChCA,EAAE,sBACF,EACR,GAAWA,EAAE,eAAiB,MAAQA,EAAE,sBAAwB,KAAK,IAC7DA,EAAE,sBACF,CACR,EAASA,EAAE,sBAAwB,KAAK,IAChCA,EAAE,sBACF,GACR,IAAYA,EAAE,sBAAwB,KAAK,IACnCA,EAAE,sBACF,EACR,EAASA,EAAE,sBAAwB,KAAK,IAChCA,EAAE,sBACF,GACD,IAAIA,EAAE,aAAe,EAAG,CACvB,IAAIo0M,GAAK,KACT,OAAQp0M,EAAE,IAAG,CACX,KAAK8T,EAAE,QAAS,CACd,IAAIugM,GAAK,IAAI1jM,EACb9O,EAAEwyM,GAAIr0M,EAAE,KAAK,EAAGo0M,GAAKC,GAAG,WACxB,KACZ,CACU,KAAKvgM,EAAE,QAAS,CACd,IAAIugM,GAAK,IAAI1jM,EACb9O,EAAEwyM,GAAIr0M,EAAE,qBAAqB,EAAGo0M,GAAKC,GAAG,WACxC,KACZ,CACU,KAAKvgM,EAAE,OAAQ,CACb,IAAIwgM,GAAK,CACP,MACA,KACA,MACA,KACA,MACA,KACA,MACA,MACA,MACA,IACA,IACD,EACD,GAAI,GAAKt0M,EAAE,OAASA,EAAE,OAAS,EAAG,CAChC,IAAIu0M,GAAKD,GAAGt0M,EAAE,KAAK,EAAGw0M,GAAKF,GAAGt0M,EAAE,MAAQ,CAAC,EAAGy0M,GAAKz0M,EAAE,WACnDo0M,GAAK,WAAWG,GAAIC,GAAIC,EAAE,CAC3B,MACCL,GAAK,MACP,KACZ,CACU,QAAS,CACP,IAAIE,GAAK,CACP,MACA,KACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,KACA,IACD,EACD,GAAI,GAAKt0M,EAAE,OAASA,EAAE,OAAS,EAAG,CAChC,IAAIu0M,GAAKD,GAAGt0M,EAAE,KAAK,EAAGw0M,GAAKF,GAAGt0M,EAAE,MAAQ,CAAC,EAAGy0M,GAAKz0M,EAAE,WACnDo0M,GAAK,WAAWG,GAAIC,GAAIC,EAAE,CAC3B,MACCL,GAAK,KACnB,CACA,CACQp0M,EAAE,MAAQC,EAAE,OAASD,EAAE,KAAO8T,EAAE,SAAW9T,EAAE,KAAO8T,EAAE,WAAasgM,IAAM,KAAMp0M,EAAE,YAAco0M,GAAK,CAC5G,CACM,GAAIp0M,EAAE,gBAAkB,IAAM,EAAIA,EAAE,YAAcA,EAAE,gBAAkBA,EAAE,YAAcA,EAAE,cAAgB,GAAIA,EAAE,eAAiB9P,EAC7H8P,EAAE,YAAc,EAChBA,EAAE,aACV,GAAUA,EAAE,YAAc,KAAK,IAAI,MAAOA,EAAE,WAAW,EAAGA,EAAE,YAAc,KAAK,IAAIA,EAAE,eAAiB,EAAGA,EAAE,WAAW,EAAGA,EAAE,KAAO8T,EAAE,UAAY9T,EAAE,kBAAoBA,EAAE,eAAiB,GAAK+S,GAAE,cAAgB,IAAM/S,EAAE,QAASA,EAAE,KAAO8T,EAAE,UAAY9T,EAAE,kBAAoBA,EAAE,eAAiB,GAAK+S,GAAE,cAAgB,IAAM/S,EAAE,wBAAyBA,EAAE,eAAiBA,EAAE,eAAiB,GAAIA,EAAE,kBAAoB,GAAI+S,GAAE,eAAiB,IAAKA,GAAE,eAAiB/S,EAAE,eAAgB+S,GAAE,kBAAoB/S,EAAE,kBAAmB+S,GAAE,oBAAsBA,GAAE,eAAiB,IAAKA,GAAE,gBAAkBhT,EAAE,iBAAiBgT,GAAE,OAAQ/S,EAAE,cAAc,GAAK,aAAa,yBAChoB,OAAOA,EAAE,eAAiB,KAAM,GAClC,OAAQ+S,GAAE,mBAAqB,CAAC/S,EAAE,cAAgB+S,GAAE,KAAO,MAAQnV,EAAE,gBAAgBmV,GAAE,GAAG,EAAGA,GAAE,IAAMnV,EAAE,gBAAiB,GAAGmV,GAAE,QAAU/S,EAAE,gBAAkB,KAAO,EAAI,EAAGA,EAAE,UAAY,IAAM+S,GAAE,QAAS/S,EAAE,cAAgB6W,EAAE,SAAU9D,GAAE,eAAiB/S,EAAE,cAAgBA,EAAE,eAAgBA,EAAE,IAAG,CAChS,KAAK8T,EAAE,OACP,KAAKA,EAAE,OACP,KAAKA,EAAE,SACL,CACE,IAAI4gM,GAAK,CACP,IACA,IACA,IACA,IACA,GACA,KACA,GACA,GACA,GACA,IACD,EACD10M,EAAE,kBAAoB00M,GAAG10M,EAAE,KAAK,CAC5C,CACU,MACF,KAAK8T,EAAE,QACL9T,EAAE,kBAAoBA,EAAE,eAAiB,GAAK+S,GAAE,cAAgB,IAAM/S,EAAE,uBACxE,MACF,QACEA,EAAE,kBAAoBA,EAAE,eAAiB,GAAK+S,GAAE,cAAgB,IAAM/S,EAAE,OACxE,KACV,CACM,GAAIA,EAAE,MAAQC,EAAE,UAAYD,EAAE,KAAOC,EAAE,cAAeD,EAAE,aAAe,GAAK+S,GAAE,UAAY,EAAI/S,EAAE,aAAcA,EAAE,eAAiB,EAAI+S,GAAE,UAAY,GAAK/S,EAAE,aAAeA,EAAE,eAAiB+S,GAAE,UAAa,EAAS,EAAI/S,EAAE,aAAc+S,GAAE,WAAa/S,EAAE,eAAgB+S,GAAE,WAAa/S,EAAE,iBAAmB+S,GAAE,UAAY,EAAGA,GAAE,UAAY,GAAI/S,EAAE,YAAc,GAAK+S,GAAE,SAAW,EAAI/S,EAAE,YAAaA,EAAE,cAAgB,GAAK+S,GAAE,SAAW,GAAK/S,EAAE,YAAcA,EAAE,cAAe+S,GAAE,SAAW,IAAMA,GAAE,SAAW,IAAMA,GAAE,SAAY,EAAS,EAAI/S,EAAE,YAAa+S,GAAE,UAAY/S,EAAE,eAAgB+S,GAAE,UAAY/S,EAAE,iBAAmB+S,GAAE,SAAW,EAAGA,GAAE,SAAW,GAAIX,GAAEpS,CAAC,EAAG+S,GAAE,iBAAmB1b,EAAE2I,EAAE,eAAgBA,CAAC,EAAG+S,GAAE,iBAAmB,EACzsB,OAAO/S,EAAE,eAAiB,KAAM,GAClC,GAAIA,EAAE,KAAO8T,EAAE,SACb,GAAI9T,EAAE,YACJ+S,GAAE,cAAgB,UACX/S,EAAE,MAAQJ,EACjBI,EAAE,MACFA,EAAE,QACFA,EAAE,cACZ,EAAW+S,GAAE,cAAgBjT,EACnBE,EAAE,MACFA,EAAE,QACFA,EAAE,cACZ,EAAW+S,GAAE,eAAiB,EACpB,OAAO/S,EAAE,eAAiB,KAAM,QAElC+S,GAAE,cAAgB,EACpB/S,EAAE,WAAaA,EAAE,aAAe,IAAK+S,GAAE,OAAS,OAAS/S,EAAE,aAAe,IAAKsU,EAAE,kBAAkBvB,EAAC,EACpG,QAAS4hM,GAAK5hM,GAAE,iBAAmB,EAAI/S,EAAE,QAAU,GAAKA,EAAE,eAAiB,KAAO,EAAI,GAAI40M,GAAK,EAAGA,GAAK/9L,EAAE,QAAU,EAAG+9L,KACpH7hM,GAAE,cAAc,EAAE6hM,EAAE,EAAIvjM,EAAE,YAAYsjM,EAAE,EAAE,EAAEC,EAAE,EAChD,QAASA,GAAK,EAAGA,GAAK/9L,EAAE,OAAS,EAAG+9L,KAAM,CACxC,IAAIC,IAAM9hM,GAAE,cAAc,EAAE,EAAE,EAAIA,GAAE,cAAc,EAAE,EAAE,GAAK8D,EAAE,OAAQi+L,GAAK/hM,GAAE,cAAc,EAAE,EAAE,EAAI6hM,GAAKC,GACvG9hM,GAAE,cAAc,OAAO6hM,EAAE,EAAIE,EACrC,CACM/hM,GAAE,cAAc,OAAO8D,EAAE,MAAM,EAAI,IACnC,QAAS+9L,GAAK,EAAGA,GAAK/9L,EAAE,QAAU,EAAG+9L,KACnC7hM,GAAE,cAAc,EAAE6hM,EAAE,EAAIvjM,EAAE,YAAYsjM,EAAE,EAAE,EAAEC,EAAE,EAChD,QAASA,GAAK,EAAGA,GAAK/9L,EAAE,OAAS,EAAG+9L,KAAM,CACxC,IAAIC,IAAM9hM,GAAE,cAAc,EAAE,EAAE,EAAIA,GAAE,cAAc,EAAE,EAAE,GAAK8D,EAAE,OAAQi+L,GAAK/hM,GAAE,cAAc,EAAE,EAAE,EAAI6hM,GAAKC,GACvG9hM,GAAE,cAAc,OAAO6hM,EAAE,EAAIE,EACrC,CACM/hM,GAAE,cAAc,OAAO8D,EAAE,MAAM,EAAI,IAAK7W,EAAE,SAAW,EAAI+S,GAAE,aAAeA,GAAE,cAAgB,EAAI,GAAS,GAASA,GAAE,aAAeA,GAAE,cAAgB,EAAI,GAAQ,GAAQ/S,EAAE,mBAAqB+S,GAAE,cAAgB,GAAIjC,GAAE9Q,CAAC,EAAG+S,GAAE,SAAWyC,EACzO,CACE,IAAIu/L,EACJ,IAAKA,EAAK,EAAGA,EAAK,GAAIA,IACpBhiM,GAAE,MAAM,SAASgiM,CAAE,EAAI,IAAMhiM,GAAE,QAAUA,GAAE,aAC7C/S,EAAE,SAAW,KAAOA,EAAE,QAAU,EACxC,CACM,OAAQkR,EAAElR,EAAE,OAAS,CAAC,EAAGkR,EAAElR,EAAE,OAAS,CAAC,EAAGA,EAAE,IAAG,CAC7C,KAAK8T,EAAE,OACL9T,EAAE,IAAM8T,EAAE,SACZ,KAAKA,EAAE,SAAU,CACf9T,EAAE,aAAe,OAASA,EAAE,YAAc,IAAKwQ,EAAE,aAAaxQ,EAAG,IAAMA,EAAE,MAAQ,GAAI,CAAC,EAAGA,EAAE,QAAU,IAAMA,EAAE,QAAU,sBAAuBA,EAAE,QAAU,IAAMA,EAAE,QAAU,GAAIA,EAAE,QAAU,IAAMA,EAAE,QAAU,GAAI+S,GAAE,IAAI,YAAc/S,EAAE,cAAe+S,GAAE,IAAI,kBAAoB/S,EAAE,oBAAqBA,EAAE,cAAgB+S,GAAE,YAAc,GAAKA,GAAE,YAAc/S,EAAE,eAAiB,KAAM+S,GAAE,eAAiB,IAAI,oBAAoBvB,CAAC,EACpa,KACV,CACQ,KAAKsC,EAAE,OAAQ,CACbtD,EAAE,aAAaxQ,EAAG,IAAMA,EAAE,MAAQ,GAAI,CAAC,EAAG+S,GAAE,IAAI,YAAc/S,EAAE,cAAe+S,GAAE,IAAI,kBAAoB/S,EAAE,oBAAqBA,EAAE,cAAgB+S,GAAE,YAAc,GAAKA,GAAE,YAAc/S,EAAE,eAAiB,KAAMA,EAAE,QAAU,IAAMA,EAAE,QAAU,GAAIA,EAAE,QAAU,IAAMA,EAAE,QAAU,sBAAuB+S,GAAE,eAAiB,IAAI,oBAAoBvB,CAAC,EACnV,KACV,CACQ,QAAS,CACP,IAAI5P,GACJmR,GAAE,YAAc,GAAI/S,EAAE,QAAU,IAAMA,EAAE,QAAU,sBAAuB4B,GAAI5B,EAAE,IAAK4B,IAAKkS,EAAE,UAAY9T,EAAE,sBAAwBA,EAAE,OAAQwQ,EAAE,aAAaxQ,EAAGA,EAAE,sBAAuB,CAAC,EAAGA,EAAE,IAAM4B,GAAGmR,GAAE,IAAI,YAAc/S,EAAE,cAAe+S,GAAE,IAAI,kBAAoB/S,EAAE,oBAAqB4B,IAAKkS,EAAE,QAAUf,GAAE,eAAiB,IAAIm9L,EAAG1+L,CAAC,EAAIuB,GAAE,eAAiB,IAAI,iBAAiBvB,CAAC,EACpX,KACV,CACA,CACM,GAAIN,EAAElR,EAAE,OAAS,CAAC,EAAGA,EAAE,KAAO8T,EAAE,QAAS,CACvC,GAAIf,GAAE,gBAAkB,EAAGA,GAAE,gBAAkB,GAAI/S,EAAE,eAAiB,OAAS+S,GAAE,gBAAkB,GAAI/S,EAAE,sBAAwB,IAAMA,EAAE,qBAAuBJ,EAC9JI,EAAE,qBACFA,EAAE,QACFA,EAAE,cACZ,EAAW+S,GAAE,gBAAkBjT,EACrBE,EAAE,qBACFA,EAAE,QACFA,EAAE,cACZ,EAAW+S,GAAE,gBAAkB,IAAM/S,EAAE,sBAAwB,IAAMA,EAAE,qBAAuBJ,EACpFI,EAAE,qBACFA,EAAE,QACFA,EAAE,cACZ,EAAW+S,GAAE,gBAAkBjT,EACrBE,EAAE,qBACFA,EAAE,QACFA,EAAE,cACZ,EAAW+S,GAAE,gBAAkB,GACrB,MAAO,GACT/S,EAAE,qBAAuBmwM,EAAG,cAAcnwM,EAAE,OAAO,EAAE+S,GAAE,eAAe,EAAG/S,EAAE,qBAAuBmwM,EAAG,cAAcnwM,EAAE,OAAO,EAAE+S,GAAE,eAAe,EAAG/S,EAAE,sBAAwB,KAAK,IAC/KmwM,EAAG,cAAcnwM,EAAE,OAAO,EAAE+S,GAAE,eAAe,EAC7C/S,EAAE,qBACZ,EAAWA,EAAE,sBAAwB,KAAK,IAChCmwM,EAAG,cAAcnwM,EAAE,OAAO,EAAE+S,GAAE,eAAe,EAC7C/S,EAAE,qBACH,CACT,CACM,OAAOA,EAAE,OAAS+S,GAAE,IAAI,aAAe/S,EAAE,aAAc+S,GAAE,IAAI,mBAAqB/S,EAAE,cAAewT,GAAExT,CAAC,EAAGkR,EAAElR,EAAE,OAAS,CAAC,EAAGA,EAAE,WAAa,EAAI+S,GAAE,IAAI,UAAY,EAAIA,GAAE,IAAI,UAAY/S,EAAE,WAAY+S,GAAE,IAAI,eAAiB,KAAK,IAAI,GAAI/S,EAAE,kBAAoB,GAAG,EAAGA,EAAE,cAAgB,OAASA,EAAE,aAAe6T,EAAE,qBAAsB7T,EAAE,cAAgB6T,EAAE,sBAAwB7T,EAAE,MAAQC,EAAE,cAAgBD,EAAE,MAAQC,EAAE,UAAYD,EAAE,aAAe6T,EAAE,qBAAsB7T,EAAE,WAAa,IAAMA,EAAE,WAAa,GAAIA,EAAE,iBAAmB,IAAMA,EAAE,iBAAmB,GAAIA,EAAE,MAAQ,IAAMA,EAAE,MAAQ,GAAIA,EAAE,cAAgBA,EAAE,cAAgB,EAAGA,EAAE,eAAe,MAAM,WAAa,IAAMA,EAAE,eAAe,MAAM,WAAayQ,EAAE,cAAezQ,EAAE,eAAe,MAAM,aAAe,IAAMA,EAAE,eAAe,MAAM,aAAeyQ,EAAE,gBAAiBS,EAAElR,EAAE,OAAS,CAAC,EAAGA,EAAE,MAAQ,IAAMA,EAAE,MAAQ,GAAIA,EAAE,QAAU,IAAMA,EAAE,QAAU,GAAIA,EAAE,SAAW,IAAMA,EAAE,SAAW,GAAIA,EAAE,iBAAmB,IAAMA,EAAE,iBAAmB,GAAIA,EAAE,aAAe,IAAMA,EAAE,aAAe,GAAIA,EAAE,aAAe,OAASA,EAAE,YAAc,IAAK+S,GAAE,SAAWA,GAAE,SAAW,EAAG/S,EAAE,KAAO8T,EAAE,UAAYf,GAAE,SAAWA,GAAE,UAAY/S,EAAE,QAAU,GAAK,KAAOA,EAAE,MAAQA,EAAE,eAAiB,GAAIqR,EAAE,eAAerR,CAAC,EAAGyV,EAAE,cAAczV,CAAC,EAAGkR,EAAElR,EAAE,OAAS,CAAC,EAAG,CAC5vC,EACD,SAASqS,GAAErS,EAAG+S,GAAG,EACd/S,EAAE,aAAe,MAAQA,EAAE,mBAAqB+S,MAAO/S,EAAE,YAAcyvM,EAAG18L,EAAC,EAAG/S,EAAE,YAAcyvM,EAAG18L,EAAC,EAAG/S,EAAE,mBAAqB+S,GACnI,CACI,KAAK,kBAAoB,SAAS/S,EAAG+S,GAAGqhM,GAAIC,GAAI,CAC9C,IAAIC,GAAKt0M,EAAE,eAAgBu0M,GAAKjiM,EAAE,CAAC,EAAG,IAAI,CAAC,EAAGkiM,GAAK,EAAGC,GAAIC,GAAIC,GAAIC,GAAIC,GAAKP,GAAG,qBAAuBz9L,EAAE,UAAWi+L,GAAKpE,GAAG1wM,CAAC,EAC3H,GAAIs0M,GAAG,qBAAuB,EAC5B,MAAO,GACT,IAAKG,GAAK,EAAGz0M,EAAE,eAAiBA,EAAE,iBAAmB60M,IAAM,GAAK70M,EAAE,eAAiBA,EAAE,eAAgB20M,GAAK30M,EAAE,UAAY60M,GAAK70M,EAAE,UAAW20M,GAAK,MAAQA,IAAM30M,EAAE,WAAYA,EAAE,gBAAkB20M,GAAIC,IAAMC,GAAKF,IAAM30M,EAAE,UAAW40M,GAAK,GAAKJ,IAAM,GAAK,CACpP,IAAIO,EAAKD,GAAKR,GAAG,QAAS1yM,GAAI5B,EAAE,SAChC+0M,GAAM/0M,EAAE,cAAe+0M,GAAM/0M,EAAE,eAAgB+0M,EAAK,OAASA,EAAK,MAAOA,EAAK,IAAMA,EAAK,GAAIL,GAAKL,GAAKI,GAAIJ,IAAM,IAAMK,GAAK,GAAIF,GAAK,KAAK,mBACxIx0M,EACAu0M,GAAG,CAAC,EACJA,GAAG,CAAC,EACJQ,EACAhiM,GACAqhM,GACAM,EACV,EAAWN,IAAMI,GAAIC,IAAMD,GAAII,IAAMhzM,IAAK5B,EAAE,SAAW,EAAI,CAC3D,CACM,GAAIs0M,GAAG,qBAAuB,EAAGE,GAAK,IAAME,GAAKL,GAAKI,GAAIJ,IAAM,IAAMK,GAAK,GAAIpgM,EAAE,gBAAgBtU,CAAC,EAAGw0M,GAAKlgM,EAAE,YAC1GggM,GACAvhM,GACAqhM,GACAM,GACA,CACR,EAASF,GAAK,GACN,OAAOA,GACT,GAAIJ,IAAMI,GAAIC,IAAMD,GAAIE,GAAKL,GAAKI,GAAIJ,IAAM,IAAMK,GAAK,GAAI10M,EAAE,uBAAwB,CACnF,GAAInC,EAAE,gBAAgBmC,CAAC,EAAGw0M,GAAKlgM,EAAE,YAC/BggM,GACAvhM,GACAqhM,GACAM,GACA,CACD,EAAEF,GAAK,EACN,OAAOA,GACTC,IAAMD,EACd,CACM,OAAOC,EACb,EAAO,KAAK,mBAAqB,SAASz0M,EAAG+S,GAAGqhM,GAAIC,GAAIC,GAAIC,GAAIC,GAAI,CAC9D,IAAIC,GAAKz0M,EAAE,eAAgB00M,GAAK,CAAC,KAAM,IAAI,EAC3C,GAAID,GAAG,UAAYj/L,EACjB,MAAO,GACT,GAAI6+L,IAAM,EACR,MAAO,GACThiM,GAAEoiM,GAAIJ,EAAE,EAAGK,GAAG,CAAC,EAAID,GAAG,YAAaC,GAAG,CAAC,EAAID,GAAG,YAC9C,QAASE,GAAK,EAAGA,GAAKN,GAAIM,KACxBD,GAAG,CAAC,EAAEC,EAAE,EAAI5hM,GAAE4hM,EAAE,EAAGF,GAAG,YAAc,IAAMC,GAAG,CAAC,EAAEC,EAAE,EAAIP,GAAGO,EAAE,GAC7D,OAAOhE,GACL3wM,EACA00M,GAAG,CAAC,EACJA,GAAG,CAAC,EACJL,GACAC,GACAC,GACAC,EACD,CACF,EACD,SAAS9D,GAAG1wM,EAAG,CACb,IAAI+S,GAAI8D,EAAE,QAAU7W,EAAE,UAAY6W,EAAE,UACpC,OAAO9D,GAAI,KAAK,IAAIA,GAAG,IAAM/S,EAAE,UAAY,EAAE,EAAG+S,EACtD,CACI,SAAS49L,GAAG3wM,EAAG+S,GAAGqhM,GAAIC,GAAIC,GAAIC,GAAIC,GAAI,CACpC,IAAIC,GAAKz0M,EAAE,eAAgB00M,GAAK,EAAGC,GAAIC,GAAIC,GAAIC,GAAIC,EAAInzM,GAAI,CAAC,KAAM,IAAI,EAAG2O,GAAI,CAAC,KAAM,IAAI,EACxF,GAAIkkM,GAAG,UAAYj/L,EACjB,MAAO,GACT,GAAI6+L,IAAM,EACR,MAAO,GACT,GAAIU,EAAKzgM,EAAE,YAAYmgM,GAAIH,GAAIC,GAAIC,GAAI,CAAC,EAAGO,EAAK,EAC9C,OAAOA,EACT,GAAIR,IAAMQ,EAAIL,IAAMK,EAAIxkM,GAAE,CAAC,EAAIwC,GAAGxC,GAAE,CAAC,EAAI6jM,GAAIh/L,EAAE,IAAIpV,EAAE,MAAO,CAAC,GAAKoV,EAAE,IAAIpV,EAAE,MAAO,CAAC,EAChF,IAAK40M,GAAK,EAAGA,GAAKP,GAAI,EAAEO,GACtBrkM,GAAE,CAAC,EAAEqkM,EAAE,GAAK50M,EAAE,MAAOy0M,GAAG,cAAgB,IAAMlkM,GAAE,CAAC,EAAEqkM,EAAE,GAAK50M,EAAE,OAChE,GAAIoV,EAAE,IAAIpV,EAAE,WAAY,CAAC,GAAKoV,EAAE,IAAIpV,EAAE,WAAY,CAAC,EACjD,IAAK40M,GAAK,EAAGA,GAAKP,GAAI,EAAEO,GACtBrkM,GAAE,CAAC,EAAEqkM,EAAE,GAAK50M,EAAE,WAClB,GAAIoV,EAAE,IAAIpV,EAAE,YAAa,CAAC,GAAKoV,EAAE,IAAIpV,EAAE,YAAa,CAAC,EACnD,IAAK40M,GAAK,EAAGA,GAAKP,GAAI,EAAEO,GACtBrkM,GAAE,CAAC,EAAEqkM,EAAE,GAAK50M,EAAE,YAClB,GAAIA,EAAE,cAAgB,GAAKy0M,GAAG,cAAgB,EAC5C,IAAKG,GAAK,EAAGA,GAAKP,GAAI,EAAEO,GACtBrkM,GAAE,CAAC,EAAEqkM,EAAE,EAAI,IAAOrkM,GAAE,CAAC,EAAEqkM,EAAE,EAAIrkM,GAAE,CAAC,EAAEqkM,EAAE,GAAIrkM,GAAE,CAAC,EAAEqkM,EAAE,EAAI,EACvDE,GAAKpE,GAAG1wM,CAAC,EAAG4B,GAAE,CAAC,EAAI6yM,GAAG,MAAM,CAAC,EAAG7yM,GAAE,CAAC,EAAI6yM,GAAG,MAAM,CAAC,EACjD,QAASxkN,GAAI,EAAGokN,GAAK,GAAK,CACxB,IAAI9rM,GAAI,CAAC,KAAM,IAAI,EAAGuN,GAAI,EAAG5d,GAAI,EACjCqQ,GAAE,CAAC,EAAIgI,GAAE,CAAC,EAAGhI,GAAE,CAAC,EAAIgI,GAAE,CAAC,EACvB,IAAIQ,GAAI,IAAI8/L,GACZ,GAAIsD,GACFn0M,EACA4B,GACA2G,GACAtY,GACAokN,GACAtjM,EACD,EAAE+E,GAAI/E,GAAE,KAAM7Y,GAAI6Y,GAAE,MAAO0jM,GAAG,gBAAkB,CAACA,GAAG,mBAAqB10M,EAAE,eAC1E00M,GAAG,OACH7yM,GAAE,CAAC,EACH6yM,GAAG,QACH7yM,GAAE,CAAC,EACH6yM,GAAG,QACHv8M,GACAu8M,GAAG,YACJ,GAAI,aAAa,oBAChB,MAAO,GACT,GAAIJ,IAAMv+L,GAAG7lB,IAAK6lB,GAAG2+L,GAAG,cAAgB,EAAGA,GAAG,SAAWv8M,GAAGgZ,EAAEujM,GAAG,SAAWrjM,EAAE,MAAM,EAAGqjM,GAAG,qBAAuB,IAAMA,GAAG,qBAAuB59L,EAAE,SAAWA,EAAE,WAAY49L,GAAG,sBAAwBv8M,GAAGu8M,GAAG,SAAWK,GAAI,CAC1N,IAAI7iM,GAAIuiM,GAAKE,GACb,GAAIF,IAAM,IAAMviM,GAAI,GAAI0iM,GAAK/D,GAC3B5wM,EACA4B,GAAE,CAAC,EACHA,GAAE,CAAC,EACH0yM,GACAC,GACAtiM,EACD,EAAE0iM,GAAK,EACN,OAAOA,GACT,IAAKJ,IAAMI,GAAID,IAAMC,GAAIF,GAAG,SAAWz0M,EAAE,UAAWy0M,GAAG,sBAAwBz0M,EAAE,UAAW60M,GAAK,EAAGA,GAAKJ,GAAG,aAAcI,KACxH,IAAKD,GAAK,EAAGA,GAAKH,GAAG,QAASG,KAC5BhzM,GAAEizM,EAAE,EAAED,EAAE,EAAIhzM,GAAEizM,EAAE,EAAED,GAAK50M,EAAE,SAAS,CAChD,CACA,CACM,OAAO00M,EACb,CACI,SAAS9D,GAAG5wM,EAAG+S,GAAGqhM,GAAIC,GAAIC,GAAIC,GAAI,CAChC,IAAIC,GAAKt0M,EAAE,IAAI,sBACbF,EACA+S,GACAqhM,GACAC,GACAC,GACAC,EACD,EACD,OAAOv0M,EAAE,WAAYw0M,EAC3B,CACI,SAAS3D,IAAK,CACZ,KAAK,KAAO,EAAG,KAAK,MAAQ,CAClC,CACI,SAASC,IAAK,CACZ,KAAK,SAAW,CACtB,CACI,SAASC,GAAG/wM,EAAG+S,GAAG,CAChB,OAAOA,IAAK,EAAIg+L,GAAGh+L,GAAG/S,EAAI+S,EAAC,EAAI/S,CACrC,CACI,SAASgxM,GAAGhxM,EAAG+S,GAAGqhM,GAAI,CACpB,IAAIC,GAAK,KAAK,GAAKthM,GACnB/S,GAAKo0M,GAAIp0M,EAAI,IAAMA,EAAI,GAAIA,EAAI,IAAMA,EAAI,GACzC,IAAIs0M,GAAKt0M,EAAI,GAAKu0M,GAAK,IAAO,GAAM,KAAK,IAAI,EAAIv0M,EAAI,KAAK,EAAE,EAAI,IAAO,KAAK,IAAI,EAAIA,EAAI,KAAK,EAAE,EAC/F,OAAO,KAAK,IAAIs0M,EAAE,EAAI,KAAOD,GAAK,KAAK,GAAKE,GAAK,KAAK,IAAIH,GAAKC,GAAKC,EAAE,GAAK,KAAK,GAAKF,GAAKE,GAChG,CACI,SAASx5H,GAAG96E,EAAG+S,GAAGqhM,GAAIC,GAAIC,GAAIC,GAAIC,GAAIC,GAAIC,GAAI,CAC5C,IAAIC,GAAK30M,EAAE,eAAgB40M,GAAIC,GAAK,EAAGC,GAAIC,EAAK/0M,EAAE,eAAiB+wM,GAAG/wM,EAAE,eAAgBA,EAAE,aAAa,EACvG+0M,EAAK3jM,EAAE,MAAQ2jM,EAAK3jM,EAAE,KACtB,IAAIxP,GAAI,KAAK,IAAI+yM,GAAG,eAAiB,KAAK,MAAM,GAAMA,GAAG,cAAc,CAAC,EAAI,KAAO,EAAI,EAAGpkM,GAAI,EAAIokM,GAAG,eACrGpkM,GAAI,IAAMA,GAAI,GACd,IAAItgB,GAAI,GACRA,GAAI,GAAK,GAAK,EAAEA,GAAGA,IAAK2R,GACxB,IAAI2G,GAAItY,GAAI,EACZ,GAAI0kN,GAAG,2BAA6B,EAAG,CACrC,IAAKA,GAAG,UAAU,CAAC,EAAIlF,EAAGlnM,EAAC,EAAGosM,GAAG,UAAU,CAAC,EAAIlF,EAAGlnM,EAAC,EAAGqsM,GAAK,EAAGA,IAAM,EAAIG,EAAI,EAAEH,GAC7ED,GAAG,UAAUC,EAAE,EAAInF,EAAGlnM,EAAC,EACzB,IAAKosM,GAAG,MAAM,CAAC,EAAI,EAAGA,GAAG,MAAM,CAAC,EAAI,EAAGE,GAAK,EAAGA,IAAM,EAAIE,EAAIF,KAAM,CACjE,IAAI/+L,GAAI,EAAG5d,IAAK28M,GAAKE,IAAO,EAAIA,GAChC,IAAKH,GAAK,EAAGA,IAAM3kN,GAAG2kN,KACpB9+L,IAAK6+L,GAAG,UAAUE,EAAE,EAAED,EAAE,EAAI5D,GAC1B4D,GAAK18M,GACLqY,GACAtgB,EACD,EACH,IAAK2kN,GAAK,EAAGA,IAAM3kN,GAAG2kN,KACpBD,GAAG,UAAUE,EAAE,EAAED,EAAE,GAAK9+L,EACpC,CACQ6+L,GAAG,0BAA4B,CACvC,CACM,IAAI5jM,GAAI4jM,GAAG,UAAUD,EAAE,EACvB,IAAKI,GAAK,EAAGA,GAAKT,GAAIS,KAAM,CAC1B,IAAI7iM,GAAGjB,GACP,GAAIiB,GAAI6iM,GAAKH,GAAG,eAAgBE,GAAK,EAAI,KAAK,MAAM5iM,GAAI0iM,GAAG,MAAMD,EAAE,CAAC,EAAGzkN,GAAI4kN,GAAK5kN,GAAI,GAAKukN,GACvF,MACF,IAAIt8M,GAAI+Z,GAAI0iM,GAAG,MAAMD,EAAE,GAAKG,GAAK,IAAO5kN,GAAI,IAC5C+gB,GAAI,EAAI,KAAK,MAAM9Y,GAAI,EAAI68M,EAAKA,EAAK,EAAG,EACxC,IAAIhD,GAAK,EACT,IAAK6C,GAAK,EAAGA,IAAM3kN,GAAG,EAAE2kN,GAAI,CAC1B,IAAIjjM,GAAI,EAAIijM,GAAKC,GAAK5kN,GAAI,EAAG+hN,GAC7BA,GAAKrgM,GAAI,EAAIZ,GAAExI,GAAIoJ,EAAC,EAAI2iM,GAAGC,GAAK5iM,EAAC,EAAGogM,IAAMC,GAAK2C,GAAG,UAAU3jM,EAAC,EAAE4jM,EAAE,CAC3E,CACQ7hM,GAAEqhM,GAAKU,EAAE,EAAI/C,EACrB,CACM,GAAI0C,GAAG,SAAW,KAAK,IAAID,GAAIvkN,GAAI4kN,GAAK5kN,GAAI,CAAC,EAAG0kN,GAAG,MAAMD,EAAE,GAAKD,GAAG,SAAWK,GAAKH,GAAG,eAAgBF,GAAG,UAAYlsM,GACnH,IAAKqsM,GAAK,EAAGA,GAAKrsM,GAAGqsM,KACnB7jM,GAAE6jM,EAAE,EAAIN,GAAGC,GAAKE,GAAG,SAAWG,GAAKrsM,EAAC,MACnC,CACH,IAAI0pM,GAAK1pM,GAAIksM,GAAG,SAChB,IAAKG,GAAK,EAAGA,GAAK3C,GAAI,EAAE2C,GACtB7jM,GAAE6jM,EAAE,EAAI7jM,GAAE6jM,GAAKH,GAAG,QAAQ,EAC5B,IAAKI,GAAK,EAAGD,GAAKrsM,GAAG,EAAEqsM,GAAI,EAAEC,GAC3B9jM,GAAE6jM,EAAE,EAAIN,GAAGC,GAAKM,EAAE,EACpB3jM,EAAE2jM,IAAMJ,GAAG,QAAQ,CAC3B,CACM,OAAOK,EACb,CACI,SAASX,GAAGn0M,EAAG+S,GAAGqhM,GAAIC,GAAIC,GAAIC,GAAI,CAChC,IAAIC,GAAKx0M,EAAE,eACX,GAAIw0M,GAAG,eAAiB,OAAUA,GAAG,eAAiB,OACpD,QAASC,GAAK,EAAGA,GAAKD,GAAG,aAAcC,KAAM,CAC3C,IAAIC,GAAK,IAAI5D,GACbyD,GAAG,MAAQz5H,GACT96E,EACA+S,GAAE0hM,EAAE,EACJD,GAAG,QACHx0M,EAAE,UACFo0M,GAAGK,EAAE,EACLJ,GACAC,GACAI,GACAD,EACZ,EAAaF,GAAG,KAAOG,GAAG,QAC1B,KACW,CACHH,GAAG,MAAQ,KAAK,IAAIv0M,EAAE,UAAWs0M,EAAE,EAAGC,GAAG,KAAOA,GAAG,MACnD,QAASI,GAAK,EAAGA,GAAKJ,GAAG,MAAO,EAAEI,GAChC5hM,GAAE,CAAC,EAAEyhM,GAAG,QAAUG,EAAE,EAAIP,GAAG,CAAC,EAAEC,GAAKM,EAAE,EAAGH,GAAG,cAAgB,IAAMzhM,GAAE,CAAC,EAAEyhM,GAAG,QAAUG,EAAE,EAAIP,GAAG,CAAC,EAAEC,GAAKM,EAAE,EAChH,CACA,CACA,CACE,OAAO9iM,GAAKhB,EAAGgB,EACjB,CACA,IAAI6zG,IAAKqqF,GAAI0I,GAAK/yF,IAAG,QACrB,SAASgzF,KAAK,CACZ,IAAIhoM,EAAI0G,GAAI,EACZ,SAAS7C,EAAEnD,EAAGre,EAAGue,EAAG4+L,EAAI96L,EAAG+6L,EAAIt5L,EAAGhG,EAAG5Q,EAAGC,EAAGiN,EAAGtN,EAAGE,EAAGuU,EAAG9D,EAAG,CACxD,KAAK,MAAQY,EAAG,KAAK,WAAare,EAAG,KAAK,aAAeue,EAAG,KAAK,KAAO4+L,EAAI,KAAK,OAAS96L,EAAG,KAAK,KAAO+6L,EAAI,KAAK,YAAct5L,EAAG,KAAK,kBAAoBhG,EAAG,KAAK,UAAY5Q,EAAG,KAAK,UAAYC,EAAG,KAAK,gBAAkBiN,EAAG,KAAK,QAAUtN,EAAG,KAAK,UAAYE,EAAG,KAAK,SAAWuU,EAAG,KAAK,MAAQ9D,CAC3S,CACE,SAASsD,EAAE1C,EAAGre,EAAGue,EAAG4+L,EAAI96L,EAAG+6L,EAAIt5L,EAAGhG,EAAG5Q,EAAGC,EAAGiN,EAAGtN,EAAGE,EAAGuU,EAAG,CACrD,KAAK,WAAavhB,EAAG,KAAK,aAAeue,EAAG,KAAK,UAAY4+L,EAAI,KAAK,QAAU96L,EAAG,KAAK,OAAS+6L,EAAI,KAAK,KAAOt5L,EAAG,KAAK,OAAShG,EAAG,KAAK,MAAQ5Q,EAAG,KAAK,YAAcC,EAAG,KAAK,UAAYiN,EAAG,KAAK,UAAYtN,EAAG,KAAK,QAAUE,EAAG,KAAK,QAAUuU,CACxP,CACE,IAAIT,EACJ,KAAK,WAAa,SAASzC,EAAG,CAC5ByC,EAAIzC,CACL,EACD,IAAIq+L,EAAK,CACP,IAAIl7L,EAAE,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,KAAM,KAAM,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EACjE,IAAIA,EAAE,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,KAAM,KAAM,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,IAAI,EACnE,IAAIA,EAAE,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,KAAM,KAAM,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,IAAI,EACjE,IAAIA,EAAE,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,KAAM,KAAM,IAAK,EAAG,GAAI,EAAG,EAAG,GAAI,IAAI,EAClE,IAAIA,EAAE,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAM,KAAM,IAAK,IAAK,GAAI,EAAG,EAAG,EAAG,IAAI,EACjE,IAAIA,EAAE,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,GAAK,GAAK,KAAM,EAAG,IAAK,KAAM,EAAG,EAAG,IAAI,EACpE,IAAIA,EAAE,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAM,IAAM,MAAO,IAAK,IAAK,KAAM,EAAG,EAAG,GAAG,EACxE,IAAIA,EAAE,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,GAAK,IAAM,MAAO,EAAG,IAAK,KAAM,EAAG,EAAG,GAAG,EACrE,IAAIA,EAAE,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,KAAM,MAAO,GAAI,IAAK,KAAM,EAAG,EAAG,CAAC,EACpE,IAAIA,EAAE,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,KAAM,EAAG,EAAG,CAAC,EACjE,IAAIA,EAAE,GAAI,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,IAAK,GAAI,IAAK,KAAM,EAAG,EAAG,CAAC,CAC/D,EAAEtD,EAAI,CACL,IAAIsD,EAAE,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAC5D,IAAIA,EAAE,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,KAAM,KAAM,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,IAAI,EAClE,IAAIA,EAAE,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,KAAM,KAAM,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,IAAI,EAC9D,IAAIA,EAAE,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,KAAM,MAAO,IAAK,EAAG,GAAI,EAAG,EAAG,GAAI,IAAI,EAClE,IAAIA,EAAE,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,KAAM,GAAK,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,IAAI,EAC/D,IAAIA,EAAE,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,KAAM,KAAM,EAAG,IAAK,KAAM,EAAG,EAAG,IAAI,EACnE,IAAIA,EAAE,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,KAAM,KAAM,IAAK,IAAK,KAAM,EAAG,EAAG,CAAC,EAClE,IAAIA,EAAE,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAK,EAAG,MAAO,EAAG,IAAK,KAAM,EAAG,EAAG,CAAC,EAC/D,IAAIA,EAAE,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,EAAG,IAAK,IAAK,GAAI,IAAK,KAAM,EAAG,EAAG,CAAC,EAC9D,IAAIA,EAAE,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,IAAK,KAAM,IAAK,GAAI,IAAK,KAAM,EAAG,EAAG,CAAC,EACjE,IAAIA,EAAE,GAAI,EAAG,EAAG,EAAG,IAAK,GAAI,EAAG,KAAM,IAAK,GAAI,IAAK,KAAM,EAAG,EAAG,CAAC,CACjE,EACD,SAASjC,EAAElB,EAAGre,EAAGue,EAAG,CAClB,IAAI4+L,EAAK9+L,EAAE,KAAOqnM,GAAG,OAAShJ,EAAKx+L,EAAGmE,EAAIhE,EAAE,WAAY++L,EAAKD,EAAGn9M,CAAC,EAAG8jB,EAAIq5L,EAAGn9M,EAAI,CAAC,EAAG8d,EAAIs/L,EACvFA,EAAG,OAASA,EAAG,OAAS/6L,GAAKyB,EAAE,OAASs5L,EAAG,QAASA,EAAG,KAAOA,EAAG,KAAO/6L,GAAKyB,EAAE,KAAOs5L,EAAG,MAAOA,EAAG,YAAcA,EAAG,YAAc/6L,GAAKyB,EAAE,YAAcs5L,EAAG,aAAcA,EAAG,kBAAoBA,EAAG,kBAAoB/6L,GAAKyB,EAAE,kBAAoBs5L,EAAG,mBAAoBA,EAAG,UAAYA,EAAG,UAAY/6L,GAAKyB,EAAE,UAAYs5L,EAAG,WAAYA,EAAG,UAAYA,EAAG,UAAY/6L,GAAKyB,EAAE,UAAYs5L,EAAG,WAAYA,EAAG,gBAAkBA,EAAG,gBAAkB/6L,GAAKyB,EAAE,gBAAkBs5L,EAAG,iBAAkBA,EAAG,QAAUA,EAAG,QAAU/6L,GAAKyB,EAAE,QAAUs5L,EAAG,SAAUA,EAAG,MAAQA,EAAG,MAAQ/6L,GAAKyB,EAAE,MAAQs5L,EAAG,OAAQG,EAAGl/L,EAAGP,EAAE,KAAK,EAAGS,GAAK,EAAIF,EAAE,WAAaP,EAAE,WAAa,KAAK,IAAIO,EAAE,WAAa,GAAE,EAAI,IAAMA,EAAE,WAAaP,EAAE,YAAaS,GAAK,EAAIF,EAAE,iBAAmBP,EAAE,aAAe,KAAK,IAAIO,EAAE,iBAAmB,GAAE,EAAI,IAAMA,EAAE,iBAAmBP,EAAE,cAAeA,EAAE,MAAQ,IAAMO,EAAE,cAAgBP,EAAE,MAAQ,GAAIS,GAAK,EAAIF,EAAE,eAAe,MAAM,WAAaP,EAAE,OAAS,KAAK,IAAIO,EAAE,eAAe,MAAM,WAAa,GAAE,EAAI,IAAMA,EAAE,eAAe,MAAM,WAAaP,EAAE,QAASS,GAAK,EAAIF,EAAE,eAAe,MAAM,aAAeP,EAAE,KAAO,KAAK,IAAIO,EAAE,eAAe,MAAM,aAAe,GAAE,EAAI,IAAMA,EAAE,eAAe,MAAM,aAAeP,EAAE,MAAOS,GAAK,EAAIF,EAAE,cAAgBP,EAAE,YAAc,KAAK,IAAIO,EAAE,cAAgB,CAAC,EAAI,IAAMA,EAAE,cAAgBP,EAAE,aAAcS,GAAK,EAAIF,EAAE,oBAAsBP,EAAE,kBAAoB,KAAK,IAAIO,EAAE,oBAAsB,CAAC,EAAI,IAAMA,EAAE,oBAAsBP,EAAE,mBAAoBS,GAAK,EAAIF,EAAE,SAAW,CAACP,EAAE,UAAY,GAAK,KAAK,IAAI,CAACO,EAAE,SAAW,GAAK,CAAC,EAAI,IAAMA,EAAE,SAAW,CAACP,EAAE,UAAY,IAAKS,GAAK,EAAIF,EAAE,SAAWP,EAAE,UAAY,KAAK,IAAIO,EAAE,SAAW,GAAE,EAAI,IAAMA,EAAE,SAAWP,EAAE,WAAYS,GAAK,EAAIF,EAAE,kBAAoBP,EAAE,gBAAkB,KAAK,IAAIO,EAAE,kBAAoB,GAAE,EAAI,IAAMA,EAAE,kBAAoBP,EAAE,iBAAkBA,EAAE,QAAU,IAAMS,GAAK,EAAIF,EAAE,aAAeP,EAAE,QAAU,KAAK,IAAIO,EAAE,aAAe,GAAE,EAAI,IAAMA,EAAE,aAAeP,EAAE,UAAWA,EAAE,UAAY,IAAMO,EAAE,cAAgBA,EAAE,cAAgBP,EAAE,WAAYA,EAAE,SAAW,IAAMO,EAAE,cAAgBA,EAAE,cAAgBP,EAAE,UAAY,IAAKS,GAAK,EAAIF,EAAE,MAAQP,EAAE,MAAQ,KAAK,IAAIO,EAAE,MAAQ,GAAE,EAAI,IAAMA,EAAE,MAAQP,EAAE,OAAQS,GAAK,IAAMF,EAAE,MAAQre,EAAGqe,EAAE,WAAagE,EACxpE,CACE,IAAIlE,EAAI,CACN,IAAI4C,EAAE,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,IAAM,EAAG,IAAK,GAAI,MAAO,CAAC,EAE5D,IAAIA,EAAE,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,IAAM,EAAG,IAAK,GAAI,KAAM,CAAC,EAE5D,IAAIA,EAAE,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,IAAM,EAAG,IAAK,GAAI,KAAM,CAAC,EAE5D,IAAIA,EAAE,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,IAAM,EAAG,IAAK,GAAI,KAAM,CAAC,EAE5D,IAAIA,EAAE,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,IAAM,EAAG,IAAK,GAAI,KAAM,CAAC,EAE5D,IAAIA,EAAE,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,IAAM,EAAG,IAAK,GAAI,KAAM,CAAC,EAE5D,IAAIA,EAAE,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,IAAM,EAAG,GAAI,GAAI,KAAM,CAAC,EAE3D,IAAIA,EAAE,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,IAAM,EAAG,GAAI,GAAI,KAAM,CAAC,EAE3D,IAAIA,EAAE,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,IAAM,EAAG,EAAG,EAAG,KAAM,CAAC,EAEzD,IAAIA,EAAE,GAAI,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,EAAG,IAAM,EAAG,EAAG,IAAK,KAAM,CAAC,EAE7D,IAAIA,EAAE,IAAK,EAAG,EAAG,EAAG,KAAM,IAAK,IAAK,EAAG,IAAM,EAAG,EAAG,IAAK,KAAM,CAAC,EAE/D,IAAIA,EAAE,IAAK,EAAG,EAAG,EAAG,KAAM,IAAK,IAAK,EAAG,IAAM,EAAG,EAAG,EAAG,KAAM,CAAC,EAE7D,IAAIA,EAAE,IAAK,EAAG,EAAG,EAAG,KAAM,EAAG,IAAK,EAAG,IAAM,GAAI,EAAG,IAAK,EAAG,CAAC,EAE3D,IAAIA,EAAE,IAAK,EAAG,EAAG,EAAG,KAAM,IAAK,IAAK,EAAG,IAAM,GAAI,EAAG,EAAG,EAAG,CAAC,EAE3D,IAAIA,EAAE,IAAK,EAAG,EAAG,EAAG,KAAM,IAAK,IAAK,EAAG,IAAM,GAAI,EAAG,EAAG,EAAG,CAAC,EAE3D,IAAIA,EAAE,IAAK,EAAG,EAAG,EAAG,IAAM,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,CAAC,EAEzD,IAAIA,EAAE,IAAK,EAAG,EAAG,EAAG,GAAK,IAAK,IAAK,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,CAAC,CAE1D,EACD,SAASrD,EAAEW,EAAGre,EAAGue,EAAG,CAClB,IAAI4+L,EAAKn9M,EAAGqiB,EAAIvB,EAAE,wBAAwB9gB,CAAC,EAC3C,GAAIqe,EAAE,IAAMqnM,GAAG,QAASrnM,EAAE,sBAAwB8+L,EAAI9+L,EAAE,sBAAwB,KAAK,IAAIA,EAAE,sBAAuB,GAAG,EAAGA,EAAE,sBAAwB,KAAK,IAAIA,EAAE,sBAAuB,CAAC,EAAGA,EAAE,MAAQA,EAAE,sBAAuBA,EAAE,sBAAwB,MAAQA,EAAE,kBAAoB,IAAKF,EAAEkE,CAAC,EAAE,UAAY,IAAMhE,EAAE,cAAgBA,EAAE,cAAgB,GAAIF,EAAEkE,CAAC,EAAE,QAAU,IAAMhE,EAAE,eAAe,cAAgB,GAAI,KAAK,IAAIF,EAAEkE,CAAC,EAAE,MAAM,EAAI,EAAG,CAC1a,IAAI+6L,EAAK,IAAIj/L,EAAEkE,CAAC,EAAE,OAAS,CAAC,EAC5B+6L,EAAK,IAAMA,GAAM,IAAK/+L,EAAE,cAAgBA,EAAE,cAAgB++L,GAAM,CACtE,CACI,OAAO7+L,GAAK,EAAIF,EAAE,WAAaF,EAAEkE,CAAC,EAAE,WAAa,KAAK,IAAIhE,EAAE,WAAa,GAAE,EAAI,IAAMA,EAAE,WAAaF,EAAEkE,CAAC,EAAE,YAAa9D,GAAK,EAAIF,EAAE,iBAAmBF,EAAEkE,CAAC,EAAE,aAAe,KAAK,IAAIhE,EAAE,iBAAmB,GAAE,EAAI,IAAMA,EAAE,iBAAmBF,EAAEkE,CAAC,EAAE,cAAe9D,GAAK,EAAIF,EAAE,MAAQF,EAAEkE,CAAC,EAAE,QAAU,KAAK,IAAIhE,EAAE,MAAQ,GAAE,EAAI,IAAMA,EAAE,MAAQF,EAAEkE,CAAC,EAAE,SAAU9D,GAAK,EAAIF,EAAE,eAAe,MAAM,WAAaF,EAAEkE,CAAC,EAAE,OAAS,KAAK,IAAIhE,EAAE,eAAe,MAAM,WAAa,GAAE,EAAI,IAAMA,EAAE,eAAe,MAAM,WAAaF,EAAEkE,CAAC,EAAE,QAAS9D,GAAK,EAAIF,EAAE,eAAe,MAAM,aAAeF,EAAEkE,CAAC,EAAE,KAAO,KAAK,IAAIhE,EAAE,eAAe,MAAM,aAAe,GAAE,EAAI,IAAMA,EAAE,eAAe,MAAM,aAAeF,EAAEkE,CAAC,EAAE,MAAO9D,GAAK,EAAIF,EAAE,MAAQF,EAAEkE,CAAC,EAAE,MAAQ,KAAK,IAAIhE,EAAE,MAAQ,GAAE,EAAI,IAAMA,EAAE,MAAQF,EAAEkE,CAAC,EAAE,OAAQ9D,GAAK,EAAIF,EAAE,cAAgBF,EAAEkE,CAAC,EAAE,YAAc,KAAK,IAAIhE,EAAE,cAAgB,CAAC,EAAI,IAAMA,EAAE,cAAgBF,EAAEkE,CAAC,EAAE,aAAclE,EAAEkE,CAAC,EAAE,YAAc,EAAI9D,GAAK,EAAIF,EAAE,oBAAsBF,EAAEkE,CAAC,EAAE,YAAc,GAAM,KAAK,IAAIhE,EAAE,oBAAsB,CAAC,EAAI,IAAMA,EAAE,oBAAsBF,EAAEkE,CAAC,EAAE,YAAc,IAAO9D,GAAK,EAAIF,EAAE,oBAAsBF,EAAEkE,CAAC,EAAE,YAAc,IAAM,KAAK,IAAIhE,EAAE,oBAAsB,CAAC,EAAI,IAAMA,EAAE,oBAAsBF,EAAEkE,CAAC,EAAE,YAAc,KAAM9D,GAAK,EAAIF,EAAE,SAAW,CAACF,EAAEkE,CAAC,EAAE,UAAY,GAAK,KAAK,IAAI,CAAChE,EAAE,SAAW,GAAK,CAAC,EAAI,IAAMA,EAAE,SAAW,CAACF,EAAEkE,CAAC,EAAE,UAAY,IAAK9D,GAAK,EAAIF,EAAE,SAAWF,EAAEkE,CAAC,EAAE,UAAY,KAAK,IAAIhE,EAAE,SAAW,GAAE,EAAI,IAAMA,EAAE,SAAWF,EAAEkE,CAAC,EAAE,WAAY9D,GAAK,EAAIF,EAAE,aAAeF,EAAEkE,CAAC,EAAE,QAAU,KAAK,IAAIhE,EAAE,aAAe,GAAE,EAAI,IAAMA,EAAE,aAAeF,EAAEkE,CAAC,EAAE,SAAUriB,CAC1gD,CACE,KAAK,aAAe,SAASqe,EAAGre,EAAGue,EAAG,CACpC,OAAQve,EAAC,CACP,KAAK2d,EAAE,MAAO,CACZ3d,EAAI2d,EAAE,GAAIU,EAAE,IAAMqnM,GAAG,SACrB,KACR,CACM,KAAK/nM,EAAE,OAAQ,CACb3d,EAAI2d,EAAE,GAAIU,EAAE,IAAMqnM,GAAG,OACrB,KACR,CACM,KAAK/nM,EAAE,YAAa,CAClB3d,EAAI2d,EAAE,GAAIU,EAAE,IAAMqnM,GAAG,SACrB,KACR,CACM,KAAK/nM,EAAE,SAAU,CACf3d,EAAI2d,EAAE,GAAIU,EAAE,IAAMqnM,GAAG,OACrB,KACR,CACM,KAAK/nM,EAAE,cAAe,CACpB3d,EAAI2d,EAAE,GAAIU,EAAE,IAAMqnM,GAAG,SACrB,KACR,CACM,KAAK/nM,EAAE,QAAS,CACd3d,EAAI2d,EAAE,GAAIU,EAAE,IAAMqnM,GAAG,OACrB,KACR,CACM,KAAK/nM,EAAE,aAAc,CACnB3d,EAAI2d,EAAE,GAAIU,EAAE,IAAMqnM,GAAG,SACrB,KACR,CACM,KAAK/nM,EAAE,OACL,OAAO3d,EAAI,IAAKqe,EAAE,OAASre,EAAG0d,EAAEW,EAAGre,EAAGue,CAAC,EAAGF,EAAE,IAAMqnM,GAAG,QAAS1lN,CACtE,CACI,OAAQqe,EAAE,OAASre,EAAGA,EAAC,CACrB,KAAK2d,EAAE,GACL,OAAO4B,EAAElB,EAAG,EAAGE,CAAC,EAAGve,EACrB,KAAK2d,EAAE,GACL,OAAO4B,EAAElB,EAAG,EAAGE,CAAC,EAAGve,EACrB,KAAK2d,EAAE,GACL,OAAO4B,EAAElB,EAAG,EAAGE,CAAC,EAAGve,EACrB,KAAK2d,EAAE,GACL,OAAO4B,EAAElB,EAAG,EAAGE,CAAC,EAAGve,EACrB,KAAK2d,EAAE,GACL,OAAO4B,EAAElB,EAAG,EAAGE,CAAC,EAAGve,EACrB,KAAK2d,EAAE,GACL,OAAO4B,EAAElB,EAAG,EAAGE,CAAC,EAAGve,EACrB,KAAK2d,EAAE,GACL,OAAO4B,EAAElB,EAAG,EAAGE,CAAC,EAAGve,EACrB,KAAK2d,EAAE,GACL,OAAO4B,EAAElB,EAAG,EAAGE,CAAC,EAAGve,EACrB,KAAK2d,EAAE,GACL,OAAO4B,EAAElB,EAAG,EAAGE,CAAC,EAAGve,EACrB,KAAK2d,EAAE,GACL,OAAO4B,EAAElB,EAAG,EAAGE,CAAC,EAAGve,CAC3B,CACI,MAAO,IAAKA,GAAKA,GAAK,IAAM0d,EAAEW,EAAGre,EAAGue,CAAC,GAAKF,EAAE,OAAS,EAAGre,EACzD,EACD,SAASu9M,EAAGl/L,EAAGre,EAAG,CAChB,IAAIue,EAAI,EACR,MAAO,GAAIve,IAAMue,EAAI,GAAIve,EAAI,GAAI,EAAIA,IAAMue,EAAI,GAAIve,EAAI,GAAIqe,EAAE,MAAQre,EAAGqe,EAAE,WAAa,EAAGE,CAC9F,CACA,CACA,IAAIqnM,IAAKD,IACT,SAASE,KAAK,CACZ,KAAK,WAAa,SAASloM,EAAG6D,EAAG,CAChC,CACH,CACA,IAAIskM,IAAKD,IACT,SAASE,KAAK,CACZ,KAAK,WAAa,EAAG,KAAK,UAAY,EAAG,KAAK,UAAY,EAAG,KAAK,WAAa,EAAG,KAAK,SAAW,EAAG,KAAK,KAAO,CACnH,CACA,IAAIC,IAAKD,IAAIE,GAAKjJ,GAAItjJ,GAAKusJ,GAAG,UAAWC,IAAKD,GAAG,QACjD,SAASE,KAAK,CACZ,KAAK,YAAc,EAAG,KAAK,WAAa,EAAG,KAAK,KAAOD,IAAG,EAAE,EAAG,KAAK,MAAQxsJ,GAAG,EAAE,EAAG,KAAK,UAAYA,GAAG,EAAE,CAC5G,CACA,IAAI0sJ,IAAKD,IAAIE,GAAKrJ,GAAIsJ,GAAKD,GAAG,OAAQr7J,GAAKq7J,GAAG,QAAS3nM,GAAK2nM,GAAG,KAAME,GAAKF,GAAG,OAAQG,GAAKH,GAAG,UAAWI,GAAKJ,GAAG,OAAQK,IAAKZ,IAAIxhM,GAAK0hM,IAAIW,IAAKP,IAAIQ,GAAK1J,GAAE,EAAI2J,GAAKlmM,GAAImmM,GAAKriM,GAC5K,SAASsiM,KAAK,CACZ,IAAIppM,EACJ,KAAK,GAAK,KACV,IAAI6D,EACJ,KAAK,MAAQ,KACb,IAAIT,EAAGD,EAAI,IAAI4lM,IAAMhK,EACrB,KAAK,WAAa,SAAS5+L,EAAG5Q,EAAGC,EAAGiN,EAAG,CACrCuD,EAAIG,EAAG0D,EAAItU,EAAG,KAAK,GAAKA,EAAG6T,EAAI5T,EAAG,KAAK,MAAQA,EAAGuvM,EAAKtiM,EAAG0G,EAAE,WAAWC,EAAG27L,CAAE,CAC7E,EAAE,KAAK,WAAa,SAAS5+L,EAAG5Q,EAAG,CAClC,QAASC,EAAI,EAAGA,EAAI,IAAK,EAAEA,EAAG,CAC5B,IAAIiN,EAAI0D,EAAE,GAAG5Q,CAAC,EAAE,CAAC,EAAE,GAAGC,CAAC,EAAGL,EAAIgR,EAAE,GAAG5Q,CAAC,EAAE,CAAC,EAAE,GAAGC,CAAC,EAC7C2Q,EAAE,GAAG5Q,CAAC,EAAE,CAAC,EAAE,GAAGC,CAAC,GAAKiN,EAAItN,IAAM4R,GAAG,MAAQ,IAAMZ,EAAE,GAAG5Q,CAAC,EAAE,CAAC,EAAE,GAAGC,CAAC,GAAKiN,EAAItN,IAAM4R,GAAG,MAAQ,GAC9F,CACG,EACD,SAASR,EAAEJ,EAAG5Q,EAAGC,EAAGiN,EAAG,CACrBA,EAAI,EACJ,QAAStN,EAAI,EAAGA,GAAKK,EAAG,EAAEL,EAAG,CAC3B,IAAIE,EAAI,KAAK,IAAI8Q,EAAE,GAAGhR,CAAC,CAAC,EACxBsN,GAAKpN,EAAGE,EAAEJ,CAAC,EAAI,KAAK,KAAKE,EAAI,KAAK,KAAKA,CAAC,CAAC,EAAGE,EAAEJ,CAAC,EAAIgR,EAAE,YAAcA,EAAE,UAAY5Q,EAAEJ,CAAC,EAC1F,CACI,OAAOsN,CACX,CACE,KAAK,WAAa,SAAS0D,EAAG5Q,EAAGC,EAAG,CAClC,IAAIiN,EAAI,EAAGtN,EAAI,EAAII,EAAE,kBACrB,GAAIA,EAAE,UAAY,EAAGq5M,GAAG,KAAKp5M,EAAGL,EAAG,IAAK,CAAC,EAAGsN,EAAI8D,EAAEhR,EAAGC,EAAGL,EAAGsN,CAAC,EAAGA,EAAI,MAAO,CACxE,IAAIpN,EAAI,EACR8Q,EAAE,gBAAkB,IAAM9Q,EAAI,GAC9B,QAASuU,EAAI,EAAGA,EAAIrU,EAAE,OAAQqU,IAC5BzD,EAAE,WAAWyD,CAAC,EAAIvU,EACpB,MAAO,EACb,CACI,OAAOu5M,GAAG,KAAKr5M,EAAE,OAAQ,EAAG,IAAK,CAAC,EAAG,EACtC,EACD,SAASqS,EAAEzB,EAAG5Q,EAAG,CACf,IAAIC,EAAI2Q,EAAE,IAAK1D,EAAIlN,EAAE,GACrB,GAAIA,EAAE,YAAc05M,GAAG,WACrB,QAAS95M,EAAI,GAAIE,EAAI45M,GAAG,OAAS,EAAG55M,GAAK,GAAK,CAACF,EAAGE,IAAK,CACrD,IAAIuU,EAAIzD,EAAE,cAAc,OAAO9Q,CAAC,EAAGyQ,EAAIK,EAAE,cAAc,OAAO9Q,EAAI,CAAC,EAAGsR,EAAIyC,EAAE,UAC1E5T,EAAE,OACFA,EAAE,OAAOH,CAAC,EACVG,EAAE,KACH,EACD2Q,EAAE,MAAM,SAAS,EAAE,EAAI,QAAUQ,GAAKR,EAAE,MAAM,SAAS,EAAE,GACzD,QAASW,EAAIhB,EAAI,EAAGgB,GAAK8C,EAAG9C,IAC1B,GAAI,KAAK,IAAIrE,EAAEqE,CAAC,CAAC,EAAIH,EACnBlE,EAAEqE,CAAC,EAAI,MACJ,CACH3R,EAAI,GACJ,KACZ,CACA,KAEM,SAAS4V,EAAI,EAAGA,EAAI,EAAGA,IACrB,QAAS5V,EAAI,GAAIE,EAAI45M,GAAG,OAAS,EAAG55M,GAAK,GAAK,CAACF,EAAGE,IAAK,CACrD,IAAIuU,EAAIzD,EAAE,cAAc,EAAE,EAAE,EAAI,GAAKA,EAAE,cAAc,EAAE,EAAE,EAAIA,EAAE,cAAc,EAAE,EAAE,GAAK4E,GAAK5E,EAAE,cAAc,OAAO9Q,CAAC,EAAI8Q,EAAE,cAAc,OAAO,CAAC,GAAIL,EAAI8D,GAAKzD,EAAE,cAAc,OAAO9Q,EAAI,CAAC,EAAI8Q,EAAE,cAAc,OAAO9Q,CAAC,GAAIqwM,EAAKt8L,EAAE,UAC7N5T,EAAE,OACFA,EAAE,OAAOH,CAAC,EACVG,EAAE,KACH,EACD2Q,EAAE,MAAM,UAAU,EAAE,EAAI,QAAUu/L,GAAMv/L,EAAE,MAAM,UAAU,EAAE,GAC5D,QAASW,EAAIhB,EAAI,EAAGgB,GAAK8C,EAAG9C,IAC1B,GAAI,KAAK,IAAIrE,EAAEqE,CAAC,CAAC,EAAI4+L,EACnBjjM,EAAEqE,CAAC,EAAI,MACJ,CACH3R,EAAI,GACJ,KACd,CACA,CACA,CACE,KAAK,gBAAkB,SAASgR,EAAG5Q,EAAG,CACpCA,EAAE,eAAiB,EAAGA,EAAE,WAAa,EAAGA,EAAE,OAAS,EAAGA,EAAE,YAAc,IAAKA,EAAE,kBAAoB,EAAGA,EAAE,aAAa,CAAC,EAAI,EAAGA,EAAE,aAAa,CAAC,EAAI,EAAGA,EAAE,aAAa,CAAC,EAAI,EAAGA,EAAE,cAAc,CAAC,EAAI,EAAGA,EAAE,cAAc,CAAC,EAAI,EAAGA,EAAE,cAAc,CAAC,EAAI,EAAGA,EAAE,cAAc,CAAC,EAAI,EAAGA,EAAE,cAAgB,EAAGA,EAAE,cAAgB,EAAGA,EAAE,QAAU,EAAGA,EAAE,eAAiB,EAAGA,EAAE,mBAAqB,EAAGA,EAAE,aAAe,EAAGA,EAAE,SAAW05M,GAAG,QAAS15M,EAAE,SAAW05M,GAAG,QAAS15M,EAAE,SAAW4Q,EAAE,YAAc8oM,GAAG,QAAUA,GAAG,QAAS15M,EAAE,OAASA,EAAE,SAAUA,EAAE,OAASA,EAAE,SAAUA,EAAE,UAAY,GAC1iB,QAASC,EAAI,EAAGA,EAAIy5M,GAAG,QAASz5M,IAC9BD,EAAE,MAAMC,CAAC,EAAI2Q,EAAE,cAAc,EAAE3Q,EAAI,CAAC,EAAI2Q,EAAE,cAAc,EAAE3Q,CAAC,EAAGD,EAAE,OAAOC,CAAC,EAAI,EAC9E,GAAID,EAAE,YAAc05M,GAAG,WAAY,CACjC,IAAIxsM,EAAIosM,GAAG,GAAG,EACdt5M,EAAE,SAAW,EAAGA,EAAE,SAAW,EAAGA,EAAE,kBAAoB,IAAMA,EAAE,SAAW,EAAGA,EAAE,SAAW4Q,EAAE,QAAU,EAAI,GAAI5Q,EAAE,OAASA,EAAE,SAAW,IAAM4Q,EAAE,YAAc8oM,GAAG,QAAUA,GAAG,SAAW15M,EAAE,UAAWA,EAAE,OAASA,EAAE,SAAW,GAAK05M,GAAG,QAAU15M,EAAE,UAAWA,EAAE,UAAYA,EAAE,OAAS,GAAIA,EAAE,SAAWA,EAAE,SACtS,IAAIJ,EAAIgR,EAAE,cAAc,EAAE5Q,EAAE,QAAQ,EACpCo5M,GAAG,UAAUp5M,EAAE,GAAI,EAAGkN,EAAG,EAAG,GAAG,EAC/B,QAASjN,EAAID,EAAE,SAAUC,EAAIy5M,GAAG,QAASz5M,IACvC,QAASH,EAAI8Q,EAAE,cAAc,EAAE3Q,CAAC,EAAGoU,EAAIzD,EAAE,cAAc,EAAE3Q,EAAI,CAAC,EAAGsQ,EAAI,EAAGA,EAAI,EAAGA,IAC7E,QAASa,EAAItR,EAAGsR,EAAIiD,EAAGjD,IACrBpR,EAAE,GAAGJ,GAAG,EAAIsN,EAAE,EAAIkE,EAAIb,CAAC,EAC7B,QAASgB,EAAIvR,EAAE,SAAUC,EAAID,EAAE,SAAUC,EAAIy5M,GAAG,QAASz5M,IACvDD,EAAE,MAAMuR,CAAC,EAAIvR,EAAE,MAAMuR,EAAI,CAAC,EAAIvR,EAAE,MAAMuR,EAAI,CAAC,EAAIX,EAAE,cAAc,EAAE3Q,EAAI,CAAC,EAAI2Q,EAAE,cAAc,EAAE3Q,CAAC,EAAGD,EAAE,OAAOuR,CAAC,EAAI,EAAGvR,EAAE,OAAOuR,EAAI,CAAC,EAAI,EAAGvR,EAAE,OAAOuR,EAAI,CAAC,EAAI,EAAGA,GAAK,CACxK,CACIvR,EAAE,WAAa,EAAGA,EAAE,oBAAsB6T,EAAE,gBAAgB,CAAC,EAAE,CAAC,EAAG7T,EAAE,KAAK,CAAC,EAAI,EAAGA,EAAE,KAAK,CAAC,EAAI,EAAGA,EAAE,KAAK,CAAC,EAAI,EAAGA,EAAE,KAAK,CAAC,EAAI,EAAGA,EAAE,kBAAoB,IAAKq5M,GAAG,KAAKr5M,EAAE,SAAU,CAAC,EAAGqS,EAAEzB,EAAG5Q,CAAC,CACzL,EACD,SAASiR,EAAEL,EAAG,CACZ,KAAK,QAAUA,CACnB,CACEK,EAAE,eAAiB,IAAIA,EAAE,CAAC,EAAGA,EAAE,aAAe,IAAIA,EAAE,CAAC,EAAGA,EAAE,eAAiB,IAAIA,EAAE,CAAC,EAClF,SAAST,EAAEI,EAAG5Q,EAAGC,EAAGiN,EAAGtN,EAAG,CACxB,IAAIE,EAAGuU,EAAIzD,EAAE,YAAY1D,CAAC,EAAGqD,EAAI,GAAIa,EAAIR,EAAE,SAAS1D,CAAC,EAAGqE,EAAIN,EAAE,eAC9D,IAAKjR,EAAE,YAAcoR,EAAGnR,GAAKD,EAAE,eAAkB,CAC/C,IAAIwV,EACJ,GAAI1V,EAAI0vM,EAAG,WAAW5+L,EAAGhR,EAAGI,EAAG,IAAI,EAAGqU,GAAK,GAAKvU,GAAKG,EACnD,MACFH,EAAIG,GAAKsR,GAAKN,EAAE,iBAAmBV,EAAI,IAAKA,IAAM8D,GAAK,GAAI9C,EAAIN,EAAE,aAAcuE,EAAInB,IAAM9C,GAAKN,EAAE,eAAiBV,EAAI,IAAKA,IAAM8D,GAAK,GAAI9C,EAAIN,EAAE,eAAgBuE,EAAI,CAACnB,GAAIrU,EAAE,aAAewV,EAAGxV,EAAE,YAAc,IAAMA,EAAE,YAAc,EAAGuQ,EAAI,IAAKvQ,EAAE,YAAc,MAAQA,EAAE,YAAc,IAAKuQ,EAAI,GACrS,CACI,IAAKgpM,GAAGv5M,EAAE,aAAe,CAAC,EAAGu5M,GAAGv5M,EAAE,YAAc,GAAG,EAAGF,EAAIG,GAAKD,EAAE,YAAc,KAC7EA,EAAE,cAAeF,EAAI0vM,EAAG,WAAW5+L,EAAGhR,EAAGI,EAAG,IAAI,EAClD,OAAO4Q,EAAE,YAAY1D,CAAC,EAAIkE,EAAIpR,EAAE,aAAe,EAAI,EAAI,EAAG4Q,EAAE,SAAS1D,CAAC,EAAIlN,EAAE,YAAaA,EAAE,eAAiBF,EAAGA,CACnH,CACE,KAAK,wBAA0B,SAAS8Q,EAAG5Q,EAAGC,EAAGiN,EAAG,CAClD,IAAItN,EAAI05M,GAAGM,GAAG,MAAM,EACpB,GAAI,EAAE,EAAEhpM,EAAE,gBAAkB,IAAM5Q,EAAE,YAAc05M,GAAG,YAAc9oM,EAAE,gBAAkB,KAAM,CAC3FiD,EAAE,WAAW7T,EAAGC,EAAGL,EAAG,IAAIwX,GAAM,IAAI,EACpC,QAAS/C,EAAI,EAAGA,EAAI,IAAKA,IAAK,CAC5B,IAAIvU,EAAI,EACRE,EAAE,OAAOqU,CAAC,GAAK,IAAMvU,EAAI,KAAK,IAAIE,EAAE,GAAGqU,CAAC,CAAC,GAAInH,EAAEmH,CAAC,EAAIvU,CAC5D,CACM,IAAIuU,EAAI,EAAG9D,EAAI,EACfvQ,EAAE,YAAc05M,GAAG,aAAenpM,EAAI,GACtC,EAAG,CACD,IAAIa,EAAGG,EAAGiE,EAAG26L,EAAIvyM,EAAIoC,EAAE,MAAMuQ,CAAC,EAC9B,GAAI8D,GAAKzW,EAAG,EAAEgC,EAAE2Q,CAAC,GAAK,KAAO8oM,GAAG,KAAKnsM,EAAGmH,EAAIzW,EAAGA,CAAC,EAAG,CAAC,UAAU,GAAGsP,EAAEmH,EAAI,CAAC,EAAG,CAAC,GAAI,CAC9EjD,GAAK,EAAIxR,EAAE2Q,CAAC,GAAKtQ,EAAEsQ,CAAC,EAAGgB,EAAI,EAAG4+L,EAAK,EACnC,EAAG,CACD,IAAIxyM,EACJ,IAAK6X,EAAI,EAAG26L,EAAK36L,EAAI5X,GAAK,CAAC,UAAU,IAAIsP,EAAEijM,EAAK97L,EAAIzW,CAAC,EAAGsP,EAAEijM,EAAK97L,EAAImB,EAAI5X,CAAC,CAAC,EAAG4X,IAC1E,CACF,GAAI7X,EAAIuP,EAAEijM,EAAK97L,EAAIzW,CAAC,EAAIsP,EAAEijM,EAAK97L,EAAIzW,CAAC,EAAI4X,EAAGpE,EAAIzT,EAAG,CAChDwyM,GAAM,IAAM5+L,EAAIrE,EAAEijM,EAAK97L,EAAIzW,EAAI,CAAC,GAChC,KACd,CACYwT,GAAKzT,EAAGwyM,GAAM36L,CACf,OAAQ26L,EAAKvyM,GACd,GAAI,CAAC,UAAU,GAAG2T,EAAG,CAAC,EACpB,GACE,KAAK,IAAIvR,EAAE,GAAGqU,EAAIzW,CAAC,CAAC,GAAK2T,IAAMvR,EAAE,OAAOqU,EAAIzW,CAAC,EAAI,SAC5C,EAAEA,EAAI,EACzB,CACA,OAAe,EAAE2S,EAAIvQ,EAAE,QACjBA,EAAE,eAAiBwvM,EAAG,mBAAmB5+L,EAAG5Q,EAAG,IAAI,CACzD,CACG,EACD,SAASqwM,EAAGz/L,EAAG,CACb,QAAS5Q,EAAI,EAAGA,EAAI4Q,EAAE,OAAQ5Q,IAC5B,GAAI4Q,EAAE,SAAS5Q,CAAC,EAAI4Q,EAAE,cAAcA,EAAE,OAAO5Q,CAAC,CAAC,GAAK,EAClD,MAAO,GACX,MAAO,EACX,CACE,SAASmR,EAAEP,EAAG,CACZ,OAAOY,GAAG,WAAW,KAAQ,KAAQZ,EAAIA,EAAIA,CAAC,CAClD,CACE,SAAS9d,EAAE8d,EAAG5Q,EAAG,CACf,QAASC,EAAI,MAAOiN,EAAI,EAAGA,EAAIlN,EAAE,OAAQkN,IACvCjN,GAAKkR,EAAEP,EAAE1D,CAAC,CAAC,EACb,OAAO,KAAK,IAAI,MAAOjN,CAAC,CAC5B,CACE,SAASoR,EAAET,EAAG5Q,EAAGC,EAAGiN,EAAGtN,EAAG,CACxB,IAAIE,EACJ,OAAQ8Q,EAAC,CACP,QACA,IAAK,GAAG,CACN5Q,EAAE,WAAa,GAAKF,EAAIG,EAAE,UAAYD,EAAE,SAAUC,EAAE,UAAYD,EAAE,WAAaF,EAAIG,EAAE,KAAOD,EAAE,OAASF,EAAIG,EAAE,UAAY,GAAKA,EAAE,UAAY,GAAKA,EAAE,MAAQD,EAAE,UAAY,GAAKA,EAAE,KAChL,KACR,CACM,IAAK,GACHF,EAAIG,EAAE,WAAaD,EAAE,YAAcC,EAAE,YAAcD,EAAE,YAAcC,EAAE,WAAaD,EAAE,YAAcC,EAAE,YAAcD,EAAE,YAAc,UAAU,GAAGC,EAAE,WAAYD,EAAE,UAAU,GAAKC,EAAE,UAAYD,EAAE,UAC9L,MACF,IAAK,GACHC,EAAE,UAAYnN,EAAE8M,EAAGsN,CAAC,EACtB,IAAK,GACHpN,EAAIG,EAAE,UAAYD,EAAE,UACpB,MACF,IAAK,GACHF,EAAIG,EAAE,UAAYD,EAAE,UACpB,MACF,IAAK,GACHF,EAAIG,EAAE,UAAYD,EAAE,WAAaC,EAAE,UAAYD,EAAE,UACjD,MACF,IAAK,GACHF,EAAIG,EAAE,WAAa,GAAKD,EAAE,UAAY,IAAOC,EAAE,WAAa,GAAKD,EAAE,UAAY,GAAKA,EAAE,UAAYC,EAAE,UAAY,IAAOA,EAAE,UAAYD,EAAE,WAAaC,EAAE,WAAa,GAAKD,EAAE,UAAY,GAAKA,EAAE,UAAYC,EAAE,UAAY,IAAOA,EAAE,UAAYD,EAAE,UAAYA,EAAE,YAAcC,EAAE,UAAY,GAAKD,EAAE,UAAY,MAASA,EAAE,UAAYC,EAAE,UAAY,IAAOA,EAAE,UAAYA,EAAE,WAAaD,EAAE,UAAYA,EAAE,YAAcC,EAAE,UAAY,GAAKD,EAAE,UAAY,KAAQA,EAAE,UAAYC,EAAE,UAAY,KAAQA,EAAE,UAAYA,EAAE,WAAaA,EAAE,WAAaD,EAAE,UAAYA,EAAE,WAAaA,EAAE,WAC1iB,MACF,IAAK,GACHF,EAAIG,EAAE,WAAaD,EAAE,YAAc,UAAU,GAAGC,EAAE,WAAYD,EAAE,UAAU,GAAKC,EAAE,UAAYD,EAAE,UAC/F,MACF,IAAK,GACHF,EAAIG,EAAE,WAAaD,EAAE,YAAc,UAAU,GAAGC,EAAE,WAAYD,EAAE,UAAU,IAAMC,EAAE,UAAYD,EAAE,WAAa,UAAU,GAAGC,EAAE,UAAWD,EAAE,SAAS,GAAKC,EAAE,WAAaD,EAAE,WACxK,MACF,IAAK,GACHF,EAAIG,EAAE,WAAaD,EAAE,YAAcC,EAAE,WAAaD,EAAE,WACpD,KACR,CACI,OAAOA,EAAE,YAAc,IAAMF,EAAIA,GAAKG,EAAE,KAAOD,EAAE,MAAOF,CAC5D,CACE,SAASmwM,EAAGr/L,EAAG5Q,EAAGC,EAAGiN,EAAGtN,EAAG,CACzB,IAAIE,EAAI8Q,EAAE,eAAgByD,EAC1BrU,EAAE,gBAAkB,EAAIqU,EAAI,mBAAqBA,EAAI,mBACrD,QAAS9D,EAAI,EAAGa,EAAI,EAAGA,EAAIpR,EAAE,OAAQoR,IACnCb,EAAItQ,EAAEmR,CAAC,IAAMb,EAAItQ,EAAEmR,CAAC,GACtB,IAAIG,EAAIzR,EAAE,kBACV,OAAQyR,GAAK,IAAM3R,EAAI2R,EAAI,EAAIA,EAAI,GAAIA,EAAC,CACtC,IAAK,GACH,MACF,IAAK,GACHhB,EAAI,EAAIA,EAAI,KAAK,IAAIA,EAAG,EAAG,EAAIA,GAAK,IACpC,MACF,IAAK,GACL,QACEA,EAAI,EAAIA,EAAI,EAAIA,GAAK,IACrB,KACR,CACI,QAASiF,EAAI,EAAGpE,EAAI,EAAGA,EAAIpR,EAAE,OAAQoR,IAAK,CACxC,IAAI++L,EAAKnwM,EAAE,MAAMoR,CAAC,EAAGxT,EACrB,GAAI4X,GAAK26L,EAAI,EAAElwM,EAAEmR,CAAC,EAAIb,GAAI,CACxB,GAAIzQ,EAAE,gBAAkB,IAAMA,EAAE,WAAWsR,CAAC,EAAItR,EAAE,WAAWsR,CAAC,GAAK,EAAI,EAAI,EAAGtR,EAAE,WAAWsR,CAAC,GAAK,GAAKtR,EAAE,mBAAqB,GAC3H,OACF,IAAKE,EAAE,SAASoR,CAAC,IAAKxT,EAAI,CAACuyM,EAAIvyM,EAAI,EAAGA,IACpCsP,EAAEsI,EAAI5X,CAAC,GAAKyW,EAAGnH,EAAEsI,EAAI5X,CAAC,EAAIoC,EAAE,YAAcA,EAAE,UAAYkN,EAAEsI,EAAI5X,CAAC,GACjE,GAAIkC,EAAE,mBAAqB,EACzB,MACV,CACA,CACA,CACE,SAASqV,EAAEvE,EAAG5Q,EAAG,CACf,QAASC,EAAI,mBAAoBiN,EAAI,EAAGtN,EAAI,EAAGA,EAAIgR,EAAE,OAAQhR,IAAK,CAChE,IAAIE,EAAI8Q,EAAE,MAAMhR,CAAC,EAAGyU,EAAIzD,EAAE,SAAShR,CAAC,EACpC,GAAIgR,EAAE,SAAW,IAAMyD,GAAKR,EAAE,OAAOjU,CAAC,GAAIsN,GAAKpN,EAAGuU,EAAI,EAAG,CACvDA,IACA,QAAS9D,EAAI,CAACzQ,EAAGyQ,EAAI,EAAGA,IACtBvQ,EAAEkN,EAAIqD,CAAC,GAAKtQ,EAAGD,EAAEkN,EAAIqD,CAAC,EAAIK,EAAE,YAAcA,EAAE,UAAY5Q,EAAEkN,EAAIqD,CAAC,EACzE,CACMK,EAAE,SAAShR,CAAC,EAAIyU,GAAK,CAC3B,CACIzD,EAAE,QAAU,EAAGA,EAAE,eAAiB,CACtC,CACE,SAASs/L,EAAGt/L,EAAG5Q,EAAGC,EAAG,CACnB,IAAIiN,EAAGtN,EAAII,EAAE,SACb,IAAKkN,EAAI,EAAGA,EAAIlN,EAAE,SAAUkN,IAC1B,GAAItN,EAAEsN,CAAC,GAAK,GACV,MAAO,GACX,QAASpN,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAIuU,EAAI,EAAG9D,EAAI,EACf,IAAKrD,EAAIlN,EAAE,SAAWF,EAAGoN,EAAIlN,EAAE,UAAWkN,GAAK,EAC7CmH,EAAIzU,EAAEsN,CAAC,IAAMmH,EAAIzU,EAAEsN,CAAC,GACtB,KAAOA,EAAIlN,EAAE,OAAQkN,GAAK,EACxBqD,EAAI3Q,EAAEsN,CAAC,IAAMqD,EAAI3Q,EAAEsN,CAAC,GACtB,GAAI,EAAEmH,EAAI,IAAM9D,EAAI,GAAI,CACtB,GAAIvQ,EAAE,cAAcF,CAAC,GAAK,EACxB,MAAO,GACTE,EAAE,cAAcF,CAAC,IACjB,IAAIsR,EAAIR,EAAE,cAAc,EAAE5Q,EAAE,QAAQ,EACpC,IAAKkN,EAAIlN,EAAE,SAAWF,EAAGoN,EAAIlN,EAAE,OAAQkN,GAAK,EAAG,CAC7C,IAAIqE,EAAGiE,EAAIxV,EAAE,MAAMkN,CAAC,EAAGijM,EAAKvwM,EAAEsN,CAAC,EAC/B,GAAIijM,EAAKA,GAAM,GAAKnwM,EAAE,gBAAiBmwM,GAAM,EAAG,CAC9CvwM,EAAEsN,CAAC,EAAIijM,EAAI/+L,GAAKoE,EAAI,EACpB,QACZ,CACU5V,EAAEsN,CAAC,EAAI,EACP,CACE,IAAItP,EAAI,KAAOuyM,GAAMnwM,EAAE,eAAiB,GACxCuR,EAAIsC,EAAE,OAAOjW,CAAC,CAC1B,CACUwT,GAAKoE,GAAK1V,EAAI,GACd,QAASnC,EAAI,CAAC6X,EAAG7X,EAAI,EAAGA,IACtBsC,EAAEmR,EAAIzT,CAAC,GAAK4T,EAAGtR,EAAEmR,EAAIzT,CAAC,EAAIqC,EAAE,YAAcA,EAAE,UAAYC,EAAEmR,EAAIzT,CAAC,GACjEyT,GAAKoE,GAAK,EAAI1V,EAAI,EAC5B,CACQ,CACE,IAAIyR,EAAIsC,EAAE,OAAO,GAAG,EACpBzC,GAAKpR,EAAE,MAAMkN,CAAC,GAAKpN,EAAI,GACvB,QAASnC,EAAI,CAACqC,EAAE,MAAMkN,CAAC,EAAGvP,EAAI,EAAGA,IAC/BsC,EAAEmR,EAAIzT,CAAC,GAAK4T,EAAGtR,EAAEmR,EAAIzT,CAAC,EAAIqC,EAAE,YAAcA,EAAE,UAAYC,EAAEmR,EAAIzT,CAAC,EAC3E,CACA,CACA,CACI,MAAO,EACX,CACE,SAASiZ,EAAEhG,EAAG5Q,EAAGC,EAAGiN,EAAGtN,EAAG,CACxB,IAAIE,EAAI8Q,EAAE,eACVq/L,EAAGr/L,EAAG5Q,EAAGC,EAAGiN,EAAGtN,CAAC,EAChB,IAAIyU,EAAIg8L,EAAGrwM,CAAC,EACZ,OAAOqU,EAAI,IAAMvU,EAAE,SAAW,EAAIuU,EAAIm7L,EAAG,eAAexvM,CAAC,EAAIqU,EAAIm7L,EAAG,mBAAmB1vM,EAAGE,CAAC,EAAGqU,GAAKvU,EAAE,cAAgB,IAAMu5M,GAAG,KAAKv5M,EAAE,WAAY,CAAC,EAAGE,EAAE,gBAAkB,GAAKmV,EAAEnV,EAAGkN,CAAC,EAAGmH,EAAI,IAAMrU,EAAE,YAAc05M,GAAG,YAAc55M,EAAE,cAAgB,IAAMuU,EAAI67L,EAAGpwM,EAAGE,EAAGkN,CAAC,GAAKmjM,EAAGrwM,CAAC,IAAKqU,IAAMvU,EAAE,SAAW,EAAIuU,EAAIm7L,EAAG,eAAexvM,CAAC,EAAIqU,EAAIm7L,EAAG,mBAAmB1vM,EAAGE,CAAC,GAAI,CAACqU,GAAK,GACpX,CACE,KAAK,WAAa,SAASzD,EAAG5Q,EAAGC,EAAGiN,EAAGtN,EAAGE,EAAG,CAC3C,IAAIuU,EAAIzD,EAAE,eAAgBL,EAAI,IAAIopM,GAAMvoM,EAAIkoM,GAAG,GAAG,EAAG/nM,EAAI+nM,GAAGM,GAAG,MAAM,EAAGpkM,EAAI,IAAI4B,GAAM+4L,EAAIvyM,EAAI,IAAI67M,IAAM97M,EAAI,QAASuT,EAAI,GAAIR,EAAI,GAAIgF,EAAI,EACzI,GAAIlF,EAAE6D,EAAGrU,EAAGF,EAAGF,EAAGsN,CAAC,EAAGmH,EAAE,eAAiB,EACvC,MAAO,KACTR,EAAE,WACA7T,EACAC,EACAsR,EACAiE,EACA5X,CACN,EAAO4X,EAAE,KAAOxV,EAAE,eAAgBuQ,EAAE,OAAOvQ,CAAC,EACxC,IAAIuV,EAAI,EACR,IAAK6jM,GAAG,UAAUlsM,EAAG,EAAGkE,EAAG,EAAG,GAAG,EAAG,CAACF,GAAK,CACxC,EAAG,CACD,IAAII,GAAI,IAAI8F,GAAMzG,EAAG1gB,EAAI,IACzB,GAAIokB,EAAE,gBAAkB,EAAI1D,EAAI,GAAKA,EAAI,EAAG0D,EAAE,cAAgB9C,EAAEhB,EAAE,MAAM,EAAI,GAAKA,EAAE,YAAcmpM,GAAG,aAAenoM,EAAEhB,EAAE,OAAS,CAAC,EAAI,GAAKgB,EAAEhB,EAAE,OAAS,CAAC,EAAI,KAAO,CAACqG,EAAEhG,EAAGL,EAAGgB,EAAGrE,EAAGwD,CAAC,EACjL,MACFH,EAAE,gBAAkB,IAAMtgB,EAAI,KAC9B,IAAImH,EAAI0I,EAAIyQ,EAAE,aACd,GAAInZ,GAAK,EACP,MACF,MAAQmZ,EAAE,eAAiBi/L,EAAG,WAC5Bn7L,EACAnH,EACAqD,EACA3S,CACV,GAAaxG,GAAKmZ,EAAE,aAAetgB,GACzBsgB,EAAE,cACJ,GAAIA,EAAE,YAActgB,EAClB,MACF,GAAIulB,EAAE,YAAc,EAAG,CACrB,MAAQjF,EAAE,eAAiBi/L,EAAG,WAC5Bn7L,EACAnH,EACAqD,EACA3S,CACZ,GAAeD,GAAK4S,EAAE,aAAetgB,GACzBsgB,EAAE,cACJ,GAAIA,EAAE,YAActgB,EAClB,KACZ,CACQ,GAAI4jB,EAAE,WACJtD,EACAtQ,EACAsR,EACAD,GACA1T,CACV,EAAW0T,GAAE,KAAOf,EAAE,eAAgBvQ,EAAE,YAAc05M,GAAG,WAAavJ,EAAKv/L,EAAE,WAAau/L,EAAKv/L,EAAE,iBAAkBu/L,EAAK9+L,EAC9G8+L,EACA36L,EACAlE,GACAf,EACAgB,CACV,EAAY,EAAI,EAAG4+L,GAAM,EACfxyM,EAAIqC,EAAE,eAAgBwV,EAAIlE,GAAGtR,EAAE,OAAOuQ,CAAC,EAAGgF,EAAI,EAAG6jM,GAAG,UAAUlsM,EAAG,EAAGkE,EAAG,EAAG,GAAG,UACtEiD,EAAE,iBAAmB,IAAM,EAAEkB,EAAI5E,GAAK6E,EAAE,YAAc,GAAKnB,EAAE,mBAAqB,GAAK3D,GAAK6E,EAAI,IAAMlB,EAAE,mBAAqB,GAAK3D,GAAKH,EAAE,YAAcmF,EAAI,IAClK,KACH,OAAQnF,EAAE,YAAcA,EAAE,eAAiB,KAC5C8D,EAAE,mBAAqB,EAAI3D,EAAIQ,EAAI,IAAMX,EAAE,OAAOvQ,CAAC,EAAGo5M,GAAG,UAAUhoM,EAAG,EAAGlE,EAAG,EAAG,GAAG,EAAGqI,EAAI,EAAGG,EAAInF,EAAE,YAAaG,EAAI,IAAMQ,EAAI,EACnI,CACI,OAAOqoM,GAAGv5M,EAAE,YAAcA,EAAE,gBAAkB,GAAG,EAAG4Q,EAAE,KAAOktC,GAAG,QAAUltC,EAAE,KAAOktC,GAAG,SAAWs7J,GAAG,UAAUhoM,EAAG,EAAGlE,EAAG,EAAG,GAAG,EAAImH,EAAE,gBAAkB,GAAK,wBAAwBA,EAAGrU,EAAGC,EAAGiN,CAAC,EAAGsI,EAAE,UAClM,EAAE,KAAK,qBAAuB,SAAS5E,EAAG5Q,EAAGC,EAAG,CAC/C,IAAIiN,EAAI0D,EAAE,QAAShR,EAAIsN,EAAE,GAAGlN,CAAC,EAAEC,CAAC,EAChCuvM,EAAG,oBAAoB5+L,EAAG5Q,EAAGC,EAAGiN,CAAC,EAAG0D,EAAE,kBAAoB,GAAK4+L,EAAG,oBAAoB5+L,EAAGhR,CAAC,EAAG0U,EAAE,WAAW1D,EAAGhR,CAAC,CAClH,EAAK,KAAK,mBAAqB,SAASgR,EAAG5Q,EAAGC,EAAGiN,EAAGtN,EAAGE,EAAGuU,EAAG,CACzD,IAAI9D,EAAIK,EAAE,eAAgBQ,EAAI,IAAIuoM,GAAMpoM,EAAI+nM,GAAG,GAAG,EAAG9jM,EAAInB,EAAG87L,EAAK97L,EAAI,EAAGzW,GAAKyW,EAAIvU,GAAK,EAAGnC,EAAGuT,EAAGR,EAAI,EAAGgF,EAAInF,EAAE,YAC5GgpM,GAAG/jM,GAAK,kBAAkB,oBAAoB,EAAG6jM,GAAG,KAAKjoM,EAAE,OAAQ,CAAC,EACpE,GACExT,EAAI4X,EAAI,GAAKjF,EAAE,YAAc,GAAKA,EAAE,YAAcmF,EAAGxE,EAAI,WAAWN,EAAG5Q,EAAGC,EAAGiN,EAAGtN,EAAGhC,CAAC,EAAGsT,GAAK,GAAKR,EAAI,EAAGy/L,EAAKnwM,EAAE,eAAgBoR,EAAE,OAAOpR,CAAC,EAAGo5M,GAAG,UAAUlsM,EAAG,EAAGqE,EAAG,EAAG,GAAG,EAAG8C,EAAI87L,EAAK,GAAIxyM,EAAI0W,EAAIvU,EAAGlC,GAAKyW,EAAIvU,GAAK,IAAMA,EAAIlC,EAAI,GAAID,EAAI0W,EAAIvU,EAAGlC,GAAKyW,EAAIvU,GAAK,EAAG4Q,GAAK,IAAMA,EAAI,EAAG1Q,EAAE,OAAOoR,CAAC,EAAGgoM,GAAG,UAAU7nM,EAAG,EAAGrE,EAAG,EAAG,GAAG,UACrTvP,EAAI,IACX4S,EAAE,YAAcmF,EAAGhF,GAAK,GAAK0oM,GAAG,UAAUhoM,EAAE,OAAQ,EAAGpR,EAAE,OAAQ,EAAG,GAAG,EAAGu5M,GAAGv5M,EAAE,gBAAkBwV,CAAC,CACnG,EAAE,KAAK,cAAgB,SAAS5E,EAAG5Q,EAAG,CACrC,IAAIC,EAAI2Q,EAAE,eACV3Q,EAAE,cAAgBA,EAAE,gBACpB,IAAIiN,EAAIuD,EAAE,aAAaG,CAAC,EACxB3Q,EAAE,cAAgB,EAAGiN,EAAIuD,EAAE,aAAaG,CAAC,EACzC,QAAShR,EAAI,EAAGA,GAAKK,EAAE,gBAAiBL,IAAK,CAC3CK,EAAE,cAAgBL,EAClB,IAAIE,EAAI,IAAI,SAASoN,CAAC,EACtBlN,EAAEJ,CAAC,EAAI0U,EAAE,eAAe1D,EAAG9Q,CAAC,EAAGoN,EAAIpN,EAAE,IAC3C,CACG,EAAE,KAAK,gBAAkB,SAAS8Q,EAAG5Q,EAAGC,EAAGiN,EAAGtN,EAAGE,EAAGuU,EAAG9D,EAAGa,EAAG,CAC5D,IAAIG,EAAIX,EAAE,eAAgB4E,EAAG26L,EAAK,EAAGvyM,EAAI,EAAGD,EAAI,EAChD4T,EAAE,cAAgBA,EAAE,gBACpB,IAAIL,EAAIoD,EAAE,eAAe1D,EAAG,IAAI,SAAS,CAAC,CAAC,EAAIW,EAAE,QACjD,cAAcX,EAAG9Q,CAAC,EAClB,QAAS4Q,EAAI,EAAGA,EAAIa,EAAE,QAASb,IAAK,CAClC,IAAIgF,EAAI7B,EAAE,MAAMjD,EAAG5Q,EAAGuQ,EAAEG,CAAC,EAAGQ,EAAGR,EAAG,CAAC,EACnCa,EAAE,UAAYmoM,GAAG,eAAiB,WAAWnoM,EAAE,QAASb,CAAC,EAAGmD,EAAE,YAAYtD,EAAEG,CAAC,EAAGzQ,EAAEyQ,CAAC,EAAGQ,EAAGwE,CAAC,GAC1F,QAASH,EAAI,EAAGA,EAAIhE,EAAE,aAAc,EAAEgE,EAAG,CACvC,IAAIjE,GAAIC,EAAE,QAAQ,GAAGb,CAAC,EAAE6E,CAAC,EACzBjE,GAAE,YAAcooM,GAAG,YAAcvJ,EAAK,MAAQ,EAAI,KAAK,IAAI,IAAMnwM,EAAE0Q,CAAC,EAAE6E,CAAC,EAAI,GAAG,GAAK,IAAMC,EAAIjE,EAAE,IAAI,YAAc4+L,IAAOA,EAAK,MAAQ,EAAI,KAAK,IAAI,IAAMnwM,EAAE0Q,CAAC,EAAE6E,CAAC,EAAI,GAAG,GAAK,IAAMC,EAAIjE,EAAE,IAAI,kBAAoB4+L,GAAK5+L,EAAE,cAAgB,KAAK,IACxO,GACAiE,EAAI,EACd,EAAW,gBAAgBjE,EAAGD,EAAC,EAAGF,EAAEV,CAAC,EAAE6E,CAAC,EAAI1B,EAAE,UACpCjD,EACA1D,EAAEwD,CAAC,EAAE6E,CAAC,EACNjE,GACA1R,EAAE8Q,CAAC,EAAE6E,CAAC,CAChB,EAAWnE,EAAEV,CAAC,EAAE6E,CAAC,GAAK,IAAM3X,EAAI,GAAIyW,EAAE3D,CAAC,EAAE6E,CAAC,EAAI,IAAK5X,GAAK4S,EAAEG,CAAC,EAAE6E,CAAC,CAC9D,CACA,CACI,QAAS7E,EAAI,EAAGA,EAAIa,EAAE,QAASb,IAC7B,QAAS6E,EAAI,EAAGA,EAAIhE,EAAE,aAAcgE,IAClC5X,EAAImC,EAAEyR,EAAE,eAAe,IAAMhB,EAAEG,CAAC,EAAE6E,CAAC,GAAKzV,EAAEyR,EAAE,eAAe,EAAGhB,EAAEG,CAAC,EAAE6E,CAAC,GAAK5X,GAAI0W,EAAE3D,CAAC,EAAE6E,CAAC,EAAIhF,EAAEG,CAAC,EAAE6E,CAAC,IAAMlB,EAAE3D,CAAC,EAAE6E,CAAC,EAAIhF,EAAEG,CAAC,EAAE6E,CAAC,GACvH,OAAO3X,CACX,EAAK,KAAK,qBAAuB,SAASgT,EAAG5Q,EAAGC,EAAGiN,EAAG,CAClD,QAAStN,EAAI,EAAGA,EAAIgR,EAAE,QAAShR,IAC7B,QAASE,EAAI,EAAGA,EAAI8Q,EAAE,aAAc9Q,IAAK,CACvC,QAASuU,EAAIzD,EAAE,QAAQ,GAAGhR,CAAC,EAAEE,CAAC,EAAGyQ,EAAIvQ,EAAEJ,CAAC,EAAEE,CAAC,EAAGsR,EAAI,EAAGG,EAAI,EAAGA,EAAI8C,EAAE,SAAU9C,IAC1EhB,EAAEa,GAAG,GAAK,EAAI,KAAQG,EAAIA,EAAImoM,GAAG,QAAUA,GAAG,QAChD,GAAIrlM,EAAE,YAAcqlM,GAAG,WACrB,QAASnoM,EAAI8C,EAAE,SAAU9C,EAAImoM,GAAG,QAASnoM,IACvChB,EAAEa,GAAG,GAAK,EAAI,KAAQG,EAAIA,EAAImoM,GAAG,QAAUA,GAAG,QAASnpM,EAAEa,GAAG,GAAK,EAAI,KAAQG,EAAIA,EAAImoM,GAAG,QAAUA,GAAG,QAASnpM,EAAEa,GAAG,GAAK,EAAI,KAAQG,EAAIA,EAAImoM,GAAG,QAAUA,GAAG,QAChKxsM,EAAEtN,CAAC,EAAEE,CAAC,EAAI,EAAI,KAAK,IACjBG,EAAEL,CAAC,EAAEE,CAAC,EACN,GAAMoN,EAAEtN,CAAC,EAAEE,CAAC,CACb,CACT,CACA,EAAK,KAAK,gBAAkB,SAAS8Q,EAAG5Q,EAAGC,EAAGiN,EAAGtN,EAAGE,EAAG,CACnD,IAAIuU,EAAIzD,EAAE,eAAgBL,EAAI,EAAGa,EAAI,EAAGG,EAAI,EAAGiE,EAC/C,GAAI5E,EAAE,YAAa,CACjByD,EAAE,cAAgB,EAClB,IAAI87L,EAAK,IAAI,SAAS/+L,CAAC,EACvBoE,EAAIlB,EAAE,eAAe1D,EAAGu/L,CAAE,EAAG/+L,EAAI++L,EAAG,KAAMvwM,EAAE,CAAC,EAAI4V,CACvD,KAAW,CACLnB,EAAE,cAAgBA,EAAE,gBACpB,IAAI87L,EAAK,IAAI,SAAS/+L,CAAC,EACvBkD,EAAE,eAAe1D,EAAGu/L,CAAE,EAAG/+L,EAAI++L,EAAG,KAAM,cAAcv/L,EAAGhR,CAAC,EAAG4V,EAAI5V,EAAEyU,EAAE,eAAe,CACxF,CACI,QAASzW,EAAI,EAAGA,EAAIyW,EAAE,QAASzW,IAAK,CAClCiW,EAAE,MAAMjD,EAAG5Q,EAAGF,EAAElC,CAAC,EAAGwT,EAAGxT,EAAG,CAAC,EAAGyW,EAAE,UAAYqlM,GAAG,cAAgB,WAAWrlM,EAAE,QAASzW,CAAC,EACtF,QAASD,EAAI,EAAGA,EAAI0W,EAAE,aAAc,EAAE1W,EAAG,CACvC,IAAIuT,EAAImD,EAAE,QAAQ,GAAGzW,CAAC,EAAED,CAAC,EACzB0W,EAAE,cAAgB,KAAK,IACrB,GACAA,EAAE,IAAI,YAAc,EACrB,EAAE,gBAAgBA,EAAGnD,CAAC,EAAG2C,EAAE,UAC1BjD,EACA3Q,EAAErC,CAAC,EAAED,CAAC,EACNuT,EACAhE,EAAEtP,CAAC,EAAED,CAAC,CAChB,GAAa,IAAM4S,EAAI,GAAIgB,GAAKzR,EAAElC,CAAC,EAAED,CAAC,CACtC,CACA,CACI,QAASC,EAAI,EAAGA,EAAIyW,EAAE,QAASzW,IAC7B,QAASD,EAAI,EAAGA,EAAI0W,EAAE,aAAc1W,IAClC4T,EAAIiE,IAAM1V,EAAElC,CAAC,EAAED,CAAC,GAAK6X,EAAG1V,EAAElC,CAAC,EAAED,CAAC,GAAK4T,GACvC,OAAOhB,CACX,EAAK,KAAK,iBAAmB,SAASK,EAAG5Q,EAAGC,EAAGiN,EAAGtN,EAAGE,EAAG,CACpD,IAAIuU,EAAIzD,EAAE,eAAgBL,EAAI8D,EAAE,QAASjD,EAAGG,EAAGiE,EAAG26L,EAAIvyM,EAAI,EAC1DyW,EAAE,cAAgBA,EAAE,gBACpB,IAAI1W,EAAI,IAAI,SAASC,CAAC,EACtB,IAAKkC,EAAE,CAAC,EAAIwU,EAAE,eAAe1D,EAAGjT,CAAC,EAAGC,EAAID,EAAE,KAAM0W,EAAE,cAAgB,EAAGzW,EAAI6S,EAAE,aAAaG,CAAC,EAAIyD,EAAE,aAAe,EAAGzU,EAAE,CAAC,EAAIhC,GAAKyW,EAAE,QAAUA,EAAE,cAAezW,EAAIgT,EAAE,sBAAwBA,EAAE,UAAY,IAAKyD,EAAE,gBAAkB,IAAMzW,GAAK,MAAOA,GAAKgT,EAAE,eAAgBhT,GAAKyW,EAAE,aAAe,EAAGzW,GAAKyW,EAAE,QAAUA,EAAE,aAAcjD,EAAI,IAAO,KAAQ,GAAKR,EAAE,oBAAsB,GAAK,KAAMQ,EAAI,KAAQA,EAAI,IAAMA,EAAI,IAAMA,EAAI,GAAIG,EAAI,EAAGA,EAAI8C,EAAE,QAAS9C,IAAK,CAC9b,IAAIL,EAAI,EACR,IAAKsE,EAAI,EAAGA,EAAInB,EAAE,aAAcmB,IAAK,CACnC,GAAItI,EAAEqE,CAAC,EAAEiE,CAAC,EAAI,IAAIpE,EAAIxT,CAAC,EAAGoC,EAAEuR,CAAC,EAAEiE,CAAC,EAAI,IAAK,CACvC,IAAI9E,EAAI,KAAK1Q,EAAEuR,CAAC,EAAEiE,CAAC,EAAI,KAAO,GAAG,EAAGE,EAAInF,EAAE,GAAGgB,CAAC,EAAEiE,CAAC,EACjDtI,EAAEqE,CAAC,EAAEiE,CAAC,EAAI,IAAIpE,EAAIxT,CAAC,EAAG8X,EAAE,YAAcgkM,GAAG,YAAchpM,EAAI9S,EAAI,IAAM8S,EAAI9S,EAAI,GAAI8S,EAAI9S,EAAI,EAAI,EAAI8S,EAAI9S,EAAI,EAAI,EAAI8S,EAAI,IAAMA,EAAI,GAAIxD,EAAEqE,CAAC,EAAEiE,CAAC,GAAK9E,CACxJ,CACQxD,EAAEqE,CAAC,EAAEiE,CAAC,EAAI,kBAAkB,uBAAyBtI,EAAEqE,CAAC,EAAEiE,CAAC,EAAI,kBAAkB,sBAAuBtE,GAAKhE,EAAEqE,CAAC,EAAEiE,CAAC,CAC3H,CACM,GAAItE,EAAI,kBAAkB,qBACxB,IAAKsE,EAAI,EAAGA,EAAInB,EAAE,aAAc,EAAEmB,EAChCtI,EAAEqE,CAAC,EAAEiE,CAAC,GAAK,kBAAkB,qBAAsBtI,EAAEqE,CAAC,EAAEiE,CAAC,GAAKtE,CACxE,CACI,GAAImD,EAAE,UAAYqlM,GAAG,aACnB,IAAKnoM,EAAI,EAAGA,EAAI8C,EAAE,QAAS9C,IACzBsC,EAAE,YACA3G,EAAEqE,CAAC,EACHtR,EAAEsR,CAAC,EACH3T,EAAIyW,EAAE,aACN,kBAAkB,oBACnB,EACL,IAAK87L,EAAK,EAAG5+L,EAAI,EAAGA,EAAI8C,EAAE,QAAS9C,IACjC,IAAKiE,EAAI,EAAGA,EAAInB,EAAE,aAAcmB,IAC9BtI,EAAEqE,CAAC,EAAEiE,CAAC,EAAI,kBAAkB,uBAAyBtI,EAAEqE,CAAC,EAAEiE,CAAC,EAAI,kBAAkB,sBAAuB26L,GAAMjjM,EAAEqE,CAAC,EAAEiE,CAAC,EACxH,GAAI26L,EAAKrwM,EAAE,CAAC,EACV,IAAKyR,EAAI,EAAGA,EAAI8C,EAAE,QAAS9C,IACzB,IAAKiE,EAAI,EAAGA,EAAInB,EAAE,aAAcmB,IAC9BtI,EAAEqE,CAAC,EAAEiE,CAAC,GAAK1V,EAAE,CAAC,EAAGoN,EAAEqE,CAAC,EAAEiE,CAAC,GAAK26L,CACnC,CACH,CACA,IAAI2J,IAAKD,IAAIE,IAAKjK,GAAIkK,GAAKD,IAAG,OAC9B,SAASE,KAAK,CACZ,IAAIxpM,EACJ,KAAK,WAAa,SAAS6D,EAAG,CAC5B7D,EAAI6D,CACL,EAAE,KAAK,eAAiB,SAASA,EAAGT,EAAG,CACtC,IAAID,EAAIU,EAAE,eAAgBk7L,EAAIx+L,EAAI4C,EAAE,QAASvB,EAAI5B,EAAE,aAAa6D,CAAC,EACjET,EAAE,MAAQxB,EAAIuB,EAAE,aAAe,GAAKA,EAAE,QACtC,IAAI3C,EAAI,EAAI,IAAM2C,EAAE,QAAU,EAC9BU,EAAE,MAAQ,IAAMk7L,EAAK,EAAI,IAAIl7L,EAAE,MAAQ,KAAOA,EAAE,eAAiB,MAAQ,EAAI,EAAG,GAAKk7L,EAAK,EAAI,KAAMl7L,EAAE,aAAek7L,EAAK,EAAI,IAAI,MAAQl7L,EAAE,eAAiB,MAAQ,EAAI,EAAG,IAAKV,EAAE,QAAU47L,EAAKn9L,EAAGuB,EAAE,QAAU3C,IAAM2C,EAAE,QAAU3C,IAAK2C,EAAE,QAAU,GAAKU,EAAE,qBAAuBV,EAAE,QAAU,GAC9R,IAAIpD,EAAIqD,EAAE,KAAOD,EAAE,QAAU,KAAK,IAAIA,EAAE,SAAUA,EAAE,OAAO,EAC3D,OAAOpD,EAAIg/L,IAAOh/L,EAAIg/L,GAAKwK,GAAGpmM,EAAE,QAAU,GAAK,CAAC,EAAGomM,GAAGpmM,EAAE,SAAW,CAAC,EAAG5C,EAAE,cAAgB,EAAG4C,EAAE,OAAS,OAASA,EAAE,MAAM,UAAYC,EAAE,KAAO,EAAGD,EAAE,MAAM,SAAWA,EAAE,UAAWpD,CACpL,EAAK,KAAK,YAAc,SAAS8D,EAAGT,EAAGD,EAAG47L,EAAI,CAC1C,IAAIx+L,EAAIsD,EAAE,eAAgBjC,EAAGpB,EAAID,EAAE,SAAUR,EAAIQ,EAAE,QACnDw+L,GAAM,IAAMv+L,GAAK4C,GAAI7C,EAAE,gBAAkB,IAAMR,GAAK,IAAMoD,EAAE,KAAOC,EAAG5C,EAAI,GAAKT,EAAI,GAAK6B,EAAIpB,EAAIT,EAAI,EAAI,GAAIoD,EAAE,MAAQvB,EAAGrB,EAAE,iBAAmB,MAAQqB,EAAI,EAAGrB,EAAE,iBAAmB,IAAK,CAACsD,EAAE,mBAAqB,EAAEtD,EAAE,gBAAkB,KAAO4C,EAAE,MAAQ,GAAMC,IAC5P,IAAIw8L,EAAKp/L,EAAID,EAAE,QAAU,EAAI,GAAKC,EAAID,EAAE,QAAU,EAAI,GACtD,OAAOq/L,GAAMh+L,EAAGg+L,EAAK,IAAMA,EAAK,GAAIA,CACrC,EAAE,KAAK,WAAa,SAAS/7L,EAAGT,EAAG,CAClCS,EAAE,UAAYT,EAAE,eAAiBA,EAAE,YACpC,EAAE,KAAK,aAAe,SAASS,EAAGT,EAAG,CACpC,IAAID,EAAG47L,EAAKl7L,EAAE,QACdA,EAAE,UAAYT,EAAIS,EAAE,QACpB,IAAItD,EAAI,EACRw+L,EAAG,eAAiB,EAAGA,EAAG,cAAgB,GAAI57L,EAAIU,EAAE,SAAW,IAAM,IAAMtD,GAAK4C,GAAIA,EAAIU,EAAE,SAAWtD,EAAIsD,EAAE,QAASV,EAAI,IAAM5C,GAAK4C,GACnI,CACE,IAAIvB,EAAI,KAAK,IAAIm9L,EAAG,gBAAkB,EAAGx+L,CAAC,EAAI,EAC9Cw+L,EAAG,eAAiB,EAAIn9L,EAAGrB,GAAK,EAAIqB,EAAGiC,EAAE,UAAY,EAAIjC,EAAGm9L,EAAG,iBAAmBn9L,CACxF,CACIm9L,EAAG,gBAAkBx+L,EAAGsD,EAAE,UAAYtD,CACvC,CACH,CACA,IAAIkpM,IAAKD,IACT,SAASE,KAAK,CACZ,IAAI1pM,EAAI,yBAA0B6D,EAAI,EAAGT,EAAI,GAAID,EAAI,EAAG47L,EAAK,EAAGx+L,EAAI,GACpE,KAAK,eAAiB,UAAW,CAC/B,OAAOsD,EAAI,IAAMT,EAAI,IAAMD,CAC/B,EAAK,KAAK,oBAAsB,UAAW,CACvC,OAAOU,EAAI,IAAMT,EAAI,IAAMD,CAC/B,EAAK,KAAK,wBAA0B,UAAW,CAC3C,MAAO,OAASU,EAAI,IAAMT,EAAI,GAClC,EAAK,KAAK,cAAgB,UAAW,CACjC,OAAO27L,EAAK,IAAMx+L,CACtB,EAAK,KAAK,WAAa,UAAW,CAC9B,OAAOP,CACX,EAAK,KAAK,iBAAmB,UAAW,CACpC,MAAO,QACR,CACH,CACA,IAAI2pM,IAAKD,IAAIE,GAAKvK,GAAIwK,IAAKD,GAAG,OAAQlmM,GAAKkmM,GAAG,QAASE,GAAKF,GAAG,WAAYG,IAAKH,GAAG,OAAQnlM,GAAKmlM,GAAG,SAAUI,IAAKJ,GAAG,OACrHK,GAAG,cAAgB,IACnBA,GAAG,aAAe,KAClB,SAASA,IAAK,CACZ,IAAIjqM,EAAG6D,EAAGT,EACV,KAAK,WAAa,SAASjW,EAAGD,EAAGuT,EAAG,CAClCT,EAAI7S,EAAG0W,EAAI3W,EAAGkW,EAAI3C,CACnB,EACD,IAAI0C,EAAI,EAAG47L,EAAK,EAAGx+L,EAAI,EAAGqB,EAAI,EAAGpB,EAAIypM,GAAG,cAAelqM,EAAIkqM,GAAG,aAAcrK,EAAKp/L,EAAI,EAAI,EAAI,EAAI,EAAI,EAAGE,EAAIk/L,EAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAGv9M,EAAI,IAAKue,EAAI,GAAI4+L,EAAK,GAAI96L,EAAI,KAAM+6L,EAAK,OAAQt5L,EAAI,OAAQhG,EAAI,CACnO,EACA,MACA,MACA,IACA,MACA,IACA,IACA,MACA,MACA,KACA,KACA,MACA,KACA,MACA,MACA,KACA,MACA,KACA,KACA,MACA,KACA,MACA,MACA,KACA,KACA,MACA,MACA,KACA,MACA,KACA,KACA,MACA,MACA,KACA,KACA,MACA,KACA,MACA,MACA,KACA,KACA,MACA,MACA,IACA,MACA,KACA,KACA,MACA,KACA,MACA,MACA,KACA,MACA,KACA,KACA,MACA,MACA,KACA,KACA,MACA,KACA,MACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,MACA,KACA,MACA,MACA,KACA,KACA,MACA,MACA,KACA,MACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACD,EACD,SAAS5Q,EAAEpC,EAAGD,EAAG,CACf,GAAIC,EAAE,gBAAiBA,EAAE,KAAOD,EAAGC,EAAE,OAAQ,EAAEA,EAAE,KAAOA,EAAE,QAAUA,EAAE,IAAMA,EAAE,OAASA,EAAE,IAAIA,EAAE,GAAG,EAAIA,EAAE,IAAKA,EAAE,MAAOA,EAAE,KAAO,GAAIA,EAAE,KAAOA,EAAE,MAAO,CACnJ,QAASsT,EAAI,EAAGA,EAAItT,EAAE,KAAMsT,GAAK,EAC/BtT,EAAE,IAAIsT,EAAI,CAAC,EAAItT,EAAE,IAAIsT,CAAC,EACxBtT,EAAE,MAAQ,EAAGA,EAAE,KAAO,CA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GAAI,CAAC,QAAS,OAAQ,OAAO,EAC7B,EAAG,CAAC,QAAS,KAAM,OAAO,EAC1B,IAAK,CACH,QACA,MACA,SACA,QACA,SACA,SACA,KACA,MACA,QACA,QACA,SACA,SACA,OACD,EACD,MAAO,CAAC,QAAS,KAAM,OAAO,EAC9B,OAAQ,CAAC,QAAS,KAAM,OAAO,EAC/B,GAAI,CAAC,QAAS,MAAO,KAAM,QAAS,MAAM,EAC1C,GAAI,CAAC,QAAS,MAAO,KAAM,QAAS,OAAQ,QAAS,UAAU,EAC/D,EAAG,CAAC,QAAS,QAAS,MAAO,KAAM,OAAO,EAC1C,IAAK,CAAC,QAAS,KAAM,OAAO,EAC5B,KAAM,CAAC,QAAS,KAAM,OAAO,EAC7B,OAAQ,CAAC,QAAS,KAAM,OAAO,EAC/B,MAAO,CAAE,EACT,IAAK,CAAC,QAAS,KAAM,OAAO,EAC5B,IAAK,CAAC,QAAS,KAAM,OAAO,EAC5B,MAAO,CACL,QACA,UACA,SACA,cACA,cACA,QACA,MACA,QACA,KACA,QACA,QACA,OACD,EACD,MAAO,CAAC,QAAS,KAAM,OAAO,EAC9B,GAAI,CACF,OACA,QACA,UACA,QACA,UACA,MACA,SACA,KACA,OACA,UACA,QACA,QACA,SACA,OACD,EACD,MAAO,CACL,QACA,UACA,OACA,UACA,QACA,KACA,QACA,QACD,EACD,GAAI,CACF,OACA,QACA,UACA,QACA,UACA,MACA,SACA,KACA,OACA,UACA,QACA,QACA,SACA,OACD,EACD,MAAO,CACL,QACA,UACA,OACA,UACA,QACA,KACA,QACA,QACD,EACD,GAAI,CACF,QACA,UACA,OACA,UACA,QACA,MACA,KACA,QACA,QACD,EACD,EAAG,CAAC,QAAS,KAAM,OAAO,EAC1B,GAAI,CAAC,QAAS,MAAO,KAAM,OAAO,CACpC,EAAGD,IAAI,CACL,SACA,SACA,WACA,QACA,WACA,UACA,KACF,EAAGD,IAAI,CACL,UACA,aACA,wBACA,kBACA,mBACA,mBACA,oBACA,sBACA,wBACA,wBACA,oBACA,sBACA,sBACA,kBACA,SACA,gBACA,sBACA,4BACA,6BACA,sBACA,sBACA,kBACA,eACA,cACA,oBACA,oBACA,oBACA,gBACA,eACA,qBACA,qBACA,qBACA,iBACA,eACA,aACA,mBACA,yBACA,0BACA,mBACA,mBACA,eACA,aACA,cACA,eACA,eACA,eACA,QACA,QACA,eACA,cACA,aACA,cACA,oBACA,oBACA,oBACA,cACA,eACA,UACA,YACA,UACA,YACA,cACA,QACA,OACA,cACA,wBACA,eACA,YACA,mBACA,eACA,aACA,iBACA,eACA,0BACA,oBACA,0BACA,yBACA,uBACA,cACA,SACA,oBACA,mBACA,WACA,YACA,cACA,cACA,mBACA,2BACA,mBACA,mBACA,mBACA,iBACA,aACA,cACA,aACA,sBACA,kBACA,SACA,gBACA,cACA,eACA,aACA,gBACA,aACA,YACA,aACA,YACA,iBACA,aACA,kBACA,UACA,UACA,gBACA,gBACA,gBACA,WACA,aACA,aACA,UACA,iBACA,eACA,gBACA,cACA,mBACA,oBACA,oBACA,QACA,cACA,eACA,QACA,cACA,SACA,WACA,QACA,eACA,gBACA,oBACA,cACA,SACA,eACA,aACA,kBACA,iBACA,uBACA,kBACA,wBACA,uBACA,uBACA,wBACA,gBACA,sBACA,sBACA,cACA,eACA,qBACA,mBACA,gBACA,iBACA,0BACA,YACA,iBACA,kBACA,eACA,iBACA,eACA,cACA,uBACA,QACA,aACA,eACA,YACA,eACA,MACF,EACA,SAASmB,IAAEpS,EAAGC,EAAG,CACf,OAAOA,EAAID,EAAE,MAAM,GAAG,EAAE,IAAK9P,GAAMA,EAAE,KAAI,CAAE,EAAE,IAAKA,GAAM,CACtD,MAAM,EAAIA,EAAE,QAAQ,MAAO,IAAM+P,EAAI,GAAG,EAAE,QAAQ,KAAM,IAAMA,EAAI,GAAG,EACrE,OAAO,EAAE,YAAa,EAAC,WAAW,MAAM,EAAI,IAAMA,EAAI,IAAM,EAAE,UAAU,CAAC,EAAI,IAAMA,EAAI,IAAM,CACjG,CAAG,EAAE,KAAK,GAAG,EAAID,CACjB,CACA,SAASiS,IAAEjS,EAAGC,EAAG/P,EAAG,CAClB,OAAO8P,EAAE,KAAM,EAAC,QAAQ,uBAAwB,EAAE,EAAE,QAAQ,0BAA2B,CAAC,EAAGD,IAAM7P,EAAI,QAAQ,UAAUA,EAAE,UAAU6P,CAAC,CAAC,CAAC,CAAC,KAAOE,EAAE,SAASF,EAAE,YAAW,EAAG,MAAM,GAAG,EAAE,CAAC,CAAC,EAAI,EAAI,EAAE,CAClM,CACA,SAASsS,GAAErS,EAAGC,EAAG/P,EAAG,EAAG6P,EAAG,CACxB,GAAI,CAACC,EACH,OACF,MAAMF,EAAI,CAAE,EACZ,QAASlC,EAAI,EAAGA,EAAIoC,EAAE,OAAQpC,IAAK,CACjC,MAAM4S,EAAIxQ,EAAEpC,CAAC,EACbkC,EAAE,KAAK0Q,CAAC,CACZ,CACE,UAAW5S,KAAKkC,EACd,GAAI5P,EAAE,SAAS0N,CAAC,EAAG,CACjB,MAAM4S,EAAIxQ,EAAE,iBAAiBpC,CAAC,EAC9BoC,EAAE,YAAYpC,EAAGqU,IAAEzB,EAAGvQ,EAAGF,CAAC,EAAG,EAAIC,EAAE,oBAAoBpC,CAAC,EAAI,MAAM,CACnE,MACCoC,EAAE,eAAepC,CAAC,CACxB,CACA,SAAS2T,GAAEvR,EAAGC,EAAG/P,EAAG,EAAG6P,EAAGD,EAAG,CAC3BE,EAAE,aAAeoS,IAAEpS,EAAE,aAAcC,CAAC,EAAGoS,GAAErS,EAAE,MAAO9P,EAAG,EAAG6P,EAAGD,CAAC,CAC9D,CACA,MAAMwR,GAAI,CAAC,OAAQ,QAAS,QAAQ,EACpC,SAASkC,IAAExT,EAAG,CAAE,gBAAiBC,EAAI,GAAI,qBAAsB/P,EAAG,yBAA0B,EAAG,GAAI6P,EAAI,OAAS,OAAO,aAAa,GAAG,IAAI,MAAM,EAAE,EAAE,KAAK,MAAM,EAAE,IAAI,IAAM,KAAK,SAAW,GAAK,GAAK,EAAE,CAAC,EAAG,eAAgBD,EAAIwR,GAAG,qBAAsB1T,EAAIqT,IAAG,oBAAqBT,EAAI,GAAI,UAAWD,EAAI,IAAM,CAChT,IAAIa,EAAG2B,EAAGc,EAAGhD,EAAGyD,EAChB/D,IAAMxQ,EAAI,IACV,MAAM7H,EAAI,IAAI,UAAS,EAAG,gBAAgB8H,EAAG,WAAW,EACxDF,EAAI,MAAM,QAAQA,CAAC,EAAIA,EAAE,IAAKD,GAAMA,EAAE,YAAW,CAAE,EAAIyR,GACvD,MAAM,EAAIpZ,EAAE,mBAAmBA,EAAE,gBAAiB,WAAW,YAAY,EACzE,IAAIiV,EACJ,KAAOA,EAAI,EAAE,SAAU,IACpBiE,EAAIjE,EAAE,aAAe,MAAQiE,EAAE,YAAYjE,CAAC,EAC/C,MAAM2I,EAAI,CAAC,GAAG5E,GAAC,EACfjR,GAAK6V,EAAE,KAAK,OAAO,EAAG5d,EAAE,iBAAiB4d,EAAE,KAAK,IAAI,CAAC,EAAE,QAASjW,GAAMA,EAAE,OAAM,CAAE,EAAG3H,EAAE,iBAAiB,cAAc,EAAE,QAAS2H,GAAM,CACnI3H,EAAE,KAAK,YAAY2H,CAAC,CACxB,CAAG,EACD,MAAM8Q,EAAI,GAAI6E,EAAItd,EAAE,mBAAmBA,EAAE,KAAM,WAAW,aAAc,CACtE,WAAY,IAAM,WAAW,aACjC,CAAG,EACD,KAAOiV,EAAIqI,EAAE,YAAc,CACzB,MAAM3V,EAAIsN,EAAGsD,EAAI5Q,EAAE,QAAQ,YAAa,EACxC,GAAI,EAAE4Q,IAAM,QAAUA,IAAM,QAAS,CACnC,GAAIxQ,EAAG,CACL,GAAIkN,EAAE,YAAa,CACjB,MAAMtL,EAAI3J,EAAE,eAAeiV,EAAE,WAAW,GACvC4F,EAAI5F,EAAE,aAAe,MAAQ4F,EAAE,aAAalR,EAAGsL,CAAC,CAClD,MACE0G,EAAI1G,EAAE,aAAe,MAAQ0G,EAAE,YAAY1G,CAAC,EAC/C,QACR,CACM,GAAIsD,KAAKU,GAAG,CACV,MAAMtP,EAAIsP,GAAEV,CAAC,EACb,UAAW7Q,KAAKC,EAAE,kBAAmB,EACnC,GAAI,CAACgC,EAAE,SAASjC,CAAC,EACfC,EAAE,gBAAgBD,CAAC,UACZA,IAAM,SAAW,CAAC2Q,EACzB1Q,EAAE,aAAaD,IAAKiR,EAAIhR,EAAE,aAAaD,CAAC,IAAM,KAAO,OAASiR,EAAE,MAAM,GAAG,EAAE,IAAK3Q,GAAMH,EAAI,IAAMG,CAAC,EAAE,KAAK,GAAG,IAAM,EAAE,UAC5GN,IAAM,MAAQ,CAAC2Q,EACtB1Q,EAAE,aAAaD,EAAGG,EAAI,KAAOF,EAAE,aAAaD,CAAC,GAAK,GAAG,UAC9CA,IAAM,QAAUA,IAAM,MAAO,CACpC,MAAMM,EAAIL,EAAE,aAAaD,CAAC,GAAK,GAC/BA,IAAM,QAAU1P,EAAI2P,EAAE,aAAaD,EAAG1P,EAAEgQ,CAAC,CAAC,EAAIN,IAAM,OAAS,EAAIC,EAAE,aAAaD,EAAG,EAAEM,CAAC,CAAC,EAAIJ,EAAE,SAASI,EAAE,YAAa,EAAC,MAAM,GAAG,EAAE,CAAC,CAAC,GAAKL,EAAE,gBAAgBD,CAAC,CACvK,CACQyS,GAAExS,EAAE,MAAOC,EAAGlC,EAAG4S,EAAG,CAAC,EAAGC,IAAM,MAAQ5Q,EAAE,aAAa,MAAO,qBAAqB,EAAGA,EAAE,aAAa,SAAU,QAAQ,EACtH,MACCA,EAAE,mBAAmB,WAAYA,EAAE,SAAS,EAAG8Q,EAAE,KAAK9Q,CAAC,CAC/D,CACA,CACE,UAAWA,KAAK8Q,EACd,GAAI,CACF,GAAI,EACD2D,EAAIzU,EAAE,aAAe,MAAQyU,EAAE,YAAYzU,CAAC,CACrD,MAAc,CACNA,EAAE,UAAY,EACtB,CACA,MAAY,CACN,GAAI,CACFA,EAAE,OAAQ,CAClB,MAAc,CACd,CACA,CACE,GAAI3H,EAAE,iBAAiB,YAAY,EAAE,QAAS2H,GAAM,CAClD,MAAM4Q,EAAI5Q,EAAGgC,EAAI4O,EAAE,MAAO7Q,EAAI,CAAE,EAChC,GAAI,CAACiC,EAAE,SAAU,CACf4O,EAAE,YAAc,GAChB,MACN,CACI,QAASvQ,EAAI,EAAGA,EAAI2B,EAAE,SAAS,OAAQ3B,IAAK,CAC1C,MAAMqI,EAAI1G,EAAE,SAAS3B,CAAC,EACtB,GAAI,iBAAkBqI,EACpBgJ,GAAEhJ,EAAGxI,EAAGD,EAAGlC,EAAG4S,EAAG,CAAC,EAAG5Q,EAAE,KAAK2I,CAAC,UACtB,aAAcA,GAAK,UAAWA,EAAG,CACxC,MAAMxV,EAAIwV,EAAGqI,EAAI,CAAE,EACnB,QAASF,EAAI,EAAGA,EAAI3d,EAAE,SAAS,OAAQ2d,IAAK,CAC1C,MAAMzgB,EAAI8C,EAAE,SAAS2d,CAAC,EACtBzgB,EAAE,OAASA,EAAE,aAAeshB,GAAEthB,EAAG8P,EAAGD,EAAGlC,EAAG4S,EAAG,CAAC,EAAGI,EAAE,KAAK3gB,CAAC,EACnE,CACQ,KAAO8C,EAAE,SAAS,OAAS,GACzBA,EAAE,WAAW,CAAC,EAChB,UAAW2d,KAAKE,EACd7d,EAAE,WAAW2d,EAAE,QAAS3d,EAAE,SAAS,MAAM,EAC3C6M,EAAE,KAAK7M,CAAC,CAChB,CACA,CACI0d,EAAE,YAAc7Q,EAAE,IAAKM,GAAMA,EAAE,OAAO,EAAE,KAAK;AAAA,CAChD,CACE,GAAGqQ,EACF,OAAOrY,EAAE,KAAK,UAChB,CACE,MAAM2H,EAAI3H,EAAE,cAAc,KAAK,EAC/B,OAAO2H,EAAE,GAAKE,EAAGF,EAAE,UAAY3H,EAAE,KAAK,UAAW2H,EAAE,SACvD,CACA,CACA,SAASuV,IAAEpV,EAAG,CACZ,MAAMC,EAAI,SAAS,cAAc,KAAK,EACtC,OAAOA,EAAE,YAAcD,EAAGC,EAAE,SAC9B,CACA,SAASqS,IAAEtS,EAAGC,EAAG/P,EAAG,CAClB,IAAI,EAAI8P,GAAK,GACb,OAAQ,GAAK,KAAO,OAAS,EAAE,UAAY,GAAKC,IAAM,EAAImV,IAAEnV,CAAC,EAAE,MAAM;AAAA,CACtE,EAAE,IAAKF,GAAM,MAAQA,EAAI,MAAM,EAAE,KAAK;AAAA,CACtC,GAAIyT,IAAE,EAAGtjB,CAAO,CACjB,CACK,MAAC4jB,IAAI,CAAC,WAAW,EAAGS,IAAI,CAAC,OAAO,EAAG5C,GAAoBX,GAAE,CAC5D,OAAQ,SACR,MAAO,CACL,UAAW,CAAE,EACb,KAAM,CAAE,EACR,KAAM,CAAE,EACR,UAAW,CAAE,KAAM,OAAS,EAC5B,YAAa,CAAE,EACf,qBAAsB,CAAE,EACxB,yBAA0B,CAAE,EAC5B,qBAAsB,CAAE,EACxB,eAAgB,CAAE,EAClB,oBAAqB,CAAE,KAAM,OAAO,CACrC,EACD,MAAMhR,EAAG,CACP,MAAMC,EAAID,EAAG,CACX,UAAW9P,EACX,KAAM,EACN,KAAM6P,EACN,UAAWD,EACX,YAAalC,EACb,qBAAsB4S,EACtB,yBAA0BD,EAC1B,eAAgB,EAChB,qBAAsB3O,EACtB,oBAAqB,CAC3B,EAAQ4P,GAAEvR,CAAC,EAAG8Q,EAAIuB,IAAE,EAAGvS,EAAG,CACpB,yBAA0BwQ,EAC1B,qBAAsBC,EACtB,eAAgB,EAChB,oBAAqB,EACrB,qBAAsB5O,CACvB,GAAGkP,EAAI,gCAAkC,mBAAmBC,CAAC,EAC9D,MAAO,CAACJ,EAAG6E,IAAM3X,EAAEiC,CAAC,EAAIjC,EAAEiC,CAAC,GAAKuR,IAAKoE,EAAE,MAAO,CAC5C,IAAK,EACL,MAAOC,GAAE,CAAC7X,EAAE3N,CAAC,CAAC,CAAC,CACrB,EAAO,CACD2mB,EAAE,SAAU,CACV,IAAK/F,EACL,MAAOjT,EAAED,CAAC,CAClB,EAAS,KAAM,EAAG2W,GAAC,CACnB,EAAO,CAAC,GAAKoB,EAAE,GAAI,EAAE,GAAKtE,EAAC,EAAIoE,EAAE,MAAO,CAClC,IAAK,EACL,MAAOC,GAAE,CAAC7X,EAAE3N,CAAC,CAAC,CAAC,EACf,UAAW2N,EAAEkT,CAAC,CACpB,EAAO,KAAM,GAAI+C,GAAC,EAClB,CACA,CAAC,EC1fInP,IAAU,CACb,WAAY,QAAEokN,GAAM,YAAER,EAAa,EACnC,MAAO,CACL,QAAS,CACP,KAAM,OACN,QAAS,EACV,EACD,QAAS,CACP,KAAM,QACN,QAAS,EACV,EACD,oBAAqB,CACnB,KAAM,QACN,QAAS,EACV,CACF,EACD,MAAO,CACL,MAAO,CACL,kBAAmB,GACnB,kBAAmB,GACnB,WAAY,CAAE,EACd,qBAAsB,CAAE,CACzB,CACF,EACD,SAAU,CACR,wBAAyB,CACvB,OAAK,KAAK,QAGH,KAAK,kBAFH,KAAK,QAAQ,SAAS,aAAa,CAG7C,EACD,iBAAkB,CAChB,OAAK,KAAK,QAGH,KAAK,oBAFH,EAGV,CACF,EACD,QAAS,CACP,qBAAsB,CACpB,KAAK,kBAAoB,CAAC,KAAK,iBAChC,EACD,qBAAqB9oN,EAAO,CAG1B,MAAMupN,EAAiBvpN,EAAM,OAAO,UAAY,MAC1CwpN,EAAkBxpN,EAAM,OAAO,QAAQ,GAAG,EAE5CupN,GAAkB,CAACC,GACrB,KAAK,iBAAiBxpN,EAAM,OAAO,GAAG,CAEzC,EACD,iBAAiBuxC,EAAK,CACpB,KAAK,kBAAoB,GACzB,KAAK,WAAa,CAChB,UAAW,QACX,SAAUA,EACV,WAAY,KAAK,MAAM,KAAK,OAAM,EAAK,GAAG,CAC3C,EACD,KAAK,qBAAuB,CAAC,CAAE,GAAG,KAAK,UAAW,CAAC,CACpD,EACD,SAAU,CACR,KAAK,kBAAoB,GACzB,KAAK,oBAAqB,CAC3B,EACD,qBAAsB,CACpB,KAAK,WAAa,CAAE,EACpB,KAAK,qBAAuB,CAAE,CAC/B,CACF,CACH,OA1EA,MAqFoD,MAAM,qBArF1D,MAiGqC,MAAM,kCAjG3C,MAqGmB,MAAM,mJAvBvBpsC,EAoCM,OAnCJ,MA/EJC,IA+EU,qBAAoB,gBACMlB,EAAsB,uCAAyBA,EAAsB,4BAKzFH,EAAO,aACnBoB,EAKM,OA3FV,MAsFiB,4BAAOjB,EAAoB,sBAAAA,EAAA,wBAAApS,CAAA,KACtCgU,EAGE2jN,EAAA,CAFA,MAAM,2FACL,KAAM1lN,EAAO,6BAJlB6tF,IAAAlsF,EAAA,EAAAP,EAAuE,MAAvEjC,IAAuE,eAAhCa,EAAO,WAQtCG,EAAe,qBADvBiB,EAaS,UAzGb,MA8FM,MAAM,iEACL,4BAAOjB,EAAmB,qBAAAA,EAAA,uBAAApS,CAAA,KAEfmS,EAAiB,mBAA7ByB,IAAAP,EAGO,OAHPhC,IAGO,CAFL2C,EAA2CC,EAAA,CAA9B,KAAK,aAAa,KAAK,OAlG5CsS,GAkGmD,MACxCxU,EAAE,yCAEP6B,IAAAP,EAGO,OAHP/B,IAGO,CAFL0C,EAA6CC,EAAA,CAAhC,KAAK,eAAe,KAAK,OAtG9CsS,GAsGqD,MAC1CxU,EAAE,2CAvGbmC,EAAA,OA2GY/B,EAAiB,uBADzBsB,EAOE0jN,EAAA,CAjHN,MA4Gc,KAAMhlN,EAAiB,kBA5GrC,gBAAAH,EAAA,KAAAA,EAAA,GAAAO,GA4GoBJ,EAAiB,kBAAAI,GAC9B,WAAYJ,EAAU,WACtB,kBAAiBA,EAAoB,qBACrC,QAAOC,EAAO,QACd,QAAOA,EAAO,8EAhHrB8B,EAAA,8CCgBKd,IAAU,CACb,WAAY,CACV,eAAAwkN,GACA,SAAA/1B,eACAmC,EACD,EACD,MAAO,CACL,QAAS,CACP,KAAM,OACN,SAAU,EACX,EACD,OAAQ,CACN,KAAM,QACN,QAAS,EACV,EACD,eAAgB,CACd,KAAM,OACN,QAAS,KAAO,GACjB,EACD,oBAAqB,CACnB,KAAM,OACN,QAAS,KAAO,GACjB,EACD,WAAY,CACV,KAAM,QACN,QAAS,EACV,CACF,EACD,MAAO,CAAC,OAAQ,QAAS,SAAS,EAClC,OAAQ,CACN,KAAM,CAAE,aAAAzD,CAAe,EAAE1hD,GAAqB,EAC9C,MAAO,CACL,aAAA0hD,CACD,CACF,EACD,MAAO,CACL,MAAO,CACL,0BAA2B,GAC3B,gBAAiB,EAClB,CACF,EACD,SAAU,CACR,GAAGloI,GAAW,CACZ,WAAY,sBACZ,iBAAkB,qBACpB,CAAC,EACD,kBAAmB,CACjB,OAAO,KAAK,aAAa,KAAK,cAAc,CAC7C,EACD,gBAAiB,CACf,OAAO,KAAK,QAAQ,iBAAmB,KAAK,QAAQ,cACrD,EACD,WAAY,CACV,OAAO,KAAK,QAAQ,EACrB,EACD,gBAAiB,CACf,OAAO,KAAK,QAAQ,OACrB,EACD,mBAAoB,CAClB,OAAO8gD,GACL,KAAK,QAAQ,oBAAsB,KAAK,QAAQ,iBACjD,CACF,CACF,EACD,QAAS,CACP,MAAM,mBAAoB,CACxB,MAAM0+G,EACJ,OAAO,eAAe,QACtBh+H,GACEsqG,GAAgB,CACd,GAAI,KAAK,eACT,UAAW,KAAK,gBACjB,EACF,EACH,MAAMzgK,GACJ,GAAGm0L,CAAmB,cAAc,KAAK,SAAS,EACnD,EACD1zL,GAAS,KAAK,GAAG,uCAAuC,CAAC,EACzD,KAAK,YAAa,CACnB,EACD,MAAM,YAAa,CACjB,MAAMT,GAAoB,KAAK,gBAAgB,EAC/CS,GAAS,KAAK,GAAG,+BAA+B,CAAC,EACjD,KAAK,YAAa,CACnB,EACD,yBAA0B,CACxBunE,GAASosH,GAAe,wBAAwB,EAChD,KAAK,0BAA4B,EAClC,EACD,yBAA0B,CACxB,KAAK,0BAA4B,GACjC,KAAK,YAAa,CACnB,EACD,WAAW,EAAG,CACZ,KAAK,MAAM,OAAQ,CAAC,CACrB,EACD,YAAY,EAAG,CACb,KAAK,MAAM,QAAS,CAAC,CACtB,EACD,iBAAkB,CAChB,KAAM,CAAE,OAAAlqJ,CAAK,EAAM,KAAK,WAAW,KAAK,gBAAgB,EACxD,KAAK,OAAO,SAAS,mBAAoB,CACvC,eAAgB,KAAK,eACrB,UAAW,KAAK,UAChB,eAAgBA,GAAU,IAC5B,CAAC,EACD89B,GAASD,GAAoB,mBAAmB,EAChD,KAAK,YAAa,CACnB,EACD,eAAgB,CACd,KAAK,MAAM,UAAW,KAAK,OAAO,EAClC,KAAK,YAAa,CACnB,EACD,iBAAkB,CAChB,KAAK,YAAa,EAClB,KAAK,gBAAkB,EACxB,EACD,MAAM,iBAAkB,CACtB,GAAI,CACF,MAAM,KAAK,OAAO,SAAS,gBAAiB,CAC1C,eAAgB,KAAK,eACrB,UAAW,KAAK,SAClB,CAAC,EACDtnE,GAAS,KAAK,GAAG,qCAAqC,CAAC,EACvD,KAAK,YAAa,CAClB,MAAc,CACdA,GAAS,KAAK,GAAG,mCAAmC,CAAC,CACvD,CACD,EACD,kBAAmB,CACjB,KAAK,gBAAkB,EACxB,CACF,CACH,EAIO/yB,IAAA,OAAM,cAAc,EAuChBC,IAAA,OAAM,gBAAgB,OAhMjC,8JAyJE,OAAAuC,EAAA,EAAAP,EAiGM,MAjGNjC,IAiGM,CA9FIe,EAAA,2BAA6BF,EAAc,mCADnDwB,EASaypE,EAAA,CApKjB,MA6Jc,KAAM/qE,EAAyB,0BA7J7C,gBAAAH,EAAA,KAAAA,EAAA,GAAAO,GA6JoBJ,EAAyB,0BAAAI,GACtC,WAAUH,EAAuB,0BA9JxC,QAAAuB,EAgKM,IAGE,CAHFK,EAGE+jN,EAAA,CAFC,mBAAkB3lN,EAAgB,iBAClC,WAAUA,EAAuB,mEAlK1C,6BAAA8B,EAAA,OAuKY/B,EAAe,qBADvBsB,EAUE6nI,EAAA,CAhLN,MAwKc,KAAMnpI,EAAe,gBAxKnC,gBAAAH,EAAA,KAAAA,EAAA,GAAAO,GAwKoBJ,EAAe,gBAAAI,GAC7B,MAAM,6BACL,WAAUH,EAAgB,iBAC1B,aAAYA,EAAe,gBAC3B,MAAOL,EAAE,0DACT,QAASA,EAAE,4DACX,eAAcA,EAAE,2DAChB,cAAaA,EAAE,qJA/KtBmC,EAAA,OAkLajC,EAAU,WAlLvBiC,EAAA,YAiLIT,EAQE6S,EAAA,CAzLN,MAmLM,KAAK,gBACL,eAAa,YACb,QAAQ,QACR,KAAK,QACL,MAAM,6CACL,QAAOlU,EAAU,iCAGZH,EAAA,SAAWE,EAAyB,+BAD5CsB,EA+DckxL,EAAA,CAzPlB,MA4LO,EAAG1yL,EAAmB,oBAAC,EACvB,EAAGA,EAAmB,oBAAC,EACvB,QAAOG,EAAW,cA9LzB,QAAAuB,EAgMM,IAwDM,CAxDNJ,EAwDM,MAxDNlC,IAwDM,CAtDIY,EAAc,4BADtBwB,EAQE0uL,EAAA,CAzMV,MAmMW,OAAM,0BAAwDpwL,EAAE,0CAIjE,QAAQ,OACP,QAxMX85C,GAwMuBz5C,EAAa,uDAxMpC8B,EAAA,OA2MgBjC,EAAc,yBADtBwB,EAQE0uL,EAAA,CAlNV,MA4MW,OAAM,wBAAsDpwL,EAAE,sCAI/D,QAAQ,OACP,QAjNX85C,GAiNuBz5C,EAAU,oDAjNjC8B,EAAA,OAoNgBjC,EAAc,yBADtBwB,EAQE0uL,EAAA,CA3NV,MAqNW,OAAM,wBAAsDpwL,EAAE,2CAI/D,QAAQ,OACP,QA1NX85C,GA0NuBz5C,EAAe,yDA1NtC8B,EAAA,mBA4NQX,EAAM,oBACNS,EAOEmuL,EAAA,CANC,OAAM,mBAAiDpwL,EAAE,gDAI1D,QAAQ,OACP,QAnOX85C,GAmOuBz5C,EAAiB,0DAGxBH,EAAc,mCADtBwB,EAQE0uL,EAAA,CA7OV,MAuOW,OAAM,0BAAwDpwL,EAAE,0DAIjE,QAAQ,OACP,QA5OX85C,GA4OuBz5C,EAAuB,iEA5O9C8B,EAAA,OA8OkBjC,EAAc,uBAAxB2B,IAAAP,EAAsC,KA9O9C/B,GAAA,GAAA4C,EAAA,OAgPgBjC,EAAc,2BADtBwB,EAQE0uL,EAAA,CAvPV,MAiPW,OAAM,qBAAmDpwL,EAAE,wCAI5D,QAAQ,OACP,QAtPX85C,GAsPuBz5C,EAAe,yDAtPtC8B,EAAA,wCAAAA,EAAA,2ECCKd,IAAU,CACb,WAAY,CAAE,EACd,MAAO,CACL,IAAK,CACH,KAAM,OACN,SAAU,EACX,CACF,EACD,MAAO,CAAC,OAAO,EACf,MAAO,CACL,MAAO,CACL,KAAM,EACP,CACF,EACD,QAAS,CACP,SAAU,CACR,KAAK,KAAO,EACb,EACD,SAAU,CACR,KAAK,KAAO,EACb,CACF,CACH,EAIOhC,IAAA,OAAM,0BAA0B,EA3BvCC,IAAA,QAAAC,IAAA,0DA2BE,OAAAsC,EAAA,EAAAP,EAKM,MALNjC,IAKM,CAJJmC,EAA2D,OAArD,IAAKtB,EAAG,IAAG,4BAAOG,EAAO,SAAAA,EAAA,WAAApS,CAAA,GAAG,uBAAO+R,EAAK,eA5BlD,UAAAV,GAAA,EA6BI2C,EAEakpE,EAAA,CAFO,KAAM/qE,EAAI,KA7BlC,gBAAAH,EAAA,KAAAA,EAAA,GAAAO,GA6B8BJ,EAAI,KAAAI,GAAE,gBAAY,WAAUH,EAAO,UA7BjE,QAAAuB,EA8BM,IAAwD,CAAxDJ,EAAwD,OAAlD,IAAKtB,EAAG,IAAE,MAAM,+BA9B5B,SAAAX,GAAA,qECCK8B,IAAU,CACb,MAAO,CACL,IAAK,CACH,KAAM,OACN,SAAU,EACX,CACF,EACD,MAAO,CAAC,OAAO,EACf,MAAO,CACL,MAAO,CACL,KAAM,EACP,CACF,EACD,SAAU,CACR,KAAK,MAAM,aAAa,QAAU,IAAM,CACtC,KAAK,MAAM,OAAO,CACnB,CACF,EACD,QAAS,CACP,SAAU,CACR,KAAK,KAAO,EACb,EACD,SAAU,CACR,KAAK,KAAO,EACb,CACF,CACH,EAIOhC,IAAA,OAAM,0BAA0B,EA/BvCC,IAAA,QAAAC,IAAA,0DA+BE,OAAAsC,EAAA,EAAAP,EAUM,MAVNjC,IAUM,CATJmC,EAA0E,SAAnE,IAAI,eAAgB,IAAKtB,EAAG,IAAE,SAAM,eAAa,4BAAOG,EAAO,SAAAA,EAAA,WAAApS,CAAA,EAhC1E,SAAAqR,GAAA,EAiCI2C,EAOakpE,EAAA,CAPO,KAAM/qE,EAAI,KAjClC,gBAAAH,EAAA,KAAAA,EAAA,GAAAO,GAiC8BJ,EAAI,KAAAI,GAAG,WAAUH,EAAO,UAjCtD,QAAAuB,EAkCM,IAKE,CALFJ,EAKE,SAJC,IAAKtB,EAAG,IACT,YACA,eACA,MAAM,uCAtCd,SAAAX,GAAA,qECCO8B,IAAU,GAKbhC,IAAA,OAAM,oHAAoH,EAGvHC,IAAA,OAAM,wCAAwC,qDAJnD,OAAAuC,EAAA,EAAAP,EAOM,MAPNjC,IAOM,CAJJ4C,EAA+CC,EAAA,CAAlC,KAAK,iBAAiB,KAAK,OACxCV,EAEI,IAFJlC,IAEI0C,EADChC,EAAE,kGCLNqB,IAAU,CACb,WAAY,CACV,YAAA4kN,IACA,YAAAC,IACA,+BAAAC,GACD,EACD,MAAO,CACL,SAAU,CACR,KAAM,OACN,QAAS,EACV,CACF,EACD,MAAO,CAAC,OAAO,EACf,MAAO,CACL,MAAO,CACL,iBAAkB,GAClB,mBAAoB,EACrB,CACF,EACD,QAAS,CACP,kBAAmB,CACjB,KAAK,iBAAmB,GACxB,KAAK,UAAW,CACjB,EACD,kBAAmB,CACjB,KAAK,mBAAqB,GAC1B,KAAK,UAAW,CACjB,EACD,WAAY,CACV,KAAK,MAAM,OAAO,CACnB,CACF,CACH,qHAKW/lN,EAAgB,iBAKXA,EAAkB,oBAIhCyB,EAAA,EAAAH,EAAyC0kN,GAnD3C,cA8CE1kN,EAIE2kN,EAAA,CAlDJ,MAgDK,IAAKnmN,EAAQ,SACb,QAAOG,EAAgB,kDAR1BqB,EAIE4kN,EAAA,CA7CJ,MA2CK,IAAKpmN,EAAQ,SACb,QAAOG,EAAgB,+ECzCvBgB,IAAU,CACb,WAAY,CAAE,eAAAklN,EAAgB,EAC9B,MAAO,CACL,SAAU,CACR,KAAM,OACN,QAAS,EACV,CACF,EACD,MAAO,CACL,MAAO,CACL,iBAAkB,GAClB,mBAAoB,EACrB,CACF,EACD,QAAS,CACP,kBAAmB,CACjB,KAAK,iBAAmB,EACzB,EACD,kBAAmB,CACjB,KAAK,mBAAqB,EAC3B,CACF,CACH,EAKIlnN,IAAA,OAAM,sHAAsH,wDAD9H,OAAAwC,EAAA,EAAAP,EAKa,aALbjC,IAKa,CAFXmC,EAAsD,cAA7CxB,EAAE,wCACXiC,EAAgEukN,EAAA,CAA/C,YAAWtmN,EAAQ,SAAE,MAAM,8ECjCnCumN,IAAgB,CAC3B,eAAgB,gBAClB,ECAMC,IAA6B93B,GAAqB,CACtD,KAAM,CAAE,iBAAkB+3B,EAAkB,EAAI,EAAG/3B,EAC7C,CAAC/hB,CAAc,EAAI85C,EAEzB,OAAI95C,GAAkBA,EAAe,MAC5B,WAAWA,EAAe,KAAK,YAEjC,EACT,EAEM+5C,IAA4Bh4B,GAAqB,CACrD,KAAM,CAAE,gBAAiBi4B,EAAiB,EAAI,EAAGj4B,EACjD,OAAIi4B,EACK,WAAWA,CAAc,YAE3B,EACT,EAEMC,IAAsB,CAACl4B,EAAmB,CAAE,eAAAm4B,KAAqB,CACrE,KAAM,CAAE,MAAA5iM,EAAO,iBAAkBwiM,EAAkB,EAAI,EAAG/3B,EAC1D,GAAI+3B,EAAgB,OAAQ,CAC1B,MAAMK,EAAkBL,EAAgB,OAAO,CAACpkN,EAAK0kN,KACnD1kN,EAAI0kN,EAAa,IAAI,EAAIA,EAAa,MAC/B1kN,GACN,EAAE,EACL,IAAI2kN,EAAqB,GACzB,OAAA/iM,EAAM,QAAQ7qB,GAAQ,CACpB4tN,GAAsB,QAAQ5tN,EAAK,KAAK,SACxC,MAAMrI,EAAW+1N,EAAgB1tN,EAAK,IAAI,GAAKytN,EAC/CG,GAAsB,WAAWj2N,CAAQ,qBAC/C,CAAK,EACMi2N,CACX,CACE,MAAO,EACT,EAEMC,IAAsB,CAC1Bv4B,EACA,CAAE,YAAAw4B,EAAa,cAAAC,CAAa,IACzB,CACH,KAAM,CACJ,iBAAkB,CAAE,qBAAsBC,EAAiB,EAAI,EAAG,CAAE,CACxE,EAAM14B,EACE,CAAE,OAAA1iB,EAAQ,iBAAAq7C,CAAkB,EAAGD,GAAkB,CAAE,EAEzD,IAAIE,EAAiB,GACrB,GAAIt7C,EAAQ,CACV,KAAM,CAAC4B,EAAe,EAAE,EAAI5iB,GAAa,OACvCu8D,GAAcA,EAAW,QAAUv7C,CACpC,EACDs7C,GAAkB,gBAAgBJ,CAAW,kBAC7CI,GAAkB,MAAM15C,EAAa,KAAK,MAC9C,CACE,OAAIy5C,IACFC,GAAkB,gBAAgBH,CAAa,kBAC/CG,GAAkB,MAAMD,CAAgB,QAEnCC,CACT,EAEaE,IAA4B,CACvCC,EACA/4B,EACA,CACE,eAAAm4B,EAAiB,cACjB,KAAM,CAAE,YAAAK,EAAc,SAAU,cAAAC,EAAgB,UAAY,EAAG,CAAE,CACrE,EAAM,KACD,CAQH,MAAMO,EAPqB,CACzB,aAAclB,IACd,YAAaE,IACb,KAAME,IACN,WAAYK,GACb,EAE4CQ,CAAW,EACxD,OAAIC,GAAqB,OAAOA,GAAsB,WAC7CA,EAAkBh5B,EAAmB,CAC1C,eAAAm4B,EACA,YAAAK,EACA,cAAAC,CACN,CAAK,EAEI,EACT,ECzDKhmN,IAAU,CACb,WAAY,CACV,cAAAwmN,IACA,cAAAC,IACA,WAAAC,IACA,sBAAAC,IACA,kBAAAC,IACA,eAAAC,IACA,eAAAC,IACA,cAAAC,IACA,WAAAC,IACA,YAAAp2B,GACA,eAAAs0B,GACA,oBAAA+B,IACA,QAAApvJ,cACA9T,EACD,EACD,MAAO,CACL,KAAM,CACJ,KAAM,OACN,SAAU,EACX,EACD,SAAU,CACR,KAAM,QACN,QAAS,EACV,EACD,iBAAkB,CAChB,KAAM,QACN,QAAS,EACV,EACD,YAAa,CACX,KAAM,QACN,QAAS,EACV,EACD,mBAAoB,CAClB,KAAM,QACN,QAAS,EACV,EACD,eAAgB,CACd,KAAM,QACN,QAAS,EACV,EACD,qBAAsB,CACpB,KAAM,OACN,QAAS,KAAO,GACjB,EACD,UAAW,CACT,KAAM,OACN,QAAS,KAAO,GACjB,CACF,EACD,OAAQ,CACN,KAAM,CAAE,cAAAynF,CAAgB,EAAEC,GAAqB,EAC/C,MAAO,CACL,cAAAD,CACD,CACF,EACD,MAAO,CACL,MAAO,CACL,gBAAiB,GACjB,kBAAmB,GACnB,oBAAqB,CAAE,EACvB,wBAAyB,EAC1B,CACF,EACD,SAAU,CACR,aAAc,OAEZ,OAAOpyF,EAAA,KAAK,OAAL,YAAAA,EAAW,YAAY,IAAI0rJ,IAAe,CAC/C,GAAGA,EACH,OAAQ,KAAK,KAAK,QAAU,CAAE,EAC9B,WAAY,KAAK,KAAK,YAAc,EACtC,GACD,EACD,iBAAkB,OAEhB,OAAOoiB,GAAwB,IAAI,MAAQ9tK,EAAA,KAAK,OAAL,YAAAA,EAAW,UAAU,GAAK,CACtE,EACD,qBAAsB,CACpB,OACE,KAAK,gBACL,KAAK,KAAK,SACV,KAAK,oBACL,KAAK,eACL,KAAK,sBAER,EACD,qBAAsB,CACpB,KAAM,CACJ,aAAc,CAAE,KAAM+tK,CAAc,EAAM,CAAE,EAC5C,aAAc,CAAE,KAAMC,CAAc,EAAM,CAAE,CAC9C,EAAI,KAAK,kBAAkB,OAAS,CAAE,EAEtC,OAAID,IAIAC,EACKA,EAAgB,QAAQ,MAAO,MAAM,EAGvC,GACR,EACD,qBAAsB,CACpB,OAAI,KAAK,oBAAoB,SAAS,aAAa,EAC1C,IAGJ,KAAK,WAIH,GACR,EACD,SAAU,CAGR,GAAI,KAAK,qBAAuB,KAAK,WACnC,OAAO,KAAK,oBAGd,MAAMC,EAAoBhB,IACxB,KAAK,YACL,KAAK,kBACL,CACE,eAAgB,KAAK,GAAG,0BAA0B,EAClD,KAAM,CACJ,YAAa,KAAK,GAAG,2BAA2B,EAChD,cAAe,KAAK,GAAG,6BAA6B,CACrD,CACH,CACD,EAED,OAAI,KAAK,cAAgB,aAChB,KAAK,GAAG,iCAAiC,EAAIgB,EAIpD,KAAK,cACH,KAAK,KAAK,QACV,KAAK,SACL,KAAK,KAAK,OACZ,EAAIA,CAEP,EACD,oBAAqB,OAKnB,OAAOjuK,EAAA,KAAK,KAAK,qBAAV,YAAAA,EAA8B,WACtC,EACD,oBAAqB,CACnB,OAAO,KAAK,kBAAkB,aAAe,eAC9C,EACD,2BAA4B,CAC1B,MAAO,CACL,KAAM,KAAK,QACX,OAAQ,KAAK,SAAW,KAAK,eAC7B,eAAgB,KAAK,YAAc,KAAK,QACxC,QAAS,CAAC,KAAK,KAAK,SAAW,KAAK,qBAAqB,QAC1D,CACF,EACD,mBAAoB,CAClB,OAAO,KAAK,KAAK,oBAAsB,CAAE,CAC1C,EACD,eAAgB,CACd,OAAO,KAAK,kBAAkB,gBAAkB,EACjD,EACD,QAAS,CACP,OAAO,KAAK,KAAK,QAAU,CAAE,CAC9B,EACD,QAAS,CACP,OAAO,KAAK,KAAK,MAClB,EACD,aAAc,CACZ,OAAO,KAAK,kBAAkB,cAAgB,IAC/C,EACD,SAAU,CACR,OAAO,KAAK,kBAAkB,UAAY,IAC3C,EACD,UAAW,CACT,OAAO,KAAK,kBAAkB,WAAa,IAC5C,EACD,aAAc,CACZ,KAAM,CACJ,KAAM,CAAE,aAAcktK,CAAa,CACrC,EAAI,KACJ,OAAOA,CACR,EACD,oBAAqB,CACnB,MAAMv5G,EAAuB,KAAK,OAAO,uBAAyB,CAAE,EAC9D,CAAE,YAAaqzG,CAAS,EAAMrzG,EACpC,MAAO,uBAAuBqzG,CAAU,EACzC,EACD,aAAc,CACZ,KAAM,CAAE,aAAchzB,CAAY,EAAI,KAAK,KACrCk6B,EAAal6B,IAAgBC,GAAa,SAC1Ck6B,EAAgBn6B,IAAgBC,GAAa,SAC7Cm6B,EACJp6B,IAAgBC,GAAa,UAC7BD,IAAgBC,GAAa,SAC/B,MAAO,CACL,OAAQi6B,EACR,KAAMC,EACN,MAAOC,EACP,mBAAoB,KAAK,gBAGzB,iBAAkB,KAAK,SACvB,SAAU,KAAK,uBAChB,CACF,EACD,WAAY,CACV,OAAO,KAAK,kBAAkB,qBAAuB,KAAK,KAAK,UAChE,EACD,UAAW,CACT,MAAO,CAAC,EAAG,EAAG,CAAC,EAAE,SAAS,KAAK,KAAK,YAAY,CACjD,EACD,YAAa,CACX,OAAO,KAAK,KAAK,eAAiBn6B,GAAa,QAChD,EACD,YAAa,CACX,OAAO,KAAK,KAAK,eAAiBA,GAAa,QAChD,EACD,YAAa,CACX,OAAO,KAAK,KAAK,eAAiBA,GAAa,QAChD,EACD,wBAAyB,CACvB,OAAO,KAAK,cAAgB,cAC7B,EACD,qBAAsB,CACpB,MAAO,CACL,MAAO,KAAK,kBAAkB,MAC9B,GAAI,KAAK,kBAAkB,UAC3B,IAAK,KAAK,kBAAkB,UAC7B,CACF,EACD,gBAAiB,CACf,MAAO,CAAC,EAAE,KAAK,KAAK,aAAe,KAAK,KAAK,YAAY,OAAS,EACnE,EACD,kBAAmB,CACjB,OAAO,KAAK,kBAAkB,OAC/B,EACD,SAAU,CACR,MAAO,CAAC,CAAC,KAAK,KAAK,OACpB,EACD,kBAAmB,CACjB,MAAMjjM,EAAO,KAAK,oBACZ,CAAE,aAAcgjM,CAAY,EAAI,KAAK,KAI3C,OAFEA,IAAgBC,GAAa,UAC7BD,IAAgBC,GAAa,SAE3B,CACE,QAAS,GAAG,KAAK,GAAG,sBAAsB,CAAC,IAAIjjM,CAAI,EACrD,EACA,EACL,EACD,qBAAsB,CACpB,OAAI,KAAK,SACA,KAAK,eAAiB,KAAK,GAAG,0BAA0B,EAE1D,EACR,EACD,WAAY,CACV,MAAO,CACL,KAAM,KAAK,SACX,gBAAiB,CAAC,KAAK,SACvB,aAAc,KAAK,UACnB,YAAa,KAAK,SAClB,WAAY,KAAK,kBAClB,CACF,EACD,aAAc,CACZ,MAAO,CACL,OAAQ,KAAK,SACb,aAAc,KAAK,KAAK,QACxB,iBAAkB,KAAK,cACvB,WAAY,KAAK,mBAAmB,OAAO,EAC3C,WAAY,KAAK,mBAAmB,OAAO,EAC3C,UAAW,KAAK,QAChB,cAAe,KAAK,YACpB,YAAa,KAAK,SAClB,WAAY,KAAK,kBAClB,CACF,EACD,eAAgB,CACd,OAAO,KAAK,kBAAkB,gBAAkB,EACjD,EACD,WAAY,CACV,OAAO,KAAK,KAAK,SAAW81N,GAAe,QAC5C,EACD,UAAW,CACT,OAAO,KAAK,KAAK,SAAWA,GAAe,MAC5C,EACD,aAAc,CACZ,OAAI,KAAK,WAAa,KAAK,SAAiB,GACrC,CAAC,KAAK,OAAO,MAAQ,KAAK,OAAO,OAAS,WAClD,EACD,uBAAwB,CACtB,MAAO,EAAE,KAAK,UAAY,KAAK,WAAa,KAAK,cAClD,EACD,YAAa,CACX,OAAI,KAAK,YAAc,KAAK,WACnB,GAEF,KAAK,UAAY,KAAK,YAAc,KAAK,MACjD,EACD,qBAAsB,CACpB,GAAI,KAAK,YAAc,KAAK,WAAY,CACtC,KAAM,CAAE,KAAA91N,EAAO,KAAK,GAAG,kBAAkB,GAAM,KAAK,QAAU,CAAE,EAChE,OAAOA,CACT,CACA,MAAO,EACR,EACD,oBAAqB,CACnB,OAAO,KAAK,cAAgBg7N,IAAc,cAC3C,CACF,EACD,MAAO,CACL,MAAO,CACL,KAAK,kBAAoB,EAC1B,CACF,EACD,SAAU,CACR,KAAK,kBAAoB,GACzB/4N,GAAQ,GAAGurE,GAAW,uBAAwB,KAAK,gBAAgB,EACnE,KAAK,oBAAqB,CAC3B,EACD,WAAY,CACVvrE,GAAQ,IAAIurE,GAAW,uBAAwB,KAAK,gBAAgB,EACpE,aAAa,KAAK,eAAe,CAClC,EACD,QAAS,CACP,4BAA4B61H,EAAU,CACpC,MAAO,CAAC,QAAS,QAAS,QAAS,gBAAiB,SAAS,EAAE,SAC7DA,CACD,CACF,EACD,mBAAmBnjM,EAAM,CACvB,OAAI,KAAK,gBAAkB,KAAK,KAAK,YAAY,OAAS,EACjD,KAAK,uBAAuB,KAAK,KAAMA,CAAI,EAE7C,EACR,EACD,uBAAuBm9N,EAAan9N,EAAM,CACxC,GAAI,CACF,KAAM,CAAE,YAAAm0N,EAAc,CAAC,CAAE,EAAE,EAAIgJ,EACzB,CAAE,UAAWh6B,GAAagxB,EAAY,CAAC,EAC7C,OAAOhxB,IAAanjM,GAAQ,CAAC,KAAK,iBAClC,OAAO+N,EAAK,CACZwtG,UAAkB,2BAA4B,CAC5C,YAAA4hH,EACA,KAAAn9N,EACA,kBAAmB,KAAK,iBAC1B,CAAC,EAEDw7G,GAAwBztG,CAAG,EACpB,EACT,CACD,EACD,wBAAyB,CACvB,KAAK,gBAAkB,CAAC,KAAK,eAC9B,EACD,MAAM,kBAAmB,CACvB,MAAM,KAAK,OAAO,SAAS,sBAAuB,KAAK,IAAI,CAC5D,EACD,kBAAmB,CACjB,KAAK,kBAAoB,EAC1B,EACD,gBAAgB,EAAG,UAEf+gD,EAAA,EAAE,SAAF,MAAAA,EAAU,UAAU,SAAS,wBAC7BC,EAAA,EAAE,SAAF,YAAAA,EAAU,QAAQ,iBAAkB,KACT,eAAe,aAI5C,EAAE,eAAgB,EACd,EAAE,OAAS,eACbi/C,GAASosH,GAAe,yBAAyB,EAEnD,KAAK,oBAAsB,CACzB,EAAG,EAAE,OAAS,EAAE,QAChB,EAAG,EAAE,OAAS,EAAE,OACjB,EACD,KAAK,gBAAkB,GACxB,EACD,kBAAmB,CACjB,KAAK,gBAAkB,GACvB,KAAK,oBAAsB,CAAE,EAAG,KAAM,EAAG,IAAM,CAChD,EACD,eAAgB,CACd,MAAMvF,EAAkB5jI,GAAmB,iBACrC,CAAE,gBAAiB0B,EAAgB,GAAIyqI,CAAM,EAAM,KAAK,KAE9DpsI,GAAa,gBAAgB6jI,EAAiBliI,EAAgByqI,CAAO,EACrEr7N,GAAQ,KAAKurE,GAAW,wBAAyB,KAAK,IAAI,CAC3D,EACD,qBAAsB,CACpB,GAAI,OAAO,KAAK,OAAO,MAAM,SAAS,IAAM,OAAO,KAAK,KAAK,EAAE,EAC7D,OAGF,KAAK,wBAA0B,GAC/B,MAAM+vJ,EAAkB,IACxB,KAAK,gBAAkB,WAAW,IAAM,CACtC,KAAK,wBAA0B,EAChC,EAAEA,CAAe,CACnB,CACF,CACH,EAzbA3pN,IAAA,kBAucQ,MAAM,8BAvcd,kBAwfU,MAAM,yCAxfhB,kBA2iBQ,MAAM,gBA3iBdM,IAAA,oBA6jBsC,MAAM,4YA9HlCU,EAAmB,yBAD3BiB,EA2IK,MAzkBP,MAgcK,GAAE,UAAYpB,EAAI,KAAC,EAAE,GACtB,MAjcJqB,GAAA,CAicU,qBAAoB,CACjBlB,EAAW,iBAEpBmB,EAwHM,OAxHA,MApcVD,GAociBlB,EAAS,aAEZA,EAAQ,WAAKA,EAAe,kBAAKH,EAAc,gBADvD2B,IAAAP,EAYM,MAZNhC,IAYM,IARJ2C,EAOEyjD,EAAA,CALA,SACA,MACA,QACA,KAAK,uBACJ,QAAOrlD,EAAgB,0CALLL,EAAE,oCAAX,WAAV,EAAgD,QA1c1DmC,EAAA,OAkdMX,EAoFM,OApFA,MAldZD,GAkdmBlB,EAAW,aAAG,cAAWJ,EAAA,KAAAA,EAAA,GAAAO,GAAEH,EAAe,gBAACG,CAAM,KAC5DyB,EAKEgnN,EAAA,CAJC,mBAAkB5oN,EAAiB,kBAAC,MACpC,GAAIA,EAAmB,oBAAC,GACxB,IAAKA,EAAmB,oBAAC,IACzB,cAAaA,EAAU,kEAECA,EAAQ,cAAnCqB,EAA6DwnN,EAAA,CAzdrE,MAyd8C,YAAW7oN,EAAQ,iCAzdjE8B,EAAA,OA2dgB9B,EAAkB,oBAAIH,EAAoB,qBAAC,cADnDwB,EAKEynN,EAAA,CA/dV,MA4dW,QAASjpN,EAAS,UAClB,eAAcA,EAAI,KAAC,aACnB,yBAAwBG,EAAc,6EA9djD8B,EAAA,OAgemB9B,EAAa,eAAxBwB,IAAAP,EAUM,MA1ed/B,IAAA,CAie0BW,EAAA,kBAAoBA,EAAW,aAA/C2B,EAAA,EAAAP,EAEWQ,IAnerB,QAAA0S,GAAAxS,EAkeehC,EAAE,2DAEcE,EAAgB,kBAArC2B,EAAA,EAAAP,EAEWQ,IAterB,QAAA0S,GAAAxS,EAqeehC,EAAE,2DAEP6B,EAAA,EAAAP,EAEWQ,IAzerB,QAAA0S,GAAAxS,EAweehC,EAAE,oDAIIE,EAAA,KAAK,aADlBwB,EAKE0nN,EAAA,CAhfV,MA6eW,QAAS/oN,EAAO,QAChB,WAAUA,EAAkB,mBAC5B,wBAAuBA,EAAmB,6EA/erD8B,EAAA,OAifQF,EAIEonN,EAAA,CAHC,aAAYnpN,EAAI,KAAC,GACjB,qBAAoBG,EAAiB,kBACrC,WAAUH,EAAI,KAAC,iEAGVG,EAAA,WAAaA,EAAc,oBADnCiB,EAKO,OALP9B,IAKOwC,EADFhC,EAAE,8CA1ffmC,EAAA,OA4foB,CAAA9B,EAAA,WAAaA,EAAc,gBAAvCwB,IAAAP,EAyBM,MArhBd7B,IAAA,EA6fUoC,EAAA,IAAAP,EAuBMQ,GAphBhB,KAAAC,GA6foC1B,EAAW,YAAzB8lM,QAAZ7kM,EAuBM,OAvBkC,IAAK6kM,EAAW,KAE9C9lM,EAAkB,wBAD1BqB,EAIE8kN,EAAA,CAlgBd,MAggBe,YAAWrgB,EAAW,SACtB,QAAO9lM,EAAgB,mDAGbA,EAA2B,4BAAC8lM,EAAW,SAAS,OAD7DzkM,EAIE4nN,EAAA,CAvgBd,MAqgBe,WAAYnjB,EACZ,QAAO9lM,EAAgB,oDAGb8lM,EAAW,YAAS,gBADjCzkM,EAKE6nN,EAAA,CA7gBd,MA0gBe,SAAUpjB,EAAW,gBACrB,UAAWA,EAAW,iBACtB,KAAMA,EAAW,yDAGPA,EAAW,YAAS,eADjCzkM,EAIE8nN,EAAA,CAlhBd,MAghBe,KAAMtpN,EAAI,KAAC,QACX,eAAcimM,EAAW,sDAE5BzkM,EAAgD+nN,EAAA,CAnhB5D,MAmhBgC,IAAKtjB,EAAW,wCAnhBhDhkM,EAAA,OAshBQF,EAeEynN,EAAA,CAdC,GAAIxpN,EAAI,KAAC,GACT,OAAQA,EAAI,KAAC,OACb,eAAcG,EAAW,YACzB,iBAAgBA,EAAmB,oBACnC,cAAaA,EAAO,UACpB,aAAYH,EAAQ,SACpB,wBAAuBA,EAAkB,mBACzC,WAAUG,EAAkB,mBAC5B,aAAYH,EAAI,KAAC,QACjB,eAAcA,EAAI,KAAC,aACnB,iBAAgBG,EAAM,OACtB,YAAWH,EAAI,KAAC,UAChB,WAAUA,EAAI,KAAC,SACf,aAAYG,EAAS,oNAGXA,EAAS,eAAxBqB,EAAwCy3D,EAAA,CAviB9C,MAuiBgC,KAAK,UAviBrCh3D,EAAA,OAyiBc9B,EAAU,WADlB0tF,IAAAlsF,EAAA,EAAAP,EAmBM,MAnBN5B,IAmBM,CAdJuC,EAIEqS,EAAA,CAHC,IAAKjU,EAAM,OAAC,UACZ,SAAUA,EAAmB,oBAC9B,KAAK,mCAGCH,EAAA,UAAYG,EAAU,gBAD9BiB,EAQI,KA1jBZ,MAojBU,MAAM,yBACL,KAAMjB,EAAkB,mBACzB,OAAO,SACP,IAAI,kCAEDA,EAAM,OAAC,IAAI,EAzjBxB,EAAAV,GAAA,GAAAwC,EAAA,cA0iBwB9B,EAAgB,wBAAtB,MAAV,EAAiC,KA1iBzC8B,EAAA,WA6jBe9B,EAAqB,uBAAhCwB,IAAAP,EAWM,MAXNzB,IAWM,CATIQ,EAAA,WAAaA,EAAgB,sBADrCqB,EASEkxL,EAAA,CAvkBR,MAgkBS,wBAAuBxyL,EAAmB,oBAC1C,UAASA,EAAe,gBACxB,kBAAiBC,EAAyB,0BAC1C,QAASH,EAAI,KACb,OAAMG,EAAe,gBACrB,QAAOA,EAAgB,iBACvB,UAAUA,EAAa,uHAtkBhC8B,EAAA,UAAAA,EAAA,WAAA9C,GAAA,GAAA8C,EAAA,0CCAawnN,GAAgB,CAC3B,SAAU,EACV,SAAU,EACV,SAAU,EACV,SAAU,CACZ,EAEaC,GAAmB,CAC9B,KAAM,OACN,MAAO,QACP,SAAU,WACV,QAAS,UACT,IAAK,MACL,MAAO,QACP,SAAU,WACV,MAAO,QACP,YAAa,aACf,EAEaC,GAAe,CAC1B,QAAS,UACT,KAAM,OACN,UAAW,WACb,EAEaC,GAAc,CACzB,KAAM,OACN,MAAO,QACP,OAAQ,QACV,EAEavI,GAAiB,CAC5B,KAAM,OACN,UAAW,YACX,KAAM,OACN,OAAQ,SACR,SAAU,UACZ,EAEawI,GAAmB,CAC9B,MAAO,QACP,MAAO,QACP,MAAO,QACP,KAAM,OACN,SAAU,WACV,SAAU,WACV,MAAO,QACP,cAAe,gBACf,QAAS,UACT,QAAS,SACX,EAEatD,GAAgB,CAC3B,KAAM,OACN,WAAY,aACZ,eAAgB,iBAChB,YAAa,cACb,aAAc,eACd,MAAO,QACP,KAAM,OACN,QAAS,UACT,eAAgB,iBAChB,WAAY,aACZ,aAAc,eACd,QAAS,SACX,EAGEsD,GAAiB,MACjBA,GAAiB,MACjBA,GAAiB,MACjBA,GAAiB,QClEnB,MAAMC,GAAiB,OAAO,gBAAgB,EA4GvC,SAASC,IAAoB,CAClC,MAAMtzN,EAAUkjE,GAAOmwJ,GAAgB,IAAI,EAC3C,GAAIrzN,IAAY,KACd,MAAM,IAAI,MAAM,sDAAsD,EAGxE,MAAMuzN,EAAyBjtI,GAAa,4BAA4B,EAClEktI,EAAiCr5L,EAAS,IAAM,CACpD,MAAMgvL,EAAcoK,EAAuB,MAAM,OAAO/jB,GACtD,CACE4jB,GAAiB,MACjBA,GAAiB,MACjBA,GAAiB,QACjBA,GAAiB,KACzB,EAAQ,SAAS5jB,EAAW,SAAS,CAChC,EAED,OAAO/+F,GAAa04G,CAAW,CACnC,CAAG,EAED,MAAO,CAAE,GAAGnpN,EAAS,+BAAAwzN,CAAgC,CACvD,CAEO,SAASC,IAAsBzzN,EAAS,CAC7C8iE,GAAQuwJ,GAAgBrzN,CAAO,CACjC,gIC1HA,KAAM,CAAE,CAAG,EAAGi7B,GAAS,EAEjBy4L,EAAsB,CAC1B,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,oBACA,oBACA,mBACF,EAEMC,EAAclvK,GAAIivK,EAAoB,CAAC,CAAC,EAQ9C/tK,GANmB,IAAM,CAEvB,MAAMtxC,GADeq/M,EAAoB,QAAQC,EAAY,KAAK,EAChC,GAAKD,EAAoB,OAC3DC,EAAY,MAAQD,EAAoBr/M,CAAS,CACnD,EAE0B,IAAK,CAC7B,UAAWilB,EAAM,SAAKsxL,GAAe,SACrC,kBAAmB,EACrB,CAAC,EAED,MAAMgJ,EAAaz5L,EAAS,KACJ,CACpB,CAACywL,GAAe,IAAI,EAAG,iBACvB,CAACA,GAAe,SAAS,EAAG,uBAC5B,CAACA,GAAe,IAAI,EAAG,sBACxB,GAEoBtxL,EAAA,MAAM,CAC5B,EAEKu6L,EAAc15L,EAAS,KACL,CACpB,CAACywL,GAAe,IAAI,EAAG,kBACvB,CAACA,GAAe,SAAS,EAAG,kBAC5B,CAACA,GAAe,IAAI,EAAG,gBACxB,GAEoBtxL,EAAA,MAAM,CAC5B,EAEK8yK,EAAcjyK,EAAS,KACL,CACpB,CAACywL,GAAe,IAAI,EAAG,EAAE,gBAAgB,EACzC,CAACA,GAAe,SAAS,EAAG,EAAE,qBAAqB,EACnD,CAACA,GAAe,IAAI,EAAG,EAAE,wBAAwB,EACjD,CAACA,GAAe,QAAQ,EAAG,EAAE,mBAAmB,CACjD,GAEoBtxL,EAAA,MAAM,CAC5B,kUCzCYw6L,IAAW,IAAM,CAC5B,MAAMrrB,EAAcniH,GAAa,iBAAiB,EAC5CytI,EAAcztI,GAAa,sBAAsB,EAEjD6F,EAAQhyD,EAAS,IAAM,CAC3B,MAAMm2G,EAAUm4D,EAAY,MAAM,SAElC,OAAOr4F,GAAa2jH,EAAY,MAAMzjF,CAAO,EAAG,CAAE,KAAM,GAAM,CAClE,CAAG,EAEK/mD,EAAcpvD,EAAS,IACpBgyD,EAAM,MAAM,WACpB,EAEK6nI,EAAa75L,EAAS,IACnBovD,EAAY,QAAU+tB,GAAY,GAC1C,EAEK28G,EAAmB95L,EAAS,IACzBovD,EAAY,QAAU+tB,GAAY,EAC1C,EAEK48G,EAAoB/5L,EAAS,IAC1BovD,EAAY,QAAU+tB,GAAY,GAC1C,EAEK68G,EAAmBh6L,EAAS,IACzBovD,EAAY,QAAU+tB,GAAY,MAC1C,EAEK88G,EAAiBj6L,EAAS,IACvBovD,EAAY,QAAU+tB,GAAY,IAC1C,EAEK+8G,EAAmBl6L,EAAS,IACzBovD,EAAY,QAAU+tB,GAAY,KAC1C,EAEKg9G,EAAqBn6L,EAAS,IAC3BovD,EAAY,QAAU+tB,GAAY,QAC1C,EAEKi9G,EAAsBp6L,EAAS,IAC5BgyD,EAAM,MAAM,UAAY,EAChC,EAEKqoI,EAAoBr6L,EAAS,IAC1Bk6L,EAAiB,OAASloI,EAAM,MAAM,WAAa,WAC3D,EAEKsoI,EAAiBt6L,EAAS,IACvBk6L,EAAiB,OAASloI,EAAM,MAAM,WAAa,QAC3D,EAEKuoI,EAAsBv6L,EAAS,IAAM,CACzC,KAAM,CAAE,OAAQq9E,EAAS,EAAI,EAAGrrB,EAAM,MACtC,OAAOgoI,EAAiB,OAAS38G,IAAW,KAChD,CAAG,EAEKm9G,EAAcx6L,EAAS,IACpBovD,EAAY,QAAU+tB,GAAY,KAAOo9G,EAAoB,KACrE,EAEKE,EAA2Bz6L,EAAS,IAAM,CAC9C,KAAM,CAAE,OAAQq9E,EAAS,EAAI,EAAGrrB,EAAM,MACtC,OAAOgoI,EAAiB,OAAS38G,IAAW,UAChD,CAAG,EAEKq9G,EAA0B16L,EAAS,IAErCovD,EAAY,QAAU+tB,GAAY,UAClCi9G,EAAoB,QAAU,gBAEjC,EAEKO,EAA6B36L,EAAS,IAExCovD,EAAY,QAAU+tB,GAAY,UAClCi9G,EAAoB,QAAU,SAEjC,EAEKQ,EAAqB56L,EAAS,IAEhCovD,EAAY,QAAU+tB,GAAY,UAClCs9G,EAAyB,KAE5B,EAED,MAAO,CACL,MAAAzoI,EACA,iBAAA8nI,EACA,eAAAG,EACA,WAAAJ,EACA,YAAAW,EACA,mBAAAL,EACA,iBAAAH,EACA,kBAAAD,EACA,mBAAAa,EACA,kBAAAP,EACA,eAAAC,EACA,yBAAAG,EACA,wBAAAC,EACA,2BAAAC,EACA,iBAAAT,CACD,CACH,+HCjIA,KAAM,CACJ,iBAAAJ,EACA,eAAAG,EACA,WAAAJ,EACA,YAAAW,EACA,mBAAAL,EACA,iBAAAH,EACA,kBAAAD,EACA,mBAAAa,EACA,iBAAAV,CACF,EAAIP,IAAU,EAER,CAAE,OAAA7sI,EAAQ,UAAA+wG,EAAW,UAAArxG,EAAW,SAAAokI,EAAU,YAAAjzB,CAAa,EAC3Dw7B,GAAmB,EAEf7F,EAAetzL,EAAS,IAC5B0wL,GAAiBlkI,EAAU,MAAO,eAAe,CACnD,EAEMquI,EAAsB76L,EAAS,IAC/B69J,EAAU,MAAc,GACxBF,EAAY,QAAUk7B,GAAc,UACpCl7B,EAAY,QAAUk7B,GAAc,QAGzC,EAEKiC,EAAS96L,EAAS,IACjB66L,EAAoB,MAGrBX,EAAiB,MAAc,CAAC,CAACtJ,EAAS,MAG5CgK,EAAmB,OACnBZ,EAAiB,OACjBF,EAAiB,OACjBU,EAAY,OACZL,EAAmB,MAEZvJ,EAAS,OAAS9jI,EAAO,QAAU2jI,GAAe,KAIvD,EAAAwJ,EAAe,MAhBoB,EAmBxC,EAEKc,EAAc/6L,EAAS,IACtB66L,EAAoB,MAGvBD,EAAmB,OACnBZ,EAAiB,OACjBQ,EAAY,OACZV,EAAiB,MAEVlJ,EAAS,OAAS9jI,EAAO,QAAU2jI,GAAe,UAGvDsJ,EAAkB,OAASF,EAAW,MACjC/sI,EAAO,QAAU2jI,GAAe,KAErCwJ,EAAe,MACVntI,EAAO,QAAU2jI,GAAe,UAGlC,GAlBgC,EAmBxC,EAEKuK,EAASh7L,EAAS,IACjB66L,EAAoB,MAGvBD,EAAmB,OACnBZ,EAAiB,OACjBF,EAAiB,MAEVlJ,EAAS,OAAS9jI,EAAO,QAAU2jI,GAAe,KAGvDsJ,EAAkB,OAASF,EAAW,MACjC/sI,EAAO,QAAU2jI,GAAe,KAGlC,GAdgC,EAexC,EAEKwK,EAAej7L,EAAS,IACxBg7L,EAAO,MAAcvK,GAAe,KACpCsK,EAAY,MAActK,GAAe,UACzCqK,EAAO,MAAcrK,GAAe,KACpC3jI,EAAO,QAAU2jI,GAAe,OAAeA,GAAe,OAE3DA,GAAe,QACvB,qSC/FD,KAAM,CAAE,QAAAxsN,EAAS,YAAAi3N,EAAa,UAAAC,EAAW,oBAAAC,CAAqB,EAC5DjC,GAAmB,EACf,CAAE,EAAAvtN,CAAG,EAAGk1B,GAAS,EAEjBu6L,EAAiB,CACrB,CAACvC,GAAiB,KAAK,EAAG,kCAC1B,CAACA,GAAiB,OAAO,EACvB,+EACF,CAACA,GAAiB,IAAI,EAAG,+BACzB,CAACA,GAAiB,QAAQ,EAAG,uCAC7B,CAACA,GAAiB,GAAG,EAAG,kCACxB,CAACA,GAAiB,QAAQ,EAAG,kCAC7B,CAACA,GAAiB,KAAK,EAAG,6BAC1B,CAACA,GAAiB,KAAK,EAAG,SAC1B,CAACA,GAAiB,WAAW,EAC3B,4EACJ,EAEMwC,EAAiB,CACrB,CAACtC,GAAY,IAAI,EACf,6DACF,CAACA,GAAY,KAAK,EAChB,8DACF,CAACA,GAAY,MAAM,EAAG,YACxB,EAEMuC,EAAuBv7L,EAAS,KACxB,CACV,CAACg5L,GAAY,IAAI,EAAG,gBACpB,CAACA,GAAY,KAAK,EAAG,cACrB,CAACA,GAAY,MAAM,EAAG,gBACvB,GAEUkC,EAAY,KAAK,CAC7B,EAEK59E,EAAet9G,EAAS,IAAM,CAClC,MAAMw7L,EAAe,CAACH,EAAep3N,EAAQ,KAAK,CAAC,EAEnD,OAAIA,EAAQ,QAAU60N,GAAiB,SACrC0C,EAAa,KAAKF,EAAeJ,EAAY,KAAK,CAAC,EAEnDM,EAAa,KAAK,YAAY,EAGzBA,CACT,CAAC,EAEKC,EAAkB,IAAM,CAC5B7+N,GAAQ,KAAKurE,GAAW,kBAAmB,CACzC,UAAWgzJ,EAAU,MAAM,EAC/B,CAAG,CACH,EAEMO,EAAiB17L,EAAS,IAAM,CACpC,GAAI,CAACm7L,EAAW,MAAO,GAEvB,KAAM,CAAE,QAAAzsL,EAAS,YAAAsgL,CAAa,EAAGmM,EAAU,MAE3C,GAAIzsL,EAAS,OAAOA,EACpB,GAAIsgL,GAAA,MAAAA,EAAa,OAAQ,CACvB,MAAM2M,EAAkB3M,EAAY,CAAC,EAC/BhxB,EAAW29B,EAAgB,UAAYA,EAAgB,UAE7D,OAAO/vN,EAAE,yBAAyBoyL,CAAQ,UAAU,CACxD,CAEE,OAAOpyL,EAAE,sCAAsC,CACjD,CAAC,qkBCzED,MAAMszB,EAAQC,EAOR,CAAE,QAAAl7B,CAAS,EAAGk1N,GAAmB,EAEjCyC,EAAmB57L,EAAS,IAC5B/7B,EAAQ,QAAU60N,GAAiB,SAC9B55L,EAAM,QAGR,IAAI28L,GAAiB38L,EAAM,OAAO,EAAE,gBAC5C,sUCRD,MAAMmxK,EAAW/lJ,GAAI,EAAK,EACpBwxK,EAAcxxK,GAAI,EAAK,EAEvB,CAAE,+BAAA+uK,CAAgC,EAAGF,GAAmB,EAExDxgH,EAAc,IAAM,CACxB03F,EAAS,MAAQ,EACnB,27BCPA,MAAMyrB,EAAcxxK,GAAI,EAAK,EAEvB,CAAE,+BAAA+uK,CAAgC,EAAGF,GAAmB,s6BCC9D,MAAM4C,EAAe/7L,EAAS,IACrBo0L,GAAqBj1L,EAAU,WAAC,OAAO,CAC/C,EAEK68L,EAAczzJ,GAAe,aAAa,EAE1CghJ,EAAYj/J,GAAI,EAAK,EACrB2xK,EAAU3xK,GAAI,EAAK,EACnB4xK,EAAc5xK,GAAI,CAAC,EACnBwf,EAAWxf,GAAI,CAAC,EAChB6xK,EAAgB7xK,GAAI,CAAC,EAErB8xK,EAAmB,IAAM,OAC7BtyJ,EAAS,OAAQngB,EAAAqyK,EAAY,QAAZ,YAAAryK,EAAmB,QACtC,EAEM0yK,EAAqBr8L,EAAS,IAC3B,GAAGm8L,EAAc,KAAK,GAC9B,EAKD7wK,GAAU,IAAM,OACdwe,EAAS,OAAQngB,EAAAqyK,EAAY,QAAZ,YAAAryK,EAAmB,SACpCqyK,EAAY,MAAM,aAAeG,EAAc,KACjD,CAAC,EAED,MAAMhjE,EAAa9nH,GAAQ,CACzB,GAAI,CAACA,GAAQ,OAAO,MAAMA,CAAI,EAAG,MAAO,QACxC,MAAM+4B,EAAU,KAAK,MAAM/4B,EAAO,EAAE,EAC9Bg5B,EAAU,KAAK,MAAMh5B,EAAO,EAAE,EACpC,MAAO,GAAG+4B,EAAQ,SAAU,EAAC,SAAS,EAAG,GAAG,CAAC,IAAIC,EAAQ,SAAU,EAAC,SAAS,EAAG,GAAG,CAAC,EACtF,EAEMiyJ,EAAa,IAAM,CACvBN,EAAY,MAAM,MAAQ,CAACA,EAAY,MAAM,MAC7CC,EAAQ,MAAQD,EAAY,MAAM,KACpC,EAEMO,EAAe,IAAM,OACzBL,EAAY,OAAQvyK,EAAAqyK,EAAY,QAAZ,YAAAryK,EAAmB,WACzC,EAEM6yK,EAAOnxN,GAAS,CACpB,MAAMgmC,EAAO,OAAOhmC,EAAM,OAAO,KAAK,EACtC2wN,EAAY,MAAM,YAAc3qL,EAChC6qL,EAAY,MAAQ7qL,CACtB,EAEMorL,EAAc,IAAM,CACpBlT,EAAU,OACZyS,EAAY,MAAM,MAAO,EACzBzS,EAAU,MAAQ,KAElByS,EAAY,MAAM,KAAM,EACxBzS,EAAU,MAAQ,GAEtB,EAEMz9C,EAAQ,IAAM,CAClBy9C,EAAU,MAAQ,GAClB2S,EAAY,MAAQ,EACpBC,EAAc,MAAQ,EACtBH,EAAY,MAAM,aAAe,CACnC,EAEMU,EAAsB,IAAM,CAChC,MAAMC,EAAS,CAAC,EAAG,IAAK,CAAC,EAEnBziN,GADeyiN,EAAO,QAAQR,EAAc,KAAK,EACrB,GAAKQ,EAAO,OAC9CR,EAAc,MAAQQ,EAAOziN,CAAS,EACtC8hN,EAAY,MAAM,aAAeG,EAAc,KACjD,EAEMS,EAAgB,SAAY,CAChC,KAAM,CAAE,SAAA5+B,EAAU,QAAA81B,EAAS,UAAAv0J,CAAW,EAAGpgC,EAAU,WACnD+0L,GAAa,CAAE,IAAKJ,EAAS,KAAM91B,EAAU,UAAAz+H,EAAW,CAC1D,61CCpFA,MAAMs9J,EAAe78L,EAAS,KACR,CAClB,KAAM,kBACN,IAAK,kBACL,IAAK,kBACL,KAAM,kBACN,KAAM,kBACN,IAAK,kBACL,IAAK,kBACL,IAAK,kBACL,KAAM,kBACN,IAAK,kBACL,IAAK,kBACL,IAAK,kBACL,IAAK,kBACL,IAAK,kBACL,KAAM,kBACN,IAAK,iBACN,GAEkBb,EAAA,QAAQ,GAAK,kCACjC,qRCjBD,KAAM,CAAE,CAAG,EAAG2B,GAAS,EAEjBg8L,EAAc98L,EAAS,IAAM,OACjC,OAAO+8L,KAAYpzK,EAAAxqB,eAAA,YAAAwqB,EAAY,UAAW,EAAE,CAC9C,CAAC,EAEKqzK,EAAkBh9L,EAAS,IAAM,CACrC,KAAM,CAAE,KAAA8/C,EAAM,KAAAjlF,CAAM,EAAGiiO,EAAY,MAC7BG,EAAgB,CAAC5wN,EAAK+tD,EAAW8iK,IACrC7wN,EAAI,OAAS+tD,EACT,GAAG/tD,EAAI,UAAU,EAAG+tD,CAAS,EAAE,QAAO,CAAE,GAAG8iK,EAAS,KAAO,KAAK,GAChE7wN,EAEN,OAAOxR,EACH,GAAGoiO,EAAcn9I,EAAM,GAAI,EAAI,CAAC,IAAIjlF,CAAI,GACxCoiO,EAAcn9I,EAAM,GAAI,EAAK,CACnC,CAAC,EAEKq9I,EAAiBn9L,EAAS,KACb,CACf,KAAM,qCACN,IAAK,gBACL,IAAK,qCACL,KAAM,qCACN,KAAM,kBACN,IAAK,qCACL,IAAK,iBACL,IAAK,qCACL,KAAM,qCACN,IAAK,qCACL,IAAK,qCACL,IAAK,qCACL,IAAK,kBACL,IAAK,iBACL,KAAM,iBACN,IAAK,oCACN,GAEe88L,EAAY,MAAM,IAAI,GAAK,iBAC5C,upBC9BD,MAAM59L,EAAQC,EAWRU,EAAQC,GAAU,EAClB,CAAE,YAAAo7L,CAAa,EAAG/B,GAAmB,EAErCqC,EAAex7L,EAAS,IAAM,CAClC,MAAM+rJ,EAAc,CAAClsJ,EAAM,MAAO,OAAQ,WAAW,EAErD,OAAIq7L,EAAY,QAAU,SACxBnvC,EAAY,KAAK,aAAa,EAGzBA,CACT,CAAC,EAEKqxC,EAAiBp9L,EAAS,IACvB,MAAM,QAAQd,EAAM,WAAW,EAAIA,EAAM,YAAc,CAAE,CACjE,EAEKm+L,EAAmBr9L,EAAS,IAAM,CACtC,MAAMs9L,EAAe,CAACrE,GAAiB,MAAOA,GAAiB,KAAK,EAKpE,OAJmBmE,EAAe,MAAM,OAAO/nB,GAC7CioB,EAAa,SAASjoB,EAAW,QAAQ,CAC1C,EAEiB,KAChB,CAAC7rM,EAAGC,IACF6zN,EAAa,QAAQ9zN,EAAE,QAAQ,EAAI8zN,EAAa,QAAQ7zN,EAAE,QAAQ,CACrE,CACH,CAAC,EAEK8zN,EAAav9L,EAAS,IACnBo9L,EAAe,MAAM,OAC1B/nB,GAAcA,EAAW,WAAa4jB,GAAiB,KACxD,CACF,EAEKhtH,EAAQjsE,EAAS,IACdo9L,EAAe,MAAM,OAC1B/nB,GAAcA,EAAW,WAAa4jB,GAAiB,IACxD,CACF,s5BClED,KAAM,CAAE,QAAAvqL,EAAS,YAAAsgL,EAAa,kBAAAlxB,EAAmB,YAAAH,CAAa,EAC5Dw7B,GAAmB,EAEfqE,EAAkBx9L,EAAS,IAAM,CACrC,KAAM,CAAE,aAAAy9L,EAAe,EAAI,EAAG3/B,EAAkB,MAChD,OAAO,OAAO,KAAK2/B,GAAgB,EAAE,EAAE,OAAS,CAClD,CAAC,EAEKC,EAAiBpzK,GAAI,EAAK,EAE1BqzK,EAAgB39L,EAAS,IAAM,CACnC,GAAI09L,EAAe,MACjB,OAAOhvL,EAAQ,MAGjB,GAAI8uL,EAAgB,MAAO,CACzB,MAAMC,EAAe3/B,EAAkB,MAAM,aAC7C,OAAO2/B,EAAa,OAAO,KAAKA,CAAY,EAAE,CAAC,CAAC,CACpD,CAEE,OAAO/uL,EAAQ,KACjB,CAAC,EAEKkvL,EAAa59L,EAAS,IACnB29J,EAAY,QAAUk7B,GAAc,QAC5C,EAEK9sN,EAAUi0B,EAAS,IAAM,OAC7B,MAAO,CAAC0O,EAAQ,OAAS,GAACib,EAAAqlK,EAAY,QAAZ,MAAArlK,EAAmB,OAC/C,CAAC,EAEKk0K,EAAgB79L,EAAS,IACtB09L,EAAe,MAClB,+BACA,4BACL,EAEKI,EAAoB,IAAM,CAC9BJ,EAAe,MAAQ,CAACA,EAAe,KACzC,unBCzCA,KAAM,CAAE,QAAAhvL,EAAS,UAAA89C,CAAW,EAAG2sI,GAAmB,EAE5C7F,EAAetzL,EAAS,IAC5B0wL,GAAiBlkI,EAAU,MAAO,eAAe,CACnD,4lBCGA,MAAMnqF,EAAOwxD,EACP,CAAE,EAAAjoD,CAAG,EAAGk1B,GAAS,EAEjB,CAAE,+BAAAu4L,EAAgC,YAAArK,CAAa,EAAGmK,GAAmB,EAErE9jB,EAAar1K,EAAS,IACnBgvL,EAAY,MAAM,CAAC,CAC3B,EAEK3e,EAAW/lJ,GAAI,EAAK,EACpBwxK,EAAcxxK,GAAI,EAAK,EACvB0oK,EAAgB1oK,GAAI,EAAK,EAEzBquD,EAAc,IAAM,CACxB03F,EAAS,MAAQ,GACjBhuM,EAAK,OAAO,CACd,EAEM07N,EAAqB,SAAY,CACrC,KAAM,CAAE,SAAA//B,EAAU,QAAA81B,EAAS,UAAAv0J,CAAW,EAAG81I,EAAW,MACpD,GAAI,CACF2d,EAAc,MAAQ,GACtB,MAAMkB,GAAa,CAAE,IAAKJ,EAAS,KAAM91B,EAAU,UAAAz+H,EAAW,CAC/D,MAAe,CACdj+B,GAAS11B,EAAE,gCAAgC,CAAC,CAChD,QAAY,CACRonN,EAAc,MAAQ,EAC1B,CACA,mwDCnBA,KAAM,CAAE,OAAAvlI,CAAQ,EAAG0rI,GAAmB,EAChC,CAAE,EAAAvtN,CAAG,EAAGk1B,GAAS,EAEjBk9L,EAAah+L,EAAS,IAAM,OAChC,QAAO2pB,EAAA8jC,GAAA,YAAAA,EAAQ,QAAR,YAAA9jC,EAAe,OAAQ,EAChC,CAAC,0iCCnBD,KAAM,CAAE,YAAAqlK,CAAa,EAAGmK,GAAmB,EAErC,CAAE,EAAAvtN,CAAG,EAAGk1B,GAAS,EAEjBwrD,EAAMtsD,EAAS,IACZgvL,EAAY,MAAM,CAAC,EAAE,OAC7B,EAEKzxD,EAAWv9H,EAAS,IACpBssD,EAAI,OACWA,EAAI,MAAM,UAAUA,EAAI,MAAM,YAAY,GAAG,EAAI,CAAC,GAChD1gF,EAAE,gCAAgC,CAGxD,EAEKoyL,EAAWh+J,EAAS,IACjBu9H,EAAS,MAAM,MAAM,GAAG,EAAE,IAAK,CACvC,sZCpBD,KAAM,CAAE,YAAAyxD,CAAa,EAAGmK,GAAmB,EAErC9jB,EAAar1K,EAAS,IACnBgvL,EAAY,MAAM,CAAC,CAC3B,0ZCDD,MAAM3sN,EAAOwxD,EACPw8I,EAAW/lJ,GAAI,EAAK,EACpBwxK,EAAcxxK,GAAI,EAAK,EACvB,CAAE,+BAAA+uK,EAAgC,YAAArK,CAAa,EAAGmK,GAAmB,EAErExgH,EAAc,IAAM,CACxB03F,EAAS,MAAQ,GACjBhuM,EAAK,OAAO,CACd,EAEMgzM,EAAar1K,EAAS,IACnBgvL,EAAY,MAAM,CAAC,CAC3B,EAEKiP,EAASj+L,EAAS,IACfq1K,EAAW,MAAM,WAAa4jB,GAAiB,OACvD,s5BChBD,MAAM52N,EAAOwxD,EACP,CAAE,QAAA5vD,EAAS,QAAAyqC,EAAS,YAAAsgL,CAAW,EAAKmK,GAAmB,EAEvD9jB,EAAar1K,EAAS,IACnBgvL,EAAY,MAAM,CAAC,CAC3B,EAEKkP,EAAmB5zK,GAAI,EAAK,EAC5B6zK,EAAqB7zK,GAAI,EAAK,EAE9BsxK,EAAmB57L,EAAS,IAC5B/7B,EAAQ,QAAU60N,GAAiB,SAC9BpqL,EAAQ,MAGV,IAAImtL,GAAiBntL,EAAQ,KAAK,EAAE,gBAC5C,EAEK0vL,EAAmB,IAAM,CAC7BF,EAAiB,MAAQ,GACzB77N,EAAK,OAAO,CACd,EAEMg8N,EAAmB,IAAM,CAC7BF,EAAmB,MAAQ,GAC3B97N,EAAK,OAAO,CACd,umBC8Hai8N,IAAuB,CAChC,UACA,aACA,wBACA,kBACA,mBACA,mBACA,oBACA,sBACA,wBACA,wBACA,oBACA,sBACA,sBACA,kBACA,SACA,gBACA,sBACA,4BACA,6BACA,sBACA,sBACA,kBACA,eACA,cACA,oBACA,oBACA,oBACA,gBACA,eACA,qBACA,qBACA,qBACA,iBACA,eACA,aACA,mBACA,yBACA,0BACA,mBACA,mBACA,eACA,aACA,cACA,eACA,eACA,eACA,QACA,QACA,eACA,cACA,aACA,cACA,oBACA,oBACA,oBACA,cACA,eACA,UACA,YACA,UACA,YACA,cACA,QACA,OACA,cACA,wBACA,eACA,YACA,mBACA,eACA,aACA,iBACA,eACA,0BACA,oBACA,0BACA,yBACA,uBACA,cACA,SACA,oBACA,mBACA,WACA,YACA,cACA,cACA,mBACA,2BACA,mBACA,mBACA,mBACA,iBACA,aACA,cACA,aACA,sBACA,kBACA,SACA,gBACA,cACA,eACA,aACA,gBACA,aACA,YACA,aACA,YACA,iBACA,aACA,kBACA,UACA,UACA,gBACA,gBACA,gBACA,WACA,aACA,aACA,UACA,iBACA,eACA,gBACA,cACA,mBACA,oBACA,oBACA,QACA,cACA,eACA,QACA,cACA,SACA,WACA,QACA,eACA,gBACA,oBACA,cACA,SACA,eACA,aACA,kBACA,iBACA,uBACA,kBACA,wBACA,uBACA,uBACA,wBACA,gBACA,sBACA,sBACA,cACA,eACA,qBACA,mBACA,gBACA,iBACA,0BACA,YACA,iBACA,kBACA,eACA,iBACA,eACA,cACA,uBACA,QACA,aACA,eACA,YACA,eACA,MACJ,ECnGaA,GAAuBC,IC3O9BC,GAAmB,CACvB,yBACA,eACA,gBACA,eACA,eACA,SACA,mBACA,kBACF,EAGMC,IAAiB,CACrB,gBACA,8BACA,UACA,SACF,EAEO,MAAMC,EAAoB,CAM/B,OAAO,cAAcC,EAAa,CAEhC,MAAMC,EAAU,SAAS,cAAc,KAAK,EAC5C,OAAAA,EAAQ,UAAYD,EAGpBH,GAAiB,QAAQp/G,GAAY,CACnCw/G,EAAQ,iBAAiBx/G,CAAQ,EAAE,QAAQ1iH,GAAM,CAC/CA,EAAG,OAAQ,CACnB,CAAO,CACP,CAAK,EAGsB,KAAK,mBAAmBkiO,CAAO,EACvC,QAAQliO,GAAM,CAC3BA,EAAG,OAAQ,CACjB,CAAK,EAEMkiO,EAAQ,SACnB,CAOE,OAAO,UAAUD,EAAa,CAC5B,MAAMC,EAAU,SAAS,cAAc,KAAK,EAC5CA,EAAQ,UAAYD,EAIpB,UAAWv/G,KAAYo/G,GACrB,GAAII,EAAQ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","names":["deepFreeze","obj","name","prop","type","Response","mode","escapeHTML","value","inherit$1","original","objects","result","key","SPAN_CLOSE","emitsWrappingTags","node","scopeToCSSClass","prefix","pieces","x","i","HTMLRenderer","parseTree","options","text","className","newNode","opts","TokenTree","scope","builder","child","el","TokenTreeEmitter","emitter","source","re","lookahead","concat","anyNumberOfTimes","optional","args","stripOptionsFromArgs","either","countMatchGroups","startsWith","lexeme","match","BACKREF_RE","_rewriteBackreferences","regexps","joinWith","numCaptures","regex","offset","out","MATCH_NOTHING_RE","IDENT_RE","UNDERSCORE_IDENT_RE","NUMBER_RE","C_NUMBER_RE","BINARY_NUMBER_RE","RE_STARTERS_RE","SHEBANG","beginShebang","m","resp","BACKSLASH_ESCAPE","APOS_STRING_MODE","QUOTE_STRING_MODE","PHRASAL_WORDS_MODE","COMMENT","begin","end","modeOptions","ENGLISH_WORD","C_LINE_COMMENT_MODE","C_BLOCK_COMMENT_MODE","HASH_COMMENT_MODE","NUMBER_MODE","C_NUMBER_MODE","BINARY_NUMBER_MODE","REGEXP_MODE","TITLE_MODE","UNDERSCORE_TITLE_MODE","METHOD_GUARD","END_SAME_AS_BEGIN","MODES","skipIfHasPrecedingDot","response","scopeClassName","_parent","beginKeywords","parent","compileIllegal","compileMatch","compileRelevance","beforeMatchExt","originalMode","COMMON_KEYWORDS","DEFAULT_KEYWORD_SCOPE","compileKeywords","rawKeywords","caseInsensitive","scopeName","compiledKeywords","compileList","keywordList","keyword","pair","scoreForKeyword","providedScore","commonKeyword","seenDeprecations","error","message","warn","deprecated","version","MultiClassError","remapScopeNames","regexes","scopeNames","emit","positions","beginMultiClass","endMultiClass","scopeSugar","MultiClass","compileLanguage","language","langRe","global","MultiRegex","terminators","s","matchData","ResumableMultiRegex","index","matcher","m2","buildModeRegex","mm","term","compileMode","cmode","ext","keywordPattern","c","expandOrCloneMode","dependencyOnParent","variant","HTMLInjectionError","reason","html","escape","inherit","NO_MATCH","MAX_KEYWORD_HITS","HLJS","hljs","languages","aliases","plugins","SAFE_MODE","LANGUAGE_NOT_FOUND","PLAINTEXT_LANGUAGE","shouldNotHighlight","languageName","blockLanguage","block","classes","getLanguage","_class","highlight","codeOrLanguageName","optionsOrCode","ignoreIllegals","code","context","fire","_highlight","codeToHighlight","continuation","keywordHits","keywordData","matchText","processKeywords","top","modeBuffer","lastIndex","buf","word","data","kind","keywordRelevance","relevance","cssClass","emitKeyword","processSubLanguage","continuations","highlightAuto","processBuffer","emitMultiClass","max","klass","startNewMode","endOfMode","matchPlusRemainder","matched","doIgnore","resumeScanAtSamePosition","doBeginMatch","newMode","beforeCallbacks","cb","doEndMatch","endMode","origin","processContinuations","list","current","item","lastMatch","processLexeme","textBeforeMatch","err","processed","iterations","md","beforeMatch","processedCount","justTextHighlightResult","languageSubset","plaintext","results","autoDetection","sorted","a","b","best","secondBest","updateClassName","element","currentLang","resultLang","highlightElement","configure","userOptions","initHighlighting","highlightAll","initHighlightingOnLoad","wantsHighlight","boot","registerLanguage","languageDefinition","lang","error$1","registerAliases","unregisterLanguage","alias","listLanguages","aliasList","upgradePluginAPI","plugin","addPlugin","removePlugin","event","deprecateHighlightBlock","core","r","e","n","l","t","o","u","isEmpty","opt","not","fun","params","includes","str","query","filterOptions","search","label","customLabel","option","stripGroups","flattenOptions","values","prev","curr","filterGroups","groupLabel","groups","group","groupOptions","flow","fns","v","f","multiselectMixin","normalizedSearch","selectedGroup","groupValues","val","newValue","optionsToAdd","shouldClose","spaceAbove","spaceBelow","pointerMixin","script","count","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","createTextVNode","_hoisted_8","_hoisted_9","render","_ctx","_cache","$props","$setup","$data","$options","openBlock","createBlock","$event","withKeys","withModifiers","renderSlot","createVNode","withDirectives","Fragment","renderList","toDisplayString","vShow","createCommentVNode","Transition","withCtx","_sfc_main","_createElementBlock","_normalizeClass","_createElementVNode","globalConfigMixin","_createBlock","_TransitionGroup","_withCtx","_openBlock","_Fragment","_renderList","_toDisplayString","_createVNode","_component_fluent_icon","_createCommentVNode","sides","alignments","placements","acc","side","min","oppositeSideMap","oppositeAlignmentMap","clamp","start","evaluate","param","getSide","placement","getAlignment","getOppositeAxis","axis","getAxisLength","getSideAxis","getAlignmentAxis","getAlignmentSides","rects","rtl","alignment","alignmentAxis","length","mainAlignmentSide","getOppositePlacement","getExpandedPlacements","oppositePlacement","getOppositeAlignmentPlacement","getSideList","isStart","lr","rl","tb","bt","getOppositeAxisPlacements","flipAlignment","direction","expandPaddingObject","padding","getPaddingObject","rectToClientRect","rect","y","width","height","computeCoordsFromPlacement","_ref","reference","floating","sideAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","computePosition","config","strategy","middleware","platform","validMiddleware","statefulPlacement","middlewareData","resetCount","fn","nextX","nextY","reset","detectOverflow","state","_await$platform$isEle","elements","boundary","rootBoundary","elementContext","altBoundary","paddingObject","clippingClientRect","offsetParent","offsetScale","elementClientRect","arrow","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","min$1","center","shouldAddOffset","alignmentOffset","getPlacementList","autoAlignment","allowedPlacements","autoPlacement","_middlewareData$autoP","_middlewareData$autoP2","_placementsThatFitOnE","crossAxis","detectOverflowOptions","placements$1","overflow","currentIndex","currentPlacement","alignmentSides","currentOverflows","allOverflows","nextPlacement","placementsSortedByMostSpace","d","resetPlacement","flip","_middlewareData$arrow","_middlewareData$flip","initialPlacement","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","initialSideAxis","isBasePlacement","fallbackPlacements","hasFallbackAxisSideDirection","overflows","overflowsData","_middlewareData$flip2","_overflowsData$filter","nextIndex","_overflowsData$filter2","currentSideAxis","convertValueToCoords","mainAxisMulti","crossAxisMulti","rawValue","mainAxis","_middlewareData$offse","diffCoords","shift","limiter","mainAxisCoord","crossAxisCoord","minSide","maxSide","limitedCoords","size","apply","heightSide","widthSide","maximumClippingHeight","maximumClippingWidth","overflowAvailableHeight","overflowAvailableWidth","noShift","availableHeight","availableWidth","xMin","xMax","yMin","yMax","nextDimensions","h","p","g","w","L","E","R","T","C","F","W","D","S","A","H","O","P","B","ye","Ze","$","_e","Te","pe","ae","de","G","le","he","Y","q","Q","xe","Ue","Ye","Xe","Ke","Je","Qe","ne","_","ue","fe","tt","Pe","ce","et","ot","it","J","ke","Le","st","nt","z","X","Fe","rt","Re","De","pt","Ie","at","M","Z","dt","lt","ht","ut","ft","ct","mt","je","Ve","se","ee","te","K","gt","wt","$e","N","I","j","V","Ee","ve","k","Se","be","Ce","$t","vt","yt","_t","We","ze","Ae","Tt","Ne","Pt","St","U","Ge","qe","He","me","oe","ge","Oe","we","Me","Be","ie","Ct","Gt","file","_component_woot_thumbnail","_component_woot_button","_createTextVNode","_renderSlot","xml","TAG_NAME_RE","XML_IDENT_RE","XML_ENTITIES","XML_META_KEYWORDS","XML_META_PAR_KEYWORDS","APOS_META_STRING_MODE","QUOTE_META_STRING_MODE","TAG_INTERNALS","xml_1","bash","VAR","BRACED_VAR","SUBST","HERE_DOC","QUOTE_STRING","ESCAPED_QUOTE","APOS_STRING","ESCAPED_APOS","ARITHMETIC","SH_LIKE_SHELLS","KNOWN_SHEBANG","FUNCTION","KEYWORDS","LITERALS","PATH_MODE","SHELL_BUILT_INS","BASH_BUILT_INS","ZSH_BUILT_INS","GNU_CORE_UTILS","bash_1","DECLTYPE_AUTO_RE","NAMESPACE_RE","FUNCTION_TYPE_RE","TYPES","STRINGS","NUMBERS","PREPROCESSOR","FUNCTION_TITLE","EXPRESSION_CONTAINS","EXPRESSION_CONTEXT","FUNCTION_DECLARATION","c_1","cpp","CPP_PRIMITIVE_TYPES","RESERVED_KEYWORDS","RESERVED_TYPES","TYPE_HINTS","FUNCTION_HINTS","CPP_KEYWORDS","FUNCTION_DISPATCH","cpp_1","csharp","BUILT_IN_KEYWORDS","FUNCTION_MODIFIERS","LITERAL_KEYWORDS","NORMAL_KEYWORDS","CONTEXTUAL_KEYWORDS","RAW_STRING","VERBATIM_STRING","VERBATIM_STRING_NO_LF","SUBST_NO_LF","INTERPOLATED_STRING","INTERPOLATED_VERBATIM_STRING","INTERPOLATED_VERBATIM_STRING_NO_LF","STRING","GENERIC_MODIFIER","TYPE_IDENT_RE","AT_IDENTIFIER","csharp_1","HTML_TAGS","SVG_TAGS","TAGS","MEDIA_FEATURES","PSEUDO_CLASSES","PSEUDO_ELEMENTS","ATTRIBUTES","css","modes","VENDOR_PREFIX","AT_MODIFIERS","AT_PROPERTY_RE","css_1","markdown","INLINE_HTML","HORIZONTAL_RULE","CODE","LIST","LINK_REFERENCE","URL_SCHEME","LINK","BOLD","ITALIC","BOLD_WITHOUT_ITALIC","ITALIC_WITHOUT_BOLD","CONTAINABLE","markdown_1","diff","diff_1","ruby","RUBY_METHOD_RE","CLASS_NAME_RE","CLASS_NAME_WITH_NAMESPACE_RE","RUBY_KEYWORDS","YARDOCTAG","IRB_OBJECT","COMMENT_MODES","decimal","digits","NUMBER","PARAMS","RUBY_DEFAULT_CONTAINS","IRB_DEFAULT","ruby_1","go","go_1","graphql","GQL_NAME","graphql_1","ini","COMMENTS","VARIABLES","ARRAY","BARE_KEY","QUOTED_KEY_DOUBLE_QUOTE","QUOTED_KEY_SINGLE_QUOTE","ANY_KEY","DOTTED_KEY","ini_1","decimalDigits","frac","hexDigits","NUMERIC","recurRegex","substitution","depth","java","JAVA_IDENT_RE","GENERIC_IDENT_RE","ANNOTATION","java_1","ERROR_TYPES","BUILT_IN_GLOBALS","BUILT_IN_VARIABLES","BUILT_INS","javascript","hasClosingTag","after","tag","IDENT_RE$1","FRAGMENT","XML_SELF_CLOSING","XML_TAG","afterMatchIndex","nextChar","afterMatch","KEYWORDS$1","decimalInteger","HTML_TEMPLATE","CSS_TEMPLATE","GRAPHQL_TEMPLATE","TEMPLATE_STRING","SUBST_INTERNALS","SUBST_AND_COMMENTS","PARAMS_CONTAINS","CLASS_OR_EXTENDS","CLASS_REFERENCE","USE_STRICT","FUNCTION_DEFINITION","UPPER_CASE_CONSTANT","noneOf","FUNCTION_CALL","PROPERTY_ACCESS","GETTER_OR_SETTER","FUNC_LEAD_IN_RE","FUNCTION_VARIABLE","javascript_1","json","ATTRIBUTE","PUNCTUATION","LITERALS_MODE","json_1","kotlin","KEYWORDS_WITH_LABEL","LABEL","VARIABLE","ANNOTATION_USE_SITE","KOTLIN_NUMBER_MODE","KOTLIN_NESTED_COMMENT","KOTLIN_PAREN_TYPE","KOTLIN_PAREN_TYPE2","kotlin_1","PSEUDO_SELECTORS","less","PSEUDO_SELECTORS$1","INTERP_IDENT_RE","RULES","VALUE_MODES","STRING_MODE","IDENT_MODE","AT_KEYWORDS","PARENS_MODE","VALUE_WITH_RULESETS","MIXIN_GUARD_MODE","RULE_MODE","AT_RULE_MODE","VAR_RULE_MODE","SELECTOR_MODE","PSEUDO_SELECTOR_MODE","less_1","lua","OPENING_LONG_BRACKET","CLOSING_LONG_BRACKET","LONG_BRACKETS","lua_1","makefile","FUNC","ASSIGNMENT","META","TARGET","makefile_1","perl","REGEX_MODIFIERS","PERL_KEYWORDS","METHOD","ATTR","STRING_CONTAINS","REGEX_DELIMS","PAIRED_DOUBLE_RE","open","close","middle","PAIRED_RE","PERL_DEFAULT_CONTAINS","perl_1","objectivec","API_CLASS","IDENTIFIER_RE","CLASS_KEYWORDS","objectivec_1","php","NOT_PERL_ETC","PASCAL_CASE_CLASS_NAME_RE","SINGLE_QUOTED","DOUBLE_QUOTED","HEREDOC","NOWDOC","WHITESPACE","KWS","items","normalizeKeywords","CONSTRUCTOR_CALL","CONSTANT_REFERENCE","LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON","NAMED_ARGUMENT","PARAMS_MODE","FUNCTION_INVOKE","ATTRIBUTE_CONTAINS","php_1","phpTemplate","phpTemplate_1","plaintext_1","python","RESERVED_WORDS","PROMPT","LITERAL_BRACKET","digitpart","pointfloat","COMMENT_TYPE","python_1","pythonRepl","pythonRepl_1","NUMBER_TYPES_RE","OPERATORS_RE","PUNCTUATION_RE","r_1","rust","RAW_IDENTIFIER","NUMBER_SUFFIX","BUILTINS","rust_1","scss","PSEUDO_ELEMENTS$1","PSEUDO_CLASSES$1","scss_1","shell","shell_1","sql","COMMENT_MODE","QUOTED_IDENTIFIER","MULTI_WORD_TYPES","NON_RESERVED_WORDS","RESERVED_FUNCTIONS","POSSIBLE_WITHOUT_PARENS","COMBOS","FUNCTIONS","OPERATOR","reduceRelevancy","exceptions","when","qualifyFn","sql_1","keywordWrapper","dotKeywords","optionalDotKeywords","keywordTypes","keywords","literals","precedencegroupKeywords","numberSignKeywords","builtIns","operatorHead","operatorCharacter","operator","identifierHead","identifierCharacter","identifier","typeIdentifier","keywordAttributes","availabilityKeywords","swift","BLOCK_COMMENT","DOT_KEYWORD","KEYWORD_GUARD","PLAIN_KEYWORDS","kw","REGEX_KEYWORDS","KEYWORD","KEYWORD_MODES","BUILT_IN_GUARD","BUILT_IN","OPERATOR_GUARD","OPERATORS","ESCAPED_CHARACTER","rawDelimiter","ESCAPED_NEWLINE","INTERPOLATION","MULTILINE_STRING","SINGLE_LINE_STRING","REGEXP_CONTENTS","BARE_REGEXP_LITERAL","EXTENDED_REGEXP_LITERAL","REGEXP","IMPLICIT_PARAMETER","PROPERTY_WRAPPER_PROJECTION","IDENTIFIERS","AVAILABLE_ATTRIBUTE","KEYWORD_ATTRIBUTE","USER_DEFINED_ATTRIBUTE","TYPE","GENERIC_ARGUMENTS","TUPLE_ELEMENT_NAME","TUPLE","GENERIC_PARAMETERS","FUNCTION_PARAMETER_NAME","FUNCTION_PARAMETERS","FUNCTION_OR_MACRO","INIT_SUBSCRIPT","OPERATOR_DECLARATION","PRECEDENCEGROUP","TYPE_DECLARATION","interpolation","submodes","swift_1","yaml","URI_CHARACTERS","KEY","TEMPLATE_VARIABLES","CONTAINER_STRING","TIMESTAMP","VALUE_CONTAINER","OBJECT","yaml_1","typescript","tsLanguage","NAMESPACE","INTERFACE","TS_SPECIFIC_KEYWORDS","DECORATOR","swapMode","replacement","indx","ATTRIBUTE_HIGHLIGHT","functionDeclaration","typescript_1","vbnet","CHARACTER","MM_DD_YYYY","YYYY_MM_DD","TIME_12H","TIME_24H","DATE","DOC_COMMENT","vbnet_1","wasm","LINE_COMMENT","FUNCTION_REFERENCE","ARGUMENT","PARENS","MATH_OPERATIONS","wasm_1","require$$0","require$$1","require$$2","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","require$$27","require$$28","require$$29","require$$30","require$$31","require$$32","require$$33","require$$34","require$$35","require$$36","props","__props","renderIcon","isVNode","VARIANT_OPTIONS","COLOR_OPTIONS","SIZE_OPTIONS","JUSTIFY_OPTIONS","EXCLUDED_ATTRS","slots","useSlots","attrs","useAttrs","filteredAttrs","computed","standardAttrs","computedVariant","computedColor","computedSize","computedJustify","STYLE_CONFIG","variantClasses","isIconOnly","isLink","buttonClasses","sizeConfig","linkButtonClasses","copyTextToClipboard","useI18n","scrubbedScript","lines","minIndent","line","indent","codepenScriptValue","onCopy","useAlert","__webpack_modules__","module","__unused_webpack_exports","__webpack_require__","isCallable","tryToString","TypeError","argument","String","isObject","toIndexedObject","toAbsoluteIndex","lengthOfArrayLike","createMethod","IS_INCLUDES","$this","fromIndex","uncurryThis","toString","stringSlice","TO_STRING_TAG_SUPPORT","classofRaw","wellKnownSymbol","TO_STRING_TAG","Object","CORRECT_ARGUMENTS","tryGet","replace","TEST","arg","V8_OR_CHAKRA_STACK_ENTRY","IS_V8_OR_CHAKRA_STACK","stack","dropEntries","hasOwn","ownKeys","getOwnPropertyDescriptorModule","definePropertyModule","target","keys","defineProperty","getOwnPropertyDescriptor","DESCRIPTORS","createPropertyDescriptor","object","bitmap","fails","document","EXISTS","getBuiltIn","userAgent","process","Deno","versions","v8","createNonEnumerableProperty","redefine","setGlobal","copyConstructorProperties","isForced","GLOBAL","STATIC","FORCED","targetProperty","sourceProperty","descriptor","exec","NATIVE_BIND","FunctionPrototype","call","test","getDescriptor","PROPER","CONFIGURABLE","bind","aFunction","namespace","method","aCallable","func","check","toObject","hasOwnProperty","createElement","classof","split","setPrototypeOf","dummy","Wrapper","NewTarget","NewTargetPrototype","store","functionToString","NATIVE_WEAK_MAP","shared","sharedKey","hiddenKeys","OBJECT_ALREADY_INITIALIZED","WeakMap","set","get","has","enforce","getterFor","wmget","wmhas","wmset","metadata","STATE","feature","detection","normalize","POLYFILL","NATIVE","string","isPrototypeOf","USE_SYMBOL_AS_UID","$Symbol","toLength","V8_VERSION","symbol","inspectSource","$default","__unused_webpack_module","exports","IE8_DOM_DEFINE","V8_PROTOTYPE_DEFINE_BUG","anObject","toPropertyKey","$defineProperty","$getOwnPropertyDescriptor","ENUMERABLE","WRITABLE","Attributes","propertyIsEnumerableModule","internalObjectKeys","enumBugKeys","indexOf","push","names","$propertyIsEnumerable","NASHORN_BUG","aPossiblePrototype","CORRECT_SETTER","setter","proto","input","pref","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","getOwnPropertySymbols","InternalStateModule","CONFIGURABLE_FUNCTION_NAME","getInternalState","enforceInternalState","TEMPLATE","unsafe","simple","noTargetGet","uid","SHARED","IS_PURE","toIntegerOrInfinity","integer","IndexedObject","requireObjectCoercible","ceil","floor","number","isSymbol","getMethod","ordinaryToPrimitive","TO_PRIMITIVE","exoticToPrim","toPrimitive","id","postfix","NATIVE_SYMBOL","WellKnownSymbolsStore","Symbol","symbolFor","createWellKnownSymbol","description","inheritIfRequired","normalizeStringArgument","installErrorCause","clearErrorStack","ERROR_STACK_INSTALLABLE","FULL_NAME","wrapper","IS_AGGREGATE_ERROR","OPTIONS_POSITION","path","ERROR_NAME","OriginalError","OriginalErrorPrototype","BaseError","WrappedError","wrapErrorConstructorWithCause","WEB_ASSEMBLY","WebAssembly","exportGlobalErrorCauseWrapper","exportWebAssemblyErrorCauseWrapper","init","__webpack_exports__","_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__","_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__","_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default","___CSS_LOADER_EXPORT___","cssWithMappingToString","content","needLayer","modules","media","dedupe","supports","layer","alreadyImportedModules","_k","root","getRawTag","objectToString","nullTag","undefinedTag","symToStringTag","baseGetTag","trimmedEndIndex","reTrimStart","baseTrim","freeGlobal","objectProto","nativeObjectToString","isOwn","unmasked","freeSelf","reWhitespace","now","toNumber","FUNC_ERROR_TEXT","nativeMax","nativeMin","debounce","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","thisArg","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","flush","debounced","isInvoking","isObjectLike","symbolTag","throttle","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","other","isBinary","__WEBPACK_AMD_DEFINE_RESULT__","Math","trimLeft","trimRight","tinyCounter","mathRound","mathMin","mathMax","mathRandom","tinycolor","color","rgb","inputToRGB","RsRGB","GsRGB","BsRGB","boundAlpha","hsv","rgbToHsv","hsl","rgbToHsl","allow3Char","rgbToHex","allow4Char","rgbaToHex","bound01","hexNames","secondColor","hex8String","rgbaToArgbHex","secondHex8String","gradientType","format","formatSet","formattedString","hasAlpha","needsAlphaFormat","lighten","brighten","darken","desaturate","saturate","greyscale","spin","analogous","complement","monochromatic","splitcomplement","triad","tetrad","newColor","convertToPercentage","ok","stringInputToObject","isValidCSSUnit","rgbToRgb","hsvToRgb","hslToRgb","hue2rgb","mod","hex","pad2","convertDecimalToHex","color1","color2","amount","clamp01","hue","slices","part","ret","modification","rgb1","rgb2","rgba","c1","c2","wcag2","readability","wcag2Parms","validateWCAG2Parms","baseColor","colorList","bestColor","bestScore","includeFallbackColors","level","flipped","isOnePointZero","processPercent","isPercentage","parseIntFromHex","convertHexToDecimal","matchers","CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH3","PERMISSIVE_MATCH4","named","parms","sfc","add","addStylesClient","listToStyles","parentId","styles","newStyles","sourceMap","hasDocument","stylesInDom","head","singletonElement","singletonCounter","isProduction","noop","ssrIdKey","isOldIE","_isProduction","_options","addStylesToDom","newList","mayRemove","domStyle","addStyle","parts","createStyleElement","styleElement","update","remove","styleIndex","applyToSingletonTag","applyToTag","newObj","replaceText","textStore","cssNode","childNodes","__webpack_module_cache__","moduleId","cachedModule","getter","definition","Alpha","Checkboard","Chrome","Compact","EditableInput","Grayscale","Hue","Material","Photoshop","Saturation","Sketch","Slider","Swatches","Twitter","entry_lib","currentScript","src","package_namespaceObject","external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject","tinycolor_default","_colorChange","oldHue","alpha","newVal","keysToCheck","checked","passed","letter","palette","defaultColors","Compactvue_type_script_lang_js","exportHelper","Grayscalevue_type_template_id_5742c0cf_hoisted_1","Grayscalevue_type_template_id_5742c0cf_hoisted_2","Grayscalevue_type_template_id_5742c0cf_hoisted_3","Grayscalevue_type_template_id_5742c0cf_hoisted_4","Grayscalevue_type_template_id_5742c0cf_render","Grayscalevue_type_script_lang_js_defaultColors","Grayscalevue_type_script_lang_js","Materialvue_type_template_id_6dd2ea40_hoisted_1","Materialvue_type_template_id_6dd2ea40_hoisted_2","Materialvue_type_template_id_6dd2ea40_hoisted_3","Materialvue_type_template_id_6dd2ea40_hoisted_4","Materialvue_type_template_id_6dd2ea40_render","_component_ed_in","EditableInputvue_type_template_id_56925d0b_hoisted_1","EditableInputvue_type_template_id_56925d0b_hoisted_2","EditableInputvue_type_template_id_56925d0b_hoisted_3","EditableInputvue_type_template_id_56925d0b_hoisted_4","EditableInputvue_type_template_id_56925d0b_render","EditableInputvue_type_script_lang_js","Materialvue_type_script_lang_js","Slidervue_type_template_id_c87f38e0_hoisted_1","Slidervue_type_template_id_c87f38e0_hoisted_2","Slidervue_type_template_id_c87f38e0_hoisted_3","Slidervue_type_template_id_c87f38e0_hoisted_4","Slidervue_type_template_id_c87f38e0_render","_component_hue","swatch","Huevue_type_template_id_d0fd3296_hoisted_1","Huevue_type_template_id_d0fd3296_hoisted_3","Huevue_type_template_id_d0fd3296_render","Huevue_type_script_lang_js","skip","container","containerWidth","containerHeight","xOffset","yOffset","pageX","pageY","left","percent","DEFAULT_SATURATION","Slidervue_type_script_lang_js","Swatchesvue_type_template_id_3e9acefe_hoisted_1","Swatchesvue_type_template_id_3e9acefe_hoisted_2","Swatchesvue_type_template_id_3e9acefe_hoisted_3","Swatchesvue_type_template_id_3e9acefe_hoisted_4","Swatchesvue_type_template_id_3e9acefe_render","$idx","red","pink","purple","deepPurple","indigo","blue","lightBlue","cyan","teal","green","lightGreen","lime","yellow","amber","orange","deepOrange","brown","grey","blueGrey","darkText","lightText","darkIcons","lightIcons","white","black","colors_es2015","colorMap","colorLevel","Swatchesvue_type_script_lang_js_defaultColors","colors","typeColor","Swatchesvue_type_script_lang_js","Photoshopvue_type_template_id_9851ac8a_hoisted_1","Photoshopvue_type_template_id_9851ac8a_hoisted_2","Photoshopvue_type_template_id_9851ac8a_hoisted_3","Photoshopvue_type_template_id_9851ac8a_hoisted_4","Photoshopvue_type_template_id_9851ac8a_hoisted_5","Photoshopvue_type_template_id_9851ac8a_hoisted_6","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","Photoshopvue_type_template_id_9851ac8a_render","_component_saturation","Saturationvue_type_template_id_659348d8_hoisted_1","Saturationvue_type_template_id_659348d8_hoisted_2","Saturationvue_type_template_id_659348d8_hoisted_4","Saturationvue_type_template_id_659348d8_render","clamp_default","Saturationvue_type_script_lang_js","saturation","bright","Photoshopvue_type_script_lang_js","Sketchvue_type_template_id_5a577154_hoisted_1","Sketchvue_type_template_id_5a577154_hoisted_2","Sketchvue_type_template_id_5a577154_hoisted_3","Sketchvue_type_template_id_5a577154_hoisted_4","Sketchvue_type_template_id_5a577154_hoisted_5","Sketchvue_type_template_id_5a577154_hoisted_6","Sketchvue_type_template_id_5a577154_hoisted_7","Sketchvue_type_template_id_5a577154_hoisted_8","Sketchvue_type_template_id_5a577154_hoisted_9","Sketchvue_type_template_id_5a577154_hoisted_10","Sketchvue_type_template_id_5a577154_hoisted_11","Sketchvue_type_template_id_5a577154_hoisted_12","Sketchvue_type_template_id_5a577154_hoisted_13","Sketchvue_type_template_id_5a577154_hoisted_14","Sketchvue_type_template_id_5a577154_hoisted_15","Sketchvue_type_template_id_5a577154_hoisted_16","Sketchvue_type_template_id_5a577154_render","_component_alpha","_component_checkboard","Alphavue_type_template_id_7db0276a_hoisted_1","Alphavue_type_template_id_7db0276a_hoisted_2","Alphavue_type_template_id_7db0276a_hoisted_4","Alphavue_type_template_id_7db0276a_render","Checkboardvue_type_template_id_1af7c312_render","_checkboardCache","Checkboardvue_type_script_lang_js","getCheckboard","renderCheckboard","canvas","ctx","checkboard","Alphavue_type_script_lang_js","rgbStr","presetColors","Sketchvue_type_script_lang_js","Chromevue_type_template_id_41feb5bc_hoisted_1","Chromevue_type_template_id_41feb5bc_hoisted_2","Chromevue_type_template_id_41feb5bc_hoisted_3","Chromevue_type_template_id_41feb5bc_hoisted_4","Chromevue_type_template_id_41feb5bc_hoisted_5","Chromevue_type_template_id_41feb5bc_hoisted_6","Chromevue_type_template_id_41feb5bc_hoisted_7","Chromevue_type_template_id_41feb5bc_hoisted_8","Chromevue_type_template_id_41feb5bc_hoisted_9","Chromevue_type_template_id_41feb5bc_hoisted_10","Chromevue_type_template_id_41feb5bc_hoisted_11","Chromevue_type_template_id_41feb5bc_hoisted_12","Chromevue_type_template_id_41feb5bc_hoisted_13","Chromevue_type_template_id_41feb5bc_hoisted_14","Chromevue_type_template_id_41feb5bc_hoisted_15","Chromevue_type_template_id_41feb5bc_hoisted_16","Chromevue_type_template_id_41feb5bc_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_24","_hoisted_25","Chromevue_type_template_id_41feb5bc_render","Chromevue_type_script_lang_js","Twittervue_type_template_id_3d2e139c_hoisted_1","Twittervue_type_template_id_3d2e139c_hoisted_2","Twittervue_type_template_id_3d2e139c_hoisted_3","Twittervue_type_template_id_3d2e139c_hoisted_4","Twittervue_type_template_id_3d2e139c_hoisted_5","Twittervue_type_template_id_3d2e139c_hoisted_6","Twittervue_type_template_id_3d2e139c_render","_component_editable_input","Twittervue_type_script_lang_js_defaultColors","Twittervue_type_script_lang_js","VueColor","build","_normalizeStyle","_withModifiers","_component_Chrome","tryOnScopeDispose","getCurrentScope","onScopeDispose","toValue","unref","isClient","notNullish","isIOS","getIsIOS","_a","_b","createFilterWrapper","filter","resolve","reject","bypassFilter","invoke","pausableFilter","extendFilter","isActive","ref","pause","resume","eventFilter","readonly","getLifeCycleTarget","getCurrentInstance","toRef","toRef$1","customRef","watchWithFilter","watchOptions","watch","watchPausable","tryOnMounted","sync","onMounted","nextTick","useIntervalFn","interval","immediate","immediateCallback","timer","clean","intervalValue","isRef","stopWatch","useTimeoutFn","isPending","clear","stop","useToggle","initialValue","truthyValue","falsyValue","valueIsRef","_value","toggle","truthy","defaultWindow","unrefElement","elRef","plain","useEventListener","events","listeners","cleanups","cleanup","register","listener","options2","optionsClone","_iOSWorkaround","onClickOutside","handler","window","ignore","capture","detectIframe","shouldListen","shouldIgnore","target2","hasMultipleRoots","vm","checkMultipleRoots","children","isProcessingClick","useMounted","isMounted","instance","useSupported","callback","useMutationObserver","mutationOptions","observer","isSupported","targets","targets2","takeRecords","useMediaQuery","mediaQuery","matches","watchEffect","_global","globalKey","handlers","getHandlers","getSSRHandler","fallback","guessSerializerType","rawInit","StorageSerializers","customStorageEventName","useStorage","defaults","storage","deep","listenToStorageChanges","writeDefaults","mergeDefaults","shallow","onError","initOnMounted","shallowRef","_a2","serializer","pauseWatch","resumeWatch","pausableWatch","write","updateFromCustomEvent","dispatchWriteEvent","oldValue","payload","serialized","read","useResizeObserver","observerOptions","_targets","els","_el","useElementBounding","windowResize","windowScroll","updateTiming","bottom","right","recalculate","ele","useElementSize","initialSize","box","isSVG","stop1","entry","boxSize","$elem","formatBoxSize","inlineSize","blockSize","stop2","useIntersectionObserver","rootMargin","threshold","_target","root2","useWindowSize","initialWidth","initialHeight","listenOrientation","includeScrollbar","__emit","show","_useModel","modalClassName","mousedDownOnBackdrop","handleMouseDown","onMouseUp","onKeydown","Modal","NextButton","useVuelidate","required","_component_Modal","_component_woot_modal_header","_component_woot_input","_component_NextButton","dropdownMenuRef","dropdownMenuButtons","getActiveButtonIndex","menuButtons","focusedButton","focusButton","newIndex","focusPreviousButton","activeIndex","focusNextButton","useKeyboardEvents","mapGetters","withMetadataArgument","_arguments","_typeof","_createClass","Constructor","protoProps","staticProps","_classCallCheck","_inherits","subClass","superClass","_setPrototypeOf","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","Super","_getPrototypeOf","_possibleConstructorReturn","self","_assertThisInitialized","_wrapNativeSuper","Class","_isNativeFunction","_construct","Parent","ParseError","_Error","_super","_this","MIN_LENGTH_FOR_NSN","MAX_LENGTH_FOR_NSN","MAX_LENGTH_COUNTRY_CODE","VALID_DIGITS","DASHES","SLASHES","DOTS","BRACKETS","TILDES","VALID_PUNCTUATION","PLUS_CHARS","compare$c","pa","pb","na","nb","objectConstructor","_defineProperties","V3","V4","DEFAULT_EXT_PREFIX","CALLING_CODE_REG_EXP","Metadata","validateMetadata","setVersion","countryCode","country","callingCode","countryCodes","NumberingPlan","_type","globalMetadataObject","formats","Format","_type2","getType","Type","FIRST_GROUP_ONLY_PREFIX_PATTERN","types","typeOf","getCountryCallingCode","isSupportedCountry","compare","RFC3966_EXTN_PREFIX","getExtensionDigitsPattern","maxLength","createExtensionPattern","purpose","extLimitAfterExplicitLabel","extLimitAfterLikelyLabel","extLimitAfterAmbiguousChar","extLimitWhenNotSure","possibleSeparatorsBetweenNumberAndExtLabel","possibleCharsAfterExtLabel","optionalExtnSuffix","explicitExtLabels","ambiguousExtLabels","ambiguousSeparator","possibleSeparatorsNumberExtLabelNoComma","autoDiallingAndExtLabelsFound","rfcExtn","explicitExtn","ambiguousExtn","americanStyleExtnWithSuffix","autoDiallingExtn","onlyCommasExtn","MIN_LENGTH_PHONE_NUMBER_PATTERN","VALID_PHONE_NUMBER","VALID_PHONE_NUMBER_START_REG_EXP","VALID_PHONE_NUMBER_WITH_EXTENSION","VALID_PHONE_NUMBER_PATTERN","isViablePhoneNumber","isViablePhoneNumberStart","EXTN_PATTERN","extractExtension","numberWithoutExtension","DIGITS","parseDigit","character","_createForOfIteratorHelperLoose","allowArrayLike","_unsupportedIterableToArray","minLen","_arrayLikeToArray","arr","len","arr2","parseIncompletePhoneNumber","_iterator","_step","parsePhoneNumberCharacter","prevParsedCharacters","emitEvent","checkNumberLength","nationalNumber","checkNumberLengthForType","type_info","possible_lengths","actual_length","minimum_length","isPossiblePhoneNumber","isPossibleNumber","matchesEntirely","regular_expression","NON_FIXED_LINE_PHONE_TYPES","getNumberType","isNumberTypeEqualTo","isValidNumber","getPossibleCountriesForNumber","_metadata","possibleCountries","couldNationalNumberBelongToCountry","applyInternationalSeparatorStyle","formattedNumber","FIRST_GROUP_PATTERN","formatNationalNumberUsingFormat","useInternationalFormat","withNationalPrefix","SINGLE_IDD_PREFIX_REG_EXP","getIddPrefix","countryMetadata","formatRFC3966","enumerableOnly","symbols","sym","_objectSpread","_defineProperty","DEFAULT_OPTIONS","extension","formatNumber","countryCallingCode","formatNationalNumber","addExtension","formatIDD","carrierCode","formatAs","chooseFormatForNumber","availableFormats","nationalNnumber","lastLeadingDigitsPattern","formatExtension","fromCountry","fromCountryCallingCode","iddPrefix","PhoneNumber","countryOrCountryCallingCode","_getCountryAndCountry","getCountryAndCountryCallingCode","phoneNumber","_format","isCountryCode","metadataJson","CAPTURING_DIGIT_PATTERN","stripIddPrefix","IDDPrefixPattern","matchedGroups","extractNationalNumberFromPossiblyIncompleteNumber","prefixPattern","prefixMatch","capturedGroupsCount","hasCapturedGroups","prefixBeforeNationalNumber","nationalPrefix","possiblePositionOfTheFirstCapturedGroup","possibleNationalPrefix","extractNationalNumber","_extractNationalNumbe","shouldHaveExtractedNationalPrefix","isPossibleIncompleteNationalNumber","nationalNumberBefore","nationalNumberAfter","extractCountryCallingCodeFromInternationalNumberWithoutPlusSign","possibleShorterNumber","possibleShorterNationalNumber","_extractNationalNumbe2","extractCountryCallingCode","isNumberWithIddPrefix","numberWithoutIDD","_extractCountryCallin","shorterNumber","_countryCallingCode","getCountryByNationalNumber","nationalPhoneNumber","countries","defaultCountry","matchingCountries","getCountryByCallingCode","PLUS_SIGN","RFC3966_VISUAL_SEPARATOR_","RFC3966_PHONE_DIGIT_","RFC3966_GLOBAL_NUMBER_DIGITS_","RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_","ALPHANUM_","RFC3966_DOMAINLABEL_","VALID_ALPHA_","RFC3966_TOPLABEL_","RFC3966_DOMAINNAME_","RFC3966_DOMAINNAME_PATTERN_","RFC3966_PREFIX_","RFC3966_PHONE_CONTEXT_","RFC3966_ISDN_SUBADDRESS_","extractPhoneContext","numberToExtractFrom","indexOfPhoneContext","phoneContextStart","phoneContextEnd","isPhoneContextValid","phoneContext","extractFormattedPhoneNumberFromPossibleRfc3966NumberUri","numberToParse","extractFormattedPhoneNumber","phoneNumberString","indexOfRfc3966Prefix","indexOfNationalNumber","indexOfIsdn","MAX_INPUT_STRING_LENGTH","PHONE_NUMBER_START_PATTERN","AFTER_PHONE_NUMBER_END_PATTERN","parse","_parseInput","parseInput","formattedPhoneNumber","_parsePhoneNumber","parsePhoneNumber","countryCallingCodeSource","valid","_extractFormattedPhoneNumber","extract","throwOnError","startsAt","v2","withExtensionStripped","defaultCallingCode","exactCountry","parsePhoneNumberWithError","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","_i","_arr","_n","_d","_s","normalizeArguments","_Array$prototype$slic","_Array$prototype$slic2","arg_1","arg_2","arg_3","arg_4","_normalizeArguments","parsePhoneNumberWithError_","parsePhoneNumber_","isValidPhoneNumber","_parsePhoneNumberWithError","_isValidPhoneNumber","getActiveCountryCode","getActiveDialCode","dial_code","dropdown","selectedItem","dropdownSearchbarHeight","selectedItemTop","_withKeys","getContrastingTextColor","FEATURE_FLAGS","PREMIUM_FEATURES","BUS_EVENTS","Spinner","_component_Spinner","tabsContainer","useTemplateRef","tabsList","listWidth","hasScroll","provide","computeScrollWidth","onScrollClick","scrollPosition","inject","updateActiveIndex","active","getItemCount","onTabClick","addMonths","dirtyDate","dirtyAmount","requiredArgs","date","toDate","toInteger","dayOfMonth","endOfDesiredMonth","daysInMonth","duration","years","months","weeks","days","hours","minutes","seconds","dateWithMonths","dateWithDays","addDays","minutesToAdd","secondsToAdd","msToAdd","finalDate","startOfWeek","dirtyOptions","locale","localeWeekStartsOn","defaultWeekStartsOn","weekStartsOn","day","addWeeks","addYears","differenceInCalendarYears","dirtyDateLeft","dirtyDateRight","dateLeft","dateRight","MILLISECONDS_IN_HOUR","differenceInHours","differenceInMilliseconds","MILLISECONDS_IN_MINUTE","differenceInMinutes","differenceInYears","sign","compareAsc","difference","isLastYearNotFull","eachDayOfInterval","dirtyInterval","startDate","endDate","endTime","dates","currentDate","step","startOfMonth","getDay","getDaysInMonth","year","monthIndex","lastDayOfMonth","getMonth","month","getYear","subMonths","sub","dateWithoutMonths","dateWithoutDays","subDays","minutestoSub","secondstoSub","mstoSub","intervalToDuration","isValid","remainingMonths","differenceInMonths","remainingDays","differenceInDays","remainingHours","remainingMinutes","remainingSeconds","differenceInSeconds","isAfter","dirtyDateToCompare","dateToCompare","isBefore","isMonday","isSameMonth","isWithinInterval","startTime","DEFAULT_ADDITIONAL_DIGITS","patterns","dateRegex","timeRegex","timezoneRegex","parseISO","additionalDigits","dateStrings","splitDateString","parseYearResult","parseYear","parseDate","timestamp","parseTime","parseTimezone","dateString","array","timeString","token","captures","century","isWeekDate","dayOfYear","parseDateUnit","week","dayOfWeek","validateWeekDate","dayOfISOWeekYear","validateDate","validateDayOfYearDate","parseTimeUnit","validateTime","timezoneString","validateTimezone","isoWeekYear","fourthOfJanuaryDay","daysInMonths","isLeapYearIndex","_year","_hours","setMonth","dirtyMonth","dateWithDesiredMonth","setHours","dirtyHours","setMinutes","dirtyMinutes","setSeconds","dirtySeconds","setYear","dirtyYear","subYears","calendarWeeks","dateRanges","DATE_RANGE_TYPES","CALENDAR_TYPES","CALENDAR_PERIODS","monthName","yearName","getIntlDateFormatForLocale","chunk","getWeeksForMonth","startOfTheMonth","startOfTheFirstWeek","endOfTheLastWeek","moveCalendarDate","calendar","startCurrentDate","endCurrentDate","period","adjust","newEnd","isToday","isCurrentMonth","referenceDate","isLastDayOfMonth","lastDay","endOfMonth","dayIsInRange","startOfDayStart","startOfDay","startOfDayEnd","isSameDay","isHoveringDayInRange","hoveredEndDate","isHoveringNextDayInRange","nextDay","getActiveDateRange","range","endOfDay","formatDateRange","formatString","isSameYear","activeDateRange","openDatePicker","START_CALENDAR","END_CALENDAR","dateFormat","localDateValue","parsedDate","calendarType","compareDate","dateValue","isStartCalendar","isEndCalendar","setDateRange","YEAR","onClickPrev","onClickNext","onClickSetView","startYear","firstYear","lastYear","activeYear","selectYear","MONTH","activeMonthIndex","setViewMode","selectMonth","emitHoveredEndDate","emitSelectDate","isSelectedStartOrEndDate","isInRange","isInCurrentMonth","isHoveringInRange","isNextDayInRange","dayClasses","onClickClear","onClickApply","LAST_7_DAYS","LAST_30_DAYS","CUSTOM_RANGE","WEEK","showDatePicker","calendarViews","selectedStartDate","selectedEndDate","selectingEndDate","selectedRange","manualStartDate","manualEndDate","newRange","isLastSevenOrThirtyDays","newStart","oldStart","oldEnd","monthDifference","differenceInCalendarMonths","moveCalendar","selectDate","openCalendar","newDate","updateManualInput","handleManualInputError","resetDatePicker","emitDateRange","WootUIKit","AvatarUploader","Button","Code","ColorPicker","ConfirmDeleteModal","ConfirmModal","DeleteModal","DropdownItem","DropdownMenu","FeatureToggle","Input","PhoneInput","Label","LoadingState","ModalHeader","SidemenuIcon","SubmitButton","Tabs","TabsItem","Thumbnail","DatePicker","Vue","minLength","account_id","_component_woot_modal","_component_woot_submit_button","useEmitter","eventName","onBeforeUnmount","routeIsAccessibleFor","route","userPermissions","routePermissions","hasPermissions","defaultRedirectPage","to","permissions","accountId","ROLES","CONVERSATION_PERMISSIONS","CONTACT_PERMISSIONS","REPORTS_PERMISSIONS","PORTAL_PERMISSIONS","validateActiveAccountRoutes","user","accountDashboardURL","getUserPermissions","validateLoggedInRoutes","currentAccount","getCurrentAccount","isAConversationRoute","routeName","includeBase","includeExtended","baseRoutes","extendedRoutes","getConversationDashboardRoute","isAInboxViewRoute","isNotificationRoute","RECONNECTED_BANNER_TIMEOUT","useRoute","showNotification","isDisconnected","isReconnecting","isReconnected","reconnectTimeout","bannerText","iconName","canRefresh","refreshPage","closeNotification","isInAnyOfTheRoutes","updateWebsocketStatus","handleReconnectionCompleted","handleReconnecting","updateOnlineStatus","classList","useAdmin","getters","useStoreGetters","currentUserRole","SEMVER_SPEC_VERSION","MAX_LENGTH","MAX_SAFE_INTEGER","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","RELEASE_TYPES","constants","debug","define_process_env_default","debug_1","safeRe","LETTERDASHNUMBER","safeRegexReplacements","makeSafeRegex","createToken","isGlobal","safe","looseOption","emptyOpts","parseOptions","parseOptions_1","numeric","compareIdentifiers","anum","bnum","rcompareIdentifiers","identifiers","SemVer$d","SemVer","num","release","identifierBase","base","prerelease","semver","throwErrors","er","parse_1","valid_1","clean_1","inc","inc_1","version1","version2","v1","comparison","v1Higher","highVersion","lowVersion","highHasPre","major","loose","major_1","minor","minor_1","patch","patch_1","parsed","prerelease_1","compare_1","rcompare","rcompare_1","compareLoose","compareLoose_1","compareBuild","versionA","versionB","compareBuild_1","sort","sort_1","rsort","rsort_1","gt_1","lt_1","eq","eq_1","neq","neq_1","gte","gte_1","lte","lte_1","cmp","op","cmp_1","coerce","coerceRtlRegex","next","coerce_1","LRUCache","firstKey","lrucache","SPACE_CHARACTERS","Range","Comparator","first","isNullSet","isAny","comps","memoKey","FLAG_INCLUDE_PRERELEASE","FLAG_LOOSE","cached","cache","hr","hyphenReplace","comparatorTrimReplace","tildeTrimReplace","caretTrimReplace","rangeList","comp","parseComparator","replaceGTE0","rangeMap","comparators","thisComparators","isSatisfiable","rangeComparators","thisComparator","rangeComparator","testSet","LRU","remainingComparators","testComparator","otherComparator","replaceCarets","replaceTildes","replaceXRanges","replaceStars","isX","replaceTilde","pr","replaceCaret","replaceXRange","gtlt","xM","xm","xp","anyX","incPr","$0","from","fM","fm","fp","fpr","fb","tM","tm","tp","tpr","allowed","ANY","comparator","satisfies","satisfies_1","toComparators","toComparators_1","maxSatisfying","maxSV","rangeObj","maxSatisfying_1","minSatisfying","minSV","minSatisfying_1","minVersion","minver","setMin","compver","minVersion_1","validRange","outside","hilo","gtfn","ltefn","ltfn","ecomp","high","low","outside_1","gtr","gtr_1","ltr","ltr_1","intersects","r1","r2","intersects_1","simplify","ranges","simplified","subset","dom","sawNonNull","OUTER","simpleSub","simpleDom","isSub","simpleSubset","minimumVersionWithPreRelease","minimumVersion","eqSet","higherGT","lowerLT","gtltComp","higher","lower","hasDomLT","hasDomGT","needDomLTPre","needDomGTPre","subset_1","internalRe","require$$37","require$$38","simplifyRange","require$$39","require$$40","hasAnUpdateAvailable","latestVersion","currentVersion","Banner","isAdmin","LocalStorage","LOCAL_STORAGE_KEYS","updatedDismissedItems","_component_Banner","useAccount","getAccountFn","useMapGetter","isOnChatwootCloud","isFeatureEnabledonAccount","url","account","createdAt","limits","conversation","nonWebInboxes","consumed","EMPTY_SUBSCRIPTION_INFO","status","endsOn","subscription","ActionCableConnector","BaseActionCableConnector","app","pubsubToken","websocketURL","__publicField","meta","conversationId","sender","AuthAPI","lastActivityAt","DashboardAudioNotificationHelper","timerEvent","vueActionCable","_component_router_link","WootSnackbar","originalMessage","action","usei18n","snackMessage","_component_WootSnackbar","setColorTheme","isOSOnDarkMode","selectedColorScheme","DEFAULT_CONVERSATION_SIDEBAR_ITEMS_ORDER","DEFAULT_CONTACT_SIDEBAR_ITEMS_ORDER","slugifyChannel","useConversationSidebarItemsOrder","uiSettings","itemsOrder","itemsOrderCopy","useContactSidebarItemsOrder","toggleSidebarUIState","updateUISettings","setSignatureFlagForInbox","channelType","slugifiedChannel","fetchSignatureFlagFromUISettings","isEditorHotKeyEnabled","editorMessageKey","enterToSendEnabled","useUISettings","useStore","settings","FONT_SIZE_OPTIONS","FONT_SIZE_NAMES","getFontSizeLabelKey","createFontSizeOption","applyFontSizeToDOM","pixelValue","useFontSize","fontSizeOptions","currentFontSize","applyFontSize","updateFontSize","newSize","NotificationSubscriptions","ApiClient","NotificationSubscriptions$1","verifyServiceWorkerExistence","registration","registrationError","hasPushPermissions","generateKeys","getPushSubscriptionPayload","sendRegistrationToServer","auth","registerSubscription","onSuccess","serviceWorkerRegistration","requestPushPermissions","permission","MAX_DISCONNECT_SECONDS","DISCONNECT_DELAY_THRESHOLD","ReconnectService","router","queryData","getAppliedConversationFiltersQuery","activeFolder","inbox","team","currentRoute","AddAccountModal","NetworkNotification","UpdateBanner","PaymentPendingBanner","WootSnackbarBox","UpgradeBanner","PendingEmailVerificationBanner","useRouter","accounts","isOnOnboardingView","mql","latestChatwootVersion","_component_UpdateBanner","_component_PendingEmailVerificationBanner","_component_PaymentPendingBanner","_component_UpgradeBanner","_component_router_view","Component","_Transition","_resolveDynamicComponent","_component_AddAccountModal","_component_WootSnackbarBox","_component_NetworkNotification","_component_LoadingState","parseErrorCode","createAxios","axios","apiHost","wootApi","Auth","accessToken","tokenType","client","expiry","moduleName","cloneRoute","_state","transition","isTimeTraveling","currentPath","storeUnwatch","fullPath","afterEachUnHook","clone","useConfig","hostURL","vapidPublicKey","enabledLanguages","isEnterprise","enterprisePlanName","isACustomBrandedInstance","shouldShowContent","FEATURE_HELP_URLS","getHelpUrlForFeature","featureName","goBack","buttonStyleClass","helpURL","openInNewTab","BaseSettingsHeader","V4Button","v$","minValue","maxValue","l1","l2","domain","support_email","features","auto_resolve_duration","isRTLSupported","getLanguageDirection","_hoisted_23","_component_BaseSettingsHeader","_component_V4Button","_component_woot_loading_state","_component_woot_code","frontendURL","SettingsWrapper","Index","agentName","agentEmail","selectedRoleId","email","uiFlags","getCustomRoles","roles","defaultRoles","customRoles","role","selectedRole","addAgent","errorResponse","attributes","attrError","errorMessage","AVAILABILITY_STATUS_KEYS","wootConstants","agentAvailability","agentCredentials","rules","pageTitle","statusList","availabilityStatuses","statusLabel","editAgent","resetPassword","loading","showAddPopup","showDeletePopup","showEditPopup","agentAPI","currentAgent","deleteConfirmText","deleteRejectText","deleteMessage","agentList","currentUserId","findCustomRole","agent","getAgentRoleName","customRole","getAgentRolePermissions","verifiedAdministrators","showEditAction","showDeleteAction","showAlertMessage","openAddPopup","hideAddPopup","openEditPopup","hideEditPopup","openDeletePopup","closeDeletePopup","deleteAgent","confirmDeletion","AgentHome","showMore","textToBeDisplayed","buttonLabel","i18nKey","toggleShowMore","botTypeConfig","isACSMLTypeBot","botType","agentBots","confirmDialog","onConfigureNewBot","onDeleteAgentBot","bot","onEditAgentBot","csmlContent","frameElement","eventData","CsmlMonacoEditor","_component_CsmlMonacoEditor","_vModelText","CsmlBotEditor","_component_CsmlBotEditor","agentBot","BackButton","_component_woot_sidemenu_icon","_component_BackButton","showNewButton","showSettingsHeader","Bot","SettingsContent","CsmlNewBot","CsmlEditBot","ATTRIBUTE_MODELS","ATTRIBUTE_TYPES","tagValue","convertToAttributeSlug","model","_component_multiselect","_withDirectives","regexPattern","getRegexp","selectedAttribute","attributeDisplayName","confirmDeleteTitle","confirmPlaceHolderText","deleteAttributes","closeDelete","openDelete","tableHeaders","selectedTabIndex","tabs","attributeModel","onClickTabChange","AttributesHome","attribute","teamIds","mentionsListContainerRef","selectedIndex","adjustScroll","itemTop","itemBottom","containerTop","containerBottom","onSelect","useKeyboardNavigableList","newItems","onHover","onListItemSelection","variableKey","MentionBox","cannedMessage","_component_MentionBox","allEmojis","searchTerm","emoji","loadEmojis","emojiGroups","emojis","slug","rest","handleMentionClick","isImageValid","fileInput","AVATAR_COLORS","STATUS_CLASSES","showDefaultAvatar","initials","words","removeEmoji","getColorsByNameLength","containerStyles","avatarStyles","badgeStyles","badgeSize","iconStyles","initialsStyles","invalidateCurrentImage","handleUploadAvatar","handleImageUpload","handleDeleteAvatar","handleDismiss","agents","tagAgentsRef","newListOfAgents","onAgentSelect","MESSAGE_VARIABLES","variable","attributePrefix","MESSAGE_EDITOR_MENU_OPTIONS","MESSAGE_SIGNATURE_EDITOR_MENU_OPTIONS","ARTICLE_EDITOR_MENU_OPTIONS","MESSAGE_EDITOR_IMAGE_RESIZES","triggerCharacters","char","minChars","$position","regexp","textFrom","textTo","fullMatch","trimmedText","suggestionsPlugin","suggestionClass","onEnter","onChange","onExit","onKeyDown","Plugin","PluginKey","view","prevState","moved","started","stopped","changed","tr","selection","editorState","DecorationSet","Decoration","TYPING_INDICATOR_IDLE_TIME","MAXIMUM_FILE_UPLOAD_SIZE","createState","placeholder","methods","enabledMenuOptions","EditorState","MessageMarkdownTransformer","messageSchema","buildEditor","typingIndicator","createTypingIndicator","editorView","showUserMentions","showCannedMenu","showVariables","showEmojiMenu","mentionSearchKey","cannedSearchTerm","variableSearchTerm","emojiSearchTerm","isImageNodeSelected","toolbarPosition","selectedImageNode","sizes","editorRoot","imageUpload","editor","contentFromEditor","MessageMarkdownSerializer","shouldShowVariables","shouldShowCannedResponses","editorMenuOptions","createSuggestionPlugin","trigger","showMenu","isAllowed","sendWithSignature","updatedValue","focusEditorInputField","pos","Selection","isBodyEmpty","removeSignatureHelper","handleEmptyBodyWithSignature","schema","paragraph","paragraphTransaction","focusEditor","unrefContent","openFileBrowser","reloadState","addSignature","contentWasEmpty","appendSignature","removeSignature","toggleSignatureInEditor","signatureEnabled","setToolbarPosition","editorRect","setURLWithQueryAndImageSize","setURLWithQueryAndSize","isEditorMouseFocusedOnAnImage","emitOnChange","updateImgToolbarOnDelete","isEnterToSendEnabled","isCmdPlusEnterToSendEnabled","onImageInsertInEditor","fileUrl","insertData","findNodeToInsertImage","uploadImageToStorage","uploadFile","onFileChange","checkFileSizeLimit","handleLineBreakWhenEnterToSendEnabled","hasPressedEnterAndNotCmdOrShift","insertNodeIntoEditor","insertAtCursor","scrollCursorIntoView","insertContentIntoEditor","defaultFrom","insertSpecialContent","getContentNode","event_map","CONVERSATION_EVENTS","useTrack","handleLineBreakWhenCmdAndEnterToSendEnabled","hasPressedCommandAndEnter","createEditorView","EditorView","tx","_view","AutomationActionTeamMessageInput","AutomationActionFileInput","WootMessageEditor","_component_AutomationActionFileInput","_component_AutomationActionTeamMessageInput","_component_WootMessageEditor","OPERATOR_TYPES_1","OPERATOR_TYPES_2","OPERATOR_TYPES_3","OPERATOR_TYPES_4","OPERATOR_TYPES_6","DEFAULT_MESSAGE_CREATED_CONDITION","DEFAULT_CONVERSATION_OPENED_CONDITION","DEFAULT_OTHER_CONDITION","DEFAULT_ACTIONS","MESSAGE_CONDITION_VALUES","PRIORITY_CONDITION_VALUES","allElementsString","elem","allElementsNumbers","formatArray","generatePayloadForObject","generatePayload","getCustomAttributeInputType","isACustomAttribute","customAttributes","attr","getCustomAttributeListDropdownValues","isCustomAttributeCheckbox","isCustomAttributeList","getOperatorTypes","generateCustomAttributeTypes","generateConditionOptions","getActionOptions","teams","labels","slaPolicies","addNoneToListFn","getConditionOptions","booleanFilterOptions","campaigns","contacts","inboxes","statusFilterOptions","getFileName","files","blobId","getDefaultConditions","getDefaultActions","filterCustomAttributes","getStandardAttributeInputType","automationTypes","generateAutomationPayload","automation","filterQueryGenerator","actionQueryGenerator","isCustomAttribute","generateCustomAttributes","conversationAttributes","contactAttributes","conversationlabel","contactlabel","getAttributes","getAutomationType","condition","getInputType","allCustomAttributes","customAttribute","getOperators","getCustomAttributeType","showActionInput","automationActionTypes","useAutomationValues","statusFilterItems","statusFilters","addNoneToList","AUTOMATIONS","AUTOMATION_RULE_EVENTS","AUTOMATION_ACTION_TYPES","useAutomation","startValue","getConditionDropdownValues","getActionDropdownValues","defaultCondition","defaultAction","currentCondition","newConditions","newActions","conversationCustomAttributesRaw","contactCustomAttributesRaw","conversationCustomAttributeTypes","contactCustomAttributeTypes","manifestedCustomAttributes","eventToUpdate","ATTRIBUTE_KEY_REQUIRED","FILTER_OPERATOR_REQUIRED","VALUE_REQUIRED","VALUE_MUST_BE_BETWEEN_1_AND_998","ACTION_PARAMETERS_REQUIRED","ATLEAST_ONE_CONDITION_REQUIRED","ATLEAST_ONE_ACTION_REQUIRED","isEmptyValue","validateSingleFilter","validateBasicFields","errors","field","validateConditions","conditions","validateSingleAction","validateActions","actions","validateAutomation","basicErrors","conditionErrors","actionErrors","start_value","FilterInputBox","AutomationActionInput","onEventChange","appendNewCondition","appendNewAction","removeFilter","removeAction","resetFilter","resetAction","manifestCustomAttributes","flag","_vModelSelect","_component_FilterInputBox","_component_AutomationActionInput","useEditableAutomation","manifestConditions","customAttr","inputType","generateActionsArray","manifestActions","formatAutomation","readableDate","messageStamp","readableDateWithTime","showDeleteConfirmationPopup","selectedAutomation","toggleModalTitle","toggleModalDescription","records","isSLAEnabled","deleteAutomation","cloneAutomation","submitAutomation","successMessage","toggleAutomation","Automation","INSTALLATION_TYPES","hasLastPage","hasFirstPage","hasNextPage","hasPrevPage","buttonClass","hasPage","onPageChange","newPage","onNextPage","onPrevPage","onFirstPage","onLastPage","totalPages","firstIndex","isFooterVisible","roleMapping","availabilityMapping","translationKeys","extractAttrChange","attrChange","extractChangedAccountUserValues","auditedChanges","changes","getAgentName","userId","handleAccountUserCreate","auditLogItem","translationPayload","roleKey","handleAccountUserUpdate","accountUserChanges","setUserInPayload","userIdChange","setTeamIdInPayload","setInboxIdInPayload","handleInboxTeamMember","handleAccountUser","generateTranslationPayload","auditableType","getAccountUserUpdateSuffix","generateLogActionKey","logActionKey","routerPage","fetchAuditLogs","page","generateLogText","translationKey","joinIfArray","mergedPayload","oldPage","auditlogs","AuditLogsHome","useCamelCase","unrefPayload","camelcaseKeys","Sentry.setContext","Sentry.captureException","useSnakeCase","snakecaseKeys","useCaptain","isCloudFeatureEnabled","captainEnabled","captainLimits","documentLimits","responseLimits","colorClass","fetchLimits","planName","subscribedQuantity","subscriptionRenewsOn","hasABillingPlan","fetchAccountDetails","onClickBillingPortal","onToggleChatWindow","billing","activeResponse","cannedResponseAPI","sortOrder","toggleSort","fetchCannedResponses","deleteCannedResponse","canned","CannedHome","ChannelApi","urlData","endPoints","SCRIPT_TYPE","DATA_LOADED_ATTR","SCRIPT_PROPERTIES","ScriptLoaderError","createScriptElement","property","findExistingScript","loadScript","handleError","_imports_0$2","PageHeader","channel","_token","_component_PageHeader","_imports_0","greetingsMessage","GreetingsEditor","website","_component_woot_color_picker","_component_GreetingsEditor","TwitterClient","twitterClient","shouldBeWebhookUrl","apiChannel","emailChannel","microsoftClient","MicrosoftClient","googleClient","isRequestingAuthorization","requestAuthorization","provider","globalConfig","isAChatwootInstance","emailProviderList","providerConfig","onClick","emailProvider","shouldStartWithPlusSign","smsChannel","validations","isPhoneE164OrEmpty","twilioChannel","parseAPIErrorResponse","Twilio","BandwidthSms","_component_Twilio","_component_BandwidthSms","whatsappChannel","isNumber","ThreeSixtyDialogWhatsapp","CloudWhatsapp","_component_ThreeSixtyDialogWhatsapp","_component_CloudWhatsapp","lineChannel","telegramChannel","channelViewList","Facebook","Website","Api","Email","Sms","Whatsapp","Line","Telegram","defineComponent","ChannelComponent","i18nMap","twilioChannelName","readableChannelName","useChannelIcon","channelTypeIconMap","providerIconMap","icon","channelIcon","selectedInbox","inboxesList","confirmDeleteMessage","deleteInbox","INBOX_FEATURES","INBOX_FEATURE_MAP","INBOX_TYPES","inboxMixin","medium","additionalAttributes","badgeKey","bannerClass","triggerAction","InboxReconnectionRequired","omniauthToken","_component_InboxReconnectionRequired","inboxEmail","_objectSpread2","_extends","_objectWithoutPropertiesLoose","excluded","sourceKeys","_objectWithoutProperties","sourceSymbolKeys","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","iter","pattern","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","on","off","selector","getParentOrHost","closest","includeCTX","R_SPACE","toggleClass","style","matrix","selfOnly","appliedTransforms","transform","matrixFn","find","tagName","iterator","getWindowScrollingElement","scrollingElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","elRect","containerRect","elMatrix","scaleX","scaleY","isScrolledPast","elSide","parentSide","getParentAutoScrollElement","elSideVal","parentSideVal","visible","getChild","childNum","includeDragEl","currentChild","Sortable","lastChild","last","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","indexOfObject","includeSelf","gotSelf","elemCSS","extend","dst","isRectEqual","rect1","rect2","_throttleTimeout","ms","cancelThrottle","scrollBy","Polymer","setRect","unsetRect","expando","AnimationStateManager","animationStates","animationCallbackId","fromRect","childMatrix","animating","animationTime","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","calculateRealTime","currentRect","translateX","translateY","repaint","PluginManager","sortable","evt","eventNameGlobal","pluginName","initialized","modified","eventProperties","modifiedValue","dispatchEvent","rootEl","targetEl","cloneEl","toEl","fromEl","oldIndex","oldDraggableIndex","newDraggableIndex","originalEvent","putSortable","extraEventProperties","onName","allEventProperties","_excluded","pluginEvent","dragEl","parentEl","ghostEl","nextEl","lastDownEl","cloneHidden","_hideGhostForTarget","_unhideGhostForTarget","_dispatchEvent","info","activeGroup","awaitingDragStarted","ignoreNextClick","sortables","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","pastFirstInvertThresh","isCircumstantialInvert","targetMoveDistance","ghostRelativeParent","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","supportCssPointerEvents","_detectDirection","elCSS","elWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","secondChildWidth","touchingSideChild2","_dragElInRowColumn","dragRect","targetRect","vertical","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_detectNearestEmptySortable","insideHorizontally","insideVertically","_prepareGroup","toFn","pull","sameGroup","otherGroup","originalGroup","nearestEmptyInsertDetectEvent","nearest","_checkOutsideTargetEl","dataTransfer","preventOnFilter","touch","originalTarget","_saveInputCheckedState","criteria","ownerDocument","dragStartFn","_disableDraggable","_nextTick","inserted","fallbackTolerance","fallbackOffset","ghostMatrix","relativeScrollOffset","dx","dy","cssMatrix","revert","activeSortable","isOwner","canSort","fromSortable","completedFired","dragOverEvent","extra","completed","_onMove","insertion","elLastChild","_ghostIsLast","_ghostIsFirst","firstChild","targetBeforeFirstSwap","differentLevel","differentRowCol","side1","scrolledPastTop","scrollBefore","_getSwapDirection","sibling","dragIndex","nextSibling","moveVector","_unsilent","_cancelNextTick","_globalDragOver","order","_generateId","useAnimation","willInsertAfter","onMoveFn","retVal","spacer","swapThreshold","invertedSwapThreshold","invertSwap","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","sum","inputs","idx","_len","_key","autoScrolls","scrollEl","scrollRootEl","scrolling","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","AutoScrollPlugin","AutoScroll","_ref2","clearPointerElemChangedInterval","clearAutoScrolls","autoScroll","ogElemScroller","newElem","isFallback","sens","speed","scrollThisInstance","scrollCustomFn","layersOut","currentParent","canScrollX","canScrollY","scrollWidth","scrollHeight","scrollPosX","scrollPosY","vx","vy","scrollOffsetY","scrollOffsetX","drop","dispatchSortableEvent","hideGhostForTarget","unhideGhostForTarget","toSortable","Revert","_ref3","Remove","_ref4","parentSortable","lastSwapEl","SwapPlugin","Swap","onMove","prevSwapEl","swapNodes","n1","n2","p1","p2","i1","i2","multiDragElements","multiDragClones","lastMultiDragSelect","multiDragSortable","initialFolding","folding","dragStarted","dragEl$1","clonesFromRect","clonesHidden","MultiDragPlugin","MultiDrag","multiDragElement","dragged","insertMultiDragClones","cloneNowShown","_ref5","cloneNowHidden","_ref6","_ref7","_this2","removeMultiDragElements","_ref8","_ref9","insertMultiDragElements","_ref10","dragRectAbsolute","clonesHiddenBefore","_ref11","dragMatrix","_ref12","multiDragIndex","_this3","oldIndicies","newIndicies","clonesInserted","elementsInserted","factory","this","__WEBPACK_EXTERNAL_MODULE__8bbf__","__WEBPACK_EXTERNAL_MODULE_a352__","installedModules","ns","that","nativeGetOwnPropertyNames","windowNames","getWindowNames","nativeGetOwnPropertyDescriptor","$reduce","arrayMethodIsStrict","arrayMethodUsesToLength","STRICT_METHOD","USES_TO_LENGTH","callbackfn","regexpExec","DOMIterables","forEach","COLLECTION_NAME","Collection","CollectionPrototype","$forEach","ITERATOR","SAFE_CLOSING","called","iteratorWithReturn","SKIP_CLOSING","ITERATION_SUPPORT","SPECIES","METHOD_NAME","constructor","flags","TO_STRING","RegExpPrototype","nativeToString","NOT_GENERIC","INCORRECT_NAME","rf","notARegExp","correctIsRegExpLogic","nativeStartsWith","CORRECT_IS_REGEXP_LOGIC","MDN_POLYFILL_BUG","searchString","Iterators","objectKeys","Properties","charAt","defineIterator","STRING_ITERATOR","setInternalState","iterated","point","create","UNSCOPABLES","ArrayPrototype","MATCH","isRegExp","$filter","arrayMethodHasSpeciesSupport","HAS_SPECIES_SUPPORT","callWithSafeIterationClosing","isArrayIteratorMethod","createProperty","getIteratorMethod","arrayLike","argumentsLength","mapfn","mapping","iteratorMethod","$entries","fixRegExpWellKnownSymbolLogic","advanceStringIndex","regExpExec","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","maybeToString","REPLACE","nativeReplace","maybeCallNative","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","REPLACE_KEEPS_$0","UNSAFE_SUBSTITUTE","searchValue","replaceValue","replacer","res","rx","functionalReplace","fullUnicode","matchStr","accumulatedResult","nextSourcePosition","position","namedCaptures","replacerArgs","getSubstitution","tailPos","ch","flattenIntoArray","arraySpeciesCreate","sourceLen","CONVERT_TO_STRING","second","isArray","originalArray","objectHas","propertyIsEnumerable","TO_ENTRIES","addToUnscopables","wrappedWellKnownSymbolModule","NAME","defineProperties","documentCreateElement","GT","LT","PROTOTYPE","SCRIPT","IE_PROTO","EmptyConstructor","scriptTag","NullProtoObjectViaActiveX","activeXDocument","temp","NullProtoObjectViaIFrame","iframe","JS","iframeDocument","NullProtoObject","createIteratorConstructor","getPrototypeOf","setToStringTag","IteratorsCore","IteratorPrototype","BUGGY_SAFARI_ITERATORS","KEYS","VALUES","ENTRIES","returnThis","Iterable","IteratorConstructor","DEFAULT","IS_SET","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","CurrentIteratorPrototype","propertyKey","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","getCurrentScript","ieStackRegExp","ffStackRegExp","stackDetails","scriptLocation","currentLocation","pageSource","inlineScriptSourceRegExp","inlineScriptSource","scripts","unicode","regexpFlags","stickyHelpers","nativeExec","patchedExec","UPDATES_LAST_INDEX_WRONG","re1","re2","UNSUPPORTED_Y","NPCG_INCLUDED","PATCH","reCopy","sticky","charsAdded","strCopy","IS_CONCAT_SPREADABLE","MAXIMUM_ALLOWED_INDEX_EXCEEDED","IS_CONCAT_SPREADABLE_SUPPORT","SPECIES_SUPPORT","isConcatSpreadable","spreadable","returnMethod","nativeDefineProperty","RE","mapper","targetIndex","sourceIndex","mapFn","MAXIMUM_ALLOWED_LENGTH_EXCEEDED","deleteCount","actualStart","insertCount","actualDeleteCount","nativeObjectCreate","getOwnPropertyNamesExternal","defineWellKnownSymbol","HIDDEN","SYMBOL","ObjectPrototype","$stringify","nativePropertyIsEnumerable","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","QObject","USE_SETTER","setSymbolDescriptor","ObjectPrototypeDescriptor","wrap","$defineProperties","properties","$getOwnPropertySymbols","$create","enumerable","$getOwnPropertyNames","IS_OBJECT_PROTOTYPE","FORCED_JSON_STRINGIFY","space","$replacer","checkCorrectnessOfIteration","INCORRECT_ITERATION","iterable","thrower","ACCESSORS","argument0","argument1","PrototypeOfArrayIteratorPrototype","arrayIterator","FunctionPrototypeToString","nameRE","nativeKeys","FAILS_ON_PRIMITIVES","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","specificCreate","boundFunction","PREFERRED_STRING","$findIndex","FIND_INDEX","SKIPS_HOLES","$indexOf","nativeIndexOf","NEGATIVE_ZERO","searchElement","$includes","TAG","IS_RIGHT","memo","REPLACE_SUPPORTS_NAMED_GROUPS","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","sham","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","nativeRegExpMethod","nativeMethod","arg2","forceStringMethod","stringMethod","regexMethod","$map","console","getConsole","ArrayIteratorMethods","ArrayValues","NativeSymbol","EmptyStringDescriptionStore","SymbolWrapper","symbolPrototype","symbolToString","native","desc","CORRECT_PROTOTYPE_GETTER","ARRAY_ITERATOR","external_commonjs_sortablejs_commonjs2_sortablejs_amd_sortablejs_root_Sortable_","external_commonjs_sortablejs_commonjs2_sortablejs_amd_sortablejs_root_Sortable_default","removeNode","insertNodeAt","fatherNode","refNode","hit","camelize","manageAndEmit","manage","eventHandlerNames","isReadOnly","tags","isHtmlTag","isTransition","isHtmlAttribute","project","entries","getComponentAttributes","$attrs","_ref3$componentData","componentData","createSortableOption","callBackBuilder","getValidSortableEntries","eventType","eventBuilder","draggable","_ref13","_ref14","getHtmlElementFromNode","addContext","domElement","getContext","componentStructure_ComponentStructure","ComponentStructure","_ref2$nodes","header","defaultNodes","footer","realList","_isRootComponent","domIndex","domChildren","firstDomListElement","indexFirstDomListElement","external_commonjs_vue_commonjs2_vue_root_Vue_","getSlot","slotValue","computeNodes","$slots","getKey","normalizedList","_map","_map2","getRootInformation","externalComponent","computeComponentStructure","nodes","_emit","evtName","evtData","_manage","originalElement","_manageAndEmit","delegateCallBack","draggingElement","emits","draggableComponent","componentStructure","_this4","$el","sortableOptions","targetDomElement","itemKey","newOptionValue","_sortable","htmElement","_this5","onList","spliceList","updatePosition","related","component","destination","added","_this$context","removed","relatedContext","currentDomIndex","draggedInList","move","futureIndex","draggedContext","sendEvent","vuedraggable","nativeSlice","fin","Draggable","_component_Draggable","_component_woot_switch","defaultTranslations","i18n","standardFieldKeys","getLabel","getPlaceHolder","getCustomFields","standardFields","customFields","preChatFields","getFormattedPreChatFields","getPreChatFields","preChatFormOptions","pre_chat_message","pre_chat_fields","formattedPreChatFields","PreChatFields","preChatFormEnabled","preChatMessage","updatedPreChatFieldOptions","_component_PreChatFields","timeSlots","generateTimeSlots","slot","newSlot","fromDate","DEFAULT_TIMEZONE","SettingsSection","BusinessDay","defaultTimeSlot","timeZoneOptions","isEnabled","unavailableMessage","timeZone","timeSlotParse","slotIndex","slotData","timeSlotTransform","_component_SettingsSection","timeSlot","_component_BusinessDay","imap_enabled","imap_address","imap_port","imap_login","imap_password","imap_enable_ssl","InputRadioGroup","SingleSelectDropdown","smtp_enabled","smtp_address","smtp_port","smtp_login","smtp_password","smtp_domain","smtp_enable_starttls_auto","smtp_enable_ssl_tls","smtp_openssl_verify_mode","smtp_authentication","encryption","_component_InputRadioGroup","_component_SingleSelectDropdown","ImapSettings","SmtpSettings","_component_ImapSettings","_component_SmtpSettings","inboxMembers","isDefaultScreen","isInputFocused","getStatusText","_imports_0$1","WidgetHead","WidgetBody","WidgetFooter","_component_WidgetHead","_component_WidgetBody","_component_WidgetFooter","Widget","welcome_title","welcome_tagline","widget_color","reply_time","avatar_url","savedInformation","bubbleSettings","_component_woot_avatar_uploader","_component_Widget","PreviewCard","keyOption","_component_PreviewCard","_component_Thumbnail","BotConfiguration","CollaboratorsPage","ConfigurationPage","FacebookReauthorize","PreChatFormSettings","SettingIntroBanner","WeeklyAvailability","WidgetBuilder","SenderNameExamplePreview","MicrosoftReauthorize","GoogleReauthorize","visibleToAllChannelTabs","isLegacyInbox","selected","portal","shouldBeUrl","_hoisted_26","_hoisted_27","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_42","_hoisted_44","_hoisted_46","_hoisted_48","_hoisted_49","_hoisted_50","_hoisted_52","_component_SettingIntroBanner","_component_woot_tabs","tab","_component_woot_tabs_item","_component_MicrosoftReauthorize","_component_FacebookReauthorize","_component_GoogleReauthorize","_hoisted_28","_hoisted_36","_hoisted_40","_hoisted_41","_hoisted_43","_hoisted_45","_hoisted_47","_component_SenderNameExamplePreview","_hoisted_51","_hoisted_53","_component_CollaboratorsPage","_hoisted_54","_component_ConfigurationPage","_hoisted_55","_component_PreChatFormSettings","_hoisted_56","_component_WeeklyAvailability","_hoisted_57","_component_WidgetBuilder","_hoisted_58","_component_BotConfiguration","steps","routes","_component_woot_wizard","ChannelSelector","_component_ChannelSelector","ChannelItem","apiChannelName","apiChannelThumbnail","_component_ChannelItem","inboxId","selectedAgents","InboxMembersAPI","EmptyState","_component_EmptyState","SettingWrapper","InboxHome","showBackButton","fullWidth","InboxChannel","ChannelList","FinishSetup","ChannelFactory","AddAgents","Settings","useIntegrationHook","integrationId","integrationGetter","integration","isHookTypeInbox","hasConnectedHooks","integrationType","isIntegrationMultiple","isIntegrationSingle","FormKit","hook","hookPayload","_component_FormKit","_mergeProps","hooks","hookHeader","NewHook","SingleIntegrationHooks","MultipleIntegrationHooks","isEmptyObject","_component_MultipleIntegrationHooks","_component_SingleIntegrationHooks","_component_NewHook","_component_woot_delete_modal","integrationStatus","integrationStatusColor","actionURL","integrationList","getI18nKey","EXAMPLE_WEBHOOK_URL","SUPPORTED_WEBHOOK_EVENTS","WebhookForm","webhook","_component_WebhookForm","alertMessage","subscribedEvents","subscriptions","SettingsLayout","NewWebhook","EditWebhook","WebhookRow","_component_SettingsLayout","thHeader","webHookItem","_component_WebhookRow","_component_NewWebhook","_component_EditWebhook","DashboardAppModal","DashboardAppsRow","dashboardAppItem","_component_DashboardAppsRow","_component_DashboardAppModal","OnClickOutside","onClickOutside$1","vOnClickOutside","binding","resolveElement","vResizeObserver","checkOverflowScroll","preventDefault","rawEvent","elInitialOverflow","useScrollLock","initialState","isLocked","stopTouchMoveListener","initialOverflow","lock","unlock","onScrollLock","isRTL","dialogRef","dialogContentRef","maxWidthClass","confirm","__expose","deleteIntegration","formatMessage","useMessageFormatter","selectedChannelId","availableChannels","errorDescription","formattedErrorMessage","useInstallationName","fetchChannels","updateIntegration","formattedHelpText","integrationLoaded","areHooksAvailable","firstHook","isIntegrationHookEnabled","hasConnectedAChannel","selectedChannelName","channelName","integrationAction","intializeSlackIntegration","useFunctionGetter","initializeLinearIntegration","isFocused","inputRef","messageClass","inputOutlineClass","handleInput","handleFocus","handleBlur","handleEnter","storeUrl","isSubmitting","storeUrlError","hideStoreUrlModal","validateStoreUrl","openStoreUrlDialog","handleStoreUrlSubmit","integrationAPI","initializeShopifyIntegration","integrations","DashboardApps","Webhook","backUrl","Slack","Linear","Shopify","IntegrationHooks","validLabelCharacters","getLabelTitleErrorMessage","validation","validations$3","getRandomColor","letters","selectedLabel","deleteLabel","onBeforeMount","createdByName","createdBy","updatedByName","updatedBy","visibilityLabel","selectedMacro","deleteMacro","useMacros","macroActionTypes","getMacroDropdownValues","actionData","dropdownValues","MACRO_ACTION_TYPES","resolveActionName","resolveTeamIds","ids","resolveLabels","resolveAgents","actionType","MacroNode","_component_MacroNode","MacroNodes","MacroProperties","keyToRemove","_component_MacroNodes","_component_MacroProperties","macro","macroId","fetchDropdownData","formatMacro","macroData","formattedActions","actionParams","manifestMacro","singleMacro","fetchMacro","initNewMacro","saveMacro","serializedMacro","macros","Macros","MacroEditor","isDate","isValidDate","firstDayOfWeek","startOfWeekYear","_ref$firstDayOfWeek","_ref$firstWeekContain","firstWeekContainsDate","firstDateOfFirstWeek","getWeek","_ref2$firstDayOfWeek","_ref2$firstWeekContai","firstDateOfThisWeek","REGEX_FORMAT","pad","output","getOffset","formatTimezone","delimeter","absOffset","meridiem","isLowercase","formatFlags","meridiemFunc","formatStr","defaultLocale","formattingTokens","match1","match2","match3","match4","match1to2","matchShortOffset","matchSigned","matchTimestamp","DAY","HOUR","MINUTE","SECOND","MILLISECOND","parseFlags","addParseFlag","tokens","escapeStringRegExp","matchWordRegExp","localeKey","matchWordCallback","cent","matchMeridiem","defaultIsPM","isPM","offsetFromString","hour","minute","to24hour","getFullInputArray","backupDate","backupArr","useBackup","createDate","createUTCDate","makeParser","mark","parseTo","parser","_options$locale","_locale","_options$backupDate","parseResult","millisecond","weekday","inputArray","firstDate","__defProp","__defProps","__getOwnPropDescs","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues","__spreadProps","__objRest","exclude","en","locales","isLocal","getLocale","isPlainObject","pick","mergeDeep","targetValue","padNumber","camelcase","camelizeRE","localeContextKey","prefixClassKey","getWeekKey","useLocale","provideLocale","lang2","locale2","providePrefixClass","usePrefixClass","provideGetWeek","useGetWeek","getPopupElementSize","originalDisplay","originalVisibility","getRelativePosition","targetWidth","targetHeight","fixed","offsetX","offsetY","relativeRect","dw","dh","getScrollParent","until","scrollBarWidth","getScrollbarWidth","outer","inner","mousedownEvent","rafThrottle","isRunning","defineVueComponent","setup","withDefault","defaultProps","resolveProps","booleanKeys2","camelizeKey","Popup","originalProps","prefixClass","popup","displayPopup","relativeElement","onInvalidate","scrollElement","handleMove","handleClickOutside","Teleport","popupProps","Popup$1","_hoisted_1$2","_hoisted_2$2","createElementVNode","_hoisted_3$2","render$2","createElementBlock","_hoisted_1$1","_hoisted_2$1","_hoisted_3$1","render$1","h2","isValidRangeDate","isValidDates","getValidDate","startOfYear","getCalendar","lastDayInLastMonth","firstDayInLastMonth","lastDayInCurrentMonth","lastMonthLength","nextMonthLength","diffCalendarMonths","yearDiff","monthDiff","assignTime","PickerInput","userInput","innerSeparator","isValidValue","isDisabledValue","handleClear","handleChange","text2","handleKeydown","keyCode","_c","showClearIcon","inputProps","pickerInputBaseProps","pickerInputProps","PickerInput$1","Picker","getContainer","defaultOpen","popupVisible","openPopup","closePopup","formatDate","fmt","value2date","date2value","innerValue","emitValue","currentValue","handleSelect","handleConfirm","disabledDateTime","renderSidebar","slotProps","_a3","disabled","popupClass","popupStyle","appendToBody","sidedar","pickerbaseProps","pickerProps","Picker$1","ButtonIcon","TableHeader","onUpdateCalendar","lastMonth","nextMonth","nextYear","lastDecade","nextDecade","TableDate","isWeekMode","showWeekNumber","titleFormat","getWeekActive","getCellClasses","onUpdatePanel","onDateMouseEnter","onDateMouseLeave","getWeekNumber","yearFormat","monthBeforeYear","monthFormat","formatLocale","handlePanelChange","panel","getCellDate","index2","row","col","handleCellClick","handleMouseEnter","handleMouseLeave","yearLabel","monthLabel","cell","TableMonth","getDate","handleClick","getDefaultYears","TableYear","getYearPanel","Calendar","innerCalendar","calendarDate","handleCalendarChange","panels","handelPanelChange","oldPanel","isDisabled","emitDate","nextDates","handleSelectDate","handleSelectYear","handleSelectMonth","cellDate","getDateClasses","notCurrentMonth","getMonthClasses","getYearClasses","calendarProps","Calendar$1","inRange","CalendarRange","defaultValues","handlePick","endValue","defaultCalendars","calendars","calendarMinDiff","updateCalendars","gap","anotherIndex","updateCalendarStart","updateCalendarEnd","hoveredValue","getRangeClasses","currentDates","classnames","outerClasses","calendarRange","calendarProps2","calendarRangeProps","CalendarRange$1","ScrollbarVertical","thumbHeight","thumbTop","heightPercentage","scrollbarWidth","handleScroll","scrollTop","prevY","handleDragstart","handleDraging","clientY","clientHeight","handleDragend","onUnmounted","Columns","getClasses","currentTarget","_isSlot","FixedList","_slot","generateList","getColumnOptions","showHour","showMinute","showSecond","use12h","format2","columns","parseOption","getFixedOptions","startMinutes","endMinutes","stepMinutes","timeMinutes","scrollTo","tick","TimePanel","isDisabledTimes","isDisabledHour","isDisabledMinute","isDisabledAMPM","minHour","maxHour","scrollToSelected","timePanelProps","TimePanel$1","TimeRange","emitChange","handleSelectStart","handleSelectEnd","disabledStartTime","disabledEndTime","timeRangeProps","TimeRange$1","useTimePanelVisible","defaultTimeVisible","closeTimePanel","openTimePanel","DateTime","timeVisible","datetime","calendarProp","timeProps","datetimeBaseProps","datetimeProps","DateTime$1","DateTimeRange","datetimes","datetimeRangeProps","DateTimeRange$1","booleanKeys","formatMap","Content","api","_component_DatePicker","formatTime","timeInSeconds","GROUP_BY_FILTER","GROUP_BY_OPTIONS","DATE_RANGE_OPTIONS","CHART_FONT_FAMILY","DEFAULT_BAR_CHART","createChartConfig","yAxisTickCallback","DEFAULT_CHART","ticks","TIME_CHART_CONFIG","METRIC_CHART","OVERVIEW_METRICS","EVENT_NAME","translatedOptions","selectedFilter","CSAT_RATINGS","selectedRating","WootDateRangePicker","ReportsFiltersDateRange","ReportsFiltersDateGroupBy","ReportsFiltersAgents","ReportsFiltersLabels","ReportsFiltersInboxes","ReportsFiltersTeams","ReportsFiltersRatings","getUnixEndOfDay","getUnixStartOfDay","groupBy","businessHours","selectedTeam","_component_ReportsFiltersDateRange","_component_WootDateRangePicker","_component_ReportsFiltersDateGroupBy","_component_ReportsFiltersAgents","_component_ReportsFiltersLabels","_component_ReportsFiltersTeams","_component_ReportsFiltersInboxes","_component_ReportsFiltersRatings","useReportMetrics","accountSummaryKey","accountSummary","calculateTrend","isAverageMetricType","displayMetric","trendColor","ChartStats","BarChart","reportKeys","infoText","metric","week_date","fromUnixTime","first_day","last_day","week_first_date","week_last_date","datasets","dataset","raw","dataIndex","_component_ChartStats","_component_BarChart","REPORTS_KEYS","ReportHeader","ReportFilterSelector","ReportContainer","fileName","REPORTS_EVENTS","_component_ReportHeader","_component_ReportFilterSelector","_component_ReportContainer","createColumnHelper","accessor","column","functionalUpdate","updater","makeStateUpdater","old","isFunction","isNumberArray","flattenBy","getChildren","flat","recurse","subArr","getDeps","deps","depArgs","depTime","newDeps","dep","resultTime","depEndTime","resultEndTime","resultFpsPercentage","getMemoOptions","tableOptions","debugLevel","_tableOptions$debugAl","createCell","table","columnId","getRenderValue","_cell$getValue","createColumn","columnDef","_resolvedColumnDef$id","resolvedColumnDef","accessorKey","accessorFn","originalRow","_result","_column$columns","orderColumns","_column$columns2","leafColumns","createHeader","_options$id","leafHeaders","recurseHeader","Headers","allColumns","_left$map$filter","_right$map$filter","leftColumns","rightColumns","centerColumns","buildHeaderGroups","_left$map$filter2","orderedLeafColumns","_right$map$filter2","headerGroups","headerGroup","flatHeaders","_header$subHeaders","_header$subHeaders2","_header$subHeaders3","_left$0$headers","_left$","_center$0$headers","_center$","_right$0$headers","_right$","columnsToGroup","headerFamily","_headerGroups$0$heade","_headerGroups$","maxDepth","findMaxDepth","createHeaderGroup","headersToGroup","pendingParentHeaders","headerToGroup","latestPendingParentHeader","isLeafHeader","isPlaceholder","bottomHeaders","recurseHeadersForSpans","headers","colSpan","rowSpan","childRowSpans","childColSpan","childRowSpan","minChildRowSpan","createRow","rowIndex","subRows","_row$getValue","parentRows","currentRow","parentRow","allCells","ColumnFaceting","includesString","filterValue","_filterValue$toString","testFalsey","includesStringSensitive","_row$getValue2","equalsString","_row$getValue3","arrIncludes","_row$getValue4","arrIncludesAll","_row$getValue5","arrIncludesSome","_row$getValue6","equals","weakEquals","inNumberRange","rowValue","unsafeMin","unsafeMax","parsedMin","parsedMax","filterFns","ColumnFiltering","firstRow","_table$options$filter","_table$options$filter2","_column$columnDef$ena","_table$options$enable","_table$options$enable2","_table$getState$colum","_table$getState$colum2","_table$getState$colum3","filterFn","previousFilter","newFilter","shouldAutoRemoveFilter","_old$filter","newFilterObj","_old$map","_table","updateFn","_functionalUpdate","defaultState","_table$initialState$c","_table$initialState","_leafRows","childRows","nextValue","extent","mean","leafRows","median","mid","nums","unique","uniqueCount","_columnId","aggregationFns","ColumnGrouping","_toString","_props$getValue","_table$getState$group","_table$getState$group2","canGroup","_table$options$aggreg","_table$options$aggreg2","_table$initialState$g","_row$subRows","grouping","groupedColumnMode","nonGroupingColumns","ColumnOrdering","_getVisibleLeafColumns","_columns$","_columns","columnOrder","orderedColumns","columnOrderCopy","columnsCopy","targetColumnId","foundIndex","getDefaultColumnPinningState","ColumnPinning","columnIds","_old$left3","_old$right3","_old$left","_old$right","_old$left2","_old$right2","_d$columnDef$enablePi","leafColumnIds","isLeft","isRight","leftAndRight","_pinningState$positio","pinningState","_pinningState$left","_pinningState$right","defaultColumnSizing","getDefaultColumnSizingInfoState","ColumnSizing","_column$columnDef$min","_column$columnDef$max","columnSize","_header$column$getSiz","prevSiblingHeader","_contextDocument","canResize","isTouchStartEvent","startSize","columnSizingStart","clientX","newColumnSizing","updateOffset","clientXPos","_old$startOffset","_old$startSize","deltaDirection","deltaOffset","deltaPercentage","headerSize","onEnd","contextDocument","mouseEvents","touchEvents","_e$touches$","passiveIfSupported","passiveEventSupported","_table$initialState$c2","_table$getHeaderGroup","_table$getHeaderGroup2","_table$getLeftHeaderG","_table$getLeftHeaderG2","_table$getCenterHeade","_table$getCenterHeade2","_table$getRightHeader","_table$getRightHeader2","passiveSupported","supported","ColumnVisibility","childColumns","cells","makeVisibleColumnsMethod","getColumns","GlobalFaceting","GlobalFiltering","_table$getCoreRowMode","_table$options$getCol","globalFilterFn","RowExpanding","registered","queued","_table$options$autoRe","expanded","_table$initialState$e","splitId","_expanded","exists","oldExpanded","rowId","_table$options$getIsR","_table$options$getRow","isFullyExpanded","canExpand","defaultPageIndex","defaultPageSize","getDefaultPaginationState","RowPagination","safeUpdater","_table$initialState$p","pageIndex","maxPageIndex","_table$initialState$p2","_table$initialState$p3","_table$initialState2","pageSize","topRowIndex","_table$options$pageCo","newPageCount","pageCount","pageOptions","_table$options$pageCo2","_table$options$rowCou","getDefaultRowPinningState","RowPinning","includeLeafRows","includeParentRows","leafRowIds","parentRowIds","rowIds","_old$top3","_old$bottom3","_old$top","_old$bottom","_old$top2","_old$bottom2","enableRowPinning","enablePinning","isTop","isBottom","_visiblePinnedRowIds$","visiblePinnedRowIds","_table$initialState$r","_pinningState$top","_pinningState$bottom","visibleRows","pinnedRowIds","_table$options$keepPi","allRows","topPinnedRowIds","bottomPinnedRowIds","topAndBottom","RowSelection","rowSelection","preGroupedFlatRows","resolvedValue","mutateRowIsSelected","rowModel","selectRowsFn","isAllRowsSelected","paginationFlatRows","isAllPageRowsSelected","_table$getState$rowSe","totalSelected","isSelected","_opts$selectChildren","selectedRowIds","isRowSelected","isSubRowSelected","_table$options$enable3","canSelect","includeChildren","newSelectedFlatRows","newSelectedRowsById","recurseRows","rows","_row$subRows2","_selection$row$id","_row$subRows3","allChildrenSelected","someSelected","subRow","subRowChildrenSelected","reSplitAlphaNumeric","alphanumeric","rowA","rowB","compareAlphanumeric","alphanumericCaseSensitive","compareBasic","textCaseSensitive","basic","aStr","bStr","aa","bb","an","bn","combo","sortingFns","RowSorting","firstRows","isString","_table$options$sortin","_table$options$sortin2","multi","nextSortingOrder","hasManualValue","existingSorting","existingIndex","newSorting","sortAction","nextDesc","_table$options$maxMul","_column$columnDef$sor","firstSortDirection","isSorted","_column$columnDef$ena2","_table$getState$sorti","columnSort","_table$getState$sorti2","_table$getState$sorti3","_table$initialState$s","builtInFeatures","createTable","_options$_features","_options$initialState","_features","defaultOptions","mergeOptions","_feature$getInitialSt","queuedTimeout","coreInstance","newOptions","searchAll","defaultColumn","_defaultColumn","_props$renderValue$to","_props$renderValue","columnDefs","recurseColumns","groupingColumnDef","flatColumns","getCoreRowModel","accessRows","originalRows","_row$originalSubRows","expandRows","expandedRows","handleRow","getPaginationRowModel","pagination","flatRows","rowsById","pageStart","pageEnd","paginatedRowModel","trueFn","$PROXY","propTraps","receiver","resolveSource","mergeProxy","sources","FlexRender","getOptionsWithReactiveData","useVueTable","initialOptions","IS_REACTIVE","resolvedOptions","dataRef","_initialOptions$state","stateProxy","sortIconMap","isRelaxed","headerClass","rowItems","reportMetrics","getMetrics","metrics","columnHelper","defaulSpanRender","cellProps","SummaryReportLink","renderAvgTime","renderCount","tableData","rowMetrics","conversationsCount","avgFirstResponseTime","avgResolutionTime","avgReplyTime","resolvedConversationsCount","fetchAllData","onFilterChange","updatedFilter","dispatchMethods","generateFileName","summarReportsRef","onDownloadClick","CUSTOM_DATE_RANGE_ID","getUnixTime","ReportFilters","filterItems","_component_ReportFilters","CsatMetricCard","sortedRatings","rating","_component_CsatMetricCard","DropdownControl","useDropdownContext","provideDropdownContext","isOpen","closeMenu","borderClass","beforeClass","componentIs","triggerClick","selectedOption","iconToRender","updateSelected","pageSizeOptions","getFormattedPages","formatter","currentPage","visiblePages","total","currentPageSize","routerParams","csatResponses","dynamicTime","contact","UserAvatarWithName","assignedAgent","giveRating","ratingObject","ConversationCell","paginationParams","newPagintaion","CsatMetrics","CsatTable","_component_CsatMetrics","_component_CsatTable","conversationCount","messageCount","resolutionRate","handoffRate","formatToPercent","fetchMetrics","ReportsAPI","BotMetrics","_component_BotMetrics","processedData","groupHeatmapByDay","quantileRange","flattendedData","getQuantileIntervals","getCountTooltip","getDayOfTheWeek","dayIndex","getHeatmapLevelClass","useLiveRefresh","timeoutId","startRefetching","stopRefetching","searchInput","searchQuery","filteredMenuItems","handleAction","accountConversationHeatmap","menuItems","selectedDays","selectedDayFilter","menuItem","downloadHeatmapData","showDropdown","toggleDropdown","fetchHeatmapData","AGENT_TABLE_PAGE_SIZE_KEY","getPageSize","handlePageSizeChange","getAgentMetrics","openDiff","AgentCell","agentConversationMetric","fetchData","TEAM_TABLE_PAGE_SIZE_KEY","getTeamMetrics","teamConversationMetric","accounti18nKey","agentStatus","accountConversationMetric","teamMenuList","agentStatusMetrics","metricName","conversationMetrics","selectedTeamLabel","spanClass","accountLabels","activeLabels","title","showAllLabels","showExpandLabelButton","labelPosition","labelContainer","computeVisibleLabelPosition","beforeSlot","labelOffset","onShowLabels","SLA_MISS_TYPES","shouldShowAllNrts","frtMisses","slaEvent","nrtMisses","missedEvents","rtMisses","shouldShowMoreNRTButton","toggleShowAllNRT","SLAPopoverCard","_component_SLAPopoverCard","conversationLabels","SLAReportItem","TableFooter","TableHeaderCell","_component_TableHeaderCell","slaReport","_component_SLAReportItem","_component_TableFooter","buildFilterList","getActiveFilter","filters","filterItem","getFilterType","debouncedEmit","onSearch","filteredListItems","picoSearch","isDropdownListEmpty","isFilterActive","shouldShowLoadingState","shouldShowEmptyState","addFilter","closeDropdown","hoveredItemId","showSubMenu","hideSubMenu","isHovered","FilterButton","ActiveFilterChip","AddFilterChip","filterTypes","activeFilterTypes","filterType","filterKey","_component_ActiveFilterChip","_component_AddFilterChip","_component_FilterButton","SLAFilter","_component_woot_date_picker","_component_SLAFilter","SLAMetrics","SLATable","SLAReportFilters","pageNumber","_component_SLAReportFilters","_component_SLAMetrics","_component_SLATable","oldReportRoutes","AgentReports","InboxReports","LabelReports","TeamReports","revisedReportRoutes","AgentReportsIndex","AgentReportsShow","InboxReportsIndex","InboxReportsShow","TeamReportsIndex","TeamReportsShow","reports","ReportsWrapper","LiveReports","SLAReports","CsatResponses","BotReports","validations$2","isInvalid","SlaTimeInput","firstResponseTimeThreshold","nextResponseTimeThreshold","resolutionTimeThreshold","onlyDuringBusinessHours","thresholds","converted","convertSecondsToTimeUnit","unit","isAnyInvalid","_component_SlaTimeInput","SlaForm","_component_SlaForm","primaryAction","AddSLA","SLAEmptyState","SLAHeader","SLAListItem","SLAListItemLoading","SLAPaywallEnterprise","_component_SLAHeader","ii","_component_SLAListItemLoading","_component_SLAPaywallEnterprise","sla","_component_SLAListItem","_component_SLAEmptyState","_component_AddSLA","teamsList","deleteTeam","validations$1","FormInput","formData","allowAutoAssign","reactive","_component_FormInput","_vModelCheckbox","TeamForm","_component_TeamForm","teamId","agentId","shouldRemove","AgentSelector","newAgentList","_component_AgentSelector","members","TeamsIndex","CreateStepWrap","CreateTeam","EditStepWrap","EditTeam","EditAgents","selectedPermissions","nameInput","addCustomRole","resetForm","populateEditForm","hasAddedManageAllConversation","MANAGE_ALL_CONVERSATION_PERMISSIONS","hasRemovedManageAllConversation","CONVERSATION_UNASSIGNED_PERMISSIONS","CONVERSATION_PARTICIPATING_PERMISSIONS","getTranslationKey","modalTitle","modalDescription","submitButtonText","handleCustomRole","roleData","isSubmitDisabled","getFormattedPermissions","dummyCustomRolesData","currentUser","currentAccountId","isSuperAdmin","goToBillingSettings","showCustomRoleModal","customRoleModalMode","isFeatureEnabledOnAccount","isBehindAPaywall","fetchCustomRoles","openAddModal","openEditModal","hideCustomRoleModal","deleteCustomRole","CustomRolesHome","updateProfilePicture","deleteProfilePicture","baseClasses","schemeStyles","sizeClass","FormButton","_component_FormButton","customEditorMenuList","signature","updateSignature","WithLabel","_component_WithLabel","selectedValue","FormSwitch","CheckBox","NOTIFICATION_TYPES","notification","flagType","typeIndex","_component_CheckBox","_component_FormSwitch","alertTones","audio","playAudio","alertEvents","ALERT_EVENTS","alertEventValues","EVENT_TYPES","validValues","sortedValues","uniqueValues","setValue","isChecked","alertDescription","i18nKeyPrefix","audioAlert","playAudioWhenTabIsInactive","alertIfUnreadConversationExist","alertTone","audioAlertConditions","initializeNotificationUISettings","newUISettings","updatedUISettings","handleAudioConfigChange","initializeAudioAlerts","handAudioAlertChange","handleAudioAlertConditions","handleAudioToneChange","toggleMasked","maskIcon","usePolicy","isFeatureEnabled","getUserPermissionsForAccount","isFeatureFlagEnabled","featureFlag","checkPermissions","requiredPermissions","checkInstallationType","installationCheck","isPremiumFeature","hasPremiumEnterprise","installationTypes","perms","installation","shouldShow","MessageSignature","FormSection","FontSize","UserProfilePicture","Policy","UserBasicDetails","HotKeyCard","ChangePassword","NotificationPreferences","AudioNotifications","AccessToken","userAttributes","displayName","hasEmailChanged","updatePayload","success","clearCookiesOnLogout","hotKey","_component_UserProfilePicture","_component_UserBasicDetails","_component_FormSection","_component_FontSize","_component_MessageSignature","_component_HotKeyCard","_component_ChangePassword","_component_Policy","_component_AudioNotifications","_component_NotificationPreferences","_component_AccessToken","profile","getInternetExplorerVersion","ua","msie","trident","rv","edge","isIE","initCompat","_withId","withScopeId","pushScopeId","popScopeId","processOptions","delay","timeout","lastState","currentArgs","throttled","deepEqual","val1","val2","VisibilityState","vnode","_leading","intersectingEntry","beforeMount","updated","unmounted","ObserveVisibility","mitt","parents","ps","scroll","simpleArray","supportsPassive","script$2","ResizeObserver$1","minItemSize","computedMinSize","accumulator","keyField","lastPosition","pool","nr","markRaw","shallowReactive","fake","unusedViews","unusedPool","requestUpdate","continuous","isVisible","checkItem","checkPositionDiff","itemSize","gridItems","itemSecondarySize","typeField","views","itemIndexByKey","startIndex","endIndex","totalSize","visibleStartIndex","visibleEndIndex","positionDiff","buffer","beforeSize","afterSize","oldI","remainer","unusedIndex","newlyUsedView","scrollState","bounds","boundsSize","viewport","scrollDirection","scrollDistance","viewportEl","scrollerPosition","viewA","viewB","_component_ResizeObserver","resolveComponent","_directive_observe_visibility","resolveDirective","normalizeClass","resolveDynamicComponent","normalizeStyle","mergeProps","toHandlers","script$1","resizeObserverSize","prevActiveTop","activeTop","scroller","_component_RecycleScroller","itemWithSize","normalizeProps","guardReactiveProps","oldSize","force","CHAT_STATUS_FILTER_ITEMS","SORT_ORDER_ITEMS","FilterItem","_component_FilterItem","onBasicFilterChange","hasAppliedFiltersOrActiveFolders","showV4View","toggleConversationLayout","LAYOUT_TYPES","conversationDisplayType","newViewType","FILTER_OPS","NO_INPUT_OPTS","OPS_INPUT_OVERRIDE","filterOperatorIcon","useOperators","operators","equalityOperators","presenceOperators","containmentOperators","comparisonOperators","dateOperators","CONVERSATION_ATTRIBUTES","CONTACT_ATTRIBUTES","buildAttributesFilterTypes","filterModel","standardAttributes","replaceUnderscoreWithSpace","useConversationFilterContext","customFilterTypes","campaign","hasItems","selectedIds","selectedItems","selectedVisibleItems","remainingItems","remainingTooltip","toggleOption","optionToToggle","idToToggle","searchResults","optionToSearch","toggleSelected","showErrors","attributeKey","filterOperator","queryOperator","getFilterFromFilterTypes","filterObj","currentFilter","getOperator","selectedOperator","operatorFromOptions","currentOperator","queryOperatorOptions","booleanOptions","validationError","resetModelOnAttributeKeyChange","newAttributeKey","newOperator","newInputType","folderNameLocal","DEFAULT_FILTER","conditionsRef","isConditionsValid","updateSavedCustomViews","validateAndSubmit","filterModalHeaderTitle","outsideClickHandler","CONTACTS_EVENTS","activeTabIndex","onTabChange","getLastNonActivityMessage","messageInStore","messageFromAPI","filterDuplicateSourceMessages","messages","messagesWithoutDuplicates","m1","getLastMessage","lastMessageIncludingActivity","nonActivityMessages","lastNonActivityMessageInStore","lastNonActivityMessageFromAPI","getReadMessages","agentLastSeenAt","getUnreadMessages","getPlainText","messageType","MESSAGE_TYPE","isPrivate","contentAttributes","subject","fileType","ATTACHMENT_ICONS","getInboxClassByType","getAgentsByAvailability","availability","getSortedAgentsByAvailability","onlineAgents","busyAgents","offlineAgents","getAgentsByUpdatedPresence","menuRef","windowWidth","windowHeight","verticalPosition","horizontalPosition","submenuPosition","MenuItem","MenuItemWithSubmenu","AgentLoadingPlaceholder","agentsByUpdatedPresence","snoozedUntil","priority","_component_MenuItem","_component_MenuItemWithSubmenu","_component_AgentLoadingPlaceholder","MINUTE_IN_MILLI_SECONDS","HOUR_IN_MILLI_SECONDS","DAY_IN_MILLI_SECONDS","shortTimestamp","timeDiff","CONVERSATION_PRIORITY","REFRESH_INTERVAL","upperCaseType","statusKey","evaluateSLAStatus","menuWidth","menuHeight","calculatePosition","menuW","menuH","windowW","windowH","isOverflowingRight","isOverflowingBottom","CardLabels","InboxName","ConversationContextMenu","TimeAgo","MessagePreview","PriorityMark","SLACardLabel","ContextMenu","activeInbox","chat","conversationUrl","_component_InboxName","_component_PriorityMark","_component_MessagePreview","_component_TimeAgo","_component_CardLabels","_createSlots","_component_SLACardLabel","_component_ContextMenu","_component_ConversationContextMenu","ConversationCard","_component_ConversationCard","SNOOZE_OPTIONS","findStartOfNextWeek","startOfNextWeek","findStartOfNextMonth","startOfNextMonth","findNextDay","setHoursToNine","findSnoozeTime","snoozeType","snoozedReopenTime","snoozedReopenTimeToTimestamp","shortenSnoozeTime","unitMap","CMD_MUTE_CONVERSATION","CMD_UNMUTE_CONVERSATION","CMD_SEND_TRANSCRIPT","CMD_REOPEN_CONVERSATION","CMD_RESOLVE_CONVERSATION","CMD_SNOOZE_CONVERSATION","CMD_AI_ASSIST","CMD_BULK_ACTION_SNOOZE_CONVERSATION","CMD_BULK_ACTION_REOPEN_CONVERSATION","CMD_BULK_ACTION_RESOLVE_CONVERSATION","CMD_SNOOZE_NOTIFICATION","updateConversations","ninja","onClose","showAction","actionLabel","yesterday","UpdateActions","LabelActions","TeamActions","CustomSnoozeModal","customSnoozedTime","_component_LabelActions","_component_UpdateActions","_component_TeamActions","_component_CustomSnoozeModal","observedElement","isIntersecting","useChatListKeyboardEvents","listRef","getKeyboardListenerParams","allConversations","activeConversation","activeConversationIndex","lastConversationIndex","handleConversationNavigation","useBulkActions","selectedConversations","selectedInboxes","selectConversation","deSelectConversation","resetBulkActions","selectAllConversations","conversationList","availableConversations","isConversationSelected","onAssignAgent","onAssignLabels","newLabels","onAssignTeamsForBulk","onUpdateConversations","OPERATOR_TYPES_5","filterAttributeGroups","customAttributeInputType","OPERATORS.OPERATOR_TYPES_1","OPERATORS.OPERATOR_TYPES_3","OPERATORS.OPERATOR_TYPES_4","useFilter","filteri18nKey","contactFilterAttributeGroups","conversationFilterAttributeGroups","customAttributesFormatted","allFilterGroups","customAttributeTypes","activeStatus","currentUserDetails","activeAssigneeTab","conversationInbox","activeTeam","generateCustomAttributesInputType","getAttributeInputType","attribute_display_type","getValuesName","idKey","nameKey","getValuesForStatus","getValuesForLabels","getValuesForLanguages","getValuesForCountries","getValuesForFilter","attribute_key","generateValuesForEditCustomViews","filter_operator","inboxType","conversationListRef","conversationDynamicScroller","activeSortBy","showAdvancedFilters","chatsOnView","foldersQuery","showAddFoldersModal","showDeleteFoldersModal","isContextMenuOpen","appliedFilter","advancedFilterTypes","advancedFilterOptions","chatLists","mineChatsList","allChatList","unAssignedChatsList","chatListLoading","conversationStats","appliedFilters","folders","getTeamFn","initializeStatusAndAssigneeFilterToModal","initializeInboxTeamAndLabelFilterToModal","intersectionObserverOptions","hasAppliedFilters","activeView","firstValue","activeFolderName","hasActiveFolders","assigneeTabItems","filterItemsByPermission","ASSIGNEE_TYPE_TAB_PERMISSIONS","countKey","showAssigneeInConversationCard","currentPageFilterKey","currentFiltersPage","hasCurrentPageEndReached","conversationCustomAttributes","activeAssigneeTabCount","conversationListPagination","hasChatsOnView","isNoFiltersOrFoldersAndChatListNotEmpty","isUnderPerPage","conversationFilters","localConversationList","showEndOfListMessage","allConversationsSelected","uniqueInboxes","setFiltersFromUISettings","filterBy","orderBy","emitConversationLoaded","fetchFilteredConversations","fetchSavedFilteredConversations","onApplyFilter","closeAdvanceFiltersModal","onUpdateSavedFilter","folderName","transformedPayload","payloadData","onClickOpenAddFoldersModal","onCloseAddFoldersModal","onClickOpenDeleteFoldersModal","onCloseDeleteFoldersModal","setParamsForEditFolderModal","initializeExistingFilterToModal","statusFilter","otherFilters","initializeFolderToFilterModal","newActiveFolder","newFilters","transformed","initalizeAppliedFiltersToModal","onToggleAdvanceFiltersModal","fetchConversations","resetAndFetchData","loadMoreConversations","updateAssigneeTab","selectedTab","openLastSavedItemInFolder","lastItemId","openLastItemAfterDeleteInFolder","assignPriority","markAsUnread","conversationType","isOnMentionsView","isOnUnattendedView","conversationListPageURL","markAsRead","onAssignTeam","toggleConversationStatus","allSelectedConversationsStatus","onContextMenuToggle","toggleSelectAll","oldVal","arrowDownButtonRef","isLoading","showActionsDropdown","openDropdown","currentChat","isResolved","isSnoozed","showAdditionalActions","showOpenButton","getConversationParams","openSnoozeModal","toggleStatus","onCmdOpenConversation","onCmdResolveConversation","all","EmailTranscriptModal","ResolveAction","ButtonV4","_component_ButtonV4","_component_ResolveAction","_component_EmailTranscriptModal","LinearAPI","issueId","linkId","LinearAPI$1","issues","shouldShowDropdown","isFetching","isLinking","linkIssueTitle","onSelectIssue","issue","parseLinearAPIErrorResponse","linkIssue","LINEAR_EVENTS","hasError","selectedItemName","selectedItemId","assignees","projects","statuses","priorities","statusDesiredOrder","isCreating","inputStyles","formState","nameError","teamError","dropdowns","getTeams","getTeamEntities","createIssue","isUnlinking","unlinkIssue","openIssue","priorityMap","formattedDate","assignee","assigneeDetails","avatarUrl","priorityLabel","linkedIssue","shouldShowPopup","tooltipText","loadLinkedIssue","closeIssue","MoreActions","_component_Linear","_component_MoreActions","configItem","greetingMessage","Hotkey","keyShortcut","_component_Hotkey","_imports_1","FeaturePlaceholder","_component_FeaturePlaceholder","OnboardingView","EmptyStateMessage","accountScopedUrl","_component_OnboardingView","_component_EmptyStateMessage","OpenAIAPI","tone","hookId","OpenAPI","cleanLabels","useAI","appIntegrations","replyMode","aiIntegration","isAIIntegrationEnabled","isLabelSuggestionFeatureEnabled","isFetchingAppIntegrations","draftKey","draftMessage","fetchIntegrationsIfRequired","recordAnalytics","OPEN_AI_EVENTS","fetchLabelSuggestions","processEvent","generatedMessage","errorData","taggedHandlers","keyboardEventListenerMixins","wrappedEvents","keydownHandler","createKeybindingsHandler","handlerToRemove","indexToAppend","actionToPerform","allowOnFocusedInput","isActiveElementTypeable","isEscape","nonRecordedAudioAttachments","attachment","recordedAudioAttachments","onRemoveAttachment","itemIndex","formatFileSize","formatBytes","isTypeImage","wootEditorReplyMode","wootEditorPrivateMode","replyModeSize","privateModeSize","REPLY_EDITOR_MODES","translateValue","EditorModeToggle","setReplyMode","handleReplyClick","handleNoteClick","handleModeToggle","CHAR_LENGTH_WARNING","_component_EditorModeToggle","validEmailsByComma","emailValidator","DyteAPI","messageId","DyteAPI$1","AILoader","_directive_dompurify_html","_component_AILoader","AIAssistanceModal","AICTAModal","AIAssistanceCTAButton","initialMessage","initializeMessage","draftMsg","_component_AIAssistanceCTAButton","_component_AIAssistanceModal","_component_AICTAModal","FileUpload","VideoCallButton","AIAssistanceButton","uploadRef","ALLOWED_FILE_TYPES_FOR_TWILIO_WHATSAPP","ALLOWED_FILE_TYPES_FOR_LINE","ALLOWED_FILE_TYPES","ActiveStorage.start","_component_FileUpload","_component_VideoCallButton","_component_AIAssistanceButton","searchInputRef","onInput","handleInsert","handlePreview","handleCopy","SearchResultItem","article","_component_SearchResultItem","onBack","onInsert","buildPortalURL","portalSlug","helpCenterURL","buildPortalArticleURL","categorySlug","articleSlug","getArticleStatus","HELP_CENTER_MENU_ITEMS","ARTICLE_STATUSES","ARTICLE_MENU_ITEMS","ARTICLE_MENU_OPTIONS","ARTICLE_TABS","CATEGORY_ALL","ARTICLE_TABS_OPTIONS","LOCALE_MENU_ITEMS","ARTICLE_EDITOR_STATUS_OPTIONS","SearchHeader","SearchResults","ArticleView","isDark","allLocales","ArticlesAPI","_component_SearchHeader","_component_ArticleView","_component_SearchResults","openProfileSettings","e$1","fa","Xa","ma","ba","ca","Ya","Sa","da","Aa","Ra","xa","u0","W1","B1","Ma","u1","qa","Q0","Da","t1","s0","t0","v0","Ea","f0","Ga","R1","j1","i0","h0","d0","M0","R0","A0","w0","Ba","J0","$a","Pa","T1","C1","F1","Za","g0","L1","C0","Ka","r0","Ua","e0","a0","m0","N0","n0","L0","x0","k0","_0","B0","l0","p0","P0","c0","O0","X0","Z0","z0","K0","s1","o1","h1","S1","x1","O1","U0","G1","ka","a1","$1","w1","I1","P1","Z1","z1","J1","f1","S0","E0","V0","H0","y0","T0","F0","I0","b0","G0","e1","Y0","Qa","Wa","ja","za","Ja","Ta","ya","ga","N1","e2","a2","t2","s2","wa","g1","Ia","_2","o2","Y1","u2","f2","b1","d1","b2","S2","W0","d2","E1","A2","H1","V1","R2","x2","La","_1","j0","Na","k1","M2","E2","B2","Ha","T2","ea","y2","w2","I2","L2","N2","q0","o0","ra","Va","ta","Oa","sa","ia","M1","H2","V2","O2","C2","F2","k2","Ca","X2","Y2","q2","q1","y1","X1","K1","U1","D2","G2","D0","la","va","$2","P2","Z2","oa","K2","U2","Q2","W2","D1","j2","ha","z2","J2","Q1","g2","Fa","ar","rr","sr","ir","_r","vr","or","ur","fr","mr","br","cr","A1","writeString","bufferToWav","numChannels","sampleRate","wav","sample","decodeAudioData","audioBlob","audioContext","arrayBuffer","convertToWav","audioBuffer","encodeToMP3","channels","samples","bitrate","outputBuffer","encoder","lamejs","maxSamplesPerFrame","sliceEnd","sampleSlice","mp3Buffer","remainingData","convertToMp3","convertAudio","inputBlob","outputFormat","waveformContainer","wavesurfer","record","isRecording","isPlaying","hasRecording","formatTimeProgress","initWaveSurfer","WaveSurfer","RecordPlugin","blob","audioUrl","getUuid","stopRecording","startRecording","playPause","formatsToRemove","template","processVariable","allKeysRequired","processedParams","templateString","variables","processedString","requiredIf","generateVariables","matchedVariables","finalVars","resetTemplate","sendMessage","TemplatesPicker","TemplateParser","_component_TemplateParser","_component_TemplatesPicker","fileUploadMixin","MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE","MAXIMUM_FILE_UPLOAD_SIZE_TWILIO_SMS_CHANNEL","DirectUpload","xhr","EmojiInput","defineAsyncComponent","__vitePreload","ArticleSearchPopover","AttachmentPreview","AudioRecorder","CannedResponse","MessageSignatureMissingAlert","ReplyBottomPanel","ReplyEmailHead","ReplyToMessage","ReplyTopPanel","ResizableTextArea","WhatsappTemplates","popoutReplyBox","defineModel","replyEditor","displayRichContentEditor","MESSAGE_MAX_LENGTH","sendMessageText","keyLabel","CONDENSED","AUDIO_FORMATS","getMessageVariables","extractTextFromMarkdown","canReply","oldConversationId","updatedMessage","bodyWithoutSignature","startsWithSlash","updatedReplyType","oldReplyType","filteredMarkdown","plainTextSignature","replaceSignature","replyType","draftToSave","trimContent","messageFromStore","selectedKey","currentMentionState","availability_status","available_name","selfAssign","messagePayload","undefinedVariables","getUndefinedVariablesInMessage","undefinedVariablesCount","replaceVariablesInMessage","selectionStart","selectionEnd","newMessage","autoRecordedFile","reader","attachments","multipleMessagePayload","caption","attachedFile","attachmentPayload","conversationContact","forwardToEmail","cc","bcc","getRecipients","replyStorageKey","replyToMessageId","_component_ReplyTopPanel","_component_ArticleSearchPopover","_component_ReplyToMessage","_component_CannedResponse","_component_EmojiInput","_component_ReplyEmailHead","_component_AudioRecorder","_component_ResizableTextArea","_component_AttachmentPreview","_component_MessageSignatureMissingAlert","_component_ReplyBottomPanel","_component_WhatsappTemplates","_component_woot_confirm_modal","MESSAGE_STATUS","messageTimestamp","screenName","sourceId","storySender","storyId","DuplicateContactException","ExceptionWithMessage","queryPayload","contactId","win","useImageZoom","imageRef","DEFAULT_IMG_TRANSFORM_ORIGIN","zoomScale","imgTransformOriginPoint","activeImageRotation","imageWrapperStyle","imageStyle","resetTransformOrigin","onRotate","rotation","getZoomOrigin","relativeX","relativeY","calculateCenterOffset","rotatedX","rotatedY","applyRotationTransform","normalizeToPercentage","onZoom","scale","newScale","originX","originY","onDoubleClickZoomImage","onWheelImageZoom","onMouseMove","onMouseLeave","isDownloading","activeAttachment","activeFileType","activeImageIndex","resetZoomAndRotation","hasMoreThanOneAttachment","readableTime","isImage","isVideo","isAudio","senderDetails","availableName","thumbnail","fileNameFromDataUrl","dataUrl","setImageAndVideoSrc","onClickChangeAttachment","onClickDownload","downloadFile","GalleryView","timeStampAppendedURL","hasPressedCommand","_component_GalleryView","buildDyteURL","DyteVideoCall","_component_DyteVideoCall","mapUrl","Letter","isImageElement","isWrappedInLink","_component_Letter","AddCannedModal","fullConversationURL","ACCOUNT_EVENTS","_component_AddCannedModal","BubbleImage","BubbleVideo","InstagramStoryErrorPlaceHolder","_component_InstagramStoryErrorPlaceHolder","_component_BubbleVideo","_component_BubbleImage","InstagramStory","_component_InstagramStory","CONTENT_TYPES","generateInputSelectContent","submittedValues","generateInputEmailContent","submittedEmail","generateFormContent","noResponseText","submittedObject","keyValuePair","formMessageContent","generateCSATContent","ratingTitle","feedbackTitle","surveyResponse","feedback_message","messageContent","csatRating","generateBotMessageContent","contentType","contentTypeMethod","BubbleActions","BubbleContact","BubbleFile","BubbleImageAudioVideo","BubbleIntegration","BubbleLocation","BubbleMailHead","BubbleReplyTo","BubbleText","InstagramStoryReply","getDayDifferenceFromNow","fullHTMLContent","fullTextContent","botMessageContent","isCentered","isLeftAligned","isRightAligned","messageData","replyTo","HIGHLIGHT_TIMER","_component_BubbleMailHead","_component_InstagramStoryReply","_component_BubbleReplyTo","_component_BubbleText","_component_BubbleIntegration","_component_BubbleImageAudioVideo","_component_BubbleLocation","_component_BubbleContact","_component_BubbleFile","_component_BubbleActions","MESSAGE_TYPES","MESSAGE_VARIANTS","SENDER_TYPES","ORIENTATION","ATTACHMENT_TYPES","MessageControl","useMessageContext","currentChatAttachments","filteredCurrentChatAttachments","provideMessageContext","progresIconSequence","progessIcon","statusIcon","statusColor","useInbox","inboxGetter","isAPIInbox","isAFacebookInbox","isAWebWidgetInbox","isATwilioChannel","isALineChannel","isAnEmailChannel","isATelegramChannel","whatsAppAPIProvider","isAMicrosoftInbox","isAGoogleInbox","isATwilioSMSChannel","isASmsInbox","isATwilioWhatsAppChannel","isAWhatsAppCloudChannel","is360DialogWhatsAppChannel","isAWhatsAppChannel","showStatusIndicator","isSent","isDelivered","isRead","statusToShow","orientation","inReplyTo","shouldGroupWithNext","varaintBaseMap","orientationMap","flexOrientationClass","classToApply","scrollToMessage","replyToPreview","firstAttachment","formattedContent","MessageFormatter","showGallery","timeStampURL","audioPlayer","isMuted","currentTime","playbackSpeed","onLoadedMetadata","playbackSpeedLabel","toggleMute","onTimeUpdate","seek","playOrPause","changePlaybackSpeed","speeds","downloadAudio","fileTypeIcon","fileDetails","getFileInfo","displayFileName","truncatedName","hasExt","textColorClass","allAttachments","mediaAttachments","allowedTypes","recordings","hasTranslations","translations","renderOriginal","renderContent","isTemplate","viewToggleKey","handleSeeOriginal","downloadAttachment","senderName","isReel","hasImgStoryError","hasVideoStoryError","onImageLoadError","onVideoLoadError","allowedCssProperties","defaultAllowedCssProperties","QUOTE_INDICATORS","QUOTE_PATTERNS","EmailQuoteExtractor","htmlContent","tempDiv","rootElement","quoteBlocks","treeWalker","currentNode","parentBlock","blockElements","fromEmail","toEmail","ccEmail","fromEmailAddress","senderEmail","bccEmail","showMeta","isExpandable","isExpanded","showQuotedMessage","contentContainer","isOutgoing","isIncoming","textToShow","fullHTML","unquotedHTML","hasQuotedMessage","$store","contactName","firstName","lastName","rawPhoneNumber","getContactObject","filterContactByNumber","searchCandidate","openContactNewTab","addContact","dyteAuthToken","meetingLink","joinTheCall","leaveTheRoom","lat","long","isRatingSubmitted","csatOption","formValues","submittedValue","formItem","contextMenuPosition","showBackgroundHighlight","showContextMenu","isMyMessage","senderId","senderType","gridClass","gridTemplate","shouldShowAvatar","componentToRender","EmailBubble","CSATBubble","FormBubble","UnsupportedBubble","DyteBubble","InstagramStoryBubble","ImageBubble","FileBubble","AudioBubble","VideoBubble","LocationBubble","ContactBubble","TextBubble","shouldShowContextMenu","isBubble","isMessageDeleted","payloadForContextMenu","contextMenuEnabledOptions","hasText","hasAttachments","shouldRenderMessage","isEmailContentType","isUnsupported","isAnIntegrationMessage","openContextMenu","closeContextMenu","handleReplyTo","avatarInfo","avatarTooltip","toRefs","allMessages","searchList","nextSenderId","currentSenderId","hasSameSender","nextMessageType","currentMessageType","areBothTemplates","getInReplyToMessage","parentMessage","inReplyToMessageId","replyMessage","Avatar","WootButton","labelsToAdd","_component_woot_label","_component_WootButton","_component_Avatar","totalMessageHeight","calculateScrollTop","conversationPanelHeight","parentHeight","relevantMessages","combinedMessageScrollHeight","REPLY_POLICY","Message","NextMessageList","ReplyBox","ConversationLabelSuggestion","isPopOutReplyBox","closePopOutReplyBox","showPopOutReplyBox","showNextBubbles","userList","getTypingUsersText","contactLastSeenAt","agentReplyTimeWindowMessage","incoming","outgoing","newChat","oldChat","messageElement","labelSuggestions","shouldLoadMoreMessages","heightDifference","_component_NextMessageList","_component_ConversationLabelSuggestion","_component_Message","_component_ReplyBox","insertIntoRichEditor","useCopilotResponse","COPILOT_EVENTS","activeAssistantLabel","COPILOT_USER_ROLES","useSuggestion","handleReset","chatContainer","scrollToBottom","promptOptions","assistants","inboxAssistant","isCaptainTyping","selectedAssistantId","activeAssistant","preferredId","preferredAssistant","inboxMatchedAssistant","setAssistant","assistant","ConversationAPI","onToggle","newContactId","prevContactId","useAgentsList","includeNoneAgent","assignable","isAgentSelected","createNoneAgent","assignableAgents","filteredAgentsByAvailability","WootDropdownItem","WootDropdownMenu","_component_WootDropdownMenu","_component_WootDropdownItem","showSearchDropdown","onCloseDropdown","onClickSelectItem","hasValue","useConversationLabels","savedLabels","inactiveLabels","onUpdateLabels","selectedLabels","_component_woot_dropdown_item","labelSanitizePattern","spacesPattern","sanitizeLabel","LabelDropdownItem","AddLabelModal","_component_woot_dropdown_menu","_component_LabelDropdownItem","_component_AddLabelModal","addLabel","LabelDropdown","AddLabel","addLabelToConversation","removeLabelFromConversation","showSearchDropdownLabel","toggleLabels","closeDropdownLabel","_component_AddLabel","_component_LabelDropdown","ContactDetailsItem","MultiselectDropdown","ConversationLabels","agentsList","priorityItem","selectedItemTeam","selectedPriorityItem","isSamePriority","_component_ContactDetailsItem","_component_MultiselectDropdown","_component_ConversationLabels","_directive_tooltip","ThumbnailGroup","MultiselectDropdownItems","participants","userIds","watcher","participant","updatedList","_component_ThumbnailGroup","_component_MultiselectDropdownItems","EmojiOrIcon","_component_EmojiOrIcon","mediaLink","isPhoneNumberValid","dialCode","emailAddress","socialProfiles","twitterScreenName","contactObject","newPhoneNumber","_component_woot_phone_input","socialProfile","ContactForm","contactItem","_component_ContactForm","MergeContactSummary","ContactDropdownItem","_component_ContactDropdownItem","_component_MergeContactSummary","MergeContact","ContactAPI","parentContactId","_component_MergeContact","CHANNEL_PRIORITY","generateLabelForContactableInboxesList","transformInbox","getInboxIconByType","compareInboxes","priorityA","priorityB","nameA","nameB","buildContactableInboxesList","contactInboxes","getCapitalizedNameFromEmail","processContactableInboxes","mergeInboxDetails","inboxesData","inboxData","matchingInbox","prepareAttachmentPayload","attachedFiles","directUploadsEnabled","prepareNewMessagePayload","targetInbox","selectedContact","ccEmails","bccEmails","prepareWhatsAppMessagePayload","templateParams","generateContactQuery","filterPayload","searchContacts","camelCasedPayload","createNewContact","newContact","fetchContactableInboxes","convertInboxesToCamelKeys","MODE","INPUT_TYPES","validatePhoneNumber","formatPhoneNumber","getValidationRules","checkTagTypeValidity","validateAndFormatNewTag","trimmedNewTag","isNewTagInValidType","formattedValue","phoneValid","phoneFormatted","createNewTagMenuItem","buildTagMenuItems","newTag","availableMenuItems","canAddTag","tagsLength","findMatchingMenuItem","modelValue","inlineInputRef","onEnterPress","tagInputRef","showInput","showDropdownMenu","emitDataOnAdd","matchingMenuItem","updateValueAndFocus","addTag","trimmedTag","removeTag","handleDropdownAction","isEmail","i18nPrefix","contactsList","selectedContactLabel","errorClass","targetInboxLabel","showBccInput","toggleBccInput","ccEmailsArray","bccEmailsArray","contactEmailsList","handleCcUpdate","handleBccUpdate","inputClass","characterCount","textareaRef","cleanedSignature","adjustHeight","setCursor","bodyEndsAt","valueWithSignature","hideMention","finalMessage","useFileUpload","attachFile","maxFileSize","handleDirectFileUpload","handleIndirectFileUpload","templateName","processedStringWithVariableHighlight","paramRules","getFieldErrorType","selectedTemplate","showTemplatesMenu","whatsAppTemplateMessages","filteredTemplates","getTemplateBody","handleTriggerClick","handleTemplateClick","handleBack","handleSendMessage","uploadAttachment","isEmojiPickerOpen","signatureToApply","setSignature","toggleMessageSignature","onClickInsertEmoji","onFileUpload","newFile","sendButtonLabel","_sfc_render","filteredImageAttachments","filteredNonImageAttachments","removeAttachment","updatedAttachments","showContactsDropdown","showInboxesDropdown","showCcEmailsDropdown","showBccEmailsDropdown","inboxTypes","_f","_g","_h","whatsappMessageTemplates","inboxChannelType","validationRules","validationStates","newMessagePayload","contactableInboxesList","showNoInboxAlert","isAnyDropdownActive","handleContactSearch","handleDropdownUpdate","searchCcEmails","searchBccEmails","setSelectedContact","handleInboxAction","removeTargetInbox","signatureToRemove","clearSelectedContact","handleAddSignature","handleRemoveSignature","handleAttachFile","clearForm","handleSendWhatsappMessage","whatsappMessagePayload","isCreatingContact","isFetchingInboxes","isSearching","showComposeNewConversation","contactById","contactsUiFlags","messageSignature","activeContact","composePopoverClass","onContactSearch","resetContacts","handleSelectedContact","contactableInboxes","handleTargetInbox","closeCompose","createConversation","isFromWhatsApp","processedInboxes","onModalBackdropClick","ContactInfoRow","EditContact","ComposeConversation","SocialIcons","ContactMergeModal","city","cityAndCountry","telegramUsername","toggleFn","_component_ContactInfoRow","_component_SocialIcons","_component_ComposeConversation","_component_EditContact","_component_ContactMergeModal","DATE_FORMAT","HelperTextPopup","isValidURL","focusAttributeKey","_component_HelperTextPopup","dragging","showAllAttributes","toggleShowAllAttributes","contactIdentifier","toggleButtonText","filteredCustomAttributes","defaultValue","orderKey","combinedElements","savedOrder","allElements","aPosition","bPosition","displayedElements","reorderElementsWithStaticPreservation","currentOrder","finalOrder","visibleKeys","staticKey","nextVisible","onDragEnd","initializeSettings","initialOrder","onClickToggle","onUpdate","updatedAttributes","onDelete","attributeValue","evenClass","referer","initiatedAt","browserInfo","browserName","browserLanguage","getLanguageName","platformName","createdAtIp","staticElements","getActionValue","resolvedMacro","isExecuting","showPreview","executeMacro","toggleMacroPreview","closeMacroPreview","MACROS_ORDER_KEY","orderedMacros","currentMacros","orderMap","aPos","bPos","newOrder","ShopifyAPI","ShopifyAPI$1","formatCurrency","currency","getStatusClass","getStatusI18nKey","fulfillmentStatus","financialStatus","getFulfillmentClass","hasSearchableInfo","orders","fetchOrders","isContactSidebarItemOpen","conversationSidebarItemsOrder","conversationSidebarItems","shopifyIntegration","isShopifyFeatureEnabled","conversationMetadataGetter","currentConversationMetaData","conversationAdditionalAttributes","contactGetter","contactAdditionalAttributes","getContactDetails","newConversationId","prevConversationId","onPanelToggle","activeTab","selectTab","showDivider","CONTACT_TABS_OPTIONS","toggleContactPanel","handleTabChange","tabItem","showCopilotTab","ConversationSidebar","ConversationHeader","DashboardAppFrame","MessagesView","dashboardApp","_component_ConversationHeader","_component_MessagesView","_component_ConversationSidebar","_component_DashboardAppFrame","_vShow","SwitchLayout","_component_SwitchLayout","showCustomSnoozeModal","selectedChat","contextMenuChatId","onCmdSnoozeConversation","chooseSnoozeTime","customSnoozeTime","hideCustomSnoozeModal","ChatList","ConversationBox","PopOverSearch","CmdBarConversationSnooze","isContactSidebarOpen","selectedConversation","_component_ChatList","_component_PopOverSearch","_component_ConversationBox","_component_CmdBarConversationSnooze","ConversationView","onFocus","onBlur","titleCase","navigateTo","createdAtTime","infoItems","visibleInfoItems","conversationsWithSubject","highlightContent","messageContainer","isOverflowing","setOverflow","escapeHtml","prepareContent","escapedText","getName","PER_PAGE","pages","contactRecords","conversationRecords","messageRecords","addTypeToRecords","mappedContacts","mappedConversations","mappedMessages","isSelectedTabAll","sliceRecordsIfAllTab","conversations","filterByTab","filterContacts","filterConversations","filterMessages","TABS_CONFIG","configs","totalSearchResultsCount","permissionCounts","isFetchingAny","showEmptySearchResults","showResultsSection","showLoadMore","showViewMore","clearSearchResult","loadMore","SEARCH_ACTIONS","SearchView","labelValue","toggleMenu","isMenuOpen","sortMenus","orderingMenus","activeSort","activeOrdering","activeSortLabel","selectedMenu","menu","activeOrderingLabel","handleSortChange","handleOrderChange","contactMenuItems","handleContactAction","onInputSearch","dropdownRef","comboboxRef","filteredOptions","selectPlaceholder","selectOption","activeCountryCode","activeDialCode","countryList","filteredCountries","activeCountry","inputBorderClass","focusClass","phoneNumberError","emitPhoneNumber","onSelectCountry","toggleCountryDropdown","closeCountryDropdown","FORM_CONFIG","SOCIAL_CONFIG","isFormInvalid","prepareStateBasedOnProps","splitName","companyName","countryOptions","editDetailsForm","socialProfilesForm","isValidationField","getValidationKey","getFormBinding","nested","stateWithoutNames","getMessageType","handleCountrySelection","selectedCountry","resetValidation","contactsFormRef","handleDialogConfirm","closeDialog","segments","isExportingContact","activeSegmentId","activeSegment","exportContacts","csvUrl","isImportingContact","hasSelectedFile","selectedFileName","handleFileClick","processFileName","lastDotIndex","baseName","handleFileChange","handleRemoveFile","FILTER_TYPE_CONTACT","isDeleting","useContactFilterContext","segmentNameLocal","updateSavedSegment","createNewContactDialogRef","contactExportDialogRef","contactImportDialogRef","createSegmentDialogRef","deleteSegmentDialogRef","showFiltersModal","segmentsQuery","hasActiveSegments","activeSegmentName","openCreateNewContactDialog","openContactImportDialog","openContactExportDialog","openCreateSegmentDialog","openDeleteSegmentDialog","onCreate","onImport","onExport","onCreateSegment","segmentId","onDeleteSegment","clearFilters","onUpdateSegment","segmentName","setParamsForEditSegmentModal","contactFilterItems","initializeSegmentToFilterModal","segment","onToggleFilters","shouldCapitalizeFirstLetter","formatOperatorLabel","formatFilterValue","activeSegmentQuery","activeFilterQueryData","startItem","endItem","isFirstPage","isLastPage","changePage","currentPageInformation","pageInfo","contactListHeaderWrapper","isNotSegmentView","isLabelView","updateCurrentPage","openFilter","renderFlag","getInitialContactData","contactData","countriesMap","countryDetails","formattedLocation","handleFormUpdate","updatedData","handleUpdateContact","onClickExpand","onClickViewDetails","isUpdating","expandedCardId","updateContact","routeTypes","paramKey","toggleExpanded","contactContent","DEFAULT_SORT_FIELD","DEBOUNCE_DELAY","customViewsUiFlags","parseSortSettings","sortString","hasDescending","contactSortBy","initialSort","sortState","activeLabel","isFetchingList","totalItems","hasContacts","isContactIndexView","showEmptyStateLayout","showEmptyText","headerTitle","updatePageParam","buildSortAttr","getCommonFetchParams","fetchContacts","fetchSavedOrAppliedFilteredContact","fetchContactsBasedOnContext","handleSort","createContact","newSortBy","selectedContactName","breadcrumbItems","isContactBlocked","handleBreadcrumbClick","toggleBlock","handleRemoveLabel","hoveredLabel","allLabels","contactLabels","availableContactLabels","labelMenuItems","savedLabel","fetchLabels","handleLabelAction","currentLabels","updatedLabels","labelTitle","labelId","handleLabelHover","deleteContact","confirmDeleteContactDialogRef","avatarFile","avatarSrc","basicContactData","openConfirmDeleteContactDialog","handleAvatarUpload","handleAvatarDelete","handleDelete","notesByContact","isFetchingNotes","isCreatingNote","notes","getWrittenBy","note","onAdd","noteId","lastNonActivityMessageContent","lastNonActivityMessage","unreadMessagesCount","unreadCount","WIDTH_CONFIG","containerRef","maxLabels","labelSet","calculateLabelWidth","charWidth","getAverageWidth","visibleLabels","updateVisibleLabels","avgWidth","slaStatus","convertObjectCamelCaseToSnakeCase","appliedSLA","isSlaMissed","hasSlaThreshold","slaStatusText","updateSlaStatus","createTimer","slaCardLabelRef","cardMessagePreviewWithMetaRef","currentContact","currentContactName","currentContactThumbnail","currentContactStatus","inboxName","inboxIcon","showMessagePreviewWithoutMeta","onCardClick","contactsById","stateInbox","accountLabelsValue","contactConversations","isMergingContact","primaryContactList","resetState","onMergeContacts","showAttributeListDropdown","toggleAttributeListDropdown","attributeListMenuItems","handleAttributeAction","updateValue","isEditingValue","editedValue","defaultDateValue","existingDate","toggleEditValue","handleInputUpdate","isAttributeTypeLink","isAttributeTypeText","isAttributeTypeNumber","attributeErrorMessage","handleUpdate","componentMap","ListAttribute","CheckboxAttribute","DateAttribute","OtherAttribute","CurrentAttributeComponent","hasContactAttributes","processContactAttributes","filterCondition","sortAttributesOrder","sortByUISettings","usedAttributes","custom","unusedAttributes","filteredUnusedAttributes","unusedAttributesCount","hasNoUnusedAttributes","hasNoUsedAttributes","contactMergeRef","isFetchingItem","isUpdatingContact","showSpinner","goToContactsList","fetchActiveContact","fetchContactNotes","fetchContactConversations","fetchAttributes","toggleContactBlock","isBlocked","ALERT_MESSAGES","commonMeta","ContactsIndex","ContactManageView","notificationItem","NotificationTable","primaryActorId","primaryActorType","notificationType","_component_NotificationTable","NotificationsView","NOTIFICATION_TYPES_MAPPING","slaCardLabel","getMessageClasses","primaryActor","assigneeMeta","isUnread","messageClasses","formatPushMessage","formattedMessage","notificationDetails","snoozedUntilTime","hasLastSnoozed","snoozedText","contextMenuActions","displayOption","sortBy","InboxOptionMenu","InboxDisplayMenu","INBOX_EVENTS","_component_InboxDisplayMenu","_component_InboxOptionMenu","InboxCard","InboxListHeader","IntersectionObserver","STATUS","SORT_ORDER","_component_InboxListHeader","_component_InboxCard","_component_IntersectionObserver","PaginationButton","_component_PaginationButton","InboxItemHeader","InboxEmptyState","existingChat","updatedIndex","targetNotification","_component_InboxEmptyState","_component_InboxItemHeader","InboxListView","InboxEmptyStateView","InboxDetailView","getPortalRoute","slugToBeAdded","portals","isHelpCenterEnabled","selectedPortal","defaultPortalLocale","selectedLocaleInPortal","selectedPortalSlug","fetchPortalAndItsCategories","selectedPortalParam","newSlug","isPortalPresent","routeToView","generateRouterParams","lastActivePortalSlug","lastActiveLocaleCode","routeToLastActivePortal","navigationPath","performRouting","articleMenuItems","commonItems","statusTextColor","statusText","categoryName","authorName","authorThumbnailSrc","lastUpdatedAt","handleArticleAction","articleContent","isCreatingPortal","slugError","convertToCategorySlug","redirectToPortal","createPortal","analyticsPayload","PORTALS_EVENTS","createPortalDialogRef","openDialog","onPortalCreate","PortalsArticlesIndexPage","PortalsArticlesNewPage","PortalsArticlesEditPage","PortalsCategoriesIndexPage","PortalsLocalesIndexPage","PortalsSettingsIndexPage","portalRoutes","PortalsNew","PortalsIndex","helpcenterRoutes","HelpCenterPageRouteView","CAMPAIGN_TYPES","handleButtonClick","senderThumbnailSrc","STATUS_COMPLETED","campaignStatus","handleEdit","senderList","urlValidators","URLPattern","mapToOptions","valueKey","labelKey","inboxOptions","sendersAndBotList","getErrorMessage","errorKey","formErrors","handleCancel","handleInboxChange","prepareCampaignDetails","handleSubmit","updateStateFromCampaign","enabled","triggerOnlyDuringBusinessHours","endPoint","timeOnPage","newInboxId","newCampaign","addCampaign","campaignDetails","CAMPAIGNS_EVENTS","handleClose","liveChatCampaignFormRef","isUpdatingCampaign","isInvalidForm","selectedCampaignId","updateCampaign","deleteCampaign","ONGOING_CAMPAIGN_EMPTY_STATE_CONTENT","ONE_OFF_CAMPAIGN_EMPTY_STATE_CONTENT","editLiveChatCampaignDialogRef","confirmDeleteCampaignDialogRef","selectedCampaign","isFetchingCampaigns","showLiveChatCampaignDialog","toggleLiveChatCampaignDialog","liveChatCampaigns","hasNoLiveChatCampaigns","selectedValues","selectedTags","currentDateTime","audienceList","formatToUTCString","localDateTime","showSMSCampaignDialog","toggleSMSCampaignDialog","SMSCampaigns","hasNoSMSCampaigns","campaignsRoutes","CampaignsPageRouteView","LiveChatCampaignsPage","SMSCampaignsPage","allOptions","deleteDialogRef","deleteEntity","shouldShowPaywall","showPaywall","handlePageChange","openBilling","prepareAssistantDetails","updateStateFromAssistant","newAssistant","assistantForm","updateAssistant","assistantDetails","createAssistant","updatedAssistant","imageError","handleImageError","openLink","link","assistantsList","documentsList","responsesList","isPopupVisible","togglePopup","showBanner","totalCount","dialogType","selectedAssistant","deleteAssistantDialog","createAssistantDialog","handleCreate","handleViewConnectedInboxes","handleCreateClose","inboxList","captainInboxIds","prepareInboxPayload","connectForm","isTwilioChannel","isWhatsAppChannel","isEmailChannel","assistantUiFlags","isFetchingAssistant","captainInboxes","disconnectInboxDialog","connectInboxDialog","assistantId","statusAction","handleAssistantAction","handleDocumentableClick","responses","assistantList","prepareDocumentDetails","documentForm","newDocument","isFilterOpen","assistantOptions","selectedAssistantLabel","handleAssistantFilterChange","currentAvailable","documents","documentsMeta","selectedDocument","deleteDocumentDialog","showRelatedResponses","showCreateDialog","createDocumentDialog","relationQuestionDialog","shouldShowAssistantSelector","handleShowRelatedDocument","handleCreateDocument","handleRelatedResponseClose","handleCreateDialogClose","captainDocument","fetchDocuments","filterParams","onDeleteSuccess","bulkDeleteDialogRef","handleBulkDelete","updateStateFromResponse","question","answer","newResponse","responseForm","updateResponse","responseDetails","createResponse","updatedResponse","responseMeta","selectedResponse","deleteDialog","bulkDeleteDialog","selectedStatus","createDialog","isStatusFilterOpen","statusOptions","selectedStatusLabel","handleAccept","handleNavigationAction","fetchResponses","bulkSelectedIds","hoveredCard","bulkSelectionState","selectedCount","bulkCheckbox","handleCardHover","handleCardSelect","handleBulkApprove","wasAllPageSelected","hadPartialSelection","onBulkDeleteSuccess","handleStatusFilterChange","AssistantIndex","AssistantInboxesIndex","DocumentsIndex","ResponsesIndex","SidebarControl","useSidebarContext","resolvePath","resolvePermissions","resolveFeatureFlag","resolveInstallationType","installationType","provideSidebarContext","useKbd","keySymbols","useSidebarKeyboardShortcuts","toggleShortcutModalFn","isCurrentRouteSameAsNavigation","navigateToRoute","showBadge","shouldRenderComponent","scrollableContainer","accessibleItems","hasAccessibleItems","isScrollable","scrollEnd","expandedItem","setExpandedItem","navigableChildren","hasChildren","hasAccessibleChildren","activeChild","pathSame","activeOnPages","hasActiveChild","toggleTrigger","firstItem","currentUserAvailability","currentUserAutoOffline","statusColors","changeAvailabilityStatus","updateAutoOffline","autoOffline","showChatSupport","allowedMenuItems","reauthorizationRequired","userAccounts","showAccountSwitcher","onChangeAccount","newId","accountUrl","emitNewAccount","accountScopedRoute","searchShortcut","showV4Routes","contactCustomViews","conversationCustomViews","sortedInboxes","newReportRoutes","reportRoutes","leafProps","ChannelLeaf","SHORTCUT_KEYS","currentLayout","needsShiftKey","keySet","LAYOUT_QWERTZ","keysToModifyInQWERTZ","useDetectKeyboardLayout","NotificationPanelItem","_component_NotificationPanelItem","NotificationPanelList","audioSettings","_component_NotificationPanelList","CommandBar","Sidebar","NextSidebar","WootKeyShortcutModal","AccountSelector","NotificationPanel","showSecondarySidebar","SMALL_SCREEN_BREAKPOINT","_component_NextSidebar","_component_Sidebar","_component_CommandBar","_component_AccountSelector","_component_WootKeyShortcutModal","_component_NotificationPanel","toggleSupportWidgetVisibility","setupListenerForWidgetEvent","dashboard","AppContainer","captainRoutes","inboxRoutes","contactRoutes","searchRoutes","notificationRoutes","Suspended","createRouter","createWebHistory","routesWithPermissions","buildPermissionsFromRouter","validateAuthenticateRoutePermission","isLoggedIn","nextRoute","initalizeRouter","userAuthentication","_from","AnalyticsHelper","createI18n","i18nMessages","createApp","App","Sentry.init","Sentry.browserTracingIntegration","VueDOMPurifyHTML","domPurifyConfig","WootUiKit","defaultConfig","isJSONValid","FloatingVue","hljsVuePlugin","Multiselect","WootSwitch","WootWizard","FluentIcon","onClickaway","commonHelpers","initializeChatwootEvents","initializeAnalyticsEvents"],"ignoreList":[0,1,2,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,52,54,55,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,225,264,333,334,377,405,406,407,408,409,424,425,470,526,527,528,529,621,622,623,642,674,675],"sources":["../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/core.js","../../../node_modules/.pnpm/@highlightjs+vue-plugin@2.1.0_highlight.js@11.10.0_vue@3.5.12_typescript@5.6.2_/node_modules/@highlightjs/vue-plugin/dist/highlightjs-vue.esm.min.js","../../../node_modules/.pnpm/vue-multiselect@3.1.0/node_modules/vue-multiselect/dist/vue-multiselect.esm.js","../../../app/javascript/dashboard/components/ui/Switch.vue","../../../app/javascript/dashboard/components/ui/Wizard.vue","../../../node_modules/.pnpm/@floating-ui+utils@0.2.7/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../node_modules/.pnpm/@floating-ui+core@1.6.7/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../node_modules/.pnpm/@floating-ui+dom@1.1.1/node_modules/@floating-ui/dom/dist/floating-ui.dom.browser.min.mjs","../../../node_modules/.pnpm/floating-vue@5.2.2_vue@3.5.12_typescript@5.6.2_/node_modules/floating-vue/dist/floating-vue.mjs","../../../app/javascript/dashboard/components/widgets/forms/AvatarUploader.vue","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/xml.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/bash.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/c.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/cpp.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/csharp.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/css.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/markdown.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/diff.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/ruby.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/go.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/graphql.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/ini.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/java.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/javascript.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/json.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/kotlin.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/less.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/lua.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/makefile.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/perl.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/objectivec.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/php.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/php-template.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/plaintext.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/python.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/python-repl.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/r.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/rust.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/scss.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/shell.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/sql.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/swift.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/yaml.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/typescript.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/vbnet.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/languages/wasm.js","../../../node_modules/.pnpm/highlight.js@11.10.0/node_modules/highlight.js/lib/common.js","../../../app/javascript/dashboard/components-next/icon/Icon.vue","../../../app/javascript/dashboard/components-next/button/constants.js","../../../app/javascript/dashboard/components-next/button/Button.vue","../../../app/javascript/shared/helpers/clipboard.js","../../../app/javascript/dashboard/components/Code.vue","../../../node_modules/.pnpm/@lk77+vue3-color@3.0.6/node_modules/@lk77/vue3-color/dist/vue3-color.common.js","../../../app/javascript/dashboard/components/widgets/ColorPicker.vue","../../../node_modules/.pnpm/@vueuse+shared@12.0.0_typescript@5.6.2/node_modules/@vueuse/shared/index.mjs","../../../node_modules/.pnpm/@vueuse+core@12.0.0_typescript@5.6.2/node_modules/@vueuse/core/index.mjs","../../../app/javascript/dashboard/components/Modal.vue","../../../app/javascript/dashboard/components/widgets/modal/ConfirmDeleteModal.vue","../../../app/javascript/dashboard/components/widgets/modal/ConfirmationModal.vue","../../../app/javascript/dashboard/components/widgets/modal/DeleteModal.vue","../../../app/javascript/shared/components/ui/dropdown/DropdownItem.vue","../../../app/javascript/shared/components/ui/dropdown/DropdownMenu.vue","../../../app/javascript/dashboard/components/widgets/FeatureToggle.vue","../../../app/javascript/dashboard/components/widgets/forms/Input.vue","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/metadata.min.json.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/min/exports/withMetadataArgument.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/ParseError.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/constants.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/tools/semver-compare.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/helpers/isObject.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/metadata.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/helpers/extension/createExtensionPattern.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/helpers/isViablePhoneNumber.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/helpers/extension/extractExtension.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/helpers/parseDigits.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/parseIncompletePhoneNumber.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/isPossible.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/helpers/getNumberType.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/isValid.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/helpers/getPossibleCountriesForNumber.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/helpers/applyInternationalSeparatorStyle.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/helpers/getIddPrefix.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/helpers/RFC3966.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/format.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/PhoneNumber.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/helpers/stripIddPrefix.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/helpers/extractNationalNumber.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/helpers/getCountryByNationalNumber.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/helpers/extractPhoneContext.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/parse.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/parsePhoneNumberWithError_.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/normalizeArguments.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/parsePhoneNumberWithError.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/parsePhoneNumber_.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/parsePhoneNumber.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/es6/isValidPhoneNumber.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/min/exports/parsePhoneNumberWithError.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/min/exports/parsePhoneNumber.js","../../../node_modules/.pnpm/libphonenumber-js@1.11.9/node_modules/libphonenumber-js/min/exports/isValidPhoneNumber.js","../../../app/javascript/dashboard/components/widgets/forms/PhoneInput.vue","../../../app/javascript/dashboard/components/ui/Label.vue","../../../app/javascript/dashboard/components/widgets/LoadingState.vue","../../../app/javascript/dashboard/components/ModalHeader.vue","../../../app/javascript/dashboard/featureFlags.js","../../../app/javascript/dashboard/components/SidemenuIcon.vue","../../../app/javascript/dashboard/components/buttons/FormSubmitButton.vue","../../../app/javascript/dashboard/components/ui/Tabs/Tabs.vue","../../../app/javascript/dashboard/components/ui/Tabs/TabsItem.vue","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/addMonths/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/add/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/startOfWeek/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/addWeeks/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/addYears/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/differenceInCalendarYears/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/differenceInHours/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/differenceInMinutes/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/differenceInYears/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/eachDayOfInterval/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/startOfMonth/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/getDay/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/getDaysInMonth/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/getMonth/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/getYear/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/subMonths/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/sub/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/intervalToDuration/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/isAfter/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/isBefore/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/isMonday/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/isSameMonth/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/isWithinInterval/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/parseISO/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/setMonth/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/setHours/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/setMinutes/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/setSeconds/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/setYear/index.js","../../../node_modules/.pnpm/date-fns@2.21.1/node_modules/date-fns/esm/subYears/index.js","../../../app/javascript/dashboard/components/ui/DatePicker/helpers/DatePickerHelper.js","../../../app/javascript/dashboard/components/ui/DatePicker/components/DatePickerButton.vue","../../../app/javascript/dashboard/components/ui/DatePicker/components/CalendarDateInput.vue","../../../app/javascript/dashboard/components/ui/DatePicker/components/CalendarDateRange.vue","../../../app/javascript/dashboard/components/ui/DatePicker/components/CalendarAction.vue","../../../app/javascript/dashboard/components/ui/DatePicker/components/CalendarYear.vue","../../../app/javascript/dashboard/components/ui/DatePicker/components/CalendarMonth.vue","../../../app/javascript/dashboard/components/ui/DatePicker/components/CalendarWeek.vue","../../../app/javascript/dashboard/components/ui/DatePicker/components/CalendarFooter.vue","../../../app/javascript/dashboard/components/ui/DatePicker/DatePicker.vue","../../../app/javascript/dashboard/components/index.js","../../../app/javascript/dashboard/components/layout/sidebarComponents/AddAccountModal.vue","../../../app/javascript/dashboard/composables/emitter.js","../../../app/javascript/dashboard/helper/routeHelpers.js","../../../app/javascript/dashboard/components/NetworkNotification.vue","../../../app/javascript/dashboard/components/ui/Banner.vue","../../../app/javascript/dashboard/composables/useAdmin.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/internal/constants.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/internal/debug.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/internal/re.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/internal/parse-options.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/internal/identifiers.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/classes/semver.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/parse.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/valid.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/clean.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/inc.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/diff.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/major.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/minor.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/patch.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/prerelease.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/compare.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/rcompare.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/compare-loose.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/compare-build.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/sort.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/rsort.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/gt.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/lt.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/eq.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/neq.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/gte.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/lte.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/cmp.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/coerce.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/internal/lrucache.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/classes/range.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/classes/comparator.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/functions/satisfies.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/to-comparators.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/max-satisfying.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/min-satisfying.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/min-version.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/valid.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/outside.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/gtr.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/ltr.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/intersects.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/simplify.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/ranges/subset.js","../../../node_modules/.pnpm/semver@7.6.3/node_modules/semver/index.js","../../../app/javascript/dashboard/components/app/versionCheckHelper.js","../../../app/javascript/dashboard/components/app/UpdateBanner.vue","../../../app/javascript/dashboard/composables/useAccount.js","../../../app/javascript/dashboard/components/app/UpgradeBanner.vue","../../../app/javascript/dashboard/components/app/PaymentPendingBanner.vue","../../../app/javascript/dashboard/components/app/PendingEmailVerificationBanner.vue","../../../app/javascript/dashboard/helper/actionCable.js","../../../app/javascript/dashboard/components/Snackbar.vue","../../../app/javascript/dashboard/components/SnackbarContainer.vue","../../../app/javascript/dashboard/helper/themeHelper.js","../../../app/javascript/dashboard/composables/useUISettings.js","../../../app/javascript/dashboard/composables/useFontSize.js","../../../app/javascript/dashboard/api/notificationSubscription.js","../../../app/javascript/dashboard/helper/pushHelper.js","../../../app/javascript/dashboard/helper/ReconnectService.js","../../../app/javascript/dashboard/App.vue","../../../app/javascript/dashboard/helper/APIHelper.js","../../../node_modules/.pnpm/vuex-router-sync@6.0.0-rc.1_vue-router@4.4.5_vue@3.5.12_typescript@5.6.2___vuex@4.1.0_vue@3.5.12_typescript@5.6.2__/node_modules/vuex-router-sync/dist/vuex-router-sync.esm-browser.js","../../../app/javascript/dashboard/composables/useConfig.js","../../../app/javascript/dashboard/components/CustomBrandPolicyWrapper.vue","../../../app/javascript/dashboard/helper/featureHelper.js","../../../app/javascript/dashboard/components/widgets/BackButton.vue","../../../app/javascript/dashboard/routes/dashboard/settings/components/BaseSettingsHeader.vue","../../../app/javascript/dashboard/routes/dashboard/settings/account/Index.vue","../../../app/javascript/dashboard/routes/dashboard/settings/account/account.routes.js","../../../app/javascript/dashboard/routes/dashboard/settings/agents/AddAgent.vue","../../../app/javascript/dashboard/routes/dashboard/settings/agents/EditAgent.vue","../../../app/javascript/dashboard/routes/dashboard/settings/agents/Index.vue","../../../app/javascript/dashboard/routes/dashboard/settings/agents/agent.routes.js","../../../app/javascript/dashboard/components/widgets/ShowMore.vue","../../../app/javascript/dashboard/routes/dashboard/settings/agentBots/components/AgentBotType.vue","../../../app/javascript/dashboard/routes/dashboard/settings/agentBots/components/AgentBotRow.vue","../../../app/javascript/dashboard/routes/dashboard/settings/agentBots/Index.vue","../../../app/javascript/dashboard/routes/dashboard/settings/agentBots/components/CSMLMonacoEditor.vue","../../../app/javascript/dashboard/routes/dashboard/settings/agentBots/components/CSMLBotEditor.vue","../../../app/javascript/dashboard/routes/dashboard/settings/agentBots/csml/Edit.vue","../../../app/javascript/dashboard/routes/dashboard/settings/agentBots/csml/New.vue","../../../app/javascript/dashboard/routes/dashboard/settings/SettingsHeader.vue","../../../app/javascript/dashboard/routes/dashboard/settings/Wrapper.vue","../../../app/javascript/dashboard/routes/dashboard/settings/agentBots/agentBot.routes.js","../../../app/javascript/dashboard/routes/dashboard/settings/attributes/constants.js","../../../app/javascript/dashboard/routes/dashboard/settings/attributes/AddAttribute.vue","../../../app/javascript/dashboard/routes/dashboard/settings/attributes/EditAttribute.vue","../../../app/javascript/dashboard/routes/dashboard/settings/attributes/CustomAttribute.vue","../../../app/javascript/dashboard/routes/dashboard/settings/attributes/Index.vue","../../../app/javascript/dashboard/routes/dashboard/settings/attributes/attributes.routes.js","../../../app/javascript/dashboard/components/widgets/FilterInput/Index.vue","../../../app/javascript/dashboard/components/widgets/AutomationActionTeamMessageInput.vue","../../../app/javascript/dashboard/components/widgets/AutomationFileInput.vue","../../../app/javascript/dashboard/components/widgets/mentions/MentionBox.vue","../../../app/javascript/dashboard/components/widgets/conversation/CannedResponse.vue","../../../app/javascript/dashboard/components/widgets/WootWriter/keyboardEmojiSelector.vue","../../../app/javascript/dashboard/components-next/avatar/Avatar.vue","../../../app/javascript/dashboard/components/widgets/conversation/TagAgents.vue","../../../app/javascript/dashboard/components/widgets/conversation/VariableList.vue","../../../app/javascript/dashboard/constants/editor.js","../../../node_modules/.pnpm/@chatwoot+prosemirror-schema@1.1.1-next/node_modules/@chatwoot/prosemirror-schema/src/mentions/plugin.js","../../../app/javascript/dashboard/components/widgets/WootWriter/Editor.vue","../../../app/javascript/dashboard/components/widgets/AutomationActionInput.vue","../../../app/javascript/dashboard/routes/dashboard/settings/automation/operators.js","../../../app/javascript/dashboard/constants/automation.js","../../../app/javascript/dashboard/helper/actionQueryGenerator.js","../../../app/javascript/dashboard/helper/automationHelper.js","../../../app/javascript/dashboard/composables/useAutomationValues.js","../../../app/javascript/dashboard/routes/dashboard/settings/automation/constants.js","../../../app/javascript/dashboard/composables/useAutomation.js","../../../app/javascript/dashboard/helper/validations.js","../../../app/javascript/dashboard/routes/dashboard/settings/automation/AddAutomationRule.vue","../../../app/javascript/dashboard/composables/useEditableAutomation.js","../../../app/javascript/dashboard/routes/dashboard/settings/automation/EditAutomationRule.vue","../../../app/javascript/dashboard/routes/dashboard/settings/automation/AutomationRuleRow.vue","../../../app/javascript/dashboard/routes/dashboard/settings/automation/Index.vue","../../../app/javascript/dashboard/routes/dashboard/settings/automation/automation.routes.js","../../../app/javascript/dashboard/constants/installationTypes.js","../../../app/javascript/dashboard/components/widgets/TableFooterPagination.vue","../../../app/javascript/dashboard/components/widgets/TableFooter.vue","../../../app/javascript/dashboard/helper/auditlogHelper.js","../../../app/javascript/dashboard/routes/dashboard/settings/auditlogs/Index.vue","../../../app/javascript/dashboard/routes/dashboard/settings/auditlogs/audit.routes.js","../../../app/javascript/dashboard/composables/useTransformKeys.js","../../../app/javascript/dashboard/composables/useCaptain.js","../../../app/javascript/dashboard/routes/dashboard/settings/billing/components/BillingMeter.vue","../../../app/javascript/dashboard/routes/dashboard/settings/billing/Index.vue","../../../app/javascript/dashboard/routes/dashboard/settings/billing/billing.routes.js","../../../app/javascript/dashboard/routes/dashboard/settings/canned/AddCanned.vue","../../../app/javascript/dashboard/routes/dashboard/settings/canned/EditCanned.vue","../../../app/javascript/dashboard/routes/dashboard/settings/canned/Index.vue","../../../app/javascript/dashboard/routes/dashboard/settings/canned/canned.routes.js","../../../app/javascript/dashboard/api/channels.js","../../../app/javascript/dashboard/routes/dashboard/settings/SettingsSubPageHeader.vue","../../../app/javascript/dashboard/helper/DOMHelpers.js","../../../app/javascript/dashboard/assets/images/channels/facebook_login.png","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Facebook.vue","../../../app/javascript/shared/components/GreetingsEditor.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Website.vue","../../../app/javascript/dashboard/api/channel/twitterClient.js","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Twitter.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Api.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/channels/emailChannels/ForwardToOption.vue","../../../app/javascript/dashboard/api/channel/microsoftClient.js","../../../app/javascript/dashboard/api/channel/googleClient.js","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/channels/emailChannels/OAuthChannel.vue","../../../app/javascript/dashboard/components/ChannelSelector.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Email.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/channels/BandwidthSms.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Twilio.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Sms.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/channels/360DialogWhatsapp.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/channels/CloudWhatsapp.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Whatsapp.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Line.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Telegram.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/ChannelFactory.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/components/ChannelName.vue","../../../app/javascript/dashboard/components-next/icon/provider.js","../../../app/javascript/dashboard/components-next/icon/ChannelIcon.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/Index.vue","../../../app/javascript/dashboard/components/widgets/SettingIntroBanner.vue","../../../app/javascript/dashboard/components/SettingsSection.vue","../../../app/javascript/shared/mixins/inboxMixin.js","../../../app/javascript/dashboard/components-next/banner/Banner.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/components/InboxReconnectionRequired.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/facebook/Reauthorize.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/channels/microsoft/Reauthorize.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/channels/google/Reauthorize.vue","../../../node_modules/.pnpm/sortablejs@1.14.0/node_modules/sortablejs/modular/sortable.esm.js","../../../node_modules/.pnpm/vuedraggable@4.1.0_vue@3.5.12_typescript@5.6.2_/node_modules/vuedraggable/dist/vuedraggable.umd.js","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/PreChatForm/PreChatFields.vue","../../../app/javascript/dashboard/helper/preChat.js","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/PreChatForm/Settings.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/components/BusinessDay.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/components/WeeklyAvailability.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/ImapSettings.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/components/InputRadioGroup.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/components/SingleSelectDropdown.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/SmtpSettings.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/settingsPage/ConfigurationPage.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/settingsPage/CollaboratorsPage.vue","../../../app/javascript/dashboard/modules/widget-preview/components/WidgetHead.vue","../../../app/javascript/dashboard/modules/widget-preview/components/WidgetFooter.vue","../../../app/javascript/dashboard/assets/images/bubble-logo.svg","../../../app/javascript/dashboard/modules/widget-preview/components/Widget.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/WidgetBuilder.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/components/BotConfiguration.vue","../../../app/javascript/dashboard/components/ui/PreviewCard.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/components/SenderNameExamplePreview.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/Settings.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/InboxChannels.vue","../../../app/javascript/dashboard/components/widgets/ChannelItem.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/ChannelList.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/AddAgents.vue","../../../app/javascript/dashboard/components/widgets/EmptyState.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/FinishSetup.vue","../../../app/javascript/dashboard/routes/dashboard/settings/inbox/inbox.routes.js","../../../app/javascript/dashboard/composables/useIntegrationHook.js","../../../app/javascript/dashboard/routes/dashboard/settings/integrations/NewHook.vue","../../../app/javascript/dashboard/routes/dashboard/settings/integrations/SingleIntegrationHooks.vue","../../../app/javascript/dashboard/routes/dashboard/settings/integrations/MultipleIntegrationHooks.vue","../../../app/javascript/dashboard/routes/dashboard/settings/integrations/IntegrationHooks.vue","../../../app/javascript/dashboard/routes/dashboard/settings/integrations/IntegrationItem.vue","../../../app/javascript/dashboard/routes/dashboard/settings/integrations/Index.vue","../../../app/javascript/dashboard/routes/dashboard/settings/helper/settingsHelper.js","../../../app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/WebhookForm.vue","../../../app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/NewWebHook.vue","../../../app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/EditWebHook.vue","../../../app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/WebhookRow.vue","../../../app/javascript/dashboard/routes/dashboard/settings/integrations/Webhooks/Index.vue","../../../app/javascript/dashboard/routes/dashboard/settings/integrations/DashboardApps/DashboardAppModal.vue","../../../app/javascript/dashboard/routes/dashboard/settings/integrations/DashboardApps/Index.vue","../../../node_modules/.pnpm/@vueuse+components@12.0.0_typescript@5.6.2/node_modules/@vueuse/components/index.mjs","../../../app/javascript/dashboard/components-next/dialog/Dialog.vue","../../../app/javascript/dashboard/routes/dashboard/settings/integrations/Integration.vue","../../../app/javascript/dashboard/routes/dashboard/settings/integrations/Slack/SelectChannelWarning.vue","../../../app/javascript/dashboard/routes/dashboard/settings/integrations/Slack/SlackIntegrationHelpText.vue","../../../app/javascript/dashboard/routes/dashboard/settings/integrations/Slack.vue","../../../app/javascript/dashboard/routes/dashboard/settings/integrations/Linear.vue","../../../app/javascript/dashboard/components-next/input/Input.vue","../../../app/javascript/dashboard/routes/dashboard/settings/integrations/Shopify.vue","../../../app/javascript/dashboard/routes/dashboard/settings/integrations/integrations.routes.js","../../../app/javascript/dashboard/routes/dashboard/settings/labels/validations.js","../../../app/javascript/dashboard/helper/labelColor.js","../../../app/javascript/dashboard/routes/dashboard/settings/labels/AddLabel.vue","../../../app/javascript/dashboard/routes/dashboard/settings/labels/EditLabel.vue","../../../app/javascript/dashboard/routes/dashboard/settings/labels/Index.vue","../../../app/javascript/dashboard/routes/dashboard/settings/labels/labels.routes.js","../../../app/javascript/dashboard/routes/dashboard/settings/macros/MacrosTableRow.vue","../../../app/javascript/dashboard/routes/dashboard/settings/macros/Index.vue","../../../app/javascript/dashboard/composables/useMacros.js","../../../app/javascript/dashboard/routes/dashboard/settings/macros/MacroNode.vue","../../../app/javascript/dashboard/routes/dashboard/settings/macros/constants.js","../../../app/javascript/dashboard/routes/dashboard/settings/macros/macroHelper.js","../../../app/javascript/dashboard/routes/dashboard/settings/macros/MacroNodes.vue","../../../app/javascript/dashboard/routes/dashboard/settings/macros/MacroProperties.vue","../../../app/javascript/dashboard/routes/dashboard/settings/macros/MacroForm.vue","../../../app/javascript/dashboard/routes/dashboard/settings/macros/MacroEditor.vue","../../../app/javascript/dashboard/routes/dashboard/settings/macros/macros.routes.js","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/ReportsWrapper.vue","../../../node_modules/.pnpm/date-format-parse@0.2.7/node_modules/date-format-parse/es/util.js","../../../node_modules/.pnpm/date-format-parse@0.2.7/node_modules/date-format-parse/es/locale/en.js","../../../node_modules/.pnpm/date-format-parse@0.2.7/node_modules/date-format-parse/es/format.js","../../../node_modules/.pnpm/date-format-parse@0.2.7/node_modules/date-format-parse/es/parse.js","../../../node_modules/.pnpm/vue-datepicker-next@1.0.3_vue@3.5.12_typescript@5.6.2_/node_modules/vue-datepicker-next/index.es.js","../../../app/javascript/dashboard/components/ui/DateRangePicker.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/constants.js","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/DateRange.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/DateGroupBy.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/Agents.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/Labels.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/Inboxes.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/Teams.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/Ratings.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/FilterSelector.vue","../../../app/javascript/dashboard/composables/useReportMetrics.js","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/ChartElements/ChartStats.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/ReportContainer.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/Index.vue","../../../node_modules/.pnpm/@tanstack+table-core@8.20.5/node_modules/@tanstack/table-core/build/lib/index.mjs","../../../node_modules/.pnpm/@tanstack+vue-table@8.20.5_vue@3.5.12_typescript@5.6.2_/node_modules/@tanstack/vue-table/build/lib/index.mjs","../../../app/javascript/dashboard/components/table/SortButton.vue","../../../app/javascript/dashboard/components/table/Table.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/SummaryReportLink.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/SummaryReports.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/AgentReportsIndex.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/InboxReportsIndex.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/TeamReportsIndex.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/ReportFilters.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/WootReports.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/AgentReportsShow.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/InboxReportsShow.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/TeamReportsShow.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/CsatMetrics.vue","../../../app/javascript/dashboard/components-next/dropdown-menu/base/provider.js","../../../app/javascript/dashboard/components-next/dropdown-menu/base/DropdownContainer.vue","../../../app/javascript/dashboard/components-next/dropdown-menu/base/DropdownBody.vue","../../../app/javascript/dashboard/components-next/dropdown-menu/base/DropdownItem.vue","../../../app/javascript/dashboard/components-next/filter/inputs/FilterSelect.vue","../../../app/javascript/dashboard/components/table/Pagination.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/ConversationCell.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/CsatTable.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/CsatResponses.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/BotMetrics.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/BotReports.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/Heatmap.vue","../../../app/javascript/dashboard/composables/useLiveRefresh.js","../../../app/javascript/dashboard/components-next/dropdown-menu/DropdownMenu.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/HeatmapContainer.vue","../../../app/javascript/dashboard/components/table/BaseCell.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/overview/AgentCell.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/overview/AgentTable.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/AgentLiveReportContainer.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/overview/TeamTable.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/TeamLiveReportContainer.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/StatsLiveReportsContainer.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/SLA/SLAMetricCard.vue","../../../app/javascript/dashboard/components/widgets/TableHeaderCell.vue","../../../app/javascript/dashboard/components/widgets/conversation/conversationCardComponents/CardLabels.vue","../../../app/javascript/dashboard/components/widgets/conversation/components/SLAEventItem.vue","../../../app/javascript/dashboard/components/widgets/conversation/components/SLAPopoverCard.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/SLA/SLAViewDetails.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/SLA/SLAReportItem.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/SLA/SLATable.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/SLA/helpers/SLAFilterHelpers.js","../../../node_modules/.pnpm/@scmmishra+pico-search@0.5.4/node_modules/@scmmishra/pico-search/dist/index.mjs","../../../app/javascript/dashboard/components/ui/Dropdown/DropdownSearch.vue","../../../app/javascript/dashboard/components/ui/Dropdown/DropdownList.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/v3/ActiveFilterChip.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/Filters/v3/AddFilterChip.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/SLA/SLAFilter.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/components/SLA/SLAReportFilters.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/SLAReports.vue","../../../app/javascript/dashboard/routes/dashboard/settings/reports/reports.routes.js","../../../app/javascript/dashboard/routes/dashboard/settings/sla/validations.js","../../../app/javascript/dashboard/routes/dashboard/settings/sla/SlaTimeInput.vue","../../../app/javascript/dashboard/routes/dashboard/settings/sla/SlaForm.vue","../../../app/javascript/dashboard/routes/dashboard/settings/sla/AddSLA.vue","../../../app/javascript/dashboard/routes/dashboard/settings/sla/components/SLAListItem.vue","../../../app/javascript/dashboard/routes/dashboard/settings/sla/components/SLAEmptyState.vue","../../../app/javascript/dashboard/routes/dashboard/settings/components/BasePaywallModal.vue","../../../app/javascript/dashboard/routes/dashboard/settings/sla/components/SLAPaywallEnterprise.vue","../../../app/javascript/dashboard/routes/dashboard/settings/sla/Index.vue","../../../app/javascript/dashboard/routes/dashboard/settings/sla/sla.routes.js","../../../app/javascript/dashboard/routes/dashboard/settings/teams/Index.vue","../../../app/javascript/dashboard/routes/dashboard/settings/teams/Create/Index.vue","../../../app/javascript/dashboard/routes/dashboard/settings/teams/Edit/Index.vue","../../../app/javascript/dashboard/routes/dashboard/settings/teams/helpers/validations.js","../../../app/javascript/dashboard/routes/dashboard/settings/teams/TeamForm.vue","../../../app/javascript/dashboard/routes/dashboard/settings/teams/Create/CreateTeam.vue","../../../app/javascript/dashboard/routes/dashboard/settings/teams/Edit/EditTeam.vue","../../../app/javascript/dashboard/routes/dashboard/settings/teams/AgentSelector.vue","../../../app/javascript/dashboard/routes/dashboard/settings/teams/Create/AddAgents.vue","../../../app/javascript/dashboard/routes/dashboard/settings/teams/Edit/EditAgents.vue","../../../app/javascript/dashboard/routes/dashboard/settings/teams/FinishSetup.vue","../../../app/javascript/dashboard/routes/dashboard/settings/teams/teams.routes.js","../../../app/javascript/dashboard/routes/dashboard/settings/customRoles/component/CustomRoleModal.vue","../../../app/javascript/dashboard/routes/dashboard/settings/customRoles/component/CustomRoleTableBody.vue","../../../app/javascript/dashboard/routes/dashboard/settings/customRoles/component/CustomRolePaywall.vue","../../../app/javascript/dashboard/routes/dashboard/settings/customRoles/Index.vue","../../../app/javascript/dashboard/routes/dashboard/settings/customRoles/customRole.routes.js","../../../app/javascript/dashboard/routes/dashboard/settings/profile/UserProfilePicture.vue","../../../app/javascript/v3/components/Form/Button.vue","../../../app/javascript/dashboard/routes/dashboard/settings/profile/UserBasicDetails.vue","../../../app/javascript/dashboard/routes/dashboard/settings/profile/MessageSignature.vue","../../../app/javascript/v3/components/Form/Select.vue","../../../app/javascript/dashboard/routes/dashboard/settings/profile/FontSize.vue","../../../app/javascript/dashboard/routes/dashboard/settings/profile/ChangePassword.vue","../../../app/javascript/v3/components/Form/CheckBox.vue","../../../app/javascript/v3/components/Form/Switch.vue","../../../app/javascript/dashboard/routes/dashboard/settings/profile/NotificationPreferences.vue","../../../app/javascript/dashboard/routes/dashboard/settings/profile/AudioAlertTone.vue","../../../app/javascript/dashboard/routes/dashboard/settings/profile/AudioAlertEvent.vue","../../../app/javascript/dashboard/routes/dashboard/settings/profile/AudioAlertCondition.vue","../../../app/javascript/dashboard/routes/dashboard/settings/profile/AudioNotifications.vue","../../../app/javascript/dashboard/routes/dashboard/settings/profile/AccessToken.vue","../../../app/javascript/dashboard/composables/usePolicy.js","../../../app/javascript/dashboard/components/policy.vue","../../../app/javascript/dashboard/routes/dashboard/settings/profile/Index.vue","../../../app/javascript/dashboard/routes/dashboard/settings/profile/profile.routes.js","../../../app/javascript/dashboard/routes/dashboard/settings/settings.routes.js","../../../node_modules/.pnpm/vue-resize@2.0.0-alpha.1_vue@3.5.12_typescript@5.6.2_/node_modules/vue-resize/dist/vue-resize.esm.js","../../../node_modules/.pnpm/vue-observe-visibility@2.0.0-alpha.1_vue@3.5.12_typescript@5.6.2_/node_modules/vue-observe-visibility/dist/vue-observe-visibility.esm.js","../../../node_modules/.pnpm/mitt@2.1.0/node_modules/mitt/dist/mitt.es.js","../../../node_modules/.pnpm/vue-virtual-scroller@2.0.0-beta.8_vue@3.5.12_typescript@5.6.2_/node_modules/vue-virtual-scroller/dist/vue-virtual-scroller.esm.js","../../../app/javascript/dashboard/components/widgets/conversation/FilterItem.vue","../../../app/javascript/dashboard/components/widgets/conversation/ConversationBasicFilter.vue","../../../app/javascript/dashboard/routes/dashboard/conversation/search/SwitchLayout.vue","../../../app/javascript/dashboard/components/ChatListHeader.vue","../../../app/javascript/dashboard/components-next/filter/operators.js","../../../app/javascript/dashboard/components-next/filter/helper/filterHelper.js","../../../app/javascript/dashboard/components-next/filter/provider.js","../../../app/javascript/dashboard/components-next/filter/inputs/MultiSelect.vue","../../../app/javascript/dashboard/components-next/filter/inputs/SingleSelect.vue","../../../app/javascript/dashboard/components-next/filter/ConditionRow.vue","../../../app/javascript/dashboard/components-next/filter/ConversationFilter.vue","../../../app/javascript/dashboard/components-next/filter/SaveCustomView.vue","../../../app/javascript/dashboard/components/widgets/ChatTypeTabs.vue","../../../app/javascript/dashboard/helper/conversationHelper.js","../../../app/javascript/dashboard/components/widgets/conversation/MessagePreview.vue","../../../app/javascript/dashboard/components/widgets/InboxName.vue","../../../app/javascript/dashboard/helper/agentHelper.js","../../../app/javascript/dashboard/components/widgets/conversation/contextMenu/menuItem.vue","../../../app/javascript/dashboard/components/widgets/conversation/contextMenu/menuItemWithSubmenu.vue","../../../app/javascript/dashboard/components/widgets/conversation/contextMenu/agentLoadingPlaceholder.vue","../../../app/javascript/dashboard/components/widgets/conversation/contextMenu/Index.vue","../../../app/javascript/dashboard/components/ui/TimeAgo.vue","../../../app/javascript/dashboard/components/widgets/conversation/PriorityMark.vue","../../../app/javascript/dashboard/components/widgets/conversation/components/SLACardLabel.vue","../../../app/javascript/dashboard/components/ui/ContextMenu.vue","../../../app/javascript/dashboard/components/widgets/conversation/ConversationCard.vue","../../../app/javascript/dashboard/components/ConversationItem.vue","../../../app/javascript/dashboard/routes/dashboard/customviews/DeleteCustomViews.vue","../../../app/javascript/dashboard/helper/snoozeHelpers.js","../../../app/javascript/dashboard/helper/commandbar/events.js","../../../app/javascript/dashboard/components/widgets/conversation/conversationBulkActions/AgentSelector.vue","../../../app/javascript/dashboard/components/widgets/conversation/conversationBulkActions/UpdateActions.vue","../../../app/javascript/dashboard/components/widgets/conversation/conversationBulkActions/LabelActions.vue","../../../app/javascript/dashboard/components/widgets/conversation/conversationBulkActions/TeamActions.vue","../../../app/javascript/dashboard/components/CustomSnoozeModal.vue","../../../app/javascript/dashboard/components/widgets/conversation/conversationBulkActions/Index.vue","../../../app/javascript/dashboard/components/IntersectionObserver.vue","../../../app/javascript/dashboard/composables/chatlist/useChatListKeyboardEvents.js","../../../app/javascript/dashboard/composables/chatlist/useBulkActions.js","../../../app/javascript/dashboard/components/widgets/FilterInput/FilterOperatorTypes.js","../../../app/javascript/dashboard/components/widgets/conversation/advancedFilterItems/index.js","../../../app/javascript/dashboard/routes/dashboard/contacts/contactFilterItems/index.js","../../../app/javascript/shared/composables/useFilter.js","../../../app/javascript/dashboard/helper/customViewsHelper.js","../../../app/javascript/dashboard/components/ChatList.vue","../../../app/javascript/dashboard/components/widgets/conversation/EmailTranscriptModal.vue","../../../app/javascript/dashboard/components/buttons/ResolveAction.vue","../../../app/javascript/dashboard/components/widgets/conversation/MoreActions.vue","../../../app/javascript/dashboard/api/integrations/linear.js","../../../app/javascript/dashboard/components/widgets/conversation/linear/LinkIssue.vue","../../../app/javascript/dashboard/components/widgets/conversation/linear/validations.js","../../../app/javascript/dashboard/components/widgets/conversation/linear/SearchableDropdown.vue","../../../app/javascript/dashboard/components/widgets/conversation/linear/CreateIssue.vue","../../../app/javascript/dashboard/components/widgets/conversation/linear/CreateOrLinkIssue.vue","../../../app/javascript/dashboard/components/widgets/conversation/linear/IssueHeader.vue","../../../app/javascript/dashboard/components/widgets/conversation/linear/Issue.vue","../../../app/javascript/dashboard/components/widgets/conversation/linear/index.vue","../../../app/javascript/dashboard/components/widgets/conversation/ConversationHeader.vue","../../../app/javascript/dashboard/components/widgets/DashboardApp/Frame.vue","../../../app/javascript/dashboard/components/widgets/conversation/OnboardingView.vue","../../../app/javascript/dashboard/components/base/Hotkey.vue","../../../app/javascript/dashboard/components/widgets/conversation/EmptyState/FeaturePlaceholder.vue","../../../app/javascript/dashboard/assets/images/no-chat-dark.svg","../../../app/javascript/dashboard/assets/images/no-chat.svg","../../../app/javascript/dashboard/components/widgets/conversation/EmptyState/EmptyStateMessage.vue","../../../app/javascript/dashboard/components/widgets/conversation/EmptyState/EmptyState.vue","../../../app/javascript/dashboard/api/integrations/openapi.js","../../../app/javascript/dashboard/composables/useAI.js","../../../app/javascript/shared/mixins/keyboardEventListenerMixins.js","../../../app/javascript/dashboard/components/widgets/conversation/ReplyToMessage.vue","../../../app/javascript/dashboard/components/widgets/AttachmentsPreview.vue","../../../app/javascript/dashboard/components/widgets/WootWriter/EditorModeToggle.vue","../../../app/javascript/dashboard/components/widgets/WootWriter/ReplyTopPanel.vue","../../../app/javascript/dashboard/components/widgets/conversation/helpers/emailHeadHelper.js","../../../app/javascript/dashboard/components/widgets/conversation/ReplyEmailHead.vue","../../../app/javascript/dashboard/api/integrations/dyte.js","../../../app/javascript/dashboard/components/widgets/VideoCallButton.vue","../../../app/javascript/dashboard/components/widgets/AICTAModal.vue","../../../app/javascript/dashboard/components/widgets/AILoader.vue","../../../app/javascript/dashboard/components/widgets/AIAssistanceModal.vue","../../../app/javascript/dashboard/components/widgets/AIAssistanceCTAButton.vue","../../../app/javascript/dashboard/components/widgets/AIAssistanceButton.vue","../../../app/javascript/dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue","../../../app/javascript/shared/constants/locales.js","../../../app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleSearch/Header.vue","../../../app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleSearch/ArticleSearchResultItem.vue","../../../app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleSearch/SearchResults.vue","../../../app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleSearch/ArticleView.vue","../../../app/javascript/dashboard/helper/portalHelper.js","../../../app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleSearch/SearchPopover.vue","../../../app/javascript/dashboard/components/widgets/conversation/MessageSignatureMissingAlert.vue","../../../node_modules/.pnpm/wavesurfer.js@7.8.6/node_modules/wavesurfer.js/dist/wavesurfer.esm.js","../../../node_modules/.pnpm/wavesurfer.js@7.8.6/node_modules/wavesurfer.js/dist/plugins/record.esm.js","../../../node_modules/.pnpm/@breezystack+lamejs@1.2.7/node_modules/@breezystack/lamejs/dist/lamejs.js","../../../app/javascript/dashboard/components/widgets/WootWriter/utils/mp3ConversionUtils.js","../../../app/javascript/dashboard/components/widgets/WootWriter/AudioRecorder.vue","../../../app/javascript/dashboard/components/widgets/conversation/WhatsappTemplates/TemplatesPicker.vue","../../../app/javascript/dashboard/components/widgets/conversation/WhatsappTemplates/TemplateParser.vue","../../../app/javascript/dashboard/components/widgets/conversation/WhatsappTemplates/Modal.vue","../../../app/javascript/dashboard/mixins/fileUploadMixin.js","../../../app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue","../../../app/javascript/dashboard/components/widgets/conversation/bubble/Actions.vue","../../../app/javascript/dashboard/components/widgets/conversation/bubble/Contact.vue","../../../app/javascript/dashboard/components/widgets/conversation/bubble/File.vue","../../../app/javascript/dashboard/composables/useImageZoom.js","../../../app/javascript/dashboard/components/widgets/conversation/components/GalleryView.vue","../../../app/javascript/dashboard/components/widgets/conversation/bubble/ImageAudioVideo.vue","../../../app/javascript/dashboard/components/widgets/conversation/bubble/integrations/Dyte.vue","../../../app/javascript/dashboard/components/widgets/conversation/bubble/Integration.vue","../../../app/javascript/dashboard/components/widgets/conversation/bubble/Location.vue","../../../app/javascript/dashboard/components/widgets/conversation/bubble/MailHead.vue","../../../app/javascript/dashboard/components/widgets/conversation/bubble/ReplyTo.vue","../../../node_modules/.pnpm/vue-letter@0.2.1/node_modules/vue-letter/dist/vue-letter.js","../../../app/javascript/dashboard/components/widgets/conversation/bubble/Text.vue","../../../app/javascript/dashboard/modules/conversations/components/MessageContextMenu.vue","../../../app/javascript/dashboard/components/widgets/conversation/bubble/Image.vue","../../../app/javascript/dashboard/components/widgets/conversation/bubble/Video.vue","../../../app/javascript/dashboard/components/widgets/conversation/bubble/InstagramStoryErrorPlaceHolder.vue","../../../app/javascript/dashboard/components/widgets/conversation/bubble/InstagramStory.vue","../../../app/javascript/dashboard/components/widgets/conversation/bubble/InstagramStoryReply.vue","../../../app/javascript/shared/constants/contentType.js","../../../app/javascript/dashboard/components/widgets/conversation/helpers/botMessageContentHelper.js","../../../app/javascript/dashboard/components/widgets/conversation/Message.vue","../../../app/javascript/dashboard/components-next/message/constants.js","../../../app/javascript/dashboard/components-next/message/provider.js","../../../app/javascript/dashboard/components-next/message/MessageStatus.vue","../../../app/javascript/dashboard/composables/useInbox.js","../../../app/javascript/dashboard/components-next/message/MessageMeta.vue","../../../app/javascript/dashboard/components-next/message/bubbles/Base.vue","../../../app/javascript/dashboard/components-next/message/bubbles/Text/FormattedContent.vue","../../../app/javascript/dashboard/components-next/message/chips/Image.vue","../../../app/javascript/dashboard/components-next/message/chips/Video.vue","../../../app/javascript/dashboard/components-next/message/chips/Audio.vue","../../../app/javascript/dashboard/components-next/icon/FileIcon.vue","../../../app/javascript/dashboard/components-next/message/chips/File.vue","../../../app/javascript/dashboard/components-next/message/chips/AttachmentChips.vue","../../../app/javascript/dashboard/components-next/message/bubbles/Text/Index.vue","../../../app/javascript/dashboard/components-next/message/bubbles/Activity.vue","../../../app/javascript/dashboard/components-next/message/bubbles/Image.vue","../../../app/javascript/dashboard/components-next/message/bubbles/BaseAttachment.vue","../../../app/javascript/dashboard/components-next/message/bubbles/File.vue","../../../app/javascript/dashboard/components-next/message/bubbles/Audio.vue","../../../app/javascript/dashboard/components-next/message/bubbles/Video.vue","../../../app/javascript/dashboard/components-next/message/bubbles/InstagramStory.vue","../../../node_modules/.pnpm/lettersanitizer@1.0.6/node_modules/lettersanitizer/lib/esm/constants.js","../../../node_modules/.pnpm/lettersanitizer@1.0.6/node_modules/lettersanitizer/lib/esm/index.js","../../../app/javascript/dashboard/components-next/message/bubbles/Email/removeReply.js","../../../app/javascript/dashboard/components-next/message/bubbles/Email/EmailMeta.vue","../../../app/javascript/dashboard/components-next/message/bubbles/Email/Index.vue","../../../app/javascript/dashboard/components-next/message/bubbles/Contact.vue","../../../app/javascript/dashboard/components-next/message/bubbles/Dyte.vue","../../../app/javascript/dashboard/components-next/message/bubbles/Location.vue","../../../app/javascript/dashboard/components-next/message/bubbles/CSAT.vue","../../../app/javascript/dashboard/components-next/message/bubbles/Form.vue","../../../app/javascript/dashboard/components-next/message/MessageError.vue","../../../app/javascript/dashboard/components-next/message/Message.vue","../../../app/javascript/dashboard/components-next/message/MessageList.vue","../../../app/javascript/dashboard/components/widgets/conversation/conversation/LabelSuggestion.vue","../../../app/javascript/dashboard/components/widgets/conversation/helpers/scrollTopCalculationHelper.js","../../../app/javascript/shared/constants/links.js","../../../app/javascript/dashboard/components/widgets/conversation/MessagesView.vue","../../../app/javascript/dashboard/components-next/copilot/CopilotInput.vue","../../../app/javascript/dashboard/components-next/copilot/CopilotLoader.vue","../../../app/javascript/dashboard/components-next/copilot/CopilotAssistantMessage.vue","../../../app/javascript/dashboard/components-next/copilot/ToggleCopilotAssistant.vue","../../../app/javascript/dashboard/components-next/copilot/Copilot.vue","../../../app/javascript/dashboard/components/copilot/CopilotContainer.vue","../../../app/javascript/dashboard/components/Accordion/AccordionItem.vue","../../../app/javascript/dashboard/routes/dashboard/conversation/ContactConversations.vue","../../../app/javascript/dashboard/composables/useAgentsList.js","../../../app/javascript/dashboard/routes/dashboard/conversation/ContactDetailsItem.vue","../../../app/javascript/shared/components/ui/MultiselectDropdownItems.vue","../../../app/javascript/shared/components/ui/MultiselectDropdown.vue","../../../app/javascript/dashboard/composables/useConversationLabels.js","../../../app/javascript/shared/components/ui/label/LabelDropdownItem.vue","../../../app/javascript/shared/helpers/sanitizeData.js","../../../app/javascript/shared/components/ui/label/LabelDropdown.vue","../../../app/javascript/shared/components/ui/dropdown/AddLabel.vue","../../../app/javascript/dashboard/routes/dashboard/conversation/labels/LabelBox.vue","../../../app/javascript/dashboard/routes/dashboard/conversation/ConversationAction.vue","../../../app/javascript/dashboard/components/widgets/ThumbnailGroup.vue","../../../app/javascript/dashboard/routes/dashboard/conversation/ConversationParticipant.vue","../../../app/javascript/dashboard/routes/dashboard/conversation/contact/ContactInfoRow.vue","../../../app/javascript/dashboard/routes/dashboard/conversation/contact/SocialIcons.vue","../../../app/javascript/dashboard/routes/dashboard/conversation/contact/ContactForm.vue","../../../app/javascript/dashboard/routes/dashboard/conversation/contact/EditContact.vue","../../../app/javascript/dashboard/modules/contact/components/MergeContactSummary.vue","../../../app/javascript/dashboard/modules/contact/components/ContactDropdownItem.vue","../../../app/javascript/dashboard/modules/contact/components/MergeContact.vue","../../../app/javascript/dashboard/modules/contact/ContactMergeModal.vue","../../../app/javascript/dashboard/components-next/NewConversation/helpers/composeConversationHelper.js","../../../app/javascript/dashboard/components-next/taginput/helper/tagInputHelper.js","../../../app/javascript/dashboard/components-next/inline-input/InlineInput.vue","../../../app/javascript/dashboard/components-next/taginput/TagInput.vue","../../../app/javascript/dashboard/components-next/NewConversation/components/ContactSelector.vue","../../../app/javascript/dashboard/components-next/NewConversation/components/InboxSelector.vue","../../../app/javascript/dashboard/components-next/NewConversation/components/EmailOptions.vue","../../../app/javascript/dashboard/components-next/Editor/Editor.vue","../../../app/javascript/dashboard/components-next/textarea/TextArea.vue","../../../app/javascript/dashboard/components-next/NewConversation/components/MessageEditor.vue","../../../app/javascript/dashboard/composables/useFileUpload.js","../../../app/javascript/dashboard/components-next/NewConversation/components/WhatsappTemplateParser.vue","../../../app/javascript/dashboard/components-next/NewConversation/components/WhatsAppOptions.vue","../../../app/javascript/dashboard/components-next/NewConversation/components/ActionButtons.vue","../../../app/javascript/dashboard/components-next/NewConversation/components/InboxEmptyState.vue","../../../app/javascript/dashboard/components-next/NewConversation/components/AttachmentPreviews.vue","../../../app/javascript/dashboard/components-next/NewConversation/components/ComposeNewConversationForm.vue","../../../app/javascript/dashboard/components-next/NewConversation/ComposeConversation.vue","../../../app/javascript/dashboard/routes/dashboard/conversation/contact/ContactInfo.vue","../../../app/javascript/dashboard/components/CustomAttribute.vue","../../../app/javascript/dashboard/routes/dashboard/conversation/customAttributes/CustomAttributes.vue","../../../app/javascript/dashboard/routes/dashboard/conversation/ConversationInfo.vue","../../../app/javascript/dashboard/routes/dashboard/conversation/Macros/MacroPreview.vue","../../../app/javascript/dashboard/routes/dashboard/conversation/Macros/MacroItem.vue","../../../app/javascript/dashboard/routes/dashboard/conversation/Macros/List.vue","../../../app/javascript/dashboard/api/integrations/shopify.js","../../../app/javascript/dashboard/components/widgets/conversation/ShopifyOrderItem.vue","../../../app/javascript/dashboard/components/widgets/conversation/ShopifyOrdersList.vue","../../../app/javascript/dashboard/routes/dashboard/conversation/ContactPanel.vue","../../../app/javascript/dashboard/components-next/tabbar/TabBar.vue","../../../app/javascript/dashboard/components/widgets/conversation/ConversationSidebar.vue","../../../app/javascript/dashboard/components/widgets/conversation/ConversationBox.vue","../../../app/javascript/dashboard/routes/dashboard/conversation/search/PopOverSearch.vue","../../../app/javascript/dashboard/routes/dashboard/commands/CmdBarConversationSnooze.vue","../../../app/javascript/dashboard/routes/dashboard/conversation/ConversationView.vue","../../../app/javascript/dashboard/routes/dashboard/conversation/conversation.routes.js","../../../app/javascript/dashboard/modules/search/components/SearchHeader.vue","../../../app/javascript/dashboard/modules/search/components/SearchTabs.vue","../../../app/javascript/dashboard/modules/search/components/SearchResultSection.vue","../../../app/javascript/dashboard/modules/search/components/SearchResultConversationItem.vue","../../../app/javascript/dashboard/modules/search/components/SearchResultConversationsList.vue","../../../app/javascript/dashboard/modules/search/components/MessageContent.vue","../../../app/javascript/dashboard/modules/search/components/SearchResultMessagesList.vue","../../../app/javascript/dashboard/modules/search/components/SearchResultContactItem.vue","../../../app/javascript/dashboard/modules/search/components/SearchResultContactsList.vue","../../../app/javascript/dashboard/modules/search/components/SearchView.vue","../../../app/javascript/dashboard/modules/search/search.routes.js","../../../app/javascript/dashboard/components-next/selectmenu/SelectMenu.vue","../../../app/javascript/dashboard/components-next/Contacts/ContactsHeader/components/ContactSortMenu.vue","../../../app/javascript/dashboard/components-next/Contacts/ContactsHeader/components/ContactMoreActions.vue","../../../app/javascript/dashboard/components-next/Contacts/ContactsHeader/ContactHeader.vue","../../../app/javascript/dashboard/components-next/combobox/ComboBoxDropdown.vue","../../../app/javascript/dashboard/components-next/combobox/ComboBox.vue","../../../app/javascript/dashboard/components-next/phonenumberinput/PhoneNumberInput.vue","../../../app/javascript/dashboard/components-next/Contacts/ContactsForm/ContactsForm.vue","../../../app/javascript/dashboard/components-next/Contacts/ContactsForm/CreateNewContactDialog.vue","../../../app/javascript/dashboard/components-next/Contacts/ContactsForm/ContactExportDialog.vue","../../../app/javascript/dashboard/components-next/Contacts/ContactsForm/ContactImportDialog.vue","../../../app/javascript/dashboard/components-next/Contacts/ContactsForm/CreateSegmentDialog.vue","../../../app/javascript/dashboard/components-next/Contacts/ContactsForm/DeleteSegmentDialog.vue","../../../app/javascript/dashboard/components-next/filter/contactProvider.js","../../../app/javascript/dashboard/components-next/filter/ContactsFilter.vue","../../../app/javascript/dashboard/components-next/Contacts/ContactsHeader/ContactListHeaderWrapper.vue","../../../app/javascript/dashboard/components-next/filter/ActiveFilterPreview.vue","../../../app/javascript/dashboard/components-next/Contacts/ContactsHeader/components/ContactsActiveFiltersPreview.vue","../../../app/javascript/dashboard/components-next/pagination/PaginationFooter.vue","../../../app/javascript/dashboard/components-next/Contacts/ContactsListLayout.vue","../../../app/javascript/dashboard/components-next/CardLayout.vue","../../../app/javascript/dashboard/components-next/flag/Flag.vue","../../../app/javascript/dashboard/components-next/Contacts/ContactsCard/ContactsCard.vue","../../../app/javascript/dashboard/components-next/Contacts/Pages/ContactsList.vue","../../../app/javascript/dashboard/components-next/Contacts/EmptyState/contactEmptyStateContent.js","../../../app/javascript/dashboard/components-next/Contacts/EmptyState/ContactEmptyState.vue","../../../app/javascript/dashboard/routes/dashboard/contacts/pages/ContactsIndex.vue","../../../app/javascript/dashboard/components-next/breadcrumb/Breadcrumb.vue","../../../app/javascript/dashboard/components-next/Contacts/ContactsDetailsLayout.vue","../../../app/javascript/dashboard/components-next/Label/LabelItem.vue","../../../app/javascript/dashboard/components-next/Label/AddLabel.vue","../../../app/javascript/dashboard/components-next/Contacts/ContactLabels/ContactLabels.vue","../../../app/javascript/dashboard/components-next/Contacts/ContactsForm/ConfirmContactDeleteDialog.vue","../../../app/javascript/dashboard/components-next/Contacts/Pages/ContactDetails.vue","../../../app/javascript/dashboard/components-next/Contacts/ContactsSidebar/components/ContactNoteItem.vue","../../../app/javascript/dashboard/components-next/Contacts/ContactsSidebar/ContactNotes.vue","../../../app/javascript/dashboard/components-next/Conversation/ConversationCard/CardMessagePreview.vue","../../../app/javascript/dashboard/components-next/Conversation/ConversationCard/CardLabels.vue","../../../app/javascript/dashboard/components-next/Conversation/ConversationCard/SLACardLabel.vue","../../../app/javascript/dashboard/components-next/Conversation/ConversationCard/CardMessagePreviewWithMeta.vue","../../../app/javascript/dashboard/components-next/Conversation/ConversationCard/ConversationCard.vue","../../../app/javascript/dashboard/components-next/Contacts/ContactsSidebar/ContactHistory.vue","../../../app/javascript/dashboard/components-next/Contacts/ContactsForm/ContactMergeForm.vue","../../../app/javascript/dashboard/components-next/Contacts/ContactsSidebar/ContactMerge.vue","../../../app/javascript/dashboard/components-next/CustomAttributes/ListAttribute.vue","../../../app/javascript/dashboard/components-next/switch/Switch.vue","../../../app/javascript/dashboard/components-next/CustomAttributes/CheckboxAttribute.vue","../../../app/javascript/dashboard/components-next/CustomAttributes/DateAttribute.vue","../../../app/javascript/dashboard/components-next/CustomAttributes/OtherAttribute.vue","../../../app/javascript/dashboard/components-next/Contacts/ContactsSidebar/ContactCustomAttributeItem.vue","../../../app/javascript/dashboard/components-next/Contacts/ContactsSidebar/ContactCustomAttributes.vue","../../../app/javascript/dashboard/routes/dashboard/contacts/pages/ContactManageView.vue","../../../app/javascript/dashboard/routes/dashboard/contacts/routes.js","../../../app/javascript/dashboard/routes/dashboard/notifications/components/NotificationTable.vue","../../../app/javascript/dashboard/routes/dashboard/notifications/components/NotificationsView.vue","../../../app/javascript/dashboard/routes/dashboard/notifications/routes.js","../../../app/javascript/dashboard/routes/dashboard/inbox/helpers/InboxViewHelpers.js","../../../app/javascript/dashboard/routes/dashboard/inbox/components/InboxContextMenu.vue","../../../app/javascript/dashboard/components-next/Inbox/InboxCard.vue","../../../app/javascript/dashboard/routes/dashboard/inbox/components/InboxOptionMenu.vue","../../../app/javascript/dashboard/routes/dashboard/inbox/components/InboxDisplayMenu.vue","../../../app/javascript/dashboard/routes/dashboard/inbox/components/InboxListHeader.vue","../../../app/javascript/dashboard/routes/dashboard/inbox/InboxList.vue","../../../app/javascript/dashboard/routes/dashboard/inbox/components/PaginationButton.vue","../../../app/javascript/dashboard/routes/dashboard/inbox/components/InboxItemHeader.vue","../../../app/javascript/dashboard/routes/dashboard/inbox/InboxEmptyState.vue","../../../app/javascript/dashboard/routes/dashboard/inbox/InboxView.vue","../../../app/javascript/dashboard/routes/dashboard/inbox/routes.js","../../../app/javascript/dashboard/routes/dashboard/helpcenter/helpers/routeHelper.js","../../../app/javascript/dashboard/routes/dashboard/helpcenter/components/UpgradePage.vue","../../../app/javascript/dashboard/routes/dashboard/helpcenter/pages/HelpCenterPageRouteView.vue","../../../app/javascript/dashboard/routes/dashboard/helpcenter/pages/PortalsIndexPage.vue","../../../app/javascript/dashboard/components-next/HelpCenter/ArticleCard/ArticleCard.vue","../../../app/javascript/dashboard/components-next/HelpCenter/EmptyState/Portal/portalEmptyStateContent.js","../../../app/javascript/dashboard/components-next/HelpCenter/PortalSwitcher/CreatePortalDialog.vue","../../../app/javascript/dashboard/components-next/HelpCenter/EmptyState/Portal/PortalEmptyState.vue","../../../app/javascript/dashboard/routes/dashboard/helpcenter/helpcenter.routes.js","../../../app/javascript/dashboard/routes/dashboard/campaigns/pages/CampaignsPageRouteView.vue","../../../app/javascript/shared/constants/campaign.js","../../../app/javascript/dashboard/components-next/Campaigns/CampaignLayout.vue","../../../app/javascript/dashboard/components-next/Campaigns/CampaignCard/LiveChatCampaignDetails.vue","../../../app/javascript/dashboard/components-next/Campaigns/CampaignCard/SMSCampaignDetails.vue","../../../app/javascript/dashboard/components-next/Campaigns/CampaignCard/CampaignCard.vue","../../../app/javascript/dashboard/components-next/Campaigns/Pages/CampaignPage/CampaignList.vue","../../../app/javascript/dashboard/components-next/Campaigns/Pages/CampaignPage/LiveChatCampaign/LiveChatCampaignForm.vue","../../../app/javascript/dashboard/components-next/Campaigns/Pages/CampaignPage/LiveChatCampaign/LiveChatCampaignDialog.vue","../../../app/javascript/dashboard/components-next/Campaigns/Pages/CampaignPage/LiveChatCampaign/EditLiveChatCampaignDialog.vue","../../../app/javascript/dashboard/components-next/Campaigns/Pages/CampaignPage/ConfirmDeleteCampaignDialog.vue","../../../app/javascript/dashboard/components-next/Campaigns/EmptyState/CampaignEmptyStateContent.js","../../../app/javascript/dashboard/routes/dashboard/campaigns/pages/LiveChatCampaignsPage.vue","../../../app/javascript/dashboard/components-next/combobox/TagMultiSelectComboBox.vue","../../../app/javascript/dashboard/components-next/Campaigns/Pages/CampaignPage/SMSCampaign/SMSCampaignForm.vue","../../../app/javascript/dashboard/components-next/Campaigns/Pages/CampaignPage/SMSCampaign/SMSCampaignDialog.vue","../../../app/javascript/dashboard/routes/dashboard/campaigns/pages/SMSCampaignsPage.vue","../../../app/javascript/dashboard/routes/dashboard/campaigns/campaigns.routes.js","../../../app/javascript/dashboard/components-next/captain/assistant/AssistantCard.vue","../../../app/javascript/dashboard/components-next/captain/pageComponents/DeleteDialog.vue","../../../app/javascript/dashboard/components-next/captain/PageLayout.vue","../../../app/javascript/dashboard/components-next/captain/pageComponents/Paywall.vue","../../../app/javascript/dashboard/components-next/captain/pageComponents/assistant/AssistantForm.vue","../../../app/javascript/dashboard/components-next/captain/pageComponents/assistant/CreateAssistantDialog.vue","../../../app/javascript/dashboard/components-next/feature-spotlight/FeatureSpotlight.vue","../../../app/javascript/dashboard/components-next/captain/pageComponents/emptyStates/captainEmptyStateContent.js","../../../app/javascript/dashboard/components-next/captain/pageComponents/emptyStates/AssistantPageEmptyState.vue","../../../app/javascript/dashboard/components-next/feature-spotlight/FeatureSpotlightPopover.vue","../../../app/javascript/dashboard/components-next/captain/pageComponents/response/LimitBanner.vue","../../../app/javascript/dashboard/routes/dashboard/captain/assistants/Index.vue","../../../app/javascript/dashboard/components-next/captain/pageComponents/inbox/ConnectInboxForm.vue","../../../app/javascript/dashboard/components-next/captain/pageComponents/inbox/ConnectInboxDialog.vue","../../../app/javascript/dashboard/components-next/captain/assistant/InboxCard.vue","../../../app/javascript/dashboard/components-next/captain/pageComponents/emptyStates/InboxPageEmptyState.vue","../../../app/javascript/dashboard/routes/dashboard/captain/assistants/inboxes/Index.vue","../../../app/javascript/dashboard/components-next/captain/assistant/DocumentCard.vue","../../../app/javascript/dashboard/components-next/checkbox/Checkbox.vue","../../../app/javascript/dashboard/components-next/captain/assistant/ResponseCard.vue","../../../app/javascript/dashboard/components-next/captain/pageComponents/document/RelatedResponses.vue","../../../app/javascript/dashboard/components-next/captain/pageComponents/document/DocumentForm.vue","../../../app/javascript/dashboard/components-next/captain/pageComponents/document/CreateDocumentDialog.vue","../../../app/javascript/dashboard/components-next/captain/pageComponents/AssistantSelector.vue","../../../app/javascript/dashboard/components-next/captain/pageComponents/emptyStates/DocumentPageEmptyState.vue","../../../app/javascript/dashboard/components-next/captain/pageComponents/document/LimitBanner.vue","../../../app/javascript/dashboard/routes/dashboard/captain/documents/Index.vue","../../../app/javascript/dashboard/components-next/captain/pageComponents/BulkDeleteDialog.vue","../../../app/javascript/dashboard/components-next/captain/pageComponents/response/ResponseForm.vue","../../../app/javascript/dashboard/components-next/captain/pageComponents/response/CreateResponseDialog.vue","../../../app/javascript/dashboard/components-next/captain/pageComponents/emptyStates/ResponsePageEmptyState.vue","../../../app/javascript/dashboard/routes/dashboard/captain/responses/Index.vue","../../../app/javascript/dashboard/routes/dashboard/captain/captain.routes.js","../../../app/javascript/dashboard/components-next/sidebar/provider.js","../../../app/javascript/dashboard/composables/utils/useKbd.js","../../../app/javascript/dashboard/components-next/sidebar/useSidebarKeyboardShortcuts.js","../../../app/javascript/dashboard/components-next/sidebar/SidebarGroupHeader.vue","../../../app/javascript/dashboard/components-next/sidebar/SidebarGroupLeaf.vue","../../../app/javascript/dashboard/components-next/sidebar/SidebarSubGroup.vue","../../../app/javascript/dashboard/components-next/sidebar/SidebarGroupEmptyLeaf.vue","../../../app/javascript/dashboard/components-next/sidebar/SidebarGroup.vue","../../../app/javascript/dashboard/components-next/dropdown-menu/base/DropdownSeparator.vue","../../../app/javascript/dashboard/components-next/sidebar/SidebarProfileMenuStatus.vue","../../../app/javascript/dashboard/components-next/sidebar/SidebarProfileMenu.vue","../../../app/javascript/dashboard/components-next/sidebar/ChannelLeaf.vue","../../../app/javascript/dashboard/components-next/sidebar/SidebarAccountSwitcher.vue","../../../app/javascript/dashboard/components-next/icon/Logo.vue","../../../app/javascript/dashboard/components-next/sidebar/Sidebar.vue","../../../app/javascript/dashboard/components/widgets/modal/constants.js","../../../app/javascript/dashboard/components/widgets/modal/WootKeyShortcutModal.vue","../../../app/javascript/dashboard/components/layout/sidebarComponents/AccountSelector.vue","../../../app/javascript/dashboard/routes/dashboard/notifications/components/NotificationPanelItem.vue","../../../app/javascript/dashboard/routes/dashboard/notifications/components/NotificationPanelList.vue","../../../app/javascript/dashboard/routes/dashboard/notifications/components/NotificationPanel.vue","../../../app/javascript/dashboard/routes/dashboard/Dashboard.vue","../../../app/javascript/dashboard/routes/dashboard/suspended/Index.vue","../../../app/javascript/dashboard/routes/dashboard/dashboard.routes.js","../../../app/javascript/dashboard/routes/index.js","../../../app/javascript/entrypoints/dashboard.js"],"sourcesContent":["/* eslint-disable no-multi-assign */\n\nfunction deepFreeze(obj) {\n if (obj instanceof Map) {\n obj.clear =\n obj.delete =\n obj.set =\n function () {\n throw new Error('map is read-only');\n };\n } else if (obj instanceof Set) {\n obj.add =\n obj.clear =\n obj.delete =\n function () {\n throw new Error('set is read-only');\n };\n }\n\n // Freeze self\n Object.freeze(obj);\n\n Object.getOwnPropertyNames(obj).forEach((name) => {\n const prop = obj[name];\n const type = typeof prop;\n\n // Freeze prop if it is an object or function and also not already frozen\n if ((type === 'object' || type === 'function') && !Object.isFrozen(prop)) {\n deepFreeze(prop);\n }\n });\n\n return obj;\n}\n\n/** @typedef {import('highlight.js').CallbackResponse} CallbackResponse */\n/** @typedef {import('highlight.js').CompiledMode} CompiledMode */\n/** @implements CallbackResponse */\n\nclass Response {\n /**\n * @param {CompiledMode} mode\n */\n constructor(mode) {\n // eslint-disable-next-line no-undefined\n if (mode.data === undefined) mode.data = {};\n\n this.data = mode.data;\n this.isMatchIgnored = false;\n }\n\n ignoreMatch() {\n this.isMatchIgnored = true;\n }\n}\n\n/**\n * @param {string} value\n * @returns {string}\n */\nfunction escapeHTML(value) {\n return value\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\n/**\n * performs a shallow merge of multiple objects into one\n *\n * @template T\n * @param {T} original\n * @param {Record<string,any>[]} objects\n * @returns {T} a single new object\n */\nfunction inherit$1(original, ...objects) {\n /** @type Record<string,any> */\n const result = Object.create(null);\n\n for (const key in original) {\n result[key] = original[key];\n }\n objects.forEach(function(obj) {\n for (const key in obj) {\n result[key] = obj[key];\n }\n });\n return /** @type {T} */ (result);\n}\n\n/**\n * @typedef {object} Renderer\n * @property {(text: string) => void} addText\n * @property {(node: Node) => void} openNode\n * @property {(node: Node) => void} closeNode\n * @property {() => string} value\n */\n\n/** @typedef {{scope?: string, language?: string, sublanguage?: boolean}} Node */\n/** @typedef {{walk: (r: Renderer) => void}} Tree */\n/** */\n\nconst SPAN_CLOSE = '</span>';\n\n/**\n * Determines if a node needs to be wrapped in <span>\n *\n * @param {Node} node */\nconst emitsWrappingTags = (node) => {\n // rarely we can have a sublanguage where language is undefined\n // TODO: track down why\n return !!node.scope;\n};\n\n/**\n *\n * @param {string} name\n * @param {{prefix:string}} options\n */\nconst scopeToCSSClass = (name, { prefix }) => {\n // sub-language\n if (name.startsWith(\"language:\")) {\n return name.replace(\"language:\", \"language-\");\n }\n // tiered scope: comment.line\n if (name.includes(\".\")) {\n const pieces = name.split(\".\");\n return [\n `${prefix}${pieces.shift()}`,\n ...(pieces.map((x, i) => `${x}${\"_\".repeat(i + 1)}`))\n ].join(\" \");\n }\n // simple scope\n return `${prefix}${name}`;\n};\n\n/** @type {Renderer} */\nclass HTMLRenderer {\n /**\n * Creates a new HTMLRenderer\n *\n * @param {Tree} parseTree - the parse tree (must support `walk` API)\n * @param {{classPrefix: string}} options\n */\n constructor(parseTree, options) {\n this.buffer = \"\";\n this.classPrefix = options.classPrefix;\n parseTree.walk(this);\n }\n\n /**\n * Adds texts to the output stream\n *\n * @param {string} text */\n addText(text) {\n this.buffer += escapeHTML(text);\n }\n\n /**\n * Adds a node open to the output stream (if needed)\n *\n * @param {Node} node */\n openNode(node) {\n if (!emitsWrappingTags(node)) return;\n\n const className = scopeToCSSClass(node.scope,\n { prefix: this.classPrefix });\n this.span(className);\n }\n\n /**\n * Adds a node close to the output stream (if needed)\n *\n * @param {Node} node */\n closeNode(node) {\n if (!emitsWrappingTags(node)) return;\n\n this.buffer += SPAN_CLOSE;\n }\n\n /**\n * returns the accumulated buffer\n */\n value() {\n return this.buffer;\n }\n\n // helpers\n\n /**\n * Builds a span element\n *\n * @param {string} className */\n span(className) {\n this.buffer += `<span class=\"${className}\">`;\n }\n}\n\n/** @typedef {{scope?: string, language?: string, children: Node[]} | string} Node */\n/** @typedef {{scope?: string, language?: string, children: Node[]} } DataNode */\n/** @typedef {import('highlight.js').Emitter} Emitter */\n/** */\n\n/** @returns {DataNode} */\nconst newNode = (opts = {}) => {\n /** @type DataNode */\n const result = { children: [] };\n Object.assign(result, opts);\n return result;\n};\n\nclass TokenTree {\n constructor() {\n /** @type DataNode */\n this.rootNode = newNode();\n this.stack = [this.rootNode];\n }\n\n get top() {\n return this.stack[this.stack.length - 1];\n }\n\n get root() { return this.rootNode; }\n\n /** @param {Node} node */\n add(node) {\n this.top.children.push(node);\n }\n\n /** @param {string} scope */\n openNode(scope) {\n /** @type Node */\n const node = newNode({ scope });\n this.add(node);\n this.stack.push(node);\n }\n\n closeNode() {\n if (this.stack.length > 1) {\n return this.stack.pop();\n }\n // eslint-disable-next-line no-undefined\n return undefined;\n }\n\n closeAllNodes() {\n while (this.closeNode());\n }\n\n toJSON() {\n return JSON.stringify(this.rootNode, null, 4);\n }\n\n /**\n * @typedef { import(\"./html_renderer\").Renderer } Renderer\n * @param {Renderer} builder\n */\n walk(builder) {\n // this does not\n return this.constructor._walk(builder, this.rootNode);\n // this works\n // return TokenTree._walk(builder, this.rootNode);\n }\n\n /**\n * @param {Renderer} builder\n * @param {Node} node\n */\n static _walk(builder, node) {\n if (typeof node === \"string\") {\n builder.addText(node);\n } else if (node.children) {\n builder.openNode(node);\n node.children.forEach((child) => this._walk(builder, child));\n builder.closeNode(node);\n }\n return builder;\n }\n\n /**\n * @param {Node} node\n */\n static _collapse(node) {\n if (typeof node === \"string\") return;\n if (!node.children) return;\n\n if (node.children.every(el => typeof el === \"string\")) {\n // node.text = node.children.join(\"\");\n // delete node.children;\n node.children = [node.children.join(\"\")];\n } else {\n node.children.forEach((child) => {\n TokenTree._collapse(child);\n });\n }\n }\n}\n\n/**\n Currently this is all private API, but this is the minimal API necessary\n that an Emitter must implement to fully support the parser.\n\n Minimal interface:\n\n - addText(text)\n - __addSublanguage(emitter, subLanguageName)\n - startScope(scope)\n - endScope()\n - finalize()\n - toHTML()\n\n*/\n\n/**\n * @implements {Emitter}\n */\nclass TokenTreeEmitter extends TokenTree {\n /**\n * @param {*} options\n */\n constructor(options) {\n super();\n this.options = options;\n }\n\n /**\n * @param {string} text\n */\n addText(text) {\n if (text === \"\") { return; }\n\n this.add(text);\n }\n\n /** @param {string} scope */\n startScope(scope) {\n this.openNode(scope);\n }\n\n endScope() {\n this.closeNode();\n }\n\n /**\n * @param {Emitter & {root: DataNode}} emitter\n * @param {string} name\n */\n __addSublanguage(emitter, name) {\n /** @type DataNode */\n const node = emitter.root;\n if (name) node.scope = `language:${name}`;\n\n this.add(node);\n }\n\n toHTML() {\n const renderer = new HTMLRenderer(this, this.options);\n return renderer.value();\n }\n\n finalize() {\n this.closeAllNodes();\n return true;\n }\n}\n\n/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n if (!re) return null;\n if (typeof re === \"string\") return re;\n\n return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n return concat('(?=', re, ')');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction anyNumberOfTimes(re) {\n return concat('(?:', re, ')*');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction optional(re) {\n return concat('(?:', re, ')?');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n const joined = args.map((x) => source(x)).join(\"\");\n return joined;\n}\n\n/**\n * @param { Array<string | RegExp | Object> } args\n * @returns {object}\n */\nfunction stripOptionsFromArgs(args) {\n const opts = args[args.length - 1];\n\n if (typeof opts === 'object' && opts.constructor === Object) {\n args.splice(args.length - 1, 1);\n return opts;\n } else {\n return {};\n }\n}\n\n/** @typedef { {capture?: boolean} } RegexEitherOptions */\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] | [...(RegExp | string)[], RegexEitherOptions]} args\n * @returns {string}\n */\nfunction either(...args) {\n /** @type { object & {capture?: boolean} } */\n const opts = stripOptionsFromArgs(args);\n const joined = '('\n + (opts.capture ? \"\" : \"?:\")\n + args.map((x) => source(x)).join(\"|\") + \")\";\n return joined;\n}\n\n/**\n * @param {RegExp | string} re\n * @returns {number}\n */\nfunction countMatchGroups(re) {\n return (new RegExp(re.toString() + '|')).exec('').length - 1;\n}\n\n/**\n * Does lexeme start with a regular expression match at the beginning\n * @param {RegExp} re\n * @param {string} lexeme\n */\nfunction startsWith(re, lexeme) {\n const match = re && re.exec(lexeme);\n return match && match.index === 0;\n}\n\n// BACKREF_RE matches an open parenthesis or backreference. To avoid\n// an incorrect parse, it additionally matches the following:\n// - [...] elements, where the meaning of parentheses and escapes change\n// - other escape sequences, so we do not misparse escape sequences as\n// interesting elements\n// - non-matching or lookahead parentheses, which do not capture. These\n// follow the '(' with a '?'.\nconst BACKREF_RE = /\\[(?:[^\\\\\\]]|\\\\.)*\\]|\\(\\??|\\\\([1-9][0-9]*)|\\\\./;\n\n// **INTERNAL** Not intended for outside usage\n// join logically computes regexps.join(separator), but fixes the\n// backreferences so they continue to match.\n// it also places each individual regular expression into it's own\n// match group, keeping track of the sequencing of those match groups\n// is currently an exercise for the caller. :-)\n/**\n * @param {(string | RegExp)[]} regexps\n * @param {{joinWith: string}} opts\n * @returns {string}\n */\nfunction _rewriteBackreferences(regexps, { joinWith }) {\n let numCaptures = 0;\n\n return regexps.map((regex) => {\n numCaptures += 1;\n const offset = numCaptures;\n let re = source(regex);\n let out = '';\n\n while (re.length > 0) {\n const match = BACKREF_RE.exec(re);\n if (!match) {\n out += re;\n break;\n }\n out += re.substring(0, match.index);\n re = re.substring(match.index + match[0].length);\n if (match[0][0] === '\\\\' && match[1]) {\n // Adjust the backreference.\n out += '\\\\' + String(Number(match[1]) + offset);\n } else {\n out += match[0];\n if (match[0] === '(') {\n numCaptures++;\n }\n }\n }\n return out;\n }).map(re => `(${re})`).join(joinWith);\n}\n\n/** @typedef {import('highlight.js').Mode} Mode */\n/** @typedef {import('highlight.js').ModeCallback} ModeCallback */\n\n// Common regexps\nconst MATCH_NOTHING_RE = /\\b\\B/;\nconst IDENT_RE = '[a-zA-Z]\\\\w*';\nconst UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\\\w*';\nconst NUMBER_RE = '\\\\b\\\\d+(\\\\.\\\\d+)?';\nconst C_NUMBER_RE = '(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)'; // 0x..., 0..., decimal, float\nconst BINARY_NUMBER_RE = '\\\\b(0b[01]+)'; // 0b...\nconst RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~';\n\n/**\n* @param { Partial<Mode> & {binary?: string | RegExp} } opts\n*/\nconst SHEBANG = (opts = {}) => {\n const beginShebang = /^#![ ]*\\//;\n if (opts.binary) {\n opts.begin = concat(\n beginShebang,\n /.*\\b/,\n opts.binary,\n /\\b.*/);\n }\n return inherit$1({\n scope: 'meta',\n begin: beginShebang,\n end: /$/,\n relevance: 0,\n /** @type {ModeCallback} */\n \"on:begin\": (m, resp) => {\n if (m.index !== 0) resp.ignoreMatch();\n }\n }, opts);\n};\n\n// Common modes\nconst BACKSLASH_ESCAPE = {\n begin: '\\\\\\\\[\\\\s\\\\S]', relevance: 0\n};\nconst APOS_STRING_MODE = {\n scope: 'string',\n begin: '\\'',\n end: '\\'',\n illegal: '\\\\n',\n contains: [BACKSLASH_ESCAPE]\n};\nconst QUOTE_STRING_MODE = {\n scope: 'string',\n begin: '\"',\n end: '\"',\n illegal: '\\\\n',\n contains: [BACKSLASH_ESCAPE]\n};\nconst PHRASAL_WORDS_MODE = {\n begin: /\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b/\n};\n/**\n * Creates a comment mode\n *\n * @param {string | RegExp} begin\n * @param {string | RegExp} end\n * @param {Mode | {}} [modeOptions]\n * @returns {Partial<Mode>}\n */\nconst COMMENT = function(begin, end, modeOptions = {}) {\n const mode = inherit$1(\n {\n scope: 'comment',\n begin,\n end,\n contains: []\n },\n modeOptions\n );\n mode.contains.push({\n scope: 'doctag',\n // hack to avoid the space from being included. the space is necessary to\n // match here to prevent the plain text rule below from gobbling up doctags\n begin: '[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)',\n end: /(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,\n excludeBegin: true,\n relevance: 0\n });\n const ENGLISH_WORD = either(\n // list of common 1 and 2 letter words in English\n \"I\",\n \"a\",\n \"is\",\n \"so\",\n \"us\",\n \"to\",\n \"at\",\n \"if\",\n \"in\",\n \"it\",\n \"on\",\n // note: this is not an exhaustive list of contractions, just popular ones\n /[A-Za-z]+['](d|ve|re|ll|t|s|n)/, // contractions - can't we'd they're let's, etc\n /[A-Za-z]+[-][a-z]+/, // `no-way`, etc.\n /[A-Za-z][a-z]{2,}/ // allow capitalized words at beginning of sentences\n );\n // looking like plain text, more likely to be a comment\n mode.contains.push(\n {\n // TODO: how to include \", (, ) without breaking grammars that use these for\n // comment delimiters?\n // begin: /[ ]+([()\"]?([A-Za-z'-]{3,}|is|a|I|so|us|[tT][oO]|at|if|in|it|on)[.]?[()\":]?([.][ ]|[ ]|\\))){3}/\n // ---\n\n // this tries to find sequences of 3 english words in a row (without any\n // \"programming\" type syntax) this gives us a strong signal that we've\n // TRULY found a comment - vs perhaps scanning with the wrong language.\n // It's possible to find something that LOOKS like the start of the\n // comment - but then if there is no readable text - good chance it is a\n // false match and not a comment.\n //\n // for a visual example please see:\n // https://github.com/highlightjs/highlight.js/issues/2827\n\n begin: concat(\n /[ ]+/, // necessary to prevent us gobbling up doctags like /* @author Bob Mcgill */\n '(',\n ENGLISH_WORD,\n /[.]?[:]?([.][ ]|[ ])/,\n '){3}') // look for 3 words in a row\n }\n );\n return mode;\n};\nconst C_LINE_COMMENT_MODE = COMMENT('//', '$');\nconst C_BLOCK_COMMENT_MODE = COMMENT('/\\\\*', '\\\\*/');\nconst HASH_COMMENT_MODE = COMMENT('#', '$');\nconst NUMBER_MODE = {\n scope: 'number',\n begin: NUMBER_RE,\n relevance: 0\n};\nconst C_NUMBER_MODE = {\n scope: 'number',\n begin: C_NUMBER_RE,\n relevance: 0\n};\nconst BINARY_NUMBER_MODE = {\n scope: 'number',\n begin: BINARY_NUMBER_RE,\n relevance: 0\n};\nconst REGEXP_MODE = {\n scope: \"regexp\",\n begin: /\\/(?=[^/\\n]*\\/)/,\n end: /\\/[gimuy]*/,\n contains: [\n BACKSLASH_ESCAPE,\n {\n begin: /\\[/,\n end: /\\]/,\n relevance: 0,\n contains: [BACKSLASH_ESCAPE]\n }\n ]\n};\nconst TITLE_MODE = {\n scope: 'title',\n begin: IDENT_RE,\n relevance: 0\n};\nconst UNDERSCORE_TITLE_MODE = {\n scope: 'title',\n begin: UNDERSCORE_IDENT_RE,\n relevance: 0\n};\nconst METHOD_GUARD = {\n // excludes method names from keyword processing\n begin: '\\\\.\\\\s*' + UNDERSCORE_IDENT_RE,\n relevance: 0\n};\n\n/**\n * Adds end same as begin mechanics to a mode\n *\n * Your mode must include at least a single () match group as that first match\n * group is what is used for comparison\n * @param {Partial<Mode>} mode\n */\nconst END_SAME_AS_BEGIN = function(mode) {\n return Object.assign(mode,\n {\n /** @type {ModeCallback} */\n 'on:begin': (m, resp) => { resp.data._beginMatch = m[1]; },\n /** @type {ModeCallback} */\n 'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); }\n });\n};\n\nvar MODES = /*#__PURE__*/Object.freeze({\n __proto__: null,\n APOS_STRING_MODE: APOS_STRING_MODE,\n BACKSLASH_ESCAPE: BACKSLASH_ESCAPE,\n BINARY_NUMBER_MODE: BINARY_NUMBER_MODE,\n BINARY_NUMBER_RE: BINARY_NUMBER_RE,\n COMMENT: COMMENT,\n C_BLOCK_COMMENT_MODE: C_BLOCK_COMMENT_MODE,\n C_LINE_COMMENT_MODE: C_LINE_COMMENT_MODE,\n C_NUMBER_MODE: C_NUMBER_MODE,\n C_NUMBER_RE: C_NUMBER_RE,\n END_SAME_AS_BEGIN: END_SAME_AS_BEGIN,\n HASH_COMMENT_MODE: HASH_COMMENT_MODE,\n IDENT_RE: IDENT_RE,\n MATCH_NOTHING_RE: MATCH_NOTHING_RE,\n METHOD_GUARD: METHOD_GUARD,\n NUMBER_MODE: NUMBER_MODE,\n NUMBER_RE: NUMBER_RE,\n PHRASAL_WORDS_MODE: PHRASAL_WORDS_MODE,\n QUOTE_STRING_MODE: QUOTE_STRING_MODE,\n REGEXP_MODE: REGEXP_MODE,\n RE_STARTERS_RE: RE_STARTERS_RE,\n SHEBANG: SHEBANG,\n TITLE_MODE: TITLE_MODE,\n UNDERSCORE_IDENT_RE: UNDERSCORE_IDENT_RE,\n UNDERSCORE_TITLE_MODE: UNDERSCORE_TITLE_MODE\n});\n\n/**\n@typedef {import('highlight.js').CallbackResponse} CallbackResponse\n@typedef {import('highlight.js').CompilerExt} CompilerExt\n*/\n\n// Grammar extensions / plugins\n// See: https://github.com/highlightjs/highlight.js/issues/2833\n\n// Grammar extensions allow \"syntactic sugar\" to be added to the grammar modes\n// without requiring any underlying changes to the compiler internals.\n\n// `compileMatch` being the perfect small example of now allowing a grammar\n// author to write `match` when they desire to match a single expression rather\n// than being forced to use `begin`. The extension then just moves `match` into\n// `begin` when it runs. Ie, no features have been added, but we've just made\n// the experience of writing (and reading grammars) a little bit nicer.\n\n// ------\n\n// TODO: We need negative look-behind support to do this properly\n/**\n * Skip a match if it has a preceding dot\n *\n * This is used for `beginKeywords` to prevent matching expressions such as\n * `bob.keyword.do()`. The mode compiler automatically wires this up as a\n * special _internal_ 'on:begin' callback for modes with `beginKeywords`\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\nfunction skipIfHasPrecedingDot(match, response) {\n const before = match.input[match.index - 1];\n if (before === \".\") {\n response.ignoreMatch();\n }\n}\n\n/**\n *\n * @type {CompilerExt}\n */\nfunction scopeClassName(mode, _parent) {\n // eslint-disable-next-line no-undefined\n if (mode.className !== undefined) {\n mode.scope = mode.className;\n delete mode.className;\n }\n}\n\n/**\n * `beginKeywords` syntactic sugar\n * @type {CompilerExt}\n */\nfunction beginKeywords(mode, parent) {\n if (!parent) return;\n if (!mode.beginKeywords) return;\n\n // for languages with keywords that include non-word characters checking for\n // a word boundary is not sufficient, so instead we check for a word boundary\n // or whitespace - this does no harm in any case since our keyword engine\n // doesn't allow spaces in keywords anyways and we still check for the boundary\n // first\n mode.begin = '\\\\b(' + mode.beginKeywords.split(' ').join('|') + ')(?!\\\\.)(?=\\\\b|\\\\s)';\n mode.__beforeBegin = skipIfHasPrecedingDot;\n mode.keywords = mode.keywords || mode.beginKeywords;\n delete mode.beginKeywords;\n\n // prevents double relevance, the keywords themselves provide\n // relevance, the mode doesn't need to double it\n // eslint-disable-next-line no-undefined\n if (mode.relevance === undefined) mode.relevance = 0;\n}\n\n/**\n * Allow `illegal` to contain an array of illegal values\n * @type {CompilerExt}\n */\nfunction compileIllegal(mode, _parent) {\n if (!Array.isArray(mode.illegal)) return;\n\n mode.illegal = either(...mode.illegal);\n}\n\n/**\n * `match` to match a single expression for readability\n * @type {CompilerExt}\n */\nfunction compileMatch(mode, _parent) {\n if (!mode.match) return;\n if (mode.begin || mode.end) throw new Error(\"begin & end are not supported with match\");\n\n mode.begin = mode.match;\n delete mode.match;\n}\n\n/**\n * provides the default 1 relevance to all modes\n * @type {CompilerExt}\n */\nfunction compileRelevance(mode, _parent) {\n // eslint-disable-next-line no-undefined\n if (mode.relevance === undefined) mode.relevance = 1;\n}\n\n// allow beforeMatch to act as a \"qualifier\" for the match\n// the full match begin must be [beforeMatch][begin]\nconst beforeMatchExt = (mode, parent) => {\n if (!mode.beforeMatch) return;\n // starts conflicts with endsParent which we need to make sure the child\n // rule is not matched multiple times\n if (mode.starts) throw new Error(\"beforeMatch cannot be used with starts\");\n\n const originalMode = Object.assign({}, mode);\n Object.keys(mode).forEach((key) => { delete mode[key]; });\n\n mode.keywords = originalMode.keywords;\n mode.begin = concat(originalMode.beforeMatch, lookahead(originalMode.begin));\n mode.starts = {\n relevance: 0,\n contains: [\n Object.assign(originalMode, { endsParent: true })\n ]\n };\n mode.relevance = 0;\n\n delete originalMode.beforeMatch;\n};\n\n// keywords that should have no default relevance value\nconst COMMON_KEYWORDS = [\n 'of',\n 'and',\n 'for',\n 'in',\n 'not',\n 'or',\n 'if',\n 'then',\n 'parent', // common variable name\n 'list', // common variable name\n 'value' // common variable name\n];\n\nconst DEFAULT_KEYWORD_SCOPE = \"keyword\";\n\n/**\n * Given raw keywords from a language definition, compile them.\n *\n * @param {string | Record<string,string|string[]> | Array<string>} rawKeywords\n * @param {boolean} caseInsensitive\n */\nfunction compileKeywords(rawKeywords, caseInsensitive, scopeName = DEFAULT_KEYWORD_SCOPE) {\n /** @type {import(\"highlight.js/private\").KeywordDict} */\n const compiledKeywords = Object.create(null);\n\n // input can be a string of keywords, an array of keywords, or a object with\n // named keys representing scopeName (which can then point to a string or array)\n if (typeof rawKeywords === 'string') {\n compileList(scopeName, rawKeywords.split(\" \"));\n } else if (Array.isArray(rawKeywords)) {\n compileList(scopeName, rawKeywords);\n } else {\n Object.keys(rawKeywords).forEach(function(scopeName) {\n // collapse all our objects back into the parent object\n Object.assign(\n compiledKeywords,\n compileKeywords(rawKeywords[scopeName], caseInsensitive, scopeName)\n );\n });\n }\n return compiledKeywords;\n\n // ---\n\n /**\n * Compiles an individual list of keywords\n *\n * Ex: \"for if when while|5\"\n *\n * @param {string} scopeName\n * @param {Array<string>} keywordList\n */\n function compileList(scopeName, keywordList) {\n if (caseInsensitive) {\n keywordList = keywordList.map(x => x.toLowerCase());\n }\n keywordList.forEach(function(keyword) {\n const pair = keyword.split('|');\n compiledKeywords[pair[0]] = [scopeName, scoreForKeyword(pair[0], pair[1])];\n });\n }\n}\n\n/**\n * Returns the proper score for a given keyword\n *\n * Also takes into account comment keywords, which will be scored 0 UNLESS\n * another score has been manually assigned.\n * @param {string} keyword\n * @param {string} [providedScore]\n */\nfunction scoreForKeyword(keyword, providedScore) {\n // manual scores always win over common keywords\n // so you can force a score of 1 if you really insist\n if (providedScore) {\n return Number(providedScore);\n }\n\n return commonKeyword(keyword) ? 0 : 1;\n}\n\n/**\n * Determines if a given keyword is common or not\n *\n * @param {string} keyword */\nfunction commonKeyword(keyword) {\n return COMMON_KEYWORDS.includes(keyword.toLowerCase());\n}\n\n/*\n\nFor the reasoning behind this please see:\nhttps://github.com/highlightjs/highlight.js/issues/2880#issuecomment-747275419\n\n*/\n\n/**\n * @type {Record<string, boolean>}\n */\nconst seenDeprecations = {};\n\n/**\n * @param {string} message\n */\nconst error = (message) => {\n console.error(message);\n};\n\n/**\n * @param {string} message\n * @param {any} args\n */\nconst warn = (message, ...args) => {\n console.log(`WARN: ${message}`, ...args);\n};\n\n/**\n * @param {string} version\n * @param {string} message\n */\nconst deprecated = (version, message) => {\n if (seenDeprecations[`${version}/${message}`]) return;\n\n console.log(`Deprecated as of ${version}. ${message}`);\n seenDeprecations[`${version}/${message}`] = true;\n};\n\n/* eslint-disable no-throw-literal */\n\n/**\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n*/\n\nconst MultiClassError = new Error();\n\n/**\n * Renumbers labeled scope names to account for additional inner match\n * groups that otherwise would break everything.\n *\n * Lets say we 3 match scopes:\n *\n * { 1 => ..., 2 => ..., 3 => ... }\n *\n * So what we need is a clean match like this:\n *\n * (a)(b)(c) => [ \"a\", \"b\", \"c\" ]\n *\n * But this falls apart with inner match groups:\n *\n * (a)(((b)))(c) => [\"a\", \"b\", \"b\", \"b\", \"c\" ]\n *\n * Our scopes are now \"out of alignment\" and we're repeating `b` 3 times.\n * What needs to happen is the numbers are remapped:\n *\n * { 1 => ..., 2 => ..., 5 => ... }\n *\n * We also need to know that the ONLY groups that should be output\n * are 1, 2, and 5. This function handles this behavior.\n *\n * @param {CompiledMode} mode\n * @param {Array<RegExp | string>} regexes\n * @param {{key: \"beginScope\"|\"endScope\"}} opts\n */\nfunction remapScopeNames(mode, regexes, { key }) {\n let offset = 0;\n const scopeNames = mode[key];\n /** @type Record<number,boolean> */\n const emit = {};\n /** @type Record<number,string> */\n const positions = {};\n\n for (let i = 1; i <= regexes.length; i++) {\n positions[i + offset] = scopeNames[i];\n emit[i + offset] = true;\n offset += countMatchGroups(regexes[i - 1]);\n }\n // we use _emit to keep track of which match groups are \"top-level\" to avoid double\n // output from inside match groups\n mode[key] = positions;\n mode[key]._emit = emit;\n mode[key]._multi = true;\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction beginMultiClass(mode) {\n if (!Array.isArray(mode.begin)) return;\n\n if (mode.skip || mode.excludeBegin || mode.returnBegin) {\n error(\"skip, excludeBegin, returnBegin not compatible with beginScope: {}\");\n throw MultiClassError;\n }\n\n if (typeof mode.beginScope !== \"object\" || mode.beginScope === null) {\n error(\"beginScope must be object\");\n throw MultiClassError;\n }\n\n remapScopeNames(mode, mode.begin, { key: \"beginScope\" });\n mode.begin = _rewriteBackreferences(mode.begin, { joinWith: \"\" });\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction endMultiClass(mode) {\n if (!Array.isArray(mode.end)) return;\n\n if (mode.skip || mode.excludeEnd || mode.returnEnd) {\n error(\"skip, excludeEnd, returnEnd not compatible with endScope: {}\");\n throw MultiClassError;\n }\n\n if (typeof mode.endScope !== \"object\" || mode.endScope === null) {\n error(\"endScope must be object\");\n throw MultiClassError;\n }\n\n remapScopeNames(mode, mode.end, { key: \"endScope\" });\n mode.end = _rewriteBackreferences(mode.end, { joinWith: \"\" });\n}\n\n/**\n * this exists only to allow `scope: {}` to be used beside `match:`\n * Otherwise `beginScope` would necessary and that would look weird\n\n {\n match: [ /def/, /\\w+/ ]\n scope: { 1: \"keyword\" , 2: \"title\" }\n }\n\n * @param {CompiledMode} mode\n */\nfunction scopeSugar(mode) {\n if (mode.scope && typeof mode.scope === \"object\" && mode.scope !== null) {\n mode.beginScope = mode.scope;\n delete mode.scope;\n }\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction MultiClass(mode) {\n scopeSugar(mode);\n\n if (typeof mode.beginScope === \"string\") {\n mode.beginScope = { _wrap: mode.beginScope };\n }\n if (typeof mode.endScope === \"string\") {\n mode.endScope = { _wrap: mode.endScope };\n }\n\n beginMultiClass(mode);\n endMultiClass(mode);\n}\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').CompiledLanguage} CompiledLanguage\n*/\n\n// compilation\n\n/**\n * Compiles a language definition result\n *\n * Given the raw result of a language definition (Language), compiles this so\n * that it is ready for highlighting code.\n * @param {Language} language\n * @returns {CompiledLanguage}\n */\nfunction compileLanguage(language) {\n /**\n * Builds a regex with the case sensitivity of the current language\n *\n * @param {RegExp | string} value\n * @param {boolean} [global]\n */\n function langRe(value, global) {\n return new RegExp(\n source(value),\n 'm'\n + (language.case_insensitive ? 'i' : '')\n + (language.unicodeRegex ? 'u' : '')\n + (global ? 'g' : '')\n );\n }\n\n /**\n Stores multiple regular expressions and allows you to quickly search for\n them all in a string simultaneously - returning the first match. It does\n this by creating a huge (a|b|c) regex - each individual item wrapped with ()\n and joined by `|` - using match groups to track position. When a match is\n found checking which position in the array has content allows us to figure\n out which of the original regexes / match groups triggered the match.\n\n The match object itself (the result of `Regex.exec`) is returned but also\n enhanced by merging in any meta-data that was registered with the regex.\n This is how we keep track of which mode matched, and what type of rule\n (`illegal`, `begin`, end, etc).\n */\n class MultiRegex {\n constructor() {\n this.matchIndexes = {};\n // @ts-ignore\n this.regexes = [];\n this.matchAt = 1;\n this.position = 0;\n }\n\n // @ts-ignore\n addRule(re, opts) {\n opts.position = this.position++;\n // @ts-ignore\n this.matchIndexes[this.matchAt] = opts;\n this.regexes.push([opts, re]);\n this.matchAt += countMatchGroups(re) + 1;\n }\n\n compile() {\n if (this.regexes.length === 0) {\n // avoids the need to check length every time exec is called\n // @ts-ignore\n this.exec = () => null;\n }\n const terminators = this.regexes.map(el => el[1]);\n this.matcherRe = langRe(_rewriteBackreferences(terminators, { joinWith: '|' }), true);\n this.lastIndex = 0;\n }\n\n /** @param {string} s */\n exec(s) {\n this.matcherRe.lastIndex = this.lastIndex;\n const match = this.matcherRe.exec(s);\n if (!match) { return null; }\n\n // eslint-disable-next-line no-undefined\n const i = match.findIndex((el, i) => i > 0 && el !== undefined);\n // @ts-ignore\n const matchData = this.matchIndexes[i];\n // trim off any earlier non-relevant match groups (ie, the other regex\n // match groups that make up the multi-matcher)\n match.splice(0, i);\n\n return Object.assign(match, matchData);\n }\n }\n\n /*\n Created to solve the key deficiently with MultiRegex - there is no way to\n test for multiple matches at a single location. Why would we need to do\n that? In the future a more dynamic engine will allow certain matches to be\n ignored. An example: if we matched say the 3rd regex in a large group but\n decided to ignore it - we'd need to started testing again at the 4th\n regex... but MultiRegex itself gives us no real way to do that.\n\n So what this class creates MultiRegexs on the fly for whatever search\n position they are needed.\n\n NOTE: These additional MultiRegex objects are created dynamically. For most\n grammars most of the time we will never actually need anything more than the\n first MultiRegex - so this shouldn't have too much overhead.\n\n Say this is our search group, and we match regex3, but wish to ignore it.\n\n regex1 | regex2 | regex3 | regex4 | regex5 ' ie, startAt = 0\n\n What we need is a new MultiRegex that only includes the remaining\n possibilities:\n\n regex4 | regex5 ' ie, startAt = 3\n\n This class wraps all that complexity up in a simple API... `startAt` decides\n where in the array of expressions to start doing the matching. It\n auto-increments, so if a match is found at position 2, then startAt will be\n set to 3. If the end is reached startAt will return to 0.\n\n MOST of the time the parser will be setting startAt manually to 0.\n */\n class ResumableMultiRegex {\n constructor() {\n // @ts-ignore\n this.rules = [];\n // @ts-ignore\n this.multiRegexes = [];\n this.count = 0;\n\n this.lastIndex = 0;\n this.regexIndex = 0;\n }\n\n // @ts-ignore\n getMatcher(index) {\n if (this.multiRegexes[index]) return this.multiRegexes[index];\n\n const matcher = new MultiRegex();\n this.rules.slice(index).forEach(([re, opts]) => matcher.addRule(re, opts));\n matcher.compile();\n this.multiRegexes[index] = matcher;\n return matcher;\n }\n\n resumingScanAtSamePosition() {\n return this.regexIndex !== 0;\n }\n\n considerAll() {\n this.regexIndex = 0;\n }\n\n // @ts-ignore\n addRule(re, opts) {\n this.rules.push([re, opts]);\n if (opts.type === \"begin\") this.count++;\n }\n\n /** @param {string} s */\n exec(s) {\n const m = this.getMatcher(this.regexIndex);\n m.lastIndex = this.lastIndex;\n let result = m.exec(s);\n\n // The following is because we have no easy way to say \"resume scanning at the\n // existing position but also skip the current rule ONLY\". What happens is\n // all prior rules are also skipped which can result in matching the wrong\n // thing. Example of matching \"booger\":\n\n // our matcher is [string, \"booger\", number]\n //\n // ....booger....\n\n // if \"booger\" is ignored then we'd really need a regex to scan from the\n // SAME position for only: [string, number] but ignoring \"booger\" (if it\n // was the first match), a simple resume would scan ahead who knows how\n // far looking only for \"number\", ignoring potential string matches (or\n // future \"booger\" matches that might be valid.)\n\n // So what we do: We execute two matchers, one resuming at the same\n // position, but the second full matcher starting at the position after:\n\n // /--- resume first regex match here (for [number])\n // |/---- full match here for [string, \"booger\", number]\n // vv\n // ....booger....\n\n // Which ever results in a match first is then used. So this 3-4 step\n // process essentially allows us to say \"match at this position, excluding\n // a prior rule that was ignored\".\n //\n // 1. Match \"booger\" first, ignore. Also proves that [string] does non match.\n // 2. Resume matching for [number]\n // 3. Match at index + 1 for [string, \"booger\", number]\n // 4. If #2 and #3 result in matches, which came first?\n if (this.resumingScanAtSamePosition()) {\n if (result && result.index === this.lastIndex) ; else { // use the second matcher result\n const m2 = this.getMatcher(0);\n m2.lastIndex = this.lastIndex + 1;\n result = m2.exec(s);\n }\n }\n\n if (result) {\n this.regexIndex += result.position + 1;\n if (this.regexIndex === this.count) {\n // wrap-around to considering all matches again\n this.considerAll();\n }\n }\n\n return result;\n }\n }\n\n /**\n * Given a mode, builds a huge ResumableMultiRegex that can be used to walk\n * the content and find matches.\n *\n * @param {CompiledMode} mode\n * @returns {ResumableMultiRegex}\n */\n function buildModeRegex(mode) {\n const mm = new ResumableMultiRegex();\n\n mode.contains.forEach(term => mm.addRule(term.begin, { rule: term, type: \"begin\" }));\n\n if (mode.terminatorEnd) {\n mm.addRule(mode.terminatorEnd, { type: \"end\" });\n }\n if (mode.illegal) {\n mm.addRule(mode.illegal, { type: \"illegal\" });\n }\n\n return mm;\n }\n\n /** skip vs abort vs ignore\n *\n * @skip - The mode is still entered and exited normally (and contains rules apply),\n * but all content is held and added to the parent buffer rather than being\n * output when the mode ends. Mostly used with `sublanguage` to build up\n * a single large buffer than can be parsed by sublanguage.\n *\n * - The mode begin ands ends normally.\n * - Content matched is added to the parent mode buffer.\n * - The parser cursor is moved forward normally.\n *\n * @abort - A hack placeholder until we have ignore. Aborts the mode (as if it\n * never matched) but DOES NOT continue to match subsequent `contains`\n * modes. Abort is bad/suboptimal because it can result in modes\n * farther down not getting applied because an earlier rule eats the\n * content but then aborts.\n *\n * - The mode does not begin.\n * - Content matched by `begin` is added to the mode buffer.\n * - The parser cursor is moved forward accordingly.\n *\n * @ignore - Ignores the mode (as if it never matched) and continues to match any\n * subsequent `contains` modes. Ignore isn't technically possible with\n * the current parser implementation.\n *\n * - The mode does not begin.\n * - Content matched by `begin` is ignored.\n * - The parser cursor is not moved forward.\n */\n\n /**\n * Compiles an individual mode\n *\n * This can raise an error if the mode contains certain detectable known logic\n * issues.\n * @param {Mode} mode\n * @param {CompiledMode | null} [parent]\n * @returns {CompiledMode | never}\n */\n function compileMode(mode, parent) {\n const cmode = /** @type CompiledMode */ (mode);\n if (mode.isCompiled) return cmode;\n\n [\n scopeClassName,\n // do this early so compiler extensions generally don't have to worry about\n // the distinction between match/begin\n compileMatch,\n MultiClass,\n beforeMatchExt\n ].forEach(ext => ext(mode, parent));\n\n language.compilerExtensions.forEach(ext => ext(mode, parent));\n\n // __beforeBegin is considered private API, internal use only\n mode.__beforeBegin = null;\n\n [\n beginKeywords,\n // do this later so compiler extensions that come earlier have access to the\n // raw array if they wanted to perhaps manipulate it, etc.\n compileIllegal,\n // default to 1 relevance if not specified\n compileRelevance\n ].forEach(ext => ext(mode, parent));\n\n mode.isCompiled = true;\n\n let keywordPattern = null;\n if (typeof mode.keywords === \"object\" && mode.keywords.$pattern) {\n // we need a copy because keywords might be compiled multiple times\n // so we can't go deleting $pattern from the original on the first\n // pass\n mode.keywords = Object.assign({}, mode.keywords);\n keywordPattern = mode.keywords.$pattern;\n delete mode.keywords.$pattern;\n }\n keywordPattern = keywordPattern || /\\w+/;\n\n if (mode.keywords) {\n mode.keywords = compileKeywords(mode.keywords, language.case_insensitive);\n }\n\n cmode.keywordPatternRe = langRe(keywordPattern, true);\n\n if (parent) {\n if (!mode.begin) mode.begin = /\\B|\\b/;\n cmode.beginRe = langRe(cmode.begin);\n if (!mode.end && !mode.endsWithParent) mode.end = /\\B|\\b/;\n if (mode.end) cmode.endRe = langRe(cmode.end);\n cmode.terminatorEnd = source(cmode.end) || '';\n if (mode.endsWithParent && parent.terminatorEnd) {\n cmode.terminatorEnd += (mode.end ? '|' : '') + parent.terminatorEnd;\n }\n }\n if (mode.illegal) cmode.illegalRe = langRe(/** @type {RegExp | string} */ (mode.illegal));\n if (!mode.contains) mode.contains = [];\n\n mode.contains = [].concat(...mode.contains.map(function(c) {\n return expandOrCloneMode(c === 'self' ? mode : c);\n }));\n mode.contains.forEach(function(c) { compileMode(/** @type Mode */ (c), cmode); });\n\n if (mode.starts) {\n compileMode(mode.starts, parent);\n }\n\n cmode.matcher = buildModeRegex(cmode);\n return cmode;\n }\n\n if (!language.compilerExtensions) language.compilerExtensions = [];\n\n // self is not valid at the top-level\n if (language.contains && language.contains.includes('self')) {\n throw new Error(\"ERR: contains `self` is not supported at the top-level of a language. See documentation.\");\n }\n\n // we need a null object, which inherit will guarantee\n language.classNameAliases = inherit$1(language.classNameAliases || {});\n\n return compileMode(/** @type Mode */ (language));\n}\n\n/**\n * Determines if a mode has a dependency on it's parent or not\n *\n * If a mode does have a parent dependency then often we need to clone it if\n * it's used in multiple places so that each copy points to the correct parent,\n * where-as modes without a parent can often safely be re-used at the bottom of\n * a mode chain.\n *\n * @param {Mode | null} mode\n * @returns {boolean} - is there a dependency on the parent?\n * */\nfunction dependencyOnParent(mode) {\n if (!mode) return false;\n\n return mode.endsWithParent || dependencyOnParent(mode.starts);\n}\n\n/**\n * Expands a mode or clones it if necessary\n *\n * This is necessary for modes with parental dependenceis (see notes on\n * `dependencyOnParent`) and for nodes that have `variants` - which must then be\n * exploded into their own individual modes at compile time.\n *\n * @param {Mode} mode\n * @returns {Mode | Mode[]}\n * */\nfunction expandOrCloneMode(mode) {\n if (mode.variants && !mode.cachedVariants) {\n mode.cachedVariants = mode.variants.map(function(variant) {\n return inherit$1(mode, { variants: null }, variant);\n });\n }\n\n // EXPAND\n // if we have variants then essentially \"replace\" the mode with the variants\n // this happens in compileMode, where this function is called from\n if (mode.cachedVariants) {\n return mode.cachedVariants;\n }\n\n // CLONE\n // if we have dependencies on parents then we need a unique\n // instance of ourselves, so we can be reused with many\n // different parents without issue\n if (dependencyOnParent(mode)) {\n return inherit$1(mode, { starts: mode.starts ? inherit$1(mode.starts) : null });\n }\n\n if (Object.isFrozen(mode)) {\n return inherit$1(mode);\n }\n\n // no special dependency issues, just return ourselves\n return mode;\n}\n\nvar version = \"11.10.0\";\n\nclass HTMLInjectionError extends Error {\n constructor(reason, html) {\n super(reason);\n this.name = \"HTMLInjectionError\";\n this.html = html;\n }\n}\n\n/*\nSyntax highlighting with language autodetection.\nhttps://highlightjs.org/\n*/\n\n\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').CompiledScope} CompiledScope\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSApi} HLJSApi\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').PluginEvent} PluginEvent\n@typedef {import('highlight.js').HLJSOptions} HLJSOptions\n@typedef {import('highlight.js').LanguageFn} LanguageFn\n@typedef {import('highlight.js').HighlightedHTMLElement} HighlightedHTMLElement\n@typedef {import('highlight.js').BeforeHighlightContext} BeforeHighlightContext\n@typedef {import('highlight.js/private').MatchType} MatchType\n@typedef {import('highlight.js/private').KeywordData} KeywordData\n@typedef {import('highlight.js/private').EnhancedMatch} EnhancedMatch\n@typedef {import('highlight.js/private').AnnotatedError} AnnotatedError\n@typedef {import('highlight.js').AutoHighlightResult} AutoHighlightResult\n@typedef {import('highlight.js').HighlightOptions} HighlightOptions\n@typedef {import('highlight.js').HighlightResult} HighlightResult\n*/\n\n\nconst escape = escapeHTML;\nconst inherit = inherit$1;\nconst NO_MATCH = Symbol(\"nomatch\");\nconst MAX_KEYWORD_HITS = 7;\n\n/**\n * @param {any} hljs - object that is extended (legacy)\n * @returns {HLJSApi}\n */\nconst HLJS = function(hljs) {\n // Global internal variables used within the highlight.js library.\n /** @type {Record<string, Language>} */\n const languages = Object.create(null);\n /** @type {Record<string, string>} */\n const aliases = Object.create(null);\n /** @type {HLJSPlugin[]} */\n const plugins = [];\n\n // safe/production mode - swallows more errors, tries to keep running\n // even if a single syntax or parse hits a fatal error\n let SAFE_MODE = true;\n const LANGUAGE_NOT_FOUND = \"Could not find the language '{}', did you forget to load/include a language module?\";\n /** @type {Language} */\n const PLAINTEXT_LANGUAGE = { disableAutodetect: true, name: 'Plain text', contains: [] };\n\n // Global options used when within external APIs. This is modified when\n // calling the `hljs.configure` function.\n /** @type HLJSOptions */\n let options = {\n ignoreUnescapedHTML: false,\n throwUnescapedHTML: false,\n noHighlightRe: /^(no-?highlight)$/i,\n languageDetectRe: /\\blang(?:uage)?-([\\w-]+)\\b/i,\n classPrefix: 'hljs-',\n cssSelector: 'pre code',\n languages: null,\n // beta configuration options, subject to change, welcome to discuss\n // https://github.com/highlightjs/highlight.js/issues/1086\n __emitter: TokenTreeEmitter\n };\n\n /* Utility functions */\n\n /**\n * Tests a language name to see if highlighting should be skipped\n * @param {string} languageName\n */\n function shouldNotHighlight(languageName) {\n return options.noHighlightRe.test(languageName);\n }\n\n /**\n * @param {HighlightedHTMLElement} block - the HTML element to determine language for\n */\n function blockLanguage(block) {\n let classes = block.className + ' ';\n\n classes += block.parentNode ? block.parentNode.className : '';\n\n // language-* takes precedence over non-prefixed class names.\n const match = options.languageDetectRe.exec(classes);\n if (match) {\n const language = getLanguage(match[1]);\n if (!language) {\n warn(LANGUAGE_NOT_FOUND.replace(\"{}\", match[1]));\n warn(\"Falling back to no-highlight mode for this block.\", block);\n }\n return language ? match[1] : 'no-highlight';\n }\n\n return classes\n .split(/\\s+/)\n .find((_class) => shouldNotHighlight(_class) || getLanguage(_class));\n }\n\n /**\n * Core highlighting function.\n *\n * OLD API\n * highlight(lang, code, ignoreIllegals, continuation)\n *\n * NEW API\n * highlight(code, {lang, ignoreIllegals})\n *\n * @param {string} codeOrLanguageName - the language to use for highlighting\n * @param {string | HighlightOptions} optionsOrCode - the code to highlight\n * @param {boolean} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n *\n * @returns {HighlightResult} Result - an object that represents the result\n * @property {string} language - the language name\n * @property {number} relevance - the relevance score\n * @property {string} value - the highlighted HTML code\n * @property {string} code - the original raw code\n * @property {CompiledMode} top - top of the current mode stack\n * @property {boolean} illegal - indicates whether any illegal matches were found\n */\n function highlight(codeOrLanguageName, optionsOrCode, ignoreIllegals) {\n let code = \"\";\n let languageName = \"\";\n if (typeof optionsOrCode === \"object\") {\n code = codeOrLanguageName;\n ignoreIllegals = optionsOrCode.ignoreIllegals;\n languageName = optionsOrCode.language;\n } else {\n // old API\n deprecated(\"10.7.0\", \"highlight(lang, code, ...args) has been deprecated.\");\n deprecated(\"10.7.0\", \"Please use highlight(code, options) instead.\\nhttps://github.com/highlightjs/highlight.js/issues/2277\");\n languageName = codeOrLanguageName;\n code = optionsOrCode;\n }\n\n // https://github.com/highlightjs/highlight.js/issues/3149\n // eslint-disable-next-line no-undefined\n if (ignoreIllegals === undefined) { ignoreIllegals = true; }\n\n /** @type {BeforeHighlightContext} */\n const context = {\n code,\n language: languageName\n };\n // the plugin can change the desired language or the code to be highlighted\n // just be changing the object it was passed\n fire(\"before:highlight\", context);\n\n // a before plugin can usurp the result completely by providing it's own\n // in which case we don't even need to call highlight\n const result = context.result\n ? context.result\n : _highlight(context.language, context.code, ignoreIllegals);\n\n result.code = context.code;\n // the plugin can change anything in result to suite it\n fire(\"after:highlight\", result);\n\n return result;\n }\n\n /**\n * private highlight that's used internally and does not fire callbacks\n *\n * @param {string} languageName - the language to use for highlighting\n * @param {string} codeToHighlight - the code to highlight\n * @param {boolean?} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n * @param {CompiledMode?} [continuation] - current continuation mode, if any\n * @returns {HighlightResult} - result of the highlight operation\n */\n function _highlight(languageName, codeToHighlight, ignoreIllegals, continuation) {\n const keywordHits = Object.create(null);\n\n /**\n * Return keyword data if a match is a keyword\n * @param {CompiledMode} mode - current mode\n * @param {string} matchText - the textual match\n * @returns {KeywordData | false}\n */\n function keywordData(mode, matchText) {\n return mode.keywords[matchText];\n }\n\n function processKeywords() {\n if (!top.keywords) {\n emitter.addText(modeBuffer);\n return;\n }\n\n let lastIndex = 0;\n top.keywordPatternRe.lastIndex = 0;\n let match = top.keywordPatternRe.exec(modeBuffer);\n let buf = \"\";\n\n while (match) {\n buf += modeBuffer.substring(lastIndex, match.index);\n const word = language.case_insensitive ? match[0].toLowerCase() : match[0];\n const data = keywordData(top, word);\n if (data) {\n const [kind, keywordRelevance] = data;\n emitter.addText(buf);\n buf = \"\";\n\n keywordHits[word] = (keywordHits[word] || 0) + 1;\n if (keywordHits[word] <= MAX_KEYWORD_HITS) relevance += keywordRelevance;\n if (kind.startsWith(\"_\")) {\n // _ implied for relevance only, do not highlight\n // by applying a class name\n buf += match[0];\n } else {\n const cssClass = language.classNameAliases[kind] || kind;\n emitKeyword(match[0], cssClass);\n }\n } else {\n buf += match[0];\n }\n lastIndex = top.keywordPatternRe.lastIndex;\n match = top.keywordPatternRe.exec(modeBuffer);\n }\n buf += modeBuffer.substring(lastIndex);\n emitter.addText(buf);\n }\n\n function processSubLanguage() {\n if (modeBuffer === \"\") return;\n /** @type HighlightResult */\n let result = null;\n\n if (typeof top.subLanguage === 'string') {\n if (!languages[top.subLanguage]) {\n emitter.addText(modeBuffer);\n return;\n }\n result = _highlight(top.subLanguage, modeBuffer, true, continuations[top.subLanguage]);\n continuations[top.subLanguage] = /** @type {CompiledMode} */ (result._top);\n } else {\n result = highlightAuto(modeBuffer, top.subLanguage.length ? top.subLanguage : null);\n }\n\n // Counting embedded language score towards the host language may be disabled\n // with zeroing the containing mode relevance. Use case in point is Markdown that\n // allows XML everywhere and makes every XML snippet to have a much larger Markdown\n // score.\n if (top.relevance > 0) {\n relevance += result.relevance;\n }\n emitter.__addSublanguage(result._emitter, result.language);\n }\n\n function processBuffer() {\n if (top.subLanguage != null) {\n processSubLanguage();\n } else {\n processKeywords();\n }\n modeBuffer = '';\n }\n\n /**\n * @param {string} text\n * @param {string} scope\n */\n function emitKeyword(keyword, scope) {\n if (keyword === \"\") return;\n\n emitter.startScope(scope);\n emitter.addText(keyword);\n emitter.endScope();\n }\n\n /**\n * @param {CompiledScope} scope\n * @param {RegExpMatchArray} match\n */\n function emitMultiClass(scope, match) {\n let i = 1;\n const max = match.length - 1;\n while (i <= max) {\n if (!scope._emit[i]) { i++; continue; }\n const klass = language.classNameAliases[scope[i]] || scope[i];\n const text = match[i];\n if (klass) {\n emitKeyword(text, klass);\n } else {\n modeBuffer = text;\n processKeywords();\n modeBuffer = \"\";\n }\n i++;\n }\n }\n\n /**\n * @param {CompiledMode} mode - new mode to start\n * @param {RegExpMatchArray} match\n */\n function startNewMode(mode, match) {\n if (mode.scope && typeof mode.scope === \"string\") {\n emitter.openNode(language.classNameAliases[mode.scope] || mode.scope);\n }\n if (mode.beginScope) {\n // beginScope just wraps the begin match itself in a scope\n if (mode.beginScope._wrap) {\n emitKeyword(modeBuffer, language.classNameAliases[mode.beginScope._wrap] || mode.beginScope._wrap);\n modeBuffer = \"\";\n } else if (mode.beginScope._multi) {\n // at this point modeBuffer should just be the match\n emitMultiClass(mode.beginScope, match);\n modeBuffer = \"\";\n }\n }\n\n top = Object.create(mode, { parent: { value: top } });\n return top;\n }\n\n /**\n * @param {CompiledMode } mode - the mode to potentially end\n * @param {RegExpMatchArray} match - the latest match\n * @param {string} matchPlusRemainder - match plus remainder of content\n * @returns {CompiledMode | void} - the next mode, or if void continue on in current mode\n */\n function endOfMode(mode, match, matchPlusRemainder) {\n let matched = startsWith(mode.endRe, matchPlusRemainder);\n\n if (matched) {\n if (mode[\"on:end\"]) {\n const resp = new Response(mode);\n mode[\"on:end\"](match, resp);\n if (resp.isMatchIgnored) matched = false;\n }\n\n if (matched) {\n while (mode.endsParent && mode.parent) {\n mode = mode.parent;\n }\n return mode;\n }\n }\n // even if on:end fires an `ignore` it's still possible\n // that we might trigger the end node because of a parent mode\n if (mode.endsWithParent) {\n return endOfMode(mode.parent, match, matchPlusRemainder);\n }\n }\n\n /**\n * Handle matching but then ignoring a sequence of text\n *\n * @param {string} lexeme - string containing full match text\n */\n function doIgnore(lexeme) {\n if (top.matcher.regexIndex === 0) {\n // no more regexes to potentially match here, so we move the cursor forward one\n // space\n modeBuffer += lexeme[0];\n return 1;\n } else {\n // no need to move the cursor, we still have additional regexes to try and\n // match at this very spot\n resumeScanAtSamePosition = true;\n return 0;\n }\n }\n\n /**\n * Handle the start of a new potential mode match\n *\n * @param {EnhancedMatch} match - the current match\n * @returns {number} how far to advance the parse cursor\n */\n function doBeginMatch(match) {\n const lexeme = match[0];\n const newMode = match.rule;\n\n const resp = new Response(newMode);\n // first internal before callbacks, then the public ones\n const beforeCallbacks = [newMode.__beforeBegin, newMode[\"on:begin\"]];\n for (const cb of beforeCallbacks) {\n if (!cb) continue;\n cb(match, resp);\n if (resp.isMatchIgnored) return doIgnore(lexeme);\n }\n\n if (newMode.skip) {\n modeBuffer += lexeme;\n } else {\n if (newMode.excludeBegin) {\n modeBuffer += lexeme;\n }\n processBuffer();\n if (!newMode.returnBegin && !newMode.excludeBegin) {\n modeBuffer = lexeme;\n }\n }\n startNewMode(newMode, match);\n return newMode.returnBegin ? 0 : lexeme.length;\n }\n\n /**\n * Handle the potential end of mode\n *\n * @param {RegExpMatchArray} match - the current match\n */\n function doEndMatch(match) {\n const lexeme = match[0];\n const matchPlusRemainder = codeToHighlight.substring(match.index);\n\n const endMode = endOfMode(top, match, matchPlusRemainder);\n if (!endMode) { return NO_MATCH; }\n\n const origin = top;\n if (top.endScope && top.endScope._wrap) {\n processBuffer();\n emitKeyword(lexeme, top.endScope._wrap);\n } else if (top.endScope && top.endScope._multi) {\n processBuffer();\n emitMultiClass(top.endScope, match);\n } else if (origin.skip) {\n modeBuffer += lexeme;\n } else {\n if (!(origin.returnEnd || origin.excludeEnd)) {\n modeBuffer += lexeme;\n }\n processBuffer();\n if (origin.excludeEnd) {\n modeBuffer = lexeme;\n }\n }\n do {\n if (top.scope) {\n emitter.closeNode();\n }\n if (!top.skip && !top.subLanguage) {\n relevance += top.relevance;\n }\n top = top.parent;\n } while (top !== endMode.parent);\n if (endMode.starts) {\n startNewMode(endMode.starts, match);\n }\n return origin.returnEnd ? 0 : lexeme.length;\n }\n\n function processContinuations() {\n const list = [];\n for (let current = top; current !== language; current = current.parent) {\n if (current.scope) {\n list.unshift(current.scope);\n }\n }\n list.forEach(item => emitter.openNode(item));\n }\n\n /** @type {{type?: MatchType, index?: number, rule?: Mode}}} */\n let lastMatch = {};\n\n /**\n * Process an individual match\n *\n * @param {string} textBeforeMatch - text preceding the match (since the last match)\n * @param {EnhancedMatch} [match] - the match itself\n */\n function processLexeme(textBeforeMatch, match) {\n const lexeme = match && match[0];\n\n // add non-matched text to the current mode buffer\n modeBuffer += textBeforeMatch;\n\n if (lexeme == null) {\n processBuffer();\n return 0;\n }\n\n // we've found a 0 width match and we're stuck, so we need to advance\n // this happens when we have badly behaved rules that have optional matchers to the degree that\n // sometimes they can end up matching nothing at all\n // Ref: https://github.com/highlightjs/highlight.js/issues/2140\n if (lastMatch.type === \"begin\" && match.type === \"end\" && lastMatch.index === match.index && lexeme === \"\") {\n // spit the \"skipped\" character that our regex choked on back into the output sequence\n modeBuffer += codeToHighlight.slice(match.index, match.index + 1);\n if (!SAFE_MODE) {\n /** @type {AnnotatedError} */\n const err = new Error(`0 width match regex (${languageName})`);\n err.languageName = languageName;\n err.badRule = lastMatch.rule;\n throw err;\n }\n return 1;\n }\n lastMatch = match;\n\n if (match.type === \"begin\") {\n return doBeginMatch(match);\n } else if (match.type === \"illegal\" && !ignoreIllegals) {\n // illegal match, we do not continue processing\n /** @type {AnnotatedError} */\n const err = new Error('Illegal lexeme \"' + lexeme + '\" for mode \"' + (top.scope || '<unnamed>') + '\"');\n err.mode = top;\n throw err;\n } else if (match.type === \"end\") {\n const processed = doEndMatch(match);\n if (processed !== NO_MATCH) {\n return processed;\n }\n }\n\n // edge case for when illegal matches $ (end of line) which is technically\n // a 0 width match but not a begin/end match so it's not caught by the\n // first handler (when ignoreIllegals is true)\n if (match.type === \"illegal\" && lexeme === \"\") {\n // advance so we aren't stuck in an infinite loop\n return 1;\n }\n\n // infinite loops are BAD, this is a last ditch catch all. if we have a\n // decent number of iterations yet our index (cursor position in our\n // parsing) still 3x behind our index then something is very wrong\n // so we bail\n if (iterations > 100000 && iterations > match.index * 3) {\n const err = new Error('potential infinite loop, way more iterations than matches');\n throw err;\n }\n\n /*\n Why might be find ourselves here? An potential end match that was\n triggered but could not be completed. IE, `doEndMatch` returned NO_MATCH.\n (this could be because a callback requests the match be ignored, etc)\n\n This causes no real harm other than stopping a few times too many.\n */\n\n modeBuffer += lexeme;\n return lexeme.length;\n }\n\n const language = getLanguage(languageName);\n if (!language) {\n error(LANGUAGE_NOT_FOUND.replace(\"{}\", languageName));\n throw new Error('Unknown language: \"' + languageName + '\"');\n }\n\n const md = compileLanguage(language);\n let result = '';\n /** @type {CompiledMode} */\n let top = continuation || md;\n /** @type Record<string,CompiledMode> */\n const continuations = {}; // keep continuations for sub-languages\n const emitter = new options.__emitter(options);\n processContinuations();\n let modeBuffer = '';\n let relevance = 0;\n let index = 0;\n let iterations = 0;\n let resumeScanAtSamePosition = false;\n\n try {\n if (!language.__emitTokens) {\n top.matcher.considerAll();\n\n for (;;) {\n iterations++;\n if (resumeScanAtSamePosition) {\n // only regexes not matched previously will now be\n // considered for a potential match\n resumeScanAtSamePosition = false;\n } else {\n top.matcher.considerAll();\n }\n top.matcher.lastIndex = index;\n\n const match = top.matcher.exec(codeToHighlight);\n // console.log(\"match\", match[0], match.rule && match.rule.begin)\n\n if (!match) break;\n\n const beforeMatch = codeToHighlight.substring(index, match.index);\n const processedCount = processLexeme(beforeMatch, match);\n index = match.index + processedCount;\n }\n processLexeme(codeToHighlight.substring(index));\n } else {\n language.__emitTokens(codeToHighlight, emitter);\n }\n\n emitter.finalize();\n result = emitter.toHTML();\n\n return {\n language: languageName,\n value: result,\n relevance,\n illegal: false,\n _emitter: emitter,\n _top: top\n };\n } catch (err) {\n if (err.message && err.message.includes('Illegal')) {\n return {\n language: languageName,\n value: escape(codeToHighlight),\n illegal: true,\n relevance: 0,\n _illegalBy: {\n message: err.message,\n index,\n context: codeToHighlight.slice(index - 100, index + 100),\n mode: err.mode,\n resultSoFar: result\n },\n _emitter: emitter\n };\n } else if (SAFE_MODE) {\n return {\n language: languageName,\n value: escape(codeToHighlight),\n illegal: false,\n relevance: 0,\n errorRaised: err,\n _emitter: emitter,\n _top: top\n };\n } else {\n throw err;\n }\n }\n }\n\n /**\n * returns a valid highlight result, without actually doing any actual work,\n * auto highlight starts with this and it's possible for small snippets that\n * auto-detection may not find a better match\n * @param {string} code\n * @returns {HighlightResult}\n */\n function justTextHighlightResult(code) {\n const result = {\n value: escape(code),\n illegal: false,\n relevance: 0,\n _top: PLAINTEXT_LANGUAGE,\n _emitter: new options.__emitter(options)\n };\n result._emitter.addText(code);\n return result;\n }\n\n /**\n Highlighting with language detection. Accepts a string with the code to\n highlight. Returns an object with the following properties:\n\n - language (detected language)\n - relevance (int)\n - value (an HTML string with highlighting markup)\n - secondBest (object with the same structure for second-best heuristically\n detected language, may be absent)\n\n @param {string} code\n @param {Array<string>} [languageSubset]\n @returns {AutoHighlightResult}\n */\n function highlightAuto(code, languageSubset) {\n languageSubset = languageSubset || options.languages || Object.keys(languages);\n const plaintext = justTextHighlightResult(code);\n\n const results = languageSubset.filter(getLanguage).filter(autoDetection).map(name =>\n _highlight(name, code, false)\n );\n results.unshift(plaintext); // plaintext is always an option\n\n const sorted = results.sort((a, b) => {\n // sort base on relevance\n if (a.relevance !== b.relevance) return b.relevance - a.relevance;\n\n // always award the tie to the base language\n // ie if C++ and Arduino are tied, it's more likely to be C++\n if (a.language && b.language) {\n if (getLanguage(a.language).supersetOf === b.language) {\n return 1;\n } else if (getLanguage(b.language).supersetOf === a.language) {\n return -1;\n }\n }\n\n // otherwise say they are equal, which has the effect of sorting on\n // relevance while preserving the original ordering - which is how ties\n // have historically been settled, ie the language that comes first always\n // wins in the case of a tie\n return 0;\n });\n\n const [best, secondBest] = sorted;\n\n /** @type {AutoHighlightResult} */\n const result = best;\n result.secondBest = secondBest;\n\n return result;\n }\n\n /**\n * Builds new class name for block given the language name\n *\n * @param {HTMLElement} element\n * @param {string} [currentLang]\n * @param {string} [resultLang]\n */\n function updateClassName(element, currentLang, resultLang) {\n const language = (currentLang && aliases[currentLang]) || resultLang;\n\n element.classList.add(\"hljs\");\n element.classList.add(`language-${language}`);\n }\n\n /**\n * Applies highlighting to a DOM node containing code.\n *\n * @param {HighlightedHTMLElement} element - the HTML element to highlight\n */\n function highlightElement(element) {\n /** @type HTMLElement */\n let node = null;\n const language = blockLanguage(element);\n\n if (shouldNotHighlight(language)) return;\n\n fire(\"before:highlightElement\",\n { el: element, language });\n\n if (element.dataset.highlighted) {\n console.log(\"Element previously highlighted. To highlight again, first unset `dataset.highlighted`.\", element);\n return;\n }\n\n // we should be all text, no child nodes (unescaped HTML) - this is possibly\n // an HTML injection attack - it's likely too late if this is already in\n // production (the code has likely already done its damage by the time\n // we're seeing it)... but we yell loudly about this so that hopefully it's\n // more likely to be caught in development before making it to production\n if (element.children.length > 0) {\n if (!options.ignoreUnescapedHTML) {\n console.warn(\"One of your code blocks includes unescaped HTML. This is a potentially serious security risk.\");\n console.warn(\"https://github.com/highlightjs/highlight.js/wiki/security\");\n console.warn(\"The element with unescaped HTML:\");\n console.warn(element);\n }\n if (options.throwUnescapedHTML) {\n const err = new HTMLInjectionError(\n \"One of your code blocks includes unescaped HTML.\",\n element.innerHTML\n );\n throw err;\n }\n }\n\n node = element;\n const text = node.textContent;\n const result = language ? highlight(text, { language, ignoreIllegals: true }) : highlightAuto(text);\n\n element.innerHTML = result.value;\n element.dataset.highlighted = \"yes\";\n updateClassName(element, language, result.language);\n element.result = {\n language: result.language,\n // TODO: remove with version 11.0\n re: result.relevance,\n relevance: result.relevance\n };\n if (result.secondBest) {\n element.secondBest = {\n language: result.secondBest.language,\n relevance: result.secondBest.relevance\n };\n }\n\n fire(\"after:highlightElement\", { el: element, result, text });\n }\n\n /**\n * Updates highlight.js global options with the passed options\n *\n * @param {Partial<HLJSOptions>} userOptions\n */\n function configure(userOptions) {\n options = inherit(options, userOptions);\n }\n\n // TODO: remove v12, deprecated\n const initHighlighting = () => {\n highlightAll();\n deprecated(\"10.6.0\", \"initHighlighting() deprecated. Use highlightAll() now.\");\n };\n\n // TODO: remove v12, deprecated\n function initHighlightingOnLoad() {\n highlightAll();\n deprecated(\"10.6.0\", \"initHighlightingOnLoad() deprecated. Use highlightAll() now.\");\n }\n\n let wantsHighlight = false;\n\n /**\n * auto-highlights all pre>code elements on the page\n */\n function highlightAll() {\n // if we are called too early in the loading process\n if (document.readyState === \"loading\") {\n wantsHighlight = true;\n return;\n }\n\n const blocks = document.querySelectorAll(options.cssSelector);\n blocks.forEach(highlightElement);\n }\n\n function boot() {\n // if a highlight was requested before DOM was loaded, do now\n if (wantsHighlight) highlightAll();\n }\n\n // make sure we are in the browser environment\n if (typeof window !== 'undefined' && window.addEventListener) {\n window.addEventListener('DOMContentLoaded', boot, false);\n }\n\n /**\n * Register a language grammar module\n *\n * @param {string} languageName\n * @param {LanguageFn} languageDefinition\n */\n function registerLanguage(languageName, languageDefinition) {\n let lang = null;\n try {\n lang = languageDefinition(hljs);\n } catch (error$1) {\n error(\"Language definition for '{}' could not be registered.\".replace(\"{}\", languageName));\n // hard or soft error\n if (!SAFE_MODE) { throw error$1; } else { error(error$1); }\n // languages that have serious errors are replaced with essentially a\n // \"plaintext\" stand-in so that the code blocks will still get normal\n // css classes applied to them - and one bad language won't break the\n // entire highlighter\n lang = PLAINTEXT_LANGUAGE;\n }\n // give it a temporary name if it doesn't have one in the meta-data\n if (!lang.name) lang.name = languageName;\n languages[languageName] = lang;\n lang.rawDefinition = languageDefinition.bind(null, hljs);\n\n if (lang.aliases) {\n registerAliases(lang.aliases, { languageName });\n }\n }\n\n /**\n * Remove a language grammar module\n *\n * @param {string} languageName\n */\n function unregisterLanguage(languageName) {\n delete languages[languageName];\n for (const alias of Object.keys(aliases)) {\n if (aliases[alias] === languageName) {\n delete aliases[alias];\n }\n }\n }\n\n /**\n * @returns {string[]} List of language internal names\n */\n function listLanguages() {\n return Object.keys(languages);\n }\n\n /**\n * @param {string} name - name of the language to retrieve\n * @returns {Language | undefined}\n */\n function getLanguage(name) {\n name = (name || '').toLowerCase();\n return languages[name] || languages[aliases[name]];\n }\n\n /**\n *\n * @param {string|string[]} aliasList - single alias or list of aliases\n * @param {{languageName: string}} opts\n */\n function registerAliases(aliasList, { languageName }) {\n if (typeof aliasList === 'string') {\n aliasList = [aliasList];\n }\n aliasList.forEach(alias => { aliases[alias.toLowerCase()] = languageName; });\n }\n\n /**\n * Determines if a given language has auto-detection enabled\n * @param {string} name - name of the language\n */\n function autoDetection(name) {\n const lang = getLanguage(name);\n return lang && !lang.disableAutodetect;\n }\n\n /**\n * Upgrades the old highlightBlock plugins to the new\n * highlightElement API\n * @param {HLJSPlugin} plugin\n */\n function upgradePluginAPI(plugin) {\n // TODO: remove with v12\n if (plugin[\"before:highlightBlock\"] && !plugin[\"before:highlightElement\"]) {\n plugin[\"before:highlightElement\"] = (data) => {\n plugin[\"before:highlightBlock\"](\n Object.assign({ block: data.el }, data)\n );\n };\n }\n if (plugin[\"after:highlightBlock\"] && !plugin[\"after:highlightElement\"]) {\n plugin[\"after:highlightElement\"] = (data) => {\n plugin[\"after:highlightBlock\"](\n Object.assign({ block: data.el }, data)\n );\n };\n }\n }\n\n /**\n * @param {HLJSPlugin} plugin\n */\n function addPlugin(plugin) {\n upgradePluginAPI(plugin);\n plugins.push(plugin);\n }\n\n /**\n * @param {HLJSPlugin} plugin\n */\n function removePlugin(plugin) {\n const index = plugins.indexOf(plugin);\n if (index !== -1) {\n plugins.splice(index, 1);\n }\n }\n\n /**\n *\n * @param {PluginEvent} event\n * @param {any} args\n */\n function fire(event, args) {\n const cb = event;\n plugins.forEach(function(plugin) {\n if (plugin[cb]) {\n plugin[cb](args);\n }\n });\n }\n\n /**\n * DEPRECATED\n * @param {HighlightedHTMLElement} el\n */\n function deprecateHighlightBlock(el) {\n deprecated(\"10.7.0\", \"highlightBlock will be removed entirely in v12.0\");\n deprecated(\"10.7.0\", \"Please use highlightElement now.\");\n\n return highlightElement(el);\n }\n\n /* Interface definition */\n Object.assign(hljs, {\n highlight,\n highlightAuto,\n highlightAll,\n highlightElement,\n // TODO: Remove with v12 API\n highlightBlock: deprecateHighlightBlock,\n configure,\n initHighlighting,\n initHighlightingOnLoad,\n registerLanguage,\n unregisterLanguage,\n listLanguages,\n getLanguage,\n registerAliases,\n autoDetection,\n inherit,\n addPlugin,\n removePlugin\n });\n\n hljs.debugMode = function() { SAFE_MODE = false; };\n hljs.safeMode = function() { SAFE_MODE = true; };\n hljs.versionString = version;\n\n hljs.regex = {\n concat: concat,\n lookahead: lookahead,\n either: either,\n optional: optional,\n anyNumberOfTimes: anyNumberOfTimes\n };\n\n for (const key in MODES) {\n // @ts-ignore\n if (typeof MODES[key] === \"object\") {\n // @ts-ignore\n deepFreeze(MODES[key]);\n }\n }\n\n // merge all the modes/regexes into our main object\n Object.assign(hljs, MODES);\n\n return hljs;\n};\n\n// Other names for the variable may break build script\nconst highlight = HLJS({});\n\n// returns a new instance of the highlighter to be used for extensions\n// check https://github.com/wooorm/lowlight/issues/47\nhighlight.newInstance = () => HLJS({});\n\nmodule.exports = highlight;\nhighlight.HighlightJS = highlight;\nhighlight.default = highlight;\n","import{defineComponent as e,ref as l,watch as a,computed as t,h as n}from\"vue\";import u from\"highlight.js/lib/core\";var r=e({props:{code:{type:String,required:!0},language:{type:String,default:\"\"},autodetect:{type:Boolean,default:!0},ignoreIllegals:{type:Boolean,default:!0}},setup:function(e){var n=l(e.language);a((function(){return e.language}),(function(e){n.value=e}));var r=t((function(){return e.autodetect||!n.value})),o=t((function(){return!r.value&&!u.getLanguage(n.value)}));return{className:t((function(){return o.value?\"\":\"hljs \"+n.value})),highlightedCode:t((function(){var l;if(o.value)return console.warn('The language \"'+n.value+'\" you specified could not be found.'),e.code.replace(/&/g,\"&\").replace(/</g,\"<\").replace(/>/g,\">\").replace(/\"/g,\""\").replace(/'/g,\"'\");if(r.value){var a=u.highlightAuto(e.code);return n.value=null!==(l=a.language)&&void 0!==l?l:\"\",a.value}return(a=u.highlight(e.code,{language:n.value,ignoreIllegals:e.ignoreIllegals})).value}))}},render:function(){return n(\"pre\",{},[n(\"code\",{class:this.className,innerHTML:this.highlightedCode})])}}),o={install:function(e){e.component(\"highlightjs\",r)},component:r};export default o;\n","import { openBlock, createBlock, withKeys, withModifiers, renderSlot, createVNode, withDirectives, Fragment, renderList, toDisplayString, vShow, createCommentVNode, Transition, withCtx, createTextVNode } from 'vue';\n\nfunction isEmpty (opt) {\n if (opt === 0) return false\n if (Array.isArray(opt) && opt.length === 0) return true\n return !opt\n}\n\nfunction not (fun) {\n return (...params) => !fun(...params)\n}\n\nfunction includes (str, query) {\n /* istanbul ignore else */\n if (str === undefined) str = 'undefined';\n if (str === null) str = 'null';\n if (str === false) str = 'false';\n const text = str.toString().toLowerCase();\n return text.indexOf(query.trim()) !== -1\n}\n\nfunction filterOptions (options, search, label, customLabel) {\n return search ? options\n .filter((option) => includes(customLabel(option, label), search))\n .sort((a, b) => customLabel(a, label).length - customLabel(b, label).length) : options\n}\n\nfunction stripGroups (options) {\n return options.filter((option) => !option.$isLabel)\n}\n\nfunction flattenOptions (values, label) {\n return (options) =>\n options.reduce((prev, curr) => {\n /* istanbul ignore else */\n if (curr[values] && curr[values].length) {\n prev.push({\n $groupLabel: curr[label],\n $isLabel: true\n });\n return prev.concat(curr[values])\n }\n return prev\n }, [])\n}\n\nfunction filterGroups (search, label, values, groupLabel, customLabel) {\n return (groups) =>\n groups.map((group) => {\n /* istanbul ignore else */\n if (!group[values]) {\n console.warn(`Options passed to vue-multiselect do not contain groups, despite the config.`);\n return []\n }\n const groupOptions = filterOptions(group[values], search, label, customLabel);\n\n return groupOptions.length\n ? {\n [groupLabel]: group[groupLabel],\n [values]: groupOptions\n }\n : []\n })\n}\n\nconst flow = (...fns) => (x) => fns.reduce((v, f) => f(v), x);\n\nvar multiselectMixin = {\n data () {\n return {\n search: '',\n isOpen: false,\n preferredOpenDirection: 'below',\n optimizedHeight: this.maxHeight\n }\n },\n props: {\n /**\n * Decide whether to filter the results based on search query.\n * Useful for async filtering, where we search through more complex data.\n * @type {Boolean}\n */\n internalSearch: {\n type: Boolean,\n default: true\n },\n /**\n * Array of available options: Objects, Strings or Integers.\n * If array of objects, visible label will default to option.label.\n * If `labal` prop is passed, label will equal option['label']\n * @type {Array}\n */\n options: {\n type: Array,\n required: true\n },\n /**\n * Equivalent to the `multiple` attribute on a `<select>` input.\n * @default false\n * @type {Boolean}\n */\n multiple: {\n type: Boolean,\n default: false\n },\n /**\n * Key to compare objects\n * @default 'id'\n * @type {String}\n */\n trackBy: {\n type: String\n },\n /**\n * Label to look for in option Object\n * @default 'label'\n * @type {String}\n */\n label: {\n type: String\n },\n /**\n * Enable/disable search in options\n * @default true\n * @type {Boolean}\n */\n searchable: {\n type: Boolean,\n default: true\n },\n /**\n * Clear the search input after `)\n * @default true\n * @type {Boolean}\n */\n clearOnSelect: {\n type: Boolean,\n default: true\n },\n /**\n * Hide already selected options\n * @default false\n * @type {Boolean}\n */\n hideSelected: {\n type: Boolean,\n default: false\n },\n /**\n * Equivalent to the `placeholder` attribute on a `<select>` input.\n * @default 'Select option'\n * @type {String}\n */\n placeholder: {\n type: String,\n default: 'Select option'\n },\n /**\n * Allow to remove all selected values\n * @default true\n * @type {Boolean}\n */\n allowEmpty: {\n type: Boolean,\n default: true\n },\n /**\n * Reset this.internalValue, this.search after this.internalValue changes.\n * Useful if want to create a stateless dropdown.\n * @default false\n * @type {Boolean}\n */\n resetAfter: {\n type: Boolean,\n default: false\n },\n /**\n * Enable/disable closing after selecting an option\n * @default true\n * @type {Boolean}\n */\n closeOnSelect: {\n type: Boolean,\n default: true\n },\n /**\n * Function to interpolate the custom label\n * @default false\n * @type {Function}\n */\n customLabel: {\n type: Function,\n default (option, label) {\n if (isEmpty(option)) return ''\n return label ? option[label] : option\n }\n },\n /**\n * Disable / Enable tagging\n * @default false\n * @type {Boolean}\n */\n taggable: {\n type: Boolean,\n default: false\n },\n /**\n * String to show when highlighting a potential tag\n * @default 'Press enter to create a tag'\n * @type {String}\n */\n tagPlaceholder: {\n type: String,\n default: 'Press enter to create a tag'\n },\n /**\n * By default new tags will appear above the search results.\n * Changing to 'bottom' will revert this behaviour\n * and will proritize the search results\n * @default 'top'\n * @type {String}\n */\n tagPosition: {\n type: String,\n default: 'top'\n },\n /**\n * Number of allowed selected options. No limit if 0.\n * @default 0\n * @type {Number}\n */\n max: {\n type: [Number, Boolean],\n default: false\n },\n /**\n * Will be passed with all events as second param.\n * Useful for identifying events origin.\n * @default null\n * @type {String|Integer}\n */\n id: {\n default: null\n },\n /**\n * Limits the options displayed in the dropdown\n * to the first X options.\n * @default 1000\n * @type {Integer}\n */\n optionsLimit: {\n type: Number,\n default: 1000\n },\n /**\n * Name of the property containing\n * the group values\n * @default 1000\n * @type {String}\n */\n groupValues: {\n type: String\n },\n /**\n * Name of the property containing\n * the group label\n * @default 1000\n * @type {String}\n */\n groupLabel: {\n type: String\n },\n /**\n * Allow to select all group values\n * by selecting the group label\n * @default false\n * @type {Boolean}\n */\n groupSelect: {\n type: Boolean,\n default: false\n },\n /**\n * Array of keyboard keys to block\n * when selecting\n * @default 1000\n * @type {String}\n */\n blockKeys: {\n type: Array,\n default () {\n return []\n }\n },\n /**\n * Prevent from wiping up the search value\n * @default false\n * @type {Boolean}\n */\n preserveSearch: {\n type: Boolean,\n default: false\n },\n /**\n * Select 1st options if value is empty\n * @default false\n * @type {Boolean}\n */\n preselectFirst: {\n type: Boolean,\n default: false\n },\n /**\n * Prevent autofocus\n * @default false\n * @type {Boolean}\n */\n preventAutofocus: {\n type: Boolean,\n default: false\n }\n },\n mounted () {\n /* istanbul ignore else */\n if (!this.multiple && this.max) {\n console.warn('[Vue-Multiselect warn]: Max prop should not be used when prop Multiple equals false.');\n }\n if (\n this.preselectFirst &&\n !this.internalValue.length &&\n this.options.length\n ) {\n this.select(this.filteredOptions[0]);\n }\n },\n computed: {\n internalValue () {\n return this.modelValue || this.modelValue === 0\n ? Array.isArray(this.modelValue) ? this.modelValue : [this.modelValue]\n : []\n },\n filteredOptions () {\n const search = this.search || '';\n const normalizedSearch = search.toLowerCase().trim();\n\n let options = this.options.concat();\n\n /* istanbul ignore else */\n if (this.internalSearch) {\n options = this.groupValues\n ? this.filterAndFlat(options, normalizedSearch, this.label)\n : filterOptions(options, normalizedSearch, this.label, this.customLabel);\n } else {\n options = this.groupValues ? flattenOptions(this.groupValues, this.groupLabel)(options) : options;\n }\n\n options = this.hideSelected\n ? options.filter(not(this.isSelected))\n : options;\n\n /* istanbul ignore else */\n if (this.taggable && normalizedSearch.length && !this.isExistingOption(normalizedSearch)) {\n if (this.tagPosition === 'bottom') {\n options.push({isTag: true, label: search});\n } else {\n options.unshift({isTag: true, label: search});\n }\n }\n\n return options.slice(0, this.optionsLimit)\n },\n valueKeys () {\n if (this.trackBy) {\n return this.internalValue.map((element) => element[this.trackBy])\n } else {\n return this.internalValue\n }\n },\n optionKeys () {\n const options = this.groupValues ? this.flatAndStrip(this.options) : this.options;\n return options.map((element) => this.customLabel(element, this.label).toString().toLowerCase())\n },\n currentOptionLabel () {\n return this.multiple\n ? this.searchable ? '' : this.placeholder\n : this.internalValue.length\n ? this.getOptionLabel(this.internalValue[0])\n : this.searchable ? '' : this.placeholder\n }\n },\n watch: {\n internalValue: {\n handler () {\n /* istanbul ignore else */\n if (this.resetAfter && this.internalValue.length) {\n this.search = '';\n this.$emit('update:modelValue', this.multiple ? [] : null);\n }\n },\n deep: true\n },\n search () {\n this.$emit('search-change', this.search);\n }\n },\n emits: ['open', 'search-change', 'close', 'select', 'update:modelValue', 'remove', 'tag'],\n methods: {\n /**\n * Returns the internalValue in a way it can be emited to the parent\n * @returns {Object||Array||String||Integer}\n */\n getValue () {\n return this.multiple\n ? this.internalValue\n : this.internalValue.length === 0\n ? null\n : this.internalValue[0]\n },\n /**\n * Filters and then flattens the options list\n * @param {Array}\n * @return {Array} returns a filtered and flat options list\n */\n filterAndFlat (options, search, label) {\n return flow(\n filterGroups(search, label, this.groupValues, this.groupLabel, this.customLabel),\n flattenOptions(this.groupValues, this.groupLabel)\n )(options)\n },\n /**\n * Flattens and then strips the group labels from the options list\n * @param {Array}\n * @return {Array} returns a flat options list without group labels\n */\n flatAndStrip (options) {\n return flow(\n flattenOptions(this.groupValues, this.groupLabel),\n stripGroups\n )(options)\n },\n /**\n * Updates the search value\n * @param {String}\n */\n updateSearch (query) {\n this.search = query;\n },\n /**\n * Finds out if the given query is already present\n * in the available options\n * @param {String}\n * @return {Boolean} returns true if element is available\n */\n isExistingOption (query) {\n return !this.options\n ? false\n : this.optionKeys.indexOf(query) > -1\n },\n /**\n * Finds out if the given element is already present\n * in the result value\n * @param {Object||String||Integer} option passed element to check\n * @returns {Boolean} returns true if element is selected\n */\n isSelected (option) {\n const opt = this.trackBy\n ? option[this.trackBy]\n : option;\n return this.valueKeys.indexOf(opt) > -1\n },\n /**\n * Finds out if the given option is disabled\n * @param {Object||String||Integer} option passed element to check\n * @returns {Boolean} returns true if element is disabled\n */\n isOptionDisabled (option) {\n return !!option.$isDisabled\n },\n /**\n * Returns empty string when options is null/undefined\n * Returns tag query if option is tag.\n * Returns the customLabel() results and casts it to string.\n *\n * @param {Object||String||Integer} Passed option\n * @returns {Object||String}\n */\n getOptionLabel (option) {\n if (isEmpty(option)) return ''\n /* istanbul ignore else */\n if (option.isTag) return option.label\n /* istanbul ignore else */\n if (option.$isLabel) return option.$groupLabel\n\n const label = this.customLabel(option, this.label);\n /* istanbul ignore else */\n if (isEmpty(label)) return ''\n return label\n },\n /**\n * Add the given option to the list of selected options\n * or sets the option as the selected option.\n * If option is already selected -> remove it from the results.\n *\n * @param {Object||String||Integer} option to select/deselect\n * @param {Boolean} block removing\n */\n select (option, key) {\n /* istanbul ignore else */\n if (option.$isLabel && this.groupSelect) {\n this.selectGroup(option);\n return\n }\n if (this.blockKeys.indexOf(key) !== -1 ||\n this.disabled ||\n option.$isDisabled ||\n option.$isLabel\n ) return\n /* istanbul ignore else */\n if (this.max && this.multiple && this.internalValue.length === this.max) return\n /* istanbul ignore else */\n if (key === 'Tab' && !this.pointerDirty) return\n if (option.isTag) {\n this.$emit('tag', option.label, this.id);\n this.search = '';\n if (this.closeOnSelect && !this.multiple) this.deactivate();\n } else {\n const isSelected = this.isSelected(option);\n\n if (isSelected) {\n if (key !== 'Tab') this.removeElement(option);\n return\n }\n\n if (this.multiple) {\n this.$emit('update:modelValue', this.internalValue.concat([option]));\n } else {\n this.$emit('update:modelValue', option);\n }\n\n this.$emit('select', option, this.id);\n\n /* istanbul ignore else */\n if (this.clearOnSelect) this.search = '';\n }\n /* istanbul ignore else */\n if (this.closeOnSelect) this.deactivate();\n },\n /**\n * Add the given group options to the list of selected options\n * If all group optiona are already selected -> remove it from the results.\n *\n * @param {Object||String||Integer} group to select/deselect\n */\n selectGroup (selectedGroup) {\n const group = this.options.find((option) => {\n return option[this.groupLabel] === selectedGroup.$groupLabel\n });\n\n if (!group) return\n\n if (this.wholeGroupSelected(group)) {\n this.$emit('remove', group[this.groupValues], this.id);\n\n const groupValues = this.trackBy ? group[this.groupValues].map(val => val[this.trackBy]) : group[this.groupValues];\n const newValue = this.internalValue.filter(\n option => groupValues.indexOf(this.trackBy ? option[this.trackBy] : option) === -1\n );\n\n this.$emit('update:modelValue', newValue);\n } else {\n let optionsToAdd = group[this.groupValues].filter(\n option => !(this.isOptionDisabled(option) || this.isSelected(option))\n );\n\n // if max is defined then just select options respecting max\n if (this.max) {\n optionsToAdd.splice(this.max - this.internalValue.length);\n }\n\n this.$emit('select', optionsToAdd, this.id);\n this.$emit(\n 'update:modelValue',\n this.internalValue.concat(optionsToAdd)\n );\n }\n\n if (this.closeOnSelect) this.deactivate();\n },\n /**\n * Helper to identify if all values in a group are selected\n *\n * @param {Object} group to validated selected values against\n */\n wholeGroupSelected (group) {\n return group[this.groupValues].every((option) => this.isSelected(option) || this.isOptionDisabled(option)\n )\n },\n /**\n * Helper to identify if all values in a group are disabled\n *\n * @param {Object} group to check for disabled values\n */\n wholeGroupDisabled (group) {\n return group[this.groupValues].every(this.isOptionDisabled)\n },\n /**\n * Removes the given option from the selected options.\n * Additionally checks this.allowEmpty prop if option can be removed when\n * it is the last selected option.\n *\n * @param {type} option description\n * @return {type} description\n */\n removeElement (option, shouldClose = true) {\n /* istanbul ignore else */\n if (this.disabled) return\n /* istanbul ignore else */\n if (option.$isDisabled) return\n /* istanbul ignore else */\n if (!this.allowEmpty && this.internalValue.length <= 1) {\n this.deactivate();\n return\n }\n\n const index = typeof option === 'object'\n ? this.valueKeys.indexOf(option[this.trackBy])\n : this.valueKeys.indexOf(option);\n\n if (this.multiple) {\n const newValue = this.internalValue.slice(0, index).concat(this.internalValue.slice(index + 1));\n this.$emit('update:modelValue', newValue);\n } else {\n this.$emit('update:modelValue', null);\n }\n this.$emit('remove', option, this.id);\n\n /* istanbul ignore else */\n if (this.closeOnSelect && shouldClose) this.deactivate();\n },\n /**\n * Calls this.removeElement() with the last element\n * from this.internalValue (selected element Array)\n *\n * @fires this#removeElement\n */\n removeLastElement () {\n /* istanbul ignore else */\n if (this.blockKeys.indexOf('Delete') !== -1) return\n /* istanbul ignore else */\n if (this.search.length === 0 && Array.isArray(this.internalValue) && this.internalValue.length) {\n this.removeElement(this.internalValue[this.internalValue.length - 1], false);\n }\n },\n /**\n * Opens the multiselect’s dropdown.\n * Sets this.isOpen to TRUE\n */\n activate () {\n /* istanbul ignore else */\n if (this.isOpen || this.disabled) return\n\n this.adjustPosition();\n /* istanbul ignore else */\n if (this.groupValues && this.pointer === 0 && this.filteredOptions.length) {\n this.pointer = 1;\n }\n\n this.isOpen = true;\n /* istanbul ignore else */\n if (this.searchable) {\n if (!this.preserveSearch) this.search = '';\n if (!this.preventAutofocus) this.$nextTick(() => this.$refs.search && this.$refs.search.focus());\n } else if (!this.preventAutofocus) {\n if (typeof this.$el !== 'undefined') this.$el.focus();\n }\n this.$emit('open', this.id);\n },\n /**\n * Closes the multiselect’s dropdown.\n * Sets this.isOpen to FALSE\n */\n deactivate () {\n /* istanbul ignore else */\n if (!this.isOpen) return\n\n this.isOpen = false;\n /* istanbul ignore else */\n if (this.searchable) {\n if (this.$refs.search !== null && typeof this.$refs.search !== 'undefined') this.$refs.search.blur();\n } else {\n if (typeof this.$el !== 'undefined') this.$el.blur();\n }\n if (!this.preserveSearch) this.search = '';\n this.$emit('close', this.getValue(), this.id);\n },\n /**\n * Call this.activate() or this.deactivate()\n * depending on this.isOpen value.\n *\n * @fires this#activate || this#deactivate\n * @property {Boolean} isOpen indicates if dropdown is open\n */\n toggle () {\n this.isOpen\n ? this.deactivate()\n : this.activate();\n },\n /**\n * Updates the hasEnoughSpace variable used for\n * detecting where to expand the dropdown\n */\n adjustPosition () {\n if (typeof window === 'undefined') return\n\n const spaceAbove = this.$el.getBoundingClientRect().top;\n const spaceBelow = window.innerHeight - this.$el.getBoundingClientRect().bottom;\n const hasEnoughSpaceBelow = spaceBelow > this.maxHeight;\n\n if (hasEnoughSpaceBelow || spaceBelow > spaceAbove || this.openDirection === 'below' || this.openDirection === 'bottom') {\n this.preferredOpenDirection = 'below';\n this.optimizedHeight = Math.min(spaceBelow - 40, this.maxHeight);\n } else {\n this.preferredOpenDirection = 'above';\n this.optimizedHeight = Math.min(spaceAbove - 40, this.maxHeight);\n }\n }\n }\n};\n\nvar pointerMixin = {\n data () {\n return {\n pointer: 0,\n pointerDirty: false\n }\n },\n props: {\n /**\n * Enable/disable highlighting of the pointed value.\n * @type {Boolean}\n * @default true\n */\n showPointer: {\n type: Boolean,\n default: true\n },\n optionHeight: {\n type: Number,\n default: 40\n }\n },\n computed: {\n pointerPosition () {\n return this.pointer * this.optionHeight\n },\n visibleElements () {\n return this.optimizedHeight / this.optionHeight\n }\n },\n watch: {\n filteredOptions () {\n this.pointerAdjust();\n },\n isOpen () {\n this.pointerDirty = false;\n },\n pointer () {\n this.$refs.search && this.$refs.search.setAttribute('aria-activedescendant', this.id + '-' + this.pointer.toString());\n }\n },\n methods: {\n optionHighlight (index, option) {\n return {\n 'multiselect__option--highlight': index === this.pointer && this.showPointer,\n 'multiselect__option--selected': this.isSelected(option)\n }\n },\n groupHighlight (index, selectedGroup) {\n if (!this.groupSelect) {\n return [\n 'multiselect__option--disabled',\n {'multiselect__option--group': selectedGroup.$isLabel}\n ]\n }\n\n const group = this.options.find((option) => {\n return option[this.groupLabel] === selectedGroup.$groupLabel\n });\n\n return group && !this.wholeGroupDisabled(group) ? [\n 'multiselect__option--group',\n {'multiselect__option--highlight': index === this.pointer && this.showPointer},\n {'multiselect__option--group-selected': this.wholeGroupSelected(group)}\n ] : 'multiselect__option--disabled'\n },\n addPointerElement ({key} = 'Enter') {\n /* istanbul ignore else */\n if (this.filteredOptions.length > 0) {\n this.select(this.filteredOptions[this.pointer], key);\n }\n this.pointerReset();\n },\n pointerForward () {\n /* istanbul ignore else */\n if (this.pointer < this.filteredOptions.length - 1) {\n this.pointer++;\n /* istanbul ignore next */\n if (this.$refs.list.scrollTop <= this.pointerPosition - (this.visibleElements - 1) * this.optionHeight) {\n this.$refs.list.scrollTop = this.pointerPosition - (this.visibleElements - 1) * this.optionHeight;\n }\n /* istanbul ignore else */\n if (\n this.filteredOptions[this.pointer] &&\n this.filteredOptions[this.pointer].$isLabel &&\n !this.groupSelect\n ) this.pointerForward();\n }\n this.pointerDirty = true;\n },\n pointerBackward () {\n if (this.pointer > 0) {\n this.pointer--;\n /* istanbul ignore else */\n if (this.$refs.list.scrollTop >= this.pointerPosition) {\n this.$refs.list.scrollTop = this.pointerPosition;\n }\n /* istanbul ignore else */\n if (\n this.filteredOptions[this.pointer] &&\n this.filteredOptions[this.pointer].$isLabel &&\n !this.groupSelect\n ) this.pointerBackward();\n } else {\n /* istanbul ignore else */\n if (\n this.filteredOptions[this.pointer] &&\n this.filteredOptions[0].$isLabel &&\n !this.groupSelect\n ) this.pointerForward();\n }\n this.pointerDirty = true;\n },\n pointerReset () {\n /* istanbul ignore else */\n if (!this.closeOnSelect) return\n this.pointer = 0;\n /* istanbul ignore else */\n if (this.$refs.list) {\n this.$refs.list.scrollTop = 0;\n }\n },\n pointerAdjust () {\n /* istanbul ignore else */\n if (this.pointer >= this.filteredOptions.length - 1) {\n this.pointer = this.filteredOptions.length\n ? this.filteredOptions.length - 1\n : 0;\n }\n\n if (this.filteredOptions.length > 0 &&\n this.filteredOptions[this.pointer].$isLabel &&\n !this.groupSelect\n ) {\n this.pointerForward();\n }\n },\n pointerSet (index) {\n this.pointer = index;\n this.pointerDirty = true;\n }\n }\n};\n\nvar script = {\n name: 'vue-multiselect',\n mixins: [multiselectMixin, pointerMixin],\n compatConfig: {\n MODE: 3,\n ATTR_ENUMERATED_COERCION: false\n },\n props: {\n /**\n * name attribute to match optional label element\n * @default ''\n * @type {String}\n */\n name: {\n type: String,\n default: ''\n },\n /**\n * Presets the selected options value.\n * @type {Object||Array||String||Integer}\n */\n modelValue: {\n type: null,\n default () {\n return []\n }\n },\n /**\n * String to show when pointing to an option\n * @default 'Press enter to select'\n * @type {String}\n */\n selectLabel: {\n type: String,\n default: 'Press enter to select'\n },\n /**\n * String to show when pointing to an option\n * @default 'Press enter to select'\n * @type {String}\n */\n selectGroupLabel: {\n type: String,\n default: 'Press enter to select group'\n },\n /**\n * String to show next to selected option\n * @default 'Selected'\n * @type {String}\n */\n selectedLabel: {\n type: String,\n default: 'Selected'\n },\n /**\n * String to show when pointing to an already selected option\n * @default 'Press enter to remove'\n * @type {String}\n */\n deselectLabel: {\n type: String,\n default: 'Press enter to remove'\n },\n /**\n * String to show when pointing to an already selected option\n * @default 'Press enter to remove'\n * @type {String}\n */\n deselectGroupLabel: {\n type: String,\n default: 'Press enter to deselect group'\n },\n /**\n * Decide whether to show pointer labels\n * @default true\n * @type {Boolean}\n */\n showLabels: {\n type: Boolean,\n default: true\n },\n /**\n * Limit the display of selected options. The rest will be hidden within the limitText string.\n * @default 99999\n * @type {Integer}\n */\n limit: {\n type: Number,\n default: 99999\n },\n /**\n * Sets maxHeight style value of the dropdown\n * @default 300\n * @type {Integer}\n */\n maxHeight: {\n type: Number,\n default: 300\n },\n /**\n * Function that process the message shown when selected\n * elements pass the defined limit.\n * @default 'and * more'\n * @param {Int} count Number of elements more than limit\n * @type {Function}\n */\n limitText: {\n type: Function,\n default: (count) => `and ${count} more`\n },\n /**\n * Set true to trigger the loading spinner.\n * @default False\n * @type {Boolean}\n */\n loading: {\n type: Boolean,\n default: false\n },\n /**\n * Disables the multiselect if true.\n * @default false\n * @type {Boolean}\n */\n disabled: {\n type: Boolean,\n default: false\n },\n /**\n * Enables search input's spellcheck if true.\n * @default false\n * @type {Boolean}\n */\n spellcheck: {\n type: Boolean,\n default: false\n },\n /**\n * Fixed opening direction\n * @default ''\n * @type {String}\n */\n openDirection: {\n type: String,\n default: ''\n },\n /**\n * Shows slot with message about empty options\n * @default true\n * @type {Boolean}\n */\n showNoOptions: {\n type: Boolean,\n default: true\n },\n showNoResults: {\n type: Boolean,\n default: true\n },\n tabindex: {\n type: Number,\n default: 0\n },\n required: {\n type: Boolean,\n default: false\n }\n },\n computed: {\n hasOptionGroup () {\n return this.groupValues && this.groupLabel && this.groupSelect\n },\n isSingleLabelVisible () {\n return (\n (this.singleValue || this.singleValue === 0) &&\n (!this.isOpen || !this.searchable) &&\n !this.visibleValues.length\n )\n },\n isPlaceholderVisible () {\n return !this.internalValue.length && (!this.searchable || !this.isOpen)\n },\n visibleValues () {\n return this.multiple ? this.internalValue.slice(0, this.limit) : []\n },\n singleValue () {\n return this.internalValue[0]\n },\n deselectLabelText () {\n return this.showLabels ? this.deselectLabel : ''\n },\n deselectGroupLabelText () {\n return this.showLabels ? this.deselectGroupLabel : ''\n },\n selectLabelText () {\n return this.showLabels ? this.selectLabel : ''\n },\n selectGroupLabelText () {\n return this.showLabels ? this.selectGroupLabel : ''\n },\n selectedLabelText () {\n return this.showLabels ? this.selectedLabel : ''\n },\n inputStyle () {\n if (\n this.searchable ||\n (this.multiple && this.modelValue && this.modelValue.length)\n ) {\n // Hide input by setting the width to 0 allowing it to receive focus\n return this.isOpen\n ? {width: '100%'}\n : {width: '0', position: 'absolute', padding: '0'}\n }\n return ''\n },\n contentStyle () {\n return this.options.length\n ? {display: 'inline-block'}\n : {display: 'block'}\n },\n isAbove () {\n if (this.openDirection === 'above' || this.openDirection === 'top') {\n return true\n } else if (\n this.openDirection === 'below' ||\n this.openDirection === 'bottom'\n ) {\n return false\n } else {\n return this.preferredOpenDirection === 'above'\n }\n },\n showSearchInput () {\n return (\n this.searchable &&\n (this.hasSingleSelectedSlot &&\n (this.visibleSingleValue || this.visibleSingleValue === 0)\n ? this.isOpen\n : true)\n )\n }\n }\n};\n\nconst _hoisted_1 = {\n ref: \"tags\",\n class: \"multiselect__tags\"\n};\nconst _hoisted_2 = { class: \"multiselect__tags-wrap\" };\nconst _hoisted_3 = { class: \"multiselect__spinner\" };\nconst _hoisted_4 = { key: 0 };\nconst _hoisted_5 = { class: \"multiselect__option\" };\nconst _hoisted_6 = { class: \"multiselect__option\" };\nconst _hoisted_7 = /*#__PURE__*/createTextVNode(\"No elements found. Consider changing the search query.\");\nconst _hoisted_8 = { class: \"multiselect__option\" };\nconst _hoisted_9 = /*#__PURE__*/createTextVNode(\"List is empty.\");\n\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return (openBlock(), createBlock(\"div\", {\n tabindex: _ctx.searchable ? -1 : $props.tabindex,\n class: [{ 'multiselect--active': _ctx.isOpen, 'multiselect--disabled': $props.disabled, 'multiselect--above': $options.isAbove, 'multiselect--has-options-group': $options.hasOptionGroup }, \"multiselect\"],\n onFocus: _cache[14] || (_cache[14] = $event => (_ctx.activate())),\n onBlur: _cache[15] || (_cache[15] = $event => (_ctx.searchable ? false : _ctx.deactivate())),\n onKeydown: [\n _cache[16] || (_cache[16] = withKeys(withModifiers($event => (_ctx.pointerForward()), [\"self\",\"prevent\"]), [\"down\"])),\n _cache[17] || (_cache[17] = withKeys(withModifiers($event => (_ctx.pointerBackward()), [\"self\",\"prevent\"]), [\"up\"]))\n ],\n onKeypress: _cache[18] || (_cache[18] = withKeys(withModifiers($event => (_ctx.addPointerElement($event)), [\"stop\",\"self\"]), [\"enter\",\"tab\"])),\n onKeyup: _cache[19] || (_cache[19] = withKeys($event => (_ctx.deactivate()), [\"esc\"])),\n role: \"combobox\",\n \"aria-owns\": 'listbox-'+_ctx.id\n }, [\n renderSlot(_ctx.$slots, \"caret\", { toggle: _ctx.toggle }, () => [\n createVNode(\"div\", {\n onMousedown: _cache[1] || (_cache[1] = withModifiers($event => (_ctx.toggle()), [\"prevent\",\"stop\"])),\n class: \"multiselect__select\"\n }, null, 32 /* HYDRATE_EVENTS */)\n ]),\n renderSlot(_ctx.$slots, \"clear\", { search: _ctx.search }),\n createVNode(\"div\", _hoisted_1, [\n renderSlot(_ctx.$slots, \"selection\", {\n search: _ctx.search,\n remove: _ctx.removeElement,\n values: $options.visibleValues,\n isOpen: _ctx.isOpen\n }, () => [\n withDirectives(createVNode(\"div\", _hoisted_2, [\n (openBlock(true), createBlock(Fragment, null, renderList($options.visibleValues, (option, index) => {\n return renderSlot(_ctx.$slots, \"tag\", {\n option: option,\n search: _ctx.search,\n remove: _ctx.removeElement\n }, () => [\n (openBlock(), createBlock(\"span\", {\n class: \"multiselect__tag\",\n key: index\n }, [\n createVNode(\"span\", {\n textContent: toDisplayString(_ctx.getOptionLabel(option))\n }, null, 8 /* PROPS */, [\"textContent\"]),\n createVNode(\"i\", {\n tabindex: \"1\",\n onKeypress: withKeys(withModifiers($event => (_ctx.removeElement(option)), [\"prevent\"]), [\"enter\"]),\n onMousedown: withModifiers($event => (_ctx.removeElement(option)), [\"prevent\"]),\n class: \"multiselect__tag-icon\"\n }, null, 40 /* PROPS, HYDRATE_EVENTS */, [\"onKeypress\", \"onMousedown\"])\n ]))\n ])\n }), 256 /* UNKEYED_FRAGMENT */))\n ], 512 /* NEED_PATCH */), [\n [vShow, $options.visibleValues.length > 0]\n ]),\n (_ctx.internalValue && _ctx.internalValue.length > $props.limit)\n ? renderSlot(_ctx.$slots, \"limit\", { key: 0 }, () => [\n createVNode(\"strong\", {\n class: \"multiselect__strong\",\n textContent: toDisplayString($props.limitText(_ctx.internalValue.length - $props.limit))\n }, null, 8 /* PROPS */, [\"textContent\"])\n ])\n : createCommentVNode(\"v-if\", true)\n ]),\n createVNode(Transition, { name: \"multiselect__loading\" }, {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"loading\", {}, () => [\n withDirectives(createVNode(\"div\", _hoisted_3, null, 512 /* NEED_PATCH */), [\n [vShow, $props.loading]\n ])\n ])\n ]),\n _: 3 /* FORWARDED */\n }),\n (_ctx.searchable)\n ? (openBlock(), createBlock(\"input\", {\n key: 0,\n ref: \"search\",\n name: $props.name,\n id: _ctx.id,\n type: \"text\",\n autocomplete: \"off\",\n spellcheck: $props.spellcheck,\n placeholder: _ctx.placeholder,\n required: $props.required,\n style: $options.inputStyle,\n value: _ctx.search,\n disabled: $props.disabled,\n tabindex: $props.tabindex,\n onInput: _cache[2] || (_cache[2] = $event => (_ctx.updateSearch($event.target.value))),\n onFocus: _cache[3] || (_cache[3] = withModifiers($event => (_ctx.activate()), [\"prevent\"])),\n onBlur: _cache[4] || (_cache[4] = withModifiers($event => (_ctx.deactivate()), [\"prevent\"])),\n onKeyup: _cache[5] || (_cache[5] = withKeys($event => (_ctx.deactivate()), [\"esc\"])),\n onKeydown: [\n _cache[6] || (_cache[6] = withKeys(withModifiers($event => (_ctx.pointerForward()), [\"prevent\"]), [\"down\"])),\n _cache[7] || (_cache[7] = withKeys(withModifiers($event => (_ctx.pointerBackward()), [\"prevent\"]), [\"up\"])),\n _cache[9] || (_cache[9] = withKeys(withModifiers($event => (_ctx.removeLastElement()), [\"stop\"]), [\"delete\"]))\n ],\n onKeypress: _cache[8] || (_cache[8] = withKeys(withModifiers($event => (_ctx.addPointerElement($event)), [\"prevent\",\"stop\",\"self\"]), [\"enter\"])),\n class: \"multiselect__input\",\n \"aria-controls\": 'listbox-'+_ctx.id\n }, null, 44 /* STYLE, PROPS, HYDRATE_EVENTS */, [\"name\", \"id\", \"spellcheck\", \"placeholder\", \"required\", \"value\", \"disabled\", \"tabindex\", \"aria-controls\"]))\n : createCommentVNode(\"v-if\", true),\n ($options.isSingleLabelVisible)\n ? (openBlock(), createBlock(\"span\", {\n key: 1,\n class: \"multiselect__single\",\n onMousedown: _cache[10] || (_cache[10] = withModifiers((...args) => (_ctx.toggle && _ctx.toggle(...args)), [\"prevent\"]))\n }, [\n renderSlot(_ctx.$slots, \"singleLabel\", { option: $options.singleValue }, () => [\n createTextVNode(toDisplayString(_ctx.currentOptionLabel), 1 /* TEXT */)\n ])\n ], 32 /* HYDRATE_EVENTS */))\n : createCommentVNode(\"v-if\", true),\n ($options.isPlaceholderVisible)\n ? (openBlock(), createBlock(\"span\", {\n key: 2,\n class: \"multiselect__placeholder\",\n onMousedown: _cache[11] || (_cache[11] = withModifiers((...args) => (_ctx.toggle && _ctx.toggle(...args)), [\"prevent\"]))\n }, [\n renderSlot(_ctx.$slots, \"placeholder\", {}, () => [\n createTextVNode(toDisplayString(_ctx.placeholder), 1 /* TEXT */)\n ])\n ], 32 /* HYDRATE_EVENTS */))\n : createCommentVNode(\"v-if\", true)\n ], 512 /* NEED_PATCH */),\n createVNode(Transition, { name: \"multiselect\" }, {\n default: withCtx(() => [\n withDirectives(createVNode(\"div\", {\n class: \"multiselect__content-wrapper\",\n onFocus: _cache[12] || (_cache[12] = (...args) => (_ctx.activate && _ctx.activate(...args))),\n tabindex: \"-1\",\n onMousedown: _cache[13] || (_cache[13] = withModifiers(() => {}, [\"prevent\"])),\n style: { maxHeight: _ctx.optimizedHeight + 'px' },\n ref: \"list\"\n }, [\n createVNode(\"ul\", {\n class: \"multiselect__content\",\n style: $options.contentStyle,\n role: \"listbox\",\n id: 'listbox-'+_ctx.id,\n \"aria-multiselectable\": _ctx.multiple\n }, [\n renderSlot(_ctx.$slots, \"beforeList\"),\n (_ctx.multiple && _ctx.max === _ctx.internalValue.length)\n ? (openBlock(), createBlock(\"li\", _hoisted_4, [\n createVNode(\"span\", _hoisted_5, [\n renderSlot(_ctx.$slots, \"maxElements\", {}, () => [\n createTextVNode(\"Maximum of \" + toDisplayString(_ctx.max) + \" options selected. First remove a selected option to select another.\", 1 /* TEXT */)\n ])\n ])\n ]))\n : createCommentVNode(\"v-if\", true),\n (!_ctx.max || _ctx.internalValue.length < _ctx.max)\n ? (openBlock(true), createBlock(Fragment, { key: 1 }, renderList(_ctx.filteredOptions, (option, index) => {\n return (openBlock(), createBlock(\"li\", {\n class: \"multiselect__element\",\n key: index,\n \"aria-selected\": _ctx.isSelected(option),\n id: _ctx.id + '-' + index,\n role: !(option && (option.$isLabel || option.$isDisabled)) ? 'option' : null\n }, [\n (!(option && (option.$isLabel || option.$isDisabled)))\n ? (openBlock(), createBlock(\"span\", {\n key: 0,\n class: [_ctx.optionHighlight(index, option), \"multiselect__option\"],\n onClick: withModifiers($event => (_ctx.select(option)), [\"stop\"]),\n onMouseenter: withModifiers($event => (_ctx.pointerSet(index)), [\"self\"]),\n \"data-select\": option && option.isTag ? _ctx.tagPlaceholder : $options.selectLabelText,\n \"data-selected\": $options.selectedLabelText,\n \"data-deselect\": $options.deselectLabelText\n }, [\n renderSlot(_ctx.$slots, \"option\", {\n option: option,\n search: _ctx.search,\n index: index\n }, () => [\n createVNode(\"span\", null, toDisplayString(_ctx.getOptionLabel(option)), 1 /* TEXT */)\n ])\n ], 42 /* CLASS, PROPS, HYDRATE_EVENTS */, [\"onClick\", \"onMouseenter\", \"data-select\", \"data-selected\", \"data-deselect\"]))\n : createCommentVNode(\"v-if\", true),\n (option && (option.$isLabel || option.$isDisabled))\n ? (openBlock(), createBlock(\"span\", {\n key: 1,\n \"data-select\": _ctx.groupSelect && $options.selectGroupLabelText,\n \"data-deselect\": _ctx.groupSelect && $options.deselectGroupLabelText,\n class: [_ctx.groupHighlight(index, option), \"multiselect__option\"],\n onMouseenter: withModifiers($event => (_ctx.groupSelect && _ctx.pointerSet(index)), [\"self\"]),\n onMousedown: withModifiers($event => (_ctx.selectGroup(option)), [\"prevent\"])\n }, [\n renderSlot(_ctx.$slots, \"option\", {\n option: option,\n search: _ctx.search,\n index: index\n }, () => [\n createVNode(\"span\", null, toDisplayString(_ctx.getOptionLabel(option)), 1 /* TEXT */)\n ])\n ], 42 /* CLASS, PROPS, HYDRATE_EVENTS */, [\"data-select\", \"data-deselect\", \"onMouseenter\", \"onMousedown\"]))\n : createCommentVNode(\"v-if\", true)\n ], 8 /* PROPS */, [\"aria-selected\", \"id\", \"role\"]))\n }), 128 /* KEYED_FRAGMENT */))\n : createCommentVNode(\"v-if\", true),\n withDirectives(createVNode(\"li\", null, [\n createVNode(\"span\", _hoisted_6, [\n renderSlot(_ctx.$slots, \"noResult\", { search: _ctx.search }, () => [\n _hoisted_7\n ])\n ])\n ], 512 /* NEED_PATCH */), [\n [vShow, $props.showNoResults && (_ctx.filteredOptions.length === 0 && _ctx.search && !$props.loading)]\n ]),\n withDirectives(createVNode(\"li\", null, [\n createVNode(\"span\", _hoisted_8, [\n renderSlot(_ctx.$slots, \"noOptions\", {}, () => [\n _hoisted_9\n ])\n ])\n ], 512 /* NEED_PATCH */), [\n [vShow, $props.showNoOptions && ((_ctx.options.length === 0 || ($options.hasOptionGroup === true && _ctx.filteredOptions.length === 0)) && !_ctx.search && !$props.loading)]\n ]),\n renderSlot(_ctx.$slots, \"afterList\")\n ], 12 /* STYLE, PROPS */, [\"id\", \"aria-multiselectable\"])\n ], 36 /* STYLE, HYDRATE_EVENTS */), [\n [vShow, _ctx.isOpen]\n ])\n ]),\n _: 3 /* FORWARDED */\n })\n ], 42 /* CLASS, PROPS, HYDRATE_EVENTS */, [\"tabindex\", \"aria-owns\"]))\n}\n\nscript.render = render;\n\nexport default script;\nexport { script as Multiselect, multiselectMixin, pointerMixin };\n","<script>\nexport default {\n props: {\n modelValue: { type: Boolean, default: false },\n size: { type: String, default: '' },\n },\n emits: ['update:modelValue', 'input'],\n methods: {\n onClick() {\n this.$emit('update:modelValue', !this.modelValue);\n this.$emit('input', !this.modelValue);\n },\n },\n};\n</script>\n\n<template>\n <button\n type=\"button\"\n class=\"toggle-button p-0\"\n :class=\"{ active: modelValue, small: size === 'small' }\"\n role=\"switch\"\n :aria-checked=\"modelValue.toString()\"\n @click=\"onClick\"\n >\n <span aria-hidden=\"true\" :class=\"{ active: modelValue }\" />\n </button>\n</template>\n\n<style lang=\"scss\" scoped>\n.toggle-button {\n @apply bg-slate-200 dark:bg-slate-600;\n --toggle-button-box-shadow: rgb(255, 255, 255) 0px 0px 0px 0px,\n rgba(59, 130, 246, 0.5) 0px 0px 0px 0px, rgba(0, 0, 0, 0.1) 0px 1px 3px 0px,\n rgba(0, 0, 0, 0.06) 0px 1px 2px 0px;\n border-radius: var(--border-radius-large);\n border: 2px solid transparent;\n cursor: pointer;\n display: flex;\n flex-shrink: 0;\n height: 1.188rem;\n position: relative;\n transition-duration: 200ms;\n transition-property: background-color;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n width: 2.125rem;\n\n &.active {\n background-color: var(--w-500);\n }\n\n &.small {\n width: 1.375rem;\n height: 0.875rem;\n\n span {\n height: var(--space-one);\n width: var(--space-one);\n\n &.active {\n transform: translate(var(--space-small), var(--space-zero));\n }\n }\n }\n\n span {\n @apply bg-white dark:bg-slate-900;\n --space-one-point-five: 0.9375rem;\n border-radius: 100%;\n box-shadow: var(--toggle-button-box-shadow);\n display: inline-block;\n height: var(--space-one-point-five);\n transform: translate(0, 0);\n transition-duration: 200ms;\n transition-property: transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n width: var(--space-one-point-five);\n\n &.active {\n transform: translate(var(--space-one-point-five), var(--space-zero));\n }\n }\n}\n</style>\n","<script>\n/* eslint no-console: 0 */\nimport globalConfigMixin from 'shared/mixins/globalConfigMixin';\n\nexport default {\n mixins: [globalConfigMixin],\n props: {\n items: {\n type: Array,\n default: () => [],\n },\n },\n computed: {\n classObject() {\n return 'w-full';\n },\n activeIndex() {\n return this.items.findIndex(i => i.route === this.$route.name);\n },\n },\n methods: {\n isActive(item) {\n return this.items.indexOf(item) === this.activeIndex;\n },\n isOver(item) {\n return this.items.indexOf(item) < this.activeIndex;\n },\n },\n};\n</script>\n\n<template>\n <transition-group\n name=\"wizard-items\"\n tag=\"div\"\n class=\"wizard-box\"\n :class=\"classObject\"\n >\n <div\n v-for=\"item in items\"\n :key=\"item.route\"\n class=\"item\"\n :class=\"{ active: isActive(item), over: isOver(item) }\"\n >\n <div class=\"flex items-center\">\n <h3\n class=\"text-slate-800 dark:text-slate-100 text-base font-medium pl-6 overflow-hidden whitespace-nowrap mb-1.5 text-ellipsis leading-tight\"\n >\n {{ item.title }}\n </h3>\n <span\n v-if=\"isOver(item)\"\n class=\"ml-1 text-green-500 dark:text-green-500\"\n >\n <fluent-icon icon=\"checkmark\" />\n </span>\n </div>\n <span class=\"step\">\n {{ items.indexOf(item) + 1 }}\n </span>\n <p class=\"pl-6 m-0 text-sm text-slate-600 dark:text-slate-300\">\n {{ item.body }}\n </p>\n </div>\n </transition-group>\n</template>\n\n<style lang=\"scss\" scoped>\n.wizard-box {\n .item {\n @apply cursor-pointer after:bg-slate-75 before:bg-slate-75 dark:after:bg-slate-600 dark:before:bg-slate-600 py-4 ltr:pr-4 rtl:pl-4 ltr:pl-6 rtl:pr-6 relative before:h-4 before:top-0 last:before:h-0 first:before:h-0 last:after:h-0 before:content-[''] before:absolute before:w-0.5 after:content-[''] after:h-full after:absolute after:top-5 after:w-0.5 rtl:after:left-6 rtl:before:left-6;\n\n &.active {\n h3 {\n @apply text-n-blue-text dark:text-n-blue-text;\n }\n\n .step {\n @apply bg-n-brand dark:bg-n-brand;\n }\n }\n\n &.over {\n &::after {\n @apply bg-n-brand dark:bg-n-brand;\n }\n\n .step {\n @apply bg-n-brand dark:bg-n-brand;\n }\n\n & + .item {\n &::before {\n @apply bg-n-brand dark:bg-n-brand;\n }\n }\n }\n\n .step {\n @apply bg-slate-75 dark:bg-slate-600 rounded-2xl font-medium w-4 left-4 leading-4 z-10 absolute text-center text-white dark:text-white text-xxs top-5;\n }\n }\n}\n</style>\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n start: 'end',\n end: 'start'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n const lr = ['left', 'right'];\n const rl = ['right', 'left'];\n const tb = ['top', 'bottom'];\n const bt = ['bottom', 'top'];\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rl : lr;\n return isStart ? lr : rl;\n case 'left':\n case 'right':\n return isStart ? tb : bt;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n const {\n x,\n y,\n width,\n height\n } = rect;\n return {\n width,\n height,\n top: y,\n left: x,\n right: x + width,\n bottom: y + height,\n x,\n y\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const sideAxis = getSideAxis(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const alignLength = getAxisLength(alignmentAxis);\n const side = getSide(placement);\n const isVertical = sideAxis === 'y';\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const validMiddleware = middleware.filter(Boolean);\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let middlewareData = {};\n let resetCount = 0;\n for (let i = 0; i < validMiddleware.length; i++) {\n const {\n name,\n fn\n } = validMiddleware[i];\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData = {\n ...middlewareData,\n [name]: {\n ...middlewareData[name],\n ...data\n }\n };\n if (reset && resetCount <= 50) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = evaluate(options, state);\n const paddingObject = getPaddingObject(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n x,\n y,\n width: rects.floating.width,\n height: rects.floating.height\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n elements,\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements,\n middlewareData\n } = state;\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = evaluate(options, state) || {};\n if (element == null) {\n return {};\n }\n const paddingObject = getPaddingObject(padding);\n const coords = {\n x,\n y\n };\n const axis = getAlignmentAxis(placement);\n const length = getAxisLength(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // If the padding is large enough that it causes the arrow to no longer be\n // centered, modify the padding so that it is centered.\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min$1 = minPadding;\n const max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(min$1, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. To ensure `shift()` continues to take action,\n // a single reset is performed when this is true.\n const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && {\n alignmentOffset\n })\n },\n reset: shouldAddOffset\n };\n }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = placements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements$1[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements$1[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements$1[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$arrow, _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n\n // If a reset by the arrow was caused due to an alignment offset being\n // added, we should skip any logic now since `flip()` has already done its\n // work.\n // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n const side = getSide(placement);\n const initialSideAxis = getSideAxis(initialPlacement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const sides = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[sides[0]], overflow[sides[1]]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$filter2;\n const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n if (hasFallbackAxisSideDirection) {\n const currentSideAxis = getSideAxis(d.placement);\n return currentSideAxis === initialSideAxis ||\n // Create a bias to the `y` side axis due to horizontal\n // reading directions favoring greater width.\n currentSideAxis === 'y';\n }\n return true;\n }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n rects\n } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = evaluate(options, state);\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getPaddingObject(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getSideAxis(placement) === 'y') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getSideAxis(placement) === 'y';\n const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = evaluate(options, state);\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: 0,\n crossAxis: 0,\n alignmentAxis: null,\n ...rawValue\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n if (options === void 0) {\n options = 0;\n }\n return {\n name: 'offset',\n options,\n async fn(state) {\n var _middlewareData$offse, _middlewareData$arrow;\n const {\n x,\n y,\n placement,\n middlewareData\n } = state;\n const diffCoords = await convertValueToCoords(state, options);\n\n // If the placement is the same and the arrow caused an alignment offset\n // then we don't need to change the positioning coordinates.\n if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: {\n ...diffCoords,\n placement\n }\n };\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const crossAxis = getSideAxis(getSide(placement));\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = clamp(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = clamp(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const crossAxis = getSideAxis(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = evaluate(offset, state);\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = ['top', 'left'].includes(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = evaluate(options, state);\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isYAxis = getSideAxis(placement) === 'y';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n const maximumClippingWidth = width - overflow.left - overflow.right;\n const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n const noShift = !state.middlewareData.shift;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if (isYAxis) {\n availableWidth = alignment || noShift ? min(overflowAvailableWidth, maximumClippingWidth) : maximumClippingWidth;\n } else {\n availableHeight = alignment || noShift ? min(overflowAvailableHeight, maximumClippingHeight) : maximumClippingHeight;\n }\n if (noShift && !alignment) {\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n if (isYAxis) {\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n } else {\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","import{rectToClientRect as t,computePosition as e}from\"@floating-ui/core\";export{arrow,autoPlacement,detectOverflow,flip,hide,inline,limitShift,offset,shift,size}from\"@floating-ui/core\";function n(t){var e;return(null==(e=t.ownerDocument)?void 0:e.defaultView)||window}function o(t){return n(t).getComputedStyle(t)}const i=Math.min,r=Math.max,l=Math.round;function c(t){const e=o(t);let n=parseFloat(e.width),i=parseFloat(e.height);const r=t.offsetWidth,c=t.offsetHeight,s=l(n)!==r||l(i)!==c;return s&&(n=r,i=c),{width:n,height:i,fallback:s}}function s(t){return h(t)?(t.nodeName||\"\").toLowerCase():\"\"}let f;function u(){if(f)return f;const t=navigator.userAgentData;return t&&Array.isArray(t.brands)?(f=t.brands.map((t=>t.brand+\"/\"+t.version)).join(\" \"),f):navigator.userAgent}function a(t){return t instanceof n(t).HTMLElement}function d(t){return t instanceof n(t).Element}function h(t){return t instanceof n(t).Node}function p(t){if(\"undefined\"==typeof ShadowRoot)return!1;return t instanceof n(t).ShadowRoot||t instanceof ShadowRoot}function g(t){const{overflow:e,overflowX:n,overflowY:i,display:r}=o(t);return/auto|scroll|overlay|hidden|clip/.test(e+i+n)&&![\"inline\",\"contents\"].includes(r)}function m(t){return[\"table\",\"td\",\"th\"].includes(s(t))}function y(t){const e=/firefox/i.test(u()),n=o(t),i=n.backdropFilter||n.WebkitBackdropFilter;return\"none\"!==n.transform||\"none\"!==n.perspective||!!i&&\"none\"!==i||e&&\"filter\"===n.willChange||e&&!!n.filter&&\"none\"!==n.filter||[\"transform\",\"perspective\"].some((t=>n.willChange.includes(t)))||[\"paint\",\"layout\",\"strict\",\"content\"].some((t=>{const e=n.contain;return null!=e&&e.includes(t)}))}function x(){return!/^((?!chrome|android).)*safari/i.test(u())}function w(t){return[\"html\",\"body\",\"#document\"].includes(s(t))}function v(t){return d(t)?t:t.contextElement}const b={x:1,y:1};function L(t){const e=v(t);if(!a(e))return b;const n=e.getBoundingClientRect(),{width:o,height:i,fallback:r}=c(e);let s=(r?l(n.width):n.width)/o,f=(r?l(n.height):n.height)/i;return s&&Number.isFinite(s)||(s=1),f&&Number.isFinite(f)||(f=1),{x:s,y:f}}function E(t,e,o,i){var r,l;void 0===e&&(e=!1),void 0===o&&(o=!1);const c=t.getBoundingClientRect(),s=v(t);let f=b;e&&(i?d(i)&&(f=L(i)):f=L(t));const u=s?n(s):window,a=!x()&&o;let h=(c.left+(a&&(null==(r=u.visualViewport)?void 0:r.offsetLeft)||0))/f.x,p=(c.top+(a&&(null==(l=u.visualViewport)?void 0:l.offsetTop)||0))/f.y,g=c.width/f.x,m=c.height/f.y;if(s){const t=n(s),e=i&&d(i)?n(i):i;let o=t.frameElement;for(;o&&i&&e!==t;){const t=L(o),e=o.getBoundingClientRect(),i=getComputedStyle(o);e.x+=(o.clientLeft+parseFloat(i.paddingLeft))*t.x,e.y+=(o.clientTop+parseFloat(i.paddingTop))*t.y,h*=t.x,p*=t.y,g*=t.x,m*=t.y,h+=e.x,p+=e.y,o=n(o).frameElement}}return{width:g,height:m,top:p,right:h+g,bottom:p+m,left:h,x:h,y:p}}function R(t){return((h(t)?t.ownerDocument:t.document)||window.document).documentElement}function T(t){return d(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function C(t){return E(R(t)).left+T(t).scrollLeft}function F(t){if(\"html\"===s(t))return t;const e=t.assignedSlot||t.parentNode||p(t)&&t.host||R(t);return p(e)?e.host:e}function W(t){const e=F(t);return w(e)?e.ownerDocument.body:a(e)&&g(e)?e:W(e)}function D(t,e){var o;void 0===e&&(e=[]);const i=W(t),r=i===(null==(o=t.ownerDocument)?void 0:o.body),l=n(i);return r?e.concat(l,l.visualViewport||[],g(i)?i:[]):e.concat(i,D(i))}function S(e,i,l){return\"viewport\"===i?t(function(t,e){const o=n(t),i=R(t),r=o.visualViewport;let l=i.clientWidth,c=i.clientHeight,s=0,f=0;if(r){l=r.width,c=r.height;const t=x();(t||!t&&\"fixed\"===e)&&(s=r.offsetLeft,f=r.offsetTop)}return{width:l,height:c,x:s,y:f}}(e,l)):d(i)?t(function(t,e){const n=E(t,!0,\"fixed\"===e),o=n.top+t.clientTop,i=n.left+t.clientLeft,r=a(t)?L(t):{x:1,y:1};return{width:t.clientWidth*r.x,height:t.clientHeight*r.y,x:i*r.x,y:o*r.y}}(i,l)):t(function(t){const e=R(t),n=T(t),i=t.ownerDocument.body,l=r(e.scrollWidth,e.clientWidth,i.scrollWidth,i.clientWidth),c=r(e.scrollHeight,e.clientHeight,i.scrollHeight,i.clientHeight);let s=-n.scrollLeft+C(t);const f=-n.scrollTop;return\"rtl\"===o(i).direction&&(s+=r(e.clientWidth,i.clientWidth)-l),{width:l,height:c,x:s,y:f}}(R(e)))}function A(t){return a(t)&&\"fixed\"!==o(t).position?t.offsetParent:null}function H(t){const e=n(t);let i=A(t);for(;i&&m(i)&&\"static\"===o(i).position;)i=A(i);return i&&(\"html\"===s(i)||\"body\"===s(i)&&\"static\"===o(i).position&&!y(i))?e:i||function(t){let e=F(t);for(;a(e)&&!w(e);){if(y(e))return e;e=F(e)}return null}(t)||e}function O(t,e,n){const o=a(e),i=R(e),r=E(t,!0,\"fixed\"===n,e);let l={scrollLeft:0,scrollTop:0};const c={x:0,y:0};if(o||!o&&\"fixed\"!==n)if((\"body\"!==s(e)||g(i))&&(l=T(e)),a(e)){const t=E(e,!0);c.x=t.x+e.clientLeft,c.y=t.y+e.clientTop}else i&&(c.x=C(i));return{x:r.left+l.scrollLeft-c.x,y:r.top+l.scrollTop-c.y,width:r.width,height:r.height}}const P={getClippingRect:function(t){let{element:e,boundary:n,rootBoundary:l,strategy:c}=t;const f=\"clippingAncestors\"===n?function(t,e){const n=e.get(t);if(n)return n;let i=D(t).filter((t=>d(t)&&\"body\"!==s(t))),r=null;const l=\"fixed\"===o(t).position;let c=l?F(t):t;for(;d(c)&&!w(c);){const t=o(c),e=y(c);(l?e||r:e||\"static\"!==t.position||!r||![\"absolute\",\"fixed\"].includes(r.position))?r=t:i=i.filter((t=>t!==c)),c=F(c)}return e.set(t,i),i}(e,this._c):[].concat(n),u=[...f,l],a=u[0],h=u.reduce(((t,n)=>{const o=S(e,n,c);return t.top=r(o.top,t.top),t.right=i(o.right,t.right),t.bottom=i(o.bottom,t.bottom),t.left=r(o.left,t.left),t}),S(e,a,c));return{width:h.right-h.left,height:h.bottom-h.top,x:h.left,y:h.top}},convertOffsetParentRelativeRectToViewportRelativeRect:function(t){let{rect:e,offsetParent:n,strategy:o}=t;const i=a(n),r=R(n);if(n===r)return e;let l={scrollLeft:0,scrollTop:0},c={x:1,y:1};const f={x:0,y:0};if((i||!i&&\"fixed\"!==o)&&((\"body\"!==s(n)||g(r))&&(l=T(n)),a(n))){const t=E(n);c=L(n),f.x=t.x+n.clientLeft,f.y=t.y+n.clientTop}return{width:e.width*c.x,height:e.height*c.y,x:e.x*c.x-l.scrollLeft*c.x+f.x,y:e.y*c.y-l.scrollTop*c.y+f.y}},isElement:d,getDimensions:function(t){return a(t)?c(t):t.getBoundingClientRect()},getOffsetParent:H,getDocumentElement:R,getScale:L,async getElementRects(t){let{reference:e,floating:n,strategy:o}=t;const i=this.getOffsetParent||H,r=this.getDimensions;return{reference:O(e,await i(n),o),floating:{x:0,y:0,...await r(n)}}},getClientRects:t=>Array.from(t.getClientRects()),isRTL:t=>\"rtl\"===o(t).direction};function z(t,e,n,o){void 0===o&&(o={});const{ancestorScroll:i=!0,ancestorResize:r=!0,elementResize:l=!0,animationFrame:c=!1}=o,s=i&&!c,f=s||r?[...d(t)?D(t):t.contextElement?D(t.contextElement):[],...D(e)]:[];f.forEach((t=>{s&&t.addEventListener(\"scroll\",n,{passive:!0}),r&&t.addEventListener(\"resize\",n)}));let u,a=null;if(l){let o=!0;a=new ResizeObserver((()=>{o||n(),o=!1})),d(t)&&!c&&a.observe(t),d(t)||!t.contextElement||c||a.observe(t.contextElement),a.observe(e)}let h=c?E(t):null;return c&&function e(){const o=E(t);!h||o.x===h.x&&o.y===h.y&&o.width===h.width&&o.height===h.height||n();h=o,u=requestAnimationFrame(e)}(),n(),()=>{var t;f.forEach((t=>{s&&t.removeEventListener(\"scroll\",n),r&&t.removeEventListener(\"resize\",n)})),null==(t=a)||t.disconnect(),a=null,c&&cancelAnimationFrame(u)}}const B=(t,n,o)=>{const i=new Map,r={platform:P,...o},l={...r.platform,_c:i};return e(t,n,{...r,platform:l})};export{z as autoUpdate,B as computePosition,D as getOverflowAncestors,P as platform};\n","import { defineComponent as O, openBlock as f, createElementBlock as T, normalizeClass as J, renderSlot as A, normalizeProps as ke, guardReactiveProps as Le, pushScopeId as De, popScopeId as Ie, nextTick as Fe, createBlock as M, withScopeId as Re, resolveComponent as P, normalizeStyle as W, withKeys as je, createElementVNode as w, Fragment as Ve, createCommentVNode as se, mergeProps as $e, withCtx as N, createVNode as ve, toDisplayString as We, ref as U, createApp as Ge, h as qe } from \"vue\";\nimport { offset as xe, autoPlacement as Ue, shift as Ye, flip as Xe, arrow as Ke, size as Je, computePosition as Qe, getOverflowAncestors as ne } from \"@floating-ui/dom\";\nfunction ye(e, t) {\n for (const o in t)\n Object.prototype.hasOwnProperty.call(t, o) && (typeof t[o] == \"object\" && e[o] ? ye(e[o], t[o]) : e[o] = t[o]);\n}\nconst h = {\n // Disable popper components\n disabled: !1,\n // Default position offset along main axis (px)\n distance: 5,\n // Default position offset along cross axis (px)\n skidding: 0,\n // Default container where the tooltip will be appended\n container: \"body\",\n // Element used to compute position and size boundaries\n boundary: void 0,\n // Skip delay & CSS transitions when another popper is shown, so that the popper appear to instanly move to the new position.\n instantMove: !1,\n // Auto destroy tooltip DOM nodes (ms)\n disposeTimeout: 150,\n // Triggers on the popper itself\n popperTriggers: [],\n // Positioning strategy\n strategy: \"absolute\",\n // Prevent overflow\n preventOverflow: !0,\n // Flip to the opposite placement if needed\n flip: !0,\n // Shift on the cross axis to prevent the popper from overflowing\n shift: !0,\n // Overflow padding (px)\n overflowPadding: 0,\n // Arrow padding (px)\n arrowPadding: 0,\n // Compute arrow overflow (useful to hide it)\n arrowOverflow: !0,\n /**\n * By default, compute autohide on 'click'.\n */\n autoHideOnMousedown: !1,\n // Themes\n themes: {\n tooltip: {\n // Default tooltip placement relative to target element\n placement: \"top\",\n // Default events that trigger the tooltip\n triggers: [\"hover\", \"focus\", \"touch\"],\n // Close tooltip on click on tooltip target\n hideTriggers: (e) => [...e, \"click\"],\n // Delay (ms)\n delay: {\n show: 200,\n hide: 0\n },\n // Update popper on content resize\n handleResize: !1,\n // Enable HTML content in directive\n html: !1,\n // Displayed when tooltip content is loading\n loadingContent: \"...\"\n },\n dropdown: {\n // Default dropdown placement relative to target element\n placement: \"bottom\",\n // Default events that trigger the dropdown\n triggers: [\"click\"],\n // Delay (ms)\n delay: 0,\n // Update popper on content resize\n handleResize: !0,\n // Hide on clock outside\n autoHide: !0\n },\n menu: {\n $extend: \"dropdown\",\n triggers: [\"hover\", \"focus\"],\n popperTriggers: [\"hover\"],\n delay: {\n show: 0,\n hide: 400\n }\n }\n }\n};\nfunction S(e, t) {\n let o = h.themes[e] || {}, i;\n do\n i = o[t], typeof i > \"u\" ? o.$extend ? o = h.themes[o.$extend] || {} : (o = null, i = h[t]) : o = null;\n while (o);\n return i;\n}\nfunction Ze(e) {\n const t = [e];\n let o = h.themes[e] || {};\n do\n o.$extend && !o.$resetCss ? (t.push(o.$extend), o = h.themes[o.$extend] || {}) : o = null;\n while (o);\n return t.map((i) => `v-popper--theme-${i}`);\n}\nfunction re(e) {\n const t = [e];\n let o = h.themes[e] || {};\n do\n o.$extend ? (t.push(o.$extend), o = h.themes[o.$extend] || {}) : o = null;\n while (o);\n return t;\n}\nlet $ = !1;\nif (typeof window < \"u\") {\n $ = !1;\n try {\n const e = Object.defineProperty({}, \"passive\", {\n get() {\n $ = !0;\n }\n });\n window.addEventListener(\"test\", null, e);\n } catch {\n }\n}\nlet _e = !1;\ntypeof window < \"u\" && typeof navigator < \"u\" && (_e = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream);\nconst Te = [\"auto\", \"top\", \"bottom\", \"left\", \"right\"].reduce((e, t) => e.concat([\n t,\n `${t}-start`,\n `${t}-end`\n]), []), pe = {\n hover: \"mouseenter\",\n focus: \"focus\",\n click: \"click\",\n touch: \"touchstart\",\n pointer: \"pointerdown\"\n}, ae = {\n hover: \"mouseleave\",\n focus: \"blur\",\n click: \"click\",\n touch: \"touchend\",\n pointer: \"pointerup\"\n};\nfunction de(e, t) {\n const o = e.indexOf(t);\n o !== -1 && e.splice(o, 1);\n}\nfunction G() {\n return new Promise((e) => requestAnimationFrame(() => {\n requestAnimationFrame(e);\n }));\n}\nconst d = [];\nlet g = null;\nconst le = {};\nfunction he(e) {\n let t = le[e];\n return t || (t = le[e] = []), t;\n}\nlet Y = function() {\n};\ntypeof window < \"u\" && (Y = window.Element);\nfunction n(e) {\n return function(t) {\n return S(t.theme, e);\n };\n}\nconst q = \"__floating-vue__popper\", Q = () => O({\n name: \"VPopper\",\n provide() {\n return {\n [q]: {\n parentPopper: this\n }\n };\n },\n inject: {\n [q]: { default: null }\n },\n props: {\n theme: {\n type: String,\n required: !0\n },\n targetNodes: {\n type: Function,\n required: !0\n },\n referenceNode: {\n type: Function,\n default: null\n },\n popperNode: {\n type: Function,\n required: !0\n },\n shown: {\n type: Boolean,\n default: !1\n },\n showGroup: {\n type: String,\n default: null\n },\n // eslint-disable-next-line vue/require-prop-types\n ariaId: {\n default: null\n },\n disabled: {\n type: Boolean,\n default: n(\"disabled\")\n },\n positioningDisabled: {\n type: Boolean,\n default: n(\"positioningDisabled\")\n },\n placement: {\n type: String,\n default: n(\"placement\"),\n validator: (e) => Te.includes(e)\n },\n delay: {\n type: [String, Number, Object],\n default: n(\"delay\")\n },\n distance: {\n type: [Number, String],\n default: n(\"distance\")\n },\n skidding: {\n type: [Number, String],\n default: n(\"skidding\")\n },\n triggers: {\n type: Array,\n default: n(\"triggers\")\n },\n showTriggers: {\n type: [Array, Function],\n default: n(\"showTriggers\")\n },\n hideTriggers: {\n type: [Array, Function],\n default: n(\"hideTriggers\")\n },\n popperTriggers: {\n type: Array,\n default: n(\"popperTriggers\")\n },\n popperShowTriggers: {\n type: [Array, Function],\n default: n(\"popperShowTriggers\")\n },\n popperHideTriggers: {\n type: [Array, Function],\n default: n(\"popperHideTriggers\")\n },\n container: {\n type: [String, Object, Y, Boolean],\n default: n(\"container\")\n },\n boundary: {\n type: [String, Y],\n default: n(\"boundary\")\n },\n strategy: {\n type: String,\n validator: (e) => [\"absolute\", \"fixed\"].includes(e),\n default: n(\"strategy\")\n },\n autoHide: {\n type: [Boolean, Function],\n default: n(\"autoHide\")\n },\n handleResize: {\n type: Boolean,\n default: n(\"handleResize\")\n },\n instantMove: {\n type: Boolean,\n default: n(\"instantMove\")\n },\n eagerMount: {\n type: Boolean,\n default: n(\"eagerMount\")\n },\n popperClass: {\n type: [String, Array, Object],\n default: n(\"popperClass\")\n },\n computeTransformOrigin: {\n type: Boolean,\n default: n(\"computeTransformOrigin\")\n },\n /**\n * @deprecated\n */\n autoMinSize: {\n type: Boolean,\n default: n(\"autoMinSize\")\n },\n autoSize: {\n type: [Boolean, String],\n default: n(\"autoSize\")\n },\n /**\n * @deprecated\n */\n autoMaxSize: {\n type: Boolean,\n default: n(\"autoMaxSize\")\n },\n autoBoundaryMaxSize: {\n type: Boolean,\n default: n(\"autoBoundaryMaxSize\")\n },\n preventOverflow: {\n type: Boolean,\n default: n(\"preventOverflow\")\n },\n overflowPadding: {\n type: [Number, String],\n default: n(\"overflowPadding\")\n },\n arrowPadding: {\n type: [Number, String],\n default: n(\"arrowPadding\")\n },\n arrowOverflow: {\n type: Boolean,\n default: n(\"arrowOverflow\")\n },\n flip: {\n type: Boolean,\n default: n(\"flip\")\n },\n shift: {\n type: Boolean,\n default: n(\"shift\")\n },\n shiftCrossAxis: {\n type: Boolean,\n default: n(\"shiftCrossAxis\")\n },\n noAutoFocus: {\n type: Boolean,\n default: n(\"noAutoFocus\")\n },\n disposeTimeout: {\n type: Number,\n default: n(\"disposeTimeout\")\n }\n },\n emits: {\n show: () => !0,\n hide: () => !0,\n \"update:shown\": (e) => !0,\n \"apply-show\": () => !0,\n \"apply-hide\": () => !0,\n \"close-group\": () => !0,\n \"close-directive\": () => !0,\n \"auto-hide\": () => !0,\n resize: () => !0\n },\n data() {\n return {\n isShown: !1,\n isMounted: !1,\n skipTransition: !1,\n classes: {\n showFrom: !1,\n showTo: !1,\n hideFrom: !1,\n hideTo: !0\n },\n result: {\n x: 0,\n y: 0,\n placement: \"\",\n strategy: this.strategy,\n arrow: {\n x: 0,\n y: 0,\n centerOffset: 0\n },\n transformOrigin: null\n },\n randomId: `popper_${[Math.random(), Date.now()].map((e) => e.toString(36).substring(2, 10)).join(\"_\")}`,\n shownChildren: /* @__PURE__ */ new Set(),\n lastAutoHide: !0,\n pendingHide: !1,\n containsGlobalTarget: !1,\n isDisposed: !0,\n mouseDownContains: !1\n };\n },\n computed: {\n popperId() {\n return this.ariaId != null ? this.ariaId : this.randomId;\n },\n shouldMountContent() {\n return this.eagerMount || this.isMounted;\n },\n slotData() {\n return {\n popperId: this.popperId,\n isShown: this.isShown,\n shouldMountContent: this.shouldMountContent,\n skipTransition: this.skipTransition,\n autoHide: typeof this.autoHide == \"function\" ? this.lastAutoHide : this.autoHide,\n show: this.show,\n hide: this.hide,\n handleResize: this.handleResize,\n onResize: this.onResize,\n classes: {\n ...this.classes,\n popperClass: this.popperClass\n },\n result: this.positioningDisabled ? null : this.result,\n attrs: this.$attrs\n };\n },\n parentPopper() {\n var e;\n return (e = this[q]) == null ? void 0 : e.parentPopper;\n },\n hasPopperShowTriggerHover() {\n var e, t;\n return ((e = this.popperTriggers) == null ? void 0 : e.includes(\"hover\")) || ((t = this.popperShowTriggers) == null ? void 0 : t.includes(\"hover\"));\n }\n },\n watch: {\n shown: \"$_autoShowHide\",\n disabled(e) {\n e ? this.dispose() : this.init();\n },\n async container() {\n this.isShown && (this.$_ensureTeleport(), await this.$_computePosition());\n },\n triggers: {\n handler: \"$_refreshListeners\",\n deep: !0\n },\n positioningDisabled: \"$_refreshListeners\",\n ...[\n \"placement\",\n \"distance\",\n \"skidding\",\n \"boundary\",\n \"strategy\",\n \"overflowPadding\",\n \"arrowPadding\",\n \"preventOverflow\",\n \"shift\",\n \"shiftCrossAxis\",\n \"flip\"\n ].reduce((e, t) => (e[t] = \"$_computePosition\", e), {})\n },\n created() {\n this.autoMinSize && console.warn('[floating-vue] `autoMinSize` option is deprecated. Use `autoSize=\"min\"` instead.'), this.autoMaxSize && console.warn(\"[floating-vue] `autoMaxSize` option is deprecated. Use `autoBoundaryMaxSize` instead.\");\n },\n mounted() {\n this.init(), this.$_detachPopperNode();\n },\n activated() {\n this.$_autoShowHide();\n },\n deactivated() {\n this.hide();\n },\n beforeUnmount() {\n this.dispose();\n },\n methods: {\n show({ event: e = null, skipDelay: t = !1, force: o = !1 } = {}) {\n var i, s;\n (i = this.parentPopper) != null && i.lockedChild && this.parentPopper.lockedChild !== this || (this.pendingHide = !1, (o || !this.disabled) && (((s = this.parentPopper) == null ? void 0 : s.lockedChild) === this && (this.parentPopper.lockedChild = null), this.$_scheduleShow(e, t), this.$emit(\"show\"), this.$_showFrameLocked = !0, requestAnimationFrame(() => {\n this.$_showFrameLocked = !1;\n })), this.$emit(\"update:shown\", !0));\n },\n hide({ event: e = null, skipDelay: t = !1 } = {}) {\n var o;\n if (!this.$_hideInProgress) {\n if (this.shownChildren.size > 0) {\n this.pendingHide = !0;\n return;\n }\n if (this.hasPopperShowTriggerHover && this.$_isAimingPopper()) {\n this.parentPopper && (this.parentPopper.lockedChild = this, clearTimeout(this.parentPopper.lockedChildTimer), this.parentPopper.lockedChildTimer = setTimeout(() => {\n this.parentPopper.lockedChild === this && (this.parentPopper.lockedChild.hide({ skipDelay: t }), this.parentPopper.lockedChild = null);\n }, 1e3));\n return;\n }\n ((o = this.parentPopper) == null ? void 0 : o.lockedChild) === this && (this.parentPopper.lockedChild = null), this.pendingHide = !1, this.$_scheduleHide(e, t), this.$emit(\"hide\"), this.$emit(\"update:shown\", !1);\n }\n },\n init() {\n var e;\n this.isDisposed && (this.isDisposed = !1, this.isMounted = !1, this.$_events = [], this.$_preventShow = !1, this.$_referenceNode = ((e = this.referenceNode) == null ? void 0 : e.call(this)) ?? this.$el, this.$_targetNodes = this.targetNodes().filter((t) => t.nodeType === t.ELEMENT_NODE), this.$_popperNode = this.popperNode(), this.$_innerNode = this.$_popperNode.querySelector(\".v-popper__inner\"), this.$_arrowNode = this.$_popperNode.querySelector(\".v-popper__arrow-container\"), this.$_swapTargetAttrs(\"title\", \"data-original-title\"), this.$_detachPopperNode(), this.triggers.length && this.$_addEventListeners(), this.shown && this.show());\n },\n dispose() {\n this.isDisposed || (this.isDisposed = !0, this.$_removeEventListeners(), this.hide({ skipDelay: !0 }), this.$_detachPopperNode(), this.isMounted = !1, this.isShown = !1, this.$_updateParentShownChildren(!1), this.$_swapTargetAttrs(\"data-original-title\", \"title\"));\n },\n async onResize() {\n this.isShown && (await this.$_computePosition(), this.$emit(\"resize\"));\n },\n async $_computePosition() {\n if (this.isDisposed || this.positioningDisabled)\n return;\n const e = {\n strategy: this.strategy,\n middleware: []\n };\n (this.distance || this.skidding) && e.middleware.push(xe({\n mainAxis: this.distance,\n crossAxis: this.skidding\n }));\n const t = this.placement.startsWith(\"auto\");\n if (t ? e.middleware.push(Ue({\n alignment: this.placement.split(\"-\")[1] ?? \"\"\n })) : e.placement = this.placement, this.preventOverflow && (this.shift && e.middleware.push(Ye({\n padding: this.overflowPadding,\n boundary: this.boundary,\n crossAxis: this.shiftCrossAxis\n })), !t && this.flip && e.middleware.push(Xe({\n padding: this.overflowPadding,\n boundary: this.boundary\n }))), e.middleware.push(Ke({\n element: this.$_arrowNode,\n padding: this.arrowPadding\n })), this.arrowOverflow && e.middleware.push({\n name: \"arrowOverflow\",\n fn: ({ placement: i, rects: s, middlewareData: r }) => {\n let p;\n const { centerOffset: a } = r.arrow;\n return i.startsWith(\"top\") || i.startsWith(\"bottom\") ? p = Math.abs(a) > s.reference.width / 2 : p = Math.abs(a) > s.reference.height / 2, {\n data: {\n overflow: p\n }\n };\n }\n }), this.autoMinSize || this.autoSize) {\n const i = this.autoSize ? this.autoSize : this.autoMinSize ? \"min\" : null;\n e.middleware.push({\n name: \"autoSize\",\n fn: ({ rects: s, placement: r, middlewareData: p }) => {\n var u;\n if ((u = p.autoSize) != null && u.skip)\n return {};\n let a, l;\n return r.startsWith(\"top\") || r.startsWith(\"bottom\") ? a = s.reference.width : l = s.reference.height, this.$_innerNode.style[i === \"min\" ? \"minWidth\" : i === \"max\" ? \"maxWidth\" : \"width\"] = a != null ? `${a}px` : null, this.$_innerNode.style[i === \"min\" ? \"minHeight\" : i === \"max\" ? \"maxHeight\" : \"height\"] = l != null ? `${l}px` : null, {\n data: {\n skip: !0\n },\n reset: {\n rects: !0\n }\n };\n }\n });\n }\n (this.autoMaxSize || this.autoBoundaryMaxSize) && (this.$_innerNode.style.maxWidth = null, this.$_innerNode.style.maxHeight = null, e.middleware.push(Je({\n boundary: this.boundary,\n padding: this.overflowPadding,\n apply: ({ availableWidth: i, availableHeight: s }) => {\n this.$_innerNode.style.maxWidth = i != null ? `${i}px` : null, this.$_innerNode.style.maxHeight = s != null ? `${s}px` : null;\n }\n })));\n const o = await Qe(this.$_referenceNode, this.$_popperNode, e);\n Object.assign(this.result, {\n x: o.x,\n y: o.y,\n placement: o.placement,\n strategy: o.strategy,\n arrow: {\n ...o.middlewareData.arrow,\n ...o.middlewareData.arrowOverflow\n }\n });\n },\n $_scheduleShow(e, t = !1) {\n if (this.$_updateParentShownChildren(!0), this.$_hideInProgress = !1, clearTimeout(this.$_scheduleTimer), g && this.instantMove && g.instantMove && g !== this.parentPopper) {\n g.$_applyHide(!0), this.$_applyShow(!0);\n return;\n }\n t ? this.$_applyShow() : this.$_scheduleTimer = setTimeout(this.$_applyShow.bind(this), this.$_computeDelay(\"show\"));\n },\n $_scheduleHide(e, t = !1) {\n if (this.shownChildren.size > 0) {\n this.pendingHide = !0;\n return;\n }\n this.$_updateParentShownChildren(!1), this.$_hideInProgress = !0, clearTimeout(this.$_scheduleTimer), this.isShown && (g = this), t ? this.$_applyHide() : this.$_scheduleTimer = setTimeout(this.$_applyHide.bind(this), this.$_computeDelay(\"hide\"));\n },\n $_computeDelay(e) {\n const t = this.delay;\n return parseInt(t && t[e] || t || 0);\n },\n async $_applyShow(e = !1) {\n clearTimeout(this.$_disposeTimer), clearTimeout(this.$_scheduleTimer), this.skipTransition = e, !this.isShown && (this.$_ensureTeleport(), await G(), await this.$_computePosition(), await this.$_applyShowEffect(), this.positioningDisabled || this.$_registerEventListeners([\n ...ne(this.$_referenceNode),\n ...ne(this.$_popperNode)\n ], \"scroll\", () => {\n this.$_computePosition();\n }));\n },\n async $_applyShowEffect() {\n if (this.$_hideInProgress)\n return;\n if (this.computeTransformOrigin) {\n const t = this.$_referenceNode.getBoundingClientRect(), o = this.$_popperNode.querySelector(\".v-popper__wrapper\"), i = o.parentNode.getBoundingClientRect(), s = t.x + t.width / 2 - (i.left + o.offsetLeft), r = t.y + t.height / 2 - (i.top + o.offsetTop);\n this.result.transformOrigin = `${s}px ${r}px`;\n }\n this.isShown = !0, this.$_applyAttrsToTarget({\n \"aria-describedby\": this.popperId,\n \"data-popper-shown\": \"\"\n });\n const e = this.showGroup;\n if (e) {\n let t;\n for (let o = 0; o < d.length; o++)\n t = d[o], t.showGroup !== e && (t.hide(), t.$emit(\"close-group\"));\n }\n d.push(this), document.body.classList.add(\"v-popper--some-open\");\n for (const t of re(this.theme))\n he(t).push(this), document.body.classList.add(`v-popper--some-open--${t}`);\n this.$emit(\"apply-show\"), this.classes.showFrom = !0, this.classes.showTo = !1, this.classes.hideFrom = !1, this.classes.hideTo = !1, await G(), this.classes.showFrom = !1, this.classes.showTo = !0, this.noAutoFocus || this.$_popperNode.focus();\n },\n async $_applyHide(e = !1) {\n if (this.shownChildren.size > 0) {\n this.pendingHide = !0, this.$_hideInProgress = !1;\n return;\n }\n if (clearTimeout(this.$_scheduleTimer), !this.isShown)\n return;\n this.skipTransition = e, de(d, this), d.length === 0 && document.body.classList.remove(\"v-popper--some-open\");\n for (const o of re(this.theme)) {\n const i = he(o);\n de(i, this), i.length === 0 && document.body.classList.remove(`v-popper--some-open--${o}`);\n }\n g === this && (g = null), this.isShown = !1, this.$_applyAttrsToTarget({\n \"aria-describedby\": void 0,\n \"data-popper-shown\": void 0\n }), clearTimeout(this.$_disposeTimer);\n const t = this.disposeTimeout;\n t !== null && (this.$_disposeTimer = setTimeout(() => {\n this.$_popperNode && (this.$_detachPopperNode(), this.isMounted = !1);\n }, t)), this.$_removeEventListeners(\"scroll\"), this.$emit(\"apply-hide\"), this.classes.showFrom = !1, this.classes.showTo = !1, this.classes.hideFrom = !0, this.classes.hideTo = !1, await G(), this.classes.hideFrom = !1, this.classes.hideTo = !0;\n },\n $_autoShowHide() {\n this.shown ? this.show() : this.hide();\n },\n $_ensureTeleport() {\n if (this.isDisposed)\n return;\n let e = this.container;\n if (typeof e == \"string\" ? e = window.document.querySelector(e) : e === !1 && (e = this.$_targetNodes[0].parentNode), !e)\n throw new Error(\"No container for popover: \" + this.container);\n e.appendChild(this.$_popperNode), this.isMounted = !0;\n },\n $_addEventListeners() {\n const e = (o) => {\n this.isShown && !this.$_hideInProgress || (o.usedByTooltip = !0, !this.$_preventShow && this.show({ event: o }));\n };\n this.$_registerTriggerListeners(this.$_targetNodes, pe, this.triggers, this.showTriggers, e), this.$_registerTriggerListeners([this.$_popperNode], pe, this.popperTriggers, this.popperShowTriggers, e);\n const t = (o) => {\n o.usedByTooltip || this.hide({ event: o });\n };\n this.$_registerTriggerListeners(this.$_targetNodes, ae, this.triggers, this.hideTriggers, t), this.$_registerTriggerListeners([this.$_popperNode], ae, this.popperTriggers, this.popperHideTriggers, t);\n },\n $_registerEventListeners(e, t, o) {\n this.$_events.push({ targetNodes: e, eventType: t, handler: o }), e.forEach((i) => i.addEventListener(t, o, $ ? {\n passive: !0\n } : void 0));\n },\n $_registerTriggerListeners(e, t, o, i, s) {\n let r = o;\n i != null && (r = typeof i == \"function\" ? i(r) : i), r.forEach((p) => {\n const a = t[p];\n a && this.$_registerEventListeners(e, a, s);\n });\n },\n $_removeEventListeners(e) {\n const t = [];\n this.$_events.forEach((o) => {\n const { targetNodes: i, eventType: s, handler: r } = o;\n !e || e === s ? i.forEach((p) => p.removeEventListener(s, r)) : t.push(o);\n }), this.$_events = t;\n },\n $_refreshListeners() {\n this.isDisposed || (this.$_removeEventListeners(), this.$_addEventListeners());\n },\n $_handleGlobalClose(e, t = !1) {\n this.$_showFrameLocked || (this.hide({ event: e }), e.closePopover ? this.$emit(\"close-directive\") : this.$emit(\"auto-hide\"), t && (this.$_preventShow = !0, setTimeout(() => {\n this.$_preventShow = !1;\n }, 300)));\n },\n $_detachPopperNode() {\n this.$_popperNode.parentNode && this.$_popperNode.parentNode.removeChild(this.$_popperNode);\n },\n $_swapTargetAttrs(e, t) {\n for (const o of this.$_targetNodes) {\n const i = o.getAttribute(e);\n i && (o.removeAttribute(e), o.setAttribute(t, i));\n }\n },\n $_applyAttrsToTarget(e) {\n for (const t of this.$_targetNodes)\n for (const o in e) {\n const i = e[o];\n i == null ? t.removeAttribute(o) : t.setAttribute(o, i);\n }\n },\n $_updateParentShownChildren(e) {\n let t = this.parentPopper;\n for (; t; )\n e ? t.shownChildren.add(this.randomId) : (t.shownChildren.delete(this.randomId), t.pendingHide && t.hide()), t = t.parentPopper;\n },\n $_isAimingPopper() {\n const e = this.$_referenceNode.getBoundingClientRect();\n if (y >= e.left && y <= e.right && _ >= e.top && _ <= e.bottom) {\n const t = this.$_popperNode.getBoundingClientRect(), o = y - c, i = _ - m, r = t.left + t.width / 2 - c + (t.top + t.height / 2) - m + t.width + t.height, p = c + o * r, a = m + i * r;\n return C(c, m, p, a, t.left, t.top, t.left, t.bottom) || // Left edge\n C(c, m, p, a, t.left, t.top, t.right, t.top) || // Top edge\n C(c, m, p, a, t.right, t.top, t.right, t.bottom) || // Right edge\n C(c, m, p, a, t.left, t.bottom, t.right, t.bottom);\n }\n return !1;\n }\n },\n render() {\n return this.$slots.default(this.slotData);\n }\n});\nif (typeof document < \"u\" && typeof window < \"u\") {\n if (_e) {\n const e = $ ? {\n passive: !0,\n capture: !0\n } : !0;\n document.addEventListener(\"touchstart\", (t) => ue(t, !0), e), document.addEventListener(\"touchend\", (t) => fe(t, !0), e);\n } else\n window.addEventListener(\"mousedown\", (e) => ue(e, !1), !0), window.addEventListener(\"click\", (e) => fe(e, !1), !0);\n window.addEventListener(\"resize\", tt);\n}\nfunction ue(e, t) {\n if (h.autoHideOnMousedown)\n Pe(e, t);\n else\n for (let o = 0; o < d.length; o++) {\n const i = d[o];\n try {\n i.mouseDownContains = i.popperNode().contains(e.target);\n } catch {\n }\n }\n}\nfunction fe(e, t) {\n h.autoHideOnMousedown || Pe(e, t);\n}\nfunction Pe(e, t) {\n const o = {};\n for (let i = d.length - 1; i >= 0; i--) {\n const s = d[i];\n try {\n const r = s.containsGlobalTarget = s.mouseDownContains || s.popperNode().contains(e.target);\n s.pendingHide = !1, requestAnimationFrame(() => {\n if (s.pendingHide = !1, !o[s.randomId] && ce(s, r, e)) {\n if (s.$_handleGlobalClose(e, t), !e.closeAllPopover && e.closePopover && r) {\n let a = s.parentPopper;\n for (; a; )\n o[a.randomId] = !0, a = a.parentPopper;\n return;\n }\n let p = s.parentPopper;\n for (; p && ce(p, p.containsGlobalTarget, e); ) {\n p.$_handleGlobalClose(e, t);\n p = p.parentPopper;\n }\n }\n });\n } catch {\n }\n }\n}\nfunction ce(e, t, o) {\n return o.closeAllPopover || o.closePopover && t || et(e, o) && !t;\n}\nfunction et(e, t) {\n if (typeof e.autoHide == \"function\") {\n const o = e.autoHide(t);\n return e.lastAutoHide = o, o;\n }\n return e.autoHide;\n}\nfunction tt() {\n for (let e = 0; e < d.length; e++)\n d[e].$_computePosition();\n}\nfunction Nt() {\n for (let e = 0; e < d.length; e++)\n d[e].hide();\n}\nlet c = 0, m = 0, y = 0, _ = 0;\ntypeof window < \"u\" && window.addEventListener(\"mousemove\", (e) => {\n c = y, m = _, y = e.clientX, _ = e.clientY;\n}, $ ? {\n passive: !0\n} : void 0);\nfunction C(e, t, o, i, s, r, p, a) {\n const l = ((p - s) * (t - r) - (a - r) * (e - s)) / ((a - r) * (o - e) - (p - s) * (i - t)), u = ((o - e) * (t - r) - (i - t) * (e - s)) / ((a - r) * (o - e) - (p - s) * (i - t));\n return l >= 0 && l <= 1 && u >= 0 && u <= 1;\n}\nconst ot = {\n extends: Q()\n}, B = (e, t) => {\n const o = e.__vccOpts || e;\n for (const [i, s] of t)\n o[i] = s;\n return o;\n};\nfunction it(e, t, o, i, s, r) {\n return f(), T(\"div\", {\n ref: \"reference\",\n class: J([\"v-popper\", {\n \"v-popper--shown\": e.slotData.isShown\n }])\n }, [\n A(e.$slots, \"default\", ke(Le(e.slotData)))\n ], 2);\n}\nconst st = /* @__PURE__ */ B(ot, [[\"render\", it]]);\nfunction nt() {\n var e = window.navigator.userAgent, t = e.indexOf(\"MSIE \");\n if (t > 0)\n return parseInt(e.substring(t + 5, e.indexOf(\".\", t)), 10);\n var o = e.indexOf(\"Trident/\");\n if (o > 0) {\n var i = e.indexOf(\"rv:\");\n return parseInt(e.substring(i + 3, e.indexOf(\".\", i)), 10);\n }\n var s = e.indexOf(\"Edge/\");\n return s > 0 ? parseInt(e.substring(s + 5, e.indexOf(\".\", s)), 10) : -1;\n}\nlet z;\nfunction X() {\n X.init || (X.init = !0, z = nt() !== -1);\n}\nvar E = {\n name: \"ResizeObserver\",\n props: {\n emitOnMount: {\n type: Boolean,\n default: !1\n },\n ignoreWidth: {\n type: Boolean,\n default: !1\n },\n ignoreHeight: {\n type: Boolean,\n default: !1\n }\n },\n emits: [\n \"notify\"\n ],\n mounted() {\n X(), Fe(() => {\n this._w = this.$el.offsetWidth, this._h = this.$el.offsetHeight, this.emitOnMount && this.emitSize();\n });\n const e = document.createElement(\"object\");\n this._resizeObject = e, e.setAttribute(\"aria-hidden\", \"true\"), e.setAttribute(\"tabindex\", -1), e.onload = this.addResizeHandlers, e.type = \"text/html\", z && this.$el.appendChild(e), e.data = \"about:blank\", z || this.$el.appendChild(e);\n },\n beforeUnmount() {\n this.removeResizeHandlers();\n },\n methods: {\n compareAndNotify() {\n (!this.ignoreWidth && this._w !== this.$el.offsetWidth || !this.ignoreHeight && this._h !== this.$el.offsetHeight) && (this._w = this.$el.offsetWidth, this._h = this.$el.offsetHeight, this.emitSize());\n },\n emitSize() {\n this.$emit(\"notify\", {\n width: this._w,\n height: this._h\n });\n },\n addResizeHandlers() {\n this._resizeObject.contentDocument.defaultView.addEventListener(\"resize\", this.compareAndNotify), this.compareAndNotify();\n },\n removeResizeHandlers() {\n this._resizeObject && this._resizeObject.onload && (!z && this._resizeObject.contentDocument && this._resizeObject.contentDocument.defaultView.removeEventListener(\"resize\", this.compareAndNotify), this.$el.removeChild(this._resizeObject), this._resizeObject.onload = null, this._resizeObject = null);\n }\n }\n};\nconst rt = /* @__PURE__ */ Re(\"data-v-b329ee4c\");\nDe(\"data-v-b329ee4c\");\nconst pt = {\n class: \"resize-observer\",\n tabindex: \"-1\"\n};\nIe();\nconst at = /* @__PURE__ */ rt((e, t, o, i, s, r) => (f(), M(\"div\", pt)));\nE.render = at;\nE.__scopeId = \"data-v-b329ee4c\";\nE.__file = \"src/components/ResizeObserver.vue\";\nconst Z = (e = \"theme\") => ({\n computed: {\n themeClass() {\n return Ze(this[e]);\n }\n }\n}), dt = O({\n name: \"VPopperContent\",\n components: {\n ResizeObserver: E\n },\n mixins: [\n Z()\n ],\n props: {\n popperId: String,\n theme: String,\n shown: Boolean,\n mounted: Boolean,\n skipTransition: Boolean,\n autoHide: Boolean,\n handleResize: Boolean,\n classes: Object,\n result: Object\n },\n emits: [\n \"hide\",\n \"resize\"\n ],\n methods: {\n toPx(e) {\n return e != null && !isNaN(e) ? `${e}px` : null;\n }\n }\n}), lt = [\"id\", \"aria-hidden\", \"tabindex\", \"data-popper-placement\"], ht = {\n ref: \"inner\",\n class: \"v-popper__inner\"\n}, ut = /* @__PURE__ */ w(\"div\", { class: \"v-popper__arrow-outer\" }, null, -1), ft = /* @__PURE__ */ w(\"div\", { class: \"v-popper__arrow-inner\" }, null, -1), ct = [\n ut,\n ft\n];\nfunction mt(e, t, o, i, s, r) {\n const p = P(\"ResizeObserver\");\n return f(), T(\"div\", {\n id: e.popperId,\n ref: \"popover\",\n class: J([\"v-popper__popper\", [\n e.themeClass,\n e.classes.popperClass,\n {\n \"v-popper__popper--shown\": e.shown,\n \"v-popper__popper--hidden\": !e.shown,\n \"v-popper__popper--show-from\": e.classes.showFrom,\n \"v-popper__popper--show-to\": e.classes.showTo,\n \"v-popper__popper--hide-from\": e.classes.hideFrom,\n \"v-popper__popper--hide-to\": e.classes.hideTo,\n \"v-popper__popper--skip-transition\": e.skipTransition,\n \"v-popper__popper--arrow-overflow\": e.result && e.result.arrow.overflow,\n \"v-popper__popper--no-positioning\": !e.result\n }\n ]]),\n style: W(e.result ? {\n position: e.result.strategy,\n transform: `translate3d(${Math.round(e.result.x)}px,${Math.round(e.result.y)}px,0)`\n } : void 0),\n \"aria-hidden\": e.shown ? \"false\" : \"true\",\n tabindex: e.autoHide ? 0 : void 0,\n \"data-popper-placement\": e.result ? e.result.placement : void 0,\n onKeyup: t[2] || (t[2] = je((a) => e.autoHide && e.$emit(\"hide\"), [\"esc\"]))\n }, [\n w(\"div\", {\n class: \"v-popper__backdrop\",\n onClick: t[0] || (t[0] = (a) => e.autoHide && e.$emit(\"hide\"))\n }),\n w(\"div\", {\n class: \"v-popper__wrapper\",\n style: W(e.result ? {\n transformOrigin: e.result.transformOrigin\n } : void 0)\n }, [\n w(\"div\", ht, [\n e.mounted ? (f(), T(Ve, { key: 0 }, [\n w(\"div\", null, [\n A(e.$slots, \"default\")\n ]),\n e.handleResize ? (f(), M(p, {\n key: 0,\n onNotify: t[1] || (t[1] = (a) => e.$emit(\"resize\", a))\n })) : se(\"\", !0)\n ], 64)) : se(\"\", !0)\n ], 512),\n w(\"div\", {\n ref: \"arrow\",\n class: \"v-popper__arrow-container\",\n style: W(e.result ? {\n left: e.toPx(e.result.arrow.x),\n top: e.toPx(e.result.arrow.y)\n } : void 0)\n }, ct, 4)\n ], 4)\n ], 46, lt);\n}\nconst ee = /* @__PURE__ */ B(dt, [[\"render\", mt]]), te = {\n methods: {\n show(...e) {\n return this.$refs.popper.show(...e);\n },\n hide(...e) {\n return this.$refs.popper.hide(...e);\n },\n dispose(...e) {\n return this.$refs.popper.dispose(...e);\n },\n onResize(...e) {\n return this.$refs.popper.onResize(...e);\n }\n }\n};\nlet K = function() {\n};\ntypeof window < \"u\" && (K = window.Element);\nconst gt = O({\n name: \"VPopperWrapper\",\n components: {\n Popper: st,\n PopperContent: ee\n },\n mixins: [\n te,\n Z(\"finalTheme\")\n ],\n props: {\n theme: {\n type: String,\n default: null\n },\n referenceNode: {\n type: Function,\n default: null\n },\n shown: {\n type: Boolean,\n default: !1\n },\n showGroup: {\n type: String,\n default: null\n },\n // eslint-disable-next-line vue/require-prop-types\n ariaId: {\n default: null\n },\n disabled: {\n type: Boolean,\n default: void 0\n },\n positioningDisabled: {\n type: Boolean,\n default: void 0\n },\n placement: {\n type: String,\n default: void 0\n },\n delay: {\n type: [String, Number, Object],\n default: void 0\n },\n distance: {\n type: [Number, String],\n default: void 0\n },\n skidding: {\n type: [Number, String],\n default: void 0\n },\n triggers: {\n type: Array,\n default: void 0\n },\n showTriggers: {\n type: [Array, Function],\n default: void 0\n },\n hideTriggers: {\n type: [Array, Function],\n default: void 0\n },\n popperTriggers: {\n type: Array,\n default: void 0\n },\n popperShowTriggers: {\n type: [Array, Function],\n default: void 0\n },\n popperHideTriggers: {\n type: [Array, Function],\n default: void 0\n },\n container: {\n type: [String, Object, K, Boolean],\n default: void 0\n },\n boundary: {\n type: [String, K],\n default: void 0\n },\n strategy: {\n type: String,\n default: void 0\n },\n autoHide: {\n type: [Boolean, Function],\n default: void 0\n },\n handleResize: {\n type: Boolean,\n default: void 0\n },\n instantMove: {\n type: Boolean,\n default: void 0\n },\n eagerMount: {\n type: Boolean,\n default: void 0\n },\n popperClass: {\n type: [String, Array, Object],\n default: void 0\n },\n computeTransformOrigin: {\n type: Boolean,\n default: void 0\n },\n /**\n * @deprecated\n */\n autoMinSize: {\n type: Boolean,\n default: void 0\n },\n autoSize: {\n type: [Boolean, String],\n default: void 0\n },\n /**\n * @deprecated\n */\n autoMaxSize: {\n type: Boolean,\n default: void 0\n },\n autoBoundaryMaxSize: {\n type: Boolean,\n default: void 0\n },\n preventOverflow: {\n type: Boolean,\n default: void 0\n },\n overflowPadding: {\n type: [Number, String],\n default: void 0\n },\n arrowPadding: {\n type: [Number, String],\n default: void 0\n },\n arrowOverflow: {\n type: Boolean,\n default: void 0\n },\n flip: {\n type: Boolean,\n default: void 0\n },\n shift: {\n type: Boolean,\n default: void 0\n },\n shiftCrossAxis: {\n type: Boolean,\n default: void 0\n },\n noAutoFocus: {\n type: Boolean,\n default: void 0\n },\n disposeTimeout: {\n type: Number,\n default: void 0\n }\n },\n emits: {\n show: () => !0,\n hide: () => !0,\n \"update:shown\": (e) => !0,\n \"apply-show\": () => !0,\n \"apply-hide\": () => !0,\n \"close-group\": () => !0,\n \"close-directive\": () => !0,\n \"auto-hide\": () => !0,\n resize: () => !0\n },\n computed: {\n finalTheme() {\n return this.theme ?? this.$options.vPopperTheme;\n }\n },\n methods: {\n getTargetNodes() {\n return Array.from(this.$el.children).filter((e) => e !== this.$refs.popperContent.$el);\n }\n }\n});\nfunction wt(e, t, o, i, s, r) {\n const p = P(\"PopperContent\"), a = P(\"Popper\");\n return f(), M(a, $e({ ref: \"popper\" }, e.$props, {\n theme: e.finalTheme,\n \"target-nodes\": e.getTargetNodes,\n \"popper-node\": () => e.$refs.popperContent.$el,\n class: [\n e.themeClass\n ],\n onShow: t[0] || (t[0] = () => e.$emit(\"show\")),\n onHide: t[1] || (t[1] = () => e.$emit(\"hide\")),\n \"onUpdate:shown\": t[2] || (t[2] = (l) => e.$emit(\"update:shown\", l)),\n onApplyShow: t[3] || (t[3] = () => e.$emit(\"apply-show\")),\n onApplyHide: t[4] || (t[4] = () => e.$emit(\"apply-hide\")),\n onCloseGroup: t[5] || (t[5] = () => e.$emit(\"close-group\")),\n onCloseDirective: t[6] || (t[6] = () => e.$emit(\"close-directive\")),\n onAutoHide: t[7] || (t[7] = () => e.$emit(\"auto-hide\")),\n onResize: t[8] || (t[8] = () => e.$emit(\"resize\"))\n }), {\n default: N(({\n popperId: l,\n isShown: u,\n shouldMountContent: L,\n skipTransition: D,\n autoHide: I,\n show: F,\n hide: v,\n handleResize: R,\n onResize: j,\n classes: V,\n result: Ee\n }) => [\n A(e.$slots, \"default\", {\n shown: u,\n show: F,\n hide: v\n }),\n ve(p, {\n ref: \"popperContent\",\n \"popper-id\": l,\n theme: e.finalTheme,\n shown: u,\n mounted: L,\n \"skip-transition\": D,\n \"auto-hide\": I,\n \"handle-resize\": R,\n classes: V,\n result: Ee,\n onHide: v,\n onResize: j\n }, {\n default: N(() => [\n A(e.$slots, \"popper\", {\n shown: u,\n hide: v\n })\n ]),\n _: 2\n }, 1032, [\"popper-id\", \"theme\", \"shown\", \"mounted\", \"skip-transition\", \"auto-hide\", \"handle-resize\", \"classes\", \"result\", \"onHide\", \"onResize\"])\n ]),\n _: 3\n }, 16, [\"theme\", \"target-nodes\", \"popper-node\", \"class\"]);\n}\nconst k = /* @__PURE__ */ B(gt, [[\"render\", wt]]), Se = {\n ...k,\n name: \"VDropdown\",\n vPopperTheme: \"dropdown\"\n}, be = {\n ...k,\n name: \"VMenu\",\n vPopperTheme: \"menu\"\n}, Ce = {\n ...k,\n name: \"VTooltip\",\n vPopperTheme: \"tooltip\"\n}, $t = O({\n name: \"VTooltipDirective\",\n components: {\n Popper: Q(),\n PopperContent: ee\n },\n mixins: [\n te\n ],\n inheritAttrs: !1,\n props: {\n theme: {\n type: String,\n default: \"tooltip\"\n },\n html: {\n type: Boolean,\n default: (e) => S(e.theme, \"html\")\n },\n content: {\n type: [String, Number, Function],\n default: null\n },\n loadingContent: {\n type: String,\n default: (e) => S(e.theme, \"loadingContent\")\n },\n targetNodes: {\n type: Function,\n required: !0\n }\n },\n data() {\n return {\n asyncContent: null\n };\n },\n computed: {\n isContentAsync() {\n return typeof this.content == \"function\";\n },\n loading() {\n return this.isContentAsync && this.asyncContent == null;\n },\n finalContent() {\n return this.isContentAsync ? this.loading ? this.loadingContent : this.asyncContent : this.content;\n }\n },\n watch: {\n content: {\n handler() {\n this.fetchContent(!0);\n },\n immediate: !0\n },\n async finalContent() {\n await this.$nextTick(), this.$refs.popper.onResize();\n }\n },\n created() {\n this.$_fetchId = 0;\n },\n methods: {\n fetchContent(e) {\n if (typeof this.content == \"function\" && this.$_isShown && (e || !this.$_loading && this.asyncContent == null)) {\n this.asyncContent = null, this.$_loading = !0;\n const t = ++this.$_fetchId, o = this.content(this);\n o.then ? o.then((i) => this.onResult(t, i)) : this.onResult(t, o);\n }\n },\n onResult(e, t) {\n e === this.$_fetchId && (this.$_loading = !1, this.asyncContent = t);\n },\n onShow() {\n this.$_isShown = !0, this.fetchContent();\n },\n onHide() {\n this.$_isShown = !1;\n }\n }\n}), vt = [\"innerHTML\"], yt = [\"textContent\"];\nfunction _t(e, t, o, i, s, r) {\n const p = P(\"PopperContent\"), a = P(\"Popper\");\n return f(), M(a, $e({ ref: \"popper\" }, e.$attrs, {\n theme: e.theme,\n \"target-nodes\": e.targetNodes,\n \"popper-node\": () => e.$refs.popperContent.$el,\n onApplyShow: e.onShow,\n onApplyHide: e.onHide\n }), {\n default: N(({\n popperId: l,\n isShown: u,\n shouldMountContent: L,\n skipTransition: D,\n autoHide: I,\n hide: F,\n handleResize: v,\n onResize: R,\n classes: j,\n result: V\n }) => [\n ve(p, {\n ref: \"popperContent\",\n class: J({\n \"v-popper--tooltip-loading\": e.loading\n }),\n \"popper-id\": l,\n theme: e.theme,\n shown: u,\n mounted: L,\n \"skip-transition\": D,\n \"auto-hide\": I,\n \"handle-resize\": v,\n classes: j,\n result: V,\n onHide: F,\n onResize: R\n }, {\n default: N(() => [\n e.html ? (f(), T(\"div\", {\n key: 0,\n innerHTML: e.finalContent\n }, null, 8, vt)) : (f(), T(\"div\", {\n key: 1,\n textContent: We(e.finalContent)\n }, null, 8, yt))\n ]),\n _: 2\n }, 1032, [\"class\", \"popper-id\", \"theme\", \"shown\", \"mounted\", \"skip-transition\", \"auto-hide\", \"handle-resize\", \"classes\", \"result\", \"onHide\", \"onResize\"])\n ]),\n _: 1\n }, 16, [\"theme\", \"target-nodes\", \"popper-node\", \"onApplyShow\", \"onApplyHide\"]);\n}\nconst ze = /* @__PURE__ */ B($t, [[\"render\", _t]]), Ae = \"v-popper--has-tooltip\";\nfunction Tt(e, t) {\n let o = e.placement;\n if (!o && t)\n for (const i of Te)\n t[i] && (o = i);\n return o || (o = S(e.theme || \"tooltip\", \"placement\")), o;\n}\nfunction Ne(e, t, o) {\n let i;\n const s = typeof t;\n return s === \"string\" ? i = { content: t } : t && s === \"object\" ? i = t : i = { content: !1 }, i.placement = Tt(i, o), i.targetNodes = () => [e], i.referenceNode = () => e, i;\n}\nlet x, b, Pt = 0;\nfunction St() {\n if (x)\n return;\n b = U([]), x = Ge({\n name: \"VTooltipDirectiveApp\",\n setup() {\n return {\n directives: b\n };\n },\n render() {\n return this.directives.map((t) => qe(ze, {\n ...t.options,\n shown: t.shown || t.options.shown,\n key: t.id\n }));\n },\n devtools: {\n hide: !0\n }\n });\n const e = document.createElement(\"div\");\n document.body.appendChild(e), x.mount(e);\n}\nfunction bt(e, t, o) {\n St();\n const i = U(Ne(e, t, o)), s = U(!1), r = {\n id: Pt++,\n options: i,\n shown: s\n };\n return b.value.push(r), e.classList && e.classList.add(Ae), e.$_popper = {\n options: i,\n item: r,\n show() {\n s.value = !0;\n },\n hide() {\n s.value = !1;\n }\n };\n}\nfunction He(e) {\n if (e.$_popper) {\n const t = b.value.indexOf(e.$_popper.item);\n t !== -1 && b.value.splice(t, 1), delete e.$_popper, delete e.$_popperOldShown, delete e.$_popperMountTarget;\n }\n e.classList && e.classList.remove(Ae);\n}\nfunction me(e, { value: t, modifiers: o }) {\n const i = Ne(e, t, o);\n if (!i.content || S(i.theme || \"tooltip\", \"disabled\"))\n He(e);\n else {\n let s;\n e.$_popper ? (s = e.$_popper, s.options.value = i) : s = bt(e, t, o), typeof t.shown < \"u\" && t.shown !== e.$_popperOldShown && (e.$_popperOldShown = t.shown, t.shown ? s.show() : s.hide());\n }\n}\nconst oe = {\n beforeMount: me,\n updated: me,\n beforeUnmount(e) {\n He(e);\n }\n};\nfunction ge(e) {\n e.addEventListener(\"mousedown\", H), e.addEventListener(\"click\", H), e.addEventListener(\"touchstart\", Oe, $ ? {\n passive: !0\n } : !1);\n}\nfunction we(e) {\n e.removeEventListener(\"mousedown\", H), e.removeEventListener(\"click\", H), e.removeEventListener(\"touchstart\", Oe), e.removeEventListener(\"touchend\", Me), e.removeEventListener(\"touchcancel\", Be);\n}\nfunction H(e) {\n const t = e.currentTarget;\n e.closePopover = !t.$_vclosepopover_touch, e.closeAllPopover = t.$_closePopoverModifiers && !!t.$_closePopoverModifiers.all;\n}\nfunction Oe(e) {\n if (e.changedTouches.length === 1) {\n const t = e.currentTarget;\n t.$_vclosepopover_touch = !0;\n const o = e.changedTouches[0];\n t.$_vclosepopover_touchPoint = o, t.addEventListener(\"touchend\", Me), t.addEventListener(\"touchcancel\", Be);\n }\n}\nfunction Me(e) {\n const t = e.currentTarget;\n if (t.$_vclosepopover_touch = !1, e.changedTouches.length === 1) {\n const o = e.changedTouches[0], i = t.$_vclosepopover_touchPoint;\n e.closePopover = Math.abs(o.screenY - i.screenY) < 20 && Math.abs(o.screenX - i.screenX) < 20, e.closeAllPopover = t.$_closePopoverModifiers && !!t.$_closePopoverModifiers.all;\n }\n}\nfunction Be(e) {\n const t = e.currentTarget;\n t.$_vclosepopover_touch = !1;\n}\nconst ie = {\n beforeMount(e, { value: t, modifiers: o }) {\n e.$_closePopoverModifiers = o, (typeof t > \"u\" || t) && ge(e);\n },\n updated(e, { value: t, oldValue: o, modifiers: i }) {\n e.$_closePopoverModifiers = i, t !== o && (typeof t > \"u\" || t ? ge(e) : we(e));\n },\n beforeUnmount(e) {\n we(e);\n }\n}, Ht = h, Ot = oe, Mt = oe, Bt = ie, Et = ie, kt = Se, Lt = be, Dt = Q, It = ee, Ft = te, Rt = k, jt = Z, Vt = Ce, Wt = ze;\nfunction Ct(e, t = {}) {\n e.$_vTooltipInstalled || (e.$_vTooltipInstalled = !0, ye(h, t), e.directive(\"tooltip\", oe), e.directive(\"close-popper\", ie), e.component(\"VTooltip\", Ce), e.component(\"VDropdown\", Se), e.component(\"VMenu\", be));\n}\nconst Gt = {\n // eslint-disable-next-line no-undef\n version: \"5.2.2\",\n install: Ct,\n options: h\n};\nexport {\n kt as Dropdown,\n ae as HIDE_EVENT_MAP,\n Lt as Menu,\n Dt as Popper,\n It as PopperContent,\n Ft as PopperMethods,\n Rt as PopperWrapper,\n pe as SHOW_EVENT_MAP,\n jt as ThemeClass,\n Vt as Tooltip,\n Wt as TooltipDirective,\n Bt as VClosePopper,\n Ot as VTooltip,\n bt as createTooltip,\n Gt as default,\n He as destroyTooltip,\n Nt as hideAllPoppers,\n Ct as install,\n Ht as options,\n Te as placements,\n tt as recomputeAllPoppers,\n Et as vClosePopper,\n Mt as vTooltip\n};\n","<script>\nexport default {\n props: {\n label: {\n type: String,\n default: '',\n },\n src: {\n type: String,\n default: '',\n },\n usernameAvatar: {\n type: String,\n default: '',\n },\n deleteAvatar: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['onAvatarSelect', 'onAvatarDelete'],\n watch: {},\n methods: {\n handleImageUpload(event) {\n const [file] = event.target.files;\n\n this.$emit('onAvatarSelect', {\n file,\n url: file ? URL.createObjectURL(file) : null,\n });\n },\n onAvatarDelete() {\n this.$refs.file.value = null;\n this.$emit('onAvatarDelete');\n },\n },\n};\n</script>\n\n<template>\n <div>\n <label>\n <span v-if=\"label\">{{ label }}</span>\n </label>\n <woot-thumbnail\n v-if=\"src\"\n size=\"80px\"\n :src=\"src\"\n :username=\"usernameAvatar\"\n />\n <div v-if=\"src && deleteAvatar\" class=\"avatar-delete-btn\">\n <woot-button\n color-scheme=\"alert\"\n variant=\"hollow\"\n size=\"tiny\"\n type=\"button\"\n @click=\"onAvatarDelete\"\n >\n {{ $t('INBOX_MGMT.DELETE.AVATAR_DELETE_BUTTON_TEXT') }}\n </woot-button>\n </div>\n <label>\n <input\n id=\"file\"\n ref=\"file\"\n type=\"file\"\n accept=\"image/png, image/jpeg, image/jpg, image/gif, image/webp\"\n @change=\"handleImageUpload\"\n />\n <slot />\n </label>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.avatar-delete-btn {\n margin-top: var(--space-smaller);\n margin-bottom: var(--space-smaller);\n}\n</style>\n","/*\nLanguage: HTML, XML\nWebsite: https://www.w3.org/XML/\nCategory: common, web\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction xml(hljs) {\n const regex = hljs.regex;\n // XML names can have the following additional letters: https://www.w3.org/TR/xml/#NT-NameChar\n // OTHER_NAME_CHARS = /[:\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]/;\n // Element names start with NAME_START_CHAR followed by optional other Unicode letters, ASCII digits, hyphens, underscores, and periods\n // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);;\n // const XML_IDENT_RE = /[A-Z_a-z:\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]+/;\n // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);\n // however, to cater for performance and more Unicode support rely simply on the Unicode letter class\n const TAG_NAME_RE = regex.concat(/[\\p{L}_]/u, regex.optional(/[\\p{L}0-9_.-]*:/u), /[\\p{L}0-9_.-]*/u);\n const XML_IDENT_RE = /[\\p{L}0-9._:-]+/u;\n const XML_ENTITIES = {\n className: 'symbol',\n begin: /&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/\n };\n const XML_META_KEYWORDS = {\n begin: /\\s/,\n contains: [\n {\n className: 'keyword',\n begin: /#?[a-z_][a-z1-9_-]+/,\n illegal: /\\n/\n }\n ]\n };\n const XML_META_PAR_KEYWORDS = hljs.inherit(XML_META_KEYWORDS, {\n begin: /\\(/,\n end: /\\)/\n });\n const APOS_META_STRING_MODE = hljs.inherit(hljs.APOS_STRING_MODE, { className: 'string' });\n const QUOTE_META_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string' });\n const TAG_INTERNALS = {\n endsWithParent: true,\n illegal: /</,\n relevance: 0,\n contains: [\n {\n className: 'attr',\n begin: XML_IDENT_RE,\n relevance: 0\n },\n {\n begin: /=\\s*/,\n relevance: 0,\n contains: [\n {\n className: 'string',\n endsParent: true,\n variants: [\n {\n begin: /\"/,\n end: /\"/,\n contains: [ XML_ENTITIES ]\n },\n {\n begin: /'/,\n end: /'/,\n contains: [ XML_ENTITIES ]\n },\n { begin: /[^\\s\"'=<>`]+/ }\n ]\n }\n ]\n }\n ]\n };\n return {\n name: 'HTML, XML',\n aliases: [\n 'html',\n 'xhtml',\n 'rss',\n 'atom',\n 'xjb',\n 'xsd',\n 'xsl',\n 'plist',\n 'wsf',\n 'svg'\n ],\n case_insensitive: true,\n unicodeRegex: true,\n contains: [\n {\n className: 'meta',\n begin: /<![a-z]/,\n end: />/,\n relevance: 10,\n contains: [\n XML_META_KEYWORDS,\n QUOTE_META_STRING_MODE,\n APOS_META_STRING_MODE,\n XML_META_PAR_KEYWORDS,\n {\n begin: /\\[/,\n end: /\\]/,\n contains: [\n {\n className: 'meta',\n begin: /<![a-z]/,\n end: />/,\n contains: [\n XML_META_KEYWORDS,\n XML_META_PAR_KEYWORDS,\n QUOTE_META_STRING_MODE,\n APOS_META_STRING_MODE\n ]\n }\n ]\n }\n ]\n },\n hljs.COMMENT(\n /<!--/,\n /-->/,\n { relevance: 10 }\n ),\n {\n begin: /<!\\[CDATA\\[/,\n end: /\\]\\]>/,\n relevance: 10\n },\n XML_ENTITIES,\n // xml processing instructions\n {\n className: 'meta',\n end: /\\?>/,\n variants: [\n {\n begin: /<\\?xml/,\n relevance: 10,\n contains: [\n QUOTE_META_STRING_MODE\n ]\n },\n {\n begin: /<\\?[a-z][a-z0-9]+/,\n }\n ]\n\n },\n {\n className: 'tag',\n /*\n The lookahead pattern (?=...) ensures that 'begin' only matches\n '<style' as a single word, followed by a whitespace or an\n ending bracket.\n */\n begin: /<style(?=\\s|>)/,\n end: />/,\n keywords: { name: 'style' },\n contains: [ TAG_INTERNALS ],\n starts: {\n end: /<\\/style>/,\n returnEnd: true,\n subLanguage: [\n 'css',\n 'xml'\n ]\n }\n },\n {\n className: 'tag',\n // See the comment in the <style tag about the lookahead pattern\n begin: /<script(?=\\s|>)/,\n end: />/,\n keywords: { name: 'script' },\n contains: [ TAG_INTERNALS ],\n starts: {\n end: /<\\/script>/,\n returnEnd: true,\n subLanguage: [\n 'javascript',\n 'handlebars',\n 'xml'\n ]\n }\n },\n // we need this for now for jSX\n {\n className: 'tag',\n begin: /<>|<\\/>/\n },\n // open tag\n {\n className: 'tag',\n begin: regex.concat(\n /</,\n regex.lookahead(regex.concat(\n TAG_NAME_RE,\n // <tag/>\n // <tag>\n // <tag ...\n regex.either(/\\/>/, />/, /\\s/)\n ))\n ),\n end: /\\/?>/,\n contains: [\n {\n className: 'name',\n begin: TAG_NAME_RE,\n relevance: 0,\n starts: TAG_INTERNALS\n }\n ]\n },\n // close tag\n {\n className: 'tag',\n begin: regex.concat(\n /<\\//,\n regex.lookahead(regex.concat(\n TAG_NAME_RE, />/\n ))\n ),\n contains: [\n {\n className: 'name',\n begin: TAG_NAME_RE,\n relevance: 0\n },\n {\n begin: />/,\n relevance: 0,\n endsParent: true\n }\n ]\n }\n ]\n };\n}\n\nmodule.exports = xml;\n","/*\nLanguage: Bash\nAuthor: vah <vahtenberg@gmail.com>\nContributrors: Benjamin Pannell <contact@sierrasoftworks.com>\nWebsite: https://www.gnu.org/software/bash/\nCategory: common, scripting\n*/\n\n/** @type LanguageFn */\nfunction bash(hljs) {\n const regex = hljs.regex;\n const VAR = {};\n const BRACED_VAR = {\n begin: /\\$\\{/,\n end: /\\}/,\n contains: [\n \"self\",\n {\n begin: /:-/,\n contains: [ VAR ]\n } // default values\n ]\n };\n Object.assign(VAR, {\n className: 'variable',\n variants: [\n { begin: regex.concat(/\\$[\\w\\d#@][\\w\\d_]*/,\n // negative look-ahead tries to avoid matching patterns that are not\n // Perl at all like $ident$, @ident@, etc.\n `(?![\\\\w\\\\d])(?![$])`) },\n BRACED_VAR\n ]\n });\n\n const SUBST = {\n className: 'subst',\n begin: /\\$\\(/,\n end: /\\)/,\n contains: [ hljs.BACKSLASH_ESCAPE ]\n };\n const COMMENT = hljs.inherit(\n hljs.COMMENT(),\n {\n match: [\n /(^|\\s)/,\n /#.*$/\n ],\n scope: {\n 2: 'comment'\n }\n }\n );\n const HERE_DOC = {\n begin: /<<-?\\s*(?=\\w+)/,\n starts: { contains: [\n hljs.END_SAME_AS_BEGIN({\n begin: /(\\w+)/,\n end: /(\\w+)/,\n className: 'string'\n })\n ] }\n };\n const QUOTE_STRING = {\n className: 'string',\n begin: /\"/,\n end: /\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n VAR,\n SUBST\n ]\n };\n SUBST.contains.push(QUOTE_STRING);\n const ESCAPED_QUOTE = {\n match: /\\\\\"/\n };\n const APOS_STRING = {\n className: 'string',\n begin: /'/,\n end: /'/\n };\n const ESCAPED_APOS = {\n match: /\\\\'/\n };\n const ARITHMETIC = {\n begin: /\\$?\\(\\(/,\n end: /\\)\\)/,\n contains: [\n {\n begin: /\\d+#[0-9a-f]+/,\n className: \"number\"\n },\n hljs.NUMBER_MODE,\n VAR\n ]\n };\n const SH_LIKE_SHELLS = [\n \"fish\",\n \"bash\",\n \"zsh\",\n \"sh\",\n \"csh\",\n \"ksh\",\n \"tcsh\",\n \"dash\",\n \"scsh\",\n ];\n const KNOWN_SHEBANG = hljs.SHEBANG({\n binary: `(${SH_LIKE_SHELLS.join(\"|\")})`,\n relevance: 10\n });\n const FUNCTION = {\n className: 'function',\n begin: /\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,\n returnBegin: true,\n contains: [ hljs.inherit(hljs.TITLE_MODE, { begin: /\\w[\\w\\d_]*/ }) ],\n relevance: 0\n };\n\n const KEYWORDS = [\n \"if\",\n \"then\",\n \"else\",\n \"elif\",\n \"fi\",\n \"for\",\n \"while\",\n \"until\",\n \"in\",\n \"do\",\n \"done\",\n \"case\",\n \"esac\",\n \"function\",\n \"select\"\n ];\n\n const LITERALS = [\n \"true\",\n \"false\"\n ];\n\n // to consume paths to prevent keyword matches inside them\n const PATH_MODE = { match: /(\\/[a-z._-]+)+/ };\n\n // http://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n const SHELL_BUILT_INS = [\n \"break\",\n \"cd\",\n \"continue\",\n \"eval\",\n \"exec\",\n \"exit\",\n \"export\",\n \"getopts\",\n \"hash\",\n \"pwd\",\n \"readonly\",\n \"return\",\n \"shift\",\n \"test\",\n \"times\",\n \"trap\",\n \"umask\",\n \"unset\"\n ];\n\n const BASH_BUILT_INS = [\n \"alias\",\n \"bind\",\n \"builtin\",\n \"caller\",\n \"command\",\n \"declare\",\n \"echo\",\n \"enable\",\n \"help\",\n \"let\",\n \"local\",\n \"logout\",\n \"mapfile\",\n \"printf\",\n \"read\",\n \"readarray\",\n \"source\",\n \"sudo\",\n \"type\",\n \"typeset\",\n \"ulimit\",\n \"unalias\"\n ];\n\n const ZSH_BUILT_INS = [\n \"autoload\",\n \"bg\",\n \"bindkey\",\n \"bye\",\n \"cap\",\n \"chdir\",\n \"clone\",\n \"comparguments\",\n \"compcall\",\n \"compctl\",\n \"compdescribe\",\n \"compfiles\",\n \"compgroups\",\n \"compquote\",\n \"comptags\",\n \"comptry\",\n \"compvalues\",\n \"dirs\",\n \"disable\",\n \"disown\",\n \"echotc\",\n \"echoti\",\n \"emulate\",\n \"fc\",\n \"fg\",\n \"float\",\n \"functions\",\n \"getcap\",\n \"getln\",\n \"history\",\n \"integer\",\n \"jobs\",\n \"kill\",\n \"limit\",\n \"log\",\n \"noglob\",\n \"popd\",\n \"print\",\n \"pushd\",\n \"pushln\",\n \"rehash\",\n \"sched\",\n \"setcap\",\n \"setopt\",\n \"stat\",\n \"suspend\",\n \"ttyctl\",\n \"unfunction\",\n \"unhash\",\n \"unlimit\",\n \"unsetopt\",\n \"vared\",\n \"wait\",\n \"whence\",\n \"where\",\n \"which\",\n \"zcompile\",\n \"zformat\",\n \"zftp\",\n \"zle\",\n \"zmodload\",\n \"zparseopts\",\n \"zprof\",\n \"zpty\",\n \"zregexparse\",\n \"zsocket\",\n \"zstyle\",\n \"ztcp\"\n ];\n\n const GNU_CORE_UTILS = [\n \"chcon\",\n \"chgrp\",\n \"chown\",\n \"chmod\",\n \"cp\",\n \"dd\",\n \"df\",\n \"dir\",\n \"dircolors\",\n \"ln\",\n \"ls\",\n \"mkdir\",\n \"mkfifo\",\n \"mknod\",\n \"mktemp\",\n \"mv\",\n \"realpath\",\n \"rm\",\n \"rmdir\",\n \"shred\",\n \"sync\",\n \"touch\",\n \"truncate\",\n \"vdir\",\n \"b2sum\",\n \"base32\",\n \"base64\",\n \"cat\",\n \"cksum\",\n \"comm\",\n \"csplit\",\n \"cut\",\n \"expand\",\n \"fmt\",\n \"fold\",\n \"head\",\n \"join\",\n \"md5sum\",\n \"nl\",\n \"numfmt\",\n \"od\",\n \"paste\",\n \"ptx\",\n \"pr\",\n \"sha1sum\",\n \"sha224sum\",\n \"sha256sum\",\n \"sha384sum\",\n \"sha512sum\",\n \"shuf\",\n \"sort\",\n \"split\",\n \"sum\",\n \"tac\",\n \"tail\",\n \"tr\",\n \"tsort\",\n \"unexpand\",\n \"uniq\",\n \"wc\",\n \"arch\",\n \"basename\",\n \"chroot\",\n \"date\",\n \"dirname\",\n \"du\",\n \"echo\",\n \"env\",\n \"expr\",\n \"factor\",\n // \"false\", // keyword literal already\n \"groups\",\n \"hostid\",\n \"id\",\n \"link\",\n \"logname\",\n \"nice\",\n \"nohup\",\n \"nproc\",\n \"pathchk\",\n \"pinky\",\n \"printenv\",\n \"printf\",\n \"pwd\",\n \"readlink\",\n \"runcon\",\n \"seq\",\n \"sleep\",\n \"stat\",\n \"stdbuf\",\n \"stty\",\n \"tee\",\n \"test\",\n \"timeout\",\n // \"true\", // keyword literal already\n \"tty\",\n \"uname\",\n \"unlink\",\n \"uptime\",\n \"users\",\n \"who\",\n \"whoami\",\n \"yes\"\n ];\n\n return {\n name: 'Bash',\n aliases: [\n 'sh',\n 'zsh'\n ],\n keywords: {\n $pattern: /\\b[a-z][a-z0-9._-]+\\b/,\n keyword: KEYWORDS,\n literal: LITERALS,\n built_in: [\n ...SHELL_BUILT_INS,\n ...BASH_BUILT_INS,\n // Shell modifiers\n \"set\",\n \"shopt\",\n ...ZSH_BUILT_INS,\n ...GNU_CORE_UTILS\n ]\n },\n contains: [\n KNOWN_SHEBANG, // to catch known shells and boost relevancy\n hljs.SHEBANG(), // to catch unknown shells but still highlight the shebang\n FUNCTION,\n ARITHMETIC,\n COMMENT,\n HERE_DOC,\n PATH_MODE,\n QUOTE_STRING,\n ESCAPED_QUOTE,\n APOS_STRING,\n ESCAPED_APOS,\n VAR\n ]\n };\n}\n\nmodule.exports = bash;\n","/*\nLanguage: C\nCategory: common, system\nWebsite: https://en.wikipedia.org/wiki/C_(programming_language)\n*/\n\n/** @type LanguageFn */\nfunction c(hljs) {\n const regex = hljs.regex;\n // added for historic reasons because `hljs.C_LINE_COMMENT_MODE` does\n // not include such support nor can we be sure all the grammars depending\n // on it would desire this behavior\n const C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$', { contains: [ { begin: /\\\\\\n/ } ] });\n const DECLTYPE_AUTO_RE = 'decltype\\\\(auto\\\\)';\n const NAMESPACE_RE = '[a-zA-Z_]\\\\w*::';\n const TEMPLATE_ARGUMENT_RE = '<[^<>]+>';\n const FUNCTION_TYPE_RE = '('\n + DECLTYPE_AUTO_RE + '|'\n + regex.optional(NAMESPACE_RE)\n + '[a-zA-Z_]\\\\w*' + regex.optional(TEMPLATE_ARGUMENT_RE)\n + ')';\n\n\n const TYPES = {\n className: 'type',\n variants: [\n { begin: '\\\\b[a-z\\\\d_]*_t\\\\b' },\n { match: /\\batomic_[a-z]{3,6}\\b/ }\n ]\n\n };\n\n // https://en.cppreference.com/w/cpp/language/escape\n // \\\\ \\x \\xFF \\u2837 \\u00323747 \\374\n const CHARACTER_ESCAPES = '\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\\\S)';\n const STRINGS = {\n className: 'string',\n variants: [\n {\n begin: '(u8?|U|L)?\"',\n end: '\"',\n illegal: '\\\\n',\n contains: [ hljs.BACKSLASH_ESCAPE ]\n },\n {\n begin: '(u8?|U|L)?\\'(' + CHARACTER_ESCAPES + \"|.)\",\n end: '\\'',\n illegal: '.'\n },\n hljs.END_SAME_AS_BEGIN({\n begin: /(?:u8?|U|L)?R\"([^()\\\\ ]{0,16})\\(/,\n end: /\\)([^()\\\\ ]{0,16})\"/\n })\n ]\n };\n\n const NUMBERS = {\n className: 'number',\n variants: [\n { begin: '\\\\b(0b[01\\']+)' },\n { begin: '(-?)\\\\b([\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)' },\n { begin: '(-?)(\\\\b0[xX][a-fA-F0-9\\']+|(\\\\b[\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)([eE][-+]?[\\\\d\\']+)?)' }\n ],\n relevance: 0\n };\n\n const PREPROCESSOR = {\n className: 'meta',\n begin: /#\\s*[a-z]+\\b/,\n end: /$/,\n keywords: { keyword:\n 'if else elif endif define undef warning error line '\n + 'pragma _Pragma ifdef ifndef elifdef elifndef include' },\n contains: [\n {\n begin: /\\\\\\n/,\n relevance: 0\n },\n hljs.inherit(STRINGS, { className: 'string' }),\n {\n className: 'string',\n begin: /<.*?>/\n },\n C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n };\n\n const TITLE_MODE = {\n className: 'title',\n begin: regex.optional(NAMESPACE_RE) + hljs.IDENT_RE,\n relevance: 0\n };\n\n const FUNCTION_TITLE = regex.optional(NAMESPACE_RE) + hljs.IDENT_RE + '\\\\s*\\\\(';\n\n const C_KEYWORDS = [\n \"asm\",\n \"auto\",\n \"break\",\n \"case\",\n \"continue\",\n \"default\",\n \"do\",\n \"else\",\n \"enum\",\n \"extern\",\n \"for\",\n \"fortran\",\n \"goto\",\n \"if\",\n \"inline\",\n \"register\",\n \"restrict\",\n \"return\",\n \"sizeof\",\n \"typeof\",\n \"typeof_unqual\",\n \"struct\",\n \"switch\",\n \"typedef\",\n \"union\",\n \"volatile\",\n \"while\",\n \"_Alignas\",\n \"_Alignof\",\n \"_Atomic\",\n \"_Generic\",\n \"_Noreturn\",\n \"_Static_assert\",\n \"_Thread_local\",\n // aliases\n \"alignas\",\n \"alignof\",\n \"noreturn\",\n \"static_assert\",\n \"thread_local\",\n // not a C keyword but is, for all intents and purposes, treated exactly like one.\n \"_Pragma\"\n ];\n\n const C_TYPES = [\n \"float\",\n \"double\",\n \"signed\",\n \"unsigned\",\n \"int\",\n \"short\",\n \"long\",\n \"char\",\n \"void\",\n \"_Bool\",\n \"_BitInt\",\n \"_Complex\",\n \"_Imaginary\",\n \"_Decimal32\",\n \"_Decimal64\",\n \"_Decimal96\",\n \"_Decimal128\",\n \"_Decimal64x\",\n \"_Decimal128x\",\n \"_Float16\",\n \"_Float32\",\n \"_Float64\",\n \"_Float128\",\n \"_Float32x\",\n \"_Float64x\",\n \"_Float128x\",\n // modifiers\n \"const\",\n \"static\",\n \"constexpr\",\n // aliases\n \"complex\",\n \"bool\",\n \"imaginary\"\n ];\n\n const KEYWORDS = {\n keyword: C_KEYWORDS,\n type: C_TYPES,\n literal: 'true false NULL',\n // TODO: apply hinting work similar to what was done in cpp.js\n built_in: 'std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream '\n + 'auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set '\n + 'unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos '\n + 'asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp '\n + 'fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper '\n + 'isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow '\n + 'printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp '\n + 'strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan '\n + 'vfprintf vprintf vsprintf endl initializer_list unique_ptr',\n };\n\n const EXPRESSION_CONTAINS = [\n PREPROCESSOR,\n TYPES,\n C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n NUMBERS,\n STRINGS\n ];\n\n const EXPRESSION_CONTEXT = {\n // This mode covers expression context where we can't expect a function\n // definition and shouldn't highlight anything that looks like one:\n // `return some()`, `else if()`, `(x*sum(1, 2))`\n variants: [\n {\n begin: /=/,\n end: /;/\n },\n {\n begin: /\\(/,\n end: /\\)/\n },\n {\n beginKeywords: 'new throw return else',\n end: /;/\n }\n ],\n keywords: KEYWORDS,\n contains: EXPRESSION_CONTAINS.concat([\n {\n begin: /\\(/,\n end: /\\)/,\n keywords: KEYWORDS,\n contains: EXPRESSION_CONTAINS.concat([ 'self' ]),\n relevance: 0\n }\n ]),\n relevance: 0\n };\n\n const FUNCTION_DECLARATION = {\n begin: '(' + FUNCTION_TYPE_RE + '[\\\\*&\\\\s]+)+' + FUNCTION_TITLE,\n returnBegin: true,\n end: /[{;=]/,\n excludeEnd: true,\n keywords: KEYWORDS,\n illegal: /[^\\w\\s\\*&:<>.]/,\n contains: [\n { // to prevent it from being confused as the function title\n begin: DECLTYPE_AUTO_RE,\n keywords: KEYWORDS,\n relevance: 0\n },\n {\n begin: FUNCTION_TITLE,\n returnBegin: true,\n contains: [ hljs.inherit(TITLE_MODE, { className: \"title.function\" }) ],\n relevance: 0\n },\n // allow for multiple declarations, e.g.:\n // extern void f(int), g(char);\n {\n relevance: 0,\n match: /,/\n },\n {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n keywords: KEYWORDS,\n relevance: 0,\n contains: [\n C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n STRINGS,\n NUMBERS,\n TYPES,\n // Count matching parentheses.\n {\n begin: /\\(/,\n end: /\\)/,\n keywords: KEYWORDS,\n relevance: 0,\n contains: [\n 'self',\n C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n STRINGS,\n NUMBERS,\n TYPES\n ]\n }\n ]\n },\n TYPES,\n C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n PREPROCESSOR\n ]\n };\n\n return {\n name: \"C\",\n aliases: [ 'h' ],\n keywords: KEYWORDS,\n // Until differentiations are added between `c` and `cpp`, `c` will\n // not be auto-detected to avoid auto-detect conflicts between C and C++\n disableAutodetect: true,\n illegal: '</',\n contains: [].concat(\n EXPRESSION_CONTEXT,\n FUNCTION_DECLARATION,\n EXPRESSION_CONTAINS,\n [\n PREPROCESSOR,\n {\n begin: hljs.IDENT_RE + '::',\n keywords: KEYWORDS\n },\n {\n className: 'class',\n beginKeywords: 'enum class struct union',\n end: /[{;:<>=]/,\n contains: [\n { beginKeywords: \"final class struct\" },\n hljs.TITLE_MODE\n ]\n }\n ]),\n exports: {\n preprocessor: PREPROCESSOR,\n strings: STRINGS,\n keywords: KEYWORDS\n }\n };\n}\n\nmodule.exports = c;\n","/*\nLanguage: C++\nCategory: common, system\nWebsite: https://isocpp.org\n*/\n\n/** @type LanguageFn */\nfunction cpp(hljs) {\n const regex = hljs.regex;\n // added for historic reasons because `hljs.C_LINE_COMMENT_MODE` does\n // not include such support nor can we be sure all the grammars depending\n // on it would desire this behavior\n const C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$', { contains: [ { begin: /\\\\\\n/ } ] });\n const DECLTYPE_AUTO_RE = 'decltype\\\\(auto\\\\)';\n const NAMESPACE_RE = '[a-zA-Z_]\\\\w*::';\n const TEMPLATE_ARGUMENT_RE = '<[^<>]+>';\n const FUNCTION_TYPE_RE = '(?!struct)('\n + DECLTYPE_AUTO_RE + '|'\n + regex.optional(NAMESPACE_RE)\n + '[a-zA-Z_]\\\\w*' + regex.optional(TEMPLATE_ARGUMENT_RE)\n + ')';\n\n const CPP_PRIMITIVE_TYPES = {\n className: 'type',\n begin: '\\\\b[a-z\\\\d_]*_t\\\\b'\n };\n\n // https://en.cppreference.com/w/cpp/language/escape\n // \\\\ \\x \\xFF \\u2837 \\u00323747 \\374\n const CHARACTER_ESCAPES = '\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\\\S)';\n const STRINGS = {\n className: 'string',\n variants: [\n {\n begin: '(u8?|U|L)?\"',\n end: '\"',\n illegal: '\\\\n',\n contains: [ hljs.BACKSLASH_ESCAPE ]\n },\n {\n begin: '(u8?|U|L)?\\'(' + CHARACTER_ESCAPES + '|.)',\n end: '\\'',\n illegal: '.'\n },\n hljs.END_SAME_AS_BEGIN({\n begin: /(?:u8?|U|L)?R\"([^()\\\\ ]{0,16})\\(/,\n end: /\\)([^()\\\\ ]{0,16})\"/\n })\n ]\n };\n\n const NUMBERS = {\n className: 'number',\n variants: [\n // Floating-point literal.\n { begin:\n \"[+-]?(?:\" // Leading sign.\n // Decimal.\n + \"(?:\"\n +\"[0-9](?:'?[0-9])*\\\\.(?:[0-9](?:'?[0-9])*)?\"\n + \"|\\\\.[0-9](?:'?[0-9])*\"\n + \")(?:[Ee][+-]?[0-9](?:'?[0-9])*)?\"\n + \"|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*\"\n // Hexadecimal.\n + \"|0[Xx](?:\"\n +\"[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?\"\n + \"|\\\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*\"\n + \")[Pp][+-]?[0-9](?:'?[0-9])*\"\n + \")(?:\" // Literal suffixes.\n + \"[Ff](?:16|32|64|128)?\"\n + \"|(BF|bf)16\"\n + \"|[Ll]\"\n + \"|\" // Literal suffix is optional.\n + \")\"\n },\n // Integer literal.\n { begin:\n \"[+-]?\\\\b(?:\" // Leading sign.\n + \"0[Bb][01](?:'?[01])*\" // Binary.\n + \"|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*\" // Hexadecimal.\n + \"|0(?:'?[0-7])*\" // Octal or just a lone zero.\n + \"|[1-9](?:'?[0-9])*\" // Decimal.\n + \")(?:\" // Literal suffixes.\n + \"[Uu](?:LL?|ll?)\"\n + \"|[Uu][Zz]?\"\n + \"|(?:LL?|ll?)[Uu]?\"\n + \"|[Zz][Uu]\"\n + \"|\" // Literal suffix is optional.\n + \")\"\n // Note: there are user-defined literal suffixes too, but perhaps having the custom suffix not part of the\n // literal highlight actually makes it stand out more.\n }\n ],\n relevance: 0\n };\n\n const PREPROCESSOR = {\n className: 'meta',\n begin: /#\\s*[a-z]+\\b/,\n end: /$/,\n keywords: { keyword:\n 'if else elif endif define undef warning error line '\n + 'pragma _Pragma ifdef ifndef include' },\n contains: [\n {\n begin: /\\\\\\n/,\n relevance: 0\n },\n hljs.inherit(STRINGS, { className: 'string' }),\n {\n className: 'string',\n begin: /<.*?>/\n },\n C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n };\n\n const TITLE_MODE = {\n className: 'title',\n begin: regex.optional(NAMESPACE_RE) + hljs.IDENT_RE,\n relevance: 0\n };\n\n const FUNCTION_TITLE = regex.optional(NAMESPACE_RE) + hljs.IDENT_RE + '\\\\s*\\\\(';\n\n // https://en.cppreference.com/w/cpp/keyword\n const RESERVED_KEYWORDS = [\n 'alignas',\n 'alignof',\n 'and',\n 'and_eq',\n 'asm',\n 'atomic_cancel',\n 'atomic_commit',\n 'atomic_noexcept',\n 'auto',\n 'bitand',\n 'bitor',\n 'break',\n 'case',\n 'catch',\n 'class',\n 'co_await',\n 'co_return',\n 'co_yield',\n 'compl',\n 'concept',\n 'const_cast|10',\n 'consteval',\n 'constexpr',\n 'constinit',\n 'continue',\n 'decltype',\n 'default',\n 'delete',\n 'do',\n 'dynamic_cast|10',\n 'else',\n 'enum',\n 'explicit',\n 'export',\n 'extern',\n 'false',\n 'final',\n 'for',\n 'friend',\n 'goto',\n 'if',\n 'import',\n 'inline',\n 'module',\n 'mutable',\n 'namespace',\n 'new',\n 'noexcept',\n 'not',\n 'not_eq',\n 'nullptr',\n 'operator',\n 'or',\n 'or_eq',\n 'override',\n 'private',\n 'protected',\n 'public',\n 'reflexpr',\n 'register',\n 'reinterpret_cast|10',\n 'requires',\n 'return',\n 'sizeof',\n 'static_assert',\n 'static_cast|10',\n 'struct',\n 'switch',\n 'synchronized',\n 'template',\n 'this',\n 'thread_local',\n 'throw',\n 'transaction_safe',\n 'transaction_safe_dynamic',\n 'true',\n 'try',\n 'typedef',\n 'typeid',\n 'typename',\n 'union',\n 'using',\n 'virtual',\n 'volatile',\n 'while',\n 'xor',\n 'xor_eq'\n ];\n\n // https://en.cppreference.com/w/cpp/keyword\n const RESERVED_TYPES = [\n 'bool',\n 'char',\n 'char16_t',\n 'char32_t',\n 'char8_t',\n 'double',\n 'float',\n 'int',\n 'long',\n 'short',\n 'void',\n 'wchar_t',\n 'unsigned',\n 'signed',\n 'const',\n 'static'\n ];\n\n const TYPE_HINTS = [\n 'any',\n 'auto_ptr',\n 'barrier',\n 'binary_semaphore',\n 'bitset',\n 'complex',\n 'condition_variable',\n 'condition_variable_any',\n 'counting_semaphore',\n 'deque',\n 'false_type',\n 'future',\n 'imaginary',\n 'initializer_list',\n 'istringstream',\n 'jthread',\n 'latch',\n 'lock_guard',\n 'multimap',\n 'multiset',\n 'mutex',\n 'optional',\n 'ostringstream',\n 'packaged_task',\n 'pair',\n 'promise',\n 'priority_queue',\n 'queue',\n 'recursive_mutex',\n 'recursive_timed_mutex',\n 'scoped_lock',\n 'set',\n 'shared_future',\n 'shared_lock',\n 'shared_mutex',\n 'shared_timed_mutex',\n 'shared_ptr',\n 'stack',\n 'string_view',\n 'stringstream',\n 'timed_mutex',\n 'thread',\n 'true_type',\n 'tuple',\n 'unique_lock',\n 'unique_ptr',\n 'unordered_map',\n 'unordered_multimap',\n 'unordered_multiset',\n 'unordered_set',\n 'variant',\n 'vector',\n 'weak_ptr',\n 'wstring',\n 'wstring_view'\n ];\n\n const FUNCTION_HINTS = [\n 'abort',\n 'abs',\n 'acos',\n 'apply',\n 'as_const',\n 'asin',\n 'atan',\n 'atan2',\n 'calloc',\n 'ceil',\n 'cerr',\n 'cin',\n 'clog',\n 'cos',\n 'cosh',\n 'cout',\n 'declval',\n 'endl',\n 'exchange',\n 'exit',\n 'exp',\n 'fabs',\n 'floor',\n 'fmod',\n 'forward',\n 'fprintf',\n 'fputs',\n 'free',\n 'frexp',\n 'fscanf',\n 'future',\n 'invoke',\n 'isalnum',\n 'isalpha',\n 'iscntrl',\n 'isdigit',\n 'isgraph',\n 'islower',\n 'isprint',\n 'ispunct',\n 'isspace',\n 'isupper',\n 'isxdigit',\n 'labs',\n 'launder',\n 'ldexp',\n 'log',\n 'log10',\n 'make_pair',\n 'make_shared',\n 'make_shared_for_overwrite',\n 'make_tuple',\n 'make_unique',\n 'malloc',\n 'memchr',\n 'memcmp',\n 'memcpy',\n 'memset',\n 'modf',\n 'move',\n 'pow',\n 'printf',\n 'putchar',\n 'puts',\n 'realloc',\n 'scanf',\n 'sin',\n 'sinh',\n 'snprintf',\n 'sprintf',\n 'sqrt',\n 'sscanf',\n 'std',\n 'stderr',\n 'stdin',\n 'stdout',\n 'strcat',\n 'strchr',\n 'strcmp',\n 'strcpy',\n 'strcspn',\n 'strlen',\n 'strncat',\n 'strncmp',\n 'strncpy',\n 'strpbrk',\n 'strrchr',\n 'strspn',\n 'strstr',\n 'swap',\n 'tan',\n 'tanh',\n 'terminate',\n 'to_underlying',\n 'tolower',\n 'toupper',\n 'vfprintf',\n 'visit',\n 'vprintf',\n 'vsprintf'\n ];\n\n const LITERALS = [\n 'NULL',\n 'false',\n 'nullopt',\n 'nullptr',\n 'true'\n ];\n\n // https://en.cppreference.com/w/cpp/keyword\n const BUILT_IN = [ '_Pragma' ];\n\n const CPP_KEYWORDS = {\n type: RESERVED_TYPES,\n keyword: RESERVED_KEYWORDS,\n literal: LITERALS,\n built_in: BUILT_IN,\n _type_hints: TYPE_HINTS\n };\n\n const FUNCTION_DISPATCH = {\n className: 'function.dispatch',\n relevance: 0,\n keywords: {\n // Only for relevance, not highlighting.\n _hint: FUNCTION_HINTS },\n begin: regex.concat(\n /\\b/,\n /(?!decltype)/,\n /(?!if)/,\n /(?!for)/,\n /(?!switch)/,\n /(?!while)/,\n hljs.IDENT_RE,\n regex.lookahead(/(<[^<>]+>|)\\s*\\(/))\n };\n\n const EXPRESSION_CONTAINS = [\n FUNCTION_DISPATCH,\n PREPROCESSOR,\n CPP_PRIMITIVE_TYPES,\n C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n NUMBERS,\n STRINGS\n ];\n\n const EXPRESSION_CONTEXT = {\n // This mode covers expression context where we can't expect a function\n // definition and shouldn't highlight anything that looks like one:\n // `return some()`, `else if()`, `(x*sum(1, 2))`\n variants: [\n {\n begin: /=/,\n end: /;/\n },\n {\n begin: /\\(/,\n end: /\\)/\n },\n {\n beginKeywords: 'new throw return else',\n end: /;/\n }\n ],\n keywords: CPP_KEYWORDS,\n contains: EXPRESSION_CONTAINS.concat([\n {\n begin: /\\(/,\n end: /\\)/,\n keywords: CPP_KEYWORDS,\n contains: EXPRESSION_CONTAINS.concat([ 'self' ]),\n relevance: 0\n }\n ]),\n relevance: 0\n };\n\n const FUNCTION_DECLARATION = {\n className: 'function',\n begin: '(' + FUNCTION_TYPE_RE + '[\\\\*&\\\\s]+)+' + FUNCTION_TITLE,\n returnBegin: true,\n end: /[{;=]/,\n excludeEnd: true,\n keywords: CPP_KEYWORDS,\n illegal: /[^\\w\\s\\*&:<>.]/,\n contains: [\n { // to prevent it from being confused as the function title\n begin: DECLTYPE_AUTO_RE,\n keywords: CPP_KEYWORDS,\n relevance: 0\n },\n {\n begin: FUNCTION_TITLE,\n returnBegin: true,\n contains: [ TITLE_MODE ],\n relevance: 0\n },\n // needed because we do not have look-behind on the below rule\n // to prevent it from grabbing the final : in a :: pair\n {\n begin: /::/,\n relevance: 0\n },\n // initializers\n {\n begin: /:/,\n endsWithParent: true,\n contains: [\n STRINGS,\n NUMBERS\n ]\n },\n // allow for multiple declarations, e.g.:\n // extern void f(int), g(char);\n {\n relevance: 0,\n match: /,/\n },\n {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n keywords: CPP_KEYWORDS,\n relevance: 0,\n contains: [\n C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n STRINGS,\n NUMBERS,\n CPP_PRIMITIVE_TYPES,\n // Count matching parentheses.\n {\n begin: /\\(/,\n end: /\\)/,\n keywords: CPP_KEYWORDS,\n relevance: 0,\n contains: [\n 'self',\n C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n STRINGS,\n NUMBERS,\n CPP_PRIMITIVE_TYPES\n ]\n }\n ]\n },\n CPP_PRIMITIVE_TYPES,\n C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n PREPROCESSOR\n ]\n };\n\n return {\n name: 'C++',\n aliases: [\n 'cc',\n 'c++',\n 'h++',\n 'hpp',\n 'hh',\n 'hxx',\n 'cxx'\n ],\n keywords: CPP_KEYWORDS,\n illegal: '</',\n classNameAliases: { 'function.dispatch': 'built_in' },\n contains: [].concat(\n EXPRESSION_CONTEXT,\n FUNCTION_DECLARATION,\n FUNCTION_DISPATCH,\n EXPRESSION_CONTAINS,\n [\n PREPROCESSOR,\n { // containers: ie, `vector <int> rooms (9);`\n begin: '\\\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function)\\\\s*<(?!<)',\n end: '>',\n keywords: CPP_KEYWORDS,\n contains: [\n 'self',\n CPP_PRIMITIVE_TYPES\n ]\n },\n {\n begin: hljs.IDENT_RE + '::',\n keywords: CPP_KEYWORDS\n },\n {\n match: [\n // extra complexity to deal with `enum class` and `enum struct`\n /\\b(?:enum(?:\\s+(?:class|struct))?|class|struct|union)/,\n /\\s+/,\n /\\w+/\n ],\n className: {\n 1: 'keyword',\n 3: 'title.class'\n }\n }\n ])\n };\n}\n\nmodule.exports = cpp;\n","/*\nLanguage: C#\nAuthor: Jason Diamond <jason@diamond.name>\nContributor: Nicolas LLOBERA <nllobera@gmail.com>, Pieter Vantorre <pietervantorre@gmail.com>, David Pine <david.pine@microsoft.com>\nWebsite: https://docs.microsoft.com/dotnet/csharp/\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction csharp(hljs) {\n const BUILT_IN_KEYWORDS = [\n 'bool',\n 'byte',\n 'char',\n 'decimal',\n 'delegate',\n 'double',\n 'dynamic',\n 'enum',\n 'float',\n 'int',\n 'long',\n 'nint',\n 'nuint',\n 'object',\n 'sbyte',\n 'short',\n 'string',\n 'ulong',\n 'uint',\n 'ushort'\n ];\n const FUNCTION_MODIFIERS = [\n 'public',\n 'private',\n 'protected',\n 'static',\n 'internal',\n 'protected',\n 'abstract',\n 'async',\n 'extern',\n 'override',\n 'unsafe',\n 'virtual',\n 'new',\n 'sealed',\n 'partial'\n ];\n const LITERAL_KEYWORDS = [\n 'default',\n 'false',\n 'null',\n 'true'\n ];\n const NORMAL_KEYWORDS = [\n 'abstract',\n 'as',\n 'base',\n 'break',\n 'case',\n 'catch',\n 'class',\n 'const',\n 'continue',\n 'do',\n 'else',\n 'event',\n 'explicit',\n 'extern',\n 'finally',\n 'fixed',\n 'for',\n 'foreach',\n 'goto',\n 'if',\n 'implicit',\n 'in',\n 'interface',\n 'internal',\n 'is',\n 'lock',\n 'namespace',\n 'new',\n 'operator',\n 'out',\n 'override',\n 'params',\n 'private',\n 'protected',\n 'public',\n 'readonly',\n 'record',\n 'ref',\n 'return',\n 'scoped',\n 'sealed',\n 'sizeof',\n 'stackalloc',\n 'static',\n 'struct',\n 'switch',\n 'this',\n 'throw',\n 'try',\n 'typeof',\n 'unchecked',\n 'unsafe',\n 'using',\n 'virtual',\n 'void',\n 'volatile',\n 'while'\n ];\n const CONTEXTUAL_KEYWORDS = [\n 'add',\n 'alias',\n 'and',\n 'ascending',\n 'async',\n 'await',\n 'by',\n 'descending',\n 'equals',\n 'from',\n 'get',\n 'global',\n 'group',\n 'init',\n 'into',\n 'join',\n 'let',\n 'nameof',\n 'not',\n 'notnull',\n 'on',\n 'or',\n 'orderby',\n 'partial',\n 'remove',\n 'select',\n 'set',\n 'unmanaged',\n 'value|0',\n 'var',\n 'when',\n 'where',\n 'with',\n 'yield'\n ];\n\n const KEYWORDS = {\n keyword: NORMAL_KEYWORDS.concat(CONTEXTUAL_KEYWORDS),\n built_in: BUILT_IN_KEYWORDS,\n literal: LITERAL_KEYWORDS\n };\n const TITLE_MODE = hljs.inherit(hljs.TITLE_MODE, { begin: '[a-zA-Z](\\\\.?\\\\w)*' });\n const NUMBERS = {\n className: 'number',\n variants: [\n { begin: '\\\\b(0b[01\\']+)' },\n { begin: '(-?)\\\\b([\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)(u|U|l|L|ul|UL|f|F|b|B)' },\n { begin: '(-?)(\\\\b0[xX][a-fA-F0-9\\']+|(\\\\b[\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)([eE][-+]?[\\\\d\\']+)?)' }\n ],\n relevance: 0\n };\n const RAW_STRING = {\n className: 'string',\n begin: /\"\"\"(\"*)(?!\")(.|\\n)*?\"\"\"\\1/,\n relevance: 1\n };\n const VERBATIM_STRING = {\n className: 'string',\n begin: '@\"',\n end: '\"',\n contains: [ { begin: '\"\"' } ]\n };\n const VERBATIM_STRING_NO_LF = hljs.inherit(VERBATIM_STRING, { illegal: /\\n/ });\n const SUBST = {\n className: 'subst',\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS\n };\n const SUBST_NO_LF = hljs.inherit(SUBST, { illegal: /\\n/ });\n const INTERPOLATED_STRING = {\n className: 'string',\n begin: /\\$\"/,\n end: '\"',\n illegal: /\\n/,\n contains: [\n { begin: /\\{\\{/ },\n { begin: /\\}\\}/ },\n hljs.BACKSLASH_ESCAPE,\n SUBST_NO_LF\n ]\n };\n const INTERPOLATED_VERBATIM_STRING = {\n className: 'string',\n begin: /\\$@\"/,\n end: '\"',\n contains: [\n { begin: /\\{\\{/ },\n { begin: /\\}\\}/ },\n { begin: '\"\"' },\n SUBST\n ]\n };\n const INTERPOLATED_VERBATIM_STRING_NO_LF = hljs.inherit(INTERPOLATED_VERBATIM_STRING, {\n illegal: /\\n/,\n contains: [\n { begin: /\\{\\{/ },\n { begin: /\\}\\}/ },\n { begin: '\"\"' },\n SUBST_NO_LF\n ]\n });\n SUBST.contains = [\n INTERPOLATED_VERBATIM_STRING,\n INTERPOLATED_STRING,\n VERBATIM_STRING,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n NUMBERS,\n hljs.C_BLOCK_COMMENT_MODE\n ];\n SUBST_NO_LF.contains = [\n INTERPOLATED_VERBATIM_STRING_NO_LF,\n INTERPOLATED_STRING,\n VERBATIM_STRING_NO_LF,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n NUMBERS,\n hljs.inherit(hljs.C_BLOCK_COMMENT_MODE, { illegal: /\\n/ })\n ];\n const STRING = { variants: [\n RAW_STRING,\n INTERPOLATED_VERBATIM_STRING,\n INTERPOLATED_STRING,\n VERBATIM_STRING,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ] };\n\n const GENERIC_MODIFIER = {\n begin: \"<\",\n end: \">\",\n contains: [\n { beginKeywords: \"in out\" },\n TITLE_MODE\n ]\n };\n const TYPE_IDENT_RE = hljs.IDENT_RE + '(<' + hljs.IDENT_RE + '(\\\\s*,\\\\s*' + hljs.IDENT_RE + ')*>)?(\\\\[\\\\])?';\n const AT_IDENTIFIER = {\n // prevents expressions like `@class` from incorrect flagging\n // `class` as a keyword\n begin: \"@\" + hljs.IDENT_RE,\n relevance: 0\n };\n\n return {\n name: 'C#',\n aliases: [\n 'cs',\n 'c#'\n ],\n keywords: KEYWORDS,\n illegal: /::/,\n contains: [\n hljs.COMMENT(\n '///',\n '$',\n {\n returnBegin: true,\n contains: [\n {\n className: 'doctag',\n variants: [\n {\n begin: '///',\n relevance: 0\n },\n { begin: '<!--|-->' },\n {\n begin: '</?',\n end: '>'\n }\n ]\n }\n ]\n }\n ),\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n {\n className: 'meta',\n begin: '#',\n end: '$',\n keywords: { keyword: 'if else elif endif define undef warning error line region endregion pragma checksum' }\n },\n STRING,\n NUMBERS,\n {\n beginKeywords: 'class interface',\n relevance: 0,\n end: /[{;=]/,\n illegal: /[^\\s:,]/,\n contains: [\n { beginKeywords: \"where class\" },\n TITLE_MODE,\n GENERIC_MODIFIER,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n {\n beginKeywords: 'namespace',\n relevance: 0,\n end: /[{;=]/,\n illegal: /[^\\s:]/,\n contains: [\n TITLE_MODE,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n {\n beginKeywords: 'record',\n relevance: 0,\n end: /[{;=]/,\n illegal: /[^\\s:]/,\n contains: [\n TITLE_MODE,\n GENERIC_MODIFIER,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n {\n // [Attributes(\"\")]\n className: 'meta',\n begin: '^\\\\s*\\\\[(?=[\\\\w])',\n excludeBegin: true,\n end: '\\\\]',\n excludeEnd: true,\n contains: [\n {\n className: 'string',\n begin: /\"/,\n end: /\"/\n }\n ]\n },\n {\n // Expression keywords prevent 'keyword Name(...)' from being\n // recognized as a function definition\n beginKeywords: 'new return throw await else',\n relevance: 0\n },\n {\n className: 'function',\n begin: '(' + TYPE_IDENT_RE + '\\\\s+)+' + hljs.IDENT_RE + '\\\\s*(<[^=]+>\\\\s*)?\\\\(',\n returnBegin: true,\n end: /\\s*[{;=]/,\n excludeEnd: true,\n keywords: KEYWORDS,\n contains: [\n // prevents these from being highlighted `title`\n {\n beginKeywords: FUNCTION_MODIFIERS.join(\" \"),\n relevance: 0\n },\n {\n begin: hljs.IDENT_RE + '\\\\s*(<[^=]+>\\\\s*)?\\\\(',\n returnBegin: true,\n contains: [\n hljs.TITLE_MODE,\n GENERIC_MODIFIER\n ],\n relevance: 0\n },\n { match: /\\(\\)/ },\n {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS,\n relevance: 0,\n contains: [\n STRING,\n NUMBERS,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n AT_IDENTIFIER\n ]\n };\n}\n\nmodule.exports = csharp;\n","const MODES = (hljs) => {\n return {\n IMPORTANT: {\n scope: 'meta',\n begin: '!important'\n },\n BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,\n HEXCOLOR: {\n scope: 'number',\n begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\b/\n },\n FUNCTION_DISPATCH: {\n className: \"built_in\",\n begin: /[\\w-]+(?=\\()/\n },\n ATTRIBUTE_SELECTOR_MODE: {\n scope: 'selector-attr',\n begin: /\\[/,\n end: /\\]/,\n illegal: '$',\n contains: [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ]\n },\n CSS_NUMBER_MODE: {\n scope: 'number',\n begin: hljs.NUMBER_RE + '(' +\n '%|em|ex|ch|rem' +\n '|vw|vh|vmin|vmax' +\n '|cm|mm|in|pt|pc|px' +\n '|deg|grad|rad|turn' +\n '|s|ms' +\n '|Hz|kHz' +\n '|dpi|dpcm|dppx' +\n ')?',\n relevance: 0\n },\n CSS_VARIABLE: {\n className: \"attr\",\n begin: /--[A-Za-z_][A-Za-z0-9_-]*/\n }\n };\n};\n\nconst HTML_TAGS = [\n 'a',\n 'abbr',\n 'address',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'blockquote',\n 'body',\n 'button',\n 'canvas',\n 'caption',\n 'cite',\n 'code',\n 'dd',\n 'del',\n 'details',\n 'dfn',\n 'div',\n 'dl',\n 'dt',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'html',\n 'i',\n 'iframe',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'mark',\n 'menu',\n 'nav',\n 'object',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'picture',\n 'q',\n 'quote',\n 'samp',\n 'section',\n 'select',\n 'source',\n 'span',\n 'strong',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'ul',\n 'var',\n 'video'\n];\n\nconst SVG_TAGS = [\n 'defs',\n 'g',\n 'marker',\n 'mask',\n 'pattern',\n 'svg',\n 'switch',\n 'symbol',\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feFlood',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMorphology',\n 'feOffset',\n 'feSpecularLighting',\n 'feTile',\n 'feTurbulence',\n 'linearGradient',\n 'radialGradient',\n 'stop',\n 'circle',\n 'ellipse',\n 'image',\n 'line',\n 'path',\n 'polygon',\n 'polyline',\n 'rect',\n 'text',\n 'use',\n 'textPath',\n 'tspan',\n 'foreignObject',\n 'clipPath'\n];\n\nconst TAGS = [\n ...HTML_TAGS,\n ...SVG_TAGS,\n];\n\n// Sorting, then reversing makes sure longer attributes/elements like\n// `font-weight` are matched fully instead of getting false positives on say `font`\n\nconst MEDIA_FEATURES = [\n 'any-hover',\n 'any-pointer',\n 'aspect-ratio',\n 'color',\n 'color-gamut',\n 'color-index',\n 'device-aspect-ratio',\n 'device-height',\n 'device-width',\n 'display-mode',\n 'forced-colors',\n 'grid',\n 'height',\n 'hover',\n 'inverted-colors',\n 'monochrome',\n 'orientation',\n 'overflow-block',\n 'overflow-inline',\n 'pointer',\n 'prefers-color-scheme',\n 'prefers-contrast',\n 'prefers-reduced-motion',\n 'prefers-reduced-transparency',\n 'resolution',\n 'scan',\n 'scripting',\n 'update',\n 'width',\n // TODO: find a better solution?\n 'min-width',\n 'max-width',\n 'min-height',\n 'max-height'\n].sort().reverse();\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\nconst PSEUDO_CLASSES = [\n 'active',\n 'any-link',\n 'blank',\n 'checked',\n 'current',\n 'default',\n 'defined',\n 'dir', // dir()\n 'disabled',\n 'drop',\n 'empty',\n 'enabled',\n 'first',\n 'first-child',\n 'first-of-type',\n 'fullscreen',\n 'future',\n 'focus',\n 'focus-visible',\n 'focus-within',\n 'has', // has()\n 'host', // host or host()\n 'host-context', // host-context()\n 'hover',\n 'indeterminate',\n 'in-range',\n 'invalid',\n 'is', // is()\n 'lang', // lang()\n 'last-child',\n 'last-of-type',\n 'left',\n 'link',\n 'local-link',\n 'not', // not()\n 'nth-child', // nth-child()\n 'nth-col', // nth-col()\n 'nth-last-child', // nth-last-child()\n 'nth-last-col', // nth-last-col()\n 'nth-last-of-type', //nth-last-of-type()\n 'nth-of-type', //nth-of-type()\n 'only-child',\n 'only-of-type',\n 'optional',\n 'out-of-range',\n 'past',\n 'placeholder-shown',\n 'read-only',\n 'read-write',\n 'required',\n 'right',\n 'root',\n 'scope',\n 'target',\n 'target-within',\n 'user-invalid',\n 'valid',\n 'visited',\n 'where' // where()\n].sort().reverse();\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\nconst PSEUDO_ELEMENTS = [\n 'after',\n 'backdrop',\n 'before',\n 'cue',\n 'cue-region',\n 'first-letter',\n 'first-line',\n 'grammar-error',\n 'marker',\n 'part',\n 'placeholder',\n 'selection',\n 'slotted',\n 'spelling-error'\n].sort().reverse();\n\nconst ATTRIBUTES = [\n 'accent-color',\n 'align-content',\n 'align-items',\n 'align-self',\n 'alignment-baseline',\n 'all',\n 'animation',\n 'animation-delay',\n 'animation-direction',\n 'animation-duration',\n 'animation-fill-mode',\n 'animation-iteration-count',\n 'animation-name',\n 'animation-play-state',\n 'animation-timing-function',\n 'appearance',\n 'backface-visibility',\n 'background',\n 'background-attachment',\n 'background-blend-mode',\n 'background-clip',\n 'background-color',\n 'background-image',\n 'background-origin',\n 'background-position',\n 'background-repeat',\n 'background-size',\n 'baseline-shift',\n 'block-size',\n 'border',\n 'border-block',\n 'border-block-color',\n 'border-block-end',\n 'border-block-end-color',\n 'border-block-end-style',\n 'border-block-end-width',\n 'border-block-start',\n 'border-block-start-color',\n 'border-block-start-style',\n 'border-block-start-width',\n 'border-block-style',\n 'border-block-width',\n 'border-bottom',\n 'border-bottom-color',\n 'border-bottom-left-radius',\n 'border-bottom-right-radius',\n 'border-bottom-style',\n 'border-bottom-width',\n 'border-collapse',\n 'border-color',\n 'border-image',\n 'border-image-outset',\n 'border-image-repeat',\n 'border-image-slice',\n 'border-image-source',\n 'border-image-width',\n 'border-inline',\n 'border-inline-color',\n 'border-inline-end',\n 'border-inline-end-color',\n 'border-inline-end-style',\n 'border-inline-end-width',\n 'border-inline-start',\n 'border-inline-start-color',\n 'border-inline-start-style',\n 'border-inline-start-width',\n 'border-inline-style',\n 'border-inline-width',\n 'border-left',\n 'border-left-color',\n 'border-left-style',\n 'border-left-width',\n 'border-radius',\n 'border-right',\n 'border-end-end-radius',\n 'border-end-start-radius',\n 'border-right-color',\n 'border-right-style',\n 'border-right-width',\n 'border-spacing',\n 'border-start-end-radius',\n 'border-start-start-radius',\n 'border-style',\n 'border-top',\n 'border-top-color',\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-top-style',\n 'border-top-width',\n 'border-width',\n 'bottom',\n 'box-decoration-break',\n 'box-shadow',\n 'box-sizing',\n 'break-after',\n 'break-before',\n 'break-inside',\n 'cx',\n 'cy',\n 'caption-side',\n 'caret-color',\n 'clear',\n 'clip',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'color-scheme',\n 'column-count',\n 'column-fill',\n 'column-gap',\n 'column-rule',\n 'column-rule-color',\n 'column-rule-style',\n 'column-rule-width',\n 'column-span',\n 'column-width',\n 'columns',\n 'contain',\n 'content',\n 'content-visibility',\n 'counter-increment',\n 'counter-reset',\n 'cue',\n 'cue-after',\n 'cue-before',\n 'cursor',\n 'direction',\n 'display',\n 'dominant-baseline',\n 'empty-cells',\n 'enable-background',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'flex',\n 'flex-basis',\n 'flex-direction',\n 'flex-flow',\n 'flex-grow',\n 'flex-shrink',\n 'flex-wrap',\n 'float',\n 'flow',\n 'flood-color',\n 'flood-opacity',\n 'font',\n 'font-display',\n 'font-family',\n 'font-feature-settings',\n 'font-kerning',\n 'font-language-override',\n 'font-size',\n 'font-size-adjust',\n 'font-smoothing',\n 'font-stretch',\n 'font-style',\n 'font-synthesis',\n 'font-variant',\n 'font-variant-caps',\n 'font-variant-east-asian',\n 'font-variant-ligatures',\n 'font-variant-numeric',\n 'font-variant-position',\n 'font-variation-settings',\n 'font-weight',\n 'gap',\n 'glyph-orientation-horizontal',\n 'glyph-orientation-vertical',\n 'grid',\n 'grid-area',\n 'grid-auto-columns',\n 'grid-auto-flow',\n 'grid-auto-rows',\n 'grid-column',\n 'grid-column-end',\n 'grid-column-start',\n 'grid-gap',\n 'grid-row',\n 'grid-row-end',\n 'grid-row-start',\n 'grid-template',\n 'grid-template-areas',\n 'grid-template-columns',\n 'grid-template-rows',\n 'hanging-punctuation',\n 'height',\n 'hyphens',\n 'icon',\n 'image-orientation',\n 'image-rendering',\n 'image-resolution',\n 'ime-mode',\n 'inline-size',\n 'inset',\n 'inset-block',\n 'inset-block-end',\n 'inset-block-start',\n 'inset-inline',\n 'inset-inline-end',\n 'inset-inline-start',\n 'isolation',\n 'kerning',\n 'justify-content',\n 'justify-items',\n 'justify-self',\n 'left',\n 'letter-spacing',\n 'lighting-color',\n 'line-break',\n 'line-height',\n 'list-style',\n 'list-style-image',\n 'list-style-position',\n 'list-style-type',\n 'marker',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'mask',\n 'margin',\n 'margin-block',\n 'margin-block-end',\n 'margin-block-start',\n 'margin-bottom',\n 'margin-inline',\n 'margin-inline-end',\n 'margin-inline-start',\n 'margin-left',\n 'margin-right',\n 'margin-top',\n 'marks',\n 'mask',\n 'mask-border',\n 'mask-border-mode',\n 'mask-border-outset',\n 'mask-border-repeat',\n 'mask-border-slice',\n 'mask-border-source',\n 'mask-border-width',\n 'mask-clip',\n 'mask-composite',\n 'mask-image',\n 'mask-mode',\n 'mask-origin',\n 'mask-position',\n 'mask-repeat',\n 'mask-size',\n 'mask-type',\n 'max-block-size',\n 'max-height',\n 'max-inline-size',\n 'max-width',\n 'min-block-size',\n 'min-height',\n 'min-inline-size',\n 'min-width',\n 'mix-blend-mode',\n 'nav-down',\n 'nav-index',\n 'nav-left',\n 'nav-right',\n 'nav-up',\n 'none',\n 'normal',\n 'object-fit',\n 'object-position',\n 'opacity',\n 'order',\n 'orphans',\n 'outline',\n 'outline-color',\n 'outline-offset',\n 'outline-style',\n 'outline-width',\n 'overflow',\n 'overflow-wrap',\n 'overflow-x',\n 'overflow-y',\n 'padding',\n 'padding-block',\n 'padding-block-end',\n 'padding-block-start',\n 'padding-bottom',\n 'padding-inline',\n 'padding-inline-end',\n 'padding-inline-start',\n 'padding-left',\n 'padding-right',\n 'padding-top',\n 'page-break-after',\n 'page-break-before',\n 'page-break-inside',\n 'pause',\n 'pause-after',\n 'pause-before',\n 'perspective',\n 'perspective-origin',\n 'pointer-events',\n 'position',\n 'quotes',\n 'r',\n 'resize',\n 'rest',\n 'rest-after',\n 'rest-before',\n 'right',\n 'rotate',\n 'row-gap',\n 'scale',\n 'scroll-margin',\n 'scroll-margin-block',\n 'scroll-margin-block-end',\n 'scroll-margin-block-start',\n 'scroll-margin-bottom',\n 'scroll-margin-inline',\n 'scroll-margin-inline-end',\n 'scroll-margin-inline-start',\n 'scroll-margin-left',\n 'scroll-margin-right',\n 'scroll-margin-top',\n 'scroll-padding',\n 'scroll-padding-block',\n 'scroll-padding-block-end',\n 'scroll-padding-block-start',\n 'scroll-padding-bottom',\n 'scroll-padding-inline',\n 'scroll-padding-inline-end',\n 'scroll-padding-inline-start',\n 'scroll-padding-left',\n 'scroll-padding-right',\n 'scroll-padding-top',\n 'scroll-snap-align',\n 'scroll-snap-stop',\n 'scroll-snap-type',\n 'scrollbar-color',\n 'scrollbar-gutter',\n 'scrollbar-width',\n 'shape-image-threshold',\n 'shape-margin',\n 'shape-outside',\n 'shape-rendering',\n 'stop-color',\n 'stop-opacity',\n 'stroke',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke-width',\n 'speak',\n 'speak-as',\n 'src', // @font-face\n 'tab-size',\n 'table-layout',\n 'text-anchor',\n 'text-align',\n 'text-align-all',\n 'text-align-last',\n 'text-combine-upright',\n 'text-decoration',\n 'text-decoration-color',\n 'text-decoration-line',\n 'text-decoration-skip-ink',\n 'text-decoration-style',\n 'text-decoration-thickness',\n 'text-emphasis',\n 'text-emphasis-color',\n 'text-emphasis-position',\n 'text-emphasis-style',\n 'text-indent',\n 'text-justify',\n 'text-orientation',\n 'text-overflow',\n 'text-rendering',\n 'text-shadow',\n 'text-transform',\n 'text-underline-offset',\n 'text-underline-position',\n 'top',\n 'transform',\n 'transform-box',\n 'transform-origin',\n 'transform-style',\n 'transition',\n 'transition-delay',\n 'transition-duration',\n 'transition-property',\n 'transition-timing-function',\n 'translate',\n 'unicode-bidi',\n 'vector-effect',\n 'vertical-align',\n 'visibility',\n 'voice-balance',\n 'voice-duration',\n 'voice-family',\n 'voice-pitch',\n 'voice-range',\n 'voice-rate',\n 'voice-stress',\n 'voice-volume',\n 'white-space',\n 'widows',\n 'width',\n 'will-change',\n 'word-break',\n 'word-spacing',\n 'word-wrap',\n 'writing-mode',\n 'x',\n 'y',\n 'z-index'\n].sort().reverse();\n\n/*\nLanguage: CSS\nCategory: common, css, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/CSS\n*/\n\n\n/** @type LanguageFn */\nfunction css(hljs) {\n const regex = hljs.regex;\n const modes = MODES(hljs);\n const VENDOR_PREFIX = { begin: /-(webkit|moz|ms|o)-(?=[a-z])/ };\n const AT_MODIFIERS = \"and or not only\";\n const AT_PROPERTY_RE = /@-?\\w[\\w]*(-\\w+)*/; // @-webkit-keyframes\n const IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n const STRINGS = [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ];\n\n return {\n name: 'CSS',\n case_insensitive: true,\n illegal: /[=|'\\$]/,\n keywords: { keyframePosition: \"from to\" },\n classNameAliases: {\n // for visual continuity with `tag {}` and because we\n // don't have a great class for this?\n keyframePosition: \"selector-tag\" },\n contains: [\n modes.BLOCK_COMMENT,\n VENDOR_PREFIX,\n // to recognize keyframe 40% etc which are outside the scope of our\n // attribute value mode\n modes.CSS_NUMBER_MODE,\n {\n className: 'selector-id',\n begin: /#[A-Za-z0-9_-]+/,\n relevance: 0\n },\n {\n className: 'selector-class',\n begin: '\\\\.' + IDENT_RE,\n relevance: 0\n },\n modes.ATTRIBUTE_SELECTOR_MODE,\n {\n className: 'selector-pseudo',\n variants: [\n { begin: ':(' + PSEUDO_CLASSES.join('|') + ')' },\n { begin: ':(:)?(' + PSEUDO_ELEMENTS.join('|') + ')' }\n ]\n },\n // we may actually need this (12/2020)\n // { // pseudo-selector params\n // begin: /\\(/,\n // end: /\\)/,\n // contains: [ hljs.CSS_NUMBER_MODE ]\n // },\n modes.CSS_VARIABLE,\n {\n className: 'attribute',\n begin: '\\\\b(' + ATTRIBUTES.join('|') + ')\\\\b'\n },\n // attribute values\n {\n begin: /:/,\n end: /[;}{]/,\n contains: [\n modes.BLOCK_COMMENT,\n modes.HEXCOLOR,\n modes.IMPORTANT,\n modes.CSS_NUMBER_MODE,\n ...STRINGS,\n // needed to highlight these as strings and to avoid issues with\n // illegal characters that might be inside urls that would tigger the\n // languages illegal stack\n {\n begin: /(url|data-uri)\\(/,\n end: /\\)/,\n relevance: 0, // from keywords\n keywords: { built_in: \"url data-uri\" },\n contains: [\n ...STRINGS,\n {\n className: \"string\",\n // any character other than `)` as in `url()` will be the start\n // of a string, which ends with `)` (from the parent mode)\n begin: /[^)]/,\n endsWithParent: true,\n excludeEnd: true\n }\n ]\n },\n modes.FUNCTION_DISPATCH\n ]\n },\n {\n begin: regex.lookahead(/@/),\n end: '[{;]',\n relevance: 0,\n illegal: /:/, // break on Less variables @var: ...\n contains: [\n {\n className: 'keyword',\n begin: AT_PROPERTY_RE\n },\n {\n begin: /\\s/,\n endsWithParent: true,\n excludeEnd: true,\n relevance: 0,\n keywords: {\n $pattern: /[a-z-]+/,\n keyword: AT_MODIFIERS,\n attribute: MEDIA_FEATURES.join(\" \")\n },\n contains: [\n {\n begin: /[a-z-]+(?=:)/,\n className: \"attribute\"\n },\n ...STRINGS,\n modes.CSS_NUMBER_MODE\n ]\n }\n ]\n },\n {\n className: 'selector-tag',\n begin: '\\\\b(' + TAGS.join('|') + ')\\\\b'\n }\n ]\n };\n}\n\nmodule.exports = css;\n","/*\nLanguage: Markdown\nRequires: xml.js\nAuthor: John Crepezzi <john.crepezzi@gmail.com>\nWebsite: https://daringfireball.net/projects/markdown/\nCategory: common, markup\n*/\n\nfunction markdown(hljs) {\n const regex = hljs.regex;\n const INLINE_HTML = {\n begin: /<\\/?[A-Za-z_]/,\n end: '>',\n subLanguage: 'xml',\n relevance: 0\n };\n const HORIZONTAL_RULE = {\n begin: '^[-\\\\*]{3,}',\n end: '$'\n };\n const CODE = {\n className: 'code',\n variants: [\n // TODO: fix to allow these to work with sublanguage also\n { begin: '(`{3,})[^`](.|\\\\n)*?\\\\1`*[ ]*' },\n { begin: '(~{3,})[^~](.|\\\\n)*?\\\\1~*[ ]*' },\n // needed to allow markdown as a sublanguage to work\n {\n begin: '```',\n end: '```+[ ]*$'\n },\n {\n begin: '~~~',\n end: '~~~+[ ]*$'\n },\n { begin: '`.+?`' },\n {\n begin: '(?=^( {4}|\\\\t))',\n // use contains to gobble up multiple lines to allow the block to be whatever size\n // but only have a single open/close tag vs one per line\n contains: [\n {\n begin: '^( {4}|\\\\t)',\n end: '(\\\\n)$'\n }\n ],\n relevance: 0\n }\n ]\n };\n const LIST = {\n className: 'bullet',\n begin: '^[ \\t]*([*+-]|(\\\\d+\\\\.))(?=\\\\s+)',\n end: '\\\\s+',\n excludeEnd: true\n };\n const LINK_REFERENCE = {\n begin: /^\\[[^\\n]+\\]:/,\n returnBegin: true,\n contains: [\n {\n className: 'symbol',\n begin: /\\[/,\n end: /\\]/,\n excludeBegin: true,\n excludeEnd: true\n },\n {\n className: 'link',\n begin: /:\\s*/,\n end: /$/,\n excludeBegin: true\n }\n ]\n };\n const URL_SCHEME = /[A-Za-z][A-Za-z0-9+.-]*/;\n const LINK = {\n variants: [\n // too much like nested array access in so many languages\n // to have any real relevance\n {\n begin: /\\[.+?\\]\\[.*?\\]/,\n relevance: 0\n },\n // popular internet URLs\n {\n begin: /\\[.+?\\]\\(((data|javascript|mailto):|(?:http|ftp)s?:\\/\\/).*?\\)/,\n relevance: 2\n },\n {\n begin: regex.concat(/\\[.+?\\]\\(/, URL_SCHEME, /:\\/\\/.*?\\)/),\n relevance: 2\n },\n // relative urls\n {\n begin: /\\[.+?\\]\\([./?&#].*?\\)/,\n relevance: 1\n },\n // whatever else, lower relevance (might not be a link at all)\n {\n begin: /\\[.*?\\]\\(.*?\\)/,\n relevance: 0\n }\n ],\n returnBegin: true,\n contains: [\n {\n // empty strings for alt or link text\n match: /\\[(?=\\])/ },\n {\n className: 'string',\n relevance: 0,\n begin: '\\\\[',\n end: '\\\\]',\n excludeBegin: true,\n returnEnd: true\n },\n {\n className: 'link',\n relevance: 0,\n begin: '\\\\]\\\\(',\n end: '\\\\)',\n excludeBegin: true,\n excludeEnd: true\n },\n {\n className: 'symbol',\n relevance: 0,\n begin: '\\\\]\\\\[',\n end: '\\\\]',\n excludeBegin: true,\n excludeEnd: true\n }\n ]\n };\n const BOLD = {\n className: 'strong',\n contains: [], // defined later\n variants: [\n {\n begin: /_{2}(?!\\s)/,\n end: /_{2}/\n },\n {\n begin: /\\*{2}(?!\\s)/,\n end: /\\*{2}/\n }\n ]\n };\n const ITALIC = {\n className: 'emphasis',\n contains: [], // defined later\n variants: [\n {\n begin: /\\*(?![*\\s])/,\n end: /\\*/\n },\n {\n begin: /_(?![_\\s])/,\n end: /_/,\n relevance: 0\n }\n ]\n };\n\n // 3 level deep nesting is not allowed because it would create confusion\n // in cases like `***testing***` because where we don't know if the last\n // `***` is starting a new bold/italic or finishing the last one\n const BOLD_WITHOUT_ITALIC = hljs.inherit(BOLD, { contains: [] });\n const ITALIC_WITHOUT_BOLD = hljs.inherit(ITALIC, { contains: [] });\n BOLD.contains.push(ITALIC_WITHOUT_BOLD);\n ITALIC.contains.push(BOLD_WITHOUT_ITALIC);\n\n let CONTAINABLE = [\n INLINE_HTML,\n LINK\n ];\n\n [\n BOLD,\n ITALIC,\n BOLD_WITHOUT_ITALIC,\n ITALIC_WITHOUT_BOLD\n ].forEach(m => {\n m.contains = m.contains.concat(CONTAINABLE);\n });\n\n CONTAINABLE = CONTAINABLE.concat(BOLD, ITALIC);\n\n const HEADER = {\n className: 'section',\n variants: [\n {\n begin: '^#{1,6}',\n end: '$',\n contains: CONTAINABLE\n },\n {\n begin: '(?=^.+?\\\\n[=-]{2,}$)',\n contains: [\n { begin: '^[=-]*$' },\n {\n begin: '^',\n end: \"\\\\n\",\n contains: CONTAINABLE\n }\n ]\n }\n ]\n };\n\n const BLOCKQUOTE = {\n className: 'quote',\n begin: '^>\\\\s+',\n contains: CONTAINABLE,\n end: '$'\n };\n\n const ENTITY = {\n //https://spec.commonmark.org/0.31.2/#entity-references\n scope: 'literal',\n match: /&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/\n };\n\n return {\n name: 'Markdown',\n aliases: [\n 'md',\n 'mkdown',\n 'mkd'\n ],\n contains: [\n HEADER,\n INLINE_HTML,\n LIST,\n BOLD,\n ITALIC,\n BLOCKQUOTE,\n CODE,\n HORIZONTAL_RULE,\n LINK,\n LINK_REFERENCE,\n ENTITY\n ]\n };\n}\n\nmodule.exports = markdown;\n","/*\nLanguage: Diff\nDescription: Unified and context diff\nAuthor: Vasily Polovnyov <vast@whiteants.net>\nWebsite: https://www.gnu.org/software/diffutils/\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction diff(hljs) {\n const regex = hljs.regex;\n return {\n name: 'Diff',\n aliases: [ 'patch' ],\n contains: [\n {\n className: 'meta',\n relevance: 10,\n match: regex.either(\n /^@@ +-\\d+,\\d+ +\\+\\d+,\\d+ +@@/,\n /^\\*\\*\\* +\\d+,\\d+ +\\*\\*\\*\\*$/,\n /^--- +\\d+,\\d+ +----$/\n )\n },\n {\n className: 'comment',\n variants: [\n {\n begin: regex.either(\n /Index: /,\n /^index/,\n /={3,}/,\n /^-{3}/,\n /^\\*{3} /,\n /^\\+{3}/,\n /^diff --git/\n ),\n end: /$/\n },\n { match: /^\\*{15}$/ }\n ]\n },\n {\n className: 'addition',\n begin: /^\\+/,\n end: /$/\n },\n {\n className: 'deletion',\n begin: /^-/,\n end: /$/\n },\n {\n className: 'addition',\n begin: /^!/,\n end: /$/\n }\n ]\n };\n}\n\nmodule.exports = diff;\n","/*\nLanguage: Ruby\nDescription: Ruby is a dynamic, open source programming language with a focus on simplicity and productivity.\nWebsite: https://www.ruby-lang.org/\nAuthor: Anton Kovalyov <anton@kovalyov.net>\nContributors: Peter Leonov <gojpeg@yandex.ru>, Vasily Polovnyov <vast@whiteants.net>, Loren Segal <lsegal@soen.ca>, Pascal Hurni <phi@ruby-reactive.org>, Cedric Sohrauer <sohrauer@googlemail.com>\nCategory: common, scripting\n*/\n\nfunction ruby(hljs) {\n const regex = hljs.regex;\n const RUBY_METHOD_RE = '([a-zA-Z_]\\\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?)';\n // TODO: move concepts like CAMEL_CASE into `modes.js`\n const CLASS_NAME_RE = regex.either(\n /\\b([A-Z]+[a-z0-9]+)+/,\n // ends in caps\n /\\b([A-Z]+[a-z0-9]+)+[A-Z]+/,\n )\n ;\n const CLASS_NAME_WITH_NAMESPACE_RE = regex.concat(CLASS_NAME_RE, /(::\\w+)*/);\n // very popular ruby built-ins that one might even assume\n // are actual keywords (despite that not being the case)\n const PSEUDO_KWS = [\n \"include\",\n \"extend\",\n \"prepend\",\n \"public\",\n \"private\",\n \"protected\",\n \"raise\",\n \"throw\"\n ];\n const RUBY_KEYWORDS = {\n \"variable.constant\": [\n \"__FILE__\",\n \"__LINE__\",\n \"__ENCODING__\"\n ],\n \"variable.language\": [\n \"self\",\n \"super\",\n ],\n keyword: [\n \"alias\",\n \"and\",\n \"begin\",\n \"BEGIN\",\n \"break\",\n \"case\",\n \"class\",\n \"defined\",\n \"do\",\n \"else\",\n \"elsif\",\n \"end\",\n \"END\",\n \"ensure\",\n \"for\",\n \"if\",\n \"in\",\n \"module\",\n \"next\",\n \"not\",\n \"or\",\n \"redo\",\n \"require\",\n \"rescue\",\n \"retry\",\n \"return\",\n \"then\",\n \"undef\",\n \"unless\",\n \"until\",\n \"when\",\n \"while\",\n \"yield\",\n ...PSEUDO_KWS\n ],\n built_in: [\n \"proc\",\n \"lambda\",\n \"attr_accessor\",\n \"attr_reader\",\n \"attr_writer\",\n \"define_method\",\n \"private_constant\",\n \"module_function\"\n ],\n literal: [\n \"true\",\n \"false\",\n \"nil\"\n ]\n };\n const YARDOCTAG = {\n className: 'doctag',\n begin: '@[A-Za-z]+'\n };\n const IRB_OBJECT = {\n begin: '#<',\n end: '>'\n };\n const COMMENT_MODES = [\n hljs.COMMENT(\n '#',\n '$',\n { contains: [ YARDOCTAG ] }\n ),\n hljs.COMMENT(\n '^=begin',\n '^=end',\n {\n contains: [ YARDOCTAG ],\n relevance: 10\n }\n ),\n hljs.COMMENT('^__END__', hljs.MATCH_NOTHING_RE)\n ];\n const SUBST = {\n className: 'subst',\n begin: /#\\{/,\n end: /\\}/,\n keywords: RUBY_KEYWORDS\n };\n const STRING = {\n className: 'string',\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n variants: [\n {\n begin: /'/,\n end: /'/\n },\n {\n begin: /\"/,\n end: /\"/\n },\n {\n begin: /`/,\n end: /`/\n },\n {\n begin: /%[qQwWx]?\\(/,\n end: /\\)/\n },\n {\n begin: /%[qQwWx]?\\[/,\n end: /\\]/\n },\n {\n begin: /%[qQwWx]?\\{/,\n end: /\\}/\n },\n {\n begin: /%[qQwWx]?</,\n end: />/\n },\n {\n begin: /%[qQwWx]?\\//,\n end: /\\//\n },\n {\n begin: /%[qQwWx]?%/,\n end: /%/\n },\n {\n begin: /%[qQwWx]?-/,\n end: /-/\n },\n {\n begin: /%[qQwWx]?\\|/,\n end: /\\|/\n },\n // in the following expressions, \\B in the beginning suppresses recognition of ?-sequences\n // where ? is the last character of a preceding identifier, as in: `func?4`\n { begin: /\\B\\?(\\\\\\d{1,3})/ },\n { begin: /\\B\\?(\\\\x[A-Fa-f0-9]{1,2})/ },\n { begin: /\\B\\?(\\\\u\\{?[A-Fa-f0-9]{1,6}\\}?)/ },\n { begin: /\\B\\?(\\\\M-\\\\C-|\\\\M-\\\\c|\\\\c\\\\M-|\\\\M-|\\\\C-\\\\M-)[\\x20-\\x7e]/ },\n { begin: /\\B\\?\\\\(c|C-)[\\x20-\\x7e]/ },\n { begin: /\\B\\?\\\\?\\S/ },\n // heredocs\n {\n // this guard makes sure that we have an entire heredoc and not a false\n // positive (auto-detect, etc.)\n begin: regex.concat(\n /<<[-~]?'?/,\n regex.lookahead(/(\\w+)(?=\\W)[^\\n]*\\n(?:[^\\n]*\\n)*?\\s*\\1\\b/)\n ),\n contains: [\n hljs.END_SAME_AS_BEGIN({\n begin: /(\\w+)/,\n end: /(\\w+)/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ]\n })\n ]\n }\n ]\n };\n\n // Ruby syntax is underdocumented, but this grammar seems to be accurate\n // as of version 2.7.2 (confirmed with (irb and `Ripper.sexp(...)`)\n // https://docs.ruby-lang.org/en/2.7.0/doc/syntax/literals_rdoc.html#label-Numbers\n const decimal = '[1-9](_?[0-9])*|0';\n const digits = '[0-9](_?[0-9])*';\n const NUMBER = {\n className: 'number',\n relevance: 0,\n variants: [\n // decimal integer/float, optionally exponential or rational, optionally imaginary\n { begin: `\\\\b(${decimal})(\\\\.(${digits}))?([eE][+-]?(${digits})|r)?i?\\\\b` },\n\n // explicit decimal/binary/octal/hexadecimal integer,\n // optionally rational and/or imaginary\n { begin: \"\\\\b0[dD][0-9](_?[0-9])*r?i?\\\\b\" },\n { begin: \"\\\\b0[bB][0-1](_?[0-1])*r?i?\\\\b\" },\n { begin: \"\\\\b0[oO][0-7](_?[0-7])*r?i?\\\\b\" },\n { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\\\b\" },\n\n // 0-prefixed implicit octal integer, optionally rational and/or imaginary\n { begin: \"\\\\b0(_?[0-7])+r?i?\\\\b\" }\n ]\n };\n\n const PARAMS = {\n variants: [\n {\n match: /\\(\\)/,\n },\n {\n className: 'params',\n begin: /\\(/,\n end: /(?=\\))/,\n excludeBegin: true,\n endsParent: true,\n keywords: RUBY_KEYWORDS,\n }\n ]\n };\n\n const INCLUDE_EXTEND = {\n match: [\n /(include|extend)\\s+/,\n CLASS_NAME_WITH_NAMESPACE_RE\n ],\n scope: {\n 2: \"title.class\"\n },\n keywords: RUBY_KEYWORDS\n };\n\n const CLASS_DEFINITION = {\n variants: [\n {\n match: [\n /class\\s+/,\n CLASS_NAME_WITH_NAMESPACE_RE,\n /\\s+<\\s+/,\n CLASS_NAME_WITH_NAMESPACE_RE\n ]\n },\n {\n match: [\n /\\b(class|module)\\s+/,\n CLASS_NAME_WITH_NAMESPACE_RE\n ]\n }\n ],\n scope: {\n 2: \"title.class\",\n 4: \"title.class.inherited\"\n },\n keywords: RUBY_KEYWORDS\n };\n\n const UPPER_CASE_CONSTANT = {\n relevance: 0,\n match: /\\b[A-Z][A-Z_0-9]+\\b/,\n className: \"variable.constant\"\n };\n\n const METHOD_DEFINITION = {\n match: [\n /def/, /\\s+/,\n RUBY_METHOD_RE\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n PARAMS\n ]\n };\n\n const OBJECT_CREATION = {\n relevance: 0,\n match: [\n CLASS_NAME_WITH_NAMESPACE_RE,\n /\\.new[. (]/\n ],\n scope: {\n 1: \"title.class\"\n }\n };\n\n // CamelCase\n const CLASS_REFERENCE = {\n relevance: 0,\n match: CLASS_NAME_RE,\n scope: \"title.class\"\n };\n\n const RUBY_DEFAULT_CONTAINS = [\n STRING,\n CLASS_DEFINITION,\n INCLUDE_EXTEND,\n OBJECT_CREATION,\n UPPER_CASE_CONSTANT,\n CLASS_REFERENCE,\n METHOD_DEFINITION,\n {\n // swallow namespace qualifiers before symbols\n begin: hljs.IDENT_RE + '::' },\n {\n className: 'symbol',\n begin: hljs.UNDERSCORE_IDENT_RE + '(!|\\\\?)?:',\n relevance: 0\n },\n {\n className: 'symbol',\n begin: ':(?!\\\\s)',\n contains: [\n STRING,\n { begin: RUBY_METHOD_RE }\n ],\n relevance: 0\n },\n NUMBER,\n {\n // negative-look forward attempts to prevent false matches like:\n // @ident@ or $ident$ that might indicate this is not ruby at all\n className: \"variable\",\n begin: '(\\\\$\\\\W)|((\\\\$|@@?)(\\\\w+))(?=[^@$?])' + `(?![A-Za-z])(?![@$?'])`\n },\n {\n className: 'params',\n begin: /\\|/,\n end: /\\|/,\n excludeBegin: true,\n excludeEnd: true,\n relevance: 0, // this could be a lot of things (in other languages) other than params\n keywords: RUBY_KEYWORDS\n },\n { // regexp container\n begin: '(' + hljs.RE_STARTERS_RE + '|unless)\\\\s*',\n keywords: 'unless',\n contains: [\n {\n className: 'regexp',\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n illegal: /\\n/,\n variants: [\n {\n begin: '/',\n end: '/[a-z]*'\n },\n {\n begin: /%r\\{/,\n end: /\\}[a-z]*/\n },\n {\n begin: '%r\\\\(',\n end: '\\\\)[a-z]*'\n },\n {\n begin: '%r!',\n end: '![a-z]*'\n },\n {\n begin: '%r\\\\[',\n end: '\\\\][a-z]*'\n }\n ]\n }\n ].concat(IRB_OBJECT, COMMENT_MODES),\n relevance: 0\n }\n ].concat(IRB_OBJECT, COMMENT_MODES);\n\n SUBST.contains = RUBY_DEFAULT_CONTAINS;\n PARAMS.contains = RUBY_DEFAULT_CONTAINS;\n\n // >>\n // ?>\n const SIMPLE_PROMPT = \"[>?]>\";\n // irb(main):001:0>\n const DEFAULT_PROMPT = \"[\\\\w#]+\\\\(\\\\w+\\\\):\\\\d+:\\\\d+[>*]\";\n const RVM_PROMPT = \"(\\\\w+-)?\\\\d+\\\\.\\\\d+\\\\.\\\\d+(p\\\\d+)?[^\\\\d][^>]+>\";\n\n const IRB_DEFAULT = [\n {\n begin: /^\\s*=>/,\n starts: {\n end: '$',\n contains: RUBY_DEFAULT_CONTAINS\n }\n },\n {\n className: 'meta.prompt',\n begin: '^(' + SIMPLE_PROMPT + \"|\" + DEFAULT_PROMPT + '|' + RVM_PROMPT + ')(?=[ ])',\n starts: {\n end: '$',\n keywords: RUBY_KEYWORDS,\n contains: RUBY_DEFAULT_CONTAINS\n }\n }\n ];\n\n COMMENT_MODES.unshift(IRB_OBJECT);\n\n return {\n name: 'Ruby',\n aliases: [\n 'rb',\n 'gemspec',\n 'podspec',\n 'thor',\n 'irb'\n ],\n keywords: RUBY_KEYWORDS,\n illegal: /\\/\\*/,\n contains: [ hljs.SHEBANG({ binary: \"ruby\" }) ]\n .concat(IRB_DEFAULT)\n .concat(COMMENT_MODES)\n .concat(RUBY_DEFAULT_CONTAINS)\n };\n}\n\nmodule.exports = ruby;\n","/*\nLanguage: Go\nAuthor: Stephan Kountso aka StepLg <steplg@gmail.com>\nContributors: Evgeny Stepanischev <imbolk@gmail.com>\nDescription: Google go language (golang). For info about language\nWebsite: http://golang.org/\nCategory: common, system\n*/\n\nfunction go(hljs) {\n const LITERALS = [\n \"true\",\n \"false\",\n \"iota\",\n \"nil\"\n ];\n const BUILT_INS = [\n \"append\",\n \"cap\",\n \"close\",\n \"complex\",\n \"copy\",\n \"imag\",\n \"len\",\n \"make\",\n \"new\",\n \"panic\",\n \"print\",\n \"println\",\n \"real\",\n \"recover\",\n \"delete\"\n ];\n const TYPES = [\n \"bool\",\n \"byte\",\n \"complex64\",\n \"complex128\",\n \"error\",\n \"float32\",\n \"float64\",\n \"int8\",\n \"int16\",\n \"int32\",\n \"int64\",\n \"string\",\n \"uint8\",\n \"uint16\",\n \"uint32\",\n \"uint64\",\n \"int\",\n \"uint\",\n \"uintptr\",\n \"rune\"\n ];\n const KWS = [\n \"break\",\n \"case\",\n \"chan\",\n \"const\",\n \"continue\",\n \"default\",\n \"defer\",\n \"else\",\n \"fallthrough\",\n \"for\",\n \"func\",\n \"go\",\n \"goto\",\n \"if\",\n \"import\",\n \"interface\",\n \"map\",\n \"package\",\n \"range\",\n \"return\",\n \"select\",\n \"struct\",\n \"switch\",\n \"type\",\n \"var\",\n ];\n const KEYWORDS = {\n keyword: KWS,\n type: TYPES,\n literal: LITERALS,\n built_in: BUILT_INS\n };\n return {\n name: 'Go',\n aliases: [ 'golang' ],\n keywords: KEYWORDS,\n illegal: '</',\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n {\n className: 'string',\n variants: [\n hljs.QUOTE_STRING_MODE,\n hljs.APOS_STRING_MODE,\n {\n begin: '`',\n end: '`'\n }\n ]\n },\n {\n className: 'number',\n variants: [\n {\n match: /-?\\b0[xX]\\.[a-fA-F0-9](_?[a-fA-F0-9])*[pP][+-]?\\d(_?\\d)*i?/, // hex without a present digit before . (making a digit afterwards required)\n relevance: 0\n },\n {\n match: /-?\\b0[xX](_?[a-fA-F0-9])+((\\.([a-fA-F0-9](_?[a-fA-F0-9])*)?)?[pP][+-]?\\d(_?\\d)*)?i?/, // hex with a present digit before . (making a digit afterwards optional)\n relevance: 0\n },\n {\n match: /-?\\b0[oO](_?[0-7])*i?/, // leading 0o octal\n relevance: 0\n },\n {\n match: /-?\\.\\d(_?\\d)*([eE][+-]?\\d(_?\\d)*)?i?/, // decimal without a present digit before . (making a digit afterwards required)\n relevance: 0\n },\n {\n match: /-?\\b\\d(_?\\d)*(\\.(\\d(_?\\d)*)?)?([eE][+-]?\\d(_?\\d)*)?i?/, // decimal with a present digit before . (making a digit afterwards optional)\n relevance: 0\n }\n ]\n },\n { begin: /:=/ // relevance booster\n },\n {\n className: 'function',\n beginKeywords: 'func',\n end: '\\\\s*(\\\\{|$)',\n excludeEnd: true,\n contains: [\n hljs.TITLE_MODE,\n {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n endsParent: true,\n keywords: KEYWORDS,\n illegal: /[\"']/\n }\n ]\n }\n ]\n };\n}\n\nmodule.exports = go;\n","/*\n Language: GraphQL\n Author: John Foster (GH jf990), and others\n Description: GraphQL is a query language for APIs\n Category: web, common\n*/\n\n/** @type LanguageFn */\nfunction graphql(hljs) {\n const regex = hljs.regex;\n const GQL_NAME = /[_A-Za-z][_0-9A-Za-z]*/;\n return {\n name: \"GraphQL\",\n aliases: [ \"gql\" ],\n case_insensitive: true,\n disableAutodetect: false,\n keywords: {\n keyword: [\n \"query\",\n \"mutation\",\n \"subscription\",\n \"type\",\n \"input\",\n \"schema\",\n \"directive\",\n \"interface\",\n \"union\",\n \"scalar\",\n \"fragment\",\n \"enum\",\n \"on\"\n ],\n literal: [\n \"true\",\n \"false\",\n \"null\"\n ]\n },\n contains: [\n hljs.HASH_COMMENT_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.NUMBER_MODE,\n {\n scope: \"punctuation\",\n match: /[.]{3}/,\n relevance: 0\n },\n {\n scope: \"punctuation\",\n begin: /[\\!\\(\\)\\:\\=\\[\\]\\{\\|\\}]{1}/,\n relevance: 0\n },\n {\n scope: \"variable\",\n begin: /\\$/,\n end: /\\W/,\n excludeEnd: true,\n relevance: 0\n },\n {\n scope: \"meta\",\n match: /@\\w+/,\n excludeEnd: true\n },\n {\n scope: \"symbol\",\n begin: regex.concat(GQL_NAME, regex.lookahead(/\\s*:/)),\n relevance: 0\n }\n ],\n illegal: [\n /[;<']/,\n /BEGIN/\n ]\n };\n}\n\nmodule.exports = graphql;\n","/*\nLanguage: TOML, also INI\nDescription: TOML aims to be a minimal configuration file format that's easy to read due to obvious semantics.\nContributors: Guillaume Gomez <guillaume1.gomez@gmail.com>\nCategory: common, config\nWebsite: https://github.com/toml-lang/toml\n*/\n\nfunction ini(hljs) {\n const regex = hljs.regex;\n const NUMBERS = {\n className: 'number',\n relevance: 0,\n variants: [\n { begin: /([+-]+)?[\\d]+_[\\d_]+/ },\n { begin: hljs.NUMBER_RE }\n ]\n };\n const COMMENTS = hljs.COMMENT();\n COMMENTS.variants = [\n {\n begin: /;/,\n end: /$/\n },\n {\n begin: /#/,\n end: /$/\n }\n ];\n const VARIABLES = {\n className: 'variable',\n variants: [\n { begin: /\\$[\\w\\d\"][\\w\\d_]*/ },\n { begin: /\\$\\{(.*?)\\}/ }\n ]\n };\n const LITERALS = {\n className: 'literal',\n begin: /\\bon|off|true|false|yes|no\\b/\n };\n const STRINGS = {\n className: \"string\",\n contains: [ hljs.BACKSLASH_ESCAPE ],\n variants: [\n {\n begin: \"'''\",\n end: \"'''\",\n relevance: 10\n },\n {\n begin: '\"\"\"',\n end: '\"\"\"',\n relevance: 10\n },\n {\n begin: '\"',\n end: '\"'\n },\n {\n begin: \"'\",\n end: \"'\"\n }\n ]\n };\n const ARRAY = {\n begin: /\\[/,\n end: /\\]/,\n contains: [\n COMMENTS,\n LITERALS,\n VARIABLES,\n STRINGS,\n NUMBERS,\n 'self'\n ],\n relevance: 0\n };\n\n const BARE_KEY = /[A-Za-z0-9_-]+/;\n const QUOTED_KEY_DOUBLE_QUOTE = /\"(\\\\\"|[^\"])*\"/;\n const QUOTED_KEY_SINGLE_QUOTE = /'[^']*'/;\n const ANY_KEY = regex.either(\n BARE_KEY, QUOTED_KEY_DOUBLE_QUOTE, QUOTED_KEY_SINGLE_QUOTE\n );\n const DOTTED_KEY = regex.concat(\n ANY_KEY, '(\\\\s*\\\\.\\\\s*', ANY_KEY, ')*',\n regex.lookahead(/\\s*=\\s*[^#\\s]/)\n );\n\n return {\n name: 'TOML, also INI',\n aliases: [ 'toml' ],\n case_insensitive: true,\n illegal: /\\S/,\n contains: [\n COMMENTS,\n {\n className: 'section',\n begin: /\\[+/,\n end: /\\]+/\n },\n {\n begin: DOTTED_KEY,\n className: 'attr',\n starts: {\n end: /$/,\n contains: [\n COMMENTS,\n ARRAY,\n LITERALS,\n VARIABLES,\n STRINGS,\n NUMBERS\n ]\n }\n }\n ]\n };\n}\n\nmodule.exports = ini;\n","// https://docs.oracle.com/javase/specs/jls/se15/html/jls-3.html#jls-3.10\nvar decimalDigits = '[0-9](_*[0-9])*';\nvar frac = `\\\\.(${decimalDigits})`;\nvar hexDigits = '[0-9a-fA-F](_*[0-9a-fA-F])*';\nvar NUMERIC = {\n className: 'number',\n variants: [\n // DecimalFloatingPointLiteral\n // including ExponentPart\n { begin: `(\\\\b(${decimalDigits})((${frac})|\\\\.)?|(${frac}))` +\n `[eE][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n // excluding ExponentPart\n { begin: `\\\\b(${decimalDigits})((${frac})[fFdD]?\\\\b|\\\\.([fFdD]\\\\b)?)` },\n { begin: `(${frac})[fFdD]?\\\\b` },\n { begin: `\\\\b(${decimalDigits})[fFdD]\\\\b` },\n\n // HexadecimalFloatingPointLiteral\n { begin: `\\\\b0[xX]((${hexDigits})\\\\.?|(${hexDigits})?\\\\.(${hexDigits}))` +\n `[pP][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n\n // DecimalIntegerLiteral\n { begin: '\\\\b(0|[1-9](_*[0-9])*)[lL]?\\\\b' },\n\n // HexIntegerLiteral\n { begin: `\\\\b0[xX](${hexDigits})[lL]?\\\\b` },\n\n // OctalIntegerLiteral\n { begin: '\\\\b0(_*[0-7])*[lL]?\\\\b' },\n\n // BinaryIntegerLiteral\n { begin: '\\\\b0[bB][01](_*[01])*[lL]?\\\\b' },\n ],\n relevance: 0\n};\n\n/*\nLanguage: Java\nAuthor: Vsevolod Solovyov <vsevolod.solovyov@gmail.com>\nCategory: common, enterprise\nWebsite: https://www.java.com/\n*/\n\n\n/**\n * Allows recursive regex expressions to a given depth\n *\n * ie: recurRegex(\"(abc~~~)\", /~~~/g, 2) becomes:\n * (abc(abc(abc)))\n *\n * @param {string} re\n * @param {RegExp} substitution (should be a g mode regex)\n * @param {number} depth\n * @returns {string}``\n */\nfunction recurRegex(re, substitution, depth) {\n if (depth === -1) return \"\";\n\n return re.replace(substitution, _ => {\n return recurRegex(re, substitution, depth - 1);\n });\n}\n\n/** @type LanguageFn */\nfunction java(hljs) {\n const regex = hljs.regex;\n const JAVA_IDENT_RE = '[\\u00C0-\\u02B8a-zA-Z_$][\\u00C0-\\u02B8a-zA-Z_$0-9]*';\n const GENERIC_IDENT_RE = JAVA_IDENT_RE\n + recurRegex('(?:<' + JAVA_IDENT_RE + '~~~(?:\\\\s*,\\\\s*' + JAVA_IDENT_RE + '~~~)*>)?', /~~~/g, 2);\n const MAIN_KEYWORDS = [\n 'synchronized',\n 'abstract',\n 'private',\n 'var',\n 'static',\n 'if',\n 'const ',\n 'for',\n 'while',\n 'strictfp',\n 'finally',\n 'protected',\n 'import',\n 'native',\n 'final',\n 'void',\n 'enum',\n 'else',\n 'break',\n 'transient',\n 'catch',\n 'instanceof',\n 'volatile',\n 'case',\n 'assert',\n 'package',\n 'default',\n 'public',\n 'try',\n 'switch',\n 'continue',\n 'throws',\n 'protected',\n 'public',\n 'private',\n 'module',\n 'requires',\n 'exports',\n 'do',\n 'sealed',\n 'yield',\n 'permits',\n 'goto'\n ];\n\n const BUILT_INS = [\n 'super',\n 'this'\n ];\n\n const LITERALS = [\n 'false',\n 'true',\n 'null'\n ];\n\n const TYPES = [\n 'char',\n 'boolean',\n 'long',\n 'float',\n 'int',\n 'byte',\n 'short',\n 'double'\n ];\n\n const KEYWORDS = {\n keyword: MAIN_KEYWORDS,\n literal: LITERALS,\n type: TYPES,\n built_in: BUILT_INS\n };\n\n const ANNOTATION = {\n className: 'meta',\n begin: '@' + JAVA_IDENT_RE,\n contains: [\n {\n begin: /\\(/,\n end: /\\)/,\n contains: [ \"self\" ] // allow nested () inside our annotation\n }\n ]\n };\n const PARAMS = {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n keywords: KEYWORDS,\n relevance: 0,\n contains: [ hljs.C_BLOCK_COMMENT_MODE ],\n endsParent: true\n };\n\n return {\n name: 'Java',\n aliases: [ 'jsp' ],\n keywords: KEYWORDS,\n illegal: /<\\/|#/,\n contains: [\n hljs.COMMENT(\n '/\\\\*\\\\*',\n '\\\\*/',\n {\n relevance: 0,\n contains: [\n {\n // eat up @'s in emails to prevent them to be recognized as doctags\n begin: /\\w+@/,\n relevance: 0\n },\n {\n className: 'doctag',\n begin: '@[A-Za-z]+'\n }\n ]\n }\n ),\n // relevance boost\n {\n begin: /import java\\.[a-z]+\\./,\n keywords: \"import\",\n relevance: 2\n },\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n {\n begin: /\"\"\"/,\n end: /\"\"\"/,\n className: \"string\",\n contains: [ hljs.BACKSLASH_ESCAPE ]\n },\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n {\n match: [\n /\\b(?:class|interface|enum|extends|implements|new)/,\n /\\s+/,\n JAVA_IDENT_RE\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n {\n // Exceptions for hyphenated keywords\n match: /non-sealed/,\n scope: \"keyword\"\n },\n {\n begin: [\n regex.concat(/(?!else)/, JAVA_IDENT_RE),\n /\\s+/,\n JAVA_IDENT_RE,\n /\\s+/,\n /=(?!=)/\n ],\n className: {\n 1: \"type\",\n 3: \"variable\",\n 5: \"operator\"\n }\n },\n {\n begin: [\n /record/,\n /\\s+/,\n JAVA_IDENT_RE\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.class\"\n },\n contains: [\n PARAMS,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n {\n // Expression keywords prevent 'keyword Name(...)' from being\n // recognized as a function definition\n beginKeywords: 'new throw return else',\n relevance: 0\n },\n {\n begin: [\n '(?:' + GENERIC_IDENT_RE + '\\\\s+)',\n hljs.UNDERSCORE_IDENT_RE,\n /\\s*(?=\\()/\n ],\n className: { 2: \"title.function\" },\n keywords: KEYWORDS,\n contains: [\n {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n keywords: KEYWORDS,\n relevance: 0,\n contains: [\n ANNOTATION,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n NUMERIC,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n NUMERIC,\n ANNOTATION\n ]\n };\n}\n\nmodule.exports = java;\n","const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\nconst KEYWORDS = [\n \"as\", // for exports\n \"in\",\n \"of\",\n \"if\",\n \"for\",\n \"while\",\n \"finally\",\n \"var\",\n \"new\",\n \"function\",\n \"do\",\n \"return\",\n \"void\",\n \"else\",\n \"break\",\n \"catch\",\n \"instanceof\",\n \"with\",\n \"throw\",\n \"case\",\n \"default\",\n \"try\",\n \"switch\",\n \"continue\",\n \"typeof\",\n \"delete\",\n \"let\",\n \"yield\",\n \"const\",\n \"class\",\n // JS handles these with a special rule\n // \"get\",\n // \"set\",\n \"debugger\",\n \"async\",\n \"await\",\n \"static\",\n \"import\",\n \"from\",\n \"export\",\n \"extends\"\n];\nconst LITERALS = [\n \"true\",\n \"false\",\n \"null\",\n \"undefined\",\n \"NaN\",\n \"Infinity\"\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\nconst TYPES = [\n // Fundamental objects\n \"Object\",\n \"Function\",\n \"Boolean\",\n \"Symbol\",\n // numbers and dates\n \"Math\",\n \"Date\",\n \"Number\",\n \"BigInt\",\n // text\n \"String\",\n \"RegExp\",\n // Indexed collections\n \"Array\",\n \"Float32Array\",\n \"Float64Array\",\n \"Int8Array\",\n \"Uint8Array\",\n \"Uint8ClampedArray\",\n \"Int16Array\",\n \"Int32Array\",\n \"Uint16Array\",\n \"Uint32Array\",\n \"BigInt64Array\",\n \"BigUint64Array\",\n // Keyed collections\n \"Set\",\n \"Map\",\n \"WeakSet\",\n \"WeakMap\",\n // Structured data\n \"ArrayBuffer\",\n \"SharedArrayBuffer\",\n \"Atomics\",\n \"DataView\",\n \"JSON\",\n // Control abstraction objects\n \"Promise\",\n \"Generator\",\n \"GeneratorFunction\",\n \"AsyncFunction\",\n // Reflection\n \"Reflect\",\n \"Proxy\",\n // Internationalization\n \"Intl\",\n // WebAssembly\n \"WebAssembly\"\n];\n\nconst ERROR_TYPES = [\n \"Error\",\n \"EvalError\",\n \"InternalError\",\n \"RangeError\",\n \"ReferenceError\",\n \"SyntaxError\",\n \"TypeError\",\n \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n \"setInterval\",\n \"setTimeout\",\n \"clearInterval\",\n \"clearTimeout\",\n\n \"require\",\n \"exports\",\n\n \"eval\",\n \"isFinite\",\n \"isNaN\",\n \"parseFloat\",\n \"parseInt\",\n \"decodeURI\",\n \"decodeURIComponent\",\n \"encodeURI\",\n \"encodeURIComponent\",\n \"escape\",\n \"unescape\"\n];\n\nconst BUILT_IN_VARIABLES = [\n \"arguments\",\n \"this\",\n \"super\",\n \"console\",\n \"window\",\n \"document\",\n \"localStorage\",\n \"sessionStorage\",\n \"module\",\n \"global\" // Node.js\n];\n\nconst BUILT_INS = [].concat(\n BUILT_IN_GLOBALS,\n TYPES,\n ERROR_TYPES\n);\n\n/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\n\n/** @type LanguageFn */\nfunction javascript(hljs) {\n const regex = hljs.regex;\n /**\n * Takes a string like \"<Booger\" and checks to see\n * if we can find a matching \"</Booger\" later in the\n * content.\n * @param {RegExpMatchArray} match\n * @param {{after:number}} param1\n */\n const hasClosingTag = (match, { after }) => {\n const tag = \"</\" + match[0].slice(1);\n const pos = match.input.indexOf(tag, after);\n return pos !== -1;\n };\n\n const IDENT_RE$1 = IDENT_RE;\n const FRAGMENT = {\n begin: '<>',\n end: '</>'\n };\n // to avoid some special cases inside isTrulyOpeningTag\n const XML_SELF_CLOSING = /<[A-Za-z0-9\\\\._:-]+\\s*\\/>/;\n const XML_TAG = {\n begin: /<[A-Za-z0-9\\\\._:-]+/,\n end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,\n /**\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\n isTrulyOpeningTag: (match, response) => {\n const afterMatchIndex = match[0].length + match.index;\n const nextChar = match.input[afterMatchIndex];\n if (\n // HTML should not include another raw `<` inside a tag\n // nested type?\n // `<Array<Array<number>>`, etc.\n nextChar === \"<\" ||\n // the , gives away that this is not HTML\n // `<T, A extends keyof T, V>`\n nextChar === \",\"\n ) {\n response.ignoreMatch();\n return;\n }\n\n // `<something>`\n // Quite possibly a tag, lets look for a matching closing tag...\n if (nextChar === \">\") {\n // if we cannot find a matching closing tag, then we\n // will ignore it\n if (!hasClosingTag(match, { after: afterMatchIndex })) {\n response.ignoreMatch();\n }\n }\n\n // `<blah />` (self-closing)\n // handled by simpleSelfClosing rule\n\n let m;\n const afterMatch = match.input.substring(afterMatchIndex);\n\n // some more template typing stuff\n // <T = any>(key?: string) => Modify<\n if ((m = afterMatch.match(/^\\s*=/))) {\n response.ignoreMatch();\n return;\n }\n\n // `<From extends string>`\n // technically this could be HTML, but it smells like a type\n // NOTE: This is ugh, but added specifically for https://github.com/highlightjs/highlight.js/issues/3276\n if ((m = afterMatch.match(/^\\s+extends\\s+/))) {\n if (m.index === 0) {\n response.ignoreMatch();\n // eslint-disable-next-line no-useless-return\n return;\n }\n }\n }\n };\n const KEYWORDS$1 = {\n $pattern: IDENT_RE,\n keyword: KEYWORDS,\n literal: LITERALS,\n built_in: BUILT_INS,\n \"variable.language\": BUILT_IN_VARIABLES\n };\n\n // https://tc39.es/ecma262/#sec-literals-numeric-literals\n const decimalDigits = '[0-9](_?[0-9])*';\n const frac = `\\\\.(${decimalDigits})`;\n // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\n const NUMBER = {\n className: 'number',\n variants: [\n // DecimalLiteral\n { begin: `(\\\\b(${decimalInteger})((${frac})|\\\\.)?|(${frac}))` +\n `[eE][+-]?(${decimalDigits})\\\\b` },\n { begin: `\\\\b(${decimalInteger})\\\\b((${frac})\\\\b|\\\\.)?|(${frac})\\\\b` },\n\n // DecimalBigIntegerLiteral\n { begin: `\\\\b(0|[1-9](_?[0-9])*)n\\\\b` },\n\n // NonDecimalIntegerLiteral\n { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\" },\n { begin: \"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\" },\n { begin: \"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\" },\n\n // LegacyOctalIntegerLiteral (does not include underscore separators)\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n { begin: \"\\\\b0[0-7]+n?\\\\b\" },\n ],\n relevance: 0\n };\n\n const SUBST = {\n className: 'subst',\n begin: '\\\\$\\\\{',\n end: '\\\\}',\n keywords: KEYWORDS$1,\n contains: [] // defined later\n };\n const HTML_TEMPLATE = {\n begin: '\\.?html`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'xml'\n }\n };\n const CSS_TEMPLATE = {\n begin: '\\.?css`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'css'\n }\n };\n const GRAPHQL_TEMPLATE = {\n begin: '\\.?gql`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'graphql'\n }\n };\n const TEMPLATE_STRING = {\n className: 'string',\n begin: '`',\n end: '`',\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ]\n };\n const JSDOC_COMMENT = hljs.COMMENT(\n /\\/\\*\\*(?!\\/)/,\n '\\\\*/',\n {\n relevance: 0,\n contains: [\n {\n begin: '(?=@[A-Za-z]+)',\n relevance: 0,\n contains: [\n {\n className: 'doctag',\n begin: '@[A-Za-z]+'\n },\n {\n className: 'type',\n begin: '\\\\{',\n end: '\\\\}',\n excludeEnd: true,\n excludeBegin: true,\n relevance: 0\n },\n {\n className: 'variable',\n begin: IDENT_RE$1 + '(?=\\\\s*(-)|$)',\n endsParent: true,\n relevance: 0\n },\n // eat spaces (not newlines) so we can find\n // types or variables\n {\n begin: /(?=[^\\n])\\s/,\n relevance: 0\n }\n ]\n }\n ]\n }\n );\n const COMMENT = {\n className: \"comment\",\n variants: [\n JSDOC_COMMENT,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.C_LINE_COMMENT_MODE\n ]\n };\n const SUBST_INTERNALS = [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n // This is intentional:\n // See https://github.com/highlightjs/highlight.js/issues/3288\n // hljs.REGEXP_MODE\n ];\n SUBST.contains = SUBST_INTERNALS\n .concat({\n // we need to pair up {} inside our subst to prevent\n // it from ending too early by matching another }\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS$1,\n contains: [\n \"self\"\n ].concat(SUBST_INTERNALS)\n });\n const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\n const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\n // eat recursive parens in sub expressions\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n keywords: KEYWORDS$1,\n contains: [\"self\"].concat(SUBST_AND_COMMENTS)\n }\n ]);\n const PARAMS = {\n className: 'params',\n // convert this to negative lookbehind in v12\n begin: /(\\s*)\\(/, // to match the parms with \n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n };\n\n // ES6 classes\n const CLASS_OR_EXTENDS = {\n variants: [\n // class Car extends vehicle\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1,\n /\\s+/,\n /extends/,\n /\\s+/,\n regex.concat(IDENT_RE$1, \"(\", regex.concat(/\\./, IDENT_RE$1), \")*\")\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\",\n 5: \"keyword\",\n 7: \"title.class.inherited\"\n }\n },\n // class Car\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n\n ]\n };\n\n const CLASS_REFERENCE = {\n relevance: 0,\n match:\n regex.either(\n // Hard coded exceptions\n /\\bJSON/,\n // Float32Array, OutT\n /\\b[A-Z][a-z]+([A-Z][a-z]*|\\d)*/,\n // CSSFactory, CSSFactoryT\n /\\b[A-Z]{2,}([A-Z][a-z]+|\\d)+([A-Z][a-z]*)*/,\n // FPs, FPsT\n /\\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\\d)*([A-Z][a-z]*)*/,\n // P\n // single letters are not highlighted\n // BLAH\n // this will be flagged as a UPPER_CASE_CONSTANT instead\n ),\n className: \"title.class\",\n keywords: {\n _: [\n // se we still get relevance credit for JS library classes\n ...TYPES,\n ...ERROR_TYPES\n ]\n }\n };\n\n const USE_STRICT = {\n label: \"use_strict\",\n className: 'meta',\n relevance: 10,\n begin: /^\\s*['\"]use (strict|asm)['\"]/\n };\n\n const FUNCTION_DEFINITION = {\n variants: [\n {\n match: [\n /function/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\s*\\()/\n ]\n },\n // anonymous function\n {\n match: [\n /function/,\n /\\s*(?=\\()/\n ]\n }\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n label: \"func.def\",\n contains: [ PARAMS ],\n illegal: /%/\n };\n\n const UPPER_CASE_CONSTANT = {\n relevance: 0,\n match: /\\b[A-Z][A-Z_0-9]+\\b/,\n className: \"variable.constant\"\n };\n\n function noneOf(list) {\n return regex.concat(\"(?!\", list.join(\"|\"), \")\");\n }\n\n const FUNCTION_CALL = {\n match: regex.concat(\n /\\b/,\n noneOf([\n ...BUILT_IN_GLOBALS,\n \"super\",\n \"import\"\n ].map(x => `${x}\\\\s*\\\\(`)),\n IDENT_RE$1, regex.lookahead(/\\s*\\(/)),\n className: \"title.function\",\n relevance: 0\n };\n\n const PROPERTY_ACCESS = {\n begin: regex.concat(/\\./, regex.lookahead(\n regex.concat(IDENT_RE$1, /(?![0-9A-Za-z$_(])/)\n )),\n end: IDENT_RE$1,\n excludeBegin: true,\n keywords: \"prototype\",\n className: \"property\",\n relevance: 0\n };\n\n const GETTER_OR_SETTER = {\n match: [\n /get|set/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\()/\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n { // eat to avoid empty params\n begin: /\\(\\)/\n },\n PARAMS\n ]\n };\n\n const FUNC_LEAD_IN_RE = '(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\s*=>';\n\n const FUNCTION_VARIABLE = {\n match: [\n /const|var|let/, /\\s+/,\n IDENT_RE$1, /\\s*/,\n /=\\s*/,\n /(async\\s*)?/, // async is optional\n regex.lookahead(FUNC_LEAD_IN_RE)\n ],\n keywords: \"async\",\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n PARAMS\n ]\n };\n\n return {\n name: 'JavaScript',\n aliases: ['js', 'jsx', 'mjs', 'cjs'],\n keywords: KEYWORDS$1,\n // this will be extended by TypeScript\n exports: { PARAMS_CONTAINS, CLASS_REFERENCE },\n illegal: /#(?![$_A-z])/,\n contains: [\n hljs.SHEBANG({\n label: \"shebang\",\n binary: \"node\",\n relevance: 5\n }),\n USE_STRICT,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n COMMENT,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n CLASS_REFERENCE,\n {\n className: 'attr',\n begin: IDENT_RE$1 + regex.lookahead(':'),\n relevance: 0\n },\n FUNCTION_VARIABLE,\n { // \"value\" container\n begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n keywords: 'return throw case',\n relevance: 0,\n contains: [\n COMMENT,\n hljs.REGEXP_MODE,\n {\n className: 'function',\n // we have to count the parens to make sure we actually have the\n // correct bounding ( ) before the =>. There could be any number of\n // sub-expressions inside also surrounded by parens.\n begin: FUNC_LEAD_IN_RE,\n returnBegin: true,\n end: '\\\\s*=>',\n contains: [\n {\n className: 'params',\n variants: [\n {\n begin: hljs.UNDERSCORE_IDENT_RE,\n relevance: 0\n },\n {\n className: null,\n begin: /\\(\\s*\\)/,\n skip: true\n },\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n }\n ]\n }\n ]\n },\n { // could be a comma delimited list of params to a function call\n begin: /,/,\n relevance: 0\n },\n {\n match: /\\s+/,\n relevance: 0\n },\n { // JSX\n variants: [\n { begin: FRAGMENT.begin, end: FRAGMENT.end },\n { match: XML_SELF_CLOSING },\n {\n begin: XML_TAG.begin,\n // we carefully check the opening tag to see if it truly\n // is a tag and not a false positive\n 'on:begin': XML_TAG.isTrulyOpeningTag,\n end: XML_TAG.end\n }\n ],\n subLanguage: 'xml',\n contains: [\n {\n begin: XML_TAG.begin,\n end: XML_TAG.end,\n skip: true,\n contains: ['self']\n }\n ]\n }\n ],\n },\n FUNCTION_DEFINITION,\n {\n // prevent this from getting swallowed up by function\n // since they appear \"function like\"\n beginKeywords: \"while if switch catch for\"\n },\n {\n // we have to count the parens to make sure we actually have the correct\n // bounding ( ). There could be any number of sub-expressions inside\n // also surrounded by parens.\n begin: '\\\\b(?!function)' + hljs.UNDERSCORE_IDENT_RE +\n '\\\\(' + // first parens\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)\\\\s*\\\\{', // end parens\n returnBegin:true,\n label: \"func.def\",\n contains: [\n PARAMS,\n hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1, className: \"title.function\" })\n ]\n },\n // catch ... so it won't trigger the property rule below\n {\n match: /\\.\\.\\./,\n relevance: 0\n },\n PROPERTY_ACCESS,\n // hack: prevents detection of keywords in some circumstances\n // .keyword()\n // $keyword = x\n {\n match: '\\\\$' + IDENT_RE$1,\n relevance: 0\n },\n {\n match: [ /\\bconstructor(?=\\s*\\()/ ],\n className: { 1: \"title.function\" },\n contains: [ PARAMS ]\n },\n FUNCTION_CALL,\n UPPER_CASE_CONSTANT,\n CLASS_OR_EXTENDS,\n GETTER_OR_SETTER,\n {\n match: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n }\n ]\n };\n}\n\nmodule.exports = javascript;\n","/*\nLanguage: JSON\nDescription: JSON (JavaScript Object Notation) is a lightweight data-interchange format.\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\nWebsite: http://www.json.org\nCategory: common, protocols, web\n*/\n\nfunction json(hljs) {\n const ATTRIBUTE = {\n className: 'attr',\n begin: /\"(\\\\.|[^\\\\\"\\r\\n])*\"(?=\\s*:)/,\n relevance: 1.01\n };\n const PUNCTUATION = {\n match: /[{}[\\],:]/,\n className: \"punctuation\",\n relevance: 0\n };\n const LITERALS = [\n \"true\",\n \"false\",\n \"null\"\n ];\n // NOTE: normally we would rely on `keywords` for this but using a mode here allows us\n // - to use the very tight `illegal: \\S` rule later to flag any other character\n // - as illegal indicating that despite looking like JSON we do not truly have\n // - JSON and thus improve false-positively greatly since JSON will try and claim\n // - all sorts of JSON looking stuff\n const LITERALS_MODE = {\n scope: \"literal\",\n beginKeywords: LITERALS.join(\" \"),\n };\n\n return {\n name: 'JSON',\n aliases: ['jsonc'],\n keywords:{\n literal: LITERALS,\n },\n contains: [\n ATTRIBUTE,\n PUNCTUATION,\n hljs.QUOTE_STRING_MODE,\n LITERALS_MODE,\n hljs.C_NUMBER_MODE,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ],\n illegal: '\\\\S'\n };\n}\n\nmodule.exports = json;\n","// https://docs.oracle.com/javase/specs/jls/se15/html/jls-3.html#jls-3.10\nvar decimalDigits = '[0-9](_*[0-9])*';\nvar frac = `\\\\.(${decimalDigits})`;\nvar hexDigits = '[0-9a-fA-F](_*[0-9a-fA-F])*';\nvar NUMERIC = {\n className: 'number',\n variants: [\n // DecimalFloatingPointLiteral\n // including ExponentPart\n { begin: `(\\\\b(${decimalDigits})((${frac})|\\\\.)?|(${frac}))` +\n `[eE][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n // excluding ExponentPart\n { begin: `\\\\b(${decimalDigits})((${frac})[fFdD]?\\\\b|\\\\.([fFdD]\\\\b)?)` },\n { begin: `(${frac})[fFdD]?\\\\b` },\n { begin: `\\\\b(${decimalDigits})[fFdD]\\\\b` },\n\n // HexadecimalFloatingPointLiteral\n { begin: `\\\\b0[xX]((${hexDigits})\\\\.?|(${hexDigits})?\\\\.(${hexDigits}))` +\n `[pP][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n\n // DecimalIntegerLiteral\n { begin: '\\\\b(0|[1-9](_*[0-9])*)[lL]?\\\\b' },\n\n // HexIntegerLiteral\n { begin: `\\\\b0[xX](${hexDigits})[lL]?\\\\b` },\n\n // OctalIntegerLiteral\n { begin: '\\\\b0(_*[0-7])*[lL]?\\\\b' },\n\n // BinaryIntegerLiteral\n { begin: '\\\\b0[bB][01](_*[01])*[lL]?\\\\b' },\n ],\n relevance: 0\n};\n\n/*\n Language: Kotlin\n Description: Kotlin is an OSS statically typed programming language that targets the JVM, Android, JavaScript and Native.\n Author: Sergey Mashkov <cy6erGn0m@gmail.com>\n Website: https://kotlinlang.org\n Category: common\n */\n\n\nfunction kotlin(hljs) {\n const KEYWORDS = {\n keyword:\n 'abstract as val var vararg get set class object open private protected public noinline '\n + 'crossinline dynamic final enum if else do while for when throw try catch finally '\n + 'import package is in fun override companion reified inline lateinit init '\n + 'interface annotation data sealed internal infix operator out by constructor super '\n + 'tailrec where const inner suspend typealias external expect actual',\n built_in:\n 'Byte Short Char Int Long Boolean Float Double Void Unit Nothing',\n literal:\n 'true false null'\n };\n const KEYWORDS_WITH_LABEL = {\n className: 'keyword',\n begin: /\\b(break|continue|return|this)\\b/,\n starts: { contains: [\n {\n className: 'symbol',\n begin: /@\\w+/\n }\n ] }\n };\n const LABEL = {\n className: 'symbol',\n begin: hljs.UNDERSCORE_IDENT_RE + '@'\n };\n\n // for string templates\n const SUBST = {\n className: 'subst',\n begin: /\\$\\{/,\n end: /\\}/,\n contains: [ hljs.C_NUMBER_MODE ]\n };\n const VARIABLE = {\n className: 'variable',\n begin: '\\\\$' + hljs.UNDERSCORE_IDENT_RE\n };\n const STRING = {\n className: 'string',\n variants: [\n {\n begin: '\"\"\"',\n end: '\"\"\"(?=[^\"])',\n contains: [\n VARIABLE,\n SUBST\n ]\n },\n // Can't use built-in modes easily, as we want to use STRING in the meta\n // context as 'meta-string' and there's no syntax to remove explicitly set\n // classNames in built-in modes.\n {\n begin: '\\'',\n end: '\\'',\n illegal: /\\n/,\n contains: [ hljs.BACKSLASH_ESCAPE ]\n },\n {\n begin: '\"',\n end: '\"',\n illegal: /\\n/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n VARIABLE,\n SUBST\n ]\n }\n ]\n };\n SUBST.contains.push(STRING);\n\n const ANNOTATION_USE_SITE = {\n className: 'meta',\n begin: '@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\\\s*:(?:\\\\s*' + hljs.UNDERSCORE_IDENT_RE + ')?'\n };\n const ANNOTATION = {\n className: 'meta',\n begin: '@' + hljs.UNDERSCORE_IDENT_RE,\n contains: [\n {\n begin: /\\(/,\n end: /\\)/,\n contains: [\n hljs.inherit(STRING, { className: 'string' }),\n \"self\"\n ]\n }\n ]\n };\n\n // https://kotlinlang.org/docs/reference/whatsnew11.html#underscores-in-numeric-literals\n // According to the doc above, the number mode of kotlin is the same as java 8,\n // so the code below is copied from java.js\n const KOTLIN_NUMBER_MODE = NUMERIC;\n const KOTLIN_NESTED_COMMENT = hljs.COMMENT(\n '/\\\\*', '\\\\*/',\n { contains: [ hljs.C_BLOCK_COMMENT_MODE ] }\n );\n const KOTLIN_PAREN_TYPE = { variants: [\n {\n className: 'type',\n begin: hljs.UNDERSCORE_IDENT_RE\n },\n {\n begin: /\\(/,\n end: /\\)/,\n contains: [] // defined later\n }\n ] };\n const KOTLIN_PAREN_TYPE2 = KOTLIN_PAREN_TYPE;\n KOTLIN_PAREN_TYPE2.variants[1].contains = [ KOTLIN_PAREN_TYPE ];\n KOTLIN_PAREN_TYPE.variants[1].contains = [ KOTLIN_PAREN_TYPE2 ];\n\n return {\n name: 'Kotlin',\n aliases: [\n 'kt',\n 'kts'\n ],\n keywords: KEYWORDS,\n contains: [\n hljs.COMMENT(\n '/\\\\*\\\\*',\n '\\\\*/',\n {\n relevance: 0,\n contains: [\n {\n className: 'doctag',\n begin: '@[A-Za-z]+'\n }\n ]\n }\n ),\n hljs.C_LINE_COMMENT_MODE,\n KOTLIN_NESTED_COMMENT,\n KEYWORDS_WITH_LABEL,\n LABEL,\n ANNOTATION_USE_SITE,\n ANNOTATION,\n {\n className: 'function',\n beginKeywords: 'fun',\n end: '[(]|$',\n returnBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS,\n relevance: 5,\n contains: [\n {\n begin: hljs.UNDERSCORE_IDENT_RE + '\\\\s*\\\\(',\n returnBegin: true,\n relevance: 0,\n contains: [ hljs.UNDERSCORE_TITLE_MODE ]\n },\n {\n className: 'type',\n begin: /</,\n end: />/,\n keywords: 'reified',\n relevance: 0\n },\n {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n endsParent: true,\n keywords: KEYWORDS,\n relevance: 0,\n contains: [\n {\n begin: /:/,\n end: /[=,\\/]/,\n endsWithParent: true,\n contains: [\n KOTLIN_PAREN_TYPE,\n hljs.C_LINE_COMMENT_MODE,\n KOTLIN_NESTED_COMMENT\n ],\n relevance: 0\n },\n hljs.C_LINE_COMMENT_MODE,\n KOTLIN_NESTED_COMMENT,\n ANNOTATION_USE_SITE,\n ANNOTATION,\n STRING,\n hljs.C_NUMBER_MODE\n ]\n },\n KOTLIN_NESTED_COMMENT\n ]\n },\n {\n begin: [\n /class|interface|trait/,\n /\\s+/,\n hljs.UNDERSCORE_IDENT_RE\n ],\n beginScope: {\n 3: \"title.class\"\n },\n keywords: 'class interface trait',\n end: /[:\\{(]|$/,\n excludeEnd: true,\n illegal: 'extends implements',\n contains: [\n { beginKeywords: 'public protected internal private constructor' },\n hljs.UNDERSCORE_TITLE_MODE,\n {\n className: 'type',\n begin: /</,\n end: />/,\n excludeBegin: true,\n excludeEnd: true,\n relevance: 0\n },\n {\n className: 'type',\n begin: /[,:]\\s*/,\n end: /[<\\(,){\\s]|$/,\n excludeBegin: true,\n returnEnd: true\n },\n ANNOTATION_USE_SITE,\n ANNOTATION\n ]\n },\n STRING,\n {\n className: 'meta',\n begin: \"^#!/usr/bin/env\",\n end: '$',\n illegal: '\\n'\n },\n KOTLIN_NUMBER_MODE\n ]\n };\n}\n\nmodule.exports = kotlin;\n","const MODES = (hljs) => {\n return {\n IMPORTANT: {\n scope: 'meta',\n begin: '!important'\n },\n BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,\n HEXCOLOR: {\n scope: 'number',\n begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\b/\n },\n FUNCTION_DISPATCH: {\n className: \"built_in\",\n begin: /[\\w-]+(?=\\()/\n },\n ATTRIBUTE_SELECTOR_MODE: {\n scope: 'selector-attr',\n begin: /\\[/,\n end: /\\]/,\n illegal: '$',\n contains: [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ]\n },\n CSS_NUMBER_MODE: {\n scope: 'number',\n begin: hljs.NUMBER_RE + '(' +\n '%|em|ex|ch|rem' +\n '|vw|vh|vmin|vmax' +\n '|cm|mm|in|pt|pc|px' +\n '|deg|grad|rad|turn' +\n '|s|ms' +\n '|Hz|kHz' +\n '|dpi|dpcm|dppx' +\n ')?',\n relevance: 0\n },\n CSS_VARIABLE: {\n className: \"attr\",\n begin: /--[A-Za-z_][A-Za-z0-9_-]*/\n }\n };\n};\n\nconst HTML_TAGS = [\n 'a',\n 'abbr',\n 'address',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'blockquote',\n 'body',\n 'button',\n 'canvas',\n 'caption',\n 'cite',\n 'code',\n 'dd',\n 'del',\n 'details',\n 'dfn',\n 'div',\n 'dl',\n 'dt',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'html',\n 'i',\n 'iframe',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'mark',\n 'menu',\n 'nav',\n 'object',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'picture',\n 'q',\n 'quote',\n 'samp',\n 'section',\n 'select',\n 'source',\n 'span',\n 'strong',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'ul',\n 'var',\n 'video'\n];\n\nconst SVG_TAGS = [\n 'defs',\n 'g',\n 'marker',\n 'mask',\n 'pattern',\n 'svg',\n 'switch',\n 'symbol',\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feFlood',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMorphology',\n 'feOffset',\n 'feSpecularLighting',\n 'feTile',\n 'feTurbulence',\n 'linearGradient',\n 'radialGradient',\n 'stop',\n 'circle',\n 'ellipse',\n 'image',\n 'line',\n 'path',\n 'polygon',\n 'polyline',\n 'rect',\n 'text',\n 'use',\n 'textPath',\n 'tspan',\n 'foreignObject',\n 'clipPath'\n];\n\nconst TAGS = [\n ...HTML_TAGS,\n ...SVG_TAGS,\n];\n\n// Sorting, then reversing makes sure longer attributes/elements like\n// `font-weight` are matched fully instead of getting false positives on say `font`\n\nconst MEDIA_FEATURES = [\n 'any-hover',\n 'any-pointer',\n 'aspect-ratio',\n 'color',\n 'color-gamut',\n 'color-index',\n 'device-aspect-ratio',\n 'device-height',\n 'device-width',\n 'display-mode',\n 'forced-colors',\n 'grid',\n 'height',\n 'hover',\n 'inverted-colors',\n 'monochrome',\n 'orientation',\n 'overflow-block',\n 'overflow-inline',\n 'pointer',\n 'prefers-color-scheme',\n 'prefers-contrast',\n 'prefers-reduced-motion',\n 'prefers-reduced-transparency',\n 'resolution',\n 'scan',\n 'scripting',\n 'update',\n 'width',\n // TODO: find a better solution?\n 'min-width',\n 'max-width',\n 'min-height',\n 'max-height'\n].sort().reverse();\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\nconst PSEUDO_CLASSES = [\n 'active',\n 'any-link',\n 'blank',\n 'checked',\n 'current',\n 'default',\n 'defined',\n 'dir', // dir()\n 'disabled',\n 'drop',\n 'empty',\n 'enabled',\n 'first',\n 'first-child',\n 'first-of-type',\n 'fullscreen',\n 'future',\n 'focus',\n 'focus-visible',\n 'focus-within',\n 'has', // has()\n 'host', // host or host()\n 'host-context', // host-context()\n 'hover',\n 'indeterminate',\n 'in-range',\n 'invalid',\n 'is', // is()\n 'lang', // lang()\n 'last-child',\n 'last-of-type',\n 'left',\n 'link',\n 'local-link',\n 'not', // not()\n 'nth-child', // nth-child()\n 'nth-col', // nth-col()\n 'nth-last-child', // nth-last-child()\n 'nth-last-col', // nth-last-col()\n 'nth-last-of-type', //nth-last-of-type()\n 'nth-of-type', //nth-of-type()\n 'only-child',\n 'only-of-type',\n 'optional',\n 'out-of-range',\n 'past',\n 'placeholder-shown',\n 'read-only',\n 'read-write',\n 'required',\n 'right',\n 'root',\n 'scope',\n 'target',\n 'target-within',\n 'user-invalid',\n 'valid',\n 'visited',\n 'where' // where()\n].sort().reverse();\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\nconst PSEUDO_ELEMENTS = [\n 'after',\n 'backdrop',\n 'before',\n 'cue',\n 'cue-region',\n 'first-letter',\n 'first-line',\n 'grammar-error',\n 'marker',\n 'part',\n 'placeholder',\n 'selection',\n 'slotted',\n 'spelling-error'\n].sort().reverse();\n\nconst ATTRIBUTES = [\n 'accent-color',\n 'align-content',\n 'align-items',\n 'align-self',\n 'alignment-baseline',\n 'all',\n 'animation',\n 'animation-delay',\n 'animation-direction',\n 'animation-duration',\n 'animation-fill-mode',\n 'animation-iteration-count',\n 'animation-name',\n 'animation-play-state',\n 'animation-timing-function',\n 'appearance',\n 'backface-visibility',\n 'background',\n 'background-attachment',\n 'background-blend-mode',\n 'background-clip',\n 'background-color',\n 'background-image',\n 'background-origin',\n 'background-position',\n 'background-repeat',\n 'background-size',\n 'baseline-shift',\n 'block-size',\n 'border',\n 'border-block',\n 'border-block-color',\n 'border-block-end',\n 'border-block-end-color',\n 'border-block-end-style',\n 'border-block-end-width',\n 'border-block-start',\n 'border-block-start-color',\n 'border-block-start-style',\n 'border-block-start-width',\n 'border-block-style',\n 'border-block-width',\n 'border-bottom',\n 'border-bottom-color',\n 'border-bottom-left-radius',\n 'border-bottom-right-radius',\n 'border-bottom-style',\n 'border-bottom-width',\n 'border-collapse',\n 'border-color',\n 'border-image',\n 'border-image-outset',\n 'border-image-repeat',\n 'border-image-slice',\n 'border-image-source',\n 'border-image-width',\n 'border-inline',\n 'border-inline-color',\n 'border-inline-end',\n 'border-inline-end-color',\n 'border-inline-end-style',\n 'border-inline-end-width',\n 'border-inline-start',\n 'border-inline-start-color',\n 'border-inline-start-style',\n 'border-inline-start-width',\n 'border-inline-style',\n 'border-inline-width',\n 'border-left',\n 'border-left-color',\n 'border-left-style',\n 'border-left-width',\n 'border-radius',\n 'border-right',\n 'border-end-end-radius',\n 'border-end-start-radius',\n 'border-right-color',\n 'border-right-style',\n 'border-right-width',\n 'border-spacing',\n 'border-start-end-radius',\n 'border-start-start-radius',\n 'border-style',\n 'border-top',\n 'border-top-color',\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-top-style',\n 'border-top-width',\n 'border-width',\n 'bottom',\n 'box-decoration-break',\n 'box-shadow',\n 'box-sizing',\n 'break-after',\n 'break-before',\n 'break-inside',\n 'cx',\n 'cy',\n 'caption-side',\n 'caret-color',\n 'clear',\n 'clip',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'color-scheme',\n 'column-count',\n 'column-fill',\n 'column-gap',\n 'column-rule',\n 'column-rule-color',\n 'column-rule-style',\n 'column-rule-width',\n 'column-span',\n 'column-width',\n 'columns',\n 'contain',\n 'content',\n 'content-visibility',\n 'counter-increment',\n 'counter-reset',\n 'cue',\n 'cue-after',\n 'cue-before',\n 'cursor',\n 'direction',\n 'display',\n 'dominant-baseline',\n 'empty-cells',\n 'enable-background',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'flex',\n 'flex-basis',\n 'flex-direction',\n 'flex-flow',\n 'flex-grow',\n 'flex-shrink',\n 'flex-wrap',\n 'float',\n 'flow',\n 'flood-color',\n 'flood-opacity',\n 'font',\n 'font-display',\n 'font-family',\n 'font-feature-settings',\n 'font-kerning',\n 'font-language-override',\n 'font-size',\n 'font-size-adjust',\n 'font-smoothing',\n 'font-stretch',\n 'font-style',\n 'font-synthesis',\n 'font-variant',\n 'font-variant-caps',\n 'font-variant-east-asian',\n 'font-variant-ligatures',\n 'font-variant-numeric',\n 'font-variant-position',\n 'font-variation-settings',\n 'font-weight',\n 'gap',\n 'glyph-orientation-horizontal',\n 'glyph-orientation-vertical',\n 'grid',\n 'grid-area',\n 'grid-auto-columns',\n 'grid-auto-flow',\n 'grid-auto-rows',\n 'grid-column',\n 'grid-column-end',\n 'grid-column-start',\n 'grid-gap',\n 'grid-row',\n 'grid-row-end',\n 'grid-row-start',\n 'grid-template',\n 'grid-template-areas',\n 'grid-template-columns',\n 'grid-template-rows',\n 'hanging-punctuation',\n 'height',\n 'hyphens',\n 'icon',\n 'image-orientation',\n 'image-rendering',\n 'image-resolution',\n 'ime-mode',\n 'inline-size',\n 'inset',\n 'inset-block',\n 'inset-block-end',\n 'inset-block-start',\n 'inset-inline',\n 'inset-inline-end',\n 'inset-inline-start',\n 'isolation',\n 'kerning',\n 'justify-content',\n 'justify-items',\n 'justify-self',\n 'left',\n 'letter-spacing',\n 'lighting-color',\n 'line-break',\n 'line-height',\n 'list-style',\n 'list-style-image',\n 'list-style-position',\n 'list-style-type',\n 'marker',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'mask',\n 'margin',\n 'margin-block',\n 'margin-block-end',\n 'margin-block-start',\n 'margin-bottom',\n 'margin-inline',\n 'margin-inline-end',\n 'margin-inline-start',\n 'margin-left',\n 'margin-right',\n 'margin-top',\n 'marks',\n 'mask',\n 'mask-border',\n 'mask-border-mode',\n 'mask-border-outset',\n 'mask-border-repeat',\n 'mask-border-slice',\n 'mask-border-source',\n 'mask-border-width',\n 'mask-clip',\n 'mask-composite',\n 'mask-image',\n 'mask-mode',\n 'mask-origin',\n 'mask-position',\n 'mask-repeat',\n 'mask-size',\n 'mask-type',\n 'max-block-size',\n 'max-height',\n 'max-inline-size',\n 'max-width',\n 'min-block-size',\n 'min-height',\n 'min-inline-size',\n 'min-width',\n 'mix-blend-mode',\n 'nav-down',\n 'nav-index',\n 'nav-left',\n 'nav-right',\n 'nav-up',\n 'none',\n 'normal',\n 'object-fit',\n 'object-position',\n 'opacity',\n 'order',\n 'orphans',\n 'outline',\n 'outline-color',\n 'outline-offset',\n 'outline-style',\n 'outline-width',\n 'overflow',\n 'overflow-wrap',\n 'overflow-x',\n 'overflow-y',\n 'padding',\n 'padding-block',\n 'padding-block-end',\n 'padding-block-start',\n 'padding-bottom',\n 'padding-inline',\n 'padding-inline-end',\n 'padding-inline-start',\n 'padding-left',\n 'padding-right',\n 'padding-top',\n 'page-break-after',\n 'page-break-before',\n 'page-break-inside',\n 'pause',\n 'pause-after',\n 'pause-before',\n 'perspective',\n 'perspective-origin',\n 'pointer-events',\n 'position',\n 'quotes',\n 'r',\n 'resize',\n 'rest',\n 'rest-after',\n 'rest-before',\n 'right',\n 'rotate',\n 'row-gap',\n 'scale',\n 'scroll-margin',\n 'scroll-margin-block',\n 'scroll-margin-block-end',\n 'scroll-margin-block-start',\n 'scroll-margin-bottom',\n 'scroll-margin-inline',\n 'scroll-margin-inline-end',\n 'scroll-margin-inline-start',\n 'scroll-margin-left',\n 'scroll-margin-right',\n 'scroll-margin-top',\n 'scroll-padding',\n 'scroll-padding-block',\n 'scroll-padding-block-end',\n 'scroll-padding-block-start',\n 'scroll-padding-bottom',\n 'scroll-padding-inline',\n 'scroll-padding-inline-end',\n 'scroll-padding-inline-start',\n 'scroll-padding-left',\n 'scroll-padding-right',\n 'scroll-padding-top',\n 'scroll-snap-align',\n 'scroll-snap-stop',\n 'scroll-snap-type',\n 'scrollbar-color',\n 'scrollbar-gutter',\n 'scrollbar-width',\n 'shape-image-threshold',\n 'shape-margin',\n 'shape-outside',\n 'shape-rendering',\n 'stop-color',\n 'stop-opacity',\n 'stroke',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke-width',\n 'speak',\n 'speak-as',\n 'src', // @font-face\n 'tab-size',\n 'table-layout',\n 'text-anchor',\n 'text-align',\n 'text-align-all',\n 'text-align-last',\n 'text-combine-upright',\n 'text-decoration',\n 'text-decoration-color',\n 'text-decoration-line',\n 'text-decoration-skip-ink',\n 'text-decoration-style',\n 'text-decoration-thickness',\n 'text-emphasis',\n 'text-emphasis-color',\n 'text-emphasis-position',\n 'text-emphasis-style',\n 'text-indent',\n 'text-justify',\n 'text-orientation',\n 'text-overflow',\n 'text-rendering',\n 'text-shadow',\n 'text-transform',\n 'text-underline-offset',\n 'text-underline-position',\n 'top',\n 'transform',\n 'transform-box',\n 'transform-origin',\n 'transform-style',\n 'transition',\n 'transition-delay',\n 'transition-duration',\n 'transition-property',\n 'transition-timing-function',\n 'translate',\n 'unicode-bidi',\n 'vector-effect',\n 'vertical-align',\n 'visibility',\n 'voice-balance',\n 'voice-duration',\n 'voice-family',\n 'voice-pitch',\n 'voice-range',\n 'voice-rate',\n 'voice-stress',\n 'voice-volume',\n 'white-space',\n 'widows',\n 'width',\n 'will-change',\n 'word-break',\n 'word-spacing',\n 'word-wrap',\n 'writing-mode',\n 'x',\n 'y',\n 'z-index'\n].sort().reverse();\n\n// some grammars use them all as a single group\nconst PSEUDO_SELECTORS = PSEUDO_CLASSES.concat(PSEUDO_ELEMENTS).sort().reverse();\n\n/*\nLanguage: Less\nDescription: It's CSS, with just a little more.\nAuthor: Max Mikhailov <seven.phases.max@gmail.com>\nWebsite: http://lesscss.org\nCategory: common, css, web\n*/\n\n\n/** @type LanguageFn */\nfunction less(hljs) {\n const modes = MODES(hljs);\n const PSEUDO_SELECTORS$1 = PSEUDO_SELECTORS;\n\n const AT_MODIFIERS = \"and or not only\";\n const IDENT_RE = '[\\\\w-]+'; // yes, Less identifiers may begin with a digit\n const INTERP_IDENT_RE = '(' + IDENT_RE + '|@\\\\{' + IDENT_RE + '\\\\})';\n\n /* Generic Modes */\n\n const RULES = []; const VALUE_MODES = []; // forward def. for recursive modes\n\n const STRING_MODE = function(c) {\n return {\n // Less strings are not multiline (also include '~' for more consistent coloring of \"escaped\" strings)\n className: 'string',\n begin: '~?' + c + '.*?' + c\n };\n };\n\n const IDENT_MODE = function(name, begin, relevance) {\n return {\n className: name,\n begin: begin,\n relevance: relevance\n };\n };\n\n const AT_KEYWORDS = {\n $pattern: /[a-z-]+/,\n keyword: AT_MODIFIERS,\n attribute: MEDIA_FEATURES.join(\" \")\n };\n\n const PARENS_MODE = {\n // used only to properly balance nested parens inside mixin call, def. arg list\n begin: '\\\\(',\n end: '\\\\)',\n contains: VALUE_MODES,\n keywords: AT_KEYWORDS,\n relevance: 0\n };\n\n // generic Less highlighter (used almost everywhere except selectors):\n VALUE_MODES.push(\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n STRING_MODE(\"'\"),\n STRING_MODE('\"'),\n modes.CSS_NUMBER_MODE, // fixme: it does not include dot for numbers like .5em :(\n {\n begin: '(url|data-uri)\\\\(',\n starts: {\n className: 'string',\n end: '[\\\\)\\\\n]',\n excludeEnd: true\n }\n },\n modes.HEXCOLOR,\n PARENS_MODE,\n IDENT_MODE('variable', '@@?' + IDENT_RE, 10),\n IDENT_MODE('variable', '@\\\\{' + IDENT_RE + '\\\\}'),\n IDENT_MODE('built_in', '~?`[^`]*?`'), // inline javascript (or whatever host language) *multiline* string\n { // @media features (it’s here to not duplicate things in AT_RULE_MODE with extra PARENS_MODE overriding):\n className: 'attribute',\n begin: IDENT_RE + '\\\\s*:',\n end: ':',\n returnBegin: true,\n excludeEnd: true\n },\n modes.IMPORTANT,\n { beginKeywords: 'and not' },\n modes.FUNCTION_DISPATCH\n );\n\n const VALUE_WITH_RULESETS = VALUE_MODES.concat({\n begin: /\\{/,\n end: /\\}/,\n contains: RULES\n });\n\n const MIXIN_GUARD_MODE = {\n beginKeywords: 'when',\n endsWithParent: true,\n contains: [ { beginKeywords: 'and not' } ].concat(VALUE_MODES) // using this form to override VALUE’s 'function' match\n };\n\n /* Rule-Level Modes */\n\n const RULE_MODE = {\n begin: INTERP_IDENT_RE + '\\\\s*:',\n returnBegin: true,\n end: /[;}]/,\n relevance: 0,\n contains: [\n { begin: /-(webkit|moz|ms|o)-/ },\n modes.CSS_VARIABLE,\n {\n className: 'attribute',\n begin: '\\\\b(' + ATTRIBUTES.join('|') + ')\\\\b',\n end: /(?=:)/,\n starts: {\n endsWithParent: true,\n illegal: '[<=$]',\n relevance: 0,\n contains: VALUE_MODES\n }\n }\n ]\n };\n\n const AT_RULE_MODE = {\n className: 'keyword',\n begin: '@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\\\b',\n starts: {\n end: '[;{}]',\n keywords: AT_KEYWORDS,\n returnEnd: true,\n contains: VALUE_MODES,\n relevance: 0\n }\n };\n\n // variable definitions and calls\n const VAR_RULE_MODE = {\n className: 'variable',\n variants: [\n // using more strict pattern for higher relevance to increase chances of Less detection.\n // this is *the only* Less specific statement used in most of the sources, so...\n // (we’ll still often loose to the css-parser unless there's '//' comment,\n // simply because 1 variable just can't beat 99 properties :)\n {\n begin: '@' + IDENT_RE + '\\\\s*:',\n relevance: 15\n },\n { begin: '@' + IDENT_RE }\n ],\n starts: {\n end: '[;}]',\n returnEnd: true,\n contains: VALUE_WITH_RULESETS\n }\n };\n\n const SELECTOR_MODE = {\n // first parse unambiguous selectors (i.e. those not starting with tag)\n // then fall into the scary lookahead-discriminator variant.\n // this mode also handles mixin definitions and calls\n variants: [\n {\n begin: '[\\\\.#:&\\\\[>]',\n end: '[;{}]' // mixin calls end with ';'\n },\n {\n begin: INTERP_IDENT_RE,\n end: /\\{/\n }\n ],\n returnBegin: true,\n returnEnd: true,\n illegal: '[<=\\'$\"]',\n relevance: 0,\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n MIXIN_GUARD_MODE,\n IDENT_MODE('keyword', 'all\\\\b'),\n IDENT_MODE('variable', '@\\\\{' + IDENT_RE + '\\\\}'), // otherwise it’s identified as tag\n \n {\n begin: '\\\\b(' + TAGS.join('|') + ')\\\\b',\n className: 'selector-tag'\n },\n modes.CSS_NUMBER_MODE,\n IDENT_MODE('selector-tag', INTERP_IDENT_RE, 0),\n IDENT_MODE('selector-id', '#' + INTERP_IDENT_RE),\n IDENT_MODE('selector-class', '\\\\.' + INTERP_IDENT_RE, 0),\n IDENT_MODE('selector-tag', '&', 0),\n modes.ATTRIBUTE_SELECTOR_MODE,\n {\n className: 'selector-pseudo',\n begin: ':(' + PSEUDO_CLASSES.join('|') + ')'\n },\n {\n className: 'selector-pseudo',\n begin: ':(:)?(' + PSEUDO_ELEMENTS.join('|') + ')'\n },\n {\n begin: /\\(/,\n end: /\\)/,\n relevance: 0,\n contains: VALUE_WITH_RULESETS\n }, // argument list of parametric mixins\n { begin: '!important' }, // eat !important after mixin call or it will be colored as tag\n modes.FUNCTION_DISPATCH\n ]\n };\n\n const PSEUDO_SELECTOR_MODE = {\n begin: IDENT_RE + ':(:)?' + `(${PSEUDO_SELECTORS$1.join('|')})`,\n returnBegin: true,\n contains: [ SELECTOR_MODE ]\n };\n\n RULES.push(\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n AT_RULE_MODE,\n VAR_RULE_MODE,\n PSEUDO_SELECTOR_MODE,\n RULE_MODE,\n SELECTOR_MODE,\n MIXIN_GUARD_MODE,\n modes.FUNCTION_DISPATCH\n );\n\n return {\n name: 'Less',\n case_insensitive: true,\n illegal: '[=>\\'/<($\"]',\n contains: RULES\n };\n}\n\nmodule.exports = less;\n","/*\nLanguage: Lua\nDescription: Lua is a powerful, efficient, lightweight, embeddable scripting language.\nAuthor: Andrew Fedorov <dmmdrs@mail.ru>\nCategory: common, gaming, scripting\nWebsite: https://www.lua.org\n*/\n\nfunction lua(hljs) {\n const OPENING_LONG_BRACKET = '\\\\[=*\\\\[';\n const CLOSING_LONG_BRACKET = '\\\\]=*\\\\]';\n const LONG_BRACKETS = {\n begin: OPENING_LONG_BRACKET,\n end: CLOSING_LONG_BRACKET,\n contains: [ 'self' ]\n };\n const COMMENTS = [\n hljs.COMMENT('--(?!' + OPENING_LONG_BRACKET + ')', '$'),\n hljs.COMMENT(\n '--' + OPENING_LONG_BRACKET,\n CLOSING_LONG_BRACKET,\n {\n contains: [ LONG_BRACKETS ],\n relevance: 10\n }\n )\n ];\n return {\n name: 'Lua',\n keywords: {\n $pattern: hljs.UNDERSCORE_IDENT_RE,\n literal: \"true false nil\",\n keyword: \"and break do else elseif end for goto if in local not or repeat return then until while\",\n built_in:\n // Metatags and globals:\n '_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len '\n + '__gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert '\n // Standard methods and properties:\n + 'collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring '\n + 'module next pairs pcall print rawequal rawget rawset require select setfenv '\n + 'setmetatable tonumber tostring type unpack xpcall arg self '\n // Library methods and properties (one line per library):\n + 'coroutine resume yield status wrap create running debug getupvalue '\n + 'debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv '\n + 'io lines write close flush open output type read stderr stdin input stdout popen tmpfile '\n + 'math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan '\n + 'os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall '\n + 'string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower '\n + 'table setn insert getn foreachi maxn foreach concat sort remove'\n },\n contains: COMMENTS.concat([\n {\n className: 'function',\n beginKeywords: 'function',\n end: '\\\\)',\n contains: [\n hljs.inherit(hljs.TITLE_MODE, { begin: '([_a-zA-Z]\\\\w*\\\\.)*([_a-zA-Z]\\\\w*:)?[_a-zA-Z]\\\\w*' }),\n {\n className: 'params',\n begin: '\\\\(',\n endsWithParent: true,\n contains: COMMENTS\n }\n ].concat(COMMENTS)\n },\n hljs.C_NUMBER_MODE,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n {\n className: 'string',\n begin: OPENING_LONG_BRACKET,\n end: CLOSING_LONG_BRACKET,\n contains: [ LONG_BRACKETS ],\n relevance: 5\n }\n ])\n };\n}\n\nmodule.exports = lua;\n","/*\nLanguage: Makefile\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\nContributors: Joël Porquet <joel@porquet.org>\nWebsite: https://www.gnu.org/software/make/manual/html_node/Introduction.html\nCategory: common, build-system\n*/\n\nfunction makefile(hljs) {\n /* Variables: simple (eg $(var)) and special (eg $@) */\n const VARIABLE = {\n className: 'variable',\n variants: [\n {\n begin: '\\\\$\\\\(' + hljs.UNDERSCORE_IDENT_RE + '\\\\)',\n contains: [ hljs.BACKSLASH_ESCAPE ]\n },\n { begin: /\\$[@%<?\\^\\+\\*]/ }\n ]\n };\n /* Quoted string with variables inside */\n const QUOTE_STRING = {\n className: 'string',\n begin: /\"/,\n end: /\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n VARIABLE\n ]\n };\n /* Function: $(func arg,...) */\n const FUNC = {\n className: 'variable',\n begin: /\\$\\([\\w-]+\\s/,\n end: /\\)/,\n keywords: { built_in:\n 'subst patsubst strip findstring filter filter-out sort '\n + 'word wordlist firstword lastword dir notdir suffix basename '\n + 'addsuffix addprefix join wildcard realpath abspath error warning '\n + 'shell origin flavor foreach if or and call eval file value' },\n contains: [ VARIABLE ]\n };\n /* Variable assignment */\n const ASSIGNMENT = { begin: '^' + hljs.UNDERSCORE_IDENT_RE + '\\\\s*(?=[:+?]?=)' };\n /* Meta targets (.PHONY) */\n const META = {\n className: 'meta',\n begin: /^\\.PHONY:/,\n end: /$/,\n keywords: {\n $pattern: /[\\.\\w]+/,\n keyword: '.PHONY'\n }\n };\n /* Targets */\n const TARGET = {\n className: 'section',\n begin: /^[^\\s]+:/,\n end: /$/,\n contains: [ VARIABLE ]\n };\n return {\n name: 'Makefile',\n aliases: [\n 'mk',\n 'mak',\n 'make',\n ],\n keywords: {\n $pattern: /[\\w-]+/,\n keyword: 'define endef undefine ifdef ifndef ifeq ifneq else endif '\n + 'include -include sinclude override export unexport private vpath'\n },\n contains: [\n hljs.HASH_COMMENT_MODE,\n VARIABLE,\n QUOTE_STRING,\n FUNC,\n ASSIGNMENT,\n META,\n TARGET\n ]\n };\n}\n\nmodule.exports = makefile;\n","/*\nLanguage: Perl\nAuthor: Peter Leonov <gojpeg@yandex.ru>\nWebsite: https://www.perl.org\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction perl(hljs) {\n const regex = hljs.regex;\n const KEYWORDS = [\n 'abs',\n 'accept',\n 'alarm',\n 'and',\n 'atan2',\n 'bind',\n 'binmode',\n 'bless',\n 'break',\n 'caller',\n 'chdir',\n 'chmod',\n 'chomp',\n 'chop',\n 'chown',\n 'chr',\n 'chroot',\n 'class',\n 'close',\n 'closedir',\n 'connect',\n 'continue',\n 'cos',\n 'crypt',\n 'dbmclose',\n 'dbmopen',\n 'defined',\n 'delete',\n 'die',\n 'do',\n 'dump',\n 'each',\n 'else',\n 'elsif',\n 'endgrent',\n 'endhostent',\n 'endnetent',\n 'endprotoent',\n 'endpwent',\n 'endservent',\n 'eof',\n 'eval',\n 'exec',\n 'exists',\n 'exit',\n 'exp',\n 'fcntl',\n 'field',\n 'fileno',\n 'flock',\n 'for',\n 'foreach',\n 'fork',\n 'format',\n 'formline',\n 'getc',\n 'getgrent',\n 'getgrgid',\n 'getgrnam',\n 'gethostbyaddr',\n 'gethostbyname',\n 'gethostent',\n 'getlogin',\n 'getnetbyaddr',\n 'getnetbyname',\n 'getnetent',\n 'getpeername',\n 'getpgrp',\n 'getpriority',\n 'getprotobyname',\n 'getprotobynumber',\n 'getprotoent',\n 'getpwent',\n 'getpwnam',\n 'getpwuid',\n 'getservbyname',\n 'getservbyport',\n 'getservent',\n 'getsockname',\n 'getsockopt',\n 'given',\n 'glob',\n 'gmtime',\n 'goto',\n 'grep',\n 'gt',\n 'hex',\n 'if',\n 'index',\n 'int',\n 'ioctl',\n 'join',\n 'keys',\n 'kill',\n 'last',\n 'lc',\n 'lcfirst',\n 'length',\n 'link',\n 'listen',\n 'local',\n 'localtime',\n 'log',\n 'lstat',\n 'lt',\n 'ma',\n 'map',\n 'method',\n 'mkdir',\n 'msgctl',\n 'msgget',\n 'msgrcv',\n 'msgsnd',\n 'my',\n 'ne',\n 'next',\n 'no',\n 'not',\n 'oct',\n 'open',\n 'opendir',\n 'or',\n 'ord',\n 'our',\n 'pack',\n 'package',\n 'pipe',\n 'pop',\n 'pos',\n 'print',\n 'printf',\n 'prototype',\n 'push',\n 'q|0',\n 'qq',\n 'quotemeta',\n 'qw',\n 'qx',\n 'rand',\n 'read',\n 'readdir',\n 'readline',\n 'readlink',\n 'readpipe',\n 'recv',\n 'redo',\n 'ref',\n 'rename',\n 'require',\n 'reset',\n 'return',\n 'reverse',\n 'rewinddir',\n 'rindex',\n 'rmdir',\n 'say',\n 'scalar',\n 'seek',\n 'seekdir',\n 'select',\n 'semctl',\n 'semget',\n 'semop',\n 'send',\n 'setgrent',\n 'sethostent',\n 'setnetent',\n 'setpgrp',\n 'setpriority',\n 'setprotoent',\n 'setpwent',\n 'setservent',\n 'setsockopt',\n 'shift',\n 'shmctl',\n 'shmget',\n 'shmread',\n 'shmwrite',\n 'shutdown',\n 'sin',\n 'sleep',\n 'socket',\n 'socketpair',\n 'sort',\n 'splice',\n 'split',\n 'sprintf',\n 'sqrt',\n 'srand',\n 'stat',\n 'state',\n 'study',\n 'sub',\n 'substr',\n 'symlink',\n 'syscall',\n 'sysopen',\n 'sysread',\n 'sysseek',\n 'system',\n 'syswrite',\n 'tell',\n 'telldir',\n 'tie',\n 'tied',\n 'time',\n 'times',\n 'tr',\n 'truncate',\n 'uc',\n 'ucfirst',\n 'umask',\n 'undef',\n 'unless',\n 'unlink',\n 'unpack',\n 'unshift',\n 'untie',\n 'until',\n 'use',\n 'utime',\n 'values',\n 'vec',\n 'wait',\n 'waitpid',\n 'wantarray',\n 'warn',\n 'when',\n 'while',\n 'write',\n 'x|0',\n 'xor',\n 'y|0'\n ];\n\n // https://perldoc.perl.org/perlre#Modifiers\n const REGEX_MODIFIERS = /[dualxmsipngr]{0,12}/; // aa and xx are valid, making max length 12\n const PERL_KEYWORDS = {\n $pattern: /[\\w.]+/,\n keyword: KEYWORDS.join(\" \")\n };\n const SUBST = {\n className: 'subst',\n begin: '[$@]\\\\{',\n end: '\\\\}',\n keywords: PERL_KEYWORDS\n };\n const METHOD = {\n begin: /->\\{/,\n end: /\\}/\n // contains defined later\n };\n const ATTR = {\n scope: 'attr',\n match: /\\s+:\\s*\\w+(\\s*\\(.*?\\))?/,\n };\n const VAR = {\n scope: 'variable',\n variants: [\n { begin: /\\$\\d/ },\n { begin: regex.concat(\n /[$%@](?!\")(\\^\\w\\b|#\\w+(::\\w+)*|\\{\\w+\\}|\\w+(::\\w*)*)/,\n // negative look-ahead tries to avoid matching patterns that are not\n // Perl at all like $ident$, @ident@, etc.\n `(?![A-Za-z])(?![@$%])`\n )\n },\n {\n // Only $= is a special Perl variable and one can't declare @= or %=.\n begin: /[$%@](?!\")[^\\s\\w{=]|\\$=/,\n relevance: 0\n }\n ],\n contains: [ ATTR ],\n };\n const NUMBER = {\n className: 'number',\n variants: [\n // decimal numbers:\n // include the case where a number starts with a dot (eg. .9), and\n // the leading 0? avoids mixing the first and second match on 0.x cases\n { match: /0?\\.[0-9][0-9_]+\\b/ },\n // include the special versioned number (eg. v5.38)\n { match: /\\bv?(0|[1-9][0-9_]*(\\.[0-9_]+)?|[1-9][0-9_]*)\\b/ },\n // non-decimal numbers:\n { match: /\\b0[0-7][0-7_]*\\b/ },\n { match: /\\b0x[0-9a-fA-F][0-9a-fA-F_]*\\b/ },\n { match: /\\b0b[0-1][0-1_]*\\b/ },\n ],\n relevance: 0\n };\n const STRING_CONTAINS = [\n hljs.BACKSLASH_ESCAPE,\n SUBST,\n VAR\n ];\n const REGEX_DELIMS = [\n /!/,\n /\\//,\n /\\|/,\n /\\?/,\n /'/,\n /\"/, // valid but infrequent and weird\n /#/ // valid but infrequent and weird\n ];\n /**\n * @param {string|RegExp} prefix\n * @param {string|RegExp} open\n * @param {string|RegExp} close\n */\n const PAIRED_DOUBLE_RE = (prefix, open, close = '\\\\1') => {\n const middle = (close === '\\\\1')\n ? close\n : regex.concat(close, open);\n return regex.concat(\n regex.concat(\"(?:\", prefix, \")\"),\n open,\n /(?:\\\\.|[^\\\\\\/])*?/,\n middle,\n /(?:\\\\.|[^\\\\\\/])*?/,\n close,\n REGEX_MODIFIERS\n );\n };\n /**\n * @param {string|RegExp} prefix\n * @param {string|RegExp} open\n * @param {string|RegExp} close\n */\n const PAIRED_RE = (prefix, open, close) => {\n return regex.concat(\n regex.concat(\"(?:\", prefix, \")\"),\n open,\n /(?:\\\\.|[^\\\\\\/])*?/,\n close,\n REGEX_MODIFIERS\n );\n };\n const PERL_DEFAULT_CONTAINS = [\n VAR,\n hljs.HASH_COMMENT_MODE,\n hljs.COMMENT(\n /^=\\w/,\n /=cut/,\n { endsWithParent: true }\n ),\n METHOD,\n {\n className: 'string',\n contains: STRING_CONTAINS,\n variants: [\n {\n begin: 'q[qwxr]?\\\\s*\\\\(',\n end: '\\\\)',\n relevance: 5\n },\n {\n begin: 'q[qwxr]?\\\\s*\\\\[',\n end: '\\\\]',\n relevance: 5\n },\n {\n begin: 'q[qwxr]?\\\\s*\\\\{',\n end: '\\\\}',\n relevance: 5\n },\n {\n begin: 'q[qwxr]?\\\\s*\\\\|',\n end: '\\\\|',\n relevance: 5\n },\n {\n begin: 'q[qwxr]?\\\\s*<',\n end: '>',\n relevance: 5\n },\n {\n begin: 'qw\\\\s+q',\n end: 'q',\n relevance: 5\n },\n {\n begin: '\\'',\n end: '\\'',\n contains: [ hljs.BACKSLASH_ESCAPE ]\n },\n {\n begin: '\"',\n end: '\"'\n },\n {\n begin: '`',\n end: '`',\n contains: [ hljs.BACKSLASH_ESCAPE ]\n },\n {\n begin: /\\{\\w+\\}/,\n relevance: 0\n },\n {\n begin: '-?\\\\w+\\\\s*=>',\n relevance: 0\n }\n ]\n },\n NUMBER,\n { // regexp container\n begin: '(\\\\/\\\\/|' + hljs.RE_STARTERS_RE + '|\\\\b(split|return|print|reverse|grep)\\\\b)\\\\s*',\n keywords: 'split return print reverse grep',\n relevance: 0,\n contains: [\n hljs.HASH_COMMENT_MODE,\n {\n className: 'regexp',\n variants: [\n // allow matching common delimiters\n { begin: PAIRED_DOUBLE_RE(\"s|tr|y\", regex.either(...REGEX_DELIMS, { capture: true })) },\n // and then paired delmis\n { begin: PAIRED_DOUBLE_RE(\"s|tr|y\", \"\\\\(\", \"\\\\)\") },\n { begin: PAIRED_DOUBLE_RE(\"s|tr|y\", \"\\\\[\", \"\\\\]\") },\n { begin: PAIRED_DOUBLE_RE(\"s|tr|y\", \"\\\\{\", \"\\\\}\") }\n ],\n relevance: 2\n },\n {\n className: 'regexp',\n variants: [\n {\n // could be a comment in many languages so do not count\n // as relevant\n begin: /(m|qr)\\/\\//,\n relevance: 0\n },\n // prefix is optional with /regex/\n { begin: PAIRED_RE(\"(?:m|qr)?\", /\\//, /\\//) },\n // allow matching common delimiters\n { begin: PAIRED_RE(\"m|qr\", regex.either(...REGEX_DELIMS, { capture: true }), /\\1/) },\n // allow common paired delmins\n { begin: PAIRED_RE(\"m|qr\", /\\(/, /\\)/) },\n { begin: PAIRED_RE(\"m|qr\", /\\[/, /\\]/) },\n { begin: PAIRED_RE(\"m|qr\", /\\{/, /\\}/) }\n ]\n }\n ]\n },\n {\n className: 'function',\n beginKeywords: 'sub method',\n end: '(\\\\s*\\\\(.*?\\\\))?[;{]',\n excludeEnd: true,\n relevance: 5,\n contains: [ hljs.TITLE_MODE, ATTR ]\n },\n {\n className: 'class',\n beginKeywords: 'class',\n end: '[;{]',\n excludeEnd: true,\n relevance: 5,\n contains: [ hljs.TITLE_MODE, ATTR, NUMBER ]\n },\n {\n begin: '-\\\\w\\\\b',\n relevance: 0\n },\n {\n begin: \"^__DATA__$\",\n end: \"^__END__$\",\n subLanguage: 'mojolicious',\n contains: [\n {\n begin: \"^@@.*\",\n end: \"$\",\n className: \"comment\"\n }\n ]\n }\n ];\n SUBST.contains = PERL_DEFAULT_CONTAINS;\n METHOD.contains = PERL_DEFAULT_CONTAINS;\n\n return {\n name: 'Perl',\n aliases: [\n 'pl',\n 'pm'\n ],\n keywords: PERL_KEYWORDS,\n contains: PERL_DEFAULT_CONTAINS\n };\n}\n\nmodule.exports = perl;\n","/*\nLanguage: Objective-C\nAuthor: Valerii Hiora <valerii.hiora@gmail.com>\nContributors: Angel G. Olloqui <angelgarcia.mail@gmail.com>, Matt Diephouse <matt@diephouse.com>, Andrew Farmer <ahfarmer@gmail.com>, Minh Nguyễn <mxn@1ec5.org>\nWebsite: https://developer.apple.com/documentation/objectivec\nCategory: common\n*/\n\nfunction objectivec(hljs) {\n const API_CLASS = {\n className: 'built_in',\n begin: '\\\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\\\w+'\n };\n const IDENTIFIER_RE = /[a-zA-Z@][a-zA-Z0-9_]*/;\n const TYPES = [\n \"int\",\n \"float\",\n \"char\",\n \"unsigned\",\n \"signed\",\n \"short\",\n \"long\",\n \"double\",\n \"wchar_t\",\n \"unichar\",\n \"void\",\n \"bool\",\n \"BOOL\",\n \"id|0\",\n \"_Bool\"\n ];\n const KWS = [\n \"while\",\n \"export\",\n \"sizeof\",\n \"typedef\",\n \"const\",\n \"struct\",\n \"for\",\n \"union\",\n \"volatile\",\n \"static\",\n \"mutable\",\n \"if\",\n \"do\",\n \"return\",\n \"goto\",\n \"enum\",\n \"else\",\n \"break\",\n \"extern\",\n \"asm\",\n \"case\",\n \"default\",\n \"register\",\n \"explicit\",\n \"typename\",\n \"switch\",\n \"continue\",\n \"inline\",\n \"readonly\",\n \"assign\",\n \"readwrite\",\n \"self\",\n \"@synchronized\",\n \"id\",\n \"typeof\",\n \"nonatomic\",\n \"IBOutlet\",\n \"IBAction\",\n \"strong\",\n \"weak\",\n \"copy\",\n \"in\",\n \"out\",\n \"inout\",\n \"bycopy\",\n \"byref\",\n \"oneway\",\n \"__strong\",\n \"__weak\",\n \"__block\",\n \"__autoreleasing\",\n \"@private\",\n \"@protected\",\n \"@public\",\n \"@try\",\n \"@property\",\n \"@end\",\n \"@throw\",\n \"@catch\",\n \"@finally\",\n \"@autoreleasepool\",\n \"@synthesize\",\n \"@dynamic\",\n \"@selector\",\n \"@optional\",\n \"@required\",\n \"@encode\",\n \"@package\",\n \"@import\",\n \"@defs\",\n \"@compatibility_alias\",\n \"__bridge\",\n \"__bridge_transfer\",\n \"__bridge_retained\",\n \"__bridge_retain\",\n \"__covariant\",\n \"__contravariant\",\n \"__kindof\",\n \"_Nonnull\",\n \"_Nullable\",\n \"_Null_unspecified\",\n \"__FUNCTION__\",\n \"__PRETTY_FUNCTION__\",\n \"__attribute__\",\n \"getter\",\n \"setter\",\n \"retain\",\n \"unsafe_unretained\",\n \"nonnull\",\n \"nullable\",\n \"null_unspecified\",\n \"null_resettable\",\n \"class\",\n \"instancetype\",\n \"NS_DESIGNATED_INITIALIZER\",\n \"NS_UNAVAILABLE\",\n \"NS_REQUIRES_SUPER\",\n \"NS_RETURNS_INNER_POINTER\",\n \"NS_INLINE\",\n \"NS_AVAILABLE\",\n \"NS_DEPRECATED\",\n \"NS_ENUM\",\n \"NS_OPTIONS\",\n \"NS_SWIFT_UNAVAILABLE\",\n \"NS_ASSUME_NONNULL_BEGIN\",\n \"NS_ASSUME_NONNULL_END\",\n \"NS_REFINED_FOR_SWIFT\",\n \"NS_SWIFT_NAME\",\n \"NS_SWIFT_NOTHROW\",\n \"NS_DURING\",\n \"NS_HANDLER\",\n \"NS_ENDHANDLER\",\n \"NS_VALUERETURN\",\n \"NS_VOIDRETURN\"\n ];\n const LITERALS = [\n \"false\",\n \"true\",\n \"FALSE\",\n \"TRUE\",\n \"nil\",\n \"YES\",\n \"NO\",\n \"NULL\"\n ];\n const BUILT_INS = [\n \"dispatch_once_t\",\n \"dispatch_queue_t\",\n \"dispatch_sync\",\n \"dispatch_async\",\n \"dispatch_once\"\n ];\n const KEYWORDS = {\n \"variable.language\": [\n \"this\",\n \"super\"\n ],\n $pattern: IDENTIFIER_RE,\n keyword: KWS,\n literal: LITERALS,\n built_in: BUILT_INS,\n type: TYPES\n };\n const CLASS_KEYWORDS = {\n $pattern: IDENTIFIER_RE,\n keyword: [\n \"@interface\",\n \"@class\",\n \"@protocol\",\n \"@implementation\"\n ]\n };\n return {\n name: 'Objective-C',\n aliases: [\n 'mm',\n 'objc',\n 'obj-c',\n 'obj-c++',\n 'objective-c++'\n ],\n keywords: KEYWORDS,\n illegal: '</',\n contains: [\n API_CLASS,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.C_NUMBER_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.APOS_STRING_MODE,\n {\n className: 'string',\n variants: [\n {\n begin: '@\"',\n end: '\"',\n illegal: '\\\\n',\n contains: [ hljs.BACKSLASH_ESCAPE ]\n }\n ]\n },\n {\n className: 'meta',\n begin: /#\\s*[a-z]+\\b/,\n end: /$/,\n keywords: { keyword:\n 'if else elif endif define undef warning error line '\n + 'pragma ifdef ifndef include' },\n contains: [\n {\n begin: /\\\\\\n/,\n relevance: 0\n },\n hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string' }),\n {\n className: 'string',\n begin: /<.*?>/,\n end: /$/,\n illegal: '\\\\n'\n },\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n {\n className: 'class',\n begin: '(' + CLASS_KEYWORDS.keyword.join('|') + ')\\\\b',\n end: /(\\{|$)/,\n excludeEnd: true,\n keywords: CLASS_KEYWORDS,\n contains: [ hljs.UNDERSCORE_TITLE_MODE ]\n },\n {\n begin: '\\\\.' + hljs.UNDERSCORE_IDENT_RE,\n relevance: 0\n }\n ]\n };\n}\n\nmodule.exports = objectivec;\n","/*\nLanguage: PHP\nAuthor: Victor Karamzin <Victor.Karamzin@enterra-inc.com>\nContributors: Evgeny Stepanischev <imbolk@gmail.com>, Ivan Sagalaev <maniac@softwaremaniacs.org>\nWebsite: https://www.php.net\nCategory: common\n*/\n\n/**\n * @param {HLJSApi} hljs\n * @returns {LanguageDetail}\n * */\nfunction php(hljs) {\n const regex = hljs.regex;\n // negative look-ahead tries to avoid matching patterns that are not\n // Perl at all like $ident$, @ident@, etc.\n const NOT_PERL_ETC = /(?![A-Za-z0-9])(?![$])/;\n const IDENT_RE = regex.concat(\n /[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*/,\n NOT_PERL_ETC);\n // Will not detect camelCase classes\n const PASCAL_CASE_CLASS_NAME_RE = regex.concat(\n /(\\\\?[A-Z][a-z0-9_\\x7f-\\xff]+|\\\\?[A-Z]+(?=[A-Z][a-z0-9_\\x7f-\\xff])){1,}/,\n NOT_PERL_ETC);\n const VARIABLE = {\n scope: 'variable',\n match: '\\\\$+' + IDENT_RE,\n };\n const PREPROCESSOR = {\n scope: 'meta',\n variants: [\n { begin: /<\\?php/, relevance: 10 }, // boost for obvious PHP\n { begin: /<\\?=/ },\n // less relevant per PSR-1 which says not to use short-tags\n { begin: /<\\?/, relevance: 0.1 },\n { begin: /\\?>/ } // end php tag\n ]\n };\n const SUBST = {\n scope: 'subst',\n variants: [\n { begin: /\\$\\w+/ },\n {\n begin: /\\{\\$/,\n end: /\\}/\n }\n ]\n };\n const SINGLE_QUOTED = hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null, });\n const DOUBLE_QUOTED = hljs.inherit(hljs.QUOTE_STRING_MODE, {\n illegal: null,\n contains: hljs.QUOTE_STRING_MODE.contains.concat(SUBST),\n });\n\n const HEREDOC = {\n begin: /<<<[ \\t]*(?:(\\w+)|\"(\\w+)\")\\n/,\n end: /[ \\t]*(\\w+)\\b/,\n contains: hljs.QUOTE_STRING_MODE.contains.concat(SUBST),\n 'on:begin': (m, resp) => { resp.data._beginMatch = m[1] || m[2]; },\n 'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); },\n };\n\n const NOWDOC = hljs.END_SAME_AS_BEGIN({\n begin: /<<<[ \\t]*'(\\w+)'\\n/,\n end: /[ \\t]*(\\w+)\\b/,\n });\n // list of valid whitespaces because non-breaking space might be part of a IDENT_RE\n const WHITESPACE = '[ \\t\\n]';\n const STRING = {\n scope: 'string',\n variants: [\n DOUBLE_QUOTED,\n SINGLE_QUOTED,\n HEREDOC,\n NOWDOC\n ]\n };\n const NUMBER = {\n scope: 'number',\n variants: [\n { begin: `\\\\b0[bB][01]+(?:_[01]+)*\\\\b` }, // Binary w/ underscore support\n { begin: `\\\\b0[oO][0-7]+(?:_[0-7]+)*\\\\b` }, // Octals w/ underscore support\n { begin: `\\\\b0[xX][\\\\da-fA-F]+(?:_[\\\\da-fA-F]+)*\\\\b` }, // Hex w/ underscore support\n // Decimals w/ underscore support, with optional fragments and scientific exponent (e) suffix.\n { begin: `(?:\\\\b\\\\d+(?:_\\\\d+)*(\\\\.(?:\\\\d+(?:_\\\\d+)*))?|\\\\B\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?` }\n ],\n relevance: 0\n };\n const LITERALS = [\n \"false\",\n \"null\",\n \"true\"\n ];\n const KWS = [\n // Magic constants:\n // <https://www.php.net/manual/en/language.constants.predefined.php>\n \"__CLASS__\",\n \"__DIR__\",\n \"__FILE__\",\n \"__FUNCTION__\",\n \"__COMPILER_HALT_OFFSET__\",\n \"__LINE__\",\n \"__METHOD__\",\n \"__NAMESPACE__\",\n \"__TRAIT__\",\n // Function that look like language construct or language construct that look like function:\n // List of keywords that may not require parenthesis\n \"die\",\n \"echo\",\n \"exit\",\n \"include\",\n \"include_once\",\n \"print\",\n \"require\",\n \"require_once\",\n // These are not language construct (function) but operate on the currently-executing function and can access the current symbol table\n // 'compact extract func_get_arg func_get_args func_num_args get_called_class get_parent_class ' +\n // Other keywords:\n // <https://www.php.net/manual/en/reserved.php>\n // <https://www.php.net/manual/en/language.types.type-juggling.php>\n \"array\",\n \"abstract\",\n \"and\",\n \"as\",\n \"binary\",\n \"bool\",\n \"boolean\",\n \"break\",\n \"callable\",\n \"case\",\n \"catch\",\n \"class\",\n \"clone\",\n \"const\",\n \"continue\",\n \"declare\",\n \"default\",\n \"do\",\n \"double\",\n \"else\",\n \"elseif\",\n \"empty\",\n \"enddeclare\",\n \"endfor\",\n \"endforeach\",\n \"endif\",\n \"endswitch\",\n \"endwhile\",\n \"enum\",\n \"eval\",\n \"extends\",\n \"final\",\n \"finally\",\n \"float\",\n \"for\",\n \"foreach\",\n \"from\",\n \"global\",\n \"goto\",\n \"if\",\n \"implements\",\n \"instanceof\",\n \"insteadof\",\n \"int\",\n \"integer\",\n \"interface\",\n \"isset\",\n \"iterable\",\n \"list\",\n \"match|0\",\n \"mixed\",\n \"new\",\n \"never\",\n \"object\",\n \"or\",\n \"private\",\n \"protected\",\n \"public\",\n \"readonly\",\n \"real\",\n \"return\",\n \"string\",\n \"switch\",\n \"throw\",\n \"trait\",\n \"try\",\n \"unset\",\n \"use\",\n \"var\",\n \"void\",\n \"while\",\n \"xor\",\n \"yield\"\n ];\n\n const BUILT_INS = [\n // Standard PHP library:\n // <https://www.php.net/manual/en/book.spl.php>\n \"Error|0\",\n \"AppendIterator\",\n \"ArgumentCountError\",\n \"ArithmeticError\",\n \"ArrayIterator\",\n \"ArrayObject\",\n \"AssertionError\",\n \"BadFunctionCallException\",\n \"BadMethodCallException\",\n \"CachingIterator\",\n \"CallbackFilterIterator\",\n \"CompileError\",\n \"Countable\",\n \"DirectoryIterator\",\n \"DivisionByZeroError\",\n \"DomainException\",\n \"EmptyIterator\",\n \"ErrorException\",\n \"Exception\",\n \"FilesystemIterator\",\n \"FilterIterator\",\n \"GlobIterator\",\n \"InfiniteIterator\",\n \"InvalidArgumentException\",\n \"IteratorIterator\",\n \"LengthException\",\n \"LimitIterator\",\n \"LogicException\",\n \"MultipleIterator\",\n \"NoRewindIterator\",\n \"OutOfBoundsException\",\n \"OutOfRangeException\",\n \"OuterIterator\",\n \"OverflowException\",\n \"ParentIterator\",\n \"ParseError\",\n \"RangeException\",\n \"RecursiveArrayIterator\",\n \"RecursiveCachingIterator\",\n \"RecursiveCallbackFilterIterator\",\n \"RecursiveDirectoryIterator\",\n \"RecursiveFilterIterator\",\n \"RecursiveIterator\",\n \"RecursiveIteratorIterator\",\n \"RecursiveRegexIterator\",\n \"RecursiveTreeIterator\",\n \"RegexIterator\",\n \"RuntimeException\",\n \"SeekableIterator\",\n \"SplDoublyLinkedList\",\n \"SplFileInfo\",\n \"SplFileObject\",\n \"SplFixedArray\",\n \"SplHeap\",\n \"SplMaxHeap\",\n \"SplMinHeap\",\n \"SplObjectStorage\",\n \"SplObserver\",\n \"SplPriorityQueue\",\n \"SplQueue\",\n \"SplStack\",\n \"SplSubject\",\n \"SplTempFileObject\",\n \"TypeError\",\n \"UnderflowException\",\n \"UnexpectedValueException\",\n \"UnhandledMatchError\",\n // Reserved interfaces:\n // <https://www.php.net/manual/en/reserved.interfaces.php>\n \"ArrayAccess\",\n \"BackedEnum\",\n \"Closure\",\n \"Fiber\",\n \"Generator\",\n \"Iterator\",\n \"IteratorAggregate\",\n \"Serializable\",\n \"Stringable\",\n \"Throwable\",\n \"Traversable\",\n \"UnitEnum\",\n \"WeakReference\",\n \"WeakMap\",\n // Reserved classes:\n // <https://www.php.net/manual/en/reserved.classes.php>\n \"Directory\",\n \"__PHP_Incomplete_Class\",\n \"parent\",\n \"php_user_filter\",\n \"self\",\n \"static\",\n \"stdClass\"\n ];\n\n /** Dual-case keywords\n *\n * [\"then\",\"FILE\"] =>\n * [\"then\", \"THEN\", \"FILE\", \"file\"]\n *\n * @param {string[]} items */\n const dualCase = (items) => {\n /** @type string[] */\n const result = [];\n items.forEach(item => {\n result.push(item);\n if (item.toLowerCase() === item) {\n result.push(item.toUpperCase());\n } else {\n result.push(item.toLowerCase());\n }\n });\n return result;\n };\n\n const KEYWORDS = {\n keyword: KWS,\n literal: dualCase(LITERALS),\n built_in: BUILT_INS,\n };\n\n /**\n * @param {string[]} items */\n const normalizeKeywords = (items) => {\n return items.map(item => {\n return item.replace(/\\|\\d+$/, \"\");\n });\n };\n\n const CONSTRUCTOR_CALL = { variants: [\n {\n match: [\n /new/,\n regex.concat(WHITESPACE, \"+\"),\n // to prevent built ins from being confused as the class constructor call\n regex.concat(\"(?!\", normalizeKeywords(BUILT_INS).join(\"\\\\b|\"), \"\\\\b)\"),\n PASCAL_CASE_CLASS_NAME_RE,\n ],\n scope: {\n 1: \"keyword\",\n 4: \"title.class\",\n },\n }\n ] };\n\n const CONSTANT_REFERENCE = regex.concat(IDENT_RE, \"\\\\b(?!\\\\()\");\n\n const LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON = { variants: [\n {\n match: [\n regex.concat(\n /::/,\n regex.lookahead(/(?!class\\b)/)\n ),\n CONSTANT_REFERENCE,\n ],\n scope: { 2: \"variable.constant\", },\n },\n {\n match: [\n /::/,\n /class/,\n ],\n scope: { 2: \"variable.language\", },\n },\n {\n match: [\n PASCAL_CASE_CLASS_NAME_RE,\n regex.concat(\n /::/,\n regex.lookahead(/(?!class\\b)/)\n ),\n CONSTANT_REFERENCE,\n ],\n scope: {\n 1: \"title.class\",\n 3: \"variable.constant\",\n },\n },\n {\n match: [\n PASCAL_CASE_CLASS_NAME_RE,\n regex.concat(\n \"::\",\n regex.lookahead(/(?!class\\b)/)\n ),\n ],\n scope: { 1: \"title.class\", },\n },\n {\n match: [\n PASCAL_CASE_CLASS_NAME_RE,\n /::/,\n /class/,\n ],\n scope: {\n 1: \"title.class\",\n 3: \"variable.language\",\n },\n }\n ] };\n\n const NAMED_ARGUMENT = {\n scope: 'attr',\n match: regex.concat(IDENT_RE, regex.lookahead(':'), regex.lookahead(/(?!::)/)),\n };\n const PARAMS_MODE = {\n relevance: 0,\n begin: /\\(/,\n end: /\\)/,\n keywords: KEYWORDS,\n contains: [\n NAMED_ARGUMENT,\n VARIABLE,\n LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n hljs.C_BLOCK_COMMENT_MODE,\n STRING,\n NUMBER,\n CONSTRUCTOR_CALL,\n ],\n };\n const FUNCTION_INVOKE = {\n relevance: 0,\n match: [\n /\\b/,\n // to prevent keywords from being confused as the function title\n regex.concat(\"(?!fn\\\\b|function\\\\b|\", normalizeKeywords(KWS).join(\"\\\\b|\"), \"|\", normalizeKeywords(BUILT_INS).join(\"\\\\b|\"), \"\\\\b)\"),\n IDENT_RE,\n regex.concat(WHITESPACE, \"*\"),\n regex.lookahead(/(?=\\()/)\n ],\n scope: { 3: \"title.function.invoke\", },\n contains: [ PARAMS_MODE ]\n };\n PARAMS_MODE.contains.push(FUNCTION_INVOKE);\n\n const ATTRIBUTE_CONTAINS = [\n NAMED_ARGUMENT,\n LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n hljs.C_BLOCK_COMMENT_MODE,\n STRING,\n NUMBER,\n CONSTRUCTOR_CALL,\n ];\n\n const ATTRIBUTES = {\n begin: regex.concat(/#\\[\\s*/, PASCAL_CASE_CLASS_NAME_RE),\n beginScope: \"meta\",\n end: /]/,\n endScope: \"meta\",\n keywords: {\n literal: LITERALS,\n keyword: [\n 'new',\n 'array',\n ]\n },\n contains: [\n {\n begin: /\\[/,\n end: /]/,\n keywords: {\n literal: LITERALS,\n keyword: [\n 'new',\n 'array',\n ]\n },\n contains: [\n 'self',\n ...ATTRIBUTE_CONTAINS,\n ]\n },\n ...ATTRIBUTE_CONTAINS,\n {\n scope: 'meta',\n match: PASCAL_CASE_CLASS_NAME_RE\n }\n ]\n };\n\n return {\n case_insensitive: false,\n keywords: KEYWORDS,\n contains: [\n ATTRIBUTES,\n hljs.HASH_COMMENT_MODE,\n hljs.COMMENT('//', '$'),\n hljs.COMMENT(\n '/\\\\*',\n '\\\\*/',\n { contains: [\n {\n scope: 'doctag',\n match: '@[A-Za-z]+'\n }\n ] }\n ),\n {\n match: /__halt_compiler\\(\\);/,\n keywords: '__halt_compiler',\n starts: {\n scope: \"comment\",\n end: hljs.MATCH_NOTHING_RE,\n contains: [\n {\n match: /\\?>/,\n scope: \"meta\",\n endsParent: true\n }\n ]\n }\n },\n PREPROCESSOR,\n {\n scope: 'variable.language',\n match: /\\$this\\b/\n },\n VARIABLE,\n FUNCTION_INVOKE,\n LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n {\n match: [\n /const/,\n /\\s/,\n IDENT_RE,\n ],\n scope: {\n 1: \"keyword\",\n 3: \"variable.constant\",\n },\n },\n CONSTRUCTOR_CALL,\n {\n scope: 'function',\n relevance: 0,\n beginKeywords: 'fn function',\n end: /[;{]/,\n excludeEnd: true,\n illegal: '[$%\\\\[]',\n contains: [\n { beginKeywords: 'use', },\n hljs.UNDERSCORE_TITLE_MODE,\n {\n begin: '=>', // No markup, just a relevance booster\n endsParent: true\n },\n {\n scope: 'params',\n begin: '\\\\(',\n end: '\\\\)',\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS,\n contains: [\n 'self',\n VARIABLE,\n LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n hljs.C_BLOCK_COMMENT_MODE,\n STRING,\n NUMBER\n ]\n },\n ]\n },\n {\n scope: 'class',\n variants: [\n {\n beginKeywords: \"enum\",\n illegal: /[($\"]/\n },\n {\n beginKeywords: \"class interface trait\",\n illegal: /[:($\"]/\n }\n ],\n relevance: 0,\n end: /\\{/,\n excludeEnd: true,\n contains: [\n { beginKeywords: 'extends implements' },\n hljs.UNDERSCORE_TITLE_MODE\n ]\n },\n // both use and namespace still use \"old style\" rules (vs multi-match)\n // because the namespace name can include `\\` and we still want each\n // element to be treated as its own *individual* title\n {\n beginKeywords: 'namespace',\n relevance: 0,\n end: ';',\n illegal: /[.']/,\n contains: [ hljs.inherit(hljs.UNDERSCORE_TITLE_MODE, { scope: \"title.class\" }) ]\n },\n {\n beginKeywords: 'use',\n relevance: 0,\n end: ';',\n contains: [\n // TODO: title.function vs title.class\n {\n match: /\\b(as|const|function)\\b/,\n scope: \"keyword\"\n },\n // TODO: could be title.class or title.function\n hljs.UNDERSCORE_TITLE_MODE\n ]\n },\n STRING,\n NUMBER,\n ]\n };\n}\n\nmodule.exports = php;\n","/*\nLanguage: PHP Template\nRequires: xml.js, php.js\nAuthor: Josh Goebel <hello@joshgoebel.com>\nWebsite: https://www.php.net\nCategory: common\n*/\n\nfunction phpTemplate(hljs) {\n return {\n name: \"PHP template\",\n subLanguage: 'xml',\n contains: [\n {\n begin: /<\\?(php|=)?/,\n end: /\\?>/,\n subLanguage: 'php',\n contains: [\n // We don't want the php closing tag ?> to close the PHP block when\n // inside any of the following blocks:\n {\n begin: '/\\\\*',\n end: '\\\\*/',\n skip: true\n },\n {\n begin: 'b\"',\n end: '\"',\n skip: true\n },\n {\n begin: 'b\\'',\n end: '\\'',\n skip: true\n },\n hljs.inherit(hljs.APOS_STRING_MODE, {\n illegal: null,\n className: null,\n contains: null,\n skip: true\n }),\n hljs.inherit(hljs.QUOTE_STRING_MODE, {\n illegal: null,\n className: null,\n contains: null,\n skip: true\n })\n ]\n }\n ]\n };\n}\n\nmodule.exports = phpTemplate;\n","/*\nLanguage: Plain text\nAuthor: Egor Rogov (e.rogov@postgrespro.ru)\nDescription: Plain text without any highlighting.\nCategory: common\n*/\n\nfunction plaintext(hljs) {\n return {\n name: 'Plain text',\n aliases: [\n 'text',\n 'txt'\n ],\n disableAutodetect: true\n };\n}\n\nmodule.exports = plaintext;\n","/*\nLanguage: Python\nDescription: Python is an interpreted, object-oriented, high-level programming language with dynamic semantics.\nWebsite: https://www.python.org\nCategory: common\n*/\n\nfunction python(hljs) {\n const regex = hljs.regex;\n const IDENT_RE = /[\\p{XID_Start}_]\\p{XID_Continue}*/u;\n const RESERVED_WORDS = [\n 'and',\n 'as',\n 'assert',\n 'async',\n 'await',\n 'break',\n 'case',\n 'class',\n 'continue',\n 'def',\n 'del',\n 'elif',\n 'else',\n 'except',\n 'finally',\n 'for',\n 'from',\n 'global',\n 'if',\n 'import',\n 'in',\n 'is',\n 'lambda',\n 'match',\n 'nonlocal|10',\n 'not',\n 'or',\n 'pass',\n 'raise',\n 'return',\n 'try',\n 'while',\n 'with',\n 'yield'\n ];\n\n const BUILT_INS = [\n '__import__',\n 'abs',\n 'all',\n 'any',\n 'ascii',\n 'bin',\n 'bool',\n 'breakpoint',\n 'bytearray',\n 'bytes',\n 'callable',\n 'chr',\n 'classmethod',\n 'compile',\n 'complex',\n 'delattr',\n 'dict',\n 'dir',\n 'divmod',\n 'enumerate',\n 'eval',\n 'exec',\n 'filter',\n 'float',\n 'format',\n 'frozenset',\n 'getattr',\n 'globals',\n 'hasattr',\n 'hash',\n 'help',\n 'hex',\n 'id',\n 'input',\n 'int',\n 'isinstance',\n 'issubclass',\n 'iter',\n 'len',\n 'list',\n 'locals',\n 'map',\n 'max',\n 'memoryview',\n 'min',\n 'next',\n 'object',\n 'oct',\n 'open',\n 'ord',\n 'pow',\n 'print',\n 'property',\n 'range',\n 'repr',\n 'reversed',\n 'round',\n 'set',\n 'setattr',\n 'slice',\n 'sorted',\n 'staticmethod',\n 'str',\n 'sum',\n 'super',\n 'tuple',\n 'type',\n 'vars',\n 'zip'\n ];\n\n const LITERALS = [\n '__debug__',\n 'Ellipsis',\n 'False',\n 'None',\n 'NotImplemented',\n 'True'\n ];\n\n // https://docs.python.org/3/library/typing.html\n // TODO: Could these be supplemented by a CamelCase matcher in certain\n // contexts, leaving these remaining only for relevance hinting?\n const TYPES = [\n \"Any\",\n \"Callable\",\n \"Coroutine\",\n \"Dict\",\n \"List\",\n \"Literal\",\n \"Generic\",\n \"Optional\",\n \"Sequence\",\n \"Set\",\n \"Tuple\",\n \"Type\",\n \"Union\"\n ];\n\n const KEYWORDS = {\n $pattern: /[A-Za-z]\\w+|__\\w+__/,\n keyword: RESERVED_WORDS,\n built_in: BUILT_INS,\n literal: LITERALS,\n type: TYPES\n };\n\n const PROMPT = {\n className: 'meta',\n begin: /^(>>>|\\.\\.\\.) /\n };\n\n const SUBST = {\n className: 'subst',\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS,\n illegal: /#/\n };\n\n const LITERAL_BRACKET = {\n begin: /\\{\\{/,\n relevance: 0\n };\n\n const STRING = {\n className: 'string',\n contains: [ hljs.BACKSLASH_ESCAPE ],\n variants: [\n {\n begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,\n end: /'''/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT\n ],\n relevance: 10\n },\n {\n begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?\"\"\"/,\n end: /\"\"\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT\n ],\n relevance: 10\n },\n {\n begin: /([fF][rR]|[rR][fF]|[fF])'''/,\n end: /'''/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n {\n begin: /([fF][rR]|[rR][fF]|[fF])\"\"\"/,\n end: /\"\"\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n {\n begin: /([uU]|[rR])'/,\n end: /'/,\n relevance: 10\n },\n {\n begin: /([uU]|[rR])\"/,\n end: /\"/,\n relevance: 10\n },\n {\n begin: /([bB]|[bB][rR]|[rR][bB])'/,\n end: /'/\n },\n {\n begin: /([bB]|[bB][rR]|[rR][bB])\"/,\n end: /\"/\n },\n {\n begin: /([fF][rR]|[rR][fF]|[fF])'/,\n end: /'/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n {\n begin: /([fF][rR]|[rR][fF]|[fF])\"/,\n end: /\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ]\n };\n\n // https://docs.python.org/3.9/reference/lexical_analysis.html#numeric-literals\n const digitpart = '[0-9](_?[0-9])*';\n const pointfloat = `(\\\\b(${digitpart}))?\\\\.(${digitpart})|\\\\b(${digitpart})\\\\.`;\n // Whitespace after a number (or any lexical token) is needed only if its absence\n // would change the tokenization\n // https://docs.python.org/3.9/reference/lexical_analysis.html#whitespace-between-tokens\n // We deviate slightly, requiring a word boundary or a keyword\n // to avoid accidentally recognizing *prefixes* (e.g., `0` in `0x41` or `08` or `0__1`)\n const lookahead = `\\\\b|${RESERVED_WORDS.join('|')}`;\n const NUMBER = {\n className: 'number',\n relevance: 0,\n variants: [\n // exponentfloat, pointfloat\n // https://docs.python.org/3.9/reference/lexical_analysis.html#floating-point-literals\n // optionally imaginary\n // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n // Note: no leading \\b because floats can start with a decimal point\n // and we don't want to mishandle e.g. `fn(.5)`,\n // no trailing \\b for pointfloat because it can end with a decimal point\n // and we don't want to mishandle e.g. `0..hex()`; this should be safe\n // because both MUST contain a decimal point and so cannot be confused with\n // the interior part of an identifier\n {\n begin: `(\\\\b(${digitpart})|(${pointfloat}))[eE][+-]?(${digitpart})[jJ]?(?=${lookahead})`\n },\n {\n begin: `(${pointfloat})[jJ]?`\n },\n\n // decinteger, bininteger, octinteger, hexinteger\n // https://docs.python.org/3.9/reference/lexical_analysis.html#integer-literals\n // optionally \"long\" in Python 2\n // https://docs.python.org/2.7/reference/lexical_analysis.html#integer-and-long-integer-literals\n // decinteger is optionally imaginary\n // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n {\n begin: `\\\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${lookahead})`\n },\n {\n begin: `\\\\b0[bB](_?[01])+[lL]?(?=${lookahead})`\n },\n {\n begin: `\\\\b0[oO](_?[0-7])+[lL]?(?=${lookahead})`\n },\n {\n begin: `\\\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${lookahead})`\n },\n\n // imagnumber (digitpart-based)\n // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n {\n begin: `\\\\b(${digitpart})[jJ](?=${lookahead})`\n }\n ]\n };\n const COMMENT_TYPE = {\n className: \"comment\",\n begin: regex.lookahead(/# type:/),\n end: /$/,\n keywords: KEYWORDS,\n contains: [\n { // prevent keywords from coloring `type`\n begin: /# type:/\n },\n // comment within a datatype comment includes no keywords\n {\n begin: /#/,\n end: /\\b\\B/,\n endsWithParent: true\n }\n ]\n };\n const PARAMS = {\n className: 'params',\n variants: [\n // Exclude params in functions without params\n {\n className: \"\",\n begin: /\\(\\s*\\)/,\n skip: true\n },\n {\n begin: /\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS,\n contains: [\n 'self',\n PROMPT,\n NUMBER,\n STRING,\n hljs.HASH_COMMENT_MODE\n ]\n }\n ]\n };\n SUBST.contains = [\n STRING,\n NUMBER,\n PROMPT\n ];\n\n return {\n name: 'Python',\n aliases: [\n 'py',\n 'gyp',\n 'ipython'\n ],\n unicodeRegex: true,\n keywords: KEYWORDS,\n illegal: /(<\\/|\\?)|=>/,\n contains: [\n PROMPT,\n NUMBER,\n {\n // very common convention\n scope: 'variable.language',\n match: /\\bself\\b/\n },\n {\n // eat \"if\" prior to string so that it won't accidentally be\n // labeled as an f-string\n beginKeywords: \"if\",\n relevance: 0\n },\n { match: /\\bor\\b/, scope: \"keyword\" },\n STRING,\n COMMENT_TYPE,\n hljs.HASH_COMMENT_MODE,\n {\n match: [\n /\\bdef/, /\\s+/,\n IDENT_RE,\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [ PARAMS ]\n },\n {\n variants: [\n {\n match: [\n /\\bclass/, /\\s+/,\n IDENT_RE, /\\s*/,\n /\\(\\s*/, IDENT_RE,/\\s*\\)/\n ],\n },\n {\n match: [\n /\\bclass/, /\\s+/,\n IDENT_RE\n ],\n }\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\",\n 6: \"title.class.inherited\",\n }\n },\n {\n className: 'meta',\n begin: /^[\\t ]*@/,\n end: /(?=#)|$/,\n contains: [\n NUMBER,\n PARAMS,\n STRING\n ]\n }\n ]\n };\n}\n\nmodule.exports = python;\n","/*\nLanguage: Python REPL\nRequires: python.js\nAuthor: Josh Goebel <hello@joshgoebel.com>\nCategory: common\n*/\n\nfunction pythonRepl(hljs) {\n return {\n aliases: [ 'pycon' ],\n contains: [\n {\n className: 'meta.prompt',\n starts: {\n // a space separates the REPL prefix from the actual code\n // this is purely for cleaner HTML output\n end: / |$/,\n starts: {\n end: '$',\n subLanguage: 'python'\n }\n },\n variants: [\n { begin: /^>>>(?=[ ]|$)/ },\n { begin: /^\\.\\.\\.(?=[ ]|$)/ }\n ]\n }\n ]\n };\n}\n\nmodule.exports = pythonRepl;\n","/*\nLanguage: R\nDescription: R is a free software environment for statistical computing and graphics.\nAuthor: Joe Cheng <joe@rstudio.org>\nContributors: Konrad Rudolph <konrad.rudolph@gmail.com>\nWebsite: https://www.r-project.org\nCategory: common,scientific\n*/\n\n/** @type LanguageFn */\nfunction r(hljs) {\n const regex = hljs.regex;\n // Identifiers in R cannot start with `_`, but they can start with `.` if it\n // is not immediately followed by a digit.\n // R also supports quoted identifiers, which are near-arbitrary sequences\n // delimited by backticks (`…`), which may contain escape sequences. These are\n // handled in a separate mode. See `test/markup/r/names.txt` for examples.\n // FIXME: Support Unicode identifiers.\n const IDENT_RE = /(?:(?:[a-zA-Z]|\\.[._a-zA-Z])[._a-zA-Z0-9]*)|\\.(?!\\d)/;\n const NUMBER_TYPES_RE = regex.either(\n // Special case: only hexadecimal binary powers can contain fractions\n /0[xX][0-9a-fA-F]+\\.[0-9a-fA-F]*[pP][+-]?\\d+i?/,\n // Hexadecimal numbers without fraction and optional binary power\n /0[xX][0-9a-fA-F]+(?:[pP][+-]?\\d+)?[Li]?/,\n // Decimal numbers\n /(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?[Li]?/\n );\n const OPERATORS_RE = /[=!<>:]=|\\|\\||&&|:::?|<-|<<-|->>|->|\\|>|[-+*\\/?!$&|:<=>@^~]|\\*\\*/;\n const PUNCTUATION_RE = regex.either(\n /[()]/,\n /[{}]/,\n /\\[\\[/,\n /[[\\]]/,\n /\\\\/,\n /,/\n );\n\n return {\n name: 'R',\n\n keywords: {\n $pattern: IDENT_RE,\n keyword:\n 'function if in break next repeat else for while',\n literal:\n 'NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 '\n + 'NA_character_|10 NA_complex_|10',\n built_in:\n // Builtin constants\n 'LETTERS letters month.abb month.name pi T F '\n // Primitive functions\n // These are all the functions in `base` that are implemented as a\n // `.Primitive`, minus those functions that are also keywords.\n + 'abs acos acosh all any anyNA Arg as.call as.character '\n + 'as.complex as.double as.environment as.integer as.logical '\n + 'as.null.default as.numeric as.raw asin asinh atan atanh attr '\n + 'attributes baseenv browser c call ceiling class Conj cos cosh '\n + 'cospi cummax cummin cumprod cumsum digamma dim dimnames '\n + 'emptyenv exp expression floor forceAndCall gamma gc.time '\n + 'globalenv Im interactive invisible is.array is.atomic is.call '\n + 'is.character is.complex is.double is.environment is.expression '\n + 'is.finite is.function is.infinite is.integer is.language '\n + 'is.list is.logical is.matrix is.na is.name is.nan is.null '\n + 'is.numeric is.object is.pairlist is.raw is.recursive is.single '\n + 'is.symbol lazyLoadDBfetch length lgamma list log max min '\n + 'missing Mod names nargs nzchar oldClass on.exit pos.to.env '\n + 'proc.time prod quote range Re rep retracemem return round '\n + 'seq_along seq_len seq.int sign signif sin sinh sinpi sqrt '\n + 'standardGeneric substitute sum switch tan tanh tanpi tracemem '\n + 'trigamma trunc unclass untracemem UseMethod xtfrm',\n },\n\n contains: [\n // Roxygen comments\n hljs.COMMENT(\n /#'/,\n /$/,\n { contains: [\n {\n // Handle `@examples` separately to cause all subsequent code\n // until the next `@`-tag on its own line to be kept as-is,\n // preventing highlighting. This code is example R code, so nested\n // doctags shouldn’t be treated as such. See\n // `test/markup/r/roxygen.txt` for an example.\n scope: 'doctag',\n match: /@examples/,\n starts: {\n end: regex.lookahead(regex.either(\n // end if another doc comment\n /\\n^#'\\s*(?=@[a-zA-Z]+)/,\n // or a line with no comment\n /\\n^(?!#')/\n )),\n endsParent: true\n }\n },\n {\n // Handle `@param` to highlight the parameter name following\n // after.\n scope: 'doctag',\n begin: '@param',\n end: /$/,\n contains: [\n {\n scope: 'variable',\n variants: [\n { match: IDENT_RE },\n { match: /`(?:\\\\.|[^`\\\\])+`/ }\n ],\n endsParent: true\n }\n ]\n },\n {\n scope: 'doctag',\n match: /@[a-zA-Z]+/\n },\n {\n scope: 'keyword',\n match: /\\\\[a-zA-Z]+/\n }\n ] }\n ),\n\n hljs.HASH_COMMENT_MODE,\n\n {\n scope: 'string',\n contains: [ hljs.BACKSLASH_ESCAPE ],\n variants: [\n hljs.END_SAME_AS_BEGIN({\n begin: /[rR]\"(-*)\\(/,\n end: /\\)(-*)\"/\n }),\n hljs.END_SAME_AS_BEGIN({\n begin: /[rR]\"(-*)\\{/,\n end: /\\}(-*)\"/\n }),\n hljs.END_SAME_AS_BEGIN({\n begin: /[rR]\"(-*)\\[/,\n end: /\\](-*)\"/\n }),\n hljs.END_SAME_AS_BEGIN({\n begin: /[rR]'(-*)\\(/,\n end: /\\)(-*)'/\n }),\n hljs.END_SAME_AS_BEGIN({\n begin: /[rR]'(-*)\\{/,\n end: /\\}(-*)'/\n }),\n hljs.END_SAME_AS_BEGIN({\n begin: /[rR]'(-*)\\[/,\n end: /\\](-*)'/\n }),\n {\n begin: '\"',\n end: '\"',\n relevance: 0\n },\n {\n begin: \"'\",\n end: \"'\",\n relevance: 0\n }\n ],\n },\n\n // Matching numbers immediately following punctuation and operators is\n // tricky since we need to look at the character ahead of a number to\n // ensure the number is not part of an identifier, and we cannot use\n // negative look-behind assertions. So instead we explicitly handle all\n // possible combinations of (operator|punctuation), number.\n // TODO: replace with negative look-behind when available\n // { begin: /(?<![a-zA-Z0-9._])0[xX][0-9a-fA-F]+\\.[0-9a-fA-F]*[pP][+-]?\\d+i?/ },\n // { begin: /(?<![a-zA-Z0-9._])0[xX][0-9a-fA-F]+([pP][+-]?\\d+)?[Li]?/ },\n // { begin: /(?<![a-zA-Z0-9._])(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?[Li]?/ }\n {\n relevance: 0,\n variants: [\n {\n scope: {\n 1: 'operator',\n 2: 'number'\n },\n match: [\n OPERATORS_RE,\n NUMBER_TYPES_RE\n ]\n },\n {\n scope: {\n 1: 'operator',\n 2: 'number'\n },\n match: [\n /%[^%]*%/,\n NUMBER_TYPES_RE\n ]\n },\n {\n scope: {\n 1: 'punctuation',\n 2: 'number'\n },\n match: [\n PUNCTUATION_RE,\n NUMBER_TYPES_RE\n ]\n },\n {\n scope: { 2: 'number' },\n match: [\n /[^a-zA-Z0-9._]|^/, // not part of an identifier, or start of document\n NUMBER_TYPES_RE\n ]\n }\n ]\n },\n\n // Operators/punctuation when they're not directly followed by numbers\n {\n // Relevance boost for the most common assignment form.\n scope: { 3: 'operator' },\n match: [\n IDENT_RE,\n /\\s+/,\n /<-/,\n /\\s+/\n ]\n },\n\n {\n scope: 'operator',\n relevance: 0,\n variants: [\n { match: OPERATORS_RE },\n { match: /%[^%]*%/ }\n ]\n },\n\n {\n scope: 'punctuation',\n relevance: 0,\n match: PUNCTUATION_RE\n },\n\n {\n // Escaped identifier\n begin: '`',\n end: '`',\n contains: [ { begin: /\\\\./ } ]\n }\n ]\n };\n}\n\nmodule.exports = r;\n","/*\nLanguage: Rust\nAuthor: Andrey Vlasovskikh <andrey.vlasovskikh@gmail.com>\nContributors: Roman Shmatov <romanshmatov@gmail.com>, Kasper Andersen <kma_untrusted@protonmail.com>\nWebsite: https://www.rust-lang.org\nCategory: common, system\n*/\n\n/** @type LanguageFn */\n\nfunction rust(hljs) {\n const regex = hljs.regex;\n // ============================================\n // Added to support the r# keyword, which is a raw identifier in Rust.\n const RAW_IDENTIFIER = /(r#)?/;\n const UNDERSCORE_IDENT_RE = regex.concat(RAW_IDENTIFIER, hljs.UNDERSCORE_IDENT_RE);\n const IDENT_RE = regex.concat(RAW_IDENTIFIER, hljs.IDENT_RE);\n // ============================================\n const FUNCTION_INVOKE = {\n className: \"title.function.invoke\",\n relevance: 0,\n begin: regex.concat(\n /\\b/,\n /(?!let|for|while|if|else|match\\b)/,\n IDENT_RE,\n regex.lookahead(/\\s*\\(/))\n };\n const NUMBER_SUFFIX = '([ui](8|16|32|64|128|size)|f(32|64))\\?';\n const KEYWORDS = [\n \"abstract\",\n \"as\",\n \"async\",\n \"await\",\n \"become\",\n \"box\",\n \"break\",\n \"const\",\n \"continue\",\n \"crate\",\n \"do\",\n \"dyn\",\n \"else\",\n \"enum\",\n \"extern\",\n \"false\",\n \"final\",\n \"fn\",\n \"for\",\n \"if\",\n \"impl\",\n \"in\",\n \"let\",\n \"loop\",\n \"macro\",\n \"match\",\n \"mod\",\n \"move\",\n \"mut\",\n \"override\",\n \"priv\",\n \"pub\",\n \"ref\",\n \"return\",\n \"self\",\n \"Self\",\n \"static\",\n \"struct\",\n \"super\",\n \"trait\",\n \"true\",\n \"try\",\n \"type\",\n \"typeof\",\n \"union\",\n \"unsafe\",\n \"unsized\",\n \"use\",\n \"virtual\",\n \"where\",\n \"while\",\n \"yield\"\n ];\n const LITERALS = [\n \"true\",\n \"false\",\n \"Some\",\n \"None\",\n \"Ok\",\n \"Err\"\n ];\n const BUILTINS = [\n // functions\n 'drop ',\n // traits\n \"Copy\",\n \"Send\",\n \"Sized\",\n \"Sync\",\n \"Drop\",\n \"Fn\",\n \"FnMut\",\n \"FnOnce\",\n \"ToOwned\",\n \"Clone\",\n \"Debug\",\n \"PartialEq\",\n \"PartialOrd\",\n \"Eq\",\n \"Ord\",\n \"AsRef\",\n \"AsMut\",\n \"Into\",\n \"From\",\n \"Default\",\n \"Iterator\",\n \"Extend\",\n \"IntoIterator\",\n \"DoubleEndedIterator\",\n \"ExactSizeIterator\",\n \"SliceConcatExt\",\n \"ToString\",\n // macros\n \"assert!\",\n \"assert_eq!\",\n \"bitflags!\",\n \"bytes!\",\n \"cfg!\",\n \"col!\",\n \"concat!\",\n \"concat_idents!\",\n \"debug_assert!\",\n \"debug_assert_eq!\",\n \"env!\",\n \"eprintln!\",\n \"panic!\",\n \"file!\",\n \"format!\",\n \"format_args!\",\n \"include_bytes!\",\n \"include_str!\",\n \"line!\",\n \"local_data_key!\",\n \"module_path!\",\n \"option_env!\",\n \"print!\",\n \"println!\",\n \"select!\",\n \"stringify!\",\n \"try!\",\n \"unimplemented!\",\n \"unreachable!\",\n \"vec!\",\n \"write!\",\n \"writeln!\",\n \"macro_rules!\",\n \"assert_ne!\",\n \"debug_assert_ne!\"\n ];\n const TYPES = [\n \"i8\",\n \"i16\",\n \"i32\",\n \"i64\",\n \"i128\",\n \"isize\",\n \"u8\",\n \"u16\",\n \"u32\",\n \"u64\",\n \"u128\",\n \"usize\",\n \"f32\",\n \"f64\",\n \"str\",\n \"char\",\n \"bool\",\n \"Box\",\n \"Option\",\n \"Result\",\n \"String\",\n \"Vec\"\n ];\n return {\n name: 'Rust',\n aliases: [ 'rs' ],\n keywords: {\n $pattern: hljs.IDENT_RE + '!?',\n type: TYPES,\n keyword: KEYWORDS,\n literal: LITERALS,\n built_in: BUILTINS\n },\n illegal: '</',\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.COMMENT('/\\\\*', '\\\\*/', { contains: [ 'self' ] }),\n hljs.inherit(hljs.QUOTE_STRING_MODE, {\n begin: /b?\"/,\n illegal: null\n }),\n {\n className: 'string',\n variants: [\n { begin: /b?r(#*)\"(.|\\n)*?\"\\1(?!#)/ },\n { begin: /b?'\\\\?(x\\w{2}|u\\w{4}|U\\w{8}|.)'/ }\n ]\n },\n {\n className: 'symbol',\n begin: /'[a-zA-Z_][a-zA-Z0-9_]*/\n },\n {\n className: 'number',\n variants: [\n { begin: '\\\\b0b([01_]+)' + NUMBER_SUFFIX },\n { begin: '\\\\b0o([0-7_]+)' + NUMBER_SUFFIX },\n { begin: '\\\\b0x([A-Fa-f0-9_]+)' + NUMBER_SUFFIX },\n { begin: '\\\\b(\\\\d[\\\\d_]*(\\\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)'\n + NUMBER_SUFFIX }\n ],\n relevance: 0\n },\n {\n begin: [\n /fn/,\n /\\s+/,\n UNDERSCORE_IDENT_RE\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n }\n },\n {\n className: 'meta',\n begin: '#!?\\\\[',\n end: '\\\\]',\n contains: [\n {\n className: 'string',\n begin: /\"/,\n end: /\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE\n ]\n }\n ]\n },\n {\n begin: [\n /let/,\n /\\s+/,\n /(?:mut\\s+)?/,\n UNDERSCORE_IDENT_RE\n ],\n className: {\n 1: \"keyword\",\n 3: \"keyword\",\n 4: \"variable\"\n }\n },\n // must come before impl/for rule later\n {\n begin: [\n /for/,\n /\\s+/,\n UNDERSCORE_IDENT_RE,\n /\\s+/,\n /in/\n ],\n className: {\n 1: \"keyword\",\n 3: \"variable\",\n 5: \"keyword\"\n }\n },\n {\n begin: [\n /type/,\n /\\s+/,\n UNDERSCORE_IDENT_RE\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n {\n begin: [\n /(?:trait|enum|struct|union|impl|for)/,\n /\\s+/,\n UNDERSCORE_IDENT_RE\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n {\n begin: hljs.IDENT_RE + '::',\n keywords: {\n keyword: \"Self\",\n built_in: BUILTINS,\n type: TYPES\n }\n },\n {\n className: \"punctuation\",\n begin: '->'\n },\n FUNCTION_INVOKE\n ]\n };\n}\n\nmodule.exports = rust;\n","const MODES = (hljs) => {\n return {\n IMPORTANT: {\n scope: 'meta',\n begin: '!important'\n },\n BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,\n HEXCOLOR: {\n scope: 'number',\n begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\b/\n },\n FUNCTION_DISPATCH: {\n className: \"built_in\",\n begin: /[\\w-]+(?=\\()/\n },\n ATTRIBUTE_SELECTOR_MODE: {\n scope: 'selector-attr',\n begin: /\\[/,\n end: /\\]/,\n illegal: '$',\n contains: [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ]\n },\n CSS_NUMBER_MODE: {\n scope: 'number',\n begin: hljs.NUMBER_RE + '(' +\n '%|em|ex|ch|rem' +\n '|vw|vh|vmin|vmax' +\n '|cm|mm|in|pt|pc|px' +\n '|deg|grad|rad|turn' +\n '|s|ms' +\n '|Hz|kHz' +\n '|dpi|dpcm|dppx' +\n ')?',\n relevance: 0\n },\n CSS_VARIABLE: {\n className: \"attr\",\n begin: /--[A-Za-z_][A-Za-z0-9_-]*/\n }\n };\n};\n\nconst HTML_TAGS = [\n 'a',\n 'abbr',\n 'address',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'blockquote',\n 'body',\n 'button',\n 'canvas',\n 'caption',\n 'cite',\n 'code',\n 'dd',\n 'del',\n 'details',\n 'dfn',\n 'div',\n 'dl',\n 'dt',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'html',\n 'i',\n 'iframe',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'mark',\n 'menu',\n 'nav',\n 'object',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'picture',\n 'q',\n 'quote',\n 'samp',\n 'section',\n 'select',\n 'source',\n 'span',\n 'strong',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'ul',\n 'var',\n 'video'\n];\n\nconst SVG_TAGS = [\n 'defs',\n 'g',\n 'marker',\n 'mask',\n 'pattern',\n 'svg',\n 'switch',\n 'symbol',\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feFlood',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMorphology',\n 'feOffset',\n 'feSpecularLighting',\n 'feTile',\n 'feTurbulence',\n 'linearGradient',\n 'radialGradient',\n 'stop',\n 'circle',\n 'ellipse',\n 'image',\n 'line',\n 'path',\n 'polygon',\n 'polyline',\n 'rect',\n 'text',\n 'use',\n 'textPath',\n 'tspan',\n 'foreignObject',\n 'clipPath'\n];\n\nconst TAGS = [\n ...HTML_TAGS,\n ...SVG_TAGS,\n];\n\n// Sorting, then reversing makes sure longer attributes/elements like\n// `font-weight` are matched fully instead of getting false positives on say `font`\n\nconst MEDIA_FEATURES = [\n 'any-hover',\n 'any-pointer',\n 'aspect-ratio',\n 'color',\n 'color-gamut',\n 'color-index',\n 'device-aspect-ratio',\n 'device-height',\n 'device-width',\n 'display-mode',\n 'forced-colors',\n 'grid',\n 'height',\n 'hover',\n 'inverted-colors',\n 'monochrome',\n 'orientation',\n 'overflow-block',\n 'overflow-inline',\n 'pointer',\n 'prefers-color-scheme',\n 'prefers-contrast',\n 'prefers-reduced-motion',\n 'prefers-reduced-transparency',\n 'resolution',\n 'scan',\n 'scripting',\n 'update',\n 'width',\n // TODO: find a better solution?\n 'min-width',\n 'max-width',\n 'min-height',\n 'max-height'\n].sort().reverse();\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\nconst PSEUDO_CLASSES = [\n 'active',\n 'any-link',\n 'blank',\n 'checked',\n 'current',\n 'default',\n 'defined',\n 'dir', // dir()\n 'disabled',\n 'drop',\n 'empty',\n 'enabled',\n 'first',\n 'first-child',\n 'first-of-type',\n 'fullscreen',\n 'future',\n 'focus',\n 'focus-visible',\n 'focus-within',\n 'has', // has()\n 'host', // host or host()\n 'host-context', // host-context()\n 'hover',\n 'indeterminate',\n 'in-range',\n 'invalid',\n 'is', // is()\n 'lang', // lang()\n 'last-child',\n 'last-of-type',\n 'left',\n 'link',\n 'local-link',\n 'not', // not()\n 'nth-child', // nth-child()\n 'nth-col', // nth-col()\n 'nth-last-child', // nth-last-child()\n 'nth-last-col', // nth-last-col()\n 'nth-last-of-type', //nth-last-of-type()\n 'nth-of-type', //nth-of-type()\n 'only-child',\n 'only-of-type',\n 'optional',\n 'out-of-range',\n 'past',\n 'placeholder-shown',\n 'read-only',\n 'read-write',\n 'required',\n 'right',\n 'root',\n 'scope',\n 'target',\n 'target-within',\n 'user-invalid',\n 'valid',\n 'visited',\n 'where' // where()\n].sort().reverse();\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\nconst PSEUDO_ELEMENTS = [\n 'after',\n 'backdrop',\n 'before',\n 'cue',\n 'cue-region',\n 'first-letter',\n 'first-line',\n 'grammar-error',\n 'marker',\n 'part',\n 'placeholder',\n 'selection',\n 'slotted',\n 'spelling-error'\n].sort().reverse();\n\nconst ATTRIBUTES = [\n 'accent-color',\n 'align-content',\n 'align-items',\n 'align-self',\n 'alignment-baseline',\n 'all',\n 'animation',\n 'animation-delay',\n 'animation-direction',\n 'animation-duration',\n 'animation-fill-mode',\n 'animation-iteration-count',\n 'animation-name',\n 'animation-play-state',\n 'animation-timing-function',\n 'appearance',\n 'backface-visibility',\n 'background',\n 'background-attachment',\n 'background-blend-mode',\n 'background-clip',\n 'background-color',\n 'background-image',\n 'background-origin',\n 'background-position',\n 'background-repeat',\n 'background-size',\n 'baseline-shift',\n 'block-size',\n 'border',\n 'border-block',\n 'border-block-color',\n 'border-block-end',\n 'border-block-end-color',\n 'border-block-end-style',\n 'border-block-end-width',\n 'border-block-start',\n 'border-block-start-color',\n 'border-block-start-style',\n 'border-block-start-width',\n 'border-block-style',\n 'border-block-width',\n 'border-bottom',\n 'border-bottom-color',\n 'border-bottom-left-radius',\n 'border-bottom-right-radius',\n 'border-bottom-style',\n 'border-bottom-width',\n 'border-collapse',\n 'border-color',\n 'border-image',\n 'border-image-outset',\n 'border-image-repeat',\n 'border-image-slice',\n 'border-image-source',\n 'border-image-width',\n 'border-inline',\n 'border-inline-color',\n 'border-inline-end',\n 'border-inline-end-color',\n 'border-inline-end-style',\n 'border-inline-end-width',\n 'border-inline-start',\n 'border-inline-start-color',\n 'border-inline-start-style',\n 'border-inline-start-width',\n 'border-inline-style',\n 'border-inline-width',\n 'border-left',\n 'border-left-color',\n 'border-left-style',\n 'border-left-width',\n 'border-radius',\n 'border-right',\n 'border-end-end-radius',\n 'border-end-start-radius',\n 'border-right-color',\n 'border-right-style',\n 'border-right-width',\n 'border-spacing',\n 'border-start-end-radius',\n 'border-start-start-radius',\n 'border-style',\n 'border-top',\n 'border-top-color',\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-top-style',\n 'border-top-width',\n 'border-width',\n 'bottom',\n 'box-decoration-break',\n 'box-shadow',\n 'box-sizing',\n 'break-after',\n 'break-before',\n 'break-inside',\n 'cx',\n 'cy',\n 'caption-side',\n 'caret-color',\n 'clear',\n 'clip',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'color-scheme',\n 'column-count',\n 'column-fill',\n 'column-gap',\n 'column-rule',\n 'column-rule-color',\n 'column-rule-style',\n 'column-rule-width',\n 'column-span',\n 'column-width',\n 'columns',\n 'contain',\n 'content',\n 'content-visibility',\n 'counter-increment',\n 'counter-reset',\n 'cue',\n 'cue-after',\n 'cue-before',\n 'cursor',\n 'direction',\n 'display',\n 'dominant-baseline',\n 'empty-cells',\n 'enable-background',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'flex',\n 'flex-basis',\n 'flex-direction',\n 'flex-flow',\n 'flex-grow',\n 'flex-shrink',\n 'flex-wrap',\n 'float',\n 'flow',\n 'flood-color',\n 'flood-opacity',\n 'font',\n 'font-display',\n 'font-family',\n 'font-feature-settings',\n 'font-kerning',\n 'font-language-override',\n 'font-size',\n 'font-size-adjust',\n 'font-smoothing',\n 'font-stretch',\n 'font-style',\n 'font-synthesis',\n 'font-variant',\n 'font-variant-caps',\n 'font-variant-east-asian',\n 'font-variant-ligatures',\n 'font-variant-numeric',\n 'font-variant-position',\n 'font-variation-settings',\n 'font-weight',\n 'gap',\n 'glyph-orientation-horizontal',\n 'glyph-orientation-vertical',\n 'grid',\n 'grid-area',\n 'grid-auto-columns',\n 'grid-auto-flow',\n 'grid-auto-rows',\n 'grid-column',\n 'grid-column-end',\n 'grid-column-start',\n 'grid-gap',\n 'grid-row',\n 'grid-row-end',\n 'grid-row-start',\n 'grid-template',\n 'grid-template-areas',\n 'grid-template-columns',\n 'grid-template-rows',\n 'hanging-punctuation',\n 'height',\n 'hyphens',\n 'icon',\n 'image-orientation',\n 'image-rendering',\n 'image-resolution',\n 'ime-mode',\n 'inline-size',\n 'inset',\n 'inset-block',\n 'inset-block-end',\n 'inset-block-start',\n 'inset-inline',\n 'inset-inline-end',\n 'inset-inline-start',\n 'isolation',\n 'kerning',\n 'justify-content',\n 'justify-items',\n 'justify-self',\n 'left',\n 'letter-spacing',\n 'lighting-color',\n 'line-break',\n 'line-height',\n 'list-style',\n 'list-style-image',\n 'list-style-position',\n 'list-style-type',\n 'marker',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'mask',\n 'margin',\n 'margin-block',\n 'margin-block-end',\n 'margin-block-start',\n 'margin-bottom',\n 'margin-inline',\n 'margin-inline-end',\n 'margin-inline-start',\n 'margin-left',\n 'margin-right',\n 'margin-top',\n 'marks',\n 'mask',\n 'mask-border',\n 'mask-border-mode',\n 'mask-border-outset',\n 'mask-border-repeat',\n 'mask-border-slice',\n 'mask-border-source',\n 'mask-border-width',\n 'mask-clip',\n 'mask-composite',\n 'mask-image',\n 'mask-mode',\n 'mask-origin',\n 'mask-position',\n 'mask-repeat',\n 'mask-size',\n 'mask-type',\n 'max-block-size',\n 'max-height',\n 'max-inline-size',\n 'max-width',\n 'min-block-size',\n 'min-height',\n 'min-inline-size',\n 'min-width',\n 'mix-blend-mode',\n 'nav-down',\n 'nav-index',\n 'nav-left',\n 'nav-right',\n 'nav-up',\n 'none',\n 'normal',\n 'object-fit',\n 'object-position',\n 'opacity',\n 'order',\n 'orphans',\n 'outline',\n 'outline-color',\n 'outline-offset',\n 'outline-style',\n 'outline-width',\n 'overflow',\n 'overflow-wrap',\n 'overflow-x',\n 'overflow-y',\n 'padding',\n 'padding-block',\n 'padding-block-end',\n 'padding-block-start',\n 'padding-bottom',\n 'padding-inline',\n 'padding-inline-end',\n 'padding-inline-start',\n 'padding-left',\n 'padding-right',\n 'padding-top',\n 'page-break-after',\n 'page-break-before',\n 'page-break-inside',\n 'pause',\n 'pause-after',\n 'pause-before',\n 'perspective',\n 'perspective-origin',\n 'pointer-events',\n 'position',\n 'quotes',\n 'r',\n 'resize',\n 'rest',\n 'rest-after',\n 'rest-before',\n 'right',\n 'rotate',\n 'row-gap',\n 'scale',\n 'scroll-margin',\n 'scroll-margin-block',\n 'scroll-margin-block-end',\n 'scroll-margin-block-start',\n 'scroll-margin-bottom',\n 'scroll-margin-inline',\n 'scroll-margin-inline-end',\n 'scroll-margin-inline-start',\n 'scroll-margin-left',\n 'scroll-margin-right',\n 'scroll-margin-top',\n 'scroll-padding',\n 'scroll-padding-block',\n 'scroll-padding-block-end',\n 'scroll-padding-block-start',\n 'scroll-padding-bottom',\n 'scroll-padding-inline',\n 'scroll-padding-inline-end',\n 'scroll-padding-inline-start',\n 'scroll-padding-left',\n 'scroll-padding-right',\n 'scroll-padding-top',\n 'scroll-snap-align',\n 'scroll-snap-stop',\n 'scroll-snap-type',\n 'scrollbar-color',\n 'scrollbar-gutter',\n 'scrollbar-width',\n 'shape-image-threshold',\n 'shape-margin',\n 'shape-outside',\n 'shape-rendering',\n 'stop-color',\n 'stop-opacity',\n 'stroke',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke-width',\n 'speak',\n 'speak-as',\n 'src', // @font-face\n 'tab-size',\n 'table-layout',\n 'text-anchor',\n 'text-align',\n 'text-align-all',\n 'text-align-last',\n 'text-combine-upright',\n 'text-decoration',\n 'text-decoration-color',\n 'text-decoration-line',\n 'text-decoration-skip-ink',\n 'text-decoration-style',\n 'text-decoration-thickness',\n 'text-emphasis',\n 'text-emphasis-color',\n 'text-emphasis-position',\n 'text-emphasis-style',\n 'text-indent',\n 'text-justify',\n 'text-orientation',\n 'text-overflow',\n 'text-rendering',\n 'text-shadow',\n 'text-transform',\n 'text-underline-offset',\n 'text-underline-position',\n 'top',\n 'transform',\n 'transform-box',\n 'transform-origin',\n 'transform-style',\n 'transition',\n 'transition-delay',\n 'transition-duration',\n 'transition-property',\n 'transition-timing-function',\n 'translate',\n 'unicode-bidi',\n 'vector-effect',\n 'vertical-align',\n 'visibility',\n 'voice-balance',\n 'voice-duration',\n 'voice-family',\n 'voice-pitch',\n 'voice-range',\n 'voice-rate',\n 'voice-stress',\n 'voice-volume',\n 'white-space',\n 'widows',\n 'width',\n 'will-change',\n 'word-break',\n 'word-spacing',\n 'word-wrap',\n 'writing-mode',\n 'x',\n 'y',\n 'z-index'\n].sort().reverse();\n\n/*\nLanguage: SCSS\nDescription: Scss is an extension of the syntax of CSS.\nAuthor: Kurt Emch <kurt@kurtemch.com>\nWebsite: https://sass-lang.com\nCategory: common, css, web\n*/\n\n\n/** @type LanguageFn */\nfunction scss(hljs) {\n const modes = MODES(hljs);\n const PSEUDO_ELEMENTS$1 = PSEUDO_ELEMENTS;\n const PSEUDO_CLASSES$1 = PSEUDO_CLASSES;\n\n const AT_IDENTIFIER = '@[a-z-]+'; // @font-face\n const AT_MODIFIERS = \"and or not only\";\n const IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n const VARIABLE = {\n className: 'variable',\n begin: '(\\\\$' + IDENT_RE + ')\\\\b',\n relevance: 0\n };\n\n return {\n name: 'SCSS',\n case_insensitive: true,\n illegal: '[=/|\\']',\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n // to recognize keyframe 40% etc which are outside the scope of our\n // attribute value mode\n modes.CSS_NUMBER_MODE,\n {\n className: 'selector-id',\n begin: '#[A-Za-z0-9_-]+',\n relevance: 0\n },\n {\n className: 'selector-class',\n begin: '\\\\.[A-Za-z0-9_-]+',\n relevance: 0\n },\n modes.ATTRIBUTE_SELECTOR_MODE,\n {\n className: 'selector-tag',\n begin: '\\\\b(' + TAGS.join('|') + ')\\\\b',\n // was there, before, but why?\n relevance: 0\n },\n {\n className: 'selector-pseudo',\n begin: ':(' + PSEUDO_CLASSES$1.join('|') + ')'\n },\n {\n className: 'selector-pseudo',\n begin: ':(:)?(' + PSEUDO_ELEMENTS$1.join('|') + ')'\n },\n VARIABLE,\n { // pseudo-selector params\n begin: /\\(/,\n end: /\\)/,\n contains: [ modes.CSS_NUMBER_MODE ]\n },\n modes.CSS_VARIABLE,\n {\n className: 'attribute',\n begin: '\\\\b(' + ATTRIBUTES.join('|') + ')\\\\b'\n },\n { begin: '\\\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\\\b' },\n {\n begin: /:/,\n end: /[;}{]/,\n relevance: 0,\n contains: [\n modes.BLOCK_COMMENT,\n VARIABLE,\n modes.HEXCOLOR,\n modes.CSS_NUMBER_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.APOS_STRING_MODE,\n modes.IMPORTANT,\n modes.FUNCTION_DISPATCH\n ]\n },\n // matching these here allows us to treat them more like regular CSS\n // rules so everything between the {} gets regular rule highlighting,\n // which is what we want for page and font-face\n {\n begin: '@(page|font-face)',\n keywords: {\n $pattern: AT_IDENTIFIER,\n keyword: '@page @font-face'\n }\n },\n {\n begin: '@',\n end: '[{;]',\n returnBegin: true,\n keywords: {\n $pattern: /[a-z-]+/,\n keyword: AT_MODIFIERS,\n attribute: MEDIA_FEATURES.join(\" \")\n },\n contains: [\n {\n begin: AT_IDENTIFIER,\n className: \"keyword\"\n },\n {\n begin: /[a-z-]+(?=:)/,\n className: \"attribute\"\n },\n VARIABLE,\n hljs.QUOTE_STRING_MODE,\n hljs.APOS_STRING_MODE,\n modes.HEXCOLOR,\n modes.CSS_NUMBER_MODE\n ]\n },\n modes.FUNCTION_DISPATCH\n ]\n };\n}\n\nmodule.exports = scss;\n","/*\nLanguage: Shell Session\nRequires: bash.js\nAuthor: TSUYUSATO Kitsune <make.just.on@gmail.com>\nCategory: common\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction shell(hljs) {\n return {\n name: 'Shell Session',\n aliases: [\n 'console',\n 'shellsession'\n ],\n contains: [\n {\n className: 'meta.prompt',\n // We cannot add \\s (spaces) in the regular expression otherwise it will be too broad and produce unexpected result.\n // For instance, in the following example, it would match \"echo /path/to/home >\" as a prompt:\n // echo /path/to/home > t.exe\n begin: /^\\s{0,3}[/~\\w\\d[\\]()@-]*[>%$#][ ]?/,\n starts: {\n end: /[^\\\\](?=\\s*$)/,\n subLanguage: 'bash'\n }\n }\n ]\n };\n}\n\nmodule.exports = shell;\n","/*\n Language: SQL\n Website: https://en.wikipedia.org/wiki/SQL\n Category: common, database\n */\n\n/*\n\nGoals:\n\nSQL is intended to highlight basic/common SQL keywords and expressions\n\n- If pretty much every single SQL server includes supports, then it's a canidate.\n- It is NOT intended to include tons of vendor specific keywords (Oracle, MySQL,\n PostgreSQL) although the list of data types is purposely a bit more expansive.\n- For more specific SQL grammars please see:\n - PostgreSQL and PL/pgSQL - core\n - T-SQL - https://github.com/highlightjs/highlightjs-tsql\n - sql_more (core)\n\n */\n\nfunction sql(hljs) {\n const regex = hljs.regex;\n const COMMENT_MODE = hljs.COMMENT('--', '$');\n const STRING = {\n className: 'string',\n variants: [\n {\n begin: /'/,\n end: /'/,\n contains: [ { begin: /''/ } ]\n }\n ]\n };\n const QUOTED_IDENTIFIER = {\n begin: /\"/,\n end: /\"/,\n contains: [ { begin: /\"\"/ } ]\n };\n\n const LITERALS = [\n \"true\",\n \"false\",\n // Not sure it's correct to call NULL literal, and clauses like IS [NOT] NULL look strange that way.\n // \"null\",\n \"unknown\"\n ];\n\n const MULTI_WORD_TYPES = [\n \"double precision\",\n \"large object\",\n \"with timezone\",\n \"without timezone\"\n ];\n\n const TYPES = [\n 'bigint',\n 'binary',\n 'blob',\n 'boolean',\n 'char',\n 'character',\n 'clob',\n 'date',\n 'dec',\n 'decfloat',\n 'decimal',\n 'float',\n 'int',\n 'integer',\n 'interval',\n 'nchar',\n 'nclob',\n 'national',\n 'numeric',\n 'real',\n 'row',\n 'smallint',\n 'time',\n 'timestamp',\n 'varchar',\n 'varying', // modifier (character varying)\n 'varbinary'\n ];\n\n const NON_RESERVED_WORDS = [\n \"add\",\n \"asc\",\n \"collation\",\n \"desc\",\n \"final\",\n \"first\",\n \"last\",\n \"view\"\n ];\n\n // https://jakewheat.github.io/sql-overview/sql-2016-foundation-grammar.html#reserved-word\n const RESERVED_WORDS = [\n \"abs\",\n \"acos\",\n \"all\",\n \"allocate\",\n \"alter\",\n \"and\",\n \"any\",\n \"are\",\n \"array\",\n \"array_agg\",\n \"array_max_cardinality\",\n \"as\",\n \"asensitive\",\n \"asin\",\n \"asymmetric\",\n \"at\",\n \"atan\",\n \"atomic\",\n \"authorization\",\n \"avg\",\n \"begin\",\n \"begin_frame\",\n \"begin_partition\",\n \"between\",\n \"bigint\",\n \"binary\",\n \"blob\",\n \"boolean\",\n \"both\",\n \"by\",\n \"call\",\n \"called\",\n \"cardinality\",\n \"cascaded\",\n \"case\",\n \"cast\",\n \"ceil\",\n \"ceiling\",\n \"char\",\n \"char_length\",\n \"character\",\n \"character_length\",\n \"check\",\n \"classifier\",\n \"clob\",\n \"close\",\n \"coalesce\",\n \"collate\",\n \"collect\",\n \"column\",\n \"commit\",\n \"condition\",\n \"connect\",\n \"constraint\",\n \"contains\",\n \"convert\",\n \"copy\",\n \"corr\",\n \"corresponding\",\n \"cos\",\n \"cosh\",\n \"count\",\n \"covar_pop\",\n \"covar_samp\",\n \"create\",\n \"cross\",\n \"cube\",\n \"cume_dist\",\n \"current\",\n \"current_catalog\",\n \"current_date\",\n \"current_default_transform_group\",\n \"current_path\",\n \"current_role\",\n \"current_row\",\n \"current_schema\",\n \"current_time\",\n \"current_timestamp\",\n \"current_path\",\n \"current_role\",\n \"current_transform_group_for_type\",\n \"current_user\",\n \"cursor\",\n \"cycle\",\n \"date\",\n \"day\",\n \"deallocate\",\n \"dec\",\n \"decimal\",\n \"decfloat\",\n \"declare\",\n \"default\",\n \"define\",\n \"delete\",\n \"dense_rank\",\n \"deref\",\n \"describe\",\n \"deterministic\",\n \"disconnect\",\n \"distinct\",\n \"double\",\n \"drop\",\n \"dynamic\",\n \"each\",\n \"element\",\n \"else\",\n \"empty\",\n \"end\",\n \"end_frame\",\n \"end_partition\",\n \"end-exec\",\n \"equals\",\n \"escape\",\n \"every\",\n \"except\",\n \"exec\",\n \"execute\",\n \"exists\",\n \"exp\",\n \"external\",\n \"extract\",\n \"false\",\n \"fetch\",\n \"filter\",\n \"first_value\",\n \"float\",\n \"floor\",\n \"for\",\n \"foreign\",\n \"frame_row\",\n \"free\",\n \"from\",\n \"full\",\n \"function\",\n \"fusion\",\n \"get\",\n \"global\",\n \"grant\",\n \"group\",\n \"grouping\",\n \"groups\",\n \"having\",\n \"hold\",\n \"hour\",\n \"identity\",\n \"in\",\n \"indicator\",\n \"initial\",\n \"inner\",\n \"inout\",\n \"insensitive\",\n \"insert\",\n \"int\",\n \"integer\",\n \"intersect\",\n \"intersection\",\n \"interval\",\n \"into\",\n \"is\",\n \"join\",\n \"json_array\",\n \"json_arrayagg\",\n \"json_exists\",\n \"json_object\",\n \"json_objectagg\",\n \"json_query\",\n \"json_table\",\n \"json_table_primitive\",\n \"json_value\",\n \"lag\",\n \"language\",\n \"large\",\n \"last_value\",\n \"lateral\",\n \"lead\",\n \"leading\",\n \"left\",\n \"like\",\n \"like_regex\",\n \"listagg\",\n \"ln\",\n \"local\",\n \"localtime\",\n \"localtimestamp\",\n \"log\",\n \"log10\",\n \"lower\",\n \"match\",\n \"match_number\",\n \"match_recognize\",\n \"matches\",\n \"max\",\n \"member\",\n \"merge\",\n \"method\",\n \"min\",\n \"minute\",\n \"mod\",\n \"modifies\",\n \"module\",\n \"month\",\n \"multiset\",\n \"national\",\n \"natural\",\n \"nchar\",\n \"nclob\",\n \"new\",\n \"no\",\n \"none\",\n \"normalize\",\n \"not\",\n \"nth_value\",\n \"ntile\",\n \"null\",\n \"nullif\",\n \"numeric\",\n \"octet_length\",\n \"occurrences_regex\",\n \"of\",\n \"offset\",\n \"old\",\n \"omit\",\n \"on\",\n \"one\",\n \"only\",\n \"open\",\n \"or\",\n \"order\",\n \"out\",\n \"outer\",\n \"over\",\n \"overlaps\",\n \"overlay\",\n \"parameter\",\n \"partition\",\n \"pattern\",\n \"per\",\n \"percent\",\n \"percent_rank\",\n \"percentile_cont\",\n \"percentile_disc\",\n \"period\",\n \"portion\",\n \"position\",\n \"position_regex\",\n \"power\",\n \"precedes\",\n \"precision\",\n \"prepare\",\n \"primary\",\n \"procedure\",\n \"ptf\",\n \"range\",\n \"rank\",\n \"reads\",\n \"real\",\n \"recursive\",\n \"ref\",\n \"references\",\n \"referencing\",\n \"regr_avgx\",\n \"regr_avgy\",\n \"regr_count\",\n \"regr_intercept\",\n \"regr_r2\",\n \"regr_slope\",\n \"regr_sxx\",\n \"regr_sxy\",\n \"regr_syy\",\n \"release\",\n \"result\",\n \"return\",\n \"returns\",\n \"revoke\",\n \"right\",\n \"rollback\",\n \"rollup\",\n \"row\",\n \"row_number\",\n \"rows\",\n \"running\",\n \"savepoint\",\n \"scope\",\n \"scroll\",\n \"search\",\n \"second\",\n \"seek\",\n \"select\",\n \"sensitive\",\n \"session_user\",\n \"set\",\n \"show\",\n \"similar\",\n \"sin\",\n \"sinh\",\n \"skip\",\n \"smallint\",\n \"some\",\n \"specific\",\n \"specifictype\",\n \"sql\",\n \"sqlexception\",\n \"sqlstate\",\n \"sqlwarning\",\n \"sqrt\",\n \"start\",\n \"static\",\n \"stddev_pop\",\n \"stddev_samp\",\n \"submultiset\",\n \"subset\",\n \"substring\",\n \"substring_regex\",\n \"succeeds\",\n \"sum\",\n \"symmetric\",\n \"system\",\n \"system_time\",\n \"system_user\",\n \"table\",\n \"tablesample\",\n \"tan\",\n \"tanh\",\n \"then\",\n \"time\",\n \"timestamp\",\n \"timezone_hour\",\n \"timezone_minute\",\n \"to\",\n \"trailing\",\n \"translate\",\n \"translate_regex\",\n \"translation\",\n \"treat\",\n \"trigger\",\n \"trim\",\n \"trim_array\",\n \"true\",\n \"truncate\",\n \"uescape\",\n \"union\",\n \"unique\",\n \"unknown\",\n \"unnest\",\n \"update\",\n \"upper\",\n \"user\",\n \"using\",\n \"value\",\n \"values\",\n \"value_of\",\n \"var_pop\",\n \"var_samp\",\n \"varbinary\",\n \"varchar\",\n \"varying\",\n \"versioning\",\n \"when\",\n \"whenever\",\n \"where\",\n \"width_bucket\",\n \"window\",\n \"with\",\n \"within\",\n \"without\",\n \"year\",\n ];\n\n // these are reserved words we have identified to be functions\n // and should only be highlighted in a dispatch-like context\n // ie, array_agg(...), etc.\n const RESERVED_FUNCTIONS = [\n \"abs\",\n \"acos\",\n \"array_agg\",\n \"asin\",\n \"atan\",\n \"avg\",\n \"cast\",\n \"ceil\",\n \"ceiling\",\n \"coalesce\",\n \"corr\",\n \"cos\",\n \"cosh\",\n \"count\",\n \"covar_pop\",\n \"covar_samp\",\n \"cume_dist\",\n \"dense_rank\",\n \"deref\",\n \"element\",\n \"exp\",\n \"extract\",\n \"first_value\",\n \"floor\",\n \"json_array\",\n \"json_arrayagg\",\n \"json_exists\",\n \"json_object\",\n \"json_objectagg\",\n \"json_query\",\n \"json_table\",\n \"json_table_primitive\",\n \"json_value\",\n \"lag\",\n \"last_value\",\n \"lead\",\n \"listagg\",\n \"ln\",\n \"log\",\n \"log10\",\n \"lower\",\n \"max\",\n \"min\",\n \"mod\",\n \"nth_value\",\n \"ntile\",\n \"nullif\",\n \"percent_rank\",\n \"percentile_cont\",\n \"percentile_disc\",\n \"position\",\n \"position_regex\",\n \"power\",\n \"rank\",\n \"regr_avgx\",\n \"regr_avgy\",\n \"regr_count\",\n \"regr_intercept\",\n \"regr_r2\",\n \"regr_slope\",\n \"regr_sxx\",\n \"regr_sxy\",\n \"regr_syy\",\n \"row_number\",\n \"sin\",\n \"sinh\",\n \"sqrt\",\n \"stddev_pop\",\n \"stddev_samp\",\n \"substring\",\n \"substring_regex\",\n \"sum\",\n \"tan\",\n \"tanh\",\n \"translate\",\n \"translate_regex\",\n \"treat\",\n \"trim\",\n \"trim_array\",\n \"unnest\",\n \"upper\",\n \"value_of\",\n \"var_pop\",\n \"var_samp\",\n \"width_bucket\",\n ];\n\n // these functions can\n const POSSIBLE_WITHOUT_PARENS = [\n \"current_catalog\",\n \"current_date\",\n \"current_default_transform_group\",\n \"current_path\",\n \"current_role\",\n \"current_schema\",\n \"current_transform_group_for_type\",\n \"current_user\",\n \"session_user\",\n \"system_time\",\n \"system_user\",\n \"current_time\",\n \"localtime\",\n \"current_timestamp\",\n \"localtimestamp\"\n ];\n\n // those exist to boost relevance making these very\n // \"SQL like\" keyword combos worth +1 extra relevance\n const COMBOS = [\n \"create table\",\n \"insert into\",\n \"primary key\",\n \"foreign key\",\n \"not null\",\n \"alter table\",\n \"add constraint\",\n \"grouping sets\",\n \"on overflow\",\n \"character set\",\n \"respect nulls\",\n \"ignore nulls\",\n \"nulls first\",\n \"nulls last\",\n \"depth first\",\n \"breadth first\"\n ];\n\n const FUNCTIONS = RESERVED_FUNCTIONS;\n\n const KEYWORDS = [\n ...RESERVED_WORDS,\n ...NON_RESERVED_WORDS\n ].filter((keyword) => {\n return !RESERVED_FUNCTIONS.includes(keyword);\n });\n\n const VARIABLE = {\n className: \"variable\",\n begin: /@[a-z0-9][a-z0-9_]*/,\n };\n\n const OPERATOR = {\n className: \"operator\",\n begin: /[-+*/=%^~]|&&?|\\|\\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,\n relevance: 0,\n };\n\n const FUNCTION_CALL = {\n begin: regex.concat(/\\b/, regex.either(...FUNCTIONS), /\\s*\\(/),\n relevance: 0,\n keywords: { built_in: FUNCTIONS }\n };\n\n // keywords with less than 3 letters are reduced in relevancy\n function reduceRelevancy(list, {\n exceptions, when\n } = {}) {\n const qualifyFn = when;\n exceptions = exceptions || [];\n return list.map((item) => {\n if (item.match(/\\|\\d+$/) || exceptions.includes(item)) {\n return item;\n } else if (qualifyFn(item)) {\n return `${item}|0`;\n } else {\n return item;\n }\n });\n }\n\n return {\n name: 'SQL',\n case_insensitive: true,\n // does not include {} or HTML tags `</`\n illegal: /[{}]|<\\//,\n keywords: {\n $pattern: /\\b[\\w\\.]+/,\n keyword:\n reduceRelevancy(KEYWORDS, { when: (x) => x.length < 3 }),\n literal: LITERALS,\n type: TYPES,\n built_in: POSSIBLE_WITHOUT_PARENS\n },\n contains: [\n {\n begin: regex.either(...COMBOS),\n relevance: 0,\n keywords: {\n $pattern: /[\\w\\.]+/,\n keyword: KEYWORDS.concat(COMBOS),\n literal: LITERALS,\n type: TYPES\n },\n },\n {\n className: \"type\",\n begin: regex.either(...MULTI_WORD_TYPES)\n },\n FUNCTION_CALL,\n VARIABLE,\n STRING,\n QUOTED_IDENTIFIER,\n hljs.C_NUMBER_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n COMMENT_MODE,\n OPERATOR\n ]\n };\n}\n\nmodule.exports = sql;\n","/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n if (!re) return null;\n if (typeof re === \"string\") return re;\n\n return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n return concat('(?=', re, ')');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n const joined = args.map((x) => source(x)).join(\"\");\n return joined;\n}\n\n/**\n * @param { Array<string | RegExp | Object> } args\n * @returns {object}\n */\nfunction stripOptionsFromArgs(args) {\n const opts = args[args.length - 1];\n\n if (typeof opts === 'object' && opts.constructor === Object) {\n args.splice(args.length - 1, 1);\n return opts;\n } else {\n return {};\n }\n}\n\n/** @typedef { {capture?: boolean} } RegexEitherOptions */\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] | [...(RegExp | string)[], RegexEitherOptions]} args\n * @returns {string}\n */\nfunction either(...args) {\n /** @type { object & {capture?: boolean} } */\n const opts = stripOptionsFromArgs(args);\n const joined = '('\n + (opts.capture ? \"\" : \"?:\")\n + args.map((x) => source(x)).join(\"|\") + \")\";\n return joined;\n}\n\nconst keywordWrapper = keyword => concat(\n /\\b/,\n keyword,\n /\\w$/.test(keyword) ? /\\b/ : /\\B/\n);\n\n// Keywords that require a leading dot.\nconst dotKeywords = [\n 'Protocol', // contextual\n 'Type' // contextual\n].map(keywordWrapper);\n\n// Keywords that may have a leading dot.\nconst optionalDotKeywords = [\n 'init',\n 'self'\n].map(keywordWrapper);\n\n// should register as keyword, not type\nconst keywordTypes = [\n 'Any',\n 'Self'\n];\n\n// Regular keywords and literals.\nconst keywords = [\n // strings below will be fed into the regular `keywords` engine while regex\n // will result in additional modes being created to scan for those keywords to\n // avoid conflicts with other rules\n 'actor',\n 'any', // contextual\n 'associatedtype',\n 'async',\n 'await',\n /as\\?/, // operator\n /as!/, // operator\n 'as', // operator\n 'borrowing', // contextual\n 'break',\n 'case',\n 'catch',\n 'class',\n 'consume', // contextual\n 'consuming', // contextual\n 'continue',\n 'convenience', // contextual\n 'copy', // contextual\n 'default',\n 'defer',\n 'deinit',\n 'didSet', // contextual\n 'distributed',\n 'do',\n 'dynamic', // contextual\n 'each',\n 'else',\n 'enum',\n 'extension',\n 'fallthrough',\n /fileprivate\\(set\\)/,\n 'fileprivate',\n 'final', // contextual\n 'for',\n 'func',\n 'get', // contextual\n 'guard',\n 'if',\n 'import',\n 'indirect', // contextual\n 'infix', // contextual\n /init\\?/,\n /init!/,\n 'inout',\n /internal\\(set\\)/,\n 'internal',\n 'in',\n 'is', // operator\n 'isolated', // contextual\n 'nonisolated', // contextual\n 'lazy', // contextual\n 'let',\n 'macro',\n 'mutating', // contextual\n 'nonmutating', // contextual\n /open\\(set\\)/, // contextual\n 'open', // contextual\n 'operator',\n 'optional', // contextual\n 'override', // contextual\n 'package',\n 'postfix', // contextual\n 'precedencegroup',\n 'prefix', // contextual\n /private\\(set\\)/,\n 'private',\n 'protocol',\n /public\\(set\\)/,\n 'public',\n 'repeat',\n 'required', // contextual\n 'rethrows',\n 'return',\n 'set', // contextual\n 'some', // contextual\n 'static',\n 'struct',\n 'subscript',\n 'super',\n 'switch',\n 'throws',\n 'throw',\n /try\\?/, // operator\n /try!/, // operator\n 'try', // operator\n 'typealias',\n /unowned\\(safe\\)/, // contextual\n /unowned\\(unsafe\\)/, // contextual\n 'unowned', // contextual\n 'var',\n 'weak', // contextual\n 'where',\n 'while',\n 'willSet' // contextual\n];\n\n// NOTE: Contextual keywords are reserved only in specific contexts.\n// Ideally, these should be matched using modes to avoid false positives.\n\n// Literals.\nconst literals = [\n 'false',\n 'nil',\n 'true'\n];\n\n// Keywords used in precedence groups.\nconst precedencegroupKeywords = [\n 'assignment',\n 'associativity',\n 'higherThan',\n 'left',\n 'lowerThan',\n 'none',\n 'right'\n];\n\n// Keywords that start with a number sign (#).\n// #(un)available is handled separately.\nconst numberSignKeywords = [\n '#colorLiteral',\n '#column',\n '#dsohandle',\n '#else',\n '#elseif',\n '#endif',\n '#error',\n '#file',\n '#fileID',\n '#fileLiteral',\n '#filePath',\n '#function',\n '#if',\n '#imageLiteral',\n '#keyPath',\n '#line',\n '#selector',\n '#sourceLocation',\n '#warning'\n];\n\n// Global functions in the Standard Library.\nconst builtIns = [\n 'abs',\n 'all',\n 'any',\n 'assert',\n 'assertionFailure',\n 'debugPrint',\n 'dump',\n 'fatalError',\n 'getVaList',\n 'isKnownUniquelyReferenced',\n 'max',\n 'min',\n 'numericCast',\n 'pointwiseMax',\n 'pointwiseMin',\n 'precondition',\n 'preconditionFailure',\n 'print',\n 'readLine',\n 'repeatElement',\n 'sequence',\n 'stride',\n 'swap',\n 'swift_unboxFromSwiftValueWithType',\n 'transcode',\n 'type',\n 'unsafeBitCast',\n 'unsafeDowncast',\n 'withExtendedLifetime',\n 'withUnsafeMutablePointer',\n 'withUnsafePointer',\n 'withVaList',\n 'withoutActuallyEscaping',\n 'zip'\n];\n\n// Valid first characters for operators.\nconst operatorHead = either(\n /[/=\\-+!*%<>&|^~?]/,\n /[\\u00A1-\\u00A7]/,\n /[\\u00A9\\u00AB]/,\n /[\\u00AC\\u00AE]/,\n /[\\u00B0\\u00B1]/,\n /[\\u00B6\\u00BB\\u00BF\\u00D7\\u00F7]/,\n /[\\u2016-\\u2017]/,\n /[\\u2020-\\u2027]/,\n /[\\u2030-\\u203E]/,\n /[\\u2041-\\u2053]/,\n /[\\u2055-\\u205E]/,\n /[\\u2190-\\u23FF]/,\n /[\\u2500-\\u2775]/,\n /[\\u2794-\\u2BFF]/,\n /[\\u2E00-\\u2E7F]/,\n /[\\u3001-\\u3003]/,\n /[\\u3008-\\u3020]/,\n /[\\u3030]/\n);\n\n// Valid characters for operators.\nconst operatorCharacter = either(\n operatorHead,\n /[\\u0300-\\u036F]/,\n /[\\u1DC0-\\u1DFF]/,\n /[\\u20D0-\\u20FF]/,\n /[\\uFE00-\\uFE0F]/,\n /[\\uFE20-\\uFE2F]/\n // TODO: The following characters are also allowed, but the regex isn't supported yet.\n // /[\\u{E0100}-\\u{E01EF}]/u\n);\n\n// Valid operator.\nconst operator = concat(operatorHead, operatorCharacter, '*');\n\n// Valid first characters for identifiers.\nconst identifierHead = either(\n /[a-zA-Z_]/,\n /[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]/,\n /[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]/,\n /[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]/,\n /[\\u1E00-\\u1FFF]/,\n /[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]/,\n /[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]/,\n /[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]/,\n /[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]/,\n /[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]/,\n /[\\uFE47-\\uFEFE\\uFF00-\\uFFFD]/ // Should be /[\\uFE47-\\uFFFD]/, but we have to exclude FEFF.\n // The following characters are also allowed, but the regexes aren't supported yet.\n // /[\\u{10000}-\\u{1FFFD}\\u{20000-\\u{2FFFD}\\u{30000}-\\u{3FFFD}\\u{40000}-\\u{4FFFD}]/u,\n // /[\\u{50000}-\\u{5FFFD}\\u{60000-\\u{6FFFD}\\u{70000}-\\u{7FFFD}\\u{80000}-\\u{8FFFD}]/u,\n // /[\\u{90000}-\\u{9FFFD}\\u{A0000-\\u{AFFFD}\\u{B0000}-\\u{BFFFD}\\u{C0000}-\\u{CFFFD}]/u,\n // /[\\u{D0000}-\\u{DFFFD}\\u{E0000-\\u{EFFFD}]/u\n);\n\n// Valid characters for identifiers.\nconst identifierCharacter = either(\n identifierHead,\n /\\d/,\n /[\\u0300-\\u036F\\u1DC0-\\u1DFF\\u20D0-\\u20FF\\uFE20-\\uFE2F]/\n);\n\n// Valid identifier.\nconst identifier = concat(identifierHead, identifierCharacter, '*');\n\n// Valid type identifier.\nconst typeIdentifier = concat(/[A-Z]/, identifierCharacter, '*');\n\n// Built-in attributes, which are highlighted as keywords.\n// @available is handled separately.\n// https://docs.swift.org/swift-book/documentation/the-swift-programming-language/attributes\nconst keywordAttributes = [\n 'attached',\n 'autoclosure',\n concat(/convention\\(/, either('swift', 'block', 'c'), /\\)/),\n 'discardableResult',\n 'dynamicCallable',\n 'dynamicMemberLookup',\n 'escaping',\n 'freestanding',\n 'frozen',\n 'GKInspectable',\n 'IBAction',\n 'IBDesignable',\n 'IBInspectable',\n 'IBOutlet',\n 'IBSegueAction',\n 'inlinable',\n 'main',\n 'nonobjc',\n 'NSApplicationMain',\n 'NSCopying',\n 'NSManaged',\n concat(/objc\\(/, identifier, /\\)/),\n 'objc',\n 'objcMembers',\n 'propertyWrapper',\n 'requires_stored_property_inits',\n 'resultBuilder',\n 'Sendable',\n 'testable',\n 'UIApplicationMain',\n 'unchecked',\n 'unknown',\n 'usableFromInline',\n 'warn_unqualified_access'\n];\n\n// Contextual keywords used in @available and #(un)available.\nconst availabilityKeywords = [\n 'iOS',\n 'iOSApplicationExtension',\n 'macOS',\n 'macOSApplicationExtension',\n 'macCatalyst',\n 'macCatalystApplicationExtension',\n 'watchOS',\n 'watchOSApplicationExtension',\n 'tvOS',\n 'tvOSApplicationExtension',\n 'swift'\n];\n\n/*\nLanguage: Swift\nDescription: Swift is a general-purpose programming language built using a modern approach to safety, performance, and software design patterns.\nAuthor: Steven Van Impe <steven.vanimpe@icloud.com>\nContributors: Chris Eidhof <chris@eidhof.nl>, Nate Cook <natecook@gmail.com>, Alexander Lichter <manniL@gmx.net>, Richard Gibson <gibson042@github>\nWebsite: https://swift.org\nCategory: common, system\n*/\n\n\n/** @type LanguageFn */\nfunction swift(hljs) {\n const WHITESPACE = {\n match: /\\s+/,\n relevance: 0\n };\n // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID411\n const BLOCK_COMMENT = hljs.COMMENT(\n '/\\\\*',\n '\\\\*/',\n { contains: [ 'self' ] }\n );\n const COMMENTS = [\n hljs.C_LINE_COMMENT_MODE,\n BLOCK_COMMENT\n ];\n\n // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID413\n // https://docs.swift.org/swift-book/ReferenceManual/zzSummaryOfTheGrammar.html\n const DOT_KEYWORD = {\n match: [\n /\\./,\n either(...dotKeywords, ...optionalDotKeywords)\n ],\n className: { 2: \"keyword\" }\n };\n const KEYWORD_GUARD = {\n // Consume .keyword to prevent highlighting properties and methods as keywords.\n match: concat(/\\./, either(...keywords)),\n relevance: 0\n };\n const PLAIN_KEYWORDS = keywords\n .filter(kw => typeof kw === 'string')\n .concat([ \"_|0\" ]); // seems common, so 0 relevance\n const REGEX_KEYWORDS = keywords\n .filter(kw => typeof kw !== 'string') // find regex\n .concat(keywordTypes)\n .map(keywordWrapper);\n const KEYWORD = { variants: [\n {\n className: 'keyword',\n match: either(...REGEX_KEYWORDS, ...optionalDotKeywords)\n }\n ] };\n // find all the regular keywords\n const KEYWORDS = {\n $pattern: either(\n /\\b\\w+/, // regular keywords\n /#\\w+/ // number keywords\n ),\n keyword: PLAIN_KEYWORDS\n .concat(numberSignKeywords),\n literal: literals\n };\n const KEYWORD_MODES = [\n DOT_KEYWORD,\n KEYWORD_GUARD,\n KEYWORD\n ];\n\n // https://github.com/apple/swift/tree/main/stdlib/public/core\n const BUILT_IN_GUARD = {\n // Consume .built_in to prevent highlighting properties and methods.\n match: concat(/\\./, either(...builtIns)),\n relevance: 0\n };\n const BUILT_IN = {\n className: 'built_in',\n match: concat(/\\b/, either(...builtIns), /(?=\\()/)\n };\n const BUILT_INS = [\n BUILT_IN_GUARD,\n BUILT_IN\n ];\n\n // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID418\n const OPERATOR_GUARD = {\n // Prevent -> from being highlighting as an operator.\n match: /->/,\n relevance: 0\n };\n const OPERATOR = {\n className: 'operator',\n relevance: 0,\n variants: [\n { match: operator },\n {\n // dot-operator: only operators that start with a dot are allowed to use dots as\n // characters (..., ...<, .*, etc). So there rule here is: a dot followed by one or more\n // characters that may also include dots.\n match: `\\\\.(\\\\.|${operatorCharacter})+` }\n ]\n };\n const OPERATORS = [\n OPERATOR_GUARD,\n OPERATOR\n ];\n\n // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#grammar_numeric-literal\n // TODO: Update for leading `-` after lookbehind is supported everywhere\n const decimalDigits = '([0-9]_*)+';\n const hexDigits = '([0-9a-fA-F]_*)+';\n const NUMBER = {\n className: 'number',\n relevance: 0,\n variants: [\n // decimal floating-point-literal (subsumes decimal-literal)\n { match: `\\\\b(${decimalDigits})(\\\\.(${decimalDigits}))?` + `([eE][+-]?(${decimalDigits}))?\\\\b` },\n // hexadecimal floating-point-literal (subsumes hexadecimal-literal)\n { match: `\\\\b0x(${hexDigits})(\\\\.(${hexDigits}))?` + `([pP][+-]?(${decimalDigits}))?\\\\b` },\n // octal-literal\n { match: /\\b0o([0-7]_*)+\\b/ },\n // binary-literal\n { match: /\\b0b([01]_*)+\\b/ }\n ]\n };\n\n // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#grammar_string-literal\n const ESCAPED_CHARACTER = (rawDelimiter = \"\") => ({\n className: 'subst',\n variants: [\n { match: concat(/\\\\/, rawDelimiter, /[0\\\\tnr\"']/) },\n { match: concat(/\\\\/, rawDelimiter, /u\\{[0-9a-fA-F]{1,8}\\}/) }\n ]\n });\n const ESCAPED_NEWLINE = (rawDelimiter = \"\") => ({\n className: 'subst',\n match: concat(/\\\\/, rawDelimiter, /[\\t ]*(?:[\\r\\n]|\\r\\n)/)\n });\n const INTERPOLATION = (rawDelimiter = \"\") => ({\n className: 'subst',\n label: \"interpol\",\n begin: concat(/\\\\/, rawDelimiter, /\\(/),\n end: /\\)/\n });\n const MULTILINE_STRING = (rawDelimiter = \"\") => ({\n begin: concat(rawDelimiter, /\"\"\"/),\n end: concat(/\"\"\"/, rawDelimiter),\n contains: [\n ESCAPED_CHARACTER(rawDelimiter),\n ESCAPED_NEWLINE(rawDelimiter),\n INTERPOLATION(rawDelimiter)\n ]\n });\n const SINGLE_LINE_STRING = (rawDelimiter = \"\") => ({\n begin: concat(rawDelimiter, /\"/),\n end: concat(/\"/, rawDelimiter),\n contains: [\n ESCAPED_CHARACTER(rawDelimiter),\n INTERPOLATION(rawDelimiter)\n ]\n });\n const STRING = {\n className: 'string',\n variants: [\n MULTILINE_STRING(),\n MULTILINE_STRING(\"#\"),\n MULTILINE_STRING(\"##\"),\n MULTILINE_STRING(\"###\"),\n SINGLE_LINE_STRING(),\n SINGLE_LINE_STRING(\"#\"),\n SINGLE_LINE_STRING(\"##\"),\n SINGLE_LINE_STRING(\"###\")\n ]\n };\n\n const REGEXP_CONTENTS = [\n hljs.BACKSLASH_ESCAPE,\n {\n begin: /\\[/,\n end: /\\]/,\n relevance: 0,\n contains: [ hljs.BACKSLASH_ESCAPE ]\n }\n ];\n\n const BARE_REGEXP_LITERAL = {\n begin: /\\/[^\\s](?=[^/\\n]*\\/)/,\n end: /\\//,\n contains: REGEXP_CONTENTS\n };\n\n const EXTENDED_REGEXP_LITERAL = (rawDelimiter) => {\n const begin = concat(rawDelimiter, /\\//);\n const end = concat(/\\//, rawDelimiter);\n return {\n begin,\n end,\n contains: [\n ...REGEXP_CONTENTS,\n {\n scope: \"comment\",\n begin: `#(?!.*${end})`,\n end: /$/,\n },\n ],\n };\n };\n\n // https://docs.swift.org/swift-book/documentation/the-swift-programming-language/lexicalstructure/#Regular-Expression-Literals\n const REGEXP = {\n scope: \"regexp\",\n variants: [\n EXTENDED_REGEXP_LITERAL('###'),\n EXTENDED_REGEXP_LITERAL('##'),\n EXTENDED_REGEXP_LITERAL('#'),\n BARE_REGEXP_LITERAL\n ]\n };\n\n // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID412\n const QUOTED_IDENTIFIER = { match: concat(/`/, identifier, /`/) };\n const IMPLICIT_PARAMETER = {\n className: 'variable',\n match: /\\$\\d+/\n };\n const PROPERTY_WRAPPER_PROJECTION = {\n className: 'variable',\n match: `\\\\$${identifierCharacter}+`\n };\n const IDENTIFIERS = [\n QUOTED_IDENTIFIER,\n IMPLICIT_PARAMETER,\n PROPERTY_WRAPPER_PROJECTION\n ];\n\n // https://docs.swift.org/swift-book/ReferenceManual/Attributes.html\n const AVAILABLE_ATTRIBUTE = {\n match: /(@|#(un)?)available/,\n scope: 'keyword',\n starts: { contains: [\n {\n begin: /\\(/,\n end: /\\)/,\n keywords: availabilityKeywords,\n contains: [\n ...OPERATORS,\n NUMBER,\n STRING\n ]\n }\n ] }\n };\n\n const KEYWORD_ATTRIBUTE = {\n scope: 'keyword',\n match: concat(/@/, either(...keywordAttributes), lookahead(either(/\\(/, /\\s+/))),\n };\n\n const USER_DEFINED_ATTRIBUTE = {\n scope: 'meta',\n match: concat(/@/, identifier)\n };\n\n const ATTRIBUTES = [\n AVAILABLE_ATTRIBUTE,\n KEYWORD_ATTRIBUTE,\n USER_DEFINED_ATTRIBUTE\n ];\n\n // https://docs.swift.org/swift-book/ReferenceManual/Types.html\n const TYPE = {\n match: lookahead(/\\b[A-Z]/),\n relevance: 0,\n contains: [\n { // Common Apple frameworks, for relevance boost\n className: 'type',\n match: concat(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/, identifierCharacter, '+')\n },\n { // Type identifier\n className: 'type',\n match: typeIdentifier,\n relevance: 0\n },\n { // Optional type\n match: /[?!]+/,\n relevance: 0\n },\n { // Variadic parameter\n match: /\\.\\.\\./,\n relevance: 0\n },\n { // Protocol composition\n match: concat(/\\s+&\\s+/, lookahead(typeIdentifier)),\n relevance: 0\n }\n ]\n };\n const GENERIC_ARGUMENTS = {\n begin: /</,\n end: />/,\n keywords: KEYWORDS,\n contains: [\n ...COMMENTS,\n ...KEYWORD_MODES,\n ...ATTRIBUTES,\n OPERATOR_GUARD,\n TYPE\n ]\n };\n TYPE.contains.push(GENERIC_ARGUMENTS);\n\n // https://docs.swift.org/swift-book/ReferenceManual/Expressions.html#ID552\n // Prevents element names from being highlighted as keywords.\n const TUPLE_ELEMENT_NAME = {\n match: concat(identifier, /\\s*:/),\n keywords: \"_|0\",\n relevance: 0\n };\n // Matches tuples as well as the parameter list of a function type.\n const TUPLE = {\n begin: /\\(/,\n end: /\\)/,\n relevance: 0,\n keywords: KEYWORDS,\n contains: [\n 'self',\n TUPLE_ELEMENT_NAME,\n ...COMMENTS,\n REGEXP,\n ...KEYWORD_MODES,\n ...BUILT_INS,\n ...OPERATORS,\n NUMBER,\n STRING,\n ...IDENTIFIERS,\n ...ATTRIBUTES,\n TYPE\n ]\n };\n\n const GENERIC_PARAMETERS = {\n begin: /</,\n end: />/,\n keywords: 'repeat each',\n contains: [\n ...COMMENTS,\n TYPE\n ]\n };\n const FUNCTION_PARAMETER_NAME = {\n begin: either(\n lookahead(concat(identifier, /\\s*:/)),\n lookahead(concat(identifier, /\\s+/, identifier, /\\s*:/))\n ),\n end: /:/,\n relevance: 0,\n contains: [\n {\n className: 'keyword',\n match: /\\b_\\b/\n },\n {\n className: 'params',\n match: identifier\n }\n ]\n };\n const FUNCTION_PARAMETERS = {\n begin: /\\(/,\n end: /\\)/,\n keywords: KEYWORDS,\n contains: [\n FUNCTION_PARAMETER_NAME,\n ...COMMENTS,\n ...KEYWORD_MODES,\n ...OPERATORS,\n NUMBER,\n STRING,\n ...ATTRIBUTES,\n TYPE,\n TUPLE\n ],\n endsParent: true,\n illegal: /[\"']/\n };\n // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID362\n // https://docs.swift.org/swift-book/documentation/the-swift-programming-language/declarations/#Macro-Declaration\n const FUNCTION_OR_MACRO = {\n match: [\n /(func|macro)/,\n /\\s+/,\n either(QUOTED_IDENTIFIER.match, identifier, operator)\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n GENERIC_PARAMETERS,\n FUNCTION_PARAMETERS,\n WHITESPACE\n ],\n illegal: [\n /\\[/,\n /%/\n ]\n };\n\n // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID375\n // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID379\n const INIT_SUBSCRIPT = {\n match: [\n /\\b(?:subscript|init[?!]?)/,\n /\\s*(?=[<(])/,\n ],\n className: { 1: \"keyword\" },\n contains: [\n GENERIC_PARAMETERS,\n FUNCTION_PARAMETERS,\n WHITESPACE\n ],\n illegal: /\\[|%/\n };\n // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID380\n const OPERATOR_DECLARATION = {\n match: [\n /operator/,\n /\\s+/,\n operator\n ],\n className: {\n 1: \"keyword\",\n 3: \"title\"\n }\n };\n\n // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID550\n const PRECEDENCEGROUP = {\n begin: [\n /precedencegroup/,\n /\\s+/,\n typeIdentifier\n ],\n className: {\n 1: \"keyword\",\n 3: \"title\"\n },\n contains: [ TYPE ],\n keywords: [\n ...precedencegroupKeywords,\n ...literals\n ],\n end: /}/\n };\n\n const TYPE_DECLARATION = {\n begin: [\n /(struct|protocol|class|extension|enum|actor)/,\n /\\s+/,\n identifier,\n /\\s*/,\n ],\n beginScope: {\n 1: \"keyword\",\n 3: \"title.class\"\n },\n keywords: KEYWORDS,\n contains: [\n GENERIC_PARAMETERS,\n ...KEYWORD_MODES,\n {\n begin: /:/,\n end: /\\{/,\n keywords: KEYWORDS,\n contains: [\n {\n scope: \"title.class.inherited\",\n match: typeIdentifier,\n },\n ...KEYWORD_MODES,\n ],\n relevance: 0,\n },\n ]\n };\n\n // Add supported submodes to string interpolation.\n for (const variant of STRING.variants) {\n const interpolation = variant.contains.find(mode => mode.label === \"interpol\");\n // TODO: Interpolation can contain any expression, so there's room for improvement here.\n interpolation.keywords = KEYWORDS;\n const submodes = [\n ...KEYWORD_MODES,\n ...BUILT_INS,\n ...OPERATORS,\n NUMBER,\n STRING,\n ...IDENTIFIERS\n ];\n interpolation.contains = [\n ...submodes,\n {\n begin: /\\(/,\n end: /\\)/,\n contains: [\n 'self',\n ...submodes\n ]\n }\n ];\n }\n\n return {\n name: 'Swift',\n keywords: KEYWORDS,\n contains: [\n ...COMMENTS,\n FUNCTION_OR_MACRO,\n INIT_SUBSCRIPT,\n TYPE_DECLARATION,\n OPERATOR_DECLARATION,\n PRECEDENCEGROUP,\n {\n beginKeywords: 'import',\n end: /$/,\n contains: [ ...COMMENTS ],\n relevance: 0\n },\n REGEXP,\n ...KEYWORD_MODES,\n ...BUILT_INS,\n ...OPERATORS,\n NUMBER,\n STRING,\n ...IDENTIFIERS,\n ...ATTRIBUTES,\n TYPE,\n TUPLE\n ]\n };\n}\n\nmodule.exports = swift;\n","/*\nLanguage: YAML\nDescription: Yet Another Markdown Language\nAuthor: Stefan Wienert <stwienert@gmail.com>\nContributors: Carl Baxter <carl@cbax.tech>\nRequires: ruby.js\nWebsite: https://yaml.org\nCategory: common, config\n*/\nfunction yaml(hljs) {\n const LITERALS = 'true false yes no null';\n\n // YAML spec allows non-reserved URI characters in tags.\n const URI_CHARACTERS = '[\\\\w#;/?:@&=+$,.~*\\'()[\\\\]]+';\n\n // Define keys as starting with a word character\n // ...containing word chars, spaces, colons, forward-slashes, hyphens and periods\n // ...and ending with a colon followed immediately by a space, tab or newline.\n // The YAML spec allows for much more than this, but this covers most use-cases.\n const KEY = {\n className: 'attr',\n variants: [\n // added brackets support \n { begin: /\\w[\\w :()\\./-]*:(?=[ \\t]|$)/ },\n { // double quoted keys - with brackets\n begin: /\"\\w[\\w :()\\./-]*\":(?=[ \\t]|$)/ },\n { // single quoted keys - with brackets\n begin: /'\\w[\\w :()\\./-]*':(?=[ \\t]|$)/ },\n ]\n };\n\n const TEMPLATE_VARIABLES = {\n className: 'template-variable',\n variants: [\n { // jinja templates Ansible\n begin: /\\{\\{/,\n end: /\\}\\}/\n },\n { // Ruby i18n\n begin: /%\\{/,\n end: /\\}/\n }\n ]\n };\n const STRING = {\n className: 'string',\n relevance: 0,\n variants: [\n {\n begin: /'/,\n end: /'/\n },\n {\n begin: /\"/,\n end: /\"/\n },\n { begin: /\\S+/ }\n ],\n contains: [\n hljs.BACKSLASH_ESCAPE,\n TEMPLATE_VARIABLES\n ]\n };\n\n // Strings inside of value containers (objects) can't contain braces,\n // brackets, or commas\n const CONTAINER_STRING = hljs.inherit(STRING, { variants: [\n {\n begin: /'/,\n end: /'/\n },\n {\n begin: /\"/,\n end: /\"/\n },\n { begin: /[^\\s,{}[\\]]+/ }\n ] });\n\n const DATE_RE = '[0-9]{4}(-[0-9][0-9]){0,2}';\n const TIME_RE = '([Tt \\\\t][0-9][0-9]?(:[0-9][0-9]){2})?';\n const FRACTION_RE = '(\\\\.[0-9]*)?';\n const ZONE_RE = '([ \\\\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?';\n const TIMESTAMP = {\n className: 'number',\n begin: '\\\\b' + DATE_RE + TIME_RE + FRACTION_RE + ZONE_RE + '\\\\b'\n };\n\n const VALUE_CONTAINER = {\n end: ',',\n endsWithParent: true,\n excludeEnd: true,\n keywords: LITERALS,\n relevance: 0\n };\n const OBJECT = {\n begin: /\\{/,\n end: /\\}/,\n contains: [ VALUE_CONTAINER ],\n illegal: '\\\\n',\n relevance: 0\n };\n const ARRAY = {\n begin: '\\\\[',\n end: '\\\\]',\n contains: [ VALUE_CONTAINER ],\n illegal: '\\\\n',\n relevance: 0\n };\n\n const MODES = [\n KEY,\n {\n className: 'meta',\n begin: '^---\\\\s*$',\n relevance: 10\n },\n { // multi line string\n // Blocks start with a | or > followed by a newline\n //\n // Indentation of subsequent lines must be the same to\n // be considered part of the block\n className: 'string',\n begin: '[\\\\|>]([1-9]?[+-])?[ ]*\\\\n( +)[^ ][^\\\\n]*\\\\n(\\\\2[^\\\\n]+\\\\n?)*'\n },\n { // Ruby/Rails erb\n begin: '<%[%=-]?',\n end: '[%-]?%>',\n subLanguage: 'ruby',\n excludeBegin: true,\n excludeEnd: true,\n relevance: 0\n },\n { // named tags\n className: 'type',\n begin: '!\\\\w+!' + URI_CHARACTERS\n },\n // https://yaml.org/spec/1.2/spec.html#id2784064\n { // verbatim tags\n className: 'type',\n begin: '!<' + URI_CHARACTERS + \">\"\n },\n { // primary tags\n className: 'type',\n begin: '!' + URI_CHARACTERS\n },\n { // secondary tags\n className: 'type',\n begin: '!!' + URI_CHARACTERS\n },\n { // fragment id &ref\n className: 'meta',\n begin: '&' + hljs.UNDERSCORE_IDENT_RE + '$'\n },\n { // fragment reference *ref\n className: 'meta',\n begin: '\\\\*' + hljs.UNDERSCORE_IDENT_RE + '$'\n },\n { // array listing\n className: 'bullet',\n // TODO: remove |$ hack when we have proper look-ahead support\n begin: '-(?=[ ]|$)',\n relevance: 0\n },\n hljs.HASH_COMMENT_MODE,\n {\n beginKeywords: LITERALS,\n keywords: { literal: LITERALS }\n },\n TIMESTAMP,\n // numbers are any valid C-style number that\n // sit isolated from other words\n {\n className: 'number',\n begin: hljs.C_NUMBER_RE + '\\\\b',\n relevance: 0\n },\n OBJECT,\n ARRAY,\n STRING\n ];\n\n const VALUE_MODES = [ ...MODES ];\n VALUE_MODES.pop();\n VALUE_MODES.push(CONTAINER_STRING);\n VALUE_CONTAINER.contains = VALUE_MODES;\n\n return {\n name: 'YAML',\n case_insensitive: true,\n aliases: [ 'yml' ],\n contains: MODES\n };\n}\n\nmodule.exports = yaml;\n","const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\nconst KEYWORDS = [\n \"as\", // for exports\n \"in\",\n \"of\",\n \"if\",\n \"for\",\n \"while\",\n \"finally\",\n \"var\",\n \"new\",\n \"function\",\n \"do\",\n \"return\",\n \"void\",\n \"else\",\n \"break\",\n \"catch\",\n \"instanceof\",\n \"with\",\n \"throw\",\n \"case\",\n \"default\",\n \"try\",\n \"switch\",\n \"continue\",\n \"typeof\",\n \"delete\",\n \"let\",\n \"yield\",\n \"const\",\n \"class\",\n // JS handles these with a special rule\n // \"get\",\n // \"set\",\n \"debugger\",\n \"async\",\n \"await\",\n \"static\",\n \"import\",\n \"from\",\n \"export\",\n \"extends\"\n];\nconst LITERALS = [\n \"true\",\n \"false\",\n \"null\",\n \"undefined\",\n \"NaN\",\n \"Infinity\"\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\nconst TYPES = [\n // Fundamental objects\n \"Object\",\n \"Function\",\n \"Boolean\",\n \"Symbol\",\n // numbers and dates\n \"Math\",\n \"Date\",\n \"Number\",\n \"BigInt\",\n // text\n \"String\",\n \"RegExp\",\n // Indexed collections\n \"Array\",\n \"Float32Array\",\n \"Float64Array\",\n \"Int8Array\",\n \"Uint8Array\",\n \"Uint8ClampedArray\",\n \"Int16Array\",\n \"Int32Array\",\n \"Uint16Array\",\n \"Uint32Array\",\n \"BigInt64Array\",\n \"BigUint64Array\",\n // Keyed collections\n \"Set\",\n \"Map\",\n \"WeakSet\",\n \"WeakMap\",\n // Structured data\n \"ArrayBuffer\",\n \"SharedArrayBuffer\",\n \"Atomics\",\n \"DataView\",\n \"JSON\",\n // Control abstraction objects\n \"Promise\",\n \"Generator\",\n \"GeneratorFunction\",\n \"AsyncFunction\",\n // Reflection\n \"Reflect\",\n \"Proxy\",\n // Internationalization\n \"Intl\",\n // WebAssembly\n \"WebAssembly\"\n];\n\nconst ERROR_TYPES = [\n \"Error\",\n \"EvalError\",\n \"InternalError\",\n \"RangeError\",\n \"ReferenceError\",\n \"SyntaxError\",\n \"TypeError\",\n \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n \"setInterval\",\n \"setTimeout\",\n \"clearInterval\",\n \"clearTimeout\",\n\n \"require\",\n \"exports\",\n\n \"eval\",\n \"isFinite\",\n \"isNaN\",\n \"parseFloat\",\n \"parseInt\",\n \"decodeURI\",\n \"decodeURIComponent\",\n \"encodeURI\",\n \"encodeURIComponent\",\n \"escape\",\n \"unescape\"\n];\n\nconst BUILT_IN_VARIABLES = [\n \"arguments\",\n \"this\",\n \"super\",\n \"console\",\n \"window\",\n \"document\",\n \"localStorage\",\n \"sessionStorage\",\n \"module\",\n \"global\" // Node.js\n];\n\nconst BUILT_INS = [].concat(\n BUILT_IN_GLOBALS,\n TYPES,\n ERROR_TYPES\n);\n\n/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\n\n/** @type LanguageFn */\nfunction javascript(hljs) {\n const regex = hljs.regex;\n /**\n * Takes a string like \"<Booger\" and checks to see\n * if we can find a matching \"</Booger\" later in the\n * content.\n * @param {RegExpMatchArray} match\n * @param {{after:number}} param1\n */\n const hasClosingTag = (match, { after }) => {\n const tag = \"</\" + match[0].slice(1);\n const pos = match.input.indexOf(tag, after);\n return pos !== -1;\n };\n\n const IDENT_RE$1 = IDENT_RE;\n const FRAGMENT = {\n begin: '<>',\n end: '</>'\n };\n // to avoid some special cases inside isTrulyOpeningTag\n const XML_SELF_CLOSING = /<[A-Za-z0-9\\\\._:-]+\\s*\\/>/;\n const XML_TAG = {\n begin: /<[A-Za-z0-9\\\\._:-]+/,\n end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,\n /**\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\n isTrulyOpeningTag: (match, response) => {\n const afterMatchIndex = match[0].length + match.index;\n const nextChar = match.input[afterMatchIndex];\n if (\n // HTML should not include another raw `<` inside a tag\n // nested type?\n // `<Array<Array<number>>`, etc.\n nextChar === \"<\" ||\n // the , gives away that this is not HTML\n // `<T, A extends keyof T, V>`\n nextChar === \",\"\n ) {\n response.ignoreMatch();\n return;\n }\n\n // `<something>`\n // Quite possibly a tag, lets look for a matching closing tag...\n if (nextChar === \">\") {\n // if we cannot find a matching closing tag, then we\n // will ignore it\n if (!hasClosingTag(match, { after: afterMatchIndex })) {\n response.ignoreMatch();\n }\n }\n\n // `<blah />` (self-closing)\n // handled by simpleSelfClosing rule\n\n let m;\n const afterMatch = match.input.substring(afterMatchIndex);\n\n // some more template typing stuff\n // <T = any>(key?: string) => Modify<\n if ((m = afterMatch.match(/^\\s*=/))) {\n response.ignoreMatch();\n return;\n }\n\n // `<From extends string>`\n // technically this could be HTML, but it smells like a type\n // NOTE: This is ugh, but added specifically for https://github.com/highlightjs/highlight.js/issues/3276\n if ((m = afterMatch.match(/^\\s+extends\\s+/))) {\n if (m.index === 0) {\n response.ignoreMatch();\n // eslint-disable-next-line no-useless-return\n return;\n }\n }\n }\n };\n const KEYWORDS$1 = {\n $pattern: IDENT_RE,\n keyword: KEYWORDS,\n literal: LITERALS,\n built_in: BUILT_INS,\n \"variable.language\": BUILT_IN_VARIABLES\n };\n\n // https://tc39.es/ecma262/#sec-literals-numeric-literals\n const decimalDigits = '[0-9](_?[0-9])*';\n const frac = `\\\\.(${decimalDigits})`;\n // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\n const NUMBER = {\n className: 'number',\n variants: [\n // DecimalLiteral\n { begin: `(\\\\b(${decimalInteger})((${frac})|\\\\.)?|(${frac}))` +\n `[eE][+-]?(${decimalDigits})\\\\b` },\n { begin: `\\\\b(${decimalInteger})\\\\b((${frac})\\\\b|\\\\.)?|(${frac})\\\\b` },\n\n // DecimalBigIntegerLiteral\n { begin: `\\\\b(0|[1-9](_?[0-9])*)n\\\\b` },\n\n // NonDecimalIntegerLiteral\n { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\" },\n { begin: \"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\" },\n { begin: \"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\" },\n\n // LegacyOctalIntegerLiteral (does not include underscore separators)\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n { begin: \"\\\\b0[0-7]+n?\\\\b\" },\n ],\n relevance: 0\n };\n\n const SUBST = {\n className: 'subst',\n begin: '\\\\$\\\\{',\n end: '\\\\}',\n keywords: KEYWORDS$1,\n contains: [] // defined later\n };\n const HTML_TEMPLATE = {\n begin: '\\.?html`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'xml'\n }\n };\n const CSS_TEMPLATE = {\n begin: '\\.?css`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'css'\n }\n };\n const GRAPHQL_TEMPLATE = {\n begin: '\\.?gql`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'graphql'\n }\n };\n const TEMPLATE_STRING = {\n className: 'string',\n begin: '`',\n end: '`',\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ]\n };\n const JSDOC_COMMENT = hljs.COMMENT(\n /\\/\\*\\*(?!\\/)/,\n '\\\\*/',\n {\n relevance: 0,\n contains: [\n {\n begin: '(?=@[A-Za-z]+)',\n relevance: 0,\n contains: [\n {\n className: 'doctag',\n begin: '@[A-Za-z]+'\n },\n {\n className: 'type',\n begin: '\\\\{',\n end: '\\\\}',\n excludeEnd: true,\n excludeBegin: true,\n relevance: 0\n },\n {\n className: 'variable',\n begin: IDENT_RE$1 + '(?=\\\\s*(-)|$)',\n endsParent: true,\n relevance: 0\n },\n // eat spaces (not newlines) so we can find\n // types or variables\n {\n begin: /(?=[^\\n])\\s/,\n relevance: 0\n }\n ]\n }\n ]\n }\n );\n const COMMENT = {\n className: \"comment\",\n variants: [\n JSDOC_COMMENT,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.C_LINE_COMMENT_MODE\n ]\n };\n const SUBST_INTERNALS = [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n // This is intentional:\n // See https://github.com/highlightjs/highlight.js/issues/3288\n // hljs.REGEXP_MODE\n ];\n SUBST.contains = SUBST_INTERNALS\n .concat({\n // we need to pair up {} inside our subst to prevent\n // it from ending too early by matching another }\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS$1,\n contains: [\n \"self\"\n ].concat(SUBST_INTERNALS)\n });\n const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\n const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\n // eat recursive parens in sub expressions\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n keywords: KEYWORDS$1,\n contains: [\"self\"].concat(SUBST_AND_COMMENTS)\n }\n ]);\n const PARAMS = {\n className: 'params',\n // convert this to negative lookbehind in v12\n begin: /(\\s*)\\(/, // to match the parms with \n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n };\n\n // ES6 classes\n const CLASS_OR_EXTENDS = {\n variants: [\n // class Car extends vehicle\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1,\n /\\s+/,\n /extends/,\n /\\s+/,\n regex.concat(IDENT_RE$1, \"(\", regex.concat(/\\./, IDENT_RE$1), \")*\")\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\",\n 5: \"keyword\",\n 7: \"title.class.inherited\"\n }\n },\n // class Car\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n\n ]\n };\n\n const CLASS_REFERENCE = {\n relevance: 0,\n match:\n regex.either(\n // Hard coded exceptions\n /\\bJSON/,\n // Float32Array, OutT\n /\\b[A-Z][a-z]+([A-Z][a-z]*|\\d)*/,\n // CSSFactory, CSSFactoryT\n /\\b[A-Z]{2,}([A-Z][a-z]+|\\d)+([A-Z][a-z]*)*/,\n // FPs, FPsT\n /\\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\\d)*([A-Z][a-z]*)*/,\n // P\n // single letters are not highlighted\n // BLAH\n // this will be flagged as a UPPER_CASE_CONSTANT instead\n ),\n className: \"title.class\",\n keywords: {\n _: [\n // se we still get relevance credit for JS library classes\n ...TYPES,\n ...ERROR_TYPES\n ]\n }\n };\n\n const USE_STRICT = {\n label: \"use_strict\",\n className: 'meta',\n relevance: 10,\n begin: /^\\s*['\"]use (strict|asm)['\"]/\n };\n\n const FUNCTION_DEFINITION = {\n variants: [\n {\n match: [\n /function/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\s*\\()/\n ]\n },\n // anonymous function\n {\n match: [\n /function/,\n /\\s*(?=\\()/\n ]\n }\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n label: \"func.def\",\n contains: [ PARAMS ],\n illegal: /%/\n };\n\n const UPPER_CASE_CONSTANT = {\n relevance: 0,\n match: /\\b[A-Z][A-Z_0-9]+\\b/,\n className: \"variable.constant\"\n };\n\n function noneOf(list) {\n return regex.concat(\"(?!\", list.join(\"|\"), \")\");\n }\n\n const FUNCTION_CALL = {\n match: regex.concat(\n /\\b/,\n noneOf([\n ...BUILT_IN_GLOBALS,\n \"super\",\n \"import\"\n ].map(x => `${x}\\\\s*\\\\(`)),\n IDENT_RE$1, regex.lookahead(/\\s*\\(/)),\n className: \"title.function\",\n relevance: 0\n };\n\n const PROPERTY_ACCESS = {\n begin: regex.concat(/\\./, regex.lookahead(\n regex.concat(IDENT_RE$1, /(?![0-9A-Za-z$_(])/)\n )),\n end: IDENT_RE$1,\n excludeBegin: true,\n keywords: \"prototype\",\n className: \"property\",\n relevance: 0\n };\n\n const GETTER_OR_SETTER = {\n match: [\n /get|set/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\()/\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n { // eat to avoid empty params\n begin: /\\(\\)/\n },\n PARAMS\n ]\n };\n\n const FUNC_LEAD_IN_RE = '(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\s*=>';\n\n const FUNCTION_VARIABLE = {\n match: [\n /const|var|let/, /\\s+/,\n IDENT_RE$1, /\\s*/,\n /=\\s*/,\n /(async\\s*)?/, // async is optional\n regex.lookahead(FUNC_LEAD_IN_RE)\n ],\n keywords: \"async\",\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n PARAMS\n ]\n };\n\n return {\n name: 'JavaScript',\n aliases: ['js', 'jsx', 'mjs', 'cjs'],\n keywords: KEYWORDS$1,\n // this will be extended by TypeScript\n exports: { PARAMS_CONTAINS, CLASS_REFERENCE },\n illegal: /#(?![$_A-z])/,\n contains: [\n hljs.SHEBANG({\n label: \"shebang\",\n binary: \"node\",\n relevance: 5\n }),\n USE_STRICT,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n COMMENT,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n CLASS_REFERENCE,\n {\n className: 'attr',\n begin: IDENT_RE$1 + regex.lookahead(':'),\n relevance: 0\n },\n FUNCTION_VARIABLE,\n { // \"value\" container\n begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n keywords: 'return throw case',\n relevance: 0,\n contains: [\n COMMENT,\n hljs.REGEXP_MODE,\n {\n className: 'function',\n // we have to count the parens to make sure we actually have the\n // correct bounding ( ) before the =>. There could be any number of\n // sub-expressions inside also surrounded by parens.\n begin: FUNC_LEAD_IN_RE,\n returnBegin: true,\n end: '\\\\s*=>',\n contains: [\n {\n className: 'params',\n variants: [\n {\n begin: hljs.UNDERSCORE_IDENT_RE,\n relevance: 0\n },\n {\n className: null,\n begin: /\\(\\s*\\)/,\n skip: true\n },\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n }\n ]\n }\n ]\n },\n { // could be a comma delimited list of params to a function call\n begin: /,/,\n relevance: 0\n },\n {\n match: /\\s+/,\n relevance: 0\n },\n { // JSX\n variants: [\n { begin: FRAGMENT.begin, end: FRAGMENT.end },\n { match: XML_SELF_CLOSING },\n {\n begin: XML_TAG.begin,\n // we carefully check the opening tag to see if it truly\n // is a tag and not a false positive\n 'on:begin': XML_TAG.isTrulyOpeningTag,\n end: XML_TAG.end\n }\n ],\n subLanguage: 'xml',\n contains: [\n {\n begin: XML_TAG.begin,\n end: XML_TAG.end,\n skip: true,\n contains: ['self']\n }\n ]\n }\n ],\n },\n FUNCTION_DEFINITION,\n {\n // prevent this from getting swallowed up by function\n // since they appear \"function like\"\n beginKeywords: \"while if switch catch for\"\n },\n {\n // we have to count the parens to make sure we actually have the correct\n // bounding ( ). There could be any number of sub-expressions inside\n // also surrounded by parens.\n begin: '\\\\b(?!function)' + hljs.UNDERSCORE_IDENT_RE +\n '\\\\(' + // first parens\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)\\\\s*\\\\{', // end parens\n returnBegin:true,\n label: \"func.def\",\n contains: [\n PARAMS,\n hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1, className: \"title.function\" })\n ]\n },\n // catch ... so it won't trigger the property rule below\n {\n match: /\\.\\.\\./,\n relevance: 0\n },\n PROPERTY_ACCESS,\n // hack: prevents detection of keywords in some circumstances\n // .keyword()\n // $keyword = x\n {\n match: '\\\\$' + IDENT_RE$1,\n relevance: 0\n },\n {\n match: [ /\\bconstructor(?=\\s*\\()/ ],\n className: { 1: \"title.function\" },\n contains: [ PARAMS ]\n },\n FUNCTION_CALL,\n UPPER_CASE_CONSTANT,\n CLASS_OR_EXTENDS,\n GETTER_OR_SETTER,\n {\n match: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n }\n ]\n };\n}\n\n/*\nLanguage: TypeScript\nAuthor: Panu Horsmalahti <panu.horsmalahti@iki.fi>\nContributors: Ike Ku <dempfi@yahoo.com>\nDescription: TypeScript is a strict superset of JavaScript\nWebsite: https://www.typescriptlang.org\nCategory: common, scripting\n*/\n\n\n/** @type LanguageFn */\nfunction typescript(hljs) {\n const tsLanguage = javascript(hljs);\n\n const IDENT_RE$1 = IDENT_RE;\n const TYPES = [\n \"any\",\n \"void\",\n \"number\",\n \"boolean\",\n \"string\",\n \"object\",\n \"never\",\n \"symbol\",\n \"bigint\",\n \"unknown\"\n ];\n const NAMESPACE = {\n begin: [\n /namespace/,\n /\\s+/,\n hljs.IDENT_RE\n ],\n beginScope: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n };\n const INTERFACE = {\n beginKeywords: 'interface',\n end: /\\{/,\n excludeEnd: true,\n keywords: {\n keyword: 'interface extends',\n built_in: TYPES\n },\n contains: [ tsLanguage.exports.CLASS_REFERENCE ]\n };\n const USE_STRICT = {\n className: 'meta',\n relevance: 10,\n begin: /^\\s*['\"]use strict['\"]/\n };\n const TS_SPECIFIC_KEYWORDS = [\n \"type\",\n // \"namespace\",\n \"interface\",\n \"public\",\n \"private\",\n \"protected\",\n \"implements\",\n \"declare\",\n \"abstract\",\n \"readonly\",\n \"enum\",\n \"override\",\n \"satisfies\"\n ];\n\n /*\n namespace is a TS keyword but it's fine to use it as a variable name too.\n const message = 'foo';\n const namespace = 'bar';\n */\n\n const KEYWORDS$1 = {\n $pattern: IDENT_RE,\n keyword: KEYWORDS.concat(TS_SPECIFIC_KEYWORDS),\n literal: LITERALS,\n built_in: BUILT_INS.concat(TYPES),\n \"variable.language\": BUILT_IN_VARIABLES\n };\n const DECORATOR = {\n className: 'meta',\n begin: '@' + IDENT_RE$1,\n };\n\n const swapMode = (mode, label, replacement) => {\n const indx = mode.contains.findIndex(m => m.label === label);\n if (indx === -1) { throw new Error(\"can not find mode to replace\"); }\n\n mode.contains.splice(indx, 1, replacement);\n };\n\n\n // this should update anywhere keywords is used since\n // it will be the same actual JS object\n Object.assign(tsLanguage.keywords, KEYWORDS$1);\n\n tsLanguage.exports.PARAMS_CONTAINS.push(DECORATOR);\n\n // highlight the function params\n const ATTRIBUTE_HIGHLIGHT = tsLanguage.contains.find(c => c.className === \"attr\");\n tsLanguage.exports.PARAMS_CONTAINS.push([\n tsLanguage.exports.CLASS_REFERENCE, // class reference for highlighting the params types\n ATTRIBUTE_HIGHLIGHT, // highlight the params key\n ]);\n tsLanguage.contains = tsLanguage.contains.concat([\n DECORATOR,\n NAMESPACE,\n INTERFACE,\n ]);\n\n // TS gets a simpler shebang rule than JS\n swapMode(tsLanguage, \"shebang\", hljs.SHEBANG());\n // JS use strict rule purposely excludes `asm` which makes no sense\n swapMode(tsLanguage, \"use_strict\", USE_STRICT);\n\n const functionDeclaration = tsLanguage.contains.find(m => m.label === \"func.def\");\n functionDeclaration.relevance = 0; // () => {} is more typical in TypeScript\n\n Object.assign(tsLanguage, {\n name: 'TypeScript',\n aliases: [\n 'ts',\n 'tsx',\n 'mts',\n 'cts'\n ]\n });\n\n return tsLanguage;\n}\n\nmodule.exports = typescript;\n","/*\nLanguage: Visual Basic .NET\nDescription: Visual Basic .NET (VB.NET) is a multi-paradigm, object-oriented programming language, implemented on the .NET Framework.\nAuthors: Poren Chiang <ren.chiang@gmail.com>, Jan Pilzer\nWebsite: https://docs.microsoft.com/dotnet/visual-basic/getting-started\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction vbnet(hljs) {\n const regex = hljs.regex;\n /**\n * Character Literal\n * Either a single character (\"a\"C) or an escaped double quote (\"\"\"\"C).\n */\n const CHARACTER = {\n className: 'string',\n begin: /\"(\"\"|[^/n])\"C\\b/\n };\n\n const STRING = {\n className: 'string',\n begin: /\"/,\n end: /\"/,\n illegal: /\\n/,\n contains: [\n {\n // double quote escape\n begin: /\"\"/ }\n ]\n };\n\n /** Date Literals consist of a date, a time, or both separated by whitespace, surrounded by # */\n const MM_DD_YYYY = /\\d{1,2}\\/\\d{1,2}\\/\\d{4}/;\n const YYYY_MM_DD = /\\d{4}-\\d{1,2}-\\d{1,2}/;\n const TIME_12H = /(\\d|1[012])(:\\d+){0,2} *(AM|PM)/;\n const TIME_24H = /\\d{1,2}(:\\d{1,2}){1,2}/;\n const DATE = {\n className: 'literal',\n variants: [\n {\n // #YYYY-MM-DD# (ISO-Date) or #M/D/YYYY# (US-Date)\n begin: regex.concat(/# */, regex.either(YYYY_MM_DD, MM_DD_YYYY), / *#/) },\n {\n // #H:mm[:ss]# (24h Time)\n begin: regex.concat(/# */, TIME_24H, / *#/) },\n {\n // #h[:mm[:ss]] A# (12h Time)\n begin: regex.concat(/# */, TIME_12H, / *#/) },\n {\n // date plus time\n begin: regex.concat(\n /# */,\n regex.either(YYYY_MM_DD, MM_DD_YYYY),\n / +/,\n regex.either(TIME_12H, TIME_24H),\n / *#/\n ) }\n ]\n };\n\n const NUMBER = {\n className: 'number',\n relevance: 0,\n variants: [\n {\n // Float\n begin: /\\b\\d[\\d_]*((\\.[\\d_]+(E[+-]?[\\d_]+)?)|(E[+-]?[\\d_]+))[RFD@!#]?/ },\n {\n // Integer (base 10)\n begin: /\\b\\d[\\d_]*((U?[SIL])|[%&])?/ },\n {\n // Integer (base 16)\n begin: /&H[\\dA-F_]+((U?[SIL])|[%&])?/ },\n {\n // Integer (base 8)\n begin: /&O[0-7_]+((U?[SIL])|[%&])?/ },\n {\n // Integer (base 2)\n begin: /&B[01_]+((U?[SIL])|[%&])?/ }\n ]\n };\n\n const LABEL = {\n className: 'label',\n begin: /^\\w+:/\n };\n\n const DOC_COMMENT = hljs.COMMENT(/'''/, /$/, { contains: [\n {\n className: 'doctag',\n begin: /<\\/?/,\n end: />/\n }\n ] });\n\n const COMMENT = hljs.COMMENT(null, /$/, { variants: [\n { begin: /'/ },\n {\n // TODO: Use multi-class for leading spaces\n begin: /([\\t ]|^)REM(?=\\s)/ }\n ] });\n\n const DIRECTIVES = {\n className: 'meta',\n // TODO: Use multi-class for indentation once available\n begin: /[\\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\\b/,\n end: /$/,\n keywords: { keyword:\n 'const disable else elseif enable end externalsource if region then' },\n contains: [ COMMENT ]\n };\n\n return {\n name: 'Visual Basic .NET',\n aliases: [ 'vb' ],\n case_insensitive: true,\n classNameAliases: { label: 'symbol' },\n keywords: {\n keyword:\n 'addhandler alias aggregate ansi as async assembly auto binary by byref byval ' /* a-b */\n + 'call case catch class compare const continue custom declare default delegate dim distinct do ' /* c-d */\n + 'each equals else elseif end enum erase error event exit explicit finally for friend from function ' /* e-f */\n + 'get global goto group handles if implements imports in inherits interface into iterator ' /* g-i */\n + 'join key let lib loop me mid module mustinherit mustoverride mybase myclass ' /* j-m */\n + 'namespace narrowing new next notinheritable notoverridable ' /* n */\n + 'of off on operator option optional order overloads overridable overrides ' /* o */\n + 'paramarray partial preserve private property protected public ' /* p */\n + 'raiseevent readonly redim removehandler resume return ' /* r */\n + 'select set shadows shared skip static step stop structure strict sub synclock ' /* s */\n + 'take text then throw to try unicode until using when where while widening with withevents writeonly yield' /* t-y */,\n built_in:\n // Operators https://docs.microsoft.com/dotnet/visual-basic/language-reference/operators\n 'addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor '\n // Type Conversion Functions https://docs.microsoft.com/dotnet/visual-basic/language-reference/functions/type-conversion-functions\n + 'cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort',\n type:\n // Data types https://docs.microsoft.com/dotnet/visual-basic/language-reference/data-types\n 'boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort',\n literal: 'true false nothing'\n },\n illegal:\n '//|\\\\{|\\\\}|endif|gosub|variant|wend|^\\\\$ ' /* reserved deprecated keywords */,\n contains: [\n CHARACTER,\n STRING,\n DATE,\n NUMBER,\n LABEL,\n DOC_COMMENT,\n COMMENT,\n DIRECTIVES\n ]\n };\n}\n\nmodule.exports = vbnet;\n","/*\nLanguage: WebAssembly\nWebsite: https://webassembly.org\nDescription: Wasm is designed as a portable compilation target for programming languages, enabling deployment on the web for client and server applications.\nCategory: web, common\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction wasm(hljs) {\n hljs.regex;\n const BLOCK_COMMENT = hljs.COMMENT(/\\(;/, /;\\)/);\n BLOCK_COMMENT.contains.push(\"self\");\n const LINE_COMMENT = hljs.COMMENT(/;;/, /$/);\n\n const KWS = [\n \"anyfunc\",\n \"block\",\n \"br\",\n \"br_if\",\n \"br_table\",\n \"call\",\n \"call_indirect\",\n \"data\",\n \"drop\",\n \"elem\",\n \"else\",\n \"end\",\n \"export\",\n \"func\",\n \"global.get\",\n \"global.set\",\n \"local.get\",\n \"local.set\",\n \"local.tee\",\n \"get_global\",\n \"get_local\",\n \"global\",\n \"if\",\n \"import\",\n \"local\",\n \"loop\",\n \"memory\",\n \"memory.grow\",\n \"memory.size\",\n \"module\",\n \"mut\",\n \"nop\",\n \"offset\",\n \"param\",\n \"result\",\n \"return\",\n \"select\",\n \"set_global\",\n \"set_local\",\n \"start\",\n \"table\",\n \"tee_local\",\n \"then\",\n \"type\",\n \"unreachable\"\n ];\n\n const FUNCTION_REFERENCE = {\n begin: [\n /(?:func|call|call_indirect)/,\n /\\s+/,\n /\\$[^\\s)]+/\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n }\n };\n\n const ARGUMENT = {\n className: \"variable\",\n begin: /\\$[\\w_]+/\n };\n\n const PARENS = {\n match: /(\\((?!;)|\\))+/,\n className: \"punctuation\",\n relevance: 0\n };\n\n const NUMBER = {\n className: \"number\",\n relevance: 0,\n // borrowed from Prism, TODO: split out into variants\n match: /[+-]?\\b(?:\\d(?:_?\\d)*(?:\\.\\d(?:_?\\d)*)?(?:[eE][+-]?\\d(?:_?\\d)*)?|0x[\\da-fA-F](?:_?[\\da-fA-F])*(?:\\.[\\da-fA-F](?:_?[\\da-fA-D])*)?(?:[pP][+-]?\\d(?:_?\\d)*)?)\\b|\\binf\\b|\\bnan(?::0x[\\da-fA-F](?:_?[\\da-fA-D])*)?\\b/\n };\n\n const TYPE = {\n // look-ahead prevents us from gobbling up opcodes\n match: /(i32|i64|f32|f64)(?!\\.)/,\n className: \"type\"\n };\n\n const MATH_OPERATIONS = {\n className: \"keyword\",\n // borrowed from Prism, TODO: split out into variants\n match: /\\b(f32|f64|i32|i64)(?:\\.(?:abs|add|and|ceil|clz|const|convert_[su]\\/i(?:32|64)|copysign|ctz|demote\\/f64|div(?:_[su])?|eqz?|extend_[su]\\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\\/f32|reinterpret\\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\\/f(?:32|64))?|wrap\\/i64|xor))\\b/\n };\n\n const OFFSET_ALIGN = {\n match: [\n /(?:offset|align)/,\n /\\s*/,\n /=/\n ],\n className: {\n 1: \"keyword\",\n 3: \"operator\"\n }\n };\n\n return {\n name: 'WebAssembly',\n keywords: {\n $pattern: /[\\w.]+/,\n keyword: KWS\n },\n contains: [\n LINE_COMMENT,\n BLOCK_COMMENT,\n OFFSET_ALIGN,\n ARGUMENT,\n PARENS,\n FUNCTION_REFERENCE,\n hljs.QUOTE_STRING_MODE,\n TYPE,\n MATH_OPERATIONS,\n NUMBER\n ]\n };\n}\n\nmodule.exports = wasm;\n","var hljs = require('./core');\n\nhljs.registerLanguage('xml', require('./languages/xml'));\nhljs.registerLanguage('bash', require('./languages/bash'));\nhljs.registerLanguage('c', require('./languages/c'));\nhljs.registerLanguage('cpp', require('./languages/cpp'));\nhljs.registerLanguage('csharp', require('./languages/csharp'));\nhljs.registerLanguage('css', require('./languages/css'));\nhljs.registerLanguage('markdown', require('./languages/markdown'));\nhljs.registerLanguage('diff', require('./languages/diff'));\nhljs.registerLanguage('ruby', require('./languages/ruby'));\nhljs.registerLanguage('go', require('./languages/go'));\nhljs.registerLanguage('graphql', require('./languages/graphql'));\nhljs.registerLanguage('ini', require('./languages/ini'));\nhljs.registerLanguage('java', require('./languages/java'));\nhljs.registerLanguage('javascript', require('./languages/javascript'));\nhljs.registerLanguage('json', require('./languages/json'));\nhljs.registerLanguage('kotlin', require('./languages/kotlin'));\nhljs.registerLanguage('less', require('./languages/less'));\nhljs.registerLanguage('lua', require('./languages/lua'));\nhljs.registerLanguage('makefile', require('./languages/makefile'));\nhljs.registerLanguage('perl', require('./languages/perl'));\nhljs.registerLanguage('objectivec', require('./languages/objectivec'));\nhljs.registerLanguage('php', require('./languages/php'));\nhljs.registerLanguage('php-template', require('./languages/php-template'));\nhljs.registerLanguage('plaintext', require('./languages/plaintext'));\nhljs.registerLanguage('python', require('./languages/python'));\nhljs.registerLanguage('python-repl', require('./languages/python-repl'));\nhljs.registerLanguage('r', require('./languages/r'));\nhljs.registerLanguage('rust', require('./languages/rust'));\nhljs.registerLanguage('scss', require('./languages/scss'));\nhljs.registerLanguage('shell', require('./languages/shell'));\nhljs.registerLanguage('sql', require('./languages/sql'));\nhljs.registerLanguage('swift', require('./languages/swift'));\nhljs.registerLanguage('yaml', require('./languages/yaml'));\nhljs.registerLanguage('typescript', require('./languages/typescript'));\nhljs.registerLanguage('vbnet', require('./languages/vbnet'));\nhljs.registerLanguage('wasm', require('./languages/wasm'));\n\nhljs.HighlightJS = hljs\nhljs.default = hljs\nmodule.exports = hljs;","<script setup>\nimport { h, isVNode } from 'vue';\n\nconst props = defineProps({\n icon: { type: [String, Object, Function], required: true },\n});\n\nconst renderIcon = () => {\n if (!props.icon) return null;\n if (typeof props.icon === 'function' || isVNode(props.icon)) {\n return props.icon;\n }\n return h('span', { class: props.icon });\n};\n</script>\n\n<template>\n <component :is=\"renderIcon\" />\n</template>\n","export const VARIANT_OPTIONS = ['solid', 'outline', 'faded', 'link', 'ghost'];\nexport const COLOR_OPTIONS = ['blue', 'ruby', 'amber', 'slate', 'teal'];\nexport const SIZE_OPTIONS = ['xs', 'sm', 'md', 'lg'];\nexport const JUSTIFY_OPTIONS = ['start', 'center', 'end'];\n\nexport const EXCLUDED_ATTRS = [\n 'variant',\n 'color',\n 'size',\n 'icon',\n 'trailingIcon',\n 'isLoading',\n ...VARIANT_OPTIONS,\n ...COLOR_OPTIONS,\n ...SIZE_OPTIONS,\n ...JUSTIFY_OPTIONS,\n];\n","<script setup>\nimport { computed, useSlots, useAttrs } from 'vue';\n\nimport Spinner from 'dashboard/components-next/spinner/Spinner.vue';\nimport Icon from 'dashboard/components-next/icon/Icon.vue';\nimport {\n VARIANT_OPTIONS,\n COLOR_OPTIONS,\n JUSTIFY_OPTIONS,\n SIZE_OPTIONS,\n EXCLUDED_ATTRS,\n} from './constants.js';\n\nconst props = defineProps({\n label: { type: [String, Number], default: '' },\n variant: {\n type: String,\n default: null,\n validator: value => VARIANT_OPTIONS.includes(value) || value === null,\n },\n color: {\n type: String,\n default: null,\n validator: value => COLOR_OPTIONS.includes(value) || value === null,\n },\n size: {\n type: String,\n default: null,\n validator: value => SIZE_OPTIONS.includes(value) || value === null,\n },\n justify: {\n type: String,\n default: null,\n validator: value => JUSTIFY_OPTIONS.includes(value) || value === null,\n },\n icon: { type: [String, Object, Function], default: '' },\n trailingIcon: { type: Boolean, default: false },\n isLoading: { type: Boolean, default: false },\n});\n\nconst slots = useSlots();\nconst attrs = useAttrs();\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst filteredAttrs = computed(() => {\n const standardAttrs = {};\n\n Object.entries(attrs)\n .filter(([key]) => !EXCLUDED_ATTRS.includes(key))\n .forEach(([key, value]) => {\n standardAttrs[key] = value;\n });\n\n return standardAttrs;\n});\n\nconst computedVariant = computed(() => {\n if (props.variant) return props.variant;\n // The useAttrs method returns attributes values an empty string (not boolean value as in props).\n if (attrs.solid || attrs.solid === '') return 'solid';\n if (attrs.outline || attrs.outline === '') return 'outline';\n if (attrs.faded || attrs.faded === '') return 'faded';\n if (attrs.link || attrs.link === '') return 'link';\n if (attrs.ghost || attrs.ghost === '') return 'ghost';\n return 'solid'; // Default variant\n});\n\nconst computedColor = computed(() => {\n if (props.color) return props.color;\n if (attrs.blue || attrs.blue === '') return 'blue';\n if (attrs.ruby || attrs.ruby === '') return 'ruby';\n if (attrs.amber || attrs.amber === '') return 'amber';\n if (attrs.slate || attrs.slate === '') return 'slate';\n if (attrs.teal || attrs.teal === '') return 'teal';\n return 'blue'; // Default color\n});\n\nconst computedSize = computed(() => {\n if (props.size) return props.size;\n if (attrs.xs || attrs.xs === '') return 'xs';\n if (attrs.sm || attrs.sm === '') return 'sm';\n if (attrs.md || attrs.md === '') return 'md';\n if (attrs.lg || attrs.lg === '') return 'lg';\n return 'md';\n});\n\nconst computedJustify = computed(() => {\n if (props.justify) return props.justify;\n if (attrs.start || attrs.start === '') return 'start';\n if (attrs.center || attrs.center === '') return 'center';\n if (attrs.end || attrs.end === '') return 'end';\n\n return 'center';\n});\n\nconst STYLE_CONFIG = {\n colors: {\n blue: {\n solid:\n 'bg-n-brand text-white hover:enabled:brightness-110 focus-visible:brightness-110 outline-transparent',\n faded:\n 'bg-n-brand/10 text-n-blue-text hover:enabled:bg-n-brand/20 focus-visible:bg-n-brand/20 outline-transparent',\n outline: 'text-n-blue-text outline-n-brand',\n ghost:\n 'text-n-blue-text hover:enabled:bg-n-alpha-2 focus-visible:bg-n-alpha-2 outline-transparent',\n link: 'text-n-blue-text hover:enabled:underline focus-visible:underline outline-transparent',\n },\n ruby: {\n solid:\n 'bg-n-ruby-9 text-white hover:enabled:bg-n-ruby-10 focus-visible:bg-n-ruby-10 outline-transparent',\n faded:\n 'bg-n-ruby-9/10 text-n-ruby-11 hover:enabled:bg-n-ruby-9/20 focus-visible:bg-n-ruby-9/20 outline-transparent',\n outline:\n 'text-n-ruby-11 hover:enabled:bg-n-ruby-9/10 focus-visible:bg-n-ruby-9/10 outline-n-ruby-8',\n ghost:\n 'text-n-ruby-11 hover:enabled:bg-n-alpha-2 focus-visible:bg-n-alpha-2 outline-transparent',\n link: 'text-n-ruby-9 hover:enabled:underline focus-visible:underline outline-transparent',\n },\n amber: {\n solid:\n 'bg-n-amber-9 text-white hover:enabled:bg-n-amber-10 focus-visible:bg-n-amber-10 outline-transparent',\n faded:\n 'bg-n-amber-9/10 text-n-slate-12 hover:enabled:bg-n-amber-9/20 focus-visible:bg-n-amber-9/20 outline-transparent',\n outline:\n 'text-n-amber-11 hover:enabled:bg-n-amber-9/10 focus-visible:bg-n-amber-9/10 outline-n-amber-9',\n link: 'text-n-amber-9 hover:enabled:underline focus-visible:underline outline-transparent',\n ghost:\n 'text-n-amber-9 hover:enabled:bg-n-alpha-2 focus-visible:bg-n-alpha-2 outline-transparent',\n },\n slate: {\n solid:\n 'bg-n-solid-3 dark:hover:enabled:bg-n-solid-2 dark:focus-visible:bg-n-solid-2 hover:enabled:bg-n-alpha-2 focus-visible:bg-n-alpha-2 text-n-slate-12 outline-n-container',\n faded:\n 'bg-n-slate-9/10 text-n-slate-12 hover:enabled:bg-n-slate-9/20 focus-visible:bg-n-slate-9/20 outline-transparent',\n outline:\n 'text-n-slate-11 outline-n-strong hover:enabled:bg-n-slate-9/10 focus-visible:bg-n-slate-9/10',\n link: 'text-n-slate-11 hover:enabled:text-n-slate-12 focus-visible:text-n-slate-12 hover:enabled:underline focus-visible:underline outline-transparent',\n ghost:\n 'text-n-slate-12 hover:enabled:bg-n-alpha-2 focus-visible:bg-n-alpha-2 outline-transparent',\n },\n teal: {\n solid:\n 'bg-n-teal-9 text-white hover:enabled:bg-n-teal-10 focus-visible:bg-n-teal-10 outline-transparent',\n faded:\n 'bg-n-teal-9/10 text-n-slate-12 hover:enabled:bg-n-teal-9/20 focus-visible:bg-n-teal-9/20 outline-transparent',\n outline:\n 'text-n-teal-11 hover:enabled:bg-n-teal-9/10 focus-visible:bg-n-teal-9/10 outline-n-teal-9',\n link: 'text-n-teal-9 hover:enabled:underline focus-visible:underline outline-transparent',\n ghost:\n 'text-n-teal-9 hover:enabled:bg-n-alpha-2 focus-visible:bg-n-alpha-2 outline-transparent',\n },\n },\n sizes: {\n regular: {\n xs: 'h-6 px-2',\n sm: 'h-8 px-3',\n md: 'h-10 px-4',\n lg: 'h-12 px-5',\n },\n iconOnly: {\n xs: 'h-6 w-6 p-0',\n sm: 'h-8 w-8 p-0',\n md: 'h-10 w-10 p-0',\n lg: 'h-12 w-12 p-0',\n },\n link: {\n xs: 'p-0',\n sm: 'p-0',\n md: 'p-0',\n lg: 'p-0',\n },\n },\n fontSize: {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-sm font-medium',\n lg: 'text-base',\n },\n justify: {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n },\n base: 'inline-flex items-center min-w-0 gap-2 transition-all duration-200 ease-in-out border-0 rounded-lg outline-1 outline disabled:opacity-50',\n};\n\nconst variantClasses = computed(() => {\n const variantMap = {\n ghost: `${STYLE_CONFIG.colors[computedColor.value].ghost}`,\n link: `${STYLE_CONFIG.colors[computedColor.value].link} p-0 font-medium underline-offset-2`,\n outline: STYLE_CONFIG.colors[computedColor.value].outline,\n faded: STYLE_CONFIG.colors[computedColor.value].faded,\n solid: STYLE_CONFIG.colors[computedColor.value].solid,\n };\n\n return variantMap[computedVariant.value];\n});\n\nconst isIconOnly = computed(() => !props.label && !slots.default);\nconst isLink = computed(() => computedVariant.value === 'link');\n\nconst buttonClasses = computed(() => {\n const sizeConfig = isIconOnly.value ? 'iconOnly' : 'regular';\n const classes = [\n variantClasses.value,\n computedVariant.value !== 'link' &&\n STYLE_CONFIG.sizes[sizeConfig][computedSize.value],\n ].filter(Boolean);\n\n return classes.join(' ');\n});\n\nconst linkButtonClasses = computed(() => {\n const classes = [\n variantClasses.value,\n STYLE_CONFIG.sizes.link[computedSize.value],\n ].filter(Boolean);\n\n return classes.join(' ');\n});\n</script>\n\n<template>\n <button\n v-bind=\"filteredAttrs\"\n :class=\"{\n [STYLE_CONFIG.base]: true,\n [isLink ? linkButtonClasses : buttonClasses]: true,\n [STYLE_CONFIG.fontSize[computedSize]]: true,\n [STYLE_CONFIG.justify[computedJustify]]: true,\n 'flex-row-reverse': trailingIcon && !isIconOnly,\n }\"\n >\n <slot v-if=\"(icon || $slots.icon) && !isLoading\" name=\"icon\">\n <Icon :icon=\"icon\" class=\"flex-shrink-0\" />\n </slot>\n\n <Spinner v-if=\"isLoading\" class=\"!w-5 !h-5 flex-shrink-0\" />\n\n <slot v-if=\"label || $slots.default\" name=\"default\">\n <span v-if=\"label\" class=\"min-w-0 truncate\">{{ label }}</span>\n </slot>\n </button>\n</template>\n","/**\n * Writes a text string to the system clipboard.\n *\n * @async\n * @param {string} text text to be written to the clipboard\n * @throws {Error} unable to copy text to clipboard\n */\nexport const copyTextToClipboard = async text => {\n try {\n await navigator.clipboard.writeText(text);\n } catch (error) {\n throw new Error(`Unable to copy text to clipboard: ${error.message}`);\n }\n};\n","<script setup>\nimport { computed } from 'vue';\nimport 'highlight.js/styles/default.css';\nimport 'highlight.js/lib/common';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\nimport { copyTextToClipboard } from 'shared/helpers/clipboard';\nimport { useAlert } from 'dashboard/composables';\nimport { useI18n } from 'vue-i18n';\n\nconst props = defineProps({\n script: {\n type: String,\n default: '',\n },\n lang: {\n type: String,\n default: 'javascript',\n },\n enableCodePen: {\n type: Boolean,\n default: false,\n },\n codepenTitle: {\n type: String,\n default: 'Chatwoot Codepen',\n },\n});\n\nconst { t } = useI18n();\n\nconst scrubbedScript = computed(() => {\n // remove trailing and leading extra lines and not spaces\n const scrubbed = props.script.replace(/^\\s*[\\r\\n]/gm, '');\n const lines = scrubbed.split('\\n');\n\n // remove extra indentations\n const minIndent = lines.reduce((min, line) => {\n if (line.trim().length === 0) return min;\n const indent = line.match(/^\\s*/)[0].length;\n return Math.min(min, indent);\n }, Infinity);\n\n return lines.map(line => line.slice(minIndent)).join('\\n');\n});\n\nconst codepenScriptValue = computed(() => {\n const lang = props.lang === 'javascript' ? 'js' : props.lang;\n return JSON.stringify({\n title: props.codepenTitle,\n private: true,\n [lang]: scrubbedScript.value,\n });\n});\n\nconst onCopy = async e => {\n e.preventDefault();\n await copyTextToClipboard(scrubbedScript.value);\n useAlert(t('COMPONENTS.CODE.COPY_SUCCESSFUL'));\n};\n</script>\n\n<template>\n <div class=\"relative text-left\">\n <div class=\"top-1.5 absolute right-1.5 flex items-center gap-1\">\n <form\n v-if=\"enableCodePen\"\n class=\"flex items-center\"\n action=\"https://codepen.io/pen/define\"\n method=\"POST\"\n target=\"_blank\"\n >\n <input type=\"hidden\" name=\"data\" :value=\"codepenScriptValue\" />\n <NextButton\n slate\n xs\n type=\"submit\"\n faded\n :label=\"t('COMPONENTS.CODE.CODEPEN')\"\n />\n </form>\n <NextButton\n slate\n xs\n faded\n :label=\"t('COMPONENTS.CODE.BUTTON_TEXT')\"\n @click=\"onCopy\"\n />\n </div>\n <highlightjs v-if=\"script\" :language=\"lang\" :code=\"scrubbedScript\" />\n </div>\n</template>\n","/******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 9662:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isCallable = __webpack_require__(614);\nvar tryToString = __webpack_require__(6330);\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a function');\n};\n\n\n/***/ }),\n\n/***/ 6077:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isCallable = __webpack_require__(614);\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument) {\n if (typeof argument == 'object' || isCallable(argument)) return argument;\n throw TypeError(\"Can't set \" + String(argument) + ' as a prototype');\n};\n\n\n/***/ }),\n\n/***/ 9670:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isObject = __webpack_require__(111);\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw TypeError(String(argument) + ' is not an object');\n};\n\n\n/***/ }),\n\n/***/ 1318:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toIndexedObject = __webpack_require__(5656);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar lengthOfArrayLike = __webpack_require__(6244);\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n\n\n/***/ }),\n\n/***/ 4326:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n\n\n/***/ }),\n\n/***/ 648:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar TO_STRING_TAG_SUPPORT = __webpack_require__(1694);\nvar isCallable = __webpack_require__(614);\nvar classofRaw = __webpack_require__(4326);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar Object = global.Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n\n\n/***/ }),\n\n/***/ 7741:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\n\nvar replace = uncurryThis(''.replace);\n\nvar TEST = (function (arg) { return String(Error(arg).stack); })('zxcasd');\nvar V8_OR_CHAKRA_STACK_ENTRY = /\\n\\s*at [^:]*:[^\\n]*/;\nvar IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);\n\nmodule.exports = function (stack, dropEntries) {\n if (IS_V8_OR_CHAKRA_STACK && typeof stack == 'string') {\n while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, '');\n } return stack;\n};\n\n\n/***/ }),\n\n/***/ 9920:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar hasOwn = __webpack_require__(2597);\nvar ownKeys = __webpack_require__(3887);\nvar getOwnPropertyDescriptorModule = __webpack_require__(1236);\nvar definePropertyModule = __webpack_require__(3070);\n\nmodule.exports = function (target, source, exceptions) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n }\n};\n\n\n/***/ }),\n\n/***/ 8880:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar definePropertyModule = __webpack_require__(3070);\nvar createPropertyDescriptor = __webpack_require__(9114);\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\n\n/***/ }),\n\n/***/ 9114:\n/***/ (function(module) {\n\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\n\n/***/ }),\n\n/***/ 9781:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n\n\n/***/ }),\n\n/***/ 317:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isObject = __webpack_require__(111);\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n\n\n/***/ }),\n\n/***/ 8113:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar getBuiltIn = __webpack_require__(5005);\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n\n\n/***/ }),\n\n/***/ 7392:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar userAgent = __webpack_require__(8113);\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n\n\n/***/ }),\n\n/***/ 748:\n/***/ (function(module) {\n\n// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n\n\n/***/ }),\n\n/***/ 2914:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\nvar createPropertyDescriptor = __webpack_require__(9114);\n\nmodule.exports = !fails(function () {\n var error = Error('a');\n if (!('stack' in error)) return true;\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7));\n return error.stack !== 7;\n});\n\n\n/***/ }),\n\n/***/ 2109:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar getOwnPropertyDescriptor = (__webpack_require__(1236).f);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar redefine = __webpack_require__(1320);\nvar setGlobal = __webpack_require__(3505);\nvar copyConstructorProperties = __webpack_require__(9920);\nvar isForced = __webpack_require__(4705);\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty == typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n\n\n/***/ }),\n\n/***/ 7293:\n/***/ (function(module) {\n\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n\n\n/***/ }),\n\n/***/ 2104:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar NATIVE_BIND = __webpack_require__(4374);\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n\n\n/***/ }),\n\n/***/ 4374:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\n\nmodule.exports = !fails(function () {\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n\n\n/***/ }),\n\n/***/ 6916:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar NATIVE_BIND = __webpack_require__(4374);\n\nvar call = Function.prototype.call;\n\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n\n\n/***/ }),\n\n/***/ 6530:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar hasOwn = __webpack_require__(2597);\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n\n\n/***/ }),\n\n/***/ 1702:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar NATIVE_BIND = __webpack_require__(4374);\n\nvar FunctionPrototype = Function.prototype;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nvar uncurryThis = NATIVE_BIND && bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? function (fn) {\n return fn && uncurryThis(fn);\n} : function (fn) {\n return fn && function () {\n return call.apply(fn, arguments);\n };\n};\n\n\n/***/ }),\n\n/***/ 5005:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isCallable = __webpack_require__(614);\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n\n\n/***/ }),\n\n/***/ 8173:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar aCallable = __webpack_require__(9662);\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return func == null ? undefined : aCallable(func);\n};\n\n\n/***/ }),\n\n/***/ 7854:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof __webpack_require__.g == 'object' && __webpack_require__.g) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n\n\n/***/ }),\n\n/***/ 2597:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\nvar toObject = __webpack_require__(7908);\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n\n\n/***/ }),\n\n/***/ 3501:\n/***/ (function(module) {\n\nmodule.exports = {};\n\n\n/***/ }),\n\n/***/ 4664:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar fails = __webpack_require__(7293);\nvar createElement = __webpack_require__(317);\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n\n\n/***/ }),\n\n/***/ 8361:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar uncurryThis = __webpack_require__(1702);\nvar fails = __webpack_require__(7293);\nvar classof = __webpack_require__(4326);\n\nvar Object = global.Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split(it, '') : Object(it);\n} : Object;\n\n\n/***/ }),\n\n/***/ 9587:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isCallable = __webpack_require__(614);\nvar isObject = __webpack_require__(111);\nvar setPrototypeOf = __webpack_require__(7674);\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n isCallable(NewTarget = dummy.constructor) &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n\n\n/***/ }),\n\n/***/ 2788:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\nvar isCallable = __webpack_require__(614);\nvar store = __webpack_require__(5465);\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n\n\n/***/ }),\n\n/***/ 8340:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(111);\nvar createNonEnumerableProperty = __webpack_require__(8880);\n\n// `InstallErrorCause` abstract operation\n// https://tc39.es/proposal-error-cause/#sec-errorobjects-install-error-cause\nmodule.exports = function (O, options) {\n if (isObject(options) && 'cause' in options) {\n createNonEnumerableProperty(O, 'cause', options.cause);\n }\n};\n\n\n/***/ }),\n\n/***/ 9909:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar NATIVE_WEAK_MAP = __webpack_require__(8536);\nvar global = __webpack_require__(7854);\nvar uncurryThis = __webpack_require__(1702);\nvar isObject = __webpack_require__(111);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar hasOwn = __webpack_require__(2597);\nvar shared = __webpack_require__(5465);\nvar sharedKey = __webpack_require__(6200);\nvar hiddenKeys = __webpack_require__(3501);\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = uncurryThis(store.get);\n var wmhas = uncurryThis(store.has);\n var wmset = uncurryThis(store.set);\n set = function (it, metadata) {\n if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget(store, it) || {};\n };\n has = function (it) {\n return wmhas(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n\n\n/***/ }),\n\n/***/ 614:\n/***/ (function(module) {\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = function (argument) {\n return typeof argument == 'function';\n};\n\n\n/***/ }),\n\n/***/ 4705:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\nvar isCallable = __webpack_require__(614);\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n\n\n/***/ }),\n\n/***/ 111:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isCallable = __webpack_require__(614);\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n\n\n/***/ }),\n\n/***/ 1913:\n/***/ (function(module) {\n\nmodule.exports = false;\n\n\n/***/ }),\n\n/***/ 2190:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar getBuiltIn = __webpack_require__(5005);\nvar isCallable = __webpack_require__(614);\nvar isPrototypeOf = __webpack_require__(7976);\nvar USE_SYMBOL_AS_UID = __webpack_require__(3307);\n\nvar Object = global.Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, Object(it));\n};\n\n\n/***/ }),\n\n/***/ 6244:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toLength = __webpack_require__(7466);\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n\n\n/***/ }),\n\n/***/ 133:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = __webpack_require__(7392);\nvar fails = __webpack_require__(7293);\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n\n\n/***/ }),\n\n/***/ 8536:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isCallable = __webpack_require__(614);\nvar inspectSource = __webpack_require__(2788);\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));\n\n\n/***/ }),\n\n/***/ 6277:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toString = __webpack_require__(1340);\n\nmodule.exports = function (argument, $default) {\n return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument);\n};\n\n\n/***/ }),\n\n/***/ 3070:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar IE8_DOM_DEFINE = __webpack_require__(4664);\nvar V8_PROTOTYPE_DEFINE_BUG = __webpack_require__(3353);\nvar anObject = __webpack_require__(9670);\nvar toPropertyKey = __webpack_require__(4948);\n\nvar TypeError = global.TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n\n\n/***/ }),\n\n/***/ 1236:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar call = __webpack_require__(6916);\nvar propertyIsEnumerableModule = __webpack_require__(5296);\nvar createPropertyDescriptor = __webpack_require__(9114);\nvar toIndexedObject = __webpack_require__(5656);\nvar toPropertyKey = __webpack_require__(4948);\nvar hasOwn = __webpack_require__(2597);\nvar IE8_DOM_DEFINE = __webpack_require__(4664);\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n\n\n/***/ }),\n\n/***/ 8006:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nvar internalObjectKeys = __webpack_require__(6324);\nvar enumBugKeys = __webpack_require__(748);\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n\n\n/***/ }),\n\n/***/ 5181:\n/***/ (function(__unused_webpack_module, exports) {\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n\n\n/***/ }),\n\n/***/ 7976:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n\n\n/***/ }),\n\n/***/ 6324:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\nvar hasOwn = __webpack_require__(2597);\nvar toIndexedObject = __webpack_require__(5656);\nvar indexOf = (__webpack_require__(1318).indexOf);\nvar hiddenKeys = __webpack_require__(3501);\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n\n\n/***/ }),\n\n/***/ 5296:\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\n\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n\n\n/***/ }),\n\n/***/ 7674:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/* eslint-disable no-proto -- safe */\nvar uncurryThis = __webpack_require__(1702);\nvar anObject = __webpack_require__(9670);\nvar aPossiblePrototype = __webpack_require__(6077);\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);\n setter(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n\n\n/***/ }),\n\n/***/ 2140:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar call = __webpack_require__(6916);\nvar isCallable = __webpack_require__(614);\nvar isObject = __webpack_require__(111);\n\nvar TypeError = global.TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n\n\n/***/ }),\n\n/***/ 3887:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar getBuiltIn = __webpack_require__(5005);\nvar uncurryThis = __webpack_require__(1702);\nvar getOwnPropertyNamesModule = __webpack_require__(8006);\nvar getOwnPropertySymbolsModule = __webpack_require__(5181);\nvar anObject = __webpack_require__(9670);\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n\n\n/***/ }),\n\n/***/ 1320:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isCallable = __webpack_require__(614);\nvar hasOwn = __webpack_require__(2597);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar setGlobal = __webpack_require__(3505);\nvar inspectSource = __webpack_require__(2788);\nvar InternalStateModule = __webpack_require__(9909);\nvar CONFIGURABLE_FUNCTION_NAME = (__webpack_require__(6530).CONFIGURABLE);\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var name = options && options.name !== undefined ? options.name : key;\n var state;\n if (isCallable(value)) {\n if (String(name).slice(0, 7) === 'Symbol(') {\n name = '[' + String(name).replace(/^Symbol\\(([^)]*)\\)/, '$1') + ']';\n }\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n createNonEnumerableProperty(value, 'name', name);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof name == 'string' ? name : '');\n }\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n});\n\n\n/***/ }),\n\n/***/ 4488:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\n\nvar TypeError = global.TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n\n\n/***/ }),\n\n/***/ 3505:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n\n\n/***/ }),\n\n/***/ 6200:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar shared = __webpack_require__(2309);\nvar uid = __webpack_require__(9711);\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n\n\n/***/ }),\n\n/***/ 5465:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar setGlobal = __webpack_require__(3505);\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n\n\n/***/ }),\n\n/***/ 2309:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar IS_PURE = __webpack_require__(1913);\nvar store = __webpack_require__(5465);\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.21.1',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2022 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.21.1/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n\n\n/***/ }),\n\n/***/ 1400:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toIntegerOrInfinity = __webpack_require__(9303);\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n\n\n/***/ }),\n\n/***/ 5656:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = __webpack_require__(8361);\nvar requireObjectCoercible = __webpack_require__(4488);\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n\n\n/***/ }),\n\n/***/ 9303:\n/***/ (function(module) {\n\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- safe\n return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number);\n};\n\n\n/***/ }),\n\n/***/ 7466:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toIntegerOrInfinity = __webpack_require__(9303);\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n\n\n/***/ }),\n\n/***/ 7908:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar requireObjectCoercible = __webpack_require__(4488);\n\nvar Object = global.Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n\n\n/***/ }),\n\n/***/ 7593:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar call = __webpack_require__(6916);\nvar isObject = __webpack_require__(111);\nvar isSymbol = __webpack_require__(2190);\nvar getMethod = __webpack_require__(8173);\nvar ordinaryToPrimitive = __webpack_require__(2140);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar TypeError = global.TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n\n\n/***/ }),\n\n/***/ 4948:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toPrimitive = __webpack_require__(7593);\nvar isSymbol = __webpack_require__(2190);\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n\n\n/***/ }),\n\n/***/ 1694:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n\n\n/***/ }),\n\n/***/ 1340:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar classof = __webpack_require__(648);\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n return String(argument);\n};\n\n\n/***/ }),\n\n/***/ 6330:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n try {\n return String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n\n\n/***/ }),\n\n/***/ 9711:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n\n\n/***/ }),\n\n/***/ 3307:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = __webpack_require__(133);\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n\n\n/***/ }),\n\n/***/ 3353:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar fails = __webpack_require__(7293);\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype != 42;\n});\n\n\n/***/ }),\n\n/***/ 5112:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar shared = __webpack_require__(2309);\nvar hasOwn = __webpack_require__(2597);\nvar uid = __webpack_require__(9711);\nvar NATIVE_SYMBOL = __webpack_require__(133);\nvar USE_SYMBOL_AS_UID = __webpack_require__(3307);\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar symbolFor = Symbol && Symbol['for'];\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n var description = 'Symbol.' + name;\n if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else if (USE_SYMBOL_AS_UID && symbolFor) {\n WellKnownSymbolsStore[name] = symbolFor(description);\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol(description);\n }\n } return WellKnownSymbolsStore[name];\n};\n\n\n/***/ }),\n\n/***/ 9191:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar getBuiltIn = __webpack_require__(5005);\nvar hasOwn = __webpack_require__(2597);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar isPrototypeOf = __webpack_require__(7976);\nvar setPrototypeOf = __webpack_require__(7674);\nvar copyConstructorProperties = __webpack_require__(9920);\nvar inheritIfRequired = __webpack_require__(9587);\nvar normalizeStringArgument = __webpack_require__(6277);\nvar installErrorCause = __webpack_require__(8340);\nvar clearErrorStack = __webpack_require__(7741);\nvar ERROR_STACK_INSTALLABLE = __webpack_require__(2914);\nvar IS_PURE = __webpack_require__(1913);\n\nmodule.exports = function (FULL_NAME, wrapper, FORCED, IS_AGGREGATE_ERROR) {\n var OPTIONS_POSITION = IS_AGGREGATE_ERROR ? 2 : 1;\n var path = FULL_NAME.split('.');\n var ERROR_NAME = path[path.length - 1];\n var OriginalError = getBuiltIn.apply(null, path);\n\n if (!OriginalError) return;\n\n var OriginalErrorPrototype = OriginalError.prototype;\n\n // V8 9.3- bug https://bugs.chromium.org/p/v8/issues/detail?id=12006\n if (!IS_PURE && hasOwn(OriginalErrorPrototype, 'cause')) delete OriginalErrorPrototype.cause;\n\n if (!FORCED) return OriginalError;\n\n var BaseError = getBuiltIn('Error');\n\n var WrappedError = wrapper(function (a, b) {\n var message = normalizeStringArgument(IS_AGGREGATE_ERROR ? b : a, undefined);\n var result = IS_AGGREGATE_ERROR ? new OriginalError(a) : new OriginalError();\n if (message !== undefined) createNonEnumerableProperty(result, 'message', message);\n if (ERROR_STACK_INSTALLABLE) createNonEnumerableProperty(result, 'stack', clearErrorStack(result.stack, 2));\n if (this && isPrototypeOf(OriginalErrorPrototype, this)) inheritIfRequired(result, this, WrappedError);\n if (arguments.length > OPTIONS_POSITION) installErrorCause(result, arguments[OPTIONS_POSITION]);\n return result;\n });\n\n WrappedError.prototype = OriginalErrorPrototype;\n\n if (ERROR_NAME !== 'Error') {\n if (setPrototypeOf) setPrototypeOf(WrappedError, BaseError);\n else copyConstructorProperties(WrappedError, BaseError, { name: true });\n }\n\n copyConstructorProperties(WrappedError, OriginalError);\n\n if (!IS_PURE) try {\n // Safari 13- bug: WebAssembly errors does not have a proper `.name`\n if (OriginalErrorPrototype.name !== ERROR_NAME) {\n createNonEnumerableProperty(OriginalErrorPrototype, 'name', ERROR_NAME);\n }\n OriginalErrorPrototype.constructor = WrappedError;\n } catch (error) { /* empty */ }\n\n return WrappedError;\n};\n\n\n/***/ }),\n\n/***/ 1703:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n/* eslint-disable no-unused-vars -- required for functions `.length` */\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar apply = __webpack_require__(2104);\nvar wrapErrorConstructorWithCause = __webpack_require__(9191);\n\nvar WEB_ASSEMBLY = 'WebAssembly';\nvar WebAssembly = global[WEB_ASSEMBLY];\n\nvar FORCED = Error('e', { cause: 7 }).cause !== 7;\n\nvar exportGlobalErrorCauseWrapper = function (ERROR_NAME, wrapper) {\n var O = {};\n O[ERROR_NAME] = wrapErrorConstructorWithCause(ERROR_NAME, wrapper, FORCED);\n $({ global: true, forced: FORCED }, O);\n};\n\nvar exportWebAssemblyErrorCauseWrapper = function (ERROR_NAME, wrapper) {\n if (WebAssembly && WebAssembly[ERROR_NAME]) {\n var O = {};\n O[ERROR_NAME] = wrapErrorConstructorWithCause(WEB_ASSEMBLY + '.' + ERROR_NAME, wrapper, FORCED);\n $({ target: WEB_ASSEMBLY, stat: true, forced: FORCED }, O);\n }\n};\n\n// https://github.com/tc39/proposal-error-cause\nexportGlobalErrorCauseWrapper('Error', function (init) {\n return function Error(message) { return apply(init, this, arguments); };\n});\nexportGlobalErrorCauseWrapper('EvalError', function (init) {\n return function EvalError(message) { return apply(init, this, arguments); };\n});\nexportGlobalErrorCauseWrapper('RangeError', function (init) {\n return function RangeError(message) { return apply(init, this, arguments); };\n});\nexportGlobalErrorCauseWrapper('ReferenceError', function (init) {\n return function ReferenceError(message) { return apply(init, this, arguments); };\n});\nexportGlobalErrorCauseWrapper('SyntaxError', function (init) {\n return function SyntaxError(message) { return apply(init, this, arguments); };\n});\nexportGlobalErrorCauseWrapper('TypeError', function (init) {\n return function TypeError(message) { return apply(init, this, arguments); };\n});\nexportGlobalErrorCauseWrapper('URIError', function (init) {\n return function URIError(message) { return apply(init, this, arguments); };\n});\nexportWebAssemblyErrorCauseWrapper('CompileError', function (init) {\n return function CompileError(message) { return apply(init, this, arguments); };\n});\nexportWebAssemblyErrorCauseWrapper('LinkError', function (init) {\n return function LinkError(message) { return apply(init, this, arguments); };\n});\nexportWebAssemblyErrorCauseWrapper('RuntimeError', function (init) {\n return function RuntimeError(message) { return apply(init, this, arguments); };\n});\n\n\n/***/ }),\n\n/***/ 6095:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8081);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".vc-chrome{background:#fff;border-radius:2px;box-shadow:0 0 2px rgba(0,0,0,.3),0 4px 8px rgba(0,0,0,.3);box-sizing:initial;width:225px;font-family:Menlo;background-color:#fff}.vc-chrome-controls{display:flex}.vc-chrome-color-wrap{position:relative;width:36px}.vc-chrome-active-color{position:relative;width:30px;height:30px;border-radius:15px;overflow:hidden;z-index:1}.vc-chrome-color-wrap .vc-checkerboard{width:30px;height:30px;border-radius:15px;background-size:auto}.vc-chrome-sliders{flex:1}.vc-chrome-fields-wrap{display:flex;padding-top:16px}.vc-chrome-fields{display:flex;margin-left:-6px;flex:1}.vc-chrome-field{padding-left:6px;width:100%}.vc-chrome-toggle-btn{width:32px;text-align:right;position:relative}.vc-chrome-toggle-icon{margin-right:-4px;margin-top:12px;cursor:pointer;position:relative;z-index:2}.vc-chrome-toggle-icon-highlight{position:absolute;width:24px;height:28px;background:#eee;border-radius:4px;top:10px;left:12px}.vc-chrome-hue-wrap{margin-bottom:8px}.vc-chrome-alpha-wrap,.vc-chrome-hue-wrap{position:relative;height:10px}.vc-chrome-alpha-wrap .vc-alpha-gradient,.vc-chrome-hue-wrap .vc-hue{border-radius:2px}.vc-chrome-alpha-wrap .vc-alpha-picker,.vc-chrome-hue-wrap .vc-hue-picker{width:12px;height:12px;border-radius:6px;transform:translate(-6px,-2px);background-color:#f8f8f8;box-shadow:0 1px 4px 0 rgba(0,0,0,.37)}.vc-chrome-body{padding:16px 16px 12px;background-color:#fff}.vc-chrome-saturation-wrap{width:100%;padding-bottom:55%;position:relative;border-radius:2px 2px 0 0;overflow:hidden}.vc-chrome-saturation-wrap .vc-saturation-circle{width:12px;height:12px}.vc-chrome-fields .vc-input__input{font-size:11px;color:#333;width:100%;border-radius:2px;border:none;box-shadow:inset 0 0 0 1px #dadada;height:21px;text-align:center}.vc-chrome-fields .vc-input__label{text-transform:uppercase;font-size:11px;line-height:11px;color:#969696;text-align:center;display:block;margin-top:12px}.vc-chrome__disable-alpha .vc-chrome-active-color{width:18px;height:18px}.vc-chrome__disable-alpha .vc-chrome-color-wrap{width:30px}.vc-chrome__disable-alpha .vc-chrome-hue-wrap{margin-top:4px;margin-bottom:4px}\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n/***/ }),\n\n/***/ 6047:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8081);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".vc-compact{padding-top:5px;padding-left:5px;width:245px;border-radius:2px;box-sizing:border-box;box-shadow:0 2px 10px rgba(0,0,0,.12),0 2px 5px rgba(0,0,0,.16);background-color:#fff}.vc-compact-colors{overflow:hidden;padding:0;margin:0}.vc-compact-color-item{list-style:none;width:15px;height:15px;float:left;margin-right:5px;margin-bottom:5px;position:relative;cursor:pointer}.vc-compact-color-item--white{box-shadow:inset 0 0 0 1px #ddd}.vc-compact-color-item--white .vc-compact-dot{background:#000}.vc-compact-dot{position:absolute;top:5px;right:5px;bottom:5px;left:5px;border-radius:50%;opacity:1;background:#fff}\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n/***/ }),\n\n/***/ 9481:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8081);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".vc-grayscale{width:125px;border-radius:2px;box-shadow:0 2px 15px rgba(0,0,0,.12),0 2px 10px rgba(0,0,0,.16);background-color:#fff}.vc-grayscale-colors{border-radius:2px;overflow:hidden;padding:0;margin:0}.vc-grayscale-color-item{list-style:none;width:25px;height:25px;float:left;position:relative;cursor:pointer}.vc-grayscale-color-item--white .vc-grayscale-dot{background:#000}.vc-grayscale-dot{position:absolute;top:50%;left:50%;width:6px;height:6px;margin:-3px 0 0 -2px;border-radius:50%;opacity:1;background:#fff}\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n/***/ }),\n\n/***/ 5186:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8081);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".vc-material{width:98px;height:98px;padding:16px;font-family:Roboto;position:relative;border-radius:2px;box-shadow:0 2px 10px rgba(0,0,0,.12),0 2px 5px rgba(0,0,0,.16);background-color:#fff}.vc-material .vc-input__input{width:100%;margin-top:12px;font-size:15px;color:#333;height:30px}.vc-material .vc-input__label{position:absolute;top:0;left:0;font-size:11px;color:#999;text-transform:capitalize}.vc-material-hex{border-bottom-width:2px;border-bottom-style:solid}.vc-material-split{display:flex;margin-right:-10px;padding-top:11px}.vc-material-third{flex:1;padding-right:10px}\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n/***/ }),\n\n/***/ 3695:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8081);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".vc-photoshop{background:#dcdcdc;border-radius:4px;box-shadow:0 0 0 1px rgba(0,0,0,.25),0 8px 16px rgba(0,0,0,.15);box-sizing:initial;width:513px;font-family:Roboto}.vc-photoshop__disable-fields{width:390px}.vc-ps-head{background-image:linear-gradient(-180deg,#f0f0f0,#d4d4d4);border-bottom:1px solid #b1b1b1;box-shadow:inset 0 1px 0 0 hsla(0,0%,100%,.2),inset 0 -1px 0 0 rgba(0,0,0,.02);height:23px;line-height:24px;border-radius:4px 4px 0 0;font-size:13px;color:#4d4d4d;text-align:center}.vc-ps-body{padding:15px;display:flex}.vc-ps-saturation-wrap{width:256px;height:256px;position:relative;border:2px solid #b3b3b3;border-bottom:2px solid #f0f0f0;overflow:hidden}.vc-ps-saturation-wrap .vc-saturation-circle{width:12px;height:12px}.vc-ps-hue-wrap{height:256px;width:19px;margin-left:10px;border:2px solid #b3b3b3;border-bottom:2px solid #f0f0f0}.vc-ps-hue-pointer,.vc-ps-hue-wrap{position:relative}.vc-ps-hue-pointer--left,.vc-ps-hue-pointer--right{position:absolute;width:0;height:0;border-style:solid;border-width:5px 0 5px 8px;border-color:transparent transparent transparent #555}.vc-ps-hue-pointer--left:after,.vc-ps-hue-pointer--right:after{content:\\\"\\\";width:0;height:0;border-style:solid;border-width:4px 0 4px 6px;border-color:transparent transparent transparent #fff;position:absolute;top:1px;left:1px;transform:translate(-8px,-5px)}.vc-ps-hue-pointer--left{transform:translate(-13px,-4px)}.vc-ps-hue-pointer--right{transform:translate(20px,-4px) rotate(180deg)}.vc-ps-controls{width:180px;margin-left:10px;display:flex}.vc-ps-controls__disable-fields{width:auto}.vc-ps-actions{margin-left:20px;flex:1}.vc-ps-ac-btn{cursor:pointer;background-image:linear-gradient(-180deg,#fff,#e6e6e6);border:1px solid #878787;border-radius:2px;height:20px;box-shadow:0 1px 0 0 #eaeaea;font-size:14px;color:#000;line-height:20px;text-align:center;margin-bottom:10px}.vc-ps-previews{width:60px}.vc-ps-previews__swatches{border:1px solid #b3b3b3;border-bottom:1px solid #f0f0f0;margin-bottom:2px;margin-top:1px}.vc-ps-previews__pr-color{height:34px;box-shadow:inset 1px 0 0 #000,inset -1px 0 0 #000,inset 0 1px 0 #000}.vc-ps-previews__label{font-size:14px;color:#000;text-align:center}.vc-ps-fields{padding-top:5px;padding-bottom:9px;width:80px;position:relative}.vc-ps-fields .vc-input__input{margin-left:40%;width:40%;height:18px;border:1px solid #888;box-shadow:inset 0 1px 1px rgba(0,0,0,.1),0 1px 0 0 #ececec;margin-bottom:5px;font-size:13px;padding-left:3px;margin-right:10px}.vc-ps-fields .vc-input__desc,.vc-ps-fields .vc-input__label{top:0;text-transform:uppercase;font-size:13px;height:18px;line-height:22px;position:absolute}.vc-ps-fields .vc-input__label{left:0;width:34px}.vc-ps-fields .vc-input__desc{right:0;width:0}.vc-ps-fields__divider{height:5px}.vc-ps-fields__hex .vc-input__input{margin-left:20%;width:80%;height:18px;border:1px solid #888;box-shadow:inset 0 1px 1px rgba(0,0,0,.1),0 1px 0 0 #ececec;margin-bottom:6px;font-size:13px;padding-left:3px}.vc-ps-fields__hex .vc-input__label{position:absolute;top:0;left:0;width:14px;text-transform:uppercase;font-size:13px;height:18px;line-height:22px}\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n/***/ }),\n\n/***/ 7279:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8081);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".vc-sketch{position:relative;width:200px;padding:10px 10px 0;box-sizing:initial;background:#fff;border-radius:4px;box-shadow:0 0 0 1px rgba(0,0,0,.15),0 8px 16px rgba(0,0,0,.15)}.vc-sketch-saturation-wrap{width:100%;padding-bottom:75%;position:relative;overflow:hidden}.vc-sketch-controls{display:flex}.vc-sketch-sliders{padding:4px 0;flex:1}.vc-sketch-sliders .vc-alpha-gradient,.vc-sketch-sliders .vc-hue{border-radius:2px}.vc-sketch-alpha-wrap,.vc-sketch-hue-wrap{position:relative;height:10px}.vc-sketch-alpha-wrap{margin-top:4px;overflow:hidden}.vc-sketch-color-wrap{width:24px;height:24px;position:relative;margin-top:4px;margin-left:4px;border-radius:3px}.vc-sketch-active-color{position:absolute;top:0;left:0;right:0;bottom:0;border-radius:2px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.15),inset 0 0 4px rgba(0,0,0,.25);z-index:2}.vc-sketch-color-wrap .vc-checkerboard{background-size:auto}.vc-sketch-field{display:flex;padding-top:4px}.vc-sketch-field .vc-input__input{width:90%;padding:4px 0 3px 10%;border:none;box-shadow:inset 0 0 0 1px #ccc;font-size:10px}.vc-sketch-field .vc-input__label{display:block;text-align:center;font-size:11px;color:#222;padding-top:3px;padding-bottom:4px;text-transform:capitalize}.vc-sketch-field--single{flex:1;padding-left:6px}.vc-sketch-field--double{flex:2}.vc-sketch-presets{margin-right:-10px;margin-left:-10px;padding-left:10px;padding-top:10px;border-top:1px solid #eee}.vc-sketch-presets-color{overflow:hidden;position:relative;display:inline-block;margin:0 10px 10px 0;vertical-align:top;cursor:pointer;width:16px;height:16px}.vc-sketch-presets-color,.vc-sketch-presets-color .vc-checkerboard{border-radius:3px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.15)}.vc-sketch__disable-alpha .vc-sketch-color-wrap{height:10px}\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n/***/ }),\n\n/***/ 6278:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8081);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".vc-slider{position:relative;width:410px}.vc-slider-hue-warp{height:12px;position:relative}.vc-slider-hue-warp .vc-hue-picker{width:14px;height:14px;border-radius:6px;transform:translate(-7px,-2px);background-color:#f8f8f8;box-shadow:0 1px 4px 0 rgba(0,0,0,.37)}.vc-slider-swatches{display:flex;margin-top:20px}.vc-slider-swatch{margin-right:1px;flex:1;width:20%}.vc-slider-swatch:first-child{margin-right:1px}.vc-slider-swatch:first-child .vc-slider-swatch-picker{border-radius:2px 0 0 2px}.vc-slider-swatch:last-child{margin-right:0}.vc-slider-swatch:last-child .vc-slider-swatch-picker{border-radius:0 2px 2px 0}.vc-slider-swatch-picker{cursor:pointer;height:12px}.vc-slider-swatch:nth-child(n) .vc-slider-swatch-picker.vc-slider-swatch-picker--active{transform:scaleY(1.8);border-radius:3.6px/2px}.vc-slider-swatch-picker--white{box-shadow:inset 0 0 0 1px #ddd}.vc-slider-swatch-picker--active.vc-slider-swatch-picker--white{box-shadow:inset 0 0 0 .6px #ddd}\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n/***/ }),\n\n/***/ 3468:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8081);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".vc-swatches{width:320px;height:240px;overflow-y:scroll;background-color:#fff;box-shadow:0 2px 10px rgba(0,0,0,.12),0 2px 5px rgba(0,0,0,.16)}.vc-swatches-box{padding:16px 0 6px 16px;overflow:hidden}.vc-swatches-color-group{padding-bottom:10px;width:40px;float:left;margin-right:10px}.vc-swatches-color-it{box-sizing:border-box;width:40px;height:24px;cursor:pointer;background:#880e4f;margin-bottom:1px;overflow:hidden;border-radius:2px 2px 0 0}.vc-swatches-color--white{border:1px solid #ddd}.vc-swatches-pick{fill:#fff;margin-left:8px;display:block}.vc-swatches-color--white .vc-swatches-pick{fill:#333}\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n/***/ }),\n\n/***/ 5689:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8081);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".vc-twitter{background:#fff;border:0 solid rgba(0,0,0,.25);box-shadow:0 1px 4px rgba(0,0,0,.25);border-radius:4px;position:relative}.vc-twitter-triangle{border-color:transparent transparent #fff transparent}.vc-twitter-triangle,.vc-twitter-triangle-shadow{width:0;height:0;border-style:solid;border-width:0 9px 10px 9px;position:absolute}.vc-twitter-triangle-shadow{border-color:transparent transparent rgba(0,0,0,.1) transparent}.vc-twitter-body{padding:15px 9px 9px 15px}.vc-twitter .vc-editable-input{position:relative}.vc-twitter .vc-editable-input input{width:100px;font-size:14px;color:#666;border:0;outline:none;height:28px;box-shadow:inset 0 0 0 1px #f0f0f0;box-sizing:content-box;border-radius:0 4px 4px 0;float:left;padding:1px;padding-left:8px}.vc-twitter .vc-editable-input span{display:none}.vc-twitter-hash{background:#f0f0f0;height:30px;width:30px;border-radius:4px 0 0 4px;float:left;color:#98a1a4;display:flex;align-items:center;justify-content:center}.vc-twitter-swatch{width:30px;height:30px;float:left;border-radius:4px;margin:0 6px 6px 0;cursor:pointer;position:relative;outline:none}.vc-twitter-clear{clear:both}.vc-twitter-hide-triangle .vc-twitter-triangle,.vc-twitter-hide-triangle .vc-twitter-triangle-shadow{display:none}.vc-twitter-top-left-triangle .vc-twitter-triangle{top:-10px;left:12px}.vc-twitter-top-left-triangle .vc-twitter-triangle-shadow{top:-11px;left:12px}.vc-twitter-top-right-triangle .vc-twitter-triangle{top:-10px;right:12px}.vc-twitter-top-right-triangle .vc-twitter-triangle-shadow{top:-11px;right:12px}\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n/***/ }),\n\n/***/ 2410:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8081);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".vc-alpha,.vc-alpha-checkboard-wrap{position:absolute;top:0;right:0;bottom:0;left:0}.vc-alpha-checkboard-wrap{overflow:hidden}.vc-alpha-gradient{position:absolute;top:0;right:0;bottom:0;left:0}.vc-alpha-container{cursor:pointer;position:relative;z-index:2;height:100%;margin:0 3px}.vc-alpha-pointer{z-index:2;position:absolute}.vc-alpha-picker{cursor:pointer;width:4px;border-radius:1px;height:8px;box-shadow:0 0 2px rgba(0,0,0,.6);background:#fff;margin-top:1px;transform:translateX(-2px)}\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n/***/ }),\n\n/***/ 3142:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8081);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".vc-checkerboard{position:absolute;top:0;right:0;bottom:0;left:0;background-size:contain}\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n/***/ }),\n\n/***/ 7953:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8081);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".vc-editable-input{position:relative}.vc-input__input{padding:0;border:0;outline:none}.vc-input__label{text-transform:capitalize}\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n/***/ }),\n\n/***/ 3097:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8081);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".vc-hue{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:2px}.vc-hue--horizontal{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.vc-hue--vertical{background:linear-gradient(0deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.vc-hue-container{cursor:pointer;margin:0 2px;position:relative;height:100%}.vc-hue-pointer{z-index:2;position:absolute}.vc-hue-picker{cursor:pointer;margin-top:1px;width:4px;border-radius:1px;height:8px;box-shadow:0 0 2px rgba(0,0,0,.6);background:#fff;transform:translateX(-2px)}\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n/***/ }),\n\n/***/ 4339:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8081);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3645);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".vc-saturation,.vc-saturation--black,.vc-saturation--white{cursor:pointer;position:absolute;top:0;left:0;right:0;bottom:0}.vc-saturation--white{background:linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.vc-saturation--black{background:linear-gradient(0deg,#000,transparent)}.vc-saturation-pointer{cursor:pointer;position:absolute}.vc-saturation-circle{cursor:head;width:4px;height:4px;box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);border-radius:50%;transform:translate(-2px,-2px)}\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n/***/ }),\n\n/***/ 3645:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n\n content += cssWithMappingToString(item);\n\n if (needLayer) {\n content += \"}\";\n }\n\n if (item[2]) {\n content += \"}\";\n }\n\n if (item[4]) {\n content += \"}\";\n }\n\n return content;\n }).join(\"\");\n }; // import a list of modules into the list\n\n\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};\n\n/***/ }),\n\n/***/ 8081:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nmodule.exports = function (i) {\n return i[1];\n};\n\n/***/ }),\n\n/***/ 9428:\n/***/ (function(module) {\n\nmodule.exports = clamp;\n\nfunction clamp(value, min, max) {\n return min < max ? value < min ? min : value > max ? max : value : value < max ? max : value > min ? min : value;\n}\n\n/***/ }),\n\n/***/ 9016:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar root = __webpack_require__(9159);\n/** Built-in value references. */\n\n\nvar Symbol = root.Symbol;\nmodule.exports = Symbol;\n\n/***/ }),\n\n/***/ 6423:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar Symbol = __webpack_require__(9016),\n getRawTag = __webpack_require__(2366),\n objectToString = __webpack_require__(2886);\n/** `Object#toString` result references. */\n\n\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n/** Built-in value references. */\n\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n\n return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n\n/***/ }),\n\n/***/ 6009:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar trimmedEndIndex = __webpack_require__(1626);\n/** Used to match leading whitespace. */\n\n\nvar reTrimStart = /^\\s+/;\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\n\nfunction baseTrim(string) {\n return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') : string;\n}\n\nmodule.exports = baseTrim;\n\n/***/ }),\n\n/***/ 791:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof __webpack_require__.g == 'object' && __webpack_require__.g && __webpack_require__.g.Object === Object && __webpack_require__.g;\nmodule.exports = freeGlobal;\n\n/***/ }),\n\n/***/ 2366:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar Symbol = __webpack_require__(9016);\n/** Used for built-in method references. */\n\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n\nvar nativeObjectToString = objectProto.toString;\n/** Built-in value references. */\n\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n\n return result;\n}\n\nmodule.exports = getRawTag;\n\n/***/ }),\n\n/***/ 2886:\n/***/ (function(module) {\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n\nvar nativeObjectToString = objectProto.toString;\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n\n/***/ }),\n\n/***/ 9159:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar freeGlobal = __webpack_require__(791);\n/** Detect free variable `self`. */\n\n\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n/** Used as a reference to the global object. */\n\nvar root = freeGlobal || freeSelf || Function('return this')();\nmodule.exports = root;\n\n/***/ }),\n\n/***/ 1626:\n/***/ (function(module) {\n\n/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\n\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n\n/***/ }),\n\n/***/ 3738:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n__webpack_require__(1703);\n\nvar isObject = __webpack_require__(150),\n now = __webpack_require__(657),\n toNumber = __webpack_require__(2012);\n/** Error message constants. */\n\n\nvar FUNC_ERROR_TEXT = 'Expected a function';\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n wait = toNumber(wait) || 0;\n\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time; // Start the timer for the trailing edge.\n\n timerId = setTimeout(timerExpired, wait); // Invoke the leading edge.\n\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime; // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n\n return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;\n }\n\n function timerExpired() {\n var time = now();\n\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n } // Restart the timer.\n\n\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined; // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n\n return result;\n }\n\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n\n/***/ }),\n\n/***/ 150:\n/***/ (function(module) {\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n\n/***/ }),\n\n/***/ 4430:\n/***/ (function(module) {\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n\n/***/ }),\n\n/***/ 7691:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar baseGetTag = __webpack_require__(6423),\n isObjectLike = __webpack_require__(4430);\n/** `Object#toString` result references. */\n\n\nvar symbolTag = '[object Symbol]';\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n\nfunction isSymbol(value) {\n return typeof value == 'symbol' || isObjectLike(value) && baseGetTag(value) == symbolTag;\n}\n\nmodule.exports = isSymbol;\n\n/***/ }),\n\n/***/ 657:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar root = __webpack_require__(9159);\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n\n\nvar now = function () {\n return root.Date.now();\n};\n\nmodule.exports = now;\n\n/***/ }),\n\n/***/ 9289:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n__webpack_require__(1703);\n\nvar debounce = __webpack_require__(3738),\n isObject = __webpack_require__(150);\n/** Error message constants. */\n\n\nvar FUNC_ERROR_TEXT = 'Expected a function';\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nmodule.exports = throttle;\n\n/***/ }),\n\n/***/ 2012:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar baseTrim = __webpack_require__(6009),\n isObject = __webpack_require__(150),\n isSymbol = __webpack_require__(7691);\n/** Used as references for various `Number` constants. */\n\n\nvar NAN = 0 / 0;\n/** Used to detect bad signed hexadecimal string values. */\n\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n/** Used to detect binary string values. */\n\nvar reIsBinary = /^0b[01]+$/i;\n/** Used to detect octal string values. */\n\nvar reIsOctal = /^0o[0-7]+$/i;\n/** Built-in method references without a dependency on `root`. */\n\nvar freeParseInt = parseInt;\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n\n if (isSymbol(value)) {\n return NAN;\n }\n\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? other + '' : other;\n }\n\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;\n}\n\nmodule.exports = toNumber;\n\n/***/ }),\n\n/***/ 7013:\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_RESULT__;// TinyColor v1.4.2\n// https://github.com/bgrins/TinyColor\n// Brian Grinstead, MIT License\n(function (Math) {\n var trimLeft = /^\\s+/,\n trimRight = /\\s+$/,\n tinyCounter = 0,\n mathRound = Math.round,\n mathMin = Math.min,\n mathMax = Math.max,\n mathRandom = Math.random;\n\n function tinycolor(color, opts) {\n color = color ? color : '';\n opts = opts || {}; // If input is already a tinycolor, return itself\n\n if (color instanceof tinycolor) {\n return color;\n } // If we are called as a function, call using new instead\n\n\n if (!(this instanceof tinycolor)) {\n return new tinycolor(color, opts);\n }\n\n var rgb = inputToRGB(color);\n this._originalInput = color, this._r = rgb.r, this._g = rgb.g, this._b = rgb.b, this._a = rgb.a, this._roundA = mathRound(100 * this._a) / 100, this._format = opts.format || rgb.format;\n this._gradientType = opts.gradientType; // Don't let the range of [0,255] come back in [0,1].\n // Potentially lose a little bit of precision here, but will fix issues where\n // .5 gets interpreted as half of the total, instead of half of 1\n // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n\n if (this._r < 1) {\n this._r = mathRound(this._r);\n }\n\n if (this._g < 1) {\n this._g = mathRound(this._g);\n }\n\n if (this._b < 1) {\n this._b = mathRound(this._b);\n }\n\n this._ok = rgb.ok;\n this._tc_id = tinyCounter++;\n }\n\n tinycolor.prototype = {\n isDark: function () {\n return this.getBrightness() < 128;\n },\n isLight: function () {\n return !this.isDark();\n },\n isValid: function () {\n return this._ok;\n },\n getOriginalInput: function () {\n return this._originalInput;\n },\n getFormat: function () {\n return this._format;\n },\n getAlpha: function () {\n return this._a;\n },\n getBrightness: function () {\n //http://www.w3.org/TR/AERT#color-contrast\n var rgb = this.toRgb();\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n },\n getLuminance: function () {\n //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n var rgb = this.toRgb();\n var RsRGB, GsRGB, BsRGB, R, G, B;\n RsRGB = rgb.r / 255;\n GsRGB = rgb.g / 255;\n BsRGB = rgb.b / 255;\n\n if (RsRGB <= 0.03928) {\n R = RsRGB / 12.92;\n } else {\n R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);\n }\n\n if (GsRGB <= 0.03928) {\n G = GsRGB / 12.92;\n } else {\n G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);\n }\n\n if (BsRGB <= 0.03928) {\n B = BsRGB / 12.92;\n } else {\n B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);\n }\n\n return 0.2126 * R + 0.7152 * G + 0.0722 * B;\n },\n setAlpha: function (value) {\n this._a = boundAlpha(value);\n this._roundA = mathRound(100 * this._a) / 100;\n return this;\n },\n toHsv: function () {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n return {\n h: hsv.h * 360,\n s: hsv.s,\n v: hsv.v,\n a: this._a\n };\n },\n toHsvString: function () {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n var h = mathRound(hsv.h * 360),\n s = mathRound(hsv.s * 100),\n v = mathRound(hsv.v * 100);\n return this._a == 1 ? \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\" : \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \" + this._roundA + \")\";\n },\n toHsl: function () {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n return {\n h: hsl.h * 360,\n s: hsl.s,\n l: hsl.l,\n a: this._a\n };\n },\n toHslString: function () {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n var h = mathRound(hsl.h * 360),\n s = mathRound(hsl.s * 100),\n l = mathRound(hsl.l * 100);\n return this._a == 1 ? \"hsl(\" + h + \", \" + s + \"%, \" + l + \"%)\" : \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \" + this._roundA + \")\";\n },\n toHex: function (allow3Char) {\n return rgbToHex(this._r, this._g, this._b, allow3Char);\n },\n toHexString: function (allow3Char) {\n return '#' + this.toHex(allow3Char);\n },\n toHex8: function (allow4Char) {\n return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);\n },\n toHex8String: function (allow4Char) {\n return '#' + this.toHex8(allow4Char);\n },\n toRgb: function () {\n return {\n r: mathRound(this._r),\n g: mathRound(this._g),\n b: mathRound(this._b),\n a: this._a\n };\n },\n toRgbString: function () {\n return this._a == 1 ? \"rgb(\" + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \")\" : \"rgba(\" + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \", \" + this._roundA + \")\";\n },\n toPercentageRgb: function () {\n return {\n r: mathRound(bound01(this._r, 255) * 100) + \"%\",\n g: mathRound(bound01(this._g, 255) * 100) + \"%\",\n b: mathRound(bound01(this._b, 255) * 100) + \"%\",\n a: this._a\n };\n },\n toPercentageRgbString: function () {\n return this._a == 1 ? \"rgb(\" + mathRound(bound01(this._r, 255) * 100) + \"%, \" + mathRound(bound01(this._g, 255) * 100) + \"%, \" + mathRound(bound01(this._b, 255) * 100) + \"%)\" : \"rgba(\" + mathRound(bound01(this._r, 255) * 100) + \"%, \" + mathRound(bound01(this._g, 255) * 100) + \"%, \" + mathRound(bound01(this._b, 255) * 100) + \"%, \" + this._roundA + \")\";\n },\n toName: function () {\n if (this._a === 0) {\n return \"transparent\";\n }\n\n if (this._a < 1) {\n return false;\n }\n\n return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;\n },\n toFilter: function (secondColor) {\n var hex8String = '#' + rgbaToArgbHex(this._r, this._g, this._b, this._a);\n var secondHex8String = hex8String;\n var gradientType = this._gradientType ? \"GradientType = 1, \" : \"\";\n\n if (secondColor) {\n var s = tinycolor(secondColor);\n secondHex8String = '#' + rgbaToArgbHex(s._r, s._g, s._b, s._a);\n }\n\n return \"progid:DXImageTransform.Microsoft.gradient(\" + gradientType + \"startColorstr=\" + hex8String + \",endColorstr=\" + secondHex8String + \")\";\n },\n toString: function (format) {\n var formatSet = !!format;\n format = format || this._format;\n var formattedString = false;\n var hasAlpha = this._a < 1 && this._a >= 0;\n var needsAlphaFormat = !formatSet && hasAlpha && (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"hex4\" || format === \"hex8\" || format === \"name\");\n\n if (needsAlphaFormat) {\n // Special case for \"transparent\", all other non-alpha formats\n // will return rgba when there is transparency.\n if (format === \"name\" && this._a === 0) {\n return this.toName();\n }\n\n return this.toRgbString();\n }\n\n if (format === \"rgb\") {\n formattedString = this.toRgbString();\n }\n\n if (format === \"prgb\") {\n formattedString = this.toPercentageRgbString();\n }\n\n if (format === \"hex\" || format === \"hex6\") {\n formattedString = this.toHexString();\n }\n\n if (format === \"hex3\") {\n formattedString = this.toHexString(true);\n }\n\n if (format === \"hex4\") {\n formattedString = this.toHex8String(true);\n }\n\n if (format === \"hex8\") {\n formattedString = this.toHex8String();\n }\n\n if (format === \"name\") {\n formattedString = this.toName();\n }\n\n if (format === \"hsl\") {\n formattedString = this.toHslString();\n }\n\n if (format === \"hsv\") {\n formattedString = this.toHsvString();\n }\n\n return formattedString || this.toHexString();\n },\n clone: function () {\n return tinycolor(this.toString());\n },\n _applyModification: function (fn, args) {\n var color = fn.apply(null, [this].concat([].slice.call(args)));\n this._r = color._r;\n this._g = color._g;\n this._b = color._b;\n this.setAlpha(color._a);\n return this;\n },\n lighten: function () {\n return this._applyModification(lighten, arguments);\n },\n brighten: function () {\n return this._applyModification(brighten, arguments);\n },\n darken: function () {\n return this._applyModification(darken, arguments);\n },\n desaturate: function () {\n return this._applyModification(desaturate, arguments);\n },\n saturate: function () {\n return this._applyModification(saturate, arguments);\n },\n greyscale: function () {\n return this._applyModification(greyscale, arguments);\n },\n spin: function () {\n return this._applyModification(spin, arguments);\n },\n _applyCombination: function (fn, args) {\n return fn.apply(null, [this].concat([].slice.call(args)));\n },\n analogous: function () {\n return this._applyCombination(analogous, arguments);\n },\n complement: function () {\n return this._applyCombination(complement, arguments);\n },\n monochromatic: function () {\n return this._applyCombination(monochromatic, arguments);\n },\n splitcomplement: function () {\n return this._applyCombination(splitcomplement, arguments);\n },\n triad: function () {\n return this._applyCombination(triad, arguments);\n },\n tetrad: function () {\n return this._applyCombination(tetrad, arguments);\n }\n }; // If input is an object, force 1 into \"1.0\" to handle ratios properly\n // String input requires \"1.0\" as input, so 1 will be treated as 1\n\n tinycolor.fromRatio = function (color, opts) {\n if (typeof color == \"object\") {\n var newColor = {};\n\n for (var i in color) {\n if (color.hasOwnProperty(i)) {\n if (i === \"a\") {\n newColor[i] = color[i];\n } else {\n newColor[i] = convertToPercentage(color[i]);\n }\n }\n }\n\n color = newColor;\n }\n\n return tinycolor(color, opts);\n }; // Given a string or object, convert that input to RGB\n // Possible string inputs:\n //\n // \"red\"\n // \"#f00\" or \"f00\"\n // \"#ff0000\" or \"ff0000\"\n // \"#ff000000\" or \"ff000000\"\n // \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n // \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n // \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n // \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n // \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n // \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n // \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n //\n\n\n function inputToRGB(color) {\n var rgb = {\n r: 0,\n g: 0,\n b: 0\n };\n var a = 1;\n var s = null;\n var v = null;\n var l = null;\n var ok = false;\n var format = false;\n\n if (typeof color == \"string\") {\n color = stringInputToObject(color);\n }\n\n if (typeof color == \"object\") {\n if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n rgb = rgbToRgb(color.r, color.g, color.b);\n ok = true;\n format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n s = convertToPercentage(color.s);\n v = convertToPercentage(color.v);\n rgb = hsvToRgb(color.h, s, v);\n ok = true;\n format = \"hsv\";\n } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n s = convertToPercentage(color.s);\n l = convertToPercentage(color.l);\n rgb = hslToRgb(color.h, s, l);\n ok = true;\n format = \"hsl\";\n }\n\n if (color.hasOwnProperty(\"a\")) {\n a = color.a;\n }\n }\n\n a = boundAlpha(a);\n return {\n ok: ok,\n format: color.format || format,\n r: mathMin(255, mathMax(rgb.r, 0)),\n g: mathMin(255, mathMax(rgb.g, 0)),\n b: mathMin(255, mathMax(rgb.b, 0)),\n a: a\n };\n } // Conversion Functions\n // --------------------\n // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n // <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>\n // `rgbToRgb`\n // Handle bounds / percentage checking to conform to CSS color spec\n // <http://www.w3.org/TR/css3-color/>\n // *Assumes:* r, g, b in [0, 255] or [0, 1]\n // *Returns:* { r, g, b } in [0, 255]\n\n\n function rgbToRgb(r, g, b) {\n return {\n r: bound01(r, 255) * 255,\n g: bound01(g, 255) * 255,\n b: bound01(b, 255) * 255\n };\n } // `rgbToHsl`\n // Converts an RGB color value to HSL.\n // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n // *Returns:* { h, s, l } in [0,1]\n\n\n function rgbToHsl(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n var max = mathMax(r, g, b),\n min = mathMin(r, g, b);\n var h,\n s,\n l = (max + min) / 2;\n\n if (max == min) {\n h = s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n\n case g:\n h = (b - r) / d + 2;\n break;\n\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return {\n h: h,\n s: s,\n l: l\n };\n } // `hslToRgb`\n // Converts an HSL color value to RGB.\n // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n // *Returns:* { r, g, b } in the set [0, 255]\n\n\n function hslToRgb(h, s, l) {\n var r, g, b;\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return {\n r: r * 255,\n g: g * 255,\n b: b * 255\n };\n } // `rgbToHsv`\n // Converts an RGB color value to HSV\n // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n // *Returns:* { h, s, v } in [0,1]\n\n\n function rgbToHsv(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n var max = mathMax(r, g, b),\n min = mathMin(r, g, b);\n var h,\n s,\n v = max;\n var d = max - min;\n s = max === 0 ? 0 : d / max;\n\n if (max == min) {\n h = 0; // achromatic\n } else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n\n case g:\n h = (b - r) / d + 2;\n break;\n\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return {\n h: h,\n s: s,\n v: v\n };\n } // `hsvToRgb`\n // Converts an HSV color value to RGB.\n // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n // *Returns:* { r, g, b } in the set [0, 255]\n\n\n function hsvToRgb(h, s, v) {\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n var i = Math.floor(h),\n f = h - i,\n p = v * (1 - s),\n q = v * (1 - f * s),\n t = v * (1 - (1 - f) * s),\n mod = i % 6,\n r = [v, q, p, p, t, v][mod],\n g = [t, v, v, q, p, p][mod],\n b = [p, p, t, v, v, q][mod];\n return {\n r: r * 255,\n g: g * 255,\n b: b * 255\n };\n } // `rgbToHex`\n // Converts an RGB color to hex\n // Assumes r, g, and b are contained in the set [0, 255]\n // Returns a 3 or 6 character hex\n\n\n function rgbToHex(r, g, b, allow3Char) {\n var hex = [pad2(mathRound(r).toString(16)), pad2(mathRound(g).toString(16)), pad2(mathRound(b).toString(16))]; // Return a 3 character hex if possible\n\n if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n }\n\n return hex.join(\"\");\n } // `rgbaToHex`\n // Converts an RGBA color plus alpha transparency to hex\n // Assumes r, g, b are contained in the set [0, 255] and\n // a in [0, 1]. Returns a 4 or 8 character rgba hex\n\n\n function rgbaToHex(r, g, b, a, allow4Char) {\n var hex = [pad2(mathRound(r).toString(16)), pad2(mathRound(g).toString(16)), pad2(mathRound(b).toString(16)), pad2(convertDecimalToHex(a))]; // Return a 4 character hex if possible\n\n if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n }\n\n return hex.join(\"\");\n } // `rgbaToArgbHex`\n // Converts an RGBA color to an ARGB Hex8 string\n // Rarely used, but required for \"toFilter()\"\n\n\n function rgbaToArgbHex(r, g, b, a) {\n var hex = [pad2(convertDecimalToHex(a)), pad2(mathRound(r).toString(16)), pad2(mathRound(g).toString(16)), pad2(mathRound(b).toString(16))];\n return hex.join(\"\");\n } // `equals`\n // Can be called with any tinycolor input\n\n\n tinycolor.equals = function (color1, color2) {\n if (!color1 || !color2) {\n return false;\n }\n\n return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();\n };\n\n tinycolor.random = function () {\n return tinycolor.fromRatio({\n r: mathRandom(),\n g: mathRandom(),\n b: mathRandom()\n });\n }; // Modification Functions\n // ----------------------\n // Thanks to less.js for some of the basics here\n // <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>\n\n\n function desaturate(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.s -= amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n }\n\n function saturate(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.s += amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n }\n\n function greyscale(color) {\n return tinycolor(color).desaturate(100);\n }\n\n function lighten(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.l += amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n }\n\n function brighten(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var rgb = tinycolor(color).toRgb();\n rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * -(amount / 100))));\n rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * -(amount / 100))));\n rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * -(amount / 100))));\n return tinycolor(rgb);\n }\n\n function darken(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.l -= amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n } // Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n // Values outside of this range will be wrapped into this range.\n\n\n function spin(color, amount) {\n var hsl = tinycolor(color).toHsl();\n var hue = (hsl.h + amount) % 360;\n hsl.h = hue < 0 ? 360 + hue : hue;\n return tinycolor(hsl);\n } // Combination Functions\n // ---------------------\n // Thanks to jQuery xColor for some of the ideas behind these\n // <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js>\n\n\n function complement(color) {\n var hsl = tinycolor(color).toHsl();\n hsl.h = (hsl.h + 180) % 360;\n return tinycolor(hsl);\n }\n\n function triad(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [tinycolor(color), tinycolor({\n h: (h + 120) % 360,\n s: hsl.s,\n l: hsl.l\n }), tinycolor({\n h: (h + 240) % 360,\n s: hsl.s,\n l: hsl.l\n })];\n }\n\n function tetrad(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [tinycolor(color), tinycolor({\n h: (h + 90) % 360,\n s: hsl.s,\n l: hsl.l\n }), tinycolor({\n h: (h + 180) % 360,\n s: hsl.s,\n l: hsl.l\n }), tinycolor({\n h: (h + 270) % 360,\n s: hsl.s,\n l: hsl.l\n })];\n }\n\n function splitcomplement(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [tinycolor(color), tinycolor({\n h: (h + 72) % 360,\n s: hsl.s,\n l: hsl.l\n }), tinycolor({\n h: (h + 216) % 360,\n s: hsl.s,\n l: hsl.l\n })];\n }\n\n function analogous(color, results, slices) {\n results = results || 6;\n slices = slices || 30;\n var hsl = tinycolor(color).toHsl();\n var part = 360 / slices;\n var ret = [tinycolor(color)];\n\n for (hsl.h = (hsl.h - (part * results >> 1) + 720) % 360; --results;) {\n hsl.h = (hsl.h + part) % 360;\n ret.push(tinycolor(hsl));\n }\n\n return ret;\n }\n\n function monochromatic(color, results) {\n results = results || 6;\n var hsv = tinycolor(color).toHsv();\n var h = hsv.h,\n s = hsv.s,\n v = hsv.v;\n var ret = [];\n var modification = 1 / results;\n\n while (results--) {\n ret.push(tinycolor({\n h: h,\n s: s,\n v: v\n }));\n v = (v + modification) % 1;\n }\n\n return ret;\n } // Utility Functions\n // ---------------------\n\n\n tinycolor.mix = function (color1, color2, amount) {\n amount = amount === 0 ? 0 : amount || 50;\n var rgb1 = tinycolor(color1).toRgb();\n var rgb2 = tinycolor(color2).toRgb();\n var p = amount / 100;\n var rgba = {\n r: (rgb2.r - rgb1.r) * p + rgb1.r,\n g: (rgb2.g - rgb1.g) * p + rgb1.g,\n b: (rgb2.b - rgb1.b) * p + rgb1.b,\n a: (rgb2.a - rgb1.a) * p + rgb1.a\n };\n return tinycolor(rgba);\n }; // Readability Functions\n // ---------------------\n // <http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef (WCAG Version 2)\n // `contrast`\n // Analyze the 2 colors and returns the color contrast defined by (WCAG Version 2)\n\n\n tinycolor.readability = function (color1, color2) {\n var c1 = tinycolor(color1);\n var c2 = tinycolor(color2);\n return (Math.max(c1.getLuminance(), c2.getLuminance()) + 0.05) / (Math.min(c1.getLuminance(), c2.getLuminance()) + 0.05);\n }; // `isReadable`\n // Ensure that foreground and background color combinations meet WCAG2 guidelines.\n // The third argument is an optional Object.\n // the 'level' property states 'AA' or 'AAA' - if missing or invalid, it defaults to 'AA';\n // the 'size' property states 'large' or 'small' - if missing or invalid, it defaults to 'small'.\n // If the entire object is absent, isReadable defaults to {level:\"AA\",size:\"small\"}.\n // *Example*\n // tinycolor.isReadable(\"#000\", \"#111\") => false\n // tinycolor.isReadable(\"#000\", \"#111\",{level:\"AA\",size:\"large\"}) => false\n\n\n tinycolor.isReadable = function (color1, color2, wcag2) {\n var readability = tinycolor.readability(color1, color2);\n var wcag2Parms, out;\n out = false;\n wcag2Parms = validateWCAG2Parms(wcag2);\n\n switch (wcag2Parms.level + wcag2Parms.size) {\n case \"AAsmall\":\n case \"AAAlarge\":\n out = readability >= 4.5;\n break;\n\n case \"AAlarge\":\n out = readability >= 3;\n break;\n\n case \"AAAsmall\":\n out = readability >= 7;\n break;\n }\n\n return out;\n }; // `mostReadable`\n // Given a base color and a list of possible foreground or background\n // colors for that base, returns the most readable color.\n // Optionally returns Black or White if the most readable color is unreadable.\n // *Example*\n // tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:false}).toHexString(); // \"#112255\"\n // tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:true}).toHexString(); // \"#ffffff\"\n // tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"large\"}).toHexString(); // \"#faf3f3\"\n // tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"small\"}).toHexString(); // \"#ffffff\"\n\n\n tinycolor.mostReadable = function (baseColor, colorList, args) {\n var bestColor = null;\n var bestScore = 0;\n var readability;\n var includeFallbackColors, level, size;\n args = args || {};\n includeFallbackColors = args.includeFallbackColors;\n level = args.level;\n size = args.size;\n\n for (var i = 0; i < colorList.length; i++) {\n readability = tinycolor.readability(baseColor, colorList[i]);\n\n if (readability > bestScore) {\n bestScore = readability;\n bestColor = tinycolor(colorList[i]);\n }\n }\n\n if (tinycolor.isReadable(baseColor, bestColor, {\n \"level\": level,\n \"size\": size\n }) || !includeFallbackColors) {\n return bestColor;\n } else {\n args.includeFallbackColors = false;\n return tinycolor.mostReadable(baseColor, [\"#fff\", \"#000\"], args);\n }\n }; // Big List of Colors\n // ------------------\n // <http://www.w3.org/TR/css3-color/#svg-color>\n\n\n var names = tinycolor.names = {\n aliceblue: \"f0f8ff\",\n antiquewhite: \"faebd7\",\n aqua: \"0ff\",\n aquamarine: \"7fffd4\",\n azure: \"f0ffff\",\n beige: \"f5f5dc\",\n bisque: \"ffe4c4\",\n black: \"000\",\n blanchedalmond: \"ffebcd\",\n blue: \"00f\",\n blueviolet: \"8a2be2\",\n brown: \"a52a2a\",\n burlywood: \"deb887\",\n burntsienna: \"ea7e5d\",\n cadetblue: \"5f9ea0\",\n chartreuse: \"7fff00\",\n chocolate: \"d2691e\",\n coral: \"ff7f50\",\n cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\",\n crimson: \"dc143c\",\n cyan: \"0ff\",\n darkblue: \"00008b\",\n darkcyan: \"008b8b\",\n darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\",\n darkgreen: \"006400\",\n darkgrey: \"a9a9a9\",\n darkkhaki: \"bdb76b\",\n darkmagenta: \"8b008b\",\n darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\",\n darkorchid: \"9932cc\",\n darkred: \"8b0000\",\n darksalmon: \"e9967a\",\n darkseagreen: \"8fbc8f\",\n darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\",\n darkslategrey: \"2f4f4f\",\n darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\",\n deeppink: \"ff1493\",\n deepskyblue: \"00bfff\",\n dimgray: \"696969\",\n dimgrey: \"696969\",\n dodgerblue: \"1e90ff\",\n firebrick: \"b22222\",\n floralwhite: \"fffaf0\",\n forestgreen: \"228b22\",\n fuchsia: \"f0f\",\n gainsboro: \"dcdcdc\",\n ghostwhite: \"f8f8ff\",\n gold: \"ffd700\",\n goldenrod: \"daa520\",\n gray: \"808080\",\n green: \"008000\",\n greenyellow: \"adff2f\",\n grey: \"808080\",\n honeydew: \"f0fff0\",\n hotpink: \"ff69b4\",\n indianred: \"cd5c5c\",\n indigo: \"4b0082\",\n ivory: \"fffff0\",\n khaki: \"f0e68c\",\n lavender: \"e6e6fa\",\n lavenderblush: \"fff0f5\",\n lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\",\n lightblue: \"add8e6\",\n lightcoral: \"f08080\",\n lightcyan: \"e0ffff\",\n lightgoldenrodyellow: \"fafad2\",\n lightgray: \"d3d3d3\",\n lightgreen: \"90ee90\",\n lightgrey: \"d3d3d3\",\n lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\",\n lightseagreen: \"20b2aa\",\n lightskyblue: \"87cefa\",\n lightslategray: \"789\",\n lightslategrey: \"789\",\n lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\",\n lime: \"0f0\",\n limegreen: \"32cd32\",\n linen: \"faf0e6\",\n magenta: \"f0f\",\n maroon: \"800000\",\n mediumaquamarine: \"66cdaa\",\n mediumblue: \"0000cd\",\n mediumorchid: \"ba55d3\",\n mediumpurple: \"9370db\",\n mediumseagreen: \"3cb371\",\n mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\",\n mediumturquoise: \"48d1cc\",\n mediumvioletred: \"c71585\",\n midnightblue: \"191970\",\n mintcream: \"f5fffa\",\n mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\",\n navajowhite: \"ffdead\",\n navy: \"000080\",\n oldlace: \"fdf5e6\",\n olive: \"808000\",\n olivedrab: \"6b8e23\",\n orange: \"ffa500\",\n orangered: \"ff4500\",\n orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\",\n palegreen: \"98fb98\",\n paleturquoise: \"afeeee\",\n palevioletred: \"db7093\",\n papayawhip: \"ffefd5\",\n peachpuff: \"ffdab9\",\n peru: \"cd853f\",\n pink: \"ffc0cb\",\n plum: \"dda0dd\",\n powderblue: \"b0e0e6\",\n purple: \"800080\",\n rebeccapurple: \"663399\",\n red: \"f00\",\n rosybrown: \"bc8f8f\",\n royalblue: \"4169e1\",\n saddlebrown: \"8b4513\",\n salmon: \"fa8072\",\n sandybrown: \"f4a460\",\n seagreen: \"2e8b57\",\n seashell: \"fff5ee\",\n sienna: \"a0522d\",\n silver: \"c0c0c0\",\n skyblue: \"87ceeb\",\n slateblue: \"6a5acd\",\n slategray: \"708090\",\n slategrey: \"708090\",\n snow: \"fffafa\",\n springgreen: \"00ff7f\",\n steelblue: \"4682b4\",\n tan: \"d2b48c\",\n teal: \"008080\",\n thistle: \"d8bfd8\",\n tomato: \"ff6347\",\n turquoise: \"40e0d0\",\n violet: \"ee82ee\",\n wheat: \"f5deb3\",\n white: \"fff\",\n whitesmoke: \"f5f5f5\",\n yellow: \"ff0\",\n yellowgreen: \"9acd32\"\n }; // Make it easy to access colors via `hexNames[hex]`\n\n var hexNames = tinycolor.hexNames = flip(names); // Utilities\n // ---------\n // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`\n\n function flip(o) {\n var flipped = {};\n\n for (var i in o) {\n if (o.hasOwnProperty(i)) {\n flipped[o[i]] = i;\n }\n }\n\n return flipped;\n } // Return a valid alpha value [0,1] with all invalid values being set to 1\n\n\n function boundAlpha(a) {\n a = parseFloat(a);\n\n if (isNaN(a) || a < 0 || a > 1) {\n a = 1;\n }\n\n return a;\n } // Take input from [0, n] and return it as [0, 1]\n\n\n function bound01(n, max) {\n if (isOnePointZero(n)) {\n n = \"100%\";\n }\n\n var processPercent = isPercentage(n);\n n = mathMin(max, mathMax(0, parseFloat(n))); // Automatically convert percentage into number\n\n if (processPercent) {\n n = parseInt(n * max, 10) / 100;\n } // Handle floating point rounding errors\n\n\n if (Math.abs(n - max) < 0.000001) {\n return 1;\n } // Convert into [0, 1] range if it isn't already\n\n\n return n % max / parseFloat(max);\n } // Force a number between 0 and 1\n\n\n function clamp01(val) {\n return mathMin(1, mathMax(0, val));\n } // Parse a base-16 hex value into a base-10 integer\n\n\n function parseIntFromHex(val) {\n return parseInt(val, 16);\n } // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n // <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>\n\n\n function isOnePointZero(n) {\n return typeof n == \"string\" && n.indexOf('.') != -1 && parseFloat(n) === 1;\n } // Check to see if string passed in is a percentage\n\n\n function isPercentage(n) {\n return typeof n === \"string\" && n.indexOf('%') != -1;\n } // Force a hex value to have 2 characters\n\n\n function pad2(c) {\n return c.length == 1 ? '0' + c : '' + c;\n } // Replace a decimal with it's percentage value\n\n\n function convertToPercentage(n) {\n if (n <= 1) {\n n = n * 100 + \"%\";\n }\n\n return n;\n } // Converts a decimal to a hex value\n\n\n function convertDecimalToHex(d) {\n return Math.round(parseFloat(d) * 255).toString(16);\n } // Converts a hex value to a decimal\n\n\n function convertHexToDecimal(h) {\n return parseIntFromHex(h) / 255;\n }\n\n var matchers = function () {\n // <http://www.w3.org/TR/css3-values/#integers>\n var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\"; // <http://www.w3.org/TR/css3-values/#number-value>\n\n var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\"; // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\n\n var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\"; // Actual matching.\n // Parentheses and commas are optional, but not required.\n // Whitespace can take the place of commas or opening paren\n\n var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n return {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n };\n }(); // `isValidCSSUnit`\n // Take in a single string / number and check to see if it looks like a CSS unit\n // (see `matchers` above for definition).\n\n\n function isValidCSSUnit(color) {\n return !!matchers.CSS_UNIT.exec(color);\n } // `stringInputToObject`\n // Permissive string parsing. Take in a number of formats, and output an object\n // based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\n\n\n function stringInputToObject(color) {\n color = color.replace(trimLeft, '').replace(trimRight, '').toLowerCase();\n var named = false;\n\n if (names[color]) {\n color = names[color];\n named = true;\n } else if (color == 'transparent') {\n return {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n format: \"name\"\n };\n } // Try to match string input using regular expressions.\n // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n // Just return an object and let the conversion functions handle that.\n // This way the result will be the same whether the tinycolor is initialized with string or object.\n\n\n var match;\n\n if (match = matchers.rgb.exec(color)) {\n return {\n r: match[1],\n g: match[2],\n b: match[3]\n };\n }\n\n if (match = matchers.rgba.exec(color)) {\n return {\n r: match[1],\n g: match[2],\n b: match[3],\n a: match[4]\n };\n }\n\n if (match = matchers.hsl.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n l: match[3]\n };\n }\n\n if (match = matchers.hsla.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n l: match[3],\n a: match[4]\n };\n }\n\n if (match = matchers.hsv.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n v: match[3]\n };\n }\n\n if (match = matchers.hsva.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n v: match[3],\n a: match[4]\n };\n }\n\n if (match = matchers.hex8.exec(color)) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n a: convertHexToDecimal(match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n\n if (match = matchers.hex6.exec(color)) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n\n if (match = matchers.hex4.exec(color)) {\n return {\n r: parseIntFromHex(match[1] + '' + match[1]),\n g: parseIntFromHex(match[2] + '' + match[2]),\n b: parseIntFromHex(match[3] + '' + match[3]),\n a: convertHexToDecimal(match[4] + '' + match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n\n if (match = matchers.hex3.exec(color)) {\n return {\n r: parseIntFromHex(match[1] + '' + match[1]),\n g: parseIntFromHex(match[2] + '' + match[2]),\n b: parseIntFromHex(match[3] + '' + match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n\n return false;\n }\n\n function validateWCAG2Parms(parms) {\n // return valid WCAG2 parms for isReadable.\n // If input parms are invalid, return {\"level\":\"AA\", \"size\":\"small\"}\n var level, size;\n parms = parms || {\n \"level\": \"AA\",\n \"size\": \"small\"\n };\n level = (parms.level || \"AA\").toUpperCase();\n size = (parms.size || \"small\").toLowerCase();\n\n if (level !== \"AA\" && level !== \"AAA\") {\n level = \"AA\";\n }\n\n if (size !== \"small\" && size !== \"large\") {\n size = \"small\";\n }\n\n return {\n \"level\": level,\n \"size\": size\n };\n } // Node: Export function\n\n\n if ( true && module.exports) {\n module.exports = tinycolor;\n } // AMD/requirejs: Define the module\n else if (true) {\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n return tinycolor;\n }).call(exports, __webpack_require__, exports, module),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } // Browser: Expose to window\n else {}\n})(Math);\n\n/***/ }),\n\n/***/ 89:\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\nvar __webpack_unused_export__;\n\n\n__webpack_unused_export__ = ({\n value: true\n}); // runtime helper for setting properties on components\n// in a tree-shakable way\n\nexports.Z = (sfc, props) => {\n const target = sfc.__vccOpts || sfc;\n\n for (const [key, val] of props) {\n target[key] = val;\n }\n\n return target;\n};\n\n/***/ }),\n\n/***/ 3647:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(6095);\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = (__webpack_require__(7037)/* [\"default\"] */ .Z)\nvar update = add(\"29397b9c\", content, true, {\"sourceMap\":false,\"shadowMode\":false});\n\n/***/ }),\n\n/***/ 325:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(6047);\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = (__webpack_require__(7037)/* [\"default\"] */ .Z)\nvar update = add(\"479d8be0\", content, true, {\"sourceMap\":false,\"shadowMode\":false});\n\n/***/ }),\n\n/***/ 5208:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(9481);\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = (__webpack_require__(7037)/* [\"default\"] */ .Z)\nvar update = add(\"1e383f72\", content, true, {\"sourceMap\":false,\"shadowMode\":false});\n\n/***/ }),\n\n/***/ 1425:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(5186);\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = (__webpack_require__(7037)/* [\"default\"] */ .Z)\nvar update = add(\"3855edf0\", content, true, {\"sourceMap\":false,\"shadowMode\":false});\n\n/***/ }),\n\n/***/ 1902:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(3695);\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = (__webpack_require__(7037)/* [\"default\"] */ .Z)\nvar update = add(\"2f73e1a8\", content, true, {\"sourceMap\":false,\"shadowMode\":false});\n\n/***/ }),\n\n/***/ 5815:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(7279);\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = (__webpack_require__(7037)/* [\"default\"] */ .Z)\nvar update = add(\"36c086c2\", content, true, {\"sourceMap\":false,\"shadowMode\":false});\n\n/***/ }),\n\n/***/ 8016:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(6278);\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = (__webpack_require__(7037)/* [\"default\"] */ .Z)\nvar update = add(\"8bcdd408\", content, true, {\"sourceMap\":false,\"shadowMode\":false});\n\n/***/ }),\n\n/***/ 193:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(3468);\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = (__webpack_require__(7037)/* [\"default\"] */ .Z)\nvar update = add(\"17a63672\", content, true, {\"sourceMap\":false,\"shadowMode\":false});\n\n/***/ }),\n\n/***/ 1113:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(5689);\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = (__webpack_require__(7037)/* [\"default\"] */ .Z)\nvar update = add(\"39c50172\", content, true, {\"sourceMap\":false,\"shadowMode\":false});\n\n/***/ }),\n\n/***/ 6320:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(2410);\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = (__webpack_require__(7037)/* [\"default\"] */ .Z)\nvar update = add(\"5c6f2742\", content, true, {\"sourceMap\":false,\"shadowMode\":false});\n\n/***/ }),\n\n/***/ 3205:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(3142);\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = (__webpack_require__(7037)/* [\"default\"] */ .Z)\nvar update = add(\"90803b82\", content, true, {\"sourceMap\":false,\"shadowMode\":false});\n\n/***/ }),\n\n/***/ 1979:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(7953);\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = (__webpack_require__(7037)/* [\"default\"] */ .Z)\nvar update = add(\"418ed5a2\", content, true, {\"sourceMap\":false,\"shadowMode\":false});\n\n/***/ }),\n\n/***/ 6547:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(3097);\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = (__webpack_require__(7037)/* [\"default\"] */ .Z)\nvar update = add(\"1f7c089b\", content, true, {\"sourceMap\":false,\"shadowMode\":false});\n\n/***/ }),\n\n/***/ 5233:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(4339);\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = (__webpack_require__(7037)/* [\"default\"] */ .Z)\nvar update = add(\"491ed8fe\", content, true, {\"sourceMap\":false,\"shadowMode\":false});\n\n/***/ }),\n\n/***/ 7037:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"Z\": function() { return /* binding */ addStylesClient; }\n});\n\n;// CONCATENATED MODULE: ./node_modules/vue-style-loader/lib/listToStyles.js\n/**\n * Translates the list format produced by css-loader into something\n * easier to manipulate.\n */\nfunction listToStyles(parentId, list) {\n var styles = [];\n var newStyles = {};\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = item[0];\n var css = item[1];\n var media = item[2];\n var sourceMap = item[3];\n var part = {\n id: parentId + ':' + i,\n css: css,\n media: media,\n sourceMap: sourceMap\n };\n\n if (!newStyles[id]) {\n styles.push(newStyles[id] = {\n id: id,\n parts: [part]\n });\n } else {\n newStyles[id].parts.push(part);\n }\n }\n\n return styles;\n}\n;// CONCATENATED MODULE: ./node_modules/vue-style-loader/lib/addStylesClient.js\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n Modified by Evan You @yyx990803\n*/\n\n\n\nvar hasDocument = typeof document !== 'undefined'\n\nif (typeof DEBUG !== 'undefined' && DEBUG) {\n if (!hasDocument) {\n throw new Error(\n 'vue-style-loader cannot be used in a non-browser environment. ' +\n \"Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.\"\n ) }\n}\n\n/*\ntype StyleObject = {\n id: number;\n parts: Array<StyleObjectPart>\n}\n\ntype StyleObjectPart = {\n css: string;\n media: string;\n sourceMap: ?string\n}\n*/\n\nvar stylesInDom = {/*\n [id: number]: {\n id: number,\n refs: number,\n parts: Array<(obj?: StyleObjectPart) => void>\n }\n*/}\n\nvar head = hasDocument && (document.head || document.getElementsByTagName('head')[0])\nvar singletonElement = null\nvar singletonCounter = 0\nvar isProduction = false\nvar noop = function () {}\nvar options = null\nvar ssrIdKey = 'data-vue-ssr-id'\n\n// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n// tags it will allow on a page\nvar isOldIE = typeof navigator !== 'undefined' && /msie [6-9]\\b/.test(navigator.userAgent.toLowerCase())\n\nfunction addStylesClient (parentId, list, _isProduction, _options) {\n isProduction = _isProduction\n\n options = _options || {}\n\n var styles = listToStyles(parentId, list)\n addStylesToDom(styles)\n\n return function update (newList) {\n var mayRemove = []\n for (var i = 0; i < styles.length; i++) {\n var item = styles[i]\n var domStyle = stylesInDom[item.id]\n domStyle.refs--\n mayRemove.push(domStyle)\n }\n if (newList) {\n styles = listToStyles(parentId, newList)\n addStylesToDom(styles)\n } else {\n styles = []\n }\n for (var i = 0; i < mayRemove.length; i++) {\n var domStyle = mayRemove[i]\n if (domStyle.refs === 0) {\n for (var j = 0; j < domStyle.parts.length; j++) {\n domStyle.parts[j]()\n }\n delete stylesInDom[domStyle.id]\n }\n }\n }\n}\n\nfunction addStylesToDom (styles /* Array<StyleObject> */) {\n for (var i = 0; i < styles.length; i++) {\n var item = styles[i]\n var domStyle = stylesInDom[item.id]\n if (domStyle) {\n domStyle.refs++\n for (var j = 0; j < domStyle.parts.length; j++) {\n domStyle.parts[j](item.parts[j])\n }\n for (; j < item.parts.length; j++) {\n domStyle.parts.push(addStyle(item.parts[j]))\n }\n if (domStyle.parts.length > item.parts.length) {\n domStyle.parts.length = item.parts.length\n }\n } else {\n var parts = []\n for (var j = 0; j < item.parts.length; j++) {\n parts.push(addStyle(item.parts[j]))\n }\n stylesInDom[item.id] = { id: item.id, refs: 1, parts: parts }\n }\n }\n}\n\nfunction createStyleElement () {\n var styleElement = document.createElement('style')\n styleElement.type = 'text/css'\n head.appendChild(styleElement)\n return styleElement\n}\n\nfunction addStyle (obj /* StyleObjectPart */) {\n var update, remove\n var styleElement = document.querySelector('style[' + ssrIdKey + '~=\"' + obj.id + '\"]')\n\n if (styleElement) {\n if (isProduction) {\n // has SSR styles and in production mode.\n // simply do nothing.\n return noop\n } else {\n // has SSR styles but in dev mode.\n // for some reason Chrome can't handle source map in server-rendered\n // style tags - source maps in <style> only works if the style tag is\n // created and inserted dynamically. So we remove the server rendered\n // styles and inject new ones.\n styleElement.parentNode.removeChild(styleElement)\n }\n }\n\n if (isOldIE) {\n // use singleton mode for IE9.\n var styleIndex = singletonCounter++\n styleElement = singletonElement || (singletonElement = createStyleElement())\n update = applyToSingletonTag.bind(null, styleElement, styleIndex, false)\n remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true)\n } else {\n // use multi-style-tag mode in all other cases\n styleElement = createStyleElement()\n update = applyToTag.bind(null, styleElement)\n remove = function () {\n styleElement.parentNode.removeChild(styleElement)\n }\n }\n\n update(obj)\n\n return function updateStyle (newObj /* StyleObjectPart */) {\n if (newObj) {\n if (newObj.css === obj.css &&\n newObj.media === obj.media &&\n newObj.sourceMap === obj.sourceMap) {\n return\n }\n update(obj = newObj)\n } else {\n remove()\n }\n }\n}\n\nvar replaceText = (function () {\n var textStore = []\n\n return function (index, replacement) {\n textStore[index] = replacement\n return textStore.filter(Boolean).join('\\n')\n }\n})()\n\nfunction applyToSingletonTag (styleElement, index, remove, obj) {\n var css = remove ? '' : obj.css\n\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = replaceText(index, css)\n } else {\n var cssNode = document.createTextNode(css)\n var childNodes = styleElement.childNodes\n if (childNodes[index]) styleElement.removeChild(childNodes[index])\n if (childNodes.length) {\n styleElement.insertBefore(cssNode, childNodes[index])\n } else {\n styleElement.appendChild(cssNode)\n }\n }\n}\n\nfunction applyToTag (styleElement, obj) {\n var css = obj.css\n var media = obj.media\n var sourceMap = obj.sourceMap\n\n if (media) {\n styleElement.setAttribute('media', media)\n }\n if (options.ssrId) {\n styleElement.setAttribute(ssrIdKey, obj.id)\n }\n\n if (sourceMap) {\n // https://developer.chrome.com/devtools/docs/javascript-debugging\n // this makes source maps inside style tags work properly in Chrome\n css += '\\n/*# sourceURL=' + sourceMap.sources[0] + ' */'\n // http://stackoverflow.com/a/26603875\n css += '\\n/*# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + ' */'\n }\n\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild)\n }\n styleElement.appendChild(document.createTextNode(css))\n }\n}\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/global */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.g = (function() {\n/******/ \t\t\tif (typeof globalThis === 'object') return globalThis;\n/******/ \t\t\ttry {\n/******/ \t\t\t\treturn this || new Function('return this')();\n/******/ \t\t\t} catch (e) {\n/******/ \t\t\t\tif (typeof window === 'object') return window;\n/******/ \t\t\t}\n/******/ \t\t})();\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/publicPath */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.p = \"\";\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be in strict mode.\n!function() {\n\"use strict\";\n// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"Alpha\": function() { return /* reexport */ Alpha; },\n \"Checkboard\": function() { return /* reexport */ Checkboard; },\n \"Chrome\": function() { return /* reexport */ Chrome; },\n \"ColorMixin\": function() { return /* reexport */ color; },\n \"Compact\": function() { return /* reexport */ Compact; },\n \"EditableInput\": function() { return /* reexport */ EditableInput; },\n \"Grayscale\": function() { return /* reexport */ Grayscale; },\n \"Hue\": function() { return /* reexport */ Hue; },\n \"Material\": function() { return /* reexport */ Material; },\n \"Photoshop\": function() { return /* reexport */ Photoshop; },\n \"Saturation\": function() { return /* reexport */ Saturation; },\n \"Sketch\": function() { return /* reexport */ Sketch; },\n \"Slider\": function() { return /* reexport */ Slider; },\n \"Swatches\": function() { return /* reexport */ Swatches; },\n \"Twitter\": function() { return /* reexport */ Twitter; },\n \"default\": function() { return /* binding */ entry_lib; },\n \"version\": function() { return /* reexport */ version; }\n});\n\n;// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js\n/* eslint-disable no-var */\n// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n var currentScript = window.document.currentScript\n if (false) { var getCurrentScript; }\n\n var src = currentScript && currentScript.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/)\n if (src) {\n __webpack_require__.p = src[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\n/* harmony default export */ var setPublicPath = (null);\n\n;// CONCATENATED MODULE: ./package.json\nvar package_namespaceObject = {\"i8\":\"3.0.6\"};\n;// CONCATENATED MODULE: external {\"commonjs\":\"vue\",\"commonjs2\":\"vue\",\"root\":\"Vue\"}\nvar external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject = require(\"vue\");\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/Compact.vue?vue&type=template&id=1fcf22b8\n\nconst _hoisted_1 = {\n role: \"application\",\n \"aria-label\": \"Compact color picker\",\n class: \"vc-compact\"\n};\nconst _hoisted_2 = {\n class: \"vc-compact-colors\",\n role: \"listbox\"\n};\nconst _hoisted_3 = [\"aria-label\", \"aria-selected\", \"onClick\"];\nconst _hoisted_4 = {\n class: \"vc-compact-dot\"\n};\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", _hoisted_1, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"ul\", _hoisted_2, [((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(true), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.Fragment, null, (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.renderList)(_ctx.paletteUpperCase($props.palette), c => {\n return (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"li\", {\n role: \"option\",\n \"aria-label\": 'color:' + c,\n \"aria-selected\": c === $options.pick,\n class: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeClass)([\"vc-compact-color-item\", {\n 'vc-compact-color-item--white': c === '#FFFFFF'\n }]),\n key: c,\n style: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeStyle)({\n background: c\n }),\n onClick: $event => $options.handlerClick(c)\n }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.withDirectives)((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", _hoisted_4, null, 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.vShow, c === $options.pick]])], 14, _hoisted_3);\n }), 128))])]);\n}\n;// CONCATENATED MODULE: ./src/components/Compact.vue?vue&type=template&id=1fcf22b8\n\n// EXTERNAL MODULE: ./node_modules/tinycolor2/tinycolor.js\nvar tinycolor = __webpack_require__(7013);\nvar tinycolor_default = /*#__PURE__*/__webpack_require__.n(tinycolor);\n;// CONCATENATED MODULE: ./src/mixin/color.js\n\n\nfunction _colorChange(data = {}, oldHue = 0) {\n const alpha = data && data.a;\n let color; // hsl is better than hex between conversions\n\n if (data && data.hsl) {\n color = tinycolor_default()(data.hsl);\n } else if (data && data.hex && data.hex.length > 0) {\n color = tinycolor_default()(data.hex);\n } else if (data && data.hsv) {\n color = tinycolor_default()(data.hsv);\n } else if (data && data.rgba) {\n color = tinycolor_default()(data.rgba);\n } else if (data && data.rgb) {\n color = tinycolor_default()(data.rgb);\n } else {\n color = tinycolor_default()(data);\n }\n\n if (color && (color._a === undefined || color._a === null)) {\n color.setAlpha(alpha || 1);\n }\n\n const hsl = color.toHsl();\n const hsv = color.toHsv();\n\n if (hsl.s === 0) {\n hsv.h = hsl.h = data.h || data.hsl && data.hsl.h || oldHue || 0;\n }\n /* --- comment this block to fix #109, may cause #25 again --- */\n // when the hsv.v is less than 0.0164 (base on test)\n // because of possible loss of precision\n // the result of hue and saturation would be miscalculated\n // if (hsv.v < 0.0164) {\n // hsv.h = data.h || (data.hsv && data.hsv.h) || 0\n // hsv.s = data.s || (data.hsv && data.hsv.s) || 0\n // }\n // if (hsl.l < 0.01) {\n // hsl.h = data.h || (data.hsl && data.hsl.h) || 0\n // hsl.s = data.s || (data.hsl && data.hsl.s) || 0\n // }\n\n /* ------ */\n\n\n return {\n hsl: hsl,\n hex: color.toHexString().toUpperCase(),\n hex8: color.toHex8String().toUpperCase(),\n rgba: color.toRgb(),\n hsv: hsv,\n oldHue: data.h || oldHue || hsl.h,\n source: data.source,\n a: data.a || color.getAlpha()\n };\n}\n\n/* harmony default export */ var color = ({\n props: ['modelValue'],\n\n data() {\n return {\n val: _colorChange(this.modelValue)\n };\n },\n\n computed: {\n colors: {\n get() {\n return this.val;\n },\n\n set(newVal) {\n this.val = newVal;\n this.$emit('update:modelValue', newVal);\n }\n\n }\n },\n watch: {\n modelValue(newVal) {\n this.val = _colorChange(newVal);\n }\n\n },\n methods: {\n colorChange(data, oldHue) {\n this.oldHue = this.colors.hsl.h;\n this.colors = _colorChange(data, oldHue || this.oldHue);\n },\n\n isValidHex(hex) {\n return tinycolor_default()(hex).isValid();\n },\n\n simpleCheckForValidColor(data) {\n const keysToCheck = ['r', 'g', 'b', 'a', 'h', 's', 'l', 'v'];\n let checked = 0;\n let passed = 0;\n\n for (let i = 0; i < keysToCheck.length; i++) {\n const letter = keysToCheck[i];\n\n if (data[letter]) {\n checked++;\n\n if (!isNaN(data[letter])) {\n passed++;\n }\n }\n }\n\n if (checked === passed) {\n return data;\n }\n },\n\n paletteUpperCase(palette) {\n return palette.map(c => c.toUpperCase());\n },\n\n isTransparent(color) {\n return tinycolor_default()(color).getAlpha() === 0;\n }\n\n }\n});\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/Compact.vue?vue&type=script&lang=js\n // import editableInput from './common/EditableInput.vue'\n\nconst defaultColors = ['#4D4D4D', '#999999', '#FFFFFF', '#F44E3B', '#FE9200', '#FCDC00', '#DBDF00', '#A4DD00', '#68CCCA', '#73D8FF', '#AEA1FF', '#FDA1FF', '#333333', '#808080', '#CCCCCC', '#D33115', '#E27300', '#FCC400', '#B0BC00', '#68BC00', '#16A5A5', '#009CE0', '#7B64FF', '#FA28FF', '#000000', '#666666', '#B3B3B3', '#9F0500', '#C45100', '#FB9E00', '#808900', '#194D33', '#0C797D', '#0062B1', '#653294', '#AB149E'];\n/* harmony default export */ var Compactvue_type_script_lang_js = ({\n name: 'Compact',\n mixins: [color],\n props: {\n palette: {\n type: Array,\n\n default() {\n return defaultColors;\n }\n\n }\n },\n components: {// 'ed-in': editableInput\n },\n computed: {\n pick() {\n return this.colors.hex.toUpperCase();\n }\n\n },\n methods: {\n handlerClick(c) {\n this.colorChange({\n hex: c,\n source: 'hex'\n });\n }\n\n }\n});\n;// CONCATENATED MODULE: ./src/components/Compact.vue?vue&type=script&lang=js\n \n// EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/Compact.vue?vue&type=style&index=0&id=1fcf22b8&lang=css\nvar Compactvue_type_style_index_0_id_1fcf22b8_lang_css = __webpack_require__(325);\n;// CONCATENATED MODULE: ./src/components/Compact.vue?vue&type=style&index=0&id=1fcf22b8&lang=css\n\n// EXTERNAL MODULE: ./node_modules/vue-loader/dist/exportHelper.js\nvar exportHelper = __webpack_require__(89);\n;// CONCATENATED MODULE: ./src/components/Compact.vue\n\n\n\n\n;\n\n\nconst __exports__ = /*#__PURE__*/(0,exportHelper/* default */.Z)(Compactvue_type_script_lang_js, [['render',render]])\n\n/* harmony default export */ var Compact = (__exports__);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/Grayscale.vue?vue&type=template&id=5742c0cf\n\nconst Grayscalevue_type_template_id_5742c0cf_hoisted_1 = {\n role: \"application\",\n \"aria-label\": \"Grayscale color picker\",\n class: \"vc-grayscale\"\n};\nconst Grayscalevue_type_template_id_5742c0cf_hoisted_2 = {\n class: \"vc-grayscale-colors\",\n role: \"listbox\"\n};\nconst Grayscalevue_type_template_id_5742c0cf_hoisted_3 = [\"aria-label\", \"aria-selected\", \"onClick\"];\nconst Grayscalevue_type_template_id_5742c0cf_hoisted_4 = {\n class: \"vc-grayscale-dot\"\n};\nfunction Grayscalevue_type_template_id_5742c0cf_render(_ctx, _cache, $props, $setup, $data, $options) {\n return (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", Grayscalevue_type_template_id_5742c0cf_hoisted_1, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"ul\", Grayscalevue_type_template_id_5742c0cf_hoisted_2, [((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(true), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.Fragment, null, (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.renderList)(_ctx.paletteUpperCase($props.palette), c => {\n return (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"li\", {\n role: \"option\",\n \"aria-label\": 'Color:' + c,\n \"aria-selected\": c === $options.pick,\n key: c,\n class: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeClass)([\"vc-grayscale-color-item\", {\n 'vc-grayscale-color-item--white': c == '#FFFFFF'\n }]),\n style: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeStyle)({\n background: c\n }),\n onClick: $event => $options.handlerClick(c)\n }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.withDirectives)((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Grayscalevue_type_template_id_5742c0cf_hoisted_4, null, 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.vShow, c === $options.pick]])], 14, Grayscalevue_type_template_id_5742c0cf_hoisted_3);\n }), 128))])]);\n}\n;// CONCATENATED MODULE: ./src/components/Grayscale.vue?vue&type=template&id=5742c0cf\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/Grayscale.vue?vue&type=script&lang=js\n\nconst Grayscalevue_type_script_lang_js_defaultColors = ['#FFFFFF', '#F2F2F2', '#E6E6E6', '#D9D9D9', '#CCCCCC', '#BFBFBF', '#B3B3B3', '#A6A6A6', '#999999', '#8C8C8C', '#808080', '#737373', '#666666', '#595959', '#4D4D4D', '#404040', '#333333', '#262626', '#0D0D0D', '#000000'];\n/* harmony default export */ var Grayscalevue_type_script_lang_js = ({\n name: 'Grayscale',\n mixins: [color],\n props: {\n palette: {\n type: Array,\n\n default() {\n return Grayscalevue_type_script_lang_js_defaultColors;\n }\n\n }\n },\n components: {},\n computed: {\n pick() {\n return this.colors.hex.toUpperCase();\n }\n\n },\n methods: {\n handlerClick(c) {\n this.colorChange({\n hex: c,\n source: 'hex'\n });\n }\n\n }\n});\n;// CONCATENATED MODULE: ./src/components/Grayscale.vue?vue&type=script&lang=js\n \n// EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/Grayscale.vue?vue&type=style&index=0&id=5742c0cf&lang=css\nvar Grayscalevue_type_style_index_0_id_5742c0cf_lang_css = __webpack_require__(5208);\n;// CONCATENATED MODULE: ./src/components/Grayscale.vue?vue&type=style&index=0&id=5742c0cf&lang=css\n\n;// CONCATENATED MODULE: ./src/components/Grayscale.vue\n\n\n\n\n;\n\n\nconst Grayscale_exports_ = /*#__PURE__*/(0,exportHelper/* default */.Z)(Grayscalevue_type_script_lang_js, [['render',Grayscalevue_type_template_id_5742c0cf_render]])\n\n/* harmony default export */ var Grayscale = (Grayscale_exports_);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/Material.vue?vue&type=template&id=6dd2ea40\n\nconst Materialvue_type_template_id_6dd2ea40_hoisted_1 = {\n role: \"application\",\n \"aria-label\": \"Material color picker\",\n class: \"vc-material\"\n};\nconst Materialvue_type_template_id_6dd2ea40_hoisted_2 = {\n class: \"vc-material-split\"\n};\nconst Materialvue_type_template_id_6dd2ea40_hoisted_3 = {\n class: \"vc-material-third\"\n};\nconst Materialvue_type_template_id_6dd2ea40_hoisted_4 = {\n class: \"vc-material-third\"\n};\nconst _hoisted_5 = {\n class: \"vc-material-third\"\n};\nfunction Materialvue_type_template_id_6dd2ea40_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_ed_in = (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.resolveComponent)(\"ed-in\");\n\n return (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", Materialvue_type_template_id_6dd2ea40_hoisted_1, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_ed_in, {\n class: \"vc-material-hex\",\n label: \"hex\",\n modelValue: _ctx.colors.hex,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => _ctx.colors.hex = $event),\n style: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeStyle)({\n borderColor: _ctx.colors.hex\n }),\n onChange: $options.onChange\n }, null, 8, [\"modelValue\", \"style\", \"onChange\"]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Materialvue_type_template_id_6dd2ea40_hoisted_2, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Materialvue_type_template_id_6dd2ea40_hoisted_3, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_ed_in, {\n label: \"r\",\n modelValue: _ctx.colors.rgba.r,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => _ctx.colors.rgba.r = $event),\n onChange: $options.onChange\n }, null, 8, [\"modelValue\", \"onChange\"])]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Materialvue_type_template_id_6dd2ea40_hoisted_4, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_ed_in, {\n label: \"g\",\n modelValue: _ctx.colors.rgba.g,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => _ctx.colors.rgba.g = $event),\n onChange: $options.onChange\n }, null, 8, [\"modelValue\", \"onChange\"])]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", _hoisted_5, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_ed_in, {\n label: \"b\",\n modelValue: _ctx.colors.rgba.b,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => _ctx.colors.rgba.b = $event),\n onChange: $options.onChange\n }, null, 8, [\"modelValue\", \"onChange\"])])])]);\n}\n;// CONCATENATED MODULE: ./src/components/Material.vue?vue&type=template&id=6dd2ea40\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/common/EditableInput.vue?vue&type=template&id=56925d0b\n\nconst EditableInputvue_type_template_id_56925d0b_hoisted_1 = {\n class: \"vc-editable-input\"\n};\nconst EditableInputvue_type_template_id_56925d0b_hoisted_2 = [\"aria-labelledby\"];\nconst EditableInputvue_type_template_id_56925d0b_hoisted_3 = [\"for\", \"id\"];\nconst EditableInputvue_type_template_id_56925d0b_hoisted_4 = {\n class: \"vc-input__desc\"\n};\nfunction EditableInputvue_type_template_id_56925d0b_render(_ctx, _cache, $props, $setup, $data, $options) {\n return (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", EditableInputvue_type_template_id_56925d0b_hoisted_1, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.withDirectives)((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"input\", {\n \"aria-labelledby\": $options.labelId,\n class: \"vc-input__input\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $options.val = $event),\n onKeydown: _cache[1] || (_cache[1] = (...args) => $options.handleKeyDown && $options.handleKeyDown(...args)),\n onInput: _cache[2] || (_cache[2] = (...args) => $options.update && $options.update(...args)),\n ref: \"input\"\n }, null, 40, EditableInputvue_type_template_id_56925d0b_hoisted_2), [[external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.vModelText, $options.val]]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"span\", {\n for: $props.label,\n class: \"vc-input__label\",\n id: $options.labelId\n }, (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.toDisplayString)($options.labelSpanText), 9, EditableInputvue_type_template_id_56925d0b_hoisted_3), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"span\", EditableInputvue_type_template_id_56925d0b_hoisted_4, (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.toDisplayString)($props.desc), 1)]);\n}\n;// CONCATENATED MODULE: ./src/components/common/EditableInput.vue?vue&type=template&id=56925d0b\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/common/EditableInput.vue?vue&type=script&lang=js\n/* harmony default export */ var EditableInputvue_type_script_lang_js = ({\n name: 'editableInput',\n props: {\n label: String,\n labelText: String,\n desc: String,\n modelValue: [String, Number],\n max: Number,\n min: Number,\n arrowOffset: {\n type: Number,\n default: 1\n }\n },\n computed: {\n val: {\n get() {\n return this.modelValue;\n },\n\n set(v) {\n // TODO: min\n if (!(this.max === undefined) && +v > this.max) {\n this.$refs.input.value = this.max;\n } else {\n return v;\n }\n }\n\n },\n\n labelId() {\n return `input__label__${this.label}__${Math.random().toString().slice(2, 5)}`;\n },\n\n labelSpanText() {\n return this.labelText || this.label;\n }\n\n },\n methods: {\n update(e) {\n this.handleChange(e.target.value);\n },\n\n handleChange(newVal) {\n const data = {};\n data[this.label] = newVal;\n\n if (data.hex === undefined && data['#'] === undefined) {\n this.$emit('change', data);\n } else if (newVal.length > 5) {\n this.$emit('change', data);\n }\n },\n\n // **** unused\n // handleBlur (e) {\n // console.log(e)\n // },\n handleKeyDown(e) {\n let val = this.val;\n const number = Number(val);\n\n if (number) {\n const amount = this.arrowOffset || 1; // Up\n\n if (e.keyCode === 38) {\n val = number + amount;\n this.handleChange(val);\n e.preventDefault();\n } // Down\n\n\n if (e.keyCode === 40) {\n val = number - amount;\n this.handleChange(val);\n e.preventDefault();\n }\n }\n } // **** unused\n // handleDrag (e) {\n // console.log(e)\n // },\n // handleMouseDown (e) {\n // console.log(e)\n // }\n\n\n }\n});\n;// CONCATENATED MODULE: ./src/components/common/EditableInput.vue?vue&type=script&lang=js\n \n// EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/common/EditableInput.vue?vue&type=style&index=0&id=56925d0b&lang=css\nvar EditableInputvue_type_style_index_0_id_56925d0b_lang_css = __webpack_require__(1979);\n;// CONCATENATED MODULE: ./src/components/common/EditableInput.vue?vue&type=style&index=0&id=56925d0b&lang=css\n\n;// CONCATENATED MODULE: ./src/components/common/EditableInput.vue\n\n\n\n\n;\n\n\nconst EditableInput_exports_ = /*#__PURE__*/(0,exportHelper/* default */.Z)(EditableInputvue_type_script_lang_js, [['render',EditableInputvue_type_template_id_56925d0b_render]])\n\n/* harmony default export */ var EditableInput = (EditableInput_exports_);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/Material.vue?vue&type=script&lang=js\n\n\n/* harmony default export */ var Materialvue_type_script_lang_js = ({\n name: 'Material',\n mixins: [color],\n components: {\n 'ed-in': EditableInput\n },\n methods: {\n onChange(data) {\n if (!data) {\n return;\n }\n\n if (data.hex) {\n this.isValidHex(data.hex) && this.colorChange({\n hex: data.hex,\n source: 'hex'\n });\n } else if (data.r || data.g || data.b) {\n this.colorChange({\n r: data.r || this.colors.rgba.r,\n g: data.g || this.colors.rgba.g,\n b: data.b || this.colors.rgba.b,\n a: data.a || this.colors.rgba.a,\n source: 'rgba'\n });\n }\n }\n\n }\n});\n;// CONCATENATED MODULE: ./src/components/Material.vue?vue&type=script&lang=js\n \n// EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/Material.vue?vue&type=style&index=0&id=6dd2ea40&lang=css\nvar Materialvue_type_style_index_0_id_6dd2ea40_lang_css = __webpack_require__(1425);\n;// CONCATENATED MODULE: ./src/components/Material.vue?vue&type=style&index=0&id=6dd2ea40&lang=css\n\n;// CONCATENATED MODULE: ./src/components/Material.vue\n\n\n\n\n;\n\n\nconst Material_exports_ = /*#__PURE__*/(0,exportHelper/* default */.Z)(Materialvue_type_script_lang_js, [['render',Materialvue_type_template_id_6dd2ea40_render]])\n\n/* harmony default export */ var Material = (Material_exports_);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/Slider.vue?vue&type=template&id=c87f38e0\n\nconst Slidervue_type_template_id_c87f38e0_hoisted_1 = {\n role: \"application\",\n \"aria-label\": \"Slider color picker\",\n class: \"vc-slider\"\n};\nconst Slidervue_type_template_id_c87f38e0_hoisted_2 = {\n class: \"vc-slider-hue-warp\"\n};\nconst Slidervue_type_template_id_c87f38e0_hoisted_3 = {\n class: \"vc-slider-swatches\",\n role: \"group\"\n};\nconst Slidervue_type_template_id_c87f38e0_hoisted_4 = [\"data-index\", \"aria-label\", \"onClick\"];\nfunction Slidervue_type_template_id_c87f38e0_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_hue = (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.resolveComponent)(\"hue\");\n\n return (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", Slidervue_type_template_id_c87f38e0_hoisted_1, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Slidervue_type_template_id_c87f38e0_hoisted_2, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_hue, {\n modelValue: _ctx.colors,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => _ctx.colors = $event),\n onChange: $options.hueChange\n }, null, 8, [\"modelValue\", \"onChange\"])]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Slidervue_type_template_id_c87f38e0_hoisted_3, [((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(true), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.Fragment, null, (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.renderList)($options.normalizedSwatches, (swatch, index) => {\n return (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", {\n class: \"vc-slider-swatch\",\n key: index,\n \"data-index\": index,\n \"aria-label\": 'color:' + _ctx.colors.hex,\n role: \"button\",\n onClick: $event => $options.handleSwClick(index, swatch)\n }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", {\n class: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeClass)([\"vc-slider-swatch-picker\", {\n 'vc-slider-swatch-picker--active': $options.isActive(swatch, index),\n 'vc-slider-swatch-picker--white': swatch.l === 1\n }]),\n style: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeStyle)({\n background: 'hsl(' + _ctx.colors.hsl.h + ', ' + swatch.s * 100 + '%, ' + swatch.l * 100 + '%)'\n })\n }, null, 6)], 8, Slidervue_type_template_id_c87f38e0_hoisted_4);\n }), 128))])]);\n}\n;// CONCATENATED MODULE: ./src/components/Slider.vue?vue&type=template&id=c87f38e0\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/common/Hue.vue?vue&type=template&id=d0fd3296\n\nconst Huevue_type_template_id_d0fd3296_hoisted_1 = [\"aria-valuenow\"];\n\nconst Huevue_type_template_id_d0fd3296_hoisted_2 = /*#__PURE__*/(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", {\n class: \"vc-hue-picker\"\n}, null, -1);\n\nconst Huevue_type_template_id_d0fd3296_hoisted_3 = [Huevue_type_template_id_d0fd3296_hoisted_2];\nfunction Huevue_type_template_id_d0fd3296_render(_ctx, _cache, $props, $setup, $data, $options) {\n return (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", {\n class: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeClass)(['vc-hue', $options.directionClass])\n }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", {\n class: \"vc-hue-container\",\n role: \"slider\",\n \"aria-valuenow\": $options.colors.hsl.h,\n \"aria-valuemin\": \"0\",\n \"aria-valuemax\": \"360\",\n ref: \"container\",\n onMousedown: _cache[0] || (_cache[0] = (...args) => $options.handleMouseDown && $options.handleMouseDown(...args)),\n onTouchmove: _cache[1] || (_cache[1] = (...args) => $options.handleChange && $options.handleChange(...args)),\n onTouchstart: _cache[2] || (_cache[2] = (...args) => $options.handleChange && $options.handleChange(...args))\n }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", {\n class: \"vc-hue-pointer\",\n style: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeStyle)({\n top: $options.pointerTop,\n left: $options.pointerLeft\n }),\n role: \"presentation\"\n }, Huevue_type_template_id_d0fd3296_hoisted_3, 4)], 40, Huevue_type_template_id_d0fd3296_hoisted_1)], 2);\n}\n;// CONCATENATED MODULE: ./src/components/common/Hue.vue?vue&type=template&id=d0fd3296\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/common/Hue.vue?vue&type=script&lang=js\n/* harmony default export */ var Huevue_type_script_lang_js = ({\n name: 'Hue',\n props: {\n modelValue: Object,\n direction: {\n type: String,\n // [horizontal | vertical]\n default: 'horizontal'\n }\n },\n\n data() {\n return {\n oldHue: 0,\n pullDirection: ''\n };\n },\n\n computed: {\n colors() {\n const h = this.modelValue.hsl.h; // vue/no-side-effects-in-computed-properties\n\n /* eslint-disable */\n\n if (h !== 0 && h - this.oldHue > 0) this.pullDirection = 'right';\n if (h !== 0 && h - this.oldHue < 0) this.pullDirection = 'left';\n this.oldHue = h;\n /* eslint-enable */\n\n return this.modelValue;\n },\n\n directionClass() {\n return {\n 'vc-hue--horizontal': this.direction === 'horizontal',\n 'vc-hue--vertical': this.direction === 'vertical'\n };\n },\n\n pointerTop() {\n if (this.direction === 'vertical') {\n if (this.colors.hsl.h === 0 && this.pullDirection === 'right') return 0;\n return -(this.colors.hsl.h * 100 / 360) + 100 + '%';\n } else {\n return 0;\n }\n },\n\n pointerLeft() {\n if (this.direction === 'vertical') {\n return 0;\n } else {\n if (this.colors.hsl.h === 0 && this.pullDirection === 'right') return '100%';\n return this.colors.hsl.h * 100 / 360 + '%';\n }\n }\n\n },\n methods: {\n handleChange(e, skip) {\n !skip && e.preventDefault();\n const container = this.$refs.container;\n\n if (!container) {\n // for some edge cases, container may not exist. see #220\n return;\n }\n\n const containerWidth = container.clientWidth;\n const containerHeight = container.clientHeight;\n const xOffset = container.getBoundingClientRect().left + window.pageXOffset;\n const yOffset = container.getBoundingClientRect().top + window.pageYOffset;\n const pageX = e.pageX || (e.touches ? e.touches[0].pageX : 0);\n const pageY = e.pageY || (e.touches ? e.touches[0].pageY : 0);\n const left = pageX - xOffset;\n const top = pageY - yOffset;\n let h;\n let percent;\n\n if (this.direction === 'vertical') {\n if (top < 0) {\n h = 360;\n } else if (top > containerHeight) {\n h = 0;\n } else {\n percent = -(top * 100 / containerHeight) + 100;\n h = 360 * percent / 100;\n }\n\n if (this.colors.hsl.h !== h) {\n this.$emit('change', {\n h: h,\n s: this.colors.hsl.s,\n l: this.colors.hsl.l,\n a: this.colors.hsl.a,\n source: 'hsl'\n });\n }\n } else {\n if (left < 0) {\n h = 0;\n } else if (left > containerWidth) {\n h = 360;\n } else {\n percent = left * 100 / containerWidth;\n h = 360 * percent / 100;\n }\n\n if (this.colors.hsl.h !== h) {\n this.$emit('change', {\n h: h,\n s: this.colors.hsl.s,\n l: this.colors.hsl.l,\n a: this.colors.hsl.a,\n source: 'hsl'\n });\n }\n }\n },\n\n handleMouseDown(e) {\n this.handleChange(e, true);\n window.addEventListener('mousemove', this.handleChange);\n window.addEventListener('mouseup', this.handleMouseUp);\n },\n\n handleMouseUp(e) {\n this.unbindEventListeners();\n },\n\n unbindEventListeners() {\n window.removeEventListener('mousemove', this.handleChange);\n window.removeEventListener('mouseup', this.handleMouseUp);\n }\n\n }\n});\n;// CONCATENATED MODULE: ./src/components/common/Hue.vue?vue&type=script&lang=js\n \n// EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/common/Hue.vue?vue&type=style&index=0&id=d0fd3296&lang=css\nvar Huevue_type_style_index_0_id_d0fd3296_lang_css = __webpack_require__(6547);\n;// CONCATENATED MODULE: ./src/components/common/Hue.vue?vue&type=style&index=0&id=d0fd3296&lang=css\n\n;// CONCATENATED MODULE: ./src/components/common/Hue.vue\n\n\n\n\n;\n\n\nconst Hue_exports_ = /*#__PURE__*/(0,exportHelper/* default */.Z)(Huevue_type_script_lang_js, [['render',Huevue_type_template_id_d0fd3296_render]])\n\n/* harmony default export */ var Hue = (Hue_exports_);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/Slider.vue?vue&type=script&lang=js\n\n\nconst DEFAULT_SATURATION = 0.5;\n/* harmony default export */ var Slidervue_type_script_lang_js = ({\n name: 'Slider',\n mixins: [color],\n props: {\n swatches: {\n type: Array,\n\n default() {\n // also accepts: ['.80', '.65', '.50', '.35', '.20']\n return [{\n s: DEFAULT_SATURATION,\n l: 0.8\n }, {\n s: DEFAULT_SATURATION,\n l: 0.65\n }, {\n s: DEFAULT_SATURATION,\n l: 0.5\n }, {\n s: DEFAULT_SATURATION,\n l: 0.35\n }, {\n s: DEFAULT_SATURATION,\n l: 0.2\n }];\n }\n\n }\n },\n components: {\n hue: Hue\n },\n computed: {\n normalizedSwatches() {\n const swatches = this.swatches;\n return swatches.map(swatch => {\n // to be compatible with another data format ['.80', '.65', '.50', '.35', '.20']\n if (typeof swatch !== 'object') {\n return {\n s: DEFAULT_SATURATION,\n l: swatch\n };\n }\n\n return swatch;\n });\n }\n\n },\n methods: {\n isActive(swatch, index) {\n const hsl = this.colors.hsl;\n\n if (hsl.l === 1 && swatch.l === 1) {\n return true;\n }\n\n if (hsl.l === 0 && swatch.l === 0) {\n return true;\n }\n\n return Math.abs(hsl.l - swatch.l) < 0.01 && Math.abs(hsl.s - swatch.s) < 0.01;\n },\n\n hueChange(data) {\n this.colorChange(data);\n },\n\n handleSwClick(index, swatch) {\n this.colorChange({\n h: this.colors.hsl.h,\n s: swatch.s,\n l: swatch.l,\n source: 'hsl'\n });\n }\n\n }\n});\n;// CONCATENATED MODULE: ./src/components/Slider.vue?vue&type=script&lang=js\n \n// EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/Slider.vue?vue&type=style&index=0&id=c87f38e0&lang=css\nvar Slidervue_type_style_index_0_id_c87f38e0_lang_css = __webpack_require__(8016);\n;// CONCATENATED MODULE: ./src/components/Slider.vue?vue&type=style&index=0&id=c87f38e0&lang=css\n\n;// CONCATENATED MODULE: ./src/components/Slider.vue\n\n\n\n\n;\n\n\nconst Slider_exports_ = /*#__PURE__*/(0,exportHelper/* default */.Z)(Slidervue_type_script_lang_js, [['render',Slidervue_type_template_id_c87f38e0_render]])\n\n/* harmony default export */ var Slider = (Slider_exports_);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/Swatches.vue?vue&type=template&id=3e9acefe\n\nconst Swatchesvue_type_template_id_3e9acefe_hoisted_1 = [\"data-pick\"];\nconst Swatchesvue_type_template_id_3e9acefe_hoisted_2 = {\n class: \"vc-swatches-box\",\n role: \"listbox\"\n};\nconst Swatchesvue_type_template_id_3e9acefe_hoisted_3 = [\"aria-label\", \"aria-selected\", \"data-color\", \"onClick\"];\nconst Swatchesvue_type_template_id_3e9acefe_hoisted_4 = {\n class: \"vc-swatches-pick\"\n};\n\nconst Swatchesvue_type_template_id_3e9acefe_hoisted_5 = /*#__PURE__*/(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"svg\", {\n style: {\n \"width\": \"24px\",\n \"height\": \"24px\"\n },\n viewBox: \"0 0 24 24\"\n}, [/*#__PURE__*/(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"path\", {\n d: \"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"\n})], -1);\n\nconst _hoisted_6 = [Swatchesvue_type_template_id_3e9acefe_hoisted_5];\nfunction Swatchesvue_type_template_id_3e9acefe_render(_ctx, _cache, $props, $setup, $data, $options) {\n return (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", {\n role: \"application\",\n \"aria-label\": \"Swatches color picker\",\n class: \"vc-swatches\",\n \"data-pick\": $options.pick\n }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Swatchesvue_type_template_id_3e9acefe_hoisted_2, [((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(true), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.Fragment, null, (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.renderList)($props.palette, (group, $idx) => {\n return (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", {\n class: \"vc-swatches-color-group\",\n key: $idx\n }, [((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(true), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.Fragment, null, (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.renderList)(group, c => {\n return (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", {\n class: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeClass)(['vc-swatches-color-it', {\n 'vc-swatches-color--white': c === '#FFFFFF'\n }]),\n role: \"option\",\n \"aria-label\": 'Color:' + c,\n \"aria-selected\": $options.equal(c),\n key: c,\n \"data-color\": c,\n style: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeStyle)({\n background: c\n }),\n onClick: $event => $options.handlerClick(c)\n }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.withDirectives)((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Swatchesvue_type_template_id_3e9acefe_hoisted_4, _hoisted_6, 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.vShow, $options.equal(c)]])], 14, Swatchesvue_type_template_id_3e9acefe_hoisted_3);\n }), 128))]);\n }), 128))])], 8, Swatchesvue_type_template_id_3e9acefe_hoisted_1);\n}\n;// CONCATENATED MODULE: ./src/components/Swatches.vue?vue&type=template&id=3e9acefe\n\n;// CONCATENATED MODULE: ./node_modules/material-colors/dist/colors.es2015.js\nvar red = {\n \"50\": \"#ffebee\",\n \"100\": \"#ffcdd2\",\n \"200\": \"#ef9a9a\",\n \"300\": \"#e57373\",\n \"400\": \"#ef5350\",\n \"500\": \"#f44336\",\n \"600\": \"#e53935\",\n \"700\": \"#d32f2f\",\n \"800\": \"#c62828\",\n \"900\": \"#b71c1c\",\n \"a100\": \"#ff8a80\",\n \"a200\": \"#ff5252\",\n \"a400\": \"#ff1744\",\n \"a700\": \"#d50000\"\n};\nvar pink = {\n \"50\": \"#fce4ec\",\n \"100\": \"#f8bbd0\",\n \"200\": \"#f48fb1\",\n \"300\": \"#f06292\",\n \"400\": \"#ec407a\",\n \"500\": \"#e91e63\",\n \"600\": \"#d81b60\",\n \"700\": \"#c2185b\",\n \"800\": \"#ad1457\",\n \"900\": \"#880e4f\",\n \"a100\": \"#ff80ab\",\n \"a200\": \"#ff4081\",\n \"a400\": \"#f50057\",\n \"a700\": \"#c51162\"\n};\nvar purple = {\n \"50\": \"#f3e5f5\",\n \"100\": \"#e1bee7\",\n \"200\": \"#ce93d8\",\n \"300\": \"#ba68c8\",\n \"400\": \"#ab47bc\",\n \"500\": \"#9c27b0\",\n \"600\": \"#8e24aa\",\n \"700\": \"#7b1fa2\",\n \"800\": \"#6a1b9a\",\n \"900\": \"#4a148c\",\n \"a100\": \"#ea80fc\",\n \"a200\": \"#e040fb\",\n \"a400\": \"#d500f9\",\n \"a700\": \"#aa00ff\"\n};\nvar deepPurple = {\n \"50\": \"#ede7f6\",\n \"100\": \"#d1c4e9\",\n \"200\": \"#b39ddb\",\n \"300\": \"#9575cd\",\n \"400\": \"#7e57c2\",\n \"500\": \"#673ab7\",\n \"600\": \"#5e35b1\",\n \"700\": \"#512da8\",\n \"800\": \"#4527a0\",\n \"900\": \"#311b92\",\n \"a100\": \"#b388ff\",\n \"a200\": \"#7c4dff\",\n \"a400\": \"#651fff\",\n \"a700\": \"#6200ea\"\n};\nvar indigo = {\n \"50\": \"#e8eaf6\",\n \"100\": \"#c5cae9\",\n \"200\": \"#9fa8da\",\n \"300\": \"#7986cb\",\n \"400\": \"#5c6bc0\",\n \"500\": \"#3f51b5\",\n \"600\": \"#3949ab\",\n \"700\": \"#303f9f\",\n \"800\": \"#283593\",\n \"900\": \"#1a237e\",\n \"a100\": \"#8c9eff\",\n \"a200\": \"#536dfe\",\n \"a400\": \"#3d5afe\",\n \"a700\": \"#304ffe\"\n};\nvar blue = {\n \"50\": \"#e3f2fd\",\n \"100\": \"#bbdefb\",\n \"200\": \"#90caf9\",\n \"300\": \"#64b5f6\",\n \"400\": \"#42a5f5\",\n \"500\": \"#2196f3\",\n \"600\": \"#1e88e5\",\n \"700\": \"#1976d2\",\n \"800\": \"#1565c0\",\n \"900\": \"#0d47a1\",\n \"a100\": \"#82b1ff\",\n \"a200\": \"#448aff\",\n \"a400\": \"#2979ff\",\n \"a700\": \"#2962ff\"\n};\nvar lightBlue = {\n \"50\": \"#e1f5fe\",\n \"100\": \"#b3e5fc\",\n \"200\": \"#81d4fa\",\n \"300\": \"#4fc3f7\",\n \"400\": \"#29b6f6\",\n \"500\": \"#03a9f4\",\n \"600\": \"#039be5\",\n \"700\": \"#0288d1\",\n \"800\": \"#0277bd\",\n \"900\": \"#01579b\",\n \"a100\": \"#80d8ff\",\n \"a200\": \"#40c4ff\",\n \"a400\": \"#00b0ff\",\n \"a700\": \"#0091ea\"\n};\nvar cyan = {\n \"50\": \"#e0f7fa\",\n \"100\": \"#b2ebf2\",\n \"200\": \"#80deea\",\n \"300\": \"#4dd0e1\",\n \"400\": \"#26c6da\",\n \"500\": \"#00bcd4\",\n \"600\": \"#00acc1\",\n \"700\": \"#0097a7\",\n \"800\": \"#00838f\",\n \"900\": \"#006064\",\n \"a100\": \"#84ffff\",\n \"a200\": \"#18ffff\",\n \"a400\": \"#00e5ff\",\n \"a700\": \"#00b8d4\"\n};\nvar teal = {\n \"50\": \"#e0f2f1\",\n \"100\": \"#b2dfdb\",\n \"200\": \"#80cbc4\",\n \"300\": \"#4db6ac\",\n \"400\": \"#26a69a\",\n \"500\": \"#009688\",\n \"600\": \"#00897b\",\n \"700\": \"#00796b\",\n \"800\": \"#00695c\",\n \"900\": \"#004d40\",\n \"a100\": \"#a7ffeb\",\n \"a200\": \"#64ffda\",\n \"a400\": \"#1de9b6\",\n \"a700\": \"#00bfa5\"\n};\nvar green = {\n \"50\": \"#e8f5e9\",\n \"100\": \"#c8e6c9\",\n \"200\": \"#a5d6a7\",\n \"300\": \"#81c784\",\n \"400\": \"#66bb6a\",\n \"500\": \"#4caf50\",\n \"600\": \"#43a047\",\n \"700\": \"#388e3c\",\n \"800\": \"#2e7d32\",\n \"900\": \"#1b5e20\",\n \"a100\": \"#b9f6ca\",\n \"a200\": \"#69f0ae\",\n \"a400\": \"#00e676\",\n \"a700\": \"#00c853\"\n};\nvar lightGreen = {\n \"50\": \"#f1f8e9\",\n \"100\": \"#dcedc8\",\n \"200\": \"#c5e1a5\",\n \"300\": \"#aed581\",\n \"400\": \"#9ccc65\",\n \"500\": \"#8bc34a\",\n \"600\": \"#7cb342\",\n \"700\": \"#689f38\",\n \"800\": \"#558b2f\",\n \"900\": \"#33691e\",\n \"a100\": \"#ccff90\",\n \"a200\": \"#b2ff59\",\n \"a400\": \"#76ff03\",\n \"a700\": \"#64dd17\"\n};\nvar lime = {\n \"50\": \"#f9fbe7\",\n \"100\": \"#f0f4c3\",\n \"200\": \"#e6ee9c\",\n \"300\": \"#dce775\",\n \"400\": \"#d4e157\",\n \"500\": \"#cddc39\",\n \"600\": \"#c0ca33\",\n \"700\": \"#afb42b\",\n \"800\": \"#9e9d24\",\n \"900\": \"#827717\",\n \"a100\": \"#f4ff81\",\n \"a200\": \"#eeff41\",\n \"a400\": \"#c6ff00\",\n \"a700\": \"#aeea00\"\n};\nvar yellow = {\n \"50\": \"#fffde7\",\n \"100\": \"#fff9c4\",\n \"200\": \"#fff59d\",\n \"300\": \"#fff176\",\n \"400\": \"#ffee58\",\n \"500\": \"#ffeb3b\",\n \"600\": \"#fdd835\",\n \"700\": \"#fbc02d\",\n \"800\": \"#f9a825\",\n \"900\": \"#f57f17\",\n \"a100\": \"#ffff8d\",\n \"a200\": \"#ffff00\",\n \"a400\": \"#ffea00\",\n \"a700\": \"#ffd600\"\n};\nvar amber = {\n \"50\": \"#fff8e1\",\n \"100\": \"#ffecb3\",\n \"200\": \"#ffe082\",\n \"300\": \"#ffd54f\",\n \"400\": \"#ffca28\",\n \"500\": \"#ffc107\",\n \"600\": \"#ffb300\",\n \"700\": \"#ffa000\",\n \"800\": \"#ff8f00\",\n \"900\": \"#ff6f00\",\n \"a100\": \"#ffe57f\",\n \"a200\": \"#ffd740\",\n \"a400\": \"#ffc400\",\n \"a700\": \"#ffab00\"\n};\nvar orange = {\n \"50\": \"#fff3e0\",\n \"100\": \"#ffe0b2\",\n \"200\": \"#ffcc80\",\n \"300\": \"#ffb74d\",\n \"400\": \"#ffa726\",\n \"500\": \"#ff9800\",\n \"600\": \"#fb8c00\",\n \"700\": \"#f57c00\",\n \"800\": \"#ef6c00\",\n \"900\": \"#e65100\",\n \"a100\": \"#ffd180\",\n \"a200\": \"#ffab40\",\n \"a400\": \"#ff9100\",\n \"a700\": \"#ff6d00\"\n};\nvar deepOrange = {\n \"50\": \"#fbe9e7\",\n \"100\": \"#ffccbc\",\n \"200\": \"#ffab91\",\n \"300\": \"#ff8a65\",\n \"400\": \"#ff7043\",\n \"500\": \"#ff5722\",\n \"600\": \"#f4511e\",\n \"700\": \"#e64a19\",\n \"800\": \"#d84315\",\n \"900\": \"#bf360c\",\n \"a100\": \"#ff9e80\",\n \"a200\": \"#ff6e40\",\n \"a400\": \"#ff3d00\",\n \"a700\": \"#dd2c00\"\n};\nvar brown = {\n \"50\": \"#efebe9\",\n \"100\": \"#d7ccc8\",\n \"200\": \"#bcaaa4\",\n \"300\": \"#a1887f\",\n \"400\": \"#8d6e63\",\n \"500\": \"#795548\",\n \"600\": \"#6d4c41\",\n \"700\": \"#5d4037\",\n \"800\": \"#4e342e\",\n \"900\": \"#3e2723\"\n};\nvar grey = {\n \"50\": \"#fafafa\",\n \"100\": \"#f5f5f5\",\n \"200\": \"#eeeeee\",\n \"300\": \"#e0e0e0\",\n \"400\": \"#bdbdbd\",\n \"500\": \"#9e9e9e\",\n \"600\": \"#757575\",\n \"700\": \"#616161\",\n \"800\": \"#424242\",\n \"900\": \"#212121\"\n};\nvar blueGrey = {\n \"50\": \"#eceff1\",\n \"100\": \"#cfd8dc\",\n \"200\": \"#b0bec5\",\n \"300\": \"#90a4ae\",\n \"400\": \"#78909c\",\n \"500\": \"#607d8b\",\n \"600\": \"#546e7a\",\n \"700\": \"#455a64\",\n \"800\": \"#37474f\",\n \"900\": \"#263238\"\n};\nvar darkText = {\n \"primary\": \"rgba(0, 0, 0, 0.87)\",\n \"secondary\": \"rgba(0, 0, 0, 0.54)\",\n \"disabled\": \"rgba(0, 0, 0, 0.38)\",\n \"dividers\": \"rgba(0, 0, 0, 0.12)\"\n};\nvar lightText = {\n \"primary\": \"rgba(255, 255, 255, 1)\",\n \"secondary\": \"rgba(255, 255, 255, 0.7)\",\n \"disabled\": \"rgba(255, 255, 255, 0.5)\",\n \"dividers\": \"rgba(255, 255, 255, 0.12)\"\n};\nvar darkIcons = {\n \"active\": \"rgba(0, 0, 0, 0.54)\",\n \"inactive\": \"rgba(0, 0, 0, 0.38)\"\n};\nvar lightIcons = {\n \"active\": \"rgba(255, 255, 255, 1)\",\n \"inactive\": \"rgba(255, 255, 255, 0.5)\"\n};\nvar white = \"#ffffff\";\nvar black = \"#000000\";\n/* harmony default export */ var colors_es2015 = ({\n red: red,\n pink: pink,\n purple: purple,\n deepPurple: deepPurple,\n indigo: indigo,\n blue: blue,\n lightBlue: lightBlue,\n cyan: cyan,\n teal: teal,\n green: green,\n lightGreen: lightGreen,\n lime: lime,\n yellow: yellow,\n amber: amber,\n orange: orange,\n deepOrange: deepOrange,\n brown: brown,\n grey: grey,\n blueGrey: blueGrey,\n darkText: darkText,\n lightText: lightText,\n darkIcons: darkIcons,\n lightIcons: lightIcons,\n white: white,\n black: black\n});\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/Swatches.vue?vue&type=script&lang=js\n\n\nconst colorMap = ['red', 'pink', 'purple', 'deepPurple', 'indigo', 'blue', 'lightBlue', 'cyan', 'teal', 'green', 'lightGreen', 'lime', 'yellow', 'amber', 'orange', 'deepOrange', 'brown', 'blueGrey', 'black'];\nconst colorLevel = ['900', '700', '500', '300', '100'];\n\nconst Swatchesvue_type_script_lang_js_defaultColors = (() => {\n const colors = [];\n colorMap.forEach(type => {\n let typeColor = [];\n\n if (type.toLowerCase() === 'black' || type.toLowerCase() === 'white') {\n typeColor = typeColor.concat(['#000000', '#FFFFFF']);\n } else {\n colorLevel.forEach(level => {\n const color = colors_es2015[type][level];\n typeColor.push(color.toUpperCase());\n });\n }\n\n colors.push(typeColor);\n });\n return colors;\n})();\n\n/* harmony default export */ var Swatchesvue_type_script_lang_js = ({\n name: 'Swatches',\n mixins: [color],\n props: {\n palette: {\n type: Array,\n\n default() {\n return Swatchesvue_type_script_lang_js_defaultColors;\n }\n\n }\n },\n computed: {\n pick() {\n return this.colors.hex;\n }\n\n },\n methods: {\n equal(color) {\n return color.toLowerCase() === this.colors.hex.toLowerCase();\n },\n\n handlerClick(c) {\n this.colorChange({\n hex: c,\n source: 'hex'\n });\n }\n\n }\n});\n;// CONCATENATED MODULE: ./src/components/Swatches.vue?vue&type=script&lang=js\n \n// EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/Swatches.vue?vue&type=style&index=0&id=3e9acefe&lang=css\nvar Swatchesvue_type_style_index_0_id_3e9acefe_lang_css = __webpack_require__(193);\n;// CONCATENATED MODULE: ./src/components/Swatches.vue?vue&type=style&index=0&id=3e9acefe&lang=css\n\n;// CONCATENATED MODULE: ./src/components/Swatches.vue\n\n\n\n\n;\n\n\nconst Swatches_exports_ = /*#__PURE__*/(0,exportHelper/* default */.Z)(Swatchesvue_type_script_lang_js, [['render',Swatchesvue_type_template_id_3e9acefe_render]])\n\n/* harmony default export */ var Swatches = (Swatches_exports_);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/Photoshop.vue?vue&type=template&id=9851ac8a\n\nconst Photoshopvue_type_template_id_9851ac8a_hoisted_1 = {\n role: \"heading\",\n class: \"vc-ps-head\"\n};\nconst Photoshopvue_type_template_id_9851ac8a_hoisted_2 = {\n class: \"vc-ps-body\"\n};\nconst Photoshopvue_type_template_id_9851ac8a_hoisted_3 = {\n class: \"vc-ps-saturation-wrap\"\n};\nconst Photoshopvue_type_template_id_9851ac8a_hoisted_4 = {\n class: \"vc-ps-hue-wrap\"\n};\n\nconst Photoshopvue_type_template_id_9851ac8a_hoisted_5 = /*#__PURE__*/(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", {\n class: \"vc-ps-hue-pointer\"\n}, [/*#__PURE__*/(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"i\", {\n class: \"vc-ps-hue-pointer--left\"\n}), /*#__PURE__*/(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"i\", {\n class: \"vc-ps-hue-pointer--right\"\n})], -1);\n\nconst Photoshopvue_type_template_id_9851ac8a_hoisted_6 = {\n class: \"vc-ps-previews\"\n};\nconst _hoisted_7 = {\n class: \"vc-ps-previews__label\"\n};\nconst _hoisted_8 = {\n class: \"vc-ps-previews__swatches\"\n};\nconst _hoisted_9 = [\"aria-label\"];\nconst _hoisted_10 = [\"aria-label\"];\nconst _hoisted_11 = {\n class: \"vc-ps-previews__label\"\n};\nconst _hoisted_12 = {\n key: 0,\n class: \"vc-ps-actions\"\n};\nconst _hoisted_13 = [\"aria-label\"];\nconst _hoisted_14 = [\"aria-label\"];\nconst _hoisted_15 = {\n class: \"vc-ps-fields\"\n};\n\nconst _hoisted_16 = /*#__PURE__*/(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", {\n class: \"vc-ps-fields__divider\"\n}, null, -1);\n\nconst _hoisted_17 = /*#__PURE__*/(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", {\n class: \"vc-ps-fields__divider\"\n}, null, -1);\n\nfunction Photoshopvue_type_template_id_9851ac8a_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_saturation = (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.resolveComponent)(\"saturation\");\n\n const _component_hue = (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.resolveComponent)(\"hue\");\n\n const _component_ed_in = (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.resolveComponent)(\"ed-in\");\n\n return (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", {\n role: \"application\",\n \"aria-label\": \"PhotoShop color picker\",\n class: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeClass)(['vc-photoshop', $props.disableFields ? 'vc-photoshop__disable-fields' : ''])\n }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Photoshopvue_type_template_id_9851ac8a_hoisted_1, (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.toDisplayString)($props.head), 1), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Photoshopvue_type_template_id_9851ac8a_hoisted_2, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Photoshopvue_type_template_id_9851ac8a_hoisted_3, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_saturation, {\n modelValue: _ctx.colors,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => _ctx.colors = $event),\n onChange: $options.childChange\n }, null, 8, [\"modelValue\", \"onChange\"])]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Photoshopvue_type_template_id_9851ac8a_hoisted_4, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_hue, {\n modelValue: _ctx.colors,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => _ctx.colors = $event),\n onChange: $options.childChange,\n direction: \"vertical\"\n }, {\n default: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.withCtx)(() => [Photoshopvue_type_template_id_9851ac8a_hoisted_5]),\n _: 1\n }, 8, [\"modelValue\", \"onChange\"])]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", {\n class: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeClass)(['vc-ps-controls', $props.disableFields ? 'vc-ps-controls__disable-fields' : ''])\n }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Photoshopvue_type_template_id_9851ac8a_hoisted_6, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", _hoisted_7, (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.toDisplayString)($props.newLabel), 1), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", _hoisted_8, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", {\n class: \"vc-ps-previews__pr-color\",\n \"aria-label\": `New color is ${_ctx.colors.hex}`,\n style: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeStyle)({\n background: _ctx.colors.hex\n })\n }, null, 12, _hoisted_9), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", {\n class: \"vc-ps-previews__pr-color\",\n \"aria-label\": `Current color is ${$data.currentColor}`,\n style: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeStyle)({\n background: $data.currentColor\n }),\n onClick: _cache[2] || (_cache[2] = (...args) => $options.clickCurrentColor && $options.clickCurrentColor(...args))\n }, null, 12, _hoisted_10)]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", _hoisted_11, (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.toDisplayString)($props.currentLabel), 1)]), !$props.disableFields ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", _hoisted_12, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", {\n class: \"vc-ps-ac-btn\",\n role: \"button\",\n \"aria-label\": $props.acceptLabel,\n onClick: _cache[3] || (_cache[3] = (...args) => $options.handleAccept && $options.handleAccept(...args))\n }, (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.toDisplayString)($props.acceptLabel), 9, _hoisted_13), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", {\n class: \"vc-ps-ac-btn\",\n role: \"button\",\n \"aria-label\": $props.cancelLabel,\n onClick: _cache[4] || (_cache[4] = (...args) => $options.handleCancel && $options.handleCancel(...args))\n }, (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.toDisplayString)($props.cancelLabel), 9, _hoisted_14), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", _hoisted_15, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_ed_in, {\n label: \"h\",\n desc: \"°\",\n modelValue: $options.hsv.h,\n onChange: $options.inputChange\n }, null, 8, [\"modelValue\", \"onChange\"]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_ed_in, {\n label: \"s\",\n desc: \"%\",\n modelValue: $options.hsv.s,\n max: 100,\n onChange: $options.inputChange\n }, null, 8, [\"modelValue\", \"onChange\"]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_ed_in, {\n label: \"v\",\n desc: \"%\",\n modelValue: $options.hsv.v,\n max: 100,\n onChange: $options.inputChange\n }, null, 8, [\"modelValue\", \"onChange\"]), _hoisted_16, (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_ed_in, {\n label: \"r\",\n modelValue: _ctx.colors.rgba.r,\n onChange: $options.inputChange\n }, null, 8, [\"modelValue\", \"onChange\"]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_ed_in, {\n label: \"g\",\n modelValue: _ctx.colors.rgba.g,\n onChange: $options.inputChange\n }, null, 8, [\"modelValue\", \"onChange\"]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_ed_in, {\n label: \"b\",\n modelValue: _ctx.colors.rgba.b,\n onChange: $options.inputChange\n }, null, 8, [\"modelValue\", \"onChange\"]), _hoisted_17, (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_ed_in, {\n label: \"#\",\n class: \"vc-ps-fields__hex\",\n modelValue: $options.hex,\n onChange: $options.inputChange\n }, null, 8, [\"modelValue\", \"onChange\"])]), $props.hasResetButton ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", {\n key: 0,\n class: \"vc-ps-ac-btn\",\n \"aria-label\": \"reset\",\n onClick: _cache[5] || (_cache[5] = (...args) => $options.handleReset && $options.handleReset(...args))\n }, (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.toDisplayString)($props.resetLabel), 1)) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createCommentVNode)(\"\", true)])) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createCommentVNode)(\"\", true)], 2)])], 2);\n}\n;// CONCATENATED MODULE: ./src/components/Photoshop.vue?vue&type=template&id=9851ac8a\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/common/Saturation.vue?vue&type=template&id=659348d8\n\n\nconst Saturationvue_type_template_id_659348d8_hoisted_1 = /*#__PURE__*/(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", {\n class: \"vc-saturation--white\"\n}, null, -1);\n\nconst Saturationvue_type_template_id_659348d8_hoisted_2 = /*#__PURE__*/(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", {\n class: \"vc-saturation--black\"\n}, null, -1);\n\nconst Saturationvue_type_template_id_659348d8_hoisted_3 = /*#__PURE__*/(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", {\n class: \"vc-saturation-circle\"\n}, null, -1);\n\nconst Saturationvue_type_template_id_659348d8_hoisted_4 = [Saturationvue_type_template_id_659348d8_hoisted_3];\nfunction Saturationvue_type_template_id_659348d8_render(_ctx, _cache, $props, $setup, $data, $options) {\n return (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", {\n class: \"vc-saturation\",\n style: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeStyle)({\n background: $options.bgColor\n }),\n ref: \"container\",\n onMousedown: _cache[0] || (_cache[0] = (...args) => $options.handleMouseDown && $options.handleMouseDown(...args)),\n onTouchmove: _cache[1] || (_cache[1] = (...args) => $options.handleChange && $options.handleChange(...args)),\n onTouchstart: _cache[2] || (_cache[2] = (...args) => $options.handleChange && $options.handleChange(...args))\n }, [Saturationvue_type_template_id_659348d8_hoisted_1, Saturationvue_type_template_id_659348d8_hoisted_2, (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", {\n class: \"vc-saturation-pointer\",\n style: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeStyle)({\n top: $options.pointerTop,\n left: $options.pointerLeft\n })\n }, Saturationvue_type_template_id_659348d8_hoisted_4, 4)], 36);\n}\n;// CONCATENATED MODULE: ./src/components/common/Saturation.vue?vue&type=template&id=659348d8\n\n// EXTERNAL MODULE: ./node_modules/clamp/index.js\nvar clamp = __webpack_require__(9428);\nvar clamp_default = /*#__PURE__*/__webpack_require__.n(clamp);\n// EXTERNAL MODULE: ./node_modules/lodash/throttle.js\nvar throttle = __webpack_require__(9289);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/common/Saturation.vue?vue&type=script&lang=js\n\n\n/* harmony default export */ var Saturationvue_type_script_lang_js = ({\n name: 'Saturation',\n props: {\n modelValue: Object\n },\n computed: {\n colors() {\n return this.modelValue;\n },\n\n bgColor() {\n return `hsl(${this.colors.hsv.h}, 100%, 50%)`;\n },\n\n pointerTop() {\n return -(this.colors.hsv.v * 100) + 1 + 100 + '%';\n },\n\n pointerLeft() {\n return this.colors.hsv.s * 100 + '%';\n }\n\n },\n methods: {\n throttle: throttle((fn, data) => {\n fn(data);\n }, 20, {\n leading: true,\n trailing: false\n }),\n\n handleChange(e, skip) {\n !skip && e.preventDefault();\n const container = this.$refs.container;\n\n if (!container) {\n // for some edge cases, container may not exist. see #220\n return;\n }\n\n const containerWidth = container.clientWidth;\n const containerHeight = container.clientHeight;\n const xOffset = container.getBoundingClientRect().left + window.pageXOffset;\n const yOffset = container.getBoundingClientRect().top + window.pageYOffset;\n const pageX = e.pageX || (e.touches ? e.touches[0].pageX : 0);\n const pageY = e.pageY || (e.touches ? e.touches[0].pageY : 0);\n const left = clamp_default()(pageX - xOffset, 0, containerWidth);\n const top = clamp_default()(pageY - yOffset, 0, containerHeight);\n const saturation = left / containerWidth;\n const bright = clamp_default()(-(top / containerHeight) + 1, 0, 1);\n this.throttle(this.onChange, {\n h: this.colors.hsv.h,\n s: saturation,\n v: bright,\n a: this.colors.hsv.a,\n source: 'hsva'\n });\n },\n\n onChange(param) {\n this.$emit('change', param);\n },\n\n handleMouseDown(e) {\n // this.handleChange(e, true)\n window.addEventListener('mousemove', this.handleChange);\n window.addEventListener('mouseup', this.handleChange);\n window.addEventListener('mouseup', this.handleMouseUp);\n },\n\n handleMouseUp(e) {\n this.unbindEventListeners();\n },\n\n unbindEventListeners() {\n window.removeEventListener('mousemove', this.handleChange);\n window.removeEventListener('mouseup', this.handleChange);\n window.removeEventListener('mouseup', this.handleMouseUp);\n }\n\n }\n});\n;// CONCATENATED MODULE: ./src/components/common/Saturation.vue?vue&type=script&lang=js\n \n// EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/common/Saturation.vue?vue&type=style&index=0&id=659348d8&lang=css\nvar Saturationvue_type_style_index_0_id_659348d8_lang_css = __webpack_require__(5233);\n;// CONCATENATED MODULE: ./src/components/common/Saturation.vue?vue&type=style&index=0&id=659348d8&lang=css\n\n;// CONCATENATED MODULE: ./src/components/common/Saturation.vue\n\n\n\n\n;\n\n\nconst Saturation_exports_ = /*#__PURE__*/(0,exportHelper/* default */.Z)(Saturationvue_type_script_lang_js, [['render',Saturationvue_type_template_id_659348d8_render]])\n\n/* harmony default export */ var Saturation = (Saturation_exports_);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/Photoshop.vue?vue&type=script&lang=js\n\n\n\n // import alpha from './common/Alpha.vue'\n\n/* harmony default export */ var Photoshopvue_type_script_lang_js = ({\n name: 'Photoshop',\n mixins: [color],\n props: {\n head: {\n type: String,\n default: 'Color Picker'\n },\n disableFields: {\n type: Boolean,\n default: false\n },\n hasResetButton: {\n type: Boolean,\n default: false\n },\n acceptLabel: {\n type: String,\n default: 'OK'\n },\n cancelLabel: {\n type: String,\n default: 'Cancel'\n },\n resetLabel: {\n type: String,\n default: 'Reset'\n },\n newLabel: {\n type: String,\n default: 'new'\n },\n currentLabel: {\n type: String,\n default: 'current'\n }\n },\n components: {\n saturation: Saturation,\n hue: Hue,\n // alpha,\n 'ed-in': EditableInput\n },\n\n data() {\n return {\n currentColor: '#FFF'\n };\n },\n\n computed: {\n hsv() {\n const hsv = this.colors.hsv;\n return {\n h: hsv.h.toFixed(),\n s: (hsv.s * 100).toFixed(),\n v: (hsv.v * 100).toFixed()\n };\n },\n\n hex() {\n const hex = this.colors.hex;\n return hex && hex.replace('#', '');\n }\n\n },\n\n created() {\n this.currentColor = this.colors.hex;\n },\n\n methods: {\n childChange(data) {\n this.colorChange(data);\n },\n\n inputChange(data) {\n if (!data) {\n return;\n }\n\n if (data['#']) {\n this.isValidHex(data['#']) && this.colorChange({\n hex: data['#'],\n source: 'hex'\n });\n } else if (data.r || data.g || data.b || data.a) {\n this.colorChange({\n r: data.r || this.colors.rgba.r,\n g: data.g || this.colors.rgba.g,\n b: data.b || this.colors.rgba.b,\n a: data.a || this.colors.rgba.a,\n source: 'rgba'\n });\n } else if (data.h || data.s || data.v) {\n this.colorChange({\n h: data.h || this.colors.hsv.h,\n s: data.s / 100 || this.colors.hsv.s,\n v: data.v / 100 || this.colors.hsv.v,\n source: 'hsv'\n });\n }\n },\n\n clickCurrentColor() {\n this.colorChange({\n hex: this.currentColor,\n source: 'hex'\n });\n },\n\n handleAccept() {\n this.$emit('ok');\n },\n\n handleCancel() {\n this.$emit('cancel');\n },\n\n handleReset() {\n this.$emit('reset');\n }\n\n }\n});\n;// CONCATENATED MODULE: ./src/components/Photoshop.vue?vue&type=script&lang=js\n \n// EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/Photoshop.vue?vue&type=style&index=0&id=9851ac8a&lang=css\nvar Photoshopvue_type_style_index_0_id_9851ac8a_lang_css = __webpack_require__(1902);\n;// CONCATENATED MODULE: ./src/components/Photoshop.vue?vue&type=style&index=0&id=9851ac8a&lang=css\n\n;// CONCATENATED MODULE: ./src/components/Photoshop.vue\n\n\n\n\n;\n\n\nconst Photoshop_exports_ = /*#__PURE__*/(0,exportHelper/* default */.Z)(Photoshopvue_type_script_lang_js, [['render',Photoshopvue_type_template_id_9851ac8a_render]])\n\n/* harmony default export */ var Photoshop = (Photoshop_exports_);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/Sketch.vue?vue&type=template&id=5a577154\n\nconst Sketchvue_type_template_id_5a577154_hoisted_1 = {\n class: \"vc-sketch-saturation-wrap\"\n};\nconst Sketchvue_type_template_id_5a577154_hoisted_2 = {\n class: \"vc-sketch-controls\"\n};\nconst Sketchvue_type_template_id_5a577154_hoisted_3 = {\n class: \"vc-sketch-sliders\"\n};\nconst Sketchvue_type_template_id_5a577154_hoisted_4 = {\n class: \"vc-sketch-hue-wrap\"\n};\nconst Sketchvue_type_template_id_5a577154_hoisted_5 = {\n key: 0,\n class: \"vc-sketch-alpha-wrap\"\n};\nconst Sketchvue_type_template_id_5a577154_hoisted_6 = {\n class: \"vc-sketch-color-wrap\"\n};\nconst Sketchvue_type_template_id_5a577154_hoisted_7 = [\"aria-label\"];\nconst Sketchvue_type_template_id_5a577154_hoisted_8 = {\n key: 0,\n class: \"vc-sketch-field\"\n};\nconst Sketchvue_type_template_id_5a577154_hoisted_9 = {\n class: \"vc-sketch-field--double\"\n};\nconst Sketchvue_type_template_id_5a577154_hoisted_10 = {\n class: \"vc-sketch-field--single\"\n};\nconst Sketchvue_type_template_id_5a577154_hoisted_11 = {\n class: \"vc-sketch-field--single\"\n};\nconst Sketchvue_type_template_id_5a577154_hoisted_12 = {\n class: \"vc-sketch-field--single\"\n};\nconst Sketchvue_type_template_id_5a577154_hoisted_13 = {\n key: 0,\n class: \"vc-sketch-field--single\"\n};\nconst Sketchvue_type_template_id_5a577154_hoisted_14 = {\n class: \"vc-sketch-presets\",\n role: \"group\",\n \"aria-label\": \"A color preset, pick one to set as current color\"\n};\nconst Sketchvue_type_template_id_5a577154_hoisted_15 = [\"aria-label\", \"onClick\"];\nconst Sketchvue_type_template_id_5a577154_hoisted_16 = [\"aria-label\", \"onClick\"];\nfunction Sketchvue_type_template_id_5a577154_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_saturation = (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.resolveComponent)(\"saturation\");\n\n const _component_hue = (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.resolveComponent)(\"hue\");\n\n const _component_alpha = (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.resolveComponent)(\"alpha\");\n\n const _component_checkboard = (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.resolveComponent)(\"checkboard\");\n\n const _component_ed_in = (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.resolveComponent)(\"ed-in\");\n\n return (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", {\n role: \"application\",\n \"aria-label\": \"Sketch color picker\",\n class: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeClass)(['vc-sketch', $props.disableAlpha ? 'vc-sketch__disable-alpha' : ''])\n }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Sketchvue_type_template_id_5a577154_hoisted_1, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_saturation, {\n modelValue: _ctx.colors,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => _ctx.colors = $event),\n onChange: $options.childChange\n }, null, 8, [\"modelValue\", \"onChange\"])]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Sketchvue_type_template_id_5a577154_hoisted_2, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Sketchvue_type_template_id_5a577154_hoisted_3, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Sketchvue_type_template_id_5a577154_hoisted_4, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_hue, {\n modelValue: _ctx.colors,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => _ctx.colors = $event),\n onChange: $options.childChange\n }, null, 8, [\"modelValue\", \"onChange\"])]), !$props.disableAlpha ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", Sketchvue_type_template_id_5a577154_hoisted_5, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_alpha, {\n modelValue: _ctx.colors,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => _ctx.colors = $event),\n onChange: $options.childChange\n }, null, 8, [\"modelValue\", \"onChange\"])])) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createCommentVNode)(\"\", true)]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Sketchvue_type_template_id_5a577154_hoisted_6, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", {\n \"aria-label\": `Current color is ${$options.activeColor}`,\n class: \"vc-sketch-active-color\",\n style: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeStyle)({\n background: $options.activeColor\n })\n }, null, 12, Sketchvue_type_template_id_5a577154_hoisted_7), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_checkboard)])]), !$props.disableFields ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", Sketchvue_type_template_id_5a577154_hoisted_8, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Sketchvue_type_template_id_5a577154_hoisted_9, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_ed_in, {\n label: \"hex\",\n modelValue: $options.hex,\n onChange: $options.inputChange\n }, null, 8, [\"modelValue\", \"onChange\"])]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Sketchvue_type_template_id_5a577154_hoisted_10, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_ed_in, {\n label: \"r\",\n modelValue: _ctx.colors.rgba.r,\n onChange: $options.inputChange\n }, null, 8, [\"modelValue\", \"onChange\"])]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Sketchvue_type_template_id_5a577154_hoisted_11, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_ed_in, {\n label: \"g\",\n modelValue: _ctx.colors.rgba.g,\n onChange: $options.inputChange\n }, null, 8, [\"modelValue\", \"onChange\"])]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Sketchvue_type_template_id_5a577154_hoisted_12, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_ed_in, {\n label: \"b\",\n modelValue: _ctx.colors.rgba.b,\n onChange: $options.inputChange\n }, null, 8, [\"modelValue\", \"onChange\"])]), !$props.disableAlpha ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", Sketchvue_type_template_id_5a577154_hoisted_13, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_ed_in, {\n label: \"a\",\n modelValue: _ctx.colors.a,\n \"arrow-offset\": 0.01,\n max: 1,\n onChange: $options.inputChange\n }, null, 8, [\"modelValue\", \"arrow-offset\", \"onChange\"])])) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createCommentVNode)(\"\", true)])) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createCommentVNode)(\"\", true), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Sketchvue_type_template_id_5a577154_hoisted_14, [((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(true), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.Fragment, null, (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.renderList)($props.presetColors, c => {\n return (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.Fragment, null, [!_ctx.isTransparent(c) ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", {\n class: \"vc-sketch-presets-color\",\n \"aria-label\": 'Color:' + c,\n key: 'if-' + c,\n style: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeStyle)({\n background: c\n }),\n onClick: $event => $options.handlePreset(c)\n }, null, 12, Sketchvue_type_template_id_5a577154_hoisted_15)) : ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", {\n key: 'else-' + c,\n \"aria-label\": 'Color:' + c,\n class: \"vc-sketch-presets-color\",\n onClick: $event => $options.handlePreset(c)\n }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_checkboard)], 8, Sketchvue_type_template_id_5a577154_hoisted_16))], 64);\n }), 256))])], 2);\n}\n;// CONCATENATED MODULE: ./src/components/Sketch.vue?vue&type=template&id=5a577154\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/common/Alpha.vue?vue&type=template&id=7db0276a\n\nconst Alphavue_type_template_id_7db0276a_hoisted_1 = {\n class: \"vc-alpha\"\n};\nconst Alphavue_type_template_id_7db0276a_hoisted_2 = {\n class: \"vc-alpha-checkboard-wrap\"\n};\n\nconst Alphavue_type_template_id_7db0276a_hoisted_3 = /*#__PURE__*/(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", {\n class: \"vc-alpha-picker\"\n}, null, -1);\n\nconst Alphavue_type_template_id_7db0276a_hoisted_4 = [Alphavue_type_template_id_7db0276a_hoisted_3];\nfunction Alphavue_type_template_id_7db0276a_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_checkboard = (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.resolveComponent)(\"checkboard\");\n\n return (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", Alphavue_type_template_id_7db0276a_hoisted_1, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Alphavue_type_template_id_7db0276a_hoisted_2, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_checkboard)]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", {\n class: \"vc-alpha-gradient\",\n style: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeStyle)({\n background: $options.gradientColor\n })\n }, null, 4), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", {\n class: \"vc-alpha-container\",\n ref: \"container\",\n onMousedown: _cache[0] || (_cache[0] = (...args) => $options.handleMouseDown && $options.handleMouseDown(...args)),\n onTouchmove: _cache[1] || (_cache[1] = (...args) => $options.handleChange && $options.handleChange(...args)),\n onTouchstart: _cache[2] || (_cache[2] = (...args) => $options.handleChange && $options.handleChange(...args))\n }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", {\n class: \"vc-alpha-pointer\",\n style: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeStyle)({\n left: $options.colors.a * 100 + '%'\n })\n }, Alphavue_type_template_id_7db0276a_hoisted_4, 4)], 544)]);\n}\n;// CONCATENATED MODULE: ./src/components/common/Alpha.vue?vue&type=template&id=7db0276a\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/common/Checkboard.vue?vue&type=template&id=1af7c312\n\nfunction Checkboardvue_type_template_id_1af7c312_render(_ctx, _cache, $props, $setup, $data, $options) {\n return (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", {\n class: \"vc-checkerboard\",\n style: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeStyle)($options.bgStyle)\n }, null, 4);\n}\n;// CONCATENATED MODULE: ./src/components/common/Checkboard.vue?vue&type=template&id=1af7c312\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/common/Checkboard.vue?vue&type=script&lang=js\nconst _checkboardCache = {};\n/* harmony default export */ var Checkboardvue_type_script_lang_js = ({\n name: 'Checkboard',\n props: {\n size: {\n type: [Number, String],\n default: 8\n },\n white: {\n type: String,\n default: '#fff'\n },\n grey: {\n type: String,\n default: '#e6e6e6'\n }\n },\n computed: {\n bgStyle() {\n return {\n 'background-image': 'url(' + getCheckboard(this.white, this.grey, this.size) + ')'\n };\n }\n\n }\n});\n/**\n * get base 64 data by canvas\n *\n * @param {String} c1 hex color\n * @param {String} c2 hex color\n * @param {Number} size\n */\n\nfunction renderCheckboard(c1, c2, size) {\n // Dont Render On Server\n if (typeof document === 'undefined') {\n return null;\n }\n\n const canvas = document.createElement('canvas');\n canvas.width = canvas.height = size * 2;\n const ctx = canvas.getContext('2d'); // If no context can be found, return early.\n\n if (!ctx) {\n return null;\n }\n\n ctx.fillStyle = c1;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.fillStyle = c2;\n ctx.fillRect(0, 0, size, size);\n ctx.translate(size, size);\n ctx.fillRect(0, 0, size, size);\n return canvas.toDataURL();\n}\n/**\n * get checkboard base data and cache\n *\n * @param {String} c1 hex color\n * @param {String} c2 hex color\n * @param {Number} size\n */\n\n\nfunction getCheckboard(c1, c2, size) {\n const key = c1 + ',' + c2 + ',' + size;\n\n if (_checkboardCache[key]) {\n return _checkboardCache[key];\n } else {\n const checkboard = renderCheckboard(c1, c2, size);\n _checkboardCache[key] = checkboard;\n return checkboard;\n }\n}\n;// CONCATENATED MODULE: ./src/components/common/Checkboard.vue?vue&type=script&lang=js\n \n// EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/common/Checkboard.vue?vue&type=style&index=0&id=1af7c312&lang=css\nvar Checkboardvue_type_style_index_0_id_1af7c312_lang_css = __webpack_require__(3205);\n;// CONCATENATED MODULE: ./src/components/common/Checkboard.vue?vue&type=style&index=0&id=1af7c312&lang=css\n\n;// CONCATENATED MODULE: ./src/components/common/Checkboard.vue\n\n\n\n\n;\n\n\nconst Checkboard_exports_ = /*#__PURE__*/(0,exportHelper/* default */.Z)(Checkboardvue_type_script_lang_js, [['render',Checkboardvue_type_template_id_1af7c312_render]])\n\n/* harmony default export */ var Checkboard = (Checkboard_exports_);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/common/Alpha.vue?vue&type=script&lang=js\n\n/* harmony default export */ var Alphavue_type_script_lang_js = ({\n name: 'Alpha',\n props: {\n modelValue: Object,\n onChange: Function\n },\n components: {\n checkboard: Checkboard\n },\n computed: {\n colors() {\n return this.modelValue;\n },\n\n gradientColor() {\n const rgba = this.colors.rgba;\n const rgbStr = [rgba.r, rgba.g, rgba.b].join(',');\n return 'linear-gradient(to right, rgba(' + rgbStr + ', 0) 0%, rgba(' + rgbStr + ', 1) 100%)';\n }\n\n },\n methods: {\n handleChange(e, skip) {\n !skip && e.preventDefault();\n const container = this.$refs.container;\n\n if (!container) {\n // for some edge cases, container may not exist. see #220\n return;\n }\n\n const containerWidth = container.clientWidth;\n const xOffset = container.getBoundingClientRect().left + window.pageXOffset;\n const pageX = e.pageX || (e.touches ? e.touches[0].pageX : 0);\n const left = pageX - xOffset;\n let a;\n\n if (left < 0) {\n a = 0;\n } else if (left > containerWidth) {\n a = 1;\n } else {\n a = Math.round(left * 100 / containerWidth) / 100;\n }\n\n if (this.colors.a !== a) {\n this.$emit('change', {\n h: this.colors.hsl.h,\n s: this.colors.hsl.s,\n l: this.colors.hsl.l,\n a: a,\n source: 'rgba'\n });\n }\n },\n\n handleMouseDown(e) {\n this.handleChange(e, true);\n window.addEventListener('mousemove', this.handleChange);\n window.addEventListener('mouseup', this.handleMouseUp);\n },\n\n handleMouseUp() {\n this.unbindEventListeners();\n },\n\n unbindEventListeners() {\n window.removeEventListener('mousemove', this.handleChange);\n window.removeEventListener('mouseup', this.handleMouseUp);\n }\n\n }\n});\n;// CONCATENATED MODULE: ./src/components/common/Alpha.vue?vue&type=script&lang=js\n \n// EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/common/Alpha.vue?vue&type=style&index=0&id=7db0276a&lang=css\nvar Alphavue_type_style_index_0_id_7db0276a_lang_css = __webpack_require__(6320);\n;// CONCATENATED MODULE: ./src/components/common/Alpha.vue?vue&type=style&index=0&id=7db0276a&lang=css\n\n;// CONCATENATED MODULE: ./src/components/common/Alpha.vue\n\n\n\n\n;\n\n\nconst Alpha_exports_ = /*#__PURE__*/(0,exportHelper/* default */.Z)(Alphavue_type_script_lang_js, [['render',Alphavue_type_template_id_7db0276a_render]])\n\n/* harmony default export */ var Alpha = (Alpha_exports_);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/Sketch.vue?vue&type=script&lang=js\n\n\n\n\n\n\nconst presetColors = ['#D0021B', '#F5A623', '#F8E71C', '#8B572A', '#7ED321', '#417505', '#BD10E0', '#9013FE', '#4A90E2', '#50E3C2', '#B8E986', '#000000', '#4A4A4A', '#9B9B9B', '#FFFFFF', 'rgba(0,0,0,0)'];\n/* harmony default export */ var Sketchvue_type_script_lang_js = ({\n name: 'Sketch',\n mixins: [color],\n components: {\n saturation: Saturation,\n hue: Hue,\n alpha: Alpha,\n 'ed-in': EditableInput,\n checkboard: Checkboard\n },\n props: {\n presetColors: {\n type: Array,\n\n default() {\n return presetColors;\n }\n\n },\n disableAlpha: {\n type: Boolean,\n default: false\n },\n disableFields: {\n type: Boolean,\n default: false\n }\n },\n computed: {\n hex() {\n let hex;\n\n if (this.colors.a < 1) {\n hex = this.colors.hex8;\n } else {\n hex = this.colors.hex;\n }\n\n return hex.replace('#', '');\n },\n\n activeColor() {\n const rgba = this.colors.rgba;\n return 'rgba(' + [rgba.r, rgba.g, rgba.b, rgba.a].join(',') + ')';\n }\n\n },\n methods: {\n handlePreset(c) {\n this.colorChange({\n hex: c,\n source: 'hex'\n });\n },\n\n childChange(data) {\n this.colorChange(data);\n },\n\n inputChange(data) {\n if (!data) {\n return;\n }\n\n if (data.hex) {\n this.isValidHex(data.hex) && this.colorChange({\n hex: data.hex,\n source: 'hex'\n });\n } else if (data.r || data.g || data.b || data.a) {\n this.colorChange({\n r: data.r || this.colors.rgba.r,\n g: data.g || this.colors.rgba.g,\n b: data.b || this.colors.rgba.b,\n a: data.a || this.colors.rgba.a,\n source: 'rgba'\n });\n }\n }\n\n }\n});\n;// CONCATENATED MODULE: ./src/components/Sketch.vue?vue&type=script&lang=js\n \n// EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/Sketch.vue?vue&type=style&index=0&id=5a577154&lang=css\nvar Sketchvue_type_style_index_0_id_5a577154_lang_css = __webpack_require__(5815);\n;// CONCATENATED MODULE: ./src/components/Sketch.vue?vue&type=style&index=0&id=5a577154&lang=css\n\n;// CONCATENATED MODULE: ./src/components/Sketch.vue\n\n\n\n\n;\n\n\nconst Sketch_exports_ = /*#__PURE__*/(0,exportHelper/* default */.Z)(Sketchvue_type_script_lang_js, [['render',Sketchvue_type_template_id_5a577154_render]])\n\n/* harmony default export */ var Sketch = (Sketch_exports_);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/Chrome.vue?vue&type=template&id=41feb5bc\n\nconst Chromevue_type_template_id_41feb5bc_hoisted_1 = {\n class: \"vc-chrome-saturation-wrap\"\n};\nconst Chromevue_type_template_id_41feb5bc_hoisted_2 = {\n class: \"vc-chrome-body\"\n};\nconst Chromevue_type_template_id_41feb5bc_hoisted_3 = {\n class: \"vc-chrome-controls\"\n};\nconst Chromevue_type_template_id_41feb5bc_hoisted_4 = {\n class: \"vc-chrome-color-wrap\"\n};\nconst Chromevue_type_template_id_41feb5bc_hoisted_5 = [\"aria-label\"];\nconst Chromevue_type_template_id_41feb5bc_hoisted_6 = {\n class: \"vc-chrome-sliders\"\n};\nconst Chromevue_type_template_id_41feb5bc_hoisted_7 = {\n class: \"vc-chrome-hue-wrap\"\n};\nconst Chromevue_type_template_id_41feb5bc_hoisted_8 = {\n key: 0,\n class: \"vc-chrome-alpha-wrap\"\n};\nconst Chromevue_type_template_id_41feb5bc_hoisted_9 = {\n key: 0,\n class: \"vc-chrome-fields-wrap\"\n};\nconst Chromevue_type_template_id_41feb5bc_hoisted_10 = {\n class: \"vc-chrome-fields\"\n};\nconst Chromevue_type_template_id_41feb5bc_hoisted_11 = {\n class: \"vc-chrome-field\"\n};\nconst Chromevue_type_template_id_41feb5bc_hoisted_12 = {\n class: \"vc-chrome-fields\"\n};\nconst Chromevue_type_template_id_41feb5bc_hoisted_13 = {\n class: \"vc-chrome-field\"\n};\nconst Chromevue_type_template_id_41feb5bc_hoisted_14 = {\n class: \"vc-chrome-field\"\n};\nconst Chromevue_type_template_id_41feb5bc_hoisted_15 = {\n class: \"vc-chrome-field\"\n};\nconst Chromevue_type_template_id_41feb5bc_hoisted_16 = {\n key: 0,\n class: \"vc-chrome-field\"\n};\nconst Chromevue_type_template_id_41feb5bc_hoisted_17 = {\n class: \"vc-chrome-fields\"\n};\nconst _hoisted_18 = {\n class: \"vc-chrome-field\"\n};\nconst _hoisted_19 = {\n class: \"vc-chrome-field\"\n};\nconst _hoisted_20 = {\n class: \"vc-chrome-field\"\n};\nconst _hoisted_21 = {\n key: 0,\n class: \"vc-chrome-field\"\n};\nconst _hoisted_22 = {\n class: \"vc-chrome-toggle-icon\"\n};\n\nconst _hoisted_23 = /*#__PURE__*/(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"path\", {\n fill: \"#333\",\n d: \"M12,18.17L8.83,15L7.42,16.41L12,21L16.59,16.41L15.17,15M12,5.83L15.17,9L16.58,7.59L12,3L7.41,7.59L8.83,9L12,5.83Z\"\n}, null, -1);\n\nconst _hoisted_24 = [_hoisted_23];\nconst _hoisted_25 = {\n class: \"vc-chrome-toggle-icon-highlight\"\n};\nfunction Chromevue_type_template_id_41feb5bc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_saturation = (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.resolveComponent)(\"saturation\");\n\n const _component_checkboard = (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.resolveComponent)(\"checkboard\");\n\n const _component_hue = (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.resolveComponent)(\"hue\");\n\n const _component_alpha = (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.resolveComponent)(\"alpha\");\n\n const _component_ed_in = (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.resolveComponent)(\"ed-in\");\n\n return (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", {\n role: \"application\",\n \"aria-label\": \"Chrome color picker\",\n class: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeClass)(['vc-chrome', $props.disableAlpha ? 'vc-chrome__disable-alpha' : ''])\n }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Chromevue_type_template_id_41feb5bc_hoisted_1, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_saturation, {\n modelValue: _ctx.colors,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => _ctx.colors = $event),\n onChange: $options.childChange\n }, null, 8, [\"modelValue\", \"onChange\"])]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Chromevue_type_template_id_41feb5bc_hoisted_2, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Chromevue_type_template_id_41feb5bc_hoisted_3, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Chromevue_type_template_id_41feb5bc_hoisted_4, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", {\n \"aria-label\": `current color is ${_ctx.colors.hex}`,\n class: \"vc-chrome-active-color\",\n style: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeStyle)({\n background: $options.activeColor\n })\n }, null, 12, Chromevue_type_template_id_41feb5bc_hoisted_5), !$props.disableAlpha ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createBlock)(_component_checkboard, {\n key: 0\n })) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createCommentVNode)(\"\", true)]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Chromevue_type_template_id_41feb5bc_hoisted_6, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Chromevue_type_template_id_41feb5bc_hoisted_7, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_hue, {\n modelValue: _ctx.colors,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => _ctx.colors = $event),\n onChange: $options.childChange\n }, null, 8, [\"modelValue\", \"onChange\"])]), !$props.disableAlpha ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", Chromevue_type_template_id_41feb5bc_hoisted_8, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_alpha, {\n modelValue: _ctx.colors,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => _ctx.colors = $event),\n onChange: $options.childChange\n }, null, 8, [\"modelValue\", \"onChange\"])])) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createCommentVNode)(\"\", true)])]), !$props.disableFields ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", Chromevue_type_template_id_41feb5bc_hoisted_9, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.withDirectives)((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Chromevue_type_template_id_41feb5bc_hoisted_10, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Chromevue_type_template_id_41feb5bc_hoisted_11, [!$options.hasAlpha ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createBlock)(_component_ed_in, {\n key: 0,\n label: \"hex\",\n modelValue: _ctx.colors.hex,\n onChange: $options.inputChange\n }, null, 8, [\"modelValue\", \"onChange\"])) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createCommentVNode)(\"\", true), $options.hasAlpha ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createBlock)(_component_ed_in, {\n key: 1,\n label: \"hex\",\n modelValue: _ctx.colors.hex8,\n onChange: $options.inputChange\n }, null, 8, [\"modelValue\", \"onChange\"])) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createCommentVNode)(\"\", true)])], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.vShow, $data.fieldsIndex === 0]]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.withDirectives)((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Chromevue_type_template_id_41feb5bc_hoisted_12, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Chromevue_type_template_id_41feb5bc_hoisted_13, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_ed_in, {\n label: \"r\",\n modelValue: _ctx.colors.rgba.r,\n onChange: $options.inputChange\n }, null, 8, [\"modelValue\", \"onChange\"])]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Chromevue_type_template_id_41feb5bc_hoisted_14, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_ed_in, {\n label: \"g\",\n modelValue: _ctx.colors.rgba.g,\n onChange: $options.inputChange\n }, null, 8, [\"modelValue\", \"onChange\"])]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Chromevue_type_template_id_41feb5bc_hoisted_15, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_ed_in, {\n label: \"b\",\n modelValue: _ctx.colors.rgba.b,\n onChange: $options.inputChange\n }, null, 8, [\"modelValue\", \"onChange\"])]), !$props.disableAlpha ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", Chromevue_type_template_id_41feb5bc_hoisted_16, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_ed_in, {\n label: \"a\",\n modelValue: _ctx.colors.a,\n \"arrow-offset\": 0.01,\n max: 1,\n onChange: $options.inputChange\n }, null, 8, [\"modelValue\", \"arrow-offset\", \"onChange\"])])) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createCommentVNode)(\"\", true)], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.vShow, $data.fieldsIndex === 1]]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.withDirectives)((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Chromevue_type_template_id_41feb5bc_hoisted_17, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", _hoisted_18, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_ed_in, {\n label: \"h\",\n modelValue: $options.hsl.h,\n onChange: $options.inputChange\n }, null, 8, [\"modelValue\", \"onChange\"])]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", _hoisted_19, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_ed_in, {\n label: \"s\",\n modelValue: $options.hsl.s,\n onChange: $options.inputChange\n }, null, 8, [\"modelValue\", \"onChange\"])]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", _hoisted_20, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_ed_in, {\n label: \"l\",\n modelValue: $options.hsl.l,\n onChange: $options.inputChange\n }, null, 8, [\"modelValue\", \"onChange\"])]), !$props.disableAlpha ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", _hoisted_21, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_ed_in, {\n label: \"a\",\n modelValue: _ctx.colors.a,\n \"arrow-offset\": 0.01,\n max: 1,\n onChange: $options.inputChange\n }, null, 8, [\"modelValue\", \"arrow-offset\", \"onChange\"])])) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createCommentVNode)(\"\", true)], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.vShow, $data.fieldsIndex === 2]]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", {\n class: \"vc-chrome-toggle-btn\",\n role: \"button\",\n \"aria-label\": \"Change another color definition\",\n onClick: _cache[6] || (_cache[6] = (...args) => $options.toggleViews && $options.toggleViews(...args))\n }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", _hoisted_22, [((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"svg\", {\n style: {\n \"width\": \"24px\",\n \"height\": \"24px\"\n },\n viewBox: \"0 0 24 24\",\n onMouseover: _cache[3] || (_cache[3] = (...args) => $options.showHighlight && $options.showHighlight(...args)),\n onMouseenter: _cache[4] || (_cache[4] = (...args) => $options.showHighlight && $options.showHighlight(...args)),\n onMouseout: _cache[5] || (_cache[5] = (...args) => $options.hideHighlight && $options.hideHighlight(...args))\n }, _hoisted_24, 32))]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.withDirectives)((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", _hoisted_25, null, 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.vShow, $data.highlight]])])])) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createCommentVNode)(\"\", true)])], 2);\n}\n;// CONCATENATED MODULE: ./src/components/Chrome.vue?vue&type=template&id=41feb5bc\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/Chrome.vue?vue&type=script&lang=js\n\n\n\n\n\n\n/* harmony default export */ var Chromevue_type_script_lang_js = ({\n name: 'Chrome',\n mixins: [color],\n props: {\n disableAlpha: {\n type: Boolean,\n default: false\n },\n disableFields: {\n type: Boolean,\n default: false\n }\n },\n components: {\n saturation: Saturation,\n hue: Hue,\n alpha: Alpha,\n 'ed-in': EditableInput,\n checkboard: Checkboard\n },\n\n data() {\n return {\n fieldsIndex: 0,\n highlight: false\n };\n },\n\n computed: {\n hsl() {\n const {\n h,\n s,\n l\n } = this.colors.hsl;\n return {\n h: h.toFixed(),\n s: `${(s * 100).toFixed()}%`,\n l: `${(l * 100).toFixed()}%`\n };\n },\n\n activeColor() {\n const rgba = this.colors.rgba;\n return 'rgba(' + [rgba.r, rgba.g, rgba.b, rgba.a].join(',') + ')';\n },\n\n hasAlpha() {\n return this.colors.a < 1;\n }\n\n },\n methods: {\n childChange(data) {\n this.colorChange(data);\n },\n\n inputChange(data) {\n if (!data) {\n return;\n }\n\n if (data.hex) {\n this.isValidHex(data.hex) && this.colorChange({\n hex: data.hex,\n source: 'hex'\n });\n } else if (data.r || data.g || data.b || data.a) {\n this.colorChange({\n r: data.r || this.colors.rgba.r,\n g: data.g || this.colors.rgba.g,\n b: data.b || this.colors.rgba.b,\n a: data.a || this.colors.rgba.a,\n source: 'rgba'\n });\n } else if (data.h || data.s || data.l) {\n const s = data.s ? data.s.replace('%', '') / 100 : this.colors.hsl.s;\n const l = data.l ? data.l.replace('%', '') / 100 : this.colors.hsl.l;\n this.colorChange({\n h: data.h || this.colors.hsl.h,\n s,\n l,\n source: 'hsl'\n });\n }\n },\n\n toggleViews() {\n if (this.fieldsIndex >= 2) {\n this.fieldsIndex = 0;\n return;\n }\n\n this.fieldsIndex++;\n },\n\n showHighlight() {\n this.highlight = true;\n },\n\n hideHighlight() {\n this.highlight = false;\n }\n\n }\n});\n;// CONCATENATED MODULE: ./src/components/Chrome.vue?vue&type=script&lang=js\n \n// EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/Chrome.vue?vue&type=style&index=0&id=41feb5bc&lang=css\nvar Chromevue_type_style_index_0_id_41feb5bc_lang_css = __webpack_require__(3647);\n;// CONCATENATED MODULE: ./src/components/Chrome.vue?vue&type=style&index=0&id=41feb5bc&lang=css\n\n;// CONCATENATED MODULE: ./src/components/Chrome.vue\n\n\n\n\n;\n\n\nconst Chrome_exports_ = /*#__PURE__*/(0,exportHelper/* default */.Z)(Chromevue_type_script_lang_js, [['render',Chromevue_type_template_id_41feb5bc_render]])\n\n/* harmony default export */ var Chrome = (Chrome_exports_);\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/Twitter.vue?vue&type=template&id=3d2e139c\n\n\nconst Twittervue_type_template_id_3d2e139c_hoisted_1 = /*#__PURE__*/(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", {\n class: \"vc-twitter-triangle-shadow\"\n}, null, -1);\n\nconst Twittervue_type_template_id_3d2e139c_hoisted_2 = /*#__PURE__*/(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", {\n class: \"vc-twitter-triangle\"\n}, null, -1);\n\nconst Twittervue_type_template_id_3d2e139c_hoisted_3 = {\n class: \"vc-twitter-body\"\n};\nconst Twittervue_type_template_id_3d2e139c_hoisted_4 = [\"onClick\"];\n\nconst Twittervue_type_template_id_3d2e139c_hoisted_5 = /*#__PURE__*/(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", {\n class: \"vc-twitter-hash\"\n}, \"#\", -1);\n\nconst Twittervue_type_template_id_3d2e139c_hoisted_6 = /*#__PURE__*/(0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", {\n class: \"vc-twitter-clear\"\n}, null, -1);\n\nfunction Twittervue_type_template_id_3d2e139c_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_editable_input = (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.resolveComponent)(\"editable-input\");\n\n return (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"div\", {\n class: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeClass)([\"vc-twitter\", {\n 'vc-twitter-hide-triangle ': $props.triangle === 'hide',\n 'vc-twitter-top-left-triangle ': $props.triangle === 'top-left',\n 'vc-twitter-top-right-triangle ': $props.triangle === 'top-right'\n }]),\n style: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeStyle)({\n width: typeof $props.width === 'number' ? `${$props.width}px` : $props.width\n })\n }, [Twittervue_type_template_id_3d2e139c_hoisted_1, Twittervue_type_template_id_3d2e139c_hoisted_2, (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementVNode)(\"div\", Twittervue_type_template_id_3d2e139c_hoisted_3, [((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(true), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.Fragment, null, (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.renderList)($props.defaultColors, (color, index) => {\n return (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(\"span\", {\n class: \"vc-twitter-swatch\",\n style: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.normalizeStyle)({\n background: color,\n boxShadow: `0 0 4px ${$options.equal(color) ? color : 'transparent'}`\n }),\n key: index,\n onClick: $event => $options.handlerClick(color)\n }, null, 12, Twittervue_type_template_id_3d2e139c_hoisted_4);\n }), 128)), Twittervue_type_template_id_3d2e139c_hoisted_5, (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createVNode)(_component_editable_input, {\n label: \"#\",\n modelValue: $options.hex,\n onChange: $options.inputChange\n }, null, 8, [\"modelValue\", \"onChange\"]), Twittervue_type_template_id_3d2e139c_hoisted_6])], 6);\n}\n;// CONCATENATED MODULE: ./src/components/Twitter.vue?vue&type=template&id=3d2e139c\n\n;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/Twitter.vue?vue&type=script&lang=js\n\n\nconst Twittervue_type_script_lang_js_defaultColors = ['#FF6900', '#FCB900', '#7BDCB5', '#00D084', '#8ED1FC', '#0693E3', '#ABB8C3', '#EB144C', '#F78DA7', '#9900EF'];\n/* harmony default export */ var Twittervue_type_script_lang_js = ({\n name: 'Twitter',\n mixins: [color],\n components: {\n editableInput: EditableInput\n },\n props: {\n width: {\n type: [String, Number],\n default: 276\n },\n defaultColors: {\n type: Array,\n\n default() {\n return Twittervue_type_script_lang_js_defaultColors;\n }\n\n },\n triangle: {\n default: 'top-left',\n\n validator(value) {\n return ['hide', 'top-left', 'top-right'].includes(value);\n }\n\n }\n },\n computed: {\n hsv() {\n const hsv = this.colors.hsv;\n return {\n h: hsv.h.toFixed(),\n s: (hsv.s * 100).toFixed(),\n v: (hsv.v * 100).toFixed()\n };\n },\n\n hex() {\n const hex = this.colors.hex;\n return hex && hex.replace('#', '');\n }\n\n },\n methods: {\n equal(color) {\n return color.toLowerCase() === this.colors.hex.toLowerCase();\n },\n\n handlerClick(color) {\n this.colorChange({\n hex: color,\n source: 'hex'\n });\n },\n\n inputChange(data) {\n if (!data) {\n return;\n }\n\n if (data['#']) {\n this.isValidHex(data['#']) && this.colorChange({\n hex: data['#'],\n source: 'hex'\n });\n } else if (data.r || data.g || data.b || data.a) {\n this.colorChange({\n r: data.r || this.colors.rgba.r,\n g: data.g || this.colors.rgba.g,\n b: data.b || this.colors.rgba.b,\n a: data.a || this.colors.rgba.a,\n source: 'rgba'\n });\n } else if (data.h || data.s || data.v) {\n this.colorChange({\n h: data.h || this.colors.hsv.h,\n s: data.s / 100 || this.colors.hsv.s,\n v: data.v / 100 || this.colors.hsv.v,\n source: 'hsv'\n });\n }\n }\n\n }\n});\n;// CONCATENATED MODULE: ./src/components/Twitter.vue?vue&type=script&lang=js\n \n// EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/Twitter.vue?vue&type=style&index=0&id=3d2e139c&lang=css\nvar Twittervue_type_style_index_0_id_3d2e139c_lang_css = __webpack_require__(1113);\n;// CONCATENATED MODULE: ./src/components/Twitter.vue?vue&type=style&index=0&id=3d2e139c&lang=css\n\n;// CONCATENATED MODULE: ./src/components/Twitter.vue\n\n\n\n\n;\n\n\nconst Twitter_exports_ = /*#__PURE__*/(0,exportHelper/* default */.Z)(Twittervue_type_script_lang_js, [['render',Twittervue_type_template_id_3d2e139c_render]])\n\n/* harmony default export */ var Twitter = (Twitter_exports_);\n;// CONCATENATED MODULE: ./src/build.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst version = package_namespaceObject.i8;\nconst VueColor = {\n version,\n Compact: Compact,\n Grayscale: Grayscale,\n Twitter: Twitter,\n Material: Material,\n Slider: Slider,\n Swatches: Swatches,\n Photoshop: Photoshop,\n Sketch: Sketch,\n Chrome: Chrome,\n Alpha: Alpha,\n Checkboard: Checkboard,\n EditableInput: EditableInput,\n Hue: Hue,\n Saturation: Saturation,\n ColorMixin: color\n};\n\nif (!(typeof process === 'object' && String(process) === '[object process]')) {\n window.VueColor = VueColor;\n}\n\n/* harmony default export */ var build = (VueColor);\n\n;// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js\n\n\n/* harmony default export */ var entry_lib = (build);\n\n\n}();\nmodule.exports = __webpack_exports__;\n/******/ })()\n;\n//# sourceMappingURL=vue3-color.common.js.map","<script>\nimport { Chrome } from '@lk77/vue3-color';\n\nexport default {\n components: {\n Chrome,\n },\n props: {\n modelValue: {\n type: String,\n default: '',\n },\n },\n emits: ['update:modelValue'],\n data() {\n return {\n isPickerOpen: false,\n };\n },\n methods: {\n closeTogglePicker() {\n if (this.isPickerOpen) {\n this.toggleColorPicker();\n }\n },\n toggleColorPicker() {\n this.isPickerOpen = !this.isPickerOpen;\n },\n updateColor(e) {\n this.$emit('update:modelValue', e.hex);\n },\n },\n};\n</script>\n\n<template>\n <div class=\"colorpicker\">\n <div\n class=\"colorpicker--selected\"\n :style=\"`background-color: ${modelValue}`\"\n @click.prevent=\"toggleColorPicker\"\n />\n <Chrome\n v-if=\"isPickerOpen\"\n v-on-clickaway=\"closeTogglePicker\"\n disable-alpha\n :model-value=\"modelValue\"\n class=\"colorpicker--chrome\"\n @update:model-value=\"updateColor\"\n />\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n@import 'dashboard/assets/scss/variables';\n@import 'dashboard/assets/scss/mixins';\n\n.colorpicker {\n position: relative;\n}\n\n.colorpicker--selected {\n @apply border border-solid border-slate-50 dark:border-slate-600 rounded cursor-pointer h-8 w-8 mb-4;\n}\n\n.colorpicker--chrome.vc-chrome {\n @apply shadow-lg -mt-2.5 absolute z-[9999] border border-solid border-slate-75 dark:border-slate-600 rounded;\n\n ::v-deep {\n input {\n @apply bg-white dark:bg-white;\n }\n }\n}\n</style>\n","import { shallowRef, watchEffect, readonly, ref, watch, customRef, getCurrentScope, onScopeDispose, effectScope, getCurrentInstance, inject, provide, isRef, unref, computed, reactive, toRefs as toRefs$1, toRef as toRef$1, onBeforeMount, nextTick, onBeforeUnmount, onMounted, onUnmounted, isReactive } from 'vue';\n\nfunction computedEager(fn, options) {\n var _a;\n const result = shallowRef();\n watchEffect(() => {\n result.value = fn();\n }, {\n ...options,\n flush: (_a = options == null ? void 0 : options.flush) != null ? _a : \"sync\"\n });\n return readonly(result);\n}\n\nfunction computedWithControl(source, fn) {\n let v = void 0;\n let track;\n let trigger;\n const dirty = ref(true);\n const update = () => {\n dirty.value = true;\n trigger();\n };\n watch(source, update, { flush: \"sync\" });\n const get = typeof fn === \"function\" ? fn : fn.get;\n const set = typeof fn === \"function\" ? void 0 : fn.set;\n const result = customRef((_track, _trigger) => {\n track = _track;\n trigger = _trigger;\n return {\n get() {\n if (dirty.value) {\n v = get(v);\n dirty.value = false;\n }\n track();\n return v;\n },\n set(v2) {\n set == null ? void 0 : set(v2);\n }\n };\n });\n if (Object.isExtensible(result))\n result.trigger = update;\n return result;\n}\n\nfunction tryOnScopeDispose(fn) {\n if (getCurrentScope()) {\n onScopeDispose(fn);\n return true;\n }\n return false;\n}\n\nfunction createEventHook() {\n const fns = /* @__PURE__ */ new Set();\n const off = (fn) => {\n fns.delete(fn);\n };\n const on = (fn) => {\n fns.add(fn);\n const offFn = () => off(fn);\n tryOnScopeDispose(offFn);\n return {\n off: offFn\n };\n };\n const trigger = (...args) => {\n return Promise.all(Array.from(fns).map((fn) => fn(...args)));\n };\n return {\n on,\n off,\n trigger\n };\n}\n\nfunction createGlobalState(stateFactory) {\n let initialized = false;\n let state;\n const scope = effectScope(true);\n return (...args) => {\n if (!initialized) {\n state = scope.run(() => stateFactory(...args));\n initialized = true;\n }\n return state;\n };\n}\n\nconst localProvidedStateMap = /* @__PURE__ */ new WeakMap();\n\nconst injectLocal = (...args) => {\n var _a;\n const key = args[0];\n const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy;\n if (instance == null)\n throw new Error(\"injectLocal must be called in setup\");\n if (localProvidedStateMap.has(instance) && key in localProvidedStateMap.get(instance))\n return localProvidedStateMap.get(instance)[key];\n return inject(...args);\n};\n\nconst provideLocal = (key, value) => {\n var _a;\n const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy;\n if (instance == null)\n throw new Error(\"provideLocal must be called in setup\");\n if (!localProvidedStateMap.has(instance))\n localProvidedStateMap.set(instance, /* @__PURE__ */ Object.create(null));\n const localProvidedState = localProvidedStateMap.get(instance);\n localProvidedState[key] = value;\n provide(key, value);\n};\n\nfunction createInjectionState(composable, options) {\n const key = (options == null ? void 0 : options.injectionKey) || Symbol(composable.name || \"InjectionState\");\n const defaultValue = options == null ? void 0 : options.defaultValue;\n const useProvidingState = (...args) => {\n const state = composable(...args);\n provideLocal(key, state);\n return state;\n };\n const useInjectedState = () => injectLocal(key, defaultValue);\n return [useProvidingState, useInjectedState];\n}\n\nfunction createSharedComposable(composable) {\n let subscribers = 0;\n let state;\n let scope;\n const dispose = () => {\n subscribers -= 1;\n if (scope && subscribers <= 0) {\n scope.stop();\n state = void 0;\n scope = void 0;\n }\n };\n return (...args) => {\n subscribers += 1;\n if (!scope) {\n scope = effectScope(true);\n state = scope.run(() => composable(...args));\n }\n tryOnScopeDispose(dispose);\n return state;\n };\n}\n\nfunction extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n for (const [key, value] of Object.entries(extend)) {\n if (key === \"value\")\n continue;\n if (isRef(value) && unwrap) {\n Object.defineProperty(ref, key, {\n get() {\n return value.value;\n },\n set(v) {\n value.value = v;\n },\n enumerable\n });\n } else {\n Object.defineProperty(ref, key, { value, enumerable });\n }\n }\n return ref;\n}\n\nfunction get(obj, key) {\n if (key == null)\n return unref(obj);\n return unref(obj)[key];\n}\n\nfunction isDefined(v) {\n return unref(v) != null;\n}\n\nfunction makeDestructurable(obj, arr) {\n if (typeof Symbol !== \"undefined\") {\n const clone = { ...obj };\n Object.defineProperty(clone, Symbol.iterator, {\n enumerable: false,\n value() {\n let index = 0;\n return {\n next: () => ({\n value: arr[index++],\n done: index > arr.length\n })\n };\n }\n });\n return clone;\n } else {\n return Object.assign([...arr], obj);\n }\n}\n\nfunction toValue(r) {\n return typeof r === \"function\" ? r() : unref(r);\n}\nconst resolveUnref = toValue;\n\nfunction reactify(fn, options) {\n const unrefFn = (options == null ? void 0 : options.computedGetter) === false ? unref : toValue;\n return function(...args) {\n return computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n };\n}\n\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n let keys = [];\n let options;\n if (Array.isArray(optionsOrKeys)) {\n keys = optionsOrKeys;\n } else {\n options = optionsOrKeys;\n const { includeOwnProperties = true } = optionsOrKeys;\n keys.push(...Object.keys(obj));\n if (includeOwnProperties)\n keys.push(...Object.getOwnPropertyNames(obj));\n }\n return Object.fromEntries(\n keys.map((key) => {\n const value = obj[key];\n return [\n key,\n typeof value === \"function\" ? reactify(value.bind(obj), options) : value\n ];\n })\n );\n}\n\nfunction toReactive(objectRef) {\n if (!isRef(objectRef))\n return reactive(objectRef);\n const proxy = new Proxy({}, {\n get(_, p, receiver) {\n return unref(Reflect.get(objectRef.value, p, receiver));\n },\n set(_, p, value) {\n if (isRef(objectRef.value[p]) && !isRef(value))\n objectRef.value[p].value = value;\n else\n objectRef.value[p] = value;\n return true;\n },\n deleteProperty(_, p) {\n return Reflect.deleteProperty(objectRef.value, p);\n },\n has(_, p) {\n return Reflect.has(objectRef.value, p);\n },\n ownKeys() {\n return Object.keys(objectRef.value);\n },\n getOwnPropertyDescriptor() {\n return {\n enumerable: true,\n configurable: true\n };\n }\n });\n return reactive(proxy);\n}\n\nfunction reactiveComputed(fn) {\n return toReactive(computed(fn));\n}\n\nfunction reactiveOmit(obj, ...keys) {\n const flatKeys = keys.flat();\n const predicate = flatKeys[0];\n return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => !predicate(toValue(v), k))) : Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !flatKeys.includes(e[0]))));\n}\n\nconst isClient = typeof window !== \"undefined\" && typeof document !== \"undefined\";\nconst isWorker = typeof WorkerGlobalScope !== \"undefined\" && globalThis instanceof WorkerGlobalScope;\nconst isDef = (val) => typeof val !== \"undefined\";\nconst notNullish = (val) => val != null;\nconst assert = (condition, ...infos) => {\n if (!condition)\n console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {\n};\nconst rand = (min, max) => {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\nconst isIOS = /* @__PURE__ */ getIsIOS();\nfunction getIsIOS() {\n var _a, _b;\n return isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && (/iP(?:ad|hone|od)/.test(window.navigator.userAgent) || ((_b = window == null ? void 0 : window.navigator) == null ? void 0 : _b.maxTouchPoints) > 2 && /iPad|Macintosh/.test(window == null ? void 0 : window.navigator.userAgent));\n}\n\nfunction createFilterWrapper(filter, fn) {\n function wrapper(...args) {\n return new Promise((resolve, reject) => {\n Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then(resolve).catch(reject);\n });\n }\n return wrapper;\n}\nconst bypassFilter = (invoke) => {\n return invoke();\n};\nfunction debounceFilter(ms, options = {}) {\n let timer;\n let maxTimer;\n let lastRejector = noop;\n const _clearTimeout = (timer2) => {\n clearTimeout(timer2);\n lastRejector();\n lastRejector = noop;\n };\n const filter = (invoke) => {\n const duration = toValue(ms);\n const maxDuration = toValue(options.maxWait);\n if (timer)\n _clearTimeout(timer);\n if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n if (maxTimer) {\n _clearTimeout(maxTimer);\n maxTimer = null;\n }\n return Promise.resolve(invoke());\n }\n return new Promise((resolve, reject) => {\n lastRejector = options.rejectOnCancel ? reject : resolve;\n if (maxDuration && !maxTimer) {\n maxTimer = setTimeout(() => {\n if (timer)\n _clearTimeout(timer);\n maxTimer = null;\n resolve(invoke());\n }, maxDuration);\n }\n timer = setTimeout(() => {\n if (maxTimer)\n _clearTimeout(maxTimer);\n maxTimer = null;\n resolve(invoke());\n }, duration);\n });\n };\n return filter;\n}\nfunction throttleFilter(...args) {\n let lastExec = 0;\n let timer;\n let isLeading = true;\n let lastRejector = noop;\n let lastValue;\n let ms;\n let trailing;\n let leading;\n let rejectOnCancel;\n if (!isRef(args[0]) && typeof args[0] === \"object\")\n ({ delay: ms, trailing = true, leading = true, rejectOnCancel = false } = args[0]);\n else\n [ms, trailing = true, leading = true, rejectOnCancel = false] = args;\n const clear = () => {\n if (timer) {\n clearTimeout(timer);\n timer = void 0;\n lastRejector();\n lastRejector = noop;\n }\n };\n const filter = (_invoke) => {\n const duration = toValue(ms);\n const elapsed = Date.now() - lastExec;\n const invoke = () => {\n return lastValue = _invoke();\n };\n clear();\n if (duration <= 0) {\n lastExec = Date.now();\n return invoke();\n }\n if (elapsed > duration && (leading || !isLeading)) {\n lastExec = Date.now();\n invoke();\n } else if (trailing) {\n lastValue = new Promise((resolve, reject) => {\n lastRejector = rejectOnCancel ? reject : resolve;\n timer = setTimeout(() => {\n lastExec = Date.now();\n isLeading = true;\n resolve(invoke());\n clear();\n }, Math.max(0, duration - elapsed));\n });\n }\n if (!leading && !timer)\n timer = setTimeout(() => isLeading = true, duration);\n isLeading = false;\n return lastValue;\n };\n return filter;\n}\nfunction pausableFilter(extendFilter = bypassFilter) {\n const isActive = ref(true);\n function pause() {\n isActive.value = false;\n }\n function resume() {\n isActive.value = true;\n }\n const eventFilter = (...args) => {\n if (isActive.value)\n extendFilter(...args);\n };\n return { isActive: readonly(isActive), pause, resume, eventFilter };\n}\n\nfunction cacheStringFunction(fn) {\n const cache = /* @__PURE__ */ Object.create(null);\n return (str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n}\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, \"-$1\").toLowerCase());\nconst camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction((str) => {\n return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\n\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n return new Promise((resolve, reject) => {\n if (throwOnTimeout)\n setTimeout(() => reject(reason), ms);\n else\n setTimeout(resolve, ms);\n });\n}\nfunction identity(arg) {\n return arg;\n}\nfunction createSingletonPromise(fn) {\n let _promise;\n function wrapper() {\n if (!_promise)\n _promise = fn();\n return _promise;\n }\n wrapper.reset = async () => {\n const _prev = _promise;\n _promise = void 0;\n if (_prev)\n await _prev;\n };\n return wrapper;\n}\nfunction invoke(fn) {\n return fn();\n}\nfunction containsProp(obj, ...props) {\n return props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n var _a;\n if (typeof target === \"number\")\n return target + delta;\n const value = ((_a = target.match(/^-?\\d+\\.?\\d*/)) == null ? void 0 : _a[0]) || \"\";\n const unit = target.slice(value.length);\n const result = Number.parseFloat(value) + delta;\n if (Number.isNaN(result))\n return target;\n return result + unit;\n}\nfunction objectPick(obj, keys, omitUndefined = false) {\n return keys.reduce((n, k) => {\n if (k in obj) {\n if (!omitUndefined || obj[k] !== void 0)\n n[k] = obj[k];\n }\n return n;\n }, {});\n}\nfunction objectOmit(obj, keys, omitUndefined = false) {\n return Object.fromEntries(Object.entries(obj).filter(([key, value]) => {\n return (!omitUndefined || value !== void 0) && !keys.includes(key);\n }));\n}\nfunction objectEntries(obj) {\n return Object.entries(obj);\n}\nfunction getLifeCycleTarget(target) {\n return target || getCurrentInstance();\n}\n\nfunction toRef(...args) {\n if (args.length !== 1)\n return toRef$1(...args);\n const r = args[0];\n return typeof r === \"function\" ? readonly(customRef(() => ({ get: r, set: noop }))) : ref(r);\n}\nconst resolveRef = toRef;\n\nfunction reactivePick(obj, ...keys) {\n const flatKeys = keys.flat();\n const predicate = flatKeys[0];\n return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => predicate(toValue(v), k))) : Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));\n}\n\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n return customRef((track, trigger) => {\n let value = toValue(defaultValue);\n let timer;\n const resetAfter = () => setTimeout(() => {\n value = toValue(defaultValue);\n trigger();\n }, toValue(afterMs));\n tryOnScopeDispose(() => {\n clearTimeout(timer);\n });\n return {\n get() {\n track();\n return value;\n },\n set(newValue) {\n value = newValue;\n trigger();\n clearTimeout(timer);\n timer = resetAfter();\n }\n };\n });\n}\n\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n return createFilterWrapper(\n debounceFilter(ms, options),\n fn\n );\n}\n\nfunction refDebounced(value, ms = 200, options = {}) {\n const debounced = ref(value.value);\n const updater = useDebounceFn(() => {\n debounced.value = value.value;\n }, ms, options);\n watch(value, () => updater());\n return debounced;\n}\n\nfunction refDefault(source, defaultValue) {\n return computed({\n get() {\n var _a;\n return (_a = source.value) != null ? _a : defaultValue;\n },\n set(value) {\n source.value = value;\n }\n });\n}\n\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n return createFilterWrapper(\n throttleFilter(ms, trailing, leading, rejectOnCancel),\n fn\n );\n}\n\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n if (delay <= 0)\n return value;\n const throttled = ref(value.value);\n const updater = useThrottleFn(() => {\n throttled.value = value.value;\n }, delay, trailing, leading);\n watch(value, () => updater());\n return throttled;\n}\n\nfunction refWithControl(initial, options = {}) {\n let source = initial;\n let track;\n let trigger;\n const ref = customRef((_track, _trigger) => {\n track = _track;\n trigger = _trigger;\n return {\n get() {\n return get();\n },\n set(v) {\n set(v);\n }\n };\n });\n function get(tracking = true) {\n if (tracking)\n track();\n return source;\n }\n function set(value, triggering = true) {\n var _a, _b;\n if (value === source)\n return;\n const old = source;\n if (((_a = options.onBeforeChange) == null ? void 0 : _a.call(options, value, old)) === false)\n return;\n source = value;\n (_b = options.onChanged) == null ? void 0 : _b.call(options, value, old);\n if (triggering)\n trigger();\n }\n const untrackedGet = () => get(false);\n const silentSet = (v) => set(v, false);\n const peek = () => get(false);\n const lay = (v) => set(v, false);\n return extendRef(\n ref,\n {\n get,\n set,\n untrackedGet,\n silentSet,\n peek,\n lay\n },\n { enumerable: true }\n );\n}\nconst controlledRef = refWithControl;\n\nfunction set(...args) {\n if (args.length === 2) {\n const [ref, value] = args;\n ref.value = value;\n }\n if (args.length === 3) {\n const [target, key, value] = args;\n target[key] = value;\n }\n}\n\nfunction watchWithFilter(source, cb, options = {}) {\n const {\n eventFilter = bypassFilter,\n ...watchOptions\n } = options;\n return watch(\n source,\n createFilterWrapper(\n eventFilter,\n cb\n ),\n watchOptions\n );\n}\n\nfunction watchPausable(source, cb, options = {}) {\n const {\n eventFilter: filter,\n ...watchOptions\n } = options;\n const { eventFilter, pause, resume, isActive } = pausableFilter(filter);\n const stop = watchWithFilter(\n source,\n cb,\n {\n ...watchOptions,\n eventFilter\n }\n );\n return { stop, pause, resume, isActive };\n}\n\nfunction syncRef(left, right, ...[options]) {\n const {\n flush = \"sync\",\n deep = false,\n immediate = true,\n direction = \"both\",\n transform = {}\n } = options || {};\n const watchers = [];\n const transformLTR = \"ltr\" in transform && transform.ltr || ((v) => v);\n const transformRTL = \"rtl\" in transform && transform.rtl || ((v) => v);\n if (direction === \"both\" || direction === \"ltr\") {\n watchers.push(watchPausable(\n left,\n (newValue) => {\n watchers.forEach((w) => w.pause());\n right.value = transformLTR(newValue);\n watchers.forEach((w) => w.resume());\n },\n { flush, deep, immediate }\n ));\n }\n if (direction === \"both\" || direction === \"rtl\") {\n watchers.push(watchPausable(\n right,\n (newValue) => {\n watchers.forEach((w) => w.pause());\n left.value = transformRTL(newValue);\n watchers.forEach((w) => w.resume());\n },\n { flush, deep, immediate }\n ));\n }\n const stop = () => {\n watchers.forEach((w) => w.stop());\n };\n return stop;\n}\n\nfunction syncRefs(source, targets, options = {}) {\n const {\n flush = \"sync\",\n deep = false,\n immediate = true\n } = options;\n if (!Array.isArray(targets))\n targets = [targets];\n return watch(\n source,\n (newValue) => targets.forEach((target) => target.value = newValue),\n { flush, deep, immediate }\n );\n}\n\nfunction toRefs(objectRef, options = {}) {\n if (!isRef(objectRef))\n return toRefs$1(objectRef);\n const result = Array.isArray(objectRef.value) ? Array.from({ length: objectRef.value.length }) : {};\n for (const key in objectRef.value) {\n result[key] = customRef(() => ({\n get() {\n return objectRef.value[key];\n },\n set(v) {\n var _a;\n const replaceRef = (_a = toValue(options.replaceRef)) != null ? _a : true;\n if (replaceRef) {\n if (Array.isArray(objectRef.value)) {\n const copy = [...objectRef.value];\n copy[key] = v;\n objectRef.value = copy;\n } else {\n const newObject = { ...objectRef.value, [key]: v };\n Object.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value));\n objectRef.value = newObject;\n }\n } else {\n objectRef.value[key] = v;\n }\n }\n }));\n }\n return result;\n}\n\nfunction tryOnBeforeMount(fn, sync = true, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onBeforeMount(fn, target);\n else if (sync)\n fn();\n else\n nextTick(fn);\n}\n\nfunction tryOnBeforeUnmount(fn, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onBeforeUnmount(fn, target);\n}\n\nfunction tryOnMounted(fn, sync = true, target) {\n const instance = getLifeCycleTarget();\n if (instance)\n onMounted(fn, target);\n else if (sync)\n fn();\n else\n nextTick(fn);\n}\n\nfunction tryOnUnmounted(fn, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onUnmounted(fn, target);\n}\n\nfunction createUntil(r, isNot = false) {\n function toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n let stop = null;\n const watcher = new Promise((resolve) => {\n stop = watch(\n r,\n (v) => {\n if (condition(v) !== isNot) {\n if (stop)\n stop();\n else\n nextTick(() => stop == null ? void 0 : stop());\n resolve(v);\n }\n },\n {\n flush,\n deep,\n immediate: true\n }\n );\n });\n const promises = [watcher];\n if (timeout != null) {\n promises.push(\n promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => stop == null ? void 0 : stop())\n );\n }\n return Promise.race(promises);\n }\n function toBe(value, options) {\n if (!isRef(value))\n return toMatch((v) => v === value, options);\n const { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options != null ? options : {};\n let stop = null;\n const watcher = new Promise((resolve) => {\n stop = watch(\n [r, value],\n ([v1, v2]) => {\n if (isNot !== (v1 === v2)) {\n if (stop)\n stop();\n else\n nextTick(() => stop == null ? void 0 : stop());\n resolve(v1);\n }\n },\n {\n flush,\n deep,\n immediate: true\n }\n );\n });\n const promises = [watcher];\n if (timeout != null) {\n promises.push(\n promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => {\n stop == null ? void 0 : stop();\n return toValue(r);\n })\n );\n }\n return Promise.race(promises);\n }\n function toBeTruthy(options) {\n return toMatch((v) => Boolean(v), options);\n }\n function toBeNull(options) {\n return toBe(null, options);\n }\n function toBeUndefined(options) {\n return toBe(void 0, options);\n }\n function toBeNaN(options) {\n return toMatch(Number.isNaN, options);\n }\n function toContains(value, options) {\n return toMatch((v) => {\n const array = Array.from(v);\n return array.includes(value) || array.includes(toValue(value));\n }, options);\n }\n function changed(options) {\n return changedTimes(1, options);\n }\n function changedTimes(n = 1, options) {\n let count = -1;\n return toMatch(() => {\n count += 1;\n return count >= n;\n }, options);\n }\n if (Array.isArray(toValue(r))) {\n const instance = {\n toMatch,\n toContains,\n changed,\n changedTimes,\n get not() {\n return createUntil(r, !isNot);\n }\n };\n return instance;\n } else {\n const instance = {\n toMatch,\n toBe,\n toBeTruthy,\n toBeNull,\n toBeNaN,\n toBeUndefined,\n changed,\n changedTimes,\n get not() {\n return createUntil(r, !isNot);\n }\n };\n return instance;\n }\n}\nfunction until(r) {\n return createUntil(r);\n}\n\nfunction defaultComparator(value, othVal) {\n return value === othVal;\n}\nfunction useArrayDifference(...args) {\n var _a;\n const list = args[0];\n const values = args[1];\n let compareFn = (_a = args[2]) != null ? _a : defaultComparator;\n if (typeof compareFn === \"string\") {\n const key = compareFn;\n compareFn = (value, othVal) => value[key] === othVal[key];\n }\n return computed(() => toValue(list).filter((x) => toValue(values).findIndex((y) => compareFn(x, y)) === -1));\n}\n\nfunction useArrayEvery(list, fn) {\n return computed(() => toValue(list).every((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction useArrayFilter(list, fn) {\n return computed(() => toValue(list).map((i) => toValue(i)).filter(fn));\n}\n\nfunction useArrayFind(list, fn) {\n return computed(() => toValue(\n toValue(list).find((element, index, array) => fn(toValue(element), index, array))\n ));\n}\n\nfunction useArrayFindIndex(list, fn) {\n return computed(() => toValue(list).findIndex((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction findLast(arr, cb) {\n let index = arr.length;\n while (index-- > 0) {\n if (cb(arr[index], index, arr))\n return arr[index];\n }\n return void 0;\n}\nfunction useArrayFindLast(list, fn) {\n return computed(() => toValue(\n !Array.prototype.findLast ? findLast(toValue(list), (element, index, array) => fn(toValue(element), index, array)) : toValue(list).findLast((element, index, array) => fn(toValue(element), index, array))\n ));\n}\n\nfunction isArrayIncludesOptions(obj) {\n return isObject(obj) && containsProp(obj, \"formIndex\", \"comparator\");\n}\nfunction useArrayIncludes(...args) {\n var _a;\n const list = args[0];\n const value = args[1];\n let comparator = args[2];\n let formIndex = 0;\n if (isArrayIncludesOptions(comparator)) {\n formIndex = (_a = comparator.fromIndex) != null ? _a : 0;\n comparator = comparator.comparator;\n }\n if (typeof comparator === \"string\") {\n const key = comparator;\n comparator = (element, value2) => element[key] === toValue(value2);\n }\n comparator = comparator != null ? comparator : (element, value2) => element === toValue(value2);\n return computed(() => toValue(list).slice(formIndex).some((element, index, array) => comparator(\n toValue(element),\n toValue(value),\n index,\n toValue(array)\n )));\n}\n\nfunction useArrayJoin(list, separator) {\n return computed(() => toValue(list).map((i) => toValue(i)).join(toValue(separator)));\n}\n\nfunction useArrayMap(list, fn) {\n return computed(() => toValue(list).map((i) => toValue(i)).map(fn));\n}\n\nfunction useArrayReduce(list, reducer, ...args) {\n const reduceCallback = (sum, value, index) => reducer(toValue(sum), toValue(value), index);\n return computed(() => {\n const resolved = toValue(list);\n return args.length ? resolved.reduce(reduceCallback, typeof args[0] === \"function\" ? toValue(args[0]()) : toValue(args[0])) : resolved.reduce(reduceCallback);\n });\n}\n\nfunction useArraySome(list, fn) {\n return computed(() => toValue(list).some((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction uniq(array) {\n return Array.from(new Set(array));\n}\nfunction uniqueElementsBy(array, fn) {\n return array.reduce((acc, v) => {\n if (!acc.some((x) => fn(v, x, array)))\n acc.push(v);\n return acc;\n }, []);\n}\nfunction useArrayUnique(list, compareFn) {\n return computed(() => {\n const resolvedList = toValue(list).map((element) => toValue(element));\n return compareFn ? uniqueElementsBy(resolvedList, compareFn) : uniq(resolvedList);\n });\n}\n\nfunction useCounter(initialValue = 0, options = {}) {\n let _initialValue = unref(initialValue);\n const count = ref(initialValue);\n const {\n max = Number.POSITIVE_INFINITY,\n min = Number.NEGATIVE_INFINITY\n } = options;\n const inc = (delta = 1) => count.value = Math.max(Math.min(max, count.value + delta), min);\n const dec = (delta = 1) => count.value = Math.min(Math.max(min, count.value - delta), max);\n const get = () => count.value;\n const set = (val) => count.value = Math.max(min, Math.min(max, val));\n const reset = (val = _initialValue) => {\n _initialValue = val;\n return set(val);\n };\n return { count, inc, dec, get, set, reset };\n}\n\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[T\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/i;\nconst REGEX_FORMAT = /[YMDHhms]o|\\[([^\\]]+)\\]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|SSS/g;\nfunction defaultMeridiem(hours, minutes, isLowercase, hasPeriod) {\n let m = hours < 12 ? \"AM\" : \"PM\";\n if (hasPeriod)\n m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n return isLowercase ? m.toLowerCase() : m;\n}\nfunction formatOrdinal(num) {\n const suffixes = [\"th\", \"st\", \"nd\", \"rd\"];\n const v = num % 100;\n return num + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0]);\n}\nfunction formatDate(date, formatStr, options = {}) {\n var _a;\n const years = date.getFullYear();\n const month = date.getMonth();\n const days = date.getDate();\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const seconds = date.getSeconds();\n const milliseconds = date.getMilliseconds();\n const day = date.getDay();\n const meridiem = (_a = options.customMeridiem) != null ? _a : defaultMeridiem;\n const matches = {\n Yo: () => formatOrdinal(years),\n YY: () => String(years).slice(-2),\n YYYY: () => years,\n M: () => month + 1,\n Mo: () => formatOrdinal(month + 1),\n MM: () => `${month + 1}`.padStart(2, \"0\"),\n MMM: () => date.toLocaleDateString(toValue(options.locales), { month: \"short\" }),\n MMMM: () => date.toLocaleDateString(toValue(options.locales), { month: \"long\" }),\n D: () => String(days),\n Do: () => formatOrdinal(days),\n DD: () => `${days}`.padStart(2, \"0\"),\n H: () => String(hours),\n Ho: () => formatOrdinal(hours),\n HH: () => `${hours}`.padStart(2, \"0\"),\n h: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n ho: () => formatOrdinal(hours % 12 || 12),\n hh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n m: () => String(minutes),\n mo: () => formatOrdinal(minutes),\n mm: () => `${minutes}`.padStart(2, \"0\"),\n s: () => String(seconds),\n so: () => formatOrdinal(seconds),\n ss: () => `${seconds}`.padStart(2, \"0\"),\n SSS: () => `${milliseconds}`.padStart(3, \"0\"),\n d: () => day,\n dd: () => date.toLocaleDateString(toValue(options.locales), { weekday: \"narrow\" }),\n ddd: () => date.toLocaleDateString(toValue(options.locales), { weekday: \"short\" }),\n dddd: () => date.toLocaleDateString(toValue(options.locales), { weekday: \"long\" }),\n A: () => meridiem(hours, minutes),\n AA: () => meridiem(hours, minutes, false, true),\n a: () => meridiem(hours, minutes, true),\n aa: () => meridiem(hours, minutes, true, true)\n };\n return formatStr.replace(REGEX_FORMAT, (match, $1) => {\n var _a2, _b;\n return (_b = $1 != null ? $1 : (_a2 = matches[match]) == null ? void 0 : _a2.call(matches)) != null ? _b : match;\n });\n}\nfunction normalizeDate(date) {\n if (date === null)\n return new Date(Number.NaN);\n if (date === void 0)\n return /* @__PURE__ */ new Date();\n if (date instanceof Date)\n return new Date(date);\n if (typeof date === \"string\" && !/Z$/i.test(date)) {\n const d = date.match(REGEX_PARSE);\n if (d) {\n const m = d[2] - 1 || 0;\n const ms = (d[7] || \"0\").substring(0, 3);\n return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n }\n }\n return new Date(date);\n}\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n return computed(() => formatDate(normalizeDate(toValue(date)), toValue(formatStr), options));\n}\n\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n const {\n immediate = true,\n immediateCallback = false\n } = options;\n let timer = null;\n const isActive = ref(false);\n function clean() {\n if (timer) {\n clearInterval(timer);\n timer = null;\n }\n }\n function pause() {\n isActive.value = false;\n clean();\n }\n function resume() {\n const intervalValue = toValue(interval);\n if (intervalValue <= 0)\n return;\n isActive.value = true;\n if (immediateCallback)\n cb();\n clean();\n if (isActive.value)\n timer = setInterval(cb, intervalValue);\n }\n if (immediate && isClient)\n resume();\n if (isRef(interval) || typeof interval === \"function\") {\n const stopWatch = watch(interval, () => {\n if (isActive.value && isClient)\n resume();\n });\n tryOnScopeDispose(stopWatch);\n }\n tryOnScopeDispose(pause);\n return {\n isActive,\n pause,\n resume\n };\n}\n\nfunction useInterval(interval = 1e3, options = {}) {\n const {\n controls: exposeControls = false,\n immediate = true,\n callback\n } = options;\n const counter = ref(0);\n const update = () => counter.value += 1;\n const reset = () => {\n counter.value = 0;\n };\n const controls = useIntervalFn(\n callback ? () => {\n update();\n callback(counter.value);\n } : update,\n interval,\n { immediate }\n );\n if (exposeControls) {\n return {\n counter,\n reset,\n ...controls\n };\n } else {\n return counter;\n }\n}\n\nfunction useLastChanged(source, options = {}) {\n var _a;\n const ms = ref((_a = options.initialValue) != null ? _a : null);\n watch(\n source,\n () => ms.value = timestamp(),\n options\n );\n return ms;\n}\n\nfunction useTimeoutFn(cb, interval, options = {}) {\n const {\n immediate = true\n } = options;\n const isPending = ref(false);\n let timer = null;\n function clear() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n }\n function stop() {\n isPending.value = false;\n clear();\n }\n function start(...args) {\n clear();\n isPending.value = true;\n timer = setTimeout(() => {\n isPending.value = false;\n timer = null;\n cb(...args);\n }, toValue(interval));\n }\n if (immediate) {\n isPending.value = true;\n if (isClient)\n start();\n }\n tryOnScopeDispose(stop);\n return {\n isPending: readonly(isPending),\n start,\n stop\n };\n}\n\nfunction useTimeout(interval = 1e3, options = {}) {\n const {\n controls: exposeControls = false,\n callback\n } = options;\n const controls = useTimeoutFn(\n callback != null ? callback : noop,\n interval,\n options\n );\n const ready = computed(() => !controls.isPending.value);\n if (exposeControls) {\n return {\n ready,\n ...controls\n };\n } else {\n return ready;\n }\n}\n\nfunction useToNumber(value, options = {}) {\n const {\n method = \"parseFloat\",\n radix,\n nanToZero\n } = options;\n return computed(() => {\n let resolved = toValue(value);\n if (typeof resolved === \"string\")\n resolved = Number[method](resolved, radix);\n if (nanToZero && Number.isNaN(resolved))\n resolved = 0;\n return resolved;\n });\n}\n\nfunction useToString(value) {\n return computed(() => `${toValue(value)}`);\n}\n\nfunction useToggle(initialValue = false, options = {}) {\n const {\n truthyValue = true,\n falsyValue = false\n } = options;\n const valueIsRef = isRef(initialValue);\n const _value = ref(initialValue);\n function toggle(value) {\n if (arguments.length) {\n _value.value = value;\n return _value.value;\n } else {\n const truthy = toValue(truthyValue);\n _value.value = _value.value === truthy ? toValue(falsyValue) : truthy;\n return _value.value;\n }\n }\n if (valueIsRef)\n return toggle;\n else\n return [_value, toggle];\n}\n\nfunction watchArray(source, cb, options) {\n let oldList = (options == null ? void 0 : options.immediate) ? [] : [...source instanceof Function ? source() : Array.isArray(source) ? source : toValue(source)];\n return watch(source, (newList, _, onCleanup) => {\n const oldListRemains = Array.from({ length: oldList.length });\n const added = [];\n for (const obj of newList) {\n let found = false;\n for (let i = 0; i < oldList.length; i++) {\n if (!oldListRemains[i] && obj === oldList[i]) {\n oldListRemains[i] = true;\n found = true;\n break;\n }\n }\n if (!found)\n added.push(obj);\n }\n const removed = oldList.filter((_2, i) => !oldListRemains[i]);\n cb(newList, oldList, added, removed, onCleanup);\n oldList = [...newList];\n }, options);\n}\n\nfunction watchAtMost(source, cb, options) {\n const {\n count,\n ...watchOptions\n } = options;\n const current = ref(0);\n const stop = watchWithFilter(\n source,\n (...args) => {\n current.value += 1;\n if (current.value >= toValue(count))\n nextTick(() => stop());\n cb(...args);\n },\n watchOptions\n );\n return { count: current, stop };\n}\n\nfunction watchDebounced(source, cb, options = {}) {\n const {\n debounce = 0,\n maxWait = void 0,\n ...watchOptions\n } = options;\n return watchWithFilter(\n source,\n cb,\n {\n ...watchOptions,\n eventFilter: debounceFilter(debounce, { maxWait })\n }\n );\n}\n\nfunction watchDeep(source, cb, options) {\n return watch(\n source,\n cb,\n {\n ...options,\n deep: true\n }\n );\n}\n\nfunction watchIgnorable(source, cb, options = {}) {\n const {\n eventFilter = bypassFilter,\n ...watchOptions\n } = options;\n const filteredCb = createFilterWrapper(\n eventFilter,\n cb\n );\n let ignoreUpdates;\n let ignorePrevAsyncUpdates;\n let stop;\n if (watchOptions.flush === \"sync\") {\n const ignore = ref(false);\n ignorePrevAsyncUpdates = () => {\n };\n ignoreUpdates = (updater) => {\n ignore.value = true;\n updater();\n ignore.value = false;\n };\n stop = watch(\n source,\n (...args) => {\n if (!ignore.value)\n filteredCb(...args);\n },\n watchOptions\n );\n } else {\n const disposables = [];\n const ignoreCounter = ref(0);\n const syncCounter = ref(0);\n ignorePrevAsyncUpdates = () => {\n ignoreCounter.value = syncCounter.value;\n };\n disposables.push(\n watch(\n source,\n () => {\n syncCounter.value++;\n },\n { ...watchOptions, flush: \"sync\" }\n )\n );\n ignoreUpdates = (updater) => {\n const syncCounterPrev = syncCounter.value;\n updater();\n ignoreCounter.value += syncCounter.value - syncCounterPrev;\n };\n disposables.push(\n watch(\n source,\n (...args) => {\n const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value;\n ignoreCounter.value = 0;\n syncCounter.value = 0;\n if (ignore)\n return;\n filteredCb(...args);\n },\n watchOptions\n )\n );\n stop = () => {\n disposables.forEach((fn) => fn());\n };\n }\n return { stop, ignoreUpdates, ignorePrevAsyncUpdates };\n}\n\nfunction watchImmediate(source, cb, options) {\n return watch(\n source,\n cb,\n {\n ...options,\n immediate: true\n }\n );\n}\n\nfunction watchOnce(source, cb, options) {\n const stop = watch(source, (...args) => {\n nextTick(() => stop());\n return cb(...args);\n }, options);\n return stop;\n}\n\nfunction watchThrottled(source, cb, options = {}) {\n const {\n throttle = 0,\n trailing = true,\n leading = true,\n ...watchOptions\n } = options;\n return watchWithFilter(\n source,\n cb,\n {\n ...watchOptions,\n eventFilter: throttleFilter(throttle, trailing, leading)\n }\n );\n}\n\nfunction watchTriggerable(source, cb, options = {}) {\n let cleanupFn;\n function onEffect() {\n if (!cleanupFn)\n return;\n const fn = cleanupFn;\n cleanupFn = void 0;\n fn();\n }\n function onCleanup(callback) {\n cleanupFn = callback;\n }\n const _cb = (value, oldValue) => {\n onEffect();\n return cb(value, oldValue, onCleanup);\n };\n const res = watchIgnorable(source, _cb, options);\n const { ignoreUpdates } = res;\n const trigger = () => {\n let res2;\n ignoreUpdates(() => {\n res2 = _cb(getWatchSources(source), getOldValue(source));\n });\n return res2;\n };\n return {\n ...res,\n trigger\n };\n}\nfunction getWatchSources(sources) {\n if (isReactive(sources))\n return sources;\n if (Array.isArray(sources))\n return sources.map((item) => toValue(item));\n return toValue(sources);\n}\nfunction getOldValue(source) {\n return Array.isArray(source) ? source.map(() => void 0) : void 0;\n}\n\nfunction whenever(source, cb, options) {\n const stop = watch(\n source,\n (v, ov, onInvalidate) => {\n if (v) {\n if (options == null ? void 0 : options.once)\n nextTick(() => stop());\n cb(v, ov, onInvalidate);\n }\n },\n {\n ...options,\n once: false\n }\n );\n return stop;\n}\n\nexport { assert, refAutoReset as autoResetRef, bypassFilter, camelize, clamp, computedEager, computedWithControl, containsProp, computedWithControl as controlledComputed, controlledRef, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, reactify as createReactiveFn, createSharedComposable, createSingletonPromise, debounceFilter, refDebounced as debouncedRef, watchDebounced as debouncedWatch, computedEager as eagerComputed, extendRef, formatDate, get, getLifeCycleTarget, hasOwn, hyphenate, identity, watchIgnorable as ignorableWatch, increaseWithUnit, injectLocal, invoke, isClient, isDef, isDefined, isIOS, isObject, isWorker, makeDestructurable, noop, normalizeDate, notNullish, now, objectEntries, objectOmit, objectPick, pausableFilter, watchPausable as pausableWatch, promiseTimeout, provideLocal, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refThrottled, refWithControl, resolveRef, resolveUnref, set, syncRef, syncRefs, throttleFilter, refThrottled as throttledRef, watchThrottled as throttledWatch, timestamp, toReactive, toRef, toRefs, toValue, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayDifference, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayFindLast, useArrayIncludes, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useArrayUnique, useCounter, useDateFormat, refDebounced as useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, refThrottled as useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchDeep, watchIgnorable, watchImmediate, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };\n","import { noop, makeDestructurable, camelize, toValue, isClient, isObject, tryOnScopeDispose, isIOS, tryOnMounted, notNullish, objectOmit, promiseTimeout, until, increaseWithUnit, objectEntries, createSingletonPromise, useTimeoutFn, pausableWatch, toRef, createEventHook, computedWithControl, timestamp, pausableFilter, watchIgnorable, debounceFilter, createFilterWrapper, bypassFilter, toRefs, useIntervalFn, containsProp, hasOwn, throttleFilter, useDebounceFn, useThrottleFn, tryOnUnmounted, clamp, syncRef, objectPick, watchWithFilter, tryOnBeforeUnmount, identity, isDef, whenever, isWorker } from '@vueuse/shared';\nexport * from '@vueuse/shared';\nimport { isRef, ref, shallowRef, watchEffect, computed, inject, defineComponent, h, TransitionGroup, shallowReactive, Fragment, watch, getCurrentInstance, customRef, onUpdated, onMounted, readonly, reactive, toRaw, nextTick, markRaw, unref, getCurrentScope, isReadonly, onBeforeUpdate } from 'vue';\n\nfunction computedAsync(evaluationCallback, initialState, optionsOrRef) {\n let options;\n if (isRef(optionsOrRef)) {\n options = {\n evaluating: optionsOrRef\n };\n } else {\n options = optionsOrRef || {};\n }\n const {\n lazy = false,\n evaluating = void 0,\n shallow = true,\n onError = noop\n } = options;\n const started = ref(!lazy);\n const current = shallow ? shallowRef(initialState) : ref(initialState);\n let counter = 0;\n watchEffect(async (onInvalidate) => {\n if (!started.value)\n return;\n counter++;\n const counterAtBeginning = counter;\n let hasFinished = false;\n if (evaluating) {\n Promise.resolve().then(() => {\n evaluating.value = true;\n });\n }\n try {\n const result = await evaluationCallback((cancelCallback) => {\n onInvalidate(() => {\n if (evaluating)\n evaluating.value = false;\n if (!hasFinished)\n cancelCallback();\n });\n });\n if (counterAtBeginning === counter)\n current.value = result;\n } catch (e) {\n onError(e);\n } finally {\n if (evaluating && counterAtBeginning === counter)\n evaluating.value = false;\n hasFinished = true;\n }\n });\n if (lazy) {\n return computed(() => {\n started.value = true;\n return current.value;\n });\n } else {\n return current;\n }\n}\n\nfunction computedInject(key, options, defaultSource, treatDefaultAsFactory) {\n let source = inject(key);\n if (defaultSource)\n source = inject(key, defaultSource);\n if (treatDefaultAsFactory)\n source = inject(key, defaultSource, treatDefaultAsFactory);\n if (typeof options === \"function\") {\n return computed((ctx) => options(source, ctx));\n } else {\n return computed({\n get: (ctx) => options.get(source, ctx),\n set: options.set\n });\n }\n}\n\nfunction createReusableTemplate(options = {}) {\n const {\n inheritAttrs = true\n } = options;\n const render = shallowRef();\n const define = /* #__PURE__ */ defineComponent({\n setup(_, { slots }) {\n return () => {\n render.value = slots.default;\n };\n }\n });\n const reuse = /* #__PURE__ */ defineComponent({\n inheritAttrs,\n setup(_, { attrs, slots }) {\n return () => {\n var _a;\n if (!render.value && process.env.NODE_ENV !== \"production\")\n throw new Error(\"[VueUse] Failed to find the definition of reusable template\");\n const vnode = (_a = render.value) == null ? void 0 : _a.call(render, { ...keysToCamelKebabCase(attrs), $slots: slots });\n return inheritAttrs && (vnode == null ? void 0 : vnode.length) === 1 ? vnode[0] : vnode;\n };\n }\n });\n return makeDestructurable(\n { define, reuse },\n [define, reuse]\n );\n}\nfunction keysToCamelKebabCase(obj) {\n const newObj = {};\n for (const key in obj)\n newObj[camelize(key)] = obj[key];\n return newObj;\n}\n\nfunction createTemplatePromise(options = {}) {\n let index = 0;\n const instances = ref([]);\n function create(...args) {\n const props = shallowReactive({\n key: index++,\n args,\n promise: void 0,\n resolve: () => {\n },\n reject: () => {\n },\n isResolving: false,\n options\n });\n instances.value.push(props);\n props.promise = new Promise((_resolve, _reject) => {\n props.resolve = (v) => {\n props.isResolving = true;\n return _resolve(v);\n };\n props.reject = _reject;\n }).finally(() => {\n props.promise = void 0;\n const index2 = instances.value.indexOf(props);\n if (index2 !== -1)\n instances.value.splice(index2, 1);\n });\n return props.promise;\n }\n function start(...args) {\n if (options.singleton && instances.value.length > 0)\n return instances.value[0].promise;\n return create(...args);\n }\n const component = /* #__PURE__ */ defineComponent((_, { slots }) => {\n const renderList = () => instances.value.map((props) => {\n var _a;\n return h(Fragment, { key: props.key }, (_a = slots.default) == null ? void 0 : _a.call(slots, props));\n });\n if (options.transition)\n return () => h(TransitionGroup, options.transition, renderList);\n return renderList;\n });\n component.start = start;\n return component;\n}\n\nfunction createUnrefFn(fn) {\n return function(...args) {\n return fn.apply(this, args.map((i) => toValue(i)));\n };\n}\n\nconst defaultWindow = isClient ? window : void 0;\nconst defaultDocument = isClient ? window.document : void 0;\nconst defaultNavigator = isClient ? window.navigator : void 0;\nconst defaultLocation = isClient ? window.location : void 0;\n\nfunction unrefElement(elRef) {\n var _a;\n const plain = toValue(elRef);\n return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;\n}\n\nfunction useEventListener(...args) {\n let target;\n let events;\n let listeners;\n let options;\n if (typeof args[0] === \"string\" || Array.isArray(args[0])) {\n [events, listeners, options] = args;\n target = defaultWindow;\n } else {\n [target, events, listeners, options] = args;\n }\n if (!target)\n return noop;\n if (!Array.isArray(events))\n events = [events];\n if (!Array.isArray(listeners))\n listeners = [listeners];\n const cleanups = [];\n const cleanup = () => {\n cleanups.forEach((fn) => fn());\n cleanups.length = 0;\n };\n const register = (el, event, listener, options2) => {\n el.addEventListener(event, listener, options2);\n return () => el.removeEventListener(event, listener, options2);\n };\n const stopWatch = watch(\n () => [unrefElement(target), toValue(options)],\n ([el, options2]) => {\n cleanup();\n if (!el)\n return;\n const optionsClone = isObject(options2) ? { ...options2 } : options2;\n cleanups.push(\n ...events.flatMap((event) => {\n return listeners.map((listener) => register(el, event, listener, optionsClone));\n })\n );\n },\n { immediate: true, flush: \"post\" }\n );\n const stop = () => {\n stopWatch();\n cleanup();\n };\n tryOnScopeDispose(stop);\n return stop;\n}\n\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n const { window = defaultWindow, ignore = [], capture = true, detectIframe = false } = options;\n if (!window)\n return noop;\n if (isIOS && !_iOSWorkaround) {\n _iOSWorkaround = true;\n Array.from(window.document.body.children).forEach((el) => el.addEventListener(\"click\", noop));\n window.document.documentElement.addEventListener(\"click\", noop);\n }\n let shouldListen = true;\n const shouldIgnore = (event) => {\n return toValue(ignore).some((target2) => {\n if (typeof target2 === \"string\") {\n return Array.from(window.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el));\n } else {\n const el = unrefElement(target2);\n return el && (event.target === el || event.composedPath().includes(el));\n }\n });\n };\n function hasMultipleRoots(target2) {\n const vm = toValue(target2);\n return vm && vm.$.subTree.shapeFlag === 16;\n }\n function checkMultipleRoots(target2, event) {\n const vm = toValue(target2);\n const children = vm.$.subTree && vm.$.subTree.children;\n if (children == null || !Array.isArray(children))\n return false;\n return children.some((child) => child.el === event.target || event.composedPath().includes(child.el));\n }\n const listener = (event) => {\n const el = unrefElement(target);\n if (event.target == null)\n return;\n if (!(el instanceof Element) && hasMultipleRoots(target) && checkMultipleRoots(target, event))\n return;\n if (!el || el === event.target || event.composedPath().includes(el))\n return;\n if (event.detail === 0)\n shouldListen = !shouldIgnore(event);\n if (!shouldListen) {\n shouldListen = true;\n return;\n }\n handler(event);\n };\n let isProcessingClick = false;\n const cleanup = [\n useEventListener(window, \"click\", (event) => {\n if (!isProcessingClick) {\n isProcessingClick = true;\n setTimeout(() => {\n isProcessingClick = false;\n }, 0);\n listener(event);\n }\n }, { passive: true, capture }),\n useEventListener(window, \"pointerdown\", (e) => {\n const el = unrefElement(target);\n shouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));\n }, { passive: true }),\n detectIframe && useEventListener(window, \"blur\", (event) => {\n setTimeout(() => {\n var _a;\n const el = unrefElement(target);\n if (((_a = window.document.activeElement) == null ? void 0 : _a.tagName) === \"IFRAME\" && !(el == null ? void 0 : el.contains(window.document.activeElement))) {\n handler(event);\n }\n }, 0);\n })\n ].filter(Boolean);\n const stop = () => cleanup.forEach((fn) => fn());\n return stop;\n}\n\nfunction createKeyPredicate(keyFilter) {\n if (typeof keyFilter === \"function\")\n return keyFilter;\n else if (typeof keyFilter === \"string\")\n return (event) => event.key === keyFilter;\n else if (Array.isArray(keyFilter))\n return (event) => keyFilter.includes(event.key);\n return () => true;\n}\nfunction onKeyStroke(...args) {\n let key;\n let handler;\n let options = {};\n if (args.length === 3) {\n key = args[0];\n handler = args[1];\n options = args[2];\n } else if (args.length === 2) {\n if (typeof args[1] === \"object\") {\n key = true;\n handler = args[0];\n options = args[1];\n } else {\n key = args[0];\n handler = args[1];\n }\n } else {\n key = true;\n handler = args[0];\n }\n const {\n target = defaultWindow,\n eventName = \"keydown\",\n passive = false,\n dedupe = false\n } = options;\n const predicate = createKeyPredicate(key);\n const listener = (e) => {\n if (e.repeat && toValue(dedupe))\n return;\n if (predicate(e))\n handler(e);\n };\n return useEventListener(target, eventName, listener, passive);\n}\nfunction onKeyDown(key, handler, options = {}) {\n return onKeyStroke(key, handler, { ...options, eventName: \"keydown\" });\n}\nfunction onKeyPressed(key, handler, options = {}) {\n return onKeyStroke(key, handler, { ...options, eventName: \"keypress\" });\n}\nfunction onKeyUp(key, handler, options = {}) {\n return onKeyStroke(key, handler, { ...options, eventName: \"keyup\" });\n}\n\nconst DEFAULT_DELAY = 500;\nconst DEFAULT_THRESHOLD = 10;\nfunction onLongPress(target, handler, options) {\n var _a, _b;\n const elementRef = computed(() => unrefElement(target));\n let timeout;\n let posStart;\n let startTimestamp;\n let hasLongPressed = false;\n function clear() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = void 0;\n }\n posStart = void 0;\n startTimestamp = void 0;\n hasLongPressed = false;\n }\n function onRelease(ev) {\n var _a2, _b2, _c;\n const [_startTimestamp, _posStart, _hasLongPressed] = [startTimestamp, posStart, hasLongPressed];\n clear();\n if (!(options == null ? void 0 : options.onMouseUp) || !_posStart || !_startTimestamp)\n return;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n const dx = ev.x - _posStart.x;\n const dy = ev.y - _posStart.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n options.onMouseUp(ev.timeStamp - _startTimestamp, distance, _hasLongPressed);\n }\n function onDown(ev) {\n var _a2, _b2, _c, _d;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n clear();\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n posStart = {\n x: ev.x,\n y: ev.y\n };\n startTimestamp = ev.timeStamp;\n timeout = setTimeout(\n () => {\n hasLongPressed = true;\n handler(ev);\n },\n (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY\n );\n }\n function onMove(ev) {\n var _a2, _b2, _c, _d;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n if (!posStart || (options == null ? void 0 : options.distanceThreshold) === false)\n return;\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n const dx = ev.x - posStart.x;\n const dy = ev.y - posStart.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n if (distance >= ((_d = options == null ? void 0 : options.distanceThreshold) != null ? _d : DEFAULT_THRESHOLD))\n clear();\n }\n const listenerOptions = {\n capture: (_a = options == null ? void 0 : options.modifiers) == null ? void 0 : _a.capture,\n once: (_b = options == null ? void 0 : options.modifiers) == null ? void 0 : _b.once\n };\n const cleanup = [\n useEventListener(elementRef, \"pointerdown\", onDown, listenerOptions),\n useEventListener(elementRef, \"pointermove\", onMove, listenerOptions),\n useEventListener(elementRef, [\"pointerup\", \"pointerleave\"], onRelease, listenerOptions)\n ];\n const stop = () => cleanup.forEach((fn) => fn());\n return stop;\n}\n\nfunction isFocusedElementEditable() {\n const { activeElement, body } = document;\n if (!activeElement)\n return false;\n if (activeElement === body)\n return false;\n switch (activeElement.tagName) {\n case \"INPUT\":\n case \"TEXTAREA\":\n return true;\n }\n return activeElement.hasAttribute(\"contenteditable\");\n}\nfunction isTypedCharValid({\n keyCode,\n metaKey,\n ctrlKey,\n altKey\n}) {\n if (metaKey || ctrlKey || altKey)\n return false;\n if (keyCode >= 48 && keyCode <= 57)\n return true;\n if (keyCode >= 65 && keyCode <= 90)\n return true;\n if (keyCode >= 97 && keyCode <= 122)\n return true;\n return false;\n}\nfunction onStartTyping(callback, options = {}) {\n const { document: document2 = defaultDocument } = options;\n const keydown = (event) => {\n if (!isFocusedElementEditable() && isTypedCharValid(event)) {\n callback(event);\n }\n };\n if (document2)\n useEventListener(document2, \"keydown\", keydown, { passive: true });\n}\n\nfunction templateRef(key, initialValue = null) {\n const instance = getCurrentInstance();\n let _trigger = () => {\n };\n const element = customRef((track, trigger) => {\n _trigger = trigger;\n return {\n get() {\n var _a, _b;\n track();\n return (_b = (_a = instance == null ? void 0 : instance.proxy) == null ? void 0 : _a.$refs[key]) != null ? _b : initialValue;\n },\n set() {\n }\n };\n });\n tryOnMounted(_trigger);\n onUpdated(_trigger);\n return element;\n}\n\nfunction useMounted() {\n const isMounted = ref(false);\n const instance = getCurrentInstance();\n if (instance) {\n onMounted(() => {\n isMounted.value = true;\n }, instance);\n }\n return isMounted;\n}\n\nfunction useSupported(callback) {\n const isMounted = useMounted();\n return computed(() => {\n isMounted.value;\n return Boolean(callback());\n });\n}\n\nfunction useMutationObserver(target, callback, options = {}) {\n const { window = defaultWindow, ...mutationOptions } = options;\n let observer;\n const isSupported = useSupported(() => window && \"MutationObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const targets = computed(() => {\n const value = toValue(target);\n const items = (Array.isArray(value) ? value : [value]).map(unrefElement).filter(notNullish);\n return new Set(items);\n });\n const stopWatch = watch(\n () => targets.value,\n (targets2) => {\n cleanup();\n if (isSupported.value && targets2.size) {\n observer = new MutationObserver(callback);\n targets2.forEach((el) => observer.observe(el, mutationOptions));\n }\n },\n { immediate: true, flush: \"post\" }\n );\n const takeRecords = () => {\n return observer == null ? void 0 : observer.takeRecords();\n };\n const stop = () => {\n stopWatch();\n cleanup();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop,\n takeRecords\n };\n}\n\nfunction useActiveElement(options = {}) {\n var _a;\n const {\n window = defaultWindow,\n deep = true,\n triggerOnRemoval = false\n } = options;\n const document = (_a = options.document) != null ? _a : window == null ? void 0 : window.document;\n const getDeepActiveElement = () => {\n var _a2;\n let element = document == null ? void 0 : document.activeElement;\n if (deep) {\n while (element == null ? void 0 : element.shadowRoot)\n element = (_a2 = element == null ? void 0 : element.shadowRoot) == null ? void 0 : _a2.activeElement;\n }\n return element;\n };\n const activeElement = ref();\n const trigger = () => {\n activeElement.value = getDeepActiveElement();\n };\n if (window) {\n useEventListener(window, \"blur\", (event) => {\n if (event.relatedTarget !== null)\n return;\n trigger();\n }, true);\n useEventListener(window, \"focus\", trigger, true);\n }\n if (triggerOnRemoval) {\n useMutationObserver(document, (mutations) => {\n mutations.filter((m) => m.removedNodes.length).map((n) => Array.from(n.removedNodes)).flat().forEach((node) => {\n if (node === activeElement.value)\n trigger();\n });\n }, {\n childList: true,\n subtree: true\n });\n }\n trigger();\n return activeElement;\n}\n\nfunction useRafFn(fn, options = {}) {\n const {\n immediate = true,\n fpsLimit = void 0,\n window = defaultWindow\n } = options;\n const isActive = ref(false);\n const intervalLimit = fpsLimit ? 1e3 / fpsLimit : null;\n let previousFrameTimestamp = 0;\n let rafId = null;\n function loop(timestamp) {\n if (!isActive.value || !window)\n return;\n if (!previousFrameTimestamp)\n previousFrameTimestamp = timestamp;\n const delta = timestamp - previousFrameTimestamp;\n if (intervalLimit && delta < intervalLimit) {\n rafId = window.requestAnimationFrame(loop);\n return;\n }\n previousFrameTimestamp = timestamp;\n fn({ delta, timestamp });\n rafId = window.requestAnimationFrame(loop);\n }\n function resume() {\n if (!isActive.value && window) {\n isActive.value = true;\n previousFrameTimestamp = 0;\n rafId = window.requestAnimationFrame(loop);\n }\n }\n function pause() {\n isActive.value = false;\n if (rafId != null && window) {\n window.cancelAnimationFrame(rafId);\n rafId = null;\n }\n }\n if (immediate)\n resume();\n tryOnScopeDispose(pause);\n return {\n isActive: readonly(isActive),\n pause,\n resume\n };\n}\n\nfunction useAnimate(target, keyframes, options) {\n let config;\n let animateOptions;\n if (isObject(options)) {\n config = options;\n animateOptions = objectOmit(options, [\"window\", \"immediate\", \"commitStyles\", \"persist\", \"onReady\", \"onError\"]);\n } else {\n config = { duration: options };\n animateOptions = options;\n }\n const {\n window = defaultWindow,\n immediate = true,\n commitStyles,\n persist,\n playbackRate: _playbackRate = 1,\n onReady,\n onError = (e) => {\n console.error(e);\n }\n } = config;\n const isSupported = useSupported(() => window && HTMLElement && \"animate\" in HTMLElement.prototype);\n const animate = shallowRef(void 0);\n const store = shallowReactive({\n startTime: null,\n currentTime: null,\n timeline: null,\n playbackRate: _playbackRate,\n pending: false,\n playState: immediate ? \"idle\" : \"paused\",\n replaceState: \"active\"\n });\n const pending = computed(() => store.pending);\n const playState = computed(() => store.playState);\n const replaceState = computed(() => store.replaceState);\n const startTime = computed({\n get() {\n return store.startTime;\n },\n set(value) {\n store.startTime = value;\n if (animate.value)\n animate.value.startTime = value;\n }\n });\n const currentTime = computed({\n get() {\n return store.currentTime;\n },\n set(value) {\n store.currentTime = value;\n if (animate.value) {\n animate.value.currentTime = value;\n syncResume();\n }\n }\n });\n const timeline = computed({\n get() {\n return store.timeline;\n },\n set(value) {\n store.timeline = value;\n if (animate.value)\n animate.value.timeline = value;\n }\n });\n const playbackRate = computed({\n get() {\n return store.playbackRate;\n },\n set(value) {\n store.playbackRate = value;\n if (animate.value)\n animate.value.playbackRate = value;\n }\n });\n const play = () => {\n if (animate.value) {\n try {\n animate.value.play();\n syncResume();\n } catch (e) {\n syncPause();\n onError(e);\n }\n } else {\n update();\n }\n };\n const pause = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.pause();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n const reverse = () => {\n var _a;\n if (!animate.value)\n update();\n try {\n (_a = animate.value) == null ? void 0 : _a.reverse();\n syncResume();\n } catch (e) {\n syncPause();\n onError(e);\n }\n };\n const finish = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.finish();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n const cancel = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.cancel();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n watch(() => unrefElement(target), (el) => {\n if (el)\n update();\n });\n watch(() => keyframes, (value) => {\n if (animate.value)\n update();\n if (!unrefElement(target) && animate.value) {\n animate.value.effect = new KeyframeEffect(\n unrefElement(target),\n toValue(value),\n animateOptions\n );\n }\n }, { deep: true });\n tryOnMounted(() => update(true), false);\n tryOnScopeDispose(cancel);\n function update(init) {\n const el = unrefElement(target);\n if (!isSupported.value || !el)\n return;\n if (!animate.value)\n animate.value = el.animate(toValue(keyframes), animateOptions);\n if (persist)\n animate.value.persist();\n if (_playbackRate !== 1)\n animate.value.playbackRate = _playbackRate;\n if (init && !immediate)\n animate.value.pause();\n else\n syncResume();\n onReady == null ? void 0 : onReady(animate.value);\n }\n useEventListener(animate, [\"cancel\", \"finish\", \"remove\"], syncPause);\n useEventListener(animate, \"finish\", () => {\n var _a;\n if (commitStyles)\n (_a = animate.value) == null ? void 0 : _a.commitStyles();\n });\n const { resume: resumeRef, pause: pauseRef } = useRafFn(() => {\n if (!animate.value)\n return;\n store.pending = animate.value.pending;\n store.playState = animate.value.playState;\n store.replaceState = animate.value.replaceState;\n store.startTime = animate.value.startTime;\n store.currentTime = animate.value.currentTime;\n store.timeline = animate.value.timeline;\n store.playbackRate = animate.value.playbackRate;\n }, { immediate: false });\n function syncResume() {\n if (isSupported.value)\n resumeRef();\n }\n function syncPause() {\n if (isSupported.value && window)\n window.requestAnimationFrame(pauseRef);\n }\n return {\n isSupported,\n animate,\n // actions\n play,\n pause,\n reverse,\n finish,\n cancel,\n // state\n pending,\n playState,\n replaceState,\n startTime,\n currentTime,\n timeline,\n playbackRate\n };\n}\n\nfunction useAsyncQueue(tasks, options) {\n const {\n interrupt = true,\n onError = noop,\n onFinished = noop,\n signal\n } = options || {};\n const promiseState = {\n aborted: \"aborted\",\n fulfilled: \"fulfilled\",\n pending: \"pending\",\n rejected: \"rejected\"\n };\n const initialResult = Array.from(Array.from({ length: tasks.length }), () => ({ state: promiseState.pending, data: null }));\n const result = reactive(initialResult);\n const activeIndex = ref(-1);\n if (!tasks || tasks.length === 0) {\n onFinished();\n return {\n activeIndex,\n result\n };\n }\n function updateResult(state, res) {\n activeIndex.value++;\n result[activeIndex.value].data = res;\n result[activeIndex.value].state = state;\n }\n tasks.reduce((prev, curr) => {\n return prev.then((prevRes) => {\n var _a;\n if (signal == null ? void 0 : signal.aborted) {\n updateResult(promiseState.aborted, new Error(\"aborted\"));\n return;\n }\n if (((_a = result[activeIndex.value]) == null ? void 0 : _a.state) === promiseState.rejected && interrupt) {\n onFinished();\n return;\n }\n const done = curr(prevRes).then((currentRes) => {\n updateResult(promiseState.fulfilled, currentRes);\n if (activeIndex.value === tasks.length - 1)\n onFinished();\n return currentRes;\n });\n if (!signal)\n return done;\n return Promise.race([done, whenAborted(signal)]);\n }).catch((e) => {\n if (signal == null ? void 0 : signal.aborted) {\n updateResult(promiseState.aborted, e);\n return e;\n }\n updateResult(promiseState.rejected, e);\n onError();\n return e;\n });\n }, Promise.resolve());\n return {\n activeIndex,\n result\n };\n}\nfunction whenAborted(signal) {\n return new Promise((resolve, reject) => {\n const error = new Error(\"aborted\");\n if (signal.aborted)\n reject(error);\n else\n signal.addEventListener(\"abort\", () => reject(error), { once: true });\n });\n}\n\nfunction useAsyncState(promise, initialState, options) {\n const {\n immediate = true,\n delay = 0,\n onError = noop,\n onSuccess = noop,\n resetOnExecute = true,\n shallow = true,\n throwError\n } = options != null ? options : {};\n const state = shallow ? shallowRef(initialState) : ref(initialState);\n const isReady = ref(false);\n const isLoading = ref(false);\n const error = shallowRef(void 0);\n async function execute(delay2 = 0, ...args) {\n if (resetOnExecute)\n state.value = initialState;\n error.value = void 0;\n isReady.value = false;\n isLoading.value = true;\n if (delay2 > 0)\n await promiseTimeout(delay2);\n const _promise = typeof promise === \"function\" ? promise(...args) : promise;\n try {\n const data = await _promise;\n state.value = data;\n isReady.value = true;\n onSuccess(data);\n } catch (e) {\n error.value = e;\n onError(e);\n if (throwError)\n throw e;\n } finally {\n isLoading.value = false;\n }\n return state.value;\n }\n if (immediate)\n execute(delay);\n const shell = {\n state,\n isReady,\n isLoading,\n error,\n execute\n };\n function waitUntilIsLoaded() {\n return new Promise((resolve, reject) => {\n until(isLoading).toBe(false).then(() => resolve(shell)).catch(reject);\n });\n }\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilIsLoaded().then(onFulfilled, onRejected);\n }\n };\n}\n\nconst defaults = {\n array: (v) => JSON.stringify(v),\n object: (v) => JSON.stringify(v),\n set: (v) => JSON.stringify(Array.from(v)),\n map: (v) => JSON.stringify(Object.fromEntries(v)),\n null: () => \"\"\n};\nfunction getDefaultSerialization(target) {\n if (!target)\n return defaults.null;\n if (target instanceof Map)\n return defaults.map;\n else if (target instanceof Set)\n return defaults.set;\n else if (Array.isArray(target))\n return defaults.array;\n else\n return defaults.object;\n}\n\nfunction useBase64(target, options) {\n const base64 = ref(\"\");\n const promise = ref();\n function execute() {\n if (!isClient)\n return;\n promise.value = new Promise((resolve, reject) => {\n try {\n const _target = toValue(target);\n if (_target == null) {\n resolve(\"\");\n } else if (typeof _target === \"string\") {\n resolve(blobToBase64(new Blob([_target], { type: \"text/plain\" })));\n } else if (_target instanceof Blob) {\n resolve(blobToBase64(_target));\n } else if (_target instanceof ArrayBuffer) {\n resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));\n } else if (_target instanceof HTMLCanvasElement) {\n resolve(_target.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n } else if (_target instanceof HTMLImageElement) {\n const img = _target.cloneNode(false);\n img.crossOrigin = \"Anonymous\";\n imgLoaded(img).then(() => {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n resolve(canvas.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n }).catch(reject);\n } else if (typeof _target === \"object\") {\n const _serializeFn = (options == null ? void 0 : options.serializer) || getDefaultSerialization(_target);\n const serialized = _serializeFn(_target);\n return resolve(blobToBase64(new Blob([serialized], { type: \"application/json\" })));\n } else {\n reject(new Error(\"target is unsupported types\"));\n }\n } catch (error) {\n reject(error);\n }\n });\n promise.value.then((res) => base64.value = res);\n return promise.value;\n }\n if (isRef(target) || typeof target === \"function\")\n watch(target, execute, { immediate: true });\n else\n execute();\n return {\n base64,\n promise,\n execute\n };\n}\nfunction imgLoaded(img) {\n return new Promise((resolve, reject) => {\n if (!img.complete) {\n img.onload = () => {\n resolve();\n };\n img.onerror = reject;\n } else {\n resolve();\n }\n });\n}\nfunction blobToBase64(blob) {\n return new Promise((resolve, reject) => {\n const fr = new FileReader();\n fr.onload = (e) => {\n resolve(e.target.result);\n };\n fr.onerror = reject;\n fr.readAsDataURL(blob);\n });\n}\n\nfunction useBattery(options = {}) {\n const { navigator = defaultNavigator } = options;\n const events = [\"chargingchange\", \"chargingtimechange\", \"dischargingtimechange\", \"levelchange\"];\n const isSupported = useSupported(() => navigator && \"getBattery\" in navigator && typeof navigator.getBattery === \"function\");\n const charging = ref(false);\n const chargingTime = ref(0);\n const dischargingTime = ref(0);\n const level = ref(1);\n let battery;\n function updateBatteryInfo() {\n charging.value = this.charging;\n chargingTime.value = this.chargingTime || 0;\n dischargingTime.value = this.dischargingTime || 0;\n level.value = this.level;\n }\n if (isSupported.value) {\n navigator.getBattery().then((_battery) => {\n battery = _battery;\n updateBatteryInfo.call(battery);\n useEventListener(battery, events, updateBatteryInfo, { passive: true });\n });\n }\n return {\n isSupported,\n charging,\n chargingTime,\n dischargingTime,\n level\n };\n}\n\nfunction useBluetooth(options) {\n let {\n acceptAllDevices = false\n } = options || {};\n const {\n filters = void 0,\n optionalServices = void 0,\n navigator = defaultNavigator\n } = options || {};\n const isSupported = useSupported(() => navigator && \"bluetooth\" in navigator);\n const device = shallowRef(void 0);\n const error = shallowRef(null);\n watch(device, () => {\n connectToBluetoothGATTServer();\n });\n async function requestDevice() {\n if (!isSupported.value)\n return;\n error.value = null;\n if (filters && filters.length > 0)\n acceptAllDevices = false;\n try {\n device.value = await (navigator == null ? void 0 : navigator.bluetooth.requestDevice({\n acceptAllDevices,\n filters,\n optionalServices\n }));\n } catch (err) {\n error.value = err;\n }\n }\n const server = ref();\n const isConnected = computed(() => {\n var _a;\n return ((_a = server.value) == null ? void 0 : _a.connected) || false;\n });\n async function connectToBluetoothGATTServer() {\n error.value = null;\n if (device.value && device.value.gatt) {\n device.value.addEventListener(\"gattserverdisconnected\", () => {\n });\n try {\n server.value = await device.value.gatt.connect();\n } catch (err) {\n error.value = err;\n }\n }\n }\n tryOnMounted(() => {\n var _a;\n if (device.value)\n (_a = device.value.gatt) == null ? void 0 : _a.connect();\n });\n tryOnScopeDispose(() => {\n var _a;\n if (device.value)\n (_a = device.value.gatt) == null ? void 0 : _a.disconnect();\n });\n return {\n isSupported,\n isConnected,\n // Device:\n device,\n requestDevice,\n // Server:\n server,\n // Errors:\n error\n };\n}\n\nfunction useMediaQuery(query, options = {}) {\n const { window = defaultWindow } = options;\n const isSupported = useSupported(() => window && \"matchMedia\" in window && typeof window.matchMedia === \"function\");\n let mediaQuery;\n const matches = ref(false);\n const handler = (event) => {\n matches.value = event.matches;\n };\n const cleanup = () => {\n if (!mediaQuery)\n return;\n if (\"removeEventListener\" in mediaQuery)\n mediaQuery.removeEventListener(\"change\", handler);\n else\n mediaQuery.removeListener(handler);\n };\n const stopWatch = watchEffect(() => {\n if (!isSupported.value)\n return;\n cleanup();\n mediaQuery = window.matchMedia(toValue(query));\n if (\"addEventListener\" in mediaQuery)\n mediaQuery.addEventListener(\"change\", handler);\n else\n mediaQuery.addListener(handler);\n matches.value = mediaQuery.matches;\n });\n tryOnScopeDispose(() => {\n stopWatch();\n cleanup();\n mediaQuery = void 0;\n });\n return matches;\n}\n\nconst breakpointsTailwind = {\n \"sm\": 640,\n \"md\": 768,\n \"lg\": 1024,\n \"xl\": 1280,\n \"2xl\": 1536\n};\nconst breakpointsBootstrapV5 = {\n xs: 0,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1400\n};\nconst breakpointsVuetifyV2 = {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1264,\n xl: 1904\n};\nconst breakpointsVuetifyV3 = {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1280,\n xl: 1920,\n xxl: 2560\n};\nconst breakpointsVuetify = breakpointsVuetifyV2;\nconst breakpointsAntDesign = {\n xs: 480,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1600\n};\nconst breakpointsQuasar = {\n xs: 0,\n sm: 600,\n md: 1024,\n lg: 1440,\n xl: 1920\n};\nconst breakpointsSematic = {\n mobileS: 320,\n mobileM: 375,\n mobileL: 425,\n tablet: 768,\n laptop: 1024,\n laptopL: 1440,\n desktop4K: 2560\n};\nconst breakpointsMasterCss = {\n \"3xs\": 360,\n \"2xs\": 480,\n \"xs\": 600,\n \"sm\": 768,\n \"md\": 1024,\n \"lg\": 1280,\n \"xl\": 1440,\n \"2xl\": 1600,\n \"3xl\": 1920,\n \"4xl\": 2560\n};\nconst breakpointsPrimeFlex = {\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200\n};\nconst breakpointsElement = {\n xs: 0,\n sm: 768,\n md: 992,\n lg: 1200,\n xl: 1920\n};\n\nfunction useBreakpoints(breakpoints, options = {}) {\n function getValue(k, delta) {\n let v = toValue(breakpoints[toValue(k)]);\n if (delta != null)\n v = increaseWithUnit(v, delta);\n if (typeof v === \"number\")\n v = `${v}px`;\n return v;\n }\n const { window = defaultWindow, strategy = \"min-width\" } = options;\n function match(query) {\n if (!window)\n return false;\n return window.matchMedia(query).matches;\n }\n const greaterOrEqual = (k) => {\n return useMediaQuery(() => `(min-width: ${getValue(k)})`, options);\n };\n const smallerOrEqual = (k) => {\n return useMediaQuery(() => `(max-width: ${getValue(k)})`, options);\n };\n const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n Object.defineProperty(shortcuts, k, {\n get: () => strategy === \"min-width\" ? greaterOrEqual(k) : smallerOrEqual(k),\n enumerable: true,\n configurable: true\n });\n return shortcuts;\n }, {});\n function current() {\n const points = Object.keys(breakpoints).map((i) => [i, greaterOrEqual(i)]);\n return computed(() => points.filter(([, v]) => v.value).map(([k]) => k));\n }\n return Object.assign(shortcutMethods, {\n greaterOrEqual,\n smallerOrEqual,\n greater(k) {\n return useMediaQuery(() => `(min-width: ${getValue(k, 0.1)})`, options);\n },\n smaller(k) {\n return useMediaQuery(() => `(max-width: ${getValue(k, -0.1)})`, options);\n },\n between(a, b) {\n return useMediaQuery(() => `(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`, options);\n },\n isGreater(k) {\n return match(`(min-width: ${getValue(k, 0.1)})`);\n },\n isGreaterOrEqual(k) {\n return match(`(min-width: ${getValue(k)})`);\n },\n isSmaller(k) {\n return match(`(max-width: ${getValue(k, -0.1)})`);\n },\n isSmallerOrEqual(k) {\n return match(`(max-width: ${getValue(k)})`);\n },\n isInBetween(a, b) {\n return match(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`);\n },\n current,\n active() {\n const bps = current();\n return computed(() => bps.value.length === 0 ? \"\" : bps.value.at(-1));\n }\n });\n}\n\nfunction useBroadcastChannel(options) {\n const {\n name,\n window = defaultWindow\n } = options;\n const isSupported = useSupported(() => window && \"BroadcastChannel\" in window);\n const isClosed = ref(false);\n const channel = ref();\n const data = ref();\n const error = shallowRef(null);\n const post = (data2) => {\n if (channel.value)\n channel.value.postMessage(data2);\n };\n const close = () => {\n if (channel.value)\n channel.value.close();\n isClosed.value = true;\n };\n if (isSupported.value) {\n tryOnMounted(() => {\n error.value = null;\n channel.value = new BroadcastChannel(name);\n channel.value.addEventListener(\"message\", (e) => {\n data.value = e.data;\n }, { passive: true });\n channel.value.addEventListener(\"messageerror\", (e) => {\n error.value = e;\n }, { passive: true });\n channel.value.addEventListener(\"close\", () => {\n isClosed.value = true;\n });\n });\n }\n tryOnScopeDispose(() => {\n close();\n });\n return {\n isSupported,\n channel,\n data,\n post,\n close,\n error,\n isClosed\n };\n}\n\nconst WRITABLE_PROPERTIES = [\n \"hash\",\n \"host\",\n \"hostname\",\n \"href\",\n \"pathname\",\n \"port\",\n \"protocol\",\n \"search\"\n];\nfunction useBrowserLocation(options = {}) {\n const { window = defaultWindow } = options;\n const refs = Object.fromEntries(\n WRITABLE_PROPERTIES.map((key) => [key, ref()])\n );\n for (const [key, ref2] of objectEntries(refs)) {\n watch(ref2, (value) => {\n if (!(window == null ? void 0 : window.location) || window.location[key] === value)\n return;\n window.location[key] = value;\n });\n }\n const buildState = (trigger) => {\n var _a;\n const { state: state2, length } = (window == null ? void 0 : window.history) || {};\n const { origin } = (window == null ? void 0 : window.location) || {};\n for (const key of WRITABLE_PROPERTIES)\n refs[key].value = (_a = window == null ? void 0 : window.location) == null ? void 0 : _a[key];\n return reactive({\n trigger,\n state: state2,\n length,\n origin,\n ...refs\n });\n };\n const state = ref(buildState(\"load\"));\n if (window) {\n useEventListener(window, \"popstate\", () => state.value = buildState(\"popstate\"), { passive: true });\n useEventListener(window, \"hashchange\", () => state.value = buildState(\"hashchange\"), { passive: true });\n }\n return state;\n}\n\nfunction useCached(refValue, comparator = (a, b) => a === b, watchOptions) {\n const cachedValue = ref(refValue.value);\n watch(() => refValue.value, (value) => {\n if (!comparator(value, cachedValue.value))\n cachedValue.value = value;\n }, watchOptions);\n return cachedValue;\n}\n\nfunction usePermission(permissionDesc, options = {}) {\n const {\n controls = false,\n navigator = defaultNavigator\n } = options;\n const isSupported = useSupported(() => navigator && \"permissions\" in navigator);\n const permissionStatus = shallowRef();\n const desc = typeof permissionDesc === \"string\" ? { name: permissionDesc } : permissionDesc;\n const state = shallowRef();\n const update = () => {\n var _a, _b;\n state.value = (_b = (_a = permissionStatus.value) == null ? void 0 : _a.state) != null ? _b : \"prompt\";\n };\n useEventListener(permissionStatus, \"change\", update);\n const query = createSingletonPromise(async () => {\n if (!isSupported.value)\n return;\n if (!permissionStatus.value) {\n try {\n permissionStatus.value = await navigator.permissions.query(desc);\n } catch (e) {\n permissionStatus.value = void 0;\n } finally {\n update();\n }\n }\n if (controls)\n return toRaw(permissionStatus.value);\n });\n query();\n if (controls) {\n return {\n state,\n isSupported,\n query\n };\n } else {\n return state;\n }\n}\n\nfunction useClipboard(options = {}) {\n const {\n navigator = defaultNavigator,\n read = false,\n source,\n copiedDuring = 1500,\n legacy = false\n } = options;\n const isClipboardApiSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n const permissionRead = usePermission(\"clipboard-read\");\n const permissionWrite = usePermission(\"clipboard-write\");\n const isSupported = computed(() => isClipboardApiSupported.value || legacy);\n const text = ref(\"\");\n const copied = ref(false);\n const timeout = useTimeoutFn(() => copied.value = false, copiedDuring);\n function updateText() {\n if (isClipboardApiSupported.value && isAllowed(permissionRead.value)) {\n navigator.clipboard.readText().then((value) => {\n text.value = value;\n });\n } else {\n text.value = legacyRead();\n }\n }\n if (isSupported.value && read)\n useEventListener([\"copy\", \"cut\"], updateText);\n async function copy(value = toValue(source)) {\n if (isSupported.value && value != null) {\n if (isClipboardApiSupported.value && isAllowed(permissionWrite.value))\n await navigator.clipboard.writeText(value);\n else\n legacyCopy(value);\n text.value = value;\n copied.value = true;\n timeout.start();\n }\n }\n function legacyCopy(value) {\n const ta = document.createElement(\"textarea\");\n ta.value = value != null ? value : \"\";\n ta.style.position = \"absolute\";\n ta.style.opacity = \"0\";\n document.body.appendChild(ta);\n ta.select();\n document.execCommand(\"copy\");\n ta.remove();\n }\n function legacyRead() {\n var _a, _b, _c;\n return (_c = (_b = (_a = document == null ? void 0 : document.getSelection) == null ? void 0 : _a.call(document)) == null ? void 0 : _b.toString()) != null ? _c : \"\";\n }\n function isAllowed(status) {\n return status === \"granted\" || status === \"prompt\";\n }\n return {\n isSupported,\n text,\n copied,\n copy\n };\n}\n\nfunction useClipboardItems(options = {}) {\n const {\n navigator = defaultNavigator,\n read = false,\n source,\n copiedDuring = 1500\n } = options;\n const isSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n const content = ref([]);\n const copied = ref(false);\n const timeout = useTimeoutFn(() => copied.value = false, copiedDuring);\n function updateContent() {\n if (isSupported.value) {\n navigator.clipboard.read().then((items) => {\n content.value = items;\n });\n }\n }\n if (isSupported.value && read)\n useEventListener([\"copy\", \"cut\"], updateContent);\n async function copy(value = toValue(source)) {\n if (isSupported.value && value != null) {\n await navigator.clipboard.write(value);\n content.value = value;\n copied.value = true;\n timeout.start();\n }\n }\n return {\n isSupported,\n content,\n copied,\n copy\n };\n}\n\nfunction cloneFnJSON(source) {\n return JSON.parse(JSON.stringify(source));\n}\nfunction useCloned(source, options = {}) {\n const cloned = ref({});\n const {\n manual,\n clone = cloneFnJSON,\n // watch options\n deep = true,\n immediate = true\n } = options;\n function sync() {\n cloned.value = clone(toValue(source));\n }\n if (!manual && (isRef(source) || typeof source === \"function\")) {\n watch(source, sync, {\n ...options,\n deep,\n immediate\n });\n } else {\n sync();\n }\n return { cloned, sync };\n}\n\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\nconst handlers = /* @__PURE__ */ getHandlers();\nfunction getHandlers() {\n if (!(globalKey in _global))\n _global[globalKey] = _global[globalKey] || {};\n return _global[globalKey];\n}\nfunction getSSRHandler(key, fallback) {\n return handlers[key] || fallback;\n}\nfunction setSSRHandler(key, fn) {\n handlers[key] = fn;\n}\n\nfunction usePreferredDark(options) {\n return useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\nfunction guessSerializerType(rawInit) {\n return rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n\nconst StorageSerializers = {\n boolean: {\n read: (v) => v === \"true\",\n write: (v) => String(v)\n },\n object: {\n read: (v) => JSON.parse(v),\n write: (v) => JSON.stringify(v)\n },\n number: {\n read: (v) => Number.parseFloat(v),\n write: (v) => String(v)\n },\n any: {\n read: (v) => v,\n write: (v) => String(v)\n },\n string: {\n read: (v) => v,\n write: (v) => String(v)\n },\n map: {\n read: (v) => new Map(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v.entries()))\n },\n set: {\n read: (v) => new Set(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v))\n },\n date: {\n read: (v) => new Date(v),\n write: (v) => v.toISOString()\n }\n};\nconst customStorageEventName = \"vueuse-storage\";\nfunction useStorage(key, defaults, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n mergeDefaults = false,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n },\n initOnMounted\n } = options;\n const data = (shallow ? shallowRef : ref)(typeof defaults === \"function\" ? defaults() : defaults);\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorage\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n if (!storage)\n return data;\n const rawInit = toValue(defaults);\n const type = guessSerializerType(rawInit);\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n const { pause: pauseWatch, resume: resumeWatch } = pausableWatch(\n data,\n () => write(data.value),\n { flush, deep, eventFilter }\n );\n if (window && listenToStorageChanges) {\n tryOnMounted(() => {\n if (storage instanceof Storage)\n useEventListener(window, \"storage\", update);\n else\n useEventListener(window, customStorageEventName, updateFromCustomEvent);\n if (initOnMounted)\n update();\n });\n }\n if (!initOnMounted)\n update();\n function dispatchWriteEvent(oldValue, newValue) {\n if (window) {\n const payload = {\n key,\n oldValue,\n newValue,\n storageArea: storage\n };\n window.dispatchEvent(storage instanceof Storage ? new StorageEvent(\"storage\", payload) : new CustomEvent(customStorageEventName, {\n detail: payload\n }));\n }\n }\n function write(v) {\n try {\n const oldValue = storage.getItem(key);\n if (v == null) {\n dispatchWriteEvent(oldValue, null);\n storage.removeItem(key);\n } else {\n const serialized = serializer.write(v);\n if (oldValue !== serialized) {\n storage.setItem(key, serialized);\n dispatchWriteEvent(oldValue, serialized);\n }\n }\n } catch (e) {\n onError(e);\n }\n }\n function read(event) {\n const rawValue = event ? event.newValue : storage.getItem(key);\n if (rawValue == null) {\n if (writeDefaults && rawInit != null)\n storage.setItem(key, serializer.write(rawInit));\n return rawInit;\n } else if (!event && mergeDefaults) {\n const value = serializer.read(rawValue);\n if (typeof mergeDefaults === \"function\")\n return mergeDefaults(value, rawInit);\n else if (type === \"object\" && !Array.isArray(value))\n return { ...rawInit, ...value };\n return value;\n } else if (typeof rawValue !== \"string\") {\n return rawValue;\n } else {\n return serializer.read(rawValue);\n }\n }\n function update(event) {\n if (event && event.storageArea !== storage)\n return;\n if (event && event.key == null) {\n data.value = rawInit;\n return;\n }\n if (event && event.key !== key)\n return;\n pauseWatch();\n try {\n if ((event == null ? void 0 : event.newValue) !== serializer.write(data.value))\n data.value = read(event);\n } catch (e) {\n onError(e);\n } finally {\n if (event)\n nextTick(resumeWatch);\n else\n resumeWatch();\n }\n }\n function updateFromCustomEvent(event) {\n update(event.detail);\n }\n return data;\n}\n\nconst CSS_DISABLE_TRANS = \"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\";\nfunction useColorMode(options = {}) {\n const {\n selector = \"html\",\n attribute = \"class\",\n initialValue = \"auto\",\n window = defaultWindow,\n storage,\n storageKey = \"vueuse-color-scheme\",\n listenToStorageChanges = true,\n storageRef,\n emitAuto,\n disableTransition = true\n } = options;\n const modes = {\n auto: \"\",\n light: \"light\",\n dark: \"dark\",\n ...options.modes || {}\n };\n const preferredDark = usePreferredDark({ window });\n const system = computed(() => preferredDark.value ? \"dark\" : \"light\");\n const store = storageRef || (storageKey == null ? toRef(initialValue) : useStorage(storageKey, initialValue, storage, { window, listenToStorageChanges }));\n const state = computed(() => store.value === \"auto\" ? system.value : store.value);\n const updateHTMLAttrs = getSSRHandler(\n \"updateHTMLAttrs\",\n (selector2, attribute2, value) => {\n const el = typeof selector2 === \"string\" ? window == null ? void 0 : window.document.querySelector(selector2) : unrefElement(selector2);\n if (!el)\n return;\n const classesToAdd = /* @__PURE__ */ new Set();\n const classesToRemove = /* @__PURE__ */ new Set();\n let attributeToChange = null;\n if (attribute2 === \"class\") {\n const current = value.split(/\\s/g);\n Object.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n if (current.includes(v))\n classesToAdd.add(v);\n else\n classesToRemove.add(v);\n });\n } else {\n attributeToChange = { key: attribute2, value };\n }\n if (classesToAdd.size === 0 && classesToRemove.size === 0 && attributeToChange === null)\n return;\n let style;\n if (disableTransition) {\n style = window.document.createElement(\"style\");\n style.appendChild(document.createTextNode(CSS_DISABLE_TRANS));\n window.document.head.appendChild(style);\n }\n for (const c of classesToAdd) {\n el.classList.add(c);\n }\n for (const c of classesToRemove) {\n el.classList.remove(c);\n }\n if (attributeToChange) {\n el.setAttribute(attributeToChange.key, attributeToChange.value);\n }\n if (disableTransition) {\n window.getComputedStyle(style).opacity;\n document.head.removeChild(style);\n }\n }\n );\n function defaultOnChanged(mode) {\n var _a;\n updateHTMLAttrs(selector, attribute, (_a = modes[mode]) != null ? _a : mode);\n }\n function onChanged(mode) {\n if (options.onChanged)\n options.onChanged(mode, defaultOnChanged);\n else\n defaultOnChanged(mode);\n }\n watch(state, onChanged, { flush: \"post\", immediate: true });\n tryOnMounted(() => onChanged(state.value));\n const auto = computed({\n get() {\n return emitAuto ? store.value : state.value;\n },\n set(v) {\n store.value = v;\n }\n });\n return Object.assign(auto, { store, system, state });\n}\n\nfunction useConfirmDialog(revealed = ref(false)) {\n const confirmHook = createEventHook();\n const cancelHook = createEventHook();\n const revealHook = createEventHook();\n let _resolve = noop;\n const reveal = (data) => {\n revealHook.trigger(data);\n revealed.value = true;\n return new Promise((resolve) => {\n _resolve = resolve;\n });\n };\n const confirm = (data) => {\n revealed.value = false;\n confirmHook.trigger(data);\n _resolve({ data, isCanceled: false });\n };\n const cancel = (data) => {\n revealed.value = false;\n cancelHook.trigger(data);\n _resolve({ data, isCanceled: true });\n };\n return {\n isRevealed: computed(() => revealed.value),\n reveal,\n confirm,\n cancel,\n onReveal: revealHook.on,\n onConfirm: confirmHook.on,\n onCancel: cancelHook.on\n };\n}\n\nfunction useCssVar(prop, target, options = {}) {\n const { window = defaultWindow, initialValue, observe = false } = options;\n const variable = ref(initialValue);\n const elRef = computed(() => {\n var _a;\n return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);\n });\n function updateCssVar() {\n var _a;\n const key = toValue(prop);\n const el = toValue(elRef);\n if (el && window && key) {\n const value = (_a = window.getComputedStyle(el).getPropertyValue(key)) == null ? void 0 : _a.trim();\n variable.value = value || initialValue;\n }\n }\n if (observe) {\n useMutationObserver(elRef, updateCssVar, {\n attributeFilter: [\"style\", \"class\"],\n window\n });\n }\n watch(\n [elRef, () => toValue(prop)],\n (_, old) => {\n if (old[0] && old[1])\n old[0].style.removeProperty(old[1]);\n updateCssVar();\n },\n { immediate: true }\n );\n watch(\n variable,\n (val) => {\n var _a;\n const raw_prop = toValue(prop);\n if (((_a = elRef.value) == null ? void 0 : _a.style) && raw_prop) {\n if (val == null)\n elRef.value.style.removeProperty(raw_prop);\n else\n elRef.value.style.setProperty(raw_prop, val);\n }\n }\n );\n return variable;\n}\n\nfunction useCurrentElement(rootComponent) {\n const vm = getCurrentInstance();\n const currentElement = computedWithControl(\n () => null,\n () => rootComponent ? unrefElement(rootComponent) : vm.proxy.$el\n );\n onUpdated(currentElement.trigger);\n onMounted(currentElement.trigger);\n return currentElement;\n}\n\nfunction useCycleList(list, options) {\n const state = shallowRef(getInitialValue());\n const listRef = toRef(list);\n const index = computed({\n get() {\n var _a;\n const targetList = listRef.value;\n let index2 = (options == null ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, targetList) : targetList.indexOf(state.value);\n if (index2 < 0)\n index2 = (_a = options == null ? void 0 : options.fallbackIndex) != null ? _a : 0;\n return index2;\n },\n set(v) {\n set(v);\n }\n });\n function set(i) {\n const targetList = listRef.value;\n const length = targetList.length;\n const index2 = (i % length + length) % length;\n const value = targetList[index2];\n state.value = value;\n return value;\n }\n function shift(delta = 1) {\n return set(index.value + delta);\n }\n function next(n = 1) {\n return shift(n);\n }\n function prev(n = 1) {\n return shift(-n);\n }\n function getInitialValue() {\n var _a, _b;\n return (_b = toValue((_a = options == null ? void 0 : options.initialValue) != null ? _a : toValue(list)[0])) != null ? _b : void 0;\n }\n watch(listRef, () => set(index.value));\n return {\n state,\n index,\n next,\n prev,\n go: set\n };\n}\n\nfunction useDark(options = {}) {\n const {\n valueDark = \"dark\",\n valueLight = \"\"\n } = options;\n const mode = useColorMode({\n ...options,\n onChanged: (mode2, defaultHandler) => {\n var _a;\n if (options.onChanged)\n (_a = options.onChanged) == null ? void 0 : _a.call(options, mode2 === \"dark\", defaultHandler, mode2);\n else\n defaultHandler(mode2);\n },\n modes: {\n dark: valueDark,\n light: valueLight\n }\n });\n const system = computed(() => mode.system.value);\n const isDark = computed({\n get() {\n return mode.value === \"dark\";\n },\n set(v) {\n const modeVal = v ? \"dark\" : \"light\";\n if (system.value === modeVal)\n mode.value = \"auto\";\n else\n mode.value = modeVal;\n }\n });\n return isDark;\n}\n\nfunction fnBypass(v) {\n return v;\n}\nfunction fnSetSource(source, value) {\n return source.value = value;\n}\nfunction defaultDump(clone) {\n return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction defaultParse(clone) {\n return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction useManualRefHistory(source, options = {}) {\n const {\n clone = false,\n dump = defaultDump(clone),\n parse = defaultParse(clone),\n setSource = fnSetSource\n } = options;\n function _createHistoryRecord() {\n return markRaw({\n snapshot: dump(source.value),\n timestamp: timestamp()\n });\n }\n const last = ref(_createHistoryRecord());\n const undoStack = ref([]);\n const redoStack = ref([]);\n const _setSource = (record) => {\n setSource(source, parse(record.snapshot));\n last.value = record;\n };\n const commit = () => {\n undoStack.value.unshift(last.value);\n last.value = _createHistoryRecord();\n if (options.capacity && undoStack.value.length > options.capacity)\n undoStack.value.splice(options.capacity, Number.POSITIVE_INFINITY);\n if (redoStack.value.length)\n redoStack.value.splice(0, redoStack.value.length);\n };\n const clear = () => {\n undoStack.value.splice(0, undoStack.value.length);\n redoStack.value.splice(0, redoStack.value.length);\n };\n const undo = () => {\n const state = undoStack.value.shift();\n if (state) {\n redoStack.value.unshift(last.value);\n _setSource(state);\n }\n };\n const redo = () => {\n const state = redoStack.value.shift();\n if (state) {\n undoStack.value.unshift(last.value);\n _setSource(state);\n }\n };\n const reset = () => {\n _setSource(last.value);\n };\n const history = computed(() => [last.value, ...undoStack.value]);\n const canUndo = computed(() => undoStack.value.length > 0);\n const canRedo = computed(() => redoStack.value.length > 0);\n return {\n source,\n undoStack,\n redoStack,\n last,\n history,\n canUndo,\n canRedo,\n clear,\n commit,\n reset,\n undo,\n redo\n };\n}\n\nfunction useRefHistory(source, options = {}) {\n const {\n deep = false,\n flush = \"pre\",\n eventFilter\n } = options;\n const {\n eventFilter: composedFilter,\n pause,\n resume: resumeTracking,\n isActive: isTracking\n } = pausableFilter(eventFilter);\n const {\n ignoreUpdates,\n ignorePrevAsyncUpdates,\n stop\n } = watchIgnorable(\n source,\n commit,\n { deep, flush, eventFilter: composedFilter }\n );\n function setSource(source2, value) {\n ignorePrevAsyncUpdates();\n ignoreUpdates(() => {\n source2.value = value;\n });\n }\n const manualHistory = useManualRefHistory(source, { ...options, clone: options.clone || deep, setSource });\n const { clear, commit: manualCommit } = manualHistory;\n function commit() {\n ignorePrevAsyncUpdates();\n manualCommit();\n }\n function resume(commitNow) {\n resumeTracking();\n if (commitNow)\n commit();\n }\n function batch(fn) {\n let canceled = false;\n const cancel = () => canceled = true;\n ignoreUpdates(() => {\n fn(cancel);\n });\n if (!canceled)\n commit();\n }\n function dispose() {\n stop();\n clear();\n }\n return {\n ...manualHistory,\n isTracking,\n pause,\n resume,\n commit,\n batch,\n dispose\n };\n}\n\nfunction useDebouncedRefHistory(source, options = {}) {\n const filter = options.debounce ? debounceFilter(options.debounce) : void 0;\n const history = useRefHistory(source, { ...options, eventFilter: filter });\n return {\n ...history\n };\n}\n\nfunction useDeviceMotion(options = {}) {\n const {\n window = defaultWindow,\n eventFilter = bypassFilter\n } = options;\n const acceleration = ref({ x: null, y: null, z: null });\n const rotationRate = ref({ alpha: null, beta: null, gamma: null });\n const interval = ref(0);\n const accelerationIncludingGravity = ref({\n x: null,\n y: null,\n z: null\n });\n if (window) {\n const onDeviceMotion = createFilterWrapper(\n eventFilter,\n (event) => {\n acceleration.value = event.acceleration;\n accelerationIncludingGravity.value = event.accelerationIncludingGravity;\n rotationRate.value = event.rotationRate;\n interval.value = event.interval;\n }\n );\n useEventListener(window, \"devicemotion\", onDeviceMotion);\n }\n return {\n acceleration,\n accelerationIncludingGravity,\n rotationRate,\n interval\n };\n}\n\nfunction useDeviceOrientation(options = {}) {\n const { window = defaultWindow } = options;\n const isSupported = useSupported(() => window && \"DeviceOrientationEvent\" in window);\n const isAbsolute = ref(false);\n const alpha = ref(null);\n const beta = ref(null);\n const gamma = ref(null);\n if (window && isSupported.value) {\n useEventListener(window, \"deviceorientation\", (event) => {\n isAbsolute.value = event.absolute;\n alpha.value = event.alpha;\n beta.value = event.beta;\n gamma.value = event.gamma;\n });\n }\n return {\n isSupported,\n isAbsolute,\n alpha,\n beta,\n gamma\n };\n}\n\nfunction useDevicePixelRatio(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const pixelRatio = ref(1);\n if (window) {\n let observe2 = function() {\n pixelRatio.value = window.devicePixelRatio;\n cleanup2();\n media = window.matchMedia(`(resolution: ${pixelRatio.value}dppx)`);\n media.addEventListener(\"change\", observe2, { once: true });\n }, cleanup2 = function() {\n media == null ? void 0 : media.removeEventListener(\"change\", observe2);\n };\n let media;\n observe2();\n tryOnScopeDispose(cleanup2);\n }\n return { pixelRatio };\n}\n\nfunction useDevicesList(options = {}) {\n const {\n navigator = defaultNavigator,\n requestPermissions = false,\n constraints = { audio: true, video: true },\n onUpdated\n } = options;\n const devices = ref([]);\n const videoInputs = computed(() => devices.value.filter((i) => i.kind === \"videoinput\"));\n const audioInputs = computed(() => devices.value.filter((i) => i.kind === \"audioinput\"));\n const audioOutputs = computed(() => devices.value.filter((i) => i.kind === \"audiooutput\"));\n const isSupported = useSupported(() => navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices);\n const permissionGranted = ref(false);\n let stream;\n async function update() {\n if (!isSupported.value)\n return;\n devices.value = await navigator.mediaDevices.enumerateDevices();\n onUpdated == null ? void 0 : onUpdated(devices.value);\n if (stream) {\n stream.getTracks().forEach((t) => t.stop());\n stream = null;\n }\n }\n async function ensurePermissions() {\n if (!isSupported.value)\n return false;\n if (permissionGranted.value)\n return true;\n const { state, query } = usePermission(\"camera\", { controls: true });\n await query();\n if (state.value !== \"granted\") {\n let granted = true;\n try {\n stream = await navigator.mediaDevices.getUserMedia(constraints);\n } catch (e) {\n stream = null;\n granted = false;\n }\n update();\n permissionGranted.value = granted;\n } else {\n permissionGranted.value = true;\n }\n return permissionGranted.value;\n }\n if (isSupported.value) {\n if (requestPermissions)\n ensurePermissions();\n useEventListener(navigator.mediaDevices, \"devicechange\", update);\n update();\n }\n return {\n devices,\n ensurePermissions,\n permissionGranted,\n videoInputs,\n audioInputs,\n audioOutputs,\n isSupported\n };\n}\n\nfunction useDisplayMedia(options = {}) {\n var _a;\n const enabled = ref((_a = options.enabled) != null ? _a : false);\n const video = options.video;\n const audio = options.audio;\n const { navigator = defaultNavigator } = options;\n const isSupported = useSupported(() => {\n var _a2;\n return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getDisplayMedia;\n });\n const constraint = { audio, video };\n const stream = shallowRef();\n async function _start() {\n var _a2;\n if (!isSupported.value || stream.value)\n return;\n stream.value = await navigator.mediaDevices.getDisplayMedia(constraint);\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.addEventListener(\"ended\", stop));\n return stream.value;\n }\n async function _stop() {\n var _a2;\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n stream.value = void 0;\n }\n function stop() {\n _stop();\n enabled.value = false;\n }\n async function start() {\n await _start();\n if (stream.value)\n enabled.value = true;\n return stream.value;\n }\n watch(\n enabled,\n (v) => {\n if (v)\n _start();\n else\n _stop();\n },\n { immediate: true }\n );\n return {\n isSupported,\n stream,\n start,\n stop,\n enabled\n };\n}\n\nfunction useDocumentVisibility(options = {}) {\n const { document = defaultDocument } = options;\n if (!document)\n return ref(\"visible\");\n const visibility = ref(document.visibilityState);\n useEventListener(document, \"visibilitychange\", () => {\n visibility.value = document.visibilityState;\n });\n return visibility;\n}\n\nfunction useDraggable(target, options = {}) {\n var _a, _b;\n const {\n pointerTypes,\n preventDefault,\n stopPropagation,\n exact,\n onMove,\n onEnd,\n onStart,\n initialValue,\n axis = \"both\",\n draggingElement = defaultWindow,\n containerElement,\n handle: draggingHandle = target,\n buttons = [0]\n } = options;\n const position = ref(\n (_a = toValue(initialValue)) != null ? _a : { x: 0, y: 0 }\n );\n const pressedDelta = ref();\n const filterEvent = (e) => {\n if (pointerTypes)\n return pointerTypes.includes(e.pointerType);\n return true;\n };\n const handleEvent = (e) => {\n if (toValue(preventDefault))\n e.preventDefault();\n if (toValue(stopPropagation))\n e.stopPropagation();\n };\n const start = (e) => {\n var _a2;\n if (!toValue(buttons).includes(e.button))\n return;\n if (toValue(options.disabled) || !filterEvent(e))\n return;\n if (toValue(exact) && e.target !== toValue(target))\n return;\n const container = toValue(containerElement);\n const containerRect = (_a2 = container == null ? void 0 : container.getBoundingClientRect) == null ? void 0 : _a2.call(container);\n const targetRect = toValue(target).getBoundingClientRect();\n const pos = {\n x: e.clientX - (container ? targetRect.left - containerRect.left + container.scrollLeft : targetRect.left),\n y: e.clientY - (container ? targetRect.top - containerRect.top + container.scrollTop : targetRect.top)\n };\n if ((onStart == null ? void 0 : onStart(pos, e)) === false)\n return;\n pressedDelta.value = pos;\n handleEvent(e);\n };\n const move = (e) => {\n if (toValue(options.disabled) || !filterEvent(e))\n return;\n if (!pressedDelta.value)\n return;\n const container = toValue(containerElement);\n const targetRect = toValue(target).getBoundingClientRect();\n let { x, y } = position.value;\n if (axis === \"x\" || axis === \"both\") {\n x = e.clientX - pressedDelta.value.x;\n if (container)\n x = Math.min(Math.max(0, x), container.scrollWidth - targetRect.width);\n }\n if (axis === \"y\" || axis === \"both\") {\n y = e.clientY - pressedDelta.value.y;\n if (container)\n y = Math.min(Math.max(0, y), container.scrollHeight - targetRect.height);\n }\n position.value = {\n x,\n y\n };\n onMove == null ? void 0 : onMove(position.value, e);\n handleEvent(e);\n };\n const end = (e) => {\n if (toValue(options.disabled) || !filterEvent(e))\n return;\n if (!pressedDelta.value)\n return;\n pressedDelta.value = void 0;\n onEnd == null ? void 0 : onEnd(position.value, e);\n handleEvent(e);\n };\n if (isClient) {\n const config = { capture: (_b = options.capture) != null ? _b : true };\n useEventListener(draggingHandle, \"pointerdown\", start, config);\n useEventListener(draggingElement, \"pointermove\", move, config);\n useEventListener(draggingElement, \"pointerup\", end, config);\n }\n return {\n ...toRefs(position),\n position,\n isDragging: computed(() => !!pressedDelta.value),\n style: computed(\n () => `left:${position.value.x}px;top:${position.value.y}px;`\n )\n };\n}\n\nfunction useDropZone(target, options = {}) {\n var _a, _b;\n const isOverDropZone = ref(false);\n const files = shallowRef(null);\n let counter = 0;\n let isValid = true;\n if (isClient) {\n const _options = typeof options === \"function\" ? { onDrop: options } : options;\n const multiple = (_a = _options.multiple) != null ? _a : true;\n const preventDefaultForUnhandled = (_b = _options.preventDefaultForUnhandled) != null ? _b : false;\n const getFiles = (event) => {\n var _a2, _b2;\n const list = Array.from((_b2 = (_a2 = event.dataTransfer) == null ? void 0 : _a2.files) != null ? _b2 : []);\n return list.length === 0 ? null : multiple ? list : [list[0]];\n };\n const checkDataTypes = (types) => {\n if (_options.dataTypes) {\n const dataTypes = unref(_options.dataTypes);\n return typeof dataTypes === \"function\" ? dataTypes(types) : dataTypes ? dataTypes.some((item) => types.includes(item)) : true;\n }\n return true;\n };\n const checkValidity = (event) => {\n var _a2, _b2;\n const items = Array.from((_b2 = (_a2 = event.dataTransfer) == null ? void 0 : _a2.items) != null ? _b2 : []);\n const types = items.map((item) => item.type);\n const dataTypesValid = checkDataTypes(types);\n const multipleFilesValid = multiple || items.length <= 1;\n return dataTypesValid && multipleFilesValid;\n };\n const handleDragEvent = (event, eventType) => {\n var _a2, _b2, _c, _d;\n isValid = checkValidity(event);\n if (!isValid) {\n if (preventDefaultForUnhandled) {\n event.preventDefault();\n }\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = \"none\";\n }\n return;\n }\n event.preventDefault();\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = \"copy\";\n }\n const currentFiles = getFiles(event);\n switch (eventType) {\n case \"enter\":\n counter += 1;\n isOverDropZone.value = true;\n (_a2 = _options.onEnter) == null ? void 0 : _a2.call(_options, null, event);\n break;\n case \"over\":\n (_b2 = _options.onOver) == null ? void 0 : _b2.call(_options, null, event);\n break;\n case \"leave\":\n counter -= 1;\n if (counter === 0)\n isOverDropZone.value = false;\n (_c = _options.onLeave) == null ? void 0 : _c.call(_options, null, event);\n break;\n case \"drop\":\n counter = 0;\n isOverDropZone.value = false;\n if (isValid) {\n files.value = currentFiles;\n (_d = _options.onDrop) == null ? void 0 : _d.call(_options, currentFiles, event);\n }\n break;\n }\n };\n useEventListener(target, \"dragenter\", (event) => handleDragEvent(event, \"enter\"));\n useEventListener(target, \"dragover\", (event) => handleDragEvent(event, \"over\"));\n useEventListener(target, \"dragleave\", (event) => handleDragEvent(event, \"leave\"));\n useEventListener(target, \"drop\", (event) => handleDragEvent(event, \"drop\"));\n }\n return {\n files,\n isOverDropZone\n };\n}\n\nfunction useResizeObserver(target, callback, options = {}) {\n const { window = defaultWindow, ...observerOptions } = options;\n let observer;\n const isSupported = useSupported(() => window && \"ResizeObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const targets = computed(() => {\n const _targets = toValue(target);\n return Array.isArray(_targets) ? _targets.map((el) => unrefElement(el)) : [unrefElement(_targets)];\n });\n const stopWatch = watch(\n targets,\n (els) => {\n cleanup();\n if (isSupported.value && window) {\n observer = new ResizeObserver(callback);\n for (const _el of els) {\n if (_el)\n observer.observe(_el, observerOptions);\n }\n }\n },\n { immediate: true, flush: \"post\" }\n );\n const stop = () => {\n cleanup();\n stopWatch();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop\n };\n}\n\nfunction useElementBounding(target, options = {}) {\n const {\n reset = true,\n windowResize = true,\n windowScroll = true,\n immediate = true,\n updateTiming = \"sync\"\n } = options;\n const height = ref(0);\n const bottom = ref(0);\n const left = ref(0);\n const right = ref(0);\n const top = ref(0);\n const width = ref(0);\n const x = ref(0);\n const y = ref(0);\n function recalculate() {\n const el = unrefElement(target);\n if (!el) {\n if (reset) {\n height.value = 0;\n bottom.value = 0;\n left.value = 0;\n right.value = 0;\n top.value = 0;\n width.value = 0;\n x.value = 0;\n y.value = 0;\n }\n return;\n }\n const rect = el.getBoundingClientRect();\n height.value = rect.height;\n bottom.value = rect.bottom;\n left.value = rect.left;\n right.value = rect.right;\n top.value = rect.top;\n width.value = rect.width;\n x.value = rect.x;\n y.value = rect.y;\n }\n function update() {\n if (updateTiming === \"sync\")\n recalculate();\n else if (updateTiming === \"next-frame\")\n requestAnimationFrame(() => recalculate());\n }\n useResizeObserver(target, update);\n watch(() => unrefElement(target), (ele) => !ele && update());\n useMutationObserver(target, update, {\n attributeFilter: [\"style\", \"class\"]\n });\n if (windowScroll)\n useEventListener(\"scroll\", update, { capture: true, passive: true });\n if (windowResize)\n useEventListener(\"resize\", update, { passive: true });\n tryOnMounted(() => {\n if (immediate)\n update();\n });\n return {\n height,\n bottom,\n left,\n right,\n top,\n width,\n x,\n y,\n update\n };\n}\n\nfunction useElementByPoint(options) {\n const {\n x,\n y,\n document = defaultDocument,\n multiple,\n interval = \"requestAnimationFrame\",\n immediate = true\n } = options;\n const isSupported = useSupported(() => {\n if (toValue(multiple))\n return document && \"elementsFromPoint\" in document;\n return document && \"elementFromPoint\" in document;\n });\n const element = ref(null);\n const cb = () => {\n var _a, _b;\n element.value = toValue(multiple) ? (_a = document == null ? void 0 : document.elementsFromPoint(toValue(x), toValue(y))) != null ? _a : [] : (_b = document == null ? void 0 : document.elementFromPoint(toValue(x), toValue(y))) != null ? _b : null;\n };\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n return {\n isSupported,\n element,\n ...controls\n };\n}\n\nfunction useElementHover(el, options = {}) {\n const {\n delayEnter = 0,\n delayLeave = 0,\n window = defaultWindow\n } = options;\n const isHovered = ref(false);\n let timer;\n const toggle = (entering) => {\n const delay = entering ? delayEnter : delayLeave;\n if (timer) {\n clearTimeout(timer);\n timer = void 0;\n }\n if (delay)\n timer = setTimeout(() => isHovered.value = entering, delay);\n else\n isHovered.value = entering;\n };\n if (!window)\n return isHovered;\n useEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n useEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n return isHovered;\n}\n\nfunction useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {\n const { window = defaultWindow, box = \"content-box\" } = options;\n const isSVG = computed(() => {\n var _a, _b;\n return (_b = (_a = unrefElement(target)) == null ? void 0 : _a.namespaceURI) == null ? void 0 : _b.includes(\"svg\");\n });\n const width = ref(initialSize.width);\n const height = ref(initialSize.height);\n const { stop: stop1 } = useResizeObserver(\n target,\n ([entry]) => {\n const boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n if (window && isSVG.value) {\n const $elem = unrefElement(target);\n if ($elem) {\n const rect = $elem.getBoundingClientRect();\n width.value = rect.width;\n height.value = rect.height;\n }\n } else {\n if (boxSize) {\n const formatBoxSize = Array.isArray(boxSize) ? boxSize : [boxSize];\n width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n } else {\n width.value = entry.contentRect.width;\n height.value = entry.contentRect.height;\n }\n }\n },\n options\n );\n tryOnMounted(() => {\n const ele = unrefElement(target);\n if (ele) {\n width.value = \"offsetWidth\" in ele ? ele.offsetWidth : initialSize.width;\n height.value = \"offsetHeight\" in ele ? ele.offsetHeight : initialSize.height;\n }\n });\n const stop2 = watch(\n () => unrefElement(target),\n (ele) => {\n width.value = ele ? initialSize.width : 0;\n height.value = ele ? initialSize.height : 0;\n }\n );\n function stop() {\n stop1();\n stop2();\n }\n return {\n width,\n height,\n stop\n };\n}\n\nfunction useIntersectionObserver(target, callback, options = {}) {\n const {\n root,\n rootMargin = \"0px\",\n threshold = 0,\n window = defaultWindow,\n immediate = true\n } = options;\n const isSupported = useSupported(() => window && \"IntersectionObserver\" in window);\n const targets = computed(() => {\n const _target = toValue(target);\n return (Array.isArray(_target) ? _target : [_target]).map(unrefElement).filter(notNullish);\n });\n let cleanup = noop;\n const isActive = ref(immediate);\n const stopWatch = isSupported.value ? watch(\n () => [targets.value, unrefElement(root), isActive.value],\n ([targets2, root2]) => {\n cleanup();\n if (!isActive.value)\n return;\n if (!targets2.length)\n return;\n const observer = new IntersectionObserver(\n callback,\n {\n root: unrefElement(root2),\n rootMargin,\n threshold\n }\n );\n targets2.forEach((el) => el && observer.observe(el));\n cleanup = () => {\n observer.disconnect();\n cleanup = noop;\n };\n },\n { immediate, flush: \"post\" }\n ) : noop;\n const stop = () => {\n cleanup();\n stopWatch();\n isActive.value = false;\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n isActive,\n pause() {\n cleanup();\n isActive.value = false;\n },\n resume() {\n isActive.value = true;\n },\n stop\n };\n}\n\nfunction useElementVisibility(element, options = {}) {\n const { window = defaultWindow, scrollTarget, threshold = 0 } = options;\n const elementIsVisible = ref(false);\n useIntersectionObserver(\n element,\n (intersectionObserverEntries) => {\n let isIntersecting = elementIsVisible.value;\n let latestTime = 0;\n for (const entry of intersectionObserverEntries) {\n if (entry.time >= latestTime) {\n latestTime = entry.time;\n isIntersecting = entry.isIntersecting;\n }\n }\n elementIsVisible.value = isIntersecting;\n },\n {\n root: scrollTarget,\n window,\n threshold\n }\n );\n return elementIsVisible;\n}\n\nconst events = /* @__PURE__ */ new Map();\n\nfunction useEventBus(key) {\n const scope = getCurrentScope();\n function on(listener) {\n var _a;\n const listeners = events.get(key) || /* @__PURE__ */ new Set();\n listeners.add(listener);\n events.set(key, listeners);\n const _off = () => off(listener);\n (_a = scope == null ? void 0 : scope.cleanups) == null ? void 0 : _a.push(_off);\n return _off;\n }\n function once(listener) {\n function _listener(...args) {\n off(_listener);\n listener(...args);\n }\n return on(_listener);\n }\n function off(listener) {\n const listeners = events.get(key);\n if (!listeners)\n return;\n listeners.delete(listener);\n if (!listeners.size)\n reset();\n }\n function reset() {\n events.delete(key);\n }\n function emit(event, payload) {\n var _a;\n (_a = events.get(key)) == null ? void 0 : _a.forEach((v) => v(event, payload));\n }\n return { on, once, off, emit, reset };\n}\n\nfunction resolveNestedOptions$1(options) {\n if (options === true)\n return {};\n return options;\n}\nfunction useEventSource(url, events = [], options = {}) {\n const event = ref(null);\n const data = ref(null);\n const status = ref(\"CONNECTING\");\n const eventSource = ref(null);\n const error = shallowRef(null);\n const urlRef = toRef(url);\n const lastEventId = shallowRef(null);\n let explicitlyClosed = false;\n let retried = 0;\n const {\n withCredentials = false,\n immediate = true\n } = options;\n const close = () => {\n if (isClient && eventSource.value) {\n eventSource.value.close();\n eventSource.value = null;\n status.value = \"CLOSED\";\n explicitlyClosed = true;\n }\n };\n const _init = () => {\n if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n return;\n const es = new EventSource(urlRef.value, { withCredentials });\n status.value = \"CONNECTING\";\n eventSource.value = es;\n es.onopen = () => {\n status.value = \"OPEN\";\n error.value = null;\n };\n es.onerror = (e) => {\n status.value = \"CLOSED\";\n error.value = e;\n if (es.readyState === 2 && !explicitlyClosed && options.autoReconnect) {\n es.close();\n const {\n retries = -1,\n delay = 1e3,\n onFailed\n } = resolveNestedOptions$1(options.autoReconnect);\n retried += 1;\n if (typeof retries === \"number\" && (retries < 0 || retried < retries))\n setTimeout(_init, delay);\n else if (typeof retries === \"function\" && retries())\n setTimeout(_init, delay);\n else\n onFailed == null ? void 0 : onFailed();\n }\n };\n es.onmessage = (e) => {\n event.value = null;\n data.value = e.data;\n lastEventId.value = e.lastEventId;\n };\n for (const event_name of events) {\n useEventListener(es, event_name, (e) => {\n event.value = event_name;\n data.value = e.data || null;\n });\n }\n };\n const open = () => {\n if (!isClient)\n return;\n close();\n explicitlyClosed = false;\n retried = 0;\n _init();\n };\n if (immediate)\n watch(urlRef, open, { immediate: true });\n tryOnScopeDispose(close);\n return {\n eventSource,\n event,\n data,\n status,\n error,\n open,\n close,\n lastEventId\n };\n}\n\nfunction useEyeDropper(options = {}) {\n const { initialValue = \"\" } = options;\n const isSupported = useSupported(() => typeof window !== \"undefined\" && \"EyeDropper\" in window);\n const sRGBHex = ref(initialValue);\n async function open(openOptions) {\n if (!isSupported.value)\n return;\n const eyeDropper = new window.EyeDropper();\n const result = await eyeDropper.open(openOptions);\n sRGBHex.value = result.sRGBHex;\n return result;\n }\n return { isSupported, sRGBHex, open };\n}\n\nfunction useFavicon(newIcon = null, options = {}) {\n const {\n baseUrl = \"\",\n rel = \"icon\",\n document = defaultDocument\n } = options;\n const favicon = toRef(newIcon);\n const applyIcon = (icon) => {\n const elements = document == null ? void 0 : document.head.querySelectorAll(`link[rel*=\"${rel}\"]`);\n if (!elements || elements.length === 0) {\n const link = document == null ? void 0 : document.createElement(\"link\");\n if (link) {\n link.rel = rel;\n link.href = `${baseUrl}${icon}`;\n link.type = `image/${icon.split(\".\").pop()}`;\n document == null ? void 0 : document.head.append(link);\n }\n return;\n }\n elements == null ? void 0 : elements.forEach((el) => el.href = `${baseUrl}${icon}`);\n };\n watch(\n favicon,\n (i, o) => {\n if (typeof i === \"string\" && i !== o)\n applyIcon(i);\n },\n { immediate: true }\n );\n return favicon;\n}\n\nconst payloadMapping = {\n json: \"application/json\",\n text: \"text/plain\"\n};\nfunction isFetchOptions(obj) {\n return obj && containsProp(obj, \"immediate\", \"refetch\", \"initialData\", \"timeout\", \"beforeFetch\", \"afterFetch\", \"onFetchError\", \"fetch\", \"updateDataOnError\");\n}\nconst reAbsolute = /^(?:[a-z][a-z\\d+\\-.]*:)?\\/\\//i;\nfunction isAbsoluteURL(url) {\n return reAbsolute.test(url);\n}\nfunction headersToObject(headers) {\n if (typeof Headers !== \"undefined\" && headers instanceof Headers)\n return Object.fromEntries(headers.entries());\n return headers;\n}\nfunction combineCallbacks(combination, ...callbacks) {\n if (combination === \"overwrite\") {\n return async (ctx) => {\n const callback = callbacks[callbacks.length - 1];\n if (callback)\n return { ...ctx, ...await callback(ctx) };\n return ctx;\n };\n } else {\n return async (ctx) => {\n for (const callback of callbacks) {\n if (callback)\n ctx = { ...ctx, ...await callback(ctx) };\n }\n return ctx;\n };\n }\n}\nfunction createFetch(config = {}) {\n const _combination = config.combination || \"chain\";\n const _options = config.options || {};\n const _fetchOptions = config.fetchOptions || {};\n function useFactoryFetch(url, ...args) {\n const computedUrl = computed(() => {\n const baseUrl = toValue(config.baseUrl);\n const targetUrl = toValue(url);\n return baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl;\n });\n let options = _options;\n let fetchOptions = _fetchOptions;\n if (args.length > 0) {\n if (isFetchOptions(args[0])) {\n options = {\n ...options,\n ...args[0],\n beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch),\n afterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch),\n onFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError)\n };\n } else {\n fetchOptions = {\n ...fetchOptions,\n ...args[0],\n headers: {\n ...headersToObject(fetchOptions.headers) || {},\n ...headersToObject(args[0].headers) || {}\n }\n };\n }\n }\n if (args.length > 1 && isFetchOptions(args[1])) {\n options = {\n ...options,\n ...args[1],\n beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch),\n afterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch),\n onFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError)\n };\n }\n return useFetch(computedUrl, fetchOptions, options);\n }\n return useFactoryFetch;\n}\nfunction useFetch(url, ...args) {\n var _a;\n const supportsAbort = typeof AbortController === \"function\";\n let fetchOptions = {};\n let options = {\n immediate: true,\n refetch: false,\n timeout: 0,\n updateDataOnError: false\n };\n const config = {\n method: \"GET\",\n type: \"text\",\n payload: void 0\n };\n if (args.length > 0) {\n if (isFetchOptions(args[0]))\n options = { ...options, ...args[0] };\n else\n fetchOptions = args[0];\n }\n if (args.length > 1) {\n if (isFetchOptions(args[1]))\n options = { ...options, ...args[1] };\n }\n const {\n fetch = (_a = defaultWindow) == null ? void 0 : _a.fetch,\n initialData,\n timeout\n } = options;\n const responseEvent = createEventHook();\n const errorEvent = createEventHook();\n const finallyEvent = createEventHook();\n const isFinished = ref(false);\n const isFetching = ref(false);\n const aborted = ref(false);\n const statusCode = ref(null);\n const response = shallowRef(null);\n const error = shallowRef(null);\n const data = shallowRef(initialData || null);\n const canAbort = computed(() => supportsAbort && isFetching.value);\n let controller;\n let timer;\n const abort = () => {\n if (supportsAbort) {\n controller == null ? void 0 : controller.abort();\n controller = new AbortController();\n controller.signal.onabort = () => aborted.value = true;\n fetchOptions = {\n ...fetchOptions,\n signal: controller.signal\n };\n }\n };\n const loading = (isLoading) => {\n isFetching.value = isLoading;\n isFinished.value = !isLoading;\n };\n if (timeout)\n timer = useTimeoutFn(abort, timeout, { immediate: false });\n let executeCounter = 0;\n const execute = async (throwOnFailed = false) => {\n var _a2, _b;\n abort();\n loading(true);\n error.value = null;\n statusCode.value = null;\n aborted.value = false;\n executeCounter += 1;\n const currentExecuteCounter = executeCounter;\n const defaultFetchOptions = {\n method: config.method,\n headers: {}\n };\n if (config.payload) {\n const headers = headersToObject(defaultFetchOptions.headers);\n const payload = toValue(config.payload);\n const proto = Object.getPrototypeOf(payload);\n if (!config.payloadType && payload && (proto === Object.prototype || Array.isArray(proto)) && !(payload instanceof FormData))\n config.payloadType = \"json\";\n if (config.payloadType)\n headers[\"Content-Type\"] = (_a2 = payloadMapping[config.payloadType]) != null ? _a2 : config.payloadType;\n defaultFetchOptions.body = config.payloadType === \"json\" ? JSON.stringify(payload) : payload;\n }\n let isCanceled = false;\n const context = {\n url: toValue(url),\n options: {\n ...defaultFetchOptions,\n ...fetchOptions\n },\n cancel: () => {\n isCanceled = true;\n }\n };\n if (options.beforeFetch)\n Object.assign(context, await options.beforeFetch(context));\n if (isCanceled || !fetch) {\n loading(false);\n return Promise.resolve(null);\n }\n let responseData = null;\n if (timer)\n timer.start();\n return fetch(\n context.url,\n {\n ...defaultFetchOptions,\n ...context.options,\n headers: {\n ...headersToObject(defaultFetchOptions.headers),\n ...headersToObject((_b = context.options) == null ? void 0 : _b.headers)\n }\n }\n ).then(async (fetchResponse) => {\n response.value = fetchResponse;\n statusCode.value = fetchResponse.status;\n responseData = await fetchResponse.clone()[config.type]();\n if (!fetchResponse.ok) {\n data.value = initialData || null;\n throw new Error(fetchResponse.statusText);\n }\n if (options.afterFetch) {\n ({ data: responseData } = await options.afterFetch({\n data: responseData,\n response: fetchResponse\n }));\n }\n data.value = responseData;\n responseEvent.trigger(fetchResponse);\n return fetchResponse;\n }).catch(async (fetchError) => {\n let errorData = fetchError.message || fetchError.name;\n if (options.onFetchError) {\n ({ error: errorData, data: responseData } = await options.onFetchError({\n data: responseData,\n error: fetchError,\n response: response.value\n }));\n }\n error.value = errorData;\n if (options.updateDataOnError)\n data.value = responseData;\n errorEvent.trigger(fetchError);\n if (throwOnFailed)\n throw fetchError;\n return null;\n }).finally(() => {\n if (currentExecuteCounter === executeCounter)\n loading(false);\n if (timer)\n timer.stop();\n finallyEvent.trigger(null);\n });\n };\n const refetch = toRef(options.refetch);\n watch(\n [\n refetch,\n toRef(url)\n ],\n ([refetch2]) => refetch2 && execute(),\n { deep: true }\n );\n const shell = {\n isFinished: readonly(isFinished),\n isFetching: readonly(isFetching),\n statusCode,\n response,\n error,\n data,\n canAbort,\n aborted,\n abort,\n execute,\n onFetchResponse: responseEvent.on,\n onFetchError: errorEvent.on,\n onFetchFinally: finallyEvent.on,\n // method\n get: setMethod(\"GET\"),\n put: setMethod(\"PUT\"),\n post: setMethod(\"POST\"),\n delete: setMethod(\"DELETE\"),\n patch: setMethod(\"PATCH\"),\n head: setMethod(\"HEAD\"),\n options: setMethod(\"OPTIONS\"),\n // type\n json: setType(\"json\"),\n text: setType(\"text\"),\n blob: setType(\"blob\"),\n arrayBuffer: setType(\"arrayBuffer\"),\n formData: setType(\"formData\")\n };\n function setMethod(method) {\n return (payload, payloadType) => {\n if (!isFetching.value) {\n config.method = method;\n config.payload = payload;\n config.payloadType = payloadType;\n if (isRef(config.payload)) {\n watch(\n [\n refetch,\n toRef(config.payload)\n ],\n ([refetch2]) => refetch2 && execute(),\n { deep: true }\n );\n }\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n };\n }\n return void 0;\n };\n }\n function waitUntilFinished() {\n return new Promise((resolve, reject) => {\n until(isFinished).toBe(true).then(() => resolve(shell)).catch(reject);\n });\n }\n function setType(type) {\n return () => {\n if (!isFetching.value) {\n config.type = type;\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n };\n }\n return void 0;\n };\n }\n if (options.immediate)\n Promise.resolve().then(() => execute());\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n };\n}\nfunction joinPaths(start, end) {\n if (!start.endsWith(\"/\") && !end.startsWith(\"/\")) {\n return `${start}/${end}`;\n }\n if (start.endsWith(\"/\") && end.startsWith(\"/\")) {\n return `${start.slice(0, -1)}${end}`;\n }\n return `${start}${end}`;\n}\n\nconst DEFAULT_OPTIONS = {\n multiple: true,\n accept: \"*\",\n reset: false,\n directory: false\n};\nfunction useFileDialog(options = {}) {\n const {\n document = defaultDocument\n } = options;\n const files = ref(null);\n const { on: onChange, trigger: changeTrigger } = createEventHook();\n const { on: onCancel, trigger: cancelTrigger } = createEventHook();\n let input;\n if (document) {\n input = document.createElement(\"input\");\n input.type = \"file\";\n input.onchange = (event) => {\n const result = event.target;\n files.value = result.files;\n changeTrigger(files.value);\n };\n input.oncancel = () => {\n cancelTrigger();\n };\n }\n const reset = () => {\n files.value = null;\n if (input && input.value) {\n input.value = \"\";\n changeTrigger(null);\n }\n };\n const open = (localOptions) => {\n if (!input)\n return;\n const _options = {\n ...DEFAULT_OPTIONS,\n ...options,\n ...localOptions\n };\n input.multiple = _options.multiple;\n input.accept = _options.accept;\n input.webkitdirectory = _options.directory;\n if (hasOwn(_options, \"capture\"))\n input.capture = _options.capture;\n if (_options.reset)\n reset();\n input.click();\n };\n return {\n files: readonly(files),\n open,\n reset,\n onCancel,\n onChange\n };\n}\n\nfunction useFileSystemAccess(options = {}) {\n const {\n window: _window = defaultWindow,\n dataType = \"Text\"\n } = options;\n const window = _window;\n const isSupported = useSupported(() => window && \"showSaveFilePicker\" in window && \"showOpenFilePicker\" in window);\n const fileHandle = ref();\n const data = ref();\n const file = ref();\n const fileName = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.name) != null ? _b : \"\";\n });\n const fileMIME = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.type) != null ? _b : \"\";\n });\n const fileSize = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.size) != null ? _b : 0;\n });\n const fileLastModified = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.lastModified) != null ? _b : 0;\n });\n async function open(_options = {}) {\n if (!isSupported.value)\n return;\n const [handle] = await window.showOpenFilePicker({ ...toValue(options), ..._options });\n fileHandle.value = handle;\n await updateData();\n }\n async function create(_options = {}) {\n if (!isSupported.value)\n return;\n fileHandle.value = await window.showSaveFilePicker({ ...options, ..._options });\n data.value = void 0;\n await updateData();\n }\n async function save(_options = {}) {\n if (!isSupported.value)\n return;\n if (!fileHandle.value)\n return saveAs(_options);\n if (data.value) {\n const writableStream = await fileHandle.value.createWritable();\n await writableStream.write(data.value);\n await writableStream.close();\n }\n await updateFile();\n }\n async function saveAs(_options = {}) {\n if (!isSupported.value)\n return;\n fileHandle.value = await window.showSaveFilePicker({ ...options, ..._options });\n if (data.value) {\n const writableStream = await fileHandle.value.createWritable();\n await writableStream.write(data.value);\n await writableStream.close();\n }\n await updateFile();\n }\n async function updateFile() {\n var _a;\n file.value = await ((_a = fileHandle.value) == null ? void 0 : _a.getFile());\n }\n async function updateData() {\n var _a, _b;\n await updateFile();\n const type = toValue(dataType);\n if (type === \"Text\")\n data.value = await ((_a = file.value) == null ? void 0 : _a.text());\n else if (type === \"ArrayBuffer\")\n data.value = await ((_b = file.value) == null ? void 0 : _b.arrayBuffer());\n else if (type === \"Blob\")\n data.value = file.value;\n }\n watch(() => toValue(dataType), updateData);\n return {\n isSupported,\n data,\n file,\n fileName,\n fileMIME,\n fileSize,\n fileLastModified,\n open,\n create,\n save,\n saveAs,\n updateData\n };\n}\n\nfunction useFocus(target, options = {}) {\n const { initialValue = false, focusVisible = false, preventScroll = false } = options;\n const innerFocused = ref(false);\n const targetElement = computed(() => unrefElement(target));\n useEventListener(targetElement, \"focus\", (event) => {\n var _a, _b;\n if (!focusVisible || ((_b = (_a = event.target).matches) == null ? void 0 : _b.call(_a, \":focus-visible\")))\n innerFocused.value = true;\n });\n useEventListener(targetElement, \"blur\", () => innerFocused.value = false);\n const focused = computed({\n get: () => innerFocused.value,\n set(value) {\n var _a, _b;\n if (!value && innerFocused.value)\n (_a = targetElement.value) == null ? void 0 : _a.blur();\n else if (value && !innerFocused.value)\n (_b = targetElement.value) == null ? void 0 : _b.focus({ preventScroll });\n }\n });\n watch(\n targetElement,\n () => {\n focused.value = initialValue;\n },\n { immediate: true, flush: \"post\" }\n );\n return { focused };\n}\n\nconst EVENT_FOCUS_IN = \"focusin\";\nconst EVENT_FOCUS_OUT = \"focusout\";\nfunction useFocusWithin(target, options = {}) {\n const { window = defaultWindow } = options;\n const targetElement = computed(() => unrefElement(target));\n const _focused = ref(false);\n const focused = computed(() => _focused.value);\n const activeElement = useActiveElement(options);\n if (!window || !activeElement.value) {\n return { focused };\n }\n useEventListener(targetElement, EVENT_FOCUS_IN, () => _focused.value = true);\n useEventListener(targetElement, EVENT_FOCUS_OUT, () => _focused.value = false);\n return { focused };\n}\n\nfunction useFps(options) {\n var _a;\n const fps = ref(0);\n if (typeof performance === \"undefined\")\n return fps;\n const every = (_a = options == null ? void 0 : options.every) != null ? _a : 10;\n let last = performance.now();\n let ticks = 0;\n useRafFn(() => {\n ticks += 1;\n if (ticks >= every) {\n const now = performance.now();\n const diff = now - last;\n fps.value = Math.round(1e3 / (diff / ticks));\n last = now;\n ticks = 0;\n }\n });\n return fps;\n}\n\nconst eventHandlers = [\n \"fullscreenchange\",\n \"webkitfullscreenchange\",\n \"webkitendfullscreen\",\n \"mozfullscreenchange\",\n \"MSFullscreenChange\"\n];\nfunction useFullscreen(target, options = {}) {\n const {\n document = defaultDocument,\n autoExit = false\n } = options;\n const targetRef = computed(() => {\n var _a;\n return (_a = unrefElement(target)) != null ? _a : document == null ? void 0 : document.querySelector(\"html\");\n });\n const isFullscreen = ref(false);\n const requestMethod = computed(() => {\n return [\n \"requestFullscreen\",\n \"webkitRequestFullscreen\",\n \"webkitEnterFullscreen\",\n \"webkitEnterFullScreen\",\n \"webkitRequestFullScreen\",\n \"mozRequestFullScreen\",\n \"msRequestFullscreen\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const exitMethod = computed(() => {\n return [\n \"exitFullscreen\",\n \"webkitExitFullscreen\",\n \"webkitExitFullScreen\",\n \"webkitCancelFullScreen\",\n \"mozCancelFullScreen\",\n \"msExitFullscreen\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const fullscreenEnabled = computed(() => {\n return [\n \"fullScreen\",\n \"webkitIsFullScreen\",\n \"webkitDisplayingFullscreen\",\n \"mozFullScreen\",\n \"msFullscreenElement\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const fullscreenElementMethod = [\n \"fullscreenElement\",\n \"webkitFullscreenElement\",\n \"mozFullScreenElement\",\n \"msFullscreenElement\"\n ].find((m) => document && m in document);\n const isSupported = useSupported(() => targetRef.value && document && requestMethod.value !== void 0 && exitMethod.value !== void 0 && fullscreenEnabled.value !== void 0);\n const isCurrentElementFullScreen = () => {\n if (fullscreenElementMethod)\n return (document == null ? void 0 : document[fullscreenElementMethod]) === targetRef.value;\n return false;\n };\n const isElementFullScreen = () => {\n if (fullscreenEnabled.value) {\n if (document && document[fullscreenEnabled.value] != null) {\n return document[fullscreenEnabled.value];\n } else {\n const target2 = targetRef.value;\n if ((target2 == null ? void 0 : target2[fullscreenEnabled.value]) != null) {\n return Boolean(target2[fullscreenEnabled.value]);\n }\n }\n }\n return false;\n };\n async function exit() {\n if (!isSupported.value || !isFullscreen.value)\n return;\n if (exitMethod.value) {\n if ((document == null ? void 0 : document[exitMethod.value]) != null) {\n await document[exitMethod.value]();\n } else {\n const target2 = targetRef.value;\n if ((target2 == null ? void 0 : target2[exitMethod.value]) != null)\n await target2[exitMethod.value]();\n }\n }\n isFullscreen.value = false;\n }\n async function enter() {\n if (!isSupported.value || isFullscreen.value)\n return;\n if (isElementFullScreen())\n await exit();\n const target2 = targetRef.value;\n if (requestMethod.value && (target2 == null ? void 0 : target2[requestMethod.value]) != null) {\n await target2[requestMethod.value]();\n isFullscreen.value = true;\n }\n }\n async function toggle() {\n await (isFullscreen.value ? exit() : enter());\n }\n const handlerCallback = () => {\n const isElementFullScreenValue = isElementFullScreen();\n if (!isElementFullScreenValue || isElementFullScreenValue && isCurrentElementFullScreen())\n isFullscreen.value = isElementFullScreenValue;\n };\n useEventListener(document, eventHandlers, handlerCallback, false);\n useEventListener(() => unrefElement(targetRef), eventHandlers, handlerCallback, false);\n if (autoExit)\n tryOnScopeDispose(exit);\n return {\n isSupported,\n isFullscreen,\n enter,\n exit,\n toggle\n };\n}\n\nfunction mapGamepadToXbox360Controller(gamepad) {\n return computed(() => {\n if (gamepad.value) {\n return {\n buttons: {\n a: gamepad.value.buttons[0],\n b: gamepad.value.buttons[1],\n x: gamepad.value.buttons[2],\n y: gamepad.value.buttons[3]\n },\n bumper: {\n left: gamepad.value.buttons[4],\n right: gamepad.value.buttons[5]\n },\n triggers: {\n left: gamepad.value.buttons[6],\n right: gamepad.value.buttons[7]\n },\n stick: {\n left: {\n horizontal: gamepad.value.axes[0],\n vertical: gamepad.value.axes[1],\n button: gamepad.value.buttons[10]\n },\n right: {\n horizontal: gamepad.value.axes[2],\n vertical: gamepad.value.axes[3],\n button: gamepad.value.buttons[11]\n }\n },\n dpad: {\n up: gamepad.value.buttons[12],\n down: gamepad.value.buttons[13],\n left: gamepad.value.buttons[14],\n right: gamepad.value.buttons[15]\n },\n back: gamepad.value.buttons[8],\n start: gamepad.value.buttons[9]\n };\n }\n return null;\n });\n}\nfunction useGamepad(options = {}) {\n const {\n navigator = defaultNavigator\n } = options;\n const isSupported = useSupported(() => navigator && \"getGamepads\" in navigator);\n const gamepads = ref([]);\n const onConnectedHook = createEventHook();\n const onDisconnectedHook = createEventHook();\n const stateFromGamepad = (gamepad) => {\n const hapticActuators = [];\n const vibrationActuator = \"vibrationActuator\" in gamepad ? gamepad.vibrationActuator : null;\n if (vibrationActuator)\n hapticActuators.push(vibrationActuator);\n if (gamepad.hapticActuators)\n hapticActuators.push(...gamepad.hapticActuators);\n return {\n id: gamepad.id,\n index: gamepad.index,\n connected: gamepad.connected,\n mapping: gamepad.mapping,\n timestamp: gamepad.timestamp,\n vibrationActuator: gamepad.vibrationActuator,\n hapticActuators,\n axes: gamepad.axes.map((axes) => axes),\n buttons: gamepad.buttons.map((button) => ({ pressed: button.pressed, touched: button.touched, value: button.value }))\n };\n };\n const updateGamepadState = () => {\n const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n for (const gamepad of _gamepads) {\n if (gamepad && gamepads.value[gamepad.index])\n gamepads.value[gamepad.index] = stateFromGamepad(gamepad);\n }\n };\n const { isActive, pause, resume } = useRafFn(updateGamepadState);\n const onGamepadConnected = (gamepad) => {\n if (!gamepads.value.some(({ index }) => index === gamepad.index)) {\n gamepads.value.push(stateFromGamepad(gamepad));\n onConnectedHook.trigger(gamepad.index);\n }\n resume();\n };\n const onGamepadDisconnected = (gamepad) => {\n gamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);\n onDisconnectedHook.trigger(gamepad.index);\n };\n useEventListener(\"gamepadconnected\", (e) => onGamepadConnected(e.gamepad));\n useEventListener(\"gamepaddisconnected\", (e) => onGamepadDisconnected(e.gamepad));\n tryOnMounted(() => {\n const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n for (const gamepad of _gamepads) {\n if (gamepad && gamepads.value[gamepad.index])\n onGamepadConnected(gamepad);\n }\n });\n pause();\n return {\n isSupported,\n onConnected: onConnectedHook.on,\n onDisconnected: onDisconnectedHook.on,\n gamepads,\n pause,\n resume,\n isActive\n };\n}\n\nfunction useGeolocation(options = {}) {\n const {\n enableHighAccuracy = true,\n maximumAge = 3e4,\n timeout = 27e3,\n navigator = defaultNavigator,\n immediate = true\n } = options;\n const isSupported = useSupported(() => navigator && \"geolocation\" in navigator);\n const locatedAt = ref(null);\n const error = shallowRef(null);\n const coords = ref({\n accuracy: 0,\n latitude: Number.POSITIVE_INFINITY,\n longitude: Number.POSITIVE_INFINITY,\n altitude: null,\n altitudeAccuracy: null,\n heading: null,\n speed: null\n });\n function updatePosition(position) {\n locatedAt.value = position.timestamp;\n coords.value = position.coords;\n error.value = null;\n }\n let watcher;\n function resume() {\n if (isSupported.value) {\n watcher = navigator.geolocation.watchPosition(\n updatePosition,\n (err) => error.value = err,\n {\n enableHighAccuracy,\n maximumAge,\n timeout\n }\n );\n }\n }\n if (immediate)\n resume();\n function pause() {\n if (watcher && navigator)\n navigator.geolocation.clearWatch(watcher);\n }\n tryOnScopeDispose(() => {\n pause();\n });\n return {\n isSupported,\n coords,\n locatedAt,\n error,\n resume,\n pause\n };\n}\n\nconst defaultEvents$1 = [\"mousemove\", \"mousedown\", \"resize\", \"keydown\", \"touchstart\", \"wheel\"];\nconst oneMinute = 6e4;\nfunction useIdle(timeout = oneMinute, options = {}) {\n const {\n initialState = false,\n listenForVisibilityChange = true,\n events = defaultEvents$1,\n window = defaultWindow,\n eventFilter = throttleFilter(50)\n } = options;\n const idle = ref(initialState);\n const lastActive = ref(timestamp());\n let timer;\n const reset = () => {\n idle.value = false;\n clearTimeout(timer);\n timer = setTimeout(() => idle.value = true, timeout);\n };\n const onEvent = createFilterWrapper(\n eventFilter,\n () => {\n lastActive.value = timestamp();\n reset();\n }\n );\n if (window) {\n const document = window.document;\n for (const event of events)\n useEventListener(window, event, onEvent, { passive: true });\n if (listenForVisibilityChange) {\n useEventListener(document, \"visibilitychange\", () => {\n if (!document.hidden)\n onEvent();\n });\n }\n reset();\n }\n return {\n idle,\n lastActive,\n reset\n };\n}\n\nasync function loadImage(options) {\n return new Promise((resolve, reject) => {\n const img = new Image();\n const { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy } = options;\n img.src = src;\n if (srcset)\n img.srcset = srcset;\n if (sizes)\n img.sizes = sizes;\n if (clazz)\n img.className = clazz;\n if (loading)\n img.loading = loading;\n if (crossorigin)\n img.crossOrigin = crossorigin;\n if (referrerPolicy)\n img.referrerPolicy = referrerPolicy;\n img.onload = () => resolve(img);\n img.onerror = reject;\n });\n}\nfunction useImage(options, asyncStateOptions = {}) {\n const state = useAsyncState(\n () => loadImage(toValue(options)),\n void 0,\n {\n resetOnExecute: true,\n ...asyncStateOptions\n }\n );\n watch(\n () => toValue(options),\n () => state.execute(asyncStateOptions.delay),\n { deep: true }\n );\n return state;\n}\n\nfunction resolveElement(el) {\n if (typeof Window !== \"undefined\" && el instanceof Window)\n return el.document.documentElement;\n if (typeof Document !== \"undefined\" && el instanceof Document)\n return el.documentElement;\n return el;\n}\n\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\nfunction useScroll(element, options = {}) {\n const {\n throttle = 0,\n idle = 200,\n onStop = noop,\n onScroll = noop,\n offset = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n },\n eventListenerOptions = {\n capture: false,\n passive: true\n },\n behavior = \"auto\",\n window = defaultWindow,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const internalX = ref(0);\n const internalY = ref(0);\n const x = computed({\n get() {\n return internalX.value;\n },\n set(x2) {\n scrollTo(x2, void 0);\n }\n });\n const y = computed({\n get() {\n return internalY.value;\n },\n set(y2) {\n scrollTo(void 0, y2);\n }\n });\n function scrollTo(_x, _y) {\n var _a, _b, _c, _d;\n if (!window)\n return;\n const _element = toValue(element);\n if (!_element)\n return;\n (_c = _element instanceof Document ? window.document.body : _element) == null ? void 0 : _c.scrollTo({\n top: (_a = toValue(_y)) != null ? _a : y.value,\n left: (_b = toValue(_x)) != null ? _b : x.value,\n behavior: toValue(behavior)\n });\n const scrollContainer = ((_d = _element == null ? void 0 : _element.document) == null ? void 0 : _d.documentElement) || (_element == null ? void 0 : _element.documentElement) || _element;\n if (x != null)\n internalX.value = scrollContainer.scrollLeft;\n if (y != null)\n internalY.value = scrollContainer.scrollTop;\n }\n const isScrolling = ref(false);\n const arrivedState = reactive({\n left: true,\n right: false,\n top: true,\n bottom: false\n });\n const directions = reactive({\n left: false,\n right: false,\n top: false,\n bottom: false\n });\n const onScrollEnd = (e) => {\n if (!isScrolling.value)\n return;\n isScrolling.value = false;\n directions.left = false;\n directions.right = false;\n directions.top = false;\n directions.bottom = false;\n onStop(e);\n };\n const onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n const setArrivedState = (target) => {\n var _a;\n if (!window)\n return;\n const el = ((_a = target == null ? void 0 : target.document) == null ? void 0 : _a.documentElement) || (target == null ? void 0 : target.documentElement) || unrefElement(target);\n const { display, flexDirection } = getComputedStyle(el);\n const scrollLeft = el.scrollLeft;\n directions.left = scrollLeft < internalX.value;\n directions.right = scrollLeft > internalX.value;\n const left = Math.abs(scrollLeft) <= (offset.left || 0);\n const right = Math.abs(scrollLeft) + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n if (display === \"flex\" && flexDirection === \"row-reverse\") {\n arrivedState.left = right;\n arrivedState.right = left;\n } else {\n arrivedState.left = left;\n arrivedState.right = right;\n }\n internalX.value = scrollLeft;\n let scrollTop = el.scrollTop;\n if (target === window.document && !scrollTop)\n scrollTop = window.document.body.scrollTop;\n directions.top = scrollTop < internalY.value;\n directions.bottom = scrollTop > internalY.value;\n const top = Math.abs(scrollTop) <= (offset.top || 0);\n const bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n if (display === \"flex\" && flexDirection === \"column-reverse\") {\n arrivedState.top = bottom;\n arrivedState.bottom = top;\n } else {\n arrivedState.top = top;\n arrivedState.bottom = bottom;\n }\n internalY.value = scrollTop;\n };\n const onScrollHandler = (e) => {\n var _a;\n if (!window)\n return;\n const eventTarget = (_a = e.target.documentElement) != null ? _a : e.target;\n setArrivedState(eventTarget);\n isScrolling.value = true;\n onScrollEndDebounced(e);\n onScroll(e);\n };\n useEventListener(\n element,\n \"scroll\",\n throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler,\n eventListenerOptions\n );\n tryOnMounted(() => {\n try {\n const _element = toValue(element);\n if (!_element)\n return;\n setArrivedState(_element);\n } catch (e) {\n onError(e);\n }\n });\n useEventListener(\n element,\n \"scrollend\",\n onScrollEnd,\n eventListenerOptions\n );\n return {\n x,\n y,\n isScrolling,\n arrivedState,\n directions,\n measure() {\n const _element = toValue(element);\n if (window && _element)\n setArrivedState(_element);\n }\n };\n}\n\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n var _a;\n const {\n direction = \"bottom\",\n interval = 100,\n canLoadMore = () => true\n } = options;\n const state = reactive(useScroll(\n element,\n {\n ...options,\n offset: {\n [direction]: (_a = options.distance) != null ? _a : 0,\n ...options.offset\n }\n }\n ));\n const promise = ref();\n const isLoading = computed(() => !!promise.value);\n const observedElement = computed(() => {\n return resolveElement(toValue(element));\n });\n const isElementVisible = useElementVisibility(observedElement);\n function checkAndLoad() {\n state.measure();\n if (!observedElement.value || !isElementVisible.value || !canLoadMore(observedElement.value))\n return;\n const { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value;\n const isNarrower = direction === \"bottom\" || direction === \"top\" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth;\n if (state.arrivedState[direction] || isNarrower) {\n if (!promise.value) {\n promise.value = Promise.all([\n onLoadMore(state),\n new Promise((resolve) => setTimeout(resolve, interval))\n ]).finally(() => {\n promise.value = null;\n nextTick(() => checkAndLoad());\n });\n }\n }\n }\n const stop = watch(\n () => [state.arrivedState[direction], isElementVisible.value],\n checkAndLoad,\n { immediate: true }\n );\n tryOnUnmounted(stop);\n return {\n isLoading,\n reset() {\n nextTick(() => checkAndLoad());\n }\n };\n}\n\nconst defaultEvents = [\"mousedown\", \"mouseup\", \"keydown\", \"keyup\"];\nfunction useKeyModifier(modifier, options = {}) {\n const {\n events = defaultEvents,\n document = defaultDocument,\n initial = null\n } = options;\n const state = ref(initial);\n if (document) {\n events.forEach((listenerEvent) => {\n useEventListener(document, listenerEvent, (evt) => {\n if (typeof evt.getModifierState === \"function\")\n state.value = evt.getModifierState(modifier);\n });\n });\n }\n return state;\n}\n\nfunction useLocalStorage(key, initialValue, options = {}) {\n const { window = defaultWindow } = options;\n return useStorage(key, initialValue, window == null ? void 0 : window.localStorage, options);\n}\n\nconst DefaultMagicKeysAliasMap = {\n ctrl: \"control\",\n command: \"meta\",\n cmd: \"meta\",\n option: \"alt\",\n up: \"arrowup\",\n down: \"arrowdown\",\n left: \"arrowleft\",\n right: \"arrowright\"\n};\n\nfunction useMagicKeys(options = {}) {\n const {\n reactive: useReactive = false,\n target = defaultWindow,\n aliasMap = DefaultMagicKeysAliasMap,\n passive = true,\n onEventFired = noop\n } = options;\n const current = reactive(/* @__PURE__ */ new Set());\n const obj = {\n toJSON() {\n return {};\n },\n current\n };\n const refs = useReactive ? reactive(obj) : obj;\n const metaDeps = /* @__PURE__ */ new Set();\n const usedKeys = /* @__PURE__ */ new Set();\n function setRefs(key, value) {\n if (key in refs) {\n if (useReactive)\n refs[key] = value;\n else\n refs[key].value = value;\n }\n }\n function reset() {\n current.clear();\n for (const key of usedKeys)\n setRefs(key, false);\n }\n function updateRefs(e, value) {\n var _a, _b;\n const key = (_a = e.key) == null ? void 0 : _a.toLowerCase();\n const code = (_b = e.code) == null ? void 0 : _b.toLowerCase();\n const values = [code, key].filter(Boolean);\n if (key) {\n if (value)\n current.add(key);\n else\n current.delete(key);\n }\n for (const key2 of values) {\n usedKeys.add(key2);\n setRefs(key2, value);\n }\n if (key === \"meta\" && !value) {\n metaDeps.forEach((key2) => {\n current.delete(key2);\n setRefs(key2, false);\n });\n metaDeps.clear();\n } else if (typeof e.getModifierState === \"function\" && e.getModifierState(\"Meta\") && value) {\n [...current, ...values].forEach((key2) => metaDeps.add(key2));\n }\n }\n useEventListener(target, \"keydown\", (e) => {\n updateRefs(e, true);\n return onEventFired(e);\n }, { passive });\n useEventListener(target, \"keyup\", (e) => {\n updateRefs(e, false);\n return onEventFired(e);\n }, { passive });\n useEventListener(\"blur\", reset, { passive: true });\n useEventListener(\"focus\", reset, { passive: true });\n const proxy = new Proxy(\n refs,\n {\n get(target2, prop, rec) {\n if (typeof prop !== \"string\")\n return Reflect.get(target2, prop, rec);\n prop = prop.toLowerCase();\n if (prop in aliasMap)\n prop = aliasMap[prop];\n if (!(prop in refs)) {\n if (/[+_-]/.test(prop)) {\n const keys = prop.split(/[+_-]/g).map((i) => i.trim());\n refs[prop] = computed(() => keys.every((key) => toValue(proxy[key])));\n } else {\n refs[prop] = ref(false);\n }\n }\n const r = Reflect.get(target2, prop, rec);\n return useReactive ? toValue(r) : r;\n }\n }\n );\n return proxy;\n}\n\nfunction usingElRef(source, cb) {\n if (toValue(source))\n cb(toValue(source));\n}\nfunction timeRangeToArray(timeRanges) {\n let ranges = [];\n for (let i = 0; i < timeRanges.length; ++i)\n ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n return ranges;\n}\nfunction tracksToArray(tracks) {\n return Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({ id, label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }));\n}\nconst defaultOptions = {\n src: \"\",\n tracks: []\n};\nfunction useMediaControls(target, options = {}) {\n target = toRef(target);\n options = {\n ...defaultOptions,\n ...options\n };\n const {\n document = defaultDocument\n } = options;\n const currentTime = ref(0);\n const duration = ref(0);\n const seeking = ref(false);\n const volume = ref(1);\n const waiting = ref(false);\n const ended = ref(false);\n const playing = ref(false);\n const rate = ref(1);\n const stalled = ref(false);\n const buffered = ref([]);\n const tracks = ref([]);\n const selectedTrack = ref(-1);\n const isPictureInPicture = ref(false);\n const muted = ref(false);\n const supportsPictureInPicture = document && \"pictureInPictureEnabled\" in document;\n const sourceErrorEvent = createEventHook();\n const playbackErrorEvent = createEventHook();\n const disableTrack = (track) => {\n usingElRef(target, (el) => {\n if (track) {\n const id = typeof track === \"number\" ? track : track.id;\n el.textTracks[id].mode = \"disabled\";\n } else {\n for (let i = 0; i < el.textTracks.length; ++i)\n el.textTracks[i].mode = \"disabled\";\n }\n selectedTrack.value = -1;\n });\n };\n const enableTrack = (track, disableTracks = true) => {\n usingElRef(target, (el) => {\n const id = typeof track === \"number\" ? track : track.id;\n if (disableTracks)\n disableTrack();\n el.textTracks[id].mode = \"showing\";\n selectedTrack.value = id;\n });\n };\n const togglePictureInPicture = () => {\n return new Promise((resolve, reject) => {\n usingElRef(target, async (el) => {\n if (supportsPictureInPicture) {\n if (!isPictureInPicture.value) {\n el.requestPictureInPicture().then(resolve).catch(reject);\n } else {\n document.exitPictureInPicture().then(resolve).catch(reject);\n }\n }\n });\n });\n };\n watchEffect(() => {\n if (!document)\n return;\n const el = toValue(target);\n if (!el)\n return;\n const src = toValue(options.src);\n let sources = [];\n if (!src)\n return;\n if (typeof src === \"string\")\n sources = [{ src }];\n else if (Array.isArray(src))\n sources = src;\n else if (isObject(src))\n sources = [src];\n el.querySelectorAll(\"source\").forEach((e) => {\n e.removeEventListener(\"error\", sourceErrorEvent.trigger);\n e.remove();\n });\n sources.forEach(({ src: src2, type }) => {\n const source = document.createElement(\"source\");\n source.setAttribute(\"src\", src2);\n source.setAttribute(\"type\", type || \"\");\n source.addEventListener(\"error\", sourceErrorEvent.trigger);\n el.appendChild(source);\n });\n el.load();\n });\n tryOnScopeDispose(() => {\n const el = toValue(target);\n if (!el)\n return;\n el.querySelectorAll(\"source\").forEach((e) => e.removeEventListener(\"error\", sourceErrorEvent.trigger));\n });\n watch([target, volume], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.volume = volume.value;\n });\n watch([target, muted], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.muted = muted.value;\n });\n watch([target, rate], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.playbackRate = rate.value;\n });\n watchEffect(() => {\n if (!document)\n return;\n const textTracks = toValue(options.tracks);\n const el = toValue(target);\n if (!textTracks || !textTracks.length || !el)\n return;\n el.querySelectorAll(\"track\").forEach((e) => e.remove());\n textTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {\n const track = document.createElement(\"track\");\n track.default = isDefault || false;\n track.kind = kind;\n track.label = label;\n track.src = src;\n track.srclang = srcLang;\n if (track.default)\n selectedTrack.value = i;\n el.appendChild(track);\n });\n });\n const { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => {\n const el = toValue(target);\n if (!el)\n return;\n el.currentTime = time;\n });\n const { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => {\n const el = toValue(target);\n if (!el)\n return;\n if (isPlaying) {\n el.play().catch((e) => {\n playbackErrorEvent.trigger(e);\n throw e;\n });\n } else {\n el.pause();\n }\n });\n useEventListener(target, \"timeupdate\", () => ignoreCurrentTimeUpdates(() => currentTime.value = toValue(target).currentTime));\n useEventListener(target, \"durationchange\", () => duration.value = toValue(target).duration);\n useEventListener(target, \"progress\", () => buffered.value = timeRangeToArray(toValue(target).buffered));\n useEventListener(target, \"seeking\", () => seeking.value = true);\n useEventListener(target, \"seeked\", () => seeking.value = false);\n useEventListener(target, [\"waiting\", \"loadstart\"], () => {\n waiting.value = true;\n ignorePlayingUpdates(() => playing.value = false);\n });\n useEventListener(target, \"loadeddata\", () => waiting.value = false);\n useEventListener(target, \"playing\", () => {\n waiting.value = false;\n ended.value = false;\n ignorePlayingUpdates(() => playing.value = true);\n });\n useEventListener(target, \"ratechange\", () => rate.value = toValue(target).playbackRate);\n useEventListener(target, \"stalled\", () => stalled.value = true);\n useEventListener(target, \"ended\", () => ended.value = true);\n useEventListener(target, \"pause\", () => ignorePlayingUpdates(() => playing.value = false));\n useEventListener(target, \"play\", () => ignorePlayingUpdates(() => playing.value = true));\n useEventListener(target, \"enterpictureinpicture\", () => isPictureInPicture.value = true);\n useEventListener(target, \"leavepictureinpicture\", () => isPictureInPicture.value = false);\n useEventListener(target, \"volumechange\", () => {\n const el = toValue(target);\n if (!el)\n return;\n volume.value = el.volume;\n muted.value = el.muted;\n });\n const listeners = [];\n const stop = watch([target], () => {\n const el = toValue(target);\n if (!el)\n return;\n stop();\n listeners[0] = useEventListener(el.textTracks, \"addtrack\", () => tracks.value = tracksToArray(el.textTracks));\n listeners[1] = useEventListener(el.textTracks, \"removetrack\", () => tracks.value = tracksToArray(el.textTracks));\n listeners[2] = useEventListener(el.textTracks, \"change\", () => tracks.value = tracksToArray(el.textTracks));\n });\n tryOnScopeDispose(() => listeners.forEach((listener) => listener()));\n return {\n currentTime,\n duration,\n waiting,\n seeking,\n ended,\n stalled,\n buffered,\n playing,\n rate,\n // Volume\n volume,\n muted,\n // Tracks\n tracks,\n selectedTrack,\n enableTrack,\n disableTrack,\n // Picture in Picture\n supportsPictureInPicture,\n togglePictureInPicture,\n isPictureInPicture,\n // Events\n onSourceError: sourceErrorEvent.on,\n onPlaybackError: playbackErrorEvent.on\n };\n}\n\nfunction useMemoize(resolver, options) {\n const initCache = () => {\n if (options == null ? void 0 : options.cache)\n return shallowReactive(options.cache);\n return shallowReactive(/* @__PURE__ */ new Map());\n };\n const cache = initCache();\n const generateKey = (...args) => (options == null ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args);\n const _loadData = (key, ...args) => {\n cache.set(key, resolver(...args));\n return cache.get(key);\n };\n const loadData = (...args) => _loadData(generateKey(...args), ...args);\n const deleteData = (...args) => {\n cache.delete(generateKey(...args));\n };\n const clearData = () => {\n cache.clear();\n };\n const memoized = (...args) => {\n const key = generateKey(...args);\n if (cache.has(key))\n return cache.get(key);\n return _loadData(key, ...args);\n };\n memoized.load = loadData;\n memoized.delete = deleteData;\n memoized.clear = clearData;\n memoized.generateKey = generateKey;\n memoized.cache = cache;\n return memoized;\n}\n\nfunction useMemory(options = {}) {\n const memory = ref();\n const isSupported = useSupported(() => typeof performance !== \"undefined\" && \"memory\" in performance);\n if (isSupported.value) {\n const { interval = 1e3 } = options;\n useIntervalFn(() => {\n memory.value = performance.memory;\n }, interval, { immediate: options.immediate, immediateCallback: options.immediateCallback });\n }\n return { isSupported, memory };\n}\n\nconst UseMouseBuiltinExtractors = {\n page: (event) => [event.pageX, event.pageY],\n client: (event) => [event.clientX, event.clientY],\n screen: (event) => [event.screenX, event.screenY],\n movement: (event) => event instanceof Touch ? null : [event.movementX, event.movementY]\n};\nfunction useMouse(options = {}) {\n const {\n type = \"page\",\n touch = true,\n resetOnTouchEnds = false,\n initialValue = { x: 0, y: 0 },\n window = defaultWindow,\n target = window,\n scroll = true,\n eventFilter\n } = options;\n let _prevMouseEvent = null;\n let _prevScrollX = 0;\n let _prevScrollY = 0;\n const x = ref(initialValue.x);\n const y = ref(initialValue.y);\n const sourceType = ref(null);\n const extractor = typeof type === \"function\" ? type : UseMouseBuiltinExtractors[type];\n const mouseHandler = (event) => {\n const result = extractor(event);\n _prevMouseEvent = event;\n if (result) {\n [x.value, y.value] = result;\n sourceType.value = \"mouse\";\n }\n if (window) {\n _prevScrollX = window.scrollX;\n _prevScrollY = window.scrollY;\n }\n };\n const touchHandler = (event) => {\n if (event.touches.length > 0) {\n const result = extractor(event.touches[0]);\n if (result) {\n [x.value, y.value] = result;\n sourceType.value = \"touch\";\n }\n }\n };\n const scrollHandler = () => {\n if (!_prevMouseEvent || !window)\n return;\n const pos = extractor(_prevMouseEvent);\n if (_prevMouseEvent instanceof MouseEvent && pos) {\n x.value = pos[0] + window.scrollX - _prevScrollX;\n y.value = pos[1] + window.scrollY - _prevScrollY;\n }\n };\n const reset = () => {\n x.value = initialValue.x;\n y.value = initialValue.y;\n };\n const mouseHandlerWrapper = eventFilter ? (event) => eventFilter(() => mouseHandler(event), {}) : (event) => mouseHandler(event);\n const touchHandlerWrapper = eventFilter ? (event) => eventFilter(() => touchHandler(event), {}) : (event) => touchHandler(event);\n const scrollHandlerWrapper = eventFilter ? () => eventFilter(() => scrollHandler(), {}) : () => scrollHandler();\n if (target) {\n const listenerOptions = { passive: true };\n useEventListener(target, [\"mousemove\", \"dragover\"], mouseHandlerWrapper, listenerOptions);\n if (touch && type !== \"movement\") {\n useEventListener(target, [\"touchstart\", \"touchmove\"], touchHandlerWrapper, listenerOptions);\n if (resetOnTouchEnds)\n useEventListener(target, \"touchend\", reset, listenerOptions);\n }\n if (scroll && type === \"page\")\n useEventListener(window, \"scroll\", scrollHandlerWrapper, { passive: true });\n }\n return {\n x,\n y,\n sourceType\n };\n}\n\nfunction useMouseInElement(target, options = {}) {\n const {\n handleOutside = true,\n window = defaultWindow\n } = options;\n const type = options.type || \"page\";\n const { x, y, sourceType } = useMouse(options);\n const targetRef = ref(target != null ? target : window == null ? void 0 : window.document.body);\n const elementX = ref(0);\n const elementY = ref(0);\n const elementPositionX = ref(0);\n const elementPositionY = ref(0);\n const elementHeight = ref(0);\n const elementWidth = ref(0);\n const isOutside = ref(true);\n let stop = () => {\n };\n if (window) {\n stop = watch(\n [targetRef, x, y],\n () => {\n const el = unrefElement(targetRef);\n if (!el || !(el instanceof Element))\n return;\n const {\n left,\n top,\n width,\n height\n } = el.getBoundingClientRect();\n elementPositionX.value = left + (type === \"page\" ? window.pageXOffset : 0);\n elementPositionY.value = top + (type === \"page\" ? window.pageYOffset : 0);\n elementHeight.value = height;\n elementWidth.value = width;\n const elX = x.value - elementPositionX.value;\n const elY = y.value - elementPositionY.value;\n isOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height;\n if (handleOutside || !isOutside.value) {\n elementX.value = elX;\n elementY.value = elY;\n }\n },\n { immediate: true }\n );\n useEventListener(document, \"mouseleave\", () => {\n isOutside.value = true;\n });\n }\n return {\n x,\n y,\n sourceType,\n elementX,\n elementY,\n elementPositionX,\n elementPositionY,\n elementHeight,\n elementWidth,\n isOutside,\n stop\n };\n}\n\nfunction useMousePressed(options = {}) {\n const {\n touch = true,\n drag = true,\n capture = false,\n initialValue = false,\n window = defaultWindow\n } = options;\n const pressed = ref(initialValue);\n const sourceType = ref(null);\n if (!window) {\n return {\n pressed,\n sourceType\n };\n }\n const onPressed = (srcType) => () => {\n pressed.value = true;\n sourceType.value = srcType;\n };\n const onReleased = () => {\n pressed.value = false;\n sourceType.value = null;\n };\n const target = computed(() => unrefElement(options.target) || window);\n useEventListener(target, \"mousedown\", onPressed(\"mouse\"), { passive: true, capture });\n useEventListener(window, \"mouseleave\", onReleased, { passive: true, capture });\n useEventListener(window, \"mouseup\", onReleased, { passive: true, capture });\n if (drag) {\n useEventListener(target, \"dragstart\", onPressed(\"mouse\"), { passive: true, capture });\n useEventListener(window, \"drop\", onReleased, { passive: true, capture });\n useEventListener(window, \"dragend\", onReleased, { passive: true, capture });\n }\n if (touch) {\n useEventListener(target, \"touchstart\", onPressed(\"touch\"), { passive: true, capture });\n useEventListener(window, \"touchend\", onReleased, { passive: true, capture });\n useEventListener(window, \"touchcancel\", onReleased, { passive: true, capture });\n }\n return {\n pressed,\n sourceType\n };\n}\n\nfunction useNavigatorLanguage(options = {}) {\n const { window = defaultWindow } = options;\n const navigator = window == null ? void 0 : window.navigator;\n const isSupported = useSupported(() => navigator && \"language\" in navigator);\n const language = ref(navigator == null ? void 0 : navigator.language);\n useEventListener(window, \"languagechange\", () => {\n if (navigator)\n language.value = navigator.language;\n });\n return {\n isSupported,\n language\n };\n}\n\nfunction useNetwork(options = {}) {\n const { window = defaultWindow } = options;\n const navigator = window == null ? void 0 : window.navigator;\n const isSupported = useSupported(() => navigator && \"connection\" in navigator);\n const isOnline = ref(true);\n const saveData = ref(false);\n const offlineAt = ref(void 0);\n const onlineAt = ref(void 0);\n const downlink = ref(void 0);\n const downlinkMax = ref(void 0);\n const rtt = ref(void 0);\n const effectiveType = ref(void 0);\n const type = ref(\"unknown\");\n const connection = isSupported.value && navigator.connection;\n function updateNetworkInformation() {\n if (!navigator)\n return;\n isOnline.value = navigator.onLine;\n offlineAt.value = isOnline.value ? void 0 : Date.now();\n onlineAt.value = isOnline.value ? Date.now() : void 0;\n if (connection) {\n downlink.value = connection.downlink;\n downlinkMax.value = connection.downlinkMax;\n effectiveType.value = connection.effectiveType;\n rtt.value = connection.rtt;\n saveData.value = connection.saveData;\n type.value = connection.type;\n }\n }\n if (window) {\n useEventListener(window, \"offline\", () => {\n isOnline.value = false;\n offlineAt.value = Date.now();\n });\n useEventListener(window, \"online\", () => {\n isOnline.value = true;\n onlineAt.value = Date.now();\n });\n }\n if (connection)\n useEventListener(connection, \"change\", updateNetworkInformation, false);\n updateNetworkInformation();\n return {\n isSupported: readonly(isSupported),\n isOnline: readonly(isOnline),\n saveData: readonly(saveData),\n offlineAt: readonly(offlineAt),\n onlineAt: readonly(onlineAt),\n downlink: readonly(downlink),\n downlinkMax: readonly(downlinkMax),\n effectiveType: readonly(effectiveType),\n rtt: readonly(rtt),\n type: readonly(type)\n };\n}\n\nfunction useNow(options = {}) {\n const {\n controls: exposeControls = false,\n interval = \"requestAnimationFrame\"\n } = options;\n const now = ref(/* @__PURE__ */ new Date());\n const update = () => now.value = /* @__PURE__ */ new Date();\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(update, { immediate: true }) : useIntervalFn(update, interval, { immediate: true });\n if (exposeControls) {\n return {\n now,\n ...controls\n };\n } else {\n return now;\n }\n}\n\nfunction useObjectUrl(object) {\n const url = ref();\n const release = () => {\n if (url.value)\n URL.revokeObjectURL(url.value);\n url.value = void 0;\n };\n watch(\n () => toValue(object),\n (newObject) => {\n release();\n if (newObject)\n url.value = URL.createObjectURL(newObject);\n },\n { immediate: true }\n );\n tryOnScopeDispose(release);\n return readonly(url);\n}\n\nfunction useClamp(value, min, max) {\n if (typeof value === \"function\" || isReadonly(value))\n return computed(() => clamp(toValue(value), toValue(min), toValue(max)));\n const _value = ref(value);\n return computed({\n get() {\n return _value.value = clamp(_value.value, toValue(min), toValue(max));\n },\n set(value2) {\n _value.value = clamp(value2, toValue(min), toValue(max));\n }\n });\n}\n\nfunction useOffsetPagination(options) {\n const {\n total = Number.POSITIVE_INFINITY,\n pageSize = 10,\n page = 1,\n onPageChange = noop,\n onPageSizeChange = noop,\n onPageCountChange = noop\n } = options;\n const currentPageSize = useClamp(pageSize, 1, Number.POSITIVE_INFINITY);\n const pageCount = computed(() => Math.max(\n 1,\n Math.ceil(toValue(total) / toValue(currentPageSize))\n ));\n const currentPage = useClamp(page, 1, pageCount);\n const isFirstPage = computed(() => currentPage.value === 1);\n const isLastPage = computed(() => currentPage.value === pageCount.value);\n if (isRef(page)) {\n syncRef(page, currentPage, {\n direction: isReadonly(page) ? \"ltr\" : \"both\"\n });\n }\n if (isRef(pageSize)) {\n syncRef(pageSize, currentPageSize, {\n direction: isReadonly(pageSize) ? \"ltr\" : \"both\"\n });\n }\n function prev() {\n currentPage.value--;\n }\n function next() {\n currentPage.value++;\n }\n const returnValue = {\n currentPage,\n currentPageSize,\n pageCount,\n isFirstPage,\n isLastPage,\n prev,\n next\n };\n watch(currentPage, () => {\n onPageChange(reactive(returnValue));\n });\n watch(currentPageSize, () => {\n onPageSizeChange(reactive(returnValue));\n });\n watch(pageCount, () => {\n onPageCountChange(reactive(returnValue));\n });\n return returnValue;\n}\n\nfunction useOnline(options = {}) {\n const { isOnline } = useNetwork(options);\n return isOnline;\n}\n\nfunction usePageLeave(options = {}) {\n const { window = defaultWindow } = options;\n const isLeft = ref(false);\n const handler = (event) => {\n if (!window)\n return;\n event = event || window.event;\n const from = event.relatedTarget || event.toElement;\n isLeft.value = !from;\n };\n if (window) {\n useEventListener(window, \"mouseout\", handler, { passive: true });\n useEventListener(window.document, \"mouseleave\", handler, { passive: true });\n useEventListener(window.document, \"mouseenter\", handler, { passive: true });\n }\n return isLeft;\n}\n\nfunction useScreenOrientation(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const isSupported = useSupported(() => window && \"screen\" in window && \"orientation\" in window.screen);\n const screenOrientation = isSupported.value ? window.screen.orientation : {};\n const orientation = ref(screenOrientation.type);\n const angle = ref(screenOrientation.angle || 0);\n if (isSupported.value) {\n useEventListener(window, \"orientationchange\", () => {\n orientation.value = screenOrientation.type;\n angle.value = screenOrientation.angle;\n });\n }\n const lockOrientation = (type) => {\n if (isSupported.value && typeof screenOrientation.lock === \"function\")\n return screenOrientation.lock(type);\n return Promise.reject(new Error(\"Not supported\"));\n };\n const unlockOrientation = () => {\n if (isSupported.value && typeof screenOrientation.unlock === \"function\")\n screenOrientation.unlock();\n };\n return {\n isSupported,\n orientation,\n angle,\n lockOrientation,\n unlockOrientation\n };\n}\n\nfunction useParallax(target, options = {}) {\n const {\n deviceOrientationTiltAdjust = (i) => i,\n deviceOrientationRollAdjust = (i) => i,\n mouseTiltAdjust = (i) => i,\n mouseRollAdjust = (i) => i,\n window = defaultWindow\n } = options;\n const orientation = reactive(useDeviceOrientation({ window }));\n const screenOrientation = reactive(useScreenOrientation({ window }));\n const {\n elementX: x,\n elementY: y,\n elementWidth: width,\n elementHeight: height\n } = useMouseInElement(target, { handleOutside: false, window });\n const source = computed(() => {\n if (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0)) {\n return \"deviceOrientation\";\n }\n return \"mouse\";\n });\n const roll = computed(() => {\n if (source.value === \"deviceOrientation\") {\n let value;\n switch (screenOrientation.orientation) {\n case \"landscape-primary\":\n value = orientation.gamma / 90;\n break;\n case \"landscape-secondary\":\n value = -orientation.gamma / 90;\n break;\n case \"portrait-primary\":\n value = -orientation.beta / 90;\n break;\n case \"portrait-secondary\":\n value = orientation.beta / 90;\n break;\n default:\n value = -orientation.beta / 90;\n }\n return deviceOrientationRollAdjust(value);\n } else {\n const value = -(y.value - height.value / 2) / height.value;\n return mouseRollAdjust(value);\n }\n });\n const tilt = computed(() => {\n if (source.value === \"deviceOrientation\") {\n let value;\n switch (screenOrientation.orientation) {\n case \"landscape-primary\":\n value = orientation.beta / 90;\n break;\n case \"landscape-secondary\":\n value = -orientation.beta / 90;\n break;\n case \"portrait-primary\":\n value = orientation.gamma / 90;\n break;\n case \"portrait-secondary\":\n value = -orientation.gamma / 90;\n break;\n default:\n value = orientation.gamma / 90;\n }\n return deviceOrientationTiltAdjust(value);\n } else {\n const value = (x.value - width.value / 2) / width.value;\n return mouseTiltAdjust(value);\n }\n });\n return { roll, tilt, source };\n}\n\nfunction useParentElement(element = useCurrentElement()) {\n const parentElement = shallowRef();\n const update = () => {\n const el = unrefElement(element);\n if (el)\n parentElement.value = el.parentElement;\n };\n tryOnMounted(update);\n watch(() => toValue(element), update);\n return parentElement;\n}\n\nfunction usePerformanceObserver(options, callback) {\n const {\n window = defaultWindow,\n immediate = true,\n ...performanceOptions\n } = options;\n const isSupported = useSupported(() => window && \"PerformanceObserver\" in window);\n let observer;\n const stop = () => {\n observer == null ? void 0 : observer.disconnect();\n };\n const start = () => {\n if (isSupported.value) {\n stop();\n observer = new PerformanceObserver(callback);\n observer.observe(performanceOptions);\n }\n };\n tryOnScopeDispose(stop);\n if (immediate)\n start();\n return {\n isSupported,\n start,\n stop\n };\n}\n\nconst defaultState = {\n x: 0,\n y: 0,\n pointerId: 0,\n pressure: 0,\n tiltX: 0,\n tiltY: 0,\n width: 0,\n height: 0,\n twist: 0,\n pointerType: null\n};\nconst keys = /* @__PURE__ */ Object.keys(defaultState);\nfunction usePointer(options = {}) {\n const {\n target = defaultWindow\n } = options;\n const isInside = ref(false);\n const state = ref(options.initialValue || {});\n Object.assign(state.value, defaultState, state.value);\n const handler = (event) => {\n isInside.value = true;\n if (options.pointerTypes && !options.pointerTypes.includes(event.pointerType))\n return;\n state.value = objectPick(event, keys, false);\n };\n if (target) {\n const listenerOptions = { passive: true };\n useEventListener(target, [\"pointerdown\", \"pointermove\", \"pointerup\"], handler, listenerOptions);\n useEventListener(target, \"pointerleave\", () => isInside.value = false, listenerOptions);\n }\n return {\n ...toRefs(state),\n isInside\n };\n}\n\nfunction usePointerLock(target, options = {}) {\n const { document = defaultDocument } = options;\n const isSupported = useSupported(() => document && \"pointerLockElement\" in document);\n const element = ref();\n const triggerElement = ref();\n let targetElement;\n if (isSupported.value) {\n useEventListener(document, \"pointerlockchange\", () => {\n var _a;\n const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n if (targetElement && currentElement === targetElement) {\n element.value = document.pointerLockElement;\n if (!element.value)\n targetElement = triggerElement.value = null;\n }\n });\n useEventListener(document, \"pointerlockerror\", () => {\n var _a;\n const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n if (targetElement && currentElement === targetElement) {\n const action = document.pointerLockElement ? \"release\" : \"acquire\";\n throw new Error(`Failed to ${action} pointer lock.`);\n }\n });\n }\n async function lock(e) {\n var _a;\n if (!isSupported.value)\n throw new Error(\"Pointer Lock API is not supported by your browser.\");\n triggerElement.value = e instanceof Event ? e.currentTarget : null;\n targetElement = e instanceof Event ? (_a = unrefElement(target)) != null ? _a : triggerElement.value : unrefElement(e);\n if (!targetElement)\n throw new Error(\"Target element undefined.\");\n targetElement.requestPointerLock();\n return await until(element).toBe(targetElement);\n }\n async function unlock() {\n if (!element.value)\n return false;\n document.exitPointerLock();\n await until(element).toBeNull();\n return true;\n }\n return {\n isSupported,\n element,\n triggerElement,\n lock,\n unlock\n };\n}\n\nfunction usePointerSwipe(target, options = {}) {\n const targetRef = toRef(target);\n const {\n threshold = 50,\n onSwipe,\n onSwipeEnd,\n onSwipeStart,\n disableTextSelect = false\n } = options;\n const posStart = reactive({ x: 0, y: 0 });\n const updatePosStart = (x, y) => {\n posStart.x = x;\n posStart.y = y;\n };\n const posEnd = reactive({ x: 0, y: 0 });\n const updatePosEnd = (x, y) => {\n posEnd.x = x;\n posEnd.y = y;\n };\n const distanceX = computed(() => posStart.x - posEnd.x);\n const distanceY = computed(() => posStart.y - posEnd.y);\n const { max, abs } = Math;\n const isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);\n const isSwiping = ref(false);\n const isPointerDown = ref(false);\n const direction = computed(() => {\n if (!isThresholdExceeded.value)\n return \"none\";\n if (abs(distanceX.value) > abs(distanceY.value)) {\n return distanceX.value > 0 ? \"left\" : \"right\";\n } else {\n return distanceY.value > 0 ? \"up\" : \"down\";\n }\n });\n const eventIsAllowed = (e) => {\n var _a, _b, _c;\n const isReleasingButton = e.buttons === 0;\n const isPrimaryButton = e.buttons === 1;\n return (_c = (_b = (_a = options.pointerTypes) == null ? void 0 : _a.includes(e.pointerType)) != null ? _b : isReleasingButton || isPrimaryButton) != null ? _c : true;\n };\n const stops = [\n useEventListener(target, \"pointerdown\", (e) => {\n if (!eventIsAllowed(e))\n return;\n isPointerDown.value = true;\n const eventTarget = e.target;\n eventTarget == null ? void 0 : eventTarget.setPointerCapture(e.pointerId);\n const { clientX: x, clientY: y } = e;\n updatePosStart(x, y);\n updatePosEnd(x, y);\n onSwipeStart == null ? void 0 : onSwipeStart(e);\n }),\n useEventListener(target, \"pointermove\", (e) => {\n if (!eventIsAllowed(e))\n return;\n if (!isPointerDown.value)\n return;\n const { clientX: x, clientY: y } = e;\n updatePosEnd(x, y);\n if (!isSwiping.value && isThresholdExceeded.value)\n isSwiping.value = true;\n if (isSwiping.value)\n onSwipe == null ? void 0 : onSwipe(e);\n }),\n useEventListener(target, \"pointerup\", (e) => {\n if (!eventIsAllowed(e))\n return;\n if (isSwiping.value)\n onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n isPointerDown.value = false;\n isSwiping.value = false;\n })\n ];\n tryOnMounted(() => {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty(\"touch-action\", \"none\");\n if (disableTextSelect) {\n (_d = (_c = targetRef.value) == null ? void 0 : _c.style) == null ? void 0 : _d.setProperty(\"-webkit-user-select\", \"none\");\n (_f = (_e = targetRef.value) == null ? void 0 : _e.style) == null ? void 0 : _f.setProperty(\"-ms-user-select\", \"none\");\n (_h = (_g = targetRef.value) == null ? void 0 : _g.style) == null ? void 0 : _h.setProperty(\"user-select\", \"none\");\n }\n });\n const stop = () => stops.forEach((s) => s());\n return {\n isSwiping: readonly(isSwiping),\n direction: readonly(direction),\n posStart: readonly(posStart),\n posEnd: readonly(posEnd),\n distanceX,\n distanceY,\n stop\n };\n}\n\nfunction usePreferredColorScheme(options) {\n const isLight = useMediaQuery(\"(prefers-color-scheme: light)\", options);\n const isDark = useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n return computed(() => {\n if (isDark.value)\n return \"dark\";\n if (isLight.value)\n return \"light\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredContrast(options) {\n const isMore = useMediaQuery(\"(prefers-contrast: more)\", options);\n const isLess = useMediaQuery(\"(prefers-contrast: less)\", options);\n const isCustom = useMediaQuery(\"(prefers-contrast: custom)\", options);\n return computed(() => {\n if (isMore.value)\n return \"more\";\n if (isLess.value)\n return \"less\";\n if (isCustom.value)\n return \"custom\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredLanguages(options = {}) {\n const { window = defaultWindow } = options;\n if (!window)\n return ref([\"en\"]);\n const navigator = window.navigator;\n const value = ref(navigator.languages);\n useEventListener(window, \"languagechange\", () => {\n value.value = navigator.languages;\n });\n return value;\n}\n\nfunction usePreferredReducedMotion(options) {\n const isReduced = useMediaQuery(\"(prefers-reduced-motion: reduce)\", options);\n return computed(() => {\n if (isReduced.value)\n return \"reduce\";\n return \"no-preference\";\n });\n}\n\nfunction usePrevious(value, initialValue) {\n const previous = shallowRef(initialValue);\n watch(\n toRef(value),\n (_, oldValue) => {\n previous.value = oldValue;\n },\n { flush: \"sync\" }\n );\n return readonly(previous);\n}\n\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\nfunction useScreenSafeArea() {\n const top = ref(\"\");\n const right = ref(\"\");\n const bottom = ref(\"\");\n const left = ref(\"\");\n if (isClient) {\n const topCssVar = useCssVar(topVarName);\n const rightCssVar = useCssVar(rightVarName);\n const bottomCssVar = useCssVar(bottomVarName);\n const leftCssVar = useCssVar(leftVarName);\n topCssVar.value = \"env(safe-area-inset-top, 0px)\";\n rightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n bottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n leftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n update();\n useEventListener(\"resize\", useDebounceFn(update));\n }\n function update() {\n top.value = getValue(topVarName);\n right.value = getValue(rightVarName);\n bottom.value = getValue(bottomVarName);\n left.value = getValue(leftVarName);\n }\n return {\n top,\n right,\n bottom,\n left,\n update\n };\n}\nfunction getValue(position) {\n return getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\nfunction useScriptTag(src, onLoaded = noop, options = {}) {\n const {\n immediate = true,\n manual = false,\n type = \"text/javascript\",\n async = true,\n crossOrigin,\n referrerPolicy,\n noModule,\n defer,\n document = defaultDocument,\n attrs = {}\n } = options;\n const scriptTag = ref(null);\n let _promise = null;\n const loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => {\n const resolveWithElement = (el2) => {\n scriptTag.value = el2;\n resolve(el2);\n return el2;\n };\n if (!document) {\n resolve(false);\n return;\n }\n let shouldAppend = false;\n let el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n if (!el) {\n el = document.createElement(\"script\");\n el.type = type;\n el.async = async;\n el.src = toValue(src);\n if (defer)\n el.defer = defer;\n if (crossOrigin)\n el.crossOrigin = crossOrigin;\n if (noModule)\n el.noModule = noModule;\n if (referrerPolicy)\n el.referrerPolicy = referrerPolicy;\n Object.entries(attrs).forEach(([name, value]) => el == null ? void 0 : el.setAttribute(name, value));\n shouldAppend = true;\n } else if (el.hasAttribute(\"data-loaded\")) {\n resolveWithElement(el);\n }\n el.addEventListener(\"error\", (event) => reject(event));\n el.addEventListener(\"abort\", (event) => reject(event));\n el.addEventListener(\"load\", () => {\n el.setAttribute(\"data-loaded\", \"true\");\n onLoaded(el);\n resolveWithElement(el);\n });\n if (shouldAppend)\n el = document.head.appendChild(el);\n if (!waitForScriptLoad)\n resolveWithElement(el);\n });\n const load = (waitForScriptLoad = true) => {\n if (!_promise)\n _promise = loadScript(waitForScriptLoad);\n return _promise;\n };\n const unload = () => {\n if (!document)\n return;\n _promise = null;\n if (scriptTag.value)\n scriptTag.value = null;\n const el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n if (el)\n document.head.removeChild(el);\n };\n if (immediate && !manual)\n tryOnMounted(load);\n if (!manual)\n tryOnUnmounted(unload);\n return { scriptTag, load, unload };\n}\n\nfunction checkOverflowScroll(ele) {\n const style = window.getComputedStyle(ele);\n if (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientWidth < ele.scrollWidth || style.overflowY === \"auto\" && ele.clientHeight < ele.scrollHeight) {\n return true;\n } else {\n const parent = ele.parentNode;\n if (!parent || parent.tagName === \"BODY\")\n return false;\n return checkOverflowScroll(parent);\n }\n}\nfunction preventDefault(rawEvent) {\n const e = rawEvent || window.event;\n const _target = e.target;\n if (checkOverflowScroll(_target))\n return false;\n if (e.touches.length > 1)\n return true;\n if (e.preventDefault)\n e.preventDefault();\n return false;\n}\nconst elInitialOverflow = /* @__PURE__ */ new WeakMap();\nfunction useScrollLock(element, initialState = false) {\n const isLocked = ref(initialState);\n let stopTouchMoveListener = null;\n let initialOverflow = \"\";\n watch(toRef(element), (el) => {\n const target = resolveElement(toValue(el));\n if (target) {\n const ele = target;\n if (!elInitialOverflow.get(ele))\n elInitialOverflow.set(ele, ele.style.overflow);\n if (ele.style.overflow !== \"hidden\")\n initialOverflow = ele.style.overflow;\n if (ele.style.overflow === \"hidden\")\n return isLocked.value = true;\n if (isLocked.value)\n return ele.style.overflow = \"hidden\";\n }\n }, {\n immediate: true\n });\n const lock = () => {\n const el = resolveElement(toValue(element));\n if (!el || isLocked.value)\n return;\n if (isIOS) {\n stopTouchMoveListener = useEventListener(\n el,\n \"touchmove\",\n (e) => {\n preventDefault(e);\n },\n { passive: false }\n );\n }\n el.style.overflow = \"hidden\";\n isLocked.value = true;\n };\n const unlock = () => {\n const el = resolveElement(toValue(element));\n if (!el || !isLocked.value)\n return;\n if (isIOS)\n stopTouchMoveListener == null ? void 0 : stopTouchMoveListener();\n el.style.overflow = initialOverflow;\n elInitialOverflow.delete(el);\n isLocked.value = false;\n };\n tryOnScopeDispose(unlock);\n return computed({\n get() {\n return isLocked.value;\n },\n set(v) {\n if (v)\n lock();\n else unlock();\n }\n });\n}\n\nfunction useSessionStorage(key, initialValue, options = {}) {\n const { window = defaultWindow } = options;\n return useStorage(key, initialValue, window == null ? void 0 : window.sessionStorage, options);\n}\n\nfunction useShare(shareOptions = {}, options = {}) {\n const { navigator = defaultNavigator } = options;\n const _navigator = navigator;\n const isSupported = useSupported(() => _navigator && \"canShare\" in _navigator);\n const share = async (overrideOptions = {}) => {\n if (isSupported.value) {\n const data = {\n ...toValue(shareOptions),\n ...toValue(overrideOptions)\n };\n let granted = true;\n if (data.files && _navigator.canShare)\n granted = _navigator.canShare({ files: data.files });\n if (granted)\n return _navigator.share(data);\n }\n };\n return {\n isSupported,\n share\n };\n}\n\nconst defaultSortFn = (source, compareFn) => source.sort(compareFn);\nconst defaultCompare = (a, b) => a - b;\nfunction useSorted(...args) {\n var _a, _b, _c, _d;\n const [source] = args;\n let compareFn = defaultCompare;\n let options = {};\n if (args.length === 2) {\n if (typeof args[1] === \"object\") {\n options = args[1];\n compareFn = (_a = options.compareFn) != null ? _a : defaultCompare;\n } else {\n compareFn = (_b = args[1]) != null ? _b : defaultCompare;\n }\n } else if (args.length > 2) {\n compareFn = (_c = args[1]) != null ? _c : defaultCompare;\n options = (_d = args[2]) != null ? _d : {};\n }\n const {\n dirty = false,\n sortFn = defaultSortFn\n } = options;\n if (!dirty)\n return computed(() => sortFn([...toValue(source)], compareFn));\n watchEffect(() => {\n const result = sortFn(toValue(source), compareFn);\n if (isRef(source))\n source.value = result;\n else\n source.splice(0, source.length, ...result);\n });\n return source;\n}\n\nfunction useSpeechRecognition(options = {}) {\n const {\n interimResults = true,\n continuous = true,\n maxAlternatives = 1,\n window = defaultWindow\n } = options;\n const lang = toRef(options.lang || \"en-US\");\n const isListening = ref(false);\n const isFinal = ref(false);\n const result = ref(\"\");\n const error = shallowRef(void 0);\n const toggle = (value = !isListening.value) => {\n isListening.value = value;\n };\n const start = () => {\n isListening.value = true;\n };\n const stop = () => {\n isListening.value = false;\n };\n const SpeechRecognition = window && (window.SpeechRecognition || window.webkitSpeechRecognition);\n const isSupported = useSupported(() => SpeechRecognition);\n let recognition;\n if (isSupported.value) {\n recognition = new SpeechRecognition();\n recognition.continuous = continuous;\n recognition.interimResults = interimResults;\n recognition.lang = toValue(lang);\n recognition.maxAlternatives = maxAlternatives;\n recognition.onstart = () => {\n isFinal.value = false;\n };\n watch(lang, (lang2) => {\n if (recognition && !isListening.value)\n recognition.lang = lang2;\n });\n recognition.onresult = (event) => {\n const currentResult = event.results[event.resultIndex];\n const { transcript } = currentResult[0];\n isFinal.value = currentResult.isFinal;\n result.value = transcript;\n error.value = void 0;\n };\n recognition.onerror = (event) => {\n error.value = event;\n };\n recognition.onend = () => {\n isListening.value = false;\n recognition.lang = toValue(lang);\n };\n watch(isListening, () => {\n if (isListening.value)\n recognition.start();\n else\n recognition.stop();\n });\n }\n tryOnScopeDispose(() => {\n isListening.value = false;\n });\n return {\n isSupported,\n isListening,\n isFinal,\n recognition,\n result,\n error,\n toggle,\n start,\n stop\n };\n}\n\nfunction useSpeechSynthesis(text, options = {}) {\n const {\n pitch = 1,\n rate = 1,\n volume = 1,\n window = defaultWindow\n } = options;\n const synth = window && window.speechSynthesis;\n const isSupported = useSupported(() => synth);\n const isPlaying = ref(false);\n const status = ref(\"init\");\n const spokenText = toRef(text || \"\");\n const lang = toRef(options.lang || \"en-US\");\n const error = shallowRef(void 0);\n const toggle = (value = !isPlaying.value) => {\n isPlaying.value = value;\n };\n const bindEventsForUtterance = (utterance2) => {\n utterance2.lang = toValue(lang);\n utterance2.voice = toValue(options.voice) || null;\n utterance2.pitch = toValue(pitch);\n utterance2.rate = toValue(rate);\n utterance2.volume = volume;\n utterance2.onstart = () => {\n isPlaying.value = true;\n status.value = \"play\";\n };\n utterance2.onpause = () => {\n isPlaying.value = false;\n status.value = \"pause\";\n };\n utterance2.onresume = () => {\n isPlaying.value = true;\n status.value = \"play\";\n };\n utterance2.onend = () => {\n isPlaying.value = false;\n status.value = \"end\";\n };\n utterance2.onerror = (event) => {\n error.value = event;\n };\n };\n const utterance = computed(() => {\n isPlaying.value = false;\n status.value = \"init\";\n const newUtterance = new SpeechSynthesisUtterance(spokenText.value);\n bindEventsForUtterance(newUtterance);\n return newUtterance;\n });\n const speak = () => {\n synth.cancel();\n if (utterance)\n synth.speak(utterance.value);\n };\n const stop = () => {\n synth.cancel();\n isPlaying.value = false;\n };\n if (isSupported.value) {\n bindEventsForUtterance(utterance.value);\n watch(lang, (lang2) => {\n if (utterance.value && !isPlaying.value)\n utterance.value.lang = lang2;\n });\n if (options.voice) {\n watch(options.voice, () => {\n synth.cancel();\n });\n }\n watch(isPlaying, () => {\n if (isPlaying.value)\n synth.resume();\n else\n synth.pause();\n });\n }\n tryOnScopeDispose(() => {\n isPlaying.value = false;\n });\n return {\n isSupported,\n isPlaying,\n status,\n utterance,\n error,\n stop,\n toggle,\n speak\n };\n}\n\nfunction useStepper(steps, initialStep) {\n const stepsRef = ref(steps);\n const stepNames = computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value));\n const index = ref(stepNames.value.indexOf(initialStep != null ? initialStep : stepNames.value[0]));\n const current = computed(() => at(index.value));\n const isFirst = computed(() => index.value === 0);\n const isLast = computed(() => index.value === stepNames.value.length - 1);\n const next = computed(() => stepNames.value[index.value + 1]);\n const previous = computed(() => stepNames.value[index.value - 1]);\n function at(index2) {\n if (Array.isArray(stepsRef.value))\n return stepsRef.value[index2];\n return stepsRef.value[stepNames.value[index2]];\n }\n function get(step) {\n if (!stepNames.value.includes(step))\n return;\n return at(stepNames.value.indexOf(step));\n }\n function goTo(step) {\n if (stepNames.value.includes(step))\n index.value = stepNames.value.indexOf(step);\n }\n function goToNext() {\n if (isLast.value)\n return;\n index.value++;\n }\n function goToPrevious() {\n if (isFirst.value)\n return;\n index.value--;\n }\n function goBackTo(step) {\n if (isAfter(step))\n goTo(step);\n }\n function isNext(step) {\n return stepNames.value.indexOf(step) === index.value + 1;\n }\n function isPrevious(step) {\n return stepNames.value.indexOf(step) === index.value - 1;\n }\n function isCurrent(step) {\n return stepNames.value.indexOf(step) === index.value;\n }\n function isBefore(step) {\n return index.value < stepNames.value.indexOf(step);\n }\n function isAfter(step) {\n return index.value > stepNames.value.indexOf(step);\n }\n return {\n steps: stepsRef,\n stepNames,\n index,\n current,\n next,\n previous,\n isFirst,\n isLast,\n at,\n get,\n goTo,\n goToNext,\n goToPrevious,\n goBackTo,\n isNext,\n isPrevious,\n isCurrent,\n isBefore,\n isAfter\n };\n}\n\nfunction useStorageAsync(key, initialValue, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n mergeDefaults = false,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const rawInit = toValue(initialValue);\n const type = guessSerializerType(rawInit);\n const data = (shallow ? shallowRef : ref)(initialValue);\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorageAsync\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n async function read(event) {\n if (!storage || event && event.key !== key)\n return;\n try {\n const rawValue = event ? event.newValue : await storage.getItem(key);\n if (rawValue == null) {\n data.value = rawInit;\n if (writeDefaults && rawInit !== null)\n await storage.setItem(key, await serializer.write(rawInit));\n } else if (mergeDefaults) {\n const value = await serializer.read(rawValue);\n if (typeof mergeDefaults === \"function\")\n data.value = mergeDefaults(value, rawInit);\n else if (type === \"object\" && !Array.isArray(value))\n data.value = { ...rawInit, ...value };\n else data.value = value;\n } else {\n data.value = await serializer.read(rawValue);\n }\n } catch (e) {\n onError(e);\n }\n }\n read();\n if (window && listenToStorageChanges)\n useEventListener(window, \"storage\", (e) => Promise.resolve().then(() => read(e)));\n if (storage) {\n watchWithFilter(\n data,\n async () => {\n try {\n if (data.value == null)\n await storage.removeItem(key);\n else\n await storage.setItem(key, await serializer.write(data.value));\n } catch (e) {\n onError(e);\n }\n },\n {\n flush,\n deep,\n eventFilter\n }\n );\n }\n return data;\n}\n\nlet _id = 0;\nfunction useStyleTag(css, options = {}) {\n const isLoaded = ref(false);\n const {\n document = defaultDocument,\n immediate = true,\n manual = false,\n id = `vueuse_styletag_${++_id}`\n } = options;\n const cssRef = ref(css);\n let stop = () => {\n };\n const load = () => {\n if (!document)\n return;\n const el = document.getElementById(id) || document.createElement(\"style\");\n if (!el.isConnected) {\n el.id = id;\n if (options.media)\n el.media = options.media;\n document.head.appendChild(el);\n }\n if (isLoaded.value)\n return;\n stop = watch(\n cssRef,\n (value) => {\n el.textContent = value;\n },\n { immediate: true }\n );\n isLoaded.value = true;\n };\n const unload = () => {\n if (!document || !isLoaded.value)\n return;\n stop();\n document.head.removeChild(document.getElementById(id));\n isLoaded.value = false;\n };\n if (immediate && !manual)\n tryOnMounted(load);\n if (!manual)\n tryOnScopeDispose(unload);\n return {\n id,\n css: cssRef,\n unload,\n load,\n isLoaded: readonly(isLoaded)\n };\n}\n\nfunction useSwipe(target, options = {}) {\n const {\n threshold = 50,\n onSwipe,\n onSwipeEnd,\n onSwipeStart,\n passive = true,\n window = defaultWindow\n } = options;\n const coordsStart = reactive({ x: 0, y: 0 });\n const coordsEnd = reactive({ x: 0, y: 0 });\n const diffX = computed(() => coordsStart.x - coordsEnd.x);\n const diffY = computed(() => coordsStart.y - coordsEnd.y);\n const { max, abs } = Math;\n const isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);\n const isSwiping = ref(false);\n const direction = computed(() => {\n if (!isThresholdExceeded.value)\n return \"none\";\n if (abs(diffX.value) > abs(diffY.value)) {\n return diffX.value > 0 ? \"left\" : \"right\";\n } else {\n return diffY.value > 0 ? \"up\" : \"down\";\n }\n });\n const getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];\n const updateCoordsStart = (x, y) => {\n coordsStart.x = x;\n coordsStart.y = y;\n };\n const updateCoordsEnd = (x, y) => {\n coordsEnd.x = x;\n coordsEnd.y = y;\n };\n let listenerOptions;\n const isPassiveEventSupported = checkPassiveEventSupport(window == null ? void 0 : window.document);\n if (!passive)\n listenerOptions = isPassiveEventSupported ? { passive: false, capture: true } : { capture: true };\n else\n listenerOptions = isPassiveEventSupported ? { passive: true } : { capture: false };\n const onTouchEnd = (e) => {\n if (isSwiping.value)\n onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n isSwiping.value = false;\n };\n const stops = [\n useEventListener(target, \"touchstart\", (e) => {\n if (e.touches.length !== 1)\n return;\n const [x, y] = getTouchEventCoords(e);\n updateCoordsStart(x, y);\n updateCoordsEnd(x, y);\n onSwipeStart == null ? void 0 : onSwipeStart(e);\n }, listenerOptions),\n useEventListener(target, \"touchmove\", (e) => {\n if (e.touches.length !== 1)\n return;\n const [x, y] = getTouchEventCoords(e);\n updateCoordsEnd(x, y);\n if (listenerOptions.capture && !listenerOptions.passive && Math.abs(diffX.value) > Math.abs(diffY.value))\n e.preventDefault();\n if (!isSwiping.value && isThresholdExceeded.value)\n isSwiping.value = true;\n if (isSwiping.value)\n onSwipe == null ? void 0 : onSwipe(e);\n }, listenerOptions),\n useEventListener(target, [\"touchend\", \"touchcancel\"], onTouchEnd, listenerOptions)\n ];\n const stop = () => stops.forEach((s) => s());\n return {\n isPassiveEventSupported,\n isSwiping,\n direction,\n coordsStart,\n coordsEnd,\n lengthX: diffX,\n lengthY: diffY,\n stop\n };\n}\nfunction checkPassiveEventSupport(document) {\n if (!document)\n return false;\n let supportsPassive = false;\n const optionsBlock = {\n get passive() {\n supportsPassive = true;\n return false;\n }\n };\n document.addEventListener(\"x\", noop, optionsBlock);\n document.removeEventListener(\"x\", noop);\n return supportsPassive;\n}\n\nfunction useTemplateRefsList() {\n const refs = ref([]);\n refs.value.set = (el) => {\n if (el)\n refs.value.push(el);\n };\n onBeforeUpdate(() => {\n refs.value.length = 0;\n });\n return refs;\n}\n\nfunction useTextDirection(options = {}) {\n const {\n document = defaultDocument,\n selector = \"html\",\n observe = false,\n initialValue = \"ltr\"\n } = options;\n function getValue() {\n var _a, _b;\n return (_b = (_a = document == null ? void 0 : document.querySelector(selector)) == null ? void 0 : _a.getAttribute(\"dir\")) != null ? _b : initialValue;\n }\n const dir = ref(getValue());\n tryOnMounted(() => dir.value = getValue());\n if (observe && document) {\n useMutationObserver(\n document.querySelector(selector),\n () => dir.value = getValue(),\n { attributes: true }\n );\n }\n return computed({\n get() {\n return dir.value;\n },\n set(v) {\n var _a, _b;\n dir.value = v;\n if (!document)\n return;\n if (dir.value)\n (_a = document.querySelector(selector)) == null ? void 0 : _a.setAttribute(\"dir\", dir.value);\n else\n (_b = document.querySelector(selector)) == null ? void 0 : _b.removeAttribute(\"dir\");\n }\n });\n}\n\nfunction getRangesFromSelection(selection) {\n var _a;\n const rangeCount = (_a = selection.rangeCount) != null ? _a : 0;\n return Array.from({ length: rangeCount }, (_, i) => selection.getRangeAt(i));\n}\nfunction useTextSelection(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const selection = ref(null);\n const text = computed(() => {\n var _a, _b;\n return (_b = (_a = selection.value) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n });\n const ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []);\n const rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect()));\n function onSelectionChange() {\n selection.value = null;\n if (window)\n selection.value = window.getSelection();\n }\n if (window)\n useEventListener(window.document, \"selectionchange\", onSelectionChange);\n return {\n text,\n rects,\n ranges,\n selection\n };\n}\n\nfunction useTextareaAutosize(options) {\n var _a;\n const textarea = ref(options == null ? void 0 : options.element);\n const input = ref(options == null ? void 0 : options.input);\n const styleProp = (_a = options == null ? void 0 : options.styleProp) != null ? _a : \"height\";\n const textareaScrollHeight = ref(1);\n const textareaOldWidth = ref(0);\n function triggerResize() {\n var _a2;\n if (!textarea.value)\n return;\n let height = \"\";\n textarea.value.style[styleProp] = \"1px\";\n textareaScrollHeight.value = (_a2 = textarea.value) == null ? void 0 : _a2.scrollHeight;\n const _styleTarget = toValue(options == null ? void 0 : options.styleTarget);\n if (_styleTarget)\n _styleTarget.style[styleProp] = `${textareaScrollHeight.value}px`;\n else\n height = `${textareaScrollHeight.value}px`;\n textarea.value.style[styleProp] = height;\n }\n watch([input, textarea], () => nextTick(triggerResize), { immediate: true });\n watch(textareaScrollHeight, () => {\n var _a2;\n return (_a2 = options == null ? void 0 : options.onResize) == null ? void 0 : _a2.call(options);\n });\n useResizeObserver(textarea, ([{ contentRect }]) => {\n if (textareaOldWidth.value === contentRect.width)\n return;\n textareaOldWidth.value = contentRect.width;\n triggerResize();\n });\n if (options == null ? void 0 : options.watch)\n watch(options.watch, triggerResize, { immediate: true, deep: true });\n return {\n textarea,\n input,\n triggerResize\n };\n}\n\nfunction useThrottledRefHistory(source, options = {}) {\n const { throttle = 200, trailing = true } = options;\n const filter = throttleFilter(throttle, trailing);\n const history = useRefHistory(source, { ...options, eventFilter: filter });\n return {\n ...history\n };\n}\n\nconst DEFAULT_UNITS = [\n { max: 6e4, value: 1e3, name: \"second\" },\n { max: 276e4, value: 6e4, name: \"minute\" },\n { max: 72e6, value: 36e5, name: \"hour\" },\n { max: 5184e5, value: 864e5, name: \"day\" },\n { max: 24192e5, value: 6048e5, name: \"week\" },\n { max: 28512e6, value: 2592e6, name: \"month\" },\n { max: Number.POSITIVE_INFINITY, value: 31536e6, name: \"year\" }\n];\nconst DEFAULT_MESSAGES = {\n justNow: \"just now\",\n past: (n) => n.match(/\\d/) ? `${n} ago` : n,\n future: (n) => n.match(/\\d/) ? `in ${n}` : n,\n month: (n, past) => n === 1 ? past ? \"last month\" : \"next month\" : `${n} month${n > 1 ? \"s\" : \"\"}`,\n year: (n, past) => n === 1 ? past ? \"last year\" : \"next year\" : `${n} year${n > 1 ? \"s\" : \"\"}`,\n day: (n, past) => n === 1 ? past ? \"yesterday\" : \"tomorrow\" : `${n} day${n > 1 ? \"s\" : \"\"}`,\n week: (n, past) => n === 1 ? past ? \"last week\" : \"next week\" : `${n} week${n > 1 ? \"s\" : \"\"}`,\n hour: (n) => `${n} hour${n > 1 ? \"s\" : \"\"}`,\n minute: (n) => `${n} minute${n > 1 ? \"s\" : \"\"}`,\n second: (n) => `${n} second${n > 1 ? \"s\" : \"\"}`,\n invalid: \"\"\n};\nfunction DEFAULT_FORMATTER(date) {\n return date.toISOString().slice(0, 10);\n}\nfunction useTimeAgo(time, options = {}) {\n const {\n controls: exposeControls = false,\n updateInterval = 3e4\n } = options;\n const { now, ...controls } = useNow({ interval: updateInterval, controls: true });\n const timeAgo = computed(() => formatTimeAgo(new Date(toValue(time)), options, toValue(now)));\n if (exposeControls) {\n return {\n timeAgo,\n ...controls\n };\n } else {\n return timeAgo;\n }\n}\nfunction formatTimeAgo(from, options = {}, now = Date.now()) {\n var _a;\n const {\n max,\n messages = DEFAULT_MESSAGES,\n fullDateFormatter = DEFAULT_FORMATTER,\n units = DEFAULT_UNITS,\n showSecond = false,\n rounding = \"round\"\n } = options;\n const roundFn = typeof rounding === \"number\" ? (n) => +n.toFixed(rounding) : Math[rounding];\n const diff = +now - +from;\n const absDiff = Math.abs(diff);\n function getValue(diff2, unit) {\n return roundFn(Math.abs(diff2) / unit.value);\n }\n function format(diff2, unit) {\n const val = getValue(diff2, unit);\n const past = diff2 > 0;\n const str = applyFormat(unit.name, val, past);\n return applyFormat(past ? \"past\" : \"future\", str, past);\n }\n function applyFormat(name, val, isPast) {\n const formatter = messages[name];\n if (typeof formatter === \"function\")\n return formatter(val, isPast);\n return formatter.replace(\"{0}\", val.toString());\n }\n if (absDiff < 6e4 && !showSecond)\n return messages.justNow;\n if (typeof max === \"number\" && absDiff > max)\n return fullDateFormatter(new Date(from));\n if (typeof max === \"string\") {\n const unitMax = (_a = units.find((i) => i.name === max)) == null ? void 0 : _a.max;\n if (unitMax && absDiff > unitMax)\n return fullDateFormatter(new Date(from));\n }\n for (const [idx, unit] of units.entries()) {\n const val = getValue(diff, unit);\n if (val <= 0 && units[idx - 1])\n return format(diff, units[idx - 1]);\n if (absDiff < unit.max)\n return format(diff, unit);\n }\n return messages.invalid;\n}\n\nfunction useTimeoutPoll(fn, interval, timeoutPollOptions) {\n const { start } = useTimeoutFn(loop, interval, { immediate: false });\n const isActive = ref(false);\n async function loop() {\n if (!isActive.value)\n return;\n await fn();\n start();\n }\n function resume() {\n if (!isActive.value) {\n isActive.value = true;\n loop();\n }\n }\n function pause() {\n isActive.value = false;\n }\n if (timeoutPollOptions == null ? void 0 : timeoutPollOptions.immediate)\n resume();\n tryOnScopeDispose(pause);\n return {\n isActive,\n pause,\n resume\n };\n}\n\nfunction useTimestamp(options = {}) {\n const {\n controls: exposeControls = false,\n offset = 0,\n immediate = true,\n interval = \"requestAnimationFrame\",\n callback\n } = options;\n const ts = ref(timestamp() + offset);\n const update = () => ts.value = timestamp() + offset;\n const cb = callback ? () => {\n update();\n callback(ts.value);\n } : update;\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n if (exposeControls) {\n return {\n timestamp: ts,\n ...controls\n };\n } else {\n return ts;\n }\n}\n\nfunction useTitle(newTitle = null, options = {}) {\n var _a, _b, _c;\n const {\n document = defaultDocument,\n restoreOnUnmount = (t) => t\n } = options;\n const originalTitle = (_a = document == null ? void 0 : document.title) != null ? _a : \"\";\n const title = toRef((_b = newTitle != null ? newTitle : document == null ? void 0 : document.title) != null ? _b : null);\n const isReadonly = newTitle && typeof newTitle === \"function\";\n function format(t) {\n if (!(\"titleTemplate\" in options))\n return t;\n const template = options.titleTemplate || \"%s\";\n return typeof template === \"function\" ? template(t) : toValue(template).replace(/%s/g, t);\n }\n watch(\n title,\n (t, o) => {\n if (t !== o && document)\n document.title = format(typeof t === \"string\" ? t : \"\");\n },\n { immediate: true }\n );\n if (options.observe && !options.titleTemplate && document && !isReadonly) {\n useMutationObserver(\n (_c = document.head) == null ? void 0 : _c.querySelector(\"title\"),\n () => {\n if (document && document.title !== title.value)\n title.value = format(document.title);\n },\n { childList: true }\n );\n }\n tryOnBeforeUnmount(() => {\n if (restoreOnUnmount) {\n const restoredTitle = restoreOnUnmount(originalTitle, title.value || \"\");\n if (restoredTitle != null && document)\n document.title = restoredTitle;\n }\n });\n return title;\n}\n\nconst _TransitionPresets = {\n easeInSine: [0.12, 0, 0.39, 0],\n easeOutSine: [0.61, 1, 0.88, 1],\n easeInOutSine: [0.37, 0, 0.63, 1],\n easeInQuad: [0.11, 0, 0.5, 0],\n easeOutQuad: [0.5, 1, 0.89, 1],\n easeInOutQuad: [0.45, 0, 0.55, 1],\n easeInCubic: [0.32, 0, 0.67, 0],\n easeOutCubic: [0.33, 1, 0.68, 1],\n easeInOutCubic: [0.65, 0, 0.35, 1],\n easeInQuart: [0.5, 0, 0.75, 0],\n easeOutQuart: [0.25, 1, 0.5, 1],\n easeInOutQuart: [0.76, 0, 0.24, 1],\n easeInQuint: [0.64, 0, 0.78, 0],\n easeOutQuint: [0.22, 1, 0.36, 1],\n easeInOutQuint: [0.83, 0, 0.17, 1],\n easeInExpo: [0.7, 0, 0.84, 0],\n easeOutExpo: [0.16, 1, 0.3, 1],\n easeInOutExpo: [0.87, 0, 0.13, 1],\n easeInCirc: [0.55, 0, 1, 0.45],\n easeOutCirc: [0, 0.55, 0.45, 1],\n easeInOutCirc: [0.85, 0, 0.15, 1],\n easeInBack: [0.36, 0, 0.66, -0.56],\n easeOutBack: [0.34, 1.56, 0.64, 1],\n easeInOutBack: [0.68, -0.6, 0.32, 1.6]\n};\nconst TransitionPresets = /* @__PURE__ */ Object.assign({}, { linear: identity }, _TransitionPresets);\nfunction createEasingFunction([p0, p1, p2, p3]) {\n const a = (a1, a2) => 1 - 3 * a2 + 3 * a1;\n const b = (a1, a2) => 3 * a2 - 6 * a1;\n const c = (a1) => 3 * a1;\n const calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;\n const getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1);\n const getTforX = (x) => {\n let aGuessT = x;\n for (let i = 0; i < 4; ++i) {\n const currentSlope = getSlope(aGuessT, p0, p2);\n if (currentSlope === 0)\n return aGuessT;\n const currentX = calcBezier(aGuessT, p0, p2) - x;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n };\n return (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3);\n}\nfunction lerp(a, b, alpha) {\n return a + alpha * (b - a);\n}\nfunction toVec(t) {\n return (typeof t === \"number\" ? [t] : t) || [];\n}\nfunction executeTransition(source, from, to, options = {}) {\n var _a, _b;\n const fromVal = toValue(from);\n const toVal = toValue(to);\n const v1 = toVec(fromVal);\n const v2 = toVec(toVal);\n const duration = (_a = toValue(options.duration)) != null ? _a : 1e3;\n const startedAt = Date.now();\n const endAt = Date.now() + duration;\n const trans = typeof options.transition === \"function\" ? options.transition : (_b = toValue(options.transition)) != null ? _b : identity;\n const ease = typeof trans === \"function\" ? trans : createEasingFunction(trans);\n return new Promise((resolve) => {\n source.value = fromVal;\n const tick = () => {\n var _a2;\n if ((_a2 = options.abort) == null ? void 0 : _a2.call(options)) {\n resolve();\n return;\n }\n const now = Date.now();\n const alpha = ease((now - startedAt) / duration);\n const arr = toVec(source.value).map((n, i) => lerp(v1[i], v2[i], alpha));\n if (Array.isArray(source.value))\n source.value = arr.map((n, i) => {\n var _a3, _b2;\n return lerp((_a3 = v1[i]) != null ? _a3 : 0, (_b2 = v2[i]) != null ? _b2 : 0, alpha);\n });\n else if (typeof source.value === \"number\")\n source.value = arr[0];\n if (now < endAt) {\n requestAnimationFrame(tick);\n } else {\n source.value = toVal;\n resolve();\n }\n };\n tick();\n });\n}\nfunction useTransition(source, options = {}) {\n let currentId = 0;\n const sourceVal = () => {\n const v = toValue(source);\n return typeof v === \"number\" ? v : v.map(toValue);\n };\n const outputRef = ref(sourceVal());\n watch(sourceVal, async (to) => {\n var _a, _b;\n if (toValue(options.disabled))\n return;\n const id = ++currentId;\n if (options.delay)\n await promiseTimeout(toValue(options.delay));\n if (id !== currentId)\n return;\n const toVal = Array.isArray(to) ? to.map(toValue) : toValue(to);\n (_a = options.onStarted) == null ? void 0 : _a.call(options);\n await executeTransition(outputRef, outputRef.value, toVal, {\n ...options,\n abort: () => {\n var _a2;\n return id !== currentId || ((_a2 = options.abort) == null ? void 0 : _a2.call(options));\n }\n });\n (_b = options.onFinished) == null ? void 0 : _b.call(options);\n }, { deep: true });\n watch(() => toValue(options.disabled), (disabled) => {\n if (disabled) {\n currentId++;\n outputRef.value = sourceVal();\n }\n });\n tryOnScopeDispose(() => {\n currentId++;\n });\n return computed(() => toValue(options.disabled) ? sourceVal() : outputRef.value);\n}\n\nfunction useUrlSearchParams(mode = \"history\", options = {}) {\n const {\n initialValue = {},\n removeNullishValues = true,\n removeFalsyValues = false,\n write: enableWrite = true,\n window = defaultWindow\n } = options;\n if (!window)\n return reactive(initialValue);\n const state = reactive({});\n function getRawParams() {\n if (mode === \"history\") {\n return window.location.search || \"\";\n } else if (mode === \"hash\") {\n const hash = window.location.hash || \"\";\n const index = hash.indexOf(\"?\");\n return index > 0 ? hash.slice(index) : \"\";\n } else {\n return (window.location.hash || \"\").replace(/^#/, \"\");\n }\n }\n function constructQuery(params) {\n const stringified = params.toString();\n if (mode === \"history\")\n return `${stringified ? `?${stringified}` : \"\"}${window.location.hash || \"\"}`;\n if (mode === \"hash-params\")\n return `${window.location.search || \"\"}${stringified ? `#${stringified}` : \"\"}`;\n const hash = window.location.hash || \"#\";\n const index = hash.indexOf(\"?\");\n if (index > 0)\n return `${window.location.search || \"\"}${hash.slice(0, index)}${stringified ? `?${stringified}` : \"\"}`;\n return `${window.location.search || \"\"}${hash}${stringified ? `?${stringified}` : \"\"}`;\n }\n function read() {\n return new URLSearchParams(getRawParams());\n }\n function updateState(params) {\n const unusedKeys = new Set(Object.keys(state));\n for (const key of params.keys()) {\n const paramsForKey = params.getAll(key);\n state[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || \"\";\n unusedKeys.delete(key);\n }\n Array.from(unusedKeys).forEach((key) => delete state[key]);\n }\n const { pause, resume } = pausableWatch(\n state,\n () => {\n const params = new URLSearchParams(\"\");\n Object.keys(state).forEach((key) => {\n const mapEntry = state[key];\n if (Array.isArray(mapEntry))\n mapEntry.forEach((value) => params.append(key, value));\n else if (removeNullishValues && mapEntry == null)\n params.delete(key);\n else if (removeFalsyValues && !mapEntry)\n params.delete(key);\n else\n params.set(key, mapEntry);\n });\n write(params);\n },\n { deep: true }\n );\n function write(params, shouldUpdate) {\n pause();\n if (shouldUpdate)\n updateState(params);\n window.history.replaceState(\n window.history.state,\n window.document.title,\n window.location.pathname + constructQuery(params)\n );\n resume();\n }\n function onChanged() {\n if (!enableWrite)\n return;\n write(read(), true);\n }\n useEventListener(window, \"popstate\", onChanged, false);\n if (mode !== \"history\")\n useEventListener(window, \"hashchange\", onChanged, false);\n const initial = read();\n if (initial.keys().next().value)\n updateState(initial);\n else\n Object.assign(state, initialValue);\n return state;\n}\n\nfunction useUserMedia(options = {}) {\n var _a, _b;\n const enabled = ref((_a = options.enabled) != null ? _a : false);\n const autoSwitch = ref((_b = options.autoSwitch) != null ? _b : true);\n const constraints = ref(options.constraints);\n const { navigator = defaultNavigator } = options;\n const isSupported = useSupported(() => {\n var _a2;\n return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getUserMedia;\n });\n const stream = shallowRef();\n function getDeviceOptions(type) {\n switch (type) {\n case \"video\": {\n if (constraints.value)\n return constraints.value.video || false;\n break;\n }\n case \"audio\": {\n if (constraints.value)\n return constraints.value.audio || false;\n break;\n }\n }\n }\n async function _start() {\n if (!isSupported.value || stream.value)\n return;\n stream.value = await navigator.mediaDevices.getUserMedia({\n video: getDeviceOptions(\"video\"),\n audio: getDeviceOptions(\"audio\")\n });\n return stream.value;\n }\n function _stop() {\n var _a2;\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n stream.value = void 0;\n }\n function stop() {\n _stop();\n enabled.value = false;\n }\n async function start() {\n await _start();\n if (stream.value)\n enabled.value = true;\n return stream.value;\n }\n async function restart() {\n _stop();\n return await start();\n }\n watch(\n enabled,\n (v) => {\n if (v)\n _start();\n else _stop();\n },\n { immediate: true }\n );\n watch(\n constraints,\n () => {\n if (autoSwitch.value && stream.value)\n restart();\n },\n { immediate: true }\n );\n tryOnScopeDispose(() => {\n stop();\n });\n return {\n isSupported,\n stream,\n start,\n stop,\n restart,\n constraints,\n enabled,\n autoSwitch\n };\n}\n\nfunction useVModel(props, key, emit, options = {}) {\n var _a, _b, _c;\n const {\n clone = false,\n passive = false,\n eventName,\n deep = false,\n defaultValue,\n shouldEmit\n } = options;\n const vm = getCurrentInstance();\n const _emit = emit || (vm == null ? void 0 : vm.emit) || ((_a = vm == null ? void 0 : vm.$emit) == null ? void 0 : _a.bind(vm)) || ((_c = (_b = vm == null ? void 0 : vm.proxy) == null ? void 0 : _b.$emit) == null ? void 0 : _c.bind(vm == null ? void 0 : vm.proxy));\n let event = eventName;\n if (!key) {\n key = \"modelValue\";\n }\n event = event || `update:${key.toString()}`;\n const cloneFn = (val) => !clone ? val : typeof clone === \"function\" ? clone(val) : cloneFnJSON(val);\n const getValue = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;\n const triggerEmit = (value) => {\n if (shouldEmit) {\n if (shouldEmit(value))\n _emit(event, value);\n } else {\n _emit(event, value);\n }\n };\n if (passive) {\n const initialValue = getValue();\n const proxy = ref(initialValue);\n let isUpdating = false;\n watch(\n () => props[key],\n (v) => {\n if (!isUpdating) {\n isUpdating = true;\n proxy.value = cloneFn(v);\n nextTick(() => isUpdating = false);\n }\n }\n );\n watch(\n proxy,\n (v) => {\n if (!isUpdating && (v !== props[key] || deep))\n triggerEmit(v);\n },\n { deep }\n );\n return proxy;\n } else {\n return computed({\n get() {\n return getValue();\n },\n set(value) {\n triggerEmit(value);\n }\n });\n }\n}\n\nfunction useVModels(props, emit, options = {}) {\n const ret = {};\n for (const key in props) {\n ret[key] = useVModel(\n props,\n key,\n emit,\n options\n );\n }\n return ret;\n}\n\nfunction useVibrate(options) {\n const {\n pattern = [],\n interval = 0,\n navigator = defaultNavigator\n } = options || {};\n const isSupported = useSupported(() => typeof navigator !== \"undefined\" && \"vibrate\" in navigator);\n const patternRef = toRef(pattern);\n let intervalControls;\n const vibrate = (pattern2 = patternRef.value) => {\n if (isSupported.value)\n navigator.vibrate(pattern2);\n };\n const stop = () => {\n if (isSupported.value)\n navigator.vibrate(0);\n intervalControls == null ? void 0 : intervalControls.pause();\n };\n if (interval > 0) {\n intervalControls = useIntervalFn(\n vibrate,\n interval,\n {\n immediate: false,\n immediateCallback: false\n }\n );\n }\n return {\n isSupported,\n pattern,\n intervalControls,\n vibrate,\n stop\n };\n}\n\nfunction useVirtualList(list, options) {\n const { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = \"itemHeight\" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list);\n return {\n list: currentList,\n scrollTo,\n containerProps: {\n ref: containerRef,\n onScroll: () => {\n calculateRange();\n },\n style: containerStyle\n },\n wrapperProps\n };\n}\nfunction useVirtualListResources(list) {\n const containerRef = ref(null);\n const size = useElementSize(containerRef);\n const currentList = ref([]);\n const source = shallowRef(list);\n const state = ref({ start: 0, end: 10 });\n return { state, source, currentList, size, containerRef };\n}\nfunction createGetViewCapacity(state, source, itemSize) {\n return (containerSize) => {\n if (typeof itemSize === \"number\")\n return Math.ceil(containerSize / itemSize);\n const { start = 0 } = state.value;\n let sum = 0;\n let capacity = 0;\n for (let i = start; i < source.value.length; i++) {\n const size = itemSize(i);\n sum += size;\n capacity = i;\n if (sum > containerSize)\n break;\n }\n return capacity - start;\n };\n}\nfunction createGetOffset(source, itemSize) {\n return (scrollDirection) => {\n if (typeof itemSize === \"number\")\n return Math.floor(scrollDirection / itemSize) + 1;\n let sum = 0;\n let offset = 0;\n for (let i = 0; i < source.value.length; i++) {\n const size = itemSize(i);\n sum += size;\n if (sum >= scrollDirection) {\n offset = i;\n break;\n }\n }\n return offset + 1;\n };\n}\nfunction createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) {\n return () => {\n const element = containerRef.value;\n if (element) {\n const offset = getOffset(type === \"vertical\" ? element.scrollTop : element.scrollLeft);\n const viewCapacity = getViewCapacity(type === \"vertical\" ? element.clientHeight : element.clientWidth);\n const from = offset - overscan;\n const to = offset + viewCapacity + overscan;\n state.value = {\n start: from < 0 ? 0 : from,\n end: to > source.value.length ? source.value.length : to\n };\n currentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({\n data: ele,\n index: index + state.value.start\n }));\n }\n };\n}\nfunction createGetDistance(itemSize, source) {\n return (index) => {\n if (typeof itemSize === \"number\") {\n const size2 = index * itemSize;\n return size2;\n }\n const size = source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0);\n return size;\n };\n}\nfunction useWatchForSizes(size, list, containerRef, calculateRange) {\n watch([size.width, size.height, list, containerRef], () => {\n calculateRange();\n });\n}\nfunction createComputedTotalSize(itemSize, source) {\n return computed(() => {\n if (typeof itemSize === \"number\")\n return source.value.length * itemSize;\n return source.value.reduce((sum, _, index) => sum + itemSize(index), 0);\n });\n}\nconst scrollToDictionaryForElementScrollKey = {\n horizontal: \"scrollLeft\",\n vertical: \"scrollTop\"\n};\nfunction createScrollTo(type, calculateRange, getDistance, containerRef) {\n return (index) => {\n if (containerRef.value) {\n containerRef.value[scrollToDictionaryForElementScrollKey[type]] = getDistance(index);\n calculateRange();\n }\n };\n}\nfunction useHorizontalVirtualList(options, list) {\n const resources = useVirtualListResources(list);\n const { state, source, currentList, size, containerRef } = resources;\n const containerStyle = { overflowX: \"auto\" };\n const { itemWidth, overscan = 5 } = options;\n const getViewCapacity = createGetViewCapacity(state, source, itemWidth);\n const getOffset = createGetOffset(source, itemWidth);\n const calculateRange = createCalculateRange(\"horizontal\", overscan, getOffset, getViewCapacity, resources);\n const getDistanceLeft = createGetDistance(itemWidth, source);\n const offsetLeft = computed(() => getDistanceLeft(state.value.start));\n const totalWidth = createComputedTotalSize(itemWidth, source);\n useWatchForSizes(size, list, containerRef, calculateRange);\n const scrollTo = createScrollTo(\"horizontal\", calculateRange, getDistanceLeft, containerRef);\n const wrapperProps = computed(() => {\n return {\n style: {\n height: \"100%\",\n width: `${totalWidth.value - offsetLeft.value}px`,\n marginLeft: `${offsetLeft.value}px`,\n display: \"flex\"\n }\n };\n });\n return {\n scrollTo,\n calculateRange,\n wrapperProps,\n containerStyle,\n currentList,\n containerRef\n };\n}\nfunction useVerticalVirtualList(options, list) {\n const resources = useVirtualListResources(list);\n const { state, source, currentList, size, containerRef } = resources;\n const containerStyle = { overflowY: \"auto\" };\n const { itemHeight, overscan = 5 } = options;\n const getViewCapacity = createGetViewCapacity(state, source, itemHeight);\n const getOffset = createGetOffset(source, itemHeight);\n const calculateRange = createCalculateRange(\"vertical\", overscan, getOffset, getViewCapacity, resources);\n const getDistanceTop = createGetDistance(itemHeight, source);\n const offsetTop = computed(() => getDistanceTop(state.value.start));\n const totalHeight = createComputedTotalSize(itemHeight, source);\n useWatchForSizes(size, list, containerRef, calculateRange);\n const scrollTo = createScrollTo(\"vertical\", calculateRange, getDistanceTop, containerRef);\n const wrapperProps = computed(() => {\n return {\n style: {\n width: \"100%\",\n height: `${totalHeight.value - offsetTop.value}px`,\n marginTop: `${offsetTop.value}px`\n }\n };\n });\n return {\n calculateRange,\n scrollTo,\n containerStyle,\n wrapperProps,\n currentList,\n containerRef\n };\n}\n\nfunction useWakeLock(options = {}) {\n const {\n navigator = defaultNavigator,\n document = defaultDocument\n } = options;\n const requestedType = ref(false);\n const sentinel = shallowRef(null);\n const documentVisibility = useDocumentVisibility({ document });\n const isSupported = useSupported(() => navigator && \"wakeLock\" in navigator);\n const isActive = computed(() => !!sentinel.value && documentVisibility.value === \"visible\");\n if (isSupported.value) {\n useEventListener(sentinel, \"release\", () => {\n var _a, _b;\n requestedType.value = (_b = (_a = sentinel.value) == null ? void 0 : _a.type) != null ? _b : false;\n });\n whenever(\n () => documentVisibility.value === \"visible\" && (document == null ? void 0 : document.visibilityState) === \"visible\" && requestedType.value,\n (type) => {\n requestedType.value = false;\n forceRequest(type);\n }\n );\n }\n async function forceRequest(type) {\n var _a;\n await ((_a = sentinel.value) == null ? void 0 : _a.release());\n sentinel.value = isSupported.value ? await navigator.wakeLock.request(type) : null;\n }\n async function request(type) {\n if (documentVisibility.value === \"visible\")\n await forceRequest(type);\n else\n requestedType.value = type;\n }\n async function release() {\n requestedType.value = false;\n const s = sentinel.value;\n sentinel.value = null;\n await (s == null ? void 0 : s.release());\n }\n return {\n sentinel,\n isSupported,\n isActive,\n request,\n forceRequest,\n release\n };\n}\n\nfunction useWebNotification(options = {}) {\n const {\n window = defaultWindow,\n requestPermissions: _requestForPermissions = true\n } = options;\n const defaultWebNotificationOptions = options;\n const isSupported = useSupported(() => {\n if (!window || !(\"Notification\" in window))\n return false;\n try {\n new Notification(\"\");\n } catch (e) {\n return false;\n }\n return true;\n });\n const permissionGranted = ref(isSupported.value && \"permission\" in Notification && Notification.permission === \"granted\");\n const notification = ref(null);\n const ensurePermissions = async () => {\n if (!isSupported.value)\n return;\n if (!permissionGranted.value && Notification.permission !== \"denied\") {\n const result = await Notification.requestPermission();\n if (result === \"granted\")\n permissionGranted.value = true;\n }\n return permissionGranted.value;\n };\n const { on: onClick, trigger: clickTrigger } = createEventHook();\n const { on: onShow, trigger: showTrigger } = createEventHook();\n const { on: onError, trigger: errorTrigger } = createEventHook();\n const { on: onClose, trigger: closeTrigger } = createEventHook();\n const show = async (overrides) => {\n if (!isSupported.value || !permissionGranted.value)\n return;\n const options2 = Object.assign({}, defaultWebNotificationOptions, overrides);\n notification.value = new Notification(options2.title || \"\", options2);\n notification.value.onclick = clickTrigger;\n notification.value.onshow = showTrigger;\n notification.value.onerror = errorTrigger;\n notification.value.onclose = closeTrigger;\n return notification.value;\n };\n const close = () => {\n if (notification.value)\n notification.value.close();\n notification.value = null;\n };\n if (_requestForPermissions)\n tryOnMounted(ensurePermissions);\n tryOnScopeDispose(close);\n if (isSupported.value && window) {\n const document = window.document;\n useEventListener(document, \"visibilitychange\", (e) => {\n e.preventDefault();\n if (document.visibilityState === \"visible\") {\n close();\n }\n });\n }\n return {\n isSupported,\n notification,\n ensurePermissions,\n permissionGranted,\n show,\n close,\n onClick,\n onShow,\n onError,\n onClose\n };\n}\n\nconst DEFAULT_PING_MESSAGE = \"ping\";\nfunction resolveNestedOptions(options) {\n if (options === true)\n return {};\n return options;\n}\nfunction useWebSocket(url, options = {}) {\n const {\n onConnected,\n onDisconnected,\n onError,\n onMessage,\n immediate = true,\n autoClose = true,\n protocols = []\n } = options;\n const data = ref(null);\n const status = ref(\"CLOSED\");\n const wsRef = ref();\n const urlRef = toRef(url);\n let heartbeatPause;\n let heartbeatResume;\n let explicitlyClosed = false;\n let retried = 0;\n let bufferedData = [];\n let pongTimeoutWait;\n const _sendBuffer = () => {\n if (bufferedData.length && wsRef.value && status.value === \"OPEN\") {\n for (const buffer of bufferedData)\n wsRef.value.send(buffer);\n bufferedData = [];\n }\n };\n const resetHeartbeat = () => {\n clearTimeout(pongTimeoutWait);\n pongTimeoutWait = void 0;\n };\n const close = (code = 1e3, reason) => {\n if (!isClient || !wsRef.value)\n return;\n explicitlyClosed = true;\n resetHeartbeat();\n heartbeatPause == null ? void 0 : heartbeatPause();\n wsRef.value.close(code, reason);\n wsRef.value = void 0;\n };\n const send = (data2, useBuffer = true) => {\n if (!wsRef.value || status.value !== \"OPEN\") {\n if (useBuffer)\n bufferedData.push(data2);\n return false;\n }\n _sendBuffer();\n wsRef.value.send(data2);\n return true;\n };\n const _init = () => {\n if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n return;\n const ws = new WebSocket(urlRef.value, protocols);\n wsRef.value = ws;\n status.value = \"CONNECTING\";\n ws.onopen = () => {\n status.value = \"OPEN\";\n retried = 0;\n onConnected == null ? void 0 : onConnected(ws);\n heartbeatResume == null ? void 0 : heartbeatResume();\n _sendBuffer();\n };\n ws.onclose = (ev) => {\n status.value = \"CLOSED\";\n onDisconnected == null ? void 0 : onDisconnected(ws, ev);\n if (!explicitlyClosed && options.autoReconnect && (wsRef.value == null || ws === wsRef.value)) {\n const {\n retries = -1,\n delay = 1e3,\n onFailed\n } = resolveNestedOptions(options.autoReconnect);\n if (typeof retries === \"number\" && (retries < 0 || retried < retries)) {\n retried += 1;\n setTimeout(_init, delay);\n } else if (typeof retries === \"function\" && retries()) {\n setTimeout(_init, delay);\n } else {\n onFailed == null ? void 0 : onFailed();\n }\n }\n };\n ws.onerror = (e) => {\n onError == null ? void 0 : onError(ws, e);\n };\n ws.onmessage = (e) => {\n if (options.heartbeat) {\n resetHeartbeat();\n const {\n message = DEFAULT_PING_MESSAGE,\n responseMessage = message\n } = resolveNestedOptions(options.heartbeat);\n if (e.data === responseMessage)\n return;\n }\n data.value = e.data;\n onMessage == null ? void 0 : onMessage(ws, e);\n };\n };\n if (options.heartbeat) {\n const {\n message = DEFAULT_PING_MESSAGE,\n interval = 1e3,\n pongTimeout = 1e3\n } = resolveNestedOptions(options.heartbeat);\n const { pause, resume } = useIntervalFn(\n () => {\n send(message, false);\n if (pongTimeoutWait != null)\n return;\n pongTimeoutWait = setTimeout(() => {\n close();\n explicitlyClosed = false;\n }, pongTimeout);\n },\n interval,\n { immediate: false }\n );\n heartbeatPause = pause;\n heartbeatResume = resume;\n }\n if (autoClose) {\n if (isClient)\n useEventListener(\"beforeunload\", () => close());\n tryOnScopeDispose(close);\n }\n const open = () => {\n if (!isClient && !isWorker)\n return;\n close();\n explicitlyClosed = false;\n retried = 0;\n _init();\n };\n if (immediate)\n open();\n watch(urlRef, open);\n return {\n data,\n status,\n close,\n send,\n open,\n ws: wsRef\n };\n}\n\nfunction useWebWorker(arg0, workerOptions, options) {\n const {\n window = defaultWindow\n } = options != null ? options : {};\n const data = ref(null);\n const worker = shallowRef();\n const post = (...args) => {\n if (!worker.value)\n return;\n worker.value.postMessage(...args);\n };\n const terminate = function terminate2() {\n if (!worker.value)\n return;\n worker.value.terminate();\n };\n if (window) {\n if (typeof arg0 === \"string\")\n worker.value = new Worker(arg0, workerOptions);\n else if (typeof arg0 === \"function\")\n worker.value = arg0();\n else\n worker.value = arg0;\n worker.value.onmessage = (e) => {\n data.value = e.data;\n };\n tryOnScopeDispose(() => {\n if (worker.value)\n worker.value.terminate();\n });\n }\n return {\n data,\n post,\n terminate,\n worker\n };\n}\n\nfunction depsParser(deps, localDeps) {\n if (deps.length === 0 && localDeps.length === 0)\n return \"\";\n const depsString = deps.map((dep) => `'${dep}'`).toString();\n const depsFunctionString = localDeps.filter((dep) => typeof dep === \"function\").map((fn) => {\n const str = fn.toString();\n if (str.trim().startsWith(\"function\")) {\n return str;\n } else {\n const name = fn.name;\n return `const ${name} = ${str}`;\n }\n }).join(\";\");\n const importString = `importScripts(${depsString});`;\n return `${depsString.trim() === \"\" ? \"\" : importString} ${depsFunctionString}`;\n}\n\nfunction jobRunner(userFunc) {\n return (e) => {\n const userFuncArgs = e.data[0];\n return Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => {\n postMessage([\"SUCCESS\", result]);\n }).catch((error) => {\n postMessage([\"ERROR\", error]);\n });\n };\n}\n\nfunction createWorkerBlobUrl(fn, deps, localDeps) {\n const blobCode = `${depsParser(deps, localDeps)}; onmessage=(${jobRunner})(${fn})`;\n const blob = new Blob([blobCode], { type: \"text/javascript\" });\n const url = URL.createObjectURL(blob);\n return url;\n}\n\nfunction useWebWorkerFn(fn, options = {}) {\n const {\n dependencies = [],\n localDependencies = [],\n timeout,\n window = defaultWindow\n } = options;\n const worker = ref();\n const workerStatus = ref(\"PENDING\");\n const promise = ref({});\n const timeoutId = ref();\n const workerTerminate = (status = \"PENDING\") => {\n if (worker.value && worker.value._url && window) {\n worker.value.terminate();\n URL.revokeObjectURL(worker.value._url);\n promise.value = {};\n worker.value = void 0;\n window.clearTimeout(timeoutId.value);\n workerStatus.value = status;\n }\n };\n workerTerminate();\n tryOnScopeDispose(workerTerminate);\n const generateWorker = () => {\n const blobUrl = createWorkerBlobUrl(fn, dependencies, localDependencies);\n const newWorker = new Worker(blobUrl);\n newWorker._url = blobUrl;\n newWorker.onmessage = (e) => {\n const { resolve = () => {\n }, reject = () => {\n } } = promise.value;\n const [status, result] = e.data;\n switch (status) {\n case \"SUCCESS\":\n resolve(result);\n workerTerminate(status);\n break;\n default:\n reject(result);\n workerTerminate(\"ERROR\");\n break;\n }\n };\n newWorker.onerror = (e) => {\n const { reject = () => {\n } } = promise.value;\n e.preventDefault();\n reject(e);\n workerTerminate(\"ERROR\");\n };\n if (timeout) {\n timeoutId.value = setTimeout(\n () => workerTerminate(\"TIMEOUT_EXPIRED\"),\n timeout\n );\n }\n return newWorker;\n };\n const callWorker = (...fnArgs) => new Promise((resolve, reject) => {\n var _a;\n promise.value = {\n resolve,\n reject\n };\n (_a = worker.value) == null ? void 0 : _a.postMessage([[...fnArgs]]);\n workerStatus.value = \"RUNNING\";\n });\n const workerFn = (...fnArgs) => {\n if (workerStatus.value === \"RUNNING\") {\n console.error(\n \"[useWebWorkerFn] You can only run one instance of the worker at a time.\"\n );\n return Promise.reject();\n }\n worker.value = generateWorker();\n return callWorker(...fnArgs);\n };\n return {\n workerFn,\n workerStatus,\n workerTerminate\n };\n}\n\nfunction useWindowFocus(options = {}) {\n const { window = defaultWindow } = options;\n if (!window)\n return ref(false);\n const focused = ref(window.document.hasFocus());\n useEventListener(window, \"blur\", () => {\n focused.value = false;\n });\n useEventListener(window, \"focus\", () => {\n focused.value = true;\n });\n return focused;\n}\n\nfunction useWindowScroll(options = {}) {\n const { window = defaultWindow, behavior = \"auto\" } = options;\n if (!window) {\n return {\n x: ref(0),\n y: ref(0)\n };\n }\n const internalX = ref(window.scrollX);\n const internalY = ref(window.scrollY);\n const x = computed({\n get() {\n return internalX.value;\n },\n set(x2) {\n scrollTo({ left: x2, behavior });\n }\n });\n const y = computed({\n get() {\n return internalY.value;\n },\n set(y2) {\n scrollTo({ top: y2, behavior });\n }\n });\n useEventListener(\n window,\n \"scroll\",\n () => {\n internalX.value = window.scrollX;\n internalY.value = window.scrollY;\n },\n {\n capture: false,\n passive: true\n }\n );\n return { x, y };\n}\n\nfunction useWindowSize(options = {}) {\n const {\n window = defaultWindow,\n initialWidth = Number.POSITIVE_INFINITY,\n initialHeight = Number.POSITIVE_INFINITY,\n listenOrientation = true,\n includeScrollbar = true,\n type = \"inner\"\n } = options;\n const width = ref(initialWidth);\n const height = ref(initialHeight);\n const update = () => {\n if (window) {\n if (type === \"outer\") {\n width.value = window.outerWidth;\n height.value = window.outerHeight;\n } else if (includeScrollbar) {\n width.value = window.innerWidth;\n height.value = window.innerHeight;\n } else {\n width.value = window.document.documentElement.clientWidth;\n height.value = window.document.documentElement.clientHeight;\n }\n }\n };\n update();\n tryOnMounted(update);\n useEventListener(\"resize\", update, { passive: true });\n if (listenOrientation) {\n const matches = useMediaQuery(\"(orientation: portrait)\");\n watch(matches, () => update());\n }\n return { width, height };\n}\n\nexport { DefaultMagicKeysAliasMap, StorageSerializers, TransitionPresets, computedAsync as asyncComputed, breakpointsAntDesign, breakpointsBootstrapV5, breakpointsElement, breakpointsMasterCss, breakpointsPrimeFlex, breakpointsQuasar, breakpointsSematic, breakpointsTailwind, breakpointsVuetify, breakpointsVuetifyV2, breakpointsVuetifyV3, cloneFnJSON, computedAsync, computedInject, createFetch, createReusableTemplate, createTemplatePromise, createUnrefFn, customStorageEventName, defaultDocument, defaultLocation, defaultNavigator, defaultWindow, executeTransition, formatTimeAgo, getSSRHandler, mapGamepadToXbox360Controller, onClickOutside, onKeyDown, onKeyPressed, onKeyStroke, onKeyUp, onLongPress, onStartTyping, setSSRHandler, templateRef, unrefElement, useActiveElement, useAnimate, useAsyncQueue, useAsyncState, useBase64, useBattery, useBluetooth, useBreakpoints, useBroadcastChannel, useBrowserLocation, useCached, useClipboard, useClipboardItems, useCloned, useColorMode, useConfirmDialog, useCssVar, useCurrentElement, useCycleList, useDark, useDebouncedRefHistory, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDisplayMedia, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementByPoint, useElementHover, useElementSize, useElementVisibility, useEventBus, useEventListener, useEventSource, useEyeDropper, useFavicon, useFetch, useFileDialog, useFileSystemAccess, useFocus, useFocusWithin, useFps, useFullscreen, useGamepad, useGeolocation, useIdle, useImage, useInfiniteScroll, useIntersectionObserver, useKeyModifier, useLocalStorage, useMagicKeys, useManualRefHistory, useMediaControls, useMediaQuery, useMemoize, useMemory, useMounted, useMouse, useMouseInElement, useMousePressed, useMutationObserver, useNavigatorLanguage, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, useParallax, useParentElement, usePerformanceObserver, usePermission, usePointer, usePointerLock, usePointerSwipe, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePreferredLanguages, usePreferredReducedMotion, usePrevious, useRafFn, useRefHistory, useResizeObserver, useScreenOrientation, useScreenSafeArea, useScriptTag, useScroll, useScrollLock, useSessionStorage, useShare, useSorted, useSpeechRecognition, useSpeechSynthesis, useStepper, useStorage, useStorageAsync, useStyleTag, useSupported, useSwipe, useTemplateRefsList, useTextDirection, useTextSelection, useTextareaAutosize, useThrottledRefHistory, useTimeAgo, useTimeoutPoll, useTimestamp, useTitle, useTransition, useUrlSearchParams, useUserMedia, useVModel, useVModels, useVibrate, useVirtualList, useWakeLock, useWebNotification, useWebSocket, useWebWorker, useWebWorkerFn, useWindowFocus, useWindowScroll, useWindowSize };\n","<script setup>\n// [TODO] Use Teleport to move the modal to the end of the body\nimport { ref, computed, defineEmits, onMounted } from 'vue';\nimport { useEventListener } from '@vueuse/core';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst { modalType, closeOnBackdropClick, onClose } = defineProps({\n closeOnBackdropClick: { type: Boolean, default: true },\n showCloseButton: { type: Boolean, default: true },\n onClose: { type: Function, required: true },\n fullWidth: { type: Boolean, default: false },\n modalType: { type: String, default: 'centered' },\n size: { type: String, default: '' },\n});\n\nconst emit = defineEmits(['close']);\nconst show = defineModel('show', { type: Boolean, default: false });\n\nconst modalClassName = computed(() => {\n const modalClassNameMap = {\n centered: '',\n 'right-aligned': 'right-aligned',\n };\n\n return `modal-mask skip-context-menu ${modalClassNameMap[modalType] || ''}`;\n});\n\n// [TODO] Revisit this logic to use outside click directive\nconst mousedDownOnBackdrop = ref(false);\n\nconst handleMouseDown = () => {\n mousedDownOnBackdrop.value = true;\n};\n\nconst close = () => {\n show.value = false;\n emit('close');\n onClose();\n};\n\nconst onMouseUp = () => {\n if (mousedDownOnBackdrop.value) {\n mousedDownOnBackdrop.value = false;\n if (closeOnBackdropClick) {\n close();\n }\n }\n};\n\nconst onKeydown = e => {\n if (show.value && e.code === 'Escape') {\n close();\n e.stopPropagation();\n }\n};\n\nuseEventListener(document.body, 'mouseup', onMouseUp);\nuseEventListener(document, 'keydown', onKeydown);\n\nonMounted(() => {\n if (import.meta.env.DEV && onClose && typeof onClose === 'function') {\n // eslint-disable-next-line no-console\n console.warn(\n \"[DEPRECATED] The 'onClose' prop is deprecated. Please use the 'close' event instead.\"\n );\n }\n});\n</script>\n\n<template>\n <transition name=\"modal-fade\">\n <div\n v-if=\"show\"\n :class=\"modalClassName\"\n transition=\"modal\"\n @mousedown=\"handleMouseDown\"\n >\n <div\n class=\"relative max-h-full overflow-auto bg-n-alpha-3 shadow-md modal-container rtl:text-right skip-context-menu\"\n :class=\"{\n 'rounded-xl w-[37.5rem]': !fullWidth,\n 'items-center rounded-none flex h-full justify-center w-full':\n fullWidth,\n [size]: true,\n }\"\n @mouse.stop\n @mousedown=\"event => event.stopPropagation()\"\n >\n <Button\n v-if=\"showCloseButton\"\n ghost\n slate\n icon=\"i-lucide-x\"\n class=\"absolute z-10 ltr:right-2 rtl:left-2 top-2\"\n @click=\"close\"\n />\n <slot />\n </div>\n </div>\n </transition>\n</template>\n\n<style lang=\"scss\">\n.modal-mask {\n @apply flex items-center justify-center bg-n-alpha-black2 backdrop-blur-[4px] z-[9990] h-full left-0 fixed top-0 w-full;\n\n .modal-container {\n &.medium {\n @apply max-w-[80%] w-[56.25rem];\n }\n\n // .content-box {\n // @apply h-auto p-0;\n // }\n .content {\n @apply p-8;\n }\n\n form,\n .modal-content {\n @apply pt-4 pb-8 px-8 self-center;\n\n a {\n @apply p-4;\n }\n }\n }\n}\n\n.modal-big {\n @apply w-full;\n}\n\n.modal-mask.right-aligned {\n @apply justify-end;\n\n .modal-container {\n @apply rounded-none h-full w-[30rem];\n }\n}\n\n.modal-enter,\n.modal-leave {\n @apply opacity-0;\n}\n\n.modal-enter .modal-container,\n.modal-leave .modal-container {\n transform: scale(1.1);\n}\n</style>\n","<script>\nimport { required } from '@vuelidate/validators';\nimport { useVuelidate } from '@vuelidate/core';\nimport Modal from '../../Modal.vue';\n\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n Modal,\n NextButton,\n },\n props: {\n show: { type: Boolean, default: false },\n title: { type: String, default: '' },\n message: { type: String, default: '' },\n confirmText: { type: String, default: '' },\n rejectText: { type: String, default: '' },\n confirmValue: { type: String, default: '' },\n confirmPlaceHolderText: { type: String, default: '' },\n },\n emits: ['onClose', 'onConfirm', 'update:show'],\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n value: '',\n };\n },\n validations: {\n value: {\n required,\n isEqual(value) {\n return value === this.confirmValue;\n },\n },\n },\n computed: {\n localShow: {\n get() {\n return this.show;\n },\n set(value) {\n this.$emit('update:show', value);\n },\n },\n },\n methods: {\n closeModal() {\n this.value = '';\n this.$emit('onClose');\n },\n onConfirm() {\n this.$emit('onConfirm');\n },\n },\n};\n</script>\n\n<template>\n <Modal v-model:show=\"localShow\" :on-close=\"closeModal\">\n <woot-modal-header :header-title=\"title\" :header-content=\"message\" />\n <form @submit.prevent=\"onConfirm\">\n <woot-input\n v-model=\"value\"\n type=\"text\"\n :class=\"{ error: v$.value.$error }\"\n :placeholder=\"confirmPlaceHolderText\"\n @blur=\"v$.value.$touch\"\n />\n <div class=\"flex items-center justify-end gap-2\">\n <NextButton\n faded\n slate\n type=\"reset\"\n :label=\"rejectText\"\n @click.prevent=\"closeModal\"\n />\n <NextButton\n ruby\n type=\"submit\"\n :label=\"confirmText\"\n :disabled=\"v$.value.$invalid\"\n />\n </div>\n </form>\n </Modal>\n</template>\n","<script>\nimport Modal from '../../Modal.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n Modal,\n NextButton,\n },\n props: {\n title: {\n type: String,\n default: 'This is a title',\n },\n description: {\n type: String,\n default: 'This is your description',\n },\n confirmLabel: {\n type: String,\n default: 'Yes',\n },\n cancelLabel: {\n type: String,\n default: 'No',\n },\n },\n data: () => ({\n show: false,\n resolvePromise: undefined,\n rejectPromise: undefined,\n }),\n\n methods: {\n showConfirmation() {\n this.show = true;\n return new Promise((resolve, reject) => {\n this.resolvePromise = resolve;\n this.rejectPromise = reject;\n });\n },\n confirm() {\n this.resolvePromise(true);\n this.show = false;\n },\n\n cancel() {\n this.resolvePromise(false);\n this.show = false;\n },\n },\n};\n</script>\n\n<template>\n <Modal v-model:show=\"show\" :on-close=\"cancel\">\n <div class=\"h-auto overflow-auto flex flex-col\">\n <woot-modal-header :header-title=\"title\" :header-content=\"description\" />\n <div class=\"flex flex-row justify-end gap-2 py-4 px-6 w-full\">\n <NextButton faded type=\"reset\" :label=\"cancelLabel\" @click=\"cancel\" />\n <NextButton type=\"submit\" :label=\"confirmLabel\" @click=\"confirm\" />\n </div>\n </div>\n </Modal>\n</template>\n","<script setup>\nimport Modal from '../../Modal.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\ndefineProps({\n onClose: { type: Function, default: () => {} },\n onConfirm: { type: Function, default: () => {} },\n title: { type: String, default: '' },\n message: { type: String, default: '' },\n messageValue: { type: String, default: '' },\n confirmText: { type: String, default: '' },\n rejectText: { type: String, default: '' },\n});\n\nconst show = defineModel('show', { type: Boolean, default: false });\n</script>\n\n<template>\n <Modal v-model:show=\"show\" :on-close=\"onClose\">\n <woot-modal-header\n :header-title=\"title\"\n :header-content=\"message\"\n :header-content-value=\"messageValue\"\n />\n <div class=\"flex items-center justify-end gap-2 p-8\">\n <Button faded slate type=\"reset\" :label=\"rejectText\" @click=\"onClose\" />\n <Button ruby type=\"submit\" :label=\"confirmText\" @click=\"onConfirm\" />\n </div>\n </Modal>\n</template>\n","<script>\nexport default {\n name: 'WootDropdownItem',\n componentName: 'WootDropdownMenu',\n props: {\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n};\n</script>\n\n<template>\n <li\n class=\"mb-1 list-none dropdown-menu__item\"\n :class=\"{\n 'is-disabled': disabled,\n }\"\n :tabindex=\"disabled ? null : -1\"\n :aria-disabled=\"disabled\"\n >\n <slot />\n </li>\n</template>\n\n<style lang=\"scss\" scoped>\n.dropdown-menu__item {\n ::v-deep {\n a,\n .button {\n @apply inline-flex whitespace-nowrap w-full text-left rtl:text-right;\n }\n }\n}\n\n// A hacky fix to remove the background that came from the foundation styles node module file\n// Can be removed once we remove the foundation styles node module\n.dropdown.menu {\n // Top-level item\n > li > a {\n background: transparent;\n padding: 4px 10.8px;\n }\n}\n</style>\n","<script setup>\nimport { ref } from 'vue';\nimport { useKeyboardEvents } from 'dashboard/composables/useKeyboardEvents';\n\ndefineProps({\n placement: {\n type: String,\n default: 'top',\n },\n});\n\nconst dropdownMenuRef = ref(null);\n\nconst dropdownMenuButtons = () => {\n return dropdownMenuRef.value.querySelectorAll(\n 'ul.dropdown li.dropdown-menu__item .button'\n );\n};\n\nconst getActiveButtonIndex = menuButtons => {\n const focusedButton = dropdownMenuRef.value.querySelector(\n 'ul.dropdown li.dropdown-menu__item .button:focus'\n );\n return Array.from(menuButtons).indexOf(focusedButton);\n};\n\nconst focusButton = (menuButtons, newIndex) => {\n if (menuButtons.length === 0) return;\n menuButtons[newIndex].focus();\n};\n\nconst focusPreviousButton = menuButtons => {\n const activeIndex = getActiveButtonIndex(menuButtons);\n const newIndex = activeIndex >= 1 ? activeIndex - 1 : menuButtons.length - 1;\n focusButton(menuButtons, newIndex);\n};\n\nconst focusNextButton = menuButtons => {\n const activeIndex = getActiveButtonIndex(menuButtons);\n const newIndex = activeIndex === menuButtons.length - 1 ? 0 : activeIndex + 1;\n focusButton(menuButtons, newIndex);\n};\n\nconst keyboardEvents = {\n ArrowUp: {\n action: () => focusPreviousButton(dropdownMenuButtons()),\n allowOnFocusedInput: true,\n },\n ArrowDown: {\n action: () => focusNextButton(dropdownMenuButtons()),\n allowOnFocusedInput: true,\n },\n};\n\nuseKeyboardEvents(keyboardEvents);\n</script>\n\n<template>\n <ul\n ref=\"dropdownMenuRef\"\n class=\"dropdown menu vertical\"\n :class=\"[placement && `dropdown--${placement}`]\"\n >\n <slot />\n </ul>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nexport default {\n props: {\n featureKey: {\n type: String,\n required: true,\n },\n },\n computed: {\n ...mapGetters({\n isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount',\n accountId: 'getCurrentAccountId',\n }),\n isFeatureEnabled() {\n return this.isFeatureEnabledonAccount(this.accountId, this.featureKey);\n },\n },\n};\n</script>\n\n<!-- eslint-disable-next-line vue/no-root-v-if -->\n<template>\n <div v-if=\"isFeatureEnabled\">\n <slot />\n </div>\n</template>\n","<script>\n/**\n * @deprecated This component is deprecated and will be removed in the next major version.\n * Please use v3/components/Form/Input.vue instead\n */\nexport default {\n props: {\n label: {\n type: String,\n default: '',\n },\n modelValue: {\n type: [String, Number],\n default: '',\n },\n type: {\n type: String,\n default: 'text',\n },\n placeholder: {\n type: String,\n default: '',\n },\n helpText: {\n type: String,\n default: '',\n },\n error: {\n type: String,\n default: '',\n },\n readonly: {\n type: Boolean,\n default: false,\n },\n styles: {\n type: Object,\n default: () => {},\n },\n },\n emits: ['update:modelValue', 'input', 'blur'],\n mounted() {\n if (import.meta.env.DEV) {\n // eslint-disable-next-line no-console\n console.warn(\n '[DEPRECATED] <WootInput> has be deprecated and will be removed soon. Please use v3/components/Form/Input.vue instead'\n );\n }\n },\n methods: {\n onChange(e) {\n this.$emit('input', e.target.value);\n this.$emit('update:modelValue', e.target.value);\n },\n onBlur(e) {\n this.$emit('blur', e.target.value);\n },\n },\n};\n</script>\n\n<template>\n <label class=\"input-container\">\n <span v-if=\"label\">{{ label }}</span>\n <input\n :value=\"modelValue\"\n :type=\"type\"\n :placeholder=\"placeholder\"\n :readonly=\"readonly\"\n :style=\"styles\"\n @input=\"onChange\"\n @blur=\"onBlur\"\n />\n <p v-if=\"helpText\" class=\"help-text\">{{ helpText }}</p>\n <span v-if=\"error\" class=\"message\">\n {{ error }}\n </span>\n <slot name=\"masked\" />\n </label>\n</template>\n\n<style scoped lang=\"scss\">\n.help-text {\n @apply mt-0.5 text-xs not-italic text-n-slate-11;\n}\n\n.message {\n margin-top: 0 !important;\n}\n</style>\n","// This file is a workaround for a bug in web browsers' \"native\"\n// ES6 importing system which is uncapable of importing \"*.json\" files.\n// https://github.com/catamphetamine/libphonenumber-js/issues/239\nexport default {\"version\":4,\"country_calling_codes\":{\"1\":[\"US\",\"AG\",\"AI\",\"AS\",\"BB\",\"BM\",\"BS\",\"CA\",\"DM\",\"DO\",\"GD\",\"GU\",\"JM\",\"KN\",\"KY\",\"LC\",\"MP\",\"MS\",\"PR\",\"SX\",\"TC\",\"TT\",\"VC\",\"VG\",\"VI\"],\"7\":[\"RU\",\"KZ\"],\"20\":[\"EG\"],\"27\":[\"ZA\"],\"30\":[\"GR\"],\"31\":[\"NL\"],\"32\":[\"BE\"],\"33\":[\"FR\"],\"34\":[\"ES\"],\"36\":[\"HU\"],\"39\":[\"IT\",\"VA\"],\"40\":[\"RO\"],\"41\":[\"CH\"],\"43\":[\"AT\"],\"44\":[\"GB\",\"GG\",\"IM\",\"JE\"],\"45\":[\"DK\"],\"46\":[\"SE\"],\"47\":[\"NO\",\"SJ\"],\"48\":[\"PL\"],\"49\":[\"DE\"],\"51\":[\"PE\"],\"52\":[\"MX\"],\"53\":[\"CU\"],\"54\":[\"AR\"],\"55\":[\"BR\"],\"56\":[\"CL\"],\"57\":[\"CO\"],\"58\":[\"VE\"],\"60\":[\"MY\"],\"61\":[\"AU\",\"CC\",\"CX\"],\"62\":[\"ID\"],\"63\":[\"PH\"],\"64\":[\"NZ\"],\"65\":[\"SG\"],\"66\":[\"TH\"],\"81\":[\"JP\"],\"82\":[\"KR\"],\"84\":[\"VN\"],\"86\":[\"CN\"],\"90\":[\"TR\"],\"91\":[\"IN\"],\"92\":[\"PK\"],\"93\":[\"AF\"],\"94\":[\"LK\"],\"95\":[\"MM\"],\"98\":[\"IR\"],\"211\":[\"SS\"],\"212\":[\"MA\",\"EH\"],\"213\":[\"DZ\"],\"216\":[\"TN\"],\"218\":[\"LY\"],\"220\":[\"GM\"],\"221\":[\"SN\"],\"222\":[\"MR\"],\"223\":[\"ML\"],\"224\":[\"GN\"],\"225\":[\"CI\"],\"226\":[\"BF\"],\"227\":[\"NE\"],\"228\":[\"TG\"],\"229\":[\"BJ\"],\"230\":[\"MU\"],\"231\":[\"LR\"],\"232\":[\"SL\"],\"233\":[\"GH\"],\"234\":[\"NG\"],\"235\":[\"TD\"],\"236\":[\"CF\"],\"237\":[\"CM\"],\"238\":[\"CV\"],\"239\":[\"ST\"],\"240\":[\"GQ\"],\"241\":[\"GA\"],\"242\":[\"CG\"],\"243\":[\"CD\"],\"244\":[\"AO\"],\"245\":[\"GW\"],\"246\":[\"IO\"],\"247\":[\"AC\"],\"248\":[\"SC\"],\"249\":[\"SD\"],\"250\":[\"RW\"],\"251\":[\"ET\"],\"252\":[\"SO\"],\"253\":[\"DJ\"],\"254\":[\"KE\"],\"255\":[\"TZ\"],\"256\":[\"UG\"],\"257\":[\"BI\"],\"258\":[\"MZ\"],\"260\":[\"ZM\"],\"261\":[\"MG\"],\"262\":[\"RE\",\"YT\"],\"263\":[\"ZW\"],\"264\":[\"NA\"],\"265\":[\"MW\"],\"266\":[\"LS\"],\"267\":[\"BW\"],\"268\":[\"SZ\"],\"269\":[\"KM\"],\"290\":[\"SH\",\"TA\"],\"291\":[\"ER\"],\"297\":[\"AW\"],\"298\":[\"FO\"],\"299\":[\"GL\"],\"350\":[\"GI\"],\"351\":[\"PT\"],\"352\":[\"LU\"],\"353\":[\"IE\"],\"354\":[\"IS\"],\"355\":[\"AL\"],\"356\":[\"MT\"],\"357\":[\"CY\"],\"358\":[\"FI\",\"AX\"],\"359\":[\"BG\"],\"370\":[\"LT\"],\"371\":[\"LV\"],\"372\":[\"EE\"],\"373\":[\"MD\"],\"374\":[\"AM\"],\"375\":[\"BY\"],\"376\":[\"AD\"],\"377\":[\"MC\"],\"378\":[\"SM\"],\"380\":[\"UA\"],\"381\":[\"RS\"],\"382\":[\"ME\"],\"383\":[\"XK\"],\"385\":[\"HR\"],\"386\":[\"SI\"],\"387\":[\"BA\"],\"389\":[\"MK\"],\"420\":[\"CZ\"],\"421\":[\"SK\"],\"423\":[\"LI\"],\"500\":[\"FK\"],\"501\":[\"BZ\"],\"502\":[\"GT\"],\"503\":[\"SV\"],\"504\":[\"HN\"],\"505\":[\"NI\"],\"506\":[\"CR\"],\"507\":[\"PA\"],\"508\":[\"PM\"],\"509\":[\"HT\"],\"590\":[\"GP\",\"BL\",\"MF\"],\"591\":[\"BO\"],\"592\":[\"GY\"],\"593\":[\"EC\"],\"594\":[\"GF\"],\"595\":[\"PY\"],\"596\":[\"MQ\"],\"597\":[\"SR\"],\"598\":[\"UY\"],\"599\":[\"CW\",\"BQ\"],\"670\":[\"TL\"],\"672\":[\"NF\"],\"673\":[\"BN\"],\"674\":[\"NR\"],\"675\":[\"PG\"],\"676\":[\"TO\"],\"677\":[\"SB\"],\"678\":[\"VU\"],\"679\":[\"FJ\"],\"680\":[\"PW\"],\"681\":[\"WF\"],\"682\":[\"CK\"],\"683\":[\"NU\"],\"685\":[\"WS\"],\"686\":[\"KI\"],\"687\":[\"NC\"],\"688\":[\"TV\"],\"689\":[\"PF\"],\"690\":[\"TK\"],\"691\":[\"FM\"],\"692\":[\"MH\"],\"850\":[\"KP\"],\"852\":[\"HK\"],\"853\":[\"MO\"],\"855\":[\"KH\"],\"856\":[\"LA\"],\"880\":[\"BD\"],\"886\":[\"TW\"],\"960\":[\"MV\"],\"961\":[\"LB\"],\"962\":[\"JO\"],\"963\":[\"SY\"],\"964\":[\"IQ\"],\"965\":[\"KW\"],\"966\":[\"SA\"],\"967\":[\"YE\"],\"968\":[\"OM\"],\"970\":[\"PS\"],\"971\":[\"AE\"],\"972\":[\"IL\"],\"973\":[\"BH\"],\"974\":[\"QA\"],\"975\":[\"BT\"],\"976\":[\"MN\"],\"977\":[\"NP\"],\"992\":[\"TJ\"],\"993\":[\"TM\"],\"994\":[\"AZ\"],\"995\":[\"GE\"],\"996\":[\"KG\"],\"998\":[\"UZ\"]},\"countries\":{\"AC\":[\"247\",\"00\",\"(?:[01589]\\\\d|[46])\\\\d{4}\",[5,6]],\"AD\":[\"376\",\"00\",\"(?:1|6\\\\d)\\\\d{7}|[135-9]\\\\d{5}\",[6,8,9],[[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"[135-9]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"1\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]]]],\"AE\":[\"971\",\"00\",\"(?:[4-7]\\\\d|9[0-689])\\\\d{7}|800\\\\d{2,9}|[2-4679]\\\\d{7}\",[5,6,7,8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{2,9})\",\"$1 $2\",[\"60|8\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[236]|[479][2-8]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{5})\",\"$1 $2 $3\",[\"[479]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"]],\"0\"],\"AF\":[\"93\",\"00\",\"[2-7]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-7]\"],\"0$1\"]],\"0\"],\"AG\":[\"1\",\"011\",\"(?:268|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([457]\\\\d{6})$|1\",\"268$1\",0,\"268\"],\"AI\":[\"1\",\"011\",\"(?:264|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2457]\\\\d{6})$|1\",\"264$1\",0,\"264\"],\"AL\":[\"355\",\"00\",\"(?:700\\\\d\\\\d|900)\\\\d{3}|8\\\\d{5,7}|(?:[2-5]|6\\\\d)\\\\d{7}\",[6,7,8,9],[[\"(\\\\d{3})(\\\\d{3,4})\",\"$1 $2\",[\"80|9\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"4[2-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2358][2-5]|4\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[23578]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"6\"],\"0$1\"]],\"0\"],\"AM\":[\"374\",\"00\",\"(?:[1-489]\\\\d|55|60|77)\\\\d{6}\",[8],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]0\"],\"0 $1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"2|3[12]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"1|47\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[3-9]\"],\"0$1\"]],\"0\"],\"AO\":[\"244\",\"00\",\"[29]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[29]\"]]]],\"AR\":[\"54\",\"00\",\"(?:11|[89]\\\\d\\\\d)\\\\d{8}|[2368]\\\\d{9}\",[10,11],[[\"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$1 $2-$3\",[\"2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9])\",\"2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8]))|2(?:2[24-9]|3[1-59]|47)\",\"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5[56][46]|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|58|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|54(?:4|5[13-7]|6[89])|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:454|85[56])[46]|3(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"],\"0$1\",1],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2-$3\",[\"1\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[68]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2-$3\",[\"[23]\"],\"0$1\",1],[\"(\\\\d)(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$2 15-$3-$4\",[\"9(?:2[2-469]|3[3-578])\",\"9(?:2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9]))\",\"9(?:2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8])))|92(?:2[24-9]|3[1-59]|47)\",\"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5(?:[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|5(?:4(?:4|5[13-7]|6[89])|[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"],\"0$1\",0,\"$1 $2 $3-$4\"],[\"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$2 15-$3-$4\",[\"91\"],\"0$1\",0,\"$1 $2 $3-$4\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1-$2-$3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$2 15-$3-$4\",[\"9\"],\"0$1\",0,\"$1 $2 $3-$4\"]],\"0\",0,\"0?(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1267])|3(?:02?|1[467]|2[03-6]|3[13-8]|[49][2-6]|5[2-8]|[67])|4(?:7[3-578]|9)|6(?:[0136]|2[24-6]|4[6-8]?|5[15-8])|80|9(?:0[1-3]|[19]|2\\\\d|3[1-6]|4[02568]?|5[2-4]|6[2-46]|72?|8[23]?))|3(?:3(?:2[79]|6|8[2578])|4(?:0[0-24-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6[02-9]|7[126]|8[2379]?|9[1-36-8])|5(?:1|2[1245]|3[237]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|6[24]|7(?:[069]|1[1568]|2[15]|3[145]|4[13]|5[14-8]|7[2-57]|8[126])|8(?:[01]|2[15-7]|3[2578]?|4[13-6]|5[4-8]?|6[1-357-9]|7[36-8]?|8[5-8]?|9[124])))15)?\",\"9$1\"],\"AS\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|684|900)\\\\d{7}\",[10],0,\"1\",0,\"([267]\\\\d{6})$|1\",\"684$1\",0,\"684\"],\"AT\":[\"43\",\"00\",\"1\\\\d{3,12}|2\\\\d{6,12}|43(?:(?:0\\\\d|5[02-9])\\\\d{3,9}|2\\\\d{4,5}|[3467]\\\\d{4}|8\\\\d{4,6}|9\\\\d{4,7})|5\\\\d{4,12}|8\\\\d{7,12}|9\\\\d{8,12}|(?:[367]\\\\d|4[0-24-9])\\\\d{4,11}\",[4,5,6,7,8,9,10,11,12,13],[[\"(\\\\d)(\\\\d{3,12})\",\"$1 $2\",[\"1(?:11|[2-9])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})\",\"$1 $2\",[\"517\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,5})\",\"$1 $2\",[\"5[079]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,10})\",\"$1 $2\",[\"(?:31|4)6|51|6(?:5[0-3579]|[6-9])|7(?:20|32|8)|[89]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3,9})\",\"$1 $2\",[\"[2-467]|5[2-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4,7})\",\"$1 $2 $3\",[\"5\"],\"0$1\"]],\"0\"],\"AU\":[\"61\",\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"1(?:[0-79]\\\\d{7}(?:\\\\d(?:\\\\d{2})?)?|8[0-24-9]\\\\d{7})|[2-478]\\\\d{8}|1\\\\d{4,7}\",[5,6,7,8,9,10,12],[[\"(\\\\d{2})(\\\\d{3,4})\",\"$1 $2\",[\"16\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"16\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"14|4\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[2378]\"],\"(0$1)\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1(?:30|[89])\"]]],\"0\",0,\"(183[12])|0\",0,0,0,[[\"(?:(?:(?:2(?:[0-26-9]\\\\d|3[0-8]|4[02-9]|5[0135-9])|7(?:[013-57-9]\\\\d|2[0-8]))\\\\d|3(?:(?:[0-3589]\\\\d|6[1-9]|7[0-35-9])\\\\d|4(?:[0-578]\\\\d|90)))\\\\d\\\\d|8(?:51(?:0(?:0[03-9]|[12479]\\\\d|3[2-9]|5[0-8]|6[1-9]|8[0-7])|1(?:[0235689]\\\\d|1[0-69]|4[0-589]|7[0-47-9])|2(?:0[0-79]|[18][13579]|2[14-9]|3[0-46-9]|[4-6]\\\\d|7[89]|9[0-4])|3\\\\d\\\\d)|(?:6[0-8]|[78]\\\\d)\\\\d{3}|9(?:[02-9]\\\\d{3}|1(?:(?:[0-58]\\\\d|6[0135-9])\\\\d|7(?:0[0-24-9]|[1-9]\\\\d)|9(?:[0-46-9]\\\\d|5[0-79])))))\\\\d{3}\",[9]],[\"4(?:79[01]|83[0-389]|94[0-4])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|5[0-25-9]|7[02-8]|8[0-24-9]|9[0-37-9])\\\\d{6}\",[9]],[\"180(?:0\\\\d{3}|2)\\\\d{3}\",[7,10]],[\"190[0-26]\\\\d{6}\",[10]],0,0,0,[\"163\\\\d{2,6}\",[5,6,7,8,9]],[\"14(?:5(?:1[0458]|[23][458])|71\\\\d)\\\\d{4}\",[9]],[\"13(?:00\\\\d{6}(?:\\\\d{2})?|45[0-4]\\\\d{3})|13\\\\d{4}\",[6,8,10,12]]],\"0011\"],\"AW\":[\"297\",\"00\",\"(?:[25-79]\\\\d\\\\d|800)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[25-9]\"]]]],\"AX\":[\"358\",\"00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))\",\"2\\\\d{4,9}|35\\\\d{4,5}|(?:60\\\\d\\\\d|800)\\\\d{4,6}|7\\\\d{5,11}|(?:[14]\\\\d|3[0-46-9]|50)\\\\d{4,8}\",[5,6,7,8,9,10,11,12],0,\"0\",0,0,0,0,\"18\",0,\"00\"],\"AZ\":[\"994\",\"00\",\"365\\\\d{6}|(?:[124579]\\\\d|60|88)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"90\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[28]|2|365|46\",\"1[28]|2|365[45]|46\",\"1[28]|2|365(?:4|5[02])|46\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[13-9]\"],\"0$1\"]],\"0\"],\"BA\":[\"387\",\"00\",\"6\\\\d{8}|(?:[35689]\\\\d|49|70)\\\\d{6}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6[1-3]|[7-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2-$3\",[\"[3-5]|6[56]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"6\"],\"0$1\"]],\"0\"],\"BB\":[\"1\",\"011\",\"(?:246|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"246$1\",0,\"246\"],\"BD\":[\"880\",\"00\",\"[1-469]\\\\d{9}|8[0-79]\\\\d{7,8}|[2-79]\\\\d{8}|[2-9]\\\\d{7}|[3-9]\\\\d{6}|[57-9]\\\\d{5}\",[6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{4,6})\",\"$1-$2\",[\"31[5-8]|[459]1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1-$2\",[\"3(?:[67]|8[013-9])|4(?:6[168]|7|[89][18])|5(?:6[128]|9)|6(?:[15]|28|4[14])|7[2-589]|8(?:0[014-9]|[12])|9[358]|(?:3[2-5]|4[235]|5[2-578]|6[0389]|76|8[3-7]|9[24])1|(?:44|66)[01346-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3,6})\",\"$1-$2\",[\"[13-9]|2[23]\"],\"0$1\"],[\"(\\\\d)(\\\\d{7,8})\",\"$1-$2\",[\"2\"],\"0$1\"]],\"0\"],\"BE\":[\"32\",\"00\",\"4\\\\d{8}|[1-9]\\\\d{7}\",[8,9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:80|9)0\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[239]|4[23]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[15-8]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"4\"],\"0$1\"]],\"0\"],\"BF\":[\"226\",\"00\",\"[025-7]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[025-7]\"]]]],\"BG\":[\"359\",\"00\",\"00800\\\\d{7}|[2-7]\\\\d{6,7}|[89]\\\\d{6,8}|2\\\\d{5}\",[6,7,8,9,12],[[\"(\\\\d)(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"43[1-6]|70[1-9]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\",\"$1 $2 $3\",[\"[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:70|8)0\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3\",[\"43[1-7]|7\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[48]|9[08]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],\"0\"],\"BH\":[\"973\",\"00\",\"[136-9]\\\\d{7}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[13679]|8[02-4679]\"]]]],\"BI\":[\"257\",\"00\",\"(?:[267]\\\\d|31)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2367]\"]]]],\"BJ\":[\"229\",\"00\",\"[24-689]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[24-689]\"]]]],\"BL\":[\"590\",\"00\",\"590\\\\d{6}|(?:69|80|9\\\\d)\\\\d{7}\",[9],0,\"0\",0,0,0,0,0,[[\"590(?:2[7-9]|3[3-7]|5[12]|87)\\\\d{4}\"],[\"69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))\\\\d{4}\"],[\"80[0-5]\\\\d{6}\"],0,0,0,0,0,[\"9(?:(?:39[5-7]|76[018])\\\\d|475[0-5])\\\\d{4}\"]]],\"BM\":[\"1\",\"011\",\"(?:441|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"441$1\",0,\"441\"],\"BN\":[\"673\",\"00\",\"[2-578]\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-578]\"]]]],\"BO\":[\"591\",\"00(?:1\\\\d)?\",\"8001\\\\d{5}|(?:[2-467]\\\\d|50)\\\\d{6}\",[8,9],[[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"[235]|4[46]\"]],[\"(\\\\d{8})\",\"$1\",[\"[67]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]],\"0\",0,\"0(1\\\\d)?\"],\"BQ\":[\"599\",\"00\",\"(?:[34]1|7\\\\d)\\\\d{5}\",[7],0,0,0,0,0,0,\"[347]\"],\"BR\":[\"55\",\"00(?:1[245]|2[1-35]|31|4[13]|[56]5|99)\",\"(?:[1-46-9]\\\\d\\\\d|5(?:[0-46-9]\\\\d|5[0-46-9]))\\\\d{8}|[1-9]\\\\d{9}|[3589]\\\\d{8}|[34]\\\\d{7}\",[8,9,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"300|4(?:0[02]|37)\",\"4(?:02|37)0|[34]00\"]],[\"(\\\\d{3})(\\\\d{2,3})(\\\\d{4})\",\"$1 $2 $3\",[\"(?:[358]|90)0\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2-$3\",[\"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-57]\"],\"($1)\"],[\"(\\\\d{2})(\\\\d{5})(\\\\d{4})\",\"$1 $2-$3\",[\"[16][1-9]|[2-57-9]\"],\"($1)\"]],\"0\",0,\"(?:0|90)(?:(1[245]|2[1-35]|31|4[13]|[56]5|99)(\\\\d{10,11}))?\",\"$2\"],\"BS\":[\"1\",\"011\",\"(?:242|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([3-8]\\\\d{6})$|1\",\"242$1\",0,\"242\"],\"BT\":[\"975\",\"00\",\"[17]\\\\d{7}|[2-8]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-68]|7[246]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[67]|7\"]]]],\"BW\":[\"267\",\"00\",\"(?:0800|(?:[37]|800)\\\\d)\\\\d{6}|(?:[2-6]\\\\d|90)\\\\d{5}\",[7,8,10],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"90\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[24-6]|3[15-9]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[37]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]]],\"BY\":[\"375\",\"810\",\"(?:[12]\\\\d|33|44|902)\\\\d{7}|8(?:0[0-79]\\\\d{5,7}|[1-7]\\\\d{9})|8(?:1[0-489]|[5-79]\\\\d)\\\\d{7}|8[1-79]\\\\d{6,7}|8[0-79]\\\\d{5}|8\\\\d{5}\",[6,7,8,9,10,11],[[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"800\"],\"8 $1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,4})\",\"$1 $2 $3\",[\"800\"],\"8 $1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{3})\",\"$1 $2-$3\",[\"1(?:5[169]|6[3-5]|7[179])|2(?:1[35]|2[34]|3[3-5])\",\"1(?:5[169]|6(?:3[1-3]|4|5[125])|7(?:1[3-9]|7[0-24-6]|9[2-7]))|2(?:1[35]|2[34]|3[3-5])\"],\"8 0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"1(?:[56]|7[467])|2[1-3]\"],\"8 0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[1-4]\"],\"8 0$1\"],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"8 $1\"]],\"8\",0,\"0|80?\",0,0,0,0,\"8~10\"],\"BZ\":[\"501\",\"00\",\"(?:0800\\\\d|[2-8])\\\\d{6}\",[7,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[2-8]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1-$2-$3-$4\",[\"0\"]]]],\"CA\":[\"1\",\"011\",\"(?:[2-8]\\\\d|90)\\\\d{8}|3\\\\d{6}\",[7,10],0,\"1\",0,0,0,0,0,[[\"(?:2(?:04|[23]6|[48]9|50|63)|3(?:06|43|54|6[578]|82)|4(?:03|1[68]|[26]8|3[178]|50|74)|5(?:06|1[49]|48|79|8[147])|6(?:04|[18]3|39|47|72)|7(?:0[59]|42|53|78|8[02])|8(?:[06]7|19|25|7[39])|90[25])[2-9]\\\\d{6}\",[10]],[\"\",[10]],[\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",[10]],[\"900[2-9]\\\\d{6}\",[10]],[\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|(?:5(?:00|2[125-9]|33|44|66|77|88)|622)[2-9]\\\\d{6}\",[10]],0,[\"310\\\\d{4}\",[7]],0,[\"600[2-9]\\\\d{6}\",[10]]]],\"CC\":[\"61\",\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"1(?:[0-79]\\\\d{8}(?:\\\\d{2})?|8[0-24-9]\\\\d{7})|[148]\\\\d{8}|1\\\\d{5,7}\",[6,7,8,9,10,12],0,\"0\",0,\"([59]\\\\d{7})$|0\",\"8$1\",0,0,[[\"8(?:51(?:0(?:02|31|60|89)|1(?:18|76)|223)|91(?:0(?:1[0-2]|29)|1(?:[28]2|50|79)|2(?:10|64)|3(?:[06]8|22)|4[29]8|62\\\\d|70[23]|959))\\\\d{3}\",[9]],[\"4(?:79[01]|83[0-389]|94[0-4])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|5[0-25-9]|7[02-8]|8[0-24-9]|9[0-37-9])\\\\d{6}\",[9]],[\"180(?:0\\\\d{3}|2)\\\\d{3}\",[7,10]],[\"190[0-26]\\\\d{6}\",[10]],0,0,0,0,[\"14(?:5(?:1[0458]|[23][458])|71\\\\d)\\\\d{4}\",[9]],[\"13(?:00\\\\d{6}(?:\\\\d{2})?|45[0-4]\\\\d{3})|13\\\\d{4}\",[6,8,10,12]]],\"0011\"],\"CD\":[\"243\",\"00\",\"(?:(?:[189]|5\\\\d)\\\\d|2)\\\\d{7}|[1-68]\\\\d{6}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"88\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"[1-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"5\"],\"0$1\"]],\"0\"],\"CF\":[\"236\",\"00\",\"(?:[27]\\\\d{3}|8776)\\\\d{4}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[278]\"]]]],\"CG\":[\"242\",\"00\",\"222\\\\d{6}|(?:0\\\\d|80)\\\\d{7}\",[9],[[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[02]\"]]]],\"CH\":[\"41\",\"00\",\"8\\\\d{11}|[2-9]\\\\d{8}\",[9,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8[047]|90\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-79]|81\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"8\"],\"0$1\"]],\"0\"],\"CI\":[\"225\",\"00\",\"[02]\\\\d{9}\",[10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d)(\\\\d{5})\",\"$1 $2 $3 $4\",[\"2\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"0\"]]]],\"CK\":[\"682\",\"00\",\"[2-578]\\\\d{4}\",[5],[[\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"[2-578]\"]]]],\"CL\":[\"56\",\"(?:0|1(?:1[0-69]|2[02-5]|5[13-58]|69|7[0167]|8[018]))0\",\"12300\\\\d{6}|6\\\\d{9,10}|[2-9]\\\\d{8}\",[9,10,11],[[\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"219\",\"2196\"],\"($1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"44\"]],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2[1-36]\"],\"($1)\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"9[2-9]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"3[2-5]|[47]|5[1-3578]|6[13-57]|8(?:0[1-9]|[1-9])\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"60|8\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"60\"]]]],\"CM\":[\"237\",\"00\",\"[26]\\\\d{8}|88\\\\d{6,7}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"88\"]],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[26]|88\"]]]],\"CN\":[\"86\",\"00|1(?:[12]\\\\d|79)\\\\d\\\\d00\",\"(?:(?:1[03-689]|2\\\\d)\\\\d\\\\d|6)\\\\d{8}|1\\\\d{10}|[126]\\\\d{6}(?:\\\\d(?:\\\\d{2})?)?|86\\\\d{5,6}|(?:[3-579]\\\\d|8[0-57-9])\\\\d{5,9}\",[7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{5,6})\",\"$1 $2\",[\"(?:10|2[0-57-9])[19]|3(?:[157]|35|49|9[1-68])|4(?:1[124-9]|2[179]|6[47-9]|7|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:07|1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3|4[13]|5[1-5]|7[0-79]|9[0-35-9])|(?:4[35]|59|85)[1-9]\",\"(?:10|2[0-57-9])(?:1[02]|9[56])|8078|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))1\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|80781|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))12\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|807812|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:078|1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"3(?:[157]|35|49|9[1-68])|4(?:[17]|2[179]|6[47-9]|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])|(?:4[35]|59|85)[1-9]\",\"(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))[19]\",\"85[23](?:10|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:10|9[56])\",\"85[23](?:100|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:100|9[56])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"(?:4|80)0\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"10|2(?:[02-57-9]|1[1-9])\",\"10|2(?:[02-57-9]|1[1-9])\",\"10[0-79]|2(?:[02-57-9]|1[1-79])|(?:10|21)8(?:0[1-9]|[1-9])\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"3(?:[3-59]|7[02-68])|4(?:[26-8]|3[3-9]|5[2-9])|5(?:3[03-9]|[468]|7[028]|9[2-46-9])|6|7(?:[0-247]|3[04-9]|5[0-4689]|6[2368])|8(?:[1-358]|9[1-7])|9(?:[013479]|5[1-5])|(?:[34]1|55|79|87)[02-9]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{7,8})\",\"$1 $2\",[\"9\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"80\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-578]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"1[3-9]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"[12]\"],\"0$1\",1]],\"0\",0,\"(1(?:[12]\\\\d|79)\\\\d\\\\d)|0\",0,0,0,0,\"00\"],\"CO\":[\"57\",\"00(?:4(?:[14]4|56)|[579])\",\"60\\\\d{8}|(?:1\\\\d|[39])\\\\d{9}\",[10,11],[[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"6|90\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"3[0-357]|91\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{7})\",\"$1-$2-$3\",[\"1\"],\"0$1\",0,\"$1 $2 $3\"]],\"0\",0,\"0([3579]|4(?:[14]4|56))?\"],\"CR\":[\"506\",\"00\",\"(?:8\\\\d|90)\\\\d{8}|(?:[24-8]\\\\d{3}|3005)\\\\d{4}\",[8,10],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-7]|8[3-9]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[89]\"]]],0,0,\"(19(?:0[0-2468]|1[09]|20|66|77|99))\"],\"CU\":[\"53\",\"119\",\"(?:[2-7]|8\\\\d\\\\d)\\\\d{7}|[2-47]\\\\d{6}|[34]\\\\d{5}\",[6,7,8,10],[[\"(\\\\d{2})(\\\\d{4,6})\",\"$1 $2\",[\"2[1-4]|[34]\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{6,7})\",\"$1 $2\",[\"7\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"[56]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"8\"],\"0$1\"]],\"0\"],\"CV\":[\"238\",\"0\",\"(?:[2-59]\\\\d\\\\d|800)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[2-589]\"]]]],\"CW\":[\"599\",\"00\",\"(?:[34]1|60|(?:7|9\\\\d)\\\\d)\\\\d{5}\",[7,8],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[3467]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9[4-8]\"]]],0,0,0,0,0,\"[69]\"],\"CX\":[\"61\",\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"1(?:[0-79]\\\\d{8}(?:\\\\d{2})?|8[0-24-9]\\\\d{7})|[148]\\\\d{8}|1\\\\d{5,7}\",[6,7,8,9,10,12],0,\"0\",0,\"([59]\\\\d{7})$|0\",\"8$1\",0,0,[[\"8(?:51(?:0(?:01|30|59|88)|1(?:17|46|75)|2(?:22|35))|91(?:00[6-9]|1(?:[28]1|49|78)|2(?:09|63)|3(?:12|26|75)|4(?:56|97)|64\\\\d|7(?:0[01]|1[0-2])|958))\\\\d{3}\",[9]],[\"4(?:79[01]|83[0-389]|94[0-4])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|5[0-25-9]|7[02-8]|8[0-24-9]|9[0-37-9])\\\\d{6}\",[9]],[\"180(?:0\\\\d{3}|2)\\\\d{3}\",[7,10]],[\"190[0-26]\\\\d{6}\",[10]],0,0,0,0,[\"14(?:5(?:1[0458]|[23][458])|71\\\\d)\\\\d{4}\",[9]],[\"13(?:00\\\\d{6}(?:\\\\d{2})?|45[0-4]\\\\d{3})|13\\\\d{4}\",[6,8,10,12]]],\"0011\"],\"CY\":[\"357\",\"00\",\"(?:[279]\\\\d|[58]0)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[257-9]\"]]]],\"CZ\":[\"420\",\"00\",\"(?:[2-578]\\\\d|60)\\\\d{7}|9\\\\d{8,11}\",[9,10,11,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-8]|9[015-7]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"96\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]]]],\"DE\":[\"49\",\"00\",\"[2579]\\\\d{5,14}|49(?:[34]0|69|8\\\\d)\\\\d\\\\d?|49(?:37|49|60|7[089]|9\\\\d)\\\\d{1,3}|49(?:2[024-9]|3[2-689]|7[1-7])\\\\d{1,8}|(?:1|[368]\\\\d|4[0-8])\\\\d{3,13}|49(?:[015]\\\\d|2[13]|31|[46][1-8])\\\\d{1,9}\",[4,5,6,7,8,9,10,11,12,13,14,15],[[\"(\\\\d{2})(\\\\d{3,13})\",\"$1 $2\",[\"3[02]|40|[68]9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,12})\",\"$1 $2\",[\"2(?:0[1-389]|1[124]|2[18]|3[14])|3(?:[35-9][15]|4[015])|906|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1\",\"2(?:0[1-389]|12[0-8])|3(?:[35-9][15]|4[015])|906|2(?:[13][14]|2[18])|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2,11})\",\"$1 $2\",[\"[24-6]|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]\",\"[24-6]|3(?:3(?:0[1-467]|2[127-9]|3[124578]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|4[13578]|9[1346])|5(?:0[14]|2[1-3589]|6[1-4]|7[13468]|8[13568])|6(?:2[1-489]|3[124-6]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|6|7[1467]|8[136])|9(?:0[12479]|2[1358]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]|3[68]4[1347]|3(?:47|60)[1356]|3(?:3[46]|46|5[49])[1246]|3[4579]3[1357]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"138\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{2,10})\",\"$1 $2\",[\"3\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5,11})\",\"$1 $2\",[\"181\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{4,10})\",\"$1 $2 $3\",[\"1(?:3|80)|9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7,8})\",\"$1 $2\",[\"1[67]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7,12})\",\"$1 $2\",[\"8\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{6})\",\"$1 $2\",[\"185\",\"1850\",\"18500\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{7})\",\"$1 $2\",[\"18[68]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{7})\",\"$1 $2\",[\"15[1279]\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{6})\",\"$1 $2\",[\"15[03568]\",\"15(?:[0568]|31)\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{8})\",\"$1 $2\",[\"18\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{7,8})\",\"$1 $2 $3\",[\"1(?:6[023]|7)\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{7})\",\"$1 $2 $3\",[\"15[279]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{8})\",\"$1 $2 $3\",[\"15\"],\"0$1\"]],\"0\"],\"DJ\":[\"253\",\"00\",\"(?:2\\\\d|77)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[27]\"]]]],\"DK\":[\"45\",\"00\",\"[2-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-9]\"]]]],\"DM\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|767|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-7]\\\\d{6})$|1\",\"767$1\",0,\"767\"],\"DO\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,0,0,0,\"8001|8[024]9\"],\"DZ\":[\"213\",\"00\",\"(?:[1-4]|[5-79]\\\\d|80)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[1-4]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-8]\"],\"0$1\"]],\"0\"],\"EC\":[\"593\",\"00\",\"1\\\\d{9,10}|(?:[2-7]|9\\\\d)\\\\d{7}\",[8,9,10,11],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2-$3\",[\"[2-7]\"],\"(0$1)\",0,\"$1-$2-$3\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"1\"]]],\"0\"],\"EE\":[\"372\",\"00\",\"8\\\\d{9}|[4578]\\\\d{7}|(?:[3-8]\\\\d|90)\\\\d{5}\",[7,8,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[369]|4[3-8]|5(?:[0-2]|5[0-478]|6[45])|7[1-9]|88\",\"[369]|4[3-8]|5(?:[02]|1(?:[0-8]|95)|5[0-478]|6(?:4[0-4]|5[1-589]))|7[1-9]|88\"]],[\"(\\\\d{4})(\\\\d{3,4})\",\"$1 $2\",[\"[45]|8(?:00|[1-49])\",\"[45]|8(?:00[1-9]|[1-49])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]]],\"EG\":[\"20\",\"00\",\"[189]\\\\d{8,9}|[24-6]\\\\d{8}|[135]\\\\d{7}\",[8,9,10],[[\"(\\\\d)(\\\\d{7,8})\",\"$1 $2\",[\"[23]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6,7})\",\"$1 $2\",[\"1[35]|[4-6]|8[2468]|9[235-7]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{8})\",\"$1 $2\",[\"1\"],\"0$1\"]],\"0\"],\"EH\":[\"212\",\"00\",\"[5-8]\\\\d{8}\",[9],0,\"0\",0,0,0,0,\"528[89]\"],\"ER\":[\"291\",\"00\",\"[178]\\\\d{6}\",[7],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[178]\"],\"0$1\"]],\"0\"],\"ES\":[\"34\",\"00\",\"[5-9]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]00\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-9]\"]]]],\"ET\":[\"251\",\"00\",\"(?:11|[2-579]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-579]\"],\"0$1\"]],\"0\"],\"FI\":[\"358\",\"00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))\",\"[1-35689]\\\\d{4}|7\\\\d{10,11}|(?:[124-7]\\\\d|3[0-46-9])\\\\d{8}|[1-9]\\\\d{5,8}\",[5,6,7,8,9,10,11,12],[[\"(\\\\d{5})\",\"$1\",[\"20[2-59]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1 $2\",[\"(?:[1-3]0|[68])0|70[07-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4,8})\",\"$1 $2\",[\"[14]|2[09]|50|7[135]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6,10})\",\"$1 $2\",[\"7\"],\"0$1\"],[\"(\\\\d)(\\\\d{4,9})\",\"$1 $2\",[\"(?:1[49]|[2568])[1-8]|3(?:0[1-9]|[1-9])|9\"],\"0$1\"]],\"0\",0,0,0,0,\"1[03-79]|[2-9]\",0,\"00\"],\"FJ\":[\"679\",\"0(?:0|52)\",\"45\\\\d{5}|(?:0800\\\\d|[235-9])\\\\d{6}\",[7,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[235-9]|45\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"0\"]]],0,0,0,0,0,0,0,\"00\"],\"FK\":[\"500\",\"00\",\"[2-7]\\\\d{4}\",[5]],\"FM\":[\"691\",\"00\",\"(?:[39]\\\\d\\\\d|820)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[389]\"]]]],\"FO\":[\"298\",\"00\",\"[2-9]\\\\d{5}\",[6],[[\"(\\\\d{6})\",\"$1\",[\"[2-9]\"]]],0,0,\"(10(?:01|[12]0|88))\"],\"FR\":[\"33\",\"00\",\"[1-9]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0 $1\"],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[1-79]\"],\"0$1\"]],\"0\"],\"GA\":[\"241\",\"00\",\"(?:[067]\\\\d|11)\\\\d{6}|[2-7]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-7]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"0\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"11|[67]\"],\"0$1\"]],0,0,\"0(11\\\\d{6}|60\\\\d{6}|61\\\\d{6}|6[256]\\\\d{6}|7[467]\\\\d{6})\",\"$1\"],\"GB\":[\"44\",\"00\",\"[1-357-9]\\\\d{9}|[18]\\\\d{8}|8\\\\d{6}\",[7,9,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"800\",\"8001\",\"80011\",\"800111\",\"8001111\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"845\",\"8454\",\"84546\",\"845464\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"800\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{4,5})\",\"$1 $2\",[\"1(?:38|5[23]|69|76|94)\",\"1(?:(?:38|69)7|5(?:24|39)|768|946)\",\"1(?:3873|5(?:242|39[4-6])|(?:697|768)[347]|9467)\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5,6})\",\"$1 $2\",[\"1(?:[2-69][02-9]|[78])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[25]|7(?:0|6[02-9])\",\"[25]|7(?:0|6(?:[03-9]|2[356]))\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"7\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1389]\"],\"0$1\"]],\"0\",0,0,0,0,0,[[\"(?:1(?:1(?:3(?:[0-58]\\\\d\\\\d|73[0-35])|4(?:(?:[0-5]\\\\d|70)\\\\d|69[7-9])|(?:(?:5[0-26-9]|[78][0-49])\\\\d|6(?:[0-4]\\\\d|50))\\\\d)|(?:2(?:(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-47-9]|7[013-9]|9\\\\d)\\\\d|1(?:[0-7]\\\\d|8[0-3]))|(?:3(?:0\\\\d|1[0-8]|[25][02-9]|3[02-579]|[468][0-46-9]|7[1-35-79]|9[2-578])|4(?:0[03-9]|[137]\\\\d|[28][02-57-9]|4[02-69]|5[0-8]|[69][0-79])|5(?:0[1-35-9]|[16]\\\\d|2[024-9]|3[015689]|4[02-9]|5[03-9]|7[0-35-9]|8[0-468]|9[0-57-9])|6(?:0[034689]|1\\\\d|2[0-35689]|[38][013-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|9[0-24578])|7(?:0[0246-9]|2\\\\d|3[0236-8]|4[03-9]|5[0-46-9]|6[013-9]|7[0-35-9]|8[024-9]|9[02-9])|8(?:0[35-9]|2[1-57-9]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7\\\\d|8[02-9]|9[02569])|9(?:0[02-589]|[18]\\\\d|2[02-689]|3[1-57-9]|4[2-9]|5[0-579]|6[2-47-9]|7[0-24578]|9[2-57]))\\\\d)\\\\d)|2(?:0[013478]|3[0189]|4[017]|8[0-46-9]|9[0-2])\\\\d{3})\\\\d{4}|1(?:2(?:0(?:46[1-4]|87[2-9])|545[1-79]|76(?:2\\\\d|3[1-8]|6[1-6])|9(?:7(?:2[0-4]|3[2-5])|8(?:2[2-8]|7[0-47-9]|8[3-5])))|3(?:6(?:38[2-5]|47[23])|8(?:47[04-9]|64[0157-9]))|4(?:044[1-7]|20(?:2[23]|8\\\\d)|6(?:0(?:30|5[2-57]|6[1-8]|7[2-8])|140)|8(?:052|87[1-3]))|5(?:2(?:4(?:3[2-79]|6\\\\d)|76\\\\d)|6(?:26[06-9]|686))|6(?:06(?:4\\\\d|7[4-79])|295[5-7]|35[34]\\\\d|47(?:24|61)|59(?:5[08]|6[67]|74)|9(?:55[0-4]|77[23]))|7(?:26(?:6[13-9]|7[0-7])|(?:442|688)\\\\d|50(?:2[0-3]|[3-68]2|76))|8(?:27[56]\\\\d|37(?:5[2-5]|8[239])|843[2-58])|9(?:0(?:0(?:6[1-8]|85)|52\\\\d)|3583|4(?:66[1-8]|9(?:2[01]|81))|63(?:23|3[1-4])|9561))\\\\d{3}\",[9,10]],[\"7(?:457[0-57-9]|700[01]|911[028])\\\\d{5}|7(?:[1-3]\\\\d\\\\d|4(?:[0-46-9]\\\\d|5[0-689])|5(?:0[0-8]|[13-9]\\\\d|2[0-35-9])|7(?:0[1-9]|[1-7]\\\\d|8[02-9]|9[0-689])|8(?:[014-9]\\\\d|[23][0-8])|9(?:[024-9]\\\\d|1[02-9]|3[0-689]))\\\\d{6}\",[10]],[\"80[08]\\\\d{7}|800\\\\d{6}|8001111\"],[\"(?:8(?:4[2-5]|7[0-3])|9(?:[01]\\\\d|8[2-49]))\\\\d{7}|845464\\\\d\",[7,10]],[\"70\\\\d{8}\",[10]],0,[\"(?:3[0347]|55)\\\\d{8}\",[10]],[\"76(?:464|652)\\\\d{5}|76(?:0[0-28]|2[356]|34|4[01347]|5[49]|6[0-369]|77|8[14]|9[139])\\\\d{6}\",[10]],[\"56\\\\d{8}\",[10]]],0,\" x\"],\"GD\":[\"1\",\"011\",\"(?:473|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"473$1\",0,\"473\"],\"GE\":[\"995\",\"00\",\"(?:[3-57]\\\\d\\\\d|800)\\\\d{6}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"70\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"32\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[57]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[348]\"],\"0$1\"]],\"0\"],\"GF\":[\"594\",\"00\",\"[56]94\\\\d{6}|(?:80|9\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[56]|9[47]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[89]\"],\"0$1\"]],\"0\"],\"GG\":[\"44\",\"00\",\"(?:1481|[357-9]\\\\d{3})\\\\d{6}|8\\\\d{6}(?:\\\\d{2})?\",[7,9,10],0,\"0\",0,\"([25-9]\\\\d{5})$|0\",\"1481$1\",0,0,[[\"1481[25-9]\\\\d{5}\",[10]],[\"7(?:(?:781|839)\\\\d|911[17])\\\\d{5}\",[10]],[\"80[08]\\\\d{7}|800\\\\d{6}|8001111\"],[\"(?:8(?:4[2-5]|7[0-3])|9(?:[01]\\\\d|8[0-3]))\\\\d{7}|845464\\\\d\",[7,10]],[\"70\\\\d{8}\",[10]],0,[\"(?:3[0347]|55)\\\\d{8}\",[10]],[\"76(?:464|652)\\\\d{5}|76(?:0[0-28]|2[356]|34|4[01347]|5[49]|6[0-369]|77|8[14]|9[139])\\\\d{6}\",[10]],[\"56\\\\d{8}\",[10]]]],\"GH\":[\"233\",\"00\",\"(?:[235]\\\\d{3}|800)\\\\d{5}\",[8,9],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[235]\"],\"0$1\"]],\"0\"],\"GI\":[\"350\",\"00\",\"(?:[25]\\\\d|60)\\\\d{6}\",[8],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"2\"]]]],\"GL\":[\"299\",\"00\",\"(?:19|[2-689]\\\\d|70)\\\\d{4}\",[6],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"19|[2-9]\"]]]],\"GM\":[\"220\",\"00\",\"[2-9]\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]]],\"GN\":[\"224\",\"00\",\"722\\\\d{6}|(?:3|6\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"3\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[67]\"]]]],\"GP\":[\"590\",\"00\",\"590\\\\d{6}|(?:69|80|9\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[569]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[[\"590(?:0[1-68]|[14][0-24-9]|2[0-68]|3[1-9]|5[3-579]|[68][0-689]|7[08]|9\\\\d)\\\\d{4}\"],[\"69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))\\\\d{4}\"],[\"80[0-5]\\\\d{6}\"],0,0,0,0,0,[\"9(?:(?:39[5-7]|76[018])\\\\d|475[0-5])\\\\d{4}\"]]],\"GQ\":[\"240\",\"00\",\"222\\\\d{6}|(?:3\\\\d|55|[89]0)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235]\"]],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[89]\"]]]],\"GR\":[\"30\",\"00\",\"5005000\\\\d{3}|8\\\\d{9,11}|(?:[269]\\\\d|70)\\\\d{8}\",[10,11,12],[[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"21|7\"]],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"2(?:2|3[2-57-9]|4[2-469]|5[2-59]|6[2-9]|7[2-69]|8[2-49])|5\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2689]\"]],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{5})\",\"$1 $2 $3\",[\"8\"]]]],\"GT\":[\"502\",\"00\",\"80\\\\d{6}|(?:1\\\\d{3}|[2-7])\\\\d{7}\",[8,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-8]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]]]],\"GU\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|671|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"671$1\",0,\"671\"],\"GW\":[\"245\",\"00\",\"[49]\\\\d{8}|4\\\\d{6}\",[7,9],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"40\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[49]\"]]]],\"GY\":[\"592\",\"001\",\"(?:[2-8]\\\\d{3}|9008)\\\\d{3}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]]],\"HK\":[\"852\",\"00(?:30|5[09]|[126-9]?)\",\"8[0-46-9]\\\\d{6,7}|9\\\\d{4,7}|(?:[2-7]|9\\\\d{3})\\\\d{7}\",[5,6,7,8,9,11],[[\"(\\\\d{3})(\\\\d{2,5})\",\"$1 $2\",[\"900\",\"9003\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-7]|8[1-4]|9(?:0[1-9]|[1-8])\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]]],0,0,0,0,0,0,0,\"00\"],\"HN\":[\"504\",\"00\",\"8\\\\d{10}|[237-9]\\\\d{7}\",[8,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"[237-9]\"]]]],\"HR\":[\"385\",\"00\",\"(?:[24-69]\\\\d|3[0-79])\\\\d{7}|80\\\\d{5,7}|[1-79]\\\\d{7}|6\\\\d{5,6}\",[6,7,8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"6[01]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"6|7[245]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-57]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],\"0\"],\"HT\":[\"509\",\"00\",\"(?:[2-489]\\\\d|55)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-589]\"]]]],\"HU\":[\"36\",\"00\",\"[235-7]\\\\d{8}|[1-9]\\\\d{7}\",[8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"(06 $1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[27][2-9]|3[2-7]|4[24-9]|5[2-79]|6|8[2-57-9]|9[2-69]\"],\"(06 $1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-9]\"],\"06 $1\"]],\"06\"],\"ID\":[\"62\",\"00[89]\",\"00[1-9]\\\\d{9,14}|(?:[1-36]|8\\\\d{5})\\\\d{6}|00\\\\d{9}|[1-9]\\\\d{8,10}|[2-9]\\\\d{7}\",[7,8,9,10,11,12,13,14,15,16,17],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"15\"]],[\"(\\\\d{2})(\\\\d{5,9})\",\"$1 $2\",[\"2[124]|[36]1\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{5,7})\",\"$1 $2\",[\"800\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5,8})\",\"$1 $2\",[\"[2-79]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{3})\",\"$1-$2-$3\",[\"8[1-35-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6,8})\",\"$1 $2\",[\"1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"804\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"80\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1-$2-$3\",[\"8\"],\"0$1\"]],\"0\"],\"IE\":[\"353\",\"00\",\"(?:1\\\\d|[2569])\\\\d{6,8}|4\\\\d{6,9}|7\\\\d{8}|8\\\\d{8,9}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"2[24-9]|47|58|6[237-9]|9[35-9]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[45]0\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2569]|4[1-69]|7[14]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"70\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"81\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"4\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\"],\"IL\":[\"972\",\"0(?:0|1[2-9])\",\"1\\\\d{6}(?:\\\\d{3,5})?|[57]\\\\d{8}|[1-489]\\\\d{7}\",[7,8,9,10,11,12],[[\"(\\\\d{4})(\\\\d{3})\",\"$1-$2\",[\"125\"]],[\"(\\\\d{4})(\\\\d{2})(\\\\d{2})\",\"$1-$2-$3\",[\"121\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[2-489]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[57]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3\",[\"12\"]],[\"(\\\\d{4})(\\\\d{6})\",\"$1-$2\",[\"159\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3-$4\",[\"1[7-9]\"]],[\"(\\\\d{3})(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3-$4\",[\"15\"]]],\"0\"],\"IM\":[\"44\",\"00\",\"1624\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\",[10],0,\"0\",0,\"([25-8]\\\\d{5})$|0\",\"1624$1\",0,\"74576|(?:16|7[56])24\"],\"IN\":[\"91\",\"00\",\"(?:000800|[2-9]\\\\d\\\\d)\\\\d{7}|1\\\\d{7,12}\",[8,9,10,11,12,13],[[\"(\\\\d{8})\",\"$1\",[\"5(?:0|2[23]|3[03]|[67]1|88)\",\"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|888)\",\"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|8888)\"],0,1],[\"(\\\\d{4})(\\\\d{4,5})\",\"$1 $2\",[\"180\",\"1800\"],0,1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"140\"],0,1],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"11|2[02]|33|4[04]|79[1-7]|80[2-46]\",\"11|2[02]|33|4[04]|79(?:[1-6]|7[19])|80(?:[2-4]|6[0-589])\",\"11|2[02]|33|4[04]|79(?:[124-6]|3(?:[02-9]|1[0-24-9])|7(?:1|9[1-6]))|80(?:[2-4]|6[0-589])\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1(?:2[0-249]|3[0-25]|4[145]|[68]|7[1257])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|5[12]|[78]1)|6(?:12|[2-4]1|5[17]|6[13]|80)|7(?:12|3[134]|4[47]|61|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)|(?:43|59|75)[15]|(?:1[59]|29|67|72)[14]\",\"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|674|7(?:(?:2[14]|3[34]|5[15])[2-6]|61[346]|88[0-8])|8(?:70[2-6]|84[235-7]|91[3-7])|(?:1(?:29|60|8[06])|261|552|6(?:12|[2-47]1|5[17]|6[13]|80)|7(?:12|31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))[2-7]\",\"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|6(?:12(?:[2-6]|7[0-8])|74[2-7])|7(?:(?:2[14]|5[15])[2-6]|3171|61[346]|88(?:[2-7]|82))|8(?:70[2-6]|84(?:[2356]|7[19])|91(?:[3-6]|7[19]))|73[134][2-6]|(?:74[47]|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[2-6]|7[19])|(?:1(?:29|60|8[06])|261|552|6(?:[2-4]1|5[17]|6[13]|7(?:1|4[0189])|80)|7(?:12|88[01]))[2-7]\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2[2457-9]|3[2-5]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1[013-9]|28|3[129]|4[1-35689]|5[29]|6[02-5]|70)|807\",\"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2(?:[2457]|84|95)|3(?:[2-4]|55)|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1(?:[013-8]|9[6-9])|28[6-8]|3(?:17|2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4|5[0-367])|70[13-7])|807[19]\",\"1(?:[2-479]|5(?:[0236-9]|5[013-9]))|[2-5]|6(?:2(?:84|95)|355|83)|73179|807(?:1|9[1-3])|(?:1552|6(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[124-6])\\\\d|7(?:1(?:[013-8]\\\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\\\d|5[0-367])|70[13-7]))[2-7]\"],\"0$1\",1],[\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"[6-9]\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{2,4})(\\\\d{4})\",\"$1 $2 $3\",[\"1(?:6|8[06])\",\"1(?:6|8[06]0)\"],0,1],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"18\"],0,1]],\"0\"],\"IO\":[\"246\",\"00\",\"3\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"3\"]]]],\"IQ\":[\"964\",\"00\",\"(?:1|7\\\\d\\\\d)\\\\d{7}|[2-6]\\\\d{7,8}\",[8,9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-6]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\"],\"IR\":[\"98\",\"00\",\"[1-9]\\\\d{9}|(?:[1-8]\\\\d\\\\d|9)\\\\d{3,4}\",[4,5,6,7,10],[[\"(\\\\d{4,5})\",\"$1\",[\"96\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4,5})\",\"$1 $2\",[\"(?:1[137]|2[13-68]|3[1458]|4[145]|5[1468]|6[16]|7[1467]|8[13467])[12689]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-8]\"],\"0$1\"]],\"0\"],\"IS\":[\"354\",\"00|1(?:0(?:01|[12]0)|100)\",\"(?:38\\\\d|[4-9])\\\\d{6}\",[7,9],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[4-9]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"3\"]]],0,0,0,0,0,0,0,\"00\"],\"IT\":[\"39\",\"00\",\"0\\\\d{5,10}|1\\\\d{8,10}|3(?:[0-8]\\\\d{7,10}|9\\\\d{7,8})|(?:43|55|70)\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?\",[6,7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{4,6})\",\"$1 $2\",[\"0[26]\"]],[\"(\\\\d{3})(\\\\d{3,6})\",\"$1 $2\",[\"0[13-57-9][0159]|8(?:03|4[17]|9[2-5])\",\"0[13-57-9][0159]|8(?:03|4[17]|9(?:2|3[04]|[45][0-4]))\"]],[\"(\\\\d{4})(\\\\d{2,6})\",\"$1 $2\",[\"0(?:[13-579][2-46-8]|8[236-8])\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"894\"]],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"0[26]|5\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"1(?:44|[679])|[378]|43\"]],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"0[13-57-9][0159]|14\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{5})\",\"$1 $2 $3\",[\"0[26]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"3\"]]],0,0,0,0,0,0,[[\"0669[0-79]\\\\d{1,6}|0(?:1(?:[0159]\\\\d|[27][1-5]|31|4[1-4]|6[1356]|8[2-57])|2\\\\d\\\\d|3(?:[0159]\\\\d|2[1-4]|3[12]|[48][1-6]|6[2-59]|7[1-7])|4(?:[0159]\\\\d|[23][1-9]|4[245]|6[1-5]|7[1-4]|81)|5(?:[0159]\\\\d|2[1-5]|3[2-6]|4[1-79]|6[4-6]|7[1-578]|8[3-8])|6(?:[0-57-9]\\\\d|6[0-8])|7(?:[0159]\\\\d|2[12]|3[1-7]|4[2-46]|6[13569]|7[13-6]|8[1-59])|8(?:[0159]\\\\d|2[3-578]|3[1-356]|[6-8][1-5])|9(?:[0159]\\\\d|[238][1-5]|4[12]|6[1-8]|7[1-6]))\\\\d{2,7}\",[6,7,8,9,10,11]],[\"3[2-9]\\\\d{7,8}|(?:31|43)\\\\d{8}\",[9,10]],[\"80(?:0\\\\d{3}|3)\\\\d{3}\",[6,9]],[\"(?:0878\\\\d{3}|89(?:2\\\\d|3[04]|4(?:[0-4]|[5-9]\\\\d\\\\d)|5[0-4]))\\\\d\\\\d|(?:1(?:44|6[346])|89(?:38|5[5-9]|9))\\\\d{6}\",[6,8,9,10]],[\"1(?:78\\\\d|99)\\\\d{6}\",[9,10]],[\"3[2-8]\\\\d{9,10}\",[11,12]],0,0,[\"55\\\\d{8}\",[10]],[\"84(?:[08]\\\\d{3}|[17])\\\\d{3}\",[6,9]]]],\"JE\":[\"44\",\"00\",\"1534\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\",[10],0,\"0\",0,\"([0-24-8]\\\\d{5})$|0\",\"1534$1\",0,0,[[\"1534[0-24-8]\\\\d{5}\"],[\"7(?:(?:(?:50|82)9|937)\\\\d|7(?:00[378]|97\\\\d))\\\\d{5}\"],[\"80(?:07(?:35|81)|8901)\\\\d{4}\"],[\"(?:8(?:4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|7(?:0002|1206))|90(?:066[59]|1810|71(?:07|55)))\\\\d{4}\"],[\"701511\\\\d{4}\"],0,[\"(?:3(?:0(?:07(?:35|81)|8901)|3\\\\d{4}|4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|7(?:0002|1206))|55\\\\d{4})\\\\d{4}\"],[\"76(?:464|652)\\\\d{5}|76(?:0[0-28]|2[356]|34|4[01347]|5[49]|6[0-369]|77|8[14]|9[139])\\\\d{6}\"],[\"56\\\\d{8}\"]]],\"JM\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|658|900)\\\\d{7}\",[10],0,\"1\",0,0,0,0,\"658|876\"],\"JO\":[\"962\",\"00\",\"(?:(?:[2689]|7\\\\d)\\\\d|32|53)\\\\d{6}\",[8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2356]|87\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"70\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\"],\"JP\":[\"81\",\"010\",\"00[1-9]\\\\d{6,14}|[257-9]\\\\d{9}|(?:00|[1-9]\\\\d\\\\d)\\\\d{6}\",[8,9,10,11,12,13,14,15,16,17],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3\",[\"(?:12|57|99)0\"],\"0$1\"],[\"(\\\\d{4})(\\\\d)(\\\\d{4})\",\"$1-$2-$3\",[\"1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|499|5(?:76|97)|746|8(?:3[89]|47|51)|9(?:80|9[16])\",\"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:76|97)9|7468|8(?:3(?:8[7-9]|96)|477|51[2-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\",\"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:769|979[2-69])|7468|8(?:3(?:8[7-9]|96[2457-9])|477|51[2-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"60\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"[36]|4(?:2[09]|7[01])\",\"[36]|4(?:2(?:0|9[02-69])|7(?:0[019]|1))\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"1(?:1|5[45]|77|88|9[69])|2(?:2[1-37]|3[0-269]|4[59]|5|6[24]|7[1-358]|8[1369]|9[0-38])|4(?:[28][1-9]|3[0-57]|[45]|6[248]|7[2-579]|9[29])|5(?:2|3[0459]|4[0-369]|5[29]|8[02389]|9[0-389])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9[2-6])|8(?:2[124589]|3[26-9]|49|51|6|7[0-468]|8[68]|9[019])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9[1-489])\",\"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2(?:[127]|3[014-9])|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9[19])|62|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|8[1-9]|9[29])|5(?:2|3(?:[045]|9[0-8])|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0-2469])|3(?:[29]|60)|49|51|6(?:[0-24]|36|5[0-3589]|7[23]|9[01459])|7[0-468]|8[68])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3[34]|4[0178]))|(?:264|837)[016-9]|2(?:57|93)[015-9]|(?:25[0468]|422|838)[01]|(?:47[59]|59[89]|8(?:6[68]|9))[019]\",\"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3(?:[045]|9(?:[0-58]|6[4-9]|7[0-35689]))|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0169])|3(?:[29]|60|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[2-57-9]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|7(?:2[2-468]|3[78])|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:8294|96)[1-3]|2(?:57|93)[015-9]|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|8292|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1-$2-$3\",[\"[14]|[289][2-9]|5[3-9]|7[2-4679]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"800\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"[257-9]\"],\"0$1\"]],\"0\",0,\"(000[259]\\\\d{6})$|(?:(?:003768)0?)|0\",\"$1\"],\"KE\":[\"254\",\"000\",\"(?:[17]\\\\d\\\\d|900)\\\\d{6}|(?:2|80)0\\\\d{6,7}|[4-6]\\\\d{6,8}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{5,7})\",\"$1 $2\",[\"[24-6]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[17]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"]],\"0\"],\"KG\":[\"996\",\"00\",\"8\\\\d{9}|[235-9]\\\\d{8}\",[9,10],[[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"3(?:1[346]|[24-79])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235-79]|88\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d)(\\\\d{2,3})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\"],\"KH\":[\"855\",\"00[14-9]\",\"1\\\\d{9}|[1-9]\\\\d{7,8}\",[8,9,10],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\"0\"],\"KI\":[\"686\",\"00\",\"(?:[37]\\\\d|6[0-79])\\\\d{6}|(?:[2-48]\\\\d|50)\\\\d{3}\",[5,8],0,\"0\"],\"KM\":[\"269\",\"00\",\"[3478]\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[3478]\"]]]],\"KN\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-7]\\\\d{6})$|1\",\"869$1\",0,\"869\"],\"KP\":[\"850\",\"00|99\",\"85\\\\d{6}|(?:19\\\\d|[2-7])\\\\d{7}\",[8,10],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-7]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"]],\"0\"],\"KR\":[\"82\",\"00(?:[125689]|3(?:[46]5|91)|7(?:00|27|3|55|6[126]))\",\"00[1-9]\\\\d{8,11}|(?:[12]|5\\\\d{3})\\\\d{7}|[13-6]\\\\d{9}|(?:[1-6]\\\\d|80)\\\\d{7}|[3-6]\\\\d{4,5}|(?:00|7)0\\\\d{8}\",[5,6,8,9,10,11,12,13,14],[[\"(\\\\d{2})(\\\\d{3,4})\",\"$1-$2\",[\"(?:3[1-3]|[46][1-4]|5[1-5])1\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"1\"]],[\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1-$2-$3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[36]0|8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1-$2-$3\",[\"[1346]|5[1-5]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"[57]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5})(\\\\d{4})\",\"$1-$2-$3\",[\"5\"],\"0$1\"]],\"0\",0,\"0(8(?:[1-46-8]|5\\\\d\\\\d))?\"],\"KW\":[\"965\",\"00\",\"18\\\\d{5}|(?:[2569]\\\\d|41)\\\\d{6}\",[7,8],[[\"(\\\\d{4})(\\\\d{3,4})\",\"$1 $2\",[\"[169]|2(?:[235]|4[1-35-9])|52\"]],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[245]\"]]]],\"KY\":[\"1\",\"011\",\"(?:345|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"345$1\",0,\"345\"],\"KZ\":[\"7\",\"810\",\"(?:33622|8\\\\d{8})\\\\d{5}|[78]\\\\d{9}\",[10,14],0,\"8\",0,0,0,0,\"33|7\",0,\"8~10\"],\"LA\":[\"856\",\"00\",\"[23]\\\\d{9}|3\\\\d{8}|(?:[235-8]\\\\d|41)\\\\d{6}\",[8,9,10],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2[13]|3[14]|[4-8]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"30[0135-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[23]\"],\"0$1\"]],\"0\"],\"LB\":[\"961\",\"00\",\"[27-9]\\\\d{7}|[13-9]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[13-69]|7(?:[2-57]|62|8[0-7]|9[04-9])|8[02-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[27-9]\"]]],\"0\"],\"LC\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|758|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-8]\\\\d{6})$|1\",\"758$1\",0,\"758\"],\"LI\":[\"423\",\"00\",\"[68]\\\\d{8}|(?:[2378]\\\\d|90)\\\\d{5}\",[7,9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[2379]|8(?:0[09]|7)\",\"[2379]|8(?:0(?:02|9)|7)\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"69\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]]],\"0\",0,\"(1001)|0\"],\"LK\":[\"94\",\"00\",\"[1-9]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[1-689]\"],\"0$1\"]],\"0\"],\"LR\":[\"231\",\"00\",\"(?:[245]\\\\d|33|77|88)\\\\d{7}|(?:2\\\\d|[4-6])\\\\d{6}\",[7,8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"4[67]|[56]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-578]\"],\"0$1\"]],\"0\"],\"LS\":[\"266\",\"00\",\"(?:[256]\\\\d\\\\d|800)\\\\d{5}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2568]\"]]]],\"LT\":[\"370\",\"00\",\"(?:[3469]\\\\d|52|[78]0)\\\\d{6}\",[8],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"52[0-7]\"],\"(0-$1)\",1],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0 $1\",1],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"37|4(?:[15]|6[1-8])\"],\"(0-$1)\",1],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[3-6]\"],\"(0-$1)\",1]],\"0\",0,\"[08]\"],\"LU\":[\"352\",\"00\",\"35[013-9]\\\\d{4,8}|6\\\\d{8}|35\\\\d{2,4}|(?:[2457-9]\\\\d|3[0-46-9])\\\\d{2,9}\",[4,5,6,7,8,9,10,11],[[\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"20[2-689]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\",\"$1 $2 $3 $4\",[\"2(?:[0367]|4[3-8])\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"80[01]|90[015]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"20\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\",\"$1 $2 $3 $4 $5\",[\"2(?:[0367]|4[3-8])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,5})\",\"$1 $2 $3 $4\",[\"[3-57]|8[13-9]|9(?:0[89]|[2-579])|(?:2|80)[2-9]\"]]],0,0,\"(15(?:0[06]|1[12]|[35]5|4[04]|6[26]|77|88|99)\\\\d)\"],\"LV\":[\"371\",\"00\",\"(?:[268]\\\\d|90)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[269]|8[01]\"]]]],\"LY\":[\"218\",\"00\",\"[2-9]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{7})\",\"$1-$2\",[\"[2-9]\"],\"0$1\"]],\"0\"],\"MA\":[\"212\",\"00\",\"[5-8]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"5[45]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1-$2\",[\"5(?:2[2-46-9]|3[3-9]|9)|8(?:0[89]|92)\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1-$2\",[\"8\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1-$2\",[\"[5-7]\"],\"0$1\"]],\"0\",0,0,0,0,0,[[\"5(?:2(?:[0-25-79]\\\\d|3[1-578]|4[02-46-8]|8[0235-7])|3(?:[0-47]\\\\d|5[02-9]|6[02-8]|8[014-9]|9[3-9])|(?:4[067]|5[03])\\\\d)\\\\d{5}\"],[\"(?:6(?:[0-79]\\\\d|8[0-247-9])|7(?:[0167]\\\\d|2[0-4]|5[01]|8[0-3]))\\\\d{6}\"],[\"80[0-7]\\\\d{6}\"],[\"89\\\\d{7}\"],0,0,0,0,[\"(?:592(?:4[0-2]|93)|80[89]\\\\d\\\\d)\\\\d{4}\"]]],\"MC\":[\"377\",\"00\",\"(?:[3489]|6\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"4\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[389]\"]],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"6\"],\"0$1\"]],\"0\"],\"MD\":[\"373\",\"00\",\"(?:[235-7]\\\\d|[89]0)\\\\d{6}\",[8],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"22|3\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[25-7]\"],\"0$1\"]],\"0\"],\"ME\":[\"382\",\"00\",\"(?:20|[3-79]\\\\d)\\\\d{6}|80\\\\d{6,7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-9]\"],\"0$1\"]],\"0\"],\"MF\":[\"590\",\"00\",\"590\\\\d{6}|(?:69|80|9\\\\d)\\\\d{7}\",[9],0,\"0\",0,0,0,0,0,[[\"590(?:0[079]|[14]3|[27][79]|3[03-7]|5[0-268]|87)\\\\d{4}\"],[\"69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))\\\\d{4}\"],[\"80[0-5]\\\\d{6}\"],0,0,0,0,0,[\"9(?:(?:39[5-7]|76[018])\\\\d|475[0-5])\\\\d{4}\"]]],\"MG\":[\"261\",\"00\",\"[23]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[23]\"],\"0$1\"]],\"0\",0,\"([24-9]\\\\d{6})$|0\",\"20$1\"],\"MH\":[\"692\",\"011\",\"329\\\\d{4}|(?:[256]\\\\d|45)\\\\d{5}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[2-6]\"]]],\"1\"],\"MK\":[\"389\",\"00\",\"[2-578]\\\\d{7}\",[8],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2|34[47]|4(?:[37]7|5[47]|64)\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[347]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[58]\"],\"0$1\"]],\"0\"],\"ML\":[\"223\",\"00\",\"[24-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[24-9]\"]]]],\"MM\":[\"95\",\"00\",\"1\\\\d{5,7}|95\\\\d{6}|(?:[4-7]|9[0-46-9])\\\\d{6,8}|(?:2|8\\\\d)\\\\d{5,8}\",[6,7,8,9,10],[[\"(\\\\d)(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"16|2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[45]|6(?:0[23]|[1-689]|7[235-7])|7(?:[0-4]|5[2-7])|8[1-6]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[12]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[4-7]|8[1-35]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4,6})\",\"$1 $2 $3\",[\"9(?:2[0-4]|[35-9]|4[137-9])\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"92\"],\"0$1\"],[\"(\\\\d)(\\\\d{5})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],\"0\"],\"MN\":[\"976\",\"001\",\"[12]\\\\d{7,9}|[5-9]\\\\d{7}\",[8,9,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[12]1\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[5-9]\"]],[\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"[12]2[1-3]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5,6})\",\"$1 $2\",[\"[12](?:27|3[2-8]|4[2-68]|5[1-4689])\",\"[12](?:27|3[2-8]|4[2-68]|5[1-4689])[0-3]\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{4,5})\",\"$1 $2\",[\"[12]\"],\"0$1\"]],\"0\"],\"MO\":[\"853\",\"00\",\"0800\\\\d{3}|(?:28|[68]\\\\d)\\\\d{6}\",[7,8],[[\"(\\\\d{4})(\\\\d{3})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[268]\"]]]],\"MP\":[\"1\",\"011\",\"[58]\\\\d{9}|(?:67|90)0\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"670$1\",0,\"670\"],\"MQ\":[\"596\",\"00\",\"596\\\\d{6}|(?:69|80|9\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[569]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\"],\"MR\":[\"222\",\"00\",\"(?:[2-4]\\\\d\\\\d|800)\\\\d{5}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-48]\"]]]],\"MS\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|664|900)\\\\d{7}\",[10],0,\"1\",0,\"([34]\\\\d{6})$|1\",\"664$1\",0,\"664\"],\"MT\":[\"356\",\"00\",\"3550\\\\d{4}|(?:[2579]\\\\d\\\\d|800)\\\\d{5}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2357-9]\"]]]],\"MU\":[\"230\",\"0(?:0|[24-7]0|3[03])\",\"(?:[57]|8\\\\d\\\\d)\\\\d{7}|[2-468]\\\\d{6}\",[7,8,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-46]|8[013]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[57]\"]],[\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"8\"]]],0,0,0,0,0,0,0,\"020\"],\"MV\":[\"960\",\"0(?:0|19)\",\"(?:800|9[0-57-9]\\\\d)\\\\d{7}|[34679]\\\\d{6}\",[7,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[34679]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"]]],0,0,0,0,0,0,0,\"00\"],\"MW\":[\"265\",\"00\",\"(?:[1289]\\\\d|31|77)\\\\d{7}|1\\\\d{6}\",[7,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1[2-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[137-9]\"],\"0$1\"]],\"0\"],\"MX\":[\"52\",\"0[09]\",\"[2-9]\\\\d{9}\",[10],[[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"33|5[56]|81\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-9]\"]]],0,0,0,0,0,0,0,\"00\"],\"MY\":[\"60\",\"00\",\"1\\\\d{8,9}|(?:3\\\\d|[4-9])\\\\d{7}\",[8,9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3\",[\"[4-79]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1-$2 $3\",[\"1(?:[02469]|[378][1-9]|53)|8\",\"1(?:[02469]|[37][1-9]|53|8(?:[1-46-9]|5[7-9]))|8\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1-$2 $3\",[\"3\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1-$2-$3-$4\",[\"1(?:[367]|80)\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3\",[\"15\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2 $3\",[\"1\"],\"0$1\"]],\"0\"],\"MZ\":[\"258\",\"00\",\"(?:2|8\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2|8[2-79]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]]],\"NA\":[\"264\",\"00\",\"[68]\\\\d{7,8}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"88\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"6\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"87\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],\"0\"],\"NC\":[\"687\",\"00\",\"(?:050|[2-57-9]\\\\d\\\\d)\\\\d{3}\",[6],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1.$2.$3\",[\"[02-57-9]\"]]]],\"NE\":[\"227\",\"00\",\"[027-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"08\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[089]|2[013]|7[0467]\"]]]],\"NF\":[\"672\",\"00\",\"[13]\\\\d{5}\",[6],[[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"1[0-3]\"]],[\"(\\\\d)(\\\\d{5})\",\"$1 $2\",[\"[13]\"]]],0,0,\"([0-258]\\\\d{4})$\",\"3$1\"],\"NG\":[\"234\",\"009\",\"38\\\\d{6}|[78]\\\\d{9,13}|(?:20|9\\\\d)\\\\d{8}\",[8,10,11,12,13,14],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\",\"$1 $2 $3\",[\"3\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"20[129]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})(\\\\d{5,6})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"]],\"0\"],\"NI\":[\"505\",\"00\",\"(?:1800|[25-8]\\\\d{3})\\\\d{4}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[125-8]\"]]]],\"NL\":[\"31\",\"00\",\"(?:[124-7]\\\\d\\\\d|3(?:[02-9]\\\\d|1[0-8]))\\\\d{6}|8\\\\d{6,9}|9\\\\d{6,10}|1\\\\d{4,5}\",[5,6,7,8,9,10,11],[[\"(\\\\d{3})(\\\\d{4,7})\",\"$1 $2\",[\"[89]0\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"66\"],\"0$1\"],[\"(\\\\d)(\\\\d{8})\",\"$1 $2\",[\"6\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1[16-8]|2[259]|3[124]|4[17-9]|5[124679]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-578]|91\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],\"0\"],\"NO\":[\"47\",\"00\",\"(?:0|[2-9]\\\\d{3})\\\\d{4}\",[5,8],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-79]\"]]],0,0,0,0,0,\"[02-689]|7[0-8]\"],\"NP\":[\"977\",\"00\",\"(?:1\\\\d|9)\\\\d{9}|[1-9]\\\\d{7}\",[8,10,11],[[\"(\\\\d)(\\\\d{7})\",\"$1-$2\",[\"1[2-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1-$2\",[\"1[01]|[2-8]|9(?:[1-59]|[67][2-6])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1-$2\",[\"9\"]]],\"0\"],\"NR\":[\"674\",\"00\",\"(?:444|(?:55|8\\\\d)\\\\d|666)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[4-68]\"]]]],\"NU\":[\"683\",\"00\",\"(?:[4-7]|888\\\\d)\\\\d{3}\",[4,7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"8\"]]]],\"NZ\":[\"64\",\"0(?:0|161)\",\"[1289]\\\\d{9}|50\\\\d{5}(?:\\\\d{2,3})?|[27-9]\\\\d{7,8}|(?:[34]\\\\d|6[0-35-9])\\\\d{6}|8\\\\d{4,6}\",[5,6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{3,8})\",\"$1 $2\",[\"8[1-79]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"50[036-8]|8|90\",\"50(?:[0367]|88)|8|90\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"24|[346]|7[2-57-9]|9[2-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2(?:10|74)|[589]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"1|2[028]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,5})\",\"$1 $2 $3\",[\"2(?:[169]|7[0-35-9])|7\"],\"0$1\"]],\"0\",0,0,0,0,0,0,\"00\"],\"OM\":[\"968\",\"00\",\"(?:1505|[279]\\\\d{3}|500)\\\\d{4}|800\\\\d{5,6}\",[7,8,9],[[\"(\\\\d{3})(\\\\d{4,6})\",\"$1 $2\",[\"[58]\"]],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"2\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[179]\"]]]],\"PA\":[\"507\",\"00\",\"(?:00800|8\\\\d{3})\\\\d{6}|[68]\\\\d{7}|[1-57-9]\\\\d{6}\",[7,8,10,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[1-57-9]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"[68]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]]],\"PE\":[\"51\",\"00|19(?:1[124]|77|90)00\",\"(?:[14-8]|9\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"80\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"1\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[4-8]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"]]],\"0\",0,0,0,0,0,0,\"00\",\" Anexo \"],\"PF\":[\"689\",\"00\",\"4\\\\d{5}(?:\\\\d{2})?|8\\\\d{7,8}\",[6,8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"44\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"4|8[7-9]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]]]],\"PG\":[\"675\",\"00|140[1-3]\",\"(?:180|[78]\\\\d{3})\\\\d{4}|(?:[2-589]\\\\d|64)\\\\d{5}\",[7,8],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"18|[2-69]|85\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[78]\"]]],0,0,0,0,0,0,0,\"00\"],\"PH\":[\"63\",\"00\",\"(?:[2-7]|9\\\\d)\\\\d{8}|2\\\\d{5}|(?:1800|8)\\\\d{7,9}\",[6,8,9,10,11,12,13],[[\"(\\\\d)(\\\\d{5})\",\"$1 $2\",[\"2\"],\"(0$1)\"],[\"(\\\\d{4})(\\\\d{4,6})\",\"$1 $2\",[\"3(?:23|39|46)|4(?:2[3-6]|[35]9|4[26]|76)|544|88[245]|(?:52|64|86)2\",\"3(?:230|397|461)|4(?:2(?:35|[46]4|51)|396|4(?:22|63)|59[347]|76[15])|5(?:221|446)|642[23]|8(?:622|8(?:[24]2|5[13]))\"],\"(0$1)\"],[\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"346|4(?:27|9[35])|883\",\"3469|4(?:279|9(?:30|56))|8834\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-7]|8[2-8]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]],[\"(\\\\d{4})(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"1\"]]],\"0\"],\"PK\":[\"92\",\"00\",\"122\\\\d{6}|[24-8]\\\\d{10,11}|9(?:[013-9]\\\\d{8,10}|2(?:[01]\\\\d\\\\d|2(?:[06-8]\\\\d|1[01]))\\\\d{7})|(?:[2-8]\\\\d{3}|92(?:[0-7]\\\\d|8[1-9]))\\\\d{6}|[24-9]\\\\d{8}|[89]\\\\d{7}\",[8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{2,7})\",\"$1 $2 $3\",[\"[89]0\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"1\"]],[\"(\\\\d{3})(\\\\d{6,7})\",\"$1 $2\",[\"2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8])\",\"9(?:2[3-8]|98)|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:22|3[27-9]|4[2-6]|6[3569]|9[25-7]))[2-9]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{7,8})\",\"$1 $2\",[\"(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\"],\"(0$1)\"],[\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"58\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"3\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[24-9]\"],\"(0$1)\"]],\"0\"],\"PL\":[\"48\",\"00\",\"(?:6|8\\\\d\\\\d)\\\\d{7}|[1-9]\\\\d{6}(?:\\\\d{2})?|[26]\\\\d{5}\",[6,7,8,9,10],[[\"(\\\\d{5})\",\"$1\",[\"19\"]],[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"11|20|64\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])1\",\"(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])19\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"64\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"21|39|45|5[0137]|6[0469]|7[02389]|8(?:0[14]|8)\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[2-8]|[2-7]|8[1-79]|9[145]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"8\"]]]],\"PM\":[\"508\",\"00\",\"[45]\\\\d{5}|(?:708|80\\\\d)\\\\d{6}\",[6,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[45]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\"],\"PR\":[\"1\",\"011\",\"(?:[589]\\\\d\\\\d|787)\\\\d{7}\",[10],0,\"1\",0,0,0,0,\"787|939\"],\"PS\":[\"970\",\"00\",\"[2489]2\\\\d{6}|(?:1\\\\d|5)\\\\d{8}\",[8,9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2489]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\"0\"],\"PT\":[\"351\",\"00\",\"1693\\\\d{5}|(?:[26-9]\\\\d|30)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2[12]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"16|[236-9]\"]]]],\"PW\":[\"680\",\"01[12]\",\"(?:[24-8]\\\\d\\\\d|345|900)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]]],\"PY\":[\"595\",\"00\",\"59\\\\d{4,6}|9\\\\d{5,10}|(?:[2-46-8]\\\\d|5[0-8])\\\\d{4,7}\",[6,7,8,9,10,11],[[\"(\\\\d{3})(\\\\d{3,6})\",\"$1 $2\",[\"[2-9]0\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"[26]1|3[289]|4[1246-8]|7[1-3]|8[1-36]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{4,5})\",\"$1 $2\",[\"2[279]|3[13-5]|4[359]|5|6(?:[34]|7[1-46-8])|7[46-8]|85\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2[14-68]|3[26-9]|4[1246-8]|6(?:1|75)|7[1-35]|8[1-36]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"87\"]],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"9(?:[5-79]|8[1-7])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-8]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"]]],\"0\"],\"QA\":[\"974\",\"00\",\"800\\\\d{4}|(?:2|800)\\\\d{6}|(?:0080|[3-7])\\\\d{7}\",[7,8,9,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"2[16]|8\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[3-7]\"]]]],\"RE\":[\"262\",\"00\",\"(?:26|[689]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2689]\"],\"0$1\"]],\"0\",0,0,0,0,0,[[\"26(?:2\\\\d\\\\d|3(?:0\\\\d|1[0-6]))\\\\d{4}\"],[\"69(?:2\\\\d\\\\d|3(?:[06][0-6]|1[013]|2[0-2]|3[0-39]|4\\\\d|5[0-5]|7[0-37]|8[0-8]|9[0-479]))\\\\d{4}\"],[\"80\\\\d{7}\"],[\"89[1-37-9]\\\\d{6}\"],0,0,0,0,[\"9(?:399[0-3]|479[0-5]|76(?:2[278]|3[0-37]))\\\\d{4}\"],[\"8(?:1[019]|2[0156]|84|90)\\\\d{6}\"]]],\"RO\":[\"40\",\"00\",\"(?:[236-8]\\\\d|90)\\\\d{7}|[23]\\\\d{5}\",[6,9],[[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"2[3-6]\",\"2[3-6]\\\\d9\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"219|31\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[23]1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[236-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,0,0,\" int \"],\"RS\":[\"381\",\"00\",\"38[02-9]\\\\d{6,9}|6\\\\d{7,9}|90\\\\d{4,8}|38\\\\d{5,6}|(?:7\\\\d\\\\d|800)\\\\d{3,9}|(?:[12]\\\\d|3[0-79])\\\\d{5,10}\",[6,7,8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{3,9})\",\"$1 $2\",[\"(?:2[389]|39)0|[7-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5,10})\",\"$1 $2\",[\"[1-36]\"],\"0$1\"]],\"0\"],\"RU\":[\"7\",\"810\",\"8\\\\d{13}|[347-9]\\\\d{9}\",[10,14],[[\"(\\\\d{4})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"7(?:1[0-8]|2[1-9])\",\"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:1[23]|[2-9]2))\",\"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:13[03-69]|62[013-9]))|72[1-57-9]2\"],\"8 ($1)\",1],[\"(\\\\d{5})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"7(?:1[0-68]|2[1-9])\",\"7(?:1(?:[06][3-6]|[18]|2[35]|[3-5][3-5])|2(?:[13][3-5]|[24-689]|7[457]))\",\"7(?:1(?:0(?:[356]|4[023])|[18]|2(?:3[013-9]|5)|3[45]|43[013-79]|5(?:3[1-8]|4[1-7]|5)|6(?:3[0-35-9]|[4-6]))|2(?:1(?:3[178]|[45])|[24-689]|3[35]|7[457]))|7(?:14|23)4[0-8]|71(?:33|45)[1-79]\"],\"8 ($1)\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"8 ($1)\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[349]|8(?:[02-7]|1[1-8])\"],\"8 ($1)\",1],[\"(\\\\d{4})(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"8\"],\"8 ($1)\"]],\"8\",0,0,0,0,\"3[04-689]|[489]\",0,\"8~10\"],\"RW\":[\"250\",\"00\",\"(?:06|[27]\\\\d\\\\d|[89]00)\\\\d{6}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"0\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"]],\"0\"],\"SA\":[\"966\",\"00\",\"92\\\\d{7}|(?:[15]|8\\\\d)\\\\d{8}\",[9,10],[[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"9\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"81\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]],\"0\"],\"SB\":[\"677\",\"0[01]\",\"[6-9]\\\\d{6}|[1-6]\\\\d{4}\",[5,7],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"6[89]|7|8[4-9]|9(?:[1-8]|9[0-8])\"]]]],\"SC\":[\"248\",\"010|0[0-2]\",\"(?:[2489]\\\\d|64)\\\\d{5}\",[7],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[246]|9[57]\"]]],0,0,0,0,0,0,0,\"00\"],\"SD\":[\"249\",\"00\",\"[19]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[19]\"],\"0$1\"]],\"0\"],\"SE\":[\"46\",\"00\",\"(?:[26]\\\\d\\\\d|9)\\\\d{9}|[1-9]\\\\d{8}|[1-689]\\\\d{7}|[1-4689]\\\\d{6}|2\\\\d{5}\",[6,7,8,9,10,12],[[\"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})\",\"$1-$2 $3\",[\"20\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"9(?:00|39|44|9)\"],\"0$1\",0,\"$1 $2\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})\",\"$1-$2 $3\",[\"[12][136]|3[356]|4[0246]|6[03]|90[1-9]\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d)(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"8\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2,3})(\\\\d{2})\",\"$1-$2 $3\",[\"1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[125689]|4[02-57]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d{3})(\\\\d{2,3})(\\\\d{3})\",\"$1-$2 $3\",[\"9(?:00|39|44)\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"1[13689]|2[0136]|3[1356]|4[0246]|54|6[03]|90[1-9]\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"10|7\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"8\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"[13-5]|2(?:[247-9]|5[0138])|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1-$2 $3 $4\",[\"9\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4 $5\",[\"[26]\"],\"0$1\",0,\"$1 $2 $3 $4 $5\"]],\"0\"],\"SG\":[\"65\",\"0[0-3]\\\\d\",\"(?:(?:1\\\\d|8)\\\\d\\\\d|7000)\\\\d{7}|[3689]\\\\d{7}\",[8,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[369]|8(?:0[1-9]|[1-9])\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{4})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]]]],\"SH\":[\"290\",\"00\",\"(?:[256]\\\\d|8)\\\\d{3}\",[4,5],0,0,0,0,0,0,\"[256]\"],\"SI\":[\"386\",\"00|10(?:22|66|88|99)\",\"[1-7]\\\\d{7}|8\\\\d{4,7}|90\\\\d{4,6}\",[5,6,7,8],[[\"(\\\\d{2})(\\\\d{3,6})\",\"$1 $2\",[\"8[09]|9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"59|8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[37][01]|4[0139]|51|6\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[1-57]\"],\"(0$1)\"]],\"0\",0,0,0,0,0,0,\"00\"],\"SJ\":[\"47\",\"00\",\"0\\\\d{4}|(?:[489]\\\\d|79)\\\\d{6}\",[5,8],0,0,0,0,0,0,\"79\"],\"SK\":[\"421\",\"00\",\"[2-689]\\\\d{8}|[2-59]\\\\d{6}|[2-5]\\\\d{5}\",[6,7,9],[[\"(\\\\d)(\\\\d{2})(\\\\d{3,4})\",\"$1 $2 $3\",[\"21\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"[3-5][1-8]1\",\"[3-5][1-8]1[67]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1/$2 $3 $4\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[689]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1/$2 $3 $4\",[\"[3-5]\"],\"0$1\"]],\"0\"],\"SL\":[\"232\",\"00\",\"(?:[237-9]\\\\d|66)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[236-9]\"],\"(0$1)\"]],\"0\"],\"SM\":[\"378\",\"00\",\"(?:0549|[5-7]\\\\d)\\\\d{6}\",[8,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-7]\"]],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"0\"]]],0,0,\"([89]\\\\d{5})$\",\"0549$1\"],\"SN\":[\"221\",\"00\",\"(?:[378]\\\\d|93)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[379]\"]]]],\"SO\":[\"252\",\"00\",\"[346-9]\\\\d{8}|[12679]\\\\d{7}|[1-5]\\\\d{6}|[1348]\\\\d{5}\",[6,7,8,9],[[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"8[125]\"]],[\"(\\\\d{6})\",\"$1\",[\"[134]\"]],[\"(\\\\d)(\\\\d{6})\",\"$1 $2\",[\"[15]|2[0-79]|3[0-46-8]|4[0-7]\"]],[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"(?:2|90)4|[67]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[348]|64|79|90\"]],[\"(\\\\d{2})(\\\\d{5,7})\",\"$1 $2\",[\"1|28|6[0-35-9]|77|9[2-9]\"]]],\"0\"],\"SR\":[\"597\",\"00\",\"(?:[2-5]|68|[78]\\\\d)\\\\d{5}\",[6,7],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1-$2-$3\",[\"56\"]],[\"(\\\\d{3})(\\\\d{3})\",\"$1-$2\",[\"[2-5]\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[6-8]\"]]]],\"SS\":[\"211\",\"00\",\"[19]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[19]\"],\"0$1\"]],\"0\"],\"ST\":[\"239\",\"00\",\"(?:22|9\\\\d)\\\\d{5}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[29]\"]]]],\"SV\":[\"503\",\"00\",\"[267]\\\\d{7}|(?:80\\\\d|900)\\\\d{4}(?:\\\\d{4})?\",[7,8,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[89]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[267]\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"]]]],\"SX\":[\"1\",\"011\",\"7215\\\\d{6}|(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"(5\\\\d{6})$|1\",\"721$1\",0,\"721\"],\"SY\":[\"963\",\"00\",\"[1-39]\\\\d{8}|[1-5]\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-5]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"],\"0$1\",1]],\"0\"],\"SZ\":[\"268\",\"00\",\"0800\\\\d{4}|(?:[237]\\\\d|900)\\\\d{6}\",[8,9],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[0237]\"]],[\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"9\"]]]],\"TA\":[\"290\",\"00\",\"8\\\\d{3}\",[4],0,0,0,0,0,0,\"8\"],\"TC\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|649|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-479]\\\\d{6})$|1\",\"649$1\",0,\"649\"],\"TD\":[\"235\",\"00|16\",\"(?:22|[689]\\\\d|77)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[26-9]\"]]],0,0,0,0,0,0,0,\"00\"],\"TG\":[\"228\",\"00\",\"[279]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[279]\"]]]],\"TH\":[\"66\",\"00[1-9]\",\"(?:001800|[2-57]|[689]\\\\d)\\\\d{7}|1\\\\d{7,9}\",[8,9,10,13],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[13-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\"0\"],\"TJ\":[\"992\",\"810\",\"[0-57-9]\\\\d{8}\",[9],[[\"(\\\\d{6})(\\\\d)(\\\\d{2})\",\"$1 $2 $3\",[\"331\",\"3317\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"44[02-479]|[34]7\"]],[\"(\\\\d{4})(\\\\d)(\\\\d{4})\",\"$1 $2 $3\",[\"3(?:[1245]|3[12])\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[0-57-9]\"]]],0,0,0,0,0,0,0,\"8~10\"],\"TK\":[\"690\",\"00\",\"[2-47]\\\\d{3,6}\",[4,5,6,7]],\"TL\":[\"670\",\"00\",\"7\\\\d{7}|(?:[2-47]\\\\d|[89]0)\\\\d{5}\",[7,8],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-489]|70\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"7\"]]]],\"TM\":[\"993\",\"810\",\"(?:[1-6]\\\\d|71)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"12\"],\"(8 $1)\"],[\"(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[1-5]\"],\"(8 $1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[67]\"],\"8 $1\"]],\"8\",0,0,0,0,0,0,\"8~10\"],\"TN\":[\"216\",\"00\",\"[2-57-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-57-9]\"]]]],\"TO\":[\"676\",\"00\",\"(?:0800|(?:[5-8]\\\\d\\\\d|999)\\\\d)\\\\d{3}|[2-8]\\\\d{4}\",[5,7],[[\"(\\\\d{2})(\\\\d{3})\",\"$1-$2\",[\"[2-4]|50|6[09]|7[0-24-69]|8[05]\"]],[\"(\\\\d{4})(\\\\d{3})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[5-9]\"]]]],\"TR\":[\"90\",\"00\",\"4\\\\d{6}|8\\\\d{11,12}|(?:[2-58]\\\\d\\\\d|900)\\\\d{7}\",[7,10,12,13],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"512|8[01589]|90\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"5(?:[0-59]|61)\",\"5(?:[0-59]|61[06])\",\"5(?:[0-59]|61[06]1)\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[24][1-8]|3[1-9]\"],\"(0$1)\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{6,7})\",\"$1 $2 $3\",[\"80\"],\"0$1\",1]],\"0\"],\"TT\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-46-8]\\\\d{6})$|1\",\"868$1\",0,\"868\"],\"TV\":[\"688\",\"00\",\"(?:2|7\\\\d\\\\d|90)\\\\d{4}\",[5,6,7],[[\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"2\"]],[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"90\"]],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"7\"]]]],\"TW\":[\"886\",\"0(?:0[25-79]|19)\",\"[2-689]\\\\d{8}|7\\\\d{9,10}|[2-8]\\\\d{7}|2\\\\d{6}\",[7,8,9,10,11],[[\"(\\\\d{2})(\\\\d)(\\\\d{4})\",\"$1 $2 $3\",[\"202\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[258]0\"],\"0$1\"],[\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"[23568]|4(?:0[02-48]|[1-47-9])|7[1-9]\",\"[23568]|4(?:0[2-48]|[1-47-9])|(?:400|7)[1-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[49]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\",0,0,0,0,0,0,0,\"#\"],\"TZ\":[\"255\",\"00[056]\",\"(?:[25-8]\\\\d|41|90)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[24]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"5\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[67]\"],\"0$1\"]],\"0\"],\"UA\":[\"380\",\"00\",\"[89]\\\\d{9}|[3-9]\\\\d{8}\",[9,10],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6[12][29]|(?:3[1-8]|4[136-8]|5[12457]|6[49])2|(?:56|65)[24]\",\"6[12][29]|(?:35|4[1378]|5[12457]|6[49])2|(?:56|65)[24]|(?:3[1-46-8]|46)2[013-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6[0135689]|7[4-6])|6(?:[12][3-7]|[459])\",\"3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6(?:[015689]|3[02389])|7[4-6])|6(?:[12][3-7]|[459])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-7]|89|9[1-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"]],\"0\",0,0,0,0,0,0,\"0~0\"],\"UG\":[\"256\",\"00[057]\",\"800\\\\d{6}|(?:[29]0|[347]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"202\",\"2024\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[27-9]|4(?:6[45]|[7-9])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"[34]\"],\"0$1\"]],\"0\"],\"US\":[\"1\",\"011\",\"[2-9]\\\\d{9}|3\\\\d{6}\",[10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"310\"],0,1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"($1) $2-$3\",[\"[2-9]\"],0,1,\"$1-$2-$3\"]],\"1\",0,0,0,0,0,[[\"(?:3052(?:0[0-8]|[1-9]\\\\d)|5056(?:[0-35-9]\\\\d|4[468])|7302[0-4]\\\\d)\\\\d{4}|(?:305[3-9]|472[24]|505[2-57-9]|7306|983[2-47-9])\\\\d{6}|(?:2(?:0[1-35-9]|1[02-9]|2[03-57-9]|3[1459]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-47-9]|1[02-9]|2[013569]|3[0-24679]|4[167]|5[0-2]|6[01349]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[023578]|58|6[349]|7[0589]|8[04])|5(?:0[1-47-9]|1[0235-8]|20|3[0149]|4[01]|5[179]|6[1-47]|7[0-5]|8[0256])|6(?:0[1-35-9]|1[024-9]|2[03689]|3[016]|4[0156]|5[01679]|6[0-279]|78|8[0-29])|7(?:0[1-46-8]|1[2-9]|2[04-8]|3[1247]|4[037]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[068]|3[0-2589]|4[03578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[0146-8]|4[01357-9]|5[12469]|7[0-389]|8[04-69]))[2-9]\\\\d{6}\"],[\"\"],[\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\"],[\"900[2-9]\\\\d{6}\"],[\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\"],0,0,0,[\"305209\\\\d{4}\"]]],\"UY\":[\"598\",\"0(?:0|1[3-9]\\\\d)\",\"0004\\\\d{2,9}|[1249]\\\\d{7}|(?:[49]\\\\d|80)\\\\d{5}\",[6,7,8,9,10,11,12,13],[[\"(\\\\d{3})(\\\\d{3,4})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[49]0|8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[124]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3 $4\",[\"0\"]]],\"0\",0,0,0,0,0,0,\"00\",\" int. \"],\"UZ\":[\"998\",\"00\",\"(?:20|33|[5-79]\\\\d|88)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[235-9]\"]]]],\"VA\":[\"39\",\"00\",\"0\\\\d{5,10}|3[0-8]\\\\d{7,10}|55\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?|(?:1\\\\d|39)\\\\d{7,8}\",[6,7,8,9,10,11,12],0,0,0,0,0,0,\"06698\"],\"VC\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|784|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-7]\\\\d{6})$|1\",\"784$1\",0,\"784\"],\"VE\":[\"58\",\"00\",\"[68]00\\\\d{7}|(?:[24]\\\\d|[59]0)\\\\d{8}\",[10],[[\"(\\\\d{3})(\\\\d{7})\",\"$1-$2\",[\"[24-689]\"],\"0$1\"]],\"0\"],\"VG\":[\"1\",\"011\",\"(?:284|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-578]\\\\d{6})$|1\",\"284$1\",0,\"284\"],\"VI\":[\"1\",\"011\",\"[58]\\\\d{9}|(?:34|90)0\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"340$1\",0,\"340\"],\"VN\":[\"84\",\"00\",\"[12]\\\\d{9}|[135-9]\\\\d{8}|[16]\\\\d{7}|[16-8]\\\\d{6}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"80\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{4,6})\",\"$1 $2\",[\"1\"],0,1],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"6\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[357-9]\"],\"0$1\",1],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2[48]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\",1]],\"0\"],\"VU\":[\"678\",\"00\",\"[57-9]\\\\d{6}|(?:[238]\\\\d|48)\\\\d{3}\",[5,7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[57-9]\"]]]],\"WF\":[\"681\",\"00\",\"(?:40|72)\\\\d{4}|8\\\\d{5}(?:\\\\d{3})?\",[6,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[478]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]]]],\"WS\":[\"685\",\"0\",\"(?:[2-6]|8\\\\d{5})\\\\d{4}|[78]\\\\d{6}|[68]\\\\d{5}\",[5,6,7,10],[[\"(\\\\d{5})\",\"$1\",[\"[2-5]|6[1-9]\"]],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1 $2\",[\"[68]\"]],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"7\"]]]],\"XK\":[\"383\",\"00\",\"2\\\\d{7,8}|3\\\\d{7,11}|(?:4\\\\d\\\\d|[89]00)\\\\d{5}\",[8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-4]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2|39\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7,10})\",\"$1 $2\",[\"3\"],\"0$1\"]],\"0\"],\"YE\":[\"967\",\"00\",\"(?:1|7\\\\d)\\\\d{7}|[1-7]\\\\d{6}\",[7,8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-6]|7(?:[24-6]|8[0-7])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\"],\"YT\":[\"262\",\"00\",\"(?:80|9\\\\d)\\\\d{7}|(?:26|63)9\\\\d{6}\",[9],0,\"0\",0,0,0,0,0,[[\"269(?:0[0-467]|15|5[0-4]|6\\\\d|[78]0)\\\\d{4}\"],[\"639(?:0[0-79]|1[019]|[267]\\\\d|3[09]|40|5[05-9]|9[04-79])\\\\d{4}\"],[\"80\\\\d{7}\"],0,0,0,0,0,[\"9(?:(?:39|47)8[01]|769\\\\d)\\\\d{4}\"]]],\"ZA\":[\"27\",\"00\",\"[1-79]\\\\d{8}|8\\\\d{4,9}\",[5,6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{3,4})\",\"$1 $2\",[\"8[1-4]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\",\"$1 $2 $3\",[\"8[1-4]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"860\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],\"0\"],\"ZM\":[\"260\",\"00\",\"800\\\\d{6}|(?:21|63|[79]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[28]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"[79]\"],\"0$1\"]],\"0\"],\"ZW\":[\"263\",\"00\",\"2(?:[0-57-9]\\\\d{6,8}|6[0-24-9]\\\\d{6,7})|[38]\\\\d{9}|[35-8]\\\\d{8}|[3-6]\\\\d{7}|[1-689]\\\\d{6}|[1-3569]\\\\d{5}|[1356]\\\\d{4}\",[5,6,7,8,9,10],[[\"(\\\\d{3})(\\\\d{3,5})\",\"$1 $2\",[\"2(?:0[45]|2[278]|[49]8)|3(?:[09]8|17)|6(?:[29]8|37|75)|[23][78]|(?:33|5[15]|6[68])[78]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"[49]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"80\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"24|8[13-59]|(?:2[05-79]|39|5[45]|6[15-8])2\",\"2(?:02[014]|4|[56]20|[79]2)|392|5(?:42|525)|6(?:[16-8]21|52[013])|8[13-59]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2(?:1[39]|2[0157]|[378]|[56][14])|3(?:12|29)\",\"2(?:1[39]|2[0157]|[378]|[56][14])|3(?:123|29)\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,5})\",\"$1 $2\",[\"1|2(?:0[0-36-9]|12|29|[56])|3(?:1[0-689]|[24-6])|5(?:[0236-9]|1[2-4])|6(?:[013-59]|7[0-46-9])|(?:33|55|6[68])[0-69]|(?:29|3[09]|62)[0-79]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"29[013-9]|39|54\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3,5})\",\"$1 $2\",[\"(?:25|54)8\",\"258|5483\"],\"0$1\"]],\"0\"]},\"nonGeographic\":{\"800\":[\"800\",0,\"(?:00|[1-9]\\\\d)\\\\d{6}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"\\\\d\"]]],0,0,0,0,0,0,[0,0,[\"(?:00|[1-9]\\\\d)\\\\d{6}\"]]],\"808\":[\"808\",0,\"[1-9]\\\\d{7}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[1-9]\"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,0,[\"[1-9]\\\\d{7}\"]]],\"870\":[\"870\",0,\"7\\\\d{11}|[35-7]\\\\d{8}\",[9,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[35-7]\"]]],0,0,0,0,0,0,[0,[\"(?:[356]|774[45])\\\\d{8}|7[6-8]\\\\d{7}\"]]],\"878\":[\"878\",0,\"10\\\\d{10}\",[12],[[\"(\\\\d{2})(\\\\d{5})(\\\\d{5})\",\"$1 $2 $3\",[\"1\"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,[\"10\\\\d{10}\"]]],\"881\":[\"881\",0,\"6\\\\d{9}|[0-36-9]\\\\d{8}\",[9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\",[\"[0-37-9]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{5,6})\",\"$1 $2 $3\",[\"6\"]]],0,0,0,0,0,0,[0,[\"6\\\\d{9}|[0-36-9]\\\\d{8}\"]]],\"882\":[\"882\",0,\"[13]\\\\d{6}(?:\\\\d{2,5})?|[19]\\\\d{7}|(?:[25]\\\\d\\\\d|4)\\\\d{7}(?:\\\\d{2})?\",[7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"16|342\"]],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"49\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"1[36]|9\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"3[23]\"]],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"16\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"10|23|3(?:[15]|4[57])|4|51\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"34\"]],[\"(\\\\d{2})(\\\\d{4,5})(\\\\d{5})\",\"$1 $2 $3\",[\"[1-35]\"]]],0,0,0,0,0,0,[0,[\"342\\\\d{4}|(?:337|49)\\\\d{6}|(?:3(?:2|47|7\\\\d{3})|50\\\\d{3})\\\\d{7}\",[7,8,9,10,12]],0,0,0,[\"348[57]\\\\d{7}\",[11]],0,0,[\"1(?:3(?:0[0347]|[13][0139]|2[035]|4[013568]|6[0459]|7[06]|8[15-8]|9[0689])\\\\d{4}|6\\\\d{5,10})|(?:345\\\\d|9[89])\\\\d{6}|(?:10|2(?:3|85\\\\d)|3(?:[15]|[69]\\\\d\\\\d)|4[15-8]|51)\\\\d{8}\"]]],\"883\":[\"883\",0,\"(?:[1-4]\\\\d|51)\\\\d{6,10}\",[8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{2,8})\",\"$1 $2 $3\",[\"[14]|2[24-689]|3[02-689]|51[24-9]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"510\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"21\"]],[\"(\\\\d{4})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"51[13]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[235]\"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,[\"(?:2(?:00\\\\d\\\\d|10)|(?:370[1-9]|51\\\\d0)\\\\d)\\\\d{7}|51(?:00\\\\d{5}|[24-9]0\\\\d{4,7})|(?:1[0-79]|2[24-689]|3[02-689]|4[0-4])0\\\\d{5,9}\"]]],\"888\":[\"888\",0,\"\\\\d{11}\",[11],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\"]],0,0,0,0,0,0,[0,0,0,0,0,0,[\"\\\\d{11}\"]]],\"979\":[\"979\",0,\"[1359]\\\\d{8}\",[9],[[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[1359]\"]]],0,0,0,0,0,0,[0,0,0,[\"[1359]\\\\d{8}\"]]]}}","// Importing from a \".js\" file is a workaround for Node.js \"ES Modules\"\r\n// importing system which is even uncapable of importing \"*.json\" files.\r\nimport metadata from '../../metadata.min.json.js'\r\n\r\nexport default function withMetadataArgument(func, _arguments) {\r\n\tvar args = Array.prototype.slice.call(_arguments)\r\n\targs.push(metadata)\r\n\treturn func.apply(this, args)\r\n}","function _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\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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\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 _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 _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\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 _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n// https://stackoverflow.com/a/46971044/970769\n// \"Breaking changes in Typescript 2.1\"\n// \"Extending built-ins like Error, Array, and Map may no longer work.\"\n// \"As a recommendation, you can manually adjust the prototype immediately after any super(...) calls.\"\n// https://github.com/Microsoft/TypeScript-wiki/blob/main/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nvar ParseError = /*#__PURE__*/function (_Error) {\n _inherits(ParseError, _Error);\n\n var _super = _createSuper(ParseError);\n\n function ParseError(code) {\n var _this;\n\n _classCallCheck(this, ParseError);\n\n _this = _super.call(this, code); // Set the prototype explicitly.\n // Any subclass of FooError will have to manually set the prototype as well.\n\n Object.setPrototypeOf(_assertThisInitialized(_this), ParseError.prototype);\n _this.name = _this.constructor.name;\n return _this;\n }\n\n return _createClass(ParseError);\n}( /*#__PURE__*/_wrapNativeSuper(Error));\n\nexport { ParseError as default };\n//# sourceMappingURL=ParseError.js.map","// The minimum length of the national significant number.\nexport var MIN_LENGTH_FOR_NSN = 2; // The ITU says the maximum length should be 15,\n// but one can find longer numbers in Germany.\n\nexport var MAX_LENGTH_FOR_NSN = 17; // The maximum length of the country calling code.\n\nexport var MAX_LENGTH_COUNTRY_CODE = 3; // Digits accepted in phone numbers\n// (ascii, fullwidth, arabic-indic, and eastern arabic digits).\n\nexport var VALID_DIGITS = \"0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9\"; // `DASHES` will be right after the opening square bracket of the \"character class\"\n\nvar DASHES = \"-\\u2010-\\u2015\\u2212\\u30FC\\uFF0D\";\nvar SLASHES = \"\\uFF0F/\";\nvar DOTS = \"\\uFF0E.\";\nexport var WHITESPACE = \" \\xA0\\xAD\\u200B\\u2060\\u3000\";\nvar BRACKETS = \"()\\uFF08\\uFF09\\uFF3B\\uFF3D\\\\[\\\\]\"; // export const OPENING_BRACKETS = '(\\uFF08\\uFF3B\\\\\\['\n\nvar TILDES = \"~\\u2053\\u223C\\uFF5E\"; // Regular expression of acceptable punctuation found in phone numbers. This\n// excludes punctuation found as a leading character only. This consists of dash\n// characters, white space characters, full stops, slashes, square brackets,\n// parentheses and tildes. Full-width variants are also present.\n\nexport var VALID_PUNCTUATION = \"\".concat(DASHES).concat(SLASHES).concat(DOTS).concat(WHITESPACE).concat(BRACKETS).concat(TILDES);\nexport var PLUS_CHARS = \"+\\uFF0B\"; // const LEADING_PLUS_CHARS_PATTERN = new RegExp('^[' + PLUS_CHARS + ']+')\n//# sourceMappingURL=constants.js.map","// Copy-pasted from:\n// https://github.com/substack/semver-compare/blob/master/index.js\n//\n// Inlining this function because some users reported issues with\n// importing from `semver-compare` in a browser with ES6 \"native\" modules.\n//\n// Fixes `semver-compare` not being able to compare versions with alpha/beta/etc \"tags\".\n// https://github.com/catamphetamine/libphonenumber-js/issues/381\nexport default function (a, b) {\n a = a.split('-');\n b = b.split('-');\n var pa = a[0].split('.');\n var pb = b[0].split('.');\n\n for (var i = 0; i < 3; i++) {\n var na = Number(pa[i]);\n var nb = Number(pb[i]);\n if (na > nb) return 1;\n if (nb > na) return -1;\n if (!isNaN(na) && isNaN(nb)) return 1;\n if (isNaN(na) && !isNaN(nb)) return -1;\n }\n\n if (a[1] && b[1]) {\n return a[1] > b[1] ? 1 : a[1] < b[1] ? -1 : 0;\n }\n\n return !a[1] && b[1] ? 1 : a[1] && !b[1] ? -1 : 0;\n}\n//# sourceMappingURL=semver-compare.js.map","var objectConstructor = {}.constructor;\nexport default function isObject(object) {\n return object !== undefined && object !== null && object.constructor === objectConstructor;\n}\n//# sourceMappingURL=isObject.js.map","function _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\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\nimport compare from './tools/semver-compare.js';\nimport isObject from './helpers/isObject.js'; // Added \"possibleLengths\" and renamed\n// \"country_phone_code_to_countries\" to \"country_calling_codes\".\n\nvar V2 = '1.0.18'; // Added \"idd_prefix\" and \"default_idd_prefix\".\n\nvar V3 = '1.2.0'; // Moved `001` country code to \"nonGeographic\" section of metadata.\n\nvar V4 = '1.7.35';\nvar DEFAULT_EXT_PREFIX = ' ext. ';\nvar CALLING_CODE_REG_EXP = /^\\d+$/;\n/**\r\n * See: https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/METADATA.md\r\n */\n\nvar Metadata = /*#__PURE__*/function () {\n function Metadata(metadata) {\n _classCallCheck(this, Metadata);\n\n validateMetadata(metadata);\n this.metadata = metadata;\n setVersion.call(this, metadata);\n }\n\n _createClass(Metadata, [{\n key: \"getCountries\",\n value: function getCountries() {\n return Object.keys(this.metadata.countries).filter(function (_) {\n return _ !== '001';\n });\n }\n }, {\n key: \"getCountryMetadata\",\n value: function getCountryMetadata(countryCode) {\n return this.metadata.countries[countryCode];\n }\n }, {\n key: \"nonGeographic\",\n value: function nonGeographic() {\n if (this.v1 || this.v2 || this.v3) return; // `nonGeographical` was a typo.\n // It's present in metadata generated from `1.7.35` to `1.7.37`.\n // The test case could be found by searching for \"nonGeographical\".\n\n return this.metadata.nonGeographic || this.metadata.nonGeographical;\n }\n }, {\n key: \"hasCountry\",\n value: function hasCountry(country) {\n return this.getCountryMetadata(country) !== undefined;\n }\n }, {\n key: \"hasCallingCode\",\n value: function hasCallingCode(callingCode) {\n if (this.getCountryCodesForCallingCode(callingCode)) {\n return true;\n }\n\n if (this.nonGeographic()) {\n if (this.nonGeographic()[callingCode]) {\n return true;\n }\n } else {\n // A hacky workaround for old custom metadata (generated before V4).\n var countryCodes = this.countryCallingCodes()[callingCode];\n\n if (countryCodes && countryCodes.length === 1 && countryCodes[0] === '001') {\n return true;\n }\n }\n }\n }, {\n key: \"isNonGeographicCallingCode\",\n value: function isNonGeographicCallingCode(callingCode) {\n if (this.nonGeographic()) {\n return this.nonGeographic()[callingCode] ? true : false;\n } else {\n return this.getCountryCodesForCallingCode(callingCode) ? false : true;\n }\n } // Deprecated.\n\n }, {\n key: \"country\",\n value: function country(countryCode) {\n return this.selectNumberingPlan(countryCode);\n }\n }, {\n key: \"selectNumberingPlan\",\n value: function selectNumberingPlan(countryCode, callingCode) {\n // Supports just passing `callingCode` as the first argument.\n if (countryCode && CALLING_CODE_REG_EXP.test(countryCode)) {\n callingCode = countryCode;\n countryCode = null;\n }\n\n if (countryCode && countryCode !== '001') {\n if (!this.hasCountry(countryCode)) {\n throw new Error(\"Unknown country: \".concat(countryCode));\n }\n\n this.numberingPlan = new NumberingPlan(this.getCountryMetadata(countryCode), this);\n } else if (callingCode) {\n if (!this.hasCallingCode(callingCode)) {\n throw new Error(\"Unknown calling code: \".concat(callingCode));\n }\n\n this.numberingPlan = new NumberingPlan(this.getNumberingPlanMetadata(callingCode), this);\n } else {\n this.numberingPlan = undefined;\n }\n\n return this;\n }\n }, {\n key: \"getCountryCodesForCallingCode\",\n value: function getCountryCodesForCallingCode(callingCode) {\n var countryCodes = this.countryCallingCodes()[callingCode];\n\n if (countryCodes) {\n // Metadata before V4 included \"non-geographic entity\" calling codes\n // inside `country_calling_codes` (for example, `\"881\":[\"001\"]`).\n // Now the semantics of `country_calling_codes` has changed:\n // it's specifically for \"countries\" now.\n // Older versions of custom metadata will simply skip parsing\n // \"non-geographic entity\" phone numbers with new versions\n // of this library: it's not considered a bug,\n // because such numbers are extremely rare,\n // and developers extremely rarely use custom metadata.\n if (countryCodes.length === 1 && countryCodes[0].length === 3) {\n return;\n }\n\n return countryCodes;\n }\n }\n }, {\n key: \"getCountryCodeForCallingCode\",\n value: function getCountryCodeForCallingCode(callingCode) {\n var countryCodes = this.getCountryCodesForCallingCode(callingCode);\n\n if (countryCodes) {\n return countryCodes[0];\n }\n }\n }, {\n key: \"getNumberingPlanMetadata\",\n value: function getNumberingPlanMetadata(callingCode) {\n var countryCode = this.getCountryCodeForCallingCode(callingCode);\n\n if (countryCode) {\n return this.getCountryMetadata(countryCode);\n }\n\n if (this.nonGeographic()) {\n var metadata = this.nonGeographic()[callingCode];\n\n if (metadata) {\n return metadata;\n }\n } else {\n // A hacky workaround for old custom metadata (generated before V4).\n // In that metadata, there was no concept of \"non-geographic\" metadata\n // so metadata for `001` country code was stored along with other countries.\n // The test case can be found by searching for:\n // \"should work around `nonGeographic` metadata not existing\".\n var countryCodes = this.countryCallingCodes()[callingCode];\n\n if (countryCodes && countryCodes.length === 1 && countryCodes[0] === '001') {\n return this.metadata.countries['001'];\n }\n }\n } // Deprecated.\n\n }, {\n key: \"countryCallingCode\",\n value: function countryCallingCode() {\n return this.numberingPlan.callingCode();\n } // Deprecated.\n\n }, {\n key: \"IDDPrefix\",\n value: function IDDPrefix() {\n return this.numberingPlan.IDDPrefix();\n } // Deprecated.\n\n }, {\n key: \"defaultIDDPrefix\",\n value: function defaultIDDPrefix() {\n return this.numberingPlan.defaultIDDPrefix();\n } // Deprecated.\n\n }, {\n key: \"nationalNumberPattern\",\n value: function nationalNumberPattern() {\n return this.numberingPlan.nationalNumberPattern();\n } // Deprecated.\n\n }, {\n key: \"possibleLengths\",\n value: function possibleLengths() {\n return this.numberingPlan.possibleLengths();\n } // Deprecated.\n\n }, {\n key: \"formats\",\n value: function formats() {\n return this.numberingPlan.formats();\n } // Deprecated.\n\n }, {\n key: \"nationalPrefixForParsing\",\n value: function nationalPrefixForParsing() {\n return this.numberingPlan.nationalPrefixForParsing();\n } // Deprecated.\n\n }, {\n key: \"nationalPrefixTransformRule\",\n value: function nationalPrefixTransformRule() {\n return this.numberingPlan.nationalPrefixTransformRule();\n } // Deprecated.\n\n }, {\n key: \"leadingDigits\",\n value: function leadingDigits() {\n return this.numberingPlan.leadingDigits();\n } // Deprecated.\n\n }, {\n key: \"hasTypes\",\n value: function hasTypes() {\n return this.numberingPlan.hasTypes();\n } // Deprecated.\n\n }, {\n key: \"type\",\n value: function type(_type) {\n return this.numberingPlan.type(_type);\n } // Deprecated.\n\n }, {\n key: \"ext\",\n value: function ext() {\n return this.numberingPlan.ext();\n }\n }, {\n key: \"countryCallingCodes\",\n value: function countryCallingCodes() {\n if (this.v1) return this.metadata.country_phone_code_to_countries;\n return this.metadata.country_calling_codes;\n } // Deprecated.\n\n }, {\n key: \"chooseCountryByCountryCallingCode\",\n value: function chooseCountryByCountryCallingCode(callingCode) {\n return this.selectNumberingPlan(callingCode);\n }\n }, {\n key: \"hasSelectedNumberingPlan\",\n value: function hasSelectedNumberingPlan() {\n return this.numberingPlan !== undefined;\n }\n }]);\n\n return Metadata;\n}();\n\nexport { Metadata as default };\n\nvar NumberingPlan = /*#__PURE__*/function () {\n function NumberingPlan(metadata, globalMetadataObject) {\n _classCallCheck(this, NumberingPlan);\n\n this.globalMetadataObject = globalMetadataObject;\n this.metadata = metadata;\n setVersion.call(this, globalMetadataObject.metadata);\n }\n\n _createClass(NumberingPlan, [{\n key: \"callingCode\",\n value: function callingCode() {\n return this.metadata[0];\n } // Formatting information for regions which share\n // a country calling code is contained by only one region\n // for performance reasons. For example, for NANPA region\n // (\"North American Numbering Plan Administration\",\n // which includes USA, Canada, Cayman Islands, Bahamas, etc)\n // it will be contained in the metadata for `US`.\n\n }, {\n key: \"getDefaultCountryMetadataForRegion\",\n value: function getDefaultCountryMetadataForRegion() {\n return this.globalMetadataObject.getNumberingPlanMetadata(this.callingCode());\n } // Is always present.\n\n }, {\n key: \"IDDPrefix\",\n value: function IDDPrefix() {\n if (this.v1 || this.v2) return;\n return this.metadata[1];\n } // Is only present when a country supports multiple IDD prefixes.\n\n }, {\n key: \"defaultIDDPrefix\",\n value: function defaultIDDPrefix() {\n if (this.v1 || this.v2) return;\n return this.metadata[12];\n }\n }, {\n key: \"nationalNumberPattern\",\n value: function nationalNumberPattern() {\n if (this.v1 || this.v2) return this.metadata[1];\n return this.metadata[2];\n } // \"possible length\" data is always present in Google's metadata.\n\n }, {\n key: \"possibleLengths\",\n value: function possibleLengths() {\n if (this.v1) return;\n return this.metadata[this.v2 ? 2 : 3];\n }\n }, {\n key: \"_getFormats\",\n value: function _getFormats(metadata) {\n return metadata[this.v1 ? 2 : this.v2 ? 3 : 4];\n } // For countries of the same region (e.g. NANPA)\n // formats are all stored in the \"main\" country for that region.\n // E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\n\n }, {\n key: \"formats\",\n value: function formats() {\n var _this = this;\n\n var formats = this._getFormats(this.metadata) || this._getFormats(this.getDefaultCountryMetadataForRegion()) || [];\n return formats.map(function (_) {\n return new Format(_, _this);\n });\n }\n }, {\n key: \"nationalPrefix\",\n value: function nationalPrefix() {\n return this.metadata[this.v1 ? 3 : this.v2 ? 4 : 5];\n }\n }, {\n key: \"_getNationalPrefixFormattingRule\",\n value: function _getNationalPrefixFormattingRule(metadata) {\n return metadata[this.v1 ? 4 : this.v2 ? 5 : 6];\n } // For countries of the same region (e.g. NANPA)\n // national prefix formatting rule is stored in the \"main\" country for that region.\n // E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\n\n }, {\n key: \"nationalPrefixFormattingRule\",\n value: function nationalPrefixFormattingRule() {\n return this._getNationalPrefixFormattingRule(this.metadata) || this._getNationalPrefixFormattingRule(this.getDefaultCountryMetadataForRegion());\n }\n }, {\n key: \"_nationalPrefixForParsing\",\n value: function _nationalPrefixForParsing() {\n return this.metadata[this.v1 ? 5 : this.v2 ? 6 : 7];\n }\n }, {\n key: \"nationalPrefixForParsing\",\n value: function nationalPrefixForParsing() {\n // If `national_prefix_for_parsing` is not set explicitly,\n // then infer it from `national_prefix` (if any)\n return this._nationalPrefixForParsing() || this.nationalPrefix();\n }\n }, {\n key: \"nationalPrefixTransformRule\",\n value: function nationalPrefixTransformRule() {\n return this.metadata[this.v1 ? 6 : this.v2 ? 7 : 8];\n }\n }, {\n key: \"_getNationalPrefixIsOptionalWhenFormatting\",\n value: function _getNationalPrefixIsOptionalWhenFormatting() {\n return !!this.metadata[this.v1 ? 7 : this.v2 ? 8 : 9];\n } // For countries of the same region (e.g. NANPA)\n // \"national prefix is optional when formatting\" flag is\n // stored in the \"main\" country for that region.\n // E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\n\n }, {\n key: \"nationalPrefixIsOptionalWhenFormattingInNationalFormat\",\n value: function nationalPrefixIsOptionalWhenFormattingInNationalFormat() {\n return this._getNationalPrefixIsOptionalWhenFormatting(this.metadata) || this._getNationalPrefixIsOptionalWhenFormatting(this.getDefaultCountryMetadataForRegion());\n }\n }, {\n key: \"leadingDigits\",\n value: function leadingDigits() {\n return this.metadata[this.v1 ? 8 : this.v2 ? 9 : 10];\n }\n }, {\n key: \"types\",\n value: function types() {\n return this.metadata[this.v1 ? 9 : this.v2 ? 10 : 11];\n }\n }, {\n key: \"hasTypes\",\n value: function hasTypes() {\n // Versions 1.2.0 - 1.2.4: can be `[]`.\n\n /* istanbul ignore next */\n if (this.types() && this.types().length === 0) {\n return false;\n } // Versions <= 1.2.4: can be `undefined`.\n // Version >= 1.2.5: can be `0`.\n\n\n return !!this.types();\n }\n }, {\n key: \"type\",\n value: function type(_type2) {\n if (this.hasTypes() && getType(this.types(), _type2)) {\n return new Type(getType(this.types(), _type2), this);\n }\n }\n }, {\n key: \"ext\",\n value: function ext() {\n if (this.v1 || this.v2) return DEFAULT_EXT_PREFIX;\n return this.metadata[13] || DEFAULT_EXT_PREFIX;\n }\n }]);\n\n return NumberingPlan;\n}();\n\nvar Format = /*#__PURE__*/function () {\n function Format(format, metadata) {\n _classCallCheck(this, Format);\n\n this._format = format;\n this.metadata = metadata;\n }\n\n _createClass(Format, [{\n key: \"pattern\",\n value: function pattern() {\n return this._format[0];\n }\n }, {\n key: \"format\",\n value: function format() {\n return this._format[1];\n }\n }, {\n key: \"leadingDigitsPatterns\",\n value: function leadingDigitsPatterns() {\n return this._format[2] || [];\n }\n }, {\n key: \"nationalPrefixFormattingRule\",\n value: function nationalPrefixFormattingRule() {\n return this._format[3] || this.metadata.nationalPrefixFormattingRule();\n }\n }, {\n key: \"nationalPrefixIsOptionalWhenFormattingInNationalFormat\",\n value: function nationalPrefixIsOptionalWhenFormattingInNationalFormat() {\n return !!this._format[4] || this.metadata.nationalPrefixIsOptionalWhenFormattingInNationalFormat();\n }\n }, {\n key: \"nationalPrefixIsMandatoryWhenFormattingInNationalFormat\",\n value: function nationalPrefixIsMandatoryWhenFormattingInNationalFormat() {\n // National prefix is omitted if there's no national prefix formatting rule\n // set for this country, or when the national prefix formatting rule\n // contains no national prefix itself, or when this rule is set but\n // national prefix is optional for this phone number format\n // (and it is not enforced explicitly)\n return this.usesNationalPrefix() && !this.nationalPrefixIsOptionalWhenFormattingInNationalFormat();\n } // Checks whether national prefix formatting rule contains national prefix.\n\n }, {\n key: \"usesNationalPrefix\",\n value: function usesNationalPrefix() {\n return this.nationalPrefixFormattingRule() && // Check that national prefix formatting rule is not a \"dummy\" one.\n !FIRST_GROUP_ONLY_PREFIX_PATTERN.test(this.nationalPrefixFormattingRule()) // In compressed metadata, `this.nationalPrefixFormattingRule()` is `0`\n // when `national_prefix_formatting_rule` is not present.\n // So, `true` or `false` are returned explicitly here, so that\n // `0` number isn't returned.\n ? true : false;\n }\n }, {\n key: \"internationalFormat\",\n value: function internationalFormat() {\n return this._format[5] || this.format();\n }\n }]);\n\n return Format;\n}();\n/**\r\n * A pattern that is used to determine if the national prefix formatting rule\r\n * has the first group only, i.e., does not start with the national prefix.\r\n * Note that the pattern explicitly allows for unbalanced parentheses.\r\n */\n\n\nvar FIRST_GROUP_ONLY_PREFIX_PATTERN = /^\\(?\\$1\\)?$/;\n\nvar Type = /*#__PURE__*/function () {\n function Type(type, metadata) {\n _classCallCheck(this, Type);\n\n this.type = type;\n this.metadata = metadata;\n }\n\n _createClass(Type, [{\n key: \"pattern\",\n value: function pattern() {\n if (this.metadata.v1) return this.type;\n return this.type[0];\n }\n }, {\n key: \"possibleLengths\",\n value: function possibleLengths() {\n if (this.metadata.v1) return;\n return this.type[1] || this.metadata.possibleLengths();\n }\n }]);\n\n return Type;\n}();\n\nfunction getType(types, type) {\n switch (type) {\n case 'FIXED_LINE':\n return types[0];\n\n case 'MOBILE':\n return types[1];\n\n case 'TOLL_FREE':\n return types[2];\n\n case 'PREMIUM_RATE':\n return types[3];\n\n case 'PERSONAL_NUMBER':\n return types[4];\n\n case 'VOICEMAIL':\n return types[5];\n\n case 'UAN':\n return types[6];\n\n case 'PAGER':\n return types[7];\n\n case 'VOIP':\n return types[8];\n\n case 'SHARED_COST':\n return types[9];\n }\n}\n\nexport function validateMetadata(metadata) {\n if (!metadata) {\n throw new Error('[libphonenumber-js] `metadata` argument not passed. Check your arguments.');\n } // `country_phone_code_to_countries` was renamed to\n // `country_calling_codes` in `1.0.18`.\n\n\n if (!isObject(metadata) || !isObject(metadata.countries)) {\n throw new Error(\"[libphonenumber-js] `metadata` argument was passed but it's not a valid metadata. Must be an object having `.countries` child object property. Got \".concat(isObject(metadata) ? 'an object of shape: { ' + Object.keys(metadata).join(', ') + ' }' : 'a ' + typeOf(metadata) + ': ' + metadata, \".\"));\n }\n} // Babel transforms `typeof` into some \"branches\"\n// so istanbul will show this as \"branch not covered\".\n\n/* istanbul ignore next */\n\nvar typeOf = function typeOf(_) {\n return _typeof(_);\n};\n/**\r\n * Returns extension prefix for a country.\r\n * @param {string} country\r\n * @param {object} metadata\r\n * @return {string?}\r\n * @example\r\n * // Returns \" ext. \"\r\n * getExtPrefix(\"US\")\r\n */\n\n\nexport function getExtPrefix(country, metadata) {\n metadata = new Metadata(metadata);\n\n if (metadata.hasCountry(country)) {\n return metadata.country(country).ext();\n }\n\n return DEFAULT_EXT_PREFIX;\n}\n/**\r\n * Returns \"country calling code\" for a country.\r\n * Throws an error if the country doesn't exist or isn't supported by this library.\r\n * @param {string} country\r\n * @param {object} metadata\r\n * @return {string}\r\n * @example\r\n * // Returns \"44\"\r\n * getCountryCallingCode(\"GB\")\r\n */\n\nexport function getCountryCallingCode(country, metadata) {\n metadata = new Metadata(metadata);\n\n if (metadata.hasCountry(country)) {\n return metadata.country(country).countryCallingCode();\n }\n\n throw new Error(\"Unknown country: \".concat(country));\n}\nexport function isSupportedCountry(country, metadata) {\n // metadata = new Metadata(metadata)\n // return metadata.hasCountry(country)\n return metadata.countries.hasOwnProperty(country);\n}\n\nfunction setVersion(metadata) {\n var version = metadata.version;\n\n if (typeof version === 'number') {\n this.v1 = version === 1;\n this.v2 = version === 2;\n this.v3 = version === 3;\n this.v4 = version === 4;\n } else {\n if (!version) {\n this.v1 = true;\n } else if (compare(version, V3) === -1) {\n this.v2 = true;\n } else if (compare(version, V4) === -1) {\n this.v3 = true;\n } else {\n this.v4 = true;\n }\n }\n} // const ISO_COUNTRY_CODE = /^[A-Z]{2}$/\n// function isCountryCode(countryCode) {\n// \treturn ISO_COUNTRY_CODE.test(countryCodeOrCountryCallingCode)\n// }\n//# sourceMappingURL=metadata.js.map","import { VALID_DIGITS } from '../../constants.js'; // The RFC 3966 format for extensions.\n\nvar RFC3966_EXTN_PREFIX = ';ext=';\n/**\r\n * Helper method for constructing regular expressions for parsing. Creates\r\n * an expression that captures up to max_length digits.\r\n * @return {string} RegEx pattern to capture extension digits.\r\n */\n\nvar getExtensionDigitsPattern = function getExtensionDigitsPattern(maxLength) {\n return \"([\".concat(VALID_DIGITS, \"]{1,\").concat(maxLength, \"})\");\n};\n/**\r\n * Helper initialiser method to create the regular-expression pattern to match\r\n * extensions.\r\n * Copy-pasted from Google's `libphonenumber`:\r\n * https://github.com/google/libphonenumber/blob/55b2646ec9393f4d3d6661b9c82ef9e258e8b829/javascript/i18n/phonenumbers/phonenumberutil.js#L759-L766\r\n * @return {string} RegEx pattern to capture extensions.\r\n */\n\n\nexport default function createExtensionPattern(purpose) {\n // We cap the maximum length of an extension based on the ambiguity of the way\n // the extension is prefixed. As per ITU, the officially allowed length for\n // extensions is actually 40, but we don't support this since we haven't seen real\n // examples and this introduces many false interpretations as the extension labels\n // are not standardized.\n\n /** @type {string} */\n var extLimitAfterExplicitLabel = '20';\n /** @type {string} */\n\n var extLimitAfterLikelyLabel = '15';\n /** @type {string} */\n\n var extLimitAfterAmbiguousChar = '9';\n /** @type {string} */\n\n var extLimitWhenNotSure = '6';\n /** @type {string} */\n\n var possibleSeparatorsBetweenNumberAndExtLabel = \"[ \\xA0\\\\t,]*\"; // Optional full stop (.) or colon, followed by zero or more spaces/tabs/commas.\n\n /** @type {string} */\n\n var possibleCharsAfterExtLabel = \"[:\\\\.\\uFF0E]?[ \\xA0\\\\t,-]*\";\n /** @type {string} */\n\n var optionalExtnSuffix = \"#?\"; // Here the extension is called out in more explicit way, i.e mentioning it obvious\n // patterns like \"ext.\".\n\n /** @type {string} */\n\n var explicitExtLabels = \"(?:e?xt(?:ensi(?:o\\u0301?|\\xF3))?n?|\\uFF45?\\uFF58\\uFF54\\uFF4E?|\\u0434\\u043E\\u0431|anexo)\"; // One-character symbols that can be used to indicate an extension, and less\n // commonly used or more ambiguous extension labels.\n\n /** @type {string} */\n\n var ambiguousExtLabels = \"(?:[x\\uFF58#\\uFF03~\\uFF5E]|int|\\uFF49\\uFF4E\\uFF54)\"; // When extension is not separated clearly.\n\n /** @type {string} */\n\n var ambiguousSeparator = \"[- ]+\"; // This is the same as possibleSeparatorsBetweenNumberAndExtLabel, but not matching\n // comma as extension label may have it.\n\n /** @type {string} */\n\n var possibleSeparatorsNumberExtLabelNoComma = \"[ \\xA0\\\\t]*\"; // \",,\" is commonly used for auto dialling the extension when connected. First\n // comma is matched through possibleSeparatorsBetweenNumberAndExtLabel, so we do\n // not repeat it here. Semi-colon works in Iphone and Android also to pop up a\n // button with the extension number following.\n\n /** @type {string} */\n\n var autoDiallingAndExtLabelsFound = \"(?:,{2}|;)\";\n /** @type {string} */\n\n var rfcExtn = RFC3966_EXTN_PREFIX + getExtensionDigitsPattern(extLimitAfterExplicitLabel);\n /** @type {string} */\n\n var explicitExtn = possibleSeparatorsBetweenNumberAndExtLabel + explicitExtLabels + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterExplicitLabel) + optionalExtnSuffix;\n /** @type {string} */\n\n var ambiguousExtn = possibleSeparatorsBetweenNumberAndExtLabel + ambiguousExtLabels + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterAmbiguousChar) + optionalExtnSuffix;\n /** @type {string} */\n\n var americanStyleExtnWithSuffix = ambiguousSeparator + getExtensionDigitsPattern(extLimitWhenNotSure) + \"#\";\n /** @type {string} */\n\n var autoDiallingExtn = possibleSeparatorsNumberExtLabelNoComma + autoDiallingAndExtLabelsFound + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterLikelyLabel) + optionalExtnSuffix;\n /** @type {string} */\n\n var onlyCommasExtn = possibleSeparatorsNumberExtLabelNoComma + \"(?:,)+\" + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterAmbiguousChar) + optionalExtnSuffix; // The first regular expression covers RFC 3966 format, where the extension is added\n // using \";ext=\". The second more generic where extension is mentioned with explicit\n // labels like \"ext:\". In both the above cases we allow more numbers in extension than\n // any other extension labels. The third one captures when single character extension\n // labels or less commonly used labels are used. In such cases we capture fewer\n // extension digits in order to reduce the chance of falsely interpreting two\n // numbers beside each other as a number + extension. The fourth one covers the\n // special case of American numbers where the extension is written with a hash\n // at the end, such as \"- 503#\". The fifth one is exclusively for extension\n // autodialling formats which are used when dialling and in this case we accept longer\n // extensions. The last one is more liberal on the number of commas that acts as\n // extension labels, so we have a strict cap on the number of digits in such extensions.\n\n return rfcExtn + \"|\" + explicitExtn + \"|\" + ambiguousExtn + \"|\" + americanStyleExtnWithSuffix + \"|\" + autoDiallingExtn + \"|\" + onlyCommasExtn;\n}\n//# sourceMappingURL=createExtensionPattern.js.map","import { MIN_LENGTH_FOR_NSN, VALID_DIGITS, VALID_PUNCTUATION, PLUS_CHARS } from '../constants.js';\nimport createExtensionPattern from './extension/createExtensionPattern.js'; // Regular expression of viable phone numbers. This is location independent.\n// Checks we have at least three leading digits, and only valid punctuation,\n// alpha characters and digits in the phone number. Does not include extension\n// data. The symbol 'x' is allowed here as valid punctuation since it is often\n// used as a placeholder for carrier codes, for example in Brazilian phone\n// numbers. We also allow multiple '+' characters at the start.\n//\n// Corresponds to the following:\n// [digits]{minLengthNsn}|\n// plus_sign*\n// (([punctuation]|[star])*[digits]){3,}([punctuation]|[star]|[digits]|[alpha])*\n//\n// The first reg-ex is to allow short numbers (two digits long) to be parsed if\n// they are entered as \"15\" etc, but only if there is no punctuation in them.\n// The second expression restricts the number of digits to three or more, but\n// then allows them to be in international form, and to have alpha-characters\n// and punctuation. We split up the two reg-exes here and combine them when\n// creating the reg-ex VALID_PHONE_NUMBER_PATTERN itself so we can prefix it\n// with ^ and append $ to each branch.\n//\n// \"Note VALID_PUNCTUATION starts with a -,\n// so must be the first in the range\" (c) Google devs.\n// (wtf did they mean by saying that; probably nothing)\n//\n\nvar MIN_LENGTH_PHONE_NUMBER_PATTERN = '[' + VALID_DIGITS + ']{' + MIN_LENGTH_FOR_NSN + '}'; //\n// And this is the second reg-exp:\n// (see MIN_LENGTH_PHONE_NUMBER_PATTERN for a full description of this reg-exp)\n//\n\nexport var VALID_PHONE_NUMBER = '[' + PLUS_CHARS + ']{0,1}' + '(?:' + '[' + VALID_PUNCTUATION + ']*' + '[' + VALID_DIGITS + ']' + '){3,}' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']*'; // This regular expression isn't present in Google's `libphonenumber`\n// and is only used to determine whether the phone number being input\n// is too short for it to even consider it a \"valid\" number.\n// This is just a way to differentiate between a really invalid phone\n// number like \"abcde\" and a valid phone number that a user has just\n// started inputting, like \"+1\" or \"1\": both these cases would be\n// considered `NOT_A_NUMBER` by Google's `libphonenumber`, but this\n// library can provide a more detailed error message — whether it's\n// really \"not a number\", or is it just a start of a valid phone number.\n\nvar VALID_PHONE_NUMBER_START_REG_EXP = new RegExp('^' + '[' + PLUS_CHARS + ']{0,1}' + '(?:' + '[' + VALID_PUNCTUATION + ']*' + '[' + VALID_DIGITS + ']' + '){1,2}' + '$', 'i');\nexport var VALID_PHONE_NUMBER_WITH_EXTENSION = VALID_PHONE_NUMBER + // Phone number extensions\n'(?:' + createExtensionPattern() + ')?'; // The combined regular expression for valid phone numbers:\n//\n\nvar VALID_PHONE_NUMBER_PATTERN = new RegExp( // Either a short two-digit-only phone number\n'^' + MIN_LENGTH_PHONE_NUMBER_PATTERN + '$' + '|' + // Or a longer fully parsed phone number (min 3 characters)\n'^' + VALID_PHONE_NUMBER_WITH_EXTENSION + '$', 'i'); // Checks to see if the string of characters could possibly be a phone number at\n// all. At the moment, checks to see that the string begins with at least 2\n// digits, ignoring any punctuation commonly found in phone numbers. This method\n// does not require the number to be normalized in advance - but does assume\n// that leading non-number symbols have been removed, such as by the method\n// `extract_possible_number`.\n//\n\nexport default function isViablePhoneNumber(number) {\n return number.length >= MIN_LENGTH_FOR_NSN && VALID_PHONE_NUMBER_PATTERN.test(number);\n} // This is just a way to differentiate between a really invalid phone\n// number like \"abcde\" and a valid phone number that a user has just\n// started inputting, like \"+1\" or \"1\": both these cases would be\n// considered `NOT_A_NUMBER` by Google's `libphonenumber`, but this\n// library can provide a more detailed error message — whether it's\n// really \"not a number\", or is it just a start of a valid phone number.\n\nexport function isViablePhoneNumberStart(number) {\n return VALID_PHONE_NUMBER_START_REG_EXP.test(number);\n}\n//# sourceMappingURL=isViablePhoneNumber.js.map","import createExtensionPattern from './createExtensionPattern.js'; // Regexp of all known extension prefixes used by different regions followed by\n// 1 or more valid digits, for use when parsing.\n\nvar EXTN_PATTERN = new RegExp('(?:' + createExtensionPattern() + ')$', 'i'); // Strips any extension (as in, the part of the number dialled after the call is\n// connected, usually indicated with extn, ext, x or similar) from the end of\n// the number, and returns it.\n\nexport default function extractExtension(number) {\n var start = number.search(EXTN_PATTERN);\n\n if (start < 0) {\n return {};\n } // If we find a potential extension, and the number preceding this is a viable\n // number, we assume it is an extension.\n\n\n var numberWithoutExtension = number.slice(0, start);\n var matches = number.match(EXTN_PATTERN);\n var i = 1;\n\n while (i < matches.length) {\n if (matches[i]) {\n return {\n number: numberWithoutExtension,\n ext: matches[i]\n };\n }\n\n i++;\n }\n}\n//# sourceMappingURL=extractExtension.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n// These mappings map a character (key) to a specific digit that should\n// replace it for normalization purposes. Non-European digits that\n// may be used in phone numbers are mapped to a European equivalent.\n//\n// E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\n//\nexport var DIGITS = {\n '0': '0',\n '1': '1',\n '2': '2',\n '3': '3',\n '4': '4',\n '5': '5',\n '6': '6',\n '7': '7',\n '8': '8',\n '9': '9',\n \"\\uFF10\": '0',\n // Fullwidth digit 0\n \"\\uFF11\": '1',\n // Fullwidth digit 1\n \"\\uFF12\": '2',\n // Fullwidth digit 2\n \"\\uFF13\": '3',\n // Fullwidth digit 3\n \"\\uFF14\": '4',\n // Fullwidth digit 4\n \"\\uFF15\": '5',\n // Fullwidth digit 5\n \"\\uFF16\": '6',\n // Fullwidth digit 6\n \"\\uFF17\": '7',\n // Fullwidth digit 7\n \"\\uFF18\": '8',\n // Fullwidth digit 8\n \"\\uFF19\": '9',\n // Fullwidth digit 9\n \"\\u0660\": '0',\n // Arabic-indic digit 0\n \"\\u0661\": '1',\n // Arabic-indic digit 1\n \"\\u0662\": '2',\n // Arabic-indic digit 2\n \"\\u0663\": '3',\n // Arabic-indic digit 3\n \"\\u0664\": '4',\n // Arabic-indic digit 4\n \"\\u0665\": '5',\n // Arabic-indic digit 5\n \"\\u0666\": '6',\n // Arabic-indic digit 6\n \"\\u0667\": '7',\n // Arabic-indic digit 7\n \"\\u0668\": '8',\n // Arabic-indic digit 8\n \"\\u0669\": '9',\n // Arabic-indic digit 9\n \"\\u06F0\": '0',\n // Eastern-Arabic digit 0\n \"\\u06F1\": '1',\n // Eastern-Arabic digit 1\n \"\\u06F2\": '2',\n // Eastern-Arabic digit 2\n \"\\u06F3\": '3',\n // Eastern-Arabic digit 3\n \"\\u06F4\": '4',\n // Eastern-Arabic digit 4\n \"\\u06F5\": '5',\n // Eastern-Arabic digit 5\n \"\\u06F6\": '6',\n // Eastern-Arabic digit 6\n \"\\u06F7\": '7',\n // Eastern-Arabic digit 7\n \"\\u06F8\": '8',\n // Eastern-Arabic digit 8\n \"\\u06F9\": '9' // Eastern-Arabic digit 9\n\n};\nexport function parseDigit(character) {\n return DIGITS[character];\n}\n/**\r\n * Parses phone number digits from a string.\r\n * Drops all punctuation leaving only digits.\r\n * Also converts wide-ascii and arabic-indic numerals to conventional numerals.\r\n * E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\r\n * @param {string} string\r\n * @return {string}\r\n * @example\r\n * ```js\r\n * parseDigits('8 (800) 555')\r\n * // Outputs '8800555'.\r\n * ```\r\n */\n\nexport default function parseDigits(string) {\n var result = ''; // Using `.split('')` here instead of normal `for ... of`\n // because the importing application doesn't neccessarily include an ES6 polyfill.\n // The `.split('')` approach discards \"exotic\" UTF-8 characters\n // (the ones consisting of four bytes) but digits\n // (including non-European ones) don't fall into that range\n // so such \"exotic\" characters would be discarded anyway.\n\n for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {\n var character = _step.value;\n var digit = parseDigit(character);\n\n if (digit) {\n result += digit;\n }\n }\n\n return result;\n}\n//# sourceMappingURL=parseDigits.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport { parseDigit } from './helpers/parseDigits.js';\n/**\r\n * Parses phone number characters from a string.\r\n * Drops all punctuation leaving only digits and the leading `+` sign (if any).\r\n * Also converts wide-ascii and arabic-indic numerals to conventional numerals.\r\n * E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\r\n * @param {string} string\r\n * @return {string}\r\n * @example\r\n * ```js\r\n * // Outputs '8800555'.\r\n * parseIncompletePhoneNumber('8 (800) 555')\r\n * // Outputs '+7800555'.\r\n * parseIncompletePhoneNumber('+7 800 555')\r\n * ```\r\n */\n\nexport default function parseIncompletePhoneNumber(string) {\n var result = ''; // Using `.split('')` here instead of normal `for ... of`\n // because the importing application doesn't neccessarily include an ES6 polyfill.\n // The `.split('')` approach discards \"exotic\" UTF-8 characters\n // (the ones consisting of four bytes) but digits\n // (including non-European ones) don't fall into that range\n // so such \"exotic\" characters would be discarded anyway.\n\n for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {\n var character = _step.value;\n result += parsePhoneNumberCharacter(character, result) || '';\n }\n\n return result;\n}\n/**\r\n * Parses next character while parsing phone number digits (including a `+`)\r\n * from text: discards everything except `+` and digits, and `+` is only allowed\r\n * at the start of a phone number.\r\n * For example, is used in `react-phone-number-input` where it uses\r\n * [`input-format`](https://gitlab.com/catamphetamine/input-format).\r\n * @param {string} character - Yet another character from raw input string.\r\n * @param {string?} prevParsedCharacters - Previous parsed characters.\r\n * @param {function?} emitEvent - An optional \"emit event\" function.\r\n * @return {string?} The parsed character.\r\n */\n\nexport function parsePhoneNumberCharacter(character, prevParsedCharacters, emitEvent) {\n // Only allow a leading `+`.\n if (character === '+') {\n // If this `+` is not the first parsed character\n // then discard it.\n if (prevParsedCharacters) {\n // `emitEvent` argument was added to this `export`ed function on Dec 26th, 2023.\n // Any 3rd-party code that used to `import` and call this function before that\n // won't be passing any `emitEvent` argument.\n //\n // The addition of the `emitEvent` argument was to fix the slightly-weird behavior\n // of parsing an input string when the user inputs something like `\"2+7\"\n // https://github.com/catamphetamine/react-phone-number-input/issues/437\n //\n // If the parser encounters an unexpected `+` in a string being parsed\n // then it simply discards that out-of-place `+` and any following characters.\n //\n if (typeof emitEvent === 'function') {\n emitEvent('end');\n }\n\n return;\n }\n\n return '+';\n } // Allow digits.\n\n\n return parseDigit(character);\n}\n//# sourceMappingURL=parseIncompletePhoneNumber.js.map","import mergeArrays from './mergeArrays.js';\nexport default function checkNumberLength(nationalNumber, metadata) {\n return checkNumberLengthForType(nationalNumber, undefined, metadata);\n} // Checks whether a number is possible for the country based on its length.\n// Should only be called for the \"new\" metadata which has \"possible lengths\".\n\nexport function checkNumberLengthForType(nationalNumber, type, metadata) {\n var type_info = metadata.type(type); // There should always be \"<possiblePengths/>\" set for every type element.\n // This is declared in the XML schema.\n // For size efficiency, where a sub-description (e.g. fixed-line)\n // has the same \"<possiblePengths/>\" as the \"general description\", this is missing,\n // so we fall back to the \"general description\". Where no numbers of the type\n // exist at all, there is one possible length (-1) which is guaranteed\n // not to match the length of any real phone number.\n\n var possible_lengths = type_info && type_info.possibleLengths() || metadata.possibleLengths(); // let local_lengths = type_info && type.possibleLengthsLocal() || metadata.possibleLengthsLocal()\n // Metadata before version `1.0.18` didn't contain `possible_lengths`.\n\n if (!possible_lengths) {\n return 'IS_POSSIBLE';\n }\n\n if (type === 'FIXED_LINE_OR_MOBILE') {\n // No such country in metadata.\n\n /* istanbul ignore next */\n if (!metadata.type('FIXED_LINE')) {\n // The rare case has been encountered where no fixedLine data is available\n // (true for some non-geographic entities), so we just check mobile.\n return checkNumberLengthForType(nationalNumber, 'MOBILE', metadata);\n }\n\n var mobile_type = metadata.type('MOBILE');\n\n if (mobile_type) {\n // Merge the mobile data in if there was any. \"Concat\" creates a new\n // array, it doesn't edit possible_lengths in place, so we don't need a copy.\n // Note that when adding the possible lengths from mobile, we have\n // to again check they aren't empty since if they are this indicates\n // they are the same as the general desc and should be obtained from there.\n possible_lengths = mergeArrays(possible_lengths, mobile_type.possibleLengths()); // The current list is sorted; we need to merge in the new list and\n // re-sort (duplicates are okay). Sorting isn't so expensive because\n // the lists are very small.\n // if (local_lengths) {\n // \tlocal_lengths = mergeArrays(local_lengths, mobile_type.possibleLengthsLocal())\n // } else {\n // \tlocal_lengths = mobile_type.possibleLengthsLocal()\n // }\n }\n } // If the type doesn't exist then return 'INVALID_LENGTH'.\n else if (type && !type_info) {\n return 'INVALID_LENGTH';\n }\n\n var actual_length = nationalNumber.length; // In `libphonenumber-js` all \"local-only\" formats are dropped for simplicity.\n // // This is safe because there is never an overlap beween the possible lengths\n // // and the local-only lengths; this is checked at build time.\n // if (local_lengths && local_lengths.indexOf(nationalNumber.length) >= 0)\n // {\n // \treturn 'IS_POSSIBLE_LOCAL_ONLY'\n // }\n\n var minimum_length = possible_lengths[0];\n\n if (minimum_length === actual_length) {\n return 'IS_POSSIBLE';\n }\n\n if (minimum_length > actual_length) {\n return 'TOO_SHORT';\n }\n\n if (possible_lengths[possible_lengths.length - 1] < actual_length) {\n return 'TOO_LONG';\n } // We skip the first element since we've already checked it.\n\n\n return possible_lengths.indexOf(actual_length, 1) >= 0 ? 'IS_POSSIBLE' : 'INVALID_LENGTH';\n}\n//# sourceMappingURL=checkNumberLength.js.map","import Metadata from './metadata.js';\nimport checkNumberLength from './helpers/checkNumberLength.js';\n/**\r\n * Checks if a phone number is \"possible\" (basically just checks its length).\r\n *\r\n * isPossible(phoneNumberInstance, { ..., v2: true }, metadata)\r\n *\r\n * isPossible({ phone: '8005553535', country: 'RU' }, { ... }, metadata)\r\n * isPossible({ phone: '8005553535', country: 'RU' }, undefined, metadata)\r\n *\r\n * @param {object|PhoneNumber} input — If `options.v2: true` flag is passed, the `input` should be a `PhoneNumber` instance. Otherwise, it should be an object of shape `{ phone: '...', country: '...' }`.\r\n * @param {object} [options]\r\n * @param {object} metadata\r\n * @return {string}\r\n */\n\nexport default function isPossiblePhoneNumber(input, options, metadata) {\n /* istanbul ignore if */\n if (options === undefined) {\n options = {};\n }\n\n metadata = new Metadata(metadata);\n\n if (options.v2) {\n if (!input.countryCallingCode) {\n throw new Error('Invalid phone number object passed');\n }\n\n metadata.selectNumberingPlan(input.countryCallingCode);\n } else {\n if (!input.phone) {\n return false;\n }\n\n if (input.country) {\n if (!metadata.hasCountry(input.country)) {\n throw new Error(\"Unknown country: \".concat(input.country));\n }\n\n metadata.country(input.country);\n } else {\n if (!input.countryCallingCode) {\n throw new Error('Invalid phone number object passed');\n }\n\n metadata.selectNumberingPlan(input.countryCallingCode);\n }\n } // Old metadata (< 1.0.18) had no \"possible length\" data.\n\n\n if (metadata.possibleLengths()) {\n return isPossibleNumber(input.phone || input.nationalNumber, metadata);\n } else {\n // There was a bug between `1.7.35` and `1.7.37` where \"possible_lengths\"\n // were missing for \"non-geographical\" numbering plans.\n // Just assume the number is possible in such cases:\n // it's unlikely that anyone generated their custom metadata\n // in that short period of time (one day).\n // This code can be removed in some future major version update.\n if (input.countryCallingCode && metadata.isNonGeographicCallingCode(input.countryCallingCode)) {\n // \"Non-geographic entities\" did't have `possibleLengths`\n // due to a bug in metadata generation process.\n return true;\n } else {\n throw new Error('Missing \"possibleLengths\" in metadata. Perhaps the metadata has been generated before v1.0.18.');\n }\n }\n}\nexport function isPossibleNumber(nationalNumber, metadata) {\n //, isInternational) {\n switch (checkNumberLength(nationalNumber, metadata)) {\n case 'IS_POSSIBLE':\n return true;\n // This library ignores \"local-only\" phone numbers (for simplicity).\n // See the readme for more info on what are \"local-only\" phone numbers.\n // case 'IS_POSSIBLE_LOCAL_ONLY':\n // \treturn !isInternational\n\n default:\n return false;\n }\n}\n//# sourceMappingURL=isPossible.js.map","/**\r\n * Checks whether the entire input sequence can be matched\r\n * against the regular expression.\r\n * @return {boolean}\r\n */\nexport default function matchesEntirely(text, regular_expression) {\n // If assigning the `''` default value is moved to the arguments above,\n // code coverage would decrease for some weird reason.\n text = text || '';\n return new RegExp('^(?:' + regular_expression + ')$').test(text);\n}\n//# sourceMappingURL=matchesEntirely.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport Metadata from '../metadata.js';\nimport matchesEntirely from './matchesEntirely.js';\nvar NON_FIXED_LINE_PHONE_TYPES = ['MOBILE', 'PREMIUM_RATE', 'TOLL_FREE', 'SHARED_COST', 'VOIP', 'PERSONAL_NUMBER', 'PAGER', 'UAN', 'VOICEMAIL']; // Finds out national phone number type (fixed line, mobile, etc)\n\nexport default function getNumberType(input, options, metadata) {\n // If assigning the `{}` default value is moved to the arguments above,\n // code coverage would decrease for some weird reason.\n options = options || {}; // When `parse()` returns an empty object — `{}` —\n // that means that the phone number is malformed,\n // so it can't possibly be valid.\n\n if (!input.country && !input.countryCallingCode) {\n return;\n }\n\n metadata = new Metadata(metadata);\n metadata.selectNumberingPlan(input.country, input.countryCallingCode);\n var nationalNumber = options.v2 ? input.nationalNumber : input.phone; // The following is copy-pasted from the original function:\n // https://github.com/googlei18n/libphonenumber/blob/3ea547d4fbaa2d0b67588904dfa5d3f2557c27ff/javascript/i18n/phonenumbers/phonenumberutil.js#L2835\n // Is this national number even valid for this country\n\n if (!matchesEntirely(nationalNumber, metadata.nationalNumberPattern())) {\n return;\n } // Is it fixed line number\n\n\n if (isNumberTypeEqualTo(nationalNumber, 'FIXED_LINE', metadata)) {\n // Because duplicate regular expressions are removed\n // to reduce metadata size, if \"mobile\" pattern is \"\"\n // then it means it was removed due to being a duplicate of the fixed-line pattern.\n //\n if (metadata.type('MOBILE') && metadata.type('MOBILE').pattern() === '') {\n return 'FIXED_LINE_OR_MOBILE';\n } // `MOBILE` type pattern isn't included if it matched `FIXED_LINE` one.\n // For example, for \"US\" country.\n // Old metadata (< `1.0.18`) had a specific \"types\" data structure\n // that happened to be `undefined` for `MOBILE` in that case.\n // Newer metadata (>= `1.0.18`) has another data structure that is\n // not `undefined` for `MOBILE` in that case (it's just an empty array).\n // So this `if` is just for backwards compatibility with old metadata.\n\n\n if (!metadata.type('MOBILE')) {\n return 'FIXED_LINE_OR_MOBILE';\n } // Check if the number happens to qualify as both fixed line and mobile.\n // (no such country in the minimal metadata set)\n\n /* istanbul ignore if */\n\n\n if (isNumberTypeEqualTo(nationalNumber, 'MOBILE', metadata)) {\n return 'FIXED_LINE_OR_MOBILE';\n }\n\n return 'FIXED_LINE';\n }\n\n for (var _iterator = _createForOfIteratorHelperLoose(NON_FIXED_LINE_PHONE_TYPES), _step; !(_step = _iterator()).done;) {\n var type = _step.value;\n\n if (isNumberTypeEqualTo(nationalNumber, type, metadata)) {\n return type;\n }\n }\n}\nexport function isNumberTypeEqualTo(nationalNumber, type, metadata) {\n type = metadata.type(type);\n\n if (!type || !type.pattern()) {\n return false;\n } // Check if any possible number lengths are present;\n // if so, we use them to avoid checking\n // the validation pattern if they don't match.\n // If they are absent, this means they match\n // the general description, which we have\n // already checked before a specific number type.\n\n\n if (type.possibleLengths() && type.possibleLengths().indexOf(nationalNumber.length) < 0) {\n return false;\n }\n\n return matchesEntirely(nationalNumber, type.pattern());\n}\n//# sourceMappingURL=getNumberType.js.map","import Metadata from './metadata.js';\nimport matchesEntirely from './helpers/matchesEntirely.js';\nimport getNumberType from './helpers/getNumberType.js';\n/**\r\n * Checks if a given phone number is valid.\r\n *\r\n * isValid(phoneNumberInstance, { ..., v2: true }, metadata)\r\n *\r\n * isPossible({ phone: '8005553535', country: 'RU' }, { ... }, metadata)\r\n * isPossible({ phone: '8005553535', country: 'RU' }, undefined, metadata)\r\n *\r\n * If the `number` is a string, it will be parsed to an object,\r\n * but only if it contains only valid phone number characters (including punctuation).\r\n * If the `number` is an object, it is used as is.\r\n *\r\n * The optional `defaultCountry` argument is the default country.\r\n * I.e. it does not restrict to just that country,\r\n * e.g. in those cases where several countries share\r\n * the same phone numbering rules (NANPA, Britain, etc).\r\n * For example, even though the number `07624 369230`\r\n * belongs to the Isle of Man (\"IM\" country code)\r\n * calling `isValidNumber('07624369230', 'GB', metadata)`\r\n * still returns `true` because the country is not restricted to `GB`,\r\n * it's just that `GB` is the default one for the phone numbering rules.\r\n * For restricting the country see `isValidNumberForRegion()`\r\n * though restricting a country might not be a good idea.\r\n * https://github.com/googlei18n/libphonenumber/blob/master/FAQ.md#when-should-i-use-isvalidnumberforregion\r\n *\r\n * Examples:\r\n *\r\n * ```js\r\n * isValidNumber('+78005553535', metadata)\r\n * isValidNumber('8005553535', 'RU', metadata)\r\n * isValidNumber('88005553535', 'RU', metadata)\r\n * isValidNumber({ phone: '8005553535', country: 'RU' }, metadata)\r\n * ```\r\n */\n\nexport default function isValidNumber(input, options, metadata) {\n // If assigning the `{}` default value is moved to the arguments above,\n // code coverage would decrease for some weird reason.\n options = options || {};\n metadata = new Metadata(metadata);\n metadata.selectNumberingPlan(input.country, input.countryCallingCode); // By default, countries only have type regexps when it's required for\n // distinguishing different countries having the same `countryCallingCode`.\n\n if (metadata.hasTypes()) {\n return getNumberType(input, options, metadata.metadata) !== undefined;\n } // If there are no type regexps for this country in metadata then use\n // `nationalNumberPattern` as a \"better than nothing\" replacement.\n\n\n var nationalNumber = options.v2 ? input.nationalNumber : input.phone;\n return matchesEntirely(nationalNumber, metadata.nationalNumberPattern());\n}\n//# sourceMappingURL=isValid.js.map","import Metadata from '../metadata.js';\n/**\r\n * Returns a list of countries that the phone number could potentially belong to.\r\n * @param {string} callingCode — Calling code.\r\n * @param {string} nationalNumber — National (significant) number.\r\n * @param {object} metadata — Metadata.\r\n * @return {string[]} A list of possible countries.\r\n */\n\nexport default function getPossibleCountriesForNumber(callingCode, nationalNumber, metadata) {\n var _metadata = new Metadata(metadata);\n\n var possibleCountries = _metadata.getCountryCodesForCallingCode(callingCode);\n\n if (!possibleCountries) {\n return [];\n }\n\n return possibleCountries.filter(function (country) {\n return couldNationalNumberBelongToCountry(nationalNumber, country, metadata);\n });\n}\n\nfunction couldNationalNumberBelongToCountry(nationalNumber, country, metadata) {\n var _metadata = new Metadata(metadata);\n\n _metadata.selectNumberingPlan(country);\n\n if (_metadata.numberingPlan.possibleLengths().indexOf(nationalNumber.length) >= 0) {\n return true;\n }\n\n return false;\n}\n//# sourceMappingURL=getPossibleCountriesForNumber.js.map","import { VALID_PUNCTUATION } from '../constants.js'; // Removes brackets and replaces dashes with spaces.\n//\n// E.g. \"(999) 111-22-33\" -> \"999 111 22 33\"\n//\n// For some reason Google's metadata contains `<intlFormat/>`s with brackets and dashes.\n// Meanwhile, there's no single opinion about using punctuation in international phone numbers.\n//\n// For example, Google's `<intlFormat/>` for USA is `+1 213-373-4253`.\n// And here's a quote from WikiPedia's \"North American Numbering Plan\" page:\n// https://en.wikipedia.org/wiki/North_American_Numbering_Plan\n//\n// \"The country calling code for all countries participating in the NANP is 1.\n// In international format, an NANP number should be listed as +1 301 555 01 00,\n// where 301 is an area code (Maryland).\"\n//\n// I personally prefer the international format without any punctuation.\n// For example, brackets are remnants of the old age, meaning that the\n// phone number part in brackets (so called \"area code\") can be omitted\n// if dialing within the same \"area\".\n// And hyphens were clearly introduced for splitting local numbers into memorizable groups.\n// For example, remembering \"5553535\" is difficult but \"555-35-35\" is much simpler.\n// Imagine a man taking a bus from home to work and seeing an ad with a phone number.\n// He has a couple of seconds to memorize that number until it passes by.\n// If it were spaces instead of hyphens the man wouldn't necessarily get it,\n// but with hyphens instead of spaces the grouping is more explicit.\n// I personally think that hyphens introduce visual clutter,\n// so I prefer replacing them with spaces in international numbers.\n// In the modern age all output is done on displays where spaces are clearly distinguishable\n// so hyphens can be safely replaced with spaces without losing any legibility.\n//\n\nexport default function applyInternationalSeparatorStyle(formattedNumber) {\n return formattedNumber.replace(new RegExp(\"[\".concat(VALID_PUNCTUATION, \"]+\"), 'g'), ' ').trim();\n}\n//# sourceMappingURL=applyInternationalSeparatorStyle.js.map","import applyInternationalSeparatorStyle from './applyInternationalSeparatorStyle.js'; // This was originally set to $1 but there are some countries for which the\n// first group is not used in the national pattern (e.g. Argentina) so the $1\n// group does not match correctly. Therefore, we use `\\d`, so that the first\n// group actually used in the pattern will be matched.\n\nexport var FIRST_GROUP_PATTERN = /(\\$\\d)/;\nexport default function formatNationalNumberUsingFormat(number, format, _ref) {\n var useInternationalFormat = _ref.useInternationalFormat,\n withNationalPrefix = _ref.withNationalPrefix,\n carrierCode = _ref.carrierCode,\n metadata = _ref.metadata;\n var formattedNumber = number.replace(new RegExp(format.pattern()), useInternationalFormat ? format.internationalFormat() : // This library doesn't use `domestic_carrier_code_formatting_rule`,\n // because that one is only used when formatting phone numbers\n // for dialing from a mobile phone, and this is not a dialing library.\n // carrierCode && format.domesticCarrierCodeFormattingRule()\n // \t// First, replace the $CC in the formatting rule with the desired carrier code.\n // \t// Then, replace the $FG in the formatting rule with the first group\n // \t// and the carrier code combined in the appropriate way.\n // \t? format.format().replace(FIRST_GROUP_PATTERN, format.domesticCarrierCodeFormattingRule().replace('$CC', carrierCode))\n // \t: (\n // \t\twithNationalPrefix && format.nationalPrefixFormattingRule()\n // \t\t\t? format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule())\n // \t\t\t: format.format()\n // \t)\n withNationalPrefix && format.nationalPrefixFormattingRule() ? format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule()) : format.format());\n\n if (useInternationalFormat) {\n return applyInternationalSeparatorStyle(formattedNumber);\n }\n\n return formattedNumber;\n}\n//# sourceMappingURL=formatNationalNumberUsingFormat.js.map","import Metadata from '../metadata.js';\n/**\r\n * Pattern that makes it easy to distinguish whether a region has a single\r\n * international dialing prefix or not. If a region has a single international\r\n * prefix (e.g. 011 in USA), it will be represented as a string that contains\r\n * a sequence of ASCII digits, and possibly a tilde, which signals waiting for\r\n * the tone. If there are multiple available international prefixes in a\r\n * region, they will be represented as a regex string that always contains one\r\n * or more characters that are not ASCII digits or a tilde.\r\n */\n\nvar SINGLE_IDD_PREFIX_REG_EXP = /^[\\d]+(?:[~\\u2053\\u223C\\uFF5E][\\d]+)?$/; // For regions that have multiple IDD prefixes\n// a preferred IDD prefix is returned.\n\nexport default function getIddPrefix(country, callingCode, metadata) {\n var countryMetadata = new Metadata(metadata);\n countryMetadata.selectNumberingPlan(country, callingCode);\n\n if (countryMetadata.defaultIDDPrefix()) {\n return countryMetadata.defaultIDDPrefix();\n }\n\n if (SINGLE_IDD_PREFIX_REG_EXP.test(countryMetadata.IDDPrefix())) {\n return countryMetadata.IDDPrefix();\n }\n}\n//# sourceMappingURL=getIddPrefix.js.map","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport isViablePhoneNumber from './isViablePhoneNumber.js'; // https://www.ietf.org/rfc/rfc3966.txt\n\n/**\r\n * @param {string} text - Phone URI (RFC 3966).\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\n\nexport function parseRFC3966(text) {\n var number;\n var ext; // Replace \"tel:\" with \"tel=\" for parsing convenience.\n\n text = text.replace(/^tel:/, 'tel=');\n\n for (var _iterator = _createForOfIteratorHelperLoose(text.split(';')), _step; !(_step = _iterator()).done;) {\n var part = _step.value;\n\n var _part$split = part.split('='),\n _part$split2 = _slicedToArray(_part$split, 2),\n name = _part$split2[0],\n value = _part$split2[1];\n\n switch (name) {\n case 'tel':\n number = value;\n break;\n\n case 'ext':\n ext = value;\n break;\n\n case 'phone-context':\n // Only \"country contexts\" are supported.\n // \"Domain contexts\" are ignored.\n if (value[0] === '+') {\n number = value + number;\n }\n\n break;\n }\n } // If the phone number is not viable, then abort.\n\n\n if (!isViablePhoneNumber(number)) {\n return {};\n }\n\n var result = {\n number: number\n };\n\n if (ext) {\n result.ext = ext;\n }\n\n return result;\n}\n/**\r\n * @param {object} - `{ ?number, ?extension }`.\r\n * @return {string} Phone URI (RFC 3966).\r\n */\n\nexport function formatRFC3966(_ref) {\n var number = _ref.number,\n ext = _ref.ext;\n\n if (!number) {\n return '';\n }\n\n if (number[0] !== '+') {\n throw new Error(\"\\\"formatRFC3966()\\\" expects \\\"number\\\" to be in E.164 format.\");\n }\n\n return \"tel:\".concat(number).concat(ext ? ';ext=' + ext : '');\n}\n//# sourceMappingURL=RFC3966.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\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 _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\n// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of December 31th, 2018.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\nimport matchesEntirely from './helpers/matchesEntirely.js';\nimport formatNationalNumberUsingFormat from './helpers/formatNationalNumberUsingFormat.js';\nimport Metadata, { getCountryCallingCode } from './metadata.js';\nimport getIddPrefix from './helpers/getIddPrefix.js';\nimport { formatRFC3966 } from './helpers/RFC3966.js';\nvar DEFAULT_OPTIONS = {\n formatExtension: function formatExtension(formattedNumber, extension, metadata) {\n return \"\".concat(formattedNumber).concat(metadata.ext()).concat(extension);\n }\n};\n/**\r\n * Formats a phone number.\r\n *\r\n * format(phoneNumberInstance, 'INTERNATIONAL', { ..., v2: true }, metadata)\r\n * format(phoneNumberInstance, 'NATIONAL', { ..., v2: true }, metadata)\r\n *\r\n * format({ phone: '8005553535', country: 'RU' }, 'INTERNATIONAL', { ... }, metadata)\r\n * format({ phone: '8005553535', country: 'RU' }, 'NATIONAL', undefined, metadata)\r\n *\r\n * @param {object|PhoneNumber} input — If `options.v2: true` flag is passed, the `input` should be a `PhoneNumber` instance. Otherwise, it should be an object of shape `{ phone: '...', country: '...' }`.\r\n * @param {string} format\r\n * @param {object} [options]\r\n * @param {object} metadata\r\n * @return {string}\r\n */\n\nexport default function formatNumber(input, format, options, metadata) {\n // Apply default options.\n if (options) {\n options = _objectSpread(_objectSpread({}, DEFAULT_OPTIONS), options);\n } else {\n options = DEFAULT_OPTIONS;\n }\n\n metadata = new Metadata(metadata);\n\n if (input.country && input.country !== '001') {\n // Validate `input.country`.\n if (!metadata.hasCountry(input.country)) {\n throw new Error(\"Unknown country: \".concat(input.country));\n }\n\n metadata.country(input.country);\n } else if (input.countryCallingCode) {\n metadata.selectNumberingPlan(input.countryCallingCode);\n } else return input.phone || '';\n\n var countryCallingCode = metadata.countryCallingCode();\n var nationalNumber = options.v2 ? input.nationalNumber : input.phone; // This variable should have been declared inside `case`s\n // but Babel has a bug and it says \"duplicate variable declaration\".\n\n var number;\n\n switch (format) {\n case 'NATIONAL':\n // Legacy argument support.\n // (`{ country: ..., phone: '' }`)\n if (!nationalNumber) {\n return '';\n }\n\n number = formatNationalNumber(nationalNumber, input.carrierCode, 'NATIONAL', metadata, options);\n return addExtension(number, input.ext, metadata, options.formatExtension);\n\n case 'INTERNATIONAL':\n // Legacy argument support.\n // (`{ country: ..., phone: '' }`)\n if (!nationalNumber) {\n return \"+\".concat(countryCallingCode);\n }\n\n number = formatNationalNumber(nationalNumber, null, 'INTERNATIONAL', metadata, options);\n number = \"+\".concat(countryCallingCode, \" \").concat(number);\n return addExtension(number, input.ext, metadata, options.formatExtension);\n\n case 'E.164':\n // `E.164` doesn't define \"phone number extensions\".\n return \"+\".concat(countryCallingCode).concat(nationalNumber);\n\n case 'RFC3966':\n return formatRFC3966({\n number: \"+\".concat(countryCallingCode).concat(nationalNumber),\n ext: input.ext\n });\n // For reference, here's Google's IDD formatter:\n // https://github.com/google/libphonenumber/blob/32719cf74e68796788d1ca45abc85dcdc63ba5b9/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L1546\n // Not saying that this IDD formatter replicates it 1:1, but it seems to work.\n // Who would even need to format phone numbers in IDD format anyway?\n\n case 'IDD':\n if (!options.fromCountry) {\n return; // throw new Error('`fromCountry` option not passed for IDD-prefixed formatting.')\n }\n\n var formattedNumber = formatIDD(nationalNumber, input.carrierCode, countryCallingCode, options.fromCountry, metadata);\n return addExtension(formattedNumber, input.ext, metadata, options.formatExtension);\n\n default:\n throw new Error(\"Unknown \\\"format\\\" argument passed to \\\"formatNumber()\\\": \\\"\".concat(format, \"\\\"\"));\n }\n}\n\nfunction formatNationalNumber(number, carrierCode, formatAs, metadata, options) {\n var format = chooseFormatForNumber(metadata.formats(), number);\n\n if (!format) {\n return number;\n }\n\n return formatNationalNumberUsingFormat(number, format, {\n useInternationalFormat: formatAs === 'INTERNATIONAL',\n withNationalPrefix: format.nationalPrefixIsOptionalWhenFormattingInNationalFormat() && options && options.nationalPrefix === false ? false : true,\n carrierCode: carrierCode,\n metadata: metadata\n });\n}\n\nexport function chooseFormatForNumber(availableFormats, nationalNnumber) {\n for (var _iterator = _createForOfIteratorHelperLoose(availableFormats), _step; !(_step = _iterator()).done;) {\n var format = _step.value;\n\n // Validate leading digits.\n // The test case for \"else path\" could be found by searching for\n // \"format.leadingDigitsPatterns().length === 0\".\n if (format.leadingDigitsPatterns().length > 0) {\n // The last leading_digits_pattern is used here, as it is the most detailed\n var lastLeadingDigitsPattern = format.leadingDigitsPatterns()[format.leadingDigitsPatterns().length - 1]; // If leading digits don't match then move on to the next phone number format\n\n if (nationalNnumber.search(lastLeadingDigitsPattern) !== 0) {\n continue;\n }\n } // Check that the national number matches the phone number format regular expression\n\n\n if (matchesEntirely(nationalNnumber, format.pattern())) {\n return format;\n }\n }\n}\n\nfunction addExtension(formattedNumber, ext, metadata, formatExtension) {\n return ext ? formatExtension(formattedNumber, ext, metadata) : formattedNumber;\n}\n\nfunction formatIDD(nationalNumber, carrierCode, countryCallingCode, fromCountry, metadata) {\n var fromCountryCallingCode = getCountryCallingCode(fromCountry, metadata.metadata); // When calling within the same country calling code.\n\n if (fromCountryCallingCode === countryCallingCode) {\n var formattedNumber = formatNationalNumber(nationalNumber, carrierCode, 'NATIONAL', metadata); // For NANPA regions, return the national format for these regions\n // but prefix it with the country calling code.\n\n if (countryCallingCode === '1') {\n return countryCallingCode + ' ' + formattedNumber;\n } // If regions share a country calling code, the country calling code need\n // not be dialled. This also applies when dialling within a region, so this\n // if clause covers both these cases. Technically this is the case for\n // dialling from La Reunion to other overseas departments of France (French\n // Guiana, Martinique, Guadeloupe), but not vice versa - so we don't cover\n // this edge case for now and for those cases return the version including\n // country calling code. Details here:\n // http://www.petitfute.com/voyage/225-info-pratiques-reunion\n //\n\n\n return formattedNumber;\n }\n\n var iddPrefix = getIddPrefix(fromCountry, undefined, metadata.metadata);\n\n if (iddPrefix) {\n return \"\".concat(iddPrefix, \" \").concat(countryCallingCode, \" \").concat(formatNationalNumber(nationalNumber, null, 'INTERNATIONAL', metadata));\n }\n}\n//# sourceMappingURL=format.js.map","function 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 _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\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\nimport Metadata from './metadata.js';\nimport isPossibleNumber from './isPossible.js';\nimport isValidNumber from './isValid.js'; // import checkNumberLength from './helpers/checkNumberLength.js'\n\nimport getNumberType from './helpers/getNumberType.js';\nimport getPossibleCountriesForNumber from './helpers/getPossibleCountriesForNumber.js';\nimport formatNumber from './format.js';\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\n\nvar PhoneNumber = /*#__PURE__*/function () {\n /**\r\n * @param {string} countryOrCountryCallingCode\r\n * @param {string} nationalNumber\r\n * @param {object} metadata — Metadata JSON\r\n * @return {PhoneNumber}\r\n */\n function PhoneNumber(countryOrCountryCallingCode, nationalNumber, metadata) {\n _classCallCheck(this, PhoneNumber);\n\n if (!countryOrCountryCallingCode) {\n throw new TypeError('`country` or `countryCallingCode` not passed');\n }\n\n if (!nationalNumber) {\n throw new TypeError('`nationalNumber` not passed');\n }\n\n if (!metadata) {\n throw new TypeError('`metadata` not passed');\n }\n\n var _getCountryAndCountry = getCountryAndCountryCallingCode(countryOrCountryCallingCode, metadata),\n country = _getCountryAndCountry.country,\n countryCallingCode = _getCountryAndCountry.countryCallingCode;\n\n this.country = country;\n this.countryCallingCode = countryCallingCode;\n this.nationalNumber = nationalNumber;\n this.number = '+' + this.countryCallingCode + this.nationalNumber; // Exclude `metadata` property output from `PhoneNumber.toString()`\n // so that it doesn't clutter the console output of Node.js.\n // Previously, when Node.js did `console.log(new PhoneNumber(...))`,\n // it would output the whole internal structure of the `metadata` object.\n\n this.getMetadata = function () {\n return metadata;\n };\n }\n\n _createClass(PhoneNumber, [{\n key: \"setExt\",\n value: function setExt(ext) {\n this.ext = ext;\n }\n }, {\n key: \"getPossibleCountries\",\n value: function getPossibleCountries() {\n if (this.country) {\n return [this.country];\n }\n\n return getPossibleCountriesForNumber(this.countryCallingCode, this.nationalNumber, this.getMetadata());\n }\n }, {\n key: \"isPossible\",\n value: function isPossible() {\n return isPossibleNumber(this, {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"isValid\",\n value: function isValid() {\n return isValidNumber(this, {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"isNonGeographic\",\n value: function isNonGeographic() {\n var metadata = new Metadata(this.getMetadata());\n return metadata.isNonGeographicCallingCode(this.countryCallingCode);\n }\n }, {\n key: \"isEqual\",\n value: function isEqual(phoneNumber) {\n return this.number === phoneNumber.number && this.ext === phoneNumber.ext;\n } // This function was originally meant to be an equivalent for `validatePhoneNumberLength()`,\n // but later it was found out that it doesn't include the possible `TOO_SHORT` result\n // returned from `parsePhoneNumberWithError()` in the original `validatePhoneNumberLength()`,\n // so eventually I simply commented out this method from the `PhoneNumber` class\n // and just left the `validatePhoneNumberLength()` function, even though that one would require\n // and additional step to also validate the actual country / calling code of the phone number.\n // validateLength() {\n // \tconst metadata = new Metadata(this.getMetadata())\n // \tmetadata.selectNumberingPlan(this.countryCallingCode)\n // \tconst result = checkNumberLength(this.nationalNumber, metadata)\n // \tif (result !== 'IS_POSSIBLE') {\n // \t\treturn result\n // \t}\n // }\n\n }, {\n key: \"getType\",\n value: function getType() {\n return getNumberType(this, {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"format\",\n value: function format(_format, options) {\n return formatNumber(this, _format, options ? _objectSpread(_objectSpread({}, options), {}, {\n v2: true\n }) : {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"formatNational\",\n value: function formatNational(options) {\n return this.format('NATIONAL', options);\n }\n }, {\n key: \"formatInternational\",\n value: function formatInternational(options) {\n return this.format('INTERNATIONAL', options);\n }\n }, {\n key: \"getURI\",\n value: function getURI(options) {\n return this.format('RFC3966', options);\n }\n }]);\n\n return PhoneNumber;\n}();\n\nexport { PhoneNumber as default };\n\nvar isCountryCode = function isCountryCode(value) {\n return /^[A-Z]{2}$/.test(value);\n};\n\nfunction getCountryAndCountryCallingCode(countryOrCountryCallingCode, metadataJson) {\n var country;\n var countryCallingCode;\n var metadata = new Metadata(metadataJson); // If country code is passed then derive `countryCallingCode` from it.\n // Also store the country code as `.country`.\n\n if (isCountryCode(countryOrCountryCallingCode)) {\n country = countryOrCountryCallingCode;\n metadata.selectNumberingPlan(country);\n countryCallingCode = metadata.countryCallingCode();\n } else {\n countryCallingCode = countryOrCountryCallingCode;\n /* istanbul ignore if */\n\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (metadata.isNonGeographicCallingCode(countryCallingCode)) {\n country = '001';\n }\n }\n }\n\n return {\n country: country,\n countryCallingCode: countryCallingCode\n };\n}\n//# sourceMappingURL=PhoneNumber.js.map","import Metadata from '../metadata.js';\nimport { VALID_DIGITS } from '../constants.js';\nvar CAPTURING_DIGIT_PATTERN = new RegExp('([' + VALID_DIGITS + '])');\nexport default function stripIddPrefix(number, country, callingCode, metadata) {\n if (!country) {\n return;\n } // Check if the number is IDD-prefixed.\n\n\n var countryMetadata = new Metadata(metadata);\n countryMetadata.selectNumberingPlan(country, callingCode);\n var IDDPrefixPattern = new RegExp(countryMetadata.IDDPrefix());\n\n if (number.search(IDDPrefixPattern) !== 0) {\n return;\n } // Strip IDD prefix.\n\n\n number = number.slice(number.match(IDDPrefixPattern)[0].length); // If there're any digits after an IDD prefix,\n // then those digits are a country calling code.\n // Since no country code starts with a `0`,\n // the code below validates that the next digit (if present) is not `0`.\n\n var matchedGroups = number.match(CAPTURING_DIGIT_PATTERN);\n\n if (matchedGroups && matchedGroups[1] != null && matchedGroups[1].length > 0) {\n if (matchedGroups[1] === '0') {\n return;\n }\n }\n\n return number;\n}\n//# sourceMappingURL=stripIddPrefix.js.map","/**\r\n * Strips any national prefix (such as 0, 1) present in a\r\n * (possibly incomplete) number provided.\r\n * \"Carrier codes\" are only used in Colombia and Brazil,\r\n * and only when dialing within those countries from a mobile phone to a fixed line number.\r\n * Sometimes it won't actually strip national prefix\r\n * and will instead prepend some digits to the `number`:\r\n * for example, when number `2345678` is passed with `VI` country selected,\r\n * it will return `{ number: \"3402345678\" }`, because `340` area code is prepended.\r\n * @param {string} number — National number digits.\r\n * @param {object} metadata — Metadata with country selected.\r\n * @return {object} `{ nationalNumber: string, nationalPrefix: string? carrierCode: string? }`. Even if a national prefix was extracted, it's not necessarily present in the returned object, so don't rely on its presence in the returned object in order to find out whether a national prefix has been extracted or not.\r\n */\nexport default function extractNationalNumberFromPossiblyIncompleteNumber(number, metadata) {\n if (number && metadata.numberingPlan.nationalPrefixForParsing()) {\n // See METADATA.md for the description of\n // `national_prefix_for_parsing` and `national_prefix_transform_rule`.\n // Attempt to parse the first digits as a national prefix.\n var prefixPattern = new RegExp('^(?:' + metadata.numberingPlan.nationalPrefixForParsing() + ')');\n var prefixMatch = prefixPattern.exec(number);\n\n if (prefixMatch) {\n var nationalNumber;\n var carrierCode; // https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n // If a `national_prefix_for_parsing` has any \"capturing groups\"\n // then it means that the national (significant) number is equal to\n // those \"capturing groups\" transformed via `national_prefix_transform_rule`,\n // and nothing could be said about the actual national prefix:\n // what is it and was it even there.\n // If a `national_prefix_for_parsing` doesn't have any \"capturing groups\",\n // then everything it matches is a national prefix.\n // To determine whether `national_prefix_for_parsing` matched any\n // \"capturing groups\", the value of the result of calling `.exec()`\n // is looked at, and if it has non-undefined values where there're\n // \"capturing groups\" in the regular expression, then it means\n // that \"capturing groups\" have been matched.\n // It's not possible to tell whether there'll be any \"capturing gropus\"\n // before the matching process, because a `national_prefix_for_parsing`\n // could exhibit both behaviors.\n\n var capturedGroupsCount = prefixMatch.length - 1;\n var hasCapturedGroups = capturedGroupsCount > 0 && prefixMatch[capturedGroupsCount];\n\n if (metadata.nationalPrefixTransformRule() && hasCapturedGroups) {\n nationalNumber = number.replace(prefixPattern, metadata.nationalPrefixTransformRule()); // If there's more than one captured group,\n // then carrier code is the second one.\n\n if (capturedGroupsCount > 1) {\n carrierCode = prefixMatch[1];\n }\n } // If there're no \"capturing groups\",\n // or if there're \"capturing groups\" but no\n // `national_prefix_transform_rule`,\n // then just strip the national prefix from the number,\n // and possibly a carrier code.\n // Seems like there could be more.\n else {\n // `prefixBeforeNationalNumber` is the whole substring matched by\n // the `national_prefix_for_parsing` regular expression.\n // There seem to be no guarantees that it's just a national prefix.\n // For example, if there's a carrier code, it's gonna be a\n // part of `prefixBeforeNationalNumber` too.\n var prefixBeforeNationalNumber = prefixMatch[0];\n nationalNumber = number.slice(prefixBeforeNationalNumber.length); // If there's at least one captured group,\n // then carrier code is the first one.\n\n if (hasCapturedGroups) {\n carrierCode = prefixMatch[1];\n }\n } // Tries to guess whether a national prefix was present in the input.\n // This is not something copy-pasted from Google's library:\n // they don't seem to have an equivalent for that.\n // So this isn't an \"officially approved\" way of doing something like that.\n // But since there seems no other existing method, this library uses it.\n\n\n var nationalPrefix;\n\n if (hasCapturedGroups) {\n var possiblePositionOfTheFirstCapturedGroup = number.indexOf(prefixMatch[1]);\n var possibleNationalPrefix = number.slice(0, possiblePositionOfTheFirstCapturedGroup); // Example: an Argentinian (AR) phone number `0111523456789`.\n // `prefixMatch[0]` is `01115`, and `$1` is `11`,\n // and the rest of the phone number is `23456789`.\n // The national number is transformed via `9$1` to `91123456789`.\n // National prefix `0` is detected being present at the start.\n // if (possibleNationalPrefix.indexOf(metadata.numberingPlan.nationalPrefix()) === 0) {\n\n if (possibleNationalPrefix === metadata.numberingPlan.nationalPrefix()) {\n nationalPrefix = metadata.numberingPlan.nationalPrefix();\n }\n } else {\n nationalPrefix = prefixMatch[0];\n }\n\n return {\n nationalNumber: nationalNumber,\n nationalPrefix: nationalPrefix,\n carrierCode: carrierCode\n };\n }\n }\n\n return {\n nationalNumber: number\n };\n}\n//# sourceMappingURL=extractNationalNumberFromPossiblyIncompleteNumber.js.map","import extractNationalNumberFromPossiblyIncompleteNumber from './extractNationalNumberFromPossiblyIncompleteNumber.js';\nimport matchesEntirely from './matchesEntirely.js';\nimport checkNumberLength from './checkNumberLength.js';\n/**\r\n * Strips national prefix and carrier code from a complete phone number.\r\n * The difference from the non-\"FromCompleteNumber\" function is that\r\n * it won't extract national prefix if the resultant number is too short\r\n * to be a complete number for the selected phone numbering plan.\r\n * @param {string} number — Complete phone number digits.\r\n * @param {Metadata} metadata — Metadata with a phone numbering plan selected.\r\n * @return {object} `{ nationalNumber: string, carrierCode: string? }`.\r\n */\n\nexport default function extractNationalNumber(number, metadata) {\n // Parsing national prefixes and carrier codes\n // is only required for local phone numbers\n // but some people don't understand that\n // and sometimes write international phone numbers\n // with national prefixes (or maybe even carrier codes).\n // http://ucken.blogspot.ru/2016/03/trunk-prefixes-in-skype4b.html\n // Google's original library forgives such mistakes\n // and so does this library, because it has been requested:\n // https://github.com/catamphetamine/libphonenumber-js/issues/127\n var _extractNationalNumbe = extractNationalNumberFromPossiblyIncompleteNumber(number, metadata),\n carrierCode = _extractNationalNumbe.carrierCode,\n nationalNumber = _extractNationalNumbe.nationalNumber;\n\n if (nationalNumber !== number) {\n if (!shouldHaveExtractedNationalPrefix(number, nationalNumber, metadata)) {\n // Don't strip the national prefix.\n return {\n nationalNumber: number\n };\n } // Check the national (significant) number length after extracting national prefix and carrier code.\n // Legacy generated metadata (before `1.0.18`) didn't support the \"possible lengths\" feature.\n\n\n if (metadata.possibleLengths()) {\n // The number remaining after stripping the national prefix and carrier code\n // should be long enough to have a possible length for the country.\n // Otherwise, don't strip the national prefix and carrier code,\n // since the original number could be a valid number.\n // This check has been copy-pasted \"as is\" from Google's original library:\n // https://github.com/google/libphonenumber/blob/876268eb1ad6cdc1b7b5bef17fc5e43052702d57/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L3236-L3250\n // It doesn't check for the \"possibility\" of the original `number`.\n // I guess it's fine not checking that one. It works as is anyway.\n if (!isPossibleIncompleteNationalNumber(nationalNumber, metadata)) {\n // Don't strip the national prefix.\n return {\n nationalNumber: number\n };\n }\n }\n }\n\n return {\n nationalNumber: nationalNumber,\n carrierCode: carrierCode\n };\n} // In some countries, the same digit could be a national prefix\n// or a leading digit of a valid phone number.\n// For example, in Russia, national prefix is `8`,\n// and also `800 555 35 35` is a valid number\n// in which `8` is not a national prefix, but the first digit\n// of a national (significant) number.\n// Same's with Belarus:\n// `82004910060` is a valid national (significant) number,\n// but `2004910060` is not.\n// To support such cases (to prevent the code from always stripping\n// national prefix), a condition is imposed: a national prefix\n// is not extracted when the original number is \"viable\" and the\n// resultant number is not, a \"viable\" national number being the one\n// that matches `national_number_pattern`.\n\nfunction shouldHaveExtractedNationalPrefix(nationalNumberBefore, nationalNumberAfter, metadata) {\n // The equivalent in Google's code is:\n // https://github.com/google/libphonenumber/blob/e326fa1fc4283bb05eb35cb3c15c18f98a31af33/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L2969-L3004\n if (matchesEntirely(nationalNumberBefore, metadata.nationalNumberPattern()) && !matchesEntirely(nationalNumberAfter, metadata.nationalNumberPattern())) {\n return false;\n } // This \"is possible\" national number (length) check has been commented out\n // because it's superceded by the (effectively) same check done in the\n // `extractNationalNumber()` function after it calls `shouldHaveExtractedNationalPrefix()`.\n // In other words, why run the same check twice if it could only be run once.\n // // Check the national (significant) number length after extracting national prefix and carrier code.\n // // Fixes a minor \"weird behavior\" bug: https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/57\n // // (Legacy generated metadata (before `1.0.18`) didn't support the \"possible lengths\" feature).\n // if (metadata.possibleLengths()) {\n // \tif (isPossibleIncompleteNationalNumber(nationalNumberBefore, metadata) &&\n // \t\t!isPossibleIncompleteNationalNumber(nationalNumberAfter, metadata)) {\n // \t\treturn false\n // \t}\n // }\n\n\n return true;\n}\n\nfunction isPossibleIncompleteNationalNumber(nationalNumber, metadata) {\n switch (checkNumberLength(nationalNumber, metadata)) {\n case 'TOO_SHORT':\n case 'INVALID_LENGTH':\n // This library ignores \"local-only\" phone numbers (for simplicity).\n // See the readme for more info on what are \"local-only\" phone numbers.\n // case 'IS_POSSIBLE_LOCAL_ONLY':\n return false;\n\n default:\n return true;\n }\n}\n//# sourceMappingURL=extractNationalNumber.js.map","import Metadata from '../metadata.js';\nimport matchesEntirely from './matchesEntirely.js';\nimport extractNationalNumber from './extractNationalNumber.js';\nimport checkNumberLength from './checkNumberLength.js';\nimport getCountryCallingCode from '../getCountryCallingCode.js';\n/**\r\n * Sometimes some people incorrectly input international phone numbers\r\n * without the leading `+`. This function corrects such input.\r\n * @param {string} number — Phone number digits.\r\n * @param {string?} country\r\n * @param {string?} callingCode\r\n * @param {object} metadata\r\n * @return {object} `{ countryCallingCode: string?, number: string }`.\r\n */\n\nexport default function extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(number, country, callingCode, metadata) {\n var countryCallingCode = country ? getCountryCallingCode(country, metadata) : callingCode;\n\n if (number.indexOf(countryCallingCode) === 0) {\n metadata = new Metadata(metadata);\n metadata.selectNumberingPlan(country, callingCode);\n var possibleShorterNumber = number.slice(countryCallingCode.length);\n\n var _extractNationalNumbe = extractNationalNumber(possibleShorterNumber, metadata),\n possibleShorterNationalNumber = _extractNationalNumbe.nationalNumber;\n\n var _extractNationalNumbe2 = extractNationalNumber(number, metadata),\n nationalNumber = _extractNationalNumbe2.nationalNumber; // If the number was not valid before but is valid now,\n // or if it was too long before, we consider the number\n // with the country calling code stripped to be a better result\n // and keep that instead.\n // For example, in Germany (+49), `49` is a valid area code,\n // so if a number starts with `49`, it could be both a valid\n // national German number or an international number without\n // a leading `+`.\n\n\n if (!matchesEntirely(nationalNumber, metadata.nationalNumberPattern()) && matchesEntirely(possibleShorterNationalNumber, metadata.nationalNumberPattern()) || checkNumberLength(nationalNumber, metadata) === 'TOO_LONG') {\n return {\n countryCallingCode: countryCallingCode,\n number: possibleShorterNumber\n };\n }\n }\n\n return {\n number: number\n };\n}\n//# sourceMappingURL=extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js.map","import stripIddPrefix from './stripIddPrefix.js';\nimport extractCountryCallingCodeFromInternationalNumberWithoutPlusSign from './extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js';\nimport Metadata from '../metadata.js';\nimport { MAX_LENGTH_COUNTRY_CODE } from '../constants.js';\n/**\r\n * Converts a phone number digits (possibly with a `+`)\r\n * into a calling code and the rest phone number digits.\r\n * The \"rest phone number digits\" could include\r\n * a national prefix, carrier code, and national\r\n * (significant) number.\r\n * @param {string} number — Phone number digits (possibly with a `+`).\r\n * @param {string} [country] — Default country.\r\n * @param {string} [callingCode] — Default calling code (some phone numbering plans are non-geographic).\r\n * @param {object} metadata\r\n * @return {object} `{ countryCallingCodeSource: string?, countryCallingCode: string?, number: string }`\r\n * @example\r\n * // Returns `{ countryCallingCode: \"1\", number: \"2133734253\" }`.\r\n * extractCountryCallingCode('2133734253', 'US', null, metadata)\r\n * extractCountryCallingCode('2133734253', null, '1', metadata)\r\n * extractCountryCallingCode('+12133734253', null, null, metadata)\r\n * extractCountryCallingCode('+12133734253', 'RU', null, metadata)\r\n */\n\nexport default function extractCountryCallingCode(number, country, callingCode, metadata) {\n if (!number) {\n return {};\n }\n\n var isNumberWithIddPrefix; // If this is not an international phone number,\n // then either extract an \"IDD\" prefix, or extract a\n // country calling code from a number by autocorrecting it\n // by prepending a leading `+` in cases when it starts\n // with the country calling code.\n // https://wikitravel.org/en/International_dialling_prefix\n // https://github.com/catamphetamine/libphonenumber-js/issues/376\n\n if (number[0] !== '+') {\n // Convert an \"out-of-country\" dialing phone number\n // to a proper international phone number.\n var numberWithoutIDD = stripIddPrefix(number, country, callingCode, metadata); // If an IDD prefix was stripped then\n // convert the number to international one\n // for subsequent parsing.\n\n if (numberWithoutIDD && numberWithoutIDD !== number) {\n isNumberWithIddPrefix = true;\n number = '+' + numberWithoutIDD;\n } else {\n // Check to see if the number starts with the country calling code\n // for the default country. If so, we remove the country calling code,\n // and do some checks on the validity of the number before and after.\n // https://github.com/catamphetamine/libphonenumber-js/issues/376\n if (country || callingCode) {\n var _extractCountryCallin = extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(number, country, callingCode, metadata),\n countryCallingCode = _extractCountryCallin.countryCallingCode,\n shorterNumber = _extractCountryCallin.number;\n\n if (countryCallingCode) {\n return {\n countryCallingCodeSource: 'FROM_NUMBER_WITHOUT_PLUS_SIGN',\n countryCallingCode: countryCallingCode,\n number: shorterNumber\n };\n }\n }\n\n return {\n // No need to set it to `UNSPECIFIED`. It can be just `undefined`.\n // countryCallingCodeSource: 'UNSPECIFIED',\n number: number\n };\n }\n } // Fast abortion: country codes do not begin with a '0'\n\n\n if (number[1] === '0') {\n return {};\n }\n\n metadata = new Metadata(metadata); // The thing with country phone codes\n // is that they are orthogonal to each other\n // i.e. there's no such country phone code A\n // for which country phone code B exists\n // where B starts with A.\n // Therefore, while scanning digits,\n // if a valid country code is found,\n // that means that it is the country code.\n //\n\n var i = 2;\n\n while (i - 1 <= MAX_LENGTH_COUNTRY_CODE && i <= number.length) {\n var _countryCallingCode = number.slice(1, i);\n\n if (metadata.hasCallingCode(_countryCallingCode)) {\n metadata.selectNumberingPlan(_countryCallingCode);\n return {\n countryCallingCodeSource: isNumberWithIddPrefix ? 'FROM_NUMBER_WITH_IDD' : 'FROM_NUMBER_WITH_PLUS_SIGN',\n countryCallingCode: _countryCallingCode,\n number: number.slice(i)\n };\n }\n\n i++;\n }\n\n return {};\n} // The possible values for the returned `countryCallingCodeSource` are:\n//\n// Copy-pasted from:\n// https://github.com/google/libphonenumber/blob/master/resources/phonenumber.proto\n//\n// // The source from which the country_code is derived. This is not set in the\n// // general parsing method, but in the method that parses and keeps raw_input.\n// // New fields could be added upon request.\n// enum CountryCodeSource {\n// // Default value returned if this is not set, because the phone number was\n// // created using parse, not parseAndKeepRawInput. hasCountryCodeSource will\n// // return false if this is the case.\n// UNSPECIFIED = 0;\n//\n// // The country_code is derived based on a phone number with a leading \"+\",\n// // e.g. the French number \"+33 1 42 68 53 00\".\n// FROM_NUMBER_WITH_PLUS_SIGN = 1;\n//\n// // The country_code is derived based on a phone number with a leading IDD,\n// // e.g. the French number \"011 33 1 42 68 53 00\", as it is dialled from US.\n// FROM_NUMBER_WITH_IDD = 5;\n//\n// // The country_code is derived based on a phone number without a leading\n// // \"+\", e.g. the French number \"33 1 42 68 53 00\" when defaultCountry is\n// // supplied as France.\n// FROM_NUMBER_WITHOUT_PLUS_SIGN = 10;\n//\n// // The country_code is derived NOT based on the phone number itself, but\n// // from the defaultCountry parameter provided in the parsing function by the\n// // clients. This happens mostly for numbers written in the national format\n// // (without country code). For example, this would be set when parsing the\n// // French number \"01 42 68 53 00\", when defaultCountry is supplied as\n// // France.\n// FROM_DEFAULT_COUNTRY = 20;\n// }\n//# sourceMappingURL=extractCountryCallingCode.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport Metadata from '../metadata.js';\nimport getNumberType from './getNumberType.js';\nexport default function getCountryByNationalNumber(nationalPhoneNumber, _ref) {\n var countries = _ref.countries,\n defaultCountry = _ref.defaultCountry,\n metadata = _ref.metadata;\n // Re-create `metadata` because it will be selecting a `country`.\n metadata = new Metadata(metadata);\n var matchingCountries = [];\n\n for (var _iterator = _createForOfIteratorHelperLoose(countries), _step; !(_step = _iterator()).done;) {\n var country = _step.value;\n metadata.country(country); // \"Leading digits\" patterns are only defined for about 20% of all countries.\n // By definition, matching \"leading digits\" is a sufficient but not a necessary\n // condition for a phone number to belong to a country.\n // The point of \"leading digits\" check is that it's the fastest one to get a match.\n // https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/METADATA.md#leading_digits\n // I'd suppose that \"leading digits\" patterns are mutually exclusive for different countries\n // because of the intended use of that feature.\n\n if (metadata.leadingDigits()) {\n if (nationalPhoneNumber && nationalPhoneNumber.search(metadata.leadingDigits()) === 0) {\n return country;\n }\n } // Else perform full validation with all of those\n // fixed-line/mobile/etc regular expressions.\n else if (getNumberType({\n phone: nationalPhoneNumber,\n country: country\n }, undefined, metadata.metadata)) {\n // If the `defaultCountry` is among the `matchingCountries` then return it.\n if (defaultCountry) {\n if (country === defaultCountry) {\n return country;\n }\n\n matchingCountries.push(country);\n } else {\n return country;\n }\n }\n } // Return the first (\"main\") one of the `matchingCountries`.\n\n\n if (matchingCountries.length > 0) {\n return matchingCountries[0];\n }\n}\n//# sourceMappingURL=getCountryByNationalNumber.js.map","import getCountryByNationalNumber from './getCountryByNationalNumber.js';\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\nexport default function getCountryByCallingCode(callingCode, _ref) {\n var nationalPhoneNumber = _ref.nationalNumber,\n defaultCountry = _ref.defaultCountry,\n metadata = _ref.metadata;\n\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (metadata.isNonGeographicCallingCode(callingCode)) {\n return '001';\n }\n }\n\n var possibleCountries = metadata.getCountryCodesForCallingCode(callingCode);\n\n if (!possibleCountries) {\n return;\n } // If there's just one country corresponding to the country code,\n // then just return it, without further phone number digits validation.\n\n\n if (possibleCountries.length === 1) {\n return possibleCountries[0];\n }\n\n return getCountryByNationalNumber(nationalPhoneNumber, {\n countries: possibleCountries,\n defaultCountry: defaultCountry,\n metadata: metadata.metadata\n });\n}\n//# sourceMappingURL=getCountryByCallingCode.js.map","// When phone numbers are written in `RFC3966` format — `\"tel:+12133734253\"` —\n// they can have their \"calling code\" part written separately in a `phone-context` parameter.\n// Example: `\"tel:12133734253;phone-context=+1\"`.\n// This function parses the full phone number from the local number and the `phone-context`\n// when the `phone-context` contains a `+` sign.\nimport { VALID_DIGITS // PLUS_CHARS\n} from '../constants.js';\nexport var PLUS_SIGN = '+';\nvar RFC3966_VISUAL_SEPARATOR_ = '[\\\\-\\\\.\\\\(\\\\)]?';\nvar RFC3966_PHONE_DIGIT_ = '(' + '[' + VALID_DIGITS + ']' + '|' + RFC3966_VISUAL_SEPARATOR_ + ')';\nvar RFC3966_GLOBAL_NUMBER_DIGITS_ = '^' + '\\\\' + PLUS_SIGN + RFC3966_PHONE_DIGIT_ + '*' + '[' + VALID_DIGITS + ']' + RFC3966_PHONE_DIGIT_ + '*' + '$';\n/**\r\n * Regular expression of valid global-number-digits for the phone-context\r\n * parameter, following the syntax defined in RFC3966.\r\n */\n\nvar RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_ = new RegExp(RFC3966_GLOBAL_NUMBER_DIGITS_, 'g'); // In this port of Google's library, we don't accept alpha characters in phone numbers.\n// const ALPHANUM_ = VALID_ALPHA_ + VALID_DIGITS\n\nvar ALPHANUM_ = VALID_DIGITS;\nvar RFC3966_DOMAINLABEL_ = '[' + ALPHANUM_ + ']+((\\\\-)*[' + ALPHANUM_ + '])*';\nvar VALID_ALPHA_ = 'a-zA-Z';\nvar RFC3966_TOPLABEL_ = '[' + VALID_ALPHA_ + ']+((\\\\-)*[' + ALPHANUM_ + '])*';\nvar RFC3966_DOMAINNAME_ = '^(' + RFC3966_DOMAINLABEL_ + '\\\\.)*' + RFC3966_TOPLABEL_ + '\\\\.?$';\n/**\r\n * Regular expression of valid domainname for the phone-context parameter,\r\n * following the syntax defined in RFC3966.\r\n */\n\nvar RFC3966_DOMAINNAME_PATTERN_ = new RegExp(RFC3966_DOMAINNAME_, 'g');\nexport var RFC3966_PREFIX_ = 'tel:';\nexport var RFC3966_PHONE_CONTEXT_ = ';phone-context=';\nexport var RFC3966_ISDN_SUBADDRESS_ = ';isub=';\n/**\r\n * Extracts the value of the phone-context parameter of `numberToExtractFrom`,\r\n * following the syntax defined in RFC3966.\r\n *\r\n * @param {string} numberToExtractFrom\r\n * @return {string|null} the extracted string (possibly empty), or `null` if no phone-context parameter is found.\r\n */\n\nexport default function extractPhoneContext(numberToExtractFrom) {\n var indexOfPhoneContext = numberToExtractFrom.indexOf(RFC3966_PHONE_CONTEXT_); // If no phone-context parameter is present\n\n if (indexOfPhoneContext < 0) {\n return null;\n }\n\n var phoneContextStart = indexOfPhoneContext + RFC3966_PHONE_CONTEXT_.length; // If phone-context parameter is empty\n\n if (phoneContextStart >= numberToExtractFrom.length) {\n return '';\n }\n\n var phoneContextEnd = numberToExtractFrom.indexOf(';', phoneContextStart); // If phone-context is not the last parameter\n\n if (phoneContextEnd >= 0) {\n return numberToExtractFrom.substring(phoneContextStart, phoneContextEnd);\n } else {\n return numberToExtractFrom.substring(phoneContextStart);\n }\n}\n/**\r\n * Returns whether the value of phoneContext follows the syntax defined in RFC3966.\r\n *\r\n * @param {string|null} phoneContext\r\n * @return {boolean}\r\n */\n\nexport function isPhoneContextValid(phoneContext) {\n if (phoneContext === null) {\n return true;\n }\n\n if (phoneContext.length === 0) {\n return false;\n } // Does phone-context value match pattern of global-number-digits or domainname.\n\n\n return RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_.test(phoneContext) || RFC3966_DOMAINNAME_PATTERN_.test(phoneContext);\n}\n//# sourceMappingURL=extractPhoneContext.js.map","import extractPhoneContext, { isPhoneContextValid, PLUS_SIGN, RFC3966_PREFIX_, RFC3966_PHONE_CONTEXT_, RFC3966_ISDN_SUBADDRESS_ } from './extractPhoneContext.js';\nimport ParseError from '../ParseError.js';\n/**\r\n * @param {string} numberToParse\r\n * @param {string} nationalNumber\r\n * @return {}\r\n */\n\nexport default function extractFormattedPhoneNumberFromPossibleRfc3966NumberUri(numberToParse, _ref) {\n var extractFormattedPhoneNumber = _ref.extractFormattedPhoneNumber;\n var phoneContext = extractPhoneContext(numberToParse);\n\n if (!isPhoneContextValid(phoneContext)) {\n throw new ParseError('NOT_A_NUMBER');\n }\n\n var phoneNumberString;\n\n if (phoneContext === null) {\n // Extract a possible number from the string passed in.\n // (this strips leading characters that could not be the start of a phone number)\n phoneNumberString = extractFormattedPhoneNumber(numberToParse) || '';\n } else {\n phoneNumberString = ''; // If the phone context contains a phone number prefix, we need to capture\n // it, whereas domains will be ignored.\n\n if (phoneContext.charAt(0) === PLUS_SIGN) {\n phoneNumberString += phoneContext;\n } // Now append everything between the \"tel:\" prefix and the phone-context.\n // This should include the national number, an optional extension or\n // isdn-subaddress component. Note we also handle the case when \"tel:\" is\n // missing, as we have seen in some of the phone number inputs.\n // In that case, we append everything from the beginning.\n\n\n var indexOfRfc3966Prefix = numberToParse.indexOf(RFC3966_PREFIX_);\n var indexOfNationalNumber; // RFC 3966 \"tel:\" prefix is preset at this stage because\n // `isPhoneContextValid()` requires it to be present.\n\n /* istanbul ignore else */\n\n if (indexOfRfc3966Prefix >= 0) {\n indexOfNationalNumber = indexOfRfc3966Prefix + RFC3966_PREFIX_.length;\n } else {\n indexOfNationalNumber = 0;\n }\n\n var indexOfPhoneContext = numberToParse.indexOf(RFC3966_PHONE_CONTEXT_);\n phoneNumberString += numberToParse.substring(indexOfNationalNumber, indexOfPhoneContext);\n } // Delete the isdn-subaddress and everything after it if it is present.\n // Note extension won't appear at the same time with isdn-subaddress\n // according to paragraph 5.3 of the RFC3966 spec.\n\n\n var indexOfIsdn = phoneNumberString.indexOf(RFC3966_ISDN_SUBADDRESS_);\n\n if (indexOfIsdn > 0) {\n phoneNumberString = phoneNumberString.substring(0, indexOfIsdn);\n } // If both phone context and isdn-subaddress are absent but other\n // parameters are present, the parameters are left in nationalNumber.\n // This is because we are concerned about deleting content from a potential\n // number string when there is no strong evidence that the number is\n // actually written in RFC3966.\n\n\n if (phoneNumberString !== '') {\n return phoneNumberString;\n }\n}\n//# sourceMappingURL=extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js.map","// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of December 31th, 2018.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\nimport { VALID_DIGITS, PLUS_CHARS, MIN_LENGTH_FOR_NSN, MAX_LENGTH_FOR_NSN } from './constants.js';\nimport ParseError from './ParseError.js';\nimport Metadata from './metadata.js';\nimport isViablePhoneNumber, { isViablePhoneNumberStart } from './helpers/isViablePhoneNumber.js';\nimport extractExtension from './helpers/extension/extractExtension.js';\nimport parseIncompletePhoneNumber from './parseIncompletePhoneNumber.js';\nimport getCountryCallingCode from './getCountryCallingCode.js';\nimport { isPossibleNumber } from './isPossible.js'; // import { parseRFC3966 } from './helpers/RFC3966.js'\n\nimport PhoneNumber from './PhoneNumber.js';\nimport matchesEntirely from './helpers/matchesEntirely.js';\nimport extractCountryCallingCode from './helpers/extractCountryCallingCode.js';\nimport extractNationalNumber from './helpers/extractNationalNumber.js';\nimport stripIddPrefix from './helpers/stripIddPrefix.js';\nimport getCountryByCallingCode from './helpers/getCountryByCallingCode.js';\nimport extractFormattedPhoneNumberFromPossibleRfc3966NumberUri from './helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js'; // We don't allow input strings for parsing to be longer than 250 chars.\n// This prevents malicious input from consuming CPU.\n\nvar MAX_INPUT_STRING_LENGTH = 250; // This consists of the plus symbol, digits, and arabic-indic digits.\n\nvar PHONE_NUMBER_START_PATTERN = new RegExp('[' + PLUS_CHARS + VALID_DIGITS + ']'); // Regular expression of trailing characters that we want to remove.\n// A trailing `#` is sometimes used when writing phone numbers with extensions in US.\n// Example: \"+1 (645) 123 1234-910#\" number has extension \"910\".\n\nvar AFTER_PHONE_NUMBER_END_PATTERN = new RegExp('[^' + VALID_DIGITS + '#' + ']+$');\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false; // Examples:\n//\n// ```js\n// parse('8 (800) 555-35-35', 'RU')\n// parse('8 (800) 555-35-35', 'RU', metadata)\n// parse('8 (800) 555-35-35', { country: { default: 'RU' } })\n// parse('8 (800) 555-35-35', { country: { default: 'RU' } }, metadata)\n// parse('+7 800 555 35 35')\n// parse('+7 800 555 35 35', metadata)\n// ```\n//\n\n/**\r\n * Parses a phone number.\r\n *\r\n * parse('123456789', { defaultCountry: 'RU', v2: true }, metadata)\r\n * parse('123456789', { defaultCountry: 'RU' }, metadata)\r\n * parse('123456789', undefined, metadata)\r\n *\r\n * @param {string} input\r\n * @param {object} [options]\r\n * @param {object} metadata\r\n * @return {object|PhoneNumber?} If `options.v2: true` flag is passed, it returns a `PhoneNumber?` instance. Otherwise, returns an object of shape `{ phone: '...', country: '...' }` (or just `{}` if no phone number was parsed).\r\n */\n\nexport default function parse(text, options, metadata) {\n // If assigning the `{}` default value is moved to the arguments above,\n // code coverage would decrease for some weird reason.\n options = options || {};\n metadata = new Metadata(metadata); // Validate `defaultCountry`.\n\n if (options.defaultCountry && !metadata.hasCountry(options.defaultCountry)) {\n if (options.v2) {\n throw new ParseError('INVALID_COUNTRY');\n }\n\n throw new Error(\"Unknown country: \".concat(options.defaultCountry));\n } // Parse the phone number.\n\n\n var _parseInput = parseInput(text, options.v2, options.extract),\n formattedPhoneNumber = _parseInput.number,\n ext = _parseInput.ext,\n error = _parseInput.error; // If the phone number is not viable then return nothing.\n\n\n if (!formattedPhoneNumber) {\n if (options.v2) {\n if (error === 'TOO_SHORT') {\n throw new ParseError('TOO_SHORT');\n }\n\n throw new ParseError('NOT_A_NUMBER');\n }\n\n return {};\n }\n\n var _parsePhoneNumber = parsePhoneNumber(formattedPhoneNumber, options.defaultCountry, options.defaultCallingCode, metadata),\n country = _parsePhoneNumber.country,\n nationalNumber = _parsePhoneNumber.nationalNumber,\n countryCallingCode = _parsePhoneNumber.countryCallingCode,\n countryCallingCodeSource = _parsePhoneNumber.countryCallingCodeSource,\n carrierCode = _parsePhoneNumber.carrierCode;\n\n if (!metadata.hasSelectedNumberingPlan()) {\n if (options.v2) {\n throw new ParseError('INVALID_COUNTRY');\n }\n\n return {};\n } // Validate national (significant) number length.\n\n\n if (!nationalNumber || nationalNumber.length < MIN_LENGTH_FOR_NSN) {\n // Won't throw here because the regexp already demands length > 1.\n\n /* istanbul ignore if */\n if (options.v2) {\n throw new ParseError('TOO_SHORT');\n } // Google's demo just throws an error in this case.\n\n\n return {};\n } // Validate national (significant) number length.\n //\n // A sidenote:\n //\n // They say that sometimes national (significant) numbers\n // can be longer than `MAX_LENGTH_FOR_NSN` (e.g. in Germany).\n // https://github.com/googlei18n/libphonenumber/blob/7e1748645552da39c4e1ba731e47969d97bdb539/resources/phonenumber.proto#L36\n // Such numbers will just be discarded.\n //\n\n\n if (nationalNumber.length > MAX_LENGTH_FOR_NSN) {\n if (options.v2) {\n throw new ParseError('TOO_LONG');\n } // Google's demo just throws an error in this case.\n\n\n return {};\n }\n\n if (options.v2) {\n var phoneNumber = new PhoneNumber(countryCallingCode, nationalNumber, metadata.metadata);\n\n if (country) {\n phoneNumber.country = country;\n }\n\n if (carrierCode) {\n phoneNumber.carrierCode = carrierCode;\n }\n\n if (ext) {\n phoneNumber.ext = ext;\n }\n\n phoneNumber.__countryCallingCodeSource = countryCallingCodeSource;\n return phoneNumber;\n } // Check if national phone number pattern matches the number.\n // National number pattern is different for each country,\n // even for those ones which are part of the \"NANPA\" group.\n\n\n var valid = (options.extended ? metadata.hasSelectedNumberingPlan() : country) ? matchesEntirely(nationalNumber, metadata.nationalNumberPattern()) : false;\n\n if (!options.extended) {\n return valid ? result(country, nationalNumber, ext) : {};\n } // isInternational: countryCallingCode !== undefined\n\n\n return {\n country: country,\n countryCallingCode: countryCallingCode,\n carrierCode: carrierCode,\n valid: valid,\n possible: valid ? true : options.extended === true && metadata.possibleLengths() && isPossibleNumber(nationalNumber, metadata) ? true : false,\n phone: nationalNumber,\n ext: ext\n };\n}\n/**\r\n * Extracts a formatted phone number from text.\r\n * Doesn't guarantee that the extracted phone number\r\n * is a valid phone number (for example, doesn't validate its length).\r\n * @param {string} text\r\n * @param {boolean} [extract] — If `false`, then will parse the entire `text` as a phone number.\r\n * @param {boolean} [throwOnError] — By default, it won't throw if the text is too long.\r\n * @return {string}\r\n * @example\r\n * // Returns \"(213) 373-4253\".\r\n * extractFormattedPhoneNumber(\"Call (213) 373-4253 for assistance.\")\r\n */\n\nfunction _extractFormattedPhoneNumber(text, extract, throwOnError) {\n if (!text) {\n return;\n }\n\n if (text.length > MAX_INPUT_STRING_LENGTH) {\n if (throwOnError) {\n throw new ParseError('TOO_LONG');\n }\n\n return;\n }\n\n if (extract === false) {\n return text;\n } // Attempt to extract a possible number from the string passed in\n\n\n var startsAt = text.search(PHONE_NUMBER_START_PATTERN);\n\n if (startsAt < 0) {\n return;\n }\n\n return text // Trim everything to the left of the phone number\n .slice(startsAt) // Remove trailing non-numerical characters\n .replace(AFTER_PHONE_NUMBER_END_PATTERN, '');\n}\n/**\r\n * @param {string} text - Input.\r\n * @param {boolean} v2 - Legacy API functions don't pass `v2: true` flag.\r\n * @param {boolean} [extract] - Whether to extract a phone number from `text`, or attempt to parse the entire text as a phone number.\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\n\n\nfunction parseInput(text, v2, extract) {\n // // Parse RFC 3966 phone number URI.\n // if (text && text.indexOf('tel:') === 0) {\n // \treturn parseRFC3966(text)\n // }\n // let number = extractFormattedPhoneNumber(text, extract, v2)\n var number = extractFormattedPhoneNumberFromPossibleRfc3966NumberUri(text, {\n extractFormattedPhoneNumber: function extractFormattedPhoneNumber(text) {\n return _extractFormattedPhoneNumber(text, extract, v2);\n }\n }); // If the phone number is not viable, then abort.\n\n if (!number) {\n return {};\n }\n\n if (!isViablePhoneNumber(number)) {\n if (isViablePhoneNumberStart(number)) {\n return {\n error: 'TOO_SHORT'\n };\n }\n\n return {};\n } // Attempt to parse extension first, since it doesn't require region-specific\n // data and we want to have the non-normalised number here.\n\n\n var withExtensionStripped = extractExtension(number);\n\n if (withExtensionStripped.ext) {\n return withExtensionStripped;\n }\n\n return {\n number: number\n };\n}\n/**\r\n * Creates `parse()` result object.\r\n */\n\n\nfunction result(country, nationalNumber, ext) {\n var result = {\n country: country,\n phone: nationalNumber\n };\n\n if (ext) {\n result.ext = ext;\n }\n\n return result;\n}\n/**\r\n * Parses a viable phone number.\r\n * @param {string} formattedPhoneNumber — Example: \"(213) 373-4253\".\r\n * @param {string} [defaultCountry]\r\n * @param {string} [defaultCallingCode]\r\n * @param {Metadata} metadata\r\n * @return {object} Returns `{ country: string?, countryCallingCode: string?, nationalNumber: string? }`.\r\n */\n\n\nfunction parsePhoneNumber(formattedPhoneNumber, defaultCountry, defaultCallingCode, metadata) {\n // Extract calling code from phone number.\n var _extractCountryCallin = extractCountryCallingCode(parseIncompletePhoneNumber(formattedPhoneNumber), defaultCountry, defaultCallingCode, metadata.metadata),\n countryCallingCodeSource = _extractCountryCallin.countryCallingCodeSource,\n countryCallingCode = _extractCountryCallin.countryCallingCode,\n number = _extractCountryCallin.number; // Choose a country by `countryCallingCode`.\n\n\n var country;\n\n if (countryCallingCode) {\n metadata.selectNumberingPlan(countryCallingCode);\n } // If `formattedPhoneNumber` is passed in \"national\" format\n // then `number` is defined and `countryCallingCode` is `undefined`.\n else if (number && (defaultCountry || defaultCallingCode)) {\n metadata.selectNumberingPlan(defaultCountry, defaultCallingCode);\n\n if (defaultCountry) {\n country = defaultCountry;\n } else {\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (metadata.isNonGeographicCallingCode(defaultCallingCode)) {\n country = '001';\n }\n }\n }\n\n countryCallingCode = defaultCallingCode || getCountryCallingCode(defaultCountry, metadata.metadata);\n } else return {};\n\n if (!number) {\n return {\n countryCallingCodeSource: countryCallingCodeSource,\n countryCallingCode: countryCallingCode\n };\n }\n\n var _extractNationalNumbe = extractNationalNumber(parseIncompletePhoneNumber(number), metadata),\n nationalNumber = _extractNationalNumbe.nationalNumber,\n carrierCode = _extractNationalNumbe.carrierCode; // Sometimes there are several countries\n // corresponding to the same country phone code\n // (e.g. NANPA countries all having `1` country phone code).\n // Therefore, to reliably determine the exact country,\n // national (significant) number should have been parsed first.\n //\n // When `metadata.json` is generated, all \"ambiguous\" country phone codes\n // get their countries populated with the full set of\n // \"phone number type\" regular expressions.\n //\n\n\n var exactCountry = getCountryByCallingCode(countryCallingCode, {\n nationalNumber: nationalNumber,\n defaultCountry: defaultCountry,\n metadata: metadata\n });\n\n if (exactCountry) {\n country = exactCountry;\n /* istanbul ignore if */\n\n if (exactCountry === '001') {// Can't happen with `USE_NON_GEOGRAPHIC_COUNTRY_CODE` being `false`.\n // If `USE_NON_GEOGRAPHIC_COUNTRY_CODE` is set to `true` for some reason,\n // then remove the \"istanbul ignore if\".\n } else {\n metadata.country(country);\n }\n }\n\n return {\n country: country,\n countryCallingCode: countryCallingCode,\n countryCallingCodeSource: countryCallingCodeSource,\n nationalNumber: nationalNumber,\n carrierCode: carrierCode\n };\n}\n//# sourceMappingURL=parse.js.map","function 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 _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\nimport parse from './parse.js';\nexport default function parsePhoneNumberWithError(text, options, metadata) {\n return parse(text, _objectSpread(_objectSpread({}, options), {}, {\n v2: true\n }), metadata);\n}\n//# sourceMappingURL=parsePhoneNumberWithError_.js.map","function 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 _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\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport isObject from './helpers/isObject.js'; // Extracts the following properties from function arguments:\n// * input `text`\n// * `options` object\n// * `metadata` JSON\n\nexport default function normalizeArguments(args) {\n var _Array$prototype$slic = Array.prototype.slice.call(args),\n _Array$prototype$slic2 = _slicedToArray(_Array$prototype$slic, 4),\n arg_1 = _Array$prototype$slic2[0],\n arg_2 = _Array$prototype$slic2[1],\n arg_3 = _Array$prototype$slic2[2],\n arg_4 = _Array$prototype$slic2[3];\n\n var text;\n var options;\n var metadata; // If the phone number is passed as a string.\n // `parsePhoneNumber('88005553535', ...)`.\n\n if (typeof arg_1 === 'string') {\n text = arg_1;\n } else throw new TypeError('A text for parsing must be a string.'); // If \"default country\" argument is being passed then move it to `options`.\n // `parsePhoneNumber('88005553535', 'RU', [options], metadata)`.\n\n\n if (!arg_2 || typeof arg_2 === 'string') {\n if (arg_4) {\n options = arg_3;\n metadata = arg_4;\n } else {\n options = undefined;\n metadata = arg_3;\n }\n\n if (arg_2) {\n options = _objectSpread({\n defaultCountry: arg_2\n }, options);\n }\n } // `defaultCountry` is not passed.\n // Example: `parsePhoneNumber('+78005553535', [options], metadata)`.\n else if (isObject(arg_2)) {\n if (arg_3) {\n options = arg_2;\n metadata = arg_3;\n } else {\n metadata = arg_2;\n }\n } else throw new Error(\"Invalid second argument: \".concat(arg_2));\n\n return {\n text: text,\n options: options,\n metadata: metadata\n };\n}\n//# sourceMappingURL=normalizeArguments.js.map","import parsePhoneNumberWithError_ from './parsePhoneNumberWithError_.js';\nimport normalizeArguments from './normalizeArguments.js';\nexport default function parsePhoneNumberWithError() {\n var _normalizeArguments = normalizeArguments(arguments),\n text = _normalizeArguments.text,\n options = _normalizeArguments.options,\n metadata = _normalizeArguments.metadata;\n\n return parsePhoneNumberWithError_(text, options, metadata);\n}\n//# sourceMappingURL=parsePhoneNumberWithError.js.map","function 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 _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\nimport parsePhoneNumberWithError from './parsePhoneNumberWithError_.js';\nimport ParseError from './ParseError.js';\nimport { isSupportedCountry } from './metadata.js';\nexport default function parsePhoneNumber(text, options, metadata) {\n // Validate `defaultCountry`.\n if (options && options.defaultCountry && !isSupportedCountry(options.defaultCountry, metadata)) {\n options = _objectSpread(_objectSpread({}, options), {}, {\n defaultCountry: undefined\n });\n } // Parse phone number.\n\n\n try {\n return parsePhoneNumberWithError(text, options, metadata);\n } catch (error) {\n /* istanbul ignore else */\n if (error instanceof ParseError) {//\n } else {\n throw error;\n }\n }\n}\n//# sourceMappingURL=parsePhoneNumber_.js.map","import normalizeArguments from './normalizeArguments.js';\nimport parsePhoneNumber_ from './parsePhoneNumber_.js';\nexport default function parsePhoneNumber() {\n var _normalizeArguments = normalizeArguments(arguments),\n text = _normalizeArguments.text,\n options = _normalizeArguments.options,\n metadata = _normalizeArguments.metadata;\n\n return parsePhoneNumber_(text, options, metadata);\n}\n//# sourceMappingURL=parsePhoneNumber.js.map","function 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 _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\nimport normalizeArguments from './normalizeArguments.js';\nimport parsePhoneNumber from './parsePhoneNumber_.js';\nexport default function isValidPhoneNumber() {\n var _normalizeArguments = normalizeArguments(arguments),\n text = _normalizeArguments.text,\n options = _normalizeArguments.options,\n metadata = _normalizeArguments.metadata;\n\n options = _objectSpread(_objectSpread({}, options), {}, {\n extract: false\n });\n var phoneNumber = parsePhoneNumber(text, options, metadata);\n return phoneNumber && phoneNumber.isValid() || false;\n}\n//# sourceMappingURL=isValidPhoneNumber.js.map","import withMetadataArgument from './withMetadataArgument.js'\r\nimport { parsePhoneNumberWithError as _parsePhoneNumberWithError } from '../../core/index.js'\r\n\r\nexport function parsePhoneNumberWithError() {\r\n\treturn withMetadataArgument(_parsePhoneNumberWithError, arguments)\r\n}\r\n","import withMetadataArgument from './withMetadataArgument.js'\r\nimport { default as _parsePhoneNumber } from '../../core/index.js'\r\n\r\nexport function parsePhoneNumber() {\r\n\treturn withMetadataArgument(_parsePhoneNumber, arguments)\r\n}","import withMetadataArgument from './withMetadataArgument.js'\r\nimport { isValidPhoneNumber as _isValidPhoneNumber } from '../../core/index.js'\r\n\r\nexport function isValidPhoneNumber() {\r\n\treturn withMetadataArgument(_isValidPhoneNumber, arguments)\r\n}","<script>\nimport countries from 'shared/constants/countries.js';\nimport parsePhoneNumber from 'libphonenumber-js';\nimport {\n getActiveCountryCode,\n getActiveDialCode,\n} from 'shared/components/PhoneInput/helper';\n\nexport default {\n props: {\n modelValue: {\n type: [String, Number],\n default: '',\n },\n placeholder: {\n type: String,\n default: '',\n },\n readonly: {\n type: Boolean,\n default: false,\n },\n styles: {\n type: Object,\n default: () => {},\n },\n error: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['blur', 'setCode', 'update:modelValue'],\n data() {\n return {\n selectedIndex: -1,\n showDropdown: false,\n searchCountry: '',\n activeCountryCode: getActiveCountryCode(),\n activeDialCode: getActiveDialCode(),\n phoneNumber: this.modelValue,\n };\n },\n computed: {\n countries() {\n return [\n {\n name: this.dropdownFirstItemName,\n dial_code: '',\n emoji: '',\n id: '',\n },\n ...countries,\n ];\n },\n dropdownFirstItemName() {\n return this.activeCountryCode ? 'Clear selection' : 'Select Country';\n },\n filteredCountriesBySearch() {\n return this.countries.filter(country => {\n const { name, dial_code, id } = country;\n const search = this.searchCountry.toLowerCase();\n return (\n name.toLowerCase().includes(search) ||\n dial_code.toLowerCase().includes(search) ||\n id.toLowerCase().includes(search)\n );\n });\n },\n activeCountry() {\n if (this.activeCountryCode) {\n return this.countries.find(\n country => country.id === this.activeCountryCode\n );\n }\n return '';\n },\n },\n watch: {\n modelValue() {\n const number = parsePhoneNumber(this.modelValue);\n if (number) {\n this.activeCountryCode = number.country;\n this.activeDialCode = `+${number.countryCallingCode}`;\n this.phoneNumber = this.modelValue.replace(\n `+${number.countryCallingCode}`,\n ''\n );\n }\n },\n },\n mounted() {\n this.setActiveCountry();\n },\n methods: {\n onOutsideClick(e) {\n if (\n this.showDropdown &&\n e.target !== this.$refs.dropdown &&\n !this.$refs.dropdown.contains(e.target)\n ) {\n this.closeDropdown();\n }\n },\n onChange(e) {\n this.phoneNumber = e.target.value;\n this.$emit('update:modelValue', e.target.value);\n this.$emit('setCode', this.activeDialCode);\n },\n onBlur(e) {\n this.$emit('blur', e.target.value);\n },\n onSearchCountry() {\n // Reset selected index to 0\n this.selectedIndex = 0;\n },\n moveUp() {\n if (!this.showDropdown) return;\n this.selectedIndex = Math.max(this.selectedIndex - 1, 0);\n this.scrollToSelected();\n },\n moveDown() {\n if (!this.showDropdown) return;\n this.selectedIndex = Math.min(\n this.selectedIndex + 1,\n this.filteredCountriesBySearch.length - 1\n );\n this.scrollToSelected();\n },\n scrollToSelected() {\n this.$nextTick(() => {\n const dropdown = this.$refs.dropdown;\n const selectedItem = this.$refs.dropdownItem[this.selectedIndex];\n const dropdownSearchbarHeight = 40;\n if (selectedItem) {\n const selectedItemTop = selectedItem.offsetTop;\n dropdown.scrollTop = selectedItemTop - dropdownSearchbarHeight;\n }\n });\n },\n onSelectCountry(country) {\n if (!country || !this.showDropdown) return;\n this.activeCountryCode = country.id;\n this.searchCountry = '';\n this.activeDialCode = country.dial_code;\n this.$emit('setCode', country.dial_code);\n this.closeDropdown();\n this.$refs.phoneNumberInput.focus();\n },\n setActiveCountry() {\n const { phoneNumber } = this;\n if (!phoneNumber) return;\n const number = parsePhoneNumber(phoneNumber);\n if (number) {\n this.activeCountryCode = number.country;\n this.activeDialCode = number.countryCallingCode;\n }\n },\n toggleCountryDropdown() {\n this.showDropdown = !this.showDropdown;\n this.selectedIndex = -1;\n if (this.showDropdown) {\n this.$nextTick(() => {\n this.$refs.searchbar.focus();\n });\n }\n },\n closeDropdown() {\n this.selectedIndex = -1;\n this.showDropdown = false;\n },\n },\n};\n</script>\n\n<template>\n <div class=\"relative phone-input--wrap\">\n <div\n class=\"flex items-center justify-start border-none outline outline-1 rounded-lg bg-n-alpha-black2\"\n :class=\"\n error\n ? 'outline-n-ruby-8 dark:outline-n-ruby-8 hover:outline-n-ruby-9 dark:hover:outline-n-ruby-9 mb-1'\n : 'mb-4 outline-n-weak dark:outline-n-weak hover:outline-n-slate-6 dark:hover:outline-n-slate-6'\n \"\n >\n <div\n class=\"cursor-pointer py-2 pr-1.5 pl-2 rounded-tl-lg rounded-bl-lg flex items-center justify-center gap-1.5 bg-n-solid-3 h-10 w-14\"\n @click.prevent=\"toggleCountryDropdown\"\n >\n <h5 v-if=\"activeCountry\" class=\"mb-0\">\n {{ activeCountry.emoji }}\n </h5>\n <fluent-icon v-else icon=\"globe\" class=\"fluent-icon\" size=\"16\" />\n <fluent-icon icon=\"chevron-down\" class=\"fluent-icon\" size=\"12\" />\n </div>\n <span\n v-if=\"activeDialCode\"\n class=\"flex py-2 pl-2 pr-0 text-base font-normal leading-normal text-n-slate-12\"\n >\n {{ activeDialCode }}\n </span>\n <input\n ref=\"phoneNumberInput\"\n :value=\"phoneNumber\"\n type=\"tel\"\n class=\"no-margin !rounded-tl-none !rounded-bl-none !outline-none !border-0 font-normal !w-full !bg-transparent text-base !px-1.5 placeholder:font-normal\"\n :placeholder=\"placeholder\"\n :readonly=\"readonly\"\n :style=\"styles\"\n @input=\"onChange\"\n @blur=\"onBlur\"\n />\n </div>\n <div\n v-if=\"showDropdown\"\n ref=\"dropdown\"\n v-on-clickaway=\"onOutsideClick\"\n tabindex=\"0\"\n class=\"z-10 absolute h-60 w-[12.5rem] shadow-md overflow-y-auto top-10 rounded-lg px-0 pt-0 pb-1 bg-n-alpha-3 backdrop-blur-[100px]\"\n @keydown.prevent.up=\"moveUp\"\n @keydown.prevent.down=\"moveDown\"\n @keydown.prevent.enter=\"\n onSelectCountry(filteredCountriesBySearch[selectedIndex])\n \"\n >\n <div\n class=\"sticky top-0 p-1 bg-white dark:bg-transparent backdrop-blur-[100px]\"\n >\n <input\n ref=\"searchbar\"\n v-model=\"searchCountry\"\n type=\"text\"\n :placeholder=\"$t('GENERAL.PHONE_INPUT.PLACEHOLDER')\"\n class=\"!h-8 !mb-0 !text-sm !outline-n-brand dark:!outline-n-brand\"\n @input=\"onSearchCountry\"\n />\n </div>\n <div\n v-for=\"(country, index) in filteredCountriesBySearch\"\n ref=\"dropdownItem\"\n :key=\"index\"\n class=\"flex items-center px-1 py-0 cursor-pointer h-7 hover:bg-n-alpha-1 dark:hover:bg-n-alpha-2\"\n :class=\"{\n 'bg-n-alpha-1 dark:bg-n-alpha-2': country.id === activeCountryCode,\n 'bg-n-alpha-1 dark:bg-n-alpha-2': index === selectedIndex,\n }\"\n @click=\"onSelectCountry(country)\"\n >\n <span class=\"mr-1 text-base\">{{ country.emoji }}</span>\n\n <span\n class=\"max-w-[7.5rem] overflow-hidden text-ellipsis whitespace-nowrap\"\n >\n {{ country.name }}\n </span>\n <span class=\"ml-1 text-xs text-n-slate-11\">\n {{ country.dial_code }}\n </span>\n </div>\n <div v-if=\"filteredCountriesBySearch.length === 0\">\n <span\n class=\"flex items-center justify-center mt-4 text-sm text-n-slate-10\"\n >\n {{ $t('GENERAL.PHONE_INPUT.EMPTY_STATE') }}\n </span>\n </div>\n </div>\n </div>\n</template>\n","<script>\nimport { getContrastingTextColor } from '@chatwoot/utils';\n\nexport default {\n props: {\n title: {\n type: String,\n required: true,\n },\n description: {\n type: String,\n default: '',\n },\n href: {\n type: String,\n default: '',\n },\n bgColor: {\n type: String,\n default: '',\n },\n small: {\n type: Boolean,\n default: false,\n },\n showClose: {\n type: Boolean,\n default: false,\n },\n icon: {\n type: String,\n default: '',\n },\n color: {\n type: String,\n default: '',\n },\n colorScheme: {\n type: String,\n default: '',\n },\n variant: {\n type: String,\n default: '',\n },\n },\n emits: ['remove'],\n computed: {\n textColor() {\n if (this.variant === 'smooth') return '';\n if (this.variant === 'dashed') return '';\n return this.color || getContrastingTextColor(this.bgColor);\n },\n labelClass() {\n return `label ${this.colorScheme} ${this.variant} ${\n this.small ? 'small' : ''\n }`;\n },\n labelStyle() {\n if (this.bgColor) {\n return {\n background: this.bgColor,\n color: this.textColor,\n border: `1px solid ${this.bgColor}`,\n };\n }\n return {};\n },\n anchorStyle() {\n if (this.bgColor) {\n return { color: this.textColor };\n }\n return {};\n },\n },\n methods: {\n onClick() {\n this.$emit('remove', this.title);\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"inline-flex ltr:mr-1 rtl:ml-1 mb-1\"\n :class=\"labelClass\"\n :style=\"labelStyle\"\n :title=\"description\"\n >\n <span v-if=\"icon\" class=\"label-action--button\">\n <fluent-icon :icon=\"icon\" size=\"12\" class=\"label--icon cursor-pointer\" />\n </span>\n <span\n v-if=\"['smooth', 'dashed'].includes(variant) && title && !icon\"\n :style=\"{ background: color }\"\n class=\"label-color-dot flex-shrink-0\"\n />\n <span v-if=\"!href\" class=\"whitespace-nowrap text-ellipsis overflow-hidden\">\n {{ title }}\n </span>\n <a v-else :href=\"href\" :style=\"anchorStyle\">{{ title }}</a>\n <button\n v-if=\"showClose\"\n class=\"label-close--button p-0\"\n :style=\"{ color: textColor }\"\n @click=\"onClick\"\n >\n <fluent-icon icon=\"dismiss\" size=\"12\" class=\"close--icon\" />\n </button>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.label {\n @apply items-center font-medium text-xs rounded-[4px] gap-1 p-1 bg-slate-50 dark:bg-slate-700 text-slate-800 dark:text-slate-100 border border-solid border-n-strong h-6;\n\n &.small {\n @apply text-xs py-0.5 px-1 leading-tight h-5;\n }\n\n &.small .label--icon,\n &.small .close--icon {\n @apply text-[0.5rem];\n }\n\n a {\n @apply text-xs;\n &:hover {\n @apply underline;\n }\n }\n\n /* Color Schemes */\n &.primary {\n @apply bg-woot-100 dark:bg-woot-100 text-woot-900 dark:text-woot-900 border border-solid border-woot-200;\n\n a {\n @apply text-woot-900 dark:text-woot-900;\n }\n .label-color-dot {\n @apply bg-woot-600 dark:bg-woot-600;\n }\n }\n &.secondary {\n @apply bg-slate-100 dark:bg-slate-700 text-slate-900 dark:text-slate-100 border border-solid border-n-weak;\n\n a {\n @apply text-slate-900 dark:text-slate-100;\n }\n .label-color-dot {\n @apply bg-slate-600 dark:bg-slate-600;\n }\n }\n &.success {\n @apply bg-green-100 dark:bg-green-700 text-green-900 dark:text-green-100 border border-solid border-green-200 dark:border-green-600;\n\n a {\n @apply text-green-900 dark:text-green-100;\n }\n .label-color-dot {\n @apply bg-green-600 dark:bg-green-600;\n }\n }\n &.alert {\n @apply bg-red-100 dark:bg-red-700 text-red-900 dark:text-red-100 border border-solid border-red-200 dark:border-red-600;\n\n a {\n @apply text-red-900 dark:text-red-100;\n }\n .label-color-dot {\n @apply bg-red-600 dark:bg-red-600;\n }\n }\n &.warning {\n @apply bg-yellow-100 dark:bg-yellow-700 text-yellow-900 dark:text-yellow-100 border border-solid border-yellow-200 dark:border-yellow-600;\n\n a {\n @apply text-yellow-900 dark:text-yellow-100;\n }\n .label-color-dot {\n @apply bg-yellow-900 dark:bg-yellow-900;\n }\n }\n\n &.smooth {\n @apply bg-transparent text-slate-700 dark:text-slate-100 border border-solid border-n-strong;\n }\n\n &.dashed {\n @apply bg-transparent text-slate-700 dark:text-slate-100 border border-dashed border-n-strong;\n }\n}\n\n.label-close--button {\n @apply text-slate-800 dark:text-slate-100 -mb-0.5 rounded-sm cursor-pointer flex items-center justify-center hover:bg-slate-100 dark:hover:bg-slate-700;\n}\n\n.label-action--button {\n @apply flex mr-1;\n}\n\n.label-color-dot {\n @apply inline-block w-3 h-3 rounded-sm shadow-sm;\n}\n.label.small .label-color-dot {\n @apply w-2 h-2 rounded-sm shadow-sm;\n}\n</style>\n","<script>\nexport default {\n props: {\n message: { type: String, default: '' },\n },\n};\n</script>\n\n<template>\n <div class=\"flex items-center justify-center p-8\">\n <h6\n class=\"flex items-center gap-2 text-base text-center w-100 text-slate-800 dark:text-slate-300\"\n >\n <span class=\"text-base font-medium text-slate-800 dark:text-slate-100\">\n {{ message }}\n </span>\n <span class=\"spinner\" />\n </h6>\n </div>\n</template>\n","<script>\nexport default {\n props: {\n headerTitle: {\n type: String,\n default: '',\n },\n headerContent: {\n type: String,\n default: '',\n },\n headerContentValue: {\n type: String,\n default: '',\n },\n headerImage: {\n type: String,\n default: '',\n },\n },\n};\n</script>\n\n<!-- eslint-disable vue/no-unused-refs -->\n<!-- Added ref for writing specs -->\n<template>\n <div class=\"flex flex-col items-start px-8 pt-8 pb-0\">\n <img v-if=\"headerImage\" :src=\"headerImage\" alt=\"No image\" />\n <h2\n data-test-id=\"modal-header-title\"\n class=\"text-base font-semibold leading-6 text-slate-800 dark:text-slate-50\"\n >\n {{ headerTitle }}\n </h2>\n <p\n v-if=\"headerContent\"\n data-test-id=\"modal-header-content\"\n class=\"w-full mt-2 text-sm leading-5 break-words text-slate-600 dark:text-slate-300\"\n >\n {{ headerContent }}\n <span\n v-if=\"headerContentValue\"\n class=\"text-sm font-semibold text-slate-600 dark:text-slate-300\"\n >\n {{ headerContentValue }}\n </span>\n </p>\n <slot />\n </div>\n</template>\n","export const FEATURE_FLAGS = {\n AGENT_BOTS: 'agent_bots',\n AGENT_MANAGEMENT: 'agent_management',\n AUTO_RESOLVE_CONVERSATIONS: 'auto_resolve_conversations',\n AUTOMATIONS: 'automations',\n CAMPAIGNS: 'campaigns',\n CANNED_RESPONSES: 'canned_responses',\n CRM: 'crm',\n CUSTOM_ATTRIBUTES: 'custom_attributes',\n INBOX_MANAGEMENT: 'inbox_management',\n INTEGRATIONS: 'integrations',\n LABELS: 'labels',\n MACROS: 'macros',\n HELP_CENTER: 'help_center',\n REPORTS: 'reports',\n TEAM_MANAGEMENT: 'team_management',\n VOICE_RECORDER: 'voice_recorder',\n AUDIT_LOGS: 'audit_logs',\n INBOX_VIEW: 'inbox_view',\n SLA: 'sla',\n RESPONSE_BOT: 'response_bot',\n CHANNEL_EMAIL: 'channel_email',\n CHANNEL_FACEBOOK: 'channel_facebook',\n CHANNEL_TWITTER: 'channel_twitter',\n CHANNEL_WEBSITE: 'channel_website',\n CUSTOM_REPLY_DOMAIN: 'custom_reply_domain',\n CUSTOM_REPLY_EMAIL: 'custom_reply_email',\n DISABLE_BRANDING: 'disable_branding',\n EMAIL_CONTINUITY_ON_API_CHANNEL: 'email_continuity_on_api_channel',\n INBOUND_EMAILS: 'inbound_emails',\n IP_LOOKUP: 'ip_lookup',\n LINEAR: 'linear_integration',\n CAPTAIN: 'captain_integration',\n CUSTOM_ROLES: 'custom_roles',\n CHATWOOT_V4: 'chatwoot_v4',\n REPORT_V4: 'report_v4',\n CONTACT_CHATWOOT_SUPPORT_TEAM: 'contact_chatwoot_support_team',\n};\n\nexport const PREMIUM_FEATURES = [\n FEATURE_FLAGS.SLA,\n FEATURE_FLAGS.CAPTAIN,\n FEATURE_FLAGS.CUSTOM_ROLES,\n FEATURE_FLAGS.AUDIT_LOGS,\n FEATURE_FLAGS.HELP_CENTER,\n];\n","<script>\nimport { FEATURE_FLAGS } from 'dashboard/featureFlags';\nimport { BUS_EVENTS } from 'shared/constants/busEvents';\nimport { mapGetters } from 'vuex';\nimport { emitter } from 'shared/helpers/mitt';\n\nexport default {\n props: {\n size: {\n type: String,\n default: 'small',\n },\n },\n computed: {\n ...mapGetters({\n accountId: 'getCurrentAccountId',\n isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount',\n }),\n hasNextSidebar() {\n return this.isFeatureEnabledonAccount(\n this.accountId,\n FEATURE_FLAGS.CHATWOOT_V4\n );\n },\n },\n methods: {\n onMenuItemClick() {\n emitter.emit(BUS_EVENTS.TOGGLE_SIDEMENU);\n },\n },\n};\n</script>\n\n<!-- eslint-disable-next-line vue/no-root-v-if -->\n<template>\n <woot-button\n v-if=\"!hasNextSidebar\"\n :size=\"size\"\n variant=\"clear\"\n color-scheme=\"secondary\"\n class=\"-ml-3 text-black-900 dark:text-slate-300\"\n icon=\"list\"\n @click=\"onMenuItemClick\"\n />\n</template>\n","<script>\nimport Spinner from 'shared/components/Spinner.vue';\n\nexport default {\n components: {\n Spinner,\n },\n props: {\n disabled: {\n type: Boolean,\n default: false,\n },\n loading: {\n type: Boolean,\n default: false,\n },\n buttonText: {\n type: String,\n default: '',\n },\n buttonClass: {\n type: String,\n default: '',\n },\n iconClass: {\n type: String,\n default: '',\n },\n spinnerClass: {\n type: String,\n default: '',\n },\n type: {\n type: String,\n default: 'submit',\n },\n },\n computed: {\n computedClass() {\n return `button nice gap-2 ${this.buttonClass || ' '}`;\n },\n },\n};\n</script>\n\n<template>\n <button\n :type=\"type\"\n data-testid=\"submit_button\"\n :disabled=\"disabled\"\n :class=\"computedClass\"\n >\n <fluent-icon v-if=\"!!iconClass\" :icon=\"iconClass\" class=\"icon\" />\n <span>{{ buttonText }}</span>\n <Spinner v-if=\"loading\" class=\"ml-2\" :color-scheme=\"spinnerClass\" />\n </button>\n</template>\n\n<style lang=\"scss\" scoped>\nbutton:disabled {\n @apply bg-woot-100 dark:bg-woot-500/25 dark:text-slate-500 opacity-100;\n &:hover {\n @apply bg-woot-100 dark:bg-woot-500/25;\n }\n}\n</style>\n","<script setup>\nimport { ref, useTemplateRef, provide, computed, watch } from 'vue';\nimport { useElementSize } from '@vueuse/core';\n\nconst props = defineProps({\n index: {\n type: Number,\n default: 0,\n },\n border: {\n type: Boolean,\n default: true,\n },\n isCompact: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits(['change']);\n\nconst tabsContainer = useTemplateRef('tabsContainer');\nconst tabsList = useTemplateRef('tabsList');\n\nconst { width: containerWidth } = useElementSize(tabsContainer);\nconst { width: listWidth } = useElementSize(tabsList);\n\nconst hasScroll = ref(false);\n\nconst activeIndex = computed({\n get: () => props.index,\n set: newValue => {\n emit('change', newValue);\n },\n});\n\nprovide('activeIndex', activeIndex);\nprovide('updateActiveIndex', index => {\n activeIndex.value = index;\n});\n\nconst computeScrollWidth = () => {\n if (tabsContainer.value && tabsList.value) {\n hasScroll.value = tabsList.value.scrollWidth > tabsList.value.clientWidth;\n }\n};\n\nconst onScrollClick = direction => {\n if (tabsContainer.value && tabsList.value) {\n let scrollPosition = tabsList.value.scrollLeft;\n scrollPosition += direction === 'left' ? -100 : 100;\n tabsList.value.scrollTo({\n top: 0,\n left: scrollPosition,\n behavior: 'smooth',\n });\n }\n};\n\n// Watch for changes in element sizes with immediate execution\nwatch(\n [containerWidth, listWidth],\n () => {\n computeScrollWidth();\n },\n { immediate: true }\n);\n</script>\n\n<template>\n <div\n ref=\"tabsContainer\"\n :class=\"{\n 'tabs--container--with-border': border,\n 'tabs--container--compact': isCompact,\n }\"\n class=\"tabs--container\"\n >\n <button\n v-if=\"hasScroll\"\n class=\"tabs--scroll-button button clear secondary button--only-icon\"\n @click=\"onScrollClick('left')\"\n >\n <fluent-icon icon=\"chevron-left\" :size=\"16\" />\n </button>\n <ul ref=\"tabsList\" :class=\"{ 'tabs--with-scroll': hasScroll }\" class=\"tabs\">\n <slot />\n </ul>\n <button\n v-if=\"hasScroll\"\n class=\"tabs--scroll-button button clear secondary button--only-icon\"\n @click=\"onScrollClick('right')\"\n >\n <fluent-icon icon=\"chevron-right\" :size=\"16\" />\n </button>\n </div>\n</template>\n","<script setup>\nimport { computed, inject } from 'vue';\n\nconst props = defineProps({\n index: {\n type: Number,\n default: 0,\n },\n name: {\n type: String,\n required: true,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n count: {\n type: Number,\n default: 0,\n },\n showBadge: {\n type: Boolean,\n default: true,\n },\n});\n\nconst activeIndex = inject('activeIndex');\nconst updateActiveIndex = inject('updateActiveIndex');\n\nconst active = computed(() => props.index === activeIndex.value);\nconst getItemCount = computed(() => props.count);\n\nconst onTabClick = event => {\n event.preventDefault();\n if (!props.disabled) {\n updateActiveIndex(props.index);\n }\n};\n</script>\n\n<template>\n <li\n class=\"tabs-title\"\n :class=\"{\n 'is-active': active,\n }\"\n >\n <a @click=\"onTabClick\">\n {{ name }}\n <div v-if=\"showBadge\" class=\"badge min-w-[20px]\">\n <span>\n {{ getItemCount }}\n </span>\n </div>\n </a>\n </li>\n</template>\n","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the months added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * const result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n */\n\nexport default function addMonths(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var amount = toInteger(dirtyAmount);\n\n if (isNaN(amount)) {\n return new Date(NaN);\n }\n\n if (!amount) {\n // If 0 months, no-op to avoid changing times in the hour before end of DST\n return date;\n }\n\n var dayOfMonth = date.getDate(); // The JS Date object supports date math by accepting out-of-bounds values for\n // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n // new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we\n // want except that dates will wrap around the end of a month, meaning that\n // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n // we'll default to the end of the desired month by adding 1 to the desired\n // month and using a date of 0 to back up one day to the end of the desired\n // month.\n\n var endOfDesiredMonth = new Date(date.getTime());\n endOfDesiredMonth.setMonth(date.getMonth() + amount + 1, 0);\n var daysInMonth = endOfDesiredMonth.getDate();\n\n if (dayOfMonth >= daysInMonth) {\n // If we're already at the end of the month, then this is the correct date\n // and we're done.\n return endOfDesiredMonth;\n } else {\n // Otherwise, we now know that setting the original day-of-month value won't\n // cause an overflow, so set the desired day-of-month. Note that we can't\n // just set the date of `endOfDesiredMonth` because that object may have had\n // its time changed in the unusual case where where a DST transition was on\n // the last day of the month and its local time was in the hour skipped or\n // repeated next to a DST transition. So we use `date` instead which is\n // guaranteed to still have the original time.\n date.setFullYear(endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth);\n return date;\n }\n}","import addDays from \"../addDays/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n\n/**\n * @name add\n * @category Common Helpers\n * @summary Add the specified years, months, weeks, days, hours, minutes and seconds to the given date.\n *\n * @description\n * Add the specified years, months, weeks, days, hours, minutes and seconds to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Duration} duration - the object with years, months, weeks, days, hours, minutes and seconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n *\n * | Key | Description |\n * |----------------|------------------------------------|\n * | years | Amount of years to be added |\n * | months | Amount of months to be added |\n * | weeks | Amount of weeks to be added |\n * | days | Amount of days to be added |\n * | hours | Amount of hours to be added |\n * | minutes | Amount of minutes to be added |\n * | seconds | Amount of seconds to be added |\n *\n * All values default to 0\n *\n * @returns {Date} the new date with the seconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add the following duration to 1 September 2014, 10:19:50\n * const result = add(new Date(2014, 8, 1, 10, 19, 50), {\n * years: 2,\n * months: 9,\n * weeks: 1,\n * days: 7,\n * hours: 5,\n * minutes: 9,\n * seconds: 30,\n * })\n * //=> Thu Jun 15 2017 15:29:20\n */\nexport default function add(dirtyDate, duration) {\n requiredArgs(2, arguments);\n if (!duration || typeof duration !== 'object') return new Date(NaN);\n var years = 'years' in duration ? toInteger(duration.years) : 0;\n var months = 'months' in duration ? toInteger(duration.months) : 0;\n var weeks = 'weeks' in duration ? toInteger(duration.weeks) : 0;\n var days = 'days' in duration ? toInteger(duration.days) : 0;\n var hours = 'hours' in duration ? toInteger(duration.hours) : 0;\n var minutes = 'minutes' in duration ? toInteger(duration.minutes) : 0;\n var seconds = 'seconds' in duration ? toInteger(duration.seconds) : 0; // Add years and months\n\n var date = toDate(dirtyDate);\n var dateWithMonths = months || years ? addMonths(date, months + years * 12) : date; // Add weeks and days\n\n var dateWithDays = days || weeks ? addDays(dateWithMonths, days + weeks * 7) : dateWithMonths; // Add days, hours, minutes and seconds\n\n var minutesToAdd = minutes + hours * 60;\n var secondsToAdd = seconds + minutesToAdd * 60;\n var msToAdd = secondsToAdd * 1000;\n var finalDate = new Date(dateWithDays.getTime() + msToAdd);\n return finalDate;\n}","import toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date} the start of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function startOfWeek(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n var date = toDate(dirtyDate);\n var day = date.getDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setDate(date.getDate() - diff);\n date.setHours(0, 0, 0, 0);\n return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addDays from \"../addDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addWeeks\n * @category Week Helpers\n * @summary Add the specified number of weeks to the given date.\n *\n * @description\n * Add the specified number of week to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of weeks to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the weeks added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 4 weeks to 1 September 2014:\n * const result = addWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Sep 29 2014 00:00:00\n */\n\nexport default function addWeeks(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n var days = amount * 7;\n return addDays(dirtyDate, days);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the years added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * const result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\n\nexport default function addYears(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMonths(dirtyDate, amount * 12);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInCalendarYears\n * @category Year Helpers\n * @summary Get the number of calendar years between the given dates.\n *\n * @description\n * Get the number of calendar years between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar years are between 31 December 2013 and 11 February 2015?\n * var result = differenceInCalendarYears(\n * new Date(2015, 1, 11),\n * new Date(2013, 11, 31)\n * )\n * //=> 2\n */\n\nexport default function differenceInCalendarYears(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n return dateLeft.getFullYear() - dateRight.getFullYear();\n}","import differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_HOUR = 3600000;\n/**\n * @name differenceInHours\n * @category Hour Helpers\n * @summary Get the number of hours between the given dates.\n *\n * @description\n * Get the number of hours between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of hours\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many hours are between 2 July 2014 06:50:00 and 2 July 2014 19:00:00?\n * var result = differenceInHours(\n * new Date(2014, 6, 2, 19, 0),\n * new Date(2014, 6, 2, 6, 50)\n * )\n * //=> 12\n */\n\nexport default function differenceInHours(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var diff = differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) / MILLISECONDS_IN_HOUR;\n return diff > 0 ? Math.floor(diff) : Math.ceil(diff);\n}","import differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_MINUTE = 60000;\n/**\n * @name differenceInMinutes\n * @category Minute Helpers\n * @summary Get the number of minutes between the given dates.\n *\n * @description\n * Get the signed number of full (rounded towards 0) minutes between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of minutes\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many minutes are between 2 July 2014 12:07:59 and 2 July 2014 12:20:00?\n * var result = differenceInMinutes(\n * new Date(2014, 6, 2, 12, 20, 0),\n * new Date(2014, 6, 2, 12, 7, 59)\n * )\n * //=> 12\n *\n * @example\n * // How many minutes are from 10:01:59 to 10:00:00\n * var result = differenceInMinutes(\n * new Date(2000, 0, 1, 10, 0, 0),\n * new Date(2000, 0, 1, 10, 1, 59)\n * )\n * //=> -1\n */\n\nexport default function differenceInMinutes(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var diff = differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) / MILLISECONDS_IN_MINUTE;\n return diff > 0 ? Math.floor(diff) : Math.ceil(diff);\n}","import toDate from \"../toDate/index.js\";\nimport differenceInCalendarYears from \"../differenceInCalendarYears/index.js\";\nimport compareAsc from \"../compareAsc/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInYears\n * @category Year Helpers\n * @summary Get the number of full years between the given dates.\n *\n * @description\n * Get the number of full years between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full years are between 31 December 2013 and 11 February 2015?\n * var result = differenceInYears(new Date(2015, 1, 11), new Date(2013, 11, 31))\n * //=> 1\n */\n\nexport default function differenceInYears(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var sign = compareAsc(dateLeft, dateRight);\n var difference = Math.abs(differenceInCalendarYears(dateLeft, dateRight)); // Set both dates to a valid leap year for accurate comparison when dealing\n // with leap days\n\n dateLeft.setFullYear('1584');\n dateRight.setFullYear('1584'); // Math.abs(diff in full years - diff in calendar years) === 1 if last calendar year is not full\n // If so, result must be decreased by 1 in absolute value\n\n var isLastYearNotFull = compareAsc(dateLeft, dateRight) === -sign;\n var result = sign * (difference - isLastYearNotFull); // Prevent negative zero\n\n return result === 0 ? 0 : result;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachDayOfInterval\n * @category Interval Helpers\n * @summary Return the array of dates within the specified time interval.\n *\n * @description\n * Return the array of dates within the specified time interval.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `eachDay` to `eachDayOfInterval`.\n * This change was made to mirror the use of the word \"interval\" in standard ISO 8601:2004 terminology:\n *\n * ```\n * 2.1.3\n * time interval\n * part of the time axis limited by two instants\n * ```\n *\n * Also, this function now accepts an object with `start` and `end` properties\n * instead of two arguments as an interval.\n * This function now throws `RangeError` if the start of the interval is after its end\n * or if any date in the interval is `Invalid Date`.\n *\n * ```javascript\n * // Before v2.0.0\n *\n * eachDay(new Date(2014, 0, 10), new Date(2014, 0, 20))\n *\n * // v2.0.0 onward\n *\n * eachDayOfInterval(\n * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) }\n * )\n * ```\n *\n * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.step=1] - the step to increment by. The value should be more than 1.\n * @returns {Date[]} the array with starts of days from the day of the interval start to the day of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.step` must be a number greater than 1\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each day between 6 October 2014 and 10 October 2014:\n * const result = eachDayOfInterval({\n * start: new Date(2014, 9, 6),\n * end: new Date(2014, 9, 10)\n * })\n * //=> [\n * // Mon Oct 06 2014 00:00:00,\n * // Tue Oct 07 2014 00:00:00,\n * // Wed Oct 08 2014 00:00:00,\n * // Thu Oct 09 2014 00:00:00,\n * // Fri Oct 10 2014 00:00:00\n * // ]\n */\n\nexport default function eachDayOfInterval(dirtyInterval, options) {\n requiredArgs(1, arguments);\n var interval = dirtyInterval || {};\n var startDate = toDate(interval.start);\n var endDate = toDate(interval.end);\n var endTime = endDate.getTime(); // Throw an exception if start date is after end date or if any date is `Invalid Date`\n\n if (!(startDate.getTime() <= endTime)) {\n throw new RangeError('Invalid interval');\n }\n\n var dates = [];\n var currentDate = startDate;\n currentDate.setHours(0, 0, 0, 0);\n var step = options && 'step' in options ? Number(options.step) : 1;\n if (step < 1 || isNaN(step)) throw new RangeError('`options.step` must be a number greater than 1');\n\n while (currentDate.getTime() <= endTime) {\n dates.push(toDate(currentDate));\n currentDate.setDate(currentDate.getDate() + step);\n currentDate.setHours(0, 0, 0, 0);\n }\n\n return dates;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start of a month for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function startOfMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getDay\n * @category Weekday Helpers\n * @summary Get the day of the week of the given date.\n *\n * @description\n * Get the day of the week of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {0|1|2|3|4|5|6} the day of week, 0 represents Sunday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the week is 29 February 2012?\n * const result = getDay(new Date(2012, 1, 29))\n * //=> 3\n */\n\nexport default function getDay(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var day = date.getDay();\n return day;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getDaysInMonth\n * @category Month Helpers\n * @summary Get the number of days in a month of the given date.\n *\n * @description\n * Get the number of days in a month of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the number of days in a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // How many days are in February 2000?\n * const result = getDaysInMonth(new Date(2000, 1))\n * //=> 29\n */\n\nexport default function getDaysInMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getFullYear();\n var monthIndex = date.getMonth();\n var lastDayOfMonth = new Date(0);\n lastDayOfMonth.setFullYear(year, monthIndex + 1, 0);\n lastDayOfMonth.setHours(0, 0, 0, 0);\n return lastDayOfMonth.getDate();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getMonth\n * @category Month Helpers\n * @summary Get the month of the given date.\n *\n * @description\n * Get the month of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which month is 29 February 2012?\n * const result = getMonth(new Date(2012, 1, 29))\n * //=> 1\n */\n\nexport default function getMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var month = date.getMonth();\n return month;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getYear\n * @category Year Helpers\n * @summary Get the year of the given date.\n *\n * @description\n * Get the year of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which year is 2 July 2014?\n * const result = getYear(new Date(2014, 6, 2))\n * //=> 2014\n */\n\nexport default function getYear(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getFullYear();\n return year;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subMonths\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the months subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * const result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function subMonths(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMonths(dirtyDate, -amount);\n}","import subDays from \"../subDays/index.js\";\nimport subMonths from \"../subMonths/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name sub\n * @category Common Helpers\n * @summary Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date.\n *\n * @description\n * Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Duration} duration - the object with years, months, weeks, days, hours, minutes and seconds to be subtracted\n *\n * | Key | Description |\n * |---------|------------------------------------|\n * | years | Amount of years to be subtracted |\n * | months | Amount of months to be subtracted |\n * | weeks | Amount of weeks to be subtracted |\n * | days | Amount of days to be subtracted |\n * | hours | Amount of hours to be subtracted |\n * | minutes | Amount of minutes to be subtracted |\n * | seconds | Amount of seconds to be subtracted |\n *\n * All values default to 0\n *\n * @returns {Date} the new date with the seconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract the following duration from 15 June 2017 15:29:20\n * const result = sub(new Date(2017, 5, 15, 15, 29, 20), {\n * years: 2,\n * months: 9,\n * weeks: 1,\n * days: 7,\n * hours: 5,\n * minutes: 9,\n * seconds: 30\n * })\n * //=> Mon Sep 1 2014 10:19:50\n */\n\nexport default function sub(dirtyDate, duration) {\n requiredArgs(2, arguments);\n if (!duration || typeof duration !== 'object') return new Date(NaN);\n var years = 'years' in duration ? toInteger(duration.years) : 0;\n var months = 'months' in duration ? toInteger(duration.months) : 0;\n var weeks = 'weeks' in duration ? toInteger(duration.weeks) : 0;\n var days = 'days' in duration ? toInteger(duration.days) : 0;\n var hours = 'hours' in duration ? toInteger(duration.hours) : 0;\n var minutes = 'minutes' in duration ? toInteger(duration.minutes) : 0;\n var seconds = 'seconds' in duration ? toInteger(duration.seconds) : 0; // Subtract years and months\n\n var dateWithoutMonths = subMonths(toDate(dirtyDate), months + years * 12); // Subtract weeks and days\n\n var dateWithoutDays = subDays(dateWithoutMonths, days + weeks * 7); // Subtract hours, minutes and seconds\n\n var minutestoSub = minutes + hours * 60;\n var secondstoSub = seconds + minutestoSub * 60;\n var mstoSub = secondstoSub * 1000;\n var finalDate = new Date(dateWithoutDays.getTime() - mstoSub);\n return finalDate;\n}","import compareAsc from \"../compareAsc/index.js\";\nimport differenceInYears from \"../differenceInYears/index.js\";\nimport differenceInMonths from \"../differenceInMonths/index.js\";\nimport differenceInDays from \"../differenceInDays/index.js\";\nimport differenceInHours from \"../differenceInHours/index.js\";\nimport differenceInMinutes from \"../differenceInMinutes/index.js\";\nimport differenceInSeconds from \"../differenceInSeconds/index.js\";\nimport isValid from \"../isValid/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport sub from \"../sub/index.js\";\n/**\n * @name intervalToDuration\n * @category Common Helpers\n * @summary Convert interval to duration\n *\n * @description\n * Convert a interval object to a duration object.\n *\n * @param {Interval} interval - the interval to convert to duration\n *\n * @returns {Duration} The duration Object\n * @throws {TypeError} Requires 2 arguments\n * @throws {RangeError} `start` must not be Invalid Date\n * @throws {RangeError} `end` must not be Invalid Date\n *\n * @example\n * // Get the duration between January 15, 1929 and April 4, 1968.\n * intervalToDuration({\n * start: new Date(1929, 0, 15, 12, 0, 0),\n * end: new Date(1968, 3, 4, 19, 5, 0)\n * })\n * // => { years: 39, months: 2, days: 20, hours: 7, minutes: 5, seconds: 0 }\n */\n\nexport default function intervalToDuration(_ref) {\n var start = _ref.start,\n end = _ref.end;\n requiredArgs(1, arguments);\n var dateLeft = toDate(start);\n var dateRight = toDate(end);\n\n if (!isValid(dateLeft)) {\n throw new RangeError('Start Date is invalid');\n }\n\n if (!isValid(dateRight)) {\n throw new RangeError('End Date is invalid');\n }\n\n var duration = {\n years: 0,\n months: 0,\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0\n };\n var sign = compareAsc(dateLeft, dateRight);\n duration.years = Math.abs(differenceInYears(dateLeft, dateRight));\n var remainingMonths = sub(dateLeft, {\n years: sign * duration.years\n });\n duration.months = Math.abs(differenceInMonths(remainingMonths, dateRight));\n var remainingDays = sub(remainingMonths, {\n months: sign * duration.months\n });\n duration.days = Math.abs(differenceInDays(remainingDays, dateRight));\n var remainingHours = sub(remainingDays, {\n days: sign * duration.days\n });\n duration.hours = Math.abs(differenceInHours(remainingHours, dateRight));\n var remainingMinutes = sub(remainingHours, {\n hours: sign * duration.hours\n });\n duration.minutes = Math.abs(differenceInMinutes(remainingMinutes, dateRight));\n var remainingSeconds = sub(remainingMinutes, {\n minutes: sign * duration.minutes\n });\n duration.seconds = Math.abs(differenceInSeconds(remainingSeconds, dateRight));\n return duration;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isAfter\n * @category Common Helpers\n * @summary Is the first date after the second one?\n *\n * @description\n * Is the first date after the second one?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date that should be after the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is after the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 after 11 February 1987?\n * var result = isAfter(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> true\n */\n\nexport default function isAfter(dirtyDate, dirtyDateToCompare) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var dateToCompare = toDate(dirtyDateToCompare);\n return date.getTime() > dateToCompare.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date that should be before the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is before the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * var result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\n\nexport default function isBefore(dirtyDate, dirtyDateToCompare) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var dateToCompare = toDate(dirtyDateToCompare);\n return date.getTime() < dateToCompare.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isMonday\n * @category Weekday Helpers\n * @summary Is the given date Monday?\n *\n * @description\n * Is the given date Monday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Monday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 22 September 2014 Monday?\n * var result = isMonday(new Date(2014, 8, 22))\n * //=> true\n */\n\nexport default function isMonday(date) {\n requiredArgs(1, arguments);\n return toDate(date).getDay() === 1;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameMonth\n * @category Month Helpers\n * @summary Are the given dates in the same month?\n *\n * @description\n * Are the given dates in the same month?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same month\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same month?\n * var result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n */\n\nexport default function isSameMonth(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n return dateLeft.getFullYear() === dateRight.getFullYear() && dateLeft.getMonth() === dateRight.getMonth();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n\n/**\n * @name isWithinInterval\n * @category Interval Helpers\n * @summary Is the given date within the interval?\n *\n * @description\n * Is the given date within the interval? (Including start and end.)\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `isWithinRange` to `isWithinInterval`.\n * This change was made to mirror the use of the word \"interval\" in standard ISO 8601:2004 terminology:\n *\n * ```\n * 2.1.3\n * time interval\n * part of the time axis limited by two instants\n * ```\n *\n * Also, this function now accepts an object with `start` and `end` properties\n * instead of two arguments as an interval.\n * This function now throws `RangeError` if the start of the interval is after its end\n * or if any date in the interval is `Invalid Date`.\n *\n * ```javascript\n * // Before v2.0.0\n *\n * isWithinRange(\n * new Date(2014, 0, 3),\n * new Date(2014, 0, 1), new Date(2014, 0, 7)\n * )\n *\n * // v2.0.0 onward\n *\n * isWithinInterval(\n * new Date(2014, 0, 3),\n * { start: new Date(2014, 0, 1), end: new Date(2014, 0, 7) }\n * )\n * ```\n *\n * @param {Date|Number} date - the date to check\n * @param {Interval} interval - the interval to check\n * @returns {Boolean} the date is within the interval\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // For the date within the interval:\n * isWithinInterval(new Date(2014, 0, 3), {\n * start: new Date(2014, 0, 1),\n * end: new Date(2014, 0, 7)\n * })\n * //=> true\n *\n * @example\n * // For the date outside of the interval:\n * isWithinInterval(new Date(2014, 0, 10), {\n * start: new Date(2014, 0, 1),\n * end: new Date(2014, 0, 7)\n * })\n * //=> false\n *\n * @example\n * // For date equal to interval start:\n * isWithinInterval(date, { start, end: date }) // => true\n *\n * @example\n * // For date equal to interval end:\n * isWithinInterval(date, { start: date, end }) // => true\n */\nexport default function isWithinInterval(dirtyDate, interval) {\n requiredArgs(2, arguments);\n var time = toDate(dirtyDate).getTime();\n var startTime = toDate(interval.start).getTime();\n var endTime = toDate(interval.end).getTime(); // Throw an exception if start date is after end date or if any date is `Invalid Date`\n\n if (!(startTime <= endTime)) {\n throw new RangeError('Invalid interval');\n }\n\n return time >= startTime && time <= endTime;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_HOUR = 3600000;\nvar MILLISECONDS_IN_MINUTE = 60000;\nvar DEFAULT_ADDITIONAL_DIGITS = 2;\nvar patterns = {\n dateTimeDelimiter: /[T ]/,\n timeZoneDelimiter: /[Z ]/i,\n timezone: /([Z+-].*)$/\n};\nvar dateRegex = /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/;\nvar timeRegex = /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/;\nvar timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/;\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The previous `parse` implementation was renamed to `parseISO`.\n *\n * ```javascript\n * // Before v2.0.0\n * parse('2016-01-01')\n *\n * // v2.0.0 onward\n * parseISO('2016-01-01')\n * ```\n *\n * - `parseISO` now validates separate date and time values in ISO-8601 strings\n * and returns `Invalid Date` if the date is invalid.\n *\n * ```javascript\n * parseISO('2018-13-32')\n * //=> Invalid Date\n * ```\n *\n * - `parseISO` now doesn't fall back to `new Date` constructor\n * if it fails to parse a string argument. Instead, it returns `Invalid Date`.\n *\n * @param {String} argument - the value to convert\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * var result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * var result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\n\nexport default function parseISO(argument, dirtyOptions) {\n requiredArgs(1, arguments);\n var options = dirtyOptions || {};\n var additionalDigits = options.additionalDigits == null ? DEFAULT_ADDITIONAL_DIGITS : toInteger(options.additionalDigits);\n\n if (additionalDigits !== 2 && additionalDigits !== 1 && additionalDigits !== 0) {\n throw new RangeError('additionalDigits must be 0, 1 or 2');\n }\n\n if (!(typeof argument === 'string' || Object.prototype.toString.call(argument) === '[object String]')) {\n return new Date(NaN);\n }\n\n var dateStrings = splitDateString(argument);\n var date;\n\n if (dateStrings.date) {\n var parseYearResult = parseYear(dateStrings.date, additionalDigits);\n date = parseDate(parseYearResult.restDateString, parseYearResult.year);\n }\n\n if (isNaN(date) || !date) {\n return new Date(NaN);\n }\n\n var timestamp = date.getTime();\n var time = 0;\n var offset;\n\n if (dateStrings.time) {\n time = parseTime(dateStrings.time);\n\n if (isNaN(time) || time === null) {\n return new Date(NaN);\n }\n }\n\n if (dateStrings.timezone) {\n offset = parseTimezone(dateStrings.timezone);\n\n if (isNaN(offset)) {\n return new Date(NaN);\n }\n } else {\n var dirtyDate = new Date(timestamp + time); // js parsed string assuming it's in UTC timezone\n // but we need it to be parsed in our timezone\n // so we use utc values to build date in our timezone.\n // Year values from 0 to 99 map to the years 1900 to 1999\n // so set year explicitly with setFullYear.\n\n var result = new Date(0);\n result.setFullYear(dirtyDate.getUTCFullYear(), dirtyDate.getUTCMonth(), dirtyDate.getUTCDate());\n result.setHours(dirtyDate.getUTCHours(), dirtyDate.getUTCMinutes(), dirtyDate.getUTCSeconds(), dirtyDate.getUTCMilliseconds());\n return result;\n }\n\n return new Date(timestamp + time + offset);\n}\n\nfunction splitDateString(dateString) {\n var dateStrings = {};\n var array = dateString.split(patterns.dateTimeDelimiter);\n var timeString; // The regex match should only return at maximum two array elements.\n // [date], [time], or [date, time].\n\n if (array.length > 2) {\n return dateStrings;\n }\n\n if (/:/.test(array[0])) {\n dateStrings.date = null;\n timeString = array[0];\n } else {\n dateStrings.date = array[0];\n timeString = array[1];\n\n if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];\n timeString = dateString.substr(dateStrings.date.length, dateString.length);\n }\n }\n\n if (timeString) {\n var token = patterns.timezone.exec(timeString);\n\n if (token) {\n dateStrings.time = timeString.replace(token[1], '');\n dateStrings.timezone = token[1];\n } else {\n dateStrings.time = timeString;\n }\n }\n\n return dateStrings;\n}\n\nfunction parseYear(dateString, additionalDigits) {\n var regex = new RegExp('^(?:(\\\\d{4}|[+-]\\\\d{' + (4 + additionalDigits) + '})|(\\\\d{2}|[+-]\\\\d{' + (2 + additionalDigits) + '})$)');\n var captures = dateString.match(regex); // Invalid ISO-formatted year\n\n if (!captures) return {\n year: null\n };\n var year = captures[1] && parseInt(captures[1]);\n var century = captures[2] && parseInt(captures[2]);\n return {\n year: century == null ? year : century * 100,\n restDateString: dateString.slice((captures[1] || captures[2]).length)\n };\n}\n\nfunction parseDate(dateString, year) {\n // Invalid ISO-formatted year\n if (year === null) return null;\n var captures = dateString.match(dateRegex); // Invalid ISO-formatted string\n\n if (!captures) return null;\n var isWeekDate = !!captures[4];\n var dayOfYear = parseDateUnit(captures[1]);\n var month = parseDateUnit(captures[2]) - 1;\n var day = parseDateUnit(captures[3]);\n var week = parseDateUnit(captures[4]);\n var dayOfWeek = parseDateUnit(captures[5]) - 1;\n\n if (isWeekDate) {\n if (!validateWeekDate(year, week, dayOfWeek)) {\n return new Date(NaN);\n }\n\n return dayOfISOWeekYear(year, week, dayOfWeek);\n } else {\n var date = new Date(0);\n\n if (!validateDate(year, month, day) || !validateDayOfYearDate(year, dayOfYear)) {\n return new Date(NaN);\n }\n\n date.setUTCFullYear(year, month, Math.max(dayOfYear, day));\n return date;\n }\n}\n\nfunction parseDateUnit(value) {\n return value ? parseInt(value) : 1;\n}\n\nfunction parseTime(timeString) {\n var captures = timeString.match(timeRegex);\n if (!captures) return null; // Invalid ISO-formatted time\n\n var hours = parseTimeUnit(captures[1]);\n var minutes = parseTimeUnit(captures[2]);\n var seconds = parseTimeUnit(captures[3]);\n\n if (!validateTime(hours, minutes, seconds)) {\n return NaN;\n }\n\n return hours * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE + seconds * 1000;\n}\n\nfunction parseTimeUnit(value) {\n return value && parseFloat(value.replace(',', '.')) || 0;\n}\n\nfunction parseTimezone(timezoneString) {\n if (timezoneString === 'Z') return 0;\n var captures = timezoneString.match(timezoneRegex);\n if (!captures) return 0;\n var sign = captures[1] === '+' ? -1 : 1;\n var hours = parseInt(captures[2]);\n var minutes = captures[3] && parseInt(captures[3]) || 0;\n\n if (!validateTimezone(hours, minutes)) {\n return NaN;\n }\n\n return sign * (hours * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE);\n}\n\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n var date = new Date(0);\n date.setUTCFullYear(isoWeekYear, 0, 4);\n var fourthOfJanuaryDay = date.getUTCDay() || 7;\n var diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n} // Validation functions\n// February is null to handle the leap year (using ||)\n\n\nvar daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nfunction isLeapYearIndex(year) {\n return year % 400 === 0 || year % 4 === 0 && year % 100;\n}\n\nfunction validateDate(year, month, date) {\n return month >= 0 && month <= 11 && date >= 1 && date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28));\n}\n\nfunction validateDayOfYearDate(year, dayOfYear) {\n return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);\n}\n\nfunction validateWeekDate(_year, week, day) {\n return week >= 1 && week <= 53 && day >= 0 && day <= 6;\n}\n\nfunction validateTime(hours, minutes, seconds) {\n if (hours === 24) {\n return minutes === 0 && seconds === 0;\n }\n\n return seconds >= 0 && seconds < 60 && minutes >= 0 && minutes < 60 && hours >= 0 && hours < 25;\n}\n\nfunction validateTimezone(_hours, minutes) {\n return minutes >= 0 && minutes <= 59;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport getDaysInMonth from \"../getDaysInMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setMonth\n * @category Month Helpers\n * @summary Set the month to the given date.\n *\n * @description\n * Set the month to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} month - the month of the new date\n * @returns {Date} the new date with the month set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set February to 1 September 2014:\n * const result = setMonth(new Date(2014, 8, 1), 1)\n * //=> Sat Feb 01 2014 00:00:00\n */\n\nexport default function setMonth(dirtyDate, dirtyMonth) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var month = toInteger(dirtyMonth);\n var year = date.getFullYear();\n var day = date.getDate();\n var dateWithDesiredMonth = new Date(0);\n dateWithDesiredMonth.setFullYear(year, month, 15);\n dateWithDesiredMonth.setHours(0, 0, 0, 0);\n var daysInMonth = getDaysInMonth(dateWithDesiredMonth); // Set the last day of the new month\n // if the original date was the last day of the longer month\n\n date.setMonth(month, Math.min(day, daysInMonth));\n return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setHours\n * @category Hour Helpers\n * @summary Set the hours to the given date.\n *\n * @description\n * Set the hours to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} hours - the hours of the new date\n * @returns {Date} the new date with the hours set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 4 hours to 1 September 2014 11:30:00:\n * var result = setHours(new Date(2014, 8, 1, 11, 30), 4)\n * //=> Mon Sep 01 2014 04:30:00\n */\n\nexport default function setHours(dirtyDate, dirtyHours) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var hours = toInteger(dirtyHours);\n date.setHours(hours);\n return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setMinutes\n * @category Minute Helpers\n * @summary Set the minutes to the given date.\n *\n * @description\n * Set the minutes to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} minutes - the minutes of the new date\n * @returns {Date} the new date with the minutes set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 45 minutes to 1 September 2014 11:30:40:\n * var result = setMinutes(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:45:40\n */\n\nexport default function setMinutes(dirtyDate, dirtyMinutes) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var minutes = toInteger(dirtyMinutes);\n date.setMinutes(minutes);\n return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setSeconds\n * @category Second Helpers\n * @summary Set the seconds to the given date.\n *\n * @description\n * Set the seconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} seconds - the seconds of the new date\n * @returns {Date} the new date with the seconds set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 45 seconds to 1 September 2014 11:30:40:\n * const result = setSeconds(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:30:45\n */\n\nexport default function setSeconds(dirtyDate, dirtySeconds) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var seconds = toInteger(dirtySeconds);\n date.setSeconds(seconds);\n return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setYear\n * @category Year Helpers\n * @summary Set the year to the given date.\n *\n * @description\n * Set the year to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} year - the year of the new date\n * @returns {Date} the new date with the year set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set year 2013 to 1 September 2014:\n * const result = setYear(new Date(2014, 8, 1), 2013)\n * //=> Sun Sep 01 2013 00:00:00\n */\n\nexport default function setYear(dirtyDate, dirtyYear) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var year = toInteger(dirtyYear); // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date\n\n if (isNaN(date.getTime())) {\n return new Date(NaN);\n }\n\n date.setFullYear(year);\n return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addYears from \"../addYears/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subYears\n * @category Year Helpers\n * @summary Subtract the specified number of years from the given date.\n *\n * @description\n * Subtract the specified number of years from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the years subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 years from 1 September 2014:\n * const result = subYears(new Date(2014, 8, 1), 5)\n * //=> Tue Sep 01 2009 00:00:00\n */\n\nexport default function subYears(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addYears(dirtyDate, -amount);\n}","import {\n startOfDay,\n subDays,\n endOfDay,\n subMonths,\n addMonths,\n subYears,\n addYears,\n startOfMonth,\n isSameMonth,\n format,\n startOfWeek,\n addDays,\n eachDayOfInterval,\n endOfMonth,\n isSameDay,\n isWithinInterval,\n} from 'date-fns';\n\n// Constants for calendar and date ranges\nexport const calendarWeeks = [\n { id: 1, label: 'M' },\n { id: 2, label: 'T' },\n { id: 3, label: 'W' },\n { id: 4, label: 'T' },\n { id: 5, label: 'F' },\n { id: 6, label: 'S' },\n { id: 7, label: 'S' },\n];\n\nexport const dateRanges = [\n { label: 'DATE_PICKER.DATE_RANGE_OPTIONS.LAST_7_DAYS', value: 'last7days' },\n { label: 'DATE_PICKER.DATE_RANGE_OPTIONS.LAST_30_DAYS', value: 'last30days' },\n {\n label: 'DATE_PICKER.DATE_RANGE_OPTIONS.LAST_3_MONTHS',\n value: 'last3months',\n },\n {\n label: 'DATE_PICKER.DATE_RANGE_OPTIONS.LAST_6_MONTHS',\n value: 'last6months',\n },\n { label: 'DATE_PICKER.DATE_RANGE_OPTIONS.LAST_YEAR', value: 'lastYear' },\n { label: 'DATE_PICKER.DATE_RANGE_OPTIONS.CUSTOM_RANGE', value: 'custom' },\n];\n\nexport const DATE_RANGE_TYPES = {\n LAST_7_DAYS: 'last7days',\n LAST_30_DAYS: 'last30days',\n LAST_3_MONTHS: 'last3months',\n LAST_6_MONTHS: 'last6months',\n LAST_YEAR: 'lastYear',\n CUSTOM_RANGE: 'custom',\n};\n\nexport const CALENDAR_TYPES = {\n START_CALENDAR: 'start',\n END_CALENDAR: 'end',\n};\n\nexport const CALENDAR_PERIODS = {\n WEEK: 'week',\n MONTH: 'month',\n YEAR: 'year',\n};\n\n// Utility functions for date operations\nexport const monthName = currentDate => format(currentDate, 'MMMM');\nexport const yearName = currentDate => format(currentDate, 'yyyy');\n\nexport const getIntlDateFormatForLocale = () => {\n const year = 2222;\n const month = 12;\n const day = 15;\n const date = new Date(year, month - 1, day);\n const formattedDate = new Intl.DateTimeFormat(navigator.language).format(\n date\n );\n return formattedDate\n .replace(`${year}`, 'yyyy')\n .replace(`${month}`, 'MM')\n .replace(`${day}`, 'dd');\n};\n\n// Utility functions for calendar operations\nexport const chunk = (array, size) =>\n Array.from({ length: Math.ceil(array.length / size) }, (_, index) =>\n array.slice(index * size, index * size + size)\n );\n\nexport const getWeeksForMonth = (date, weekStartsOn = 1) => {\n const startOfTheMonth = startOfMonth(date);\n const startOfTheFirstWeek = startOfWeek(startOfTheMonth, { weekStartsOn });\n const endOfTheLastWeek = addDays(startOfTheFirstWeek, 41); // Covering six weeks to fill the calendar\n return chunk(\n eachDayOfInterval({ start: startOfTheFirstWeek, end: endOfTheLastWeek }),\n 7\n );\n};\n\nexport const moveCalendarDate = (\n calendar,\n startCurrentDate,\n endCurrentDate,\n direction,\n period\n) => {\n const adjustFunctions = {\n month: { prev: subMonths, next: addMonths },\n year: { prev: subYears, next: addYears },\n };\n\n const adjust = adjustFunctions[period][direction];\n\n if (calendar === 'start') {\n const newStart = adjust(startCurrentDate, 1);\n return { start: newStart, end: endCurrentDate };\n }\n const newEnd = adjust(endCurrentDate, 1);\n return { start: startCurrentDate, end: newEnd };\n};\n\n// Date comparison functions\nexport const isToday = (currentDate, date) =>\n date.getDate() === currentDate.getDate() &&\n date.getMonth() === currentDate.getMonth() &&\n date.getFullYear() === currentDate.getFullYear();\n\nexport const isCurrentMonth = (day, referenceDate) =>\n isSameMonth(day, referenceDate);\n\nexport const isLastDayOfMonth = day => {\n const lastDay = endOfMonth(day);\n return day.getDate() === lastDay.getDate();\n};\n\nexport const dayIsInRange = (date, startDate, endDate) => {\n if (!startDate || !endDate) {\n return false;\n }\n // Normalize dates to ignore time differences\n let startOfDayStart = startOfDay(startDate);\n let startOfDayEnd = startOfDay(endDate);\n // Swap if start is greater than end\n if (startOfDayStart > startOfDayEnd) {\n [startOfDayStart, startOfDayEnd] = [startOfDayEnd, startOfDayStart];\n }\n // Check if the date is within the interval or is the same as the start date\n return (\n isSameDay(date, startOfDayStart) ||\n isWithinInterval(date, {\n start: startOfDayStart,\n end: startOfDayEnd,\n })\n );\n};\n\n// Handling hovering states in date range pickers\nexport const isHoveringDayInRange = (\n day,\n startDate,\n endDate,\n hoveredEndDate\n) => {\n if (endDate && hoveredEndDate && startDate <= hoveredEndDate) {\n // Ensure the start date is not after the hovered end date\n return isWithinInterval(day, { start: startDate, end: hoveredEndDate });\n }\n return false;\n};\n\nexport const isHoveringNextDayInRange = (\n day,\n startDate,\n endDate,\n hoveredEndDate\n) => {\n if (startDate && !endDate && hoveredEndDate) {\n // If a start date is selected, and we're hovering (but haven't clicked an end date yet)\n const nextDay = addDays(day, 1);\n return isWithinInterval(nextDay, { start: startDate, end: hoveredEndDate });\n }\n if (startDate && endDate) {\n // Normal range checking between selected start and end dates\n const nextDay = addDays(day, 1);\n return isWithinInterval(nextDay, { start: startDate, end: endDate });\n }\n return false;\n};\n\n// Helper func to determine active date ranges based on user selection\nexport const getActiveDateRange = (range, currentDate) => {\n const ranges = {\n last7days: () => ({\n start: startOfDay(subDays(currentDate, 6)),\n end: endOfDay(currentDate),\n }),\n last30days: () => ({\n start: startOfDay(subDays(currentDate, 29)),\n end: endOfDay(currentDate),\n }),\n last3months: () => ({\n start: startOfDay(subMonths(currentDate, 3)),\n end: endOfDay(currentDate),\n }),\n last6months: () => ({\n start: startOfDay(subMonths(currentDate, 6)),\n end: endOfDay(currentDate),\n }),\n lastYear: () => ({\n start: startOfDay(subMonths(currentDate, 12)),\n end: endOfDay(currentDate),\n }),\n custom: () => ({ start: currentDate, end: currentDate }),\n };\n\n return (\n ranges[range] || (() => ({ start: currentDate, end: currentDate }))\n )();\n};\n","<script setup>\nimport { computed } from 'vue';\nimport { dateRanges } from '../helpers/DatePickerHelper';\nimport { format, isSameYear, isValid } from 'date-fns';\n\nconst props = defineProps({\n selectedStartDate: Date,\n selectedEndDate: Date,\n selectedRange: {\n type: String,\n default: '',\n },\n});\n\nconst emit = defineEmits(['open']);\n\nconst formatDateRange = computed(() => {\n const startDate = props.selectedStartDate;\n const endDate = props.selectedEndDate;\n\n if (!isValid(startDate) || !isValid(endDate)) {\n return 'Select a date range';\n }\n\n const formatString = isSameYear(startDate, endDate)\n ? 'MMM d' // Same year: \"Apr 1\"\n : 'MMM d yyyy'; // Different years: \"Apr 1 2025\"\n\n if (isSameYear(startDate, new Date()) && isSameYear(endDate, new Date())) {\n // Both dates are in the current year\n return `${format(startDate, 'MMM d')} - ${format(endDate, 'MMM d')}`;\n }\n // At least one date is not in the current year\n return `${format(startDate, formatString)} - ${format(\n endDate,\n formatString\n )}`;\n});\n\nconst activeDateRange = computed(\n () => dateRanges.find(range => range.value === props.selectedRange).label\n);\n\nconst openDatePicker = () => {\n emit('open');\n};\n</script>\n\n<template>\n <button\n class=\"inline-flex relative items-center rounded-lg gap-2 py-1.5 px-3 h-8 bg-slate-50 dark:bg-slate-800 hover:bg-slate-50 dark:hover:bg-slate-800 active:bg-slate-75 dark:active:bg-slate-800\"\n @click=\"openDatePicker\"\n >\n <fluent-icon\n class=\"text-slate-800 dark:text-slate-50\"\n icon=\"calendar\"\n size=\"16\"\n />\n <span class=\"text-sm font-medium text-slate-800 dark:text-slate-50\">\n {{ $t(activeDateRange) }}\n </span>\n <span class=\"text-sm font-medium text-slate-600 dark:text-slate-200\">\n {{ formatDateRange }}\n </span>\n <fluent-icon\n class=\"text-slate-800 dark:text-slate-50\"\n icon=\"chevron-down\"\n size=\"14\"\n />\n </button>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { parse, isValid, isAfter, isBefore } from 'date-fns';\nimport {\n getIntlDateFormatForLocale,\n CALENDAR_TYPES,\n} from '../helpers/DatePickerHelper';\n\nconst props = defineProps({\n calendarType: {\n type: String,\n default: '',\n },\n dateValue: Date,\n compareDate: Date,\n isDisabled: Boolean,\n});\n\nconst emit = defineEmits(['update', 'validate', 'error']);\n\nconst { START_CALENDAR, END_CALENDAR } = CALENDAR_TYPES;\n\nconst dateFormat = computed(() => getIntlDateFormatForLocale()?.toUpperCase());\n\nconst localDateValue = computed({\n get: () => props.dateValue?.toLocaleDateString(navigator.language) || '',\n set: newValue => {\n const format = getIntlDateFormatForLocale();\n const parsedDate = parse(newValue, format, new Date());\n if (isValid(parsedDate)) {\n emit('update', parsedDate);\n }\n },\n});\n\nconst validateDate = () => {\n if (!isValid(props.dateValue)) {\n emit('error', `Please enter the date in valid format: ${dateFormat.value}`);\n return;\n }\n\n const { calendarType, compareDate, dateValue } = props;\n const isStartCalendar = calendarType === START_CALENDAR;\n const isEndCalendar = calendarType === END_CALENDAR;\n\n if (compareDate && isStartCalendar && isAfter(dateValue, compareDate)) {\n emit('error', 'Start date must be before the end date.');\n } else if (compareDate && isEndCalendar && isBefore(dateValue, compareDate)) {\n emit('error', 'End date must be after the start date.');\n } else {\n emit('validate', dateValue);\n }\n};\n</script>\n\n<template>\n <div class=\"h-[82px] flex flex-col items-start px-5 gap-1.5 pt-4 w-full\">\n <span class=\"text-sm font-medium text-slate-800 dark:text-slate-50\">\n {{\n calendarType === START_CALENDAR\n ? $t('DATE_PICKER.DATE_RANGE_INPUT.START')\n : $t('DATE_PICKER.DATE_RANGE_INPUT.END')\n }}\n </span>\n <input\n v-model=\"localDateValue\"\n type=\"text\"\n class=\"reset-base border bg-slate-25 dark:bg-slate-900 ring-offset-ash-900 border-slate-50 dark:border-slate-700/50 w-full disabled:text-slate-200 dark:disabled:text-slate-700 disabled:cursor-not-allowed text-slate-800 dark:text-slate-50 px-1.5 py-1 text-sm rounded-xl h-10\"\n :placeholder=\"dateFormat\"\n :disabled=\"isDisabled\"\n @keypress.enter=\"validateDate\"\n />\n </div>\n</template>\n","<script setup>\nimport { dateRanges } from '../helpers/DatePickerHelper';\n\ndefineProps({\n selectedRange: {\n type: String,\n default: '',\n },\n});\n\nconst emit = defineEmits(['setRange']);\n\nconst setDateRange = range => {\n emit('setRange', range);\n};\n</script>\n\n<template>\n <div class=\"w-[200px] flex flex-col items-start\">\n <h4\n class=\"w-full px-5 py-4 text-sm font-medium capitalize text-start text-slate-600 dark:text-slate-200\"\n >\n {{ $t('DATE_PICKER.DATE_RANGE_OPTIONS.TITLE') }}\n </h4>\n <div class=\"flex flex-col items-start w-full\">\n <button\n v-for=\"range in dateRanges\"\n :key=\"range.label\"\n class=\"w-full px-5 py-3 text-sm font-medium truncate border-none rounded-none text-start hover:bg-slate-50 dark:hover:bg-slate-700\"\n :class=\"\n range.value === selectedRange\n ? 'text-slate-800 dark:text-slate-50 bg-slate-50 dark:bg-slate-700'\n : 'text-slate-600 dark:text-slate-200'\n \"\n @click=\"setDateRange(range)\"\n >\n {{ $t(range.label) }}\n </button>\n </div>\n </div>\n</template>\n","<script setup>\nimport { CALENDAR_PERIODS } from '../helpers/DatePickerHelper';\n\ndefineProps({\n calendarType: {\n type: String,\n default: 'start',\n },\n firstButtonLabel: {\n type: String,\n default: '',\n },\n buttonLabel: {\n type: String,\n default: '',\n },\n viewMode: {\n type: String,\n default: '',\n },\n});\nconst emit = defineEmits(['prev', 'next', 'setView']);\n\nconst { YEAR } = CALENDAR_PERIODS;\n\nconst onClickPrev = type => {\n emit('prev', type);\n};\n\nconst onClickNext = type => {\n emit('next', type);\n};\n\nconst onClickSetView = (type, mode) => {\n emit('setView', type, mode);\n};\n</script>\n\n<template>\n <div class=\"flex items-start justify-between w-full h-9\">\n <button\n class=\"p-1 rounded-lg hover:bg-slate-75 dark:hover:bg-slate-700/50 rtl:rotate-180\"\n @click=\"onClickPrev(calendarType)\"\n >\n <fluent-icon\n icon=\"chevron-left\"\n size=\"14\"\n class=\"text-slate-900 dark:text-slate-50\"\n />\n </button>\n <div class=\"flex items-center gap-1\">\n <button\n v-if=\"firstButtonLabel\"\n class=\"p-0 text-sm font-medium text-center text-slate-800 dark:text-slate-50 hover:text-woot-600 dark:hover:text-woot-600\"\n @click=\"onClickSetView(calendarType, viewMode)\"\n >\n {{ firstButtonLabel }}\n </button>\n <button\n v-if=\"buttonLabel\"\n class=\"p-0 text-sm font-medium text-center text-slate-800 dark:text-slate-50\"\n :class=\"{ 'hover:text-woot-600 dark:hover:text-woot-600': viewMode }\"\n @click=\"onClickSetView(calendarType, YEAR)\"\n >\n {{ buttonLabel }}\n </button>\n </div>\n <button\n class=\"p-1 rounded-lg hover:bg-slate-75 dark:hover:bg-slate-700/50 rtl:rotate-180\"\n @click=\"onClickNext(calendarType)\"\n >\n <fluent-icon\n icon=\"chevron-right\"\n size=\"14\"\n class=\"text-slate-900 dark:text-slate-50\"\n />\n </button>\n </div>\n</template>\n","<script setup>\nimport { ref, computed } from 'vue';\nimport { getYear, addYears, subYears } from 'date-fns';\nimport { CALENDAR_TYPES } from '../helpers/DatePickerHelper';\n\nimport CalendarAction from './CalendarAction.vue';\n\nconst props = defineProps({\n calendarType: {\n type: String,\n default: 'start',\n },\n startCurrentDate: Date,\n endCurrentDate: Date,\n});\n\nconst emit = defineEmits(['selectYear']);\n\nconst { START_CALENDAR } = CALENDAR_TYPES;\n\nconst calculateStartYear = date => {\n const year = getYear(date);\n return year - (year % 10); // Align with the beginning of a decade\n};\n\nconst startYear = ref(\n calculateStartYear(\n props.calendarType === START_CALENDAR\n ? props.startCurrentDate\n : props.endCurrentDate\n )\n);\n\nconst years = computed(() =>\n Array.from({ length: 10 }, (_, i) => startYear.value + i)\n);\n\nconst firstYear = computed(() => years.value[0]);\nconst lastYear = computed(() => years.value[years.value.length - 1]);\n\nconst activeYear = computed(() => {\n const date =\n props.calendarType === START_CALENDAR\n ? props.startCurrentDate\n : props.endCurrentDate;\n return getYear(date);\n});\n\nconst onClickPrev = () => {\n startYear.value = subYears(new Date(startYear.value, 0, 1), 10).getFullYear();\n};\n\nconst onClickNext = () => {\n startYear.value = addYears(new Date(startYear.value, 0, 1), 10).getFullYear();\n};\n\nconst selectYear = year => {\n emit('selectYear', year);\n};\n</script>\n\n<template>\n <div class=\"flex flex-col w-full gap-2 max-h-[312px]\">\n <CalendarAction\n :calendar-type=\"calendarType\"\n :button-label=\"`${firstYear} - ${lastYear}`\"\n @prev=\"onClickPrev\"\n @next=\"onClickNext\"\n />\n\n <div class=\"grid grid-cols-2 gap-x-3 gap-y-2 w-full auto-rows-[47px]\">\n <button\n v-for=\"year in years\"\n :key=\"year\"\n class=\"p-2 text-sm font-medium text-center text-slate-800 dark:text-slate-50 w-[144px] h-10 rounded-lg py-2.5 px-2 hover:bg-slate-75 dark:hover:bg-slate-700\"\n :class=\"{\n 'bg-woot-600 dark:bg-woot-600 text-white dark:text-white hover:bg-woot-500 dark:hover:bg-woot-700':\n year === activeYear,\n }\"\n @click=\"selectYear(year)\"\n >\n {{ year }}\n </button>\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { format, getMonth, setMonth, startOfMonth } from 'date-fns';\nimport {\n yearName,\n CALENDAR_TYPES,\n CALENDAR_PERIODS,\n} from '../helpers/DatePickerHelper';\n\nimport CalendarAction from './CalendarAction.vue';\n\nconst props = defineProps({\n calendarType: {\n type: String,\n default: 'start',\n },\n startCurrentDate: Date,\n endCurrentDate: Date,\n});\n\nconst emit = defineEmits(['selectMonth', 'prev', 'next', 'setView']);\nconst { START_CALENDAR } = CALENDAR_TYPES;\nconst { MONTH, YEAR } = CALENDAR_PERIODS;\n\nconst months = Array.from({ length: 12 }, (_, index) =>\n format(setMonth(startOfMonth(new Date()), index), 'MMM')\n);\n\nconst activeMonthIndex = computed(() => {\n const date =\n props.calendarType === START_CALENDAR\n ? props.startCurrentDate\n : props.endCurrentDate;\n return getMonth(date);\n});\n\nconst setViewMode = (type, mode) => {\n emit('setView', type, mode);\n};\n\nconst onClickPrev = () => {\n emit('prev');\n};\n\nconst onClickNext = () => {\n emit('next');\n};\n\nconst selectMonth = index => {\n emit('selectMonth', index);\n};\n</script>\n\n<template>\n <div class=\"flex flex-col w-full gap-2 max-h-[312px]\">\n <CalendarAction\n :view-mode=\"YEAR\"\n :calendar-type=\"calendarType\"\n :button-label=\"\n yearName(\n calendarType === START_CALENDAR ? startCurrentDate : endCurrentDate,\n MONTH\n )\n \"\n @set-view=\"setViewMode\"\n @prev=\"onClickPrev\"\n @next=\"onClickNext\"\n />\n\n <div class=\"grid w-full grid-cols-3 gap-x-3 gap-y-2 auto-rows-[61px]\">\n <button\n v-for=\"(month, index) in months\"\n :key=\"index\"\n class=\"p-2 text-sm font-medium text-center text-slate-800 dark:text-slate-50 w-[92px] h-10 rounded-lg py-2.5 px-2 hover:bg-slate-75 dark:hover:bg-slate-700\"\n :class=\"{\n 'bg-woot-600 dark:bg-woot-600 text-white dark:text-white hover:bg-woot-500 dark:bg-woot-700':\n index === activeMonthIndex,\n }\"\n @click=\"selectMonth(index)\"\n >\n {{ month }}\n </button>\n </div>\n </div>\n</template>\n","<script setup>\nimport {\n monthName,\n yearName,\n getWeeksForMonth,\n isToday,\n dayIsInRange,\n isCurrentMonth,\n isLastDayOfMonth,\n isHoveringDayInRange,\n isHoveringNextDayInRange,\n CALENDAR_TYPES,\n CALENDAR_PERIODS,\n} from '../helpers/DatePickerHelper';\n\nimport CalendarWeekLabel from './CalendarWeekLabel.vue';\nimport CalendarAction from './CalendarAction.vue';\n\nconst props = defineProps({\n calendarType: {\n type: String,\n default: 'start',\n },\n currentDate: Date,\n startCurrentDate: Date,\n endCurrentDate: Date,\n selectedStartDate: Date,\n selectingEndDate: Boolean,\n selectedEndDate: Date,\n hoveredEndDate: Date,\n});\n\nconst emit = defineEmits([\n 'updateHoveredEndDate',\n 'selectDate',\n 'prev',\n 'next',\n 'setView',\n]);\n\nconst { START_CALENDAR } = CALENDAR_TYPES;\nconst { MONTH } = CALENDAR_PERIODS;\n\nconst emitHoveredEndDate = day => {\n emit('updateHoveredEndDate', day);\n};\n\nconst emitSelectDate = day => {\n emit('selectDate', day);\n};\nconst onClickPrev = () => {\n emit('prev');\n};\n\nconst onClickNext = () => {\n emit('next');\n};\n\nconst setViewMode = (type, mode) => {\n emit('setView', type, mode);\n};\n\nconst weeks = calendarType => {\n return getWeeksForMonth(\n calendarType === START_CALENDAR\n ? props.startCurrentDate\n : props.endCurrentDate\n );\n};\n\nconst isSelectedStartOrEndDate = day => {\n return (\n dayIsInRange(day, props.selectedStartDate, props.selectedStartDate) ||\n dayIsInRange(day, props.selectedEndDate, props.selectedEndDate)\n );\n};\n\nconst isInRange = day => {\n return dayIsInRange(day, props.selectedStartDate, props.selectedEndDate);\n};\n\nconst isInCurrentMonth = day => {\n return isCurrentMonth(\n day,\n props.calendarType === START_CALENDAR\n ? props.startCurrentDate\n : props.endCurrentDate\n );\n};\n\nconst isHoveringInRange = day => {\n return isHoveringDayInRange(\n day,\n props.selectedStartDate,\n props.selectingEndDate,\n props.hoveredEndDate\n );\n};\n\nconst isNextDayInRange = day => {\n return isHoveringNextDayInRange(\n day,\n props.selectedStartDate,\n props.selectedEndDate,\n props.hoveredEndDate\n );\n};\n\nconst dayClasses = day => ({\n 'text-slate-500 dark:text-slate-400 pointer-events-none':\n !isInCurrentMonth(day),\n 'text-slate-800 dark:text-slate-50 hover:text-slate-800 dark:hover:text-white hover:bg-woot-100 dark:hover:bg-woot-700':\n isInCurrentMonth(day),\n 'bg-woot-600 dark:bg-woot-600 text-white dark:text-white':\n isSelectedStartOrEndDate(day) && isInCurrentMonth(day),\n 'bg-woot-50 dark:bg-woot-800':\n (isInRange(day) || isHoveringInRange(day)) &&\n !isSelectedStartOrEndDate(day) &&\n isInCurrentMonth(day),\n 'outline outline-1 outline-woot-200 -outline-offset-1 dark:outline-woot-700 text-woot-600 dark:text-woot-400':\n isToday(props.currentDate, day) && !isSelectedStartOrEndDate(day),\n});\n</script>\n\n<template>\n <div class=\"flex flex-col w-full gap-2 max-h-[312px]\">\n <CalendarAction\n :view-mode=\"MONTH\"\n :calendar-type=\"calendarType\"\n :first-button-label=\"\n monthName(\n calendarType === START_CALENDAR ? startCurrentDate : endCurrentDate\n )\n \"\n :button-label=\"\n yearName(\n calendarType === START_CALENDAR ? startCurrentDate : endCurrentDate\n )\n \"\n @prev=\"onClickPrev\"\n @next=\"onClickNext\"\n @set-view=\"setViewMode\"\n />\n <CalendarWeekLabel />\n <div\n v-for=\"week in weeks(calendarType)\"\n :key=\"week[0].getTime()\"\n class=\"grid max-w-md grid-cols-7 gap-2 mx-auto overflow-hidden rounded-lg\"\n >\n <div\n v-for=\"day in week\"\n :key=\"day.getTime()\"\n class=\"flex relative items-center justify-center w-9 h-8 py-1.5 px-2 font-medium text-sm rounded-lg cursor-pointer\"\n :class=\"dayClasses(day)\"\n @mouseenter=\"emitHoveredEndDate(day)\"\n @mouseleave=\"emitHoveredEndDate(null)\"\n @click=\"emitSelectDate(day)\"\n >\n {{ day.getDate() }}\n <span\n v-if=\"\n (isInRange(day) || isHoveringInRange(day)) &&\n isNextDayInRange(day) &&\n !isLastDayOfMonth(day) &&\n isInCurrentMonth(day)\n \"\n class=\"absolute bottom-0 w-6 h-8 ltr:-right-4 rtl:-left-4 bg-woot-50 dark:bg-woot-800 -z-10\"\n />\n </div>\n </div>\n </div>\n</template>\n","<script setup>\nconst emit = defineEmits(['clear', 'change']);\n\nconst onClickClear = () => {\n emit('clear');\n};\n\nconst onClickApply = () => {\n emit('change');\n};\n</script>\n\n<template>\n <div class=\"h-[56px] flex justify-between px-5 py-3 items-center\">\n <button\n class=\"p-1.5 rounded-lg w-fit text-sm font-medium text-slate-600 dark:text-slate-200 hover:text-slate-800 dark:hover:text-slate-100\"\n @click=\"onClickClear\"\n >\n {{ $t('DATE_PICKER.CLEAR_BUTTON') }}\n </button>\n <button\n class=\"p-1.5 rounded-lg w-fit text-sm font-medium text-woot-500 dark:text-woot-300 hover:text-woot-700 dark:hover:text-woot-500\"\n @click=\"onClickApply\"\n >\n {{ $t('DATE_PICKER.APPLY_BUTTON') }}\n </button>\n </div>\n</template>\n","<script setup>\nimport { ref, watch } from 'vue';\nimport {\n getActiveDateRange,\n moveCalendarDate,\n DATE_RANGE_TYPES,\n CALENDAR_TYPES,\n CALENDAR_PERIODS,\n} from './helpers/DatePickerHelper';\nimport {\n isValid,\n startOfMonth,\n subDays,\n startOfDay,\n endOfDay,\n isBefore,\n subMonths,\n addMonths,\n isSameMonth,\n differenceInCalendarMonths,\n setMonth,\n setYear,\n isAfter,\n} from 'date-fns';\nimport { useAlert } from 'dashboard/composables';\nimport DatePickerButton from './components/DatePickerButton.vue';\nimport CalendarDateInput from './components/CalendarDateInput.vue';\nimport CalendarDateRange from './components/CalendarDateRange.vue';\nimport CalendarYear from './components/CalendarYear.vue';\nimport CalendarMonth from './components/CalendarMonth.vue';\nimport CalendarWeek from './components/CalendarWeek.vue';\nimport CalendarFooter from './components/CalendarFooter.vue';\n\nconst emit = defineEmits(['dateRangeChanged']);\nconst { LAST_7_DAYS, LAST_30_DAYS, CUSTOM_RANGE } = DATE_RANGE_TYPES;\nconst { START_CALENDAR, END_CALENDAR } = CALENDAR_TYPES;\nconst { WEEK, MONTH, YEAR } = CALENDAR_PERIODS;\n\nconst showDatePicker = ref(false);\nconst calendarViews = ref({ start: WEEK, end: WEEK });\nconst currentDate = ref(new Date());\nconst selectedStartDate = ref(startOfDay(subDays(currentDate.value, 6))); // LAST_7_DAYS\nconst selectedEndDate = ref(endOfDay(currentDate.value));\n// Setting the start and end calendar\nconst startCurrentDate = ref(startOfDay(selectedStartDate.value));\nconst endCurrentDate = ref(\n isSameMonth(selectedStartDate.value, selectedEndDate.value)\n ? startOfMonth(addMonths(selectedEndDate.value, 1)) // Moves to the start of the next month if dates are in the same month (Mounted case LAST_7_DAYS)\n : startOfMonth(selectedEndDate.value) // Always shows the month of the end date starting from the first (Mounted case LAST_7_DAYS)\n);\nconst selectingEndDate = ref(false);\nconst selectedRange = ref(LAST_7_DAYS);\nconst hoveredEndDate = ref(null);\n\nconst manualStartDate = ref(selectedStartDate.value);\nconst manualEndDate = ref(selectedEndDate.value);\n\n// Watcher will set the start and end dates based on the selected range\nwatch(selectedRange, newRange => {\n if (newRange !== CUSTOM_RANGE) {\n // If selecting a range other than last 7 days or last 30 days, set the start and end dates to the selected start and end dates\n // If selecting last 7 days or last 30 days is, set the start date to the selected start date\n // and the end date to one month ahead of the start date if the start date and end date are in the same month\n // Otherwise set the end date to the selected end date\n const isLastSevenOrThirtyDays =\n newRange === LAST_7_DAYS || newRange === LAST_30_DAYS;\n startCurrentDate.value = selectedStartDate.value;\n endCurrentDate.value =\n isLastSevenOrThirtyDays &&\n isSameMonth(selectedStartDate.value, selectedEndDate.value)\n ? startOfMonth(addMonths(selectedStartDate.value, 1))\n : selectedEndDate.value;\n selectingEndDate.value = false;\n } else if (!selectingEndDate.value) {\n // If selecting a custom range and not selecting an end date, set the start date to the selected start date\n startCurrentDate.value = startOfDay(currentDate.value);\n }\n});\n\n// Watcher will set the input values based on the selected start and end dates\nwatch(\n [selectedStartDate, selectedEndDate],\n ([newStart, newEnd]) => {\n if (isValid(newStart)) {\n manualStartDate.value = newStart;\n } else {\n manualStartDate.value = selectedStartDate.value;\n }\n\n if (isValid(newEnd)) {\n manualEndDate.value = newEnd;\n } else {\n manualEndDate.value = selectedEndDate.value;\n }\n },\n { immediate: true }\n);\n\n// Watcher to ensure dates are always in logical order\n// This watch is will ensure that the start date is always before the end date\nwatch(\n [startCurrentDate, endCurrentDate],\n ([newStart, newEnd], [oldStart, oldEnd]) => {\n const monthDifference = differenceInCalendarMonths(newEnd, newStart);\n\n if (newStart !== oldStart) {\n if (isAfter(newStart, newEnd) || monthDifference === 0) {\n // Adjust the end date forward if the start date is adjusted and is after the end date or in the same month\n endCurrentDate.value = addMonths(newStart, 1);\n }\n }\n if (newEnd !== oldEnd) {\n if (isBefore(newEnd, newStart) || monthDifference === 0) {\n // Adjust the start date backward if the end date is adjusted and is before the start date or in the same month\n startCurrentDate.value = subMonths(newEnd, 1);\n }\n }\n },\n { immediate: true, deep: true }\n);\n\nconst setDateRange = range => {\n selectedRange.value = range.value;\n const { start, end } = getActiveDateRange(range.value, currentDate.value);\n selectedStartDate.value = start;\n selectedEndDate.value = end;\n};\n\nconst moveCalendar = (calendar, direction, period = MONTH) => {\n const { start, end } = moveCalendarDate(\n calendar,\n startCurrentDate.value,\n endCurrentDate.value,\n direction,\n period\n );\n startCurrentDate.value = start;\n endCurrentDate.value = end;\n};\n\nconst selectDate = day => {\n selectedRange.value = CUSTOM_RANGE;\n if (!selectingEndDate.value || day < selectedStartDate.value) {\n selectedStartDate.value = day;\n selectedEndDate.value = null;\n selectingEndDate.value = true;\n } else {\n selectedEndDate.value = day;\n selectingEndDate.value = false;\n }\n};\n\nconst setViewMode = (calendar, mode) => {\n selectedRange.value = CUSTOM_RANGE;\n calendarViews.value[calendar] = mode;\n};\n\nconst openCalendar = (index, calendarType, period = MONTH) => {\n const current =\n calendarType === START_CALENDAR\n ? startCurrentDate.value\n : endCurrentDate.value;\n const newDate =\n period === MONTH\n ? setMonth(startOfMonth(current), index)\n : setYear(current, index);\n if (calendarType === START_CALENDAR) {\n startCurrentDate.value = newDate;\n } else {\n endCurrentDate.value = newDate;\n }\n setViewMode(calendarType, period === MONTH ? WEEK : MONTH);\n};\n\nconst updateManualInput = (newDate, calendarType) => {\n if (calendarType === START_CALENDAR) {\n selectedStartDate.value = newDate;\n startCurrentDate.value = newDate;\n } else {\n selectedEndDate.value = newDate;\n endCurrentDate.value = newDate;\n }\n selectingEndDate.value = false;\n};\n\nconst handleManualInputError = message => {\n useAlert(message);\n};\n\nconst resetDatePicker = () => {\n startCurrentDate.value = startOfDay(currentDate.value); // Resets to today at start of the day\n endCurrentDate.value = addMonths(startOfDay(currentDate.value), 1); // Resets to one month ahead\n selectedStartDate.value = startOfDay(subDays(currentDate.value, 6));\n selectedEndDate.value = endOfDay(currentDate.value);\n selectingEndDate.value = false;\n selectedRange.value = LAST_7_DAYS;\n // Reset view modes if they are being used to toggle between different calendar views\n calendarViews.value = { start: WEEK, end: WEEK };\n};\n\nconst emitDateRange = () => {\n if (!isValid(selectedStartDate.value) || !isValid(selectedEndDate.value)) {\n useAlert('Please select a valid time range');\n } else {\n showDatePicker.value = false;\n emit('dateRangeChanged', [selectedStartDate.value, selectedEndDate.value]);\n }\n};\n</script>\n\n<template>\n <div class=\"relative font-inter\">\n <DatePickerButton\n :selected-start-date=\"selectedStartDate\"\n :selected-end-date=\"selectedEndDate\"\n :selected-range=\"selectedRange\"\n @open=\"showDatePicker = !showDatePicker\"\n />\n <div\n v-if=\"showDatePicker\"\n class=\"flex absolute top-9 ltr:left-0 rtl:right-0 z-30 shadow-md select-none w-[880px] h-[490px] rounded-2xl border border-slate-50 dark:border-slate-800 bg-white dark:bg-slate-800\"\n >\n <CalendarDateRange\n :selected-range=\"selectedRange\"\n @set-range=\"setDateRange\"\n />\n <div\n class=\"flex flex-col w-[680px] ltr:border-l rtl:border-r border-slate-50 dark:border-slate-700/50\"\n >\n <div class=\"flex justify-around h-fit\">\n <!-- Calendars for Start and End Dates -->\n <div\n v-for=\"calendar in [START_CALENDAR, END_CALENDAR]\"\n :key=\"`${calendar}-calendar`\"\n class=\"flex flex-col items-center\"\n >\n <CalendarDateInput\n :calendar-type=\"calendar\"\n :date-value=\"\n calendar === START_CALENDAR ? manualStartDate : manualEndDate\n \"\n :compare-date=\"\n calendar === START_CALENDAR ? manualEndDate : manualStartDate\n \"\n :is-disabled=\"selectedRange !== CUSTOM_RANGE\"\n @update=\"\n calendar === START_CALENDAR\n ? (manualStartDate = $event)\n : (manualEndDate = $event)\n \"\n @validate=\"updateManualInput($event, calendar)\"\n @error=\"handleManualInputError($event)\"\n />\n <div class=\"py-5 border-b border-slate-50 dark:border-slate-700/50\">\n <div\n class=\"flex flex-col items-center gap-2 px-5 min-w-[340px] max-h-[352px]\"\n :class=\"\n calendar === START_CALENDAR &&\n 'ltr:border-r rtl:border-l border-slate-50 dark:border-slate-700/50'\n \"\n >\n <CalendarYear\n v-if=\"calendarViews[calendar] === YEAR\"\n :calendar-type=\"calendar\"\n :start-current-date=\"startCurrentDate\"\n :end-current-date=\"endCurrentDate\"\n @select-year=\"openCalendar($event, calendar, YEAR)\"\n />\n <CalendarMonth\n v-else-if=\"calendarViews[calendar] === MONTH\"\n :calendar-type=\"calendar\"\n :start-current-date=\"startCurrentDate\"\n :end-current-date=\"endCurrentDate\"\n @select-month=\"openCalendar($event, calendar)\"\n @set-view=\"setViewMode\"\n @prev=\"moveCalendar(calendar, 'prev', YEAR)\"\n @next=\"moveCalendar(calendar, 'next', YEAR)\"\n />\n <CalendarWeek\n v-else-if=\"calendarViews[calendar] === WEEK\"\n :calendar-type=\"calendar\"\n :current-date=\"currentDate\"\n :start-current-date=\"startCurrentDate\"\n :end-current-date=\"endCurrentDate\"\n :selected-start-date=\"selectedStartDate\"\n :selected-end-date=\"selectedEndDate\"\n :selecting-end-date=\"selectingEndDate\"\n :hovered-end-date=\"hoveredEndDate\"\n @update-hovered-end-date=\"hoveredEndDate = $event\"\n @select-date=\"selectDate\"\n @set-view=\"setViewMode\"\n @prev=\"moveCalendar(calendar, 'prev')\"\n @next=\"moveCalendar(calendar, 'next')\"\n />\n </div>\n </div>\n </div>\n </div>\n <CalendarFooter @change=\"emitDateRange\" @clear=\"resetDatePicker\" />\n </div>\n </div>\n </div>\n</template>\n","// [NOTE][DEPRECATED] This method is to be deprecated, please do not add new components to this file.\n/* eslint no-plusplus: 0 */\nimport AvatarUploader from './widgets/forms/AvatarUploader.vue';\nimport Button from './ui/WootButton.vue';\nimport Code from './Code.vue';\nimport ColorPicker from './widgets/ColorPicker.vue';\nimport ConfirmDeleteModal from './widgets/modal/ConfirmDeleteModal.vue';\nimport ConfirmModal from './widgets/modal/ConfirmationModal.vue';\nimport DeleteModal from './widgets/modal/DeleteModal.vue';\nimport DropdownItem from 'shared/components/ui/dropdown/DropdownItem.vue';\nimport DropdownMenu from 'shared/components/ui/dropdown/DropdownMenu.vue';\nimport FeatureToggle from './widgets/FeatureToggle.vue';\nimport Input from './widgets/forms/Input.vue';\nimport PhoneInput from './widgets/forms/PhoneInput.vue';\nimport Label from './ui/Label.vue';\nimport LoadingState from './widgets/LoadingState.vue';\nimport ModalHeader from './ModalHeader.vue';\nimport Modal from './Modal.vue';\nimport SidemenuIcon from './SidemenuIcon.vue';\nimport Spinner from 'shared/components/Spinner.vue';\nimport SubmitButton from './buttons/FormSubmitButton.vue';\nimport Tabs from './ui/Tabs/Tabs.vue';\nimport TabsItem from './ui/Tabs/TabsItem.vue';\nimport Thumbnail from './widgets/Thumbnail.vue';\nimport DatePicker from './ui/DatePicker/DatePicker.vue';\n\nconst WootUIKit = {\n AvatarUploader,\n Button,\n Code,\n ColorPicker,\n ConfirmDeleteModal,\n ConfirmModal,\n DeleteModal,\n DropdownItem,\n DropdownMenu,\n FeatureToggle,\n Input,\n PhoneInput,\n Label,\n LoadingState,\n Modal,\n ModalHeader,\n SidemenuIcon,\n Spinner,\n SubmitButton,\n Tabs,\n TabsItem,\n Thumbnail,\n DatePicker,\n install(Vue) {\n const keys = Object.keys(this);\n keys.pop(); // remove 'install' from keys\n let i = keys.length;\n while (i--) {\n Vue.component(`woot${keys[i]}`, this[keys[i]]);\n }\n },\n};\n\nif (typeof window !== 'undefined' && window.Vue) {\n window.Vue.use(WootUIKit);\n}\n\nexport default WootUIKit;\n","<script>\nimport { required, minLength } from '@vuelidate/validators';\nimport { mapGetters } from 'vuex';\nimport { useVuelidate } from '@vuelidate/core';\nimport { useAlert } from 'dashboard/composables';\n\nexport default {\n props: {\n show: {\n type: Boolean,\n default: false,\n },\n hasAccounts: {\n type: Boolean,\n default: true,\n },\n },\n emits: ['closeAccountCreateModal'],\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n accountName: '',\n };\n },\n validations() {\n return {\n accountName: {\n required,\n minLength: minLength(1),\n },\n };\n },\n computed: {\n ...mapGetters({\n uiFlags: 'agents/getUIFlags',\n }),\n },\n methods: {\n async addAccount() {\n try {\n const account_id = await this.$store.dispatch('accounts/create', {\n account_name: this.accountName,\n });\n this.$emit('closeAccountCreateModal');\n useAlert(this.$t('CREATE_ACCOUNT.API.SUCCESS_MESSAGE'));\n window.location = `/app/accounts/${account_id}/dashboard`;\n } catch (error) {\n if (error.response.status === 422) {\n useAlert(this.$t('CREATE_ACCOUNT.API.EXIST_MESSAGE'));\n } else {\n useAlert(this.$t('CREATE_ACCOUNT.API.ERROR_MESSAGE'));\n }\n }\n },\n },\n};\n</script>\n\n<template>\n <woot-modal :show=\"show\" :on-close=\"() => $emit('closeAccountCreateModal')\">\n <div class=\"flex flex-col h-auto overflow-auto\">\n <woot-modal-header\n :header-title=\"$t('CREATE_ACCOUNT.NEW_ACCOUNT')\"\n :header-content=\"$t('CREATE_ACCOUNT.SELECTOR_SUBTITLE')\"\n />\n <div v-if=\"!hasAccounts\" class=\"mx-8 mt-6 mb-0 text-sm\">\n <div class=\"flex items-center rounded-md alert\">\n <div class=\"ml-1 mr-3\">\n <fluent-icon icon=\"warning\" />\n </div>\n {{ $t('CREATE_ACCOUNT.NO_ACCOUNT_WARNING') }}\n </div>\n </div>\n\n <form class=\"flex flex-col w-full\" @submit.prevent=\"addAccount\">\n <div class=\"w-full\">\n <label :class=\"{ error: v$.accountName.$error }\">\n {{ $t('CREATE_ACCOUNT.FORM.NAME.LABEL') }}\n <input\n v-model=\"accountName\"\n type=\"text\"\n :placeholder=\"$t('CREATE_ACCOUNT.FORM.NAME.PLACEHOLDER')\"\n @input=\"v$.accountName.$touch\"\n />\n </label>\n </div>\n <div class=\"w-full\">\n <div class=\"w-full\">\n <woot-submit-button\n :disabled=\"\n v$.accountName.$invalid ||\n v$.accountName.$invalid ||\n uiFlags.isCreating\n \"\n :button-text=\"$t('CREATE_ACCOUNT.FORM.SUBMIT')\"\n :loading=\"uiFlags.isCreating\"\n button-class=\"large expanded\"\n />\n </div>\n </div>\n </form>\n </div>\n </woot-modal>\n</template>\n","import { emitter } from 'shared/helpers/mitt';\nimport { onMounted, onBeforeUnmount } from 'vue';\n\n// this will automatically add event listeners to the emitter\n// and remove them when the component is destroyed\nconst useEmitter = (eventName, callback) => {\n const cleanup = () => {\n emitter.off(eventName, callback);\n };\n\n onMounted(() => {\n emitter.on(eventName, callback);\n });\n\n onBeforeUnmount(cleanup);\n\n return cleanup;\n};\n\nexport { useEmitter };\n","import {\n hasPermissions,\n getUserPermissions,\n getCurrentAccount,\n} from './permissionsHelper';\n\nimport {\n ROLES,\n CONVERSATION_PERMISSIONS,\n CONTACT_PERMISSIONS,\n REPORTS_PERMISSIONS,\n PORTAL_PERMISSIONS,\n} from 'dashboard/constants/permissions.js';\n\nexport const routeIsAccessibleFor = (route, userPermissions = []) => {\n const { meta: { permissions: routePermissions = [] } = {} } = route;\n return hasPermissions(routePermissions, userPermissions);\n};\n\nexport const defaultRedirectPage = (to, permissions) => {\n const { accountId } = to.params;\n\n const permissionRoutes = [\n {\n permissions: [...ROLES, ...CONVERSATION_PERMISSIONS],\n path: 'dashboard',\n },\n { permissions: [CONTACT_PERMISSIONS], path: 'contacts' },\n { permissions: [REPORTS_PERMISSIONS], path: 'reports/overview' },\n { permissions: [PORTAL_PERMISSIONS], path: 'portals' },\n ];\n\n const route = permissionRoutes.find(({ permissions: routePermissions }) =>\n hasPermissions(routePermissions, permissions)\n );\n\n return `accounts/${accountId}/${route ? route.path : 'dashboard'}`;\n};\n\nconst validateActiveAccountRoutes = (to, user) => {\n // If the current account is active, then check for the route permissions\n const accountDashboardURL = `accounts/${to.params.accountId}/dashboard`;\n\n // If the user is trying to access suspended route, redirect them to dashboard\n if (to.name === 'account_suspended') {\n return accountDashboardURL;\n }\n\n const userPermissions = getUserPermissions(user, to.params.accountId);\n\n const isAccessible = routeIsAccessibleFor(to, userPermissions);\n // If the route is not accessible for the user, return to dashboard screen\n return isAccessible ? null : defaultRedirectPage(to, userPermissions);\n};\n\nexport const validateLoggedInRoutes = (to, user) => {\n const currentAccount = getCurrentAccount(user, Number(to.params.accountId));\n // If current account is missing, either user does not have\n // access to the account or the account is deleted, return to login screen\n if (!currentAccount) {\n return `app/login`;\n }\n\n const isCurrentAccountActive = currentAccount.status === 'active';\n\n if (isCurrentAccountActive) {\n return validateActiveAccountRoutes(to, user);\n }\n\n // If the current account is not active, then redirect the user to the suspended screen\n if (to.name !== 'account_suspended') {\n return `accounts/${to.params.accountId}/suspended`;\n }\n\n // Proceed to the route if none of the above conditions are met\n return null;\n};\n\nexport const isAConversationRoute = (\n routeName,\n includeBase = false,\n includeExtended = true\n) => {\n const baseRoutes = [\n 'home',\n 'conversation_mentions',\n 'conversation_unattended',\n 'inbox_dashboard',\n 'label_conversations',\n 'team_conversations',\n 'folder_conversations',\n 'conversation_participating',\n ];\n const extendedRoutes = [\n 'inbox_conversation',\n 'conversation_through_mentions',\n 'conversation_through_unattended',\n 'conversation_through_inbox',\n 'conversations_through_label',\n 'conversations_through_team',\n 'conversations_through_folders',\n 'conversation_through_participating',\n ];\n\n const routes = [\n ...(includeBase ? baseRoutes : []),\n ...(includeExtended ? extendedRoutes : []),\n ];\n\n return routes.includes(routeName);\n};\n\nexport const getConversationDashboardRoute = routeName => {\n switch (routeName) {\n case 'inbox_conversation':\n return 'home';\n case 'conversation_through_mentions':\n return 'conversation_mentions';\n case 'conversation_through_unattended':\n return 'conversation_unattended';\n case 'conversations_through_label':\n return 'label_conversations';\n case 'conversations_through_team':\n return 'team_conversations';\n case 'conversations_through_folders':\n return 'folder_conversations';\n case 'conversation_through_participating':\n return 'conversation_participating';\n case 'conversation_through_inbox':\n return 'inbox_dashboard';\n default:\n return null;\n }\n};\n\nexport const isAInboxViewRoute = (routeName, includeBase = false) => {\n const baseRoutes = ['inbox_view'];\n const extendedRoutes = ['inbox_view_conversation'];\n const routeNames = includeBase\n ? [...baseRoutes, ...extendedRoutes]\n : extendedRoutes;\n return routeNames.includes(routeName);\n};\n\nexport const isNotificationRoute = routeName =>\n routeName === 'notifications_index';\n","<script setup>\nimport { ref, computed, onBeforeUnmount } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useRoute } from 'vue-router';\nimport { useEmitter } from 'dashboard/composables/emitter';\nimport { BUS_EVENTS } from 'shared/constants/busEvents';\nimport {\n isAConversationRoute,\n isAInboxViewRoute,\n isNotificationRoute,\n} from 'dashboard/helper/routeHelpers';\nimport { useEventListener } from '@vueuse/core';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst { t } = useI18n();\nconst route = useRoute();\n\nconst RECONNECTED_BANNER_TIMEOUT = 2000;\n\nconst showNotification = ref(!navigator.onLine);\nconst isDisconnected = ref(false);\nconst isReconnecting = ref(false);\nconst isReconnected = ref(false);\nlet reconnectTimeout = null;\n\nconst bannerText = computed(() => {\n if (isReconnecting.value) return t('NETWORK.NOTIFICATION.RECONNECTING');\n if (isReconnected.value) return t('NETWORK.NOTIFICATION.RECONNECT_SUCCESS');\n return t('NETWORK.NOTIFICATION.OFFLINE');\n});\n\nconst iconName = computed(() => (isReconnected.value ? 'wifi' : 'wifi-off'));\nconst canRefresh = computed(\n () => !isReconnecting.value && !isReconnected.value\n);\n\nconst refreshPage = () => {\n window.location.reload();\n};\n\nconst closeNotification = () => {\n showNotification.value = false;\n isReconnected.value = false;\n clearTimeout(reconnectTimeout);\n};\n\nconst isInAnyOfTheRoutes = routeName => {\n return (\n isAConversationRoute(routeName, true) ||\n isAInboxViewRoute(routeName, true) ||\n isNotificationRoute(routeName, true)\n );\n};\n\nconst updateWebsocketStatus = () => {\n isDisconnected.value = true;\n showNotification.value = true;\n};\n\nconst handleReconnectionCompleted = () => {\n isDisconnected.value = false;\n isReconnecting.value = false;\n isReconnected.value = true;\n showNotification.value = true;\n reconnectTimeout = setTimeout(closeNotification, RECONNECTED_BANNER_TIMEOUT);\n};\n\nconst handleReconnecting = () => {\n if (isInAnyOfTheRoutes(route.name)) {\n isReconnecting.value = true;\n isReconnected.value = false;\n showNotification.value = true;\n } else {\n handleReconnectionCompleted();\n }\n};\n\nconst updateOnlineStatus = event => {\n // Case: Websocket is not disconnected\n // If the app goes offline, show the notification\n // If the app goes online, close the notification\n\n // Case: Websocket is disconnected\n // If the app goes offline, show the notification\n // If the app goes online but the websocket is disconnected, don't close the notification\n // If the app goes online and the websocket is not disconnected, close the notification\n\n if (event.type === 'offline') {\n showNotification.value = true;\n } else if (event.type === 'online' && !isDisconnected.value) {\n handleReconnectionCompleted();\n }\n};\n\nuseEventListener('online', updateOnlineStatus);\nuseEventListener('offline', updateOnlineStatus);\nuseEmitter(BUS_EVENTS.WEBSOCKET_DISCONNECT, updateWebsocketStatus);\nuseEmitter(\n BUS_EVENTS.WEBSOCKET_RECONNECT_COMPLETED,\n handleReconnectionCompleted\n);\nuseEmitter(BUS_EVENTS.WEBSOCKET_RECONNECT, handleReconnecting);\n\nonBeforeUnmount(() => {\n clearTimeout(reconnectTimeout);\n});\n</script>\n\n<template>\n <transition name=\"network-notification-fade\" tag=\"div\">\n <div v-show=\"showNotification\" class=\"fixed z-50 top-2 left-2 group\">\n <div\n class=\"relative flex items-center justify-between w-full px-2 py-1 bg-n-amber-4 dark:bg-n-amber-8 rounded-lg shadow-lg\"\n >\n <fluent-icon :icon=\"iconName\" class=\"text-n-amber-12\" size=\"18\" />\n <span class=\"px-2 text-xs font-medium tracking-wide text-n-amber-12\">\n {{ bannerText }}\n </span>\n <Button\n v-if=\"canRefresh\"\n ghost\n sm\n amber\n icon=\"i-lucide-refresh-ccw\"\n :title=\"$t('NETWORK.BUTTON.REFRESH')\"\n class=\"!text-n-amber-12 dark:!text-n-amber-9\"\n @click=\"refreshPage\"\n />\n\n <Button\n ghost\n sm\n amber\n icon=\"i-lucide-x\"\n class=\"!text-n-amber-12 dark:!text-n-amber-9\"\n @click=\"closeNotification\"\n />\n </div>\n </div>\n </transition>\n</template>\n","<script>\nexport default {\n props: {\n bannerMessage: {\n type: String,\n default: '',\n },\n hrefLink: {\n type: String,\n default: '',\n },\n hrefLinkText: {\n type: String,\n default: '',\n },\n hasActionButton: {\n type: Boolean,\n default: false,\n },\n actionButtonVariant: {\n type: String,\n default: '',\n },\n actionButtonLabel: {\n type: String,\n default: '',\n },\n actionButtonIcon: {\n type: String,\n default: 'arrow-right',\n },\n colorScheme: {\n type: String,\n default: '',\n },\n hasCloseButton: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['primaryAction', 'close'],\n computed: {\n bannerClasses() {\n const classList = [this.colorScheme];\n\n if (this.hasActionButton || this.hasCloseButton) {\n classList.push('has-button');\n }\n return classList;\n },\n },\n methods: {\n onClick(e) {\n this.$emit('primaryAction', e);\n },\n onClickClose(e) {\n this.$emit('close', e);\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"flex items-center justify-center h-12 gap-4 px-4 py-3 text-xs text-white banner dark:text-white woot-banner\"\n :class=\"bannerClasses\"\n >\n <span class=\"banner-message\">\n {{ bannerMessage }}\n <a\n v-if=\"hrefLink\"\n :href=\"hrefLink\"\n rel=\"noopener noreferrer nofollow\"\n target=\"_blank\"\n >\n {{ hrefLinkText }}\n </a>\n </span>\n <div class=\"actions\">\n <woot-button\n v-if=\"hasActionButton\"\n size=\"tiny\"\n :icon=\"actionButtonIcon\"\n :variant=\"actionButtonVariant\"\n color-scheme=\"primary\"\n class-names=\"banner-action__button\"\n @click=\"onClick\"\n >\n {{ actionButtonLabel }}\n </woot-button>\n <woot-button\n v-if=\"hasCloseButton\"\n size=\"tiny\"\n :color-scheme=\"colorScheme\"\n icon=\"dismiss-circle\"\n class-names=\"banner-action__button\"\n @click=\"onClickClose\"\n >\n {{ $t('GENERAL_SETTINGS.DISMISS') }}\n </woot-button>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.banner {\n &.primary {\n @apply bg-woot-500 dark:bg-woot-500;\n .banner-action__button {\n @apply bg-woot-600 dark:bg-woot-600 border-none text-white;\n\n &:hover {\n @apply bg-woot-700 dark:bg-woot-700;\n }\n }\n }\n\n &.secondary {\n @apply bg-n-slate-3 dark:bg-n-solid-3 text-n-slate-12;\n a {\n @apply text-slate-800 dark:text-slate-800;\n }\n }\n\n &.alert {\n @apply bg-n-ruby-3 text-n-ruby-12;\n .banner-action__button {\n @apply border-none text-n-ruby-12 bg-n-ruby-5;\n\n &:hover {\n @apply bg-n-ruby-4;\n }\n }\n\n a {\n @apply text-n-ruby-12;\n }\n }\n\n &.warning {\n @apply bg-yellow-500 dark:bg-yellow-500 text-yellow-500 dark:text-yellow-500;\n a {\n @apply text-yellow-500 dark:text-yellow-500;\n }\n }\n\n &.gray {\n @apply text-black-500 dark:text-black-500;\n .banner-action__button {\n @apply text-white dark:text-white;\n }\n }\n\n a {\n @apply ml-1 underline text-white dark:text-white text-xs;\n }\n\n .banner-action__button {\n ::v-deep .button__content {\n @apply whitespace-nowrap;\n }\n }\n\n .banner-message {\n @apply flex items-center;\n }\n\n .actions {\n @apply flex gap-1 right-3;\n }\n}\n</style>\n","import { computed } from 'vue';\nimport { useStoreGetters } from 'dashboard/composables/store';\n\n/**\n * Composable to determine if the current user is an administrator.\n * @returns {Boolean} - True if the current user is an administrator, false otherwise.\n */\nexport function useAdmin() {\n const getters = useStoreGetters();\n\n const currentUserRole = computed(() => getters.getCurrentRole.value);\n const isAdmin = computed(() => currentUserRole.value === 'administrator');\n\n return {\n isAdmin,\n };\n}\n","// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n 'major',\n 'premajor',\n 'minor',\n 'preminor',\n 'patch',\n 'prepatch',\n 'prerelease',\n]\n\nmodule.exports = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 0b001,\n FLAG_LOOSE: 0b010,\n}\n","const debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n","const {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n ['\\\\s', 1],\n ['\\\\d', MAX_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value\n .split(`${token}*`).join(`${token}{0,${max}}`)\n .split(`${token}+`).join(`${token}{1,${max}}`)\n }\n return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value)\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n `(?:${src[t.PRERELEASE]})?` +\n `(?:${src[t.BUILD]})?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n","// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n if (!options) {\n return emptyOpts\n }\n\n if (typeof options !== 'object') {\n return looseOption\n }\n\n return options\n}\nmodule.exports = parseOptions\n","const numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n","const debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return (\n compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n )\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('build compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier, identifierBase) {\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier, identifierBase)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier, identifierBase)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier, identifierBase)\n this.inc('pre', identifier, identifierBase)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier, identifierBase)\n }\n this.inc('pre', identifier, identifierBase)\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre': {\n const base = Number(identifierBase) ? 1 : 0\n\n if (!identifier && identifierBase === false) {\n throw new Error('invalid increment argument: identifier is empty')\n }\n\n if (this.prerelease.length === 0) {\n this.prerelease = [base]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n if (identifier === this.prerelease.join('.') && identifierBase === false) {\n throw new Error('invalid increment argument: identifier already exists')\n }\n this.prerelease.push(base)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n let prerelease = [identifier, base]\n if (identifierBase === false) {\n prerelease = [identifier]\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease\n }\n } else {\n this.prerelease = prerelease\n }\n }\n break\n }\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.raw = this.format()\n if (this.build.length) {\n this.raw += `+${this.build.join('.')}`\n }\n return this\n }\n}\n\nmodule.exports = SemVer\n","const SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n if (version instanceof SemVer) {\n return version\n }\n try {\n return new SemVer(version, options)\n } catch (er) {\n if (!throwErrors) {\n return null\n }\n throw er\n }\n}\n\nmodule.exports = parse\n","const parse = require('./parse')\nconst valid = (version, options) => {\n const v = parse(version, options)\n return v ? v.version : null\n}\nmodule.exports = valid\n","const parse = require('./parse')\nconst clean = (version, options) => {\n const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\nmodule.exports = clean\n","const SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n if (typeof (options) === 'string') {\n identifierBase = identifier\n identifier = options\n options = undefined\n }\n\n try {\n return new SemVer(\n version instanceof SemVer ? version.version : version,\n options\n ).inc(release, identifier, identifierBase).version\n } catch (er) {\n return null\n }\n}\nmodule.exports = inc\n","const parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n const v1 = parse(version1, null, true)\n const v2 = parse(version2, null, true)\n const comparison = v1.compare(v2)\n\n if (comparison === 0) {\n return null\n }\n\n const v1Higher = comparison > 0\n const highVersion = v1Higher ? v1 : v2\n const lowVersion = v1Higher ? v2 : v1\n const highHasPre = !!highVersion.prerelease.length\n const lowHasPre = !!lowVersion.prerelease.length\n\n if (lowHasPre && !highHasPre) {\n // Going from prerelease -> no prerelease requires some special casing\n\n // If the low version has only a major, then it will always be a major\n // Some examples:\n // 1.0.0-1 -> 1.0.0\n // 1.0.0-1 -> 1.1.1\n // 1.0.0-1 -> 2.0.0\n if (!lowVersion.patch && !lowVersion.minor) {\n return 'major'\n }\n\n // Otherwise it can be determined by checking the high version\n\n if (highVersion.patch) {\n // anything higher than a patch bump would result in the wrong version\n return 'patch'\n }\n\n if (highVersion.minor) {\n // anything higher than a minor bump would result in the wrong version\n return 'minor'\n }\n\n // bumping major/minor/patch all have same result\n return 'major'\n }\n\n // add the `pre` prefix if we are going to a prerelease version\n const prefix = highHasPre ? 'pre' : ''\n\n if (v1.major !== v2.major) {\n return prefix + 'major'\n }\n\n if (v1.minor !== v2.minor) {\n return prefix + 'minor'\n }\n\n if (v1.patch !== v2.patch) {\n return prefix + 'patch'\n }\n\n // high and low are preleases\n return 'prerelease'\n}\n\nmodule.exports = diff\n","const SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n","const SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n","const SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n","const parse = require('./parse')\nconst prerelease = (version, options) => {\n const parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n","const SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n","const compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n","const compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n","const SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n const versionA = new SemVer(a, loose)\n const versionB = new SemVer(b, loose)\n return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n","const compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n","const compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n","const compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n","const compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n","const compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n","const compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n","const compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n","const compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n","const eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a === b\n\n case '!==':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError(`Invalid operator: ${op}`)\n }\n}\nmodule.exports = cmp\n","const SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n let match = null\n if (!options.rtl) {\n match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n let next\n while ((next = coerceRtlRegex.exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n coerceRtlRegex.lastIndex = -1\n }\n\n if (match === null) {\n return null\n }\n\n const major = match[2]\n const minor = match[3] || '0'\n const patch = match[4] || '0'\n const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n","class LRUCache {\n constructor () {\n this.max = 1000\n this.map = new Map()\n }\n\n get (key) {\n const value = this.map.get(key)\n if (value === undefined) {\n return undefined\n } else {\n // Remove the key from the map and add it to the end\n this.map.delete(key)\n this.map.set(key, value)\n return value\n }\n }\n\n delete (key) {\n return this.map.delete(key)\n }\n\n set (key, value) {\n const deleted = this.delete(key)\n\n if (!deleted && value !== undefined) {\n // If cache is full, delete the least recently used item\n if (this.map.size >= this.max) {\n const firstKey = this.map.keys().next().value\n this.delete(firstKey)\n }\n\n this.map.set(key, value)\n }\n\n return this\n }\n}\n\nmodule.exports = LRUCache\n","const SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n constructor (range, options) {\n options = parseOptions(options)\n\n if (range instanceof Range) {\n if (\n range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease\n ) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value\n this.set = [[range]]\n this.formatted = undefined\n return this\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First reduce all whitespace as much as possible so we do not have to rely\n // on potentially slow regexes like \\s*. This is then stored and used for\n // future error messages as well.\n this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n // First, split on ||\n this.set = this.raw\n .split('||')\n // map the range to a 2d array of comparators\n .map(r => this.parseRange(r.trim()))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length)\n\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0]\n this.set = this.set.filter(c => !isNullSet(c[0]))\n if (this.set.length === 0) {\n this.set = [first]\n } else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c]\n break\n }\n }\n }\n }\n\n this.formatted = undefined\n }\n\n get range () {\n if (this.formatted === undefined) {\n this.formatted = ''\n for (let i = 0; i < this.set.length; i++) {\n if (i > 0) {\n this.formatted += '||'\n }\n const comps = this.set[i]\n for (let k = 0; k < comps.length; k++) {\n if (k > 0) {\n this.formatted += ' '\n }\n this.formatted += comps[k].toString().trim()\n }\n }\n }\n return this.formatted\n }\n\n format () {\n return this.range\n }\n\n toString () {\n return this.range\n }\n\n parseRange (range) {\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts =\n (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n (this.options.loose && FLAG_LOOSE)\n const memoKey = memoOpts + ':' + range\n const cached = cache.get(memoKey)\n if (cached) {\n return cached\n }\n\n const loose = this.options.loose\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n debug('hyphen replace', range)\n\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range)\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n debug('tilde trim', range)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n debug('caret trim', range)\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n let rangeList = range\n .split(' ')\n .map(comp => parseComparator(comp, this.options))\n .join(' ')\n .split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options))\n\n if (loose) {\n // in loose mode, throw out any that are not valid comparators\n rangeList = rangeList.filter(comp => {\n debug('loose invalid filter', comp, this.options)\n return !!comp.match(re[t.COMPARATORLOOSE])\n })\n }\n debug('range list', rangeList)\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const rangeMap = new Map()\n const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n for (const comp of comparators) {\n if (isNullSet(comp)) {\n return [comp]\n }\n rangeMap.set(comp.value, comp)\n }\n if (rangeMap.size > 1 && rangeMap.has('')) {\n rangeMap.delete('')\n }\n\n const result = [...rangeMap.values()]\n cache.set(memoKey, result)\n return result\n }\n\n intersects (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some((thisComparators) => {\n return (\n isSatisfiable(thisComparators, options) &&\n range.set.some((rangeComparators) => {\n return (\n isSatisfiable(rangeComparators, options) &&\n thisComparators.every((thisComparator) => {\n return rangeComparators.every((rangeComparator) => {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n )\n })\n )\n })\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n safeRe: re,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true\n const remainingComparators = comparators.slice()\n let testComparator = remainingComparators.pop()\n\n while (result && remainingComparators.length) {\n result = remainingComparators.every((otherComparator) => {\n return testComparator.intersects(otherComparator, options)\n })\n\n testComparator = remainingComparators.pop()\n }\n\n return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceTilde(c, options))\n .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceCaret(c, options))\n .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options)\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${+M + 1}.0.0-0`\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p\n } <${+M + 1}.0.0-0`\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options)\n return comp\n .split(/\\s+/)\n .map((c) => replaceXRange(c, options))\n .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n comp = comp.trim()\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n const xM = isX(M)\n const xm = xM || isX(m)\n const xp = xm || isX(p)\n const anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n if (gtlt === '<') {\n pr = '-0'\n }\n\n ret = `${gtlt + M}.${m}.${p}${pr}`\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp\n .trim()\n .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options)\n return comp\n .trim()\n .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr) => {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n } else if (fpr) {\n from = `>=${from}`\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`\n } else {\n to = `<=${to}`\n }\n\n return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === Comparator.ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n","const ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY () {\n return ANY\n }\n\n constructor (comp, options) {\n options = parseOptions(options)\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n comp = comp.trim().split(/\\s+/).join(' ')\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n }\n\n parse (comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const m = comp.match(r)\n\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`)\n }\n\n this.operator = m[1] !== undefined ? m[1] : ''\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n }\n\n toString () {\n return this.value\n }\n\n test (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY || version === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n }\n\n intersects (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (this.operator === '') {\n if (this.value === '') {\n return true\n }\n return new Range(comp.value, options).test(this.value)\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true\n }\n return new Range(this.value, options).test(comp.semver)\n }\n\n options = parseOptions(options)\n\n // Special cases where nothing can possibly be lower\n if (options.includePrerelease &&\n (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n return false\n }\n if (!options.includePrerelease &&\n (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n return false\n }\n\n // Same direction increasing (> or >=)\n if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n return true\n }\n // Same direction decreasing (< or <=)\n if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n return true\n }\n // same SemVer and both sides are inclusive (<= or >=)\n if (\n (this.semver.version === comp.semver.version) &&\n this.operator.includes('=') && comp.operator.includes('=')) {\n return true\n }\n // opposite directions less than\n if (cmp(this.semver, '<', comp.semver, options) &&\n this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n return true\n }\n // opposite directions greater than\n if (cmp(this.semver, '>', comp.semver, options) &&\n this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n return true\n }\n return false\n }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n","const Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\nmodule.exports = satisfies\n","const Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n new Range(range, options).set\n .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n let max = null\n let maxSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\nmodule.exports = maxSatisfying\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n let min = null\n let minSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\nmodule.exports = minSatisfying\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n range = new Range(range, loose)\n\n let minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let setMin = null\n comparators.forEach((comparator) => {\n // Clone to avoid manipulating the comparator's semver object.\n const compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!setMin || gt(compver, setMin)) {\n setMin = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error(`Unexpected operation: ${comparator.operator}`)\n }\n })\n if (setMin && (!minver || gt(minver, setMin))) {\n minver = setMin\n }\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\nmodule.exports = minVersion\n","const Range = require('../classes/range')\nconst validRange = (range, options) => {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\nmodule.exports = validRange\n","const SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n let gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisfies the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let high = null\n let low = null\n\n comparators.forEach((comparator) => {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nmodule.exports = outside\n","// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n","const outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n","const Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n","// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n const set = []\n let first = null\n let prev = null\n const v = versions.sort((a, b) => compare(a, b, options))\n for (const version of v) {\n const included = satisfies(version, range, options)\n if (included) {\n prev = version\n if (!first) {\n first = version\n }\n } else {\n if (prev) {\n set.push([first, prev])\n }\n prev = null\n first = null\n }\n }\n if (first) {\n set.push([first, null])\n }\n\n const ranges = []\n for (const [min, max] of set) {\n if (min === max) {\n ranges.push(min)\n } else if (!max && min === v[0]) {\n ranges.push('*')\n } else if (!max) {\n ranges.push(`>=${min}`)\n } else if (min === v[0]) {\n ranges.push(`<=${max}`)\n } else {\n ranges.push(`${min} - ${max}`)\n }\n }\n const simplified = ranges.join(' || ')\n const original = typeof range.raw === 'string' ? range.raw : String(range)\n return simplified.length < original.length ? simplified : range\n}\n","const Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n// some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n// - If C is only the ANY comparator, return true\n// - Else if in prerelease mode, return false\n// - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n// - if in prerelease mode, return true\n// - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n// - If GT, and EQ does not satisfy GT, return true (null set)\n// - If LT, and EQ does not satisfy LT, return true (null set)\n// - If EQ satisfies every C, return true\n// - Else return false\n// - If GT\n// - If GT.semver is lower than any > or >= comp in C, return false\n// - If GT is >=, and GT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n// - If LT.semver is greater than any < or <= comp in C, return false\n// - If LT is <=, and LT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n if (sub === dom) {\n return true\n }\n\n sub = new Range(sub, options)\n dom = new Range(dom, options)\n let sawNonNull = false\n\n OUTER: for (const simpleSub of sub.set) {\n for (const simpleDom of dom.set) {\n const isSub = simpleSubset(simpleSub, simpleDom, options)\n sawNonNull = sawNonNull || isSub !== null\n if (isSub) {\n continue OUTER\n }\n }\n // the null set is a subset of everything, but null simple ranges in\n // a complex range should be ignored. so if we saw a non-null range,\n // then we know this isn't a subset, but if EVERY simple range was null,\n // then it is a subset.\n if (sawNonNull) {\n return false\n }\n }\n return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n if (sub === dom) {\n return true\n }\n\n if (sub.length === 1 && sub[0].semver === ANY) {\n if (dom.length === 1 && dom[0].semver === ANY) {\n return true\n } else if (options.includePrerelease) {\n sub = minimumVersionWithPreRelease\n } else {\n sub = minimumVersion\n }\n }\n\n if (dom.length === 1 && dom[0].semver === ANY) {\n if (options.includePrerelease) {\n return true\n } else {\n dom = minimumVersion\n }\n }\n\n const eqSet = new Set()\n let gt, lt\n for (const c of sub) {\n if (c.operator === '>' || c.operator === '>=') {\n gt = higherGT(gt, c, options)\n } else if (c.operator === '<' || c.operator === '<=') {\n lt = lowerLT(lt, c, options)\n } else {\n eqSet.add(c.semver)\n }\n }\n\n if (eqSet.size > 1) {\n return null\n }\n\n let gtltComp\n if (gt && lt) {\n gtltComp = compare(gt.semver, lt.semver, options)\n if (gtltComp > 0) {\n return null\n } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n return null\n }\n }\n\n // will iterate one or zero times\n for (const eq of eqSet) {\n if (gt && !satisfies(eq, String(gt), options)) {\n return null\n }\n\n if (lt && !satisfies(eq, String(lt), options)) {\n return null\n }\n\n for (const c of dom) {\n if (!satisfies(eq, String(c), options)) {\n return false\n }\n }\n\n return true\n }\n\n let higher, lower\n let hasDomLT, hasDomGT\n // if the subset has a prerelease, we need a comparator in the superset\n // with the same tuple and a prerelease, or it's not a subset\n let needDomLTPre = lt &&\n !options.includePrerelease &&\n lt.semver.prerelease.length ? lt.semver : false\n let needDomGTPre = gt &&\n !options.includePrerelease &&\n gt.semver.prerelease.length ? gt.semver : false\n // exception: <1.2.3-0 is the same as <1.2.3\n if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n needDomLTPre = false\n }\n\n for (const c of dom) {\n hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n if (gt) {\n if (needDomGTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomGTPre.major &&\n c.semver.minor === needDomGTPre.minor &&\n c.semver.patch === needDomGTPre.patch) {\n needDomGTPre = false\n }\n }\n if (c.operator === '>' || c.operator === '>=') {\n higher = higherGT(gt, c, options)\n if (higher === c && higher !== gt) {\n return false\n }\n } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {\n return false\n }\n }\n if (lt) {\n if (needDomLTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomLTPre.major &&\n c.semver.minor === needDomLTPre.minor &&\n c.semver.patch === needDomLTPre.patch) {\n needDomLTPre = false\n }\n }\n if (c.operator === '<' || c.operator === '<=') {\n lower = lowerLT(lt, c, options)\n if (lower === c && lower !== lt) {\n return false\n }\n } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {\n return false\n }\n }\n if (!c.operator && (lt || gt) && gtltComp !== 0) {\n return false\n }\n }\n\n // if there was a < or >, and nothing in the dom, then must be false\n // UNLESS it was limited by another range in the other direction.\n // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n if (gt && hasDomLT && !lt && gtltComp !== 0) {\n return false\n }\n\n if (lt && hasDomGT && !gt && gtltComp !== 0) {\n return false\n }\n\n // we needed a prerelease range in a specific tuple, but didn't get one\n // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,\n // because it includes prereleases in the 1.2.3 tuple\n if (needDomGTPre || needDomLTPre) {\n return false\n }\n\n return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp > 0 ? a\n : comp < 0 ? b\n : b.operator === '>' && a.operator === '>=' ? b\n : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp < 0 ? a\n : comp > 0 ? b\n : b.operator === '<' && a.operator === '<=' ? b\n : a\n}\n\nmodule.exports = subset\n","// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n parse,\n valid,\n clean,\n inc,\n diff,\n major,\n minor,\n patch,\n prerelease,\n compare,\n rcompare,\n compareLoose,\n compareBuild,\n sort,\n rsort,\n gt,\n lt,\n eq,\n neq,\n gte,\n lte,\n cmp,\n coerce,\n Comparator,\n Range,\n satisfies,\n toComparators,\n maxSatisfying,\n minSatisfying,\n minVersion,\n validRange,\n outside,\n gtr,\n ltr,\n intersects,\n simplifyRange,\n subset,\n SemVer,\n re: internalRe.re,\n src: internalRe.src,\n tokens: internalRe.t,\n SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n RELEASE_TYPES: constants.RELEASE_TYPES,\n compareIdentifiers: identifiers.compareIdentifiers,\n rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n","import semver from 'semver';\n\nexport const hasAnUpdateAvailable = (latestVersion, currentVersion) => {\n if (!semver.valid(latestVersion)) {\n return false;\n }\n return semver.lt(currentVersion, latestVersion);\n};\n","<script>\nimport Banner from 'dashboard/components/ui/Banner.vue';\nimport { LOCAL_STORAGE_KEYS } from 'dashboard/constants/localStorage';\nimport { LocalStorage } from 'shared/helpers/localStorage';\nimport { mapGetters } from 'vuex';\nimport { useAdmin } from 'dashboard/composables/useAdmin';\nimport { hasAnUpdateAvailable } from './versionCheckHelper';\n\nexport default {\n components: { Banner },\n props: {\n latestChatwootVersion: { type: String, default: '' },\n },\n setup() {\n const { isAdmin } = useAdmin();\n return {\n isAdmin,\n };\n },\n data() {\n return { userDismissedBanner: false };\n },\n computed: {\n ...mapGetters({ globalConfig: 'globalConfig/get' }),\n updateAvailable() {\n return hasAnUpdateAvailable(\n this.latestChatwootVersion,\n this.globalConfig.appVersion\n );\n },\n bannerMessage() {\n return this.$t('GENERAL_SETTINGS.UPDATE_CHATWOOT', {\n latestChatwootVersion: this.latestChatwootVersion,\n });\n },\n shouldShowBanner() {\n return (\n !this.userDismissedBanner &&\n this.globalConfig.displayManifest &&\n this.updateAvailable &&\n !this.isVersionNotificationDismissed(this.latestChatwootVersion) &&\n this.isAdmin\n );\n },\n },\n methods: {\n isVersionNotificationDismissed(version) {\n const dismissedVersions =\n LocalStorage.get(LOCAL_STORAGE_KEYS.DISMISSED_UPDATES) || [];\n return dismissedVersions.includes(version);\n },\n dismissUpdateBanner() {\n let updatedDismissedItems =\n LocalStorage.get(LOCAL_STORAGE_KEYS.DISMISSED_UPDATES) || [];\n if (updatedDismissedItems instanceof Array) {\n updatedDismissedItems.push(this.latestChatwootVersion);\n } else {\n updatedDismissedItems = [this.latestChatwootVersion];\n }\n LocalStorage.set(\n LOCAL_STORAGE_KEYS.DISMISSED_UPDATES,\n updatedDismissedItems\n );\n this.userDismissedBanner = true;\n },\n },\n};\n</script>\n\n<!-- eslint-disable-next-line vue/no-root-v-if -->\n<template>\n <Banner\n v-if=\"shouldShowBanner\"\n color-scheme=\"primary\"\n :banner-message=\"bannerMessage\"\n href-link=\"https://github.com/chatwoot/chatwoot/releases\"\n :href-link-text=\"$t('GENERAL_SETTINGS.LEARN_MORE')\"\n has-close-button\n @close=\"dismissUpdateBanner\"\n />\n</template>\n","import { computed } from 'vue';\nimport { useRoute } from 'vue-router';\nimport { useMapGetter } from './store';\n\n/**\n * Composable for account-related operations.\n * @returns {Object} An object containing account-related properties and methods.\n */\nexport function useAccount() {\n /**\n * Computed property for the current account ID.\n * @type {import('vue').ComputedRef<number>}\n */\n const route = useRoute();\n const getAccountFn = useMapGetter('accounts/getAccount');\n const isOnChatwootCloud = useMapGetter('globalConfig/isOnChatwootCloud');\n const isFeatureEnabledonAccount = useMapGetter(\n 'accounts/isFeatureEnabledonAccount'\n );\n\n const accountId = computed(() => {\n return Number(route.params.accountId);\n });\n const currentAccount = computed(() => getAccountFn.value(accountId.value));\n\n /**\n * Generates an account-scoped URL.\n * @param {string} url - The URL to be scoped to the account.\n * @returns {string} The account-scoped URL.\n */\n const accountScopedUrl = url => {\n return `/app/accounts/${accountId.value}/${url}`;\n };\n\n const isCloudFeatureEnabled = feature => {\n return isFeatureEnabledonAccount.value(currentAccount.value.id, feature);\n };\n\n const accountScopedRoute = (name, params, query) => {\n return {\n name,\n params: { accountId: accountId.value, ...params },\n query: { ...query },\n };\n };\n\n return {\n accountId,\n route,\n currentAccount,\n accountScopedUrl,\n accountScopedRoute,\n isCloudFeatureEnabled,\n isOnChatwootCloud,\n };\n}\n","<script>\nimport Banner from 'dashboard/components/ui/Banner.vue';\nimport { mapGetters } from 'vuex';\nimport { useAccount } from 'dashboard/composables/useAccount';\nimport { differenceInDays } from 'date-fns';\n\nexport default {\n components: { Banner },\n setup() {\n const { accountId } = useAccount();\n return {\n accountId,\n };\n },\n data() {\n return { conversationMeta: {} };\n },\n computed: {\n ...mapGetters({\n isOnChatwootCloud: 'globalConfig/isOnChatwootCloud',\n getAccount: 'accounts/getAccount',\n }),\n bannerMessage() {\n return this.$t('GENERAL_SETTINGS.LIMITS_UPGRADE');\n },\n actionButtonMessage() {\n return this.$t('GENERAL_SETTINGS.OPEN_BILLING');\n },\n shouldShowBanner() {\n if (!this.isOnChatwootCloud) {\n return false;\n }\n\n if (this.isTrialAccount()) {\n return false;\n }\n\n return this.isLimitExceeded();\n },\n },\n mounted() {\n if (this.isOnChatwootCloud) {\n this.fetchLimits();\n }\n },\n methods: {\n fetchLimits() {\n this.$store.dispatch('accounts/limits');\n },\n routeToBilling() {\n this.$router.push({\n name: 'billing_settings_index',\n params: { accountId: this.accountId },\n });\n },\n isTrialAccount() {\n // check if account is less than 15 days old\n const account = this.getAccount(this.accountId);\n if (!account) return false;\n\n const createdAt = new Date(account.created_at);\n\n const diffDays = differenceInDays(new Date(), createdAt);\n\n return diffDays <= 15;\n },\n isLimitExceeded() {\n const account = this.getAccount(this.accountId);\n if (!account) return false;\n\n const { limits } = account;\n if (!limits) return false;\n\n const { conversation, non_web_inboxes: nonWebInboxes } = limits;\n return this.testLimit(conversation) || this.testLimit(nonWebInboxes);\n },\n testLimit({ allowed, consumed }) {\n return consumed > allowed;\n },\n },\n};\n</script>\n\n<!-- eslint-disable-next-line vue/no-root-v-if -->\n<template>\n <Banner\n v-if=\"shouldShowBanner\"\n color-scheme=\"alert\"\n :banner-message=\"bannerMessage\"\n :action-button-label=\"actionButtonMessage\"\n has-action-button\n @primary-action=\"routeToBilling\"\n />\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useAdmin } from 'dashboard/composables/useAdmin';\nimport { useAccount } from 'dashboard/composables/useAccount';\nimport Banner from 'dashboard/components/ui/Banner.vue';\n\nconst EMPTY_SUBSCRIPTION_INFO = {\n status: null,\n endsOn: null,\n};\n\nexport default {\n components: { Banner },\n setup() {\n const { isAdmin } = useAdmin();\n\n const { accountId } = useAccount();\n\n return {\n accountId,\n isAdmin,\n };\n },\n computed: {\n ...mapGetters({\n isOnChatwootCloud: 'globalConfig/isOnChatwootCloud',\n getAccount: 'accounts/getAccount',\n }),\n bannerMessage() {\n return this.$t('GENERAL_SETTINGS.PAYMENT_PENDING');\n },\n actionButtonMessage() {\n return this.$t('GENERAL_SETTINGS.OPEN_BILLING');\n },\n shouldShowBanner() {\n if (!this.isOnChatwootCloud) {\n return false;\n }\n\n if (!this.isAdmin) {\n return false;\n }\n\n return this.isPaymentPending();\n },\n },\n methods: {\n routeToBilling() {\n this.$router.push({\n name: 'billing_settings_index',\n params: { accountId: this.accountId },\n });\n },\n isPaymentPending() {\n const { status, endsOn } = this.getSubscriptionInfo();\n\n if (status && endsOn) {\n const now = new Date();\n if (status === 'past_due' && endsOn < now) {\n return true;\n }\n }\n\n return false;\n },\n getSubscriptionInfo() {\n const account = this.getAccount(this.accountId);\n if (!account) return EMPTY_SUBSCRIPTION_INFO;\n\n const { custom_attributes: subscription } = account;\n if (!subscription) return EMPTY_SUBSCRIPTION_INFO;\n\n const { subscription_status: status, subscription_ends_on: endsOn } =\n subscription;\n\n return { status, endsOn: new Date(endsOn) };\n },\n },\n};\n</script>\n\n<!-- eslint-disable-next-line vue/no-root-v-if -->\n<template>\n <Banner\n v-if=\"shouldShowBanner\"\n color-scheme=\"alert\"\n :banner-message=\"bannerMessage\"\n :action-button-label=\"actionButtonMessage\"\n has-action-button\n @primary-action=\"routeToBilling\"\n />\n</template>\n","<script>\nimport Banner from 'dashboard/components/ui/Banner.vue';\nimport { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\n\nexport default {\n components: { Banner },\n computed: {\n ...mapGetters({\n currentUser: 'getCurrentUser',\n }),\n bannerMessage() {\n return this.$t('APP_GLOBAL.EMAIL_VERIFICATION_PENDING');\n },\n actionButtonMessage() {\n return this.$t('APP_GLOBAL.RESEND_VERIFICATION_MAIL');\n },\n shouldShowBanner() {\n return !this.currentUser.confirmed;\n },\n },\n methods: {\n resendVerificationEmail() {\n this.$store.dispatch('resendConfirmation');\n useAlert(this.$t('APP_GLOBAL.EMAIL_VERIFICATION_SENT'));\n },\n },\n};\n</script>\n\n<!-- eslint-disable-next-line vue/no-root-v-if -->\n<template>\n <Banner\n v-if=\"shouldShowBanner\"\n color-scheme=\"alert\"\n :banner-message=\"bannerMessage\"\n :action-button-label=\"actionButtonMessage\"\n action-button-icon=\"mail\"\n has-action-button\n @primary-action=\"resendVerificationEmail\"\n />\n</template>\n","import AuthAPI from '../api/auth';\nimport BaseActionCableConnector from '../../shared/helpers/BaseActionCableConnector';\nimport DashboardAudioNotificationHelper from './AudioAlerts/DashboardAudioNotificationHelper';\nimport { BUS_EVENTS } from 'shared/constants/busEvents';\nimport { emitter } from 'shared/helpers/mitt';\n\nclass ActionCableConnector extends BaseActionCableConnector {\n constructor(app, pubsubToken) {\n const { websocketURL = '' } = window.chatwootConfig || {};\n super(app, pubsubToken, websocketURL);\n this.CancelTyping = [];\n this.events = {\n 'message.created': this.onMessageCreated,\n 'message.updated': this.onMessageUpdated,\n 'conversation.created': this.onConversationCreated,\n 'conversation.status_changed': this.onStatusChange,\n 'user:logout': this.onLogout,\n 'page:reload': this.onReload,\n 'assignee.changed': this.onAssigneeChanged,\n 'conversation.typing_on': this.onTypingOn,\n 'conversation.typing_off': this.onTypingOff,\n 'conversation.contact_changed': this.onConversationContactChange,\n 'presence.update': this.onPresenceUpdate,\n 'contact.deleted': this.onContactDelete,\n 'contact.updated': this.onContactUpdate,\n 'conversation.mentioned': this.onConversationMentioned,\n 'notification.created': this.onNotificationCreated,\n 'notification.deleted': this.onNotificationDeleted,\n 'notification.updated': this.onNotificationUpdated,\n 'conversation.read': this.onConversationRead,\n 'conversation.updated': this.onConversationUpdated,\n 'account.cache_invalidated': this.onCacheInvalidate,\n };\n }\n\n // eslint-disable-next-line class-methods-use-this\n onReconnect = () => {\n emitter.emit(BUS_EVENTS.WEBSOCKET_RECONNECT);\n };\n\n // eslint-disable-next-line class-methods-use-this\n onDisconnected = () => {\n emitter.emit(BUS_EVENTS.WEBSOCKET_DISCONNECT);\n };\n\n isAValidEvent = data => {\n return this.app.$store.getters.getCurrentAccountId === data.account_id;\n };\n\n onMessageUpdated = data => {\n this.app.$store.dispatch('updateMessage', data);\n };\n\n onPresenceUpdate = data => {\n this.app.$store.dispatch('contacts/updatePresence', data.contacts);\n this.app.$store.dispatch('agents/updatePresence', data.users);\n this.app.$store.dispatch('setCurrentUserAvailability', data.users);\n };\n\n onConversationContactChange = payload => {\n const { meta = {}, id: conversationId } = payload;\n const { sender } = meta || {};\n if (conversationId) {\n this.app.$store.dispatch('updateConversationContact', {\n conversationId,\n ...sender,\n });\n }\n };\n\n onAssigneeChanged = payload => {\n const { id } = payload;\n if (id) {\n this.app.$store.dispatch('updateConversation', payload);\n }\n this.fetchConversationStats();\n };\n\n onConversationCreated = data => {\n this.app.$store.dispatch('addConversation', data);\n this.fetchConversationStats();\n };\n\n onConversationRead = data => {\n this.app.$store.dispatch('updateConversation', data);\n };\n\n // eslint-disable-next-line class-methods-use-this\n onLogout = () => AuthAPI.logout();\n\n onMessageCreated = data => {\n const {\n conversation: { last_activity_at: lastActivityAt },\n conversation_id: conversationId,\n } = data;\n DashboardAudioNotificationHelper.onNewMessage(data);\n this.app.$store.dispatch('addMessage', data);\n this.app.$store.dispatch('updateConversationLastActivity', {\n lastActivityAt,\n conversationId,\n });\n };\n\n // eslint-disable-next-line class-methods-use-this\n onReload = () => window.location.reload();\n\n onStatusChange = data => {\n this.app.$store.dispatch('updateConversation', data);\n this.fetchConversationStats();\n };\n\n onConversationUpdated = data => {\n this.app.$store.dispatch('updateConversation', data);\n this.fetchConversationStats();\n };\n\n onTypingOn = ({ conversation, user }) => {\n const conversationId = conversation.id;\n\n this.clearTimer(conversationId);\n this.app.$store.dispatch('conversationTypingStatus/create', {\n conversationId,\n user,\n });\n this.initTimer({ conversation, user });\n };\n\n onTypingOff = ({ conversation, user }) => {\n const conversationId = conversation.id;\n\n this.clearTimer(conversationId);\n this.app.$store.dispatch('conversationTypingStatus/destroy', {\n conversationId,\n user,\n });\n };\n\n onConversationMentioned = data => {\n this.app.$store.dispatch('addMentions', data);\n };\n\n clearTimer = conversationId => {\n const timerEvent = this.CancelTyping[conversationId];\n\n if (timerEvent) {\n clearTimeout(timerEvent);\n this.CancelTyping[conversationId] = null;\n }\n };\n\n initTimer = ({ conversation, user }) => {\n const conversationId = conversation.id;\n // Turn off typing automatically after 30 seconds\n this.CancelTyping[conversationId] = setTimeout(() => {\n this.onTypingOff({ conversation, user });\n }, 30000);\n };\n\n // eslint-disable-next-line class-methods-use-this\n fetchConversationStats = () => {\n emitter.emit('fetch_conversation_stats');\n };\n\n onContactDelete = data => {\n this.app.$store.dispatch(\n 'contacts/deleteContactThroughConversations',\n data.id\n );\n this.fetchConversationStats();\n };\n\n onContactUpdate = data => {\n this.app.$store.dispatch('contacts/updateContact', data);\n };\n\n onNotificationCreated = data => {\n this.app.$store.dispatch('notifications/addNotification', data);\n };\n\n onNotificationDeleted = data => {\n this.app.$store.dispatch('notifications/deleteNotification', data);\n };\n\n onNotificationUpdated = data => {\n this.app.$store.dispatch('notifications/updateNotification', data);\n };\n\n onCacheInvalidate = data => {\n const keys = data.cache_keys;\n this.app.$store.dispatch('labels/revalidate', { newKey: keys.label });\n this.app.$store.dispatch('inboxes/revalidate', { newKey: keys.inbox });\n this.app.$store.dispatch('teams/revalidate', { newKey: keys.team });\n };\n}\n\nexport default {\n init(store, pubsubToken) {\n return new ActionCableConnector({ $store: store }, pubsubToken);\n },\n};\n","<script>\nexport default {\n props: {\n message: { type: String, default: '' },\n action: {\n type: Object,\n default: () => {},\n },\n },\n data() {\n return {\n toggleAfterTimeout: false,\n };\n },\n mounted() {},\n methods: {},\n};\n</script>\n\n<template>\n <div>\n <div\n class=\"shadow-sm bg-slate-800 dark:bg-slate-700 rounded-[4px] items-center gap-3 inline-flex mb-2 max-w-[25rem] min-h-[1.875rem] min-w-[15rem] px-6 py-3 text-left\"\n >\n <div class=\"text-sm font-medium text-white dark:text-white\">\n {{ message }}\n </div>\n <div v-if=\"action\">\n <router-link\n v-if=\"action.type == 'link'\"\n :to=\"action.to\"\n class=\"font-medium cursor-pointer select-none text-woot-500 dark:text-woot-500 hover:text-woot-600 dark:hover:text-woot-600\"\n >\n {{ action.message }}\n </router-link>\n </div>\n </div>\n </div>\n</template>\n","<script>\nimport WootSnackbar from './Snackbar.vue';\nimport { emitter } from 'shared/helpers/mitt';\n\nexport default {\n components: {\n WootSnackbar,\n },\n props: {\n duration: {\n type: Number,\n default: 2500,\n },\n },\n\n data() {\n return {\n snackMessages: [],\n };\n },\n\n mounted() {\n emitter.on('newToastMessage', this.onNewToastMessage);\n },\n unmounted() {\n emitter.off('newToastMessage', this.onNewToastMessage);\n },\n methods: {\n onNewToastMessage({ message: originalMessage, action }) {\n // FIX ME: This is a temporary workaround to pass string from functions\n // that doesn't have the context of the VueApp.\n const usei18n = action?.usei18n;\n const duration = action?.duration || this.duration;\n const message = usei18n ? this.$t(originalMessage) : originalMessage;\n\n this.snackMessages.push({\n key: new Date().getTime(),\n message,\n action,\n });\n window.setTimeout(() => {\n this.snackMessages.splice(0, 1);\n }, duration);\n },\n },\n};\n</script>\n\n<template>\n <transition-group\n name=\"toast-fade\"\n tag=\"div\"\n class=\"left-0 my-0 mx-auto max-w-[25rem] overflow-hidden absolute right-0 text-center top-4 z-[9999]\"\n >\n <WootSnackbar\n v-for=\"snackMessage in snackMessages\"\n :key=\"snackMessage.key\"\n :message=\"snackMessage.message\"\n :action=\"snackMessage.action\"\n />\n </transition-group>\n</template>\n","import { LocalStorage } from 'shared/helpers/localStorage';\nimport { LOCAL_STORAGE_KEYS } from 'dashboard/constants/localStorage';\n\nexport const setColorTheme = isOSOnDarkMode => {\n const selectedColorScheme =\n LocalStorage.get(LOCAL_STORAGE_KEYS.COLOR_SCHEME) || 'auto';\n if (\n (selectedColorScheme === 'auto' && isOSOnDarkMode) ||\n selectedColorScheme === 'dark'\n ) {\n document.body.classList.add('dark');\n document.documentElement.style.setProperty('color-scheme', 'dark');\n } else {\n document.body.classList.remove('dark');\n document.documentElement.style.setProperty('color-scheme', 'light');\n }\n};\n","import { computed } from 'vue';\nimport { useStore, useStoreGetters } from 'dashboard/composables/store';\n\nexport const DEFAULT_CONVERSATION_SIDEBAR_ITEMS_ORDER = Object.freeze([\n { name: 'conversation_actions' },\n { name: 'macros' },\n { name: 'conversation_info' },\n { name: 'contact_attributes' },\n { name: 'previous_conversation' },\n { name: 'conversation_participants' },\n { name: 'shopify_orders' },\n]);\n\nexport const DEFAULT_CONTACT_SIDEBAR_ITEMS_ORDER = Object.freeze([\n { name: 'contact_attributes' },\n { name: 'contact_labels' },\n { name: 'previous_conversation' },\n]);\n\n/**\n * Slugifies the channel name.\n * Replaces spaces, hyphens, and double colons with underscores.\n * @param {string} name - The channel name to slugify.\n * @returns {string} The slugified channel name.\n */\nconst slugifyChannel = name =>\n name?.toLowerCase().replace(' ', '_').replace('-', '_').replace('::', '_');\n\n/**\n * Computes the order of items in the conversation sidebar, using defaults if not present.\n * @param {Object} uiSettings - Reactive UI settings object.\n * @returns {Array} Ordered list of sidebar items.\n */\nconst useConversationSidebarItemsOrder = uiSettings => {\n return computed(() => {\n const { conversation_sidebar_items_order: itemsOrder } = uiSettings.value;\n // If the sidebar order is not set, use the default order.\n if (!itemsOrder) {\n return DEFAULT_CONVERSATION_SIDEBAR_ITEMS_ORDER;\n }\n // Create a copy of itemsOrder to avoid mutating the original store object.\n const itemsOrderCopy = [...itemsOrder];\n // If the sidebar order doesn't have the new elements, then add them to the list.\n DEFAULT_CONVERSATION_SIDEBAR_ITEMS_ORDER.forEach(item => {\n if (!itemsOrderCopy.find(i => i.name === item.name)) {\n itemsOrderCopy.push(item);\n }\n });\n return itemsOrderCopy;\n });\n};\n\n/**\n * Computes the order of items in the contact sidebar,using defaults if not present.\n * @param {Object} uiSettings - Reactive UI settings object.\n * @returns {Array} Ordered list of sidebar items.\n */\nconst useContactSidebarItemsOrder = uiSettings => {\n return computed(() => {\n const { contact_sidebar_items_order: itemsOrder } = uiSettings.value;\n return itemsOrder || DEFAULT_CONTACT_SIDEBAR_ITEMS_ORDER;\n });\n};\n\n/**\n * Toggles the open state of a sidebar item.\n * @param {string} key - The key of the sidebar item to toggle.\n * @param {Object} uiSettings - Reactive UI settings object.\n * @param {Function} updateUISettings - Function to update UI settings.\n */\nconst toggleSidebarUIState = (key, uiSettings, updateUISettings) => {\n updateUISettings({ [key]: !uiSettings.value[key] });\n};\n\n/**\n * Sets the signature flag for a specific channel type in the inbox settings.\n * @param {string} channelType - The type of the channel.\n * @param {boolean} value - The value to set for the signature enabled flag.\n * @param {Function} updateUISettings - Function to update UI settings.\n */\nconst setSignatureFlagForInbox = (channelType, value, updateUISettings) => {\n if (!channelType) return;\n\n const slugifiedChannel = slugifyChannel(channelType);\n updateUISettings({ [`${slugifiedChannel}_signature_enabled`]: value });\n};\n\n/**\n * Fetches the signature flag for a specific channel type from UI settings.\n * @param {string} channelType - The type of the channel.\n * @param {Object} uiSettings - Reactive UI settings object.\n * @returns {boolean} The value of the signature enabled flag.\n */\nconst fetchSignatureFlagFromUISettings = (channelType, uiSettings) => {\n if (!channelType) return false;\n\n const slugifiedChannel = slugifyChannel(channelType);\n return uiSettings.value[`${slugifiedChannel}_signature_enabled`];\n};\n\n/**\n * Checks if a specific editor hotkey is enabled.\n * @param {string} key - The key to check.\n * @param {Object} uiSettings - Reactive UI settings object.\n * @returns {boolean} True if the hotkey is enabled, otherwise false.\n */\nconst isEditorHotKeyEnabled = (key, uiSettings) => {\n const {\n editor_message_key: editorMessageKey,\n enter_to_send_enabled: enterToSendEnabled,\n } = uiSettings.value || {};\n if (!editorMessageKey) {\n return key === (enterToSendEnabled ? 'enter' : 'cmd_enter');\n }\n return editorMessageKey === key;\n};\n\n/**\n * Main composable function for managing UI settings.\n * @returns {Object} An object containing reactive properties and methods for UI settings management.\n */\nexport function useUISettings() {\n const getters = useStoreGetters();\n const store = useStore();\n const uiSettings = computed(() => getters.getUISettings.value);\n\n const updateUISettings = (settings = {}) => {\n store.dispatch('updateUISettings', {\n uiSettings: {\n ...uiSettings.value,\n ...settings,\n },\n });\n };\n\n return {\n uiSettings,\n updateUISettings,\n conversationSidebarItemsOrder: useConversationSidebarItemsOrder(uiSettings),\n contactSidebarItemsOrder: useContactSidebarItemsOrder(uiSettings),\n isContactSidebarItemOpen: key => !!uiSettings.value[key],\n toggleSidebarUIState: key =>\n toggleSidebarUIState(key, uiSettings, updateUISettings),\n setSignatureFlagForInbox: (channelType, value) =>\n setSignatureFlagForInbox(channelType, value, updateUISettings),\n fetchSignatureFlagFromUISettings: channelType =>\n fetchSignatureFlagFromUISettings(channelType, uiSettings),\n isEditorHotKeyEnabled: key => isEditorHotKeyEnabled(key, uiSettings),\n };\n}\n","/**\n * @file useFontSize.js\n * @description A composable for managing font size settings throughout the application.\n * This handles font size selection, application to the DOM, and persistence in user settings.\n */\n\nimport { computed, watch } from 'vue';\nimport { useUISettings } from 'dashboard/composables/useUISettings';\nimport { useAlert } from 'dashboard/composables';\nimport { useI18n } from 'vue-i18n';\n\n/**\n * Font size options with their pixel values\n * @type {Object}\n */\nconst FONT_SIZE_OPTIONS = {\n SMALLER: '14px',\n SMALL: '15px',\n DEFAULT: '16px',\n LARGE: '18px',\n LARGER: '20px',\n EXTRA_LARGE: '22px',\n};\n\n/**\n * Array of font size option keys\n * @type {Array<string>}\n */\nconst FONT_SIZE_NAMES = Object.keys(FONT_SIZE_OPTIONS);\n\n/**\n * Get font size label translation key\n *\n * @param {string} name - Font size name\n * @returns {string} Translation key\n */\nconst getFontSizeLabelKey = name =>\n `PROFILE_SETTINGS.FORM.INTERFACE_SECTION.FONT_SIZE.OPTIONS.${name}`;\n\n/**\n * Create font size option object\n *\n * @param {Function} t - Translation function\n * @param {string} name - Font size name\n * @returns {Object} Font size option with value and label\n */\nconst createFontSizeOption = (t, name) => ({\n value: FONT_SIZE_OPTIONS[name],\n label: t(getFontSizeLabelKey(name)),\n});\n\n/**\n * Apply font size value to document root\n *\n * @param {string} pixelValue - Font size value in pixels\n */\nconst applyFontSizeToDOM = pixelValue => {\n document.documentElement.style.setProperty(\n 'font-size',\n pixelValue ?? FONT_SIZE_OPTIONS.DEFAULT\n );\n};\n\n/**\n * Font size management composable\n *\n * @returns {Object} Font size utilities and state\n * @property {Array} fontSizeOptions - Array of font size options for select components\n * @property {import('vue').ComputedRef<string>} currentFontSize - Current font size from UI settings\n * @property {Function} applyFontSize - Function to apply font size to document\n * @property {Function} updateFontSize - Function to update font size in settings with alert feedback\n */\nexport const useFontSize = () => {\n const { uiSettings, updateUISettings } = useUISettings();\n const { t } = useI18n();\n\n /**\n * Font size options for select dropdown\n * @type {Array<{value: string, label: string}>}\n */\n const fontSizeOptions = FONT_SIZE_NAMES.map(name =>\n createFontSizeOption(t, name)\n );\n\n /**\n * Current font size from UI settings\n * @type {import('vue').ComputedRef<string>}\n */\n const currentFontSize = computed(\n () => uiSettings.value.font_size || FONT_SIZE_OPTIONS.DEFAULT\n );\n\n /**\n * Apply font size to document root\n * @param {string} pixelValue - Font size in pixels (e.g., '16px')\n * @returns {void}\n */\n const applyFontSize = pixelValue => {\n // Use requestAnimationFrame for better performance\n requestAnimationFrame(() => applyFontSizeToDOM(pixelValue));\n };\n\n /**\n * Update font size in settings and apply to document\n * Shows success/error alerts\n * @param {string} pixelValue - Font size in pixels (e.g., '16px')\n * @returns {Promise<void>}\n */\n const updateFontSize = async pixelValue => {\n try {\n await updateUISettings({ font_size: pixelValue });\n applyFontSize(pixelValue);\n useAlert(\n t('PROFILE_SETTINGS.FORM.INTERFACE_SECTION.FONT_SIZE.UPDATE_SUCCESS')\n );\n } catch (error) {\n useAlert(\n t('PROFILE_SETTINGS.FORM.INTERFACE_SECTION.FONT_SIZE.UPDATE_ERROR')\n );\n }\n };\n\n // Watch for changes to the font size in UI settings\n watch(\n () => uiSettings.value.font_size,\n newSize => {\n applyFontSize(newSize);\n },\n { immediate: true }\n );\n\n return {\n fontSizeOptions,\n currentFontSize,\n applyFontSize,\n updateFontSize,\n };\n};\n\nexport default useFontSize;\n","import ApiClient from './ApiClient';\n\nclass NotificationSubscriptions extends ApiClient {\n constructor() {\n super('notification_subscriptions');\n }\n}\n\nexport default new NotificationSubscriptions();\n","/* eslint-disable no-console */\nimport NotificationSubscriptions from '../api/notificationSubscription';\nimport auth from '../api/auth';\nimport { useAlert } from 'dashboard/composables';\n\nexport const verifyServiceWorkerExistence = (callback = () => {}) => {\n if (!('serviceWorker' in navigator)) {\n // Service Worker isn't supported on this browser, disable or hide UI.\n return;\n }\n\n if (!('PushManager' in window)) {\n // Push isn't supported on this browser, disable or hide UI.\n return;\n }\n\n navigator.serviceWorker\n .register('/sw.js')\n .then(registration => callback(registration))\n .catch(registrationError => {\n // eslint-disable-next-line\n console.log('SW registration failed: ', registrationError);\n });\n};\n\nexport const hasPushPermissions = () => {\n if ('Notification' in window) {\n return Notification.permission === 'granted';\n }\n return false;\n};\n\nconst generateKeys = str =>\n btoa(String.fromCharCode.apply(null, new Uint8Array(str)))\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_');\n\nexport const getPushSubscriptionPayload = subscription => ({\n subscription_type: 'browser_push',\n subscription_attributes: {\n endpoint: subscription.endpoint,\n p256dh: generateKeys(subscription.getKey('p256dh')),\n auth: generateKeys(subscription.getKey('auth')),\n },\n});\n\nexport const sendRegistrationToServer = subscription => {\n if (auth.hasAuthCookie()) {\n return NotificationSubscriptions.create(\n getPushSubscriptionPayload(subscription)\n );\n }\n return null;\n};\n\nexport const registerSubscription = (onSuccess = () => {}) => {\n if (!window.chatwootConfig.vapidPublicKey) {\n return;\n }\n navigator.serviceWorker.ready\n .then(serviceWorkerRegistration =>\n serviceWorkerRegistration.pushManager.subscribe({\n userVisibleOnly: true,\n applicationServerKey: window.chatwootConfig.vapidPublicKey,\n })\n )\n .then(sendRegistrationToServer)\n .then(() => {\n onSuccess();\n })\n .catch(() => {\n useAlert('This browser does not support desktop notification');\n });\n};\n\nexport const requestPushPermissions = ({ onSuccess }) => {\n if (!('Notification' in window)) {\n useAlert('This browser does not support desktop notification');\n } else if (Notification.permission === 'granted') {\n registerSubscription(onSuccess);\n } else if (Notification.permission !== 'denied') {\n Notification.requestPermission(permission => {\n if (permission === 'granted') {\n registerSubscription(onSuccess);\n }\n });\n }\n};\n","import { emitter } from 'shared/helpers/mitt';\nimport { BUS_EVENTS } from 'shared/constants/busEvents';\nimport { differenceInSeconds } from 'date-fns';\nimport {\n isAConversationRoute,\n isAInboxViewRoute,\n isNotificationRoute,\n} from 'dashboard/helper/routeHelpers';\n\nconst MAX_DISCONNECT_SECONDS = 10800;\n\n// The disconnect delay threshold is added to account for delays in identifying\n// disconnections (for example, the websocket disconnection takes up to 3 seconds)\n// while fetching the latest updated conversations or messages.\nconst DISCONNECT_DELAY_THRESHOLD = 15;\n\nclass ReconnectService {\n constructor(store, router) {\n this.store = store;\n this.router = router;\n this.disconnectTime = null;\n\n this.setupEventListeners();\n }\n\n disconnect = () => this.removeEventListeners();\n\n setupEventListeners = () => {\n window.addEventListener('online', this.handleOnlineEvent);\n emitter.on(BUS_EVENTS.WEBSOCKET_RECONNECT, this.onReconnect);\n emitter.on(BUS_EVENTS.WEBSOCKET_DISCONNECT, this.onDisconnect);\n };\n\n removeEventListeners = () => {\n window.removeEventListener('online', this.handleOnlineEvent);\n emitter.off(BUS_EVENTS.WEBSOCKET_RECONNECT, this.onReconnect);\n emitter.off(BUS_EVENTS.WEBSOCKET_DISCONNECT, this.onDisconnect);\n };\n\n getSecondsSinceDisconnect = () =>\n this.disconnectTime\n ? Math.max(differenceInSeconds(new Date(), this.disconnectTime), 0)\n : 0;\n\n // Force reload if the user is disconnected for more than 3 hours\n handleOnlineEvent = () => {\n if (this.getSecondsSinceDisconnect() >= MAX_DISCONNECT_SECONDS) {\n window.location.reload();\n }\n };\n\n fetchConversations = async () => {\n await this.store.dispatch('updateChatListFilters', {\n page: null,\n updatedWithin:\n this.getSecondsSinceDisconnect() + DISCONNECT_DELAY_THRESHOLD,\n });\n await this.store.dispatch('fetchAllConversations');\n // Reset the updatedWithin in the store chat list filter after fetching conversations when the user is reconnected\n await this.store.dispatch('updateChatListFilters', {\n updatedWithin: null,\n });\n };\n\n fetchFilteredOrSavedConversations = async queryData => {\n await this.store.dispatch('fetchFilteredConversations', {\n queryData,\n page: 1,\n });\n };\n\n fetchConversationsOnReconnect = async () => {\n const {\n getAppliedConversationFiltersQuery,\n 'customViews/getActiveConversationFolder': activeFolder,\n } = this.store.getters;\n const query = getAppliedConversationFiltersQuery?.payload?.length\n ? getAppliedConversationFiltersQuery\n : activeFolder?.query;\n if (query) {\n await this.fetchFilteredOrSavedConversations(query);\n } else {\n await this.fetchConversations();\n }\n };\n\n fetchConversationMessagesOnReconnect = async () => {\n const { conversation_id: conversationId } =\n this.router.currentRoute.value.params;\n if (conversationId) {\n await this.store.dispatch('syncActiveConversationMessages', {\n conversationId: Number(conversationId),\n });\n }\n };\n\n fetchNotificationsOnReconnect = async filter => {\n await this.store.dispatch('notifications/index', { ...filter, page: 1 });\n };\n\n revalidateCaches = async () => {\n const { label, inbox, team } = await this.store.dispatch(\n 'accounts/getCacheKeys'\n );\n await Promise.all([\n this.store.dispatch('labels/revalidate', { newKey: label }),\n this.store.dispatch('inboxes/revalidate', { newKey: inbox }),\n this.store.dispatch('teams/revalidate', { newKey: team }),\n ]);\n };\n\n handleRouteSpecificFetch = async () => {\n const currentRoute = this.router.currentRoute.value.name;\n if (isAConversationRoute(currentRoute, true)) {\n await this.fetchConversationsOnReconnect();\n await this.fetchConversationMessagesOnReconnect();\n } else if (isAInboxViewRoute(currentRoute, true)) {\n await this.fetchNotificationsOnReconnect(\n this.store.getters['notifications/getNotificationFilters']\n );\n } else if (isNotificationRoute(currentRoute)) {\n await this.fetchNotificationsOnReconnect();\n }\n };\n\n setConversationLastMessageId = async () => {\n const { conversation_id: conversationId } =\n this.router.currentRoute.value.params;\n if (conversationId) {\n await this.store.dispatch('setConversationLastMessageId', {\n conversationId: Number(conversationId),\n });\n }\n };\n\n onDisconnect = () => {\n this.disconnectTime = new Date();\n this.setConversationLastMessageId();\n };\n\n onReconnect = async () => {\n await this.handleRouteSpecificFetch();\n await this.revalidateCaches();\n emitter.emit(BUS_EVENTS.WEBSOCKET_RECONNECT_COMPLETED);\n };\n}\n\nexport default ReconnectService;\n","<script>\nimport { mapGetters } from 'vuex';\nimport AddAccountModal from '../dashboard/components/layout/sidebarComponents/AddAccountModal.vue';\nimport LoadingState from './components/widgets/LoadingState.vue';\nimport NetworkNotification from './components/NetworkNotification.vue';\nimport UpdateBanner from './components/app/UpdateBanner.vue';\nimport UpgradeBanner from './components/app/UpgradeBanner.vue';\nimport PaymentPendingBanner from './components/app/PaymentPendingBanner.vue';\nimport PendingEmailVerificationBanner from './components/app/PendingEmailVerificationBanner.vue';\nimport vueActionCable from './helper/actionCable';\nimport { useRouter } from 'vue-router';\nimport { useStore } from 'dashboard/composables/store';\nimport WootSnackbarBox from './components/SnackbarContainer.vue';\nimport { setColorTheme } from './helper/themeHelper';\nimport { isOnOnboardingView } from 'v3/helpers/RouteHelper';\nimport { useAccount } from 'dashboard/composables/useAccount';\nimport { useFontSize } from 'dashboard/composables/useFontSize';\nimport {\n registerSubscription,\n verifyServiceWorkerExistence,\n} from './helper/pushHelper';\nimport ReconnectService from 'dashboard/helper/ReconnectService';\n\nexport default {\n name: 'App',\n\n components: {\n AddAccountModal,\n LoadingState,\n NetworkNotification,\n UpdateBanner,\n PaymentPendingBanner,\n WootSnackbarBox,\n UpgradeBanner,\n PendingEmailVerificationBanner,\n },\n setup() {\n const router = useRouter();\n const store = useStore();\n const { accountId } = useAccount();\n // Use the font size composable (it automatically sets up the watcher)\n const { currentFontSize } = useFontSize();\n\n return {\n router,\n store,\n currentAccountId: accountId,\n currentFontSize,\n };\n },\n data() {\n return {\n showAddAccountModal: false,\n latestChatwootVersion: null,\n reconnectService: null,\n };\n },\n computed: {\n ...mapGetters({\n getAccount: 'accounts/getAccount',\n isRTL: 'accounts/isRTL',\n currentUser: 'getCurrentUser',\n authUIFlags: 'getAuthUIFlags',\n accountUIFlags: 'accounts/getUIFlags',\n }),\n hasAccounts() {\n const { accounts = [] } = this.currentUser || {};\n return accounts.length > 0;\n },\n hideOnOnboardingView() {\n return !isOnOnboardingView(this.$route);\n },\n },\n\n watch: {\n currentUser() {\n if (!this.hasAccounts) {\n this.showAddAccountModal = true;\n }\n },\n currentAccountId: {\n immediate: true,\n handler() {\n if (this.currentAccountId) {\n this.initializeAccount();\n }\n },\n },\n },\n mounted() {\n this.initializeColorTheme();\n this.listenToThemeChanges();\n this.setLocale(window.chatwootConfig.selectedLocale);\n },\n unmounted() {\n if (this.reconnectService) {\n this.reconnectService.disconnect();\n }\n },\n methods: {\n initializeColorTheme() {\n setColorTheme(window.matchMedia('(prefers-color-scheme: dark)').matches);\n },\n listenToThemeChanges() {\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n mql.onchange = e => setColorTheme(e.matches);\n },\n setLocale(locale) {\n this.$root.$i18n.locale = locale;\n },\n async initializeAccount() {\n await this.$store.dispatch('accounts/get');\n this.$store.dispatch('setActiveAccount', {\n accountId: this.currentAccountId,\n });\n const { locale, latest_chatwoot_version: latestChatwootVersion } =\n this.getAccount(this.currentAccountId);\n const { pubsub_token: pubsubToken } = this.currentUser || {};\n this.setLocale(locale);\n this.latestChatwootVersion = latestChatwootVersion;\n vueActionCable.init(this.store, pubsubToken);\n this.reconnectService = new ReconnectService(this.store, this.router);\n window.reconnectService = this.reconnectService;\n\n verifyServiceWorkerExistence(registration =>\n registration.pushManager.getSubscription().then(subscription => {\n if (subscription) {\n registerSubscription();\n }\n })\n );\n },\n },\n};\n</script>\n\n<template>\n <div\n v-if=\"!authUIFlags.isFetching && !accountUIFlags.isFetchingItem\"\n id=\"app\"\n class=\"flex-grow-0 w-full h-full min-h-0 app-wrapper\"\n :class=\"{ 'app-rtl--wrapper': isRTL }\"\n :dir=\"isRTL ? 'rtl' : 'ltr'\"\n >\n <UpdateBanner :latest-chatwoot-version=\"latestChatwootVersion\" />\n <template v-if=\"currentAccountId\">\n <PendingEmailVerificationBanner v-if=\"hideOnOnboardingView\" />\n <PaymentPendingBanner v-if=\"hideOnOnboardingView\" />\n <UpgradeBanner />\n </template>\n <router-view v-slot=\"{ Component }\">\n <transition name=\"fade\" mode=\"out-in\">\n <component :is=\"Component\" />\n </transition>\n </router-view>\n <AddAccountModal :show=\"showAddAccountModal\" :has-accounts=\"hasAccounts\" />\n <WootSnackbarBox />\n <NetworkNotification />\n </div>\n <LoadingState v-else />\n</template>\n\n<style lang=\"scss\">\n@import './assets/scss/app';\n\n.v-popper--theme-tooltip .v-popper__inner {\n background: black !important;\n font-size: 0.75rem;\n padding: 4px 8px !important;\n border-radius: 6px;\n font-weight: 400;\n}\n\n.v-popper--theme-tooltip .v-popper__arrow-container {\n display: none;\n}\n\n.multiselect__input {\n margin-bottom: 0px !important;\n}\n</style>\n\n<style src=\"vue-multiselect/dist/vue-multiselect.css\"></style>\n","import Auth from '../api/auth';\n\nconst parseErrorCode = error => Promise.reject(error);\n\nexport default axios => {\n const { apiHost = '' } = window.chatwootConfig || {};\n const wootApi = axios.create({ baseURL: `${apiHost}/` });\n // Add Auth Headers to requests if logged in\n if (Auth.hasAuthCookie()) {\n const {\n 'access-token': accessToken,\n 'token-type': tokenType,\n client,\n expiry,\n uid,\n } = Auth.getAuthData();\n Object.assign(wootApi.defaults.headers.common, {\n 'access-token': accessToken,\n 'token-type': tokenType,\n client,\n expiry,\n uid,\n });\n }\n // Response parsing interceptor\n wootApi.interceptors.response.use(\n response => response,\n error => parseErrorCode(error)\n );\n return wootApi;\n};\n","/*!\n /**\n * vuex-router-sync v6.0.0-rc.1\n * (c) 2021 Evan You\n * @license MIT\n */\nfunction sync(store, router, options) {\r\n const moduleName = (options || {}).moduleName || 'route';\r\n store.registerModule(moduleName, {\r\n namespaced: true,\r\n state: cloneRoute(router.currentRoute.value),\r\n mutations: {\r\n ROUTE_CHANGED(_state, transition) {\r\n store.state[moduleName] = cloneRoute(transition.to, transition.from);\r\n }\r\n }\r\n });\r\n let isTimeTraveling = false;\r\n let currentPath;\r\n // sync router on store change\r\n const storeUnwatch = store.watch((state) => state[moduleName], (route) => {\r\n const { fullPath } = route;\r\n if (fullPath === currentPath) {\r\n return;\r\n }\r\n if (currentPath != null) {\r\n isTimeTraveling = true;\r\n router.push(route);\r\n }\r\n currentPath = fullPath;\r\n }, { flush: 'sync' });\r\n // sync store on router navigation\r\n const afterEachUnHook = router.afterEach((to, from) => {\r\n if (isTimeTraveling) {\r\n isTimeTraveling = false;\r\n return;\r\n }\r\n currentPath = to.fullPath;\r\n store.commit(moduleName + '/ROUTE_CHANGED', { to, from });\r\n });\r\n return function unsync() {\r\n // remove router hook\r\n afterEachUnHook();\r\n // remove store watch\r\n storeUnwatch();\r\n // unregister Module with store\r\n store.unregisterModule(moduleName);\r\n };\r\n}\r\nfunction cloneRoute(to, from) {\r\n const clone = {\r\n name: to.name,\r\n path: to.path,\r\n hash: to.hash,\r\n query: to.query,\r\n params: to.params,\r\n fullPath: to.fullPath,\r\n meta: to.meta\r\n };\r\n if (from) {\r\n clone.from = cloneRoute(from);\r\n }\r\n return Object.freeze(clone);\r\n}\n\nexport { sync };\n","/**\n * A function that provides access to various configuration values.\n * @returns {Object} An object containing configuration values.\n */\nexport function useConfig() {\n const config = window.chatwootConfig || {};\n\n /**\n * The host URL of the Chatwoot instance.\n * @type {string|undefined}\n */\n const hostURL = config.hostURL;\n\n /**\n * The VAPID public key for web push notifications.\n * @type {string|undefined}\n */\n const vapidPublicKey = config.vapidPublicKey;\n\n /**\n * An array of enabled languages in the Chatwoot instance.\n * @type {string[]|undefined}\n */\n const enabledLanguages = config.enabledLanguages;\n\n /**\n * Indicates whether the current instance is an enterprise version.\n * @type {boolean}\n */\n const isEnterprise = config.isEnterprise === 'true';\n\n /**\n * The name of the enterprise plan, if applicable.\n * Returns \"community\" or \"enterprise\"\n * @type {string|undefined}\n */\n const enterprisePlanName = config.enterprisePlanName;\n\n return {\n hostURL,\n vapidPublicKey,\n enabledLanguages,\n isEnterprise,\n enterprisePlanName,\n };\n}\n","<script setup>\nimport { useStoreGetters } from 'dashboard/composables/store';\nimport { computed } from 'vue';\nconst props = defineProps({\n showOnCustomBrandedInstance: {\n type: Boolean,\n default: true,\n },\n});\n\nconst getters = useStoreGetters();\n\nconst isACustomBrandedInstance =\n getters['globalConfig/isACustomBrandedInstance'];\n\nconst shouldShowContent = computed(\n () => props.showOnCustomBrandedInstance || !isACustomBrandedInstance.value\n);\n</script>\n\n<!-- eslint-disable-next-line vue/no-root-v-if -->\n<template>\n <div v-if=\"shouldShowContent\">\n <slot />\n </div>\n</template>\n","const FEATURE_HELP_URLS = {\n agent_bots: 'https://chwt.app/hc/agent-bots',\n agents: 'https://chwt.app/hc/agents',\n audit_logs: 'https://chwt.app/hc/audit-logs',\n campaigns: 'https://chwt.app/hc/campaigns',\n canned_responses: 'https://chwt.app/hc/canned',\n channel_email: 'https://chwt.app/hc/email',\n channel_facebook: 'https://chwt.app/hc/fb',\n custom_attributes: 'https://chwt.app/hc/custom-attributes',\n dashboard_apps: 'https://chwt.app/hc/dashboard-apps',\n help_center: 'https://chwt.app/hc/help-center',\n inboxes: 'https://chwt.app/hc/inboxes',\n integrations: 'https://chwt.app/hc/integrations',\n labels: 'https://chwt.app/hc/labels',\n macros: 'https://chwt.app/hc/macros',\n message_reply_to: 'https://chwt.app/hc/reply-to',\n reports: 'https://chwt.app/hc/reports',\n sla: 'https://chwt.app/hc/sla',\n team_management: 'https://chwt.app/hc/teams',\n webhook: 'https://chwt.app/hc/webhooks',\n billing: 'https://chwt.app/pricing',\n};\n\nexport function getHelpUrlForFeature(featureName) {\n return FEATURE_HELP_URLS[featureName];\n}\n","<script setup>\nimport router from '../../routes/index';\nconst props = defineProps({\n backUrl: {\n type: [String, Object],\n default: '',\n },\n buttonLabel: {\n type: String,\n default: '',\n },\n compact: {\n type: Boolean,\n default: false,\n },\n});\n\nconst goBack = () => {\n if (props.backUrl !== '') {\n router.push(props.backUrl);\n } else {\n router.go(-1);\n }\n};\n\nconst buttonStyleClass = props.compact ? 'text-sm' : 'text-base';\n</script>\n\n<template>\n <button\n class=\"flex items-center p-0 font-normal cursor-pointer text-n-slate-11\"\n :class=\"buttonStyleClass\"\n @click.capture=\"goBack\"\n >\n <i class=\"i-lucide-chevron-left -ml-1 text-lg\" />\n {{ buttonLabel || $t('GENERAL_SETTINGS.BACK') }}\n </button>\n</template>\n","<script setup>\nimport CustomBrandPolicyWrapper from 'dashboard/components/CustomBrandPolicyWrapper.vue';\nimport { getHelpUrlForFeature } from '../../../../helper/featureHelper';\nimport BackButton from '../../../../components/widgets/BackButton.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport Icon from 'dashboard/components-next/icon/Icon.vue';\n\nconst props = defineProps({\n title: {\n type: String,\n required: true,\n },\n description: {\n type: String,\n required: true,\n },\n iconName: {\n type: String,\n default: '',\n },\n linkText: {\n type: String,\n default: '',\n },\n featureName: {\n type: String,\n default: '',\n },\n backButtonLabel: {\n type: String,\n default: '',\n },\n});\n\nconst helpURL = getHelpUrlForFeature(props.featureName);\n\nconst openInNewTab = url => {\n if (!url) return;\n window.open(url, '_blank', 'noopener noreferrer');\n};\n</script>\n\n<template>\n <div class=\"flex flex-col items-start w-full gap-2\">\n <BackButton\n v-if=\"backButtonLabel\"\n compact\n :button-label=\"backButtonLabel\"\n />\n <div class=\"flex items-center justify-between w-full gap-4\">\n <div class=\"flex items-center gap-3\">\n <div\n v-if=\"iconName\"\n class=\"flex items-center w-10 h-10 p-1 rounded-full bg-woot-25/60 dark:bg-woot-900/60\"\n >\n <div\n class=\"flex items-center justify-center w-full h-full rounded-full bg-woot-75/70 dark:bg-woot-800/40\"\n >\n <fluent-icon\n size=\"14\"\n :icon=\"iconName\"\n type=\"outline\"\n class=\"flex-shrink-0 text-n-brand\"\n />\n </div>\n </div>\n <h1 class=\"text-xl font-medium tracking-tight text-n-slate-12\">\n {{ title }}\n </h1>\n </div>\n <!-- Slot for additional actions on larger screens -->\n <div class=\"hidden gap-2 sm:flex\">\n <slot name=\"actions\" />\n </div>\n </div>\n <div class=\"flex flex-col w-full gap-3 text-n-slate-11\">\n <p\n class=\"mb-0 text-sm font-normal line-clamp-5 sm:line-clamp-none max-w-3xl\"\n >\n <slot name=\"description\">{{ description }}</slot>\n </p>\n <CustomBrandPolicyWrapper :show-on-custom-branded-instance=\"false\">\n <a\n v-if=\"helpURL && linkText\"\n :href=\"helpURL\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"items-center hidden gap-1 text-sm font-medium sm:inline-flex w-fit text-n-blue-text hover:underline\"\n >\n {{ linkText }}\n <Icon\n icon=\"i-lucide-chevron-right\"\n class=\"flex-shrink-0 text-n-blue-text size-4\"\n />\n </a>\n </CustomBrandPolicyWrapper>\n </div>\n <div\n class=\"flex flex-wrap items-start justify-start w-full gap-3 sm:hidden\"\n >\n <slot name=\"actions\" />\n <CustomBrandPolicyWrapper :show-on-custom-branded-instance=\"false\">\n <Button\n v-if=\"helpURL && linkText\"\n blue\n link\n icon=\"i-lucide-chevron-right\"\n trailing-icon\n :label=\"linkText\"\n @click=\"openInNewTab(helpURL)\"\n />\n </CustomBrandPolicyWrapper>\n </div>\n </div>\n</template>\n","<script>\nimport { useVuelidate } from '@vuelidate/core';\nimport { required, minValue, maxValue } from '@vuelidate/validators';\nimport { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\nimport { useUISettings } from 'dashboard/composables/useUISettings';\nimport { useConfig } from 'dashboard/composables/useConfig';\nimport { useAccount } from 'dashboard/composables/useAccount';\nimport { FEATURE_FLAGS } from '../../../../featureFlags';\nimport semver from 'semver';\nimport { getLanguageDirection } from 'dashboard/components/widgets/conversation/advancedFilterItems/languages';\nimport BaseSettingsHeader from '../components/BaseSettingsHeader.vue';\nimport V4Button from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n BaseSettingsHeader,\n V4Button,\n },\n setup() {\n const { updateUISettings } = useUISettings();\n const { enabledLanguages } = useConfig();\n const { accountId } = useAccount();\n const v$ = useVuelidate();\n\n return { updateUISettings, v$, enabledLanguages, accountId };\n },\n data() {\n return {\n id: '',\n name: '',\n locale: 'en',\n domain: '',\n supportEmail: '',\n features: {},\n autoResolveDuration: null,\n latestChatwootVersion: null,\n };\n },\n validations: {\n name: {\n required,\n },\n locale: {\n required,\n },\n autoResolveDuration: {\n minValue: minValue(1),\n maxValue: maxValue(999),\n },\n },\n computed: {\n ...mapGetters({\n globalConfig: 'globalConfig/get',\n getAccount: 'accounts/getAccount',\n uiFlags: 'accounts/getUIFlags',\n isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount',\n }),\n showAutoResolutionConfig() {\n return this.isFeatureEnabledonAccount(\n this.accountId,\n FEATURE_FLAGS.AUTO_RESOLVE_CONVERSATIONS\n );\n },\n hasAnUpdateAvailable() {\n if (!semver.valid(this.latestChatwootVersion)) {\n return false;\n }\n\n return semver.lt(\n this.globalConfig.appVersion,\n this.latestChatwootVersion\n );\n },\n languagesSortedByCode() {\n const enabledLanguages = [...this.enabledLanguages];\n return enabledLanguages.sort((l1, l2) =>\n l1.iso_639_1_code.localeCompare(l2.iso_639_1_code)\n );\n },\n isUpdating() {\n return this.uiFlags.isUpdating;\n },\n\n featureInboundEmailEnabled() {\n return !!this.features?.inbound_emails;\n },\n\n featureCustomReplyDomainEnabled() {\n return (\n this.featureInboundEmailEnabled && !!this.features.custom_reply_domain\n );\n },\n\n featureCustomReplyEmailEnabled() {\n return (\n this.featureInboundEmailEnabled && !!this.features.custom_reply_email\n );\n },\n\n getAccountId() {\n return this.id.toString();\n },\n },\n mounted() {\n this.initializeAccount();\n },\n methods: {\n async initializeAccount() {\n try {\n const {\n name,\n locale,\n id,\n domain,\n support_email,\n features,\n auto_resolve_duration,\n latest_chatwoot_version: latestChatwootVersion,\n } = this.getAccount(this.accountId);\n\n this.$root.$i18n.locale = locale;\n this.name = name;\n this.locale = locale;\n this.id = id;\n this.domain = domain;\n this.supportEmail = support_email;\n this.features = features;\n this.autoResolveDuration = auto_resolve_duration;\n this.latestChatwootVersion = latestChatwootVersion;\n } catch (error) {\n // Ignore error\n }\n },\n\n async updateAccount() {\n this.v$.$touch();\n if (this.v$.$invalid) {\n useAlert(this.$t('GENERAL_SETTINGS.FORM.ERROR'));\n return;\n }\n try {\n await this.$store.dispatch('accounts/update', {\n locale: this.locale,\n name: this.name,\n domain: this.domain,\n support_email: this.supportEmail,\n auto_resolve_duration: this.autoResolveDuration,\n });\n this.$root.$i18n.locale = this.locale;\n this.getAccount(this.id).locale = this.locale;\n this.updateDirectionView(this.locale);\n useAlert(this.$t('GENERAL_SETTINGS.UPDATE.SUCCESS'));\n } catch (error) {\n useAlert(this.$t('GENERAL_SETTINGS.UPDATE.ERROR'));\n }\n },\n\n updateDirectionView(locale) {\n const isRTLSupported = getLanguageDirection(locale);\n this.updateUISettings({\n rtl_view: isRTLSupported,\n });\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex flex-col w-full\">\n <BaseSettingsHeader :title=\"$t('GENERAL_SETTINGS.TITLE')\">\n <template #actions>\n <V4Button blue :loading=\"isUpdating\" @click=\"updateAccount\">\n {{ $t('GENERAL_SETTINGS.SUBMIT') }}\n </V4Button>\n </template>\n </BaseSettingsHeader>\n <div class=\"flex-grow flex-shrink min-w-0 overflow-auto mt-3\">\n <form v-if=\"!uiFlags.isFetchingItem\" @submit.prevent=\"updateAccount\">\n <div\n class=\"flex flex-row border-b border-slate-25 dark:border-slate-800\"\n >\n <div\n class=\"flex-grow-0 flex-shrink-0 flex-[25%] min-w-0 py-4 pr-6 pl-0\"\n >\n <h4 class=\"text-lg font-medium text-black-900 dark:text-slate-200\">\n {{ $t('GENERAL_SETTINGS.FORM.GENERAL_SECTION.TITLE') }}\n </h4>\n <p>{{ $t('GENERAL_SETTINGS.FORM.GENERAL_SECTION.NOTE') }}</p>\n </div>\n <div class=\"p-4 flex-grow-0 flex-shrink-0 flex-[50%]\">\n <label :class=\"{ error: v$.name.$error }\">\n {{ $t('GENERAL_SETTINGS.FORM.NAME.LABEL') }}\n <input\n v-model=\"name\"\n type=\"text\"\n :placeholder=\"$t('GENERAL_SETTINGS.FORM.NAME.PLACEHOLDER')\"\n @blur=\"v$.name.$touch\"\n />\n <span v-if=\"v$.name.$error\" class=\"message\">\n {{ $t('GENERAL_SETTINGS.FORM.NAME.ERROR') }}\n </span>\n </label>\n <label :class=\"{ error: v$.locale.$error }\">\n {{ $t('GENERAL_SETTINGS.FORM.LANGUAGE.LABEL') }}\n <select v-model=\"locale\">\n <option\n v-for=\"lang in languagesSortedByCode\"\n :key=\"lang.iso_639_1_code\"\n :value=\"lang.iso_639_1_code\"\n >\n {{ lang.name }}\n </option>\n </select>\n <span v-if=\"v$.locale.$error\" class=\"message\">\n {{ $t('GENERAL_SETTINGS.FORM.LANGUAGE.ERROR') }}\n </span>\n </label>\n <label v-if=\"featureInboundEmailEnabled\">\n {{ $t('GENERAL_SETTINGS.FORM.FEATURES.INBOUND_EMAIL_ENABLED') }}\n </label>\n <label v-if=\"featureCustomReplyDomainEnabled\">\n {{\n $t('GENERAL_SETTINGS.FORM.FEATURES.CUSTOM_EMAIL_DOMAIN_ENABLED')\n }}\n </label>\n <label v-if=\"featureCustomReplyDomainEnabled\">\n {{ $t('GENERAL_SETTINGS.FORM.DOMAIN.LABEL') }}\n <input\n v-model=\"domain\"\n type=\"text\"\n :placeholder=\"$t('GENERAL_SETTINGS.FORM.DOMAIN.PLACEHOLDER')\"\n />\n </label>\n <label v-if=\"featureCustomReplyEmailEnabled\">\n {{ $t('GENERAL_SETTINGS.FORM.SUPPORT_EMAIL.LABEL') }}\n <input\n v-model=\"supportEmail\"\n type=\"text\"\n :placeholder=\"\n $t('GENERAL_SETTINGS.FORM.SUPPORT_EMAIL.PLACEHOLDER')\n \"\n />\n </label>\n <label\n v-if=\"showAutoResolutionConfig\"\n :class=\"{ error: v$.autoResolveDuration.$error }\"\n >\n {{ $t('GENERAL_SETTINGS.FORM.AUTO_RESOLVE_DURATION.LABEL') }}\n <input\n v-model=\"autoResolveDuration\"\n type=\"number\"\n :placeholder=\"\n $t('GENERAL_SETTINGS.FORM.AUTO_RESOLVE_DURATION.PLACEHOLDER')\n \"\n @blur=\"v$.autoResolveDuration.$touch\"\n />\n <span v-if=\"v$.autoResolveDuration.$error\" class=\"message\">\n {{ $t('GENERAL_SETTINGS.FORM.AUTO_RESOLVE_DURATION.ERROR') }}\n </span>\n </label>\n </div>\n </div>\n </form>\n\n <woot-loading-state v-if=\"uiFlags.isFetchingItem\" />\n </div>\n\n <div class=\"flex flex-row\">\n <div class=\"flex-grow-0 flex-shrink-0 flex-[25%] min-w-0 py-4 pr-6 pl-0\">\n <h4 class=\"text-lg font-medium text-black-900 dark:text-slate-200\">\n {{ $t('GENERAL_SETTINGS.FORM.ACCOUNT_ID.TITLE') }}\n </h4>\n <p>\n {{ $t('GENERAL_SETTINGS.FORM.ACCOUNT_ID.NOTE') }}\n </p>\n </div>\n <div class=\"p-4 flex-grow-0 flex-shrink-0 flex-[50%]\">\n <woot-code :script=\"getAccountId\" />\n </div>\n </div>\n <div class=\"p-4 text-sm text-center\">\n <div>{{ `v${globalConfig.appVersion}` }}</div>\n <div v-if=\"hasAnUpdateAvailable && globalConfig.displayManifest\">\n {{\n $t('GENERAL_SETTINGS.UPDATE_CHATWOOT', {\n latestChatwootVersion: latestChatwootVersion,\n })\n }}\n </div>\n <div class=\"build-id\">\n <div>{{ `Build ${globalConfig.gitSha}` }}</div>\n </div>\n </div>\n </div>\n</template>\n","import { frontendURL } from '../../../../helper/URLHelper';\nimport Index from './Index.vue';\nimport SettingsWrapper from '../SettingsWrapper.vue';\n\nexport default {\n routes: [\n {\n path: frontendURL('accounts/:accountId/settings/general'),\n meta: {\n permissions: ['administrator'],\n },\n component: SettingsWrapper,\n children: [\n {\n path: '',\n name: 'general_settings_index',\n component: Index,\n meta: {\n permissions: ['administrator'],\n },\n },\n ],\n },\n ],\n};\n","<script setup>\nimport { ref, computed } from 'vue';\nimport { useStore, useMapGetter } from 'dashboard/composables/store';\nimport { useI18n } from 'vue-i18n';\nimport { useAlert } from 'dashboard/composables';\nimport { useVuelidate } from '@vuelidate/core';\nimport { required, email } from '@vuelidate/validators';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst emit = defineEmits(['close']);\n\nconst store = useStore();\nconst { t } = useI18n();\n\nconst agentName = ref('');\nconst agentEmail = ref('');\nconst selectedRoleId = ref('agent');\n\nconst rules = {\n agentName: { required },\n agentEmail: { required, email },\n selectedRoleId: { required },\n};\n\nconst v$ = useVuelidate(rules, {\n agentName,\n agentEmail,\n selectedRoleId,\n});\n\nconst uiFlags = useMapGetter('agents/getUIFlags');\nconst getCustomRoles = useMapGetter('customRole/getCustomRoles');\n\nconst roles = computed(() => {\n const defaultRoles = [\n {\n id: 'administrator',\n name: 'administrator',\n label: t('AGENT_MGMT.AGENT_TYPES.ADMINISTRATOR'),\n },\n {\n id: 'agent',\n name: 'agent',\n label: t('AGENT_MGMT.AGENT_TYPES.AGENT'),\n },\n ];\n\n const customRoles = getCustomRoles.value.map(role => ({\n id: role.id,\n name: `custom_${role.id}`,\n label: role.name,\n }));\n\n return [...defaultRoles, ...customRoles];\n});\n\nconst selectedRole = computed(() =>\n roles.value.find(\n role =>\n role.id === selectedRoleId.value || role.name === selectedRoleId.value\n )\n);\n\nconst addAgent = async () => {\n v$.value.$touch();\n if (v$.value.$invalid) return;\n\n try {\n const payload = {\n name: agentName.value,\n email: agentEmail.value,\n };\n\n if (selectedRole.value.name.startsWith('custom_')) {\n payload.custom_role_id = selectedRole.value.id;\n } else {\n payload.role = selectedRole.value.name;\n }\n\n await store.dispatch('agents/create', payload);\n useAlert(t('AGENT_MGMT.ADD.API.SUCCESS_MESSAGE'));\n emit('close');\n } catch (error) {\n const {\n response: {\n data: {\n error: errorResponse = '',\n attributes: attributes = [],\n message: attrError = '',\n } = {},\n } = {},\n } = error;\n\n let errorMessage = '';\n if (error?.response?.status === 422 && !attributes.includes('base')) {\n errorMessage = t('AGENT_MGMT.ADD.API.EXIST_MESSAGE');\n } else {\n errorMessage = t('AGENT_MGMT.ADD.API.ERROR_MESSAGE');\n }\n useAlert(errorResponse || attrError || errorMessage);\n }\n};\n</script>\n\n<template>\n <div class=\"flex flex-col h-auto overflow-auto\">\n <woot-modal-header\n :header-title=\"$t('AGENT_MGMT.ADD.TITLE')\"\n :header-content=\"$t('AGENT_MGMT.ADD.DESC')\"\n />\n <form class=\"flex flex-col items-start w-full\" @submit.prevent=\"addAgent\">\n <div class=\"w-full\">\n <label :class=\"{ error: v$.agentName.$error }\">\n {{ $t('AGENT_MGMT.ADD.FORM.NAME.LABEL') }}\n <input\n v-model=\"agentName\"\n type=\"text\"\n :placeholder=\"$t('AGENT_MGMT.ADD.FORM.NAME.PLACEHOLDER')\"\n @input=\"v$.agentName.$touch\"\n />\n </label>\n </div>\n\n <div class=\"w-full\">\n <label :class=\"{ error: v$.selectedRoleId.$error }\">\n {{ $t('AGENT_MGMT.ADD.FORM.AGENT_TYPE.LABEL') }}\n <select v-model=\"selectedRoleId\" @change=\"v$.selectedRoleId.$touch\">\n <option v-for=\"role in roles\" :key=\"role.id\" :value=\"role.id\">\n {{ role.label }}\n </option>\n </select>\n <span v-if=\"v$.selectedRoleId.$error\" class=\"message\">\n {{ $t('AGENT_MGMT.ADD.FORM.AGENT_TYPE.ERROR') }}\n </span>\n </label>\n </div>\n\n <div class=\"w-full\">\n <label :class=\"{ error: v$.agentEmail.$error }\">\n {{ $t('AGENT_MGMT.ADD.FORM.EMAIL.LABEL') }}\n <input\n v-model=\"agentEmail\"\n type=\"email\"\n :placeholder=\"$t('AGENT_MGMT.ADD.FORM.EMAIL.PLACEHOLDER')\"\n @input=\"v$.agentEmail.$touch\"\n />\n </label>\n </div>\n\n <div class=\"flex flex-row justify-end w-full gap-2 px-0 py-2\">\n <Button\n faded\n slate\n type=\"reset\"\n :label=\"$t('AGENT_MGMT.ADD.CANCEL_BUTTON_TEXT')\"\n @click.prevent=\"emit('close')\"\n />\n <Button\n type=\"submit\"\n :label=\"$t('AGENT_MGMT.ADD.FORM.SUBMIT')\"\n :disabled=\"v$.$invalid || uiFlags.isCreating\"\n :is-loading=\"uiFlags.isCreating\"\n />\n </div>\n </form>\n </div>\n</template>\n","<script setup>\nimport { ref, computed } from 'vue';\nimport { useVuelidate } from '@vuelidate/core';\nimport { required, minLength } from '@vuelidate/validators';\nimport { useStore, useMapGetter } from 'dashboard/composables/store';\nimport { useI18n } from 'vue-i18n';\nimport { useAlert } from 'dashboard/composables';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport Auth from '../../../../api/auth';\nimport wootConstants from 'dashboard/constants/globals';\n\nconst props = defineProps({\n id: {\n type: Number,\n required: true,\n },\n name: {\n type: String,\n required: true,\n },\n email: {\n type: String,\n default: '',\n },\n type: {\n type: String,\n default: '',\n },\n availability: {\n type: String,\n default: '',\n },\n customRoleId: {\n type: Number,\n default: null,\n },\n});\n\nconst emit = defineEmits(['close']);\n\nconst { AVAILABILITY_STATUS_KEYS } = wootConstants;\n\nconst store = useStore();\nconst { t } = useI18n();\n\nconst agentName = ref(props.name);\nconst agentAvailability = ref(props.availability);\nconst selectedRoleId = ref(props.customRoleId || props.type);\nconst agentCredentials = ref({ email: props.email });\n\nconst rules = {\n agentName: { required, minLength: minLength(1) },\n selectedRoleId: { required },\n agentAvailability: { required },\n};\n\nconst v$ = useVuelidate(rules, {\n agentName,\n selectedRoleId,\n agentAvailability,\n});\n\nconst pageTitle = computed(\n () => `${t('AGENT_MGMT.EDIT.TITLE')} - ${props.name}`\n);\n\nconst uiFlags = useMapGetter('agents/getUIFlags');\nconst getCustomRoles = useMapGetter('customRole/getCustomRoles');\n\nconst roles = computed(() => {\n const defaultRoles = [\n {\n id: 'administrator',\n name: 'administrator',\n label: t('AGENT_MGMT.AGENT_TYPES.ADMINISTRATOR'),\n },\n {\n id: 'agent',\n name: 'agent',\n label: t('AGENT_MGMT.AGENT_TYPES.AGENT'),\n },\n ];\n\n const customRoles = getCustomRoles.value.map(role => ({\n id: role.id,\n name: `custom_${role.id}`,\n label: role.name,\n }));\n\n return [...defaultRoles, ...customRoles];\n});\n\nconst selectedRole = computed(() =>\n roles.value.find(\n role =>\n role.id === selectedRoleId.value || role.name === selectedRoleId.value\n )\n);\n\nconst statusList = computed(() => {\n return [\n t('PROFILE_SETTINGS.FORM.AVAILABILITY.STATUS.ONLINE'),\n t('PROFILE_SETTINGS.FORM.AVAILABILITY.STATUS.BUSY'),\n t('PROFILE_SETTINGS.FORM.AVAILABILITY.STATUS.OFFLINE'),\n ];\n});\n\nconst availabilityStatuses = computed(() =>\n statusList.value.map((statusLabel, index) => ({\n label: statusLabel,\n value: AVAILABILITY_STATUS_KEYS[index],\n disabled: props.availability === AVAILABILITY_STATUS_KEYS[index],\n }))\n);\n\nconst editAgent = async () => {\n v$.value.$touch();\n if (v$.value.$invalid) return;\n\n try {\n const payload = {\n id: props.id,\n name: agentName.value,\n availability: agentAvailability.value,\n };\n\n if (selectedRole.value.name.startsWith('custom_')) {\n payload.custom_role_id = selectedRole.value.id;\n } else {\n payload.role = selectedRole.value.name;\n payload.custom_role_id = null;\n }\n\n await store.dispatch('agents/update', payload);\n useAlert(t('AGENT_MGMT.EDIT.API.SUCCESS_MESSAGE'));\n emit('close');\n } catch (error) {\n useAlert(t('AGENT_MGMT.EDIT.API.ERROR_MESSAGE'));\n }\n};\n\nconst resetPassword = async () => {\n try {\n await Auth.resetPassword(agentCredentials.value);\n useAlert(t('AGENT_MGMT.EDIT.PASSWORD_RESET.ADMIN_SUCCESS_MESSAGE'));\n } catch (error) {\n useAlert(t('AGENT_MGMT.EDIT.PASSWORD_RESET.ERROR_MESSAGE'));\n }\n};\n</script>\n\n<template>\n <div class=\"flex flex-col h-auto overflow-auto\">\n <woot-modal-header :header-title=\"pageTitle\" />\n <form class=\"w-full\" @submit.prevent=\"editAgent\">\n <div class=\"w-full\">\n <label :class=\"{ error: v$.agentName.$error }\">\n {{ $t('AGENT_MGMT.EDIT.FORM.NAME.LABEL') }}\n <input\n v-model=\"agentName\"\n type=\"text\"\n :placeholder=\"$t('AGENT_MGMT.EDIT.FORM.NAME.PLACEHOLDER')\"\n @input=\"v$.agentName.$touch\"\n />\n </label>\n </div>\n\n <div class=\"w-full\">\n <label :class=\"{ error: v$.selectedRoleId.$error }\">\n {{ $t('AGENT_MGMT.EDIT.FORM.AGENT_TYPE.LABEL') }}\n <select v-model=\"selectedRoleId\" @change=\"v$.selectedRoleId.$touch\">\n <option v-for=\"role in roles\" :key=\"role.id\" :value=\"role.id\">\n {{ role.label }}\n </option>\n </select>\n <span v-if=\"v$.selectedRoleId.$error\" class=\"message\">\n {{ $t('AGENT_MGMT.EDIT.FORM.AGENT_TYPE.ERROR') }}\n </span>\n </label>\n </div>\n\n <div class=\"w-full\">\n <label :class=\"{ error: v$.agentAvailability.$error }\">\n {{ $t('PROFILE_SETTINGS.FORM.AVAILABILITY.LABEL') }}\n <select\n v-model=\"agentAvailability\"\n @change=\"v$.agentAvailability.$touch\"\n >\n <option\n v-for=\"status in availabilityStatuses\"\n :key=\"status.value\"\n :value=\"status.value\"\n >\n {{ status.label }}\n </option>\n </select>\n <span v-if=\"v$.agentAvailability.$error\" class=\"message\">\n {{ $t('AGENT_MGMT.EDIT.FORM.AGENT_AVAILABILITY.ERROR') }}\n </span>\n </label>\n </div>\n\n <div class=\"flex flex-row justify-start w-full gap-2 px-0 py-2\">\n <div class=\"w-[50%] ltr:text-left rtl:text-right\">\n <Button\n ghost\n type=\"button\"\n icon=\"i-lucide-lock-keyhole\"\n class=\"!px-2\"\n :label=\"$t('AGENT_MGMT.EDIT.PASSWORD_RESET.ADMIN_RESET_BUTTON')\"\n @click.prevent=\"resetPassword\"\n />\n </div>\n <div class=\"w-[50%] flex justify-end items-center gap-2\">\n <Button\n faded\n slate\n type=\"reset\"\n :label=\"$t('AGENT_MGMT.EDIT.CANCEL_BUTTON_TEXT')\"\n @click.prevent=\"emit('close')\"\n />\n <Button\n type=\"submit\"\n :label=\"$t('AGENT_MGMT.EDIT.FORM.SUBMIT')\"\n :disabled=\"v$.$invalid || uiFlags.isUpdating\"\n :is-loading=\"uiFlags.isUpdating\"\n />\n </div>\n </div>\n </form>\n </div>\n</template>\n","<script setup>\nimport { useAlert } from 'dashboard/composables';\nimport { computed, onMounted, ref } from 'vue';\nimport Thumbnail from 'dashboard/components/widgets/Thumbnail.vue';\nimport { useI18n } from 'vue-i18n';\nimport {\n useStoreGetters,\n useStore,\n useMapGetter,\n} from 'dashboard/composables/store';\n\nimport AddAgent from './AddAgent.vue';\nimport EditAgent from './EditAgent.vue';\nimport BaseSettingsHeader from '../components/BaseSettingsHeader.vue';\nimport SettingsLayout from '../SettingsLayout.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst getters = useStoreGetters();\nconst store = useStore();\nconst { t } = useI18n();\n\nconst loading = ref({});\nconst showAddPopup = ref(false);\nconst showDeletePopup = ref(false);\nconst showEditPopup = ref(false);\nconst agentAPI = ref({ message: '' });\nconst currentAgent = ref({});\n\nconst deleteConfirmText = computed(\n () => `${t('AGENT_MGMT.DELETE.CONFIRM.YES')} ${currentAgent.value.name}`\n);\nconst deleteRejectText = computed(() => {\n return `${t('AGENT_MGMT.DELETE.CONFIRM.NO')} ${currentAgent.value.name}`;\n});\nconst deleteMessage = computed(() => {\n return ` ${currentAgent.value.name}?`;\n});\n\nconst agentList = computed(() => getters['agents/getAgents'].value);\nconst uiFlags = computed(() => getters['agents/getUIFlags'].value);\nconst currentUserId = computed(() => getters.getCurrentUserID.value);\nconst customRoles = useMapGetter('customRole/getCustomRoles');\n\nonMounted(() => {\n store.dispatch('agents/get');\n store.dispatch('customRole/getCustomRole');\n});\n\nconst findCustomRole = agent =>\n customRoles.value.find(role => role.id === agent.custom_role_id);\n\nconst getAgentRoleName = agent => {\n if (!agent.custom_role_id) {\n return t(`AGENT_MGMT.AGENT_TYPES.${agent.role.toUpperCase()}`);\n }\n const customRole = findCustomRole(agent);\n return customRole ? customRole.name : '';\n};\n\nconst getAgentRolePermissions = agent => {\n if (!agent.custom_role_id) {\n return [];\n }\n const customRole = findCustomRole(agent);\n return customRole?.permissions || [];\n};\n\nconst verifiedAdministrators = computed(() => {\n return agentList.value.filter(\n agent => agent.role === 'administrator' && agent.confirmed\n );\n});\n\nconst showEditAction = agent => {\n return currentUserId.value !== agent.id;\n};\n\nconst showDeleteAction = agent => {\n if (currentUserId.value === agent.id) {\n return false;\n }\n\n if (!agent.confirmed) {\n return true;\n }\n\n if (agent.role === 'administrator') {\n return verifiedAdministrators.value.length !== 1;\n }\n return true;\n};\n\nconst showAlertMessage = message => {\n loading.value[currentAgent.value.id] = false;\n currentAgent.value = {};\n agentAPI.value.message = message;\n useAlert(message);\n};\n\nconst openAddPopup = () => {\n showAddPopup.value = true;\n};\nconst hideAddPopup = () => {\n showAddPopup.value = false;\n};\n\nconst openEditPopup = agent => {\n showEditPopup.value = true;\n currentAgent.value = agent;\n};\nconst hideEditPopup = () => {\n showEditPopup.value = false;\n};\n\nconst openDeletePopup = agent => {\n showDeletePopup.value = true;\n currentAgent.value = agent;\n};\nconst closeDeletePopup = () => {\n showDeletePopup.value = false;\n};\n\nconst deleteAgent = async id => {\n try {\n await store.dispatch('agents/delete', id);\n showAlertMessage(t('AGENT_MGMT.DELETE.API.SUCCESS_MESSAGE'));\n } catch (error) {\n showAlertMessage(t('AGENT_MGMT.DELETE.API.ERROR_MESSAGE'));\n }\n};\nconst confirmDeletion = () => {\n loading.value[currentAgent.value.id] = true;\n closeDeletePopup();\n deleteAgent(currentAgent.value.id);\n};\n</script>\n\n<template>\n <SettingsLayout\n :is-loading=\"uiFlags.isFetching\"\n :loading-message=\"$t('AGENT_MGMT.LOADING')\"\n :no-records-found=\"!agentList.length\"\n :no-records-message=\"$t('AGENT_MGMT.LIST.404')\"\n >\n <template #header>\n <BaseSettingsHeader\n :title=\"$t('AGENT_MGMT.HEADER')\"\n :description=\"$t('AGENT_MGMT.DESCRIPTION')\"\n :link-text=\"$t('AGENT_MGMT.LEARN_MORE')\"\n feature-name=\"agents\"\n >\n <template #actions>\n <Button\n icon=\"i-lucide-circle-plus\"\n :label=\"$t('AGENT_MGMT.HEADER_BTN_TXT')\"\n @click=\"openAddPopup\"\n />\n </template>\n </BaseSettingsHeader>\n </template>\n <template #body>\n <table class=\"divide-y divide-slate-75 dark:divide-slate-700\">\n <tbody class=\"divide-y divide-n-weak text-n-slate-11\">\n <tr v-for=\"(agent, index) in agentList\" :key=\"agent.email\">\n <td class=\"py-4 ltr:pr-4 rtl:pl-4\">\n <div class=\"flex flex-row items-center gap-4\">\n <Thumbnail\n :src=\"agent.thumbnail\"\n :username=\"agent.name\"\n size=\"40px\"\n :status=\"agent.availability_status\"\n />\n <div>\n <span class=\"block font-medium capitalize\">\n {{ agent.name }}\n </span>\n <span>{{ agent.email }}</span>\n </div>\n </div>\n </td>\n\n <td class=\"relative py-4 ltr:pr-4 rtl:pl-4\">\n <span\n class=\"block font-medium w-fit\"\n :class=\"{\n 'hover:text-gray-900 group cursor-pointer':\n agent.custom_role_id,\n }\"\n >\n {{ getAgentRoleName(agent) }}\n\n <div\n class=\"absolute left-0 z-10 hidden max-w-[300px] w-auto bg-white rounded-xl border border-slate-50 shadow-lg top-14 md:top-12 dark:bg-slate-800 dark:border-slate-700\"\n :class=\"{ 'group-hover:block': agent.custom_role_id }\"\n >\n <div class=\"flex flex-col gap-1 p-4\">\n <span class=\"font-semibold\">\n {{ $t('AGENT_MGMT.LIST.AVAILABLE_CUSTOM_ROLE') }}\n </span>\n <ul class=\"pl-4 mb-0 list-disc\">\n <li\n v-for=\"permission in getAgentRolePermissions(agent)\"\n :key=\"permission\"\n class=\"font-normal\"\n >\n {{\n $t(\n `CUSTOM_ROLE.PERMISSIONS.${permission.toUpperCase()}`\n )\n }}\n </li>\n </ul>\n </div>\n </div>\n </span>\n </td>\n <td class=\"py-4 ltr:pr-4 rtl:pl-4\">\n <span v-if=\"agent.confirmed\">\n {{ $t('AGENT_MGMT.LIST.VERIFIED') }}\n </span>\n <span v-if=\"!agent.confirmed\">\n {{ $t('AGENT_MGMT.LIST.VERIFICATION_PENDING') }}\n </span>\n </td>\n <td class=\"py-4\">\n <div class=\"flex justify-end gap-1\">\n <Button\n v-if=\"showEditAction(agent)\"\n v-tooltip.top=\"$t('AGENT_MGMT.EDIT.BUTTON_TEXT')\"\n icon=\"i-lucide-pen\"\n slate\n xs\n faded\n @click=\"openEditPopup(agent)\"\n />\n <Button\n v-if=\"showDeleteAction(agent)\"\n v-tooltip.top=\"$t('AGENT_MGMT.DELETE.BUTTON_TEXT')\"\n icon=\"i-lucide-trash-2\"\n xs\n ruby\n faded\n :is-loading=\"loading[agent.id]\"\n @click=\"openDeletePopup(agent, index)\"\n />\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </template>\n\n <woot-modal v-model:show=\"showAddPopup\" :on-close=\"hideAddPopup\">\n <AddAgent @close=\"hideAddPopup\" />\n </woot-modal>\n\n <woot-modal v-model:show=\"showEditPopup\" :on-close=\"hideEditPopup\">\n <EditAgent\n v-if=\"showEditPopup\"\n :id=\"currentAgent.id\"\n :name=\"currentAgent.name\"\n :type=\"currentAgent.role\"\n :email=\"currentAgent.email\"\n :availability=\"currentAgent.availability_status\"\n :custom-role-id=\"currentAgent.custom_role_id\"\n @close=\"hideEditPopup\"\n />\n </woot-modal>\n\n <woot-delete-modal\n v-model:show=\"showDeletePopup\"\n :on-close=\"closeDeletePopup\"\n :on-confirm=\"confirmDeletion\"\n :title=\"$t('AGENT_MGMT.DELETE.CONFIRM.TITLE')\"\n :message=\"$t('AGENT_MGMT.DELETE.CONFIRM.MESSAGE')\"\n :message-value=\"deleteMessage\"\n :confirm-text=\"deleteConfirmText\"\n :reject-text=\"deleteRejectText\"\n />\n </SettingsLayout>\n</template>\n","import { FEATURE_FLAGS } from '../../../../featureFlags';\nimport { frontendURL } from '../../../../helper/URLHelper';\nimport SettingsWrapper from '../SettingsWrapper.vue';\nimport AgentHome from './Index.vue';\n\nexport default {\n routes: [\n {\n path: frontendURL('accounts/:accountId/settings/agents'),\n component: SettingsWrapper,\n children: [\n {\n path: '',\n redirect: to => {\n return { name: 'agent_list', params: to.params };\n },\n },\n {\n path: 'list',\n name: 'agent_list',\n component: AgentHome,\n meta: {\n featureFlag: FEATURE_FLAGS.AGENT_MANAGEMENT,\n permissions: ['administrator'],\n },\n },\n ],\n },\n ],\n};\n","<script setup>\nimport { computed, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nconst props = defineProps({\n text: {\n type: String,\n default: '',\n },\n limit: {\n type: Number,\n default: 120,\n },\n});\nconst { t } = useI18n();\nconst showMore = ref(false);\n\nconst textToBeDisplayed = computed(() => {\n if (showMore.value || props.text.length <= props.limit) {\n return props.text;\n }\n\n return props.text.slice(0, props.limit) + '...';\n});\nconst buttonLabel = computed(() => {\n const i18nKey = !showMore.value ? 'SHOW_MORE' : 'SHOW_LESS';\n return t(`COMPONENTS.SHOW_MORE_BLOCK.${i18nKey}`);\n});\n\nconst toggleShowMore = () => {\n showMore.value = !showMore.value;\n};\n</script>\n\n<template>\n <span>\n {{ textToBeDisplayed }}\n <button\n v-if=\"text.length > limit\"\n class=\"text-woot-500 !p-0 !border-0 align-top\"\n @click=\"toggleShowMore\"\n >\n {{ buttonLabel }}\n </button>\n </span>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\ndefineProps({\n botType: {\n type: String,\n default: 'webhook',\n },\n});\n\nconst { t } = useI18n();\n\nconst botTypeConfig = computed(() => ({\n csml: {\n label: t('AGENT_BOTS.TYPES.CSML'),\n thumbnail: '/dashboard/images/agent-bots/csml.png',\n },\n webhook: {\n label: t('AGENT_BOTS.TYPES.WEBHOOK'),\n thumbnail: '/dashboard/images/agent-bots/webhook.svg',\n },\n}));\n</script>\n\n<template>\n <span class=\"inline-flex items-center gap-1\">\n <img\n v-tooltip=\"botTypeConfig[botType].label\"\n class=\"h-3 w-auto\"\n :src=\"botTypeConfig[botType].thumbnail\"\n :alt=\"botTypeConfig[botType].label\"\n />\n <span>{{ botTypeConfig[botType].label }}</span>\n </span>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport ShowMore from 'dashboard/components/widgets/ShowMore.vue';\nimport AgentBotType from './AgentBotType.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n agentBot: {\n type: Object,\n required: true,\n },\n index: {\n type: Number,\n required: true,\n },\n});\n\nconst emit = defineEmits(['edit', 'delete']);\n\nconst isACSMLTypeBot = computed(() => {\n const { bot_type: botType } = props.agentBot;\n return botType === 'csml';\n});\n</script>\n\n<template>\n <tr class=\"space-x-2\">\n <td class=\"py-4 ltr:pl-0 ltr:pr-4 rtl:pl-4 rtl:pr-0\">\n <div class=\"flex items-center break-words font-medium\">\n {{ agentBot.name }}\n (<AgentBotType :bot-type=\"agentBot.bot_type\" />)\n </div>\n <div class=\"text-sm\">\n <ShowMore :text=\"agentBot.description || ''\" :limit=\"120\" />\n </div>\n </td>\n <td class=\"align-middle\">\n <div class=\"flex justify-end gap-1 h-full items-center\">\n <Button\n v-if=\"isACSMLTypeBot\"\n v-tooltip.top=\"$t('AGENT_BOTS.EDIT.BUTTON_TEXT')\"\n icon=\"i-lucide-pen\"\n slate\n xs\n faded\n @click=\"emit('edit', agentBot)\"\n />\n <Button\n v-tooltip.top=\"$t('AGENT_BOTS.DELETE.BUTTON_TEXT')\"\n icon=\"i-lucide-trash-2\"\n xs\n ruby\n faded\n @click=\"emit('delete', agentBot, index)\"\n />\n </div>\n </td>\n </tr>\n</template>\n","<script setup>\nimport { ref, onMounted } from 'vue';\nimport { useRouter } from 'vue-router';\nimport { useMapGetter, useStore } from 'dashboard/composables/store';\nimport { useAlert } from 'dashboard/composables';\nimport { useI18n } from 'vue-i18n';\nimport { frontendURL } from 'dashboard/helper/URLHelper';\n\nimport AgentBotRow from './components/AgentBotRow.vue';\n\nimport SettingsLayout from '../SettingsLayout.vue';\nimport BaseSettingsHeader from '../components/BaseSettingsHeader.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst router = useRouter();\nconst store = useStore();\nconst { t } = useI18n();\n\nconst accountId = useMapGetter('getCurrentAccountId');\nconst agentBots = useMapGetter('agentBots/getBots');\nconst uiFlags = useMapGetter('agentBots/getUIFlags');\n\nconst confirmDialog = ref(null);\n\nconst onConfigureNewBot = () => {\n router.push({\n name: 'agent_bots_csml_new',\n });\n};\n\nonMounted(() => {\n store.dispatch('agentBots/get');\n});\n\nconst onDeleteAgentBot = async bot => {\n const ok = await confirmDialog.value.showConfirmation();\n\n if (ok) {\n try {\n await store.dispatch('agentBots/delete', bot.id);\n useAlert(t('AGENT_BOTS.DELETE.API.SUCCESS_MESSAGE'));\n } catch (error) {\n useAlert(t('AGENT_BOTS.DELETE.API.ERROR_MESSAGE'));\n }\n }\n};\n\nconst onEditAgentBot = bot => {\n router.push(\n frontendURL(\n `accounts/${accountId.value}/settings/agent-bots/csml/${bot.id}`\n )\n );\n};\n</script>\n\n<template>\n <SettingsLayout\n :is-loading=\"uiFlags.isFetching\"\n :loading-message=\"$t('AGENT_BOTS.LIST.LOADING')\"\n :no-records-found=\"!agentBots.length\"\n :no-records-message=\"$t('AGENT_BOTS.LIST.404')\"\n >\n <template #header>\n <BaseSettingsHeader\n :title=\"$t('AGENT_BOTS.HEADER')\"\n :description=\"$t('AGENT_BOTS.DESCRIPTION')\"\n :link-text=\"$t('AGENT_BOTS.LEARN_MORE')\"\n feature-name=\"agent_bots\"\n >\n <template #actions>\n <Button\n icon=\"i-lucide-circle-plus\"\n :label=\"$t('AGENT_BOTS.ADD.TITLE')\"\n @click=\"onConfigureNewBot\"\n />\n </template>\n </BaseSettingsHeader>\n </template>\n <template #body>\n <div class=\"flex-1 overflow-auto\">\n <table class=\"divide-y divide-slate-75 dark:divide-slate-700\">\n <tbody class=\"divide-y divide-n-weak text-n-slate-11\">\n <AgentBotRow\n v-for=\"(agentBot, index) in agentBots\"\n :key=\"agentBot.id\"\n :agent-bot=\"agentBot\"\n :index=\"index\"\n @delete=\"onDeleteAgentBot\"\n @edit=\"onEditAgentBot\"\n />\n </tbody>\n </table>\n <woot-confirm-modal\n ref=\"confirmDialog\"\n :title=\"$t('AGENT_BOTS.DELETE.TITLE')\"\n :description=\"$t('AGENT_BOTS.DELETE.DESCRIPTION')\"\n />\n </div>\n </template>\n </SettingsLayout>\n</template>\n","<script>\nimport LoadingState from 'dashboard/components/widgets/LoadingState.vue';\nimport { mapGetters } from 'vuex';\n\nexport default {\n components: { LoadingState },\n props: {\n modelValue: {\n type: String,\n default: '',\n },\n },\n emits: ['update:modelValue'],\n data() {\n return {\n iframeLoading: true,\n };\n },\n computed: {\n ...mapGetters({\n globalConfig: 'globalConfig/get',\n }),\n },\n mounted() {\n window.onmessage = e => {\n if (\n typeof e.data !== 'string' ||\n !e.data.startsWith('chatwoot-csml-editor:update')\n ) {\n return;\n }\n const csmlContent = e.data.replace('chatwoot-csml-editor:update', '');\n this.$emit('update:modelValue', csmlContent);\n };\n },\n methods: {\n onEditorLoad() {\n const frameElement = document.getElementById(`csml-editor--frame`);\n const eventData = {\n event: 'editorContext',\n data: this.modelValue || '',\n };\n frameElement.contentWindow.postMessage(JSON.stringify(eventData), '*');\n this.iframeLoading = false;\n },\n },\n};\n</script>\n\n<template>\n <div class=\"csml-editor--container\">\n <LoadingState\n v-if=\"iframeLoading\"\n :message=\"$t('AGENT_BOTS.LOADING_EDITOR')\"\n class=\"dashboard-app_loading-container\"\n />\n <iframe\n id=\"csml-editor--frame\"\n :src=\"globalConfig.csmlEditorHost\"\n @load=\"onEditorLoad\"\n />\n </div>\n</template>\n\n<style scoped>\n#csml-editor--frame {\n border: 0;\n width: 100%;\n height: 100%;\n}\n</style>\n","<script>\nimport { useVuelidate } from '@vuelidate/core';\nimport { required } from '@vuelidate/validators';\nimport CsmlMonacoEditor from './CSMLMonacoEditor.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: { CsmlMonacoEditor, NextButton },\n props: {\n agentBot: {\n type: Object,\n default: () => {},\n },\n },\n emits: ['submit'],\n setup() {\n return { v$: useVuelidate() };\n },\n validations: {\n bot: {\n name: { required },\n csmlContent: { required },\n },\n },\n data() {\n return {\n bot: {\n name: this.agentBot.name || '',\n description: this.agentBot.description || '',\n csmlContent: this.agentBot.bot_config.csml_content || '',\n },\n };\n },\n methods: {\n onSubmit() {\n this.v$.$touch();\n if (this.v$.$invalid) {\n return;\n }\n this.$emit('submit', {\n id: this.agentBot.id || '',\n ...this.bot,\n });\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex flex-col h-auto overflow-auto\">\n <div class=\"flex flex-row\">\n <div class=\"w-[68%]\">\n <div class=\"h-[calc(100vh-56px)] relative\">\n <CsmlMonacoEditor v-model=\"bot.csmlContent\" class=\"w-full h-full\" />\n <div\n v-if=\"v$.bot.csmlContent.$error\"\n class=\"bg-red-100 dark:bg-red-200 text-white dark:text-white absolute bottom-0 w-full p-2.5 flex items-center text-xs justify-center flex-shrink-0\"\n >\n <span>{{ $t('AGENT_BOTS.CSML_BOT_EDITOR.BOT_CONFIG.ERROR') }}</span>\n </div>\n </div>\n </div>\n <div class=\"w-[32%] overflow-auto p-4 h-[calc(100vh-56px)]\">\n <form\n class=\"flex flex-col justify-between h-full\"\n @submit.prevent=\"onSubmit\"\n >\n <div>\n <label :class=\"{ error: v$.bot.name.$error }\">\n {{ $t('AGENT_BOTS.CSML_BOT_EDITOR.NAME.LABEL') }}\n <input\n v-model=\"bot.name\"\n type=\"text\"\n :placeholder=\"$t('AGENT_BOTS.CSML_BOT_EDITOR.NAME.PLACEHOLDER')\"\n />\n <span v-if=\"v$.bot.name.$error\" class=\"message\">\n {{ $t('AGENT_BOTS.CSML_BOT_EDITOR.NAME.ERROR') }}\n </span>\n </label>\n <label>\n {{ $t('AGENT_BOTS.CSML_BOT_EDITOR.DESCRIPTION.LABEL') }}\n <textarea\n v-model=\"bot.description\"\n rows=\"4\"\n :placeholder=\"\n $t('AGENT_BOTS.CSML_BOT_EDITOR.DESCRIPTION.PLACEHOLDER')\n \"\n />\n </label>\n <NextButton\n type=\"submit\"\n :label=\"$t('AGENT_BOTS.CSML_BOT_EDITOR.SUBMIT')\"\n />\n </div>\n </form>\n </div>\n </div>\n </div>\n</template>\n","<script>\nimport { useAlert } from 'dashboard/composables';\nimport Spinner from 'shared/components/Spinner.vue';\nimport CsmlBotEditor from '../components/CSMLBotEditor.vue';\n\nexport default {\n components: { Spinner, CsmlBotEditor },\n computed: {\n agentBot() {\n return this.$store.getters['agentBots/getBot'](this.$route.params.botId);\n },\n },\n mounted() {\n this.$store.dispatch('agentBots/show', this.$route.params.botId);\n },\n methods: {\n async updateBot(bot) {\n try {\n await this.$store.dispatch('agentBots/update', {\n id: bot.id,\n name: bot.name,\n description: bot.description,\n bot_type: 'csml',\n bot_config: { csml_content: bot.csmlContent },\n });\n useAlert(this.$t('AGENT_BOTS.EDIT.API.SUCCESS_MESSAGE'));\n } catch (error) {\n useAlert(this.$t('AGENT_BOTS.CSML_BOT_EDITOR.BOT_CONFIG.API_ERROR'));\n }\n },\n },\n};\n</script>\n\n<template>\n <CsmlBotEditor v-if=\"agentBot.id\" :agent-bot=\"agentBot\" @submit=\"updateBot\" />\n <div v-else class=\"flex flex-col h-auto overflow-auto no-padding\">\n <Spinner />\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\nimport { frontendURL } from '../../../../../helper/URLHelper';\nimport CsmlBotEditor from '../components/CSMLBotEditor.vue';\n\nexport default {\n components: { CsmlBotEditor },\n computed: {\n ...mapGetters({\n accountId: 'getCurrentAccountId',\n }),\n },\n methods: {\n async saveBot(bot) {\n try {\n const agentBot = await this.$store.dispatch('agentBots/create', {\n name: bot.name,\n description: bot.description,\n bot_type: 'csml',\n bot_config: { csml_content: bot.csmlContent },\n });\n if (agentBot) {\n this.$router.replace(\n frontendURL(\n `accounts/${this.accountId}/settings/agent-bots/csml/${agentBot.id}`\n )\n );\n }\n useAlert(this.$t('AGENT_BOTS.ADD.API.SUCCESS_MESSAGE'));\n } catch (error) {\n useAlert(this.$t('AGENT_BOTS.ADD.API.ERROR_MESSAGE'));\n }\n },\n },\n};\n</script>\n\n<template>\n <CsmlBotEditor :agent-bot=\"{ bot_config: {} }\" @submit=\"saveBot\" />\n</template>\n","<script>\nimport { useAdmin } from 'dashboard/composables/useAdmin';\nimport BackButton from '../../../components/widgets/BackButton.vue';\n\nexport default {\n components: {\n BackButton,\n },\n props: {\n headerTitle: {\n default: '',\n type: String,\n },\n buttonRoute: {\n default: '',\n type: String,\n },\n buttonText: {\n default: '',\n type: String,\n },\n icon: {\n default: '',\n type: String,\n },\n showBackButton: { type: Boolean, default: false },\n showNewButton: { type: Boolean, default: false },\n backUrl: {\n type: [String, Object],\n default: '',\n },\n backButtonLabel: {\n type: String,\n default: '',\n },\n showSidemenuIcon: {\n type: Boolean,\n default: true,\n },\n },\n setup() {\n const { isAdmin } = useAdmin();\n return {\n isAdmin,\n };\n },\n computed: {\n iconClass() {\n return `icon ${this.icon} header--icon`;\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"flex justify-between items-center h-20 min-h-[3.5rem] px-4 py-2 bg-n-background\"\n >\n <h1 class=\"flex items-center mb-0 text-2xl text-n-slate-12\">\n <woot-sidemenu-icon v-if=\"showSidemenuIcon\" />\n <BackButton\n v-if=\"showBackButton\"\n :button-label=\"backButtonLabel\"\n :back-url=\"backUrl\"\n class=\"ml-2 mr-4\"\n />\n\n <slot />\n <span class=\"text-xl font-medium text-slate-900 dark:text-slate-100\">\n {{ headerTitle }}\n </span>\n </h1>\n <router-link\n v-if=\"showNewButton && isAdmin\"\n :to=\"buttonRoute\"\n class=\"button success button--fixed-top rounded-[5px] flex gap-2\"\n >\n <fluent-icon icon=\"add-circle\" />\n <span class=\"button__content\">\n {{ buttonText }}\n </span>\n </router-link>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport SettingsHeader from './SettingsHeader.vue';\n\nconst props = defineProps({\n headerTitle: { type: String, default: '' },\n headerButtonText: { type: String, default: '' },\n icon: { type: String, default: '' },\n keepAlive: { type: Boolean, default: true },\n newButtonRoutes: { type: Array, default: () => [] },\n showBackButton: { type: Boolean, default: false },\n backUrl: { type: [String, Object], default: '' },\n showSidemenuIcon: { type: Boolean, default: true },\n fullWidth: { type: Boolean, default: false },\n});\n\nconst { t } = useI18n();\n\nconst showNewButton = computed(\n () => props.newButtonRoutes.length && !props.showBackButton\n);\n\nconst showSettingsHeader = computed(\n () =>\n props.headerTitle ||\n props.icon ||\n props.showBackButton ||\n showNewButton.value\n);\n</script>\n\n<template>\n <div class=\"flex flex-1 flex-col m-0 bg-n-background overflow-auto\">\n <div\n class=\"mx-auto w-full flex flex-col flex-1\"\n :class=\"{ 'max-w-6xl': !fullWidth }\"\n >\n <SettingsHeader\n v-if=\"showSettingsHeader\"\n button-route=\"new\"\n :icon=\"icon\"\n :header-title=\"t(headerTitle)\"\n :button-text=\"t(headerButtonText)\"\n :show-back-button=\"showBackButton\"\n :back-url=\"backUrl\"\n :show-new-button=\"showNewButton\"\n :show-sidemenu-icon=\"showSidemenuIcon\"\n class=\"sticky top-0 z-20\"\n :class=\"{ 'max-w-6xl w-full mx-auto': fullWidth }\"\n />\n\n <router-view v-slot=\"{ Component }\" class=\"px-5 flex-1 overflow-hidden\">\n <component :is=\"Component\" v-if=\"!keepAlive\" :key=\"$route.fullPath\" />\n <keep-alive v-else>\n <component :is=\"Component\" :key=\"$route.fullPath\" />\n </keep-alive>\n </router-view>\n </div>\n </div>\n</template>\n","import { FEATURE_FLAGS } from '../../../../featureFlags';\nimport Bot from './Index.vue';\nimport CsmlEditBot from './csml/Edit.vue';\nimport CsmlNewBot from './csml/New.vue';\nimport { frontendURL } from '../../../../helper/URLHelper';\nimport SettingsContent from '../Wrapper.vue';\nimport SettingsWrapper from '../SettingsWrapper.vue';\n\nexport default {\n routes: [\n {\n path: frontendURL('accounts/:accountId/settings/agent-bots'),\n meta: {\n permissions: ['administrator'],\n },\n component: SettingsWrapper,\n children: [\n {\n path: '',\n name: 'agent_bots',\n component: Bot,\n meta: {\n featureFlag: FEATURE_FLAGS.AGENT_BOTS,\n permissions: ['administrator'],\n },\n },\n ],\n },\n {\n path: frontendURL('accounts/:accountId/settings/agent-bots'),\n component: SettingsContent,\n props: () => {\n return {\n headerTitle: 'AGENT_BOTS.HEADER',\n icon: 'bot',\n showBackButton: true,\n };\n },\n children: [\n {\n path: 'csml/new',\n name: 'agent_bots_csml_new',\n component: CsmlNewBot,\n meta: {\n featureFlag: FEATURE_FLAGS.AGENT_BOTS,\n permissions: ['administrator'],\n },\n },\n {\n path: 'csml/:botId',\n name: 'agent_bots_csml_edit',\n component: CsmlEditBot,\n meta: {\n featureFlag: FEATURE_FLAGS.AGENT_BOTS,\n permissions: ['administrator'],\n },\n },\n ],\n },\n ],\n};\n","export const ATTRIBUTE_MODELS = [\n {\n id: 0,\n option: 'Conversation',\n },\n {\n id: 1,\n option: 'Contact',\n },\n];\n\nexport const ATTRIBUTE_TYPES = [\n {\n id: 0,\n option: 'Text',\n },\n {\n id: 1,\n option: 'Number',\n },\n {\n id: 4,\n option: 'Link',\n },\n {\n id: 5,\n option: 'Date',\n },\n {\n id: 6,\n option: 'List',\n },\n {\n id: 7,\n option: 'Checkbox',\n },\n];\n","<script>\nimport { useVuelidate } from '@vuelidate/core';\nimport { required, minLength } from '@vuelidate/validators';\nimport { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\nimport { convertToAttributeSlug } from 'dashboard/helper/commons.js';\nimport { ATTRIBUTE_MODELS, ATTRIBUTE_TYPES } from './constants';\n\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n NextButton,\n },\n props: {\n onClose: {\n type: Function,\n default: () => {},\n },\n // Passes 0 or 1 based on the selected AttributeModel tab selected in the UI\n // Needs a better data type, todo: refactor this component later\n selectedAttributeModelTab: {\n type: Number,\n default: 0,\n },\n },\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n displayName: '',\n description: '',\n // Using the prop as default. There is no side effect here as the component\n // is destroyed completely when the modal is closed. The prop doesn't change\n // dynamically when the modal is active.\n attributeModel: this.selectedAttributeModelTab || 0,\n attributeType: 0,\n attributeKey: '',\n regexPattern: null,\n regexCue: null,\n regexEnabled: false,\n models: ATTRIBUTE_MODELS,\n types: ATTRIBUTE_TYPES,\n values: [],\n options: [],\n show: true,\n isTouched: false,\n };\n },\n\n computed: {\n ...mapGetters({\n uiFlags: 'getUIFlags',\n }),\n isMultiselectInvalid() {\n return this.isTouched && this.values.length === 0;\n },\n isTagInputInvalid() {\n return this.isAttributeTypeList && this.values.length === 0;\n },\n attributeListValues() {\n return this.values.map(item => item.name);\n },\n isButtonDisabled() {\n return (\n this.v$.displayName.$invalid ||\n this.v$.description.$invalid ||\n this.uiFlags.isCreating ||\n this.isTagInputInvalid\n );\n },\n keyErrorMessage() {\n if (!this.v$.attributeKey.isKey) {\n return this.$t('ATTRIBUTES_MGMT.ADD.FORM.KEY.IN_VALID');\n }\n return this.$t('ATTRIBUTES_MGMT.ADD.FORM.KEY.ERROR');\n },\n isAttributeTypeList() {\n return this.attributeType === 6;\n },\n isAttributeTypeText() {\n return this.attributeType === 0;\n },\n isRegexEnabled() {\n return this.regexEnabled;\n },\n },\n\n validations: {\n displayName: {\n required,\n minLength: minLength(1),\n },\n description: {\n required,\n },\n attributeModel: {\n required,\n },\n attributeType: {\n required,\n },\n attributeKey: {\n required,\n isKey(value) {\n return !(value.indexOf(' ') >= 0);\n },\n },\n },\n\n methods: {\n addTagValue(tagValue) {\n const tag = {\n name: tagValue,\n };\n this.values.push(tag);\n this.$refs.tagInput.$el.focus();\n },\n onTouch() {\n this.isTouched = true;\n },\n onDisplayNameChange() {\n this.attributeKey = convertToAttributeSlug(this.displayName);\n },\n toggleRegexEnabled() {\n this.regexEnabled = !this.regexEnabled;\n },\n async addAttributes() {\n this.v$.$touch();\n if (this.v$.$invalid) {\n return;\n }\n if (!this.regexEnabled) {\n this.regexPattern = null;\n this.regexCue = null;\n }\n try {\n await this.$store.dispatch('attributes/create', {\n attribute_display_name: this.displayName,\n attribute_description: this.description,\n attribute_model: this.attributeModel,\n attribute_display_type: this.attributeType,\n attribute_key: this.attributeKey,\n attribute_values: this.attributeListValues,\n regex_pattern: this.regexPattern\n ? new RegExp(this.regexPattern).toString()\n : null,\n regex_cue: this.regexCue,\n });\n this.alertMessage = this.$t('ATTRIBUTES_MGMT.ADD.API.SUCCESS_MESSAGE');\n this.onClose();\n } catch (error) {\n const errorMessage = error?.message;\n this.alertMessage =\n errorMessage || this.$t('ATTRIBUTES_MGMT.ADD.API.ERROR_MESSAGE');\n } finally {\n useAlert(this.alertMessage);\n }\n },\n },\n};\n</script>\n\n<template>\n <woot-modal v-model:show=\"show\" :on-close=\"onClose\">\n <div class=\"flex flex-col h-auto overflow-auto\">\n <woot-modal-header :header-title=\"$t('ATTRIBUTES_MGMT.ADD.TITLE')\" />\n\n <form class=\"flex w-full\" @submit.prevent=\"addAttributes\">\n <div class=\"w-full\">\n <label :class=\"{ error: v$.attributeModel.$error }\">\n {{ $t('ATTRIBUTES_MGMT.ADD.FORM.MODEL.LABEL') }}\n <select v-model=\"attributeModel\">\n <option v-for=\"model in models\" :key=\"model.id\" :value=\"model.id\">\n {{ model.option }}\n </option>\n </select>\n <span v-if=\"v$.attributeModel.$error\" class=\"message\">\n {{ $t('ATTRIBUTES_MGMT.ADD.FORM.MODEL.ERROR') }}\n </span>\n </label>\n <woot-input\n v-model=\"displayName\"\n :label=\"$t('ATTRIBUTES_MGMT.ADD.FORM.NAME.LABEL')\"\n type=\"text\"\n :class=\"{ error: v$.displayName.$error }\"\n :error=\"\n v$.displayName.$error\n ? $t('ATTRIBUTES_MGMT.ADD.FORM.NAME.ERROR')\n : ''\n \"\n :placeholder=\"$t('ATTRIBUTES_MGMT.ADD.FORM.NAME.PLACEHOLDER')\"\n @update:model-value=\"onDisplayNameChange\"\n @blur=\"v$.displayName.$touch\"\n />\n <woot-input\n v-model=\"attributeKey\"\n :label=\"$t('ATTRIBUTES_MGMT.ADD.FORM.KEY.LABEL')\"\n type=\"text\"\n :class=\"{ error: v$.attributeKey.$error }\"\n :error=\"v$.attributeKey.$error ? keyErrorMessage : ''\"\n :placeholder=\"$t('ATTRIBUTES_MGMT.ADD.FORM.KEY.PLACEHOLDER')\"\n @blur=\"v$.attributeKey.$touch\"\n />\n <label :class=\"{ error: v$.description.$error }\">\n {{ $t('ATTRIBUTES_MGMT.ADD.FORM.DESC.LABEL') }}\n <textarea\n v-model=\"description\"\n rows=\"3\"\n type=\"text\"\n :placeholder=\"$t('ATTRIBUTES_MGMT.ADD.FORM.DESC.PLACEHOLDER')\"\n @blur=\"v$.description.$touch\"\n />\n <span v-if=\"v$.description.$error\" class=\"message\">\n {{ $t('ATTRIBUTES_MGMT.ADD.FORM.DESC.ERROR') }}\n </span>\n </label>\n <label :class=\"{ error: v$.attributeType.$error }\">\n {{ $t('ATTRIBUTES_MGMT.ADD.FORM.TYPE.LABEL') }}\n <select v-model=\"attributeType\">\n <option v-for=\"type in types\" :key=\"type.id\" :value=\"type.id\">\n {{ type.option }}\n </option>\n </select>\n <span v-if=\"v$.attributeType.$error\" class=\"message\">\n {{ $t('ATTRIBUTES_MGMT.ADD.FORM.TYPE.ERROR') }}\n </span>\n </label>\n <div v-if=\"isAttributeTypeList\" class=\"multiselect--wrap\">\n <label>\n {{ $t('ATTRIBUTES_MGMT.ADD.FORM.TYPE.LIST.LABEL') }}\n </label>\n <multiselect\n ref=\"tagInput\"\n v-model=\"values\"\n :placeholder=\"\n $t('ATTRIBUTES_MGMT.ADD.FORM.TYPE.LIST.PLACEHOLDER')\n \"\n label=\"name\"\n track-by=\"name\"\n :class=\"{ invalid: isMultiselectInvalid }\"\n :options=\"options\"\n multiple\n taggable\n @close=\"onTouch\"\n @tag=\"addTagValue\"\n />\n <label v-show=\"isMultiselectInvalid\" class=\"error-message\">\n {{ $t('ATTRIBUTES_MGMT.ADD.FORM.TYPE.LIST.ERROR') }}\n </label>\n </div>\n <div v-if=\"isAttributeTypeText\">\n <input\n v-model=\"regexEnabled\"\n type=\"checkbox\"\n @input=\"toggleRegexEnabled\"\n />\n {{ $t('ATTRIBUTES_MGMT.ADD.FORM.ENABLE_REGEX.LABEL') }}\n </div>\n <woot-input\n v-if=\"isAttributeTypeText && isRegexEnabled\"\n v-model=\"regexPattern\"\n :label=\"$t('ATTRIBUTES_MGMT.ADD.FORM.REGEX_PATTERN.LABEL')\"\n type=\"text\"\n :placeholder=\"\n $t('ATTRIBUTES_MGMT.ADD.FORM.REGEX_PATTERN.PLACEHOLDER')\n \"\n />\n <woot-input\n v-if=\"isAttributeTypeText && isRegexEnabled\"\n v-model=\"regexCue\"\n :label=\"$t('ATTRIBUTES_MGMT.ADD.FORM.REGEX_CUE.LABEL')\"\n type=\"text\"\n :placeholder=\"$t('ATTRIBUTES_MGMT.ADD.FORM.REGEX_CUE.PLACEHOLDER')\"\n />\n <div class=\"flex flex-row justify-end w-full gap-2 px-0 py-2\">\n <NextButton\n faded\n slate\n type=\"reset\"\n :label=\"$t('ATTRIBUTES_MGMT.ADD.CANCEL_BUTTON_TEXT')\"\n @click.prevent=\"onClose\"\n />\n <NextButton\n type=\"submit\"\n :label=\"$t('ATTRIBUTES_MGMT.ADD.SUBMIT')\"\n :disabled=\"isButtonDisabled\"\n />\n </div>\n </div>\n </form>\n </div>\n </woot-modal>\n</template>\n\n<style lang=\"scss\" scoped>\n.key-value {\n padding: 0 var(--space-small) var(--space-small) 0;\n font-family: monospace;\n}\n\n.multiselect--wrap {\n margin-bottom: var(--space-normal);\n\n .error-message {\n color: var(--r-400);\n font-size: var(--font-size-small);\n font-weight: var(--font-weight-normal);\n }\n\n .invalid {\n ::v-deep {\n .multiselect__tags {\n border: 1px solid var(--r-400);\n }\n }\n }\n}\n\n::v-deep {\n .multiselect {\n margin-bottom: 0;\n }\n\n .multiselect__content-wrapper {\n display: none;\n }\n\n .multiselect--active .multiselect__tags {\n border-radius: var(--border-radius-normal);\n }\n}\n</style>\n","<script>\nimport { useVuelidate } from '@vuelidate/core';\nimport { useAlert } from 'dashboard/composables';\nimport { required, minLength } from '@vuelidate/validators';\nimport { getRegexp } from 'shared/helpers/Validators';\nimport { ATTRIBUTE_TYPES } from './constants';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n NextButton,\n },\n props: {\n selectedAttribute: {\n type: Object,\n default: () => {},\n },\n isUpdating: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['onClose'],\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n displayName: '',\n description: '',\n attributeType: 0,\n regexPattern: null,\n regexCue: null,\n regexEnabled: false,\n types: ATTRIBUTE_TYPES,\n show: true,\n attributeKey: '',\n values: [],\n options: [],\n isTouched: true,\n };\n },\n validations: {\n displayName: {\n required,\n },\n attributeType: {\n required,\n },\n description: {\n required,\n minLength: minLength(1),\n },\n attributeKey: {\n required,\n isKey(value) {\n return !(value.indexOf(' ') >= 0);\n },\n },\n },\n computed: {\n setAttributeListValue() {\n return this.selectedAttribute.attribute_values.map(values => ({\n name: values,\n }));\n },\n updatedAttributeListValues() {\n return this.values.map(item => item.name);\n },\n isButtonDisabled() {\n return this.v$.description.$invalid || this.isMultiselectInvalid;\n },\n isMultiselectInvalid() {\n return (\n this.isAttributeTypeList && this.isTouched && this.values.length === 0\n );\n },\n\n pageTitle() {\n return `${this.$t('ATTRIBUTES_MGMT.EDIT.TITLE')} - ${\n this.selectedAttribute.attribute_display_name\n }`;\n },\n selectedAttributeType() {\n return this.types.find(\n item =>\n item.option.toLowerCase() ===\n this.selectedAttribute.attribute_display_type\n ).id;\n },\n keyErrorMessage() {\n if (!this.v$.attributeKey.isKey) {\n return this.$t('ATTRIBUTES_MGMT.ADD.FORM.KEY.IN_VALID');\n }\n return this.$t('ATTRIBUTES_MGMT.ADD.FORM.KEY.ERROR');\n },\n isAttributeTypeList() {\n return this.attributeType === 6;\n },\n isAttributeTypeText() {\n return this.attributeType === 0;\n },\n isRegexEnabled() {\n return this.regexEnabled;\n },\n },\n mounted() {\n this.setFormValues();\n },\n methods: {\n onClose() {\n this.$emit('onClose');\n },\n addTagValue(tagValue) {\n const tag = {\n name: tagValue,\n };\n this.values.push(tag);\n this.$refs.tagInput.$el.focus();\n },\n setFormValues() {\n const regexPattern = this.selectedAttribute.regex_pattern\n ? getRegexp(this.selectedAttribute.regex_pattern).source\n : null;\n this.displayName = this.selectedAttribute.attribute_display_name;\n this.description = this.selectedAttribute.attribute_description;\n this.attributeType = this.selectedAttributeType;\n this.attributeKey = this.selectedAttribute.attribute_key;\n this.regexPattern = regexPattern;\n this.regexCue = this.selectedAttribute.regex_cue;\n this.regexEnabled = regexPattern != null;\n this.values = this.setAttributeListValue;\n },\n async editAttributes() {\n this.v$.$touch();\n if (this.v$.$invalid) {\n return;\n }\n if (!this.regexEnabled) {\n this.regexPattern = null;\n this.regexCue = null;\n }\n try {\n await this.$store.dispatch('attributes/update', {\n id: this.selectedAttribute.id,\n attribute_description: this.description,\n attribute_display_name: this.displayName,\n attribute_values: this.updatedAttributeListValues,\n regex_pattern: this.regexPattern\n ? new RegExp(this.regexPattern).toString()\n : null,\n regex_cue: this.regexCue,\n });\n this.alertMessage = this.$t('ATTRIBUTES_MGMT.EDIT.API.SUCCESS_MESSAGE');\n this.onClose();\n } catch (error) {\n const errorMessage = error?.message;\n this.alertMessage =\n errorMessage || this.$t('ATTRIBUTES_MGMT.EDIT.API.ERROR_MESSAGE');\n } finally {\n useAlert(this.alertMessage);\n }\n },\n toggleRegexEnabled() {\n this.regexEnabled = !this.regexEnabled;\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex flex-col h-auto overflow-auto\">\n <woot-modal-header :header-title=\"pageTitle\" />\n <form class=\"flex flex-col w-full\" @submit.prevent=\"editAttributes\">\n <div class=\"w-full\">\n <woot-input\n v-model=\"displayName\"\n :label=\"$t('ATTRIBUTES_MGMT.ADD.FORM.NAME.LABEL')\"\n type=\"text\"\n :class=\"{ error: v$.displayName.$error }\"\n :error=\"\n v$.displayName.$error\n ? $t('ATTRIBUTES_MGMT.ADD.FORM.NAME.ERROR')\n : ''\n \"\n :placeholder=\"$t('ATTRIBUTES_MGMT.ADD.FORM.NAME.PLACEHOLDER')\"\n @blur=\"v$.displayName.$touch\"\n />\n <woot-input\n v-model=\"attributeKey\"\n :label=\"$t('ATTRIBUTES_MGMT.ADD.FORM.KEY.LABEL')\"\n type=\"text\"\n :class=\"{ error: v$.attributeKey.$error }\"\n :error=\"v$.attributeKey.$error ? keyErrorMessage : ''\"\n :placeholder=\"$t('ATTRIBUTES_MGMT.ADD.FORM.KEY.PLACEHOLDER')\"\n readonly\n @blur=\"v$.attributeKey.$touch\"\n />\n <label :class=\"{ error: v$.description.$error }\">\n {{ $t('ATTRIBUTES_MGMT.ADD.FORM.DESC.LABEL') }}\n <textarea\n v-model=\"description\"\n rows=\"5\"\n type=\"text\"\n :placeholder=\"$t('ATTRIBUTES_MGMT.ADD.FORM.DESC.PLACEHOLDER')\"\n @blur=\"v$.description.$touch\"\n />\n <span v-if=\"v$.description.$error\" class=\"message\">\n {{ $t('ATTRIBUTES_MGMT.ADD.FORM.DESC.ERROR') }}\n </span>\n </label>\n <label :class=\"{ error: v$.attributeType.$error }\">\n {{ $t('ATTRIBUTES_MGMT.ADD.FORM.TYPE.LABEL') }}\n <select v-model=\"attributeType\" disabled>\n <option v-for=\"type in types\" :key=\"type.id\" :value=\"type.id\">\n {{ type.option }}\n </option>\n </select>\n <span v-if=\"v$.attributeType.$error\" class=\"message\">\n {{ $t('ATTRIBUTES_MGMT.ADD.FORM.TYPE.ERROR') }}\n </span>\n </label>\n <div v-if=\"isAttributeTypeList\" class=\"multiselect--wrap\">\n <label>\n {{ $t('ATTRIBUTES_MGMT.EDIT.TYPE.LIST.LABEL') }}\n </label>\n <multiselect\n ref=\"tagInput\"\n v-model=\"values\"\n :placeholder=\"$t('ATTRIBUTES_MGMT.ADD.FORM.TYPE.LIST.PLACEHOLDER')\"\n label=\"name\"\n track-by=\"name\"\n :class=\"{ invalid: isMultiselectInvalid }\"\n :options=\"options\"\n multiple\n taggable\n @tag=\"addTagValue\"\n />\n <label v-show=\"isMultiselectInvalid\" class=\"error-message\">\n {{ $t('ATTRIBUTES_MGMT.ADD.FORM.TYPE.LIST.ERROR') }}\n </label>\n </div>\n <div v-if=\"isAttributeTypeText\">\n <input\n v-model=\"regexEnabled\"\n type=\"checkbox\"\n @input=\"toggleRegexEnabled\"\n />\n {{ $t('ATTRIBUTES_MGMT.ADD.FORM.ENABLE_REGEX.LABEL') }}\n </div>\n <woot-input\n v-if=\"isAttributeTypeText && isRegexEnabled\"\n v-model=\"regexPattern\"\n :label=\"$t('ATTRIBUTES_MGMT.ADD.FORM.REGEX_PATTERN.LABEL')\"\n type=\"text\"\n :placeholder=\"\n $t('ATTRIBUTES_MGMT.ADD.FORM.REGEX_PATTERN.PLACEHOLDER')\n \"\n />\n <woot-input\n v-if=\"isAttributeTypeText && isRegexEnabled\"\n v-model=\"regexCue\"\n :label=\"$t('ATTRIBUTES_MGMT.ADD.FORM.REGEX_CUE.LABEL')\"\n type=\"text\"\n :placeholder=\"$t('ATTRIBUTES_MGMT.ADD.FORM.REGEX_CUE.PLACEHOLDER')\"\n />\n </div>\n <div class=\"flex flex-row justify-end w-full gap-2 px-0 py-2\">\n <NextButton\n faded\n slate\n type=\"reset\"\n :label=\"$t('ATTRIBUTES_MGMT.ADD.CANCEL_BUTTON_TEXT')\"\n @click.prevent=\"onClose\"\n />\n <NextButton\n type=\"submit\"\n :label=\"$t('ATTRIBUTES_MGMT.EDIT.UPDATE_BUTTON_TEXT')\"\n :is-loading=\"isUpdating\"\n :disabled=\"isButtonDisabled\"\n />\n </div>\n </form>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.key-value {\n padding: 0 var(--space-small) var(--space-small) 0;\n font-family: monospace;\n}\n\n.multiselect--wrap {\n margin-bottom: var(--space-normal);\n\n .error-message {\n color: var(--r-400);\n font-size: var(--font-size-small);\n font-weight: var(--font-weight-normal);\n }\n\n .invalid {\n ::v-deep {\n .multiselect__tags {\n border: 1px solid var(--r-400);\n }\n }\n }\n}\n\n::v-deep {\n .multiselect {\n margin-bottom: 0;\n }\n\n .multiselect__content-wrapper {\n display: none;\n }\n\n .multiselect--active .multiselect__tags {\n border-radius: var(--border-radius-normal);\n }\n}\n</style>\n","<script setup>\nimport { useAlert } from 'dashboard/composables';\nimport EditAttribute from './EditAttribute.vue';\nimport { useStoreGetters, useStore } from 'dashboard/composables/store';\nimport { computed, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n attributeModel: {\n type: String,\n default: 'conversation_attribute',\n },\n});\n\nconst { t } = useI18n();\n\nconst showEditPopup = ref(false);\nconst showDeletePopup = ref(false);\nconst selectedAttribute = ref({});\n\nconst getters = useStoreGetters();\nconst store = useStore();\n\nconst attributes = computed(() =>\n getters['attributes/getAttributesByModel'].value(props.attributeModel)\n);\nconst uiFlags = computed(() => getters['attributes/getUIFlags'].value);\n\nconst attributeDisplayName = computed(\n () => selectedAttribute.value.attribute_display_name\n);\nconst deleteConfirmText = computed(\n () =>\n `${t('ATTRIBUTES_MGMT.DELETE.CONFIRM.YES')} ${attributeDisplayName.value}`\n);\nconst deleteRejectText = computed(() => t('ATTRIBUTES_MGMT.DELETE.CONFIRM.NO'));\nconst confirmDeleteTitle = computed(() =>\n t('ATTRIBUTES_MGMT.DELETE.CONFIRM.TITLE', {\n attributeName: attributeDisplayName.value,\n })\n);\nconst confirmPlaceHolderText = computed(\n () =>\n `${t('ATTRIBUTES_MGMT.DELETE.CONFIRM.PLACE_HOLDER', {\n attributeName: attributeDisplayName.value,\n })}`\n);\n\nconst deleteAttributes = async ({ id }) => {\n try {\n await store.dispatch('attributes/delete', id);\n useAlert(t('ATTRIBUTES_MGMT.DELETE.API.SUCCESS_MESSAGE'));\n } catch (error) {\n const errorMessage =\n error?.response?.message || t('ATTRIBUTES_MGMT.DELETE.API.ERROR_MESSAGE');\n useAlert(errorMessage);\n }\n};\nconst openEditPopup = response => {\n showEditPopup.value = true;\n selectedAttribute.value = response;\n};\nconst hideEditPopup = () => {\n showEditPopup.value = false;\n};\n\nconst closeDelete = () => {\n showDeletePopup.value = false;\n selectedAttribute.value = {};\n};\nconst confirmDeletion = () => {\n deleteAttributes(selectedAttribute.value);\n closeDelete();\n};\nconst openDelete = value => {\n showDeletePopup.value = true;\n selectedAttribute.value = value;\n};\n\nconst tableHeaders = computed(() => {\n return [\n t('ATTRIBUTES_MGMT.LIST.TABLE_HEADER.NAME'),\n t('ATTRIBUTES_MGMT.LIST.TABLE_HEADER.DESCRIPTION'),\n t('ATTRIBUTES_MGMT.LIST.TABLE_HEADER.TYPE'),\n t('ATTRIBUTES_MGMT.LIST.TABLE_HEADER.KEY'),\n ];\n});\n</script>\n\n<template>\n <div class=\"flex flex-col\">\n <table class=\"min-w-full overflow-x-auto\">\n <thead>\n <th\n v-for=\"tableHeader in tableHeaders\"\n :key=\"tableHeader\"\n class=\"py-4 ltr:pr-4 rtl:pl-4 text-left font-semibold text-n-slate-11\"\n >\n {{ tableHeader }}\n </th>\n </thead>\n <tbody\n class=\"divide-y divide-slate-25 dark:divide-slate-800 flex-1 text-slate-700 dark:text-slate-100\"\n >\n <tr v-for=\"attribute in attributes\" :key=\"attribute.attribute_key\">\n <td\n class=\"py-4 ltr:pr-4 rtl:pl-4 overflow-hidden whitespace-nowrap text-ellipsis\"\n >\n {{ attribute.attribute_display_name }}\n </td>\n <td class=\"py-4 ltr:pr-4 rtl:pl-4\">\n {{ attribute.attribute_description }}\n </td>\n <td\n class=\"py-4 ltr:pr-4 rtl:pl-4 overflow-hidden whitespace-nowrap text-ellipsis\"\n >\n {{ attribute.attribute_display_type }}\n </td>\n <td\n class=\"py-4 ltr:pr-4 rtl:pl-4 attribute-key overflow-hidden whitespace-nowrap text-ellipsis\"\n >\n {{ attribute.attribute_key }}\n </td>\n <td class=\"py-4 min-w-xs\">\n <div class=\"flex gap-1 justify-end\">\n <Button\n v-tooltip.top=\"$t('ATTRIBUTES_MGMT.LIST.BUTTONS.EDIT')\"\n icon=\"i-lucide-pen\"\n slate\n xs\n faded\n @click=\"openEditPopup(attribute)\"\n />\n <Button\n v-tooltip.top=\"$t('ATTRIBUTES_MGMT.LIST.BUTTONS.DELETE')\"\n icon=\"i-lucide-trash-2\"\n xs\n ruby\n faded\n @click=\"openDelete(attribute)\"\n />\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n <woot-modal v-model:show=\"showEditPopup\" :on-close=\"hideEditPopup\">\n <EditAttribute\n :selected-attribute=\"selectedAttribute\"\n :is-updating=\"uiFlags.isUpdating\"\n @on-close=\"hideEditPopup\"\n />\n </woot-modal>\n <woot-confirm-delete-modal\n v-if=\"showDeletePopup\"\n v-model:show=\"showDeletePopup\"\n :title=\"confirmDeleteTitle\"\n :message=\"$t('ATTRIBUTES_MGMT.DELETE.CONFIRM.MESSAGE')\"\n :confirm-text=\"deleteConfirmText\"\n :reject-text=\"deleteRejectText\"\n :confirm-value=\"selectedAttribute.attribute_display_name\"\n :confirm-place-holder-text=\"confirmPlaceHolderText\"\n @on-confirm=\"confirmDeletion\"\n @on-close=\"closeDelete\"\n />\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.attribute-key {\n font-family: monospace;\n}\n</style>\n","<script setup>\nimport { computed, onMounted, ref } from 'vue';\nimport BaseSettingsHeader from '../components/BaseSettingsHeader.vue';\nimport AddAttribute from './AddAttribute.vue';\nimport CustomAttribute from './CustomAttribute.vue';\nimport SettingsLayout from '../SettingsLayout.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport { useI18n } from 'vue-i18n';\nimport { useStoreGetters, useStore } from 'dashboard/composables/store';\n\nconst { t } = useI18n();\n\nconst getters = useStoreGetters();\nconst store = useStore();\n\nconst showAddPopup = ref(false);\nconst selectedTabIndex = ref(0);\nconst uiFlags = computed(() => getters['attributes/getUIFlags'].value);\n\nconst openAddPopup = () => {\n showAddPopup.value = true;\n};\nconst hideAddPopup = () => {\n showAddPopup.value = false;\n};\n\nconst tabs = computed(() => {\n return [\n {\n key: 0,\n name: t('ATTRIBUTES_MGMT.TABS.CONVERSATION'),\n },\n {\n key: 1,\n name: t('ATTRIBUTES_MGMT.TABS.CONTACT'),\n },\n ];\n});\n\nonMounted(() => {\n store.dispatch('attributes/get');\n});\n\nconst attributeModel = computed(() =>\n selectedTabIndex.value ? 'contact_attribute' : 'conversation_attribute'\n);\n\nconst attributes = computed(() =>\n getters['attributes/getAttributesByModel'].value(attributeModel.value)\n);\n\nconst onClickTabChange = index => {\n selectedTabIndex.value = index;\n};\n</script>\n\n<template>\n <SettingsLayout\n :is-loading=\"uiFlags.isFetching\"\n :loading-message=\"$t('ATTRIBUTES_MGMT.LOADING')\"\n :no-records-found=\"!attributes.length\"\n :no-records-message=\"$t('ATTRIBUTES_MGMT.LIST.EMPTY_RESULT.404')\"\n >\n <template #header>\n <BaseSettingsHeader\n :title=\"$t('ATTRIBUTES_MGMT.HEADER')\"\n :description=\"$t('ATTRIBUTES_MGMT.DESCRIPTION')\"\n :link-text=\"$t('ATTRIBUTES_MGMT.LEARN_MORE')\"\n feature-name=\"custom_attributes\"\n >\n <template #actions>\n <Button\n icon=\"i-lucide-circle-plus\"\n :label=\"$t('ATTRIBUTES_MGMT.HEADER_BTN_TXT')\"\n @click=\"openAddPopup\"\n />\n </template>\n </BaseSettingsHeader>\n </template>\n <template #preBody>\n <woot-tabs\n class=\"font-medium [&_.tabs]:p-0 mb-4\"\n :index=\"selectedTabIndex\"\n @change=\"onClickTabChange\"\n >\n <woot-tabs-item\n v-for=\"(tab, index) in tabs\"\n :key=\"tab.key\"\n :index=\"index\"\n :name=\"tab.name\"\n :show-badge=\"false\"\n />\n </woot-tabs>\n </template>\n <template #body>\n <CustomAttribute\n :key=\"attributeModel\"\n :attribute-model=\"attributeModel\"\n />\n </template>\n <AddAttribute\n v-if=\"showAddPopup\"\n v-model:show=\"showAddPopup\"\n :on-close=\"hideAddPopup\"\n :selected-attribute-model-tab=\"selectedTabIndex\"\n />\n </SettingsLayout>\n</template>\n","import { FEATURE_FLAGS } from '../../../../featureFlags';\nimport { frontendURL } from '../../../../helper/URLHelper';\nimport SettingsWrapper from '../SettingsWrapper.vue';\nimport AttributesHome from './Index.vue';\n\nexport default {\n routes: [\n {\n path: frontendURL('accounts/:accountId/settings/custom-attributes'),\n component: SettingsWrapper,\n children: [\n {\n path: '',\n redirect: to => {\n return { name: 'attributes_list', params: to.params };\n },\n },\n {\n path: 'list',\n name: 'attributes_list',\n component: AttributesHome,\n meta: {\n featureFlag: FEATURE_FLAGS.CUSTOM_ATTRIBUTES,\n permissions: ['administrator'],\n },\n },\n ],\n },\n ],\n};\n","<script>\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n name: 'FilterInput',\n components: {\n NextButton,\n },\n props: {\n modelValue: {\n type: Object,\n default: () => {},\n },\n filterAttributes: {\n type: Array,\n default: () => [],\n },\n inputType: {\n type: String,\n default: 'plain_text',\n },\n operators: {\n type: Array,\n default: () => [],\n },\n dropdownValues: {\n type: Array,\n default: () => [],\n },\n showQueryOperator: {\n type: Boolean,\n default: false,\n },\n showUserInput: {\n type: Boolean,\n default: true,\n },\n groupedFilters: {\n type: Boolean,\n default: false,\n },\n filterGroups: {\n type: Array,\n default: () => [],\n },\n customAttributeType: {\n type: String,\n default: '',\n },\n errorMessage: {\n type: String,\n default: '',\n },\n },\n emits: ['update:modelValue', 'removeFilter', 'resetFilter'],\n computed: {\n attributeKey: {\n get() {\n if (!this.modelValue) return null;\n return this.modelValue.attribute_key;\n },\n set(value) {\n const payload = this.modelValue || {};\n this.$emit('update:modelValue', { ...payload, attribute_key: value });\n },\n },\n filterOperator: {\n get() {\n if (!this.modelValue) return null;\n return this.modelValue.filter_operator;\n },\n set(value) {\n const payload = this.modelValue || {};\n this.$emit('update:modelValue', { ...payload, filter_operator: value });\n },\n },\n values: {\n get() {\n if (!this.modelValue) return null;\n return this.modelValue.values;\n },\n set(value) {\n const payload = this.modelValue || {};\n this.$emit('update:modelValue', { ...payload, values: value });\n },\n },\n query_operator: {\n get() {\n if (!this.modelValue) return null;\n return this.modelValue.query_operator;\n },\n set(value) {\n const payload = this.modelValue || {};\n this.$emit('update:modelValue', { ...payload, query_operator: value });\n },\n },\n custom_attribute_type: {\n get() {\n if (!this.customAttributeType) return '';\n return this.customAttributeType;\n },\n set() {\n const payload = this.modelValue || {};\n this.$emit('update:modelValue', {\n ...payload,\n custom_attribute_type: this.customAttributeType,\n });\n },\n },\n },\n watch: {\n customAttributeType: {\n handler(value) {\n if (\n value === 'conversation_attribute' ||\n value === 'contact_attribute'\n ) {\n // eslint-disable-next-line vue/no-mutating-props\n this.modelValue.custom_attribute_type = this.customAttributeType;\n // eslint-disable-next-line vue/no-mutating-props\n } else this.modelValue.custom_attribute_type = '';\n },\n immediate: true,\n },\n },\n methods: {\n removeFilter() {\n this.$emit('removeFilter');\n },\n resetFilter() {\n this.$emit('resetFilter');\n },\n getInputErrorClass(errorMessage) {\n return errorMessage\n ? 'bg-n-ruby-8/20 border-n-ruby-5 dark:border-n-ruby-5'\n : 'bg-n-background border-n-weak dark:border-n-weak';\n },\n },\n};\n</script>\n\n<!-- eslint-disable vue/no-mutating-props -->\n<template>\n <div>\n <div\n class=\"p-2 border border-solid rounded-lg\"\n :class=\"getInputErrorClass(errorMessage)\"\n >\n <div class=\"flex gap-1\">\n <select\n v-if=\"groupedFilters\"\n v-model=\"attributeKey\"\n class=\"max-w-[30%] mb-0 mr-1\"\n @change=\"resetFilter()\"\n >\n <optgroup\n v-for=\"(group, i) in filterGroups\"\n :key=\"i\"\n :label=\"group.name\"\n >\n <option\n v-for=\"attribute in group.attributes\"\n :key=\"attribute.key\"\n :value=\"attribute.key\"\n :selected=\"true\"\n >\n {{ attribute.name }}\n </option>\n </optgroup>\n </select>\n <select\n v-else\n v-model=\"attributeKey\"\n class=\"max-w-[30%] mb-0 mr-1\"\n @change=\"resetFilter()\"\n >\n <option\n v-for=\"attribute in filterAttributes\"\n :key=\"attribute.key\"\n :value=\"attribute.key\"\n :disabled=\"attribute.disabled\"\n >\n {{ attribute.name }}\n </option>\n </select>\n\n <select v-model=\"filterOperator\" class=\"max-w-[20%] mb-0 mr-1\">\n <option\n v-for=\"(operator, o) in operators\"\n :key=\"o\"\n :value=\"operator.value\"\n >\n {{ $t(`FILTER.OPERATOR_LABELS.${operator.value}`) }}\n </option>\n </select>\n\n <div v-if=\"showUserInput\" class=\"flex-grow mr-1 filter__answer--wrap\">\n <div\n v-if=\"inputType === 'multi_select'\"\n class=\"multiselect-wrap--small\"\n >\n <multiselect\n v-model=\"values\"\n track-by=\"id\"\n label=\"name\"\n placeholder=\"Select\"\n multiple\n selected-label\n :select-label=\"$t('FORMS.MULTISELECT.ENTER_TO_SELECT')\"\n deselect-label=\"\"\n :max-height=\"160\"\n :options=\"dropdownValues\"\n :allow-empty=\"false\"\n />\n </div>\n <div\n v-else-if=\"inputType === 'search_select'\"\n class=\"multiselect-wrap--small\"\n >\n <multiselect\n v-model=\"values\"\n track-by=\"id\"\n label=\"name\"\n placeholder=\"Select\"\n selected-label\n :select-label=\"$t('FORMS.MULTISELECT.ENTER_TO_SELECT')\"\n deselect-label=\"\"\n :max-height=\"160\"\n :options=\"dropdownValues\"\n :allow-empty=\"false\"\n :option-height=\"104\"\n />\n </div>\n <div v-else-if=\"inputType === 'date'\" class=\"multiselect-wrap--small\">\n <input\n v-model=\"values\"\n type=\"date\"\n :editable=\"false\"\n class=\"!mb-0 datepicker\"\n />\n </div>\n <input\n v-else\n v-model=\"values\"\n type=\"text\"\n class=\"!mb-0\"\n :placeholder=\"$t('FILTER.INPUT_PLACEHOLDER')\"\n />\n </div>\n <NextButton\n icon=\"i-lucide-x\"\n slate\n ghost\n class=\"flex-shrink-0\"\n @click=\"removeFilter\"\n />\n </div>\n <p v-if=\"errorMessage\" class=\"filter-error\">\n {{ errorMessage }}\n </p>\n </div>\n\n <div\n v-if=\"showQueryOperator\"\n class=\"flex items-center justify-center relative my-2.5 mx-0\"\n >\n <hr\n class=\"absolute w-full border-b border-solid border-slate-75 dark:border-slate-800\"\n />\n <select\n v-model=\"query_operator\"\n class=\"relative w-auto mb-0 bg-white dark:bg-slate-900 text-slate-800 dark:text-slate-100 border-slate-75 dark:border-slate-600\"\n >\n <option value=\"and\">\n {{ $t('FILTER.QUERY_DROPDOWN_LABELS.AND') }}\n </option>\n <option value=\"or\">\n {{ $t('FILTER.QUERY_DROPDOWN_LABELS.OR') }}\n </option>\n </select>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.filter__answer--wrap {\n input {\n @apply bg-white dark:bg-slate-900 mb-0 text-slate-800 dark:text-slate-100 border-slate-75 dark:border-slate-600;\n }\n}\n\n.filter-error {\n @apply text-n-ruby-9 dark:text-n-ruby-9 block my-1 mx-0;\n}\n\n.multiselect {\n @apply mb-0;\n}\n</style>\n","<script>\nexport default {\n props: {\n teams: { type: Array, required: true },\n modelValue: { type: Object, required: true },\n },\n emits: ['update:modelValue'],\n data() {\n return {\n selectedTeams: [],\n message: '',\n };\n },\n mounted() {\n const { team_ids: teamIds } = this.modelValue;\n this.selectedTeams = teamIds;\n this.message = this.modelValue.message;\n },\n methods: {\n updateValue() {\n this.$emit('update:modelValue', {\n team_ids: this.selectedTeams.map(team => team.id),\n message: this.message,\n });\n },\n },\n};\n</script>\n\n<template>\n <div>\n <div class=\"multiselect-wrap--small flex flex-col gap-1 mt-1\">\n <multiselect\n v-model=\"selectedTeams\"\n track-by=\"id\"\n label=\"name\"\n :placeholder=\"$t('AUTOMATION.ACTION.TEAM_DROPDOWN_PLACEHOLDER')\"\n multiple\n selected-label\n :select-label=\"$t('FORMS.MULTISELECT.ENTER_TO_SELECT')\"\n deselect-label=\"\"\n :max-height=\"160\"\n :options=\"teams\"\n :allow-empty=\"false\"\n @update:model-value=\"updateValue\"\n />\n <textarea\n v-model=\"message\"\n rows=\"4\"\n :placeholder=\"$t('AUTOMATION.ACTION.TEAM_MESSAGE_INPUT_PLACEHOLDER')\"\n @input=\"updateValue\"\n />\n </div>\n </div>\n</template>\n\n<style scoped>\n.multiselect {\n margin: var(--space-smaller) var(--space-zero);\n}\ntextarea {\n margin-bottom: var(--space-zero);\n}\n</style>\n","<script>\nimport { useAlert } from 'dashboard/composables';\nimport Spinner from 'shared/components/Spinner.vue';\nexport default {\n components: {\n Spinner,\n },\n props: {\n initialFileName: {\n type: String,\n default: '',\n },\n },\n emits: ['update:modelValue'],\n data() {\n return {\n uploadState: 'idle',\n label: this.$t('AUTOMATION.ATTACHMENT.LABEL_IDLE'),\n };\n },\n mounted() {\n if (this.initialFileName) {\n this.label = this.initialFileName;\n this.uploadState = 'uploaded';\n }\n },\n methods: {\n async onChangeFile(event) {\n this.uploadState = 'processing';\n this.label = this.$t('AUTOMATION.ATTACHMENT.LABEL_UPLOADING');\n try {\n const file = event.target.files[0];\n const id = await this.$store.dispatch(\n 'automations/uploadAttachment',\n file\n );\n this.$emit('update:modelValue', [id]);\n this.uploadState = 'uploaded';\n this.label = this.$t('AUTOMATION.ATTACHMENT.LABEL_UPLOADED');\n } catch (error) {\n this.uploadState = 'failed';\n this.label = this.$t('AUTOMATION.ATTACHMENT.LABEL_UPLOAD_FAILED');\n useAlert(this.$t('AUTOMATION.ATTACHMENT.UPLOAD_ERROR'));\n }\n },\n },\n};\n</script>\n\n<template>\n <label class=\"input-wrapper\" :class=\"uploadState\">\n <input\n v-if=\"uploadState !== 'processing'\"\n type=\"file\"\n name=\"attachment\"\n :class=\"uploadState === 'processing' ? 'disabled' : ''\"\n @change=\"onChangeFile\"\n />\n <Spinner v-if=\"uploadState === 'processing'\" />\n <fluent-icon v-if=\"uploadState === 'idle'\" icon=\"file-upload\" />\n <fluent-icon\n v-if=\"uploadState === 'uploaded'\"\n icon=\"checkmark-circle\"\n type=\"outline\"\n class=\"success-icon\"\n />\n <fluent-icon\n v-if=\"uploadState === 'failed'\"\n icon=\"dismiss-circle\"\n type=\"outline\"\n class=\"error-icon\"\n />\n <p class=\"file-button\">{{ label }}</p>\n </label>\n</template>\n\n<style scoped>\ninput[type='file'] {\n @apply hidden;\n}\n.input-wrapper {\n @apply flex h-9 bg-white dark:bg-slate-900 py-1 px-2 items-center text-xs cursor-pointer rounded-sm border border-dashed border-woot-100 dark:border-woot-500;\n}\n.success-icon {\n @apply text-green-500 dark:text-green-600 mr-2;\n}\n.error-icon {\n @apply text-red-500 dark:text-red-600 mr-2;\n}\n\n.processing {\n @apply cursor-not-allowed opacity-90;\n}\n.file-button {\n @apply whitespace-nowrap overflow-hidden text-ellipsis w-full mb-0;\n}\n</style>\n","<script setup>\nimport { ref, watch, computed } from 'vue';\nimport { useKeyboardNavigableList } from 'dashboard/composables/useKeyboardNavigableList';\n\nconst props = defineProps({\n items: {\n type: Array,\n default: () => [],\n },\n type: {\n type: String,\n default: 'canned',\n },\n});\n\nconst emit = defineEmits(['mentionSelect']);\n\nconst mentionsListContainerRef = ref(null);\nconst selectedIndex = ref(0);\n\nconst adjustScroll = () => {\n const container = mentionsListContainerRef.value;\n const item = container.querySelector(`#mention-item-${selectedIndex.value}`);\n if (item) {\n const itemTop = item.offsetTop;\n const itemBottom = itemTop + item.offsetHeight;\n const containerTop = container.scrollTop;\n const containerBottom = containerTop + container.offsetHeight;\n if (itemTop < containerTop) {\n container.scrollTop = itemTop;\n } else if (itemBottom + 34 > containerBottom) {\n container.scrollTop = itemBottom - container.offsetHeight + 34;\n }\n }\n};\n\nconst onSelect = () => {\n emit('mentionSelect', props.items[selectedIndex.value]);\n};\n\nuseKeyboardNavigableList({\n items: computed(() => props.items),\n onSelect,\n adjustScroll,\n selectedIndex,\n});\n\nwatch(\n () => props.items,\n newItems => {\n if (newItems.length < selectedIndex.value + 1) {\n selectedIndex.value = 0;\n }\n }\n);\n\nwatch(selectedIndex, adjustScroll);\n\nconst onHover = index => {\n selectedIndex.value = index;\n};\n\nconst onListItemSelection = index => {\n selectedIndex.value = index;\n onSelect();\n};\n\nconst variableKey = (item = {}) => {\n return props.type === 'variable' ? `{{${item.label}}}` : `/${item.label}`;\n};\n</script>\n\n<template>\n <div\n ref=\"mentionsListContainerRef\"\n class=\"bg-n-solid-1 p-1 rounded-xl overflow-auto absolute w-full z-20 shadow-md left-0 bottom-full max-h-[9.75rem] border border-solid border-n-strong mention--box\"\n >\n <ul class=\"mb-0 vertical dropdown menu\">\n <woot-dropdown-item\n v-for=\"(item, index) in items\"\n :id=\"`mention-item-${index}`\"\n :key=\"item.key\"\n class=\"!mb-1\"\n @mouseover=\"onHover(index)\"\n >\n <button\n class=\"flex rounded-lg group flex-col gap-0.5 overflow-hidden cursor-pointer items-start px-3 py-2 justify-center w-full h-full text-left hover:bg-n-alpha-black2\"\n :class=\"{\n 'bg-n-alpha-black2': index === selectedIndex,\n }\"\n @click=\"onListItemSelection(index)\"\n >\n <slot :item=\"item\" :index=\"index\" :selected=\"index === selectedIndex\">\n <p\n class=\"max-w-full min-w-0 mb-0 overflow-hidden text-sm font-medium text-n-slate-11 group-hover:text-n-slate-11 text-ellipsis whitespace-nowrap\"\n :class=\"{\n 'text-n-slate-12': index === selectedIndex,\n }\"\n >\n {{ item.description }}\n </p>\n <p\n class=\"max-w-full min-w-0 mb-0 overflow-hidden text-xs text-slate-500 dark:text-slate-300 group-hover:text-n-slate-11 text-ellipsis whitespace-nowrap\"\n :class=\"{\n 'text-n-slate-12': index === selectedIndex,\n }\"\n >\n {{ variableKey(item) }}\n </p>\n </slot>\n </button>\n </woot-dropdown-item>\n </ul>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.mention--box {\n .dropdown-menu__item:last-child > button {\n @apply border-0;\n }\n}\n\n.canned-item__button::v-deep .button__content {\n @apply overflow-hidden text-ellipsis whitespace-nowrap;\n}\n</style>\n","<script>\nimport { mapGetters } from 'vuex';\nimport MentionBox from '../mentions/MentionBox.vue';\n\nexport default {\n components: { MentionBox },\n props: {\n searchKey: {\n type: String,\n default: '',\n },\n },\n emits: ['replace'],\n computed: {\n ...mapGetters({\n cannedMessages: 'getCannedResponses',\n }),\n items() {\n return this.cannedMessages.map(cannedMessage => ({\n label: cannedMessage.short_code,\n key: cannedMessage.short_code,\n description: cannedMessage.content,\n }));\n },\n },\n watch: {\n searchKey() {\n this.fetchCannedResponses();\n },\n },\n mounted() {\n this.fetchCannedResponses();\n },\n methods: {\n fetchCannedResponses() {\n this.$store.dispatch('getCannedResponse', { searchKey: this.searchKey });\n },\n handleMentionClick(item = {}) {\n this.$emit('replace', item.description);\n },\n },\n};\n</script>\n\n<!-- eslint-disable-next-line vue/no-root-v-if -->\n<template>\n <MentionBox\n v-if=\"items.length\"\n :items=\"items\"\n @mention-select=\"handleMentionClick\"\n />\n</template>\n","<script setup>\nimport { shallowRef, computed, onMounted } from 'vue';\nimport emojiGroups from 'shared/components/emoji/emojisGroup.json';\nimport MentionBox from '../mentions/MentionBox.vue';\n\nconst props = defineProps({\n searchKey: {\n type: String,\n default: '',\n },\n});\n\nconst emit = defineEmits(['selectEmoji']);\n\nconst allEmojis = shallowRef([]);\n\nconst items = computed(() => {\n if (!props.searchKey) return [];\n const searchTerm = props.searchKey.toLowerCase();\n return allEmojis.value.filter(emoji =>\n emoji.searchString.includes(searchTerm)\n );\n});\n\nfunction loadEmojis() {\n allEmojis.value = emojiGroups.flatMap(({ emojis }) =>\n emojis.map(({ name, slug, ...rest }) => ({\n ...rest,\n name,\n slug,\n searchString: `${name.replace(/\\s+/g, '')} ${slug}`.toLowerCase(), // Remove all whitespace and convert to lowercase\n }))\n );\n}\n\nfunction handleMentionClick(item = {}) {\n emit('selectEmoji', item.emoji);\n}\n\nonMounted(() => {\n loadEmojis();\n});\n</script>\n\n<!-- eslint-disable-next-line vue/no-root-v-if -->\n<template>\n <MentionBox\n v-if=\"items.length\"\n type=\"emoji\"\n :items=\"items\"\n @mention-select=\"handleMentionClick\"\n >\n <template #default=\"{ item, selected }\">\n <span\n class=\"max-w-full inline-flex items-center gap-0.5 min-w-0 mb-0 text-sm font-medium text-slate-900 dark:text-slate-100 group-hover:text-woot-500 dark:group-hover:text-woot-500 truncate\"\n >\n {{ item.emoji }}\n <p\n class=\"relative mb-0 truncate bottom-px\"\n :class=\"{\n 'text-woot-500 dark:text-woot-500': selected,\n 'font-normal': !selected,\n }\"\n >\n :{{ item.name }}\n </p>\n </span>\n </template>\n </MentionBox>\n</template>\n","<script setup>\nimport { computed, ref, watch } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { removeEmoji } from 'shared/helpers/emoji';\n\nimport Icon from 'dashboard/components-next/icon/Icon.vue';\nimport wootConstants from 'dashboard/constants/globals';\n\nconst props = defineProps({\n src: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n required: true,\n },\n size: {\n type: Number,\n default: 32,\n },\n allowUpload: {\n type: Boolean,\n default: false,\n },\n roundedFull: {\n type: Boolean,\n default: false,\n },\n status: {\n type: String,\n default: null,\n validator: value =>\n !value || wootConstants.AVAILABILITY_STATUS_KEYS.includes(value),\n },\n iconName: {\n type: String,\n default: null,\n },\n});\n\nconst emit = defineEmits(['upload', 'delete']);\n\nconst { t } = useI18n();\n\nconst isImageValid = ref(true);\nconst fileInput = ref(null);\n\nconst AVATAR_COLORS = {\n dark: [\n ['#4B143D', '#FF8DCC'],\n ['#3F220D', '#FFA366'],\n ['#2A2A2A', '#ADB1B8'],\n ['#023B37', '#0BD8B6'],\n ['#27264D', '#A19EFF'],\n ['#1D2E62', '#9EB1FF'],\n ],\n light: [\n ['#FBDCEF', '#C2298A'],\n ['#FFE0BB', '#99543A'],\n ['#E8E8E8', '#60646C'],\n ['#CCF3EA', '#008573'],\n ['#EBEBFE', '#4747C2'],\n ['#E1E9FF', '#3A5BC7'],\n ],\n default: { bg: '#E8E8E8', text: '#60646C' },\n};\n\nconst STATUS_CLASSES = {\n online: 'bg-n-teal-10',\n busy: 'bg-n-amber-10',\n offline: 'bg-n-slate-10',\n};\n\nconst showDefaultAvatar = computed(() => !props.src && !props.name);\n\nconst initials = computed(() => {\n if (!props.name) return '';\n const words = removeEmoji(props.name).split(/\\s+/);\n return words.length === 1\n ? words[0].charAt(0).toUpperCase()\n : words\n .slice(0, 2)\n .map(word => word.charAt(0))\n .join('')\n .toUpperCase();\n});\n\nconst getColorsByNameLength = computed(() => {\n if (!props.name) return AVATAR_COLORS.default;\n\n const index = props.name.length % AVATAR_COLORS.light.length;\n return {\n bg: AVATAR_COLORS.light[index][0],\n darkBg: AVATAR_COLORS.dark[index][0],\n text: AVATAR_COLORS.light[index][1],\n darkText: AVATAR_COLORS.dark[index][1],\n };\n});\n\nconst containerStyles = computed(() => ({\n width: `${props.size}px`,\n height: `${props.size}px`,\n}));\n\nconst avatarStyles = computed(() => ({\n ...containerStyles.value,\n backgroundColor:\n !showDefaultAvatar.value && (!props.src || !isImageValid.value)\n ? getColorsByNameLength.value.bg\n : undefined,\n color:\n !showDefaultAvatar.value && (!props.src || !isImageValid.value)\n ? getColorsByNameLength.value.text\n : undefined,\n '--dark-bg': getColorsByNameLength.value.darkBg,\n '--dark-text': getColorsByNameLength.value.darkText,\n}));\n\nconst badgeStyles = computed(() => {\n const badgeSize = Math.max(props.size * 0.35, 8); // 35% of avatar size, minimum 8px\n return {\n width: `${badgeSize}px`,\n height: `${badgeSize}px`,\n top: `${props.size - badgeSize / 1.1}px`,\n left: `${props.size - badgeSize / 1.1}px`,\n };\n});\n\nconst iconStyles = computed(() => ({\n fontSize: `${props.size / 1.6}px`,\n}));\n\nconst initialsStyles = computed(() => ({\n fontSize: `${Math.min(props.size / 2.5, 24)}px`,\n}));\n\nconst invalidateCurrentImage = () => {\n isImageValid.value = false;\n};\n\nconst handleUploadAvatar = () => {\n fileInput.value.click();\n};\n\nconst handleImageUpload = event => {\n const [file] = event.target.files;\n if (file) {\n emit('upload', {\n file,\n url: file ? URL.createObjectURL(file) : null,\n });\n }\n};\n\nconst handleDeleteAvatar = () => {\n if (fileInput.value) {\n fileInput.value.value = null;\n }\n emit('delete');\n};\n\nconst handleDismiss = event => {\n event.stopPropagation();\n handleDeleteAvatar();\n};\n\nwatch(\n () => props.src,\n () => {\n isImageValid.value = true;\n }\n);\n</script>\n\n<template>\n <span class=\"relative inline-flex group/avatar z-0\" :style=\"containerStyles\">\n <!-- Status Badge -->\n <slot name=\"badge\" :size=\"size\">\n <div\n v-if=\"status\"\n class=\"absolute z-20 border rounded-full border-n-slate-3\"\n :style=\"badgeStyles\"\n :class=\"STATUS_CLASSES[status]\"\n />\n </slot>\n\n <!-- Delete Avatar Button -->\n <div\n v-if=\"src && allowUpload\"\n class=\"absolute z-20 flex items-center justify-center invisible w-6 h-6 transition-all duration-300 ease-in-out opacity-0 cursor-pointer outline outline-1 outline-n-container -top-2 -right-2 rounded-xl bg-n-solid-3 group-hover/avatar:visible group-hover/avatar:opacity-100\"\n @click=\"handleDismiss\"\n >\n <Icon icon=\"i-lucide-x\" class=\"text-n-slate-11 size-4\" />\n </div>\n\n <!-- Avatar Container -->\n <span\n role=\"img\"\n class=\"relative inline-flex items-center justify-center object-cover overflow-hidden font-medium\"\n :class=\"[\n roundedFull ? 'rounded-full' : 'rounded-xl',\n {\n 'dark:!bg-[var(--dark-bg)] dark:!text-[var(--dark-text)]':\n !showDefaultAvatar && (!src || !isImageValid),\n 'bg-n-slate-3 dark:bg-n-slate-4': showDefaultAvatar,\n },\n ]\"\n :style=\"avatarStyles\"\n >\n <!-- Avatar Content -->\n <img\n v-if=\"src && isImageValid\"\n :src=\"src\"\n :alt=\"name\"\n @error=\"invalidateCurrentImage\"\n />\n\n <template v-else>\n <!-- Custom Icon -->\n <Icon v-if=\"iconName\" :icon=\"iconName\" :style=\"iconStyles\" />\n\n <!-- Initials -->\n <span\n v-else-if=\"!showDefaultAvatar\"\n :style=\"initialsStyles\"\n class=\"select-none\"\n >\n {{ initials }}\n </span>\n\n <!-- Fallback Icon if no name or image -->\n <Icon\n v-else\n v-tooltip.top-start=\"t('THUMBNAIL.AUTHOR.NOT_AVAILABLE')\"\n icon=\"i-lucide-user\"\n :style=\"iconStyles\"\n />\n </template>\n\n <!-- Upload Overlay and Input -->\n <div\n v-if=\"allowUpload\"\n class=\"absolute inset-0 z-10 flex items-center justify-center invisible w-full h-full transition-all duration-300 ease-in-out opacity-0 rounded-xl bg-n-alpha-black1 group-hover/avatar:visible group-hover/avatar:opacity-100\"\n @click=\"handleUploadAvatar\"\n >\n <Icon\n icon=\"i-lucide-upload\"\n class=\"text-white\"\n :style=\"{ width: `${size / 2}px`, height: `${size / 2}px` }\"\n />\n <input\n ref=\"fileInput\"\n type=\"file\"\n accept=\"image/png, image/jpeg, image/jpg, image/gif, image/webp\"\n class=\"hidden\"\n @change=\"handleImageUpload\"\n />\n </div>\n </span>\n </span>\n</template>\n","<script setup>\nimport Avatar from 'next/avatar/Avatar.vue';\nimport { ref, computed, watch, nextTick } from 'vue';\nimport { useStoreGetters } from 'dashboard/composables/store';\nimport { useKeyboardNavigableList } from 'dashboard/composables/useKeyboardNavigableList';\n\nconst props = defineProps({\n searchKey: {\n type: String,\n default: '',\n },\n});\n\nconst emit = defineEmits(['selectAgent']);\n\nconst getters = useStoreGetters();\nconst agents = computed(() => getters['agents/getVerifiedAgents'].value);\n\nconst tagAgentsRef = ref(null);\nconst selectedIndex = ref(0);\n\nconst items = computed(() => {\n if (!props.searchKey) {\n return agents.value;\n }\n return agents.value.filter(agent =>\n agent.name.toLowerCase().includes(props.searchKey.toLowerCase())\n );\n});\n\nconst adjustScroll = () => {\n nextTick(() => {\n if (tagAgentsRef.value) {\n tagAgentsRef.value.scrollTop = 50 * selectedIndex.value;\n }\n });\n};\n\nconst onSelect = () => {\n emit('selectAgent', items.value[selectedIndex.value]);\n};\n\nuseKeyboardNavigableList({\n items,\n onSelect,\n adjustScroll,\n selectedIndex,\n});\n\nwatch(items, newListOfAgents => {\n if (newListOfAgents.length < selectedIndex.value + 1) {\n selectedIndex.value = 0;\n }\n});\n\nconst onHover = index => {\n selectedIndex.value = index;\n};\n\nconst onAgentSelect = index => {\n selectedIndex.value = index;\n onSelect();\n};\n</script>\n\n<template>\n <div>\n <ul\n v-if=\"items.length\"\n ref=\"tagAgentsRef\"\n class=\"vertical dropdown menu mention--box bg-n-solid-1 p-1 rounded-xl text-sm overflow-auto absolute w-full z-20 shadow-md left-0 leading-[1.2] bottom-full max-h-[12.5rem] border border-solid border-n-strong\"\n :class=\"{\n 'border-b-[0.5rem] border-solid border-white dark:!border-slate-700':\n items.length <= 4,\n }\"\n >\n <li\n v-for=\"(agent, index) in items\"\n :id=\"`mention-item-${index}`\"\n :key=\"agent.id\"\n :class=\"{\n 'bg-n-alpha-black2': index === selectedIndex,\n 'last:mb-0': items.length <= 4,\n }\"\n class=\"flex items-center px-2 py-1 rounded-md\"\n @click=\"onAgentSelect(index)\"\n @mouseover=\"onHover(index)\"\n >\n <div class=\"mr-2\">\n <Avatar :src=\"agent.thumbnail\" :name=\"agent.name\" rounded-full />\n </div>\n <div\n class=\"flex-1 max-w-full overflow-hidden whitespace-nowrap text-ellipsis\"\n >\n <h5\n class=\"mb-0 overflow-hidden text-sm text-n-slate-11 whitespace-nowrap text-ellipsis\"\n :class=\"{\n 'text-n-slate-12': index === selectedIndex,\n }\"\n >\n {{ agent.name }}\n </h5>\n <div\n class=\"overflow-hidden text-xs whitespace-nowrap text-ellipsis text-n-slate-10\"\n :class=\"{\n 'text-n-slate-11': index === selectedIndex,\n }\"\n >\n {{ agent.email }}\n </div>\n </div>\n </li>\n </ul>\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { MESSAGE_VARIABLES } from 'shared/constants/messages';\nimport MentionBox from '../mentions/MentionBox.vue';\n\nexport default {\n components: { MentionBox },\n props: {\n searchKey: {\n type: String,\n default: '',\n },\n },\n emits: ['selectVariable'],\n computed: {\n ...mapGetters({\n customAttributes: 'attributes/getAttributes',\n }),\n items() {\n return [\n ...this.standardAttributeVariables,\n ...this.customAttributeVariables,\n ];\n },\n standardAttributeVariables() {\n return MESSAGE_VARIABLES.filter(variable => {\n return (\n variable.label.includes(this.searchKey) ||\n variable.key.includes(this.searchKey)\n );\n }).map(variable => ({\n label: variable.key,\n key: variable.key,\n description: variable.label,\n }));\n },\n customAttributeVariables() {\n return this.customAttributes.map(attribute => {\n const attributePrefix =\n attribute.attribute_model === 'conversation_attribute'\n ? 'conversation'\n : 'contact';\n\n return {\n label: `${attributePrefix}.custom_attribute.${attribute.attribute_key}`,\n key: `${attributePrefix}.custom_attribute.${attribute.attribute_key}`,\n description: attribute.attribute_description,\n };\n });\n },\n },\n methods: {\n handleVariableClick(item = {}) {\n this.$emit('selectVariable', item.key);\n },\n },\n};\n</script>\n\n<!-- eslint-disable-next-line vue/no-root-v-if -->\n<template>\n <MentionBox\n v-if=\"items.length\"\n type=\"variable\"\n :items=\"items\"\n @mention-select=\"handleVariableClick\"\n />\n</template>\n\n<style scoped>\n.variable--list-label {\n font-weight: var(--font-weight-bold);\n}\n</style>\n","export const MESSAGE_EDITOR_MENU_OPTIONS = [\n 'strong',\n 'em',\n 'link',\n 'undo',\n 'redo',\n 'bulletList',\n 'orderedList',\n 'code',\n];\n\nexport const MESSAGE_SIGNATURE_EDITOR_MENU_OPTIONS = [\n 'strong',\n 'em',\n 'link',\n 'undo',\n 'redo',\n 'imageUpload',\n];\n\nexport const ARTICLE_EDITOR_MENU_OPTIONS = [\n 'strong',\n 'em',\n 'link',\n 'undo',\n 'redo',\n 'bulletList',\n 'orderedList',\n 'h1',\n 'h2',\n 'h3',\n 'imageUpload',\n 'code',\n];\n\nexport const MESSAGE_EDITOR_IMAGE_RESIZES = [\n {\n name: 'Small',\n height: '24px',\n },\n {\n name: 'Medium',\n height: '48px',\n },\n {\n name: 'Large',\n height: '72px',\n },\n {\n name: 'Original Size',\n height: 'auto',\n },\n];\n","/**\n * This file is a modified version of prosemirror-suggestions\n * https://github.com/quartzy/prosemirror-suggestions/blob/master/src/suggestions.js\n */\n\nimport { Plugin, PluginKey } from 'prosemirror-state';\nimport { Decoration, DecorationSet } from 'prosemirror-view';\n\n/**\n * Creates a function to detect if the trigger character followed by a specified number of characters\n * has been typed, starting from a new word, after a space, or after a newline.\n * @param {string} char - The trigger character to detect.\n * @param {number} [minChars=0] - The minimum number of characters that should follow the trigger character.\n * @returns {Function} A function that takes a position object and returns the match if the condition is met.\n */\nexport const triggerCharacters = (char, minChars = 0) => $position => {\n // Regular expression to find occurrences of 'char' followed by at least 'minChars' non-space characters.\n // It matches these sequences starting from the beginning of the text or after a space.\n const regexp = new RegExp(`(?:^)?${char}[^\\\\s${char}]{${minChars},}`, 'g');\n\n // Get the position before the current cursor position in the document.\n const textFrom = $position.before();\n // Get the position at the end of the current node.\n const textTo = $position.end();\n\n // Get the text between the start of the node and the cursor position.\n const text = $position.doc.textBetween(textFrom, textTo, '\\0', '\\0');\n\n let match;\n\n // eslint-disable-next-line\n while ((match = regexp.exec(text))) {\n // Check if the character before the match is a space, start of string, or null character\n const prefix = match.input.slice(Math.max(0, match.index - 1), match.index);\n if (!/^[\\s\\0]?$/.test(prefix)) {\n // If the prefix is not empty, space, or null, skip this match\n // eslint-disable-next-line\n continue;\n }\n\n const from = match.index + $position.start();\n const to = from + match[0].length;\n\n if (from < $position.pos && to >= $position.pos) {\n const fullMatch = match[0];\n // Remove trigger char and trim\n const trimmedText = fullMatch ? fullMatch.slice(char.length) : '';\n return { range: { from, to }, text: trimmedText };\n }\n }\n return null;\n};\n\nexport const suggestionsPlugin = ({\n matcher,\n suggestionClass = 'prosemirror-mention-node',\n onEnter = () => false,\n onChange = () => false,\n onExit = () => false,\n onKeyDown = () => false,\n}) => {\n return new Plugin({\n key: new PluginKey('mentions'),\n\n view() {\n return {\n update: (view, prevState) => {\n const prev = this.key.getState(prevState);\n const next = this.key.getState(view.state);\n\n const moved =\n prev.active && next.active && prev.range.from !== next.range.from;\n const started = !prev.active && next.active;\n const stopped = prev.active && !next.active;\n const changed = !started && !stopped && prev.text !== next.text;\n\n if (stopped || moved)\n onExit({ view, range: prev.range, text: prev.text });\n if (changed && !moved)\n onChange({ view, range: next.range, text: next.text });\n if (started || moved)\n onEnter({ view, range: next.range, text: next.text });\n },\n };\n },\n\n state: {\n init() {\n return {\n active: false,\n range: {},\n text: null,\n };\n },\n\n apply(tr, prev) {\n const { selection } = tr;\n const next = { ...prev };\n\n if (selection.from === selection.to) {\n if (\n selection.from < prev.range.from ||\n selection.from > prev.range.to\n ) {\n next.active = false;\n }\n\n const $position = selection.$from;\n const match = matcher($position);\n\n if (match) {\n next.active = true;\n next.range = match.range;\n next.text = match.text;\n } else {\n next.active = false;\n }\n } else {\n next.active = false;\n }\n\n if (!next.active) {\n next.range = {};\n next.text = null;\n }\n\n return next;\n },\n },\n\n props: {\n handleKeyDown(view, event) {\n const { active } = this.getState(view.state);\n\n if (!active) return false;\n\n return onKeyDown({ view, event });\n },\n decorations(editorState) {\n const { active, range } = this.getState(editorState);\n\n if (!active) return null;\n\n return DecorationSet.create(editorState.doc, [\n Decoration.inline(range.from, range.to, {\n nodeName: 'span',\n class: suggestionClass,\n }),\n ]);\n },\n },\n });\n};\n","<script setup>\n// TODO This is a huge component, we should split this up into separate composables\n// like `useSignature`, `useImageHandling`, `useFileUpload`, `useSpecialContent``\nimport {\n ref,\n unref,\n computed,\n watch,\n onMounted,\n useTemplateRef,\n nextTick,\n} from 'vue';\n\nimport CannedResponse from '../conversation/CannedResponse.vue';\nimport KeyboardEmojiSelector from './keyboardEmojiSelector.vue';\nimport TagAgents from '../conversation/TagAgents.vue';\nimport VariableList from '../conversation/VariableList.vue';\n\nimport { useEmitter } from 'dashboard/composables/emitter';\nimport { useI18n } from 'vue-i18n';\nimport { useKeyboardEvents } from 'dashboard/composables/useKeyboardEvents';\nimport { useTrack } from 'dashboard/composables';\nimport { useUISettings } from 'dashboard/composables/useUISettings';\nimport { useAlert } from 'dashboard/composables';\n\nimport { BUS_EVENTS } from 'shared/constants/busEvents';\nimport { CONVERSATION_EVENTS } from 'dashboard/helper/AnalyticsHelper/events';\nimport {\n MESSAGE_EDITOR_MENU_OPTIONS,\n MESSAGE_EDITOR_IMAGE_RESIZES,\n} from 'dashboard/constants/editor';\n\nimport {\n messageSchema,\n buildEditor,\n EditorView,\n MessageMarkdownTransformer,\n MessageMarkdownSerializer,\n EditorState,\n Selection,\n} from '@chatwoot/prosemirror-schema';\nimport {\n suggestionsPlugin,\n triggerCharacters,\n} from '@chatwoot/prosemirror-schema/src/mentions/plugin';\n\nimport {\n appendSignature,\n findNodeToInsertImage,\n getContentNode,\n insertAtCursor,\n removeSignature as removeSignatureHelper,\n scrollCursorIntoView,\n setURLWithQueryAndSize,\n} from 'dashboard/helper/editorHelper';\nimport {\n hasPressedEnterAndNotCmdOrShift,\n hasPressedCommandAndEnter,\n} from 'shared/helpers/KeyboardHelpers';\nimport { createTypingIndicator } from '@chatwoot/utils';\nimport { checkFileSizeLimit } from 'shared/helpers/FileHelper';\nimport { uploadFile } from 'dashboard/helper/uploadHelper';\n\nconst props = defineProps({\n modelValue: { type: String, default: '' },\n editorId: { type: String, default: '' },\n placeholder: { type: String, default: '' },\n disabled: { type: Boolean, default: false },\n isPrivate: { type: Boolean, default: false },\n enableSuggestions: { type: Boolean, default: true },\n overrideLineBreaks: { type: Boolean, default: false },\n updateSelectionWith: { type: String, default: '' },\n enableVariables: { type: Boolean, default: false },\n enableCannedResponses: { type: Boolean, default: true },\n variables: { type: Object, default: () => ({}) },\n enabledMenuOptions: { type: Array, default: () => [] },\n signature: { type: String, default: '' },\n // allowSignature is a kill switch, ensuring no signature methods\n // are triggered except when this flag is true\n allowSignature: { type: Boolean, default: false },\n channelType: { type: String, default: '' },\n showImageResizeToolbar: { type: Boolean, default: false }, // A kill switch to show or hide the image toolbar\n focusOnMount: { type: Boolean, default: true },\n});\n\nconst emit = defineEmits([\n 'typingOn',\n 'typingOff',\n 'toggleUserMention',\n 'toggleCannedMenu',\n 'toggleVariablesMenu',\n 'clearSelection',\n 'blur',\n 'focus',\n 'input',\n 'update:modelValue',\n]);\n\nconst { t } = useI18n();\n\nconst TYPING_INDICATOR_IDLE_TIME = 4000;\nconst MAXIMUM_FILE_UPLOAD_SIZE = 4; // in MB\n\nconst createState = (\n content,\n placeholder,\n plugins = [],\n methods = {},\n enabledMenuOptions = []\n) => {\n return EditorState.create({\n doc: new MessageMarkdownTransformer(messageSchema).parse(content),\n plugins: buildEditor({\n schema: messageSchema,\n placeholder,\n methods,\n plugins,\n enabledMenuOptions,\n }),\n });\n};\n\nconst { isEditorHotKeyEnabled, fetchSignatureFlagFromUISettings } =\n useUISettings();\n\nconst typingIndicator = createTypingIndicator(\n () => emit('typingOn'),\n () => emit('typingOff'),\n TYPING_INDICATOR_IDLE_TIME\n);\n\n// we don't need them to be reactive\n// It cases weird issues where the objects are proxied\n// and then the editor doesn't work as expected\n// We have to wrap them in closures or use toRaw to get the actual values\nlet editorView = null;\nlet state = null;\n\nconst showUserMentions = ref(false);\nconst showCannedMenu = ref(false);\nconst showVariables = ref(false);\nconst showEmojiMenu = ref(false);\nconst mentionSearchKey = ref('');\nconst cannedSearchTerm = ref('');\nconst variableSearchTerm = ref('');\nconst emojiSearchTerm = ref('');\nconst range = ref(null);\nconst isImageNodeSelected = ref(false);\nconst toolbarPosition = ref({ top: 0, left: 0 });\nconst selectedImageNode = ref(null);\nconst sizes = MESSAGE_EDITOR_IMAGE_RESIZES;\n\n// element ref\nconst editorRoot = useTemplateRef('editorRoot');\nconst imageUpload = useTemplateRef('imageUpload');\nconst editor = useTemplateRef('editor');\n\nconst contentFromEditor = () => {\n return MessageMarkdownSerializer.serialize(editorView.state.doc);\n};\n\nconst shouldShowVariables = computed(() => {\n return props.enableVariables && showVariables.value && !props.isPrivate;\n});\n\nconst shouldShowCannedResponses = computed(() => {\n return (\n props.enableCannedResponses && showCannedMenu.value && !props.isPrivate\n );\n});\n\nconst editorMenuOptions = computed(() => {\n return props.enabledMenuOptions.length\n ? props.enabledMenuOptions\n : MESSAGE_EDITOR_MENU_OPTIONS;\n});\n\nfunction createSuggestionPlugin({\n trigger,\n minChars = 0,\n showMenu,\n searchTerm,\n isAllowed = () => true,\n}) {\n return suggestionsPlugin({\n matcher: triggerCharacters(trigger, minChars),\n suggestionClass: '',\n onEnter: args => {\n if (!isAllowed()) return false;\n showMenu.value = true;\n range.value = args.range;\n editorView = args.view;\n if (searchTerm) searchTerm.value = args.text || '';\n return false;\n },\n onChange: args => {\n editorView = args.view;\n range.value = args.range;\n if (searchTerm) searchTerm.value = args.text;\n return false;\n },\n onExit: () => {\n if (searchTerm) searchTerm.value = '';\n showMenu.value = false;\n return false;\n },\n onKeyDown: ({ event }) => {\n return event.keyCode === 13 && showMenu.value;\n },\n });\n}\n\nconst plugins = computed(() => {\n if (!props.enableSuggestions) {\n return [];\n }\n\n return [\n createSuggestionPlugin({\n trigger: '@',\n showMenu: showUserMentions,\n searchTerm: mentionSearchKey,\n }),\n createSuggestionPlugin({\n trigger: '/',\n showMenu: showCannedMenu,\n searchTerm: cannedSearchTerm,\n isAllowed: () => !props.isPrivate,\n }),\n createSuggestionPlugin({\n trigger: '{{',\n showMenu: showVariables,\n searchTerm: variableSearchTerm,\n isAllowed: () => !props.isPrivate,\n }),\n createSuggestionPlugin({\n trigger: ':',\n minChars: 2,\n showMenu: showEmojiMenu,\n searchTerm: emojiSearchTerm,\n }),\n ];\n});\n\nconst sendWithSignature = computed(() => {\n // this is considered the source of truth, we watch this property\n // on change, we toggle the signature in the editor\n if (props.allowSignature && !props.isPrivate && props.channelType) {\n return fetchSignatureFlagFromUISettings(props.channelType);\n }\n\n return false;\n});\n\nwatch(showUserMentions, updatedValue => {\n emit('toggleUserMention', props.isPrivate && updatedValue);\n});\nwatch(showCannedMenu, updatedValue => {\n emit('toggleCannedMenu', !props.isPrivate && updatedValue);\n});\nwatch(showVariables, updatedValue => {\n emit('toggleVariablesMenu', !props.isPrivate && updatedValue);\n});\n\nfunction focusEditorInputField(pos = 'end') {\n const { tr } = editorView.state;\n\n const selection =\n pos === 'end' ? Selection.atEnd(tr.doc) : Selection.atStart(tr.doc);\n\n editorView.dispatch(tr.setSelection(selection));\n editorView.focus();\n}\n\nfunction isBodyEmpty(content) {\n // if content is undefined, we assume that the body is empty\n if (!content) return true;\n\n // if the signature is present, we need to remove it before checking\n // note that we don't update the editorView, so this is safe\n const bodyWithoutSignature = props.signature\n ? removeSignatureHelper(content, props.signature)\n : content;\n\n // trimming should remove all the whitespaces, so we can check the length\n return bodyWithoutSignature.trim().length === 0;\n}\n\nfunction handleEmptyBodyWithSignature() {\n const { schema, tr } = state;\n\n // create a paragraph node and\n // start a transaction to append it at the end\n const paragraph = schema.nodes.paragraph.create();\n const paragraphTransaction = tr.insert(0, paragraph);\n editorView.dispatch(paragraphTransaction);\n\n // Set the focus at the start of the input field\n focusEditorInputField('start');\n}\n\nfunction focusEditor(content) {\n if (props.disabled) return;\n\n const unrefContent = unref(content);\n if (isBodyEmpty(unrefContent) && sendWithSignature.value) {\n // reload state can be called when switching between conversations, or when drafts is loaded\n // these drafts can also have a signature, so we need to check if the body is empty\n // and handle things accordingly\n handleEmptyBodyWithSignature();\n } else if (props.focusOnMount) {\n // this is in the else block, handleEmptyBodyWithSignature also has a call to the focus method\n // the position is set to start, because the signature is added at the end of the body\n focusEditorInputField('end');\n }\n}\n\nfunction openFileBrowser() {\n imageUpload.value.click();\n}\n\nfunction reloadState(content = props.modelValue) {\n const unrefContent = unref(content);\n state = createState(\n unrefContent,\n props.placeholder,\n plugins.value,\n { onImageUpload: openFileBrowser },\n editorMenuOptions.value\n );\n\n editorView.updateState(state);\n focusEditor(unrefContent);\n}\n\nfunction addSignature() {\n let content = props.modelValue;\n // see if the content is empty, if it is before appending the signature\n // we need to add a paragraph node and move the cursor at the start of the editor\n const contentWasEmpty = isBodyEmpty(content);\n content = appendSignature(content, props.signature);\n // need to reload first, ensuring that the editorView is updated\n reloadState(content);\n\n if (contentWasEmpty) {\n handleEmptyBodyWithSignature();\n }\n}\n\nfunction removeSignature() {\n if (!props.signature) return;\n let content = props.modelValue;\n content = removeSignatureHelper(content, props.signature);\n // reload the state, ensuring that the editorView is updated\n reloadState(content);\n}\n\nfunction toggleSignatureInEditor(signatureEnabled) {\n // The toggleSignatureInEditor gets the new value from the\n // watcher, this means that if the value is true, the signature\n // is supposed to be added, else we remove it.\n if (signatureEnabled) {\n addSignature();\n } else {\n removeSignature();\n }\n}\n\nfunction setToolbarPosition() {\n const editorRect = editorRoot.value.getBoundingClientRect();\n const rect = selectedImageNode.value.getBoundingClientRect();\n\n toolbarPosition.value = {\n top: `${rect.top - editorRect.top - 30}px`,\n left: `${rect.left - editorRect.left - 4}px`,\n };\n}\n\nfunction setURLWithQueryAndImageSize(size) {\n if (!props.showImageResizeToolbar) {\n return;\n }\n setURLWithQueryAndSize(selectedImageNode.value, size, editorView);\n isImageNodeSelected.value = false;\n}\n\nfunction isEditorMouseFocusedOnAnImage() {\n if (!props.showImageResizeToolbar) {\n return;\n }\n selectedImageNode.value = document.querySelector(\n 'img.ProseMirror-selectednode'\n );\n if (selectedImageNode.value) {\n isImageNodeSelected.value = !!selectedImageNode.value;\n // Get the position of the selected node\n setToolbarPosition();\n } else {\n isImageNodeSelected.value = false;\n }\n}\n\nfunction emitOnChange() {\n emit('input', contentFromEditor());\n emit('update:modelValue', contentFromEditor());\n}\n\nfunction updateImgToolbarOnDelete() {\n // check if the selected node is present or not on keyup\n // this is needed because the user can select an image and then delete it\n // in that case, the selected node will be null and we need to hide the toolbar\n // otherwise, the toolbar will be visible even when the image is deleted and cause some errors\n if (selectedImageNode.value) {\n const hasImgSelectedNode = document.querySelector(\n 'img.ProseMirror-selectednode'\n );\n if (!hasImgSelectedNode) {\n isImageNodeSelected.value = false;\n }\n }\n}\n\nfunction isEnterToSendEnabled() {\n return isEditorHotKeyEnabled('enter');\n}\n\nfunction isCmdPlusEnterToSendEnabled() {\n return isEditorHotKeyEnabled('cmd_enter');\n}\n\nuseKeyboardEvents({\n 'Alt+KeyP': {\n action: focusEditorInputField,\n allowOnFocusedInput: true,\n },\n 'Alt+KeyL': {\n action: focusEditorInputField,\n allowOnFocusedInput: true,\n },\n});\n\nfunction onImageInsertInEditor(fileUrl) {\n const { tr } = editorView.state;\n\n const insertData = findNodeToInsertImage(editorView.state, fileUrl);\n\n if (insertData) {\n editorView.dispatch(\n tr.insert(insertData.pos, insertData.node).scrollIntoView()\n );\n focusEditorInputField();\n }\n}\n\nasync function uploadImageToStorage(file) {\n try {\n const { fileUrl } = await uploadFile(file);\n if (fileUrl) {\n onImageInsertInEditor(fileUrl);\n }\n useAlert(\n t('PROFILE_SETTINGS.FORM.MESSAGE_SIGNATURE_SECTION.IMAGE_UPLOAD_SUCCESS')\n );\n } catch (error) {\n useAlert(\n t('PROFILE_SETTINGS.FORM.MESSAGE_SIGNATURE_SECTION.IMAGE_UPLOAD_ERROR')\n );\n }\n}\n\nfunction onFileChange() {\n const file = imageUpload.value.files[0];\n if (checkFileSizeLimit(file, MAXIMUM_FILE_UPLOAD_SIZE)) {\n uploadImageToStorage(file);\n } else {\n useAlert(\n t(\n 'PROFILE_SETTINGS.FORM.MESSAGE_SIGNATURE_SECTION.IMAGE_UPLOAD_SIZE_ERROR',\n {\n size: MAXIMUM_FILE_UPLOAD_SIZE,\n }\n )\n );\n }\n\n imageUpload.value = '';\n}\n\nfunction handleLineBreakWhenEnterToSendEnabled(event) {\n if (\n hasPressedEnterAndNotCmdOrShift(event) &&\n isEnterToSendEnabled() &&\n !props.overrideLineBreaks\n ) {\n event.preventDefault();\n }\n}\n\nasync function insertNodeIntoEditor(node, from = 0, to = 0) {\n state = insertAtCursor(editorView, node, from, to);\n emitOnChange();\n await nextTick();\n scrollCursorIntoView(editorView);\n}\n\nfunction insertContentIntoEditor(content, defaultFrom = 0) {\n const from = defaultFrom || editorView.state.selection.from || 0;\n let node = new MessageMarkdownTransformer(messageSchema).parse(content);\n\n insertNodeIntoEditor(node, from, undefined);\n}\n\n/**\n * Inserts special content (mention, canned response, variable, emoji) into the editor.\n * @param {string} type - The type of special content to insert. Possible values: 'mention', 'canned_response', 'variable', 'emoji'.\n * @param {Object|string} content - The content to insert, depending on the type.\n */\nfunction insertSpecialContent(type, content) {\n if (!editorView) {\n return;\n }\n\n let { node, from, to } = getContentNode(\n editorView,\n type,\n content,\n range.value,\n props.variables\n );\n\n if (!node) return;\n\n insertNodeIntoEditor(node, from, to);\n\n const event_map = {\n mention: CONVERSATION_EVENTS.USED_MENTIONS,\n cannedResponse: CONVERSATION_EVENTS.INSERTED_A_CANNED_RESPONSE,\n variable: CONVERSATION_EVENTS.INSERTED_A_VARIABLE,\n emoji: CONVERSATION_EVENTS.INSERTED_AN_EMOJI,\n };\n\n useTrack(event_map[type]);\n}\n\nfunction handleLineBreakWhenCmdAndEnterToSendEnabled(event) {\n if (\n hasPressedCommandAndEnter(event) &&\n isCmdPlusEnterToSendEnabled() &&\n !props.overrideLineBreaks\n ) {\n event.preventDefault();\n }\n}\n\nfunction onKeydown(event) {\n if (isEnterToSendEnabled()) {\n handleLineBreakWhenEnterToSendEnabled(event);\n }\n if (isCmdPlusEnterToSendEnabled()) {\n handleLineBreakWhenCmdAndEnterToSendEnabled(event);\n }\n}\n\nfunction createEditorView() {\n editorView = new EditorView(editor.value, {\n state: state,\n editable: () => !props.disabled,\n dispatchTransaction: tx => {\n state = state.apply(tx);\n editorView.updateState(state);\n if (tx.docChanged) {\n emitOnChange();\n }\n },\n handleDOMEvents: {\n keyup: () => {\n if (!props.disabled) {\n typingIndicator.start();\n updateImgToolbarOnDelete();\n }\n },\n keydown: (view, event) => !props.disabled && onKeydown(event),\n focus: () => !props.disabled && emit('focus'),\n click: () => !props.disabled && isEditorMouseFocusedOnAnImage(),\n blur: () => {\n if (props.disabled) return;\n typingIndicator.stop();\n emit('blur');\n },\n paste: (_view, event) => {\n if (props.disabled) return;\n const data = event.clipboardData.files;\n if (data.length > 0) {\n event.preventDefault();\n }\n },\n },\n });\n}\n\nwatch(\n computed(() => props.modelValue),\n (newVal = '') => {\n if (newVal !== contentFromEditor()) {\n reloadState(newVal);\n }\n }\n);\n\nwatch(\n computed(() => props.editorId),\n () => {\n showCannedMenu.value = false;\n showEmojiMenu.value = false;\n showVariables.value = false;\n cannedSearchTerm.value = '';\n reloadState(props.modelValue);\n }\n);\n\nwatch(\n computed(() => props.isPrivate),\n () => {\n reloadState(props.modelValue);\n }\n);\n\nwatch(\n computed(() => props.updateSelectionWith),\n (newValue, oldValue) => {\n if (!editorView) return;\n\n if (newValue !== oldValue) {\n if (props.updateSelectionWith !== '') {\n const node = editorView.state.schema.text(props.updateSelectionWith);\n\n const tr = editorView.state.tr.replaceSelectionWith(node);\n editorView.focus();\n state = editorView.state.apply(tr);\n editorView.updateState(state);\n emitOnChange();\n emit('clearSelection');\n }\n }\n }\n);\n\nwatch(sendWithSignature, newValue => {\n // see if the allowSignature flag is true\n if (props.allowSignature) {\n toggleSignatureInEditor(newValue);\n }\n});\n\nonMounted(() => {\n // [VITE] state assignment was done in created before\n state = createState(\n props.modelValue,\n props.placeholder,\n plugins.value,\n { onImageUpload: openFileBrowser },\n editorMenuOptions.value\n );\n\n createEditorView();\n editorView.updateState(state);\n if (props.focusOnMount) {\n focusEditorInputField();\n }\n});\n\n// BUS Event to insert text or markdown into the editor at the\n// current cursor position.\n// Components using this\n// 1. SearchPopover.vue\nuseEmitter(BUS_EVENTS.INSERT_INTO_RICH_EDITOR, insertContentIntoEditor);\n</script>\n\n<template>\n <div ref=\"editorRoot\" class=\"relative w-full\">\n <TagAgents\n v-if=\"showUserMentions && isPrivate\"\n :search-key=\"mentionSearchKey\"\n @select-agent=\"content => insertSpecialContent('mention', content)\"\n />\n <CannedResponse\n v-if=\"shouldShowCannedResponses\"\n :search-key=\"cannedSearchTerm\"\n @replace=\"content => insertSpecialContent('cannedResponse', content)\"\n />\n <VariableList\n v-if=\"shouldShowVariables\"\n :search-key=\"variableSearchTerm\"\n @select-variable=\"content => insertSpecialContent('variable', content)\"\n />\n <KeyboardEmojiSelector\n v-if=\"showEmojiMenu\"\n :search-key=\"emojiSearchTerm\"\n @select-emoji=\"emoji => insertSpecialContent('emoji', emoji)\"\n />\n <input\n ref=\"imageUpload\"\n type=\"file\"\n accept=\"image/png, image/jpeg, image/jpg, image/gif, image/webp\"\n hidden\n @change=\"onFileChange\"\n />\n <div ref=\"editor\" />\n <div\n v-show=\"isImageNodeSelected && showImageResizeToolbar\"\n class=\"absolute shadow-md rounded-[4px] flex gap-1 py-1 px-1 bg-slate-50 dark:bg-slate-700 text-slate-800 dark:text-slate-50\"\n :style=\"{\n top: toolbarPosition.top,\n left: toolbarPosition.left,\n }\"\n >\n <button\n v-for=\"size in sizes\"\n :key=\"size.name\"\n class=\"text-xs font-medium rounded-[4px] border border-solid border-slate-200 dark:border-slate-600 px-1.5 py-0.5 hover:bg-slate-100 dark:hover:bg-slate-800\"\n @click=\"setURLWithQueryAndImageSize(size)\"\n >\n {{ size.name }}\n </button>\n </div>\n <slot name=\"footer\" />\n </div>\n</template>\n\n<style lang=\"scss\">\n@import '@chatwoot/prosemirror-schema/src/styles/base.scss';\n\n.ProseMirror-menubar-wrapper {\n @apply flex flex-col;\n\n .ProseMirror-menubar {\n min-height: var(--space-two) !important;\n @apply -ml-2.5 pb-0 bg-transparent text-n-slate-11;\n\n .ProseMirror-menu-active {\n @apply bg-slate-75 dark:bg-slate-800;\n }\n }\n\n > .ProseMirror {\n @apply p-0 break-words text-slate-800 dark:text-slate-100;\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n p {\n @apply text-slate-800 dark:text-slate-100;\n }\n\n blockquote {\n @apply border-slate-400 dark:border-slate-500;\n\n p {\n @apply text-slate-600 dark:text-slate-400;\n }\n }\n\n ol li {\n @apply list-item list-decimal;\n }\n }\n}\n\n.ProseMirror-woot-style {\n @apply overflow-auto min-h-[5rem] max-h-[7.5rem];\n}\n\n.ProseMirror-prompt {\n @apply z-[9999] bg-slate-25 dark:bg-slate-700 rounded-md border border-solid border-slate-75 dark:border-slate-800 shadow-lg;\n\n h5 {\n @apply dark:text-slate-25 text-slate-800;\n }\n}\n\n.is-private {\n .prosemirror-mention-node {\n @apply font-medium bg-n-amber-2/80 dark:bg-n-amber-2/80 text-n-slate-12 py-0 px-1;\n }\n\n .ProseMirror-menubar-wrapper {\n > .ProseMirror {\n @apply text-n-slate-12;\n\n p {\n @apply text-n-slate-12;\n }\n }\n }\n}\n\n.editor-wrap {\n @apply mb-4;\n}\n\n.message-editor {\n @apply rounded-lg outline outline-1 outline-n-weak hover:outline-n-slate-6 dark:hover:outline-n-slate-6 bg-n-alpha-black2 py-0 px-1 mb-0;\n}\n\n.editor_warning {\n @apply outline outline-1 outline-n-ruby-8 dark:outline-n-ruby-8 hover:outline-n-ruby-9 dark:hover:outline-n-ruby-9;\n}\n\n.editor-warning__message {\n @apply text-red-400 dark:text-red-400 font-normal text-sm pt-1 pb-0 px-0;\n}\n</style>\n","<script>\nimport AutomationActionTeamMessageInput from './AutomationActionTeamMessageInput.vue';\nimport AutomationActionFileInput from './AutomationFileInput.vue';\nimport WootMessageEditor from 'dashboard/components/widgets/WootWriter/Editor.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n AutomationActionTeamMessageInput,\n AutomationActionFileInput,\n WootMessageEditor,\n NextButton,\n },\n props: {\n modelValue: {\n type: Object,\n default: () => null,\n },\n actionTypes: {\n type: Array,\n default: () => [],\n },\n dropdownValues: {\n type: Array,\n default: () => [],\n },\n errorMessage: {\n type: String,\n default: '',\n },\n showActionInput: {\n type: Boolean,\n default: true,\n },\n initialFileName: {\n type: String,\n default: '',\n },\n isMacro: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['update:modelValue', 'input', 'removeAction', 'resetAction'],\n computed: {\n action_name: {\n get() {\n if (!this.modelValue) return null;\n return this.modelValue.action_name;\n },\n set(value) {\n const payload = this.modelValue || {};\n this.$emit('update:modelValue', { ...payload, action_name: value });\n this.$emit('input', { ...payload, action_name: value });\n },\n },\n action_params: {\n get() {\n if (!this.modelValue) return null;\n return this.modelValue.action_params;\n },\n set(value) {\n const payload = this.modelValue || {};\n this.$emit('update:modelValue', { ...payload, action_params: value });\n this.$emit('input', { ...payload, action_params: value });\n },\n },\n inputType() {\n return this.actionTypes.find(action => action.key === this.action_name)\n .inputType;\n },\n actionInputStyles() {\n return {\n 'has-error': this.errorMessage,\n 'is-a-macro': this.isMacro,\n };\n },\n castMessageVmodel: {\n get() {\n if (Array.isArray(this.action_params)) {\n return this.action_params[0];\n }\n return this.action_params;\n },\n set(value) {\n this.action_params = value;\n },\n },\n },\n methods: {\n removeAction() {\n this.$emit('removeAction');\n },\n resetAction() {\n this.$emit('resetAction');\n },\n },\n};\n</script>\n\n<template>\n <div class=\"filter\" :class=\"actionInputStyles\">\n <div class=\"filter-inputs\">\n <select\n v-model=\"action_name\"\n class=\"action__question\"\n :class=\"{ 'full-width': !showActionInput }\"\n @change=\"resetAction()\"\n >\n <option\n v-for=\"attribute in actionTypes\"\n :key=\"attribute.key\"\n :value=\"attribute.key\"\n >\n {{ attribute.label }}\n </option>\n </select>\n <div v-if=\"showActionInput\" class=\"filter__answer--wrap\">\n <div v-if=\"inputType\" class=\"w-full\">\n <div\n v-if=\"inputType === 'search_select'\"\n class=\"multiselect-wrap--small\"\n >\n <multiselect\n v-model=\"action_params\"\n track-by=\"id\"\n label=\"name\"\n :placeholder=\"$t('FORMS.MULTISELECT.SELECT')\"\n selected-label\n :select-label=\"$t('FORMS.MULTISELECT.ENTER_TO_SELECT')\"\n deselect-label=\"\"\n :max-height=\"160\"\n :options=\"dropdownValues\"\n :allow-empty=\"false\"\n :option-height=\"104\"\n />\n </div>\n <div\n v-else-if=\"inputType === 'multi_select'\"\n class=\"multiselect-wrap--small\"\n >\n <multiselect\n v-model=\"action_params\"\n track-by=\"id\"\n label=\"name\"\n :placeholder=\"$t('FORMS.MULTISELECT.SELECT')\"\n multiple\n selected-label\n :select-label=\"$t('FORMS.MULTISELECT.ENTER_TO_SELECT')\"\n deselect-label=\"\"\n :max-height=\"160\"\n :options=\"dropdownValues\"\n :allow-empty=\"false\"\n :option-height=\"104\"\n />\n </div>\n <input\n v-else-if=\"inputType === 'email'\"\n v-model=\"action_params\"\n type=\"email\"\n class=\"answer--text-input\"\n :placeholder=\"$t('AUTOMATION.ACTION.EMAIL_INPUT_PLACEHOLDER')\"\n />\n <input\n v-else-if=\"inputType === 'url'\"\n v-model=\"action_params\"\n type=\"url\"\n class=\"answer--text-input\"\n :placeholder=\"$t('AUTOMATION.ACTION.URL_INPUT_PLACEHOLDER')\"\n />\n <AutomationActionFileInput\n v-if=\"inputType === 'attachment'\"\n v-model=\"action_params\"\n :initial-file-name=\"initialFileName\"\n />\n </div>\n </div>\n <NextButton\n v-if=\"!isMacro\"\n icon=\"i-lucide-x\"\n slate\n ghost\n class=\"flex-shrink-0\"\n @click=\"removeAction\"\n />\n </div>\n <AutomationActionTeamMessageInput\n v-if=\"inputType === 'team_message'\"\n v-model=\"action_params\"\n :teams=\"dropdownValues\"\n />\n <WootMessageEditor\n v-if=\"inputType === 'textarea'\"\n v-model=\"castMessageVmodel\"\n rows=\"4\"\n enable-variables\n :placeholder=\"$t('AUTOMATION.ACTION.TEAM_MESSAGE_INPUT_PLACEHOLDER')\"\n class=\"action-message\"\n />\n <p v-if=\"errorMessage\" class=\"filter-error\">\n {{ errorMessage }}\n </p>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.filter {\n @apply bg-n-background p-2 border border-solid border-n-strong dark:border-n-strong rounded-lg mb-2;\n\n &.is-a-macro {\n @apply mb-0 bg-n-background dark:bg-n-solid-1 p-0 border-0 rounded-none;\n }\n}\n\n.no-margin-bottom {\n @apply mb-0;\n}\n\n.filter.has-error {\n @apply bg-n-ruby-8/20 border-n-ruby-5 dark:border-n-ruby-5;\n\n &.is-a-macro {\n @apply bg-transparent;\n }\n}\n\n.filter-inputs {\n @apply flex gap-1;\n}\n\n.filter-error {\n @apply text-n-ruby-9 dark:text-n-ruby-9 block my-1 mx-0;\n}\n\n.action__question,\n.filter__operator {\n @apply mb-0 mr-1;\n}\n\n.action__question {\n @apply max-w-[50%];\n}\n\n.action__question.full-width {\n @apply max-w-full;\n}\n\n.filter__answer--wrap {\n @apply max-w-[50%] flex-grow mr-1 flex w-full items-center justify-start;\n\n input {\n @apply mb-0;\n }\n}\n.filter__answer {\n &.answer--text-input {\n @apply mb-0;\n }\n}\n\n.filter__join-operator-wrap {\n @apply relative z-20 m-0;\n}\n\n.filter__join-operator {\n @apply flex items-center justify-center relative my-2.5 mx-0;\n\n .operator__line {\n @apply absolute w-full border-b border-solid border-slate-75 dark:border-slate-600;\n }\n\n .operator__select {\n margin-bottom: var(--space-zero) !important;\n @apply relative w-auto;\n }\n}\n\n.multiselect {\n @apply mb-0;\n}\n.action-message {\n @apply mt-2 mx-0 mb-0;\n}\n// Prosemirror does not have a native way of hiding the menu bar, hence\n::v-deep .ProseMirror-menubar {\n @apply hidden;\n}\n</style>\n","export const OPERATOR_TYPES_1 = [\n {\n value: 'equal_to',\n label: 'Equal to',\n },\n {\n value: 'not_equal_to',\n label: 'Not equal to',\n },\n];\n\nexport const OPERATOR_TYPES_2 = [\n {\n value: 'equal_to',\n label: 'Equal to',\n },\n {\n value: 'not_equal_to',\n label: 'Not equal to',\n },\n {\n value: 'contains',\n label: 'Contains',\n },\n {\n value: 'does_not_contain',\n label: 'Does not contain',\n },\n];\n\nexport const OPERATOR_TYPES_3 = [\n {\n value: 'equal_to',\n label: 'Equal to',\n },\n {\n value: 'not_equal_to',\n label: 'Not equal to',\n },\n {\n value: 'is_present',\n label: 'Is present',\n },\n {\n value: 'is_not_present',\n label: 'Is not present',\n },\n];\n\nexport const OPERATOR_TYPES_4 = [\n {\n value: 'equal_to',\n label: 'Equal to',\n },\n {\n value: 'not_equal_to',\n label: 'Not equal to',\n },\n {\n value: 'is_present',\n label: 'Is present',\n },\n {\n value: 'is_not_present',\n label: 'Is not present',\n },\n {\n value: 'is_greater_than',\n label: 'Is greater than',\n },\n {\n value: 'is_less_than',\n label: 'Is less than',\n },\n];\n\nexport const OPERATOR_TYPES_5 = [\n {\n value: 'is_greater_than',\n label: 'Is greater than',\n },\n {\n value: 'is_less_than',\n label: 'Is less than',\n },\n {\n value: 'days_before',\n label: 'Is x days before',\n },\n];\n\nexport const OPERATOR_TYPES_6 = [\n {\n value: 'equal_to',\n label: 'Equal to',\n },\n {\n value: 'not_equal_to',\n label: 'Not equal to',\n },\n {\n value: 'contains',\n label: 'Contains',\n },\n {\n value: 'does_not_contain',\n label: 'Does not contain',\n },\n {\n value: 'starts_with',\n label: 'Starts With',\n },\n];\n","export const DEFAULT_MESSAGE_CREATED_CONDITION = [\n {\n attribute_key: 'message_type',\n filter_operator: 'equal_to',\n values: '',\n query_operator: 'and',\n custom_attribute_type: '',\n },\n];\n\nexport const DEFAULT_CONVERSATION_OPENED_CONDITION = [\n {\n attribute_key: 'browser_language',\n filter_operator: 'equal_to',\n values: '',\n query_operator: 'and',\n custom_attribute_type: '',\n },\n];\n\nexport const DEFAULT_OTHER_CONDITION = [\n {\n attribute_key: 'status',\n filter_operator: 'equal_to',\n values: '',\n query_operator: 'and',\n custom_attribute_type: '',\n },\n];\n\nexport const DEFAULT_ACTIONS = [\n {\n action_name: 'assign_agent',\n action_params: [],\n },\n];\n\nexport const MESSAGE_CONDITION_VALUES = [\n {\n id: 'incoming',\n name: 'Incoming Message',\n },\n {\n id: 'outgoing',\n name: 'Outgoing Message',\n },\n];\n\nexport const PRIORITY_CONDITION_VALUES = [\n {\n id: 'nil',\n name: 'None',\n },\n {\n id: 'low',\n name: 'Low',\n },\n {\n id: 'medium',\n name: 'Medium',\n },\n {\n id: 'high',\n name: 'High',\n },\n {\n id: 'urgent',\n name: 'Urgent',\n },\n];\n","const allElementsString = arr => {\n return arr.every(elem => typeof elem === 'string');\n};\n\nconst allElementsNumbers = arr => {\n return arr.every(elem => typeof elem === 'number');\n};\n\nconst formatArray = params => {\n if (params.length <= 0) {\n params = [];\n } else if (allElementsString(params) || allElementsNumbers(params)) {\n params = [...params];\n } else {\n params = params.map(val => val.id);\n }\n return params;\n};\n\nconst generatePayloadForObject = item => {\n if (item.action_params.id) {\n item.action_params = [item.action_params.id];\n } else {\n item.action_params = [item.action_params];\n }\n return item.action_params;\n};\n\nconst generatePayload = data => {\n const actions = JSON.parse(JSON.stringify(data));\n let payload = actions.map(item => {\n if (Array.isArray(item.action_params)) {\n item.action_params = formatArray(item.action_params);\n } else if (typeof item.action_params === 'object') {\n item.action_params = generatePayloadForObject(item);\n } else if (!item.action_params) {\n item.action_params = [];\n } else {\n item.action_params = [item.action_params];\n }\n return item;\n });\n return payload;\n};\n\nexport default generatePayload;\n","import {\n OPERATOR_TYPES_1,\n OPERATOR_TYPES_3,\n OPERATOR_TYPES_4,\n} from 'dashboard/routes/dashboard/settings/automation/operators';\nimport {\n DEFAULT_MESSAGE_CREATED_CONDITION,\n DEFAULT_CONVERSATION_OPENED_CONDITION,\n DEFAULT_OTHER_CONDITION,\n DEFAULT_ACTIONS,\n MESSAGE_CONDITION_VALUES,\n PRIORITY_CONDITION_VALUES,\n} from 'dashboard/constants/automation';\nimport filterQueryGenerator from './filterQueryGenerator';\nimport actionQueryGenerator from './actionQueryGenerator';\n\nexport const getCustomAttributeInputType = key => {\n const customAttributeMap = {\n date: 'date',\n text: 'plain_text',\n list: 'search_select',\n checkbox: 'search_select',\n };\n\n return customAttributeMap[key] || 'plain_text';\n};\n\nexport const isACustomAttribute = (customAttributes, key) => {\n return customAttributes.find(attr => {\n return attr.attribute_key === key;\n });\n};\n\nexport const getCustomAttributeListDropdownValues = (\n customAttributes,\n type\n) => {\n return customAttributes\n .find(attr => attr.attribute_key === type)\n .attribute_values.map(item => {\n return {\n id: item,\n name: item,\n };\n });\n};\n\nexport const isCustomAttributeCheckbox = (customAttributes, key) => {\n return customAttributes.find(attr => {\n return (\n attr.attribute_key === key && attr.attribute_display_type === 'checkbox'\n );\n });\n};\n\nexport const isCustomAttributeList = (customAttributes, type) => {\n return customAttributes.find(attr => {\n return (\n attr.attribute_key === type && attr.attribute_display_type === 'list'\n );\n });\n};\n\nexport const getOperatorTypes = key => {\n const operatorMap = {\n list: OPERATOR_TYPES_1,\n text: OPERATOR_TYPES_3,\n number: OPERATOR_TYPES_1,\n link: OPERATOR_TYPES_1,\n date: OPERATOR_TYPES_4,\n checkbox: OPERATOR_TYPES_1,\n };\n\n return operatorMap[key] || OPERATOR_TYPES_1;\n};\n\nexport const generateCustomAttributeTypes = (customAttributes, type) => {\n return customAttributes.map(attr => {\n return {\n key: attr.attribute_key,\n name: attr.attribute_display_name,\n inputType: getCustomAttributeInputType(attr.attribute_display_type),\n filterOperators: getOperatorTypes(attr.attribute_display_type),\n customAttributeType: type,\n };\n });\n};\n\nexport const generateConditionOptions = (options, key = 'id') => {\n if (!options || !Array.isArray(options)) return [];\n return options.map(i => {\n return {\n id: i[key],\n name: i.title,\n };\n });\n};\n\nexport const getActionOptions = ({\n agents,\n teams,\n labels,\n slaPolicies,\n type,\n addNoneToListFn,\n}) => {\n const actionsMap = {\n assign_agent: addNoneToListFn ? addNoneToListFn(agents) : agents,\n assign_team: addNoneToListFn ? addNoneToListFn(teams) : teams,\n send_email_to_team: teams,\n add_label: generateConditionOptions(labels, 'title'),\n remove_label: generateConditionOptions(labels, 'title'),\n change_priority: PRIORITY_CONDITION_VALUES,\n add_sla: slaPolicies,\n };\n return actionsMap[type];\n};\n\nexport const getConditionOptions = ({\n agents,\n booleanFilterOptions,\n campaigns,\n contacts,\n countries,\n customAttributes,\n inboxes,\n languages,\n statusFilterOptions,\n teams,\n type,\n}) => {\n if (isCustomAttributeCheckbox(customAttributes, type)) {\n return booleanFilterOptions;\n }\n\n if (isCustomAttributeList(customAttributes, type)) {\n return getCustomAttributeListDropdownValues(customAttributes, type);\n }\n\n const conditionFilterMaps = {\n status: statusFilterOptions,\n assignee_id: agents,\n contact: contacts,\n inbox_id: inboxes,\n team_id: teams,\n campaigns: generateConditionOptions(campaigns),\n browser_language: languages,\n conversation_language: languages,\n country_code: countries,\n message_type: MESSAGE_CONDITION_VALUES,\n priority: PRIORITY_CONDITION_VALUES,\n };\n\n return conditionFilterMaps[type];\n};\n\nexport const getFileName = (action, files = []) => {\n const blobId = action.action_params[0];\n if (!blobId) return '';\n if (action.action_name === 'send_attachment') {\n const file = files.find(item => item.blob_id === blobId);\n if (file) return file.filename.toString();\n }\n return '';\n};\n\nexport const getDefaultConditions = eventName => {\n if (eventName === 'message_created') {\n return DEFAULT_MESSAGE_CREATED_CONDITION;\n }\n if (eventName === 'conversation_opened') {\n return DEFAULT_CONVERSATION_OPENED_CONDITION;\n }\n return DEFAULT_OTHER_CONDITION;\n};\n\nexport const getDefaultActions = () => {\n return DEFAULT_ACTIONS;\n};\n\nexport const filterCustomAttributes = customAttributes => {\n return customAttributes.map(attr => {\n return {\n key: attr.attribute_key,\n name: attr.attribute_display_name,\n type: attr.attribute_display_type,\n };\n });\n};\n\nexport const getStandardAttributeInputType = (automationTypes, event, key) => {\n return automationTypes[event].conditions.find(item => item.key === key)\n .inputType;\n};\n\nexport const generateAutomationPayload = payload => {\n const automation = JSON.parse(JSON.stringify(payload));\n automation.conditions[automation.conditions.length - 1].query_operator = null;\n automation.conditions = filterQueryGenerator(automation.conditions).payload;\n automation.actions = actionQueryGenerator(automation.actions);\n return automation;\n};\n\nexport const isCustomAttribute = (attrs, key) => {\n return attrs.find(attr => attr.key === key);\n};\n\nexport const generateCustomAttributes = (\n // eslint-disable-next-line default-param-last\n conversationAttributes = [],\n // eslint-disable-next-line default-param-last\n contactAttributes = [],\n conversationlabel,\n contactlabel\n) => {\n const customAttributes = [];\n if (conversationAttributes.length) {\n customAttributes.push(\n {\n key: `conversation_custom_attribute`,\n name: conversationlabel,\n disabled: true,\n },\n ...conversationAttributes\n );\n }\n if (contactAttributes.length) {\n customAttributes.push(\n {\n key: `contact_custom_attribute`,\n name: contactlabel,\n disabled: true,\n },\n ...contactAttributes\n );\n }\n return customAttributes;\n};\n\n/**\n * Get attributes for a given key from automation types.\n * @param {Object} automationTypes - Object containing automation types.\n * @param {string} key - The key to get attributes for.\n * @returns {Array} Array of condition objects for the given key.\n */\nexport const getAttributes = (automationTypes, key) => {\n return automationTypes[key].conditions;\n};\n\n/**\n * Get the automation type for a given key.\n * @param {Object} automationTypes - Object containing automation types.\n * @param {Object} automation - The automation object.\n * @param {string} key - The key to get the automation type for.\n * @returns {Object} The automation type object.\n */\nexport const getAutomationType = (automationTypes, automation, key) => {\n return automationTypes[automation.event_name].conditions.find(\n condition => condition.key === key\n );\n};\n\n/**\n * Get the input type for a given key.\n * @param {Array} allCustomAttributes - Array of all custom attributes.\n * @param {Object} automationTypes - Object containing automation types.\n * @param {Object} automation - The automation object.\n * @param {string} key - The key to get the input type for.\n * @returns {string} The input type.\n */\nexport const getInputType = (\n allCustomAttributes,\n automationTypes,\n automation,\n key\n) => {\n const customAttribute = isACustomAttribute(allCustomAttributes, key);\n if (customAttribute) {\n return getCustomAttributeInputType(customAttribute.attribute_display_type);\n }\n const type = getAutomationType(automationTypes, automation, key);\n return type.inputType;\n};\n\n/**\n * Get operators for a given key.\n * @param {Array} allCustomAttributes - Array of all custom attributes.\n * @param {Object} automationTypes - Object containing automation types.\n * @param {Object} automation - The automation object.\n * @param {string} mode - The mode ('edit' or other).\n * @param {string} key - The key to get operators for.\n * @returns {Array} Array of operators.\n */\nexport const getOperators = (\n allCustomAttributes,\n automationTypes,\n automation,\n mode,\n key\n) => {\n if (mode === 'edit') {\n const customAttribute = isACustomAttribute(allCustomAttributes, key);\n if (customAttribute) {\n return getOperatorTypes(customAttribute.attribute_display_type);\n }\n }\n const type = getAutomationType(automationTypes, automation, key);\n return type.filterOperators;\n};\n\n/**\n * Get the custom attribute type for a given key.\n * @param {Object} automationTypes - Object containing automation types.\n * @param {Object} automation - The automation object.\n * @param {string} key - The key to get the custom attribute type for.\n * @returns {string} The custom attribute type.\n */\nexport const getCustomAttributeType = (automationTypes, automation, key) => {\n return automationTypes[automation.event_name].conditions.find(\n i => i.key === key\n ).customAttributeType;\n};\n\n/**\n * Determine if an action input should be shown.\n * @param {Array} automationActionTypes - Array of automation action type objects.\n * @param {string} action - The action to check.\n * @returns {boolean} True if the action input should be shown, false otherwise.\n */\nexport const showActionInput = (automationActionTypes, action) => {\n if (action === 'send_email_to_team' || action === 'send_message')\n return false;\n const type = automationActionTypes.find(i => i.key === action).inputType;\n return !!type;\n};\n","import { computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport languages from 'dashboard/components/widgets/conversation/advancedFilterItems/languages';\nimport countries from 'shared/constants/countries';\nimport { useStoreGetters, useMapGetter } from 'dashboard/composables/store';\n\nimport {\n getActionOptions,\n getConditionOptions,\n} from 'dashboard/helper/automationHelper';\n\n/**\n * This is a shared composables that holds utilites used to build dropdown and file options\n * @returns {Object} An object containing various automation-related functions and computed properties.\n */\nexport default function useAutomationValues() {\n const getters = useStoreGetters();\n const { t } = useI18n();\n const agents = useMapGetter('agents/getAgents');\n const campaigns = useMapGetter('campaigns/getAllCampaigns');\n const contacts = useMapGetter('contacts/getContacts');\n const inboxes = useMapGetter('inboxes/getInboxes');\n const labels = useMapGetter('labels/getLabels');\n const teams = useMapGetter('teams/getTeams');\n const slaPolicies = useMapGetter('sla/getSLA');\n\n const booleanFilterOptions = computed(() => [\n { id: true, name: t('FILTER.ATTRIBUTE_LABELS.TRUE') },\n { id: false, name: t('FILTER.ATTRIBUTE_LABELS.FALSE') },\n ]);\n\n const statusFilterItems = computed(() => {\n return {\n open: {\n TEXT: t('CHAT_LIST.CHAT_STATUS_FILTER_ITEMS.open.TEXT'),\n },\n resolved: {\n TEXT: t('CHAT_LIST.CHAT_STATUS_FILTER_ITEMS.resolved.TEXT'),\n },\n pending: {\n TEXT: t('CHAT_LIST.CHAT_STATUS_FILTER_ITEMS.pending.TEXT'),\n },\n snoozed: {\n TEXT: t('CHAT_LIST.CHAT_STATUS_FILTER_ITEMS.snoozed.TEXT'),\n },\n all: {\n TEXT: t('CHAT_LIST.CHAT_STATUS_FILTER_ITEMS.all.TEXT'),\n },\n };\n });\n\n const statusFilterOptions = computed(() => {\n const statusFilters = statusFilterItems.value;\n return [\n ...Object.keys(statusFilters).map(status => ({\n id: status,\n name: statusFilters[status].TEXT,\n })),\n { id: 'all', name: t('CHAT_LIST.FILTER_ALL') },\n ];\n });\n\n /**\n * Adds a translated \"None\" option to the beginning of a list\n * @param {Array} list - The list to add \"None\" to\n * @returns {Array} A new array with \"None\" option at the beginning\n */\n const addNoneToList = list => [\n {\n id: 'nil',\n name: t('AUTOMATION.NONE_OPTION') || 'None',\n },\n ...(list || []),\n ];\n\n /**\n * Gets the condition dropdown values for a given type.\n * @param {string} type - The type of condition.\n * @returns {Array} An array of condition dropdown values.\n */\n const getConditionDropdownValues = type => {\n return getConditionOptions({\n agents: agents.value,\n booleanFilterOptions: booleanFilterOptions.value,\n campaigns: campaigns.value,\n contacts: contacts.value,\n customAttributes: getters['attributes/getAttributes'].value,\n inboxes: inboxes.value,\n statusFilterOptions: statusFilterOptions.value,\n teams: teams.value,\n languages,\n countries,\n type,\n });\n };\n\n /**\n * Gets the action dropdown values for a given type.\n * @param {string} type - The type of action.\n * @returns {Array} An array of action dropdown values.\n */\n const getActionDropdownValues = type => {\n return getActionOptions({\n agents: agents.value,\n labels: labels.value,\n teams: teams.value,\n slaPolicies: slaPolicies.value,\n languages,\n type,\n addNoneToListFn: addNoneToList,\n });\n };\n\n return {\n booleanFilterOptions,\n statusFilterItems,\n statusFilterOptions,\n getConditionDropdownValues,\n getActionDropdownValues,\n agents,\n campaigns,\n contacts,\n inboxes,\n labels,\n teams,\n slaPolicies,\n };\n}\n","import {\n OPERATOR_TYPES_1,\n OPERATOR_TYPES_2,\n OPERATOR_TYPES_3,\n OPERATOR_TYPES_6,\n} from './operators';\n\nexport const AUTOMATIONS = {\n message_created: {\n conditions: [\n {\n key: 'message_type',\n name: 'Message Type',\n attributeI18nKey: 'MESSAGE_TYPE',\n inputType: 'search_select',\n filterOperators: OPERATOR_TYPES_1,\n },\n {\n key: 'content',\n name: 'Message Content',\n attributeI18nKey: 'MESSAGE_CONTAINS',\n inputType: 'comma_separated_plain_text',\n filterOperators: OPERATOR_TYPES_2,\n },\n {\n key: 'email',\n name: 'Email',\n attributeI18nKey: 'EMAIL',\n inputType: 'plain_text',\n filterOperators: OPERATOR_TYPES_2,\n },\n {\n key: 'inbox_id',\n name: 'Inbox',\n attributeI18nKey: 'INBOX',\n inputType: 'multi_select',\n filterOperators: OPERATOR_TYPES_1,\n },\n {\n key: 'conversation_language',\n name: 'Conversation Language',\n attributeI18nKey: 'CONVERSATION_LANGUAGE',\n inputType: 'multi_select',\n filterOperators: OPERATOR_TYPES_1,\n },\n {\n key: 'phone_number',\n name: 'Phone Number',\n attributeI18nKey: 'PHONE_NUMBER',\n inputType: 'plain_text',\n filterOperators: OPERATOR_TYPES_6,\n },\n ],\n actions: [\n {\n key: 'assign_agent',\n name: 'Assign to agent',\n attributeI18nKey: 'ASSIGN_AGENT',\n },\n {\n key: 'assign_team',\n name: 'Assign a team',\n attributeI18nKey: 'ASSIGN_TEAM',\n },\n {\n key: 'add_label',\n name: 'Add a label',\n attributeI18nKey: 'ADD_LABEL',\n },\n {\n key: 'remove_label',\n name: 'Remove a label',\n attributeI18nKey: 'REMOVE_LABEL',\n },\n {\n key: 'send_email_to_team',\n name: 'Send an email to team',\n attributeI18nKey: 'SEND_EMAIL_TO_TEAM',\n },\n {\n key: 'send_message',\n name: 'Send a message',\n attributeI18nKey: 'SEND_MESSAGE',\n },\n {\n key: 'send_email_transcript',\n name: 'Send an email transcript',\n attributeI18nKey: 'SEND_EMAIL_TRANSCRIPT',\n },\n {\n key: 'mute_conversation',\n name: 'Mute conversation',\n attributeI18nKey: 'MUTE_CONVERSATION',\n },\n {\n key: 'snooze_conversation',\n name: 'Snooze conversation',\n attributeI18nKey: 'MUTE_CONVERSATION',\n },\n\n {\n key: 'resolve_conversation',\n name: 'Resolve conversation',\n attributeI18nKey: 'RESOLVE_CONVERSATION',\n },\n {\n key: 'send_webhook_event',\n name: 'Send Webhook Event',\n attributeI18nKey: 'SEND_WEBHOOK_EVENT',\n },\n {\n key: 'send_attachment',\n name: 'Send Attachment',\n attributeI18nKey: 'SEND_ATTACHMENT',\n },\n ],\n },\n conversation_created: {\n conditions: [\n {\n key: 'status',\n name: 'Status',\n attributeI18nKey: 'STATUS',\n inputType: 'multi_select',\n filterOperators: OPERATOR_TYPES_1,\n },\n {\n key: 'browser_language',\n name: 'Browser Language',\n attributeI18nKey: 'BROWSER_LANGUAGE',\n inputType: 'search_select',\n filterOperators: OPERATOR_TYPES_1,\n },\n {\n key: 'mail_subject',\n name: 'Email Subject',\n attributeI18nKey: 'MAIL_SUBJECT',\n inputType: 'plain_text',\n filterOperators: OPERATOR_TYPES_2,\n },\n {\n key: 'country_code',\n name: 'Country',\n attributeI18nKey: 'COUNTRY_NAME',\n inputType: 'search_select',\n filterOperators: OPERATOR_TYPES_1,\n },\n {\n key: 'phone_number',\n name: 'Phone Number',\n attributeI18nKey: 'PHONE_NUMBER',\n inputType: 'plain_text',\n filterOperators: OPERATOR_TYPES_6,\n },\n {\n key: 'referer',\n name: 'Referrer Link',\n attributeI18nKey: 'REFERER_LINK',\n inputType: 'plain_text',\n filterOperators: OPERATOR_TYPES_2,\n },\n {\n key: 'email',\n name: 'Email',\n attributeI18nKey: 'EMAIL',\n inputType: 'plain_text',\n filterOperators: OPERATOR_TYPES_2,\n },\n {\n key: 'inbox_id',\n name: 'Inbox',\n attributeI18nKey: 'INBOX',\n inputType: 'multi_select',\n filterOperators: OPERATOR_TYPES_1,\n },\n {\n key: 'conversation_language',\n name: 'Conversation Language',\n attributeI18nKey: 'CONVERSATION_LANGUAGE',\n inputType: 'multi_select',\n filterOperators: OPERATOR_TYPES_1,\n },\n {\n key: 'priority',\n name: 'Priority',\n attributeI18nKey: 'PRIORITY',\n inputType: 'multi_select',\n filterOperators: OPERATOR_TYPES_1,\n },\n ],\n actions: [\n {\n key: 'assign_agent',\n name: 'Assign to agent',\n attributeI18nKey: 'ASSIGN_AGENT',\n },\n {\n key: 'assign_team',\n name: 'Assign a team',\n attributeI18nKey: 'ASSIGN_TEAM',\n },\n {\n key: 'assign_agent',\n name: 'Assign an agent',\n attributeI18nKey: 'ASSIGN_AGENT',\n },\n {\n key: 'send_email_to_team',\n name: 'Send an email to team',\n attributeI18nKey: 'SEND_EMAIL_TO_TEAM',\n },\n {\n key: 'send_message',\n name: 'Send a message',\n attributeI18nKey: 'SEND_MESSAGE',\n },\n {\n key: 'send_email_transcript',\n name: 'Send an email transcript',\n attributeI18nKey: 'SEND_EMAIL_TRANSCRIPT',\n },\n {\n key: 'mute_conversation',\n name: 'Mute conversation',\n attributeI18nKey: 'MUTE_CONVERSATION',\n },\n {\n key: 'snooze_conversation',\n name: 'Snooze conversation',\n attributeI18nKey: 'MUTE_CONVERSATION',\n },\n {\n key: 'resolve_conversation',\n name: 'Resolve conversation',\n attributeI18nKey: 'RESOLVE_CONVERSATION',\n },\n {\n key: 'send_webhook_event',\n name: 'Send Webhook Event',\n attributeI18nKey: 'SEND_WEBHOOK_EVENT',\n },\n {\n key: 'send_attachment',\n name: 'Send Attachment',\n attributeI18nKey: 'SEND_ATTACHMENT',\n },\n ],\n },\n conversation_updated: {\n conditions: [\n {\n key: 'status',\n name: 'Status',\n attributeI18nKey: 'STATUS',\n inputType: 'multi_select',\n filterOperators: OPERATOR_TYPES_1,\n },\n {\n key: 'browser_language',\n name: 'Browser Language',\n attributeI18nKey: 'BROWSER_LANGUAGE',\n inputType: 'search_select',\n filterOperators: OPERATOR_TYPES_1,\n },\n {\n key: 'mail_subject',\n name: 'Email Subject',\n attributeI18nKey: 'MAIL_SUBJECT',\n inputType: 'plain_text',\n filterOperators: OPERATOR_TYPES_2,\n },\n {\n key: 'country_code',\n name: 'Country',\n attributeI18nKey: 'COUNTRY_NAME',\n inputType: 'search_select',\n filterOperators: OPERATOR_TYPES_1,\n },\n {\n key: 'referer',\n name: 'Referrer Link',\n attributeI18nKey: 'REFERER_LINK',\n inputType: 'plain_text',\n filterOperators: OPERATOR_TYPES_2,\n },\n {\n key: 'phone_number',\n name: 'Phone Number',\n attributeI18nKey: 'PHONE_NUMBER',\n inputType: 'plain_text',\n filterOperators: OPERATOR_TYPES_6,\n },\n {\n key: 'assignee_id',\n name: 'Assignee',\n attributeI18nKey: 'ASSIGNEE_NAME',\n inputType: 'search_select',\n filterOperators: OPERATOR_TYPES_3,\n },\n {\n key: 'team_id',\n name: 'Team',\n attributeI18nKey: 'TEAM_NAME',\n inputType: 'search_select',\n filterOperators: OPERATOR_TYPES_3,\n },\n {\n key: 'email',\n name: 'Email',\n attributeI18nKey: 'EMAIL',\n inputType: 'plain_text',\n filterOperators: OPERATOR_TYPES_2,\n },\n {\n key: 'inbox_id',\n name: 'Inbox',\n attributeI18nKey: 'INBOX',\n inputType: 'multi_select',\n filterOperators: OPERATOR_TYPES_1,\n },\n {\n key: 'conversation_language',\n name: 'Conversation Language',\n attributeI18nKey: 'CONVERSATION_LANGUAGE',\n inputType: 'multi_select',\n filterOperators: OPERATOR_TYPES_1,\n },\n {\n key: 'priority',\n name: 'Priority',\n attributeI18nKey: 'PRIORITY',\n inputType: 'multi_select',\n filterOperators: OPERATOR_TYPES_1,\n },\n ],\n actions: [\n {\n key: 'assign_agent',\n name: 'Assign to agent',\n attributeI18nKey: 'ASSIGN_AGENT',\n },\n {\n key: 'assign_team',\n name: 'Assign a team',\n attributeI18nKey: 'ASSIGN_TEAM',\n },\n {\n key: 'assign_agent',\n name: 'Assign an agent',\n attributeI18nKey: 'ASSIGN_AGENT',\n },\n {\n key: 'send_email_to_team',\n name: 'Send an email to team',\n attributeI18nKey: 'SEND_EMAIL_TO_TEAM',\n },\n {\n key: 'send_message',\n name: 'Send a message',\n attributeI18nKey: 'SEND_MESSAGE',\n },\n {\n key: 'send_email_transcript',\n name: 'Send an email transcript',\n attributeI18nKey: 'SEND_EMAIL_TRANSCRIPT',\n },\n {\n key: 'mute_conversation',\n name: 'Mute conversation',\n attributeI18nKey: 'MUTE_CONVERSATION',\n },\n {\n key: 'snooze_conversation',\n name: 'Snooze conversation',\n attributeI18nKey: 'MUTE_CONVERSATION',\n },\n {\n key: 'resolve_conversation',\n name: 'Resolve conversation',\n attributeI18nKey: 'RESOLVE_CONVERSATION',\n },\n {\n key: 'send_webhook_event',\n name: 'Send Webhook Event',\n attributeI18nKey: 'SEND_WEBHOOK_EVENT',\n },\n {\n key: 'send_attachment',\n name: 'Send Attachment',\n attributeI18nKey: 'SEND_ATTACHMENT',\n },\n ],\n },\n conversation_opened: {\n conditions: [\n {\n key: 'browser_language',\n name: 'Browser Language',\n attributeI18nKey: 'BROWSER_LANGUAGE',\n inputType: 'search_select',\n filterOperators: OPERATOR_TYPES_1,\n },\n {\n key: 'email',\n name: 'Email',\n attributeI18nKey: 'EMAIL',\n inputType: 'plain_text',\n filterOperators: OPERATOR_TYPES_2,\n },\n {\n key: 'mail_subject',\n name: 'Email Subject',\n attributeI18nKey: 'MAIL_SUBJECT',\n inputType: 'plain_text',\n filterOperators: OPERATOR_TYPES_2,\n },\n {\n key: 'country_code',\n name: 'Country',\n attributeI18nKey: 'COUNTRY_NAME',\n inputType: 'search_select',\n filterOperators: OPERATOR_TYPES_1,\n },\n {\n key: 'referer',\n name: 'Referrer Link',\n attributeI18nKey: 'REFERER_LINK',\n inputType: 'plain_text',\n filterOperators: OPERATOR_TYPES_2,\n },\n {\n key: 'assignee_id',\n name: 'Assignee',\n attributeI18nKey: 'ASSIGNEE_NAME',\n inputType: 'search_select',\n filterOperators: OPERATOR_TYPES_3,\n },\n {\n key: 'phone_number',\n name: 'Phone Number',\n attributeI18nKey: 'PHONE_NUMBER',\n inputType: 'plain_text',\n filterOperators: OPERATOR_TYPES_6,\n },\n {\n key: 'team_id',\n name: 'Team',\n attributeI18nKey: 'TEAM_NAME',\n inputType: 'search_select',\n filterOperators: OPERATOR_TYPES_3,\n },\n {\n key: 'inbox_id',\n name: 'Inbox',\n attributeI18nKey: 'INBOX',\n inputType: 'multi_select',\n filterOperators: OPERATOR_TYPES_1,\n },\n {\n key: 'conversation_language',\n name: 'Conversation Language',\n attributeI18nKey: 'CONVERSATION_LANGUAGE',\n inputType: 'multi_select',\n filterOperators: OPERATOR_TYPES_1,\n },\n {\n key: 'priority',\n name: 'Priority',\n attributeI18nKey: 'PRIORITY',\n inputType: 'multi_select',\n filterOperators: OPERATOR_TYPES_1,\n },\n ],\n actions: [\n {\n key: 'assign_agent',\n name: 'Assign to agent',\n attributeI18nKey: 'ASSIGN_AGENT',\n },\n {\n key: 'assign_team',\n name: 'Assign a team',\n attributeI18nKey: 'ASSIGN_TEAM',\n },\n {\n key: 'assign_agent',\n name: 'Assign an agent',\n attributeI18nKey: 'ASSIGN_AGENT',\n },\n {\n key: 'send_email_to_team',\n name: 'Send an email to team',\n attributeI18nKey: 'SEND_EMAIL_TO_TEAM',\n },\n {\n key: 'send_message',\n name: 'Send a message',\n attributeI18nKey: 'SEND_MESSAGE',\n },\n {\n key: 'send_email_transcript',\n name: 'Send an email transcript',\n attributeI18nKey: 'SEND_EMAIL_TRANSCRIPT',\n },\n {\n key: 'mute_conversation',\n name: 'Mute conversation',\n attributeI18nKey: 'MUTE_CONVERSATION',\n },\n {\n key: 'snooze_conversation',\n name: 'Snooze conversation',\n attributeI18nKey: 'MUTE_CONVERSATION',\n },\n {\n key: 'send_webhook_event',\n name: 'Send Webhook Event',\n attributeI18nKey: 'SEND_WEBHOOK_EVENT',\n },\n {\n key: 'send_attachment',\n name: 'Send Attachment',\n attributeI18nKey: 'SEND_ATTACHMENT',\n },\n ],\n },\n};\n\nexport const AUTOMATION_RULE_EVENTS = [\n {\n key: 'conversation_created',\n value: 'Conversation Created',\n },\n {\n key: 'conversation_updated',\n value: 'Conversation Updated',\n },\n {\n key: 'message_created',\n value: 'Message Created',\n },\n {\n key: 'conversation_opened',\n value: 'Conversation Opened',\n },\n];\n\nexport const AUTOMATION_ACTION_TYPES = [\n {\n key: 'assign_agent',\n label: 'Assign to agent',\n inputType: 'search_select',\n },\n {\n key: 'assign_team',\n label: 'Assign a team',\n inputType: 'search_select',\n },\n {\n key: 'add_label',\n label: 'Add a label',\n inputType: 'multi_select',\n },\n {\n key: 'remove_label',\n label: 'Remove a label',\n inputType: 'multi_select',\n },\n {\n key: 'send_email_to_team',\n label: 'Send an email to team',\n inputType: 'team_message',\n },\n {\n key: 'send_email_transcript',\n label: 'Send an email transcript',\n inputType: 'email',\n },\n {\n key: 'mute_conversation',\n label: 'Mute conversation',\n inputType: null,\n },\n {\n key: 'snooze_conversation',\n label: 'Snooze conversation',\n inputType: null,\n },\n {\n key: 'resolve_conversation',\n label: 'Resolve conversation',\n inputType: null,\n },\n {\n key: 'send_webhook_event',\n label: 'Send Webhook Event',\n inputType: 'url',\n },\n {\n key: 'send_attachment',\n label: 'Send Attachment',\n inputType: 'attachment',\n },\n {\n key: 'send_message',\n label: 'Send a message',\n inputType: 'textarea',\n },\n {\n key: 'change_priority',\n label: 'Change Priority',\n inputType: 'search_select',\n },\n {\n key: 'add_sla',\n label: 'Add SLA',\n inputType: 'search_select',\n },\n];\n","import { ref, computed } from 'vue';\nimport { useStoreGetters } from 'dashboard/composables/store';\nimport { useAlert } from 'dashboard/composables';\nimport { useI18n } from 'vue-i18n';\n\nimport {\n generateCustomAttributeTypes,\n getDefaultConditions,\n getDefaultActions,\n generateCustomAttributes,\n} from 'dashboard/helper/automationHelper';\nimport useAutomationValues from './useAutomationValues';\n\nimport {\n // AUTOMATION_RULE_EVENTS,\n // AUTOMATION_ACTION_TYPES,\n AUTOMATIONS,\n} from 'dashboard/routes/dashboard/settings/automation/constants.js';\n\n/**\n * Composable for handling automation-related functionality.\n * @returns {Object} An object containing various automation-related functions and computed properties.\n */\nexport function useAutomation(startValue = null) {\n const getters = useStoreGetters();\n const { t } = useI18n();\n\n const {\n booleanFilterOptions,\n statusFilterOptions,\n getConditionDropdownValues,\n getActionDropdownValues,\n agents,\n campaigns,\n contacts,\n inboxes,\n labels,\n teams,\n slaPolicies,\n } = useAutomationValues();\n\n const automation = ref(startValue);\n const automationTypes = structuredClone(AUTOMATIONS);\n const eventName = computed(() => automation.value?.event_name);\n\n /**\n * Handles the event change for an automation.value.\n */\n const onEventChange = () => {\n automation.value.conditions = getDefaultConditions(eventName.value);\n automation.value.actions = getDefaultActions();\n };\n\n /**\n * Appends a new condition to the automation.value.\n */\n const appendNewCondition = () => {\n const defaultCondition = getDefaultConditions(eventName.value);\n automation.value.conditions = [\n ...automation.value.conditions,\n ...defaultCondition,\n ];\n };\n\n /**\n * Appends a new action to the automation.value.\n */\n const appendNewAction = () => {\n const defaultAction = getDefaultActions();\n automation.value.actions = [...automation.value.actions, ...defaultAction];\n };\n\n /**\n * Removes a filter from the automation.value.\n * @param {number} index - The index of the filter to remove.\n */\n const removeFilter = index => {\n if (automation.value.conditions.length <= 1) {\n useAlert(t('AUTOMATION.CONDITION.DELETE_MESSAGE'));\n } else {\n automation.value.conditions = automation.value.conditions.filter(\n (_, i) => i !== index\n );\n }\n };\n\n /**\n * Removes an action from the automation.value.\n * @param {number} index - The index of the action to remove.\n */\n const removeAction = index => {\n if (automation.value.actions.length <= 1) {\n useAlert(t('AUTOMATION.ACTION.DELETE_MESSAGE'));\n } else {\n automation.value.actions = automation.value.actions.filter(\n (_, i) => i !== index\n );\n }\n };\n\n /**\n * Resets a filter in the automation.value.\n * @param {Object} automationTypes - The automation types object.\n * @param {number} index - The index of the filter to reset.\n * @param {Object} currentCondition - The current condition object.\n */\n const resetFilter = (index, currentCondition) => {\n const newConditions = [...automation.value.conditions];\n\n newConditions[index] = {\n ...newConditions[index],\n filter_operator: automationTypes[eventName.value].conditions.find(\n condition => condition.key === currentCondition.attribute_key\n ).filterOperators[0].value,\n values: '',\n };\n\n automation.value.conditions = newConditions;\n };\n\n /**\n * Resets an action in the automation.value.\n * @param {number} index - The index of the action to reset.\n */\n const resetAction = index => {\n const newActions = [...automation.value.actions];\n newActions[index] = {\n ...newActions[index],\n action_params: [],\n };\n\n automation.value.actions = newActions;\n };\n\n /**\n * This function formats the custom attributes for automation types.\n * It retrieves custom attributes for conversations and contacts,\n * generates custom attribute types, and adds them to the relevant automation types.\n */\n const manifestCustomAttributes = () => {\n const conversationCustomAttributesRaw = getters[\n 'attributes/getAttributesByModel'\n ].value('conversation_attribute');\n const contactCustomAttributesRaw =\n getters['attributes/getAttributesByModel'].value('contact_attribute');\n\n const conversationCustomAttributeTypes = generateCustomAttributeTypes(\n conversationCustomAttributesRaw,\n 'conversation_attribute'\n );\n const contactCustomAttributeTypes = generateCustomAttributeTypes(\n contactCustomAttributesRaw,\n 'contact_attribute'\n );\n\n const manifestedCustomAttributes = generateCustomAttributes(\n conversationCustomAttributeTypes,\n contactCustomAttributeTypes,\n t('AUTOMATION.CONDITION.CONVERSATION_CUSTOM_ATTR_LABEL'),\n t('AUTOMATION.CONDITION.CONTACT_CUSTOM_ATTR_LABEL')\n );\n\n [\n 'message_created',\n 'conversation_created',\n 'conversation_updated',\n 'conversation_opened',\n ].forEach(eventToUpdate => {\n automationTypes[eventToUpdate].conditions = [\n ...automationTypes[eventToUpdate].conditions,\n ...manifestedCustomAttributes,\n ];\n });\n };\n\n return {\n automation,\n automationTypes,\n agents,\n campaigns,\n contacts,\n inboxes,\n labels,\n teams,\n slaPolicies,\n booleanFilterOptions,\n statusFilterOptions,\n onEventChange,\n getConditionDropdownValues,\n appendNewCondition,\n appendNewAction,\n removeFilter,\n removeAction,\n resetFilter,\n resetAction,\n getActionDropdownValues,\n manifestCustomAttributes,\n };\n}\n","export const ATTRIBUTE_KEY_REQUIRED = 'ATTRIBUTE_KEY_REQUIRED';\nexport const FILTER_OPERATOR_REQUIRED = 'FILTER_OPERATOR_REQUIRED';\nexport const VALUE_REQUIRED = 'VALUE_REQUIRED';\nexport const VALUE_MUST_BE_BETWEEN_1_AND_998 =\n 'VALUE_MUST_BE_BETWEEN_1_AND_998';\nexport const ACTION_PARAMETERS_REQUIRED = 'ACTION_PARAMETERS_REQUIRED';\nexport const ATLEAST_ONE_CONDITION_REQUIRED = 'ATLEAST_ONE_CONDITION_REQUIRED';\nexport const ATLEAST_ONE_ACTION_REQUIRED = 'ATLEAST_ONE_ACTION_REQUIRED';\n\nconst isEmptyValue = value => {\n if (!value) {\n return true;\n }\n\n if (Array.isArray(value)) {\n return !value.length;\n }\n\n // We can safely check the type here as both the null value\n // and the array is ruled out earlier.\n if (typeof value === 'object') {\n return !Object.keys(value).length;\n }\n\n return false;\n};\n// ------------------------------------------------------------------\n// ------------------------ Filter Validation -----------------------\n// ------------------------------------------------------------------\n\n/**\n * Validates a single filter for conversations or contacts.\n *\n * @param {Object} filter - The filter object to validate.\n * @param {string} filter.attribute_key - The key of the attribute to filter on.\n * @param {string} filter.filter_operator - The operator to use for filtering.\n * @param {string|number|Array} [filter.values] - The value(s) to filter by (required for most operators).\n *\n * @returns {string|null} An error message if validation fails, or null if validation passes.\n */\nexport const validateSingleFilter = filter => {\n if (!filter.attribute_key) {\n return ATTRIBUTE_KEY_REQUIRED;\n }\n\n if (!filter.filter_operator) {\n return FILTER_OPERATOR_REQUIRED;\n }\n\n const operatorRequiresValue = !['is_present', 'is_not_present'].includes(\n filter.filter_operator\n );\n\n if (operatorRequiresValue && isEmptyValue(filter.values)) {\n return VALUE_REQUIRED;\n }\n\n if (\n filter.filter_operator === 'days_before' &&\n (parseInt(filter.values, 10) <= 0 || parseInt(filter.values, 10) >= 999)\n ) {\n return VALUE_MUST_BE_BETWEEN_1_AND_998;\n }\n\n return null;\n};\n\n// ------------------------------------------------------------------\n// ---------------------- Automation Validation ---------------------\n// ------------------------------------------------------------------\n\n/**\n * Validates the basic fields of an automation object.\n *\n * @param {Object} automation - The automation object to validate.\n * @returns {Object} An object containing any validation errors.\n */\nconst validateBasicFields = automation => {\n const errors = {};\n const requiredFields = ['name', 'description', 'event_name'];\n\n requiredFields.forEach(field => {\n if (!automation[field]) {\n errors[field] = `${\n field.charAt(0).toUpperCase() + field.slice(1)\n } is required`;\n }\n });\n\n return errors;\n};\n\n/**\n * Validates the conditions of an automation object.\n *\n * @param {Array} conditions - The conditions to validate.\n * @returns {Object} An object containing any validation errors.\n */\nexport const validateConditions = conditions => {\n const errors = {};\n\n if (!conditions || conditions.length === 0) {\n errors.conditions = ATLEAST_ONE_CONDITION_REQUIRED;\n return errors;\n }\n\n conditions.forEach((condition, index) => {\n const error = validateSingleFilter(condition);\n if (error) {\n errors[`condition_${index}`] = error;\n }\n });\n\n return errors;\n};\n\n/**\n * Validates a single action of an automation object.\n *\n * @param {Object} action - The action to validate.\n * @returns {string|null} An error message if validation fails, or null if validation passes.\n */\nconst validateSingleAction = action => {\n const noParamActions = [\n 'mute_conversation',\n 'snooze_conversation',\n 'resolve_conversation',\n 'remove_assigned_team',\n ];\n\n if (\n !noParamActions.includes(action.action_name) &&\n (!action.action_params || action.action_params.length === 0)\n ) {\n return ACTION_PARAMETERS_REQUIRED;\n }\n\n return null;\n};\n\n/**\n * Validates the actions of an automation object.\n *\n * @param {Array} actions - The actions to validate.\n * @returns {Object} An object containing any validation errors.\n */\nexport const validateActions = actions => {\n if (!actions || actions.length === 0) {\n return { actions: ATLEAST_ONE_ACTION_REQUIRED };\n }\n\n return actions.reduce((errors, action, index) => {\n const error = validateSingleAction(action);\n if (error) {\n errors[`action_${index}`] = error;\n }\n return errors;\n }, {});\n};\n\n/**\n * Validates an automation object.\n *\n * @param {Object} automation - The automation object to validate.\n * @param {string} automation.name - The name of the automation.\n * @param {string} automation.description - The description of the automation.\n * @param {string} automation.event_name - The name of the event that triggers the automation.\n * @param {Array} automation.conditions - An array of condition objects for the automation.\n * @param {string} automation.conditions[].filter_operator - The operator for the condition.\n * @param {string|number} [automation.conditions[].values] - The value(s) for the condition.\n * @param {Array} automation.actions - An array of action objects for the automation.\n * @param {string} automation.actions[].action_name - The name of the action.\n * @param {Array} [automation.actions[].action_params] - The parameters for the action.\n *\n * @returns {Object} An object containing any validation errors.\n */\nexport const validateAutomation = automation => {\n const basicErrors = validateBasicFields(automation);\n const conditionErrors = validateConditions(automation.conditions);\n const actionErrors = validateActions(automation.actions);\n\n return {\n ...basicErrors,\n ...conditionErrors,\n ...actionErrors,\n };\n};\n","<script>\nimport { mapGetters } from 'vuex';\nimport FilterInputBox from 'dashboard/components/widgets/FilterInput/Index.vue';\nimport AutomationActionInput from 'dashboard/components/widgets/AutomationActionInput.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\nimport { useAutomation } from 'dashboard/composables/useAutomation';\nimport { validateAutomation } from 'dashboard/helper/validations';\nimport {\n generateAutomationPayload,\n getAttributes,\n getInputType,\n getOperators,\n getCustomAttributeType,\n showActionInput,\n} from 'dashboard/helper/automationHelper';\nimport { AUTOMATION_RULE_EVENTS, AUTOMATION_ACTION_TYPES } from './constants';\n\nconst start_value = {\n name: null,\n description: null,\n event_name: 'conversation_created',\n conditions: [\n {\n attribute_key: 'status',\n filter_operator: 'equal_to',\n values: '',\n query_operator: 'and',\n custom_attribute_type: '',\n },\n ],\n actions: [\n {\n action_name: 'assign_agent',\n action_params: [],\n },\n ],\n};\n\nexport default {\n components: {\n FilterInputBox,\n AutomationActionInput,\n NextButton,\n },\n props: {\n onClose: {\n type: Function,\n default: () => {},\n },\n },\n emits: ['saveAutomation'],\n setup() {\n const {\n automation,\n automationTypes,\n onEventChange,\n getConditionDropdownValues,\n appendNewCondition,\n appendNewAction,\n removeFilter,\n removeAction,\n resetFilter,\n resetAction,\n getActionDropdownValues,\n manifestCustomAttributes,\n } = useAutomation(start_value);\n return {\n automation,\n automationTypes,\n onEventChange,\n getConditionDropdownValues,\n appendNewCondition,\n appendNewAction,\n removeFilter,\n removeAction,\n resetFilter,\n resetAction,\n getActionDropdownValues,\n manifestCustomAttributes,\n };\n },\n data() {\n return {\n automationRuleEvent: AUTOMATION_RULE_EVENTS[0].key,\n automationRuleEvents: AUTOMATION_RULE_EVENTS,\n automationMutated: false,\n show: true,\n showDeleteConfirmationModal: false,\n allCustomAttributes: [],\n mode: 'create',\n errors: {},\n };\n },\n computed: {\n ...mapGetters({\n accountId: 'getCurrentAccountId',\n isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount',\n }),\n hasAutomationMutated() {\n if (\n this.automation.conditions[0].values ||\n this.automation.actions[0].action_params.length\n )\n return true;\n return false;\n },\n automationActionTypes() {\n const isSLAEnabled = this.isFeatureEnabled('sla');\n return isSLAEnabled\n ? AUTOMATION_ACTION_TYPES\n : AUTOMATION_ACTION_TYPES.filter(action => action.key !== 'add_sla');\n },\n },\n mounted() {\n this.$store.dispatch('inboxes/get');\n this.$store.dispatch('agents/get');\n this.$store.dispatch('contacts/get');\n this.$store.dispatch('teams/get');\n this.$store.dispatch('labels/get');\n this.$store.dispatch('campaigns/get');\n this.allCustomAttributes = this.$store.getters['attributes/getAttributes'];\n this.manifestCustomAttributes();\n },\n methods: {\n getAttributes,\n getInputType,\n getOperators,\n getCustomAttributeType,\n showActionInput,\n isFeatureEnabled(flag) {\n return this.isFeatureEnabledonAccount(this.accountId, flag);\n },\n emitSaveAutomation() {\n this.errors = validateAutomation(this.automation);\n if (Object.keys(this.errors).length === 0) {\n const automation = generateAutomationPayload(this.automation);\n this.$emit('saveAutomation', automation, this.mode);\n }\n },\n },\n};\n</script>\n\n<template>\n <div>\n <woot-modal-header :header-title=\"$t('AUTOMATION.ADD.TITLE')\" />\n <div class=\"flex flex-col modal-content\">\n <div class=\"w-full\">\n <woot-input\n v-model=\"automation.name\"\n :label=\"$t('AUTOMATION.ADD.FORM.NAME.LABEL')\"\n type=\"text\"\n :class=\"{ error: errors.name }\"\n :error=\"errors.name ? $t('AUTOMATION.ADD.FORM.NAME.ERROR') : ''\"\n :placeholder=\"$t('AUTOMATION.ADD.FORM.NAME.PLACEHOLDER')\"\n />\n <woot-input\n v-model=\"automation.description\"\n :label=\"$t('AUTOMATION.ADD.FORM.DESC.LABEL')\"\n type=\"text\"\n :class=\"{ error: errors.description }\"\n :error=\"\n errors.description ? $t('AUTOMATION.ADD.FORM.DESC.ERROR') : ''\n \"\n :placeholder=\"$t('AUTOMATION.ADD.FORM.DESC.PLACEHOLDER')\"\n />\n <div class=\"mb-6\">\n <label :class=\"{ error: errors.event_name }\">\n {{ $t('AUTOMATION.ADD.FORM.EVENT.LABEL') }}\n <select\n v-model=\"automation.event_name\"\n class=\"m-0\"\n @change=\"onEventChange(automation)\"\n >\n <option\n v-for=\"event in automationRuleEvents\"\n :key=\"event.key\"\n :value=\"event.key\"\n >\n {{ event.value }}\n </option>\n </select>\n <span v-if=\"errors.event_name\" class=\"message\">\n {{ $t('AUTOMATION.ADD.FORM.EVENT.ERROR') }}\n </span>\n </label>\n <p\n v-if=\"hasAutomationMutated\"\n class=\"text-xs text-right text-green-500 pt-1 dark:text-green-500\"\n >\n {{ $t('AUTOMATION.FORM.RESET_MESSAGE') }}\n </p>\n </div>\n <!-- // Conditions Start -->\n <section>\n <label>\n {{ $t('AUTOMATION.ADD.FORM.CONDITIONS.LABEL') }}\n </label>\n <div\n class=\"w-full p-4 mb-4 border border-solid rounded-lg bg-n-slate-2 dark:bg-n-solid-2 border-n-strong\"\n >\n <FilterInputBox\n v-for=\"(condition, i) in automation.conditions\"\n :key=\"i\"\n v-model=\"automation.conditions[i]\"\n :filter-attributes=\"\n getAttributes(automationTypes, automation.event_name)\n \"\n :input-type=\"\n getInputType(\n allCustomAttributes,\n automationTypes,\n automation,\n automation.conditions[i].attribute_key\n )\n \"\n :operators=\"\n getOperators(\n allCustomAttributes,\n automationTypes,\n automation,\n mode,\n automation.conditions[i].attribute_key\n )\n \"\n :dropdown-values=\"\n getConditionDropdownValues(\n automation.conditions[i].attribute_key\n )\n \"\n :show-query-operator=\"i !== automation.conditions.length - 1\"\n :custom-attribute-type=\"\n getCustomAttributeType(\n automationTypes,\n automation,\n automation.conditions[i].attribute_key\n )\n \"\n :error-message=\"\n errors[`condition_${i}`]\n ? $t(`AUTOMATION.ERRORS.${errors[`condition_${i}`]}`)\n : ''\n \"\n @reset-filter=\"resetFilter(i, automation.conditions[i])\"\n @remove-filter=\"removeFilter(i)\"\n />\n <div class=\"mt-4\">\n <NextButton\n icon=\"i-lucide-plus\"\n blue\n faded\n sm\n :label=\"$t('AUTOMATION.ADD.CONDITION_BUTTON_LABEL')\"\n @click=\"appendNewCondition\"\n />\n </div>\n </div>\n </section>\n <!-- // Conditions End -->\n <!-- // Actions Start -->\n <section>\n <label>\n {{ $t('AUTOMATION.ADD.FORM.ACTIONS.LABEL') }}\n </label>\n <div\n class=\"w-full p-4 mb-4 border border-solid rounded-lg bg-n-slate-2 dark:bg-n-solid-2 border-n-strong\"\n >\n <AutomationActionInput\n v-for=\"(action, i) in automation.actions\"\n :key=\"i\"\n v-model=\"automation.actions[i]\"\n :action-types=\"automationActionTypes\"\n :dropdown-values=\"\n getActionDropdownValues(automation.actions[i].action_name)\n \"\n :show-action-input=\"\n showActionInput(\n automationActionTypes,\n automation.actions[i].action_name\n )\n \"\n :error-message=\"\n errors[`action_${i}`]\n ? $t(`AUTOMATION.ERRORS.${errors[`action_${i}`]}`)\n : ''\n \"\n @reset-action=\"resetAction(i)\"\n @remove-action=\"removeAction(i)\"\n />\n <div class=\"mt-4\">\n <NextButton\n icon=\"i-lucide-plus\"\n blue\n faded\n sm\n :label=\"$t('AUTOMATION.ADD.ACTION_BUTTON_LABEL')\"\n @click=\"appendNewAction\"\n />\n </div>\n </div>\n </section>\n <!-- // Actions End -->\n <div class=\"w-full\">\n <div class=\"flex flex-row justify-end w-full gap-2 px-0 py-2\">\n <NextButton\n faded\n slate\n type=\"reset\"\n :label=\"$t('AUTOMATION.ADD.CANCEL_BUTTON_TEXT')\"\n @click.prevent=\"onClose\"\n />\n <NextButton\n solid\n blue\n type=\"submit\"\n :label=\"$t('AUTOMATION.ADD.SUBMIT')\"\n @click=\"emitSaveAutomation\"\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n","import useAutomationValues from './useAutomationValues';\n\nimport {\n getCustomAttributeInputType,\n filterCustomAttributes,\n getStandardAttributeInputType,\n isCustomAttribute,\n} from 'dashboard/helper/automationHelper';\n\nexport function useEditableAutomation() {\n const { getConditionDropdownValues, getActionDropdownValues } =\n useAutomationValues();\n\n /**\n * This function sets the conditions for automation.\n * It help to format the conditions for the automation when we open the edit automation modal.\n * @param {Object} automation - The automation object containing conditions to manifest.\n * @param {Array} allCustomAttributes - List of all custom attributes.\n * @param {Object} automationTypes - Object containing automation type definitions.\n * @returns {Array} An array of manifested conditions.\n */\n const manifestConditions = (\n automation,\n allCustomAttributes,\n automationTypes\n ) => {\n const customAttributes = filterCustomAttributes(allCustomAttributes);\n return automation.conditions.map(condition => {\n const customAttr = isCustomAttribute(\n customAttributes,\n condition.attribute_key\n );\n let inputType = 'plain_text';\n if (customAttr) {\n inputType = getCustomAttributeInputType(customAttr.type);\n } else {\n inputType = getStandardAttributeInputType(\n automationTypes,\n automation.event_name,\n condition.attribute_key\n );\n }\n if (inputType === 'plain_text' || inputType === 'date') {\n return { ...condition, values: condition.values[0] };\n }\n if (inputType === 'comma_separated_plain_text') {\n return { ...condition, values: condition.values.join(',') };\n }\n return {\n ...condition,\n query_operator: condition.query_operator || 'and',\n values: [...getConditionDropdownValues(condition.attribute_key)].filter(\n item => [...condition.values].includes(item.id)\n ),\n };\n });\n };\n\n /**\n * Generates an array of actions for the automation.\n * @param {Object} action - The action object.\n * @param {Array} automationActionTypes - List of available automation action types.\n * @returns {Array|Object} Generated actions array or object based on input type.\n */\n const generateActionsArray = (action, automationActionTypes) => {\n const params = action.action_params;\n const inputType = automationActionTypes.find(\n item => item.key === action.action_name\n ).inputType;\n if (inputType === 'multi_select' || inputType === 'search_select') {\n return [...getActionDropdownValues(action.action_name)].filter(item =>\n [...params].includes(item.id)\n );\n }\n if (inputType === 'team_message') {\n return {\n team_ids: [...getActionDropdownValues(action.action_name)].filter(\n item => [...params[0].team_ids].includes(item.id)\n ),\n message: params[0].message,\n };\n }\n return [...params];\n };\n\n /**\n * This function sets the actions for automation.\n * It help to format the actions for the automation when we open the edit automation modal.\n * @param {Object} automation - The automation object containing actions.\n * @param {Array} automationActionTypes - List of available automation action types.\n * @returns {Array} An array of manifested actions.\n */\n const manifestActions = (automation, automationActionTypes) => {\n return automation.actions.map(action => ({\n ...action,\n action_params: action.action_params.length\n ? generateActionsArray(action, automationActionTypes)\n : [],\n }));\n };\n\n /**\n * Formats the automation object for use when we edit the automation.\n * It help to format the conditions and actions for the automation when we open the edit automation modal.\n * @param {Object} automation - The automation object to format.\n * @param {Array} allCustomAttributes - List of all custom attributes.\n * @param {Object} automationTypes - Object containing automation type definitions.\n * @param {Array} automationActionTypes - List of available automation action types.\n * @returns {Object} A new object with formatted automation data, including automation conditions and actions.\n */\n const formatAutomation = (\n automation,\n allCustomAttributes,\n automationTypes,\n automationActionTypes\n ) => {\n return {\n ...automation,\n conditions: manifestConditions(\n automation,\n allCustomAttributes,\n automationTypes\n ),\n actions: manifestActions(automation, automationActionTypes),\n };\n };\n\n return { formatAutomation };\n}\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useAutomation } from 'dashboard/composables/useAutomation';\nimport { useEditableAutomation } from 'dashboard/composables/useEditableAutomation';\nimport FilterInputBox from 'dashboard/components/widgets/FilterInput/Index.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\nimport AutomationActionInput from 'dashboard/components/widgets/AutomationActionInput.vue';\nimport {\n getFileName,\n generateAutomationPayload,\n getAttributes,\n getInputType,\n getOperators,\n getCustomAttributeType,\n showActionInput,\n} from 'dashboard/helper/automationHelper';\nimport { validateAutomation } from 'dashboard/helper/validations';\n\nimport { AUTOMATION_RULE_EVENTS, AUTOMATION_ACTION_TYPES } from './constants';\n\nexport default {\n components: {\n FilterInputBox,\n NextButton,\n AutomationActionInput,\n },\n props: {\n onClose: {\n type: Function,\n default: () => {},\n },\n selectedResponse: {\n type: Object,\n default: () => {},\n },\n },\n emits: ['saveAutomation'],\n setup() {\n const {\n automation,\n automationTypes,\n onEventChange,\n getConditionDropdownValues,\n appendNewCondition,\n appendNewAction,\n removeFilter,\n removeAction,\n resetFilter,\n resetAction,\n getActionDropdownValues,\n manifestCustomAttributes,\n } = useAutomation();\n const { formatAutomation } = useEditableAutomation();\n return {\n automation,\n automationTypes,\n onEventChange,\n getConditionDropdownValues,\n appendNewCondition,\n appendNewAction,\n removeFilter,\n removeAction,\n resetFilter,\n resetAction,\n getActionDropdownValues,\n formatAutomation,\n manifestCustomAttributes,\n };\n },\n data() {\n return {\n automationRuleEvent: AUTOMATION_RULE_EVENTS[0].key,\n automationRuleEvents: AUTOMATION_RULE_EVENTS,\n automationMutated: false,\n show: true,\n showDeleteConfirmationModal: false,\n allCustomAttributes: [],\n mode: 'edit',\n errors: {},\n };\n },\n computed: {\n ...mapGetters({\n accountId: 'getCurrentAccountId',\n isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount',\n }),\n hasAutomationMutated() {\n if (\n this.automation.conditions[0].values ||\n this.automation.actions[0].action_params.length\n )\n return true;\n return false;\n },\n automationActionTypes() {\n const isSLAEnabled = this.isFeatureEnabled('sla');\n return isSLAEnabled\n ? AUTOMATION_ACTION_TYPES\n : AUTOMATION_ACTION_TYPES.filter(action => action.key !== 'add_sla');\n },\n },\n mounted() {\n this.manifestCustomAttributes();\n this.allCustomAttributes = this.$store.getters['attributes/getAttributes'];\n\n this.automation = this.formatAutomation(\n this.selectedResponse,\n this.allCustomAttributes,\n this.automationTypes,\n this.automationActionTypes\n );\n },\n methods: {\n getFileName,\n getAttributes,\n getInputType,\n getOperators,\n getCustomAttributeType,\n showActionInput,\n isFeatureEnabled(flag) {\n return this.isFeatureEnabledonAccount(this.accountId, flag);\n },\n emitSaveAutomation() {\n this.errors = validateAutomation(this.automation);\n if (Object.keys(this.errors).length === 0) {\n const automation = generateAutomationPayload(this.automation);\n this.$emit('saveAutomation', automation, this.mode);\n }\n },\n },\n};\n</script>\n\n<template>\n <div>\n <woot-modal-header :header-title=\"$t('AUTOMATION.EDIT.TITLE')\" />\n <div class=\"flex flex-col modal-content\">\n <div v-if=\"automation\" class=\"w-full\">\n <woot-input\n v-model=\"automation.name\"\n :label=\"$t('AUTOMATION.ADD.FORM.NAME.LABEL')\"\n type=\"text\"\n :class=\"{ error: errors.name }\"\n :error=\"errors.name ? $t('AUTOMATION.ADD.FORM.NAME.ERROR') : ''\"\n :placeholder=\"$t('AUTOMATION.ADD.FORM.NAME.PLACEHOLDER')\"\n />\n <woot-input\n v-model=\"automation.description\"\n :label=\"$t('AUTOMATION.ADD.FORM.DESC.LABEL')\"\n type=\"text\"\n :class=\"{ error: errors.description }\"\n :error=\"\n errors.description ? $t('AUTOMATION.ADD.FORM.DESC.ERROR') : ''\n \"\n :placeholder=\"$t('AUTOMATION.ADD.FORM.DESC.PLACEHOLDER')\"\n />\n <div class=\"event_wrapper\">\n <label :class=\"{ error: errors.event_name }\">\n {{ $t('AUTOMATION.ADD.FORM.EVENT.LABEL') }}\n <select\n v-model=\"automation.event_name\"\n @change=\"onEventChange(automation)\"\n >\n <option\n v-for=\"event in automationRuleEvents\"\n :key=\"event.key\"\n :value=\"event.key\"\n >\n {{ event.value }}\n </option>\n </select>\n <span v-if=\"errors.event_name\" class=\"message\">\n {{ $t('AUTOMATION.ADD.FORM.EVENT.ERROR') }}\n </span>\n </label>\n </div>\n <!-- // Conditions Start -->\n <section>\n <label>\n {{ $t('AUTOMATION.ADD.FORM.CONDITIONS.LABEL') }}\n </label>\n <div\n class=\"w-full p-4 mb-4 border border-solid rounded-lg bg-n-slate-2 dark:bg-n-solid-2 border-n-strong\"\n >\n <FilterInputBox\n v-for=\"(condition, i) in automation.conditions\"\n :key=\"i\"\n v-model=\"automation.conditions[i]\"\n :filter-attributes=\"\n getAttributes(automationTypes, automation.event_name)\n \"\n :input-type=\"\n getInputType(\n allCustomAttributes,\n automationTypes,\n automation,\n automation.conditions[i].attribute_key\n )\n \"\n :operators=\"\n getOperators(\n allCustomAttributes,\n automationTypes,\n automation,\n mode,\n automation.conditions[i].attribute_key\n )\n \"\n :dropdown-values=\"\n getConditionDropdownValues(\n automation.conditions[i].attribute_key\n )\n \"\n :custom-attribute-type=\"\n getCustomAttributeType(\n automationTypes,\n automation,\n automation.conditions[i].attribute_key\n )\n \"\n :show-query-operator=\"i !== automation.conditions.length - 1\"\n :error-message=\"\n errors[`condition_${i}`]\n ? $t(`AUTOMATION.ERRORS.${errors[`condition_${i}`]}`)\n : ''\n \"\n @reset-filter=\"resetFilter(i, automation.conditions[i])\"\n @remove-filter=\"removeFilter(i)\"\n />\n <div class=\"mt-4\">\n <NextButton\n icon=\"i-lucide-plus\"\n blue\n faded\n sm\n :label=\"$t('AUTOMATION.ADD.CONDITION_BUTTON_LABEL')\"\n @click=\"appendNewCondition\"\n />\n </div>\n </div>\n </section>\n <!-- // Conditions End -->\n <!-- // Actions Start -->\n <section>\n <label>\n {{ $t('AUTOMATION.ADD.FORM.ACTIONS.LABEL') }}\n </label>\n <div\n class=\"w-full p-4 mb-4 border border-solid rounded-lg bg-n-slate-2 dark:bg-n-solid-2 border-n-strong\"\n >\n <AutomationActionInput\n v-for=\"(action, i) in automation.actions\"\n :key=\"i\"\n v-model=\"automation.actions[i]\"\n :action-types=\"automationActionTypes\"\n :dropdown-values=\"getActionDropdownValues(action.action_name)\"\n :show-action-input=\"\n showActionInput(automationActionTypes, action.action_name)\n \"\n :error-message=\"\n errors[`action_${i}`]\n ? $t(`AUTOMATION.ERRORS.${errors[`action_${i}`]}`)\n : ''\n \"\n :initial-file-name=\"getFileName(action, automation.files)\"\n @reset-action=\"resetAction(i)\"\n @remove-action=\"removeAction(i)\"\n />\n <div class=\"mt-4\">\n <NextButton\n icon=\"i-lucide-plus\"\n blue\n faded\n sm\n :label=\"$t('AUTOMATION.ADD.ACTION_BUTTON_LABEL')\"\n @click=\"appendNewAction\"\n />\n </div>\n </div>\n </section>\n <!-- // Actions End -->\n <div class=\"w-full\">\n <div class=\"flex flex-row justify-end w-full gap-2 px-0 py-2\">\n <NextButton\n faded\n slate\n type=\"reset\"\n :label=\"$t('AUTOMATION.EDIT.CANCEL_BUTTON_TEXT')\"\n @click.prevent=\"onClose\"\n />\n <NextButton\n solid\n blue\n type=\"submit\"\n :label=\"$t('AUTOMATION.EDIT.SUBMIT')\"\n @click=\"emitSaveAutomation\"\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.event_wrapper {\n select {\n @apply m-0;\n }\n .info-message {\n @apply text-xs text-green-500 dark:text-green-500 text-right;\n }\n\n @apply mb-6;\n}\n</style>\n","<script setup>\nimport { messageStamp } from 'shared/helpers/timeHelper';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n automation: {\n type: Object,\n required: true,\n },\n loading: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits(['toggle', 'edit', 'delete', 'clone']);\n\nconst readableDate = date => messageStamp(new Date(date), 'LLL d, yyyy');\nconst readableDateWithTime = date =>\n messageStamp(new Date(date), 'LLL d, yyyy hh:mm a');\n\nconst toggle = () => {\n const { id, name, active } = props.automation;\n emit('toggle', {\n id,\n name,\n status: active,\n });\n};\n</script>\n\n<template>\n <tr>\n <td class=\"py-4 ltr:pr-4 rtl:pl-4 min-w-[200px]\">{{ automation.name }}</td>\n <td class=\"py-4 ltr:pr-4 rtl:pl-4\">{{ automation.description }}</td>\n <td class=\"py-4 ltr:pr-4 rtl:pl-4\">\n <woot-switch :model-value=\"automation.active\" @input=\"toggle\" />\n </td>\n <td\n class=\"py-4 ltr:pr-4 rtl:pl-4 min-w-[12px]\"\n :title=\"readableDateWithTime(automation.created_on)\"\n >\n {{ readableDate(automation.created_on) }}\n </td>\n <td class=\"py-4 min-w-xs\">\n <div class=\"flex gap-1 justify-end flex-shrink-0\">\n <Button\n v-tooltip.top=\"$t('AUTOMATION.FORM.EDIT')\"\n icon=\"i-lucide-pen\"\n slate\n xs\n faded\n :is-loading=\"loading\"\n @click=\"$emit('edit', automation)\"\n />\n <Button\n v-tooltip.top=\"$t('AUTOMATION.CLONE.TOOLTIP')\"\n icon=\"i-lucide-copy-plus\"\n xs\n faded\n :is-loading=\"loading\"\n @click=\"$emit('clone', automation)\"\n />\n <Button\n v-tooltip.top=\"$t('AUTOMATION.FORM.DELETE')\"\n :is-loading=\"loading\"\n icon=\"i-lucide-trash-2\"\n xs\n ruby\n faded\n @click=\"$emit('delete', automation)\"\n />\n </div>\n </td>\n </tr>\n</template>\n","<script setup>\nimport { useAlert } from 'dashboard/composables';\nimport AddAutomationRule from './AddAutomationRule.vue';\nimport EditAutomationRule from './EditAutomationRule.vue';\nimport BaseSettingsHeader from '../components/BaseSettingsHeader.vue';\nimport SettingsLayout from '../SettingsLayout.vue';\nimport { computed, onMounted, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useStoreGetters, useStore } from 'dashboard/composables/store';\nimport AutomationRuleRow from './AutomationRuleRow.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst getters = useStoreGetters();\nconst store = useStore();\nconst { t } = useI18n();\nconst confirmDialog = ref(null);\n\nconst loading = ref({});\nconst showAddPopup = ref(false);\nconst showEditPopup = ref(false);\nconst showDeleteConfirmationPopup = ref(false);\nconst selectedAutomation = ref({});\nconst toggleModalTitle = ref(t('AUTOMATION.TOGGLE.ACTIVATION_TITLE'));\nconst toggleModalDescription = ref(\n t('AUTOMATION.TOGGLE.ACTIVATION_DESCRIPTION')\n);\n\nconst records = computed(() => getters['automations/getAutomations'].value);\nconst uiFlags = computed(() => getters['automations/getUIFlags'].value);\nconst accountId = computed(() => getters.getCurrentAccountId.value);\n\nconst deleteConfirmText = computed(\n () => `${t('AUTOMATION.DELETE.CONFIRM.YES')} ${selectedAutomation.value.name}`\n);\n\nconst deleteRejectText = computed(\n () => `${t('AUTOMATION.DELETE.CONFIRM.NO')} ${selectedAutomation.value.name}`\n);\n\nconst deleteMessage = computed(() => ` ${selectedAutomation.value.name}?`);\n\nconst isSLAEnabled = computed(() =>\n getters['accounts/isFeatureEnabledonAccount'].value(accountId.value, 'sla')\n);\n\nonMounted(() => {\n store.dispatch('inboxes/get');\n store.dispatch('agents/get');\n store.dispatch('contacts/get');\n store.dispatch('teams/get');\n store.dispatch('labels/get');\n store.dispatch('campaigns/get');\n store.dispatch('automations/get');\n if (isSLAEnabled.value) {\n store.dispatch('sla/get');\n }\n});\n\nconst openAddPopup = () => {\n showAddPopup.value = true;\n};\nconst hideAddPopup = () => {\n showAddPopup.value = false;\n};\n\nconst openEditPopup = response => {\n selectedAutomation.value = response;\n showEditPopup.value = true;\n};\nconst hideEditPopup = () => {\n showEditPopup.value = false;\n};\n\nconst openDeletePopup = response => {\n showDeleteConfirmationPopup.value = true;\n selectedAutomation.value = response;\n};\nconst closeDeletePopup = () => {\n showDeleteConfirmationPopup.value = false;\n};\n\nconst deleteAutomation = async id => {\n try {\n await store.dispatch('automations/delete', id);\n useAlert(t('AUTOMATION.DELETE.API.SUCCESS_MESSAGE'));\n } catch (error) {\n useAlert(t('AUTOMATION.DELETE.API.ERROR_MESSAGE'));\n } finally {\n loading.value[selectedAutomation.value.id] = false;\n }\n};\nconst confirmDeletion = () => {\n loading.value[selectedAutomation.value.id] = true;\n closeDeletePopup();\n deleteAutomation(selectedAutomation.value.id);\n};\nconst cloneAutomation = async ({ id }) => {\n try {\n await store.dispatch('automations/clone', id);\n useAlert(t('AUTOMATION.CLONE.API.SUCCESS_MESSAGE'));\n store.dispatch('automations/get');\n } catch (error) {\n useAlert(t('AUTOMATION.CLONE.API.ERROR_MESSAGE'));\n } finally {\n loading.value[selectedAutomation.value.id] = false;\n }\n};\n\nconst submitAutomation = async (payload, mode) => {\n try {\n const action =\n mode === 'edit' ? 'automations/update' : 'automations/create';\n const successMessage =\n mode === 'edit'\n ? t('AUTOMATION.EDIT.API.SUCCESS_MESSAGE')\n : t('AUTOMATION.ADD.API.SUCCESS_MESSAGE');\n await store.dispatch(action, payload);\n useAlert(successMessage);\n hideAddPopup();\n hideEditPopup();\n } catch (error) {\n const errorMessage =\n mode === 'edit'\n ? t('AUTOMATION.EDIT.API.ERROR_MESSAGE')\n : t('AUTOMATION.ADD.API.ERROR_MESSAGE');\n useAlert(errorMessage);\n }\n};\nconst toggleAutomation = async ({ id, name, status }) => {\n try {\n if (status) {\n toggleModalTitle.value = t('AUTOMATION.TOGGLE.DEACTIVATION_TITLE');\n toggleModalDescription.value = t(\n 'AUTOMATION.TOGGLE.DEACTIVATION_DESCRIPTION',\n {\n automationName: name,\n }\n );\n } else {\n toggleModalTitle.value = t('AUTOMATION.TOGGLE.ACTIVATION_TITLE');\n toggleModalDescription.value = t(\n 'AUTOMATION.TOGGLE.ACTIVATION_DESCRIPTION',\n {\n automationName: name,\n }\n );\n }\n\n const ok = await confirmDialog.value.showConfirmation();\n if (ok) {\n await store.dispatch('automations/update', {\n id: id,\n active: !status,\n });\n const message = status\n ? t('AUTOMATION.TOGGLE.DEACTIVATION_SUCCESFUL')\n : t('AUTOMATION.TOGGLE.ACTIVATION_SUCCESFUL');\n useAlert(message);\n }\n } catch (error) {\n useAlert(t('AUTOMATION.EDIT.API.ERROR_MESSAGE'));\n }\n};\n\nconst tableHeaders = computed(() => {\n return [\n t('AUTOMATION.LIST.TABLE_HEADER.NAME'),\n t('AUTOMATION.LIST.TABLE_HEADER.DESCRIPTION'),\n t('AUTOMATION.LIST.TABLE_HEADER.ACTIVE'),\n t('AUTOMATION.LIST.TABLE_HEADER.CREATED_ON'),\n ];\n});\n</script>\n\n<template>\n <SettingsLayout\n :is-loading=\"uiFlags.isFetching\"\n :loading-message=\"$t('AUTOMATION.LOADING')\"\n :no-records-found=\"!records.length\"\n :no-records-message=\"$t('AUTOMATION.LIST.404')\"\n >\n <template #header>\n <BaseSettingsHeader\n :title=\"$t('AUTOMATION.HEADER')\"\n :description=\"$t('AUTOMATION.DESCRIPTION')\"\n :link-text=\"$t('AUTOMATION.LEARN_MORE')\"\n feature-name=\"automation\"\n >\n <template #actions>\n <Button\n icon=\"i-lucide-circle-plus\"\n :label=\"$t('AUTOMATION.HEADER_BTN_TXT')\"\n @click=\"openAddPopup\"\n />\n </template>\n </BaseSettingsHeader>\n </template>\n <template #body>\n <table class=\"min-w-full divide-y divide-slate-75 dark:divide-slate-700\">\n <thead>\n <th\n v-for=\"thHeader in tableHeaders\"\n :key=\"thHeader\"\n class=\"py-4 ltr:pr-4 rtl:pl-4 rtl:text-right ltr:text-left font-semibold text-n-slate-11\"\n >\n {{ thHeader }}\n </th>\n </thead>\n <tbody class=\"divide-y divide-n-weak text-n-slate-11\">\n <AutomationRuleRow\n v-for=\"automation in records\"\n :key=\"automation.id\"\n :automation=\"automation\"\n :loading=\"loading[automation.id]\"\n @clone=\"cloneAutomation\"\n @toggle=\"toggleAutomation\"\n @edit=\"openEditPopup\"\n @delete=\"openDeletePopup\"\n />\n </tbody>\n </table>\n </template>\n\n <woot-modal\n v-model:show=\"showAddPopup\"\n size=\"medium\"\n :on-close=\"hideAddPopup\"\n >\n <AddAutomationRule\n v-if=\"showAddPopup\"\n :on-close=\"hideAddPopup\"\n @save-automation=\"submitAutomation\"\n />\n </woot-modal>\n\n <woot-delete-modal\n v-model:show=\"showDeleteConfirmationPopup\"\n :on-close=\"closeDeletePopup\"\n :on-confirm=\"confirmDeletion\"\n :title=\"$t('LABEL_MGMT.DELETE.CONFIRM.TITLE')\"\n :message=\"$t('AUTOMATION.DELETE.CONFIRM.MESSAGE')\"\n :message-value=\"deleteMessage\"\n :confirm-text=\"deleteConfirmText\"\n :reject-text=\"deleteRejectText\"\n />\n\n <woot-modal\n v-model:show=\"showEditPopup\"\n size=\"medium\"\n :on-close=\"hideEditPopup\"\n >\n <EditAutomationRule\n v-if=\"showEditPopup\"\n :on-close=\"hideEditPopup\"\n :selected-response=\"selectedAutomation\"\n @save-automation=\"submitAutomation\"\n />\n </woot-modal>\n <woot-confirm-modal\n ref=\"confirmDialog\"\n :title=\"toggleModalTitle\"\n :description=\"toggleModalDescription\"\n />\n </SettingsLayout>\n</template>\n","import { FEATURE_FLAGS } from '../../../../featureFlags';\nimport { frontendURL } from '../../../../helper/URLHelper';\nimport SettingsWrapper from '../SettingsWrapper.vue';\nimport Automation from './Index.vue';\n\nexport default {\n routes: [\n {\n path: frontendURL('accounts/:accountId/settings/automation'),\n component: SettingsWrapper,\n children: [\n {\n path: '',\n redirect: to => {\n return { name: 'automation_list', params: to.params };\n },\n },\n {\n path: 'list',\n name: 'automation_list',\n component: Automation,\n meta: {\n featureFlag: FEATURE_FLAGS.AUTOMATIONS,\n permissions: ['administrator'],\n },\n },\n ],\n },\n ],\n};\n","export const INSTALLATION_TYPES = {\n CLOUD: 'cloud',\n ENTERPRISE: 'enterprise',\n COMMUNITY: 'community',\n};\n","<script setup>\nimport { computed } from 'vue';\n\n// Props\nconst props = defineProps({\n currentPage: {\n type: Number,\n default: 1,\n },\n totalPages: {\n type: Number,\n default: 0,\n },\n});\n\nconst emit = defineEmits(['pageChange']);\nconst hasLastPage = computed(\n () => props.currentPage === props.totalPages || props.totalPages === 1\n);\nconst hasFirstPage = computed(() => props.currentPage === 1);\nconst hasNextPage = computed(() => props.currentPage === props.totalPages);\nconst hasPrevPage = computed(() => props.currentPage === 1);\n\nfunction buttonClass(hasPage) {\n if (hasPage) {\n return 'hover:!bg-slate-50 dark:hover:!bg-slate-800';\n }\n return 'dark:hover:!bg-slate-700/50';\n}\n\nfunction onPageChange(newPage) {\n emit('pageChange', newPage);\n}\n\nconst onNextPage = () => {\n if (!onNextPage.value) {\n onPageChange(props.currentPage + 1);\n }\n};\nconst onPrevPage = () => {\n if (!hasPrevPage.value) {\n onPageChange(props.currentPage - 1);\n }\n};\nconst onFirstPage = () => {\n if (!hasFirstPage.value) {\n onPageChange(1);\n }\n};\nconst onLastPage = () => {\n if (!hasLastPage.value) {\n onPageChange(props.totalPages);\n }\n};\n</script>\n\n<template>\n <div class=\"flex items-center h-8 rounded-lg bg-slate-50 dark:bg-slate-800\">\n <woot-button\n size=\"small\"\n variant=\"smooth\"\n color-scheme=\"secondary\"\n :is-disabled=\"hasFirstPage\"\n class-names=\"dark:!bg-slate-800 !opacity-100 ltr:rounded-l-lg ltr:rounded-r-none rtl:rounded-r-lg rtl:rounded-l-none\"\n :class=\"buttonClass(hasFirstPage)\"\n @click=\"onFirstPage\"\n >\n <fluent-icon\n icon=\"chevrons-left\"\n size=\"20\"\n icon-lib=\"lucide\"\n :class=\"hasFirstPage && 'opacity-40'\"\n />\n </woot-button>\n <div class=\"w-px h-4 rounded-sm bg-slate-75 dark:bg-slate-700/50\" />\n <woot-button\n size=\"small\"\n variant=\"smooth\"\n color-scheme=\"secondary\"\n :is-disabled=\"hasPrevPage\"\n class-names=\"dark:!bg-slate-800 !opacity-100 rounded-none\"\n :class=\"buttonClass(hasPrevPage)\"\n @click=\"onPrevPage\"\n >\n <fluent-icon\n icon=\"chevron-left-single\"\n size=\"20\"\n icon-lib=\"lucide\"\n :class=\"hasPrevPage && 'opacity-40'\"\n />\n </woot-button>\n\n <div\n class=\"flex items-center gap-3 px-3 tabular-nums bg-slate-50 dark:bg-slate-800 text-slate-700 dark:text-slate-100\"\n >\n <span class=\"text-sm text-slate-800 dark:text-slate-75\">\n {{ currentPage }}\n </span>\n <span class=\"text-slate-600 dark:text-slate-500\">/</span>\n <span class=\"text-sm text-slate-600 dark:text-slate-500\">\n {{ totalPages }}\n </span>\n </div>\n <woot-button\n size=\"small\"\n variant=\"smooth\"\n color-scheme=\"secondary\"\n :is-disabled=\"hasNextPage\"\n class-names=\"dark:!bg-slate-800 !opacity-100 rounded-none\"\n :class=\"buttonClass(hasNextPage)\"\n @click=\"onNextPage\"\n >\n <fluent-icon\n icon=\"chevron-right-single\"\n size=\"20\"\n icon-lib=\"lucide\"\n :class=\"hasNextPage && 'opacity-40'\"\n />\n </woot-button>\n <div class=\"w-px h-4 rounded-sm bg-slate-75 dark:bg-slate-700/50\" />\n <woot-button\n size=\"small\"\n variant=\"smooth\"\n color-scheme=\"secondary\"\n class-names=\"dark:!bg-slate-800 !opacity-100 ltr:rounded-r-lg ltr:rounded-l-none rtl:rounded-l-lg rtl:rounded-r-none\"\n :class=\"buttonClass(hasLastPage)\"\n :is-disabled=\"hasLastPage\"\n @click=\"onLastPage\"\n >\n <fluent-icon\n icon=\"chevrons-right\"\n size=\"20\"\n icon-lib=\"lucide\"\n :class=\"hasLastPage && 'opacity-40'\"\n />\n </woot-button>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport TableFooterResults from './TableFooterResults.vue';\nimport TableFooterPagination from './TableFooterPagination.vue';\nconst props = defineProps({\n currentPage: {\n type: Number,\n default: 1,\n },\n pageSize: {\n type: Number,\n default: 25,\n },\n totalCount: {\n type: Number,\n default: 0,\n },\n});\n\nconst emit = defineEmits(['pageChange']);\nconst totalPages = computed(() => Math.ceil(props.totalCount / props.pageSize));\nconst firstIndex = computed(() => props.pageSize * (props.currentPage - 1) + 1);\nconst lastIndex = computed(() =>\n Math.min(props.totalCount, props.pageSize * props.currentPage)\n);\nconst isFooterVisible = computed(\n () => props.totalCount && !(firstIndex.value > props.totalCount)\n);\n</script>\n\n<!-- eslint-disable-next-line vue/no-root-v-if -->\n<template>\n <footer\n v-if=\"isFooterVisible\"\n class=\"flex items-center justify-between h-12 px-6\"\n >\n <TableFooterResults\n :first-index=\"firstIndex\"\n :last-index=\"lastIndex\"\n :total-count=\"totalCount\"\n />\n <TableFooterPagination\n v-if=\"totalCount\"\n :current-page=\"currentPage\"\n :total-pages=\"totalPages\"\n :total-count=\"totalCount\"\n :page-size=\"pageSize\"\n @page-change=\"emit('pageChange', $event)\"\n />\n </footer>\n</template>\n","const roleMapping = {\n 0: 'agent',\n 1: 'administrator',\n};\n\nconst availabilityMapping = {\n 0: 'online',\n 1: 'offline',\n 2: 'busy',\n};\n\nconst translationKeys = {\n 'automationrule:create': `AUDIT_LOGS.AUTOMATION_RULE.ADD`,\n 'automationrule:update': `AUDIT_LOGS.AUTOMATION_RULE.EDIT`,\n 'automationrule:destroy': `AUDIT_LOGS.AUTOMATION_RULE.DELETE`,\n 'webhook:create': `AUDIT_LOGS.WEBHOOK.ADD`,\n 'webhook:update': `AUDIT_LOGS.WEBHOOK.EDIT`,\n 'webhook:destroy': `AUDIT_LOGS.WEBHOOK.DELETE`,\n 'inbox:create': `AUDIT_LOGS.INBOX.ADD`,\n 'inbox:update': `AUDIT_LOGS.INBOX.EDIT`,\n 'inbox:destroy': `AUDIT_LOGS.INBOX.DELETE`,\n 'user:sign_in': `AUDIT_LOGS.USER_ACTION.SIGN_IN`,\n 'user:sign_out': `AUDIT_LOGS.USER_ACTION.SIGN_OUT`,\n 'team:create': `AUDIT_LOGS.TEAM.ADD`,\n 'team:update': `AUDIT_LOGS.TEAM.EDIT`,\n 'team:destroy': `AUDIT_LOGS.TEAM.DELETE`,\n 'macro:create': `AUDIT_LOGS.MACRO.ADD`,\n 'macro:update': `AUDIT_LOGS.MACRO.EDIT`,\n 'macro:destroy': `AUDIT_LOGS.MACRO.DELETE`,\n 'accountuser:create': `AUDIT_LOGS.ACCOUNT_USER.ADD`,\n 'accountuser:update:self': `AUDIT_LOGS.ACCOUNT_USER.EDIT.SELF`,\n 'accountuser:update:other': `AUDIT_LOGS.ACCOUNT_USER.EDIT.OTHER`,\n 'accountuser:update:deleted': `AUDIT_LOGS.ACCOUNT_USER.EDIT.DELETED`,\n 'inboxmember:create': `AUDIT_LOGS.INBOX_MEMBER.ADD`,\n 'inboxmember:destroy': `AUDIT_LOGS.INBOX_MEMBER.REMOVE`,\n 'teammember:create': `AUDIT_LOGS.TEAM_MEMBER.ADD`,\n 'teammember:destroy': `AUDIT_LOGS.TEAM_MEMBER.REMOVE`,\n 'account:update': `AUDIT_LOGS.ACCOUNT.EDIT`,\n};\n\nfunction extractAttrChange(attrChange) {\n if (Array.isArray(attrChange)) {\n return attrChange[attrChange.length - 1];\n }\n return attrChange;\n}\n\nexport function extractChangedAccountUserValues(auditedChanges) {\n let changes = [];\n let values = [];\n\n // Check roles\n if (auditedChanges.role && auditedChanges.role.length) {\n changes.push('role');\n values.push(roleMapping[extractAttrChange(auditedChanges.role)]);\n }\n\n // Check availability\n if (auditedChanges.availability && auditedChanges.availability.length) {\n changes.push('availability');\n values.push(\n availabilityMapping[extractAttrChange(auditedChanges.availability)]\n );\n }\n\n return { changes, values };\n}\n\nfunction getAgentName(userId, agentList) {\n if (userId === null) {\n return 'System';\n }\n\n const agentName = agentList.find(agent => agent.id === userId)?.name;\n\n // If agent does not exist(removed/deleted), return userId\n return agentName || userId;\n}\n\nfunction handleAccountUserCreate(auditLogItem, translationPayload, agentList) {\n translationPayload.invitee = getAgentName(\n auditLogItem.audited_changes.user_id,\n agentList\n );\n\n const roleKey = auditLogItem.audited_changes.role;\n translationPayload.role = roleMapping[roleKey] || 'unknown'; // 'unknown' as a fallback in case an unrecognized key is provided\n\n return translationPayload;\n}\n\nfunction handleAccountUserUpdate(auditLogItem, translationPayload, agentList) {\n if (auditLogItem.user_id !== auditLogItem.auditable?.user_id) {\n translationPayload.user = getAgentName(\n auditLogItem.auditable?.user_id,\n agentList\n );\n }\n\n const accountUserChanges = extractChangedAccountUserValues(\n auditLogItem.audited_changes\n );\n if (accountUserChanges) {\n translationPayload.attributes = accountUserChanges.changes;\n translationPayload.values = accountUserChanges.values;\n }\n return translationPayload;\n}\n\nfunction setUserInPayload(auditLogItem, translationPayload, agentList) {\n const userIdChange = auditLogItem.audited_changes.user_id;\n if (userIdChange && userIdChange !== undefined) {\n translationPayload.user = getAgentName(userIdChange, agentList);\n }\n return translationPayload;\n}\n\nfunction setTeamIdInPayload(auditLogItem, translationPayload) {\n if (auditLogItem.audited_changes.team_id) {\n translationPayload.team_id = auditLogItem.audited_changes.team_id;\n }\n return translationPayload;\n}\n\nfunction setInboxIdInPayload(auditLogItem, translationPayload) {\n if (auditLogItem.audited_changes.inbox_id) {\n translationPayload.inbox_id = auditLogItem.audited_changes.inbox_id;\n }\n return translationPayload;\n}\n\nfunction handleInboxTeamMember(auditLogItem, translationPayload, agentList) {\n if (auditLogItem.audited_changes) {\n translationPayload = setUserInPayload(\n auditLogItem,\n translationPayload,\n agentList\n );\n translationPayload = setTeamIdInPayload(auditLogItem, translationPayload);\n translationPayload = setInboxIdInPayload(auditLogItem, translationPayload);\n }\n return translationPayload;\n}\n\nfunction handleAccountUser(\n auditLogItem,\n translationPayload,\n agentList,\n action\n) {\n if (action === 'create') {\n return handleAccountUserCreate(auditLogItem, translationPayload, agentList);\n }\n\n if (action === 'update') {\n return handleAccountUserUpdate(auditLogItem, translationPayload, agentList);\n }\n\n return translationPayload;\n}\n\nexport function generateTranslationPayload(auditLogItem, agentList) {\n let translationPayload = {\n agentName: getAgentName(auditLogItem.user_id, agentList),\n id: auditLogItem.auditable_id,\n };\n\n const auditableType = auditLogItem.auditable_type.toLowerCase();\n const action = auditLogItem.action.toLowerCase();\n\n if (auditableType === 'accountuser') {\n translationPayload = handleAccountUser(\n auditLogItem,\n translationPayload,\n agentList,\n action\n );\n }\n\n if (auditableType === 'inboxmember' || auditableType === 'teammember') {\n translationPayload = handleInboxTeamMember(\n auditLogItem,\n translationPayload,\n agentList\n );\n }\n\n return translationPayload;\n}\n\nfunction getAccountUserUpdateSuffix(auditLogItem) {\n if (auditLogItem.auditable === null) {\n // If the user is deleted, we don't need to check if the user is the same as the auditLogItem.user_id\n // Else we can use the deleted translation key\n // It doesn't need the agent name\n return ':deleted';\n }\n return auditLogItem.user_id === auditLogItem.auditable.user_id\n ? ':self'\n : ':other';\n}\n\nexport const generateLogActionKey = auditLogItem => {\n const auditableType = auditLogItem.auditable_type.toLowerCase();\n const action = auditLogItem.action.toLowerCase();\n let logActionKey = `${auditableType}:${action}`;\n\n if (auditableType === 'accountuser' && action === 'update') {\n logActionKey += getAccountUserUpdateSuffix(auditLogItem);\n }\n\n return translationKeys[logActionKey] || '';\n};\n","<script setup>\nimport { useAlert } from 'dashboard/composables';\nimport { messageTimestamp } from 'shared/helpers/timeHelper';\nimport { useStoreGetters, useStore } from 'dashboard/composables/store';\nimport TableFooter from 'dashboard/components/widgets/TableFooter.vue';\nimport BaseSettingsHeader from '../components/BaseSettingsHeader.vue';\nimport {\n generateTranslationPayload,\n generateLogActionKey,\n} from 'dashboard/helper/auditlogHelper';\nimport { computed, onMounted, watch } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useRoute, useRouter } from 'vue-router';\n\nconst getters = useStoreGetters();\nconst store = useStore();\nconst router = useRouter();\nconst records = computed(() => getters['auditlogs/getAuditLogs'].value);\nconst uiFlags = computed(() => getters['auditlogs/getUIFlags'].value);\nconst meta = computed(() => getters['auditlogs/getMeta'].value);\nconst agentList = computed(() => getters['agents/getAgents'].value);\n\nconst { t } = useI18n();\nconst route = useRoute();\n\nconst routerPage = computed(() => Number(route.query.page ?? 1));\n\nconst fetchAuditLogs = page => {\n try {\n store.dispatch('auditlogs/fetch', { page });\n } catch (error) {\n const errorMessage = error?.message || t('AUDIT_LOGS.API.ERROR_MESSAGE');\n useAlert(errorMessage);\n }\n};\n\nconst generateLogText = auditLogItem => {\n const payload = generateTranslationPayload(auditLogItem, agentList.value);\n const translationKey = generateLogActionKey(auditLogItem);\n\n const joinIfArray = value => {\n return Array.isArray(value) ? value.join(', ') : value;\n };\n\n const mergedPayload = {\n ...payload,\n attributes: joinIfArray(payload.attributes),\n values: joinIfArray(payload.values),\n };\n return t(translationKey, mergedPayload);\n};\n\nconst onPageChange = page => {\n router.push({ name: 'auditlogs_list', query: { page: page } });\n};\n\nonMounted(() => {\n store.dispatch('agents/get');\n fetchAuditLogs(routerPage.value);\n});\n\nwatch(routerPage, (newPage, oldPage) => {\n if (newPage !== oldPage) {\n fetchAuditLogs(newPage);\n }\n});\n\nconst tableHeaders = computed(() => {\n return [\n t('AUDIT_LOGS.LIST.TABLE_HEADER.ACTIVITY'),\n t('AUDIT_LOGS.LIST.TABLE_HEADER.TIME'),\n t('AUDIT_LOGS.LIST.TABLE_HEADER.IP_ADDRESS'),\n ];\n});\n</script>\n\n<template>\n <div class=\"flex-1 overflow-auto\">\n <BaseSettingsHeader\n :title=\"$t('AUDIT_LOGS.HEADER')\"\n :description=\"$t('AUDIT_LOGS.DESCRIPTION')\"\n :link-text=\"$t('AUDIT_LOGS.LEARN_MORE')\"\n feature-name=\"audit_logs\"\n />\n\n <div class=\"mt-6 flex-1 text-slate-700 dark:text-slate-300\">\n <woot-loading-state\n v-if=\"uiFlags.fetchingList\"\n :message=\"$t('AUDIT_LOGS.LOADING')\"\n />\n <p\n v-else-if=\"!records.length\"\n class=\"flex flex-col items-center justify-center h-full text-base p-8\"\n >\n {{ $t('AUDIT_LOGS.LIST.404') }}\n </p>\n <div v-else class=\"min-w-full overflow-x-auto\">\n <table class=\"divide-y divide-slate-75 dark:divide-slate-700\">\n <thead>\n <th\n v-for=\"thHeader in tableHeaders\"\n :key=\"thHeader\"\n class=\"py-4 ltr:pr-4 rtl:pl-4 text-left font-semibold text-n-slate-11\"\n >\n {{ thHeader }}\n </th>\n </thead>\n <tbody class=\"divide-y divide-n-weak text-n-slate-11\">\n <tr v-for=\"auditLogItem in records\" :key=\"auditLogItem.id\">\n <td class=\"py-4 ltr:pr-4 rtl:pl-4 break-all whitespace-nowrap\">\n {{ generateLogText(auditLogItem) }}\n </td>\n <td class=\"py-4 ltr:pr-4 rtl:pl-4 break-all whitespace-nowrap\">\n {{\n messageTimestamp(\n auditLogItem.created_at,\n 'MMM dd, yyyy hh:mm a'\n )\n }}\n </td>\n <td class=\"py-4 w-[8.75rem]\">\n {{ auditLogItem.remote_address }}\n </td>\n </tr>\n </tbody>\n </table>\n <TableFooter\n :current-page=\"Number(meta.currentPage)\"\n :total-count=\"meta.totalEntries\"\n :page-size=\"meta.perPage\"\n class=\"border-slate-50 dark:border-slate-800 border-t !px-0 py-4\"\n @page-change=\"onPageChange\"\n />\n </div>\n </div>\n </div>\n</template>\n","import { FEATURE_FLAGS } from '../../../../featureFlags';\nimport { INSTALLATION_TYPES } from 'dashboard/constants/installationTypes';\nimport { frontendURL } from '../../../../helper/URLHelper';\n\nimport SettingsWrapper from '../SettingsWrapper.vue';\nimport AuditLogsHome from './Index.vue';\n\nexport default {\n routes: [\n {\n path: frontendURL('accounts/:accountId/settings/audit-logs'),\n component: SettingsWrapper,\n children: [\n {\n path: '',\n redirect: to => {\n return { name: 'auditlogs_list', params: to.params };\n },\n },\n {\n path: 'list',\n name: 'auditlogs_list',\n meta: {\n featureFlag: FEATURE_FLAGS.AUDIT_LOGS,\n installationTypes: [\n INSTALLATION_TYPES.CLOUD,\n INSTALLATION_TYPES.ENTERPRISE,\n ],\n permissions: ['administrator'],\n },\n component: AuditLogsHome,\n },\n ],\n },\n ],\n};\n","// NOTE: In the future if performance becomes an issue, we can memoize the functions\n\nimport { unref } from 'vue';\nimport camelcaseKeys from 'camelcase-keys';\nimport snakecaseKeys from 'snakecase-keys';\nimport * as Sentry from '@sentry/vue';\n\n/**\n * Vue composable that converts object keys to camelCase\n * @param {Object|Array|import('vue').Ref<Object|Array>} payload - Object or array to convert\n * @param {Object} [options] - Options object\n * @param {boolean} [options.deep=false] - Should convert keys of nested objects\n * @returns {Object|Array} Converted payload with camelCase keys\n */\nexport function useCamelCase(payload, options) {\n try {\n const unrefPayload = unref(payload);\n return camelcaseKeys(unrefPayload, options);\n } catch (e) {\n Sentry.setContext('transform-keys-error', {\n payload,\n options,\n op: 'camelCase',\n });\n Sentry.captureException(e);\n return payload;\n }\n}\n\n/**\n * Vue composable that converts object keys to snake_case\n * @param {Object|Array|import('vue').Ref<Object|Array>} payload - Object or array to convert\n * @param {Object} [options] - Options object\n * @param {boolean} [options.deep=false] - Should convert keys of nested objects\n * @returns {Object|Array} Converted payload with snake_case keys\n */\nexport function useSnakeCase(payload, options) {\n try {\n const unrefPayload = unref(payload);\n return snakecaseKeys(unrefPayload, options);\n } catch (e) {\n Sentry.setContext('transform-keys-error', {\n payload,\n options,\n op: 'snakeCase',\n });\n Sentry.captureException(e);\n return payload;\n }\n}\n","import { computed } from 'vue';\nimport { useStore } from 'dashboard/composables/store.js';\nimport { useAccount } from 'dashboard/composables/useAccount';\nimport { useCamelCase } from 'dashboard/composables/useTransformKeys';\nimport { FEATURE_FLAGS } from 'dashboard/featureFlags';\n\nexport function useCaptain() {\n const store = useStore();\n const { isCloudFeatureEnabled, currentAccount } = useAccount();\n\n const captainEnabled = computed(() => {\n return isCloudFeatureEnabled(FEATURE_FLAGS.CAPTAIN);\n });\n\n const captainLimits = computed(() => {\n return currentAccount.value?.limits?.captain;\n });\n\n const documentLimits = computed(() => {\n if (captainLimits.value?.documents) {\n return useCamelCase(captainLimits.value.documents);\n }\n\n return null;\n });\n\n const responseLimits = computed(() => {\n if (captainLimits.value?.responses) {\n return useCamelCase(captainLimits.value.responses);\n }\n\n return null;\n });\n\n const fetchLimits = () => {\n store.dispatch('accounts/limits');\n };\n\n return {\n captainEnabled,\n captainLimits,\n documentLimits,\n responseLimits,\n fetchLimits,\n };\n}\n","<script setup>\nimport { computed } from 'vue';\nconst props = defineProps({\n title: {\n type: String,\n required: true,\n },\n consumed: {\n type: Number,\n required: true,\n },\n totalCount: {\n type: Number,\n required: true,\n },\n});\n\nconst percent = computed(() =>\n Math.round((props.consumed / props.totalCount) * 100)\n);\n\nconst colorClass = computed(() => {\n if (percent.value < 50) {\n return 'bg-n-teal-10';\n }\n if (percent.value < 80) {\n return 'bg-n-amber-10';\n }\n return 'bg-n-ruby-10';\n});\n</script>\n\n<template>\n <div\n class=\"flex gap-5 items-center justify-between text-xs uppercase text-n-slate-10\"\n >\n <div class=\"font-medium tracking-wider\">\n {{ title }}\n </div>\n <div class=\"tabular-nums\">{{ consumed }} / {{ totalCount }}</div>\n </div>\n <div class=\"rounded-full overflow-hidden h-2 w-full bg-n-slate-4 mt-2\">\n <div class=\"h-2\" :class=\"colorClass\" :style=\"{ width: `${percent}%` }\" />\n </div>\n</template>\n","<script setup>\nimport { computed, onMounted } from 'vue';\nimport { useMapGetter, useStore } from 'dashboard/composables/store.js';\nimport { useAccount } from 'dashboard/composables/useAccount';\nimport { useCaptain } from 'dashboard/composables/useCaptain';\nimport { format } from 'date-fns';\n\nimport BillingMeter from './components/BillingMeter.vue';\nimport BillingCard from './components/BillingCard.vue';\nimport BillingHeader from './components/BillingHeader.vue';\nimport DetailItem from './components/DetailItem.vue';\nimport BaseSettingsHeader from '../components/BaseSettingsHeader.vue';\nimport SettingsLayout from '../SettingsLayout.vue';\nimport ButtonV4 from 'next/button/Button.vue';\n\nconst { currentAccount } = useAccount();\nconst {\n captainEnabled,\n captainLimits,\n documentLimits,\n responseLimits,\n fetchLimits,\n} = useCaptain();\n\nconst uiFlags = useMapGetter('accounts/getUIFlags');\nconst store = useStore();\nconst customAttributes = computed(() => {\n return currentAccount.value.custom_attributes || {};\n});\n\n/**\n * Computed property for plan name\n * @returns {string|undefined}\n */\nconst planName = computed(() => {\n return customAttributes.value.plan_name;\n});\n\n/**\n * Computed property for subscribed quantity\n * @returns {number|undefined}\n */\nconst subscribedQuantity = computed(() => {\n return customAttributes.value.subscribed_quantity;\n});\n\nconst subscriptionRenewsOn = computed(() => {\n if (!customAttributes.value.subscription_ends_on) return '';\n const endDate = new Date(customAttributes.value.subscription_ends_on);\n // return date as 12 Jan, 2034\n return format(endDate, 'dd MMM, yyyy');\n});\n\n/**\n * Computed property indicating if user has a billing plan\n * @returns {boolean}\n */\nconst hasABillingPlan = computed(() => {\n return !!planName.value;\n});\n\nconst fetchAccountDetails = async () => {\n if (!hasABillingPlan.value) {\n store.dispatch('accounts/subscription');\n fetchLimits();\n }\n};\n\nconst onClickBillingPortal = () => {\n store.dispatch('accounts/checkout');\n};\n\nconst onToggleChatWindow = () => {\n if (window.$chatwoot) {\n window.$chatwoot.toggle();\n }\n};\n\nonMounted(fetchAccountDetails);\n</script>\n\n<template>\n <SettingsLayout\n :is-loading=\"uiFlags.isFetchingItem\"\n :loading-message=\"$t('ATTRIBUTES_MGMT.LOADING')\"\n :no-records-found=\"!hasABillingPlan\"\n :no-records-message=\"$t('BILLING_SETTINGS.NO_BILLING_USER')\"\n >\n <template #header>\n <BaseSettingsHeader\n :title=\"$t('BILLING_SETTINGS.TITLE')\"\n :description=\"$t('BILLING_SETTINGS.DESCRIPTION')\"\n :link-text=\"$t('BILLING_SETTINGS.VIEW_PRICING')\"\n feature-name=\"billing\"\n />\n </template>\n <template #body>\n <section class=\"grid gap-4\">\n <BillingCard\n :title=\"$t('BILLING_SETTINGS.MANAGE_SUBSCRIPTION.TITLE')\"\n :description=\"$t('BILLING_SETTINGS.MANAGE_SUBSCRIPTION.DESCRIPTION')\"\n >\n <template #action>\n <ButtonV4 sm solid blue @click=\"onClickBillingPortal\">\n {{ $t('BILLING_SETTINGS.MANAGE_SUBSCRIPTION.BUTTON_TXT') }}\n </ButtonV4>\n </template>\n <div\n v-if=\"planName || subscribedQuantity || subscriptionRenewsOn\"\n class=\"grid lg:grid-cols-4 sm:grid-cols-3 grid-cols-1 gap-2 divide-x divide-n-weak\"\n >\n <DetailItem\n :label=\"$t('BILLING_SETTINGS.CURRENT_PLAN.TITLE')\"\n :value=\"planName\"\n />\n <DetailItem\n v-if=\"subscribedQuantity\"\n :label=\"$t('BILLING_SETTINGS.CURRENT_PLAN.SEAT_COUNT')\"\n :value=\"subscribedQuantity\"\n />\n <DetailItem\n v-if=\"subscriptionRenewsOn\"\n :label=\"$t('BILLING_SETTINGS.CURRENT_PLAN.RENEWS_ON')\"\n :value=\"subscriptionRenewsOn\"\n />\n </div>\n </BillingCard>\n <BillingCard\n v-if=\"captainEnabled\"\n :title=\"$t('BILLING_SETTINGS.CAPTAIN.TITLE')\"\n :description=\"$t('BILLING_SETTINGS.CAPTAIN.DESCRIPTION')\"\n >\n <template #action>\n <ButtonV4 sm faded slate disabled>\n {{ $t('BILLING_SETTINGS.CAPTAIN.BUTTON_TXT') }}\n </ButtonV4>\n </template>\n <div v-if=\"captainLimits && responseLimits\" class=\"px-5\">\n <BillingMeter\n :title=\"$t('BILLING_SETTINGS.CAPTAIN.RESPONSES')\"\n v-bind=\"responseLimits\"\n />\n </div>\n <div v-if=\"captainLimits && documentLimits\" class=\"px-5\">\n <BillingMeter\n :title=\"$t('BILLING_SETTINGS.CAPTAIN.DOCUMENTS')\"\n v-bind=\"documentLimits\"\n />\n </div>\n </BillingCard>\n <BillingCard\n v-else\n :title=\"$t('BILLING_SETTINGS.CAPTAIN.TITLE')\"\n :description=\"$t('BILLING_SETTINGS.CAPTAIN.UPGRADE')\"\n >\n <template #action>\n <ButtonV4 sm solid slate @click=\"onClickBillingPortal\">\n {{ $t('CAPTAIN.PAYWALL.UPGRADE_NOW') }}\n </ButtonV4>\n </template>\n </BillingCard>\n\n <BillingHeader\n class=\"px-1 mt-5\"\n :title=\"$t('BILLING_SETTINGS.CHAT_WITH_US.TITLE')\"\n :description=\"$t('BILLING_SETTINGS.CHAT_WITH_US.DESCRIPTION')\"\n >\n <ButtonV4\n sm\n solid\n slate\n icon=\"i-lucide-life-buoy\"\n @open=\"onToggleChatWindow\"\n >\n {{ $t('BILLING_SETTINGS.CHAT_WITH_US.BUTTON_TXT') }}\n </ButtonV4>\n </BillingHeader>\n </section>\n </template>\n </SettingsLayout>\n</template>\n","import { frontendURL } from '../../../../helper/URLHelper';\nimport { INSTALLATION_TYPES } from 'dashboard/constants/installationTypes';\nimport SettingsWrapper from '../SettingsWrapper.vue';\nimport Index from './Index.vue';\n\nexport default {\n routes: [\n {\n path: frontendURL('accounts/:accountId/settings/billing'),\n meta: {\n permissions: ['administrator'],\n installationTypes: [INSTALLATION_TYPES.CLOUD],\n },\n component: SettingsWrapper,\n props: {\n headerTitle: 'BILLING_SETTINGS.TITLE',\n icon: 'credit-card-person',\n showNewButton: false,\n },\n children: [\n {\n path: '',\n name: 'billing_settings_index',\n component: Index,\n meta: {\n installationTypes: [INSTALLATION_TYPES.CLOUD],\n permissions: ['administrator'],\n },\n },\n ],\n },\n ],\n};\n","<script>\nimport { useVuelidate } from '@vuelidate/core';\nimport { required, minLength } from '@vuelidate/validators';\nimport { useAlert } from 'dashboard/composables';\n\nimport NextButton from 'dashboard/components-next/button/Button.vue';\nimport Modal from '../../../../components/Modal.vue';\nimport WootMessageEditor from 'dashboard/components/widgets/WootWriter/Editor.vue';\n\nexport default {\n name: 'AddCanned',\n components: {\n NextButton,\n Modal,\n WootMessageEditor,\n },\n props: {\n responseContent: {\n type: String,\n default: '',\n },\n onClose: {\n type: Function,\n default: () => {},\n },\n },\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n shortCode: '',\n content: this.responseContent || '',\n addCanned: {\n showLoading: false,\n message: '',\n },\n show: true,\n };\n },\n validations: {\n shortCode: {\n required,\n minLength: minLength(2),\n },\n content: {\n required,\n },\n },\n methods: {\n resetForm() {\n this.shortCode = '';\n this.content = '';\n this.v$.shortCode.$reset();\n this.v$.content.$reset();\n },\n addCannedResponse() {\n // Show loading on button\n this.addCanned.showLoading = true;\n // Make API Calls\n this.$store\n .dispatch('createCannedResponse', {\n short_code: this.shortCode,\n content: this.content,\n })\n .then(() => {\n // Reset Form, Show success message\n this.addCanned.showLoading = false;\n useAlert(this.$t('CANNED_MGMT.ADD.API.SUCCESS_MESSAGE'));\n this.resetForm();\n this.onClose();\n })\n .catch(error => {\n this.addCanned.showLoading = false;\n const errorMessage =\n error?.message || this.$t('CANNED_MGMT.ADD.API.ERROR_MESSAGE');\n useAlert(errorMessage);\n });\n },\n },\n};\n</script>\n\n<template>\n <Modal v-model:show=\"show\" :on-close=\"onClose\">\n <div class=\"flex flex-col h-auto overflow-auto\">\n <woot-modal-header\n :header-title=\"$t('CANNED_MGMT.ADD.TITLE')\"\n :header-content=\"$t('CANNED_MGMT.ADD.DESC')\"\n />\n <form class=\"flex flex-col w-full\" @submit.prevent=\"addCannedResponse()\">\n <div class=\"w-full\">\n <label :class=\"{ error: v$.shortCode.$error }\">\n {{ $t('CANNED_MGMT.ADD.FORM.SHORT_CODE.LABEL') }}\n <input\n v-model=\"shortCode\"\n type=\"text\"\n :placeholder=\"$t('CANNED_MGMT.ADD.FORM.SHORT_CODE.PLACEHOLDER')\"\n @blur=\"v$.shortCode.$touch\"\n />\n </label>\n </div>\n\n <div class=\"w-full\">\n <label :class=\"{ error: v$.content.$error }\">\n {{ $t('CANNED_MGMT.ADD.FORM.CONTENT.LABEL') }}\n </label>\n <div class=\"editor-wrap\">\n <WootMessageEditor\n v-model=\"content\"\n class=\"message-editor [&>div]:px-1\"\n :class=\"{ editor_warning: v$.content.$error }\"\n enable-variables\n :enable-canned-responses=\"false\"\n :placeholder=\"$t('CANNED_MGMT.ADD.FORM.CONTENT.PLACEHOLDER')\"\n @blur=\"v$.content.$touch\"\n />\n </div>\n </div>\n <div class=\"flex flex-row justify-end w-full gap-2 px-0 py-2\">\n <NextButton\n faded\n slate\n type=\"reset\"\n :label=\"$t('CANNED_MGMT.ADD.CANCEL_BUTTON_TEXT')\"\n @click.prevent=\"onClose\"\n />\n <NextButton\n type=\"submit\"\n :label=\"$t('CANNED_MGMT.ADD.FORM.SUBMIT')\"\n :disabled=\"\n v$.content.$invalid ||\n v$.shortCode.$invalid ||\n addCanned.showLoading\n \"\n :is-loading=\"addCanned.showLoading\"\n />\n </div>\n </form>\n </div>\n </Modal>\n</template>\n\n<style scoped lang=\"scss\">\n::v-deep {\n .ProseMirror-menubar {\n @apply hidden;\n }\n\n .ProseMirror-woot-style {\n @apply min-h-[12.5rem];\n\n p {\n @apply text-base;\n }\n }\n}\n</style>\n","<script>\n/* eslint no-console: 0 */\nimport { useVuelidate } from '@vuelidate/core';\nimport { required, minLength } from '@vuelidate/validators';\nimport { useAlert } from 'dashboard/composables';\nimport WootMessageEditor from 'dashboard/components/widgets/WootWriter/Editor.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\nimport Modal from '../../../../components/Modal.vue';\n\nexport default {\n components: {\n NextButton,\n Modal,\n WootMessageEditor,\n },\n props: {\n id: { type: Number, default: null },\n edcontent: { type: String, default: '' },\n edshortCode: { type: String, default: '' },\n onClose: { type: Function, default: () => {} },\n },\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n editCanned: {\n showAlert: false,\n showLoading: false,\n },\n shortCode: this.edshortCode,\n content: this.edcontent,\n show: true,\n };\n },\n validations: {\n shortCode: {\n required,\n minLength: minLength(2),\n },\n content: {\n required,\n },\n },\n computed: {\n pageTitle() {\n return `${this.$t('CANNED_MGMT.EDIT.TITLE')} - ${this.edshortCode}`;\n },\n },\n methods: {\n setPageName({ name }) {\n this.v$.content.$touch();\n this.content = name;\n },\n resetForm() {\n this.shortCode = '';\n this.content = '';\n this.v$.shortCode.$reset();\n this.v$.content.$reset();\n },\n editCannedResponse() {\n // Show loading on button\n this.editCanned.showLoading = true;\n // Make API Calls\n this.$store\n .dispatch('updateCannedResponse', {\n id: this.id,\n short_code: this.shortCode,\n content: this.content,\n })\n .then(() => {\n // Reset Form, Show success message\n this.editCanned.showLoading = false;\n useAlert(this.$t('CANNED_MGMT.EDIT.API.SUCCESS_MESSAGE'));\n this.resetForm();\n setTimeout(() => {\n this.onClose();\n }, 10);\n })\n .catch(error => {\n this.editCanned.showLoading = false;\n const errorMessage =\n error?.message || this.$t('CANNED_MGMT.EDIT.API.ERROR_MESSAGE');\n useAlert(errorMessage);\n });\n },\n },\n};\n</script>\n\n<template>\n <Modal v-model:show=\"show\" :on-close=\"onClose\">\n <div class=\"flex flex-col h-auto overflow-auto\">\n <woot-modal-header :header-title=\"pageTitle\" />\n <form class=\"flex flex-col w-full\" @submit.prevent=\"editCannedResponse()\">\n <div class=\"w-full\">\n <label :class=\"{ error: v$.shortCode.$error }\">\n {{ $t('CANNED_MGMT.EDIT.FORM.SHORT_CODE.LABEL') }}\n <input\n v-model=\"shortCode\"\n type=\"text\"\n :placeholder=\"$t('CANNED_MGMT.EDIT.FORM.SHORT_CODE.PLACEHOLDER')\"\n @input=\"v$.shortCode.$touch\"\n />\n </label>\n </div>\n\n <div class=\"w-full\">\n <label :class=\"{ error: v$.content.$error }\">\n {{ $t('CANNED_MGMT.EDIT.FORM.CONTENT.LABEL') }}\n </label>\n <div class=\"editor-wrap\">\n <WootMessageEditor\n v-model=\"content\"\n class=\"message-editor [&>div]:px-1\"\n :class=\"{ editor_warning: v$.content.$error }\"\n enable-variables\n :enable-canned-responses=\"false\"\n :placeholder=\"$t('CANNED_MGMT.EDIT.FORM.CONTENT.PLACEHOLDER')\"\n @blur=\"v$.content.$touch\"\n />\n </div>\n </div>\n <div class=\"flex flex-row justify-end w-full gap-2 px-0 py-2\">\n <NextButton\n faded\n slate\n type=\"reset\"\n :label=\"$t('CANNED_MGMT.EDIT.CANCEL_BUTTON_TEXT')\"\n @click.prevent=\"onClose\"\n />\n <NextButton\n type=\"submit\"\n :label=\"$t('CANNED_MGMT.EDIT.FORM.SUBMIT')\"\n :disabled=\"\n v$.content.$invalid ||\n v$.shortCode.$invalid ||\n editCanned.showLoading\n \"\n :is-loading=\"editCanned.showLoading\"\n />\n </div>\n </form>\n </div>\n </Modal>\n</template>\n\n<style scoped lang=\"scss\">\n::v-deep {\n .ProseMirror-menubar {\n @apply hidden;\n }\n\n .ProseMirror-woot-style {\n @apply min-h-[12.5rem];\n\n p {\n @apply text-base;\n }\n }\n}\n</style>\n","<script setup>\nimport { useAlert } from 'dashboard/composables';\nimport AddCanned from './AddCanned.vue';\nimport EditCanned from './EditCanned.vue';\nimport BaseSettingsHeader from '../components/BaseSettingsHeader.vue';\nimport { computed, onMounted, ref, defineOptions } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useStoreGetters, useStore } from 'dashboard/composables/store';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\n\ndefineOptions({\n name: 'CannedResponseSettings',\n});\n\nconst getters = useStoreGetters();\nconst store = useStore();\nconst { t } = useI18n();\n\nconst showAddPopup = ref(false);\nconst loading = ref({});\nconst showEditPopup = ref(false);\nconst showDeleteConfirmationPopup = ref(false);\nconst activeResponse = ref({});\nconst cannedResponseAPI = ref({ message: '' });\n\nconst sortOrder = ref('asc');\nconst records = computed(() =>\n getters.getSortedCannedResponses.value(sortOrder.value)\n);\nconst uiFlags = computed(() => getters.getUIFlags.value);\n\nconst deleteConfirmText = computed(\n () =>\n `${t('CANNED_MGMT.DELETE.CONFIRM.YES')} ${activeResponse.value.short_code}`\n);\n\nconst deleteRejectText = computed(\n () =>\n `${t('CANNED_MGMT.DELETE.CONFIRM.NO')} ${activeResponse.value.short_code}`\n);\n\nconst deleteMessage = computed(() => {\n return ` ${activeResponse.value.short_code} ? `;\n});\n\nconst toggleSort = () => {\n sortOrder.value = sortOrder.value === 'asc' ? 'desc' : 'asc';\n};\n\nconst fetchCannedResponses = async () => {\n try {\n await store.dispatch('getCannedResponse');\n } catch (error) {\n // Ignore Error\n }\n};\n\nonMounted(() => {\n fetchCannedResponses();\n});\n\nconst showAlertMessage = message => {\n loading[activeResponse.value.id] = false;\n activeResponse.value = {};\n cannedResponseAPI.value.message = message;\n useAlert(message);\n};\n\nconst openAddPopup = () => {\n showAddPopup.value = true;\n};\nconst hideAddPopup = () => {\n showAddPopup.value = false;\n};\n\nconst openEditPopup = response => {\n showEditPopup.value = true;\n activeResponse.value = response;\n};\nconst hideEditPopup = () => {\n showEditPopup.value = false;\n};\n\nconst openDeletePopup = response => {\n showDeleteConfirmationPopup.value = true;\n activeResponse.value = response;\n};\n\nconst closeDeletePopup = () => {\n showDeleteConfirmationPopup.value = false;\n};\n\nconst deleteCannedResponse = async id => {\n try {\n await store.dispatch('deleteCannedResponse', id);\n showAlertMessage(t('CANNED_MGMT.DELETE.API.SUCCESS_MESSAGE'));\n } catch (error) {\n const errorMessage =\n error?.message || t('CANNED_MGMT.DELETE.API.ERROR_MESSAGE');\n showAlertMessage(errorMessage);\n }\n};\n\nconst confirmDeletion = () => {\n loading[activeResponse.value.id] = true;\n closeDeletePopup();\n deleteCannedResponse(activeResponse.value.id);\n};\n\nconst tableHeaders = computed(() => {\n return [\n t('CANNED_MGMT.LIST.TABLE_HEADER.SHORT_CODE'),\n t('CANNED_MGMT.LIST.TABLE_HEADER.CONTENT'),\n t('CANNED_MGMT.LIST.TABLE_HEADER.ACTIONS'),\n ];\n});\n</script>\n\n<template>\n <div class=\"flex-1 overflow-auto\">\n <BaseSettingsHeader\n :title=\"$t('CANNED_MGMT.HEADER')\"\n :description=\"$t('CANNED_MGMT.DESCRIPTION')\"\n :link-text=\"$t('CANNED_MGMT.LEARN_MORE')\"\n feature-name=\"canned_responses\"\n >\n <template #actions>\n <Button\n icon=\"i-lucide-circle-plus\"\n :label=\"$t('CANNED_MGMT.HEADER_BTN_TXT')\"\n @click=\"openAddPopup\"\n />\n </template>\n </BaseSettingsHeader>\n\n <div class=\"mt-6 flex-1\">\n <woot-loading-state\n v-if=\"uiFlags.fetchingList\"\n :message=\"$t('CANNED_MGMT.LOADING')\"\n />\n <p\n v-else-if=\"!records.length\"\n class=\"flex flex-col items-center justify-center h-full text-base text-slate-600 dark:text-slate-300 py-8\"\n >\n {{ $t('CANNED_MGMT.LIST.404') }}\n </p>\n <table\n v-else\n class=\"min-w-full overflow-x-auto divide-y divide-slate-75 dark:divide-slate-700\"\n >\n <thead>\n <th\n v-for=\"thHeader in tableHeaders\"\n :key=\"thHeader\"\n class=\"py-4 ltr:pr-4 rtl:pl-4 text-left font-semibold text-n-slate-11 last:text-right\"\n >\n <span v-if=\"thHeader !== tableHeaders[0]\">\n {{ thHeader }}\n </span>\n <button\n v-else\n class=\"flex items-center p-0 cursor-pointer\"\n @click=\"toggleSort\"\n >\n <span class=\"mb-0\">\n {{ thHeader }}\n </span>\n <fluent-icon\n class=\"ml-2 size-4\"\n :icon=\"sortOrder === 'desc' ? 'chevron-up' : 'chevron-down'\"\n />\n </button>\n </th>\n </thead>\n <tbody class=\"divide-y divide-n-weak text-n-slate-11\">\n <tr\n v-for=\"(cannedItem, index) in records\"\n :key=\"cannedItem.short_code\"\n >\n <td\n class=\"py-4 ltr:pr-4 rtl:pl-4 truncate max-w-xs font-medium\"\n :title=\"cannedItem.short_code\"\n >\n {{ cannedItem.short_code }}\n </td>\n <td class=\"py-4 ltr:pr-4 rtl:pl-4 md:break-all whitespace-normal\">\n {{ cannedItem.content }}\n </td>\n <td class=\"py-4 flex justify-end gap-1\">\n <Button\n v-tooltip.top=\"$t('CANNED_MGMT.EDIT.BUTTON_TEXT')\"\n icon=\"i-lucide-pen\"\n slate\n xs\n faded\n @click=\"openEditPopup(cannedItem)\"\n />\n <Button\n v-tooltip.top=\"$t('CANNED_MGMT.DELETE.BUTTON_TEXT')\"\n icon=\"i-lucide-trash-2\"\n xs\n ruby\n faded\n :is-loading=\"loading[cannedItem.id]\"\n @click=\"openDeletePopup(cannedItem, index)\"\n />\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <woot-modal v-model:show=\"showAddPopup\" :on-close=\"hideAddPopup\">\n <AddCanned :on-close=\"hideAddPopup\" />\n </woot-modal>\n\n <woot-modal v-model:show=\"showEditPopup\" :on-close=\"hideEditPopup\">\n <EditCanned\n v-if=\"showEditPopup\"\n :id=\"activeResponse.id\"\n :edshort-code=\"activeResponse.short_code\"\n :edcontent=\"activeResponse.content\"\n :on-close=\"hideEditPopup\"\n />\n </woot-modal>\n\n <woot-delete-modal\n v-model:show=\"showDeleteConfirmationPopup\"\n :on-close=\"closeDeletePopup\"\n :on-confirm=\"confirmDeletion\"\n :title=\"$t('CANNED_MGMT.DELETE.CONFIRM.TITLE')\"\n :message=\"$t('CANNED_MGMT.DELETE.CONFIRM.MESSAGE')\"\n :message-value=\"deleteMessage\"\n :confirm-text=\"deleteConfirmText\"\n :reject-text=\"deleteRejectText\"\n />\n </div>\n</template>\n","import { FEATURE_FLAGS } from '../../../../featureFlags';\nimport { frontendURL } from '../../../../helper/URLHelper';\nimport {\n ROLES,\n CONVERSATION_PERMISSIONS,\n} from 'dashboard/constants/permissions.js';\nimport SettingsWrapper from '../SettingsWrapper.vue';\nimport CannedHome from './Index.vue';\n\nexport default {\n routes: [\n {\n path: frontendURL('accounts/:accountId/settings/canned-response'),\n component: SettingsWrapper,\n children: [\n {\n path: '',\n redirect: to => {\n return { name: 'canned_list', params: to.params };\n },\n },\n {\n path: 'list',\n name: 'canned_list',\n meta: {\n featureFlag: FEATURE_FLAGS.CANNED_RESPONSES,\n permissions: [...ROLES, ...CONVERSATION_PERMISSIONS],\n },\n component: CannedHome,\n },\n ],\n },\n ],\n};\n","/* eslint no-console: 0 */\n/* global axios */\n/* eslint no-undef: \"error\" */\n/* eslint no-unused-expressions: [\"error\", { \"allowShortCircuit\": true }] */\nimport endPoints from './endPoints';\n\nexport default {\n fetchFacebookPages(token, accountId) {\n const urlData = endPoints('fetchFacebookPages');\n urlData.params.omniauth_token = token;\n return axios.post(urlData.url(accountId), urlData.params);\n },\n};\n","<script>\nexport default {\n props: {\n headerTitle: { type: String, default: '' },\n headerContent: { type: String, default: '' },\n },\n};\n</script>\n\n<template>\n <div class=\"flex flex-col w-full items-start mb-4\">\n <h2\n class=\"text-xl font-medium mb-1 text-slate-800 dark:text-slate-100 break-words\"\n >\n {{ headerTitle }}\n </h2>\n <p\n v-dompurify-html=\"headerContent\"\n class=\"text-sm w-full text-slate-600 dark:text-slate-300\"\n />\n </div>\n</template>\n","const SCRIPT_TYPE = 'text/javascript';\nconst DATA_LOADED_ATTR = 'data-loaded';\nconst SCRIPT_PROPERTIES = [\n 'defer',\n 'crossOrigin',\n 'noModule',\n 'referrerPolicy',\n 'id',\n];\n\n/**\n * Custom error class for script loading failures.\n * @extends Error\n */\nclass ScriptLoaderError extends Error {\n /**\n * Creates a new ScriptLoaderError.\n * @param {string} src - The source URL of the script that failed to load.\n * @param {string} message - The error message.\n */\n constructor(src, message = 'Failed to load script') {\n super(message);\n this.name = 'ScriptLoaderError';\n this.src = src;\n }\n\n /**\n * Gets detailed error information.\n * @returns {string} A string containing the error details.\n */\n getErrorDetails() {\n return `Failed to load script from source: ${this.src}`;\n }\n}\n\n/**\n * Creates a new script element with the specified attributes.\n * @param {string} src - The source URL of the script.\n * @param {Object} options - Options for configuring the script element.\n * @param {string} [options.type='text/javascript'] - The type of the script.\n * @param {boolean} [options.async=true] - Whether the script should load asynchronously.\n * @param {boolean} [options.defer] - Whether the script execution should be deferred.\n * @param {string} [options.crossOrigin] - The CORS setting for the script.\n * @param {boolean} [options.noModule] - Whether the script should not be treated as a JavaScript module.\n * @param {string} [options.referrerPolicy] - The referrer policy for the script.\n * @param {string} [options.id] - The id attribute for the script element.\n * @param {Object} [options.attrs] - Additional attributes to set on the script element.\n * @returns {HTMLScriptElement} The created script element.\n */\nconst createScriptElement = (src, options) => {\n const el = document.createElement('script');\n el.type = options.type || SCRIPT_TYPE;\n el.async = options.async !== false;\n el.src = src;\n\n SCRIPT_PROPERTIES.forEach(property => {\n if (property in options) {\n el[property] = options[property];\n }\n });\n\n Object.entries(options.attrs || {}).forEach(([name, value]) =>\n el.setAttribute(name, value)\n );\n\n return el;\n};\n\n/**\n * Finds an existing script element with the specified source URL.\n * @param {string} src - The source URL to search for.\n * @returns {HTMLScriptElement|null} The found script element, or null if not found.\n */\nconst findExistingScript = src => {\n return document.querySelector(`script[src=\"${src}\"]`);\n};\n\n/**\n * Loads a script asynchronously and returns a promise.\n * @param {string} src - The source URL of the script to load.\n * @param {Object} options - Options for configuring the script element.\n * @param {string} [options.type='text/javascript'] - The type of the script.\n * @param {boolean} [options.async=true] - Whether the script should load asynchronously.\n * @param {boolean} [options.defer] - Whether the script execution should be deferred.\n * @param {string} [options.crossOrigin] - The CORS setting for the script.\n * @param {boolean} [options.noModule] - Whether the script should not be treated as a JavaScript module.\n * @param {string} [options.referrerPolicy] - The referrer policy for the script.\n * @param {string} [options.id] - The id attribute for the script element.\n * @param {Object} [options.attrs] - Additional attributes to set on the script element.\n * @returns {Promise<HTMLScriptElement|boolean>} A promise that resolves with the loaded script element,\n * or false if the script couldn't be loaded.\n * @throws {ScriptLoaderError} If the script fails to load.\n */\nexport async function loadScript(src, options) {\n if (typeof window === 'undefined' || !window.document) {\n return Promise.resolve(false);\n }\n\n return new Promise((resolve, reject) => {\n if (typeof src !== 'string' || src.trim() === '') {\n reject(new Error('Invalid source URL provided'));\n return;\n }\n\n let el = findExistingScript(src);\n\n if (!el) {\n el = createScriptElement(src, options);\n document.head.appendChild(el);\n } else if (el.hasAttribute(DATA_LOADED_ATTR)) {\n resolve(el);\n return;\n }\n\n const handleError = () => reject(new ScriptLoaderError(src));\n\n el.addEventListener('error', handleError);\n el.addEventListener('abort', handleError);\n el.addEventListener('load', () => {\n el.setAttribute(DATA_LOADED_ATTR, 'true');\n resolve(el);\n });\n });\n}\n","export default \"__VITE_ASSET__Dj0Kv9Fz__\"","<script>\n/* eslint-env browser */\n/* global FB */\nimport { useVuelidate } from '@vuelidate/core';\nimport { useAlert } from 'dashboard/composables';\nimport { useAccount } from 'dashboard/composables/useAccount';\nimport { required } from '@vuelidate/validators';\nimport LoadingState from 'dashboard/components/widgets/LoadingState.vue';\nimport { mapGetters } from 'vuex';\nimport ChannelApi from '../../../../../api/channels';\nimport PageHeader from '../../SettingsSubPageHeader.vue';\nimport router from '../../../../index';\nimport globalConfigMixin from 'shared/mixins/globalConfigMixin';\n\nimport { loadScript } from 'dashboard/helper/DOMHelpers';\nimport * as Sentry from '@sentry/vue';\n\nexport default {\n components: {\n LoadingState,\n PageHeader,\n },\n mixins: [globalConfigMixin],\n setup() {\n const { accountId } = useAccount();\n return {\n accountId,\n v$: useVuelidate(),\n };\n },\n data() {\n return {\n isCreating: false,\n hasError: false,\n omniauth_token: '',\n user_access_token: '',\n channel: 'facebook',\n selectedPage: { name: null, id: null },\n pageName: '',\n pageList: [],\n emptyStateMessage: this.$t('INBOX_MGMT.DETAILS.LOADING_FB'),\n errorStateMessage: '',\n errorStateDescription: '',\n hasLoginStarted: false,\n };\n },\n\n validations: {\n pageName: {\n required,\n },\n\n selectedPage: {\n isEmpty() {\n return this.selectedPage !== null && !!this.selectedPage.name;\n },\n },\n },\n\n computed: {\n showLoader() {\n return !this.user_access_token || this.isCreating;\n },\n getSelectablePages() {\n return this.pageList.filter(item => !item.exists);\n },\n ...mapGetters({\n globalConfig: 'globalConfig/get',\n }),\n },\n\n mounted() {\n window.fbAsyncInit = this.runFBInit;\n },\n\n methods: {\n async startLogin() {\n this.hasLoginStarted = true;\n try {\n // this will load the SDK in a promise, and resolve it when the sdk is loaded\n // in case the SDK is already present, it will resolve immediately\n await this.loadFBsdk();\n this.runFBInit(); // run init anyway, `tryFBlogin` won't wait for `fbAsyncInit` otherwise.\n this.tryFBlogin(); // make an attempt to login\n } catch (error) {\n if (error.name === 'ScriptLoaderError') {\n // if the error was related to script loading, we show a toast\n useAlert(this.$t('INBOX_MGMT.DETAILS.ERROR_FB_LOADING'));\n } else {\n // if the error was anything else, we capture it and show a toast\n Sentry.captureException(error);\n useAlert(this.$t('INBOX_MGMT.DETAILS.ERROR_FB_AUTH'));\n }\n }\n },\n\n setPageName({ name }) {\n this.v$.selectedPage.$touch();\n this.pageName = name;\n },\n\n initChannelAuth(channel) {\n if (channel === 'facebook') {\n this.loadFBsdk();\n }\n },\n\n runFBInit() {\n FB.init({\n appId: window.chatwootConfig.fbAppId,\n xfbml: true,\n version: window.chatwootConfig.fbApiVersion,\n status: true,\n });\n window.fbSDKLoaded = true;\n FB.AppEvents.logPageView();\n },\n\n async loadFBsdk() {\n return loadScript('https://connect.facebook.net/en_US/sdk.js', {\n id: 'facebook-jssdk',\n });\n },\n\n tryFBlogin() {\n FB.login(\n response => {\n this.hasError = false;\n if (response.status === 'connected') {\n this.fetchPages(response.authResponse.accessToken);\n } else if (response.status === 'not_authorized') {\n // eslint-disable-next-line no-console\n console.error('FACEBOOK AUTH ERROR', response);\n this.hasError = true;\n // The person is logged into Facebook, but not your app.\n this.errorStateMessage = this.$t(\n 'INBOX_MGMT.DETAILS.ERROR_FB_UNAUTHORIZED'\n );\n this.errorStateDescription = this.$t(\n 'INBOX_MGMT.DETAILS.ERROR_FB_UNAUTHORIZED_HELP'\n );\n } else {\n // eslint-disable-next-line no-console\n console.error('FACEBOOK AUTH ERROR', response);\n this.hasError = true;\n // The person is not logged into Facebook, so we're not sure if\n // they are logged into this app or not.\n this.errorStateMessage = this.$t(\n 'INBOX_MGMT.DETAILS.ERROR_FB_AUTH'\n );\n this.errorStateDescription = '';\n }\n },\n {\n scope:\n 'pages_manage_metadata,business_management,pages_messaging,instagram_basic,pages_show_list,pages_read_engagement,instagram_manage_messages',\n }\n );\n },\n\n async fetchPages(_token) {\n try {\n const response = await ChannelApi.fetchFacebookPages(\n _token,\n this.accountId\n );\n const {\n data: { data },\n } = response;\n this.pageList = data.page_details;\n this.user_access_token = data.user_access_token;\n } catch (error) {\n // Ignore error\n }\n },\n\n channelParams() {\n return {\n user_access_token: this.user_access_token,\n page_access_token: this.selectedPage.access_token,\n page_id: this.selectedPage.id,\n inbox_name: this.selectedPage.name,\n };\n },\n\n createChannel() {\n this.v$.$touch();\n if (!this.v$.$error) {\n this.emptyStateMessage = this.$t('INBOX_MGMT.DETAILS.CREATING_CHANNEL');\n this.isCreating = true;\n this.$store\n .dispatch('inboxes/createFBChannel', this.channelParams())\n .then(data => {\n router.replace({\n name: 'settings_inboxes_add_agents',\n params: { page: 'new', inbox_id: data.id },\n });\n })\n .catch(() => {\n this.isCreating = false;\n });\n }\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"border border-n-weak bg-n-solid-1 rounded-t-lg border-b-0 h-full w-full p-6 col-span-6 overflow-auto\"\n >\n <div\n v-if=\"!hasLoginStarted\"\n class=\"flex flex-col items-center justify-center h-full text-center\"\n >\n <a href=\"#\" @click=\"startLogin()\">\n <img\n class=\"w-auto h-10\"\n src=\"~dashboard/assets/images/channels/facebook_login.png\"\n alt=\"Facebook-logo\"\n />\n </a>\n <p class=\"py-6\">\n {{\n useInstallationName(\n $t('INBOX_MGMT.ADD.FB.HELP'),\n globalConfig.installationName\n )\n }}\n </p>\n </div>\n <div v-else>\n <div v-if=\"hasError\" class=\"max-w-lg mx-auto text-center\">\n <h5>{{ errorStateMessage }}</h5>\n <p\n v-if=\"errorStateDescription\"\n v-dompurify-html=\"errorStateDescription\"\n />\n </div>\n <LoadingState v-else-if=\"showLoader\" :message=\"emptyStateMessage\" />\n <form\n v-else\n class=\"flex flex-wrap flex-col mx-0\"\n @submit.prevent=\"createChannel()\"\n >\n <div class=\"w-full\">\n <PageHeader\n :header-title=\"$t('INBOX_MGMT.ADD.DETAILS.TITLE')\"\n :header-content=\"\n useInstallationName(\n $t('INBOX_MGMT.ADD.DETAILS.DESC'),\n globalConfig.installationName\n )\n \"\n />\n </div>\n <div class=\"w-3/5\">\n <div class=\"w-full\">\n <div class=\"input-wrap\" :class=\"{ error: v$.selectedPage.$error }\">\n {{ $t('INBOX_MGMT.ADD.FB.CHOOSE_PAGE') }}\n <multiselect\n v-model=\"selectedPage\"\n close-on-select\n allow-empty\n :options=\"getSelectablePages\"\n track-by=\"id\"\n label=\"name\"\n :select-label=\"$t('FORMS.MULTISELECT.ENTER_TO_SELECT')\"\n :deselect-label=\"$t('FORMS.MULTISELECT.ENTER_TO_REMOVE')\"\n :placeholder=\"$t('INBOX_MGMT.ADD.FB.PICK_A_VALUE')\"\n selected-label\n @select=\"setPageName\"\n />\n <span v-if=\"v$.selectedPage.$error\" class=\"message\">\n {{ $t('INBOX_MGMT.ADD.FB.CHOOSE_PLACEHOLDER') }}\n </span>\n </div>\n </div>\n <div class=\"w-full\">\n <label :class=\"{ error: v$.pageName.$error }\">\n {{ $t('INBOX_MGMT.ADD.FB.INBOX_NAME') }}\n <input\n v-model=\"pageName\"\n type=\"text\"\n :placeholder=\"$t('INBOX_MGMT.ADD.FB.PICK_NAME')\"\n @input=\"v$.pageName.$touch\"\n />\n <span v-if=\"v$.pageName.$error\" class=\"message\">\n {{ $t('INBOX_MGMT.ADD.FB.ADD_NAME') }}\n </span>\n </label>\n </div>\n <div class=\"w-full text-right\">\n <input type=\"submit\" value=\"Create Inbox\" class=\"button\" />\n </div>\n </div>\n </form>\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport WootMessageEditor from 'dashboard/components/widgets/WootWriter/Editor.vue';\nimport ResizableTextArea from 'shared/components/ResizableTextArea.vue';\n\nconst props = defineProps({\n modelValue: { type: String, default: '' },\n richtext: { type: Boolean, default: false },\n label: { type: String, default: '' },\n placeholder: { type: String, default: '' },\n});\n\nconst emit = defineEmits(['update:modelValue']);\n\nconst greetingsMessage = computed({\n get: () => props.modelValue,\n set: value => emit('update:modelValue', value),\n});\n</script>\n\n<template>\n <section>\n <div\n v-if=\"richtext\"\n class=\"px-4 py-0 mx-0 mt-0 mb-4 rounded-lg outline outline-1 outline-n-weak hover:outline-n-slate-6 dark:hover:outline-n-slate-6 bg-n-alpha-black2\"\n >\n <WootMessageEditor\n v-model=\"greetingsMessage\"\n is-format-mode\n enable-variables\n :placeholder=\"placeholder\"\n :min-height=\"4\"\n />\n </div>\n <ResizableTextArea\n v-else\n v-model=\"greetingsMessage\"\n :rows=\"4\"\n type=\"text\"\n class=\"greetings--textarea\"\n :label=\"label\"\n :placeholder=\"placeholder\"\n @input=\"handleInput\"\n />\n </section>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\nimport router from '../../../../index';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\nimport PageHeader from '../../SettingsSubPageHeader.vue';\nimport GreetingsEditor from 'shared/components/GreetingsEditor.vue';\n\nexport default {\n components: {\n PageHeader,\n GreetingsEditor,\n NextButton,\n },\n data() {\n return {\n inboxName: '',\n channelWebsiteUrl: '',\n channelWidgetColor: '#009CE0',\n channelWelcomeTitle: '',\n channelWelcomeTagline: '',\n greetingEnabled: false,\n greetingMessage: '',\n };\n },\n computed: {\n ...mapGetters({\n uiFlags: 'inboxes/getUIFlags',\n }),\n textAreaChannels() {\n if (\n this.isATwilioChannel ||\n this.isATwitterInbox ||\n this.isAFacebookInbox\n )\n return true;\n return false;\n },\n },\n methods: {\n async createChannel() {\n try {\n const website = await this.$store.dispatch(\n 'inboxes/createWebsiteChannel',\n {\n name: this.inboxName,\n greeting_enabled: this.greetingEnabled,\n greeting_message: this.greetingMessage,\n channel: {\n type: 'web_widget',\n website_url: this.channelWebsiteUrl,\n widget_color: this.channelWidgetColor,\n welcome_title: this.channelWelcomeTitle,\n welcome_tagline: this.channelWelcomeTagline,\n },\n }\n );\n router.replace({\n name: 'settings_inboxes_add_agents',\n params: {\n page: 'new',\n inbox_id: website.id,\n },\n });\n } catch (error) {\n useAlert(\n error.message ||\n this.$t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.API.ERROR_MESSAGE')\n );\n }\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"border border-n-weak bg-n-solid-1 rounded-t-lg border-b-0 h-full w-full p-6 col-span-6 overflow-auto\"\n >\n <PageHeader\n :header-title=\"$t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.TITLE')\"\n :header-content=\"$t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.DESC')\"\n />\n <woot-loading-state\n v-if=\"uiFlags.isCreating\"\n :message=\"$t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.LOADING_MESSAGE')\"\n />\n <form\n v-if=\"!uiFlags.isCreating\"\n class=\"flex flex-wrap flex-col mx-0\"\n @submit.prevent=\"createChannel\"\n >\n <div class=\"w-full\">\n <label>\n {{ $t('INBOX_MGMT.ADD.WEBSITE_NAME.LABEL') }}\n <input\n v-model=\"inboxName\"\n type=\"text\"\n :placeholder=\"$t('INBOX_MGMT.ADD.WEBSITE_NAME.PLACEHOLDER')\"\n />\n </label>\n </div>\n <div class=\"w-full\">\n <label>\n {{ $t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_DOMAIN.LABEL') }}\n <input\n v-model=\"channelWebsiteUrl\"\n type=\"text\"\n :placeholder=\"\n $t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_DOMAIN.PLACEHOLDER')\n \"\n />\n </label>\n </div>\n\n <div class=\"w-full\">\n <label>\n {{ $t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.WIDGET_COLOR.LABEL') }}\n <woot-color-picker v-model=\"channelWidgetColor\" />\n </label>\n </div>\n\n <div class=\"w-full\">\n <label>\n {{ $t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_WELCOME_TITLE.LABEL') }}\n <input\n v-model=\"channelWelcomeTitle\"\n type=\"text\"\n :placeholder=\"\n $t(\n 'INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_WELCOME_TITLE.PLACEHOLDER'\n )\n \"\n />\n </label>\n </div>\n <div class=\"w-full\">\n <label>\n {{\n $t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_WELCOME_TAGLINE.LABEL')\n }}\n <input\n v-model=\"channelWelcomeTagline\"\n type=\"text\"\n :placeholder=\"\n $t(\n 'INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_WELCOME_TAGLINE.PLACEHOLDER'\n )\n \"\n />\n </label>\n </div>\n <label class=\"w-full\">\n {{ $t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_GREETING_TOGGLE.LABEL') }}\n <select v-model=\"greetingEnabled\">\n <option :value=\"true\">\n {{\n $t(\n 'INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_GREETING_TOGGLE.ENABLED'\n )\n }}\n </option>\n <option :value=\"false\">\n {{\n $t(\n 'INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_GREETING_TOGGLE.DISABLED'\n )\n }}\n </option>\n </select>\n <p class=\"help-text\">\n {{\n $t(\n 'INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_GREETING_TOGGLE.HELP_TEXT'\n )\n }}\n </p>\n </label>\n <GreetingsEditor\n v-if=\"greetingEnabled\"\n v-model=\"greetingMessage\"\n class=\"w-full\"\n :label=\"\n $t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_GREETING_MESSAGE.LABEL')\n \"\n :placeholder=\"\n $t(\n 'INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_GREETING_MESSAGE.PLACEHOLDER'\n )\n \"\n :richtext=\"!textAreaChannels\"\n />\n <div class=\"flex flex-row justify-end w-full gap-2 px-0 py-2 mt-4\">\n <div class=\"w-full\">\n <NextButton\n type=\"submit\"\n :is-loading=\"uiFlags.isCreating\"\n :disabled=\"!channelWebsiteUrl || !inboxName\"\n solid\n blue\n :label=\"$t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.SUBMIT_BUTTON')\"\n />\n </div>\n </div>\n </form>\n </div>\n</template>\n","/* global axios */\nimport ApiClient from '../ApiClient';\n\nclass TwitterClient extends ApiClient {\n constructor() {\n super('twitter', { accountScoped: true });\n }\n\n generateAuthorization() {\n return axios.post(`${this.url}/authorization`);\n }\n}\n\nexport default new TwitterClient();\n","<script>\nimport { useAlert } from 'dashboard/composables';\nimport twitterClient from '../../../../../api/channel/twitterClient';\n\nexport default {\n data() {\n return { isRequestingAuthorization: false };\n },\n methods: {\n async requestAuthorization() {\n try {\n this.isRequestingAuthorization = true;\n const response = await twitterClient.generateAuthorization();\n const {\n data: { url },\n } = response;\n window.location.href = url;\n } catch (error) {\n useAlert(this.$t('INBOX_MGMT.ADD.TWITTER.ERROR_MESSAGE'));\n } finally {\n this.isRequestingAuthorization = false;\n }\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"border border-n-weak bg-n-solid-1 rounded-t-lg border-b-0 h-full w-full p-6 col-span-6 overflow-auto\"\n >\n <div class=\"login-init h-full text-center\">\n <form @submit.prevent=\"requestAuthorization\">\n <woot-submit-button\n icon=\"brand-twitter\"\n button-text=\"Sign in with Twitter\"\n type=\"submit\"\n :loading=\"isRequestingAuthorization\"\n />\n </form>\n <p>{{ $t('INBOX_MGMT.ADD.TWITTER.HELP') }}</p>\n </div>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.login-init {\n @apply pt-[30%] text-center;\n p {\n @apply p-6;\n }\n > a > img {\n @apply w-60;\n }\n}\n</style>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useVuelidate } from '@vuelidate/core';\nimport { useAlert } from 'dashboard/composables';\nimport { required } from '@vuelidate/validators';\nimport router from '../../../../index';\nimport PageHeader from '../../SettingsSubPageHeader.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nconst shouldBeWebhookUrl = (value = '') =>\n value ? value.startsWith('http') : true;\n\nexport default {\n components: {\n PageHeader,\n NextButton,\n },\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n channelName: '',\n webhookUrl: '',\n };\n },\n computed: {\n ...mapGetters({\n uiFlags: 'inboxes/getUIFlags',\n }),\n },\n validations: {\n channelName: { required },\n webhookUrl: { shouldBeWebhookUrl },\n },\n methods: {\n async createChannel() {\n this.v$.$touch();\n if (this.v$.$invalid) {\n return;\n }\n\n try {\n const apiChannel = await this.$store.dispatch('inboxes/createChannel', {\n name: this.channelName,\n channel: {\n type: 'api',\n webhook_url: this.webhookUrl,\n },\n });\n\n router.replace({\n name: 'settings_inboxes_add_agents',\n params: {\n page: 'new',\n inbox_id: apiChannel.id,\n },\n });\n } catch (error) {\n useAlert(this.$t('INBOX_MGMT.ADD.API_CHANNEL.API.ERROR_MESSAGE'));\n }\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"border border-n-weak bg-n-solid-1 rounded-t-lg border-b-0 h-full w-full p-6 col-span-6 overflow-auto\"\n >\n <PageHeader\n :header-title=\"$t('INBOX_MGMT.ADD.API_CHANNEL.TITLE')\"\n :header-content=\"$t('INBOX_MGMT.ADD.API_CHANNEL.DESC')\"\n />\n <form\n class=\"flex flex-wrap flex-col mx-0\"\n @submit.prevent=\"createChannel()\"\n >\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label :class=\"{ error: v$.channelName.$error }\">\n {{ $t('INBOX_MGMT.ADD.API_CHANNEL.CHANNEL_NAME.LABEL') }}\n <input\n v-model=\"channelName\"\n type=\"text\"\n :placeholder=\"\n $t('INBOX_MGMT.ADD.API_CHANNEL.CHANNEL_NAME.PLACEHOLDER')\n \"\n @blur=\"v$.channelName.$touch\"\n />\n <span v-if=\"v$.channelName.$error\" class=\"message\">{{\n $t('INBOX_MGMT.ADD.API_CHANNEL.CHANNEL_NAME.ERROR')\n }}</span>\n </label>\n </div>\n\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label :class=\"{ error: v$.webhookUrl.$error }\">\n {{ $t('INBOX_MGMT.ADD.API_CHANNEL.WEBHOOK_URL.LABEL') }}\n <input\n v-model=\"webhookUrl\"\n type=\"text\"\n :placeholder=\"\n $t('INBOX_MGMT.ADD.API_CHANNEL.WEBHOOK_URL.PLACEHOLDER')\n \"\n @blur=\"v$.webhookUrl.$touch\"\n />\n </label>\n <p class=\"help-text\">\n {{ $t('INBOX_MGMT.ADD.API_CHANNEL.WEBHOOK_URL.SUBTITLE') }}\n </p>\n </div>\n\n <div class=\"w-full mt-4\">\n <NextButton\n :is-loading=\"uiFlags.isCreating\"\n type=\"submit\"\n solid\n blue\n :label=\"$t('INBOX_MGMT.ADD.API_CHANNEL.SUBMIT_BUTTON')\"\n />\n </div>\n </form>\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useVuelidate } from '@vuelidate/core';\nimport { useAlert } from 'dashboard/composables';\nimport { required, email } from '@vuelidate/validators';\nimport router from '../../../../../index';\nimport PageHeader from '../../../SettingsSubPageHeader.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n PageHeader,\n NextButton,\n },\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n channelName: '',\n email: '',\n alertMessage: '',\n };\n },\n computed: {\n ...mapGetters({\n uiFlags: 'inboxes/getUIFlags',\n }),\n },\n validations: {\n channelName: { required },\n email: { required, email },\n },\n methods: {\n async createChannel() {\n this.v$.$touch();\n if (this.v$.$invalid) {\n return;\n }\n\n try {\n const emailChannel = await this.$store.dispatch(\n 'inboxes/createChannel',\n {\n name: this.channelName,\n channel: {\n type: 'email',\n email: this.email,\n },\n }\n );\n\n router.replace({\n name: 'settings_inboxes_add_agents',\n params: {\n page: 'new',\n inbox_id: emailChannel.id,\n },\n });\n } catch (error) {\n const errorMessage = error?.message;\n this.alertMessage =\n errorMessage ||\n this.$t('INBOX_MGMT.ADD.EMAIL_CHANNEL.API.ERROR_MESSAGE');\n useAlert(this.alertMessage);\n }\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"border border-n-weak bg-n-solid-1 rounded-t-lg border-b-0 h-full w-full p-6 col-span-6 overflow-auto\"\n >\n <PageHeader\n :header-title=\"$t('INBOX_MGMT.ADD.EMAIL_CHANNEL.TITLE')\"\n :header-content=\"$t('INBOX_MGMT.ADD.EMAIL_CHANNEL.DESC')\"\n />\n <form\n class=\"flex flex-wrap flex-col mx-0\"\n @submit.prevent=\"createChannel()\"\n >\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label :class=\"{ error: v$.channelName.$error }\">\n {{ $t('INBOX_MGMT.ADD.EMAIL_CHANNEL.CHANNEL_NAME.LABEL') }}\n <input\n v-model=\"channelName\"\n type=\"text\"\n :placeholder=\"\n $t('INBOX_MGMT.ADD.EMAIL_CHANNEL.CHANNEL_NAME.PLACEHOLDER')\n \"\n @blur=\"v$.channelName.$touch\"\n />\n <span v-if=\"v$.channelName.$error\" class=\"message\">{{\n $t('INBOX_MGMT.ADD.EMAIL_CHANNEL.CHANNEL_NAME.ERROR')\n }}</span>\n </label>\n </div>\n\n <div class=\"flex-shrink-0 flex-grow-0 mb-4\">\n <label :class=\"{ error: v$.email.$error }\">\n {{ $t('INBOX_MGMT.ADD.EMAIL_CHANNEL.EMAIL.LABEL') }}\n <input\n v-model=\"email\"\n type=\"text\"\n :placeholder=\"$t('INBOX_MGMT.ADD.EMAIL_CHANNEL.EMAIL.PLACEHOLDER')\"\n @blur=\"v$.email.$touch\"\n />\n <p class=\"help-text\">\n {{ $t('INBOX_MGMT.ADD.EMAIL_CHANNEL.EMAIL.SUBTITLE') }}\n </p>\n </label>\n </div>\n\n <div class=\"w-full mt-4\">\n <NextButton\n :is-loading=\"uiFlags.isCreating\"\n type=\"submit\"\n solid\n blue\n :label=\"$t('INBOX_MGMT.ADD.EMAIL_CHANNEL.SUBMIT_BUTTON')\"\n />\n </div>\n </form>\n </div>\n</template>\n","/* global axios */\nimport ApiClient from '../ApiClient';\n\nclass MicrosoftClient extends ApiClient {\n constructor() {\n super('microsoft', { accountScoped: true });\n }\n\n generateAuthorization(payload) {\n return axios.post(`${this.url}/authorization`, payload);\n }\n}\n\nexport default new MicrosoftClient();\n","/* global axios */\nimport ApiClient from '../ApiClient';\n\nclass MicrosoftClient extends ApiClient {\n constructor() {\n super('google', { accountScoped: true });\n }\n\n generateAuthorization(payload) {\n return axios.post(`${this.url}/authorization`, payload);\n }\n}\n\nexport default new MicrosoftClient();\n","<script setup>\nimport { ref, computed } from 'vue';\n\nimport microsoftClient from 'dashboard/api/channel/microsoftClient';\nimport googleClient from 'dashboard/api/channel/googleClient';\nimport SettingsSubPageHeader from '../../../SettingsSubPageHeader.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nimport { useAlert } from 'dashboard/composables';\n\nconst props = defineProps({\n provider: {\n type: String,\n required: true,\n validate: value => ['microsoft', 'google'].includes(value),\n },\n title: {\n type: String,\n required: true,\n },\n description: {\n type: String,\n required: true,\n },\n submitButtonText: {\n type: String,\n required: true,\n },\n errorMessage: {\n type: String,\n required: true,\n },\n inputPlaceholder: {\n type: String,\n required: true,\n },\n});\n\nconst isRequestingAuthorization = ref(false);\nconst email = ref('');\n\nconst client = computed(() => {\n if (props.provider === 'microsoft') {\n return microsoftClient;\n }\n\n return googleClient;\n});\n\nasync function requestAuthorization() {\n try {\n isRequestingAuthorization.value = true;\n const response = await client.value.generateAuthorization({\n email: email.value,\n });\n const {\n data: { url },\n } = response;\n\n window.location.href = url;\n } catch (error) {\n useAlert(props.errorMessage);\n } finally {\n isRequestingAuthorization.value = false;\n }\n}\n</script>\n\n<template>\n <div\n class=\"border border-n-weak bg-n-solid-1 rounded-t-lg border-b-0 h-full w-full p-6 col-span-6 overflow-auto\"\n >\n <SettingsSubPageHeader\n :header-title=\"title\"\n :header-content=\"description\"\n />\n <form class=\"mt-6\" @submit.prevent=\"requestAuthorization\">\n <woot-input\n v-model=\"email\"\n type=\"email\"\n :placeholder=\"inputPlaceholder\"\n />\n <NextButton\n :is-loading=\"isRequestingAuthorization\"\n type=\"submit\"\n solid\n blue\n :label=\"submitButtonText\"\n />\n </form>\n </div>\n</template>\n","<script>\nexport default {\n props: {\n title: {\n type: String,\n required: true,\n },\n src: {\n type: String,\n required: true,\n },\n },\n};\n</script>\n\n<template>\n <button\n class=\"bg-white dark:bg-slate-900 cursor-pointer flex flex-col justify-end transition-all duration-200 ease-in -m-px py-4 px-0 items-center border border-solid border-slate-25 dark:border-slate-800 hover:border-woot-500 dark:hover:border-woot-500 hover:shadow-md hover:z-50 disabled:opacity-60\"\n >\n <img :src=\"src\" :alt=\"title\" class=\"w-1/2 my-4 mx-auto\" />\n <h3\n class=\"text-slate-800 dark:text-slate-100 text-base text-center capitalize\"\n >\n {{ title }}\n </h3>\n </button>\n</template>\n\n<style scoped lang=\"scss\">\n.inactive {\n img {\n filter: grayscale(100%);\n }\n\n &:hover {\n @apply border-transparent shadow-none cursor-not-allowed;\n }\n}\n</style>\n","<script setup>\nimport { ref, computed } from 'vue';\nimport ForwardToOption from './emailChannels/ForwardToOption.vue';\nimport Microsoft from './emailChannels/Microsoft.vue';\nimport Google from './emailChannels/Google.vue';\nimport ChannelSelector from 'dashboard/components/ChannelSelector.vue';\nimport PageHeader from '../../SettingsSubPageHeader.vue';\n\nimport { useStoreGetters } from 'dashboard/composables/store';\nimport { useI18n } from 'vue-i18n';\n\nconst provider = ref('');\n\nconst getters = useStoreGetters();\nconst { t } = useI18n();\n\nconst globalConfig = getters['globalConfig/get'];\nconst isAChatwootInstance = getters['globalConfig/isAChatwootInstance'];\n\nconst emailProviderList = computed(() => {\n return [\n {\n title: t('INBOX_MGMT.EMAIL_PROVIDERS.MICROSOFT'),\n isEnabled: !!globalConfig.value.azureAppId,\n key: 'microsoft',\n src: '/assets/images/dashboard/channels/microsoft.png',\n },\n {\n title: t('INBOX_MGMT.EMAIL_PROVIDERS.GOOGLE'),\n isEnabled: !!window.chatwootConfig.googleOAuthClientId,\n key: 'google',\n src: '/assets/images/dashboard/channels/google.png',\n },\n {\n title: t('INBOX_MGMT.EMAIL_PROVIDERS.OTHER_PROVIDERS'),\n isEnabled: true,\n key: 'other_provider',\n src: '/assets/images/dashboard/channels/email.png',\n },\n ].filter(providerConfig => {\n if (isAChatwootInstance.value) {\n return true;\n }\n return providerConfig.isEnabled;\n });\n});\n\nfunction onClick(emailProvider) {\n if (emailProvider.isEnabled) {\n provider.value = emailProvider.key;\n }\n}\n</script>\n\n<template>\n <div\n v-if=\"!provider\"\n class=\"border border-n-weak bg-n-solid-1 rounded-t-lg border-b-0 h-full w-full p-6 col-span-6 overflow-auto\"\n >\n <PageHeader\n class=\"max-w-4xl\"\n :header-title=\"$t('INBOX_MGMT.ADD.EMAIL_PROVIDER.TITLE')\"\n :header-content=\"$t('INBOX_MGMT.ADD.EMAIL_PROVIDER.DESCRIPTION')\"\n />\n <div class=\"grid max-w-3xl grid-cols-4 mx-0 mt-6\">\n <ChannelSelector\n v-for=\"emailProvider in emailProviderList\"\n :key=\"emailProvider.key\"\n :class=\"{ inactive: !emailProvider.isEnabled }\"\n :title=\"emailProvider.title\"\n :src=\"emailProvider.src\"\n @click=\"() => onClick(emailProvider)\"\n />\n </div>\n </div>\n <Microsoft v-else-if=\"provider === 'microsoft'\" />\n <Google v-else-if=\"provider === 'google'\" />\n <ForwardToOption v-else-if=\"provider === 'other_provider'\" />\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useVuelidate } from '@vuelidate/core';\nimport { useAlert } from 'dashboard/composables';\nimport { required } from '@vuelidate/validators';\nimport router from '../../../../index';\n\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nconst shouldStartWithPlusSign = (value = '') => value.startsWith('+');\n\nexport default {\n components: {\n NextButton,\n },\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n accountId: '',\n apiKey: '',\n apiSecret: '',\n applicationId: '',\n inboxName: '',\n phoneNumber: '',\n };\n },\n computed: {\n ...mapGetters({\n uiFlags: 'inboxes/getUIFlags',\n }),\n },\n validations: {\n inboxName: { required },\n phoneNumber: { required, shouldStartWithPlusSign },\n apiKey: { required },\n apiSecret: { required },\n applicationId: { required },\n accountId: { required },\n },\n methods: {\n async createChannel() {\n this.v$.$touch();\n if (this.v$.$invalid) {\n return;\n }\n\n try {\n const smsChannel = await this.$store.dispatch('inboxes/createChannel', {\n name: this.inboxName,\n channel: {\n type: 'sms',\n phone_number: this.phoneNumber,\n provider_config: {\n api_key: this.apiKey,\n api_secret: this.apiSecret,\n application_id: this.applicationId,\n account_id: this.accountId,\n },\n },\n });\n\n router.replace({\n name: 'settings_inboxes_add_agents',\n params: {\n page: 'new',\n inbox_id: smsChannel.id,\n },\n });\n } catch (error) {\n useAlert(this.$t('INBOX_MGMT.ADD.SMS.API.ERROR_MESSAGE'));\n }\n },\n },\n};\n</script>\n\n<template>\n <form class=\"flex flex-wrap flex-col mx-0\" @submit.prevent=\"createChannel()\">\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label :class=\"{ error: v$.inboxName.$error }\">\n {{ $t('INBOX_MGMT.ADD.SMS.BANDWIDTH.INBOX_NAME.LABEL') }}\n <input\n v-model=\"inboxName\"\n type=\"text\"\n :placeholder=\"\n $t('INBOX_MGMT.ADD.SMS.BANDWIDTH.INBOX_NAME.PLACEHOLDER')\n \"\n @blur=\"v$.inboxName.$touch\"\n />\n <span v-if=\"v$.inboxName.$error\" class=\"message\">{{\n $t('INBOX_MGMT.ADD.SMS.BANDWIDTH.INBOX_NAME.ERROR')\n }}</span>\n </label>\n </div>\n\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label :class=\"{ error: v$.phoneNumber.$error }\">\n {{ $t('INBOX_MGMT.ADD.SMS.BANDWIDTH.PHONE_NUMBER.LABEL') }}\n <input\n v-model=\"phoneNumber\"\n type=\"text\"\n :placeholder=\"\n $t('INBOX_MGMT.ADD.SMS.BANDWIDTH.PHONE_NUMBER.PLACEHOLDER')\n \"\n @blur=\"v$.phoneNumber.$touch\"\n />\n <span v-if=\"v$.phoneNumber.$error\" class=\"message\">{{\n $t('INBOX_MGMT.ADD.SMS.BANDWIDTH.PHONE_NUMBER.ERROR')\n }}</span>\n </label>\n </div>\n\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label :class=\"{ error: v$.accountId.$error }\">\n {{ $t('INBOX_MGMT.ADD.SMS.BANDWIDTH.ACCOUNT_ID.LABEL') }}\n <input\n v-model=\"accountId\"\n type=\"text\"\n :placeholder=\"\n $t('INBOX_MGMT.ADD.SMS.BANDWIDTH.ACCOUNT_ID.PLACEHOLDER')\n \"\n @blur=\"v$.accountId.$touch\"\n />\n <span v-if=\"v$.accountId.$error\" class=\"message\">{{\n $t('INBOX_MGMT.ADD.SMS.BANDWIDTH.ACCOUNT_ID.ERROR')\n }}</span>\n </label>\n </div>\n\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label :class=\"{ error: v$.applicationId.$error }\">\n {{ $t('INBOX_MGMT.ADD.SMS.BANDWIDTH.APPLICATION_ID.LABEL') }}\n <input\n v-model=\"applicationId\"\n type=\"text\"\n :placeholder=\"\n $t('INBOX_MGMT.ADD.SMS.BANDWIDTH.APPLICATION_ID.PLACEHOLDER')\n \"\n @blur=\"v$.applicationId.$touch\"\n />\n <span v-if=\"v$.applicationId.$error\" class=\"message\">{{\n $t('INBOX_MGMT.ADD.SMS.BANDWIDTH.APPLICATION_ID.ERROR')\n }}</span>\n </label>\n </div>\n\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label :class=\"{ error: v$.apiKey.$error }\">\n {{ $t('INBOX_MGMT.ADD.SMS.BANDWIDTH.API_KEY.LABEL') }}\n <input\n v-model=\"apiKey\"\n type=\"text\"\n :placeholder=\"$t('INBOX_MGMT.ADD.SMS.BANDWIDTH.API_KEY.PLACEHOLDER')\"\n @blur=\"v$.apiKey.$touch\"\n />\n <span v-if=\"v$.apiKey.$error\" class=\"message\">{{\n $t('INBOX_MGMT.ADD.SMS.BANDWIDTH.API_KEY.ERROR')\n }}</span>\n </label>\n </div>\n\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label :class=\"{ error: v$.apiSecret.$error }\">\n {{ $t('INBOX_MGMT.ADD.SMS.BANDWIDTH.API_SECRET.LABEL') }}\n <input\n v-model=\"apiSecret\"\n type=\"text\"\n :placeholder=\"\n $t('INBOX_MGMT.ADD.SMS.BANDWIDTH.API_SECRET.PLACEHOLDER')\n \"\n @blur=\"v$.apiSecret.$touch\"\n />\n <span v-if=\"v$.apiSecret.$error\" class=\"message\">{{\n $t('INBOX_MGMT.ADD.SMS.BANDWIDTH.API_SECRET.ERROR')\n }}</span>\n </label>\n </div>\n\n <div class=\"w-full mt-4\">\n <NextButton\n :is-loading=\"uiFlags.isCreating\"\n type=\"submit\"\n solid\n blue\n :label=\"$t('INBOX_MGMT.ADD.SMS.BANDWIDTH.SUBMIT_BUTTON')\"\n />\n </div>\n </form>\n</template>\n","<!-- Deprecated in favour of separate files for SMS and Whatsapp and also to implement new providers for each platform in the future-->\n<script>\nimport { mapGetters } from 'vuex';\nimport { useVuelidate } from '@vuelidate/core';\nimport { useAlert } from 'dashboard/composables';\nimport { required } from '@vuelidate/validators';\nimport router from '../../../../index';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\nimport { isPhoneE164OrEmpty } from 'shared/helpers/Validators';\nimport { parseAPIErrorResponse } from 'dashboard/store/utils/api';\n\nexport default {\n components: {\n NextButton,\n },\n props: {\n type: {\n type: String,\n required: true,\n },\n },\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n accountSID: '',\n apiKeySID: '',\n authToken: '',\n medium: this.type,\n channelName: '',\n messagingServiceSID: '',\n useMessagingService: false,\n useAPIKey: false,\n phoneNumber: '',\n };\n },\n computed: {\n ...mapGetters({\n uiFlags: 'inboxes/getUIFlags',\n }),\n authTokeni18nKey() {\n return this.useAPIKey ? 'API_KEY_SECRET' : 'AUTH_TOKEN';\n },\n },\n validations() {\n let validations = {\n channelName: { required },\n\n authToken: { required },\n accountSID: { required },\n medium: { required },\n };\n if (this.phoneNumber) {\n validations = {\n ...validations,\n phoneNumber: { required, isPhoneE164OrEmpty },\n messagingServiceSID: {},\n };\n } else {\n validations = {\n ...validations,\n messagingServiceSID: { required },\n phoneNumber: {},\n };\n }\n\n if (this.useAPIKey) {\n validations = {\n ...validations,\n apiKeySID: { required },\n };\n }\n return validations;\n },\n methods: {\n async createChannel() {\n this.v$.$touch();\n if (this.v$.$invalid) {\n return;\n }\n\n try {\n const twilioChannel = await this.$store.dispatch(\n 'inboxes/createTwilioChannel',\n {\n twilio_channel: {\n name: this.channelName,\n medium: this.medium,\n account_sid: this.accountSID,\n api_key_sid: this.apiKeySID,\n auth_token: this.authToken,\n messaging_service_sid: this.messagingServiceSID,\n phone_number: this.messagingServiceSID\n ? null\n : `+${this.phoneNumber.replace(/\\D/g, '')}`,\n },\n }\n );\n\n router.replace({\n name: 'settings_inboxes_add_agents',\n params: {\n page: 'new',\n inbox_id: twilioChannel.id,\n },\n });\n } catch (error) {\n const errorMessage =\n parseAPIErrorResponse(error) ||\n this.$t('INBOX_MGMT.ADD.TWILIO.API.ERROR_MESSAGE');\n useAlert(errorMessage);\n }\n },\n },\n};\n</script>\n\n<template>\n <form class=\"flex flex-wrap flex-col mx-0\" @submit.prevent=\"createChannel()\">\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label :class=\"{ error: v$.channelName.$error }\">\n {{ $t('INBOX_MGMT.ADD.TWILIO.CHANNEL_NAME.LABEL') }}\n <input\n v-model=\"channelName\"\n type=\"text\"\n :placeholder=\"$t('INBOX_MGMT.ADD.TWILIO.CHANNEL_NAME.PLACEHOLDER')\"\n @blur=\"v$.channelName.$touch\"\n />\n <span v-if=\"v$.channelName.$error\" class=\"message\">{{\n $t('INBOX_MGMT.ADD.TWILIO.CHANNEL_NAME.ERROR')\n }}</span>\n </label>\n </div>\n\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label\n v-if=\"useMessagingService\"\n :class=\"{ error: v$.messagingServiceSID.$error }\"\n >\n {{ $t('INBOX_MGMT.ADD.TWILIO.MESSAGING_SERVICE_SID.LABEL') }}\n <input\n v-model=\"messagingServiceSID\"\n type=\"text\"\n :placeholder=\"\n $t('INBOX_MGMT.ADD.TWILIO.MESSAGING_SERVICE_SID.PLACEHOLDER')\n \"\n @blur=\"v$.messagingServiceSID.$touch\"\n />\n <span v-if=\"v$.messagingServiceSID.$error\" class=\"message\">{{\n $t('INBOX_MGMT.ADD.TWILIO.MESSAGING_SERVICE_SID.ERROR')\n }}</span>\n </label>\n </div>\n\n <div v-if=\"!useMessagingService\" class=\"flex-shrink-0 flex-grow-0\">\n <label :class=\"{ error: v$.phoneNumber.$error }\">\n {{ $t('INBOX_MGMT.ADD.TWILIO.PHONE_NUMBER.LABEL') }}\n <input\n v-model=\"phoneNumber\"\n type=\"text\"\n :placeholder=\"$t('INBOX_MGMT.ADD.TWILIO.PHONE_NUMBER.PLACEHOLDER')\"\n @blur=\"v$.phoneNumber.$touch\"\n />\n <span v-if=\"v$.phoneNumber.$error\" class=\"message\">{{\n $t('INBOX_MGMT.ADD.TWILIO.PHONE_NUMBER.ERROR')\n }}</span>\n </label>\n </div>\n\n <div class=\"max-w-[65%] w-full messagingServiceHelptext\">\n <label for=\"useMessagingService\">\n <input\n id=\"useMessagingService\"\n v-model=\"useMessagingService\"\n type=\"checkbox\"\n class=\"checkbox\"\n />\n {{\n $t(\n 'INBOX_MGMT.ADD.TWILIO.MESSAGING_SERVICE_SID.USE_MESSAGING_SERVICE'\n )\n }}\n </label>\n </div>\n\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label :class=\"{ error: v$.accountSID.$error }\">\n {{ $t('INBOX_MGMT.ADD.TWILIO.ACCOUNT_SID.LABEL') }}\n <input\n v-model=\"accountSID\"\n type=\"text\"\n :placeholder=\"$t('INBOX_MGMT.ADD.TWILIO.ACCOUNT_SID.PLACEHOLDER')\"\n @blur=\"v$.accountSID.$touch\"\n />\n <span v-if=\"v$.accountSID.$error\" class=\"message\">{{\n $t('INBOX_MGMT.ADD.TWILIO.ACCOUNT_SID.ERROR')\n }}</span>\n </label>\n </div>\n <div class=\"max-w-[65%] w-full messagingServiceHelptext\">\n <label for=\"useAPIKey\">\n <input\n id=\"useAPIKey\"\n v-model=\"useAPIKey\"\n type=\"checkbox\"\n class=\"checkbox\"\n />\n {{ $t('INBOX_MGMT.ADD.TWILIO.API_KEY.USE_API_KEY') }}\n </label>\n </div>\n <div v-if=\"useAPIKey\" class=\"flex-shrink-0 flex-grow-0\">\n <label :class=\"{ error: v$.apiKeySID.$error }\">\n {{ $t('INBOX_MGMT.ADD.TWILIO.API_KEY.LABEL') }}\n <input\n v-model=\"apiKeySID\"\n type=\"text\"\n :placeholder=\"$t('INBOX_MGMT.ADD.TWILIO.API_KEY.PLACEHOLDER')\"\n @blur=\"v$.apiKeySID.$touch\"\n />\n <span v-if=\"v$.apiKeySID.$error\" class=\"message\">{{\n $t('INBOX_MGMT.ADD.TWILIO.API_KEY.ERROR')\n }}</span>\n </label>\n </div>\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label :class=\"{ error: v$.authToken.$error }\">\n {{ $t(`INBOX_MGMT.ADD.TWILIO.${authTokeni18nKey}.LABEL`) }}\n <input\n v-model=\"authToken\"\n type=\"text\"\n :placeholder=\"\n $t(`INBOX_MGMT.ADD.TWILIO.${authTokeni18nKey}.PLACEHOLDER`)\n \"\n @blur=\"v$.authToken.$touch\"\n />\n <span v-if=\"v$.authToken.$error\" class=\"message\">\n {{ $t(`INBOX_MGMT.ADD.TWILIO.${authTokeni18nKey}.ERROR`) }}\n </span>\n </label>\n </div>\n\n <div class=\"w-full mt-4\">\n <NextButton\n :is-loading=\"uiFlags.isCreating\"\n type=\"submit\"\n solid\n blue\n :label=\"$t('INBOX_MGMT.ADD.TWILIO.SUBMIT_BUTTON')\"\n />\n </div>\n </form>\n</template>\n\n<style lang=\"scss\" scoped>\n.messagingServiceHelptext {\n margin-top: -10px;\n margin-bottom: 15px;\n\n .checkbox {\n margin: 0px 4px;\n }\n}\n</style>\n","<script>\nimport PageHeader from '../../SettingsSubPageHeader.vue';\nimport BandwidthSms from './BandwidthSms.vue';\nimport Twilio from './Twilio.vue';\n\nexport default {\n components: {\n PageHeader,\n Twilio,\n BandwidthSms,\n },\n data() {\n return {\n provider: 'twilio',\n };\n },\n};\n</script>\n\n<template>\n <div\n class=\"border border-n-weak bg-n-solid-1 rounded-t-lg border-b-0 h-full w-full p-6 col-span-6 overflow-auto\"\n >\n <PageHeader\n :header-title=\"$t('INBOX_MGMT.ADD.SMS.TITLE')\"\n :header-content=\"$t('INBOX_MGMT.ADD.SMS.DESC')\"\n />\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label>\n {{ $t('INBOX_MGMT.ADD.SMS.PROVIDERS.LABEL') }}\n <select v-model=\"provider\">\n <option value=\"twilio\">\n {{ $t('INBOX_MGMT.ADD.SMS.PROVIDERS.TWILIO') }}\n </option>\n <option value=\"360dialog\">\n {{ $t('INBOX_MGMT.ADD.SMS.PROVIDERS.BANDWIDTH') }}\n </option>\n </select>\n </label>\n </div>\n <Twilio v-if=\"provider === 'twilio'\" type=\"sms\" />\n <BandwidthSms v-else />\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useVuelidate } from '@vuelidate/core';\nimport { useAlert } from 'dashboard/composables';\nimport { required } from '@vuelidate/validators';\nimport router from '../../../../index';\n\nimport { isPhoneE164OrEmpty } from 'shared/helpers/Validators';\n\nexport default {\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n inboxName: '',\n phoneNumber: '',\n apiKey: '',\n };\n },\n computed: {\n ...mapGetters({ uiFlags: 'inboxes/getUIFlags' }),\n },\n validations: {\n inboxName: { required },\n phoneNumber: { required, isPhoneE164OrEmpty },\n apiKey: { required },\n },\n methods: {\n async createChannel() {\n this.v$.$touch();\n if (this.v$.$invalid) {\n return;\n }\n\n try {\n const whatsappChannel = await this.$store.dispatch(\n 'inboxes/createChannel',\n {\n name: this.inboxName,\n channel: {\n type: 'whatsapp',\n phone_number: this.phoneNumber,\n provider_config: {\n api_key: this.apiKey,\n },\n },\n }\n );\n\n router.replace({\n name: 'settings_inboxes_add_agents',\n params: {\n page: 'new',\n inbox_id: whatsappChannel.id,\n },\n });\n } catch (error) {\n useAlert(\n error.message || this.$t('INBOX_MGMT.ADD.WHATSAPP.API.ERROR_MESSAGE')\n );\n }\n },\n },\n};\n</script>\n\n<template>\n <form class=\"flex flex-wrap flex-col mx-0\" @submit.prevent=\"createChannel()\">\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label :class=\"{ error: v$.inboxName.$error }\">\n {{ $t('INBOX_MGMT.ADD.WHATSAPP.INBOX_NAME.LABEL') }}\n <input\n v-model=\"inboxName\"\n type=\"text\"\n :placeholder=\"$t('INBOX_MGMT.ADD.WHATSAPP.INBOX_NAME.PLACEHOLDER')\"\n @blur=\"v$.inboxName.$touch\"\n />\n <span v-if=\"v$.inboxName.$error\" class=\"message\">\n {{ $t('INBOX_MGMT.ADD.WHATSAPP.INBOX_NAME.ERROR') }}\n </span>\n </label>\n </div>\n\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label :class=\"{ error: v$.phoneNumber.$error }\">\n {{ $t('INBOX_MGMT.ADD.WHATSAPP.PHONE_NUMBER.LABEL') }}\n <input\n v-model=\"phoneNumber\"\n type=\"text\"\n :placeholder=\"$t('INBOX_MGMT.ADD.WHATSAPP.PHONE_NUMBER.PLACEHOLDER')\"\n @blur=\"v$.phoneNumber.$touch\"\n />\n <span v-if=\"v$.phoneNumber.$error\" class=\"message\">\n {{ $t('INBOX_MGMT.ADD.WHATSAPP.PHONE_NUMBER.ERROR') }}\n </span>\n </label>\n </div>\n\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label :class=\"{ error: v$.apiKey.$error }\">\n <span>\n {{ $t('INBOX_MGMT.ADD.WHATSAPP.API_KEY.LABEL') }}\n </span>\n <input\n v-model=\"apiKey\"\n type=\"text\"\n :placeholder=\"$t('INBOX_MGMT.ADD.WHATSAPP.API_KEY.PLACEHOLDER')\"\n @blur=\"v$.apiKey.$touch\"\n />\n <span v-if=\"v$.apiKey.$error\" class=\"message\">\n {{ $t('INBOX_MGMT.ADD.WHATSAPP.API_KEY.ERROR') }}\n </span>\n </label>\n </div>\n\n <div class=\"w-full\">\n <woot-submit-button\n :loading=\"uiFlags.isCreating\"\n :button-text=\"$t('INBOX_MGMT.ADD.WHATSAPP.SUBMIT_BUTTON')\"\n />\n </div>\n </form>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useVuelidate } from '@vuelidate/core';\nimport { useAlert } from 'dashboard/composables';\nimport { required } from '@vuelidate/validators';\nimport router from '../../../../index';\nimport { isPhoneE164OrEmpty, isNumber } from 'shared/helpers/Validators';\n\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n NextButton,\n },\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n inboxName: '',\n phoneNumber: '',\n apiKey: '',\n phoneNumberId: '',\n businessAccountId: '',\n };\n },\n computed: {\n ...mapGetters({ uiFlags: 'inboxes/getUIFlags' }),\n },\n validations: {\n inboxName: { required },\n phoneNumber: { required, isPhoneE164OrEmpty },\n apiKey: { required },\n phoneNumberId: { required, isNumber },\n businessAccountId: { required, isNumber },\n },\n methods: {\n async createChannel() {\n this.v$.$touch();\n if (this.v$.$invalid) {\n return;\n }\n\n try {\n const whatsappChannel = await this.$store.dispatch(\n 'inboxes/createChannel',\n {\n name: this.inboxName,\n channel: {\n type: 'whatsapp',\n phone_number: this.phoneNumber,\n provider: 'whatsapp_cloud',\n provider_config: {\n api_key: this.apiKey,\n phone_number_id: this.phoneNumberId,\n business_account_id: this.businessAccountId,\n },\n },\n }\n );\n\n router.replace({\n name: 'settings_inboxes_add_agents',\n params: {\n page: 'new',\n inbox_id: whatsappChannel.id,\n },\n });\n } catch (error) {\n useAlert(\n error.message || this.$t('INBOX_MGMT.ADD.WHATSAPP.API.ERROR_MESSAGE')\n );\n }\n },\n },\n};\n</script>\n\n<template>\n <form class=\"flex flex-wrap flex-col mx-0\" @submit.prevent=\"createChannel()\">\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label :class=\"{ error: v$.inboxName.$error }\">\n {{ $t('INBOX_MGMT.ADD.WHATSAPP.INBOX_NAME.LABEL') }}\n <input\n v-model=\"inboxName\"\n type=\"text\"\n :placeholder=\"$t('INBOX_MGMT.ADD.WHATSAPP.INBOX_NAME.PLACEHOLDER')\"\n @blur=\"v$.inboxName.$touch\"\n />\n <span v-if=\"v$.inboxName.$error\" class=\"message\">\n {{ $t('INBOX_MGMT.ADD.WHATSAPP.INBOX_NAME.ERROR') }}\n </span>\n </label>\n </div>\n\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label :class=\"{ error: v$.phoneNumber.$error }\">\n {{ $t('INBOX_MGMT.ADD.WHATSAPP.PHONE_NUMBER.LABEL') }}\n <input\n v-model=\"phoneNumber\"\n type=\"text\"\n :placeholder=\"$t('INBOX_MGMT.ADD.WHATSAPP.PHONE_NUMBER.PLACEHOLDER')\"\n @blur=\"v$.phoneNumber.$touch\"\n />\n <span v-if=\"v$.phoneNumber.$error\" class=\"message\">\n {{ $t('INBOX_MGMT.ADD.WHATSAPP.PHONE_NUMBER.ERROR') }}\n </span>\n </label>\n </div>\n\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label :class=\"{ error: v$.phoneNumberId.$error }\">\n <span>\n {{ $t('INBOX_MGMT.ADD.WHATSAPP.PHONE_NUMBER_ID.LABEL') }}\n </span>\n <input\n v-model=\"phoneNumberId\"\n type=\"text\"\n :placeholder=\"\n $t('INBOX_MGMT.ADD.WHATSAPP.PHONE_NUMBER_ID.PLACEHOLDER')\n \"\n @blur=\"v$.phoneNumberId.$touch\"\n />\n <span v-if=\"v$.phoneNumberId.$error\" class=\"message\">\n {{ $t('INBOX_MGMT.ADD.WHATSAPP.PHONE_NUMBER_ID.ERROR') }}\n </span>\n </label>\n </div>\n\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label :class=\"{ error: v$.businessAccountId.$error }\">\n <span>\n {{ $t('INBOX_MGMT.ADD.WHATSAPP.BUSINESS_ACCOUNT_ID.LABEL') }}\n </span>\n <input\n v-model=\"businessAccountId\"\n type=\"text\"\n :placeholder=\"\n $t('INBOX_MGMT.ADD.WHATSAPP.BUSINESS_ACCOUNT_ID.PLACEHOLDER')\n \"\n @blur=\"v$.businessAccountId.$touch\"\n />\n <span v-if=\"v$.businessAccountId.$error\" class=\"message\">\n {{ $t('INBOX_MGMT.ADD.WHATSAPP.BUSINESS_ACCOUNT_ID.ERROR') }}\n </span>\n </label>\n </div>\n\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label :class=\"{ error: v$.apiKey.$error }\">\n <span>\n {{ $t('INBOX_MGMT.ADD.WHATSAPP.API_KEY.LABEL') }}\n </span>\n <input\n v-model=\"apiKey\"\n type=\"text\"\n :placeholder=\"$t('INBOX_MGMT.ADD.WHATSAPP.API_KEY.PLACEHOLDER')\"\n @blur=\"v$.apiKey.$touch\"\n />\n <span v-if=\"v$.apiKey.$error\" class=\"message\">\n {{ $t('INBOX_MGMT.ADD.WHATSAPP.API_KEY.ERROR') }}\n </span>\n </label>\n </div>\n\n <div class=\"w-full mt-4\">\n <NextButton\n :is-loading=\"uiFlags.isCreating\"\n type=\"submit\"\n solid\n blue\n :label=\"$t('INBOX_MGMT.ADD.WHATSAPP.SUBMIT_BUTTON')\"\n />\n </div>\n </form>\n</template>\n","<script>\nimport PageHeader from '../../SettingsSubPageHeader.vue';\nimport Twilio from './Twilio.vue';\nimport ThreeSixtyDialogWhatsapp from './360DialogWhatsapp.vue';\nimport CloudWhatsapp from './CloudWhatsapp.vue';\n\nexport default {\n components: {\n PageHeader,\n Twilio,\n ThreeSixtyDialogWhatsapp,\n CloudWhatsapp,\n },\n data() {\n return {\n provider: 'whatsapp_cloud',\n };\n },\n};\n</script>\n\n<template>\n <div\n class=\"border border-n-weak bg-n-solid-1 rounded-t-lg border-b-0 h-full w-full p-6 col-span-6 overflow-auto\"\n >\n <PageHeader\n :header-title=\"$t('INBOX_MGMT.ADD.WHATSAPP.TITLE')\"\n :header-content=\"$t('INBOX_MGMT.ADD.WHATSAPP.DESC')\"\n />\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label>\n {{ $t('INBOX_MGMT.ADD.WHATSAPP.PROVIDERS.LABEL') }}\n <select v-model=\"provider\">\n <option value=\"whatsapp_cloud\">\n {{ $t('INBOX_MGMT.ADD.WHATSAPP.PROVIDERS.WHATSAPP_CLOUD') }}\n </option>\n <option value=\"twilio\">\n {{ $t('INBOX_MGMT.ADD.WHATSAPP.PROVIDERS.TWILIO') }}\n </option>\n </select>\n </label>\n </div>\n\n <Twilio v-if=\"provider === 'twilio'\" type=\"whatsapp\" />\n <ThreeSixtyDialogWhatsapp v-else-if=\"provider === '360dialog'\" />\n <CloudWhatsapp v-else />\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useVuelidate } from '@vuelidate/core';\nimport { useAlert } from 'dashboard/composables';\nimport { required } from '@vuelidate/validators';\nimport router from '../../../../index';\nimport PageHeader from '../../SettingsSubPageHeader.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n PageHeader,\n NextButton,\n },\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n channelName: '',\n lineChannelId: '',\n lineChannelSecret: '',\n lineChannelToken: '',\n };\n },\n computed: {\n ...mapGetters({\n uiFlags: 'inboxes/getUIFlags',\n }),\n },\n validations: {\n channelName: { required },\n lineChannelId: { required },\n lineChannelSecret: { required },\n lineChannelToken: { required },\n },\n methods: {\n async createChannel() {\n this.v$.$touch();\n if (this.v$.$invalid) {\n return;\n }\n\n try {\n const lineChannel = await this.$store.dispatch(\n 'inboxes/createChannel',\n {\n name: this.channelName,\n channel: {\n type: 'line',\n line_channel_id: this.lineChannelId,\n line_channel_secret: this.lineChannelSecret,\n line_channel_token: this.lineChannelToken,\n },\n }\n );\n\n router.replace({\n name: 'settings_inboxes_add_agents',\n params: {\n page: 'new',\n inbox_id: lineChannel.id,\n },\n });\n } catch (error) {\n useAlert(this.$t('INBOX_MGMT.ADD.LINE_CHANNEL.API.ERROR_MESSAGE'));\n }\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"border border-n-weak bg-n-solid-1 rounded-t-lg border-b-0 h-full w-full p-6 col-span-6 overflow-auto\"\n >\n <PageHeader\n :header-title=\"$t('INBOX_MGMT.ADD.LINE_CHANNEL.TITLE')\"\n :header-content=\"$t('INBOX_MGMT.ADD.LINE_CHANNEL.DESC')\"\n />\n <form\n class=\"flex flex-wrap flex-col mx-0\"\n @submit.prevent=\"createChannel()\"\n >\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label :class=\"{ error: v$.channelName.$error }\">\n {{ $t('INBOX_MGMT.ADD.LINE_CHANNEL.CHANNEL_NAME.LABEL') }}\n <input\n v-model=\"channelName\"\n type=\"text\"\n :placeholder=\"\n $t('INBOX_MGMT.ADD.LINE_CHANNEL.CHANNEL_NAME.PLACEHOLDER')\n \"\n @blur=\"v$.channelName.$touch\"\n />\n <span v-if=\"v$.channelName.$error\" class=\"message\">{{\n $t('INBOX_MGMT.ADD.LINE_CHANNEL.CHANNEL_NAME.ERROR')\n }}</span>\n </label>\n </div>\n\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label :class=\"{ error: v$.lineChannelId.$error }\">\n {{ $t('INBOX_MGMT.ADD.LINE_CHANNEL.LINE_CHANNEL_ID.LABEL') }}\n <input\n v-model=\"lineChannelId\"\n type=\"text\"\n :placeholder=\"\n $t('INBOX_MGMT.ADD.LINE_CHANNEL.LINE_CHANNEL_ID.PLACEHOLDER')\n \"\n @blur=\"v$.lineChannelId.$touch\"\n />\n </label>\n </div>\n\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label :class=\"{ error: v$.lineChannelSecret.$error }\">\n {{ $t('INBOX_MGMT.ADD.LINE_CHANNEL.LINE_CHANNEL_SECRET.LABEL') }}\n <input\n v-model=\"lineChannelSecret\"\n type=\"text\"\n :placeholder=\"\n $t('INBOX_MGMT.ADD.LINE_CHANNEL.LINE_CHANNEL_SECRET.PLACEHOLDER')\n \"\n @blur=\"v$.lineChannelSecret.$touch\"\n />\n </label>\n </div>\n\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label :class=\"{ error: v$.lineChannelToken.$error }\">\n {{ $t('INBOX_MGMT.ADD.LINE_CHANNEL.LINE_CHANNEL_TOKEN.LABEL') }}\n <input\n v-model=\"lineChannelToken\"\n type=\"text\"\n :placeholder=\"\n $t('INBOX_MGMT.ADD.LINE_CHANNEL.LINE_CHANNEL_TOKEN.PLACEHOLDER')\n \"\n @blur=\"v$.lineChannelToken.$touch\"\n />\n </label>\n </div>\n\n <div class=\"w-full mt-4\">\n <NextButton\n :is-loading=\"uiFlags.isCreating\"\n type=\"submit\"\n solid\n blue\n :label=\"$t('INBOX_MGMT.ADD.LINE_CHANNEL.SUBMIT_BUTTON')\"\n />\n </div>\n </form>\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useVuelidate } from '@vuelidate/core';\nimport { useAlert } from 'dashboard/composables';\nimport { required } from '@vuelidate/validators';\nimport router from '../../../../index';\nimport PageHeader from '../../SettingsSubPageHeader.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n PageHeader,\n NextButton,\n },\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n botToken: '',\n };\n },\n computed: {\n ...mapGetters({\n uiFlags: 'inboxes/getUIFlags',\n }),\n },\n validations: {\n botToken: { required },\n },\n methods: {\n async createChannel() {\n this.v$.$touch();\n if (this.v$.$invalid) {\n return;\n }\n\n try {\n const telegramChannel = await this.$store.dispatch(\n 'inboxes/createChannel',\n {\n channel: {\n type: 'telegram',\n bot_token: this.botToken,\n },\n }\n );\n\n router.replace({\n name: 'settings_inboxes_add_agents',\n params: {\n page: 'new',\n inbox_id: telegramChannel.id,\n },\n });\n } catch (error) {\n useAlert(\n error.message ||\n this.$t('INBOX_MGMT.ADD.TELEGRAM_CHANNEL.API.ERROR_MESSAGE')\n );\n }\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"border border-n-weak bg-n-solid-1 rounded-t-lg border-b-0 h-full w-full p-6 col-span-6 overflow-auto\"\n >\n <PageHeader\n :header-title=\"$t('INBOX_MGMT.ADD.TELEGRAM_CHANNEL.TITLE')\"\n :header-content=\"$t('INBOX_MGMT.ADD.TELEGRAM_CHANNEL.DESC')\"\n />\n <form\n class=\"flex flex-wrap flex-col mx-0\"\n @submit.prevent=\"createChannel()\"\n >\n <div class=\"flex-shrink-0 flex-grow-0\">\n <label :class=\"{ error: v$.botToken.$error }\">\n {{ $t('INBOX_MGMT.ADD.TELEGRAM_CHANNEL.BOT_TOKEN.LABEL') }}\n <input\n v-model=\"botToken\"\n type=\"text\"\n :placeholder=\"\n $t('INBOX_MGMT.ADD.TELEGRAM_CHANNEL.BOT_TOKEN.PLACEHOLDER')\n \"\n @blur=\"v$.botToken.$touch\"\n />\n </label>\n <p class=\"help-text\">\n {{ $t('INBOX_MGMT.ADD.TELEGRAM_CHANNEL.BOT_TOKEN.SUBTITLE') }}\n </p>\n </div>\n\n <div class=\"w-full mt-4\">\n <NextButton\n :is-loading=\"uiFlags.isCreating\"\n type=\"submit\"\n solid\n blue\n :label=\"$t('INBOX_MGMT.ADD.TELEGRAM_CHANNEL.SUBMIT_BUTTON')\"\n />\n </div>\n </form>\n </div>\n</template>\n","<script>\nimport { defineComponent, h } from 'vue';\nimport Facebook from './channels/Facebook.vue';\nimport Website from './channels/Website.vue';\nimport Twitter from './channels/Twitter.vue';\nimport Api from './channels/Api.vue';\nimport Email from './channels/Email.vue';\nimport Sms from './channels/Sms.vue';\nimport Whatsapp from './channels/Whatsapp.vue';\nimport Line from './channels/Line.vue';\nimport Telegram from './channels/Telegram.vue';\n\nconst channelViewList = {\n facebook: Facebook,\n website: Website,\n twitter: Twitter,\n api: Api,\n email: Email,\n sms: Sms,\n whatsapp: Whatsapp,\n line: Line,\n telegram: Telegram,\n};\n\nexport default defineComponent({\n name: 'NewChannelView',\n props: {\n channelName: {\n type: String,\n required: true,\n },\n },\n render() {\n const ChannelComponent = channelViewList[this.channelName];\n return ChannelComponent ? h(ChannelComponent) : null;\n },\n});\n</script>\n","<script setup>\nimport { useI18n } from 'vue-i18n';\nimport { useStoreGetters } from 'dashboard/composables/store';\nimport { computed } from 'vue';\n\nconst props = defineProps({\n channelType: {\n type: String,\n required: true,\n },\n medium: {\n type: String,\n default: '',\n },\n});\nconst getters = useStoreGetters();\nconst { t } = useI18n();\nconst globalConfig = computed(() => getters['globalConfig/get'].value);\n\nconst i18nMap = {\n 'Channel::FacebookPage': 'MESSENGER',\n 'Channel::WebWidget': 'WEB_WIDGET',\n 'Channel::TwitterProfile': 'TWITTER_PROFILE',\n 'Channel::TwilioSms': 'TWILIO_SMS',\n 'Channel::Whatsapp': 'WHATSAPP',\n 'Channel::Sms': 'SMS',\n 'Channel::Email': 'EMAIL',\n 'Channel::Telegram': 'TELEGRAM',\n 'Channel::Line': 'LINE',\n 'Channel::Api': 'API',\n};\n\nconst twilioChannelName = () => {\n if (props.medium === 'whatsapp') {\n return t(`INBOX_MGMT.CHANNELS.WHATSAPP`);\n }\n return t(`INBOX_MGMT.CHANNELS.TWILIO_SMS`);\n};\n\nconst readableChannelName = computed(() => {\n if (props.channelType === 'Channel::Api') {\n return globalConfig.value.apiChannelName || t('INBOX_MGMT.CHANNELS.API');\n }\n if (props.channelType === 'Channel::TwilioSms') {\n return twilioChannelName();\n }\n return t(`INBOX_MGMT.CHANNELS.${i18nMap[props.channelType]}`);\n});\n</script>\n\n<template>\n <span>\n {{ readableChannelName }}\n </span>\n</template>\n","import { computed } from 'vue';\n\nexport function useChannelIcon(inbox) {\n const channelTypeIconMap = {\n 'Channel::Api': 'i-ri-cloudy-fill',\n 'Channel::Email': 'i-ri-mail-fill',\n 'Channel::FacebookPage': 'i-ri-messenger-fill',\n 'Channel::Line': 'i-ri-line-fill',\n 'Channel::Sms': 'i-ri-chat-1-fill',\n 'Channel::Telegram': 'i-ri-telegram-fill',\n 'Channel::TwilioSms': 'i-ri-chat-1-fill',\n 'Channel::TwitterProfile': 'i-ri-twitter-x-fill',\n 'Channel::WebWidget': 'i-ri-global-fill',\n 'Channel::Whatsapp': 'i-ri-whatsapp-fill',\n };\n\n const providerIconMap = {\n microsoft: 'i-ri-microsoft-fill',\n google: 'i-ri-google-fill',\n };\n\n const channelIcon = computed(() => {\n const type = inbox.channel_type;\n let icon = channelTypeIconMap[type];\n\n if (type === 'Channel::Email' && inbox.provider) {\n if (Object.keys(providerIconMap).includes(inbox.provider)) {\n icon = providerIconMap[inbox.provider];\n }\n }\n\n return icon ?? 'i-ri-global-fill';\n });\n\n return channelIcon;\n}\n","<script setup>\nimport { useChannelIcon } from './provider';\nimport Icon from 'next/icon/Icon.vue';\n\nconst props = defineProps({\n inbox: {\n type: Object,\n required: true,\n },\n});\n\nconst channelIcon = useChannelIcon(props.inbox);\n</script>\n\n<template>\n <Icon :icon=\"channelIcon\" />\n</template>\n","<script setup>\nimport { useAlert } from 'dashboard/composables';\nimport Thumbnail from 'dashboard/components/widgets/Thumbnail.vue';\nimport { useAdmin } from 'dashboard/composables/useAdmin';\nimport SettingsLayout from '../SettingsLayout.vue';\nimport BaseSettingsHeader from '../components/BaseSettingsHeader.vue';\nimport { computed, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useStoreGetters, useStore } from 'dashboard/composables/store';\nimport ChannelName from './components/ChannelName.vue';\nimport ChannelIcon from 'next/icon/ChannelIcon.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst getters = useStoreGetters();\nconst store = useStore();\nconst { t } = useI18n();\nconst { isAdmin } = useAdmin();\n\nconst showDeletePopup = ref(false);\nconst selectedInbox = ref({});\n\nconst inboxesList = computed(() => getters['inboxes/getInboxes'].value);\nconst uiFlags = computed(() => getters['inboxes/getUIFlags'].value);\n\nconst deleteConfirmText = computed(\n () => `${t('INBOX_MGMT.DELETE.CONFIRM.YES')} ${selectedInbox.value.name}`\n);\n\nconst deleteRejectText = computed(\n () => `${t('INBOX_MGMT.DELETE.CONFIRM.NO')} ${selectedInbox.value.name}`\n);\n\nconst confirmDeleteMessage = computed(\n () => `${t('INBOX_MGMT.DELETE.CONFIRM.MESSAGE')} ${selectedInbox.value.name}?`\n);\nconst confirmPlaceHolderText = computed(\n () =>\n `${t('INBOX_MGMT.DELETE.CONFIRM.PLACE_HOLDER', {\n inboxName: selectedInbox.value.name,\n })}`\n);\n\nconst deleteInbox = async ({ id }) => {\n try {\n await store.dispatch('inboxes/delete', id);\n useAlert(t('INBOX_MGMT.DELETE.API.SUCCESS_MESSAGE'));\n } catch (error) {\n useAlert(t('INBOX_MGMT.DELETE.API.ERROR_MESSAGE'));\n }\n};\nconst closeDelete = () => {\n showDeletePopup.value = false;\n selectedInbox.value = {};\n};\n\nconst confirmDeletion = () => {\n deleteInbox(selectedInbox.value);\n closeDelete();\n};\nconst openDelete = inbox => {\n showDeletePopup.value = true;\n selectedInbox.value = inbox;\n};\n</script>\n\n<template>\n <SettingsLayout\n :no-records-found=\"!inboxesList.length\"\n :no-records-message=\"$t('INBOX_MGMT.LIST.404')\"\n :is-loading=\"uiFlags.isFetching\"\n >\n <template #header>\n <BaseSettingsHeader\n :title=\"$t('INBOX_MGMT.HEADER')\"\n :description=\"$t('INBOX_MGMT.DESCRIPTION')\"\n :link-text=\"$t('INBOX_MGMT.LEARN_MORE')\"\n feature-name=\"inboxes\"\n >\n <template #actions>\n <router-link v-if=\"isAdmin\" :to=\"{ name: 'settings_inbox_new' }\">\n <Button\n icon=\"i-lucide-circle-plus\"\n :label=\"$t('SETTINGS.INBOXES.NEW_INBOX')\"\n />\n </router-link>\n </template>\n </BaseSettingsHeader>\n </template>\n <template #body>\n <table class=\"min-w-full overflow-x-auto\">\n <tbody\n class=\"divide-y divide-n-weak flex-1 text-slate-700 dark:text-slate-100\"\n >\n <tr v-for=\"inbox in inboxesList\" :key=\"inbox.id\">\n <td class=\"py-4 ltr:pr-4 rtl:pl-4\">\n <div class=\"flex items-center flex-row gap-4\">\n <Thumbnail\n v-if=\"inbox.avatar_url\"\n class=\"bg-n-alpha-3 rounded-full p-2 ring ring-n-solid-1 border border-n-strong shadow-sm\"\n :src=\"inbox.avatar_url\"\n :username=\"inbox.name\"\n size=\"48px\"\n />\n <div\n v-else\n class=\"w-[48px] h-[48px] flex justify-center items-center bg-n-alpha-3 rounded-full p-2 ring ring-n-solid-1 border border-n-strong shadow-sm\"\n >\n <ChannelIcon class=\"size-5\" :inbox=\"inbox\" />\n </div>\n <div>\n <span class=\"block font-medium capitalize\">\n {{ inbox.name }}\n </span>\n <ChannelName\n :channel-type=\"inbox.channel_type\"\n :medium=\"inbox.medium\"\n />\n </div>\n </div>\n </td>\n\n <td class=\"py-4\">\n <div class=\"flex gap-1 justify-end\">\n <router-link\n :to=\"{\n name: 'settings_inbox_show',\n params: { inboxId: inbox.id },\n }\"\n >\n <Button\n v-if=\"isAdmin\"\n v-tooltip.top=\"$t('INBOX_MGMT.SETTINGS')\"\n icon=\"i-lucide-settings\"\n slate\n xs\n faded\n />\n </router-link>\n <Button\n v-if=\"isAdmin\"\n v-tooltip.top=\"$t('INBOX_MGMT.DELETE.BUTTON_TEXT')\"\n icon=\"i-lucide-trash-2\"\n xs\n ruby\n faded\n @click=\"openDelete(inbox)\"\n />\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </template>\n\n <woot-confirm-delete-modal\n v-if=\"showDeletePopup\"\n v-model:show=\"showDeletePopup\"\n :title=\"$t('INBOX_MGMT.DELETE.CONFIRM.TITLE')\"\n :message=\"confirmDeleteMessage\"\n :confirm-text=\"deleteConfirmText\"\n :reject-text=\"deleteRejectText\"\n :confirm-value=\"selectedInbox.name\"\n :confirm-place-holder-text=\"confirmPlaceHolderText\"\n @on-confirm=\"confirmDeletion\"\n @on-close=\"closeDelete\"\n />\n </SettingsLayout>\n</template>\n","<script>\nexport default {\n props: {\n headerTitle: {\n type: String,\n default: '',\n },\n headerContent: {\n type: String,\n default: '',\n },\n },\n};\n</script>\n\n<template>\n <div class=\"border-b border-solid border-n-weak/60\">\n <div class=\"max-w-6xl w-full mx-auto pt-4 pb-0 px-8\">\n <h2 class=\"text-2xl text-slate-800 dark:text-slate-100 mb-1 font-medium\">\n {{ headerTitle }}\n </h2>\n <p\n v-if=\"headerContent\"\n class=\"w-full text-slate-600 dark:text-slate-300 text-sm mb-2\"\n >\n {{ headerContent }}\n </p>\n <slot />\n </div>\n </div>\n</template>\n","<script>\nexport default {\n props: {\n title: {\n type: String,\n default: '',\n },\n subTitle: {\n type: String,\n default: '',\n },\n showBorder: {\n type: Boolean,\n default: true,\n },\n note: {\n type: String,\n default: '',\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"ml-0 mr-0 py-8 w-full\"\n :class=\"{\n 'border-b border-solid border-n-weak/60 dark:border-n-weak': showBorder,\n }\"\n >\n <div class=\"grid grid-cols-1 lg:grid-cols-8 gap-6\">\n <div class=\"col-span-2\">\n <p\n v-if=\"title\"\n class=\"text-base text-woot-500 dark:text-woot-500 mb-0 font-medium\"\n >\n {{ title }}\n </p>\n <p\n class=\"text-sm mb-2 text-slate-700 dark:text-slate-300 leading-5 tracking-normal mt-2\"\n >\n <slot v-if=\"subTitle\" name=\"subTitle\">\n {{ subTitle }}\n </slot>\n </p>\n <p v-if=\"note\">\n <span class=\"font-semibold\">{{ $t('INBOX_MGMT.NOTE') }}</span>\n {{ note }}\n </p>\n </div>\n <div class=\"col-span-6 xl:col-span-5\">\n <slot />\n </div>\n </div>\n </div>\n</template>\n","import { INBOX_TYPES } from 'dashboard/helper/inbox';\n\nexport const INBOX_FEATURES = {\n REPLY_TO: 'replyTo',\n REPLY_TO_OUTGOING: 'replyToOutgoing',\n};\n\n// This is a single source of truth for inbox features\n// This is used to check if a feature is available for a particular inbox or not\nexport const INBOX_FEATURE_MAP = {\n [INBOX_FEATURES.REPLY_TO]: [\n INBOX_TYPES.FB,\n INBOX_TYPES.WEB,\n INBOX_TYPES.TWITTER,\n INBOX_TYPES.WHATSAPP,\n INBOX_TYPES.TELEGRAM,\n INBOX_TYPES.API,\n ],\n [INBOX_FEATURES.REPLY_TO_OUTGOING]: [\n INBOX_TYPES.WEB,\n INBOX_TYPES.TWITTER,\n INBOX_TYPES.WHATSAPP,\n INBOX_TYPES.TELEGRAM,\n INBOX_TYPES.API,\n ],\n};\n\nexport default {\n computed: {\n channelType() {\n return this.inbox.channel_type;\n },\n whatsAppAPIProvider() {\n return this.inbox.provider || '';\n },\n isAMicrosoftInbox() {\n return this.isAnEmailChannel && this.inbox.provider === 'microsoft';\n },\n isAGoogleInbox() {\n return this.isAnEmailChannel && this.inbox.provider === 'google';\n },\n isAPIInbox() {\n return this.channelType === INBOX_TYPES.API;\n },\n isATwitterInbox() {\n return this.channelType === INBOX_TYPES.TWITTER;\n },\n isAFacebookInbox() {\n return this.channelType === INBOX_TYPES.FB;\n },\n isAWebWidgetInbox() {\n return this.channelType === INBOX_TYPES.WEB;\n },\n isATwilioChannel() {\n return this.channelType === INBOX_TYPES.TWILIO;\n },\n isALineChannel() {\n return this.channelType === INBOX_TYPES.LINE;\n },\n isAnEmailChannel() {\n return this.channelType === INBOX_TYPES.EMAIL;\n },\n isATelegramChannel() {\n return this.channelType === INBOX_TYPES.TELEGRAM;\n },\n isATwilioSMSChannel() {\n const { medium: medium = '' } = this.inbox;\n return this.isATwilioChannel && medium === 'sms';\n },\n isASmsInbox() {\n return this.channelType === INBOX_TYPES.SMS || this.isATwilioSMSChannel;\n },\n isATwilioWhatsAppChannel() {\n const { medium: medium = '' } = this.inbox;\n return this.isATwilioChannel && medium === 'whatsapp';\n },\n isAWhatsAppCloudChannel() {\n return (\n this.channelType === INBOX_TYPES.WHATSAPP &&\n this.whatsAppAPIProvider === 'whatsapp_cloud'\n );\n },\n is360DialogWhatsAppChannel() {\n return (\n this.channelType === INBOX_TYPES.WHATSAPP &&\n this.whatsAppAPIProvider === 'default'\n );\n },\n chatAdditionalAttributes() {\n const { additional_attributes: additionalAttributes } = this.chat || {};\n return additionalAttributes || {};\n },\n isTwitterInboxTweet() {\n return this.chatAdditionalAttributes.type === 'tweet';\n },\n twilioBadge() {\n return `${this.isATwilioSMSChannel ? 'sms' : 'whatsapp'}`;\n },\n twitterBadge() {\n return `${this.isTwitterInboxTweet ? 'twitter-tweet' : 'twitter-dm'}`;\n },\n facebookBadge() {\n return this.chatAdditionalAttributes.type || 'facebook';\n },\n inboxBadge() {\n let badgeKey = '';\n if (this.isATwitterInbox) {\n badgeKey = this.twitterBadge;\n } else if (this.isAFacebookInbox) {\n badgeKey = this.facebookBadge;\n } else if (this.isATwilioChannel) {\n badgeKey = this.twilioBadge;\n } else if (this.isAWhatsAppChannel) {\n badgeKey = 'whatsapp';\n }\n return badgeKey || this.channelType;\n },\n isAWhatsAppChannel() {\n return (\n this.channelType === INBOX_TYPES.WHATSAPP ||\n this.isATwilioWhatsAppChannel\n );\n },\n },\n methods: {\n inboxHasFeature(feature) {\n return INBOX_FEATURE_MAP[feature]?.includes(this.channelType) ?? false;\n },\n },\n};\n","<script setup>\nimport { computed } from 'vue';\n\nconst props = defineProps({\n color: {\n type: String,\n default: 'slate',\n validator: value =>\n ['blue', 'ruby', 'amber', 'slate', 'teal'].includes(value),\n },\n actionLabel: {\n type: String,\n default: null,\n },\n});\n\nconst emit = defineEmits(['action']);\n\nconst bannerClass = computed(() => {\n const classMap = {\n slate: 'bg-n-slate-3 border-n-slate-4 text-n-slate-11',\n amber: 'bg-n-amber-3 border-n-amber-4 text-n-amber-11',\n teal: 'bg-n-teal-3 border-n-teal-4 text-n-teal-11',\n ruby: 'bg-n-ruby-3 border-n-ruby-4 text-n-ruby-11',\n blue: 'bg-n-blue-3 border-n-blue-4 text-n-blue-11',\n };\n\n return classMap[props.color];\n});\n\nconst buttonClass = computed(() => {\n const classMap = {\n slate: 'bg-n-slate-4 hover:bg-n-slate-5 text-n-slate-11',\n amber: 'bg-n-amber-4 hover:bg-n-amber-5 text-n-amber-11',\n teal: 'bg-n-teal-4 hover:bg-n-teal-5 text-n-teal-11',\n ruby: 'bg-n-ruby-4 hover:bg-n-ruby-5 text-n-ruby-11',\n blue: 'bg-n-blue-4 hover:bg-n-blue-5 text-n-blue-11',\n };\n\n return classMap[props.color];\n});\n\nconst triggerAction = () => {\n emit('action');\n};\n</script>\n\n<template>\n <div\n class=\"text-sm rounded-xl flex items-center justify-between gap-2 border\"\n :class=\"[\n bannerClass,\n {\n 'py-2 px-3': !actionLabel,\n 'pl-3 p-2': actionLabel,\n },\n ]\"\n >\n <div>\n <slot />\n </div>\n <div>\n <button\n v-if=\"actionLabel\"\n class=\"px-3 py-1 w-auto grid place-content-center rounded-lg\"\n :class=\"buttonClass\"\n @click=\"triggerAction\"\n >\n {{ actionLabel }}\n </button>\n </div>\n </div>\n</template>\n","<script setup>\nimport Banner from 'dashboard/components-next/banner/Banner.vue';\n\nconst emit = defineEmits(['reauthorize']);\n</script>\n\n<template>\n <Banner\n color=\"ruby\"\n :action-label=\"$t('INBOX_MGMT.CLICK_TO_RECONNECT')\"\n @action=\"emit('reauthorize')\"\n >\n {{ $t('INBOX_MGMT.RECONNECTION_REQUIRED') }}\n </Banner>\n</template>\n","<script>\n/* global FB */\nimport InboxReconnectionRequired from '../components/InboxReconnectionRequired.vue';\nimport { useAlert } from 'dashboard/composables';\n\nimport { loadScript } from 'dashboard/helper/DOMHelpers';\nimport * as Sentry from '@sentry/vue';\n\nexport default {\n components: {\n InboxReconnectionRequired,\n },\n props: {\n inbox: {\n type: Object,\n required: true,\n },\n },\n computed: {\n inboxId() {\n return this.inbox.id;\n },\n },\n mounted() {\n window.fbAsyncInit = this.runFBInit;\n },\n methods: {\n runFBInit() {\n FB.init({\n appId: window.chatwootConfig.fbAppId,\n xfbml: true,\n version: window.chatwootConfig.fbApiVersion,\n status: true,\n });\n window.fbSDKLoaded = true;\n FB.AppEvents.logPageView();\n },\n\n async loadFBsdk() {\n return loadScript('https://connect.facebook.net/en_US/sdk.js', {\n id: 'facebook-jssdk',\n });\n },\n\n async startLogin() {\n this.hasLoginStarted = true;\n try {\n // this will load the SDK in a promise, and resolve it when the sdk is loaded\n // in case the SDK is already present, it will resolve immediately\n await this.loadFBsdk();\n this.runFBInit(); // run init anyway, `tryFBlogin` won't wait for `fbAsyncInit` otherwise.\n this.tryFBlogin(); // make an attempt to login\n } catch (error) {\n if (error.name === 'ScriptLoaderError') {\n // if the error was related to script loading, we show a toast\n useAlert(this.$t('INBOX_MGMT.DETAILS.ERROR_FB_LOADING'));\n } else {\n // if the error was anything else, we capture it and show a toast\n Sentry.captureException(error);\n useAlert(this.$t('INBOX_MGMT.DETAILS.ERROR_FB_AUTH'));\n }\n }\n },\n\n tryFBlogin() {\n FB.login(\n response => {\n if (response.status === 'connected') {\n this.reauthorizeFBPage(response.authResponse.accessToken);\n } else if (response.status === 'not_authorized') {\n // The person is logged into Facebook, but not your app.\n useAlert(this.$t('INBOX_MGMT.DETAILS.ERROR_FB_AUTH'));\n } else {\n // The person is not logged into Facebook, so we're not sure if\n // they are logged into this app or not.\n useAlert(this.$t('INBOX_MGMT.DETAILS.ERROR_FB_AUTH'));\n }\n },\n {\n scope:\n 'pages_manage_metadata,business_management,pages_messaging,instagram_basic,pages_show_list,pages_read_engagement,instagram_manage_messages',\n auth_type: 'reauthorize',\n }\n );\n },\n async reauthorizeFBPage(omniauthToken) {\n try {\n await this.$store.dispatch('inboxes/reauthorizeFacebookPage', {\n omniauthToken,\n inboxId: this.inboxId,\n });\n useAlert(this.$t('INBOX_MGMT.FACEBOOK_REAUTHORIZE.MESSAGE_SUCCESS'));\n } catch (error) {\n useAlert(this.$t('INBOX_MGMT.FACEBOOK_REAUTHORIZE.MESSAGE_ERROR'));\n }\n },\n },\n};\n</script>\n\n<template>\n <InboxReconnectionRequired class=\"mx-8 mt-5\" @reauthorize=\"startLogin\" />\n</template>\n\n<style lang=\"scss\" scoped>\n@import 'dashboard/assets/scss/variables';\n\n.fb--login {\n img {\n max-width: 240px;\n padding: $space-normal 0;\n }\n}\n</style>\n","<script setup>\nimport { ref } from 'vue';\nimport InboxReconnectionRequired from '../../components/InboxReconnectionRequired.vue';\nimport microsoftClient from 'dashboard/api/channel/microsoftClient';\n\nimport { useI18n } from 'vue-i18n';\nimport { useAlert } from 'dashboard/composables';\n\nconst props = defineProps({\n inbox: {\n type: Object,\n default: () => ({}),\n },\n});\n\nconst { t } = useI18n();\n\nconst isRequestingAuthorization = ref(false);\n\nasync function requestAuthorization() {\n try {\n isRequestingAuthorization.value = true;\n const response = await microsoftClient.generateAuthorization({\n email: props.inbox.email,\n });\n\n const {\n data: { url },\n } = response;\n window.location.href = url;\n } catch (error) {\n useAlert(t('INBOX_MGMT.ADD.MICROSOFT.ERROR_MESSAGE'));\n } finally {\n isRequestingAuthorization.value = false;\n }\n}\n</script>\n\n<template>\n <InboxReconnectionRequired\n class=\"mx-8 mt-5\"\n @reauthorize=\"requestAuthorization\"\n />\n</template>\n","<script setup>\nimport { ref, computed } from 'vue';\nimport InboxReconnectionRequired from '../../components/InboxReconnectionRequired.vue';\nimport googleClient from 'dashboard/api/channel/googleClient';\n\nimport { useI18n } from 'vue-i18n';\nimport { useAlert } from 'dashboard/composables';\n\nconst props = defineProps({\n inbox: {\n type: Object,\n default: () => ({}),\n },\n});\n\nconst { t } = useI18n();\n\nconst isRequestingAuthorization = ref(false);\n\nconst inboxEmail = computed(() => {\n if (props.inbox.imap_login && props.inbox.imap_enabled) {\n return props.inbox.imap_login;\n }\n return props.inbox.email;\n});\n\nasync function requestAuthorization() {\n try {\n isRequestingAuthorization.value = true;\n const response = await googleClient.generateAuthorization({\n email: inboxEmail.value,\n });\n\n const {\n data: { url },\n } = response;\n window.location.href = url;\n } catch (error) {\n useAlert(t('INBOX_MGMT.ADD.GOOGLE.ERROR_MESSAGE'));\n } finally {\n isRequestingAuthorization.value = false;\n }\n}\n</script>\n\n<template>\n <InboxReconnectionRequired\n class=\"mx-8 mt-5\"\n @reauthorize=\"requestAuthorization\"\n />\n</template>\n","/**!\n * Sortable 1.14.0\n * @author\tRubaXa <trash@rubaxa.org>\n * @author\towenm <owen23355@gmail.com>\n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.14.0\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\n\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\n\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction matches(\n/**HTMLElement*/\nel,\n/**String*/\nselector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n\n return false;\n}\n\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\n\nfunction closest(\n/**HTMLElement*/\nel,\n/**String*/\nselector,\n/**HTMLElement*/\nctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n\n return null;\n}\n\nvar R_SPACE = /\\s+/g;\n\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\n\nfunction css(el, prop, val) {\n var style = el && el.style;\n\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\n\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n\n } while (!selfOnly && (el = el.parentNode));\n }\n\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n\n return matrixFn && new matrixFn(appliedTransforms);\n}\n\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n\n return list;\n }\n\n return [];\n}\n\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n/**\n * Returns the \"bounding client rect\" of given element\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\n * @param {[HTMLElement]} container The parent the element will be placed in\n * @return {Object} The boundingClientRect of el, with specified adjustments\n */\n\n\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container\n\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n\n } while (container = container.parentNode);\n }\n }\n\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n/**\n * Checks if a side of an element is scrolled past a side of its parents\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\n */\n\n\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n /* jshint boss:true */\n\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n\n return false;\n}\n/**\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\n * and non-draggable elements\n * @param {HTMLElement} el The parent element\n * @param {Number} childNum The index of the child\n * @param {Object} options Parent Sortable's options\n * @return {HTMLElement} The child at index childNum, or null if not found\n */\n\n\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n\n currentChild++;\n }\n\n i++;\n }\n\n return null;\n}\n/**\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\n * @param {HTMLElement} el Parent element\n * @param {selector} selector Any other elements that should be ignored\n * @return {HTMLElement} The last child, ignoring ghostEl\n */\n\n\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n\n return last || null;\n}\n/**\n * Returns the index of an element within its parent for a selected set of\n * elements\n * @param {HTMLElement} el\n * @param {selector} selector\n * @return {number}\n */\n\n\nfunction index(el, selector) {\n var index = 0;\n\n if (!el || !el.parentNode) {\n return -1;\n }\n /* jshint boss:true */\n\n\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n\n return index;\n}\n/**\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\n * The value is returned in real pixels.\n * @param {HTMLElement} el\n * @return {Array} Offsets in the format of [left, top]\n */\n\n\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n\n return [offsetLeft, offsetTop];\n}\n/**\n * Returns the index of the object within the given array\n * @param {Array} arr Array that may or may not hold the object\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\n * @return {Number} The index of the object in the array, or -1\n */\n\n\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n\n return -1;\n}\n\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n\n } while (elem = elem.parentNode);\n\n return getWindowScrollingElement();\n}\n\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n\n return dst;\n}\n\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\n\nvar _throttleTimeout;\n\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\n\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\n\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\n\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\n\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\n\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\n\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation\n\n\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n\n target.toRect = toRect;\n\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n } // if fromRect != toRect: animate\n\n\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n\n if (!time) {\n time = _this.options.animation;\n }\n\n _this.animate(target, animatingRect, toRect, time);\n }\n\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\n\nfunction repaint(target) {\n return target.offsetWidth;\n}\n\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n\n this.eventCanceled = false;\n\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable\n\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n } // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n\n\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized; // Add default options from plugin\n\n _extends(defaults, initialized.defaults);\n });\n\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\n\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\n\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\n\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\nghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n_silent = false,\n savedInputChecked = [];\n/** @const */\n\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\nsupportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return; // false when <= IE11\n\n if (IE11OrLess) {\n return false;\n }\n\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n}(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n},\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n},\n\n/**\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\n * @param {Number} x X position\n * @param {Number} y Y position\n * @return {HTMLElement} Element of the first found nearest Sortable\n */\n_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n},\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n\n var group = {};\n var originalGroup = options.group;\n\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n},\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n},\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n}; // #1184 fix - Prevent click event on fallback if dragged but item not changed position\n\n\nif (documentExists) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\n\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n\n if (nearest) {\n // Create imitation event\n var event = {};\n\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n\n nearest[expando]._onDragOver(event);\n }\n }\n};\n\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n/**\n * @class Sortable\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n\n\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n\n this.el = el; // root element\n\n this.options = options = _extends({}, options); // Export instance\n\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults); // Set default options\n\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n\n _prepareGroup(options); // Bind all private methods\n\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n } // Setup drag mode\n\n\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n } // Bind events\n\n\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n\n sortables.push(this.el); // Restore sorting\n\n options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager\n\n _extends(this, AnimationStateManager());\n}\n\nSortable.prototype =\n/** @lends Sortable.prototype */\n{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart(\n /** Event|TouchEvent */\n evt) {\n if (!evt.cancelable) return;\n\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n\n _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n\n\n if (dragEl) {\n return;\n }\n\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n } // cancel dnd if original target is content editable\n\n\n if (originalTarget.isContentEditable) {\n return;\n } // Safari ignores further event handling after mousedown\n\n\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n\n target = closest(target, options.draggable, el, false);\n\n if (target && target.animated) {\n return;\n }\n\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n } // Get the index of the dragged element within its parent\n\n\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable); // Check filter\n\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n } // Prepare `dragstart`\n\n\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart(\n /** Event */\n evt,\n /** Touch */\n touch,\n /** HTMLElement */\n target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n _this._onDrop();\n\n return;\n } // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n\n\n _this._disableDelayedDragEvents();\n\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n } // Bind the events: dragstart/dragend\n\n\n _this._triggerDragStart(evt, touch); // Drag start event\n\n\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n }); // Chosen item\n\n\n toggleClass(dragEl, options.chosenClass, true);\n }; // Disable \"draggable\"\n\n\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox)\n\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n\n pluginEvent('delayStart', this, {\n evt: evt\n }); // Delay is impossible for native DnD in Edge or IE\n\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n } // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n\n\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(\n /** TouchEvent|PointerEvent **/\n e) {\n var touch = e.touches ? e.touches[0] : e;\n\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart(\n /** Event */\n evt,\n /** Touch */\n touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n\n awaitingDragStarted = false;\n\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n\n var options = this.options; // Apply effect\n\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost(); // Drag start event\n\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n\n _hideGhostForTarget();\n\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n\n target = parent; // store last element\n }\n /* jshint boss:true */\n while (parent = parent.parentNode);\n }\n\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove(\n /**TouchEvent*/\n evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); // only set the status to dragging, when we are actually dragging\n\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n\n this._onDragStart(evt, true);\n }\n\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options; // Position absolutely\n\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl); // Set transform-origin\n\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart(\n /**Event*/\n evt,\n /**boolean*/\n fallback) {\n var _this = this;\n\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n }\n\n pluginEvent('setupClone', this);\n\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n\n this._hideClone();\n\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n } // #1143: IFrame support workaround\n\n\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n\n _this._hideClone();\n\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events\n\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n\n on(document, 'drop', _this); // #1276 fix:\n\n css(dragEl, 'transform', 'translateZ(0)');\n }\n\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver(\n /**Event*/\n evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n\n if (_silent) return;\n\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n } // Capture animation state\n\n\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n\n _this.captureAnimationState();\n\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n } // Return invocation when dragEl is inserted (or completed)\n\n\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n } // Animation\n\n\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n } // Null lastTarget if it is not inside a previously swapped element\n\n\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n } // no bubbling and not fallback\n\n\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted\n\n\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n } // Call when dragEl has been inserted\n\n\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n\n ignoreNextClick = false;\n\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n\n if (revert) {\n parentEl = rootEl; // actualization\n\n capture();\n\n this._hideClone();\n\n dragOverEvent('revert');\n\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n\n return completed(true);\n }\n\n var elLastChild = lastChild(el, options.draggable);\n\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n } // if there is a last element, it is the target\n\n\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n\n if (target) {\n targetRect = getRect(target);\n }\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n el.appendChild(dragEl);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n\n if (firstChild === dragEl) {\n return completed(false);\n }\n\n target = firstChild;\n targetRect = getRect(target);\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n } // If dragEl is already beside target: Do not insert\n\n\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n } // Undo chrome's scroll adjustment (has no effect on other browsers)\n\n\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n\n parentEl = dragEl.parentNode; // actualization\n // must be done before animation\n\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n\n changed();\n return completed(true);\n }\n }\n\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop(\n /**Event*/\n evt) {\n var el = this.el,\n options = this.options; // Get the index of the dragged element within its parent\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode; // Get again after plugin event\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n if (Sortable.eventCanceled) {\n this._nulling();\n\n return;\n }\n\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n\n _cancelNextTick(this.cloneId);\n\n _cancelNextTick(this._dragStartId); // Unbind events\n\n\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n\n this._offMoveEvents();\n\n this._offUpEvents();\n\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n\n css(dragEl, 'transform', '');\n\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n\n _disableDraggable(dragEl);\n\n dragEl.style['will-change'] = ''; // Remove classes\n // ghostClass is added in dragStarted\n\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n\n toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event\n\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n }); // Remove event\n\n\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n }); // drag from one list and drop into another\n\n\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n }); // Save sorting\n\n\n this.save();\n }\n }\n }\n\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent(\n /**Event*/\n evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n\n break;\n\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n\n _globalDragOver(evt);\n }\n\n break;\n\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n\n /**\n * Serializes the item into an array of string.\n * @returns {String[]}\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n\n for (; i < n; i++) {\n el = children[i];\n\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n\n return order;\n },\n\n /**\n * Sorts the elements according to the array.\n * @param {String[]} order order of the items\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n\n /**\n * Save the current sorting\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n\n /**\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n * @param {HTMLElement} el\n * @param {String} [selector] default: `options.draggable`\n * @returns {HTMLElement|null}\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n\n /**\n * Set/get option\n * @param {string} name\n * @param {*} [value]\n * @returns {*}\n */\n option: function option(name, value) {\n var options = this.options;\n\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n\n /**\n * Destroy\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n } // Remove draggable attributes\n\n\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n\n this._onDrop();\n\n this._disableDelayedDragEvents();\n\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n\n return;\n }\n\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return; // show clone at dragEl or original position\n\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\n\nfunction _globalDragOver(\n/**Event*/\nevt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n\n evt.cancelable && evt.preventDefault();\n}\n\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal; // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n\n return retVal;\n}\n\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\n\nfunction _unsilent() {\n _silent = false;\n}\n\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var rect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var spacer = 10;\n return vertical ? evt.clientX < rect.left - spacer || evt.clientY < rect.top && evt.clientX < rect.right : evt.clientY < rect.top - spacer || evt.clientY < rect.bottom && evt.clientX < rect.left;\n}\n\nfunction _ghostIsLast(evt, vertical, sortable) {\n var rect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var spacer = 10;\n return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer;\n}\n\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n\n invert = invert || invertSwap;\n\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n\n return 0;\n}\n/**\n * Gets the direction dragEl must be swapped relative to target in order to make it\n * seem that dragEl has been \"inserted\" into that element's position\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\n * @return {Number} Direction dragEl must be swapped\n */\n\n\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n/**\n * Generate id\n * @param {HTMLElement} el\n * @returns {String}\n * @private\n */\n\n\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n\n while (i--) {\n sum += str.charCodeAt(i);\n }\n\n return sum.toString(36);\n}\n\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\n\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\n\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n} // Fixed #973:\n\n\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n} // Export utils\n\n\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild\n};\n/**\n * Get the Sortable instance of an element\n * @param {HTMLElement} element The element\n * @return {Sortable|undefined} The instance of Sortable\n */\n\nSortable.get = function (element) {\n return element[expando];\n};\n/**\n * Mount a plugin to Sortable\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\n */\n\n\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n/**\n * Create sortable instance\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n\n\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n}; // Export\n\n\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\n\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n }; // Bind all private methods\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt; // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change\n\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour\n\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\n\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\n\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\n\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn; // New scroll root, set scrollEl\n\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n\n var layersOut = 0;\n var currentParent = scrollEl;\n\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n\n }\n\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\n\nfunction Revert() {}\n\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n\n this.sortable.animateAll();\n\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\n\nfunction Remove() {}\n\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\n\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\n\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\nmultiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\nfolding = false,\n // Folding any other time\ndragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\n\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n\n dataTransfer.setData('Text', data);\n }\n };\n }\n\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n\n sortable._hideClone();\n\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n }); // Sort multi-drag elements\n\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n sortable.captureAnimationState();\n\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n } // Remove all auxiliary multidrag items from el, if sorting enabled\n\n\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n\n initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location\n\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n\n\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n\n activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden\n\n\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children; // Multi-drag selection\n\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvt: evt\n }); // Modifier activated, select from last to dragEl\n\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvt: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvt: evt\n });\n }\n } // Multi-drag drop\n\n\n if (dragStarted && this.isMultiDrag) {\n folding = false; // Do not \"unfold\" after around dragEl if reverted\n\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect; // Prepare unfold animation\n\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n } // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n\n\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n\n multiDragIndex++;\n }); // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n\n if (update) {\n dispatchSortableEvent('update');\n }\n }\n } // Must be done after capturing individual rects (scroll bar)\n\n\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n\n multiDragSortable = toSortable;\n } // Remove clones if necessary\n\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return; // Only deselect if selection is in this sortable\n\n if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable\n\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click\n\n if (evt && evt.button !== 0) return;\n\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvt: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\n * Selects the provided multi-drag item\n * @param {HTMLElement} el The element to be selected\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n\n multiDragSortable = sortable;\n }\n\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n\n /**\n * Deselects the provided multi-drag item\n * @param {HTMLElement} el The element to be deselected\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n }); // multiDragElements will already be sorted if folding\n\n var newIndex;\n\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n\n return key;\n }\n }\n });\n}\n\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n/**\n * Insert multi-drag clones\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\n * @param {HTMLElement} rootEl\n */\n\n\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\n\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"vue\"), require(\"sortablejs\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([, \"sortablejs\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"vuedraggable\"] = factory(require(\"vue\"), require(\"sortablejs\"));\n\telse\n\t\troot[\"vuedraggable\"] = factory(root[\"Vue\"], root[\"Sortable\"]);\n})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__8bbf__, __WEBPACK_EXTERNAL_MODULE_a352__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = \"fb15\");\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ \"00ee\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(\"b622\");\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n\n\n/***/ }),\n\n/***/ \"0366\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar aFunction = __webpack_require__(\"1c0b\");\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 0: return function () {\n return fn.call(that);\n };\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n\n\n/***/ }),\n\n/***/ \"057f\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toIndexedObject = __webpack_require__(\"fc6a\");\nvar nativeGetOwnPropertyNames = __webpack_require__(\"241c\").f;\n\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return nativeGetOwnPropertyNames(it);\n } catch (error) {\n return windowNames.slice();\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]'\n ? getWindowNames(it)\n : nativeGetOwnPropertyNames(toIndexedObject(it));\n};\n\n\n/***/ }),\n\n/***/ \"06cf\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(\"83ab\");\nvar propertyIsEnumerableModule = __webpack_require__(\"d1e7\");\nvar createPropertyDescriptor = __webpack_require__(\"5c6c\");\nvar toIndexedObject = __webpack_require__(\"fc6a\");\nvar toPrimitive = __webpack_require__(\"c04e\");\nvar has = __webpack_require__(\"5135\");\nvar IE8_DOM_DEFINE = __webpack_require__(\"0cfb\");\n\nvar nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return nativeGetOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n\n\n/***/ }),\n\n/***/ \"0cfb\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(\"83ab\");\nvar fails = __webpack_require__(\"d039\");\nvar createElement = __webpack_require__(\"cc12\");\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n\n\n/***/ }),\n\n/***/ \"13d5\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(\"23e7\");\nvar $reduce = __webpack_require__(\"d58f\").left;\nvar arrayMethodIsStrict = __webpack_require__(\"a640\");\nvar arrayMethodUsesToLength = __webpack_require__(\"ae40\");\n\nvar STRICT_METHOD = arrayMethodIsStrict('reduce');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('reduce', { 1: 0 });\n\n// `Array.prototype.reduce` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.reduce\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH }, {\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n\n/***/ }),\n\n/***/ \"14c3\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar classof = __webpack_require__(\"c6b6\");\nvar regexpExec = __webpack_require__(\"9263\");\n\n// `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n\n if (classof(R) !== 'RegExp') {\n throw TypeError('RegExp#exec called on incompatible receiver');\n }\n\n return regexpExec.call(R, S);\n};\n\n\n\n/***/ }),\n\n/***/ \"159b\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(\"da84\");\nvar DOMIterables = __webpack_require__(\"fdbc\");\nvar forEach = __webpack_require__(\"17c2\");\nvar createNonEnumerableProperty = __webpack_require__(\"9112\");\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n } catch (error) {\n CollectionPrototype.forEach = forEach;\n }\n}\n\n\n/***/ }),\n\n/***/ \"17c2\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $forEach = __webpack_require__(\"b727\").forEach;\nvar arrayMethodIsStrict = __webpack_require__(\"a640\");\nvar arrayMethodUsesToLength = __webpack_require__(\"ae40\");\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.github.io/ecma262/#sec-array.prototype.foreach\nmodule.exports = (!STRICT_METHOD || !USES_TO_LENGTH) ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n} : [].forEach;\n\n\n/***/ }),\n\n/***/ \"1be4\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar getBuiltIn = __webpack_require__(\"d066\");\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n\n\n/***/ }),\n\n/***/ \"1c0b\":\n/***/ (function(module, exports) {\n\nmodule.exports = function (it) {\n if (typeof it != 'function') {\n throw TypeError(String(it) + ' is not a function');\n } return it;\n};\n\n\n/***/ }),\n\n/***/ \"1c7e\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(\"b622\");\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line no-throw-literal\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n\n\n/***/ }),\n\n/***/ \"1d80\":\n/***/ (function(module, exports) {\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.github.io/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n\n\n/***/ }),\n\n/***/ \"1dde\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar fails = __webpack_require__(\"d039\");\nvar wellKnownSymbol = __webpack_require__(\"b622\");\nvar V8_VERSION = __webpack_require__(\"2d00\");\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n\n\n/***/ }),\n\n/***/ \"23cb\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(\"a691\");\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toInteger(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n\n\n/***/ }),\n\n/***/ \"23e7\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(\"da84\");\nvar getOwnPropertyDescriptor = __webpack_require__(\"06cf\").f;\nvar createNonEnumerableProperty = __webpack_require__(\"9112\");\nvar redefine = __webpack_require__(\"6eeb\");\nvar setGlobal = __webpack_require__(\"ce4e\");\nvar copyConstructorProperties = __webpack_require__(\"e893\");\nvar isForced = __webpack_require__(\"94ca\");\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty === typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n\n\n/***/ }),\n\n/***/ \"241c\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar internalObjectKeys = __webpack_require__(\"ca84\");\nvar enumBugKeys = __webpack_require__(\"7839\");\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertynames\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n\n\n/***/ }),\n\n/***/ \"25f0\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar redefine = __webpack_require__(\"6eeb\");\nvar anObject = __webpack_require__(\"825a\");\nvar fails = __webpack_require__(\"d039\");\nvar flags = __webpack_require__(\"ad6d\");\n\nvar TO_STRING = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar nativeToString = RegExpPrototype[TO_STRING];\n\nvar NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = nativeToString.name != TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.github.io/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n redefine(RegExp.prototype, TO_STRING, function toString() {\n var R = anObject(this);\n var p = String(R.source);\n var rf = R.flags;\n var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf);\n return '/' + p + '/' + f;\n }, { unsafe: true });\n}\n\n\n/***/ }),\n\n/***/ \"2ca0\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(\"23e7\");\nvar getOwnPropertyDescriptor = __webpack_require__(\"06cf\").f;\nvar toLength = __webpack_require__(\"50c4\");\nvar notARegExp = __webpack_require__(\"5a34\");\nvar requireObjectCoercible = __webpack_require__(\"1d80\");\nvar correctIsRegExpLogic = __webpack_require__(\"ab13\");\nvar IS_PURE = __webpack_require__(\"c430\");\n\nvar nativeStartsWith = ''.startsWith;\nvar min = Math.min;\n\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('startsWith');\n// https://github.com/zloirock/core-js/pull/702\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\n var descriptor = getOwnPropertyDescriptor(String.prototype, 'startsWith');\n return descriptor && !descriptor.writable;\n}();\n\n// `String.prototype.startsWith` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.startswith\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = String(requireObjectCoercible(this));\n notARegExp(searchString);\n var index = toLength(min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return nativeStartsWith\n ? nativeStartsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n\n\n/***/ }),\n\n/***/ \"2d00\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(\"da84\");\nvar userAgent = __webpack_require__(\"342f\");\n\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n version = match[0] + match[1];\n} else if (userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = match[1];\n }\n}\n\nmodule.exports = version && +version;\n\n\n/***/ }),\n\n/***/ \"342f\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar getBuiltIn = __webpack_require__(\"d066\");\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n\n\n/***/ }),\n\n/***/ \"35a1\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar classof = __webpack_require__(\"f5df\");\nvar Iterators = __webpack_require__(\"3f8c\");\nvar wellKnownSymbol = __webpack_require__(\"b622\");\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n\n\n/***/ }),\n\n/***/ \"37e8\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(\"83ab\");\nvar definePropertyModule = __webpack_require__(\"9bf2\");\nvar anObject = __webpack_require__(\"825a\");\nvar objectKeys = __webpack_require__(\"df75\");\n\n// `Object.defineProperties` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperties\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);\n return O;\n};\n\n\n/***/ }),\n\n/***/ \"3bbe\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(\"861d\");\n\nmodule.exports = function (it) {\n if (!isObject(it) && it !== null) {\n throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\n } return it;\n};\n\n\n/***/ }),\n\n/***/ \"3ca3\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar charAt = __webpack_require__(\"6547\").charAt;\nvar InternalStateModule = __webpack_require__(\"69f3\");\nvar defineIterator = __webpack_require__(\"7dd0\");\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: String(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.github.io/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: point, done: false };\n});\n\n\n/***/ }),\n\n/***/ \"3f8c\":\n/***/ (function(module, exports) {\n\nmodule.exports = {};\n\n\n/***/ }),\n\n/***/ \"4160\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(\"23e7\");\nvar forEach = __webpack_require__(\"17c2\");\n\n// `Array.prototype.forEach` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.foreach\n$({ target: 'Array', proto: true, forced: [].forEach != forEach }, {\n forEach: forEach\n});\n\n\n/***/ }),\n\n/***/ \"428f\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(\"da84\");\n\nmodule.exports = global;\n\n\n/***/ }),\n\n/***/ \"44ad\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar fails = __webpack_require__(\"d039\");\nvar classof = __webpack_require__(\"c6b6\");\n\nvar split = ''.split;\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n\n\n/***/ }),\n\n/***/ \"44d2\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(\"b622\");\nvar create = __webpack_require__(\"7c73\");\nvar definePropertyModule = __webpack_require__(\"9bf2\");\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n\n\n/***/ }),\n\n/***/ \"44e7\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(\"861d\");\nvar classof = __webpack_require__(\"c6b6\");\nvar wellKnownSymbol = __webpack_require__(\"b622\");\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.github.io/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n\n\n/***/ }),\n\n/***/ \"4930\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar fails = __webpack_require__(\"d039\");\n\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n // Chrome 38 Symbol has incorrect toString conversion\n // eslint-disable-next-line no-undef\n return !String(Symbol());\n});\n\n\n/***/ }),\n\n/***/ \"4d64\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toIndexedObject = __webpack_require__(\"fc6a\");\nvar toLength = __webpack_require__(\"50c4\");\nvar toAbsoluteIndex = __webpack_require__(\"23cb\");\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n\n\n/***/ }),\n\n/***/ \"4de4\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(\"23e7\");\nvar $filter = __webpack_require__(\"b727\").filter;\nvar arrayMethodHasSpeciesSupport = __webpack_require__(\"1dde\");\nvar arrayMethodUsesToLength = __webpack_require__(\"ae40\");\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n// Edge 14- issue\nvar USES_TO_LENGTH = arrayMethodUsesToLength('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n\n/***/ }),\n\n/***/ \"4df4\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar bind = __webpack_require__(\"0366\");\nvar toObject = __webpack_require__(\"7b0b\");\nvar callWithSafeIterationClosing = __webpack_require__(\"9bdd\");\nvar isArrayIteratorMethod = __webpack_require__(\"e95a\");\nvar toLength = __webpack_require__(\"50c4\");\nvar createProperty = __webpack_require__(\"8418\");\nvar getIteratorMethod = __webpack_require__(\"35a1\");\n\n// `Array.from` method implementation\n// https://tc39.github.io/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iteratorMethod = getIteratorMethod(O);\n var index = 0;\n var length, result, step, iterator, next, value;\n if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);\n // if the target is not iterable or it's an array with the default iterator - use a simple case\n if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) {\n iterator = iteratorMethod.call(O);\n next = iterator.next;\n result = new C();\n for (;!(step = next.call(iterator)).done; index++) {\n value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n createProperty(result, index, value);\n }\n } else {\n length = toLength(O.length);\n result = new C(length);\n for (;length > index; index++) {\n value = mapping ? mapfn(O[index], index) : O[index];\n createProperty(result, index, value);\n }\n }\n result.length = index;\n return result;\n};\n\n\n/***/ }),\n\n/***/ \"4fad\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $ = __webpack_require__(\"23e7\");\nvar $entries = __webpack_require__(\"6f53\").entries;\n\n// `Object.entries` method\n// https://tc39.github.io/ecma262/#sec-object.entries\n$({ target: 'Object', stat: true }, {\n entries: function entries(O) {\n return $entries(O);\n }\n});\n\n\n/***/ }),\n\n/***/ \"50c4\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(\"a691\");\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.github.io/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n\n\n/***/ }),\n\n/***/ \"5135\":\n/***/ (function(module, exports) {\n\nvar hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n\n\n/***/ }),\n\n/***/ \"5319\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar fixRegExpWellKnownSymbolLogic = __webpack_require__(\"d784\");\nvar anObject = __webpack_require__(\"825a\");\nvar toObject = __webpack_require__(\"7b0b\");\nvar toLength = __webpack_require__(\"50c4\");\nvar toInteger = __webpack_require__(\"a691\");\nvar requireObjectCoercible = __webpack_require__(\"1d80\");\nvar advanceStringIndex = __webpack_require__(\"8aa5\");\nvar regExpExec = __webpack_require__(\"14c3\");\n\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative, reason) {\n var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = reason.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE;\n var REPLACE_KEEPS_$0 = reason.REPLACE_KEEPS_$0;\n var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var replacer = searchValue == undefined ? undefined : searchValue[REPLACE];\n return replacer !== undefined\n ? replacer.call(searchValue, O, replaceValue)\n : nativeReplace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n if (\n (!REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE && REPLACE_KEEPS_$0) ||\n (typeof replaceValue === 'string' && replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1)\n ) {\n var res = maybeCallNative(nativeReplace, regexp, this, replaceValue);\n if (res.done) return res.value;\n }\n\n var rx = anObject(regexp);\n var S = String(this);\n\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n\n results.push(result);\n if (!global) break;\n\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return nativeReplace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n\n\n/***/ }),\n\n/***/ \"5692\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar IS_PURE = __webpack_require__(\"c430\");\nvar store = __webpack_require__(\"c6cd\");\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.6.5',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n\n\n/***/ }),\n\n/***/ \"56ef\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar getBuiltIn = __webpack_require__(\"d066\");\nvar getOwnPropertyNamesModule = __webpack_require__(\"241c\");\nvar getOwnPropertySymbolsModule = __webpack_require__(\"7418\");\nvar anObject = __webpack_require__(\"825a\");\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n\n\n/***/ }),\n\n/***/ \"5a34\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isRegExp = __webpack_require__(\"44e7\");\n\nmodule.exports = function (it) {\n if (isRegExp(it)) {\n throw TypeError(\"The method doesn't accept regular expressions\");\n } return it;\n};\n\n\n/***/ }),\n\n/***/ \"5c6c\":\n/***/ (function(module, exports) {\n\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\n\n/***/ }),\n\n/***/ \"5db7\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(\"23e7\");\nvar flattenIntoArray = __webpack_require__(\"a2bf\");\nvar toObject = __webpack_require__(\"7b0b\");\nvar toLength = __webpack_require__(\"50c4\");\nvar aFunction = __webpack_require__(\"1c0b\");\nvar arraySpeciesCreate = __webpack_require__(\"65f0\");\n\n// `Array.prototype.flatMap` method\n// https://github.com/tc39/proposal-flatMap\n$({ target: 'Array', proto: true }, {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen = toLength(O.length);\n var A;\n aFunction(callbackfn);\n A = arraySpeciesCreate(O, 0);\n A.length = flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n return A;\n }\n});\n\n\n/***/ }),\n\n/***/ \"6547\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(\"a691\");\nvar requireObjectCoercible = __webpack_require__(\"1d80\");\n\n// `String.prototype.{ codePointAt, at }` methods implementation\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = String(requireObjectCoercible($this));\n var position = toInteger(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = S.charCodeAt(position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING ? S.charAt(position) : first\n : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n\n\n/***/ }),\n\n/***/ \"65f0\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(\"861d\");\nvar isArray = __webpack_require__(\"e8b5\");\nvar wellKnownSymbol = __webpack_require__(\"b622\");\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.github.io/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return new (C === undefined ? Array : C)(length === 0 ? 0 : length);\n};\n\n\n/***/ }),\n\n/***/ \"69f3\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar NATIVE_WEAK_MAP = __webpack_require__(\"7f9a\");\nvar global = __webpack_require__(\"da84\");\nvar isObject = __webpack_require__(\"861d\");\nvar createNonEnumerableProperty = __webpack_require__(\"9112\");\nvar objectHas = __webpack_require__(\"5135\");\nvar sharedKey = __webpack_require__(\"f772\");\nvar hiddenKeys = __webpack_require__(\"d012\");\n\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP) {\n var store = new WeakMap();\n var wmget = store.get;\n var wmhas = store.has;\n var wmset = store.set;\n set = function (it, metadata) {\n wmset.call(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget.call(store, it) || {};\n };\n has = function (it) {\n return wmhas.call(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return objectHas(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return objectHas(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n\n\n/***/ }),\n\n/***/ \"6eeb\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(\"da84\");\nvar createNonEnumerableProperty = __webpack_require__(\"9112\");\nvar has = __webpack_require__(\"5135\");\nvar setGlobal = __webpack_require__(\"ce4e\");\nvar inspectSource = __webpack_require__(\"8925\");\nvar InternalStateModule = __webpack_require__(\"69f3\");\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n if (typeof value == 'function') {\n if (typeof key == 'string' && !has(value, 'name')) createNonEnumerableProperty(value, 'name', key);\n enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : '');\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return typeof this == 'function' && getInternalState(this).source || inspectSource(this);\n});\n\n\n/***/ }),\n\n/***/ \"6f53\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(\"83ab\");\nvar objectKeys = __webpack_require__(\"df75\");\nvar toIndexedObject = __webpack_require__(\"fc6a\");\nvar propertyIsEnumerable = __webpack_require__(\"d1e7\").f;\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n return function (it) {\n var O = toIndexedObject(it);\n var keys = objectKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || propertyIsEnumerable.call(O, key)) {\n result.push(TO_ENTRIES ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n\nmodule.exports = {\n // `Object.entries` method\n // https://tc39.github.io/ecma262/#sec-object.entries\n entries: createMethod(true),\n // `Object.values` method\n // https://tc39.github.io/ecma262/#sec-object.values\n values: createMethod(false)\n};\n\n\n/***/ }),\n\n/***/ \"73d9\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// this method was added to unscopables after implementation\n// in popular engines, so it's moved to a separate module\nvar addToUnscopables = __webpack_require__(\"44d2\");\n\naddToUnscopables('flatMap');\n\n\n/***/ }),\n\n/***/ \"7418\":\n/***/ (function(module, exports) {\n\nexports.f = Object.getOwnPropertySymbols;\n\n\n/***/ }),\n\n/***/ \"746f\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar path = __webpack_require__(\"428f\");\nvar has = __webpack_require__(\"5135\");\nvar wrappedWellKnownSymbolModule = __webpack_require__(\"e538\");\nvar defineProperty = __webpack_require__(\"9bf2\").f;\n\nmodule.exports = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!has(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n\n\n/***/ }),\n\n/***/ \"7839\":\n/***/ (function(module, exports) {\n\n// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n\n\n/***/ }),\n\n/***/ \"7b0b\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar requireObjectCoercible = __webpack_require__(\"1d80\");\n\n// `ToObject` abstract operation\n// https://tc39.github.io/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n\n\n/***/ }),\n\n/***/ \"7c73\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(\"825a\");\nvar defineProperties = __webpack_require__(\"37e8\");\nvar enumBugKeys = __webpack_require__(\"7839\");\nvar hiddenKeys = __webpack_require__(\"d012\");\nvar html = __webpack_require__(\"1be4\");\nvar documentCreateElement = __webpack_require__(\"cc12\");\nvar sharedKey = __webpack_require__(\"f772\");\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n /* global ActiveXObject */\n activeXDocument = document.domain && new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.github.io/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : defineProperties(result, Properties);\n};\n\n\n/***/ }),\n\n/***/ \"7dd0\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(\"23e7\");\nvar createIteratorConstructor = __webpack_require__(\"9ed3\");\nvar getPrototypeOf = __webpack_require__(\"e163\");\nvar setPrototypeOf = __webpack_require__(\"d2bb\");\nvar setToStringTag = __webpack_require__(\"d44e\");\nvar createNonEnumerableProperty = __webpack_require__(\"9112\");\nvar redefine = __webpack_require__(\"6eeb\");\nvar wellKnownSymbol = __webpack_require__(\"b622\");\nvar IS_PURE = __webpack_require__(\"c430\");\nvar Iterators = __webpack_require__(\"3f8c\");\nvar IteratorsCore = __webpack_require__(\"ae93\");\n\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {\n createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return nativeIterator.call(this); };\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);\n }\n Iterators[NAME] = defaultIterator;\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n return methods;\n};\n\n\n/***/ }),\n\n/***/ \"7f9a\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(\"da84\");\nvar inspectSource = __webpack_require__(\"8925\");\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\n\n\n/***/ }),\n\n/***/ \"825a\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(\"861d\");\n\nmodule.exports = function (it) {\n if (!isObject(it)) {\n throw TypeError(String(it) + ' is not an object');\n } return it;\n};\n\n\n/***/ }),\n\n/***/ \"83ab\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar fails = __webpack_require__(\"d039\");\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !fails(function () {\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n\n\n/***/ }),\n\n/***/ \"8418\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toPrimitive = __webpack_require__(\"c04e\");\nvar definePropertyModule = __webpack_require__(\"9bf2\");\nvar createPropertyDescriptor = __webpack_require__(\"5c6c\");\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPrimitive(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n\n\n/***/ }),\n\n/***/ \"861d\":\n/***/ (function(module, exports) {\n\nmodule.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n/***/ }),\n\n/***/ \"8875\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// addapted from the document.currentScript polyfill by Adam Miller\n// MIT license\n// source: https://github.com/amiller-gh/currentScript-polyfill\n\n// added support for Firefox https://bugzilla.mozilla.org/show_bug.cgi?id=1620505\n\n(function (root, factory) {\n if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n}(typeof self !== 'undefined' ? self : this, function () {\n function getCurrentScript () {\n var descriptor = Object.getOwnPropertyDescriptor(document, 'currentScript')\n // for chrome\n if (!descriptor && 'currentScript' in document && document.currentScript) {\n return document.currentScript\n }\n\n // for other browsers with native support for currentScript\n if (descriptor && descriptor.get !== getCurrentScript && document.currentScript) {\n return document.currentScript\n }\n \n // IE 8-10 support script readyState\n // IE 11+ & Firefox support stack trace\n try {\n throw new Error();\n }\n catch (err) {\n // Find the second match for the \"at\" string to get file src url from stack.\n var ieStackRegExp = /.*at [^(]*\\((.*):(.+):(.+)\\)$/ig,\n ffStackRegExp = /@([^@]*):(\\d+):(\\d+)\\s*$/ig,\n stackDetails = ieStackRegExp.exec(err.stack) || ffStackRegExp.exec(err.stack),\n scriptLocation = (stackDetails && stackDetails[1]) || false,\n line = (stackDetails && stackDetails[2]) || false,\n currentLocation = document.location.href.replace(document.location.hash, ''),\n pageSource,\n inlineScriptSourceRegExp,\n inlineScriptSource,\n scripts = document.getElementsByTagName('script'); // Live NodeList collection\n \n if (scriptLocation === currentLocation) {\n pageSource = document.documentElement.outerHTML;\n inlineScriptSourceRegExp = new RegExp('(?:[^\\\\n]+?\\\\n){0,' + (line - 2) + '}[^<]*<script>([\\\\d\\\\D]*?)<\\\\/script>[\\\\d\\\\D]*', 'i');\n inlineScriptSource = pageSource.replace(inlineScriptSourceRegExp, '$1').trim();\n }\n \n for (var i = 0; i < scripts.length; i++) {\n // If ready state is interactive, return the script tag\n if (scripts[i].readyState === 'interactive') {\n return scripts[i];\n }\n \n // If src matches, return the script tag\n if (scripts[i].src === scriptLocation) {\n return scripts[i];\n }\n \n // If inline source matches, return the script tag\n if (\n scriptLocation === currentLocation &&\n scripts[i].innerHTML &&\n scripts[i].innerHTML.trim() === inlineScriptSource\n ) {\n return scripts[i];\n }\n }\n \n // If no match, return null\n return null;\n }\n };\n\n return getCurrentScript\n}));\n\n\n/***/ }),\n\n/***/ \"8925\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar store = __webpack_require__(\"c6cd\");\n\nvar functionToString = Function.toString;\n\n// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper\nif (typeof store.inspectSource != 'function') {\n store.inspectSource = function (it) {\n return functionToString.call(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n\n\n/***/ }),\n\n/***/ \"8aa5\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar charAt = __webpack_require__(\"6547\").charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? charAt(S, index).length : 1);\n};\n\n\n/***/ }),\n\n/***/ \"8bbf\":\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__8bbf__;\n\n/***/ }),\n\n/***/ \"90e3\":\n/***/ (function(module, exports) {\n\nvar id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n\n\n/***/ }),\n\n/***/ \"9112\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(\"83ab\");\nvar definePropertyModule = __webpack_require__(\"9bf2\");\nvar createPropertyDescriptor = __webpack_require__(\"5c6c\");\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\n\n/***/ }),\n\n/***/ \"9263\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar regexpFlags = __webpack_require__(\"ad6d\");\nvar stickyHelpers = __webpack_require__(\"9f7f\");\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/;\n var re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n var sticky = UNSUPPORTED_Y && re.sticky;\n var flags = regexpFlags.call(re);\n var source = re.source;\n var charsAdded = 0;\n var strCopy = str;\n\n if (sticky) {\n flags = flags.replace('y', '');\n if (flags.indexOf('g') === -1) {\n flags += 'g';\n }\n\n strCopy = String(str).slice(re.lastIndex);\n // Support anchored sticky behavior.\n if (re.lastIndex > 0 && (!re.multiline || re.multiline && str[re.lastIndex - 1] !== '\\n')) {\n source = '(?: ' + source + ')';\n strCopy = ' ' + strCopy;\n charsAdded++;\n }\n // ^(? + rx + ) is needed, in combination with some str slicing, to\n // simulate the 'y' flag.\n reCopy = new RegExp('^(?:' + source + ')', flags);\n }\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n match = nativeExec.call(sticky ? reCopy : re, strCopy);\n\n if (sticky) {\n if (match) {\n match.input = match.input.slice(charsAdded);\n match[0] = match[0].slice(charsAdded);\n match.index = re.lastIndex;\n re.lastIndex += match[0].length;\n } else re.lastIndex = 0;\n } else if (UPDATES_LAST_INDEX_WRONG && match) {\n re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n\n\n/***/ }),\n\n/***/ \"94ca\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar fails = __webpack_require__(\"d039\");\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : typeof detection == 'function' ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n\n\n/***/ }),\n\n/***/ \"99af\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(\"23e7\");\nvar fails = __webpack_require__(\"d039\");\nvar isArray = __webpack_require__(\"e8b5\");\nvar isObject = __webpack_require__(\"861d\");\nvar toObject = __webpack_require__(\"7b0b\");\nvar toLength = __webpack_require__(\"50c4\");\nvar createProperty = __webpack_require__(\"8418\");\nvar arraySpeciesCreate = __webpack_require__(\"65f0\");\nvar arrayMethodHasSpeciesSupport = __webpack_require__(\"1dde\");\nvar wellKnownSymbol = __webpack_require__(\"b622\");\nvar V8_VERSION = __webpack_require__(\"2d00\");\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n var array = [];\n array[IS_CONCAT_SPREADABLE] = false;\n return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n if (!isObject(O)) return false;\n var spreadable = O[IS_CONCAT_SPREADABLE];\n return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n concat: function concat(arg) { // eslint-disable-line no-unused-vars\n var O = toObject(this);\n var A = arraySpeciesCreate(O, 0);\n var n = 0;\n var i, k, length, len, E;\n for (i = -1, length = arguments.length; i < length; i++) {\n E = i === -1 ? O : arguments[i];\n if (isConcatSpreadable(E)) {\n len = toLength(E.length);\n if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n } else {\n if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n createProperty(A, n++, E);\n }\n }\n A.length = n;\n return A;\n }\n});\n\n\n/***/ }),\n\n/***/ \"9bdd\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(\"825a\");\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n try {\n return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (error) {\n var returnMethod = iterator['return'];\n if (returnMethod !== undefined) anObject(returnMethod.call(iterator));\n throw error;\n }\n};\n\n\n/***/ }),\n\n/***/ \"9bf2\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(\"83ab\");\nvar IE8_DOM_DEFINE = __webpack_require__(\"0cfb\");\nvar anObject = __webpack_require__(\"825a\");\nvar toPrimitive = __webpack_require__(\"c04e\");\n\nvar nativeDefineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return nativeDefineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n\n\n/***/ }),\n\n/***/ \"9ed3\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar IteratorPrototype = __webpack_require__(\"ae93\").IteratorPrototype;\nvar create = __webpack_require__(\"7c73\");\nvar createPropertyDescriptor = __webpack_require__(\"5c6c\");\nvar setToStringTag = __webpack_require__(\"d44e\");\nvar Iterators = __webpack_require__(\"3f8c\");\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n\n\n/***/ }),\n\n/***/ \"9f7f\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar fails = __webpack_require__(\"d039\");\n\n// babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError,\n// so we use an intermediate function.\nfunction RE(s, f) {\n return RegExp(s, f);\n}\n\nexports.UNSUPPORTED_Y = fails(function () {\n // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\n var re = RE('a', 'y');\n re.lastIndex = 2;\n return re.exec('abcd') != null;\n});\n\nexports.BROKEN_CARET = fails(function () {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n var re = RE('^r', 'gy');\n re.lastIndex = 2;\n return re.exec('str') != null;\n});\n\n\n/***/ }),\n\n/***/ \"a2bf\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar isArray = __webpack_require__(\"e8b5\");\nvar toLength = __webpack_require__(\"50c4\");\nvar bind = __webpack_require__(\"0366\");\n\n// `FlattenIntoArray` abstract operation\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar flattenIntoArray = function (target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? bind(mapper, thisArg, 3) : false;\n var element;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n if (depth > 0 && isArray(element)) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1FFFFFFFFFFFFF) throw TypeError('Exceed the acceptable array length');\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n};\n\nmodule.exports = flattenIntoArray;\n\n\n/***/ }),\n\n/***/ \"a352\":\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_a352__;\n\n/***/ }),\n\n/***/ \"a434\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(\"23e7\");\nvar toAbsoluteIndex = __webpack_require__(\"23cb\");\nvar toInteger = __webpack_require__(\"a691\");\nvar toLength = __webpack_require__(\"50c4\");\nvar toObject = __webpack_require__(\"7b0b\");\nvar arraySpeciesCreate = __webpack_require__(\"65f0\");\nvar createProperty = __webpack_require__(\"8418\");\nvar arrayMethodHasSpeciesSupport = __webpack_require__(\"1dde\");\nvar arrayMethodUsesToLength = __webpack_require__(\"ae40\");\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('splice', { ACCESSORS: true, 0: 0, 1: 2 });\n\nvar max = Math.max;\nvar min = Math.min;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';\n\n// `Array.prototype.splice` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {\n splice: function splice(start, deleteCount /* , ...items */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var actualStart = toAbsoluteIndex(start, len);\n var argumentsLength = arguments.length;\n var insertCount, actualDeleteCount, A, k, from, to;\n if (argumentsLength === 0) {\n insertCount = actualDeleteCount = 0;\n } else if (argumentsLength === 1) {\n insertCount = 0;\n actualDeleteCount = len - actualStart;\n } else {\n insertCount = argumentsLength - 2;\n actualDeleteCount = min(max(toInteger(deleteCount), 0), len - actualStart);\n }\n if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER) {\n throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);\n }\n A = arraySpeciesCreate(O, actualDeleteCount);\n for (k = 0; k < actualDeleteCount; k++) {\n from = actualStart + k;\n if (from in O) createProperty(A, k, O[from]);\n }\n A.length = actualDeleteCount;\n if (insertCount < actualDeleteCount) {\n for (k = actualStart; k < len - actualDeleteCount; k++) {\n from = k + actualDeleteCount;\n to = k + insertCount;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1];\n } else if (insertCount > actualDeleteCount) {\n for (k = len - actualDeleteCount; k > actualStart; k--) {\n from = k + actualDeleteCount - 1;\n to = k + insertCount - 1;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n }\n for (k = 0; k < insertCount; k++) {\n O[k + actualStart] = arguments[k + 2];\n }\n O.length = len - actualDeleteCount + insertCount;\n return A;\n }\n});\n\n\n/***/ }),\n\n/***/ \"a4d3\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(\"23e7\");\nvar global = __webpack_require__(\"da84\");\nvar getBuiltIn = __webpack_require__(\"d066\");\nvar IS_PURE = __webpack_require__(\"c430\");\nvar DESCRIPTORS = __webpack_require__(\"83ab\");\nvar NATIVE_SYMBOL = __webpack_require__(\"4930\");\nvar USE_SYMBOL_AS_UID = __webpack_require__(\"fdbf\");\nvar fails = __webpack_require__(\"d039\");\nvar has = __webpack_require__(\"5135\");\nvar isArray = __webpack_require__(\"e8b5\");\nvar isObject = __webpack_require__(\"861d\");\nvar anObject = __webpack_require__(\"825a\");\nvar toObject = __webpack_require__(\"7b0b\");\nvar toIndexedObject = __webpack_require__(\"fc6a\");\nvar toPrimitive = __webpack_require__(\"c04e\");\nvar createPropertyDescriptor = __webpack_require__(\"5c6c\");\nvar nativeObjectCreate = __webpack_require__(\"7c73\");\nvar objectKeys = __webpack_require__(\"df75\");\nvar getOwnPropertyNamesModule = __webpack_require__(\"241c\");\nvar getOwnPropertyNamesExternal = __webpack_require__(\"057f\");\nvar getOwnPropertySymbolsModule = __webpack_require__(\"7418\");\nvar getOwnPropertyDescriptorModule = __webpack_require__(\"06cf\");\nvar definePropertyModule = __webpack_require__(\"9bf2\");\nvar propertyIsEnumerableModule = __webpack_require__(\"d1e7\");\nvar createNonEnumerableProperty = __webpack_require__(\"9112\");\nvar redefine = __webpack_require__(\"6eeb\");\nvar shared = __webpack_require__(\"5692\");\nvar sharedKey = __webpack_require__(\"f772\");\nvar hiddenKeys = __webpack_require__(\"d012\");\nvar uid = __webpack_require__(\"90e3\");\nvar wellKnownSymbol = __webpack_require__(\"b622\");\nvar wrappedWellKnownSymbolModule = __webpack_require__(\"e538\");\nvar defineWellKnownSymbol = __webpack_require__(\"746f\");\nvar setToStringTag = __webpack_require__(\"d44e\");\nvar InternalStateModule = __webpack_require__(\"69f3\");\nvar $forEach = __webpack_require__(\"b727\").forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\nvar WellKnownSymbolsStore = shared('wks');\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (O, P, Attributes) {\n var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n nativeDefineProperty(O, P, Attributes);\n if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n }\n} : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n var symbol = AllSymbols[tag] = nativeObjectCreate($Symbol[PROTOTYPE]);\n setInternalState(symbol, {\n type: SYMBOL,\n tag: tag,\n description: description\n });\n if (!DESCRIPTORS) symbol.description = description;\n return symbol;\n};\n\nvar isSymbol = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return Object(it) instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n anObject(O);\n var key = toPrimitive(P, true);\n anObject(Attributes);\n if (has(AllSymbols, key)) {\n if (!Attributes.enumerable) {\n if (!has(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n O[HIDDEN][key] = true;\n } else {\n if (has(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n } return setSymbolDescriptor(O, key, Attributes);\n } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n anObject(O);\n var properties = toIndexedObject(Properties);\n var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n $forEach(keys, function (key) {\n if (!DESCRIPTORS || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]);\n });\n return O;\n};\n\nvar $create = function create(O, Properties) {\n return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n var P = toPrimitive(V, true);\n var enumerable = nativePropertyIsEnumerable.call(this, P);\n if (this === ObjectPrototype && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false;\n return enumerable || !has(this, P) || !has(AllSymbols, P) || has(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n var it = toIndexedObject(O);\n var key = toPrimitive(P, true);\n if (it === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return;\n var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n if (descriptor && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) {\n descriptor.enumerable = true;\n }\n return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (!has(AllSymbols, key) && !has(hiddenKeys, key)) result.push(key);\n });\n return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(O) {\n var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (has(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype, key))) {\n result.push(AllSymbols[key]);\n }\n });\n return result;\n};\n\n// `Symbol` constructor\n// https://tc39.github.io/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor');\n var description = !arguments.length || arguments[0] === undefined ? undefined : String(arguments[0]);\n var tag = uid(description);\n var setter = function (value) {\n if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n };\n if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n return wrap(tag, description);\n };\n\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return getInternalState(this).tag;\n });\n\n redefine($Symbol, 'withoutSetter', function (description) {\n return wrap(uid(description), description);\n });\n\n propertyIsEnumerableModule.f = $propertyIsEnumerable;\n definePropertyModule.f = $defineProperty;\n getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n wrappedWellKnownSymbolModule.f = function (name) {\n return wrap(wellKnownSymbol(name), name);\n };\n\n if (DESCRIPTORS) {\n // https://github.com/tc39/proposal-Symbol-description\n nativeDefineProperty($Symbol[PROTOTYPE], 'description', {\n configurable: true,\n get: function description() {\n return getInternalState(this).description;\n }\n });\n if (!IS_PURE) {\n redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n }\n }\n}\n\n$({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n // `Symbol.for` method\n // https://tc39.github.io/ecma262/#sec-symbol.for\n 'for': function (key) {\n var string = String(key);\n if (has(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n var symbol = $Symbol(string);\n StringToSymbolRegistry[string] = symbol;\n SymbolToStringRegistry[symbol] = string;\n return symbol;\n },\n // `Symbol.keyFor` method\n // https://tc39.github.io/ecma262/#sec-symbol.keyfor\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n if (has(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n },\n useSetter: function () { USE_SETTER = true; },\n useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n // `Object.create` method\n // https://tc39.github.io/ecma262/#sec-object.create\n create: $create,\n // `Object.defineProperty` method\n // https://tc39.github.io/ecma262/#sec-object.defineproperty\n defineProperty: $defineProperty,\n // `Object.defineProperties` method\n // https://tc39.github.io/ecma262/#sec-object.defineproperties\n defineProperties: $defineProperties,\n // `Object.getOwnPropertyDescriptor` method\n // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n // `Object.getOwnPropertyNames` method\n // https://tc39.github.io/ecma262/#sec-object.getownpropertynames\n getOwnPropertyNames: $getOwnPropertyNames,\n // `Object.getOwnPropertySymbols` method\n // https://tc39.github.io/ecma262/#sec-object.getownpropertysymbols\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n$({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return getOwnPropertySymbolsModule.f(toObject(it));\n }\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.github.io/ecma262/#sec-json.stringify\nif ($stringify) {\n var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {\n var symbol = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n return $stringify([symbol]) != '[null]'\n // WebKit converts symbol values to JSON as null\n || $stringify({ a: symbol }) != '{}'\n // V8 throws on boxed symbols\n || $stringify(Object(symbol)) != '{}';\n });\n\n $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {\n // eslint-disable-next-line no-unused-vars\n stringify: function stringify(it, replacer, space) {\n var args = [it];\n var index = 1;\n var $replacer;\n while (arguments.length > index) args.push(arguments[index++]);\n $replacer = replacer;\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return $stringify.apply(null, args);\n }\n });\n}\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.github.io/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!$Symbol[PROTOTYPE][TO_PRIMITIVE]) {\n createNonEnumerableProperty($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.github.io/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n\n\n/***/ }),\n\n/***/ \"a630\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $ = __webpack_require__(\"23e7\");\nvar from = __webpack_require__(\"4df4\");\nvar checkCorrectnessOfIteration = __webpack_require__(\"1c7e\");\n\nvar INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {\n Array.from(iterable);\n});\n\n// `Array.from` method\n// https://tc39.github.io/ecma262/#sec-array.from\n$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {\n from: from\n});\n\n\n/***/ }),\n\n/***/ \"a640\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar fails = __webpack_require__(\"d039\");\n\nmodule.exports = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call,no-throw-literal\n method.call(null, argument || function () { throw 1; }, 1);\n });\n};\n\n\n/***/ }),\n\n/***/ \"a691\":\n/***/ (function(module, exports) {\n\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.github.io/ecma262/#sec-tointeger\nmodule.exports = function (argument) {\n return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n\n\n/***/ }),\n\n/***/ \"ab13\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(\"b622\");\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n var regexp = /./;\n try {\n '/./'[METHOD_NAME](regexp);\n } catch (e) {\n try {\n regexp[MATCH] = false;\n return '/./'[METHOD_NAME](regexp);\n } catch (f) { /* empty */ }\n } return false;\n};\n\n\n/***/ }),\n\n/***/ \"ac1f\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(\"23e7\");\nvar exec = __webpack_require__(\"9263\");\n\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n exec: exec\n});\n\n\n/***/ }),\n\n/***/ \"ad6d\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar anObject = __webpack_require__(\"825a\");\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.github.io/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n\n\n/***/ }),\n\n/***/ \"ae40\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(\"83ab\");\nvar fails = __webpack_require__(\"d039\");\nvar has = __webpack_require__(\"5135\");\n\nvar defineProperty = Object.defineProperty;\nvar cache = {};\n\nvar thrower = function (it) { throw it; };\n\nmodule.exports = function (METHOD_NAME, options) {\n if (has(cache, METHOD_NAME)) return cache[METHOD_NAME];\n if (!options) options = {};\n var method = [][METHOD_NAME];\n var ACCESSORS = has(options, 'ACCESSORS') ? options.ACCESSORS : false;\n var argument0 = has(options, 0) ? options[0] : thrower;\n var argument1 = has(options, 1) ? options[1] : undefined;\n\n return cache[METHOD_NAME] = !!method && !fails(function () {\n if (ACCESSORS && !DESCRIPTORS) return true;\n var O = { length: -1 };\n\n if (ACCESSORS) defineProperty(O, 1, { enumerable: true, get: thrower });\n else O[1] = 1;\n\n method.call(O, argument0, argument1);\n });\n};\n\n\n/***/ }),\n\n/***/ \"ae93\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar getPrototypeOf = __webpack_require__(\"e163\");\nvar createNonEnumerableProperty = __webpack_require__(\"9112\");\nvar has = __webpack_require__(\"5135\");\nvar wellKnownSymbol = __webpack_require__(\"b622\");\nvar IS_PURE = __webpack_require__(\"c430\");\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\nvar returnThis = function () { return this; };\n\n// `%IteratorPrototype%` object\n// https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nif (IteratorPrototype == undefined) IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nif (!IS_PURE && !has(IteratorPrototype, ITERATOR)) {\n createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n\n\n/***/ }),\n\n/***/ \"b041\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar TO_STRING_TAG_SUPPORT = __webpack_require__(\"00ee\");\nvar classof = __webpack_require__(\"f5df\");\n\n// `Object.prototype.toString` method implementation\n// https://tc39.github.io/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n\n\n/***/ }),\n\n/***/ \"b0c0\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(\"83ab\");\nvar defineProperty = __webpack_require__(\"9bf2\").f;\n\nvar FunctionPrototype = Function.prototype;\nvar FunctionPrototypeToString = FunctionPrototype.toString;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// Function instances `.name` property\n// https://tc39.github.io/ecma262/#sec-function-instances-name\nif (DESCRIPTORS && !(NAME in FunctionPrototype)) {\n defineProperty(FunctionPrototype, NAME, {\n configurable: true,\n get: function () {\n try {\n return FunctionPrototypeToString.call(this).match(nameRE)[1];\n } catch (error) {\n return '';\n }\n }\n });\n}\n\n\n/***/ }),\n\n/***/ \"b622\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(\"da84\");\nvar shared = __webpack_require__(\"5692\");\nvar has = __webpack_require__(\"5135\");\nvar uid = __webpack_require__(\"90e3\");\nvar NATIVE_SYMBOL = __webpack_require__(\"4930\");\nvar USE_SYMBOL_AS_UID = __webpack_require__(\"fdbf\");\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!has(WellKnownSymbolsStore, name)) {\n if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name];\n else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n\n\n/***/ }),\n\n/***/ \"b64b\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $ = __webpack_require__(\"23e7\");\nvar toObject = __webpack_require__(\"7b0b\");\nvar nativeKeys = __webpack_require__(\"df75\");\nvar fails = __webpack_require__(\"d039\");\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.github.io/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n keys: function keys(it) {\n return nativeKeys(toObject(it));\n }\n});\n\n\n/***/ }),\n\n/***/ \"b727\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar bind = __webpack_require__(\"0366\");\nvar IndexedObject = __webpack_require__(\"44ad\");\nvar toObject = __webpack_require__(\"7b0b\");\nvar toLength = __webpack_require__(\"50c4\");\nvar arraySpeciesCreate = __webpack_require__(\"65f0\");\n\nvar push = [].push;\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push.call(target, value); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6)\n};\n\n\n/***/ }),\n\n/***/ \"c04e\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(\"861d\");\n\n// `ToPrimitive` abstract operation\n// https://tc39.github.io/ecma262/#sec-toprimitive\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (input, PREFERRED_STRING) {\n if (!isObject(input)) return input;\n var fn, val;\n if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n\n\n/***/ }),\n\n/***/ \"c430\":\n/***/ (function(module, exports) {\n\nmodule.exports = false;\n\n\n/***/ }),\n\n/***/ \"c6b6\":\n/***/ (function(module, exports) {\n\nvar toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n\n\n/***/ }),\n\n/***/ \"c6cd\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(\"da84\");\nvar setGlobal = __webpack_require__(\"ce4e\");\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n\n\n/***/ }),\n\n/***/ \"c740\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(\"23e7\");\nvar $findIndex = __webpack_require__(\"b727\").findIndex;\nvar addToUnscopables = __webpack_require__(\"44d2\");\nvar arrayMethodUsesToLength = __webpack_require__(\"ae40\");\n\nvar FIND_INDEX = 'findIndex';\nvar SKIPS_HOLES = true;\n\nvar USES_TO_LENGTH = arrayMethodUsesToLength(FIND_INDEX);\n\n// Shouldn't skip holes\nif (FIND_INDEX in []) Array(1)[FIND_INDEX](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.findIndex` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.findindex\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES || !USES_TO_LENGTH }, {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $findIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND_INDEX);\n\n\n/***/ }),\n\n/***/ \"c8ba\":\n/***/ (function(module, exports) {\n\nvar g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n/***/ }),\n\n/***/ \"c975\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(\"23e7\");\nvar $indexOf = __webpack_require__(\"4d64\").indexOf;\nvar arrayMethodIsStrict = __webpack_require__(\"a640\");\nvar arrayMethodUsesToLength = __webpack_require__(\"ae40\");\n\nvar nativeIndexOf = [].indexOf;\n\nvar NEGATIVE_ZERO = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('indexOf');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 });\n\n// `Array.prototype.indexOf` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.indexof\n$({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || !STRICT_METHOD || !USES_TO_LENGTH }, {\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? nativeIndexOf.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n\n/***/ }),\n\n/***/ \"ca84\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar has = __webpack_require__(\"5135\");\nvar toIndexedObject = __webpack_require__(\"fc6a\");\nvar indexOf = __webpack_require__(\"4d64\").indexOf;\nvar hiddenKeys = __webpack_require__(\"d012\");\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~indexOf(result, key) || result.push(key);\n }\n return result;\n};\n\n\n/***/ }),\n\n/***/ \"caad\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(\"23e7\");\nvar $includes = __webpack_require__(\"4d64\").includes;\nvar addToUnscopables = __webpack_require__(\"44d2\");\nvar arrayMethodUsesToLength = __webpack_require__(\"ae40\");\n\nvar USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 });\n\n// `Array.prototype.includes` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true, forced: !USES_TO_LENGTH }, {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n\n\n/***/ }),\n\n/***/ \"cc12\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(\"da84\");\nvar isObject = __webpack_require__(\"861d\");\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n\n\n/***/ }),\n\n/***/ \"ce4e\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(\"da84\");\nvar createNonEnumerableProperty = __webpack_require__(\"9112\");\n\nmodule.exports = function (key, value) {\n try {\n createNonEnumerableProperty(global, key, value);\n } catch (error) {\n global[key] = value;\n } return value;\n};\n\n\n/***/ }),\n\n/***/ \"d012\":\n/***/ (function(module, exports) {\n\nmodule.exports = {};\n\n\n/***/ }),\n\n/***/ \"d039\":\n/***/ (function(module, exports) {\n\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n\n\n/***/ }),\n\n/***/ \"d066\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar path = __webpack_require__(\"428f\");\nvar global = __webpack_require__(\"da84\");\n\nvar aFunction = function (variable) {\n return typeof variable == 'function' ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])\n : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\n};\n\n\n/***/ }),\n\n/***/ \"d1e7\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar nativePropertyIsEnumerable = {}.propertyIsEnumerable;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : nativePropertyIsEnumerable;\n\n\n/***/ }),\n\n/***/ \"d28b\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar defineWellKnownSymbol = __webpack_require__(\"746f\");\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.iterator\ndefineWellKnownSymbol('iterator');\n\n\n/***/ }),\n\n/***/ \"d2bb\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(\"825a\");\nvar aPossiblePrototype = __webpack_require__(\"3bbe\");\n\n// `Object.setPrototypeOf` method\n// https://tc39.github.io/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\n setter.call(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter.call(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n\n\n/***/ }),\n\n/***/ \"d3b7\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar TO_STRING_TAG_SUPPORT = __webpack_require__(\"00ee\");\nvar redefine = __webpack_require__(\"6eeb\");\nvar toString = __webpack_require__(\"b041\");\n\n// `Object.prototype.toString` method\n// https://tc39.github.io/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n\n\n/***/ }),\n\n/***/ \"d44e\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar defineProperty = __webpack_require__(\"9bf2\").f;\nvar has = __webpack_require__(\"5135\");\nvar wellKnownSymbol = __webpack_require__(\"b622\");\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n\n\n/***/ }),\n\n/***/ \"d58f\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar aFunction = __webpack_require__(\"1c0b\");\nvar toObject = __webpack_require__(\"7b0b\");\nvar IndexedObject = __webpack_require__(\"44ad\");\nvar toLength = __webpack_require__(\"50c4\");\n\n// `Array.prototype.{ reduce, reduceRight }` methods implementation\nvar createMethod = function (IS_RIGHT) {\n return function (that, callbackfn, argumentsLength, memo) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IndexedObject(O);\n var length = toLength(O.length);\n var index = IS_RIGHT ? length - 1 : 0;\n var i = IS_RIGHT ? -1 : 1;\n if (argumentsLength < 2) while (true) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (IS_RIGHT ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.reduce` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.reduce\n left: createMethod(false),\n // `Array.prototype.reduceRight` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.reduceright\n right: createMethod(true)\n};\n\n\n/***/ }),\n\n/***/ \"d784\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// TODO: Remove from `core-js@4` since it's moved to entry points\n__webpack_require__(\"ac1f\");\nvar redefine = __webpack_require__(\"6eeb\");\nvar fails = __webpack_require__(\"d039\");\nvar wellKnownSymbol = __webpack_require__(\"b622\");\nvar regexpExec = __webpack_require__(\"9263\");\nvar createNonEnumerableProperty = __webpack_require__(\"9112\");\n\nvar SPECIES = wellKnownSymbol('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$<a>') !== '7';\n});\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n return 'a'.replace(/./, '$0') === '$0';\n})();\n\nvar REPLACE = wellKnownSymbol('replace');\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n if (/./[REPLACE]) {\n return /./[REPLACE]('a', '$0') === '';\n }\n return false;\n})();\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\nmodule.exports = function (KEY, length, exec, sham) {\n var SYMBOL = wellKnownSymbol(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n\n if (KEY === 'split') {\n // We can't use real regex here since it causes deoptimization\n // and serious performance degradation in V8\n // https://github.com/zloirock/core-js/issues/306\n re = {};\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n re.flags = '';\n re[SYMBOL] = /./[SYMBOL];\n }\n\n re.exec = function () { execCalled = true; return null; };\n\n re[SYMBOL]('');\n return !execCalled;\n });\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !(\n REPLACE_SUPPORTS_NAMED_GROUPS &&\n REPLACE_KEEPS_$0 &&\n !REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE\n )) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }, {\n REPLACE_KEEPS_$0: REPLACE_KEEPS_$0,\n REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE: REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE\n });\n var stringMethod = methods[0];\n var regexMethod = methods[1];\n\n redefine(String.prototype, KEY, stringMethod);\n redefine(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return regexMethod.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return regexMethod.call(string, this); }\n );\n }\n\n if (sham) createNonEnumerableProperty(RegExp.prototype[SYMBOL], 'sham', true);\n};\n\n\n/***/ }),\n\n/***/ \"d81d\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(\"23e7\");\nvar $map = __webpack_require__(\"b727\").map;\nvar arrayMethodHasSpeciesSupport = __webpack_require__(\"1dde\");\nvar arrayMethodUsesToLength = __webpack_require__(\"ae40\");\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n// FF49- issue\nvar USES_TO_LENGTH = arrayMethodUsesToLength('map');\n\n// `Array.prototype.map` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n\n/***/ }),\n\n/***/ \"da84\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line no-undef\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func\n Function('return this')();\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(\"c8ba\")))\n\n/***/ }),\n\n/***/ \"dbb4\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $ = __webpack_require__(\"23e7\");\nvar DESCRIPTORS = __webpack_require__(\"83ab\");\nvar ownKeys = __webpack_require__(\"56ef\");\nvar toIndexedObject = __webpack_require__(\"fc6a\");\nvar getOwnPropertyDescriptorModule = __webpack_require__(\"06cf\");\nvar createProperty = __webpack_require__(\"8418\");\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIndexedObject(object);\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n var keys = ownKeys(O);\n var result = {};\n var index = 0;\n var key, descriptor;\n while (keys.length > index) {\n descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n if (descriptor !== undefined) createProperty(result, key, descriptor);\n }\n return result;\n }\n});\n\n\n/***/ }),\n\n/***/ \"dbf1\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return console; });\nfunction getConsole() {\n if (typeof window !== \"undefined\") {\n return window.console;\n }\n\n return global.console;\n}\n\nvar console = getConsole();\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(\"c8ba\")))\n\n/***/ }),\n\n/***/ \"ddb0\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(\"da84\");\nvar DOMIterables = __webpack_require__(\"fdbc\");\nvar ArrayIteratorMethods = __webpack_require__(\"e260\");\nvar createNonEnumerableProperty = __webpack_require__(\"9112\");\nvar wellKnownSymbol = __webpack_require__(\"b622\");\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n if (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n } catch (error) {\n CollectionPrototype[ITERATOR] = ArrayValues;\n }\n if (!CollectionPrototype[TO_STRING_TAG]) {\n createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n }\n if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n } catch (error) {\n CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n }\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"df75\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar internalObjectKeys = __webpack_require__(\"ca84\");\nvar enumBugKeys = __webpack_require__(\"7839\");\n\n// `Object.keys` method\n// https://tc39.github.io/ecma262/#sec-object.keys\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n\n\n/***/ }),\n\n/***/ \"e01a\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n// `Symbol.prototype.description` getter\n// https://tc39.github.io/ecma262/#sec-symbol.prototype.description\n\nvar $ = __webpack_require__(\"23e7\");\nvar DESCRIPTORS = __webpack_require__(\"83ab\");\nvar global = __webpack_require__(\"da84\");\nvar has = __webpack_require__(\"5135\");\nvar isObject = __webpack_require__(\"861d\");\nvar defineProperty = __webpack_require__(\"9bf2\").f;\nvar copyConstructorProperties = __webpack_require__(\"e893\");\n\nvar NativeSymbol = global.Symbol;\n\nif (DESCRIPTORS && typeof NativeSymbol == 'function' && (!('description' in NativeSymbol.prototype) ||\n // Safari 12 bug\n NativeSymbol().description !== undefined\n)) {\n var EmptyStringDescriptionStore = {};\n // wrap Symbol constructor for correct work with undefined description\n var SymbolWrapper = function Symbol() {\n var description = arguments.length < 1 || arguments[0] === undefined ? undefined : String(arguments[0]);\n var result = this instanceof SymbolWrapper\n ? new NativeSymbol(description)\n // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'\n : description === undefined ? NativeSymbol() : NativeSymbol(description);\n if (description === '') EmptyStringDescriptionStore[result] = true;\n return result;\n };\n copyConstructorProperties(SymbolWrapper, NativeSymbol);\n var symbolPrototype = SymbolWrapper.prototype = NativeSymbol.prototype;\n symbolPrototype.constructor = SymbolWrapper;\n\n var symbolToString = symbolPrototype.toString;\n var native = String(NativeSymbol('test')) == 'Symbol(test)';\n var regexp = /^Symbol\\((.*)\\)[^)]+$/;\n defineProperty(symbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n var symbol = isObject(this) ? this.valueOf() : this;\n var string = symbolToString.call(symbol);\n if (has(EmptyStringDescriptionStore, symbol)) return '';\n var desc = native ? string.slice(7, -1) : string.replace(regexp, '$1');\n return desc === '' ? undefined : desc;\n }\n });\n\n $({ global: true, forced: true }, {\n Symbol: SymbolWrapper\n });\n}\n\n\n/***/ }),\n\n/***/ \"e163\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar has = __webpack_require__(\"5135\");\nvar toObject = __webpack_require__(\"7b0b\");\nvar sharedKey = __webpack_require__(\"f772\");\nvar CORRECT_PROTOTYPE_GETTER = __webpack_require__(\"e177\");\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.github.io/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectPrototype : null;\n};\n\n\n/***/ }),\n\n/***/ \"e177\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar fails = __webpack_require__(\"d039\");\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n\n\n/***/ }),\n\n/***/ \"e260\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toIndexedObject = __webpack_require__(\"fc6a\");\nvar addToUnscopables = __webpack_require__(\"44d2\");\nvar Iterators = __webpack_require__(\"3f8c\");\nvar InternalStateModule = __webpack_require__(\"69f3\");\nvar defineIterator = __webpack_require__(\"7dd0\");\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.github.io/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return { value: undefined, done: true };\n }\n if (kind == 'keys') return { value: index, done: false };\n if (kind == 'values') return { value: target[index], done: false };\n return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.github.io/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.github.io/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n/***/ }),\n\n/***/ \"e439\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $ = __webpack_require__(\"23e7\");\nvar fails = __webpack_require__(\"d039\");\nvar toIndexedObject = __webpack_require__(\"fc6a\");\nvar nativeGetOwnPropertyDescriptor = __webpack_require__(\"06cf\").f;\nvar DESCRIPTORS = __webpack_require__(\"83ab\");\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); });\nvar FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n }\n});\n\n\n/***/ }),\n\n/***/ \"e538\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(\"b622\");\n\nexports.f = wellKnownSymbol;\n\n\n/***/ }),\n\n/***/ \"e893\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar has = __webpack_require__(\"5135\");\nvar ownKeys = __webpack_require__(\"56ef\");\nvar getOwnPropertyDescriptorModule = __webpack_require__(\"06cf\");\nvar definePropertyModule = __webpack_require__(\"9bf2\");\n\nmodule.exports = function (target, source) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n\n\n/***/ }),\n\n/***/ \"e8b5\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar classof = __webpack_require__(\"c6b6\");\n\n// `IsArray` abstract operation\n// https://tc39.github.io/ecma262/#sec-isarray\nmodule.exports = Array.isArray || function isArray(arg) {\n return classof(arg) == 'Array';\n};\n\n\n/***/ }),\n\n/***/ \"e95a\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(\"b622\");\nvar Iterators = __webpack_require__(\"3f8c\");\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n\n\n/***/ }),\n\n/***/ \"f5df\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar TO_STRING_TAG_SUPPORT = __webpack_require__(\"00ee\");\nvar classofRaw = __webpack_require__(\"c6b6\");\nvar wellKnownSymbol = __webpack_require__(\"b622\");\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;\n};\n\n\n/***/ }),\n\n/***/ \"f772\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar shared = __webpack_require__(\"5692\");\nvar uid = __webpack_require__(\"90e3\");\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n\n\n/***/ }),\n\n/***/ \"fb15\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js\n// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n var currentScript = window.document.currentScript\n if (true) {\n var getCurrentScript = __webpack_require__(\"8875\")\n currentScript = getCurrentScript()\n\n // for backward compatibility, because previously we directly included the polyfill\n if (!('currentScript' in document)) {\n Object.defineProperty(document, 'currentScript', { get: getCurrentScript })\n }\n }\n\n var src = currentScript && currentScript.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/)\n if (src) {\n __webpack_require__.p = src[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\n/* harmony default export */ var setPublicPath = (null);\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.concat.js\nvar es_array_concat = __webpack_require__(\"99af\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.filter.js\nvar es_array_filter = __webpack_require__(\"4de4\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.for-each.js\nvar es_array_for_each = __webpack_require__(\"4160\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.index-of.js\nvar es_array_index_of = __webpack_require__(\"c975\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.map.js\nvar es_array_map = __webpack_require__(\"d81d\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.splice.js\nvar es_array_splice = __webpack_require__(\"a434\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom-collections.for-each.js\nvar web_dom_collections_for_each = __webpack_require__(\"159b\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.symbol.js\nvar es_symbol = __webpack_require__(\"a4d3\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.object.get-own-property-descriptor.js\nvar es_object_get_own_property_descriptor = __webpack_require__(\"e439\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.object.get-own-property-descriptors.js\nvar es_object_get_own_property_descriptors = __webpack_require__(\"dbb4\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.object.keys.js\nvar es_object_keys = __webpack_require__(\"b64b\");\n\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/defineProperty.js\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/objectSpread2.js\n\n\n\n\n\n\n\n\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.symbol.description.js\nvar es_symbol_description = __webpack_require__(\"e01a\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.symbol.iterator.js\nvar es_symbol_iterator = __webpack_require__(\"d28b\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.iterator.js\nvar es_array_iterator = __webpack_require__(\"e260\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.object.to-string.js\nvar es_object_to_string = __webpack_require__(\"d3b7\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.iterator.js\nvar es_string_iterator = __webpack_require__(\"3ca3\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom-collections.iterator.js\nvar web_dom_collections_iterator = __webpack_require__(\"ddb0\");\n\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js\n\n\n\n\n\n\n\nfunction _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.from.js\nvar es_array_from = __webpack_require__(\"a630\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.slice.js\nvar es_array_slice = __webpack_require__(\"fb6a\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.function.name.js\nvar es_function_name = __webpack_require__(\"b0c0\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.to-string.js\nvar es_regexp_to_string = __webpack_require__(\"25f0\");\n\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js\n\n\n\n\n\n\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js\n\n\n\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js\n\n\n\n\n\n\n\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\n\n\n\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n// EXTERNAL MODULE: external {\"commonjs\":\"sortablejs\",\"commonjs2\":\"sortablejs\",\"amd\":\"sortablejs\",\"root\":\"Sortable\"}\nvar external_commonjs_sortablejs_commonjs2_sortablejs_amd_sortablejs_root_Sortable_ = __webpack_require__(\"a352\");\nvar external_commonjs_sortablejs_commonjs2_sortablejs_amd_sortablejs_root_Sortable_default = /*#__PURE__*/__webpack_require__.n(external_commonjs_sortablejs_commonjs2_sortablejs_amd_sortablejs_root_Sortable_);\n\n// CONCATENATED MODULE: ./src/util/htmlHelper.js\nfunction removeNode(node) {\n if (node.parentElement !== null) {\n node.parentElement.removeChild(node);\n }\n}\n\nfunction insertNodeAt(fatherNode, node, position) {\n var refNode = position === 0 ? fatherNode.children[0] : fatherNode.children[position - 1].nextSibling;\n fatherNode.insertBefore(node, refNode);\n}\n\n\n// EXTERNAL MODULE: ./src/util/console.js\nvar console = __webpack_require__(\"dbf1\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.reduce.js\nvar es_array_reduce = __webpack_require__(\"13d5\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.object.entries.js\nvar es_object_entries = __webpack_require__(\"4fad\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.exec.js\nvar es_regexp_exec = __webpack_require__(\"ac1f\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.replace.js\nvar es_string_replace = __webpack_require__(\"5319\");\n\n// CONCATENATED MODULE: ./src/util/string.js\n\n\n\nfunction cached(fn) {\n var cache = Object.create(null);\n return function cachedFn(str) {\n var hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n}\n\nvar regex = /-(\\w)/g;\nvar camelize = cached(function (str) {\n return str.replace(regex, function (_, c) {\n return c.toUpperCase();\n });\n});\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.flat-map.js\nvar es_array_flat_map = __webpack_require__(\"5db7\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.unscopables.flat-map.js\nvar es_array_unscopables_flat_map = __webpack_require__(\"73d9\");\n\n// CONCATENATED MODULE: ./src/core/sortableEvents.js\n\n\n\n\nvar manageAndEmit = [\"Start\", \"Add\", \"Remove\", \"Update\", \"End\"];\nvar emit = [\"Choose\", \"Unchoose\", \"Sort\", \"Filter\", \"Clone\"];\nvar manage = [\"Move\"];\nvar eventHandlerNames = [manage, manageAndEmit, emit].flatMap(function (events) {\n return events;\n}).map(function (evt) {\n return \"on\".concat(evt);\n});\nvar events = {\n manage: manage,\n manageAndEmit: manageAndEmit,\n emit: emit\n};\n\nfunction isReadOnly(eventName) {\n return eventHandlerNames.indexOf(eventName) !== -1;\n}\n\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.includes.js\nvar es_array_includes = __webpack_require__(\"caad\");\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.starts-with.js\nvar es_string_starts_with = __webpack_require__(\"2ca0\");\n\n// CONCATENATED MODULE: ./src/util/tags.js\n\n\nvar tags = [\"a\", \"abbr\", \"address\", \"area\", \"article\", \"aside\", \"audio\", \"b\", \"base\", \"bdi\", \"bdo\", \"blockquote\", \"body\", \"br\", \"button\", \"canvas\", \"caption\", \"cite\", \"code\", \"col\", \"colgroup\", \"data\", \"datalist\", \"dd\", \"del\", \"details\", \"dfn\", \"dialog\", \"div\", \"dl\", \"dt\", \"em\", \"embed\", \"fieldset\", \"figcaption\", \"figure\", \"footer\", \"form\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"head\", \"header\", \"hgroup\", \"hr\", \"html\", \"i\", \"iframe\", \"img\", \"input\", \"ins\", \"kbd\", \"label\", \"legend\", \"li\", \"link\", \"main\", \"map\", \"mark\", \"math\", \"menu\", \"menuitem\", \"meta\", \"meter\", \"nav\", \"noscript\", \"object\", \"ol\", \"optgroup\", \"option\", \"output\", \"p\", \"param\", \"picture\", \"pre\", \"progress\", \"q\", \"rb\", \"rp\", \"rt\", \"rtc\", \"ruby\", \"s\", \"samp\", \"script\", \"section\", \"select\", \"slot\", \"small\", \"source\", \"span\", \"strong\", \"style\", \"sub\", \"summary\", \"sup\", \"svg\", \"table\", \"tbody\", \"td\", \"template\", \"textarea\", \"tfoot\", \"th\", \"thead\", \"time\", \"title\", \"tr\", \"track\", \"u\", \"ul\", \"var\", \"video\", \"wbr\"];\n\nfunction isHtmlTag(name) {\n return tags.includes(name);\n}\n\nfunction isTransition(name) {\n return [\"transition-group\", \"TransitionGroup\"].includes(name);\n}\n\nfunction isHtmlAttribute(value) {\n return [\"id\", \"class\", \"role\", \"style\"].includes(value) || value.startsWith(\"data-\") || value.startsWith(\"aria-\") || value.startsWith(\"on\");\n}\n\n\n// CONCATENATED MODULE: ./src/core/componentBuilderHelper.js\n\n\n\n\n\n\n\n\n\n\n\n\nfunction project(entries) {\n return entries.reduce(function (res, _ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n key = _ref2[0],\n value = _ref2[1];\n\n res[key] = value;\n return res;\n }, {});\n}\n\nfunction getComponentAttributes(_ref3) {\n var $attrs = _ref3.$attrs,\n _ref3$componentData = _ref3.componentData,\n componentData = _ref3$componentData === void 0 ? {} : _ref3$componentData;\n var attributes = project(Object.entries($attrs).filter(function (_ref4) {\n var _ref5 = _slicedToArray(_ref4, 2),\n key = _ref5[0],\n _ = _ref5[1];\n\n return isHtmlAttribute(key);\n }));\n return _objectSpread2(_objectSpread2({}, attributes), componentData);\n}\n\nfunction createSortableOption(_ref6) {\n var $attrs = _ref6.$attrs,\n callBackBuilder = _ref6.callBackBuilder;\n var options = project(getValidSortableEntries($attrs));\n Object.entries(callBackBuilder).forEach(function (_ref7) {\n var _ref8 = _slicedToArray(_ref7, 2),\n eventType = _ref8[0],\n eventBuilder = _ref8[1];\n\n events[eventType].forEach(function (event) {\n options[\"on\".concat(event)] = eventBuilder(event);\n });\n });\n var draggable = \"[data-draggable]\".concat(options.draggable || \"\");\n return _objectSpread2(_objectSpread2({}, options), {}, {\n draggable: draggable\n });\n}\n\nfunction getValidSortableEntries(value) {\n return Object.entries(value).filter(function (_ref9) {\n var _ref10 = _slicedToArray(_ref9, 2),\n key = _ref10[0],\n _ = _ref10[1];\n\n return !isHtmlAttribute(key);\n }).map(function (_ref11) {\n var _ref12 = _slicedToArray(_ref11, 2),\n key = _ref12[0],\n value = _ref12[1];\n\n return [camelize(key), value];\n }).filter(function (_ref13) {\n var _ref14 = _slicedToArray(_ref13, 2),\n key = _ref14[0],\n _ = _ref14[1];\n\n return !isReadOnly(key);\n });\n}\n\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.find-index.js\nvar es_array_find_index = __webpack_require__(\"c740\");\n\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classCallCheck.js\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/createClass.js\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n// CONCATENATED MODULE: ./src/core/componentStructure.js\n\n\n\n\n\n\n\n\nvar getHtmlElementFromNode = function getHtmlElementFromNode(_ref) {\n var el = _ref.el;\n return el;\n};\n\nvar addContext = function addContext(domElement, context) {\n return domElement.__draggable_context = context;\n};\n\nvar getContext = function getContext(domElement) {\n return domElement.__draggable_context;\n};\n\nvar componentStructure_ComponentStructure = /*#__PURE__*/function () {\n function ComponentStructure(_ref2) {\n var _ref2$nodes = _ref2.nodes,\n header = _ref2$nodes.header,\n defaultNodes = _ref2$nodes.default,\n footer = _ref2$nodes.footer,\n root = _ref2.root,\n realList = _ref2.realList;\n\n _classCallCheck(this, ComponentStructure);\n\n this.defaultNodes = defaultNodes;\n this.children = [].concat(_toConsumableArray(header), _toConsumableArray(defaultNodes), _toConsumableArray(footer));\n this.externalComponent = root.externalComponent;\n this.rootTransition = root.transition;\n this.tag = root.tag;\n this.realList = realList;\n }\n\n _createClass(ComponentStructure, [{\n key: \"render\",\n value: function render(h, attributes) {\n var tag = this.tag,\n children = this.children,\n _isRootComponent = this._isRootComponent;\n var option = !_isRootComponent ? children : {\n default: function _default() {\n return children;\n }\n };\n return h(tag, attributes, option);\n }\n }, {\n key: \"updated\",\n value: function updated() {\n var defaultNodes = this.defaultNodes,\n realList = this.realList;\n defaultNodes.forEach(function (node, index) {\n addContext(getHtmlElementFromNode(node), {\n element: realList[index],\n index: index\n });\n });\n }\n }, {\n key: \"getUnderlyingVm\",\n value: function getUnderlyingVm(domElement) {\n return getContext(domElement);\n }\n }, {\n key: \"getVmIndexFromDomIndex\",\n value: function getVmIndexFromDomIndex(domIndex, element) {\n var defaultNodes = this.defaultNodes;\n var length = defaultNodes.length;\n var domChildren = element.children;\n var domElement = domChildren.item(domIndex);\n\n if (domElement === null) {\n return length;\n }\n\n var context = getContext(domElement);\n\n if (context) {\n return context.index;\n }\n\n if (length === 0) {\n return 0;\n }\n\n var firstDomListElement = getHtmlElementFromNode(defaultNodes[0]);\n\n var indexFirstDomListElement = _toConsumableArray(domChildren).findIndex(function (element) {\n return element === firstDomListElement;\n });\n\n return domIndex < indexFirstDomListElement ? 0 : length;\n }\n }, {\n key: \"_isRootComponent\",\n get: function get() {\n return this.externalComponent || this.rootTransition;\n }\n }]);\n\n return ComponentStructure;\n}();\n\n\n// EXTERNAL MODULE: external {\"commonjs\":\"vue\",\"commonjs2\":\"vue\",\"root\":\"Vue\"}\nvar external_commonjs_vue_commonjs2_vue_root_Vue_ = __webpack_require__(\"8bbf\");\n\n// CONCATENATED MODULE: ./src/core/renderHelper.js\n\n\n\n\n\n\n\n\n\nfunction getSlot(slots, key) {\n var slotValue = slots[key];\n return slotValue ? slotValue() : [];\n}\n\nfunction computeNodes(_ref) {\n var $slots = _ref.$slots,\n realList = _ref.realList,\n getKey = _ref.getKey;\n var normalizedList = realList || [];\n\n var _map = [\"header\", \"footer\"].map(function (name) {\n return getSlot($slots, name);\n }),\n _map2 = _slicedToArray(_map, 2),\n header = _map2[0],\n footer = _map2[1];\n\n var item = $slots.item;\n\n if (!item) {\n throw new Error(\"draggable element must have an item slot\");\n }\n\n var defaultNodes = normalizedList.flatMap(function (element, index) {\n return item({\n element: element,\n index: index\n }).map(function (node) {\n node.key = getKey(element);\n node.props = _objectSpread2(_objectSpread2({}, node.props || {}), {}, {\n \"data-draggable\": true\n });\n return node;\n });\n });\n\n if (defaultNodes.length !== normalizedList.length) {\n throw new Error(\"Item slot must have only one child\");\n }\n\n return {\n header: header,\n footer: footer,\n default: defaultNodes\n };\n}\n\nfunction getRootInformation(tag) {\n var transition = isTransition(tag);\n var externalComponent = !isHtmlTag(tag) && !transition;\n return {\n transition: transition,\n externalComponent: externalComponent,\n tag: externalComponent ? Object(external_commonjs_vue_commonjs2_vue_root_Vue_[\"resolveComponent\"])(tag) : transition ? external_commonjs_vue_commonjs2_vue_root_Vue_[\"TransitionGroup\"] : tag\n };\n}\n\nfunction computeComponentStructure(_ref2) {\n var $slots = _ref2.$slots,\n tag = _ref2.tag,\n realList = _ref2.realList,\n getKey = _ref2.getKey;\n var nodes = computeNodes({\n $slots: $slots,\n realList: realList,\n getKey: getKey\n });\n var root = getRootInformation(tag);\n return new componentStructure_ComponentStructure({\n nodes: nodes,\n root: root,\n realList: realList\n });\n}\n\n\n// CONCATENATED MODULE: ./src/vuedraggable.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction _emit(evtName, evtData) {\n var _this = this;\n\n Object(external_commonjs_vue_commonjs2_vue_root_Vue_[\"nextTick\"])(function () {\n return _this.$emit(evtName.toLowerCase(), evtData);\n });\n}\n\nfunction _manage(evtName) {\n var _this2 = this;\n\n return function (evtData, originalElement) {\n if (_this2.realList !== null) {\n return _this2[\"onDrag\".concat(evtName)](evtData, originalElement);\n }\n };\n}\n\nfunction _manageAndEmit(evtName) {\n var _this3 = this;\n\n var delegateCallBack = _manage.call(this, evtName);\n\n return function (evtData, originalElement) {\n delegateCallBack.call(_this3, evtData, originalElement);\n\n _emit.call(_this3, evtName, evtData);\n };\n}\n\nvar draggingElement = null;\nvar props = {\n list: {\n type: Array,\n required: false,\n default: null\n },\n modelValue: {\n type: Array,\n required: false,\n default: null\n },\n itemKey: {\n type: [String, Function],\n required: true\n },\n clone: {\n type: Function,\n default: function _default(original) {\n return original;\n }\n },\n tag: {\n type: String,\n default: \"div\"\n },\n move: {\n type: Function,\n default: null\n },\n componentData: {\n type: Object,\n required: false,\n default: null\n }\n};\nvar emits = [\"update:modelValue\", \"change\"].concat(_toConsumableArray([].concat(_toConsumableArray(events.manageAndEmit), _toConsumableArray(events.emit)).map(function (evt) {\n return evt.toLowerCase();\n})));\nvar draggableComponent = Object(external_commonjs_vue_commonjs2_vue_root_Vue_[\"defineComponent\"])({\n name: \"draggable\",\n inheritAttrs: false,\n props: props,\n emits: emits,\n data: function data() {\n return {\n error: false\n };\n },\n render: function render() {\n try {\n this.error = false;\n var $slots = this.$slots,\n $attrs = this.$attrs,\n tag = this.tag,\n componentData = this.componentData,\n realList = this.realList,\n getKey = this.getKey;\n var componentStructure = computeComponentStructure({\n $slots: $slots,\n tag: tag,\n realList: realList,\n getKey: getKey\n });\n this.componentStructure = componentStructure;\n var attributes = getComponentAttributes({\n $attrs: $attrs,\n componentData: componentData\n });\n return componentStructure.render(external_commonjs_vue_commonjs2_vue_root_Vue_[\"h\"], attributes);\n } catch (err) {\n this.error = true;\n return Object(external_commonjs_vue_commonjs2_vue_root_Vue_[\"h\"])(\"pre\", {\n style: {\n color: \"red\"\n }\n }, err.stack);\n }\n },\n created: function created() {\n if (this.list !== null && this.modelValue !== null) {\n console[\"a\" /* console */].error(\"modelValue and list props are mutually exclusive! Please set one or another.\");\n }\n },\n mounted: function mounted() {\n var _this4 = this;\n\n if (this.error) {\n return;\n }\n\n var $attrs = this.$attrs,\n $el = this.$el,\n componentStructure = this.componentStructure;\n componentStructure.updated();\n var sortableOptions = createSortableOption({\n $attrs: $attrs,\n callBackBuilder: {\n manageAndEmit: function manageAndEmit(event) {\n return _manageAndEmit.call(_this4, event);\n },\n emit: function emit(event) {\n return _emit.bind(_this4, event);\n },\n manage: function manage(event) {\n return _manage.call(_this4, event);\n }\n }\n });\n var targetDomElement = $el.nodeType === 1 ? $el : $el.parentElement;\n this._sortable = new external_commonjs_sortablejs_commonjs2_sortablejs_amd_sortablejs_root_Sortable_default.a(targetDomElement, sortableOptions);\n this.targetDomElement = targetDomElement;\n targetDomElement.__draggable_component__ = this;\n },\n updated: function updated() {\n this.componentStructure.updated();\n },\n beforeUnmount: function beforeUnmount() {\n if (this._sortable !== undefined) this._sortable.destroy();\n },\n computed: {\n realList: function realList() {\n var list = this.list;\n return list ? list : this.modelValue;\n },\n getKey: function getKey() {\n var itemKey = this.itemKey;\n\n if (typeof itemKey === \"function\") {\n return itemKey;\n }\n\n return function (element) {\n return element[itemKey];\n };\n }\n },\n watch: {\n $attrs: {\n handler: function handler(newOptionValue) {\n var _sortable = this._sortable;\n if (!_sortable) return;\n getValidSortableEntries(newOptionValue).forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n key = _ref2[0],\n value = _ref2[1];\n\n _sortable.option(key, value);\n });\n },\n deep: true\n }\n },\n methods: {\n getUnderlyingVm: function getUnderlyingVm(domElement) {\n return this.componentStructure.getUnderlyingVm(domElement) || null;\n },\n getUnderlyingPotencialDraggableComponent: function getUnderlyingPotencialDraggableComponent(htmElement) {\n //TODO check case where you need to see component children\n return htmElement.__draggable_component__;\n },\n emitChanges: function emitChanges(evt) {\n var _this5 = this;\n\n Object(external_commonjs_vue_commonjs2_vue_root_Vue_[\"nextTick\"])(function () {\n return _this5.$emit(\"change\", evt);\n });\n },\n alterList: function alterList(onList) {\n if (this.list) {\n onList(this.list);\n return;\n }\n\n var newList = _toConsumableArray(this.modelValue);\n\n onList(newList);\n this.$emit(\"update:modelValue\", newList);\n },\n spliceList: function spliceList() {\n var _arguments = arguments;\n\n var spliceList = function spliceList(list) {\n return list.splice.apply(list, _toConsumableArray(_arguments));\n };\n\n this.alterList(spliceList);\n },\n updatePosition: function updatePosition(oldIndex, newIndex) {\n var updatePosition = function updatePosition(list) {\n return list.splice(newIndex, 0, list.splice(oldIndex, 1)[0]);\n };\n\n this.alterList(updatePosition);\n },\n getRelatedContextFromMoveEvent: function getRelatedContextFromMoveEvent(_ref3) {\n var to = _ref3.to,\n related = _ref3.related;\n var component = this.getUnderlyingPotencialDraggableComponent(to);\n\n if (!component) {\n return {\n component: component\n };\n }\n\n var list = component.realList;\n var context = {\n list: list,\n component: component\n };\n\n if (to !== related && list) {\n var destination = component.getUnderlyingVm(related) || {};\n return _objectSpread2(_objectSpread2({}, destination), context);\n }\n\n return context;\n },\n getVmIndexFromDomIndex: function getVmIndexFromDomIndex(domIndex) {\n return this.componentStructure.getVmIndexFromDomIndex(domIndex, this.targetDomElement);\n },\n onDragStart: function onDragStart(evt) {\n this.context = this.getUnderlyingVm(evt.item);\n evt.item._underlying_vm_ = this.clone(this.context.element);\n draggingElement = evt.item;\n },\n onDragAdd: function onDragAdd(evt) {\n var element = evt.item._underlying_vm_;\n\n if (element === undefined) {\n return;\n }\n\n removeNode(evt.item);\n var newIndex = this.getVmIndexFromDomIndex(evt.newIndex);\n this.spliceList(newIndex, 0, element);\n var added = {\n element: element,\n newIndex: newIndex\n };\n this.emitChanges({\n added: added\n });\n },\n onDragRemove: function onDragRemove(evt) {\n insertNodeAt(this.$el, evt.item, evt.oldIndex);\n\n if (evt.pullMode === \"clone\") {\n removeNode(evt.clone);\n return;\n }\n\n var _this$context = this.context,\n oldIndex = _this$context.index,\n element = _this$context.element;\n this.spliceList(oldIndex, 1);\n var removed = {\n element: element,\n oldIndex: oldIndex\n };\n this.emitChanges({\n removed: removed\n });\n },\n onDragUpdate: function onDragUpdate(evt) {\n removeNode(evt.item);\n insertNodeAt(evt.from, evt.item, evt.oldIndex);\n var oldIndex = this.context.index;\n var newIndex = this.getVmIndexFromDomIndex(evt.newIndex);\n this.updatePosition(oldIndex, newIndex);\n var moved = {\n element: this.context.element,\n oldIndex: oldIndex,\n newIndex: newIndex\n };\n this.emitChanges({\n moved: moved\n });\n },\n computeFutureIndex: function computeFutureIndex(relatedContext, evt) {\n if (!relatedContext.element) {\n return 0;\n }\n\n var domChildren = _toConsumableArray(evt.to.children).filter(function (el) {\n return el.style[\"display\"] !== \"none\";\n });\n\n var currentDomIndex = domChildren.indexOf(evt.related);\n var currentIndex = relatedContext.component.getVmIndexFromDomIndex(currentDomIndex);\n var draggedInList = domChildren.indexOf(draggingElement) !== -1;\n return draggedInList || !evt.willInsertAfter ? currentIndex : currentIndex + 1;\n },\n onDragMove: function onDragMove(evt, originalEvent) {\n var move = this.move,\n realList = this.realList;\n\n if (!move || !realList) {\n return true;\n }\n\n var relatedContext = this.getRelatedContextFromMoveEvent(evt);\n var futureIndex = this.computeFutureIndex(relatedContext, evt);\n\n var draggedContext = _objectSpread2(_objectSpread2({}, this.context), {}, {\n futureIndex: futureIndex\n });\n\n var sendEvent = _objectSpread2(_objectSpread2({}, evt), {}, {\n relatedContext: relatedContext,\n draggedContext: draggedContext\n });\n\n return move(sendEvent, originalEvent);\n },\n onDragEnd: function onDragEnd() {\n draggingElement = null;\n }\n }\n});\n/* harmony default export */ var vuedraggable = (draggableComponent);\n// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js\n\n\n/* harmony default export */ var entry_lib = __webpack_exports__[\"default\"] = (vuedraggable);\n\n\n\n/***/ }),\n\n/***/ \"fb6a\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(\"23e7\");\nvar isObject = __webpack_require__(\"861d\");\nvar isArray = __webpack_require__(\"e8b5\");\nvar toAbsoluteIndex = __webpack_require__(\"23cb\");\nvar toLength = __webpack_require__(\"50c4\");\nvar toIndexedObject = __webpack_require__(\"fc6a\");\nvar createProperty = __webpack_require__(\"8418\");\nvar wellKnownSymbol = __webpack_require__(\"b622\");\nvar arrayMethodHasSpeciesSupport = __webpack_require__(\"1dde\");\nvar arrayMethodUsesToLength = __webpack_require__(\"ae40\");\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('slice', { ACCESSORS: true, 0: 0, 1: 2 });\n\nvar SPECIES = wellKnownSymbol('species');\nvar nativeSlice = [].slice;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {\n slice: function slice(start, end) {\n var O = toIndexedObject(this);\n var length = toLength(O.length);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n var Constructor, result, n;\n if (isArray(O)) {\n Constructor = O.constructor;\n // cross-realm fallback\n if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) {\n Constructor = undefined;\n } else if (isObject(Constructor)) {\n Constructor = Constructor[SPECIES];\n if (Constructor === null) Constructor = undefined;\n }\n if (Constructor === Array || Constructor === undefined) {\n return nativeSlice.call(O, k, fin);\n }\n }\n result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));\n for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n }\n});\n\n\n/***/ }),\n\n/***/ \"fc6a\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = __webpack_require__(\"44ad\");\nvar requireObjectCoercible = __webpack_require__(\"1d80\");\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n\n\n/***/ }),\n\n/***/ \"fdbc\":\n/***/ (function(module, exports) {\n\n// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n\n\n/***/ }),\n\n/***/ \"fdbf\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar NATIVE_SYMBOL = __webpack_require__(\"4930\");\n\nmodule.exports = NATIVE_SYMBOL\n // eslint-disable-next-line no-undef\n && !Symbol.sham\n // eslint-disable-next-line no-undef\n && typeof Symbol.iterator == 'symbol';\n\n\n/***/ })\n\n/******/ })[\"default\"];\n});\n//# sourceMappingURL=vuedraggable.umd.js.map","<script>\nimport Draggable from 'vuedraggable';\n\nexport default {\n components: { Draggable },\n props: {\n preChatFields: {\n type: Array,\n default: () => [],\n },\n },\n emits: ['update', 'dragEnd'],\n data() {\n return {\n preChatFieldOptions: this.preChatFields,\n };\n },\n watch: {\n preChatFields() {\n this.preChatFieldOptions = this.preChatFields;\n },\n },\n methods: {\n isFieldEditable(item) {\n return !item.enabled;\n },\n handlePreChatFieldOptions(event, type, item) {\n this.$emit('update', event, type, item);\n },\n onDragEnd() {\n this.$emit('dragEnd', this.preChatFieldOptions);\n },\n },\n};\n</script>\n\n<template>\n <Draggable\n v-model=\"preChatFieldOptions\"\n tag=\"tbody\"\n item-key=\"name\"\n @end=\"onDragEnd\"\n >\n <template #item=\"{ element: item }\">\n <tr>\n <td class=\"pre-chat-field\"><fluent-icon icon=\"drag\" /></td>\n <td class=\"pre-chat-field\">\n <woot-switch\n :model-value=\"item['enabled']\"\n @input=\"handlePreChatFieldOptions($event, 'enabled', item)\"\n />\n </td>\n <td\n class=\"pre-chat-field\"\n :class=\"{ 'disabled-text': !item['enabled'] }\"\n >\n {{ item.name }}\n </td>\n <td\n class=\"pre-chat-field\"\n :class=\"{ 'disabled-text': !item['enabled'] }\"\n >\n {{ item.type }}\n </td>\n <td class=\"pre-chat-field\">\n <input\n v-model=\"item['required']\"\n type=\"checkbox\"\n :value=\"`${item.name}-required`\"\n :disabled=\"!item['enabled']\"\n @click=\"handlePreChatFieldOptions($event, 'required', item)\"\n />\n </td>\n <td\n class=\"pre-chat-field\"\n :class=\"{ 'disabled-text': !item['enabled'] }\"\n >\n <input\n v-model=\"item.label\"\n type=\"text\"\n :disabled=\"isFieldEditable(item)\"\n />\n </td>\n <td\n class=\"pre-chat-field\"\n :class=\"{ 'disabled-text': !item['enabled'] }\"\n >\n <input\n v-model=\"item.placeholder\"\n type=\"text\"\n :disabled=\"isFieldEditable(item)\"\n />\n </td>\n </tr>\n </template>\n </Draggable>\n</template>\n\n<style scoped lang=\"scss\">\n.pre-chat-field {\n @apply py-4 px-2 text-slate-700 dark:text-slate-100;\n\n svg {\n @apply flex items-center;\n }\n}\n.disabled-text {\n @apply text-slate-500 dark:text-slate-400;\n}\n\ntable {\n thead th {\n @apply normal-case;\n }\n input {\n @apply text-sm mb-0;\n }\n}\ncheckbox {\n @apply m-0;\n}\n</style>\n","import i18n from 'widget/i18n/index';\nconst defaultTranslations = Object.fromEntries(\n Object.entries(i18n).filter(([key]) => key.includes('en'))\n).en;\n\nexport const standardFieldKeys = {\n emailAddress: {\n key: 'EMAIL_ADDRESS',\n label: 'Email Id',\n placeholder: 'Please enter your email address',\n },\n fullName: {\n key: 'FULL_NAME',\n label: 'Full Name',\n placeholder: 'Please enter your full name',\n },\n phoneNumber: {\n key: 'PHONE_NUMBER',\n label: 'Phone Number',\n placeholder: 'Please enter your phone number',\n },\n};\n\nexport const getLabel = ({ key, label }) => {\n return defaultTranslations.PRE_CHAT_FORM.FIELDS[key]\n ? defaultTranslations.PRE_CHAT_FORM.FIELDS[key].LABEL\n : label;\n};\nexport const getPlaceHolder = ({ key, placeholder }) => {\n return defaultTranslations.PRE_CHAT_FORM.FIELDS[key]\n ? defaultTranslations.PRE_CHAT_FORM.FIELDS[key].PLACEHOLDER\n : placeholder;\n};\n\nexport const getCustomFields = ({ standardFields, customAttributes }) => {\n let customFields = [];\n const { pre_chat_fields: preChatFields } = standardFields;\n customAttributes.forEach(attribute => {\n const itemExist = preChatFields.find(\n item => item.name === attribute.attribute_key\n );\n if (!itemExist) {\n customFields.push({\n label: attribute.attribute_display_name,\n placeholder: attribute.attribute_display_name,\n name: attribute.attribute_key,\n type: attribute.attribute_display_type,\n values: attribute.attribute_values,\n field_type: attribute.attribute_model,\n regex_pattern: attribute.regex_pattern,\n regex_cue: attribute.regex_cue,\n required: false,\n enabled: false,\n });\n }\n });\n return customFields;\n};\n\nexport const getFormattedPreChatFields = ({ preChatFields }) => {\n return preChatFields.map(item => {\n return {\n ...item,\n label: getLabel({\n key: item.name,\n label: item.label ? item.label : item.name,\n }),\n placeholder: getPlaceHolder({\n key: item.name,\n placeholder: item.placeholder ? item.placeholder : item.name,\n }),\n };\n });\n};\n\nexport const getPreChatFields = ({\n preChatFormOptions = {},\n customAttributes = [],\n}) => {\n const { pre_chat_message, pre_chat_fields } = preChatFormOptions;\n let customFields = {};\n let preChatFields = {};\n\n const formattedPreChatFields = getFormattedPreChatFields({\n preChatFields: pre_chat_fields,\n });\n\n customFields = getCustomFields({\n standardFields: { pre_chat_fields: formattedPreChatFields },\n customAttributes,\n });\n preChatFields = [...formattedPreChatFields, ...customFields];\n\n return {\n pre_chat_message,\n pre_chat_fields: preChatFields,\n };\n};\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\nimport PreChatFields from './PreChatFields.vue';\nimport { getPreChatFields, standardFieldKeys } from 'dashboard/helper/preChat';\nimport WootMessageEditor from 'dashboard/components/widgets/WootWriter/Editor.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n PreChatFields,\n WootMessageEditor,\n NextButton,\n },\n props: {\n inbox: {\n type: Object,\n default: () => ({}),\n },\n },\n data() {\n return {\n preChatFormEnabled: false,\n preChatMessage: '',\n preChatFields: [],\n };\n },\n computed: {\n ...mapGetters({\n uiFlags: 'inboxes/getUIFlags',\n customAttributes: 'attributes/getAttributes',\n }),\n preChatFieldOptions() {\n const { pre_chat_form_options: preChatFormOptions } = this.inbox;\n return getPreChatFields({\n preChatFormOptions,\n customAttributes: this.customAttributes,\n });\n },\n },\n watch: {\n inbox() {\n this.setDefaults();\n },\n },\n mounted() {\n this.setDefaults();\n },\n methods: {\n setDefaults() {\n const { pre_chat_form_enabled: preChatFormEnabled } = this.inbox;\n this.preChatFormEnabled = preChatFormEnabled;\n const {\n pre_chat_message: preChatMessage,\n pre_chat_fields: preChatFields,\n } = this.preChatFieldOptions || {};\n this.preChatMessage = preChatMessage;\n this.preChatFields = preChatFields;\n },\n isFieldEditable(item) {\n return !!standardFieldKeys[item.name] || !item.enabled;\n },\n handlePreChatFieldOptions(event, type, item) {\n this.preChatFields.forEach((field, index) => {\n if (field.name === item.name) {\n this.preChatFields[index][type] = !item[type];\n }\n });\n },\n\n changePreChatFieldFieldsOrder(updatedPreChatFieldOptions) {\n this.preChatFields = updatedPreChatFieldOptions;\n },\n\n async updateInbox() {\n try {\n const payload = {\n id: this.inbox.id,\n formData: false,\n channel: {\n pre_chat_form_enabled: this.preChatFormEnabled,\n pre_chat_form_options: {\n pre_chat_message: this.preChatMessage,\n pre_chat_fields: this.preChatFields,\n },\n },\n };\n await this.$store.dispatch('inboxes/updateInbox', payload);\n useAlert(this.$t('INBOX_MGMT.EDIT.API.SUCCESS_MESSAGE'));\n } catch (error) {\n useAlert(this.$t('INBOX_MGMT.EDIT.API.SUCCESS_MESSAGE'));\n }\n },\n },\n};\n</script>\n\n<template>\n <div class=\"mx-8 my-2 text-base\">\n <div class=\"mx-0 mt-6 mb-3\">\n {{ $t('INBOX_MGMT.PRE_CHAT_FORM.DESCRIPTION') }}\n </div>\n <form class=\"flex flex-col\" @submit.prevent=\"updateInbox\">\n <label class=\"w-1/4\">\n {{ $t('INBOX_MGMT.PRE_CHAT_FORM.ENABLE.LABEL') }}\n <select v-model=\"preChatFormEnabled\">\n <option :value=\"true\">\n {{ $t('INBOX_MGMT.PRE_CHAT_FORM.ENABLE.OPTIONS.ENABLED') }}\n </option>\n <option :value=\"false\">\n {{ $t('INBOX_MGMT.PRE_CHAT_FORM.ENABLE.OPTIONS.DISABLED') }}\n </option>\n </select>\n </label>\n <div v-if=\"preChatFormEnabled\">\n <div>\n <label>\n {{ $t('INBOX_MGMT.PRE_CHAT_FORM.PRE_CHAT_MESSAGE.LABEL') }}\n </label>\n <WootMessageEditor\n v-model=\"preChatMessage\"\n class=\"message-editor\"\n :placeholder=\"\n $t('INBOX_MGMT.PRE_CHAT_FORM.PRE_CHAT_MESSAGE.PLACEHOLDER')\n \"\n />\n </div>\n <div class=\"mt-4\">\n <label>{{ $t('INBOX_MGMT.PRE_CHAT_FORM.SET_FIELDS') }}</label>\n <table class=\"table w-full table-striped woot-table\">\n <thead class=\"thead-dark\">\n <tr>\n <th scope=\"col\" />\n <th scope=\"col\" />\n <th scope=\"col\">\n {{ $t('INBOX_MGMT.PRE_CHAT_FORM.SET_FIELDS_HEADER.KEY') }}\n </th>\n <th scope=\"col\">\n {{ $t('INBOX_MGMT.PRE_CHAT_FORM.SET_FIELDS_HEADER.TYPE') }}\n </th>\n <th scope=\"col\">\n {{\n $t('INBOX_MGMT.PRE_CHAT_FORM.SET_FIELDS_HEADER.REQUIRED')\n }}\n </th>\n <th scope=\"col\">\n {{ $t('INBOX_MGMT.PRE_CHAT_FORM.SET_FIELDS_HEADER.LABEL') }}\n </th>\n <th scope=\"col\">\n {{\n $t(\n 'INBOX_MGMT.PRE_CHAT_FORM.SET_FIELDS_HEADER.PLACE_HOLDER'\n )\n }}\n </th>\n </tr>\n </thead>\n <PreChatFields\n :pre-chat-fields=\"preChatFields\"\n @update=\"handlePreChatFieldOptions\"\n @drag-end=\"changePreChatFieldFieldsOrder\"\n />\n </table>\n </div>\n </div>\n <div class=\"w-auto my-4\">\n <NextButton\n type=\"submit\"\n :label=\"$t('INBOX_MGMT.SETTINGS_POPUP.UPDATE_PRE_CHAT_FORM_SETTINGS')\"\n :is-loading=\"uiFlags.isUpdating\"\n />\n </div>\n </form>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.message-editor {\n @apply px-3;\n\n ::v-deep {\n .ProseMirror-menubar {\n @apply rounded-tl-[4px];\n }\n }\n}\n</style>\n","<script>\nimport parse from 'date-fns/parse';\nimport differenceInMinutes from 'date-fns/differenceInMinutes';\nimport { generateTimeSlots } from '../helpers/businessHour';\n\nconst timeSlots = generateTimeSlots(30);\n\nexport default {\n components: {},\n props: {\n dayName: {\n type: String,\n required: true,\n },\n timeSlot: {\n type: Object,\n default: () => ({\n from: '',\n to: '',\n }),\n },\n },\n emits: ['update'],\n computed: {\n fromTimeSlots() {\n return timeSlots;\n },\n toTimeSlots() {\n return timeSlots.filter(slot => {\n return slot !== '12:00 AM';\n });\n },\n isDayEnabled: {\n get() {\n return Boolean(this.timeSlot.from && this.timeSlot.to);\n },\n set(value) {\n const newSlot = value\n ? {\n ...this.timeSlot,\n from: timeSlots[0],\n to: timeSlots[16],\n valid: true,\n openAllDay: false,\n }\n : {\n ...this.timeSlot,\n from: '',\n to: '',\n valid: false,\n openAllDay: false,\n };\n this.$emit('update', newSlot);\n },\n },\n fromTime: {\n get() {\n return this.timeSlot.from;\n },\n set(value) {\n const fromDate = parse(value, 'hh:mm a', new Date());\n const valid = differenceInMinutes(this.toDate, fromDate) / 60 > 0;\n this.$emit('update', {\n ...this.timeSlot,\n from: value,\n valid,\n });\n },\n },\n toTime: {\n get() {\n return this.timeSlot.to;\n },\n set(value) {\n const toDate = parse(value, 'hh:mm a', new Date());\n if (value === '12:00 AM') {\n this.$emit('update', {\n ...this.timeSlot,\n to: value,\n valid: true,\n });\n } else {\n const valid = differenceInMinutes(toDate, this.fromDate) / 60 > 0;\n this.$emit('update', {\n ...this.timeSlot,\n to: value,\n valid,\n });\n }\n },\n },\n fromDate() {\n return parse(this.fromTime, 'hh:mm a', new Date());\n },\n toDate() {\n return parse(this.toTime, 'hh:mm a', new Date());\n },\n totalHours() {\n if (this.timeSlot.openAllDay) {\n return 24;\n }\n const totalHours = differenceInMinutes(this.toDate, this.fromDate) / 60;\n return totalHours;\n },\n hasError() {\n return !this.timeSlot.valid;\n },\n isOpenAllDay: {\n get() {\n return this.timeSlot.openAllDay;\n },\n set(value) {\n if (value) {\n this.$emit('update', {\n ...this.timeSlot,\n from: '12:00 AM',\n to: '11:59 PM',\n valid: true,\n openAllDay: value,\n });\n } else {\n this.$emit('update', {\n ...this.timeSlot,\n from: '09:00 AM',\n to: '05:00 PM',\n valid: true,\n openAllDay: value,\n });\n }\n },\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"day-wrap flex py-2 gap-1 items-center px-0 min-h-[3rem] box-content border-b border-solid border-n-weak\"\n >\n <div class=\"checkbox-wrap flex items-center\">\n <input\n v-model=\"isDayEnabled\"\n name=\"enable-day\"\n class=\"m-0\"\n type=\"checkbox\"\n :title=\"$t('INBOX_MGMT.BUSINESS_HOURS.DAY.ENABLE')\"\n />\n </div>\n <div\n class=\"day flex items-center py-0 px-3 text-sm font-medium flex-shrink-0 min-w-28\"\n >\n <span>{{ dayName }}</span>\n </div>\n <div\n v-if=\"isDayEnabled\"\n class=\"flex flex-col flex-shrink-0 flex-grow relative\"\n >\n <div class=\"flex items-center flex-shrink-0 flex-grow\">\n <div class=\"checkbox-wrap flex items-center open-all-day mr-6\">\n <input\n v-model=\"isOpenAllDay\"\n name=\"enable-open-all-day\"\n class=\"enable-checkbox text-sm font-medium\"\n type=\"checkbox\"\n :title=\"$t('INBOX_MGMT.BUSINESS_HOURS.ALL_DAY')\"\n />\n <span class=\"text-sm font-medium ml-1\">{{\n $t('INBOX_MGMT.BUSINESS_HOURS.ALL_DAY')\n }}</span>\n </div>\n <multiselect\n v-model=\"fromTime\"\n :options=\"fromTimeSlots\"\n deselect-label=\"\"\n select-label=\"\"\n selected-label=\"\"\n :placeholder=\"$t('INBOX_MGMT.BUSINESS_HOURS.DAY.CHOOSE')\"\n :allow-empty=\"false\"\n :disabled=\"isOpenAllDay\"\n />\n <div class=\"separator-icon flex items-center py-0 px-3\">\n <fluent-icon icon=\"subtract\" type=\"solid\" size=\"16\" />\n </div>\n <multiselect\n v-model=\"toTime\"\n :options=\"toTimeSlots\"\n deselect-label=\"\"\n select-label=\"\"\n selected-label=\"\"\n :placeholder=\"$t('INBOX_MGMT.BUSINESS_HOURS.DAY.CHOOSE')\"\n :allow-empty=\"false\"\n :disabled=\"isOpenAllDay\"\n />\n </div>\n <div v-if=\"hasError\" class=\"date-error pt-1\">\n <span class=\"error text-xs text-red-300 dark:text-red-500\">{{\n $t('INBOX_MGMT.BUSINESS_HOURS.DAY.VALIDATION_ERROR')\n }}</span>\n </div>\n </div>\n <div\n v-else\n class=\"flex items-center flex-shrink-0 flex-grow text-sm text-slate-500 dark:text-slate-300\"\n >\n <span>\n {{ $t('INBOX_MGMT.BUSINESS_HOURS.DAY.UNAVAILABLE') }}\n </span>\n </div>\n <div>\n <span\n v-if=\"isDayEnabled && !hasError\"\n class=\"label bg-n-brand/10 dark:bg-n-brand/30 text-n-blue-text text-xs inline-block px-2 py-1 rounded-lg cursor-default whitespace-nowrap\"\n >\n {{ totalHours }} {{ $t('INBOX_MGMT.BUSINESS_HOURS.DAY.HOURS') }}\n </span>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.day-wrap::v-deep .multiselect {\n @apply m-0 w-[7.5rem];\n\n > .multiselect__tags {\n @apply pl-3;\n\n .multiselect__single {\n @apply text-sm leading-6 py-2 px-0;\n }\n }\n}\n</style>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\nimport inboxMixin from 'shared/mixins/inboxMixin';\nimport SettingsSection from 'dashboard/components/SettingsSection.vue';\nimport WootMessageEditor from 'dashboard/components/widgets/WootWriter/Editor.vue';\nimport BusinessDay from './BusinessDay.vue';\nimport {\n timeSlotParse,\n timeSlotTransform,\n defaultTimeSlot,\n timeZoneOptions,\n} from '../helpers/businessHour';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nconst DEFAULT_TIMEZONE = {\n label: 'Pacific Time (US & Canada) (GMT-07:00)',\n value: 'America/Los_Angeles',\n};\n\nexport default {\n components: {\n SettingsSection,\n BusinessDay,\n NextButton,\n WootMessageEditor,\n },\n mixins: [inboxMixin],\n props: {\n inbox: {\n type: Object,\n default: () => ({}),\n },\n },\n data() {\n return {\n isBusinessHoursEnabled: false,\n unavailableMessage: '',\n timeZone: DEFAULT_TIMEZONE,\n dayNames: {\n 0: 'Sunday',\n 1: 'Monday',\n 2: 'Tuesday',\n 3: 'Wednesday',\n 4: 'Thursday',\n 5: 'Friday',\n 6: 'Saturday',\n },\n timeSlots: [...defaultTimeSlot],\n };\n },\n computed: {\n ...mapGetters({ uiFlags: 'inboxes/getUIFlags' }),\n hasError() {\n if (!this.isBusinessHoursEnabled) return false;\n return this.timeSlots.filter(slot => slot.from && !slot.valid).length > 0;\n },\n timeZones() {\n return [...timeZoneOptions()];\n },\n isRichEditorEnabled() {\n if (\n this.isATwilioChannel ||\n this.isATwitterInbox ||\n this.isAFacebookInbox\n )\n return false;\n return true;\n },\n },\n watch: {\n inbox() {\n this.setDefaults();\n },\n },\n mounted() {\n this.setDefaults();\n },\n methods: {\n setDefaults() {\n const {\n working_hours_enabled: isEnabled = false,\n out_of_office_message: unavailableMessage,\n working_hours: timeSlots = [],\n timezone: timeZone,\n } = this.inbox;\n const slots = timeSlotParse(timeSlots).length\n ? timeSlotParse(timeSlots)\n : defaultTimeSlot;\n this.isBusinessHoursEnabled = isEnabled;\n this.unavailableMessage = unavailableMessage || '';\n this.timeSlots = slots;\n this.timeZone =\n this.timeZones.find(item => timeZone === item.value) ||\n DEFAULT_TIMEZONE;\n },\n onSlotUpdate(slotIndex, slotData) {\n this.timeSlots = this.timeSlots.map(item =>\n item.day === slotIndex ? slotData : item\n );\n },\n async updateInbox() {\n try {\n const payload = {\n id: this.inbox.id,\n formData: false,\n working_hours_enabled: this.isBusinessHoursEnabled,\n out_of_office_message: this.unavailableMessage,\n working_hours: timeSlotTransform(this.timeSlots),\n timezone: this.timeZone.value,\n channel: {},\n };\n await this.$store.dispatch('inboxes/updateInbox', payload);\n useAlert(this.$t('INBOX_MGMT.EDIT.API.SUCCESS_MESSAGE'));\n } catch (error) {\n useAlert(error.message || this.$t('INBOX_MGMT.EDIT.API.ERROR_MESSAGE'));\n }\n },\n },\n};\n</script>\n\n<template>\n <div class=\"mx-8\">\n <SettingsSection\n :title=\"$t('INBOX_MGMT.BUSINESS_HOURS.TITLE')\"\n :sub-title=\"$t('INBOX_MGMT.BUSINESS_HOURS.SUBTITLE')\"\n >\n <form @submit.prevent=\"updateInbox\">\n <label for=\"toggle-business-hours\" class=\"toggle-input-wrap\">\n <input\n v-model=\"isBusinessHoursEnabled\"\n type=\"checkbox\"\n class=\"ltr:mr-2 rtl:ml-2\"\n name=\"toggle-business-hours\"\n />\n {{ $t('INBOX_MGMT.BUSINESS_HOURS.TOGGLE_AVAILABILITY') }}\n </label>\n <p class=\"mb-4 text-slate-700 dark:text-slate-300\">\n {{ $t('INBOX_MGMT.BUSINESS_HOURS.TOGGLE_HELP') }}\n </p>\n <div v-if=\"isBusinessHoursEnabled\" class=\"mb-6\">\n <div>\n <label class=\"unavailable-input-wrap\">\n {{ $t('INBOX_MGMT.BUSINESS_HOURS.UNAVAILABLE_MESSAGE_LABEL') }}\n </label>\n <div\n v-if=\"isRichEditorEnabled\"\n class=\"px-4 py-0 mx-0 mt-0 mb-4 rounded-lg outline outline-1 outline-n-weak hover:outline-n-slate-6 dark:hover:outline-n-slate-6 bg-n-alpha-black2\"\n >\n <WootMessageEditor\n v-model=\"unavailableMessage\"\n enable-variables\n is-format-mode\n :min-height=\"4\"\n />\n </div>\n <textarea v-else v-model=\"unavailableMessage\" type=\"text\" />\n </div>\n <div class=\"timezone-input-wrap\">\n <label>\n {{ $t('INBOX_MGMT.BUSINESS_HOURS.TIMEZONE_LABEL') }}\n </label>\n <multiselect\n v-model=\"timeZone\"\n :options=\"timeZones\"\n deselect-label=\"\"\n select-label=\"\"\n selected-label=\"\"\n track-by=\"value\"\n label=\"label\"\n close-on-select\n :placeholder=\"$t('INBOX_MGMT.BUSINESS_HOURS.DAY.CHOOSE')\"\n :allow-empty=\"false\"\n />\n </div>\n\n <label>\n {{ $t('INBOX_MGMT.BUSINESS_HOURS.WEEKLY_TITLE') }}\n </label>\n <BusinessDay\n v-for=\"timeSlot in timeSlots\"\n :key=\"timeSlot.day\"\n :day-name=\"dayNames[timeSlot.day]\"\n :time-slot=\"timeSlot\"\n @update=\"data => onSlotUpdate(timeSlot.day, data)\"\n />\n </div>\n <NextButton\n type=\"submit\"\n :label=\"$t('INBOX_MGMT.BUSINESS_HOURS.UPDATE')\"\n :is-loading=\"uiFlags.isUpdating\"\n :disabled=\"hasError\"\n />\n </form>\n </SettingsSection>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.timezone-input-wrap {\n &::v-deep .multiselect {\n @apply mt-2;\n }\n}\n\n::v-deep.message-editor {\n @apply border-0;\n}\n\n.unavailable-input-wrap {\n textarea {\n @apply min-h-[4rem] mt-2;\n }\n}\n</style>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\nimport SettingsSection from 'dashboard/components/SettingsSection.vue';\nimport { useVuelidate } from '@vuelidate/core';\nimport { required, minLength } from '@vuelidate/validators';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n SettingsSection,\n NextButton,\n },\n props: {\n inbox: {\n type: Object,\n default: () => ({}),\n },\n },\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n isIMAPEnabled: false,\n address: '',\n port: '',\n login: '',\n password: '',\n isSSLEnabled: true,\n };\n },\n validations: {\n address: { required },\n port: { required, minLength: minLength(2) },\n login: { required },\n password: { required },\n },\n computed: {\n ...mapGetters({ uiFlags: 'inboxes/getUIFlags' }),\n },\n watch: {\n inbox() {\n this.setDefaults();\n },\n },\n mounted() {\n this.setDefaults();\n },\n methods: {\n setDefaults() {\n const {\n imap_enabled,\n imap_address,\n imap_port,\n imap_login,\n imap_password,\n imap_enable_ssl,\n } = this.inbox;\n this.isIMAPEnabled = imap_enabled;\n this.address = imap_address;\n this.port = imap_port;\n this.login = imap_login;\n this.password = imap_password;\n this.isSSLEnabled = imap_enable_ssl;\n },\n async updateInbox() {\n try {\n this.loading = true;\n let payload = {\n id: this.inbox.id,\n formData: false,\n channel: {\n imap_enabled: this.isIMAPEnabled,\n imap_address: this.address,\n imap_port: this.port,\n imap_login: this.login,\n imap_password: this.password,\n imap_enable_ssl: this.isSSLEnabled,\n },\n };\n\n if (!this.isIMAPEnabled) {\n payload.channel.smtp_enabled = false;\n }\n\n await this.$store.dispatch('inboxes/updateInboxIMAP', payload);\n useAlert(this.$t('INBOX_MGMT.IMAP.EDIT.SUCCESS_MESSAGE'));\n } catch (error) {\n useAlert(error.message);\n }\n },\n },\n};\n</script>\n\n<template>\n <div class=\"mx-8\">\n <SettingsSection\n :title=\"$t('INBOX_MGMT.IMAP.TITLE')\"\n :sub-title=\"$t('INBOX_MGMT.IMAP.SUBTITLE')\"\n :note=\"$t('INBOX_MGMT.IMAP.NOTE_TEXT')\"\n >\n <form @submit.prevent=\"updateInbox\">\n <label for=\"toggle-imap-enable\">\n <input\n v-model=\"isIMAPEnabled\"\n type=\"checkbox\"\n class=\"ltr:mr-2 rtl:ml-2\"\n name=\"toggle-imap-enable\"\n />\n {{ $t('INBOX_MGMT.IMAP.TOGGLE_AVAILABILITY') }}\n </label>\n <p>{{ $t('INBOX_MGMT.IMAP.TOGGLE_HELP') }}</p>\n <div v-if=\"isIMAPEnabled\" class=\"mb-6\">\n <woot-input\n v-model=\"address\"\n :class=\"{ error: v$.address.$error }\"\n class=\"max-w-[75%] w-full\"\n :label=\"$t('INBOX_MGMT.IMAP.ADDRESS.LABEL')\"\n :placeholder=\"$t('INBOX_MGMT.IMAP.ADDRESS.PLACE_HOLDER')\"\n @blur=\"v$.address.$touch\"\n />\n <woot-input\n v-model=\"port\"\n type=\"number\"\n :class=\"{ error: v$.port.$error }\"\n class=\"max-w-[75%] w-full\"\n :label=\"$t('INBOX_MGMT.IMAP.PORT.LABEL')\"\n :placeholder=\"$t('INBOX_MGMT.IMAP.PORT.PLACE_HOLDER')\"\n @blur=\"v$.port.$touch\"\n />\n <woot-input\n v-model=\"login\"\n :class=\"{ error: v$.login.$error }\"\n class=\"max-w-[75%] w-full\"\n :label=\"$t('INBOX_MGMT.IMAP.LOGIN.LABEL')\"\n :placeholder=\"$t('INBOX_MGMT.IMAP.LOGIN.PLACE_HOLDER')\"\n @blur=\"v$.login.$touch\"\n />\n <woot-input\n v-model=\"password\"\n :class=\"{ error: v$.password.$error }\"\n class=\"max-w-[75%] w-full\"\n :label=\"$t('INBOX_MGMT.IMAP.PASSWORD.LABEL')\"\n :placeholder=\"$t('INBOX_MGMT.IMAP.PASSWORD.PLACE_HOLDER')\"\n type=\"password\"\n @blur=\"v$.password.$touch\"\n />\n <label for=\"toggle-enable-ssl\">\n <input\n v-model=\"isSSLEnabled\"\n type=\"checkbox\"\n class=\"ltr:mr-2 rtl:ml-2\"\n name=\"toggle-enable-ssl\"\n />\n {{ $t('INBOX_MGMT.IMAP.ENABLE_SSL') }}\n </label>\n </div>\n <NextButton\n type=\"submit\"\n :label=\"$t('INBOX_MGMT.IMAP.UPDATE')\"\n :is-loading=\"uiFlags.isUpdatingIMAP\"\n :disabled=\"(v$.$invalid && isIMAPEnabled) || uiFlags.isUpdatingIMAP\"\n />\n </form>\n </SettingsSection>\n </div>\n</template>\n","<script>\nexport default {\n props: {\n name: {\n type: String,\n default: 'string',\n },\n label: {\n type: String,\n default: '',\n },\n items: {\n type: Array,\n default: () => [],\n },\n action: {\n type: Function,\n default: () => {},\n },\n },\n};\n</script>\n\n<template>\n <div>\n <label class=\"radio-group-label\">{{ label }}</label>\n <div class=\"radio-group\">\n <div v-for=\"item in items\" :key=\"item.id\" class=\"radio-group-item\">\n <label class=\"radio-group-item-label\">\n <input\n class=\"radio-input\"\n :name=\"`${name} -radio-input`\"\n type=\"radio\"\n :checked=\"item.checked\"\n @change=\"action({ ...item, checked: true })\"\n />\n <span>{{ item.title }}</span>\n </label>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.radio-group-label {\n margin-bottom: var(--space-smaller);\n}\n.radio-group {\n display: inline-block;\n margin-bottom: var(--space-small);\n}\n.radio-group-item {\n float: left;\n margin-right: var(--space-one);\n .radio-group-item-label {\n display: flex;\n align-items: center;\n cursor: pointer;\n\n .radio-input {\n margin: 0 var(--space-one) 0 0;\n }\n }\n}\n</style>\n","<script>\nexport default {\n props: {\n label: {\n type: String,\n default: '',\n },\n options: {\n type: Array,\n default: () => [],\n },\n selected: {\n type: String,\n default: '',\n },\n action: {\n type: Function,\n default: () => {},\n },\n },\n data() {\n return {\n value: this.selected,\n };\n },\n};\n</script>\n\n<template>\n <div>\n <label for=\"dropdown-select\">\n {{ label }}\n </label>\n <select\n id=\"dropdown-select\"\n v-model=\"value\"\n name=\"dropdown-select\"\n @change=\"action(value)\"\n >\n <option v-for=\"option in options\" :key=\"option.key\">\n {{ option.value }}\n </option>\n </select>\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\nimport SettingsSection from 'dashboard/components/SettingsSection.vue';\nimport { useVuelidate } from '@vuelidate/core';\nimport { required, minLength } from '@vuelidate/validators';\nimport InputRadioGroup from './components/InputRadioGroup.vue';\nimport SingleSelectDropdown from './components/SingleSelectDropdown.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n SettingsSection,\n InputRadioGroup,\n SingleSelectDropdown,\n NextButton,\n },\n props: {\n inbox: {\n type: Object,\n default: () => ({}),\n },\n },\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n isSMTPEnabled: false,\n address: '',\n port: '',\n login: '',\n password: '',\n domain: '',\n ssl: false,\n starttls: true,\n openSSLVerifyMode: 'none',\n authMechanism: 'login',\n encryptionProtocols: [\n { id: 'ssl', title: 'SSL/TLS', checked: false },\n { id: 'starttls', title: 'STARTTLS', checked: true },\n ],\n openSSLVerifyModes: [\n { key: 1, value: 'none' },\n { key: 2, value: 'peer' },\n { key: 3, value: 'client_once' },\n { key: 4, value: 'fail_if_no_peer_cert' },\n ],\n authMechanisms: [\n { key: 1, value: 'plain' },\n { key: 2, value: 'login' },\n { key: 3, value: 'cram-md5' },\n { key: 4, value: 'xoauth' },\n { key: 5, value: 'xoauth2' },\n { key: 6, value: 'ntlm' },\n { key: 7, value: 'gssapi' },\n ],\n };\n },\n validations: {\n address: { required },\n port: {\n required,\n minLength: minLength(2),\n },\n login: { required },\n password: { required },\n domain: { required },\n },\n computed: {\n ...mapGetters({ uiFlags: 'inboxes/getUIFlags' }),\n },\n watch: {\n inbox() {\n this.setDefaults();\n },\n },\n mounted() {\n this.setDefaults();\n },\n methods: {\n setDefaults() {\n const {\n smtp_enabled,\n smtp_address,\n smtp_port,\n smtp_login,\n smtp_password,\n smtp_domain,\n smtp_enable_starttls_auto,\n smtp_enable_ssl_tls,\n smtp_openssl_verify_mode,\n smtp_authentication,\n } = this.inbox;\n this.isSMTPEnabled = smtp_enabled;\n this.address = smtp_address;\n this.port = smtp_port;\n this.login = smtp_login;\n this.password = smtp_password;\n this.domain = smtp_domain;\n this.starttls = smtp_enable_starttls_auto;\n this.ssl = smtp_enable_ssl_tls;\n this.openSSLVerifyMode = smtp_openssl_verify_mode;\n this.authMechanism = smtp_authentication;\n\n this.encryptionProtocols = [\n { id: 'ssl', title: 'SSL/TLS', checked: smtp_enable_ssl_tls },\n {\n id: 'starttls',\n title: 'STARTTLS',\n checked: smtp_enable_starttls_auto,\n },\n ];\n },\n handleEncryptionChange(encryption) {\n if (encryption.id === 'ssl') {\n this.ssl = true;\n this.starttls = false;\n } else {\n this.ssl = false;\n this.starttls = true;\n }\n },\n handleSSLModeChange(mode) {\n this.openSSLVerifyMode = mode;\n },\n handleAuthMechanismChange(mode) {\n this.authMechanism = mode;\n },\n async updateInbox() {\n try {\n const payload = {\n id: this.inbox.id,\n channel: {\n smtp_enabled: this.isSMTPEnabled,\n smtp_address: this.address,\n smtp_port: this.port,\n smtp_login: this.login,\n smtp_password: this.password,\n smtp_domain: this.domain,\n smtp_enable_ssl_tls: this.ssl,\n smtp_enable_starttls_auto: this.starttls,\n smtp_openssl_verify_mode: this.openSSLVerifyMode,\n smtp_authentication: this.authMechanism,\n },\n };\n await this.$store.dispatch('inboxes/updateInboxSMTP', payload);\n useAlert(this.$t('INBOX_MGMT.SMTP.EDIT.SUCCESS_MESSAGE'));\n } catch (error) {\n useAlert(this.$t('INBOX_MGMT.SMTP.EDIT.ERROR_MESSAGE'));\n }\n },\n },\n};\n</script>\n\n<template>\n <div class=\"mx-8\">\n <SettingsSection\n :title=\"$t('INBOX_MGMT.SMTP.TITLE')\"\n :sub-title=\"$t('INBOX_MGMT.SMTP.SUBTITLE')\"\n >\n <form @submit.prevent=\"updateInbox\">\n <label for=\"toggle-enable-smtp\">\n <input\n v-model=\"isSMTPEnabled\"\n type=\"checkbox\"\n name=\"toggle-enable-smtp\"\n />\n {{ $t('INBOX_MGMT.SMTP.TOGGLE_AVAILABILITY') }}\n </label>\n <p>{{ $t('INBOX_MGMT.SMTP.TOGGLE_HELP') }}</p>\n <div v-if=\"isSMTPEnabled\" class=\"mb-6\">\n <woot-input\n v-model=\"address\"\n :class=\"{ error: v$.address.$error }\"\n class=\"max-w-[75%] w-full\"\n :label=\"$t('INBOX_MGMT.SMTP.ADDRESS.LABEL')\"\n :placeholder=\"$t('INBOX_MGMT.SMTP.ADDRESS.PLACE_HOLDER')\"\n @blur=\"v$.address.$touch\"\n />\n <woot-input\n v-model=\"port\"\n type=\"number\"\n :class=\"{ error: v$.port.$error }\"\n class=\"max-w-[75%] w-full\"\n :label=\"$t('INBOX_MGMT.SMTP.PORT.LABEL')\"\n :placeholder=\"$t('INBOX_MGMT.SMTP.PORT.PLACE_HOLDER')\"\n @blur=\"v$.port.$touch\"\n />\n <woot-input\n v-model=\"login\"\n :class=\"{ error: v$.login.$error }\"\n class=\"max-w-[75%] w-full\"\n :label=\"$t('INBOX_MGMT.SMTP.LOGIN.LABEL')\"\n :placeholder=\"$t('INBOX_MGMT.SMTP.LOGIN.PLACE_HOLDER')\"\n @blur=\"v$.login.$touch\"\n />\n <woot-input\n v-model=\"password\"\n :class=\"{ error: v$.password.$error }\"\n class=\"max-w-[75%] w-full\"\n :label=\"$t('INBOX_MGMT.SMTP.PASSWORD.LABEL')\"\n :placeholder=\"$t('INBOX_MGMT.SMTP.PASSWORD.PLACE_HOLDER')\"\n type=\"password\"\n @blur=\"v$.password.$touch\"\n />\n <woot-input\n v-model=\"domain\"\n :class=\"{ error: v$.domain.$error }\"\n class=\"max-w-[75%] w-full\"\n :label=\"$t('INBOX_MGMT.SMTP.DOMAIN.LABEL')\"\n :placeholder=\"$t('INBOX_MGMT.SMTP.DOMAIN.PLACE_HOLDER')\"\n @blur=\"v$.domain.$touch\"\n />\n <InputRadioGroup\n :label=\"$t('INBOX_MGMT.SMTP.ENCRYPTION')\"\n :items=\"encryptionProtocols\"\n :action=\"handleEncryptionChange\"\n />\n <SingleSelectDropdown\n class=\"max-w-[75%] w-full\"\n :label=\"$t('INBOX_MGMT.SMTP.OPEN_SSL_VERIFY_MODE')\"\n :selected=\"openSSLVerifyMode\"\n :options=\"openSSLVerifyModes\"\n :action=\"handleSSLModeChange\"\n />\n <SingleSelectDropdown\n class=\"max-w-[75%] w-full\"\n :label=\"$t('INBOX_MGMT.SMTP.AUTH_MECHANISM')\"\n :selected=\"authMechanism\"\n :options=\"authMechanisms\"\n :action=\"handleAuthMechanismChange\"\n />\n </div>\n <NextButton\n type=\"submit\"\n :label=\"$t('INBOX_MGMT.SMTP.UPDATE')\"\n :is-loading=\"uiFlags.isUpdatingSMTP\"\n :disabled=\"(v$.$invalid && isSMTPEnabled) || uiFlags.isUpdatingSMTP\"\n />\n </form>\n </SettingsSection>\n </div>\n</template>\n","<script>\nimport { useAlert } from 'dashboard/composables';\nimport inboxMixin from 'shared/mixins/inboxMixin';\nimport SettingsSection from '../../../../../components/SettingsSection.vue';\nimport ImapSettings from '../ImapSettings.vue';\nimport SmtpSettings from '../SmtpSettings.vue';\nimport { useVuelidate } from '@vuelidate/core';\nimport { required } from '@vuelidate/validators';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n SettingsSection,\n ImapSettings,\n SmtpSettings,\n NextButton,\n },\n mixins: [inboxMixin],\n props: {\n inbox: {\n type: Object,\n default: () => ({}),\n },\n },\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n hmacMandatory: false,\n whatsAppInboxAPIKey: '',\n };\n },\n validations: {\n whatsAppInboxAPIKey: { required },\n },\n watch: {\n inbox() {\n this.setDefaults();\n },\n },\n mounted() {\n this.setDefaults();\n },\n methods: {\n setDefaults() {\n this.hmacMandatory = this.inbox.hmac_mandatory || false;\n },\n handleHmacFlag() {\n this.updateInbox();\n },\n async updateInbox() {\n try {\n const payload = {\n id: this.inbox.id,\n formData: false,\n channel: {\n hmac_mandatory: this.hmacMandatory,\n },\n };\n await this.$store.dispatch('inboxes/updateInbox', payload);\n useAlert(this.$t('INBOX_MGMT.EDIT.API.SUCCESS_MESSAGE'));\n } catch (error) {\n useAlert(this.$t('INBOX_MGMT.EDIT.API.ERROR_MESSAGE'));\n }\n },\n async updateWhatsAppInboxAPIKey() {\n try {\n const payload = {\n id: this.inbox.id,\n formData: false,\n channel: {},\n };\n\n payload.channel.provider_config = {\n ...this.inbox.provider_config,\n api_key: this.whatsAppInboxAPIKey,\n };\n\n await this.$store.dispatch('inboxes/updateInbox', payload);\n useAlert(this.$t('INBOX_MGMT.EDIT.API.SUCCESS_MESSAGE'));\n } catch (error) {\n useAlert(this.$t('INBOX_MGMT.EDIT.API.ERROR_MESSAGE'));\n }\n },\n },\n};\n</script>\n\n<template>\n <div v-if=\"isATwilioChannel\" class=\"mx-8\">\n <SettingsSection\n :title=\"$t('INBOX_MGMT.ADD.TWILIO.API_CALLBACK.TITLE')\"\n :sub-title=\"$t('INBOX_MGMT.ADD.TWILIO.API_CALLBACK.SUBTITLE')\"\n >\n <woot-code :script=\"inbox.callback_webhook_url\" lang=\"html\" />\n </SettingsSection>\n </div>\n <div v-else-if=\"isALineChannel\" class=\"mx-8\">\n <SettingsSection\n :title=\"$t('INBOX_MGMT.ADD.LINE_CHANNEL.API_CALLBACK.TITLE')\"\n :sub-title=\"$t('INBOX_MGMT.ADD.LINE_CHANNEL.API_CALLBACK.SUBTITLE')\"\n >\n <woot-code :script=\"inbox.callback_webhook_url\" lang=\"html\" />\n </SettingsSection>\n </div>\n <div v-else-if=\"isAWebWidgetInbox\">\n <div class=\"mx-8\">\n <SettingsSection\n :title=\"$t('INBOX_MGMT.SETTINGS_POPUP.MESSENGER_HEADING')\"\n :sub-title=\"$t('INBOX_MGMT.SETTINGS_POPUP.MESSENGER_SUB_HEAD')\"\n >\n <woot-code\n :script=\"inbox.web_widget_script\"\n lang=\"html\"\n :codepen-title=\"`${inbox.name} - Chatwoot Widget Test`\"\n enable-code-pen\n />\n </SettingsSection>\n\n <SettingsSection\n :title=\"$t('INBOX_MGMT.SETTINGS_POPUP.HMAC_VERIFICATION')\"\n >\n <woot-code :script=\"inbox.hmac_token\" />\n <template #subTitle>\n {{ $t('INBOX_MGMT.SETTINGS_POPUP.HMAC_DESCRIPTION') }}\n <a\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href=\"https://www.chatwoot.com/docs/product/channels/live-chat/sdk/identity-validation/\"\n >\n {{ $t('INBOX_MGMT.SETTINGS_POPUP.HMAC_LINK_TO_DOCS') }}\n </a>\n </template>\n </SettingsSection>\n <SettingsSection\n :title=\"$t('INBOX_MGMT.SETTINGS_POPUP.HMAC_MANDATORY_VERIFICATION')\"\n :sub-title=\"$t('INBOX_MGMT.SETTINGS_POPUP.HMAC_MANDATORY_DESCRIPTION')\"\n >\n <div class=\"flex items-center gap-2\">\n <input\n id=\"hmacMandatory\"\n v-model=\"hmacMandatory\"\n type=\"checkbox\"\n @change=\"handleHmacFlag\"\n />\n <label for=\"hmacMandatory\">\n {{ $t('INBOX_MGMT.EDIT.ENABLE_HMAC.LABEL') }}\n </label>\n </div>\n </SettingsSection>\n </div>\n </div>\n <div v-else-if=\"isAPIInbox\" class=\"mx-8\">\n <SettingsSection\n :title=\"$t('INBOX_MGMT.SETTINGS_POPUP.INBOX_IDENTIFIER')\"\n :sub-title=\"$t('INBOX_MGMT.SETTINGS_POPUP.INBOX_IDENTIFIER_SUB_TEXT')\"\n >\n <woot-code :script=\"inbox.inbox_identifier\" />\n </SettingsSection>\n\n <SettingsSection\n :title=\"$t('INBOX_MGMT.SETTINGS_POPUP.HMAC_VERIFICATION')\"\n :sub-title=\"$t('INBOX_MGMT.SETTINGS_POPUP.HMAC_DESCRIPTION')\"\n >\n <woot-code :script=\"inbox.hmac_token\" />\n </SettingsSection>\n <SettingsSection\n :title=\"$t('INBOX_MGMT.SETTINGS_POPUP.HMAC_MANDATORY_VERIFICATION')\"\n :sub-title=\"$t('INBOX_MGMT.SETTINGS_POPUP.HMAC_MANDATORY_DESCRIPTION')\"\n >\n <div class=\"flex items-center gap-2\">\n <input\n id=\"hmacMandatory\"\n v-model=\"hmacMandatory\"\n type=\"checkbox\"\n @change=\"handleHmacFlag\"\n />\n <label for=\"hmacMandatory\">\n {{ $t('INBOX_MGMT.EDIT.ENABLE_HMAC.LABEL') }}\n </label>\n </div>\n </SettingsSection>\n </div>\n <div v-else-if=\"isAnEmailChannel\">\n <div class=\"mx-8\">\n <SettingsSection\n :title=\"$t('INBOX_MGMT.SETTINGS_POPUP.FORWARD_EMAIL_TITLE')\"\n :sub-title=\"$t('INBOX_MGMT.SETTINGS_POPUP.FORWARD_EMAIL_SUB_TEXT')\"\n >\n <woot-code :script=\"inbox.forward_to_email\" />\n </SettingsSection>\n </div>\n <ImapSettings :inbox=\"inbox\" />\n <SmtpSettings v-if=\"inbox.imap_enabled\" :inbox=\"inbox\" />\n </div>\n <div v-else-if=\"isAWhatsAppChannel && !isATwilioChannel\">\n <div v-if=\"inbox.provider_config\" class=\"mx-8\">\n <SettingsSection\n :title=\"$t('INBOX_MGMT.SETTINGS_POPUP.WHATSAPP_WEBHOOK_TITLE')\"\n :sub-title=\"$t('INBOX_MGMT.SETTINGS_POPUP.WHATSAPP_WEBHOOK_SUBHEADER')\"\n >\n <woot-code :script=\"inbox.provider_config.webhook_verify_token\" />\n </SettingsSection>\n <SettingsSection\n :title=\"$t('INBOX_MGMT.SETTINGS_POPUP.WHATSAPP_SECTION_TITLE')\"\n :sub-title=\"$t('INBOX_MGMT.SETTINGS_POPUP.WHATSAPP_SECTION_SUBHEADER')\"\n >\n <woot-code :script=\"inbox.provider_config.api_key\" />\n </SettingsSection>\n <SettingsSection\n :title=\"$t('INBOX_MGMT.SETTINGS_POPUP.WHATSAPP_SECTION_UPDATE_TITLE')\"\n :sub-title=\"\n $t('INBOX_MGMT.SETTINGS_POPUP.WHATSAPP_SECTION_UPDATE_SUBHEADER')\n \"\n >\n <div\n class=\"flex items-center justify-between flex-1 mt-2 whatsapp-settings--content\"\n >\n <woot-input\n v-model=\"whatsAppInboxAPIKey\"\n type=\"text\"\n class=\"flex-1 mr-2\"\n :placeholder=\"\n $t(\n 'INBOX_MGMT.SETTINGS_POPUP.WHATSAPP_SECTION_UPDATE_PLACEHOLDER'\n )\n \"\n />\n <NextButton\n :disabled=\"v$.whatsAppInboxAPIKey.$invalid\"\n @click=\"updateWhatsAppInboxAPIKey\"\n >\n {{ $t('INBOX_MGMT.SETTINGS_POPUP.WHATSAPP_SECTION_UPDATE_BUTTON') }}\n </NextButton>\n </div>\n </SettingsSection>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.whatsapp-settings--content {\n ::v-deep input {\n margin-bottom: 0;\n }\n}\n</style>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useVuelidate } from '@vuelidate/core';\nimport { minValue } from '@vuelidate/validators';\nimport { useAlert } from 'dashboard/composables';\nimport { useConfig } from 'dashboard/composables/useConfig';\nimport SettingsSection from '../../../../../components/SettingsSection.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n SettingsSection,\n NextButton,\n },\n props: {\n inbox: {\n type: Object,\n default: () => ({}),\n },\n },\n setup() {\n const { isEnterprise } = useConfig();\n\n return { v$: useVuelidate(), isEnterprise };\n },\n data() {\n return {\n selectedAgents: [],\n isAgentListUpdating: false,\n enableAutoAssignment: false,\n maxAssignmentLimit: null,\n };\n },\n computed: {\n ...mapGetters({\n agentList: 'agents/getAgents',\n }),\n maxAssignmentLimitErrors() {\n if (this.v$.maxAssignmentLimit.$error) {\n return this.$t(\n 'INBOX_MGMT.AUTO_ASSIGNMENT.MAX_ASSIGNMENT_LIMIT_RANGE_ERROR'\n );\n }\n return '';\n },\n },\n watch: {\n inbox() {\n this.setDefaults();\n },\n },\n mounted() {\n this.setDefaults();\n },\n methods: {\n setDefaults() {\n this.enableAutoAssignment = this.inbox.enable_auto_assignment;\n this.maxAssignmentLimit =\n this.inbox?.auto_assignment_config?.max_assignment_limit || null;\n this.fetchAttachedAgents();\n },\n async fetchAttachedAgents() {\n try {\n const response = await this.$store.dispatch('inboxMembers/get', {\n inboxId: this.inbox.id,\n });\n const {\n data: { payload: inboxMembers },\n } = response;\n this.selectedAgents = inboxMembers;\n } catch (error) {\n // Handle error\n }\n },\n handleEnableAutoAssignment() {\n this.updateInbox();\n },\n async updateAgents() {\n const agentList = this.selectedAgents.map(el => el.id);\n this.isAgentListUpdating = true;\n try {\n await this.$store.dispatch('inboxMembers/create', {\n inboxId: this.inbox.id,\n agentList,\n });\n useAlert(this.$t('AGENT_MGMT.EDIT.API.SUCCESS_MESSAGE'));\n } catch (error) {\n useAlert(this.$t('AGENT_MGMT.EDIT.API.ERROR_MESSAGE'));\n }\n this.isAgentListUpdating = false;\n },\n async updateInbox() {\n try {\n const payload = {\n id: this.inbox.id,\n formData: false,\n enable_auto_assignment: this.enableAutoAssignment,\n auto_assignment_config: {\n max_assignment_limit: this.maxAssignmentLimit,\n },\n };\n await this.$store.dispatch('inboxes/updateInbox', payload);\n useAlert(this.$t('INBOX_MGMT.EDIT.API.SUCCESS_MESSAGE'));\n } catch (error) {\n useAlert(this.$t('INBOX_MGMT.EDIT.API.SUCCESS_MESSAGE'));\n }\n },\n },\n validations: {\n selectedAgents: {\n isEmpty() {\n return !!this.selectedAgents.length;\n },\n },\n maxAssignmentLimit: {\n minValue: minValue(1),\n },\n },\n};\n</script>\n\n<template>\n <div>\n <SettingsSection\n :title=\"$t('INBOX_MGMT.SETTINGS_POPUP.INBOX_AGENTS')\"\n :sub-title=\"$t('INBOX_MGMT.SETTINGS_POPUP.INBOX_AGENTS_SUB_TEXT')\"\n >\n <multiselect\n v-model=\"selectedAgents\"\n :options=\"agentList\"\n track-by=\"id\"\n label=\"name\"\n multiple\n :close-on-select=\"false\"\n :clear-on-select=\"false\"\n hide-selected\n placeholder=\"Pick some\"\n selected-label\n :select-label=\"$t('FORMS.MULTISELECT.ENTER_TO_SELECT')\"\n :deselect-label=\"$t('FORMS.MULTISELECT.ENTER_TO_REMOVE')\"\n @select=\"v$.selectedAgents.$touch\"\n />\n\n <NextButton\n :label=\"$t('INBOX_MGMT.SETTINGS_POPUP.UPDATE')\"\n :is-loading=\"isAgentListUpdating\"\n @click=\"updateAgents\"\n />\n </SettingsSection>\n\n <SettingsSection\n :title=\"$t('INBOX_MGMT.SETTINGS_POPUP.AGENT_ASSIGNMENT')\"\n :sub-title=\"$t('INBOX_MGMT.SETTINGS_POPUP.AGENT_ASSIGNMENT_SUB_TEXT')\"\n >\n <label class=\"w-3/4 settings-item\">\n <div class=\"flex items-center gap-2\">\n <input\n id=\"enableAutoAssignment\"\n v-model=\"enableAutoAssignment\"\n type=\"checkbox\"\n @change=\"handleEnableAutoAssignment\"\n />\n <label for=\"enableAutoAssignment\">\n {{ $t('INBOX_MGMT.SETTINGS_POPUP.AUTO_ASSIGNMENT') }}\n </label>\n </div>\n\n <p class=\"pb-1 text-sm not-italic text-n-slate-11\">\n {{ $t('INBOX_MGMT.SETTINGS_POPUP.AUTO_ASSIGNMENT_SUB_TEXT') }}\n </p>\n </label>\n\n <div\n v-if=\"enableAutoAssignment && isEnterprise\"\n class=\"max-assignment-container\"\n >\n <woot-input\n v-model=\"maxAssignmentLimit\"\n type=\"number\"\n :class=\"{ error: v$.maxAssignmentLimit.$error }\"\n :error=\"maxAssignmentLimitErrors\"\n :label=\"$t('INBOX_MGMT.AUTO_ASSIGNMENT.MAX_ASSIGNMENT_LIMIT')\"\n @blur=\"v$.maxAssignmentLimit.$touch\"\n />\n\n <p class=\"pb-1 text-sm not-italic text-n-slate-11\">\n {{ $t('INBOX_MGMT.AUTO_ASSIGNMENT.MAX_ASSIGNMENT_LIMIT_SUB_TEXT') }}\n </p>\n\n <NextButton\n :label=\"$t('INBOX_MGMT.SETTINGS_POPUP.UPDATE')\"\n :disabled=\"v$.maxAssignmentLimit.$invalid\"\n @click=\"updateInbox\"\n />\n </div>\n </SettingsSection>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n@import 'dashboard/assets/scss/variables';\n@import 'dashboard/assets/scss/mixins';\n\n.max-assignment-container {\n padding-top: var(--space-slab);\n padding-bottom: var(--space-slab);\n}\n</style>\n","<script setup>\nimport { computed } from 'vue';\n\nconst props = defineProps({\n config: {\n type: Object,\n default: () => ({}),\n },\n});\n\nconst isDefaultScreen = computed(() => {\n return (\n props.config.isDefaultScreen &&\n ((props.config.welcomeHeading &&\n props.config.welcomeHeading.length !== 0) ||\n (props.config.welcomeTagLine && props.config.welcomeTagline.length !== 0))\n );\n});\n</script>\n\n<template>\n <div\n class=\"rounded-t-lg flex-shrink-0 transition-[max-height] duration-300\"\n :class=\"\n isDefaultScreen\n ? 'bg-slate-25 dark:bg-slate-800 px-4 py-5'\n : 'bg-white dark:bg-slate-900 p-4'\n \"\n >\n <div class=\"relative top-px\">\n <div class=\"flex items-center justify-start\">\n <img\n v-if=\"config.logo\"\n :src=\"config.logo\"\n class=\"mr-2 rounded-full logo\"\n :class=\"!isDefaultScreen ? 'h-8 w-8 mb-1' : 'h-12 w-12 mb-2'\"\n />\n <div v-if=\"!isDefaultScreen\">\n <div class=\"flex items-center justify-start gap-1\">\n <span\n class=\"text-base font-medium leading-3 text-slate-900 dark:text-white\"\n >\n {{ config.websiteName }}\n </span>\n <div\n v-if=\"config.isOnline\"\n class=\"w-2 h-2 bg-green-500 rounded-full\"\n />\n </div>\n <span class=\"mt-1 text-xs text-slate-600 dark:text-slate-400\">\n {{ config.replyTime }}\n </span>\n </div>\n </div>\n <div v-if=\"isDefaultScreen\" class=\"overflow-auto max-h-60\">\n <h2 class=\"mb-2 text-2xl break-words text-slate-900 dark:text-white\">\n {{ config.welcomeHeading }}\n </h2>\n <p class=\"text-sm break-words text-slate-600 dark:text-slate-100\">\n {{ config.welcomeTagline }}\n </p>\n </div>\n </div>\n </div>\n</template>\n","<script setup>\nimport { ref, computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport ResizableTextArea from 'shared/components/ResizableTextArea.vue';\nimport Thumbnail from 'dashboard/components/widgets/Thumbnail.vue';\nimport FluentIcon from 'shared/components/FluentIcon/Index.vue';\n\nconst props = defineProps({\n config: {\n type: Object,\n default: () => ({}),\n },\n});\n\nconst { t } = useI18n();\n\nconst isInputFocused = ref(false);\n\nconst getStatusText = computed(() => {\n return props.config.isOnline\n ? t('INBOX_MGMT.WIDGET_BUILDER.BODY.TEAM_AVAILABILITY.ONLINE')\n : t('INBOX_MGMT.WIDGET_BUILDER.BODY.TEAM_AVAILABILITY.OFFLINE');\n});\n</script>\n\n<template>\n <div class=\"relative flex flex-col w-full px-4\">\n <div\n v-if=\"config.isDefaultScreen\"\n class=\"p-4 bg-white rounded-md shadow-sm dark:bg-slate-700\"\n >\n <div class=\"flex items-center justify-between\">\n <div>\n <div\n class=\"text-sm font-medium leading-4 text-slate-700 dark:text-slate-50\"\n >\n {{ getStatusText }}\n </div>\n <div class=\"mt-1 text-xs text-slate-500 dark:text-slate-100\">\n {{ config.replyTime }}\n </div>\n </div>\n <Thumbnail username=\"C\" size=\"34px\" />\n </div>\n <button\n v-if=\"config.isDefaultScreen\"\n class=\"inline-flex items-center justify-between px-2 py-1 mt-1 -ml-2 font-medium leading-6 bg-transparent rounded-md text-slate-800 dark:bg-transparent dark:text-slate-50 hover:bg-slate-25 dark:hover:bg-slate-800\"\n :style=\"{ color: config.color }\"\n >\n <span class=\"pr-2 text-xs\">\n {{\n $t(\n 'INBOX_MGMT.WIDGET_BUILDER.FOOTER.START_CONVERSATION_BUTTON_TEXT'\n )\n }}\n </span>\n <FluentIcon icon=\"arrow-right\" size=\"14\" />\n </button>\n </div>\n <div\n v-else\n class=\"flex items-center h-10 bg-white rounded-md dark:bg-slate-700\"\n :class=\"{ 'ring-2 ring-woot-500 dark:ring-woot-400': isInputFocused }\"\n >\n <ResizableTextArea\n id=\"chat-input\"\n :rows=\"1\"\n :placeholder=\"\n $t('INBOX_MGMT.WIDGET_BUILDER.FOOTER.CHAT_INPUT_PLACEHOLDER')\n \"\n class=\"flex-grow !bg-white border-0 outline-none !outline-0 border-none h-8 text-sm dark:!bg-slate-700 pb-0 !pt-1.5 resize-none px-3 !mb-0 focus:outline-none rounded-md\"\n @focus=\"isInputFocused = true\"\n @blur=\"isInputFocused = false\"\n />\n <div class=\"flex items-center gap-2 px-2\">\n <FluentIcon icon=\"emoji\" />\n <FluentIcon class=\"icon-send\" icon=\"send\" />\n </div>\n </div>\n </div>\n</template>\n","export default \"data:image/svg+xml,%3csvg%20width='66'%20height='66'%20viewBox='0%200%2066%2066'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M63%2063H32.9976C16.4591%2063%202.99996%2049.5399%202.99996%2032.9973C2.99996%2016.4601%2016.4591%203%2032.9979%203C49.5408%203%2063%2016.4601%2063%2032.9973V63Z'%20fill='white'%20stroke='white'%20stroke-width='6'/%3e%3c/svg%3e\"","<script>\nimport WidgetHead from './WidgetHead.vue';\nimport WidgetBody from './WidgetBody.vue';\nimport WidgetFooter from './WidgetFooter.vue';\nimport InputRadioGroup from 'dashboard/routes/dashboard/settings/inbox/components/InputRadioGroup.vue';\nimport globalConfigMixin from 'shared/mixins/globalConfigMixin';\nimport { mapGetters } from 'vuex';\n\nexport default {\n name: 'Widget',\n components: {\n WidgetHead,\n WidgetBody,\n WidgetFooter,\n InputRadioGroup,\n },\n mixins: [globalConfigMixin],\n props: {\n welcomeHeading: {\n type: String,\n default: '',\n },\n welcomeTagline: {\n type: String,\n default: '',\n },\n websiteName: {\n type: String,\n required: true,\n },\n logo: {\n type: String,\n default: '',\n },\n isOnline: {\n type: Boolean,\n default: true,\n },\n replyTime: {\n type: String,\n default: '',\n },\n color: {\n type: String,\n default: '',\n },\n widgetBubblePosition: {\n type: String,\n default: '',\n },\n widgetBubbleLauncherTitle: {\n type: String,\n default: '',\n },\n widgetBubbleType: {\n type: String,\n default: '',\n },\n },\n data() {\n return {\n widgetScreens: [\n {\n id: 'default',\n title: this.$t('INBOX_MGMT.WIDGET_BUILDER.WIDGET_SCREEN.DEFAULT'),\n checked: true,\n },\n {\n id: 'chat',\n title: this.$t('INBOX_MGMT.WIDGET_BUILDER.WIDGET_SCREEN.CHAT'),\n checked: false,\n },\n ],\n isDefaultScreen: true,\n isWidgetVisible: true,\n };\n },\n computed: {\n ...mapGetters({ globalConfig: 'globalConfig/get' }),\n getWidgetConfig() {\n return {\n welcomeHeading: this.welcomeHeading,\n welcomeTagline: this.welcomeTagline,\n websiteName: this.websiteName,\n logo: this.logo,\n isDefaultScreen: this.isDefaultScreen,\n isOnline: this.isOnline,\n replyTime: this.replyTimeText,\n color: this.color,\n };\n },\n replyTimeText() {\n switch (this.replyTime) {\n case 'in_a_few_minutes':\n return this.$t(\n 'INBOX_MGMT.WIDGET_BUILDER.REPLY_TIME.IN_A_FEW_MINUTES'\n );\n case 'in_a_day':\n return this.$t('INBOX_MGMT.WIDGET_BUILDER.REPLY_TIME.IN_A_DAY');\n default:\n return this.$t('INBOX_MGMT.WIDGET_BUILDER.REPLY_TIME.IN_A_FEW_HOURS');\n }\n },\n getBubblePositionStyle() {\n return {\n justifyContent: this.widgetBubblePosition === 'left' ? 'start' : 'end',\n };\n },\n isBubbleExpanded() {\n return (\n !this.isWidgetVisible && this.widgetBubbleType === 'expanded_bubble'\n );\n },\n getWidgetBubbleLauncherTitle() {\n return this.isWidgetVisible || this.widgetBubbleType === 'standard'\n ? ' '\n : this.widgetBubbleLauncherTitle;\n },\n },\n methods: {\n handleScreenChange(item) {\n this.isDefaultScreen = item.id === 'default';\n },\n toggleWidget() {\n this.isWidgetVisible = !this.isWidgetVisible;\n this.isDefaultScreen = true;\n },\n },\n};\n</script>\n\n<template>\n <div>\n <div v-if=\"isWidgetVisible\" class=\"flex flex-col items-center\">\n <InputRadioGroup\n name=\"widget-screen\"\n :items=\"widgetScreens\"\n :action=\"handleScreenChange\"\n />\n </div>\n <div\n v-if=\"isWidgetVisible\"\n class=\"widget-wrapper flex flex-col justify-between rounded-lg shadow-md bg-slate-25 dark:bg-slate-800 h-[31.25rem] w-80\"\n >\n <WidgetHead :config=\"getWidgetConfig\" />\n <div>\n <WidgetBody\n v-if=\"!getWidgetConfig.isDefaultScreen\"\n :config=\"getWidgetConfig\"\n />\n <WidgetFooter :config=\"getWidgetConfig\" />\n <div class=\"py-2.5 flex justify-center\">\n <a\n class=\"items-center gap-0.5 text-slate-500 dark:text-slate-400 cursor-pointer flex filter grayscale opacity-90 hover:grayscale-0 hover:opacity-100 text-xxs\"\n >\n <img\n class=\"max-w-2.5 max-h-2.5\"\n :src=\"globalConfig.logoThumbnail\"\n />\n <span>\n {{\n useInstallationName(\n $t('INBOX_MGMT.WIDGET_BUILDER.BRANDING_TEXT'),\n globalConfig.installationName\n )\n }}\n </span>\n </a>\n </div>\n </div>\n </div>\n <div class=\"flex mt-4 w-[320px]\" :style=\"getBubblePositionStyle\">\n <button\n class=\"relative flex items-center justify-center rounded-full cursor-pointer\"\n :style=\"{ background: color }\"\n :class=\"\n isBubbleExpanded\n ? 'w-auto font-medium text-base text-white dark:text-white h-12 px-4'\n : 'w-16 h-16'\n \"\n @click=\"toggleWidget\"\n >\n <img\n v-if=\"!isWidgetVisible\"\n src=\"~dashboard/assets/images/bubble-logo.svg\"\n alt=\"\"\n draggable=\"false\"\n class=\"w-6 h-6 mx-auto\"\n />\n <div v-if=\"isBubbleExpanded\" class=\"ltr:pl-2.5 rtl:pr-2.5\">\n {{ getWidgetBubbleLauncherTitle }}\n </div>\n <div v-if=\"isWidgetVisible\" class=\"relative\">\n <div class=\"absolute w-0.5 h-8 rotate-45 -translate-y-1/2 bg-white\" />\n <div\n class=\"absolute w-0.5 h-8 -rotate-45 -translate-y-1/2 bg-white\"\n />\n </div>\n </button>\n </div>\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\nimport Widget from 'dashboard/modules/widget-preview/components/Widget.vue';\nimport InputRadioGroup from './components/InputRadioGroup.vue';\nimport { useVuelidate } from '@vuelidate/core';\nimport { required } from '@vuelidate/validators';\nimport { LOCAL_STORAGE_KEYS } from 'dashboard/constants/localStorage';\nimport { LocalStorage } from 'shared/helpers/localStorage';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n Widget,\n InputRadioGroup,\n NextButton,\n },\n props: {\n inbox: {\n type: Object,\n default: () => {},\n },\n },\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n isWidgetPreview: true,\n color: '#1f93ff',\n websiteName: '',\n welcomeHeading: '',\n welcomeTagline: '',\n replyTime: 'in_a_few_minutes',\n avatarFile: null,\n avatarUrl: '',\n widgetBubblePosition: 'right',\n widgetBubbleLauncherTitle: this.$t(\n 'INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.WIDGET_BUBBLE_LAUNCHER_TITLE.DEFAULT'\n ),\n widgetBubbleType: 'standard',\n widgetBubblePositions: [\n {\n id: 'left',\n title: this.$t(\n 'INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.WIDGET_BUBBLE_POSITION.LEFT'\n ),\n checked: false,\n },\n {\n id: 'right',\n title: this.$t(\n 'INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.WIDGET_BUBBLE_POSITION.RIGHT'\n ),\n checked: true,\n },\n ],\n widgetBubbleTypes: [\n {\n id: 'standard',\n title: this.$t(\n 'INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.WIDGET_BUBBLE_TYPE.STANDARD'\n ),\n checked: true,\n },\n {\n id: 'expanded_bubble',\n title: this.$t(\n 'INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.WIDGET_BUBBLE_TYPE.EXPANDED_BUBBLE'\n ),\n checked: false,\n },\n ],\n };\n },\n computed: {\n ...mapGetters({\n uiFlags: 'inboxes/getUIFlags',\n }),\n storageKey() {\n return `${LOCAL_STORAGE_KEYS.WIDGET_BUILDER}${this.inbox.id}`;\n },\n widgetScript() {\n let options = {\n position: this.widgetBubblePosition,\n type: this.widgetBubbleType,\n launcherTitle: this.widgetBubbleLauncherTitle,\n };\n let script = this.inbox.web_widget_script;\n return (\n script.substring(0, 13) +\n this.$t('INBOX_MGMT.WIDGET_BUILDER.SCRIPT_SETTINGS', {\n options: JSON.stringify(options),\n }) +\n script.substring(13)\n );\n },\n getWidgetViewOptions() {\n return [\n {\n id: 'preview',\n title: this.$t(\n 'INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.WIDGET_VIEW_OPTION.PREVIEW'\n ),\n checked: true,\n },\n {\n id: 'script',\n title: this.$t(\n 'INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.WIDGET_VIEW_OPTION.SCRIPT'\n ),\n checked: false,\n },\n ];\n },\n getReplyTimeOptions() {\n return [\n {\n key: 'in_a_few_minutes',\n value: 'in_a_few_minutes',\n text: this.$t(\n 'INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.REPLY_TIME.IN_A_FEW_MINUTES'\n ),\n },\n {\n key: 'in_a_few_hours',\n value: 'in_a_few_hours',\n text: this.$t(\n 'INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.REPLY_TIME.IN_A_FEW_HOURS'\n ),\n },\n {\n key: 'in_a_day',\n value: 'in_a_day',\n text: this.$t(\n 'INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.REPLY_TIME.IN_A_DAY'\n ),\n },\n ];\n },\n websiteNameValidationErrorMsg() {\n return this.v$.websiteName.$error\n ? this.$t('INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.WEBSITE_NAME.ERROR')\n : '';\n },\n },\n mounted() {\n this.setDefaults();\n },\n validations: {\n websiteName: { required },\n },\n methods: {\n setDefaults() {\n // Widget Settings\n const {\n name,\n welcome_title,\n welcome_tagline,\n widget_color,\n reply_time,\n avatar_url,\n } = this.inbox;\n this.websiteName = name;\n this.welcomeHeading = welcome_title;\n this.welcomeTagline = welcome_tagline;\n this.color = widget_color;\n this.replyTime = reply_time;\n this.avatarUrl = avatar_url;\n\n const savedInformation = this.getSavedInboxInformation();\n if (savedInformation) {\n this.widgetBubblePositions = this.widgetBubblePositions.map(item => {\n if (item.id === savedInformation.position) {\n item.checked = true;\n this.widgetBubblePosition = item.id;\n }\n return item;\n });\n this.widgetBubbleTypes = this.widgetBubbleTypes.map(item => {\n if (item.id === savedInformation.type) {\n item.checked = true;\n this.widgetBubbleType = item.id;\n }\n return item;\n });\n this.widgetBubbleLauncherTitle =\n savedInformation.launcherTitle || 'Chat with us';\n }\n },\n handleWidgetBubblePositionChange(item) {\n this.widgetBubblePosition = item.id;\n },\n handleWidgetBubbleTypeChange(item) {\n this.widgetBubbleType = item.id;\n },\n handleWidgetViewChange(item) {\n this.isWidgetPreview = item.id === 'preview';\n },\n handleImageUpload({ file, url }) {\n this.avatarFile = file;\n this.avatarUrl = url;\n },\n async handleAvatarDelete() {\n try {\n await this.$store.dispatch('inboxes/deleteInboxAvatar', this.inbox.id);\n this.avatarFile = null;\n this.avatarUrl = '';\n useAlert(\n this.$t(\n 'INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.AVATAR.DELETE.API.SUCCESS_MESSAGE'\n )\n );\n } catch (error) {\n useAlert(\n error.message\n ? error.message\n : this.$t(\n 'INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.AVATAR.DELETE.API.ERROR_MESSAGE'\n )\n );\n }\n },\n async updateWidget() {\n const bubbleSettings = {\n position: this.widgetBubblePosition,\n launcherTitle: this.widgetBubbleLauncherTitle,\n type: this.widgetBubbleType,\n };\n\n LocalStorage.set(this.storageKey, bubbleSettings);\n\n try {\n const payload = {\n id: this.inbox.id,\n name: this.websiteName,\n channel: {\n widget_color: this.color,\n welcome_title: this.welcomeHeading,\n welcome_tagline: this.welcomeTagline,\n reply_time: this.replyTime,\n },\n };\n if (this.avatarFile) {\n payload.avatar = this.avatarFile;\n }\n await this.$store.dispatch('inboxes/updateInbox', payload);\n useAlert(\n this.$t(\n 'INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.UPDATE.API.SUCCESS_MESSAGE'\n )\n );\n } catch (error) {\n useAlert(\n error.message ||\n this.$t(\n 'INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.UPDATE.API.ERROR_MESSAGE'\n )\n );\n }\n },\n getSavedInboxInformation() {\n return LocalStorage.get(this.storageKey);\n },\n },\n};\n</script>\n\n<template>\n <div class=\"mx-8\">\n <div class=\"flex p-2.5\">\n <div class=\"w-100 lg:w-[40%]\">\n <div class=\"min-h-full py-4 overflow-y-scroll px-px\">\n <form @submit.prevent=\"updateWidget\">\n <woot-avatar-uploader\n :label=\"\n $t('INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.AVATAR.LABEL')\n \"\n :src=\"avatarUrl\"\n delete-avatar\n @on-avatar-select=\"handleImageUpload\"\n @on-avatar-delete=\"handleAvatarDelete\"\n />\n <woot-input\n v-model=\"websiteName\"\n :class=\"{ error: v$.websiteName.$error }\"\n :label=\"\n $t(\n 'INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.WEBSITE_NAME.LABEL'\n )\n \"\n :placeholder=\"\n $t(\n 'INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.WEBSITE_NAME.PLACE_HOLDER'\n )\n \"\n :error=\"websiteNameValidationErrorMsg\"\n @blur=\"v$.websiteName.$touch\"\n />\n <woot-input\n v-model=\"welcomeHeading\"\n :label=\"\n $t(\n 'INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.WELCOME_HEADING.LABEL'\n )\n \"\n :placeholder=\"\n $t(\n 'INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.WELCOME_HEADING.PLACE_HOLDER'\n )\n \"\n />\n <woot-input\n v-model=\"welcomeTagline\"\n :label=\"\n $t(\n 'INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.WELCOME_TAGLINE.LABEL'\n )\n \"\n :placeholder=\"\n $t(\n 'INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.WELCOME_TAGLINE.PLACE_HOLDER'\n )\n \"\n />\n <label>\n {{\n $t('INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.REPLY_TIME.LABEL')\n }}\n <select v-model=\"replyTime\">\n <option\n v-for=\"option in getReplyTimeOptions\"\n :key=\"option.key\"\n :value=\"option.value\"\n >\n {{ option.text }}\n </option>\n </select>\n </label>\n <label>\n {{\n $t(\n 'INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.WIDGET_COLOR_LABEL'\n )\n }}\n <woot-color-picker v-model=\"color\" />\n </label>\n <InputRadioGroup\n name=\"widget-bubble-position\"\n :label=\"\n $t(\n 'INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.WIDGET_BUBBLE_POSITION_LABEL'\n )\n \"\n :items=\"widgetBubblePositions\"\n :action=\"handleWidgetBubblePositionChange\"\n />\n <InputRadioGroup\n name=\"widget-bubble-type\"\n :label=\"\n $t(\n 'INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.WIDGET_BUBBLE_TYPE_LABEL'\n )\n \"\n :items=\"widgetBubbleTypes\"\n :action=\"handleWidgetBubbleTypeChange\"\n />\n <woot-input\n v-model=\"widgetBubbleLauncherTitle\"\n :label=\"\n $t(\n 'INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.WIDGET_BUBBLE_LAUNCHER_TITLE.LABEL'\n )\n \"\n :placeholder=\"\n $t(\n 'INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.WIDGET_BUBBLE_LAUNCHER_TITLE.PLACE_HOLDER'\n )\n \"\n />\n <NextButton\n type=\"submit\"\n class=\"mt-4\"\n :label=\"\n $t(\n 'INBOX_MGMT.WIDGET_BUILDER.WIDGET_OPTIONS.UPDATE.BUTTON_TEXT'\n )\n \"\n :is-loading=\"uiFlags.isUpdating\"\n :disabled=\"v$.$invalid || uiFlags.isUpdating\"\n />\n </form>\n </div>\n </div>\n <div class=\"w-100 lg:w-3/5\">\n <InputRadioGroup\n name=\"widget-view-options\"\n class=\"text-center\"\n :items=\"getWidgetViewOptions\"\n :action=\"handleWidgetViewChange\"\n />\n <div\n v-if=\"isWidgetPreview\"\n class=\"flex flex-col items-center justify-end min-h-[40.625rem] mx-5 mb-5 p-2.5 bg-slate-50 dark:bg-slate-900/50 rounded-lg\"\n >\n <Widget\n :welcome-heading=\"welcomeHeading\"\n :welcome-tagline=\"welcomeTagline\"\n :website-name=\"websiteName\"\n :logo=\"avatarUrl\"\n is-online\n :reply-time=\"replyTime\"\n :color=\"color\"\n :widget-bubble-position=\"widgetBubblePosition\"\n :widget-bubble-launcher-title=\"widgetBubbleLauncherTitle\"\n :widget-bubble-type=\"widgetBubbleType\"\n />\n </div>\n <div\n v-else\n class=\"mx-5 p-2.5 bg-n-slate-3 rounded-lg dark:bg-n-solid-3\"\n >\n <woot-code :script=\"widgetScript\" />\n </div>\n </div>\n </div>\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\nimport SettingsSection from 'dashboard/components/SettingsSection.vue';\nimport LoadingState from 'dashboard/components/widgets/LoadingState.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n LoadingState,\n SettingsSection,\n NextButton,\n },\n props: {\n inbox: {\n type: Object,\n default: () => ({}),\n },\n },\n data() {\n return {\n selectedAgentBotId: null,\n };\n },\n computed: {\n ...mapGetters({\n agentBots: 'agentBots/getBots',\n uiFlags: 'agentBots/getUIFlags',\n }),\n activeAgentBot() {\n return this.$store.getters['agentBots/getActiveAgentBot'](this.inbox.id);\n },\n },\n watch: {\n activeAgentBot() {\n this.selectedAgentBotId = this.activeAgentBot.id;\n },\n },\n mounted() {\n this.$store.dispatch('agentBots/get');\n this.$store.dispatch('agentBots/fetchAgentBotInbox', this.inbox.id);\n },\n\n methods: {\n async updateActiveAgentBot() {\n try {\n await this.$store.dispatch('agentBots/setAgentBotInbox', {\n inboxId: this.inbox.id,\n // Added this to make sure that empty values are not sent to the API\n botId: this.selectedAgentBotId ? this.selectedAgentBotId : undefined,\n });\n useAlert(this.$t('AGENT_BOTS.BOT_CONFIGURATION.SUCCESS_MESSAGE'));\n } catch (error) {\n useAlert(this.$t('AGENT_BOTS.BOT_CONFIGURATION.ERROR_MESSAGE'));\n }\n },\n async disconnectBot() {\n try {\n await this.$store.dispatch('agentBots/disconnectBot', {\n inboxId: this.inbox.id,\n });\n useAlert(\n this.$t('AGENT_BOTS.BOT_CONFIGURATION.DISCONNECTED_SUCCESS_MESSAGE')\n );\n } catch (error) {\n useAlert(\n error?.message ||\n this.$t('AGENT_BOTS.BOT_CONFIGURATION.DISCONNECTED_ERROR_MESSAGE')\n );\n }\n },\n },\n};\n</script>\n\n<template>\n <div class=\"mx-8\">\n <LoadingState v-if=\"uiFlags.isFetching || uiFlags.isFetchingAgentBot\" />\n <form\n v-else\n class=\"flex flex-wrap mx-0\"\n @submit.prevent=\"updateActiveAgentBot\"\n >\n <SettingsSection\n :title=\"$t('AGENT_BOTS.BOT_CONFIGURATION.TITLE')\"\n :sub-title=\"$t('AGENT_BOTS.BOT_CONFIGURATION.DESC')\"\n >\n <div>\n <label>\n <select v-model=\"selectedAgentBotId\">\n <option value=\"\" disabled selected>\n {{ $t('AGENT_BOTS.BOT_CONFIGURATION.SELECT_PLACEHOLDER') }}\n </option>\n <option\n v-for=\"agentBot in agentBots\"\n :key=\"agentBot.id\"\n :value=\"agentBot.id\"\n >\n {{ agentBot.name }}\n </option>\n </select>\n </label>\n <div class=\"button-container space-x-2\">\n <NextButton\n type=\"submit\"\n :label=\"$t('AGENT_BOTS.BOT_CONFIGURATION.SUBMIT')\"\n :is-loading=\"uiFlags.isSettingAgentBot\"\n />\n <NextButton\n type=\"button\"\n :disabled=\"!selectedAgentBotId\"\n :is-loading=\"uiFlags.isDisconnecting\"\n faded\n ruby\n @click=\"disconnectBot\"\n >\n {{ $t('AGENT_BOTS.BOT_CONFIGURATION.DISCONNECT') }}\n </NextButton>\n </div>\n </div>\n </SettingsSection>\n </form>\n </div>\n</template>\n","<script>\nexport default {\n props: {\n heading: {\n type: String,\n default: '',\n },\n content: {\n type: String,\n default: '',\n },\n active: {\n type: Boolean,\n default: false,\n },\n src: {\n type: String,\n default: '',\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"flex flex-col min-w-[15rem] max-h-[21.25rem] max-w-[23.75rem] rounded-md border border-solid border-n-strong\"\n :class=\"{\n 'bg-woot-25 dark:bg-n-solid-2 border border-solid border-n-blue-border':\n active,\n }\"\n >\n <div\n class=\"flex justify-between items-center rounded-t-md px-2 w-full h-10 bg-slate-50 dark:bg-slate-900 border-b border-solid border-n-strong\"\n :class=\"{\n 'bg-woot-50 border-b border-solid border-n-blue-border': active,\n }\"\n >\n <div class=\"flex items-center p-1 text-sm font-medium\">{{ heading }}</div>\n <fluent-icon\n v-if=\"active\"\n icon=\"checkmark-circle\"\n type=\"solid\"\n size=\"24\"\n class=\"text-woot-500 dark:text-woot-500\"\n />\n </div>\n <div\n class=\"text-slate-700 dark:text-slate-200 text-xs leading-[1.4] px-3 pt-3 pb-0 text-start\"\n >\n {{ content }}\n </div>\n <div v-if=\"src\" class=\"p-3\">\n <img\n :src=\"src\"\n class=\"border border-solid rounded-md\"\n :class=\"\n active\n ? 'border-woot-75 dark:border-woot-700'\n : 'border-slate-50 dark:border-slate-600'\n \"\n />\n </div>\n <slot v-else />\n </div>\n</template>\n","<script>\nimport PreviewCard from 'dashboard/components/ui/PreviewCard.vue';\nimport Thumbnail from 'dashboard/components/widgets/Thumbnail.vue';\n\nexport default {\n components: {\n PreviewCard,\n Thumbnail,\n },\n props: {\n senderNameType: {\n type: String,\n default: 'friendly',\n },\n businessName: {\n type: String,\n default: '',\n },\n },\n emits: ['update'],\n data() {\n return {\n senderNameKeyOptions: [\n {\n key: 'friendly',\n heading: this.$t(\n 'INBOX_MGMT.EDIT.SENDER_NAME_SECTION.FRIENDLY.TITLE'\n ),\n content: this.$t(\n 'INBOX_MGMT.EDIT.SENDER_NAME_SECTION.FRIENDLY.SUBTITLE'\n ),\n preview: {\n senderName: 'Smith',\n businessName: 'Chatwoot',\n email: '<support@yourbusiness.com>',\n },\n },\n {\n key: 'professional',\n heading: this.$t(\n 'INBOX_MGMT.EDIT.SENDER_NAME_SECTION.PROFESSIONAL.TITLE'\n ),\n content: this.$t(\n 'INBOX_MGMT.EDIT.SENDER_NAME_SECTION.PROFESSIONAL.SUBTITLE'\n ),\n preview: {\n senderName: '',\n businessName: 'Chatwoot',\n email: '<support@yourbusiness.com>',\n },\n },\n ],\n };\n },\n methods: {\n isKeyOptionFriendly(key) {\n return key === 'friendly';\n },\n userName(keyOption) {\n return this.isKeyOptionFriendly(keyOption.key)\n ? keyOption.preview.senderName\n : keyOption.preview.businessName;\n },\n toggleSenderNameType(key) {\n this.$emit('update', key);\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex flex-col lg:flex-row items-start lg:items-center gap-4\">\n <button\n v-for=\"keyOption in senderNameKeyOptions\"\n :key=\"keyOption.key\"\n class=\"text-slate-800 dark:text-slate-100 cursor-pointer p-0\"\n @click=\"toggleSenderNameType(keyOption.key)\"\n >\n <PreviewCard\n :heading=\"keyOption.heading\"\n :content=\"keyOption.content\"\n :active=\"keyOption.key === senderNameType\"\n >\n <div class=\"flex flex-col items-start p-3 gap-2\">\n <span class=\"text-xs\">\n {{ $t('INBOX_MGMT.EDIT.SENDER_NAME_SECTION.FOR_EG') }}\n </span>\n <div class=\"flex flex-row items-center gap-2\">\n <Thumbnail :username=\"userName(keyOption)\" size=\"32px\" />\n <div class=\"flex flex-col items-start gap-1\">\n <div class=\"items-center flex flex-row gap-0.5 max-w-[18rem]\">\n <span\n v-if=\"isKeyOptionFriendly(keyOption.key)\"\n class=\"text-xs font-semibold leading-tight\"\n >\n {{ keyOption.preview.senderName }}\n </span>\n <span v-if=\"isKeyOptionFriendly(keyOption.key)\" class=\"text-xs\">\n {{ $t('INBOX_MGMT.EDIT.SENDER_NAME_SECTION.FRIENDLY.FROM') }}\n </span>\n <span\n class=\"text-xs font-semibold leading-tight overflow-hidden whitespace-nowrap text-ellipsis\"\n >\n {{ businessName || keyOption.preview.businessName }}\n </span>\n </div>\n <span class=\"text-xs\">{{ keyOption.preview.email }}</span>\n </div>\n </div>\n </div>\n </PreviewCard>\n </button>\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { shouldBeUrl } from 'shared/helpers/Validators';\nimport { useAlert } from 'dashboard/composables';\nimport { useVuelidate } from '@vuelidate/core';\nimport SettingIntroBanner from 'dashboard/components/widgets/SettingIntroBanner.vue';\nimport SettingsSection from '../../../../components/SettingsSection.vue';\nimport inboxMixin from 'shared/mixins/inboxMixin';\nimport FacebookReauthorize from './facebook/Reauthorize.vue';\nimport MicrosoftReauthorize from './channels/microsoft/Reauthorize.vue';\nimport GoogleReauthorize from './channels/google/Reauthorize.vue';\nimport PreChatFormSettings from './PreChatForm/Settings.vue';\nimport WeeklyAvailability from './components/WeeklyAvailability.vue';\nimport GreetingsEditor from 'shared/components/GreetingsEditor.vue';\nimport ConfigurationPage from './settingsPage/ConfigurationPage.vue';\nimport CollaboratorsPage from './settingsPage/CollaboratorsPage.vue';\nimport WidgetBuilder from './WidgetBuilder.vue';\nimport BotConfiguration from './components/BotConfiguration.vue';\nimport { FEATURE_FLAGS } from '../../../../featureFlags';\nimport SenderNameExamplePreview from './components/SenderNameExamplePreview.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n BotConfiguration,\n CollaboratorsPage,\n ConfigurationPage,\n FacebookReauthorize,\n GreetingsEditor,\n PreChatFormSettings,\n SettingIntroBanner,\n SettingsSection,\n WeeklyAvailability,\n WidgetBuilder,\n SenderNameExamplePreview,\n MicrosoftReauthorize,\n GoogleReauthorize,\n NextButton,\n },\n mixins: [inboxMixin],\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n avatarFile: null,\n avatarUrl: '',\n greetingEnabled: true,\n greetingMessage: '',\n emailCollectEnabled: false,\n csatSurveyEnabled: false,\n senderNameType: 'friendly',\n businessName: '',\n locktoSingleConversation: false,\n allowMessagesAfterResolved: true,\n continuityViaEmail: true,\n selectedInboxName: '',\n channelWebsiteUrl: '',\n webhookUrl: '',\n channelWelcomeTitle: '',\n channelWelcomeTagline: '',\n selectedFeatureFlags: [],\n replyTime: '',\n selectedTabIndex: 0,\n selectedPortalSlug: '',\n showBusinessNameInput: false,\n };\n },\n computed: {\n ...mapGetters({\n accountId: 'getCurrentAccountId',\n isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount',\n uiFlags: 'inboxes/getUIFlags',\n portals: 'portals/allPortals',\n }),\n selectedTabKey() {\n return this.tabs[this.selectedTabIndex]?.key;\n },\n whatsAppAPIProviderName() {\n if (this.isAWhatsAppCloudChannel) {\n return this.$t('INBOX_MGMT.ADD.WHATSAPP.PROVIDERS.WHATSAPP_CLOUD');\n }\n if (this.is360DialogWhatsAppChannel) {\n return this.$t('INBOX_MGMT.ADD.WHATSAPP.PROVIDERS.360_DIALOG');\n }\n if (this.isATwilioWhatsAppChannel) {\n return this.$t('INBOX_MGMT.ADD.WHATSAPP.PROVIDERS.TWILIO');\n }\n return '';\n },\n tabs() {\n let visibleToAllChannelTabs = [\n {\n key: 'inbox_settings',\n name: this.$t('INBOX_MGMT.TABS.SETTINGS'),\n },\n {\n key: 'collaborators',\n name: this.$t('INBOX_MGMT.TABS.COLLABORATORS'),\n },\n {\n key: 'businesshours',\n name: this.$t('INBOX_MGMT.TABS.BUSINESS_HOURS'),\n },\n ];\n\n if (this.isAWebWidgetInbox) {\n visibleToAllChannelTabs = [\n ...visibleToAllChannelTabs,\n {\n key: 'preChatForm',\n name: this.$t('INBOX_MGMT.TABS.PRE_CHAT_FORM'),\n },\n {\n key: 'widgetBuilder',\n name: this.$t('INBOX_MGMT.TABS.WIDGET_BUILDER'),\n },\n ];\n }\n\n if (\n this.isATwilioChannel ||\n this.isALineChannel ||\n this.isAPIInbox ||\n (this.isAnEmailChannel && !this.inbox.provider) ||\n this.isAWhatsAppChannel ||\n this.isAWebWidgetInbox\n ) {\n visibleToAllChannelTabs = [\n ...visibleToAllChannelTabs,\n {\n key: 'configuration',\n name: this.$t('INBOX_MGMT.TABS.CONFIGURATION'),\n },\n ];\n }\n\n if (\n this.isFeatureEnabledonAccount(\n this.accountId,\n FEATURE_FLAGS.AGENT_BOTS\n ) &&\n !(this.isAnEmailChannel || this.isATwitterInbox)\n ) {\n visibleToAllChannelTabs = [\n ...visibleToAllChannelTabs,\n {\n key: 'botConfiguration',\n name: this.$t('INBOX_MGMT.TABS.BOT_CONFIGURATION'),\n },\n ];\n }\n return visibleToAllChannelTabs;\n },\n currentInboxId() {\n return this.$route.params.inboxId;\n },\n inbox() {\n return this.$store.getters['inboxes/getInbox'](this.currentInboxId);\n },\n\n inboxName() {\n if (this.isATwilioSMSChannel || this.isATwilioWhatsAppChannel) {\n return `${this.inbox.name} (${\n this.inbox.messaging_service_sid || this.inbox.phone_number\n })`;\n }\n if (this.isAWhatsAppChannel) {\n return `${this.inbox.name} (${this.inbox.phone_number})`;\n }\n if (this.isAnEmailChannel) {\n return `${this.inbox.name} (${this.inbox.email})`;\n }\n return this.inbox.name;\n },\n canLocktoSingleConversation() {\n return (\n this.isASmsInbox ||\n this.isAWhatsAppChannel ||\n this.isAFacebookInbox ||\n this.isAPIInbox\n );\n },\n inboxNameLabel() {\n if (this.isAWebWidgetInbox) {\n return this.$t('INBOX_MGMT.ADD.WEBSITE_NAME.LABEL');\n }\n return this.$t('INBOX_MGMT.ADD.CHANNEL_NAME.LABEL');\n },\n inboxNamePlaceHolder() {\n if (this.isAWebWidgetInbox) {\n return this.$t('INBOX_MGMT.ADD.WEBSITE_NAME.PLACEHOLDER');\n }\n return this.$t('INBOX_MGMT.ADD.CHANNEL_NAME.PLACEHOLDER');\n },\n textAreaChannels() {\n if (\n this.isATwilioChannel ||\n this.isATwitterInbox ||\n this.isAFacebookInbox\n )\n return true;\n return false;\n },\n microsoftUnauthorized() {\n return this.isAMicrosoftInbox && this.inbox.reauthorization_required;\n },\n facebookUnauthorized() {\n return this.isAFacebookInbox && this.inbox.reauthorization_required;\n },\n googleUnauthorized() {\n const isLegacyInbox = ['imap.gmail.com', 'imap.google.com'].includes(\n this.inbox.imap_address\n );\n\n return (\n (this.isAGoogleInbox || isLegacyInbox) &&\n this.inbox.reauthorization_required\n );\n },\n },\n watch: {\n $route(to) {\n if (to.name === 'settings_inbox_show') {\n this.fetchInboxSettings();\n }\n },\n },\n mounted() {\n this.fetchInboxSettings();\n this.fetchPortals();\n },\n methods: {\n fetchPortals() {\n this.$store.dispatch('portals/index');\n },\n handleFeatureFlag(e) {\n this.selectedFeatureFlags = this.toggleInput(\n this.selectedFeatureFlags,\n e.target.value\n );\n },\n toggleInput(selected, current) {\n if (selected.includes(current)) {\n const newSelectedFlags = selected.filter(flag => flag !== current);\n return newSelectedFlags;\n }\n return [...selected, current];\n },\n onTabChange(selectedTabIndex) {\n this.selectedTabIndex = selectedTabIndex;\n },\n fetchInboxSettings() {\n this.selectedTabIndex = 0;\n this.selectedAgents = [];\n this.$store.dispatch('agents/get');\n this.$store.dispatch('teams/get');\n this.$store.dispatch('labels/get');\n this.$store.dispatch('inboxes/get').then(() => {\n this.avatarUrl = this.inbox.avatar_url;\n this.selectedInboxName = this.inbox.name;\n this.webhookUrl = this.inbox.webhook_url;\n this.greetingEnabled = this.inbox.greeting_enabled || false;\n this.greetingMessage = this.inbox.greeting_message || '';\n this.emailCollectEnabled = this.inbox.enable_email_collect;\n this.csatSurveyEnabled = this.inbox.csat_survey_enabled;\n this.senderNameType = this.inbox.sender_name_type;\n this.businessName = this.inbox.business_name;\n this.allowMessagesAfterResolved =\n this.inbox.allow_messages_after_resolved;\n this.continuityViaEmail = this.inbox.continuity_via_email;\n this.channelWebsiteUrl = this.inbox.website_url;\n this.channelWelcomeTitle = this.inbox.welcome_title;\n this.channelWelcomeTagline = this.inbox.welcome_tagline;\n this.selectedFeatureFlags = this.inbox.selected_feature_flags || [];\n this.replyTime = this.inbox.reply_time;\n this.locktoSingleConversation = this.inbox.lock_to_single_conversation;\n this.selectedPortalSlug = this.inbox.help_center\n ? this.inbox.help_center.slug\n : '';\n });\n },\n async updateInbox() {\n try {\n const payload = {\n id: this.currentInboxId,\n name: this.selectedInboxName,\n enable_email_collect: this.emailCollectEnabled,\n csat_survey_enabled: this.csatSurveyEnabled,\n allow_messages_after_resolved: this.allowMessagesAfterResolved,\n greeting_enabled: this.greetingEnabled,\n greeting_message: this.greetingMessage || '',\n portal_id: this.selectedPortalSlug\n ? this.portals.find(\n portal => portal.slug === this.selectedPortalSlug\n ).id\n : null,\n lock_to_single_conversation: this.locktoSingleConversation,\n sender_name_type: this.senderNameType,\n business_name: this.businessName || null,\n channel: {\n widget_color: this.inbox.widget_color,\n website_url: this.channelWebsiteUrl,\n webhook_url: this.webhookUrl,\n welcome_title: this.channelWelcomeTitle || '',\n welcome_tagline: this.channelWelcomeTagline || '',\n selectedFeatureFlags: this.selectedFeatureFlags,\n reply_time: this.replyTime || 'in_a_few_minutes',\n continuity_via_email: this.continuityViaEmail,\n },\n };\n if (this.avatarFile) {\n payload.avatar = this.avatarFile;\n }\n await this.$store.dispatch('inboxes/updateInbox', payload);\n useAlert(this.$t('INBOX_MGMT.EDIT.API.SUCCESS_MESSAGE'));\n } catch (error) {\n useAlert(error.message || this.$t('INBOX_MGMT.EDIT.API.ERROR_MESSAGE'));\n }\n },\n handleImageUpload({ file, url }) {\n this.avatarFile = file;\n this.avatarUrl = url;\n },\n async handleAvatarDelete() {\n try {\n await this.$store.dispatch(\n 'inboxes/deleteInboxAvatar',\n this.currentInboxId\n );\n this.avatarFile = null;\n this.avatarUrl = '';\n useAlert(this.$t('INBOX_MGMT.DELETE.API.AVATAR_SUCCESS_MESSAGE'));\n } catch (error) {\n useAlert(\n error.message\n ? error.message\n : this.$t('INBOX_MGMT.DELETE.API.AVATAR_ERROR_MESSAGE')\n );\n }\n },\n toggleSenderNameType(key) {\n this.senderNameType = key;\n },\n onClickShowBusinessNameInput() {\n this.showBusinessNameInput = !this.showBusinessNameInput;\n if (this.showBusinessNameInput) {\n this.$nextTick(() => {\n this.$refs.businessNameInput.focus();\n });\n }\n },\n },\n validations: {\n webhookUrl: {\n shouldBeUrl,\n },\n selectedInboxName: {},\n },\n};\n</script>\n\n<template>\n <div\n class=\"flex-grow flex-shrink w-full min-w-0 pl-0 pr-0 overflow-auto settings\"\n >\n <SettingIntroBanner\n :header-image=\"inbox.avatarUrl\"\n :header-title=\"inboxName\"\n >\n <woot-tabs\n class=\"settings--tabs\"\n :index=\"selectedTabIndex\"\n :border=\"false\"\n @change=\"onTabChange\"\n >\n <woot-tabs-item\n v-for=\"(tab, index) in tabs\"\n :key=\"tab.key\"\n :index=\"index\"\n :name=\"tab.name\"\n :show-badge=\"false\"\n />\n </woot-tabs>\n </SettingIntroBanner>\n <section class=\"max-w-6xl mx-auto w-full\">\n <MicrosoftReauthorize v-if=\"microsoftUnauthorized\" :inbox=\"inbox\" />\n <FacebookReauthorize v-if=\"facebookUnauthorized\" :inbox=\"inbox\" />\n <GoogleReauthorize v-if=\"googleUnauthorized\" :inbox=\"inbox\" />\n <div v-if=\"selectedTabKey === 'inbox_settings'\" class=\"mx-8\">\n <SettingsSection\n :title=\"$t('INBOX_MGMT.SETTINGS_POPUP.INBOX_UPDATE_TITLE')\"\n :sub-title=\"$t('INBOX_MGMT.SETTINGS_POPUP.INBOX_UPDATE_SUB_TEXT')\"\n :show-border=\"false\"\n >\n <woot-avatar-uploader\n :label=\"$t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_AVATAR.LABEL')\"\n :src=\"avatarUrl\"\n class=\"pb-4\"\n delete-avatar\n @on-avatar-select=\"handleImageUpload\"\n @on-avatar-delete=\"handleAvatarDelete\"\n />\n <woot-input\n v-model=\"selectedInboxName\"\n class=\"pb-4\"\n :class=\"{ error: v$.selectedInboxName.$error }\"\n :label=\"inboxNameLabel\"\n :placeholder=\"inboxNamePlaceHolder\"\n :error=\"\n v$.selectedInboxName.$error\n ? $t('INBOX_MGMT.ADD.CHANNEL_NAME.ERROR')\n : ''\n \"\n @blur=\"v$.selectedInboxName.$touch\"\n />\n <woot-input\n v-if=\"isAPIInbox\"\n v-model=\"webhookUrl\"\n class=\"pb-4\"\n :class=\"{ error: v$.webhookUrl.$error }\"\n :label=\"\n $t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_WEBHOOK_URL.LABEL')\n \"\n :placeholder=\"\n $t(\n 'INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_WEBHOOK_URL.PLACEHOLDER'\n )\n \"\n :error=\"\n v$.webhookUrl.$error\n ? $t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_WEBHOOK_URL.ERROR')\n : ''\n \"\n @blur=\"v$.webhookUrl.$touch\"\n />\n <woot-input\n v-if=\"isAWebWidgetInbox\"\n v-model=\"channelWebsiteUrl\"\n class=\"pb-4\"\n :label=\"$t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_DOMAIN.LABEL')\"\n :placeholder=\"\n $t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_DOMAIN.PLACEHOLDER')\n \"\n />\n <woot-input\n v-if=\"isAWebWidgetInbox\"\n v-model=\"channelWelcomeTitle\"\n class=\"pb-4\"\n :label=\"\n $t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_WELCOME_TITLE.LABEL')\n \"\n :placeholder=\"\n $t(\n 'INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_WELCOME_TITLE.PLACEHOLDER'\n )\n \"\n />\n\n <woot-input\n v-if=\"isAWebWidgetInbox\"\n v-model=\"channelWelcomeTagline\"\n class=\"pb-4\"\n :label=\"\n $t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_WELCOME_TAGLINE.LABEL')\n \"\n :placeholder=\"\n $t(\n 'INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_WELCOME_TAGLINE.PLACEHOLDER'\n )\n \"\n />\n\n <label v-if=\"isAWebWidgetInbox\" class=\"pb-4\">\n {{ $t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.WIDGET_COLOR.LABEL') }}\n <woot-color-picker v-model=\"inbox.widget_color\" />\n </label>\n\n <label v-if=\"isAWhatsAppChannel\" class=\"pb-4\">\n {{ $t('INBOX_MGMT.ADD.WHATSAPP.PROVIDERS.LABEL') }}\n <input v-model=\"whatsAppAPIProviderName\" type=\"text\" disabled />\n </label>\n\n <label class=\"pb-4\">\n {{\n $t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_GREETING_TOGGLE.LABEL')\n }}\n <select v-model=\"greetingEnabled\">\n <option :value=\"true\">\n {{\n $t(\n 'INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_GREETING_TOGGLE.ENABLED'\n )\n }}\n </option>\n <option :value=\"false\">\n {{\n $t(\n 'INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_GREETING_TOGGLE.DISABLED'\n )\n }}\n </option>\n </select>\n <p class=\"pb-1 text-sm not-italic text-n-slate-11\">\n {{\n $t(\n 'INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_GREETING_TOGGLE.HELP_TEXT'\n )\n }}\n </p>\n </label>\n <div v-if=\"greetingEnabled\" class=\"pb-4\">\n <GreetingsEditor\n v-model=\"greetingMessage\"\n :label=\"\n $t(\n 'INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_GREETING_MESSAGE.LABEL'\n )\n \"\n :placeholder=\"\n $t(\n 'INBOX_MGMT.ADD.WEBSITE_CHANNEL.CHANNEL_GREETING_MESSAGE.PLACEHOLDER'\n )\n \"\n :richtext=\"!textAreaChannels\"\n />\n </div>\n <label v-if=\"isAWebWidgetInbox\" class=\"pb-4\">\n {{ $t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.REPLY_TIME.TITLE') }}\n <select v-model=\"replyTime\">\n <option key=\"in_a_few_minutes\" value=\"in_a_few_minutes\">\n {{\n $t(\n 'INBOX_MGMT.ADD.WEBSITE_CHANNEL.REPLY_TIME.IN_A_FEW_MINUTES'\n )\n }}\n </option>\n <option key=\"in_a_few_hours\" value=\"in_a_few_hours\">\n {{\n $t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.REPLY_TIME.IN_A_FEW_HOURS')\n }}\n </option>\n <option key=\"in_a_day\" value=\"in_a_day\">\n {{ $t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.REPLY_TIME.IN_A_DAY') }}\n </option>\n </select>\n\n <p class=\"pb-1 text-sm not-italic text-n-slate-11\">\n {{ $t('INBOX_MGMT.ADD.WEBSITE_CHANNEL.REPLY_TIME.HELP_TEXT') }}\n </p>\n </label>\n\n <label v-if=\"isAWebWidgetInbox\" class=\"pb-4\">\n {{ $t('INBOX_MGMT.SETTINGS_POPUP.ENABLE_EMAIL_COLLECT_BOX') }}\n <select v-model=\"emailCollectEnabled\">\n <option :value=\"true\">\n {{ $t('INBOX_MGMT.EDIT.EMAIL_COLLECT_BOX.ENABLED') }}\n </option>\n <option :value=\"false\">\n {{ $t('INBOX_MGMT.EDIT.EMAIL_COLLECT_BOX.DISABLED') }}\n </option>\n </select>\n <p class=\"pb-1 text-sm not-italic text-n-slate-11\">\n {{\n $t(\n 'INBOX_MGMT.SETTINGS_POPUP.ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT'\n )\n }}\n </p>\n </label>\n\n <label class=\"pb-4\">\n {{ $t('INBOX_MGMT.SETTINGS_POPUP.ENABLE_CSAT') }}\n <select v-model=\"csatSurveyEnabled\">\n <option :value=\"true\">\n {{ $t('INBOX_MGMT.EDIT.ENABLE_CSAT.ENABLED') }}\n </option>\n <option :value=\"false\">\n {{ $t('INBOX_MGMT.EDIT.ENABLE_CSAT.DISABLED') }}\n </option>\n </select>\n <p class=\"pb-1 text-sm not-italic text-n-slate-11\">\n {{ $t('INBOX_MGMT.SETTINGS_POPUP.ENABLE_CSAT_SUB_TEXT') }}\n </p>\n </label>\n\n <label v-if=\"isAWebWidgetInbox\" class=\"pb-4\">\n {{ $t('INBOX_MGMT.SETTINGS_POPUP.ALLOW_MESSAGES_AFTER_RESOLVED') }}\n <select v-model=\"allowMessagesAfterResolved\">\n <option :value=\"true\">\n {{\n $t('INBOX_MGMT.EDIT.ALLOW_MESSAGES_AFTER_RESOLVED.ENABLED')\n }}\n </option>\n <option :value=\"false\">\n {{\n $t('INBOX_MGMT.EDIT.ALLOW_MESSAGES_AFTER_RESOLVED.DISABLED')\n }}\n </option>\n </select>\n <p class=\"pb-1 text-sm not-italic text-n-slate-11\">\n {{\n $t(\n 'INBOX_MGMT.SETTINGS_POPUP.ALLOW_MESSAGES_AFTER_RESOLVED_SUB_TEXT'\n )\n }}\n </p>\n </label>\n\n <label v-if=\"isAWebWidgetInbox\" class=\"pb-4\">\n {{ $t('INBOX_MGMT.SETTINGS_POPUP.ENABLE_CONTINUITY_VIA_EMAIL') }}\n <select v-model=\"continuityViaEmail\">\n <option :value=\"true\">\n {{ $t('INBOX_MGMT.EDIT.ENABLE_CONTINUITY_VIA_EMAIL.ENABLED') }}\n </option>\n <option :value=\"false\">\n {{ $t('INBOX_MGMT.EDIT.ENABLE_CONTINUITY_VIA_EMAIL.DISABLED') }}\n </option>\n </select>\n <p class=\"pb-1 text-sm not-italic text-n-slate-11\">\n {{\n $t(\n 'INBOX_MGMT.SETTINGS_POPUP.ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT'\n )\n }}\n </p>\n </label>\n <div class=\"pb-4\">\n <label>\n {{ $t('INBOX_MGMT.HELP_CENTER.LABEL') }}\n </label>\n <select v-model=\"selectedPortalSlug\" class=\"filter__question\">\n <option value=\"\">\n {{ $t('INBOX_MGMT.HELP_CENTER.PLACEHOLDER') }}\n </option>\n <option v-for=\"p in portals\" :key=\"p.slug\" :value=\"p.slug\">\n {{ p.name }}\n </option>\n </select>\n <p class=\"pb-1 text-sm not-italic text-n-slate-11\">\n {{ $t('INBOX_MGMT.HELP_CENTER.SUB_TEXT') }}\n </p>\n </div>\n <label v-if=\"canLocktoSingleConversation\" class=\"pb-4\">\n {{ $t('INBOX_MGMT.SETTINGS_POPUP.LOCK_TO_SINGLE_CONVERSATION') }}\n <select v-model=\"locktoSingleConversation\">\n <option :value=\"true\">\n {{ $t('INBOX_MGMT.EDIT.LOCK_TO_SINGLE_CONVERSATION.ENABLED') }}\n </option>\n <option :value=\"false\">\n {{ $t('INBOX_MGMT.EDIT.LOCK_TO_SINGLE_CONVERSATION.DISABLED') }}\n </option>\n </select>\n <p class=\"pb-1 text-sm not-italic text-n-slate-11\">\n {{\n $t(\n 'INBOX_MGMT.SETTINGS_POPUP.LOCK_TO_SINGLE_CONVERSATION_SUB_TEXT'\n )\n }}\n </p>\n </label>\n\n <label v-if=\"isAWebWidgetInbox\">\n {{ $t('INBOX_MGMT.FEATURES.LABEL') }}\n </label>\n <div v-if=\"isAWebWidgetInbox\" class=\"flex gap-2 pt-2 pb-4\">\n <input\n v-model=\"selectedFeatureFlags\"\n type=\"checkbox\"\n value=\"attachments\"\n @input=\"handleFeatureFlag\"\n />\n <label for=\"attachments\">\n {{ $t('INBOX_MGMT.FEATURES.DISPLAY_FILE_PICKER') }}\n </label>\n </div>\n <div v-if=\"isAWebWidgetInbox\" class=\"flex gap-2 pb-4\">\n <input\n v-model=\"selectedFeatureFlags\"\n type=\"checkbox\"\n value=\"emoji_picker\"\n @input=\"handleFeatureFlag\"\n />\n <label for=\"emoji_picker\">\n {{ $t('INBOX_MGMT.FEATURES.DISPLAY_EMOJI_PICKER') }}\n </label>\n </div>\n <div v-if=\"isAWebWidgetInbox\" class=\"flex gap-2 pb-4\">\n <input\n v-model=\"selectedFeatureFlags\"\n type=\"checkbox\"\n value=\"end_conversation\"\n @input=\"handleFeatureFlag\"\n />\n <label for=\"end_conversation\">\n {{ $t('INBOX_MGMT.FEATURES.ALLOW_END_CONVERSATION') }}\n </label>\n </div>\n <div v-if=\"isAWebWidgetInbox\" class=\"flex gap-2 pb-4\">\n <input\n v-model=\"selectedFeatureFlags\"\n type=\"checkbox\"\n value=\"use_inbox_avatar_for_bot\"\n @input=\"handleFeatureFlag\"\n />\n <label for=\"use_inbox_avatar_for_bot\">\n {{ $t('INBOX_MGMT.FEATURES.USE_INBOX_AVATAR_FOR_BOT') }}\n </label>\n </div>\n </SettingsSection>\n <SettingsSection\n v-if=\"isAWebWidgetInbox || isAnEmailChannel\"\n :title=\"$t('INBOX_MGMT.EDIT.SENDER_NAME_SECTION.TITLE')\"\n :sub-title=\"$t('INBOX_MGMT.EDIT.SENDER_NAME_SECTION.SUB_TEXT')\"\n :show-border=\"false\"\n >\n <div class=\"pb-4\">\n <SenderNameExamplePreview\n :sender-name-type=\"senderNameType\"\n :business-name=\"businessName\"\n @update=\"toggleSenderNameType\"\n />\n <div class=\"flex flex-col items-start gap-2 mt-2\">\n <NextButton\n ghost\n blue\n :label=\"\n $t(\n 'INBOX_MGMT.EDIT.SENDER_NAME_SECTION.BUSINESS_NAME.BUTTON_TEXT'\n )\n \"\n @click=\"onClickShowBusinessNameInput\"\n />\n <div v-if=\"showBusinessNameInput\" class=\"flex gap-2 w-[80%]\">\n <input\n ref=\"businessNameInput\"\n v-model=\"businessName\"\n :placeholder=\"\n $t(\n 'INBOX_MGMT.EDIT.SENDER_NAME_SECTION.BUSINESS_NAME.PLACEHOLDER'\n )\n \"\n class=\"mb-0\"\n type=\"text\"\n />\n <NextButton\n :label=\"\n $t(\n 'INBOX_MGMT.EDIT.SENDER_NAME_SECTION.BUSINESS_NAME.SAVE_BUTTON_TEXT'\n )\n \"\n class=\"flex-shrink-0\"\n @click=\"updateInbox\"\n />\n </div>\n </div>\n </div>\n </SettingsSection>\n <SettingsSection :show-border=\"false\">\n <NextButton\n v-if=\"isAPIInbox\"\n type=\"submit\"\n :disabled=\"v$.webhookUrl.$invalid\"\n :label=\"$t('INBOX_MGMT.SETTINGS_POPUP.UPDATE')\"\n :is-loading=\"uiFlags.isUpdating\"\n @click=\"updateInbox\"\n />\n <NextButton\n v-else\n type=\"submit\"\n :disabled=\"v$.$invalid\"\n :label=\"$t('INBOX_MGMT.SETTINGS_POPUP.UPDATE')\"\n :is-loading=\"uiFlags.isUpdating\"\n @click=\"updateInbox\"\n />\n </SettingsSection>\n </div>\n\n <div v-if=\"selectedTabKey === 'collaborators'\" class=\"mx-8\">\n <CollaboratorsPage :inbox=\"inbox\" />\n </div>\n <div v-if=\"selectedTabKey === 'configuration'\">\n <ConfigurationPage :inbox=\"inbox\" />\n </div>\n <div v-if=\"selectedTabKey === 'preChatForm'\">\n <PreChatFormSettings :inbox=\"inbox\" />\n </div>\n <div v-if=\"selectedTabKey === 'businesshours'\">\n <WeeklyAvailability :inbox=\"inbox\" />\n </div>\n <div v-if=\"selectedTabKey === 'widgetBuilder'\">\n <WidgetBuilder :inbox=\"inbox\" />\n </div>\n <div v-if=\"selectedTabKey === 'botConfiguration'\">\n <BotConfiguration :inbox=\"inbox\" />\n </div>\n </section>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.settings--tabs {\n ::v-deep .tabs {\n @apply p-0;\n }\n}\n</style>\n","<script>\nimport { mapGetters } from 'vuex';\nimport globalConfigMixin from 'shared/mixins/globalConfigMixin';\n\nexport default {\n mixins: [globalConfigMixin],\n computed: {\n ...mapGetters({\n globalConfig: 'globalConfig/get',\n }),\n createFlowSteps() {\n const steps = ['CHANNEL', 'INBOX', 'AGENT', 'FINISH'];\n\n const routes = {\n CHANNEL: 'settings_inbox_new',\n INBOX: 'settings_inboxes_page_channel',\n AGENT: 'settings_inboxes_add_agents',\n FINISH: 'settings_inbox_finish',\n };\n\n return steps.map(step => {\n return {\n title: this.$t(`INBOX_MGMT.CREATE_FLOW.${step}.TITLE`),\n body: this.$t(`INBOX_MGMT.CREATE_FLOW.${step}.BODY`),\n route: routes[step],\n };\n });\n },\n items() {\n return this.createFlowSteps.map(item => ({\n ...item,\n body: this.useInstallationName(\n item.body,\n this.globalConfig.installationName\n ),\n }));\n },\n },\n};\n</script>\n\n<template>\n <div class=\"grid grid-cols-1 md:grid-cols-8 overflow-auto h-full\">\n <woot-wizard\n class=\"hidden md:block col-span-2\"\n :global-config=\"globalConfig\"\n :items=\"items\"\n />\n <div class=\"col-span-6\">\n <router-view />\n </div>\n </div>\n</template>\n","<script>\nimport ChannelSelector from '../ChannelSelector.vue';\nexport default {\n components: { ChannelSelector },\n props: {\n channel: {\n type: Object,\n required: true,\n },\n enabledFeatures: {\n type: Object,\n required: true,\n },\n },\n emits: ['channelItemClick'],\n computed: {\n hasFbConfigured() {\n return window.chatwootConfig?.fbAppId;\n },\n isActive() {\n const { key } = this.channel;\n if (Object.keys(this.enabledFeatures).length === 0) {\n return false;\n }\n if (key === 'website') {\n return this.enabledFeatures.channel_website;\n }\n if (key === 'facebook') {\n return this.enabledFeatures.channel_facebook && this.hasFbConfigured;\n }\n if (key === 'email') {\n return this.enabledFeatures.channel_email;\n }\n\n return [\n 'website',\n 'twilio',\n 'api',\n 'whatsapp',\n 'sms',\n 'telegram',\n 'line',\n ].includes(key);\n },\n },\n methods: {\n getChannelThumbnail() {\n if (this.channel.key === 'api' && this.channel.thumbnail) {\n return this.channel.thumbnail;\n }\n return `/assets/images/dashboard/channels/${this.channel.key}.png`;\n },\n onItemClick() {\n if (this.isActive) {\n this.$emit('channelItemClick', this.channel.key);\n }\n },\n },\n};\n</script>\n\n<template>\n <ChannelSelector\n :class=\"{ inactive: !isActive }\"\n :title=\"channel.name\"\n :src=\"getChannelThumbnail()\"\n @click=\"onItemClick\"\n />\n</template>\n","<script>\nimport ChannelItem from 'dashboard/components/widgets/ChannelItem.vue';\nimport router from '../../../index';\nimport PageHeader from '../SettingsSubPageHeader.vue';\nimport { mapGetters } from 'vuex';\nimport globalConfigMixin from 'shared/mixins/globalConfigMixin';\n\nexport default {\n components: {\n ChannelItem,\n PageHeader,\n },\n mixins: [globalConfigMixin],\n data() {\n return {\n enabledFeatures: {},\n };\n },\n computed: {\n account() {\n return this.$store.getters['accounts/getAccount'](this.accountId);\n },\n channelList() {\n const { apiChannelName, apiChannelThumbnail } = this.globalConfig;\n return [\n { key: 'website', name: 'Website' },\n { key: 'facebook', name: 'Messenger' },\n { key: 'whatsapp', name: 'WhatsApp' },\n { key: 'sms', name: 'SMS' },\n { key: 'email', name: 'Email' },\n {\n key: 'api',\n name: apiChannelName || 'API',\n thumbnail: apiChannelThumbnail,\n },\n { key: 'telegram', name: 'Telegram' },\n { key: 'line', name: 'Line' },\n ];\n },\n ...mapGetters({\n accountId: 'getCurrentAccountId',\n globalConfig: 'globalConfig/get',\n }),\n },\n mounted() {\n this.initializeEnabledFeatures();\n },\n methods: {\n async initializeEnabledFeatures() {\n this.enabledFeatures = this.account.features;\n },\n initChannelAuth(channel) {\n const params = {\n sub_page: channel,\n accountId: this.accountId,\n };\n router.push({ name: 'settings_inboxes_page_channel', params });\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"border border-n-weak bg-n-solid-1 rounded-t-lg border-b-0 h-full w-full p-6 col-span-6 overflow-auto\"\n >\n <PageHeader\n class=\"max-w-4xl\"\n :header-title=\"$t('INBOX_MGMT.ADD.AUTH.TITLE')\"\n :header-content=\"\n useInstallationName(\n $t('INBOX_MGMT.ADD.AUTH.DESC'),\n globalConfig.installationName\n )\n \"\n />\n <div\n class=\"grid max-w-3xl grid-cols-2 mx-0 mt-6 sm:grid-cols-3 lg:grid-cols-4\"\n >\n <ChannelItem\n v-for=\"channel in channelList\"\n :key=\"channel.key\"\n :channel=\"channel\"\n :enabled-features=\"enabledFeatures\"\n @channel-item-click=\"initChannelAuth\"\n />\n </div>\n </div>\n</template>\n","<script>\n/* eslint no-console: 0 */\nimport { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\n\nimport InboxMembersAPI from '../../../../api/inboxMembers';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\nimport router from '../../../index';\nimport PageHeader from '../SettingsSubPageHeader.vue';\nimport { useVuelidate } from '@vuelidate/core';\n\nexport default {\n components: {\n PageHeader,\n NextButton,\n },\n validations: {\n selectedAgents: {\n isEmpty() {\n return !!this.selectedAgents.length;\n },\n },\n },\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n selectedAgents: [],\n isCreating: false,\n };\n },\n computed: {\n ...mapGetters({\n agentList: 'agents/getAgents',\n }),\n },\n mounted() {\n this.$store.dispatch('agents/get');\n },\n methods: {\n async addAgents() {\n this.isCreating = true;\n const inboxId = this.$route.params.inbox_id;\n const selectedAgents = this.selectedAgents.map(x => x.id);\n\n try {\n await InboxMembersAPI.update({ inboxId, agentList: selectedAgents });\n router.replace({\n name: 'settings_inbox_finish',\n params: {\n page: 'new',\n inbox_id: this.$route.params.inbox_id,\n },\n });\n } catch (error) {\n useAlert(error.message);\n }\n this.isCreating = false;\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"border border-n-weak bg-n-solid-1 rounded-t-lg border-b-0 h-full w-full p-6 col-span-6 overflow-auto\"\n >\n <form class=\"flex flex-wrap flex-col mx-0\" @submit.prevent=\"addAgents()\">\n <div class=\"w-full\">\n <PageHeader\n :header-title=\"$t('INBOX_MGMT.ADD.AGENTS.TITLE')\"\n :header-content=\"$t('INBOX_MGMT.ADD.AGENTS.DESC')\"\n />\n </div>\n <div>\n <div class=\"w-full\">\n <label :class=\"{ error: v$.selectedAgents.$error }\">\n {{ $t('INBOX_MGMT.ADD.AGENTS.TITLE') }}\n <multiselect\n v-model=\"selectedAgents\"\n :options=\"agentList\"\n track-by=\"id\"\n label=\"name\"\n multiple\n :close-on-select=\"false\"\n :clear-on-select=\"false\"\n hide-selected\n selected-label\n :select-label=\"$t('FORMS.MULTISELECT.ENTER_TO_SELECT')\"\n :deselect-label=\"$t('FORMS.MULTISELECT.ENTER_TO_REMOVE')\"\n :placeholder=\"$t('INBOX_MGMT.ADD.AGENTS.PICK_AGENTS')\"\n @select=\"v$.selectedAgents.$touch\"\n />\n <span v-if=\"v$.selectedAgents.$error\" class=\"message\">\n {{ $t('INBOX_MGMT.ADD.AGENTS.VALIDATION_ERROR') }}\n </span>\n </label>\n </div>\n <div class=\"w-full\">\n <NextButton\n type=\"submit\"\n :is-loading=\"isCreating\"\n solid\n blue\n :label=\"$t('INBOX_MGMT.AGENTS.BUTTON_TEXT')\"\n />\n </div>\n </div>\n </form>\n </div>\n</template>\n","<script>\nexport default {\n props: {\n title: { type: String, default: '' },\n message: { type: String, default: '' },\n },\n};\n</script>\n\n<template>\n <div class=\"empty-state py-16 px-1 ml-0 mr-0\">\n <h3\n v-if=\"title\"\n class=\"text-n-slate-12 block text-center w-full text-xl font-medium\"\n >\n {{ title }}\n </h3>\n <p\n v-if=\"message\"\n class=\"block text-center text-n-slate-11 dark:text-slate-400 my-4 mx-auto w-[90%]\"\n >\n {{ message }}\n </p>\n <slot />\n </div>\n</template>\n","<script>\nimport EmptyState from '../../../../components/widgets/EmptyState.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n EmptyState,\n NextButton,\n },\n computed: {\n currentInbox() {\n return this.$store.getters['inboxes/getInbox'](\n this.$route.params.inbox_id\n );\n },\n isATwilioInbox() {\n return this.currentInbox.channel_type === 'Channel::TwilioSms';\n },\n isAEmailInbox() {\n return this.currentInbox.channel_type === 'Channel::Email';\n },\n isALineInbox() {\n return this.currentInbox.channel_type === 'Channel::Line';\n },\n isASmsInbox() {\n return this.currentInbox.channel_type === 'Channel::Sms';\n },\n isWhatsAppCloudInbox() {\n return (\n this.currentInbox.channel_type === 'Channel::Whatsapp' &&\n this.currentInbox.provider === 'whatsapp_cloud'\n );\n },\n message() {\n if (this.isATwilioInbox) {\n return `${this.$t('INBOX_MGMT.FINISH.MESSAGE')}. ${this.$t(\n 'INBOX_MGMT.ADD.TWILIO.API_CALLBACK.SUBTITLE'\n )}`;\n }\n\n if (this.isASmsInbox) {\n return `${this.$t('INBOX_MGMT.FINISH.MESSAGE')}. ${this.$t(\n 'INBOX_MGMT.ADD.SMS.BANDWIDTH.API_CALLBACK.SUBTITLE'\n )}`;\n }\n\n if (this.isALineInbox) {\n return `${this.$t('INBOX_MGMT.FINISH.MESSAGE')}. ${this.$t(\n 'INBOX_MGMT.ADD.LINE_CHANNEL.API_CALLBACK.SUBTITLE'\n )}`;\n }\n\n if (this.isWhatsAppCloudInbox) {\n return `${this.$t('INBOX_MGMT.FINISH.MESSAGE')}. ${this.$t(\n 'INBOX_MGMT.ADD.WHATSAPP.API_CALLBACK.SUBTITLE'\n )}`;\n }\n\n if (this.isAEmailInbox && !this.currentInbox.provider) {\n return this.$t('INBOX_MGMT.ADD.EMAIL_CHANNEL.FINISH_MESSAGE');\n }\n\n if (this.currentInbox.web_widget_script) {\n return this.$t('INBOX_MGMT.FINISH.WEBSITE_SUCCESS');\n }\n\n return this.$t('INBOX_MGMT.FINISH.MESSAGE');\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"border border-n-weak bg-n-solid-1 rounded-t-lg border-b-0 h-full w-full p-6 col-span-6 overflow-auto\"\n >\n <EmptyState\n :title=\"$t('INBOX_MGMT.FINISH.TITLE')\"\n :message=\"message\"\n :button-text=\"$t('INBOX_MGMT.FINISH.BUTTON_TEXT')\"\n >\n <div class=\"w-full text-center\">\n <div class=\"my-4 mx-auto max-w-[70%]\">\n <woot-code\n v-if=\"currentInbox.web_widget_script\"\n :script=\"currentInbox.web_widget_script\"\n />\n </div>\n <div class=\"w-[50%] max-w-[50%] ml-[25%]\">\n <woot-code\n v-if=\"isATwilioInbox\"\n lang=\"html\"\n :script=\"currentInbox.callback_webhook_url\"\n />\n </div>\n <div v-if=\"isWhatsAppCloudInbox\" class=\"w-[50%] max-w-[50%] ml-[25%]\">\n <p class=\"mt-8 font-medium text-slate-700 dark:text-slate-200\">\n {{ $t('INBOX_MGMT.ADD.WHATSAPP.API_CALLBACK.WEBHOOK_URL') }}\n </p>\n <woot-code lang=\"html\" :script=\"currentInbox.callback_webhook_url\" />\n <p class=\"mt-8 font-medium text-slate-700 dark:text-slate-200\">\n {{\n $t(\n 'INBOX_MGMT.ADD.WHATSAPP.API_CALLBACK.WEBHOOK_VERIFICATION_TOKEN'\n )\n }}\n </p>\n <woot-code\n lang=\"html\"\n :script=\"currentInbox.provider_config.webhook_verify_token\"\n />\n </div>\n <div class=\"w-[50%] max-w-[50%] ml-[25%]\">\n <woot-code\n v-if=\"isALineInbox\"\n lang=\"html\"\n :script=\"currentInbox.callback_webhook_url\"\n />\n </div>\n <div class=\"w-[50%] max-w-[50%] ml-[25%]\">\n <woot-code\n v-if=\"isASmsInbox\"\n lang=\"html\"\n :script=\"currentInbox.callback_webhook_url\"\n />\n </div>\n <div\n v-if=\"isAEmailInbox && !currentInbox.provider\"\n class=\"w-[50%] max-w-[50%] ml-[25%]\"\n >\n <woot-code lang=\"html\" :script=\"currentInbox.forward_to_email\" />\n </div>\n <div class=\"flex justify-center gap-2 mt-4\">\n <router-link\n :to=\"{\n name: 'settings_inbox_show',\n params: { inboxId: $route.params.inbox_id },\n }\"\n >\n <NextButton\n outline\n slate\n :label=\"$t('INBOX_MGMT.FINISH.MORE_SETTINGS')\"\n />\n </router-link>\n <router-link\n :to=\"{\n name: 'inbox_dashboard',\n params: { inboxId: $route.params.inbox_id },\n }\"\n >\n <NextButton\n solid\n teal\n :label=\"$t('INBOX_MGMT.FINISH.BUTTON_TEXT')\"\n />\n </router-link>\n </div>\n </div>\n </EmptyState>\n </div>\n</template>\n","import { FEATURE_FLAGS } from '../../../../featureFlags';\nimport { frontendURL } from '../../../../helper/URLHelper';\nimport ChannelFactory from './ChannelFactory.vue';\n\nimport SettingsContent from '../Wrapper.vue';\nimport SettingWrapper from '../SettingsWrapper.vue';\nimport InboxHome from './Index.vue';\nimport Settings from './Settings.vue';\nimport InboxChannel from './InboxChannels.vue';\nimport ChannelList from './ChannelList.vue';\nimport AddAgents from './AddAgents.vue';\nimport FinishSetup from './FinishSetup.vue';\n\nexport default {\n routes: [\n {\n path: frontendURL('accounts/:accountId/settings/inboxes'),\n component: SettingWrapper,\n children: [\n {\n path: '',\n redirect: to => {\n return { name: 'settings_inbox_list', params: to.params };\n },\n },\n {\n path: 'list',\n name: 'settings_inbox_list',\n component: InboxHome,\n meta: {\n featureFlag: FEATURE_FLAGS.INBOX_MANAGEMENT,\n permissions: ['administrator'],\n },\n },\n ],\n },\n {\n path: frontendURL('accounts/:accountId/settings/inboxes'),\n component: SettingsContent,\n props: params => {\n const showBackButton = params.name !== 'settings_inbox_list';\n const fullWidth = params.name === 'settings_inbox_show';\n return {\n headerTitle: 'INBOX_MGMT.HEADER',\n headerButtonText: 'SETTINGS.INBOXES.NEW_INBOX',\n icon: 'mail-inbox-all',\n newButtonRoutes: ['settings_inbox_list'],\n showBackButton,\n fullWidth,\n };\n },\n children: [\n {\n path: 'new',\n component: InboxChannel,\n children: [\n {\n path: '',\n name: 'settings_inbox_new',\n component: ChannelList,\n meta: {\n featureFlag: FEATURE_FLAGS.INBOX_MANAGEMENT,\n permissions: ['administrator'],\n },\n },\n {\n path: ':inbox_id/finish',\n name: 'settings_inbox_finish',\n component: FinishSetup,\n meta: {\n featureFlag: FEATURE_FLAGS.INBOX_MANAGEMENT,\n permissions: ['administrator'],\n },\n },\n {\n path: ':sub_page',\n name: 'settings_inboxes_page_channel',\n component: ChannelFactory,\n meta: {\n featureFlag: FEATURE_FLAGS.INBOX_MANAGEMENT,\n permissions: ['administrator'],\n },\n props: route => {\n return { channelName: route.params.sub_page };\n },\n },\n {\n path: ':inbox_id/agents',\n name: 'settings_inboxes_add_agents',\n meta: {\n featureFlag: FEATURE_FLAGS.INBOX_MANAGEMENT,\n permissions: ['administrator'],\n },\n component: AddAgents,\n },\n ],\n },\n {\n path: ':inboxId',\n name: 'settings_inbox_show',\n component: Settings,\n meta: {\n featureFlag: FEATURE_FLAGS.INBOX_MANAGEMENT,\n permissions: ['administrator'],\n },\n },\n ],\n },\n ],\n};\n","import { computed } from 'vue';\nimport { useMapGetter } from 'dashboard/composables/store';\n\n/**\n * Composable for managing integration hooks\n * @param {string|number} integrationId - The ID of the integration\n * @returns {Object} An object containing computed properties for the integration\n */\nexport const useIntegrationHook = integrationId => {\n const integrationGetter = useMapGetter('integrations/getIntegration');\n\n /**\n * The integration object\n * @type {import('vue').ComputedRef<Object>}\n */\n const integration = computed(() => {\n return integrationGetter.value(integrationId);\n });\n\n /**\n * Whether the integration hook type is 'inbox'\n * @type {import('vue').ComputedRef<boolean>}\n */\n const isHookTypeInbox = computed(() => {\n return integration.value.hook_type === 'inbox';\n });\n\n /**\n * Whether the integration has any connected hooks\n * @type {import('vue').ComputedRef<boolean>}\n */\n const hasConnectedHooks = computed(() => {\n return !!integration.value.hooks.length;\n });\n\n /**\n * The type of integration: 'multiple' or 'single'\n * @type {import('vue').ComputedRef<string>}\n */\n const integrationType = computed(() => {\n return integration.value.allow_multiple_hooks ? 'multiple' : 'single';\n });\n\n /**\n * Whether the integration allows multiple hooks\n * @type {import('vue').ComputedRef<boolean>}\n */\n const isIntegrationMultiple = computed(() => {\n return integrationType.value === 'multiple';\n });\n\n /**\n * Whether the integration allows only a single hook\n * @type {import('vue').ComputedRef<boolean>}\n */\n const isIntegrationSingle = computed(() => {\n return integrationType.value === 'single';\n });\n\n return {\n integration,\n integrationType,\n isIntegrationMultiple,\n isIntegrationSingle,\n isHookTypeInbox,\n hasConnectedHooks,\n };\n};\n","<!-- eslint-disable vue/v-slot-style -->\n<script>\nimport { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\nimport { useIntegrationHook } from 'dashboard/composables/useIntegrationHook';\nimport { FormKit } from '@formkit/vue';\n\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n FormKit,\n NextButton,\n },\n props: {\n integrationId: {\n type: String,\n required: true,\n },\n },\n emits: ['close'],\n setup(props) {\n const { integration, isHookTypeInbox } = useIntegrationHook(\n props.integrationId\n );\n\n return { integration, isHookTypeInbox };\n },\n data() {\n return {\n endPoint: '',\n alertMessage: '',\n values: {},\n };\n },\n computed: {\n ...mapGetters({\n uiFlags: 'integrations/getUIFlags',\n dialogFlowEnabledInboxes: 'inboxes/dialogFlowEnabledInboxes',\n }),\n inboxes() {\n return this.dialogFlowEnabledInboxes\n .filter(inbox => {\n if (!this.isIntegrationDialogflow) {\n return true;\n }\n return !this.connectedDialogflowInboxIds.includes(inbox.id);\n })\n .map(inbox => ({ label: inbox.name, value: inbox.id }));\n },\n\n connectedDialogflowInboxIds() {\n if (!this.isIntegrationDialogflow) {\n return [];\n }\n return this.integration.hooks.map(hook => hook.inbox?.id);\n },\n formItems() {\n return this.integration.settings_form_schema;\n },\n isIntegrationDialogflow() {\n return this.integration.id === 'dialogflow';\n },\n },\n methods: {\n onClose() {\n this.$emit('close');\n },\n buildHookPayload() {\n const hookPayload = {\n app_id: this.integration.id,\n settings: {},\n };\n\n hookPayload.settings = Object.keys(this.values).reduce((acc, key) => {\n if (key !== 'inbox') {\n acc[key] = this.values[key];\n }\n return acc;\n }, {});\n\n this.formItems.forEach(item => {\n if (item.validation.includes('JSON')) {\n hookPayload.settings[item.name] = JSON.parse(\n hookPayload.settings[item.name]\n );\n }\n });\n\n if (this.isHookTypeInbox && this.values.inbox) {\n hookPayload.inbox_id = this.values.inbox;\n }\n\n return hookPayload;\n },\n async submitForm() {\n try {\n await this.$store.dispatch(\n 'integrations/createHook',\n this.buildHookPayload()\n );\n this.alertMessage = this.$t('INTEGRATION_APPS.ADD.API.SUCCESS_MESSAGE');\n this.onClose();\n } catch (error) {\n const errorMessage = error?.response?.data?.message;\n this.alertMessage =\n errorMessage || this.$t('INTEGRATION_APPS.ADD.API.ERROR_MESSAGE');\n } finally {\n useAlert(this.alertMessage);\n }\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex flex-col h-auto overflow-auto integration-hooks\">\n <woot-modal-header\n :header-title=\"integration.name\"\n :header-content=\"integration.description\"\n />\n <FormKit\n v-model=\"values\"\n type=\"form\"\n form-class=\"w-full grid gap-4\"\n :submit-attrs=\"{\n inputClass: 'hidden',\n wrapperClass: 'hidden',\n }\"\n :incomplete-message=\"false\"\n @submit=\"submitForm\"\n >\n <FormKit v-for=\"item in formItems\" :key=\"item.name\" v-bind=\"item\" />\n <FormKit\n v-if=\"isHookTypeInbox\"\n :options=\"inboxes\"\n type=\"select\"\n name=\"inbox\"\n input-class=\"reset-base\"\n :placeholder=\"$t('INTEGRATION_APPS.ADD.FORM.INBOX.LABEL')\"\n :label=\"$t('INTEGRATION_APPS.ADD.FORM.INBOX.PLACEHOLDER')\"\n validation=\"required\"\n validation-name=\"Inbox\"\n />\n <div class=\"flex flex-row justify-end w-full gap-2 px-0 py-2\">\n <NextButton\n faded\n slate\n type=\"reset\"\n :label=\"$t('INTEGRATION_APPS.ADD.FORM.CANCEL')\"\n @click.prevent=\"onClose\"\n />\n <NextButton\n type=\"submit\"\n :label=\"$t('INTEGRATION_APPS.ADD.FORM.SUBMIT')\"\n :is-loading=\"uiFlags.isCreatingHook\"\n />\n </div>\n </FormKit>\n </div>\n</template>\n\n<style lang=\"css\">\n.formkit-outer {\n @apply mt-2;\n}\n\n.formkit-form > .formkit-wrapper > ul.formkit-messages {\n @apply hidden;\n}\n\n/* equivalent of .reset-base */\n.formkit-input {\n margin-bottom: 0px !important;\n}\n\n[data-invalid] .formkit-message {\n @apply text-red-500 block text-xs font-normal my-1 w-full;\n}\n\n.formkit-outer[data-type='checkbox'] .formkit-wrapper {\n @apply flex items-center gap-2 px-0.5;\n}\n\n.formkit-messages {\n @apply list-none m-0 p-0;\n}\n\n.formkit-actions {\n @apply hidden;\n}\n\n@media (prefers-color-scheme: dark) {\n .pre-chat-header-message .link {\n @apply text-woot-500 underline;\n }\n}\n</style>\n","<script setup>\nimport { defineProps, defineEmits } from 'vue';\nimport { useIntegrationHook } from 'dashboard/composables/useIntegrationHook';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n integrationId: {\n type: String,\n required: true,\n },\n});\n\ndefineEmits(['add', 'delete']);\n\nconst { integration, hasConnectedHooks } = useIntegrationHook(\n props.integrationId\n);\n</script>\n\n<template>\n <div\n class=\"outline outline-n-container outline-1 bg-n-alpha-3 rounded-md shadow flex-grow overflow-auto p-4\"\n >\n <div class=\"flex items-center justify-center\">\n <div class=\"flex h-16 w-16 items-center justify-center\">\n <img\n :src=\"`/dashboard/images/integrations/${integrationId}.png`\"\n class=\"max-w-full rounded-md border border-n-weak shadow-sm block dark:hidden bg-n-alpha-3 dark:bg-n-alpha-2\"\n />\n <img\n :src=\"`/dashboard/images/integrations/${integrationId}-dark.png`\"\n class=\"max-w-full rounded-md border border-n-weak shadow-sm hidden dark:block bg-n-alpha-3 dark:bg-n-alpha-2\"\n />\n </div>\n <div class=\"flex flex-col justify-center m-0 mx-4 flex-1\">\n <h3 class=\"mb-1 text-xl font-medium text-n-slate-12\">\n {{ integration.name }}\n </h3>\n <p class=\"text-n-slate-11 text-sm leading-6\">\n {{ integration.description }}\n </p>\n </div>\n <div class=\"flex justify-center items-center mb-0 w-[15%]\">\n <div v-if=\"hasConnectedHooks\">\n <div @click=\"$emit('delete', integration.hooks[0])\">\n <Button\n ruby\n faded\n :label=\"$t('INTEGRATION_APPS.DISCONNECT.BUTTON_TEXT')\"\n />\n </div>\n </div>\n <div v-else>\n <Button\n blue\n faded\n :label=\"$t('INTEGRATION_APPS.CONNECT.BUTTON_TEXT')\"\n @click=\"$emit('add')\"\n />\n </div>\n </div>\n </div>\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useIntegrationHook } from 'dashboard/composables/useIntegrationHook';\nimport BaseSettingsHeader from 'dashboard/routes/dashboard/settings/components/BaseSettingsHeader.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n BaseSettingsHeader,\n NextButton,\n },\n props: {\n integrationId: {\n type: String,\n required: true,\n },\n showAddButton: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['delete', 'add'],\n setup(props) {\n const { integration, isHookTypeInbox, hasConnectedHooks } =\n useIntegrationHook(props.integrationId);\n return { integration, isHookTypeInbox, hasConnectedHooks };\n },\n computed: {\n ...mapGetters({\n globalConfig: 'globalConfig/get',\n }),\n hookHeaders() {\n return this.integration.visible_properties;\n },\n hooks() {\n if (!this.hasConnectedHooks) {\n return [];\n }\n const { hooks } = this.integration;\n return hooks.map(hook => ({\n ...hook,\n id: hook.id,\n properties: this.hookHeaders.map(property =>\n hook.settings[property] ? hook.settings[property] : '--'\n ),\n }));\n },\n },\n mounted() {},\n methods: {\n inboxName(hook) {\n return hook.inbox ? hook.inbox.name : '';\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex flex-col flex-1 gap-8 overflow-auto\">\n <BaseSettingsHeader\n :title=\"integration.name\"\n :description=\"\n $t(\n `INTEGRATION_APPS.SIDEBAR_DESCRIPTION.${integration.name.toUpperCase()}`,\n { installationName: globalConfig.installationName }\n )\n \"\n :feature-name=\"integrationId\"\n :back-button-label=\"$t('INTEGRATION_SETTINGS.HEADER')\"\n >\n <template #actions>\n <NextButton\n v-if=\"showAddButton\"\n icon=\"i-lucide-circle-plus\"\n :label=\"$t('INTEGRATION_APPS.ADD_BUTTON')\"\n @click=\"$emit('add')\"\n />\n </template>\n </BaseSettingsHeader>\n <div class=\"w-full\">\n <table v-if=\"hasConnectedHooks\" class=\"woot-table\">\n <thead>\n <th\n v-for=\"hookHeader in hookHeaders\"\n :key=\"hookHeader\"\n class=\"ltr:!pl-0 rtl:!pr-0\"\n >\n {{ hookHeader }}\n </th>\n <th v-if=\"isHookTypeInbox\">\n {{ $t('INTEGRATION_APPS.LIST.INBOX') }}\n </th>\n </thead>\n <tbody>\n <tr v-for=\"hook in hooks\" :key=\"hook.id\">\n <td\n v-for=\"property in hook.properties\"\n :key=\"property\"\n class=\"ltr:!pl-0 rtl:!pr-0\"\n >\n {{ property }}\n </td>\n <td v-if=\"isHookTypeInbox\" class=\"break-words\">\n {{ inboxName(hook) }}\n </td>\n <td class=\"flex justify-end gap-1\">\n <NextButton\n v-tooltip.top=\"$t('INTEGRATION_APPS.LIST.DELETE.BUTTON_TEXT')\"\n icon=\"i-lucide-trash-2\"\n xs\n ruby\n faded\n @click=\"$emit('delete', hook)\"\n />\n </td>\n </tr>\n </tbody>\n </table>\n <p v-else class=\"flex flex-col items-center justify-center h-full\">\n {{\n $t('INTEGRATION_APPS.NO_HOOK_CONFIGURED', {\n integrationId: integration.id,\n })\n }}\n </p>\n </div>\n </div>\n</template>\n","<script>\nimport { isEmptyObject } from '../../../../helper/commons';\nimport { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\nimport { useIntegrationHook } from 'dashboard/composables/useIntegrationHook';\nimport NewHook from './NewHook.vue';\nimport SingleIntegrationHooks from './SingleIntegrationHooks.vue';\nimport MultipleIntegrationHooks from './MultipleIntegrationHooks.vue';\n\nexport default {\n components: {\n NewHook,\n SingleIntegrationHooks,\n MultipleIntegrationHooks,\n },\n props: {\n integrationId: {\n type: [String, Number],\n required: true,\n },\n },\n setup(props) {\n const { integrationId } = props;\n\n const {\n integration,\n isIntegrationMultiple,\n isIntegrationSingle,\n isHookTypeInbox,\n } = useIntegrationHook(integrationId);\n return {\n integration,\n isIntegrationMultiple,\n isIntegrationSingle,\n isHookTypeInbox,\n };\n },\n data() {\n return {\n loading: {},\n showAddHookModal: false,\n showDeleteConfirmationPopup: false,\n selectedHook: {},\n alertMessage: '',\n };\n },\n computed: {\n ...mapGetters({ uiFlags: 'integrations/getUIFlags' }),\n showIntegrationHooks() {\n return !this.uiFlags.isFetching && !isEmptyObject(this.integration);\n },\n showAddButton() {\n return this.showIntegrationHooks && this.isIntegrationMultiple;\n },\n deleteTitle() {\n return this.isHookTypeInbox\n ? this.$t('INTEGRATION_APPS.DELETE.TITLE.INBOX')\n : this.$t('INTEGRATION_APPS.DELETE.TITLE.ACCOUNT');\n },\n deleteMessage() {\n return this.isHookTypeInbox\n ? this.$t('INTEGRATION_APPS.DELETE.MESSAGE.INBOX')\n : this.$t('INTEGRATION_APPS.DELETE.MESSAGE.ACCOUNT');\n },\n confirmText() {\n return this.isHookTypeInbox\n ? this.$t('INTEGRATION_APPS.DELETE.CONFIRM_BUTTON_TEXT.INBOX')\n : this.$t('INTEGRATION_APPS.DELETE.CONFIRM_BUTTON_TEXT.ACCOUNT');\n },\n cancelText() {\n return this.$t('INTEGRATION_APPS.DELETE.CANCEL_BUTTON_TEXT');\n },\n },\n methods: {\n openAddHookModal() {\n this.showAddHookModal = true;\n },\n hideAddHookModal() {\n this.showAddHookModal = false;\n },\n openDeletePopup(response) {\n this.showDeleteConfirmationPopup = true;\n this.selectedHook = response;\n },\n closeDeletePopup() {\n this.showDeleteConfirmationPopup = false;\n },\n async confirmDeletion() {\n try {\n await this.$store.dispatch('integrations/deleteHook', {\n hookId: this.selectedHook.id,\n appId: this.selectedHook.app_id,\n });\n this.alertMessage = this.$t(\n 'INTEGRATION_APPS.DELETE.API.SUCCESS_MESSAGE'\n );\n this.closeDeletePopup();\n } catch (error) {\n const errorMessage = error?.response?.data?.message;\n this.alertMessage =\n errorMessage || this.$t('INTEGRATION_APPS.DELETE.API.ERROR_MESSAGE');\n } finally {\n useAlert(this.alertMessage);\n }\n },\n },\n};\n</script>\n\n<template>\n <div class=\"overflow-auto p-4 w-full my-auto flex flex-wrap h-full\">\n <div v-if=\"showIntegrationHooks\" class=\"w-full\">\n <div v-if=\"isIntegrationMultiple\">\n <MultipleIntegrationHooks\n :integration-id=\"integrationId\"\n :show-add-button=\"showAddButton\"\n @add=\"openAddHookModal\"\n @delete=\"openDeletePopup\"\n />\n </div>\n\n <div v-if=\"isIntegrationSingle\">\n <SingleIntegrationHooks\n :integration-id=\"integrationId\"\n @add=\"openAddHookModal\"\n @delete=\"openDeletePopup\"\n />\n </div>\n </div>\n\n <woot-modal v-model:show=\"showAddHookModal\" :on-close=\"hideAddHookModal\">\n <NewHook :integration-id=\"integrationId\" @close=\"hideAddHookModal\" />\n </woot-modal>\n\n <woot-delete-modal\n v-model:show=\"showDeleteConfirmationPopup\"\n :on-close=\"closeDeletePopup\"\n :on-confirm=\"confirmDeletion\"\n :title=\"deleteTitle\"\n :message=\"deleteMessage\"\n :confirm-text=\"confirmText\"\n :reject-text=\"cancelText\"\n />\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useStoreGetters } from 'dashboard/composables/store';\nimport { useI18n } from 'vue-i18n';\nimport { frontendURL } from 'dashboard/helper/URLHelper';\nimport { useInstallationName } from 'shared/mixins/globalConfigMixin';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n id: {\n type: [String, Number],\n required: true,\n },\n name: {\n type: String,\n default: '',\n },\n description: {\n type: String,\n default: '',\n },\n enabled: {\n type: Boolean,\n default: false,\n },\n});\n\nconst getters = useStoreGetters();\nconst accountId = getters.getCurrentAccountId;\nconst globalConfig = getters['globalConfig/get'];\n\nconst { t } = useI18n();\n\nconst integrationStatus = computed(() =>\n props.enabled\n ? t('INTEGRATION_APPS.STATUS.ENABLED')\n : t('INTEGRATION_APPS.STATUS.DISABLED')\n);\n\nconst integrationStatusColor = computed(() =>\n props.enabled ? 'bg-n-teal-9' : 'bg-n-slate-8'\n);\n\nconst actionURL = computed(() =>\n frontendURL(`accounts/${accountId.value}/settings/integrations/${props.id}`)\n);\n</script>\n\n<template>\n <div\n class=\"flex flex-col flex-1 p-6 m-[1px] outline outline-n-container outline-1 bg-n-alpha-3 rounded-md shadow\"\n >\n <div class=\"flex items-start justify-between\">\n <div class=\"flex h-12 w-12 mb-4\">\n <img\n :src=\"`/dashboard/images/integrations/${id}.png`\"\n class=\"max-w-full rounded-md border border-n-weak shadow-sm block dark:hidden bg-n-alpha-3 dark:bg-n-alpha-2\"\n />\n <img\n :src=\"`/dashboard/images/integrations/${id}-dark.png`\"\n class=\"max-w-full rounded-md border border-n-weak shadow-sm hidden dark:block bg-n-alpha-3 dark:bg-n-alpha-2\"\n />\n </div>\n <span\n v-tooltip=\"integrationStatus\"\n class=\"text-white p-0.5 rounded-full w-5 h-5 flex items-center justify-center\"\n :class=\"integrationStatusColor\"\n >\n <i class=\"i-ph-check-bold text-sm\" />\n </span>\n </div>\n <div class=\"flex flex-col m-0 flex-1\">\n <div\n class=\"font-medium mb-2 text-n-slate-12 flex justify-between items-center\"\n >\n <span class=\"text-base font-semibold\">{{ name }}</span>\n <router-link :to=\"actionURL\">\n <Button :label=\"$t('INTEGRATION_APPS.CONFIGURE')\" link />\n </router-link>\n </div>\n <p class=\"text-n-slate-11\">\n {{ useInstallationName(description, globalConfig.installationName) }}\n </p>\n </div>\n </div>\n</template>\n","<script setup>\nimport { useStoreGetters, useStore } from 'dashboard/composables/store';\nimport { computed, onMounted } from 'vue';\nimport IntegrationItem from './IntegrationItem.vue';\nimport SettingsLayout from '../SettingsLayout.vue';\nimport BaseSettingsHeader from '../components/BaseSettingsHeader.vue';\n\nconst store = useStore();\nconst getters = useStoreGetters();\n\nconst uiFlags = getters['integrations/getUIFlags'];\n\nconst integrationList = computed(\n () => getters['integrations/getAppIntegrations'].value\n);\n\nonMounted(() => {\n store.dispatch('integrations/get');\n});\n</script>\n\n<template>\n <SettingsLayout\n :is-loading=\"uiFlags.isFetching\"\n :loading-message=\"$t('INTEGRATION_SETTINGS.LOADING')\"\n >\n <template #header>\n <BaseSettingsHeader\n :title=\"$t('INTEGRATION_SETTINGS.HEADER')\"\n :description=\"$t('INTEGRATION_SETTINGS.DESCRIPTION')\"\n :link-text=\"$t('INTEGRATION_SETTINGS.LEARN_MORE')\"\n feature-name=\"integrations\"\n />\n </template>\n <template #body>\n <div class=\"flex-grow flex-shrink overflow-auto\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4\">\n <IntegrationItem\n v-for=\"item in integrationList\"\n :id=\"item.id\"\n :key=\"item.id\"\n :logo=\"item.logo\"\n :name=\"item.name\"\n :description=\"item.description\"\n :enabled=\"item.enabled\"\n />\n </div>\n </div>\n </template>\n </SettingsLayout>\n</template>\n","export const getI18nKey = (prefix, event) => {\n const eventName = event.toUpperCase();\n return `${prefix}.${eventName}`;\n};\n","<script>\nimport { useVuelidate } from '@vuelidate/core';\nimport { required, url, minLength } from '@vuelidate/validators';\nimport wootConstants from 'dashboard/constants/globals';\nimport { getI18nKey } from 'dashboard/routes/dashboard/settings/helper/settingsHelper';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nconst { EXAMPLE_WEBHOOK_URL } = wootConstants;\n\nconst SUPPORTED_WEBHOOK_EVENTS = [\n 'conversation_created',\n 'conversation_status_changed',\n 'conversation_updated',\n 'message_created',\n 'message_updated',\n 'webwidget_triggered',\n 'contact_created',\n 'contact_updated',\n];\n\nexport default {\n components: {\n NextButton,\n },\n props: {\n value: {\n type: Object,\n default: () => ({}),\n },\n isSubmitting: {\n type: Boolean,\n default: false,\n },\n submitLabel: {\n type: String,\n required: true,\n },\n },\n emits: ['submit', 'cancel'],\n setup() {\n return { v$: useVuelidate() };\n },\n validations: {\n url: {\n required,\n minLength: minLength(7),\n url,\n },\n subscriptions: {\n required,\n },\n },\n data() {\n return {\n url: this.value.url || '',\n subscriptions: this.value.subscriptions || [],\n supportedWebhookEvents: SUPPORTED_WEBHOOK_EVENTS,\n };\n },\n computed: {\n webhookURLInputPlaceholder() {\n return this.$t(\n 'INTEGRATION_SETTINGS.WEBHOOK.FORM.END_POINT.PLACEHOLDER',\n {\n webhookExampleURL: EXAMPLE_WEBHOOK_URL,\n }\n );\n },\n },\n methods: {\n onSubmit() {\n this.$emit('submit', {\n url: this.url,\n subscriptions: this.subscriptions,\n });\n },\n getI18nKey,\n },\n};\n</script>\n\n<template>\n <form class=\"flex flex-col w-full\" @submit.prevent=\"onSubmit\">\n <div class=\"w-full\">\n <label :class=\"{ error: v$.url.$error }\">\n {{ $t('INTEGRATION_SETTINGS.WEBHOOK.FORM.END_POINT.LABEL') }}\n <input\n v-model=\"url\"\n type=\"text\"\n name=\"url\"\n :placeholder=\"webhookURLInputPlaceholder\"\n @input=\"v$.url.$touch\"\n />\n <span v-if=\"v$.url.$error\" class=\"message\">\n {{ $t('INTEGRATION_SETTINGS.WEBHOOK.FORM.END_POINT.ERROR') }}\n </span>\n </label>\n <label :class=\"{ error: v$.url.$error }\" class=\"mb-2\">\n {{ $t('INTEGRATION_SETTINGS.WEBHOOK.FORM.SUBSCRIPTIONS.LABEL') }}\n </label>\n <div class=\"flex flex-col gap-2.5 mb-4\">\n <div\n v-for=\"event in supportedWebhookEvents\"\n :key=\"event\"\n class=\"flex items-center\"\n >\n <input\n :id=\"event\"\n v-model=\"subscriptions\"\n type=\"checkbox\"\n :value=\"event\"\n name=\"subscriptions\"\n class=\"mr-2\"\n />\n <label :for=\"event\" class=\"text-sm\">\n {{\n `${$t(\n getI18nKey(\n 'INTEGRATION_SETTINGS.WEBHOOK.FORM.SUBSCRIPTIONS.EVENTS',\n event\n )\n )} (${event})`\n }}\n </label>\n </div>\n </div>\n </div>\n\n <div class=\"flex flex-row justify-end w-full gap-2 px-0 py-2\">\n <NextButton\n faded\n slate\n type=\"reset\"\n :label=\"$t('INTEGRATION_SETTINGS.WEBHOOK.FORM.CANCEL')\"\n @click.prevent=\"$emit('cancel')\"\n />\n <NextButton\n type=\"submit\"\n :disabled=\"v$.$invalid || isSubmitting\"\n :is-loading=\"isSubmitting\"\n :label=\"submitLabel\"\n />\n </div>\n </form>\n</template>\n","<script>\nimport { useAlert } from 'dashboard/composables';\nimport globalConfigMixin from 'shared/mixins/globalConfigMixin';\nimport { mapGetters } from 'vuex';\nimport WebhookForm from './WebhookForm.vue';\n\nexport default {\n components: { WebhookForm },\n mixins: [globalConfigMixin],\n props: {\n onClose: {\n type: Function,\n required: true,\n },\n },\n computed: {\n ...mapGetters({\n globalConfig: 'globalConfig/get',\n uiFlags: 'webhooks/getUIFlags',\n }),\n },\n methods: {\n async onSubmit(webhook) {\n try {\n await this.$store.dispatch('webhooks/create', { webhook });\n useAlert(\n this.$t('INTEGRATION_SETTINGS.WEBHOOK.ADD.API.SUCCESS_MESSAGE')\n );\n this.onClose();\n } catch (error) {\n const message =\n error.response.data.message ||\n this.$t('INTEGRATION_SETTINGS.WEBHOOK.EDIT.API.ERROR_MESSAGE');\n useAlert(message);\n }\n },\n },\n};\n</script>\n\n<template>\n <div class=\"h-auto overflow-auto flex flex-col\">\n <woot-modal-header\n :header-title=\"$t('INTEGRATION_SETTINGS.WEBHOOK.ADD.TITLE')\"\n :header-content=\"\n useInstallationName(\n $t('INTEGRATION_SETTINGS.WEBHOOK.FORM.DESC'),\n globalConfig.installationName\n )\n \"\n />\n <WebhookForm\n :is-submitting=\"uiFlags.creatingItem\"\n :submit-label=\"$t('INTEGRATION_SETTINGS.WEBHOOK.FORM.ADD_SUBMIT')\"\n @submit=\"onSubmit\"\n @cancel=\"onClose\"\n />\n </div>\n</template>\n","<script>\nimport { useAlert } from 'dashboard/composables';\nimport { mapGetters } from 'vuex';\nimport WebhookForm from './WebhookForm.vue';\n\nexport default {\n components: { WebhookForm },\n props: {\n value: {\n type: Object,\n required: true,\n },\n id: {\n type: [Number, String],\n required: true,\n },\n onClose: {\n type: Function,\n required: true,\n },\n },\n computed: {\n ...mapGetters({ uiFlags: 'webhooks/getUIFlags' }),\n },\n methods: {\n async onSubmit(webhook) {\n try {\n await this.$store.dispatch('webhooks/update', {\n webhook,\n id: this.id,\n });\n useAlert(\n this.$t('INTEGRATION_SETTINGS.WEBHOOK.EDIT.API.SUCCESS_MESSAGE')\n );\n this.onClose();\n } catch (error) {\n const alertMessage =\n error?.response?.data?.message ||\n this.$t('INTEGRATION_SETTINGS.WEBHOOK.EDIT.API.ERROR_MESSAGE');\n useAlert(alertMessage);\n }\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex flex-col h-auto overflow-auto\">\n <woot-modal-header\n :header-title=\"$t('INTEGRATION_SETTINGS.WEBHOOK.EDIT.TITLE')\"\n />\n <WebhookForm\n :value=\"value\"\n :is-submitting=\"uiFlags.updatingItem\"\n :submit-label=\"$t('INTEGRATION_SETTINGS.WEBHOOK.FORM.EDIT_SUBMIT')\"\n @submit=\"onSubmit\"\n @cancel=\"onClose\"\n />\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { getI18nKey } from 'dashboard/routes/dashboard/settings/helper/settingsHelper';\nimport ShowMore from 'dashboard/components/widgets/ShowMore.vue';\nimport { useI18n } from 'vue-i18n';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n webhook: {\n type: Object,\n required: true,\n },\n index: {\n type: Number,\n required: true,\n },\n});\n\nconst emit = defineEmits(['edit', 'delete']);\nconst { t } = useI18n();\nconst subscribedEvents = computed(() => {\n const { subscriptions } = props.webhook;\n return subscriptions\n .map(event =>\n t(\n getI18nKey(\n 'INTEGRATION_SETTINGS.WEBHOOK.FORM.SUBSCRIPTIONS.EVENTS',\n event\n )\n )\n )\n .join(', ');\n});\n</script>\n\n<template>\n <tr>\n <td class=\"py-4 ltr:pr-4 rtl:pl-4\">\n <div class=\"font-medium break-words text-slate-700 dark:text-slate-100\">\n {{ webhook.url }}\n </div>\n <div class=\"block mt-1 text-sm text-slate-500 dark:text-slate-400\">\n <span class=\"font-medium\">\n {{ $t('INTEGRATION_SETTINGS.WEBHOOK.SUBSCRIBED_EVENTS') }}:\n </span>\n <ShowMore :text=\"subscribedEvents\" :limit=\"60\" />\n </div>\n </td>\n <td class=\"py-4 min-w-xs\">\n <div class=\"flex justify-end gap-1\">\n <Button\n v-tooltip.top=\"$t('INTEGRATION_SETTINGS.WEBHOOK.EDIT.BUTTON_TEXT')\"\n icon=\"i-lucide-pen\"\n slate\n xs\n faded\n @click=\"emit('edit', webhook)\"\n />\n <Button\n v-tooltip.top=\"$t('INTEGRATION_SETTINGS.WEBHOOK.DELETE.BUTTON_TEXT')\"\n icon=\"i-lucide-trash-2\"\n xs\n ruby\n faded\n @click=\"emit('delete', webhook, index)\"\n />\n </div>\n </td>\n </tr>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\nimport NewWebhook from './NewWebHook.vue';\nimport EditWebhook from './EditWebHook.vue';\nimport WebhookRow from './WebhookRow.vue';\nimport BaseSettingsHeader from '../../components/BaseSettingsHeader.vue';\nimport SettingsLayout from '../../SettingsLayout.vue';\n\nexport default {\n components: {\n SettingsLayout,\n NextButton,\n BaseSettingsHeader,\n NewWebhook,\n EditWebhook,\n WebhookRow,\n },\n data() {\n return {\n loading: {},\n showAddPopup: false,\n showEditPopup: false,\n showDeleteConfirmationPopup: false,\n selectedWebHook: {},\n };\n },\n computed: {\n ...mapGetters({\n records: 'webhooks/getWebhooks',\n uiFlags: 'webhooks/getUIFlags',\n }),\n integration() {\n return this.$store.getters['integrations/getIntegration']('webhook');\n },\n tableHeaders() {\n return [\n this.$t(\n 'INTEGRATION_SETTINGS.WEBHOOK.LIST.TABLE_HEADER.WEBHOOK_ENDPOINT'\n ),\n this.$t('INTEGRATION_SETTINGS.WEBHOOK.LIST.TABLE_HEADER.ACTIONS'),\n ];\n },\n },\n mounted() {\n this.$store.dispatch('webhooks/get');\n },\n methods: {\n openAddPopup() {\n this.showAddPopup = true;\n },\n hideAddPopup() {\n this.showAddPopup = false;\n },\n openDeletePopup(response) {\n this.showDeleteConfirmationPopup = true;\n this.selectedWebHook = response;\n },\n closeDeletePopup() {\n this.showDeleteConfirmationPopup = false;\n },\n openEditPopup(webhook) {\n this.showEditPopup = true;\n this.selectedWebHook = webhook;\n },\n hideEditPopup() {\n this.showEditPopup = false;\n },\n confirmDeletion() {\n this.loading[this.selectedWebHook.id] = true;\n this.closeDeletePopup();\n this.deleteWebhook(this.selectedWebHook.id);\n },\n async deleteWebhook(id) {\n try {\n await this.$store.dispatch('webhooks/delete', id);\n useAlert(\n this.$t('INTEGRATION_SETTINGS.WEBHOOK.DELETE.API.SUCCESS_MESSAGE')\n );\n } catch (error) {\n useAlert(\n this.$t('INTEGRATION_SETTINGS.WEBHOOK.DELETE.API.ERROR_MESSAGE')\n );\n }\n },\n },\n};\n</script>\n\n<template>\n <SettingsLayout\n :is-loading=\"uiFlags.fetchingList\"\n :loading-message=\"$t('INTEGRATION_SETTINGS.WEBHOOK.LOADING')\"\n :no-records-message=\"$t('INTEGRATION_SETTINGS.WEBHOOK.LIST.404')\"\n :no-records-found=\"!records.length\"\n >\n <template #header>\n <BaseSettingsHeader\n v-if=\"integration.name\"\n :title=\"integration.name\"\n :description=\"integration.description\"\n :link-text=\"$t('INTEGRATION_SETTINGS.WEBHOOK.LEARN_MORE')\"\n feature-name=\"webhook\"\n :back-button-label=\"$t('INTEGRATION_SETTINGS.HEADER')\"\n >\n <template #actions>\n <NextButton\n blue\n icon=\"i-lucide-circle-plus\"\n :label=\"$t('INTEGRATION_SETTINGS.WEBHOOK.HEADER_BTN_TXT')\"\n @click=\"openAddPopup\"\n />\n </template>\n </BaseSettingsHeader>\n </template>\n <template #body>\n <table class=\"min-w-full divide-y divide-slate-75 dark:divide-slate-700\">\n <thead>\n <th\n v-for=\"thHeader in tableHeaders\"\n :key=\"thHeader\"\n class=\"py-4 ltr:pr-4 rtl:pl-4 text-left font-semibold text-n-slate-11 last:text-right last:pr-4\"\n >\n {{ thHeader }}\n </th>\n </thead>\n <tbody\n class=\"divide-y divide-slate-25 dark:divide-slate-800 flex-1 text-slate-700 dark:text-slate-100\"\n >\n <WebhookRow\n v-for=\"(webHookItem, index) in records\"\n :key=\"webHookItem.id\"\n :index=\"index\"\n :webhook=\"webHookItem\"\n @edit=\"openEditPopup\"\n @delete=\"openDeletePopup\"\n />\n </tbody>\n </table>\n </template>\n <woot-modal v-model:show=\"showAddPopup\" :on-close=\"hideAddPopup\">\n <NewWebhook v-if=\"showAddPopup\" :on-close=\"hideAddPopup\" />\n </woot-modal>\n\n <woot-modal v-model:show=\"showEditPopup\" :on-close=\"hideEditPopup\">\n <EditWebhook\n v-if=\"showEditPopup\"\n :id=\"selectedWebHook.id\"\n :value=\"selectedWebHook\"\n :on-close=\"hideEditPopup\"\n />\n </woot-modal>\n <woot-delete-modal\n v-model:show=\"showDeleteConfirmationPopup\"\n :on-close=\"closeDeletePopup\"\n :on-confirm=\"confirmDeletion\"\n :title=\"$t('INTEGRATION_SETTINGS.WEBHOOK.DELETE.CONFIRM.TITLE')\"\n :message=\"\n $t('INTEGRATION_SETTINGS.WEBHOOK.DELETE.CONFIRM.MESSAGE', {\n webhookURL: selectedWebHook.url,\n })\n \"\n :confirm-text=\"$t('INTEGRATION_SETTINGS.WEBHOOK.DELETE.CONFIRM.YES')\"\n :reject-text=\"$t('INTEGRATION_SETTINGS.WEBHOOK.DELETE.CONFIRM.NO')\"\n />\n </SettingsLayout>\n</template>\n","<script>\nimport { useVuelidate } from '@vuelidate/core';\nimport { required, url } from '@vuelidate/validators';\nimport { useAlert } from 'dashboard/composables';\n\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n NextButton,\n },\n props: {\n show: {\n type: Boolean,\n default: false,\n },\n mode: {\n type: String,\n default: 'create',\n },\n selectedAppData: {\n type: Object,\n default: () => ({}),\n },\n },\n emits: ['close'],\n setup() {\n return { v$: useVuelidate() };\n },\n validations: {\n app: {\n title: { required },\n content: {\n type: { required },\n url: { required, url },\n },\n },\n },\n data() {\n return {\n isLoading: false,\n app: {\n title: '',\n content: {\n type: 'frame',\n url: '',\n },\n },\n };\n },\n computed: {\n header() {\n return this.$t(`INTEGRATION_SETTINGS.DASHBOARD_APPS.${this.mode}.HEADER`);\n },\n submitButtonLabel() {\n return this.$t(\n `INTEGRATION_SETTINGS.DASHBOARD_APPS.${this.mode}.FORM_SUBMIT`\n );\n },\n },\n mounted() {\n if (this.mode === 'UPDATE' && this.selectedAppData) {\n this.app.title = this.selectedAppData.title;\n this.app.content = this.selectedAppData.content[0];\n }\n },\n methods: {\n closeModal() {\n // Reset the data once closed\n this.app = {\n title: '',\n content: { type: 'frame', url: '' },\n };\n this.$emit('close');\n },\n async submit() {\n try {\n this.v$.$touch();\n if (this.v$.$invalid) {\n return;\n }\n\n const action = this.mode.toLowerCase();\n const payload = {\n title: this.app.title,\n content: [this.app.content],\n };\n\n if (action === 'update') {\n payload.id = this.selectedAppData.id;\n }\n\n this.isLoading = true;\n await this.$store.dispatch(`dashboardApps/${action}`, payload);\n useAlert(\n this.$t(\n `INTEGRATION_SETTINGS.DASHBOARD_APPS.${this.mode}.API_SUCCESS`\n )\n );\n this.closeModal();\n } catch (err) {\n useAlert(\n this.$t(`INTEGRATION_SETTINGS.DASHBOARD_APPS.${this.mode}.API_ERROR`)\n );\n } finally {\n this.isLoading = false;\n }\n },\n },\n};\n</script>\n\n<template>\n <woot-modal :show=\"show\" :on-close=\"closeModal\">\n <div class=\"flex flex-col h-auto overflow-auto\">\n <woot-modal-header :header-title=\"header\" />\n <form class=\"w-full\" @submit.prevent=\"submit\">\n <woot-input\n v-model=\"app.title\"\n :class=\"{ error: v$.app.title.$error }\"\n class=\"w-full\"\n :label=\"$t('INTEGRATION_SETTINGS.DASHBOARD_APPS.FORM.TITLE_LABEL')\"\n :placeholder=\"\n $t('INTEGRATION_SETTINGS.DASHBOARD_APPS.FORM.TITLE_PLACEHOLDER')\n \"\n :error=\"\n v$.app.title.$error\n ? $t('INTEGRATION_SETTINGS.DASHBOARD_APPS.FORM.TITLE_ERROR')\n : null\n \"\n data-testid=\"app-title\"\n @input=\"v$.app.title.$touch\"\n @blur=\"v$.app.title.$touch\"\n />\n <woot-input\n v-model=\"app.content.url\"\n :class=\"{ error: v$.app.content.url.$error }\"\n class=\"w-full\"\n :label=\"$t('INTEGRATION_SETTINGS.DASHBOARD_APPS.FORM.URL_LABEL')\"\n :placeholder=\"\n $t('INTEGRATION_SETTINGS.DASHBOARD_APPS.FORM.URL_PLACEHOLDER')\n \"\n :error=\"\n v$.app.content.url.$error\n ? $t('INTEGRATION_SETTINGS.DASHBOARD_APPS.FORM.URL_ERROR')\n : null\n \"\n data-testid=\"app-url\"\n @input=\"v$.app.content.url.$touch\"\n @blur=\"v$.app.content.url.$touch\"\n />\n <div class=\"flex flex-row justify-end w-full gap-2 px-0 py-2\">\n <NextButton\n faded\n slate\n type=\"reset\"\n :label=\"\n $t('INTEGRATION_SETTINGS.DASHBOARD_APPS.CREATE.FORM_CANCEL')\n \"\n @click.prevent=\"closeModal\"\n />\n <NextButton\n type=\"submit\"\n :label=\"submitButtonLabel\"\n :disabled=\"v$.$invalid\"\n :is-loading=\"isLoading\"\n />\n </div>\n </form>\n </div>\n </woot-modal>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\nimport DashboardAppModal from './DashboardAppModal.vue';\nimport DashboardAppsRow from './DashboardAppsRow.vue';\nimport globalConfigMixin from 'shared/mixins/globalConfigMixin';\nimport BaseSettingsHeader from '../../components/BaseSettingsHeader.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n BaseSettingsHeader,\n DashboardAppModal,\n DashboardAppsRow,\n NextButton,\n },\n mixins: [globalConfigMixin],\n data() {\n return {\n loading: {},\n showDashboardAppPopup: false,\n showDeleteConfirmationPopup: false,\n selectedApp: {},\n mode: 'CREATE',\n };\n },\n computed: {\n ...mapGetters({\n records: 'dashboardApps/getRecords',\n uiFlags: 'dashboardApps/getUIFlags',\n }),\n tableHeaders() {\n return [\n this.$t('INTEGRATION_SETTINGS.DASHBOARD_APPS.LIST.TABLE_HEADER.NAME'),\n this.$t(\n 'INTEGRATION_SETTINGS.DASHBOARD_APPS.LIST.TABLE_HEADER.ENDPOINT'\n ),\n ];\n },\n },\n mounted() {\n this.$store.dispatch('dashboardApps/get');\n },\n methods: {\n toggleDashboardAppPopup() {\n this.showDashboardAppPopup = !this.showDashboardAppPopup;\n this.selectedApp = {};\n },\n openDeletePopup(response) {\n this.showDeleteConfirmationPopup = true;\n this.selectedApp = response;\n },\n openCreatePopup() {\n this.mode = 'CREATE';\n this.selectedApp = {};\n this.showDashboardAppPopup = true;\n },\n closeDeletePopup() {\n this.showDeleteConfirmationPopup = false;\n },\n editApp(app) {\n this.loading[app.id] = true;\n this.mode = 'UPDATE';\n this.selectedApp = app;\n this.showDashboardAppPopup = true;\n },\n confirmDeletion() {\n this.loading[this.selectedApp.id] = true;\n this.closeDeletePopup();\n this.deleteApp(this.selectedApp.id);\n },\n async deleteApp(id) {\n try {\n await this.$store.dispatch('dashboardApps/delete', id);\n useAlert(\n this.$t('INTEGRATION_SETTINGS.DASHBOARD_APPS.DELETE.API_SUCCESS')\n );\n } catch (error) {\n useAlert(\n this.$t('INTEGRATION_SETTINGS.DASHBOARD_APPS.DELETE.API_ERROR')\n );\n }\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex flex-col flex-1 gap-8 overflow-auto\">\n <BaseSettingsHeader\n :title=\"$t('INTEGRATION_SETTINGS.DASHBOARD_APPS.TITLE')\"\n :description=\"$t('INTEGRATION_SETTINGS.DASHBOARD_APPS.DESCRIPTION')\"\n :link-text=\"$t('INTEGRATION_SETTINGS.DASHBOARD_APPS.LEARN_MORE')\"\n feature-name=\"dashboard_apps\"\n :back-button-label=\"$t('INTEGRATION_SETTINGS.HEADER')\"\n >\n <template #actions>\n <NextButton\n icon=\"i-lucide-circle-plus\"\n :label=\"$t('INTEGRATION_SETTINGS.DASHBOARD_APPS.HEADER_BTN_TXT')\"\n @click=\"openCreatePopup\"\n />\n </template>\n </BaseSettingsHeader>\n <div class=\"w-full overflow-x-auto text-slate-700 dark:text-slate-200\">\n <p\n v-if=\"!uiFlags.isFetching && !records.length\"\n class=\"flex flex-col items-center justify-center h-full\"\n >\n {{ $t('INTEGRATION_SETTINGS.DASHBOARD_APPS.LIST.404') }}\n </p>\n <woot-loading-state\n v-if=\"uiFlags.isFetching\"\n :message=\"$t('INTEGRATION_SETTINGS.DASHBOARD_APPS.LIST.LOADING')\"\n />\n <table\n v-if=\"!uiFlags.isFetching && records.length\"\n class=\"min-w-full divide-y divide-slate-75 dark:divide-slate-700\"\n >\n <thead>\n <th\n v-for=\"thHeader in tableHeaders\"\n :key=\"thHeader\"\n class=\"py-4 ltr:pr-4 rtl:pl-4 font-semibold text-left text-slate-700 dark:text-slate-300\"\n >\n {{ thHeader }}\n </th>\n </thead>\n <tbody class=\"divide-y divide-slate-50 dark:divide-slate-800\">\n <DashboardAppsRow\n v-for=\"(dashboardAppItem, index) in records\"\n :key=\"dashboardAppItem.id\"\n :index=\"index\"\n :app=\"dashboardAppItem\"\n @edit=\"editApp\"\n @delete=\"openDeletePopup\"\n />\n </tbody>\n </table>\n </div>\n\n <DashboardAppModal\n v-if=\"showDashboardAppPopup\"\n :show=\"showDashboardAppPopup\"\n :mode=\"mode\"\n :selected-app-data=\"selectedApp\"\n @close=\"toggleDashboardAppPopup\"\n />\n\n <woot-delete-modal\n v-model:show=\"showDeleteConfirmationPopup\"\n :on-close=\"closeDeletePopup\"\n :on-confirm=\"confirmDeletion\"\n :title=\"$t('INTEGRATION_SETTINGS.DASHBOARD_APPS.DELETE.TITLE')\"\n :message=\"\n $t('INTEGRATION_SETTINGS.DASHBOARD_APPS.DELETE.MESSAGE', {\n appName: selectedApp.title,\n })\n \"\n :confirm-text=\"\n $t('INTEGRATION_SETTINGS.DASHBOARD_APPS.DELETE.CONFIRM_YES')\n \"\n :reject-text=\"$t('INTEGRATION_SETTINGS.DASHBOARD_APPS.DELETE.CONFIRM_NO')\"\n />\n </div>\n</template>\n","import { onClickOutside as onClickOutside$1, useActiveElement, useBattery, useBrowserLocation, useClipboard, useDark, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDocumentVisibility, useStorage as useStorage$1, isClient as isClient$1, useDraggable, useElementBounding, useElementSize as useElementSize$1, useElementVisibility as useElementVisibility$1, useEyeDropper, useFullscreen, useGeolocation, useIdle, useMouse, useMouseInElement, useMousePressed, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, usePointer, usePointerLock, usePreferredColorScheme, usePreferredContrast, usePreferredDark as usePreferredDark$1, usePreferredLanguages, usePreferredReducedMotion, useTimeAgo, useTimestamp, useVirtualList, useWindowFocus, useWindowSize } from '@vueuse/core';\nimport { defineComponent, ref, h, watch, computed, reactive, getCurrentInstance, onMounted, watchEffect, shallowRef, nextTick, toRefs } from 'vue';\nimport { isClient, toValue, noop, isObject, tryOnScopeDispose, isIOS, pausableWatch, tryOnMounted, toRef, useToggle, notNullish, promiseTimeout, until, useDebounceFn, useThrottleFn, tryOnUnmounted } from '@vueuse/shared';\n\nconst OnClickOutside = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"OnClickOutside\",\n props: [\"as\", \"options\"],\n emits: [\"trigger\"],\n setup(props, { slots, emit }) {\n const target = ref();\n onClickOutside$1(target, (e) => {\n emit(\"trigger\", e);\n }, props.options);\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target }, slots.default());\n };\n }\n});\n\nconst defaultWindow = isClient ? window : void 0;\n\nfunction unrefElement(elRef) {\n var _a;\n const plain = toValue(elRef);\n return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;\n}\n\nfunction useEventListener(...args) {\n let target;\n let events;\n let listeners;\n let options;\n if (typeof args[0] === \"string\" || Array.isArray(args[0])) {\n [events, listeners, options] = args;\n target = defaultWindow;\n } else {\n [target, events, listeners, options] = args;\n }\n if (!target)\n return noop;\n if (!Array.isArray(events))\n events = [events];\n if (!Array.isArray(listeners))\n listeners = [listeners];\n const cleanups = [];\n const cleanup = () => {\n cleanups.forEach((fn) => fn());\n cleanups.length = 0;\n };\n const register = (el, event, listener, options2) => {\n el.addEventListener(event, listener, options2);\n return () => el.removeEventListener(event, listener, options2);\n };\n const stopWatch = watch(\n () => [unrefElement(target), toValue(options)],\n ([el, options2]) => {\n cleanup();\n if (!el)\n return;\n const optionsClone = isObject(options2) ? { ...options2 } : options2;\n cleanups.push(\n ...events.flatMap((event) => {\n return listeners.map((listener) => register(el, event, listener, optionsClone));\n })\n );\n },\n { immediate: true, flush: \"post\" }\n );\n const stop = () => {\n stopWatch();\n cleanup();\n };\n tryOnScopeDispose(stop);\n return stop;\n}\n\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n const { window = defaultWindow, ignore = [], capture = true, detectIframe = false } = options;\n if (!window)\n return noop;\n if (isIOS && !_iOSWorkaround) {\n _iOSWorkaround = true;\n Array.from(window.document.body.children).forEach((el) => el.addEventListener(\"click\", noop));\n window.document.documentElement.addEventListener(\"click\", noop);\n }\n let shouldListen = true;\n const shouldIgnore = (event) => {\n return toValue(ignore).some((target2) => {\n if (typeof target2 === \"string\") {\n return Array.from(window.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el));\n } else {\n const el = unrefElement(target2);\n return el && (event.target === el || event.composedPath().includes(el));\n }\n });\n };\n function hasMultipleRoots(target2) {\n const vm = toValue(target2);\n return vm && vm.$.subTree.shapeFlag === 16;\n }\n function checkMultipleRoots(target2, event) {\n const vm = toValue(target2);\n const children = vm.$.subTree && vm.$.subTree.children;\n if (children == null || !Array.isArray(children))\n return false;\n return children.some((child) => child.el === event.target || event.composedPath().includes(child.el));\n }\n const listener = (event) => {\n const el = unrefElement(target);\n if (event.target == null)\n return;\n if (!(el instanceof Element) && hasMultipleRoots(target) && checkMultipleRoots(target, event))\n return;\n if (!el || el === event.target || event.composedPath().includes(el))\n return;\n if (event.detail === 0)\n shouldListen = !shouldIgnore(event);\n if (!shouldListen) {\n shouldListen = true;\n return;\n }\n handler(event);\n };\n let isProcessingClick = false;\n const cleanup = [\n useEventListener(window, \"click\", (event) => {\n if (!isProcessingClick) {\n isProcessingClick = true;\n setTimeout(() => {\n isProcessingClick = false;\n }, 0);\n listener(event);\n }\n }, { passive: true, capture }),\n useEventListener(window, \"pointerdown\", (e) => {\n const el = unrefElement(target);\n shouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));\n }, { passive: true }),\n detectIframe && useEventListener(window, \"blur\", (event) => {\n setTimeout(() => {\n var _a;\n const el = unrefElement(target);\n if (((_a = window.document.activeElement) == null ? void 0 : _a.tagName) === \"IFRAME\" && !(el == null ? void 0 : el.contains(window.document.activeElement))) {\n handler(event);\n }\n }, 0);\n })\n ].filter(Boolean);\n const stop = () => cleanup.forEach((fn) => fn());\n return stop;\n}\n\nconst vOnClickOutside = {\n mounted(el, binding) {\n const capture = !binding.modifiers.bubble;\n if (typeof binding.value === \"function\") {\n el.__onClickOutside_stop = onClickOutside(el, binding.value, { capture });\n } else {\n const [handler, options] = binding.value;\n el.__onClickOutside_stop = onClickOutside(el, handler, Object.assign({ capture }, options));\n }\n },\n unmounted(el) {\n el.__onClickOutside_stop();\n }\n};\n\nfunction createKeyPredicate(keyFilter) {\n if (typeof keyFilter === \"function\")\n return keyFilter;\n else if (typeof keyFilter === \"string\")\n return (event) => event.key === keyFilter;\n else if (Array.isArray(keyFilter))\n return (event) => keyFilter.includes(event.key);\n return () => true;\n}\nfunction onKeyStroke(...args) {\n let key;\n let handler;\n let options = {};\n if (args.length === 3) {\n key = args[0];\n handler = args[1];\n options = args[2];\n } else if (args.length === 2) {\n if (typeof args[1] === \"object\") {\n key = true;\n handler = args[0];\n options = args[1];\n } else {\n key = args[0];\n handler = args[1];\n }\n } else {\n key = true;\n handler = args[0];\n }\n const {\n target = defaultWindow,\n eventName = \"keydown\",\n passive = false,\n dedupe = false\n } = options;\n const predicate = createKeyPredicate(key);\n const listener = (e) => {\n if (e.repeat && toValue(dedupe))\n return;\n if (predicate(e))\n handler(e);\n };\n return useEventListener(target, eventName, listener, passive);\n}\n\nconst vOnKeyStroke = {\n mounted(el, binding) {\n var _a, _b;\n const keys = (_b = (_a = binding.arg) == null ? void 0 : _a.split(\",\")) != null ? _b : true;\n if (typeof binding.value === \"function\") {\n onKeyStroke(keys, binding.value, {\n target: el\n });\n } else {\n const [handler, options] = binding.value;\n onKeyStroke(keys, handler, {\n target: el,\n ...options\n });\n }\n }\n};\n\nconst DEFAULT_DELAY = 500;\nconst DEFAULT_THRESHOLD = 10;\nfunction onLongPress(target, handler, options) {\n var _a, _b;\n const elementRef = computed(() => unrefElement(target));\n let timeout;\n let posStart;\n let startTimestamp;\n let hasLongPressed = false;\n function clear() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = void 0;\n }\n posStart = void 0;\n startTimestamp = void 0;\n hasLongPressed = false;\n }\n function onRelease(ev) {\n var _a2, _b2, _c;\n const [_startTimestamp, _posStart, _hasLongPressed] = [startTimestamp, posStart, hasLongPressed];\n clear();\n if (!(options == null ? void 0 : options.onMouseUp) || !_posStart || !_startTimestamp)\n return;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n const dx = ev.x - _posStart.x;\n const dy = ev.y - _posStart.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n options.onMouseUp(ev.timeStamp - _startTimestamp, distance, _hasLongPressed);\n }\n function onDown(ev) {\n var _a2, _b2, _c, _d;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n clear();\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n posStart = {\n x: ev.x,\n y: ev.y\n };\n startTimestamp = ev.timeStamp;\n timeout = setTimeout(\n () => {\n hasLongPressed = true;\n handler(ev);\n },\n (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY\n );\n }\n function onMove(ev) {\n var _a2, _b2, _c, _d;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n if (!posStart || (options == null ? void 0 : options.distanceThreshold) === false)\n return;\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n const dx = ev.x - posStart.x;\n const dy = ev.y - posStart.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n if (distance >= ((_d = options == null ? void 0 : options.distanceThreshold) != null ? _d : DEFAULT_THRESHOLD))\n clear();\n }\n const listenerOptions = {\n capture: (_a = options == null ? void 0 : options.modifiers) == null ? void 0 : _a.capture,\n once: (_b = options == null ? void 0 : options.modifiers) == null ? void 0 : _b.once\n };\n const cleanup = [\n useEventListener(elementRef, \"pointerdown\", onDown, listenerOptions),\n useEventListener(elementRef, \"pointermove\", onMove, listenerOptions),\n useEventListener(elementRef, [\"pointerup\", \"pointerleave\"], onRelease, listenerOptions)\n ];\n const stop = () => cleanup.forEach((fn) => fn());\n return stop;\n}\n\nconst OnLongPress = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"OnLongPress\",\n props: [\"as\", \"options\"],\n emits: [\"trigger\"],\n setup(props, { slots, emit }) {\n const target = ref();\n onLongPress(\n target,\n (e) => {\n emit(\"trigger\", e);\n },\n props.options\n );\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target }, slots.default());\n };\n }\n});\n\nconst vOnLongPress = {\n mounted(el, binding) {\n if (typeof binding.value === \"function\")\n onLongPress(el, binding.value, { modifiers: binding.modifiers });\n else\n onLongPress(el, ...binding.value);\n }\n};\n\nconst UseActiveElement = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseActiveElement\",\n setup(props, { slots }) {\n const data = reactive({\n element: useActiveElement()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseBattery = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseBattery\",\n setup(props, { slots }) {\n const data = reactive(useBattery(props));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseBrowserLocation = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseBrowserLocation\",\n setup(props, { slots }) {\n const data = reactive(useBrowserLocation());\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseClipboard = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseClipboard\",\n props: [\n \"source\",\n \"read\",\n \"navigator\",\n \"copiedDuring\",\n \"legacy\"\n ],\n setup(props, { slots }) {\n const data = reactive(useClipboard(props));\n return () => {\n var _a;\n return (_a = slots.default) == null ? void 0 : _a.call(slots, data);\n };\n }\n});\n\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\nconst handlers = /* @__PURE__ */ getHandlers();\nfunction getHandlers() {\n if (!(globalKey in _global))\n _global[globalKey] = _global[globalKey] || {};\n return _global[globalKey];\n}\nfunction getSSRHandler(key, fallback) {\n return handlers[key] || fallback;\n}\n\nfunction useMounted() {\n const isMounted = ref(false);\n const instance = getCurrentInstance();\n if (instance) {\n onMounted(() => {\n isMounted.value = true;\n }, instance);\n }\n return isMounted;\n}\n\nfunction useSupported(callback) {\n const isMounted = useMounted();\n return computed(() => {\n isMounted.value;\n return Boolean(callback());\n });\n}\n\nfunction useMediaQuery(query, options = {}) {\n const { window = defaultWindow } = options;\n const isSupported = useSupported(() => window && \"matchMedia\" in window && typeof window.matchMedia === \"function\");\n let mediaQuery;\n const matches = ref(false);\n const handler = (event) => {\n matches.value = event.matches;\n };\n const cleanup = () => {\n if (!mediaQuery)\n return;\n if (\"removeEventListener\" in mediaQuery)\n mediaQuery.removeEventListener(\"change\", handler);\n else\n mediaQuery.removeListener(handler);\n };\n const stopWatch = watchEffect(() => {\n if (!isSupported.value)\n return;\n cleanup();\n mediaQuery = window.matchMedia(toValue(query));\n if (\"addEventListener\" in mediaQuery)\n mediaQuery.addEventListener(\"change\", handler);\n else\n mediaQuery.addListener(handler);\n matches.value = mediaQuery.matches;\n });\n tryOnScopeDispose(() => {\n stopWatch();\n cleanup();\n mediaQuery = void 0;\n });\n return matches;\n}\n\nfunction usePreferredDark(options) {\n return useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\nfunction guessSerializerType(rawInit) {\n return rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n\nconst StorageSerializers = {\n boolean: {\n read: (v) => v === \"true\",\n write: (v) => String(v)\n },\n object: {\n read: (v) => JSON.parse(v),\n write: (v) => JSON.stringify(v)\n },\n number: {\n read: (v) => Number.parseFloat(v),\n write: (v) => String(v)\n },\n any: {\n read: (v) => v,\n write: (v) => String(v)\n },\n string: {\n read: (v) => v,\n write: (v) => String(v)\n },\n map: {\n read: (v) => new Map(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v.entries()))\n },\n set: {\n read: (v) => new Set(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v))\n },\n date: {\n read: (v) => new Date(v),\n write: (v) => v.toISOString()\n }\n};\nconst customStorageEventName = \"vueuse-storage\";\nfunction useStorage(key, defaults, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n mergeDefaults = false,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n },\n initOnMounted\n } = options;\n const data = (shallow ? shallowRef : ref)(typeof defaults === \"function\" ? defaults() : defaults);\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorage\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n if (!storage)\n return data;\n const rawInit = toValue(defaults);\n const type = guessSerializerType(rawInit);\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n const { pause: pauseWatch, resume: resumeWatch } = pausableWatch(\n data,\n () => write(data.value),\n { flush, deep, eventFilter }\n );\n if (window && listenToStorageChanges) {\n tryOnMounted(() => {\n if (storage instanceof Storage)\n useEventListener(window, \"storage\", update);\n else\n useEventListener(window, customStorageEventName, updateFromCustomEvent);\n if (initOnMounted)\n update();\n });\n }\n if (!initOnMounted)\n update();\n function dispatchWriteEvent(oldValue, newValue) {\n if (window) {\n const payload = {\n key,\n oldValue,\n newValue,\n storageArea: storage\n };\n window.dispatchEvent(storage instanceof Storage ? new StorageEvent(\"storage\", payload) : new CustomEvent(customStorageEventName, {\n detail: payload\n }));\n }\n }\n function write(v) {\n try {\n const oldValue = storage.getItem(key);\n if (v == null) {\n dispatchWriteEvent(oldValue, null);\n storage.removeItem(key);\n } else {\n const serialized = serializer.write(v);\n if (oldValue !== serialized) {\n storage.setItem(key, serialized);\n dispatchWriteEvent(oldValue, serialized);\n }\n }\n } catch (e) {\n onError(e);\n }\n }\n function read(event) {\n const rawValue = event ? event.newValue : storage.getItem(key);\n if (rawValue == null) {\n if (writeDefaults && rawInit != null)\n storage.setItem(key, serializer.write(rawInit));\n return rawInit;\n } else if (!event && mergeDefaults) {\n const value = serializer.read(rawValue);\n if (typeof mergeDefaults === \"function\")\n return mergeDefaults(value, rawInit);\n else if (type === \"object\" && !Array.isArray(value))\n return { ...rawInit, ...value };\n return value;\n } else if (typeof rawValue !== \"string\") {\n return rawValue;\n } else {\n return serializer.read(rawValue);\n }\n }\n function update(event) {\n if (event && event.storageArea !== storage)\n return;\n if (event && event.key == null) {\n data.value = rawInit;\n return;\n }\n if (event && event.key !== key)\n return;\n pauseWatch();\n try {\n if ((event == null ? void 0 : event.newValue) !== serializer.write(data.value))\n data.value = read(event);\n } catch (e) {\n onError(e);\n } finally {\n if (event)\n nextTick(resumeWatch);\n else\n resumeWatch();\n }\n }\n function updateFromCustomEvent(event) {\n update(event.detail);\n }\n return data;\n}\n\nconst CSS_DISABLE_TRANS = \"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\";\nfunction useColorMode(options = {}) {\n const {\n selector = \"html\",\n attribute = \"class\",\n initialValue = \"auto\",\n window = defaultWindow,\n storage,\n storageKey = \"vueuse-color-scheme\",\n listenToStorageChanges = true,\n storageRef,\n emitAuto,\n disableTransition = true\n } = options;\n const modes = {\n auto: \"\",\n light: \"light\",\n dark: \"dark\",\n ...options.modes || {}\n };\n const preferredDark = usePreferredDark({ window });\n const system = computed(() => preferredDark.value ? \"dark\" : \"light\");\n const store = storageRef || (storageKey == null ? toRef(initialValue) : useStorage(storageKey, initialValue, storage, { window, listenToStorageChanges }));\n const state = computed(() => store.value === \"auto\" ? system.value : store.value);\n const updateHTMLAttrs = getSSRHandler(\n \"updateHTMLAttrs\",\n (selector2, attribute2, value) => {\n const el = typeof selector2 === \"string\" ? window == null ? void 0 : window.document.querySelector(selector2) : unrefElement(selector2);\n if (!el)\n return;\n const classesToAdd = /* @__PURE__ */ new Set();\n const classesToRemove = /* @__PURE__ */ new Set();\n let attributeToChange = null;\n if (attribute2 === \"class\") {\n const current = value.split(/\\s/g);\n Object.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n if (current.includes(v))\n classesToAdd.add(v);\n else\n classesToRemove.add(v);\n });\n } else {\n attributeToChange = { key: attribute2, value };\n }\n if (classesToAdd.size === 0 && classesToRemove.size === 0 && attributeToChange === null)\n return;\n let style;\n if (disableTransition) {\n style = window.document.createElement(\"style\");\n style.appendChild(document.createTextNode(CSS_DISABLE_TRANS));\n window.document.head.appendChild(style);\n }\n for (const c of classesToAdd) {\n el.classList.add(c);\n }\n for (const c of classesToRemove) {\n el.classList.remove(c);\n }\n if (attributeToChange) {\n el.setAttribute(attributeToChange.key, attributeToChange.value);\n }\n if (disableTransition) {\n window.getComputedStyle(style).opacity;\n document.head.removeChild(style);\n }\n }\n );\n function defaultOnChanged(mode) {\n var _a;\n updateHTMLAttrs(selector, attribute, (_a = modes[mode]) != null ? _a : mode);\n }\n function onChanged(mode) {\n if (options.onChanged)\n options.onChanged(mode, defaultOnChanged);\n else\n defaultOnChanged(mode);\n }\n watch(state, onChanged, { flush: \"post\", immediate: true });\n tryOnMounted(() => onChanged(state.value));\n const auto = computed({\n get() {\n return emitAuto ? store.value : state.value;\n },\n set(v) {\n store.value = v;\n }\n });\n return Object.assign(auto, { store, system, state });\n}\n\nconst UseColorMode = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseColorMode\",\n props: [\"selector\", \"attribute\", \"modes\", \"onChanged\", \"storageKey\", \"storage\", \"emitAuto\"],\n setup(props, { slots }) {\n const mode = useColorMode(props);\n const data = reactive({\n mode,\n system: mode.system,\n store: mode.store\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseDark = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseDark\",\n props: [\"selector\", \"attribute\", \"valueDark\", \"valueLight\", \"onChanged\", \"storageKey\", \"storage\"],\n setup(props, { slots }) {\n const isDark = useDark(props);\n const data = reactive({\n isDark,\n toggleDark: useToggle(isDark)\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseDeviceMotion = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseDeviceMotion\",\n setup(props, { slots }) {\n const data = reactive(useDeviceMotion());\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseDeviceOrientation = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseDeviceOrientation\",\n setup(props, { slots }) {\n const data = reactive(useDeviceOrientation());\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseDevicePixelRatio = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseDevicePixelRatio\",\n setup(props, { slots }) {\n const data = reactive({\n pixelRatio: useDevicePixelRatio()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseDevicesList = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseDevicesList\",\n props: [\"onUpdated\", \"requestPermissions\", \"constraints\"],\n setup(props, { slots }) {\n const data = reactive(useDevicesList(props));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseDocumentVisibility = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseDocumentVisibility\",\n setup(props, { slots }) {\n const data = reactive({\n visibility: useDocumentVisibility()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseDraggable = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseDraggable\",\n props: [\n \"storageKey\",\n \"storageType\",\n \"initialValue\",\n \"exact\",\n \"preventDefault\",\n \"stopPropagation\",\n \"pointerTypes\",\n \"as\",\n \"handle\",\n \"axis\",\n \"onStart\",\n \"onMove\",\n \"onEnd\",\n \"disabled\",\n \"buttons\",\n \"containerElement\"\n ],\n setup(props, { slots }) {\n const target = ref();\n const handle = computed(() => {\n var _a;\n return (_a = props.handle) != null ? _a : target.value;\n });\n const containerElement = computed(() => {\n var _a;\n return (_a = props.containerElement) != null ? _a : void 0;\n });\n const disabled = computed(() => !!props.disabled);\n const storageValue = props.storageKey && useStorage$1(\n props.storageKey,\n toValue(props.initialValue) || { x: 0, y: 0 },\n isClient$1 ? props.storageType === \"session\" ? sessionStorage : localStorage : void 0\n );\n const initialValue = storageValue || props.initialValue || { x: 0, y: 0 };\n const onEnd = (position, event) => {\n var _a;\n (_a = props.onEnd) == null ? void 0 : _a.call(props, position, event);\n if (!storageValue)\n return;\n storageValue.value.x = position.x;\n storageValue.value.y = position.y;\n };\n const data = reactive(useDraggable(target, {\n ...props,\n handle,\n initialValue,\n onEnd,\n disabled,\n containerElement\n }));\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target, style: `touch-action:none;${data.style}` }, slots.default(data));\n };\n }\n});\n\nconst UseElementBounding = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseElementBounding\",\n props: [\"box\", \"as\"],\n setup(props, { slots }) {\n const target = ref();\n const data = reactive(useElementBounding(target));\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target }, slots.default(data));\n };\n }\n});\n\nfunction useElementHover(el, options = {}) {\n const {\n delayEnter = 0,\n delayLeave = 0,\n window = defaultWindow\n } = options;\n const isHovered = ref(false);\n let timer;\n const toggle = (entering) => {\n const delay = entering ? delayEnter : delayLeave;\n if (timer) {\n clearTimeout(timer);\n timer = void 0;\n }\n if (delay)\n timer = setTimeout(() => isHovered.value = entering, delay);\n else\n isHovered.value = entering;\n };\n if (!window)\n return isHovered;\n useEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n useEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n return isHovered;\n}\n\nconst vElementHover = {\n mounted(el, binding) {\n const value = binding.value;\n if (typeof value === \"function\") {\n const isHovered = useElementHover(el);\n watch(isHovered, (v) => value(v));\n } else {\n const [handler, options] = value;\n const isHovered = useElementHover(el, options);\n watch(isHovered, (v) => handler(v));\n }\n }\n};\n\nconst UseElementSize = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseElementSize\",\n props: [\"width\", \"height\", \"box\", \"as\"],\n setup(props, { slots }) {\n const target = ref();\n const data = reactive(useElementSize$1(target, { width: props.width, height: props.height }, { box: props.box }));\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target }, slots.default(data));\n };\n }\n});\n\nfunction useResizeObserver(target, callback, options = {}) {\n const { window = defaultWindow, ...observerOptions } = options;\n let observer;\n const isSupported = useSupported(() => window && \"ResizeObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const targets = computed(() => {\n const _targets = toValue(target);\n return Array.isArray(_targets) ? _targets.map((el) => unrefElement(el)) : [unrefElement(_targets)];\n });\n const stopWatch = watch(\n targets,\n (els) => {\n cleanup();\n if (isSupported.value && window) {\n observer = new ResizeObserver(callback);\n for (const _el of els) {\n if (_el)\n observer.observe(_el, observerOptions);\n }\n }\n },\n { immediate: true, flush: \"post\" }\n );\n const stop = () => {\n cleanup();\n stopWatch();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop\n };\n}\n\nfunction useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {\n const { window = defaultWindow, box = \"content-box\" } = options;\n const isSVG = computed(() => {\n var _a, _b;\n return (_b = (_a = unrefElement(target)) == null ? void 0 : _a.namespaceURI) == null ? void 0 : _b.includes(\"svg\");\n });\n const width = ref(initialSize.width);\n const height = ref(initialSize.height);\n const { stop: stop1 } = useResizeObserver(\n target,\n ([entry]) => {\n const boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n if (window && isSVG.value) {\n const $elem = unrefElement(target);\n if ($elem) {\n const rect = $elem.getBoundingClientRect();\n width.value = rect.width;\n height.value = rect.height;\n }\n } else {\n if (boxSize) {\n const formatBoxSize = Array.isArray(boxSize) ? boxSize : [boxSize];\n width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n } else {\n width.value = entry.contentRect.width;\n height.value = entry.contentRect.height;\n }\n }\n },\n options\n );\n tryOnMounted(() => {\n const ele = unrefElement(target);\n if (ele) {\n width.value = \"offsetWidth\" in ele ? ele.offsetWidth : initialSize.width;\n height.value = \"offsetHeight\" in ele ? ele.offsetHeight : initialSize.height;\n }\n });\n const stop2 = watch(\n () => unrefElement(target),\n (ele) => {\n width.value = ele ? initialSize.width : 0;\n height.value = ele ? initialSize.height : 0;\n }\n );\n function stop() {\n stop1();\n stop2();\n }\n return {\n width,\n height,\n stop\n };\n}\n\nconst vElementSize = {\n mounted(el, binding) {\n var _a;\n const handler = typeof binding.value === \"function\" ? binding.value : (_a = binding.value) == null ? void 0 : _a[0];\n const options = typeof binding.value === \"function\" ? [] : binding.value.slice(1);\n const { width, height } = useElementSize(el, ...options);\n watch([width, height], ([width2, height2]) => handler({ width: width2, height: height2 }));\n }\n};\n\nconst UseElementVisibility = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseElementVisibility\",\n props: [\"as\"],\n setup(props, { slots }) {\n const target = ref();\n const data = reactive({\n isVisible: useElementVisibility$1(target)\n });\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target }, slots.default(data));\n };\n }\n});\n\nfunction useIntersectionObserver(target, callback, options = {}) {\n const {\n root,\n rootMargin = \"0px\",\n threshold = 0,\n window = defaultWindow,\n immediate = true\n } = options;\n const isSupported = useSupported(() => window && \"IntersectionObserver\" in window);\n const targets = computed(() => {\n const _target = toValue(target);\n return (Array.isArray(_target) ? _target : [_target]).map(unrefElement).filter(notNullish);\n });\n let cleanup = noop;\n const isActive = ref(immediate);\n const stopWatch = isSupported.value ? watch(\n () => [targets.value, unrefElement(root), isActive.value],\n ([targets2, root2]) => {\n cleanup();\n if (!isActive.value)\n return;\n if (!targets2.length)\n return;\n const observer = new IntersectionObserver(\n callback,\n {\n root: unrefElement(root2),\n rootMargin,\n threshold\n }\n );\n targets2.forEach((el) => el && observer.observe(el));\n cleanup = () => {\n observer.disconnect();\n cleanup = noop;\n };\n },\n { immediate, flush: \"post\" }\n ) : noop;\n const stop = () => {\n cleanup();\n stopWatch();\n isActive.value = false;\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n isActive,\n pause() {\n cleanup();\n isActive.value = false;\n },\n resume() {\n isActive.value = true;\n },\n stop\n };\n}\n\nfunction useElementVisibility(element, options = {}) {\n const { window = defaultWindow, scrollTarget, threshold = 0 } = options;\n const elementIsVisible = ref(false);\n useIntersectionObserver(\n element,\n (intersectionObserverEntries) => {\n let isIntersecting = elementIsVisible.value;\n let latestTime = 0;\n for (const entry of intersectionObserverEntries) {\n if (entry.time >= latestTime) {\n latestTime = entry.time;\n isIntersecting = entry.isIntersecting;\n }\n }\n elementIsVisible.value = isIntersecting;\n },\n {\n root: scrollTarget,\n window,\n threshold\n }\n );\n return elementIsVisible;\n}\n\nconst vElementVisibility = {\n mounted(el, binding) {\n if (typeof binding.value === \"function\") {\n const handler = binding.value;\n const isVisible = useElementVisibility(el);\n watch(isVisible, (v) => handler(v), { immediate: true });\n } else {\n const [handler, options] = binding.value;\n const isVisible = useElementVisibility(el, options);\n watch(isVisible, (v) => handler(v), { immediate: true });\n }\n }\n};\n\nconst UseEyeDropper = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseEyeDropper\",\n props: {\n sRGBHex: String\n },\n setup(props, { slots }) {\n const data = reactive(useEyeDropper());\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseFullscreen = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseFullscreen\",\n props: [\"as\"],\n setup(props, { slots }) {\n const target = ref();\n const data = reactive(useFullscreen(target));\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target }, slots.default(data));\n };\n }\n});\n\nconst UseGeolocation = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseGeolocation\",\n props: [\"enableHighAccuracy\", \"maximumAge\", \"timeout\", \"navigator\"],\n setup(props, { slots }) {\n const data = reactive(useGeolocation(props));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseIdle = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseIdle\",\n props: [\"timeout\", \"events\", \"listenForVisibilityChange\", \"initialState\"],\n setup(props, { slots }) {\n const data = reactive(useIdle(props.timeout, props));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nfunction useAsyncState(promise, initialState, options) {\n const {\n immediate = true,\n delay = 0,\n onError = noop,\n onSuccess = noop,\n resetOnExecute = true,\n shallow = true,\n throwError\n } = options != null ? options : {};\n const state = shallow ? shallowRef(initialState) : ref(initialState);\n const isReady = ref(false);\n const isLoading = ref(false);\n const error = shallowRef(void 0);\n async function execute(delay2 = 0, ...args) {\n if (resetOnExecute)\n state.value = initialState;\n error.value = void 0;\n isReady.value = false;\n isLoading.value = true;\n if (delay2 > 0)\n await promiseTimeout(delay2);\n const _promise = typeof promise === \"function\" ? promise(...args) : promise;\n try {\n const data = await _promise;\n state.value = data;\n isReady.value = true;\n onSuccess(data);\n } catch (e) {\n error.value = e;\n onError(e);\n if (throwError)\n throw e;\n } finally {\n isLoading.value = false;\n }\n return state.value;\n }\n if (immediate)\n execute(delay);\n const shell = {\n state,\n isReady,\n isLoading,\n error,\n execute\n };\n function waitUntilIsLoaded() {\n return new Promise((resolve, reject) => {\n until(isLoading).toBe(false).then(() => resolve(shell)).catch(reject);\n });\n }\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilIsLoaded().then(onFulfilled, onRejected);\n }\n };\n}\n\nasync function loadImage(options) {\n return new Promise((resolve, reject) => {\n const img = new Image();\n const { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy } = options;\n img.src = src;\n if (srcset)\n img.srcset = srcset;\n if (sizes)\n img.sizes = sizes;\n if (clazz)\n img.className = clazz;\n if (loading)\n img.loading = loading;\n if (crossorigin)\n img.crossOrigin = crossorigin;\n if (referrerPolicy)\n img.referrerPolicy = referrerPolicy;\n img.onload = () => resolve(img);\n img.onerror = reject;\n });\n}\nfunction useImage(options, asyncStateOptions = {}) {\n const state = useAsyncState(\n () => loadImage(toValue(options)),\n void 0,\n {\n resetOnExecute: true,\n ...asyncStateOptions\n }\n );\n watch(\n () => toValue(options),\n () => state.execute(asyncStateOptions.delay),\n { deep: true }\n );\n return state;\n}\n\nconst UseImage = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseImage\",\n props: [\n \"src\",\n \"srcset\",\n \"sizes\",\n \"as\",\n \"alt\",\n \"class\",\n \"loading\",\n \"crossorigin\",\n \"referrerPolicy\"\n ],\n setup(props, { slots }) {\n const data = reactive(useImage(props));\n return () => {\n if (data.isLoading && slots.loading)\n return slots.loading(data);\n else if (data.error && slots.error)\n return slots.error(data.error);\n if (slots.default)\n return slots.default(data);\n return h(props.as || \"img\", props);\n };\n }\n});\n\nfunction resolveElement(el) {\n if (typeof Window !== \"undefined\" && el instanceof Window)\n return el.document.documentElement;\n if (typeof Document !== \"undefined\" && el instanceof Document)\n return el.documentElement;\n return el;\n}\n\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\nfunction useScroll(element, options = {}) {\n const {\n throttle = 0,\n idle = 200,\n onStop = noop,\n onScroll = noop,\n offset = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n },\n eventListenerOptions = {\n capture: false,\n passive: true\n },\n behavior = \"auto\",\n window = defaultWindow,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const internalX = ref(0);\n const internalY = ref(0);\n const x = computed({\n get() {\n return internalX.value;\n },\n set(x2) {\n scrollTo(x2, void 0);\n }\n });\n const y = computed({\n get() {\n return internalY.value;\n },\n set(y2) {\n scrollTo(void 0, y2);\n }\n });\n function scrollTo(_x, _y) {\n var _a, _b, _c, _d;\n if (!window)\n return;\n const _element = toValue(element);\n if (!_element)\n return;\n (_c = _element instanceof Document ? window.document.body : _element) == null ? void 0 : _c.scrollTo({\n top: (_a = toValue(_y)) != null ? _a : y.value,\n left: (_b = toValue(_x)) != null ? _b : x.value,\n behavior: toValue(behavior)\n });\n const scrollContainer = ((_d = _element == null ? void 0 : _element.document) == null ? void 0 : _d.documentElement) || (_element == null ? void 0 : _element.documentElement) || _element;\n if (x != null)\n internalX.value = scrollContainer.scrollLeft;\n if (y != null)\n internalY.value = scrollContainer.scrollTop;\n }\n const isScrolling = ref(false);\n const arrivedState = reactive({\n left: true,\n right: false,\n top: true,\n bottom: false\n });\n const directions = reactive({\n left: false,\n right: false,\n top: false,\n bottom: false\n });\n const onScrollEnd = (e) => {\n if (!isScrolling.value)\n return;\n isScrolling.value = false;\n directions.left = false;\n directions.right = false;\n directions.top = false;\n directions.bottom = false;\n onStop(e);\n };\n const onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n const setArrivedState = (target) => {\n var _a;\n if (!window)\n return;\n const el = ((_a = target == null ? void 0 : target.document) == null ? void 0 : _a.documentElement) || (target == null ? void 0 : target.documentElement) || unrefElement(target);\n const { display, flexDirection } = getComputedStyle(el);\n const scrollLeft = el.scrollLeft;\n directions.left = scrollLeft < internalX.value;\n directions.right = scrollLeft > internalX.value;\n const left = Math.abs(scrollLeft) <= (offset.left || 0);\n const right = Math.abs(scrollLeft) + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n if (display === \"flex\" && flexDirection === \"row-reverse\") {\n arrivedState.left = right;\n arrivedState.right = left;\n } else {\n arrivedState.left = left;\n arrivedState.right = right;\n }\n internalX.value = scrollLeft;\n let scrollTop = el.scrollTop;\n if (target === window.document && !scrollTop)\n scrollTop = window.document.body.scrollTop;\n directions.top = scrollTop < internalY.value;\n directions.bottom = scrollTop > internalY.value;\n const top = Math.abs(scrollTop) <= (offset.top || 0);\n const bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n if (display === \"flex\" && flexDirection === \"column-reverse\") {\n arrivedState.top = bottom;\n arrivedState.bottom = top;\n } else {\n arrivedState.top = top;\n arrivedState.bottom = bottom;\n }\n internalY.value = scrollTop;\n };\n const onScrollHandler = (e) => {\n var _a;\n if (!window)\n return;\n const eventTarget = (_a = e.target.documentElement) != null ? _a : e.target;\n setArrivedState(eventTarget);\n isScrolling.value = true;\n onScrollEndDebounced(e);\n onScroll(e);\n };\n useEventListener(\n element,\n \"scroll\",\n throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler,\n eventListenerOptions\n );\n tryOnMounted(() => {\n try {\n const _element = toValue(element);\n if (!_element)\n return;\n setArrivedState(_element);\n } catch (e) {\n onError(e);\n }\n });\n useEventListener(\n element,\n \"scrollend\",\n onScrollEnd,\n eventListenerOptions\n );\n return {\n x,\n y,\n isScrolling,\n arrivedState,\n directions,\n measure() {\n const _element = toValue(element);\n if (window && _element)\n setArrivedState(_element);\n }\n };\n}\n\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n var _a;\n const {\n direction = \"bottom\",\n interval = 100,\n canLoadMore = () => true\n } = options;\n const state = reactive(useScroll(\n element,\n {\n ...options,\n offset: {\n [direction]: (_a = options.distance) != null ? _a : 0,\n ...options.offset\n }\n }\n ));\n const promise = ref();\n const isLoading = computed(() => !!promise.value);\n const observedElement = computed(() => {\n return resolveElement(toValue(element));\n });\n const isElementVisible = useElementVisibility(observedElement);\n function checkAndLoad() {\n state.measure();\n if (!observedElement.value || !isElementVisible.value || !canLoadMore(observedElement.value))\n return;\n const { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value;\n const isNarrower = direction === \"bottom\" || direction === \"top\" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth;\n if (state.arrivedState[direction] || isNarrower) {\n if (!promise.value) {\n promise.value = Promise.all([\n onLoadMore(state),\n new Promise((resolve) => setTimeout(resolve, interval))\n ]).finally(() => {\n promise.value = null;\n nextTick(() => checkAndLoad());\n });\n }\n }\n }\n const stop = watch(\n () => [state.arrivedState[direction], isElementVisible.value],\n checkAndLoad,\n { immediate: true }\n );\n tryOnUnmounted(stop);\n return {\n isLoading,\n reset() {\n nextTick(() => checkAndLoad());\n }\n };\n}\n\nconst vInfiniteScroll = {\n mounted(el, binding) {\n if (typeof binding.value === \"function\")\n useInfiniteScroll(el, binding.value);\n else\n useInfiniteScroll(el, ...binding.value);\n }\n};\n\nconst vIntersectionObserver = {\n mounted(el, binding) {\n if (typeof binding.value === \"function\")\n useIntersectionObserver(el, binding.value);\n else\n useIntersectionObserver(el, ...binding.value);\n }\n};\n\nconst UseMouse = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseMouse\",\n props: [\"touch\", \"resetOnTouchEnds\", \"initialValue\"],\n setup(props, { slots }) {\n const data = reactive(useMouse(props));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseMouseInElement = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseMouseElement\",\n props: [\"handleOutside\", \"as\"],\n setup(props, { slots }) {\n const target = ref();\n const data = reactive(useMouseInElement(target, props));\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target }, slots.default(data));\n };\n }\n});\n\nconst UseMousePressed = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseMousePressed\",\n props: [\"touch\", \"initialValue\", \"as\"],\n setup(props, { slots }) {\n const target = ref();\n const data = reactive(useMousePressed({ ...props, target }));\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target }, slots.default(data));\n };\n }\n});\n\nconst UseNetwork = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseNetwork\",\n setup(props, { slots }) {\n const data = reactive(useNetwork());\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseNow = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseNow\",\n props: [\"interval\"],\n setup(props, { slots }) {\n const data = reactive(useNow({ ...props, controls: true }));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseObjectUrl = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseObjectUrl\",\n props: [\n \"object\"\n ],\n setup(props, { slots }) {\n const object = toRef(props, \"object\");\n const url = useObjectUrl(object);\n return () => {\n if (slots.default && url.value)\n return slots.default(url);\n };\n }\n});\n\nconst UseOffsetPagination = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseOffsetPagination\",\n props: [\n \"total\",\n \"page\",\n \"pageSize\",\n \"onPageChange\",\n \"onPageSizeChange\",\n \"onPageCountChange\"\n ],\n emits: [\n \"page-change\",\n \"page-size-change\",\n \"page-count-change\"\n ],\n setup(props, { slots, emit }) {\n const data = reactive(useOffsetPagination({\n ...props,\n onPageChange(...args) {\n var _a;\n (_a = props.onPageChange) == null ? void 0 : _a.call(props, ...args);\n emit(\"page-change\", ...args);\n },\n onPageSizeChange(...args) {\n var _a;\n (_a = props.onPageSizeChange) == null ? void 0 : _a.call(props, ...args);\n emit(\"page-size-change\", ...args);\n },\n onPageCountChange(...args) {\n var _a;\n (_a = props.onPageCountChange) == null ? void 0 : _a.call(props, ...args);\n emit(\"page-count-change\", ...args);\n }\n }));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseOnline = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseOnline\",\n setup(props, { slots }) {\n const data = reactive({\n isOnline: useOnline()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UsePageLeave = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UsePageLeave\",\n setup(props, { slots }) {\n const data = reactive({\n isLeft: usePageLeave()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UsePointer = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UsePointer\",\n props: [\n \"pointerTypes\",\n \"initialValue\",\n \"target\"\n ],\n setup(props, { slots }) {\n const el = ref(null);\n const data = reactive(usePointer({\n ...props,\n target: props.target === \"self\" ? el : defaultWindow\n }));\n return () => {\n if (slots.default)\n return slots.default(data, { ref: el });\n };\n }\n});\n\nconst UsePointerLock = /* #__PURE__ */ defineComponent({\n name: \"UsePointerLock\",\n props: [\"as\"],\n setup(props, { slots }) {\n const target = ref();\n const data = reactive(usePointerLock(target));\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target }, slots.default(data));\n };\n }\n});\n\nconst UsePreferredColorScheme = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UsePreferredColorScheme\",\n setup(props, { slots }) {\n const data = reactive({\n colorScheme: usePreferredColorScheme()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UsePreferredContrast = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UsePreferredContrast\",\n setup(props, { slots }) {\n const data = reactive({\n contrast: usePreferredContrast()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UsePreferredDark = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UsePreferredDark\",\n setup(props, { slots }) {\n const data = reactive({\n prefersDark: usePreferredDark$1()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UsePreferredLanguages = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UsePreferredLanguages\",\n setup(props, { slots }) {\n const data = reactive({\n languages: usePreferredLanguages()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UsePreferredReducedMotion = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UsePreferredReducedMotion\",\n setup(props, { slots }) {\n const data = reactive({\n motion: usePreferredReducedMotion()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst vResizeObserver = {\n mounted(el, binding) {\n if (typeof binding.value === \"function\")\n useResizeObserver(el, binding.value);\n else\n useResizeObserver(el, ...binding.value);\n }\n};\n\nfunction useMutationObserver(target, callback, options = {}) {\n const { window = defaultWindow, ...mutationOptions } = options;\n let observer;\n const isSupported = useSupported(() => window && \"MutationObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const targets = computed(() => {\n const value = toValue(target);\n const items = (Array.isArray(value) ? value : [value]).map(unrefElement).filter(notNullish);\n return new Set(items);\n });\n const stopWatch = watch(\n () => targets.value,\n (targets2) => {\n cleanup();\n if (isSupported.value && targets2.size) {\n observer = new MutationObserver(callback);\n targets2.forEach((el) => observer.observe(el, mutationOptions));\n }\n },\n { immediate: true, flush: \"post\" }\n );\n const takeRecords = () => {\n return observer == null ? void 0 : observer.takeRecords();\n };\n const stop = () => {\n stopWatch();\n cleanup();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop,\n takeRecords\n };\n}\n\nfunction useCssVar(prop, target, options = {}) {\n const { window = defaultWindow, initialValue, observe = false } = options;\n const variable = ref(initialValue);\n const elRef = computed(() => {\n var _a;\n return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);\n });\n function updateCssVar() {\n var _a;\n const key = toValue(prop);\n const el = toValue(elRef);\n if (el && window && key) {\n const value = (_a = window.getComputedStyle(el).getPropertyValue(key)) == null ? void 0 : _a.trim();\n variable.value = value || initialValue;\n }\n }\n if (observe) {\n useMutationObserver(elRef, updateCssVar, {\n attributeFilter: [\"style\", \"class\"],\n window\n });\n }\n watch(\n [elRef, () => toValue(prop)],\n (_, old) => {\n if (old[0] && old[1])\n old[0].style.removeProperty(old[1]);\n updateCssVar();\n },\n { immediate: true }\n );\n watch(\n variable,\n (val) => {\n var _a;\n const raw_prop = toValue(prop);\n if (((_a = elRef.value) == null ? void 0 : _a.style) && raw_prop) {\n if (val == null)\n elRef.value.style.removeProperty(raw_prop);\n else\n elRef.value.style.setProperty(raw_prop, val);\n }\n }\n );\n return variable;\n}\n\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\nfunction useScreenSafeArea() {\n const top = ref(\"\");\n const right = ref(\"\");\n const bottom = ref(\"\");\n const left = ref(\"\");\n if (isClient) {\n const topCssVar = useCssVar(topVarName);\n const rightCssVar = useCssVar(rightVarName);\n const bottomCssVar = useCssVar(bottomVarName);\n const leftCssVar = useCssVar(leftVarName);\n topCssVar.value = \"env(safe-area-inset-top, 0px)\";\n rightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n bottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n leftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n update();\n useEventListener(\"resize\", useDebounceFn(update));\n }\n function update() {\n top.value = getValue(topVarName);\n right.value = getValue(rightVarName);\n bottom.value = getValue(bottomVarName);\n left.value = getValue(leftVarName);\n }\n return {\n top,\n right,\n bottom,\n left,\n update\n };\n}\nfunction getValue(position) {\n return getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\nconst UseScreenSafeArea = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseScreenSafeArea\",\n props: {\n top: Boolean,\n right: Boolean,\n bottom: Boolean,\n left: Boolean\n },\n setup(props, { slots }) {\n const {\n top,\n right,\n bottom,\n left\n } = useScreenSafeArea();\n return () => {\n if (slots.default) {\n return h(\"div\", {\n style: {\n paddingTop: props.top ? top.value : \"\",\n paddingRight: props.right ? right.value : \"\",\n paddingBottom: props.bottom ? bottom.value : \"\",\n paddingLeft: props.left ? left.value : \"\",\n boxSizing: \"border-box\",\n maxHeight: \"100vh\",\n maxWidth: \"100vw\",\n overflow: \"auto\"\n }\n }, slots.default());\n }\n };\n }\n});\n\nconst vScroll = {\n mounted(el, binding) {\n if (typeof binding.value === \"function\") {\n const handler = binding.value;\n const state = useScroll(el, {\n onScroll() {\n handler(state);\n },\n onStop() {\n handler(state);\n }\n });\n } else {\n const [handler, options] = binding.value;\n const state = useScroll(el, {\n ...options,\n onScroll(e) {\n var _a;\n (_a = options.onScroll) == null ? void 0 : _a.call(options, e);\n handler(state);\n },\n onStop(e) {\n var _a;\n (_a = options.onStop) == null ? void 0 : _a.call(options, e);\n handler(state);\n }\n });\n }\n }\n};\n\nfunction checkOverflowScroll(ele) {\n const style = window.getComputedStyle(ele);\n if (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientWidth < ele.scrollWidth || style.overflowY === \"auto\" && ele.clientHeight < ele.scrollHeight) {\n return true;\n } else {\n const parent = ele.parentNode;\n if (!parent || parent.tagName === \"BODY\")\n return false;\n return checkOverflowScroll(parent);\n }\n}\nfunction preventDefault(rawEvent) {\n const e = rawEvent || window.event;\n const _target = e.target;\n if (checkOverflowScroll(_target))\n return false;\n if (e.touches.length > 1)\n return true;\n if (e.preventDefault)\n e.preventDefault();\n return false;\n}\nconst elInitialOverflow = /* @__PURE__ */ new WeakMap();\nfunction useScrollLock(element, initialState = false) {\n const isLocked = ref(initialState);\n let stopTouchMoveListener = null;\n let initialOverflow = \"\";\n watch(toRef(element), (el) => {\n const target = resolveElement(toValue(el));\n if (target) {\n const ele = target;\n if (!elInitialOverflow.get(ele))\n elInitialOverflow.set(ele, ele.style.overflow);\n if (ele.style.overflow !== \"hidden\")\n initialOverflow = ele.style.overflow;\n if (ele.style.overflow === \"hidden\")\n return isLocked.value = true;\n if (isLocked.value)\n return ele.style.overflow = \"hidden\";\n }\n }, {\n immediate: true\n });\n const lock = () => {\n const el = resolveElement(toValue(element));\n if (!el || isLocked.value)\n return;\n if (isIOS) {\n stopTouchMoveListener = useEventListener(\n el,\n \"touchmove\",\n (e) => {\n preventDefault(e);\n },\n { passive: false }\n );\n }\n el.style.overflow = \"hidden\";\n isLocked.value = true;\n };\n const unlock = () => {\n const el = resolveElement(toValue(element));\n if (!el || !isLocked.value)\n return;\n if (isIOS)\n stopTouchMoveListener == null ? void 0 : stopTouchMoveListener();\n el.style.overflow = initialOverflow;\n elInitialOverflow.delete(el);\n isLocked.value = false;\n };\n tryOnScopeDispose(unlock);\n return computed({\n get() {\n return isLocked.value;\n },\n set(v) {\n if (v)\n lock();\n else unlock();\n }\n });\n}\n\nfunction onScrollLock() {\n let isMounted = false;\n const state = ref(false);\n return (el, binding) => {\n state.value = binding.value;\n if (isMounted)\n return;\n isMounted = true;\n const isLocked = useScrollLock(el, binding.value);\n watch(state, (v) => isLocked.value = v);\n };\n}\nconst vScrollLock = onScrollLock();\n\nconst UseTimeAgo = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseTimeAgo\",\n props: [\"time\", \"updateInterval\", \"max\", \"fullDateFormatter\", \"messages\", \"showSecond\"],\n setup(props, { slots }) {\n const data = reactive(useTimeAgo(() => props.time, { ...props, controls: true }));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseTimestamp = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseTimestamp\",\n props: [\"immediate\", \"interval\", \"offset\"],\n setup(props, { slots }) {\n const data = reactive(useTimestamp({ ...props, controls: true }));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseVirtualList = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseVirtualList\",\n props: [\n \"list\",\n \"options\",\n \"height\"\n ],\n setup(props, { slots, expose }) {\n const { list: listRef } = toRefs(props);\n const { list, containerProps, wrapperProps, scrollTo } = useVirtualList(listRef, props.options);\n expose({ scrollTo });\n if (containerProps.style && typeof containerProps.style === \"object\" && !Array.isArray(containerProps.style))\n containerProps.style.height = props.height || \"300px\";\n return () => h(\"div\", { ...containerProps }, [\n h(\"div\", { ...wrapperProps.value }, list.value.map((item) => h(\"div\", { style: { overflow: \"hidden\", height: item.height } }, slots.default ? slots.default(item) : \"Please set content!\")))\n ]);\n }\n});\n\nconst UseWindowFocus = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseWindowFocus\",\n setup(props, { slots }) {\n const data = reactive({\n focused: useWindowFocus()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseWindowSize = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseWindowSize\",\n props: [\"initialWidth\", \"initialHeight\"],\n setup(props, { slots }) {\n const data = reactive(useWindowSize(props));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nexport { OnClickOutside, OnLongPress, UseActiveElement, UseBattery, UseBrowserLocation, UseClipboard, UseColorMode, UseDark, UseDeviceMotion, UseDeviceOrientation, UseDevicePixelRatio, UseDevicesList, UseDocumentVisibility, UseDraggable, UseElementBounding, UseElementSize, UseElementVisibility, UseEyeDropper, UseFullscreen, UseGeolocation, UseIdle, UseImage, UseMouse, UseMouseInElement, UseMousePressed, UseNetwork, UseNow, UseObjectUrl, UseOffsetPagination, UseOnline, UsePageLeave, UsePointer, UsePointerLock, UsePreferredColorScheme, UsePreferredContrast, UsePreferredDark, UsePreferredLanguages, UsePreferredReducedMotion, UseScreenSafeArea, UseTimeAgo, UseTimestamp, UseVirtualList, UseWindowFocus, UseWindowSize, vOnClickOutside as VOnClickOutside, vOnLongPress as VOnLongPress, vElementHover, vElementSize, vElementVisibility, vInfiniteScroll, vIntersectionObserver, vOnClickOutside, vOnKeyStroke, vOnLongPress, vResizeObserver, vScroll, vScrollLock };\n","<script setup>\nimport { ref, computed } from 'vue';\nimport { OnClickOutside } from '@vueuse/components';\nimport { useI18n } from 'vue-i18n';\nimport { useMapGetter } from 'dashboard/composables/store.js';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n type: {\n type: String,\n default: 'edit',\n validator: value => ['alert', 'edit'].includes(value),\n },\n title: {\n type: String,\n default: '',\n },\n description: {\n type: String,\n default: '',\n },\n cancelButtonLabel: {\n type: String,\n default: '',\n },\n confirmButtonLabel: {\n type: String,\n default: '',\n },\n disableConfirmButton: {\n type: Boolean,\n default: false,\n },\n isLoading: {\n type: Boolean,\n default: false,\n },\n showCancelButton: {\n type: Boolean,\n default: true,\n },\n showConfirmButton: {\n type: Boolean,\n default: true,\n },\n overflowYAuto: {\n type: Boolean,\n default: false,\n },\n width: {\n type: String,\n default: 'lg',\n validator: value => ['3xl', '2xl', 'xl', 'lg', 'md', 'sm'].includes(value),\n },\n});\n\nconst emit = defineEmits(['confirm', 'close']);\n\nconst { t } = useI18n();\n\nconst isRTL = useMapGetter('accounts/isRTL');\n\nconst dialogRef = ref(null);\nconst dialogContentRef = ref(null);\n\nconst maxWidthClass = computed(() => {\n const classesMap = {\n '3xl': 'max-w-3xl',\n '2xl': 'max-w-2xl',\n xl: 'max-w-xl',\n lg: 'max-w-lg',\n md: 'max-w-md',\n sm: 'max-w-sm',\n };\n\n return classesMap[props.width] ?? 'max-w-md';\n});\n\nconst open = () => {\n dialogRef.value?.showModal();\n};\n\nconst close = () => {\n emit('close');\n dialogRef.value?.close();\n};\n\nconst confirm = () => {\n emit('confirm');\n};\n\ndefineExpose({ open, close });\n</script>\n\n<template>\n <Teleport to=\"body\">\n <dialog\n ref=\"dialogRef\"\n class=\"w-full transition-all duration-300 ease-in-out shadow-xl rounded-xl\"\n :class=\"[\n maxWidthClass,\n overflowYAuto ? 'overflow-y-auto' : 'overflow-visible',\n ]\"\n :dir=\"isRTL ? 'rtl' : 'ltr'\"\n @close=\"close\"\n >\n <OnClickOutside @trigger=\"close\">\n <form\n ref=\"dialogContentRef\"\n class=\"flex flex-col w-full h-auto gap-6 p-6 overflow-visible text-left align-middle transition-all duration-300 ease-in-out transform bg-n-alpha-3 backdrop-blur-[100px] shadow-xl rounded-xl\"\n @submit.prevent=\"confirm\"\n @click.stop\n >\n <div v-if=\"title || description\" class=\"flex flex-col gap-2\">\n <h3 class=\"text-base font-medium leading-6 text-n-slate-12\">\n {{ title }}\n </h3>\n <slot name=\"description\">\n <p v-if=\"description\" class=\"mb-0 text-sm text-n-slate-11\">\n {{ description }}\n </p>\n </slot>\n </div>\n <slot />\n <!-- Dialog content will be injected here -->\n <slot name=\"footer\">\n <div class=\"flex items-center justify-between w-full gap-3\">\n <Button\n v-if=\"showCancelButton\"\n variant=\"faded\"\n color=\"slate\"\n :label=\"cancelButtonLabel || t('DIALOG.BUTTONS.CANCEL')\"\n class=\"w-full\"\n type=\"button\"\n @click=\"close\"\n />\n <Button\n v-if=\"showConfirmButton\"\n :color=\"type === 'edit' ? 'blue' : 'ruby'\"\n :label=\"confirmButtonLabel || t('DIALOG.BUTTONS.CONFIRM')\"\n class=\"w-full\"\n :is-loading=\"isLoading\"\n :disabled=\"disableConfirmButton || isLoading\"\n type=\"submit\"\n />\n </div>\n </slot>\n </form>\n </OnClickOutside>\n </dialog>\n </Teleport>\n</template>\n\n<style scoped>\ndialog::backdrop {\n @apply bg-n-alpha-black1 backdrop-blur-[4px];\n}\n</style>\n","<script setup>\nimport { ref, computed } from 'vue';\nimport { useStore } from 'vuex';\nimport { useRouter } from 'vue-router';\nimport { useI18n } from 'vue-i18n';\nimport { frontendURL } from '../../../../helper/URLHelper';\nimport { useAlert } from 'dashboard/composables';\nimport { useInstallationName } from 'shared/mixins/globalConfigMixin';\n\nimport Dialog from 'dashboard/components-next/dialog/Dialog.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n integrationId: {\n type: [String, Number],\n required: true,\n },\n integrationName: { type: String, default: '' },\n integrationDescription: { type: String, default: '' },\n integrationEnabled: { type: Boolean, default: false },\n integrationAction: { type: String, default: '' },\n actionButtonText: { type: String, default: '' },\n deleteConfirmationText: { type: Object, default: () => ({}) },\n});\n\nconst { t } = useI18n();\nconst store = useStore();\nconst router = useRouter();\n\nconst dialogRef = ref(null);\n\nconst accountId = computed(() => store.getters.getCurrentAccountId);\nconst globalConfig = computed(() => store.getters['globalConfig/get']);\n\nconst openDeletePopup = () => {\n if (dialogRef.value) {\n dialogRef.value.open();\n }\n};\n\nconst closeDeletePopup = () => {\n if (dialogRef.value) {\n dialogRef.value.close();\n }\n};\n\nconst deleteIntegration = async () => {\n try {\n await store.dispatch('integrations/deleteIntegration', props.integrationId);\n useAlert(t('INTEGRATION_SETTINGS.DELETE.API.SUCCESS_MESSAGE'));\n } catch (error) {\n useAlert(t('INTEGRATION_SETTINGS.WEBHOOK.DELETE.API.ERROR_MESSAGE'));\n }\n};\n\nconst confirmDeletion = () => {\n closeDeletePopup();\n deleteIntegration();\n router.push({ name: 'settings_applications' });\n};\n</script>\n\n<template>\n <div\n class=\"flex flex-col items-start justify-between lg:flex-row lg:items-center p-6 outline outline-n-container outline-1 bg-n-alpha-3 rounded-md shadow gap-6\"\n >\n <div\n class=\"flex items-start lg:items-center justify-start flex-1 m-0 gap-6 flex-col lg:flex-row\"\n >\n <div class=\"flex h-16 w-16 items-center justify-center flex-shrink-0\">\n <img\n :src=\"`/dashboard/images/integrations/${integrationId}.png`\"\n class=\"max-w-full rounded-md border border-n-weak shadow-sm block dark:hidden bg-n-alpha-3 dark:bg-n-alpha-2\"\n />\n <img\n :src=\"`/dashboard/images/integrations/${integrationId}-dark.png`\"\n class=\"max-w-full rounded-md border border-n-weak shadow-sm hidden dark:block bg-n-alpha-3 dark:bg-n-alpha-2\"\n />\n </div>\n <div>\n <h3 class=\"mb-1 text-xl font-medium text-n-slate-12\">\n {{ integrationName }}\n </h3>\n <p class=\"text-n-slate-11 text-sm leading-6\">\n {{\n useInstallationName(\n integrationDescription,\n globalConfig.installationName\n )\n }}\n </p>\n </div>\n </div>\n <div class=\"flex justify-center items-center mb-0\">\n <router-link\n :to=\"\n frontendURL(\n `accounts/${accountId}/settings/integrations/` + integrationId\n )\n \"\n >\n <div v-if=\"integrationEnabled\">\n <div v-if=\"integrationAction === 'disconnect'\">\n <Button\n :label=\"\n actionButtonText ||\n $t('INTEGRATION_SETTINGS.WEBHOOK.DELETE.BUTTON_TEXT')\n \"\n faded\n ruby\n @click=\"openDeletePopup\"\n />\n </div>\n <div v-else>\n <Button\n faded\n blue\n :label=\"t('INTEGRATION_SETTINGS.WEBHOOK.CONFIGURE')\"\n />\n </div>\n </div>\n </router-link>\n <div v-if=\"!integrationEnabled\">\n <slot name=\"action\">\n <a :href=\"integrationAction\">\n <Button\n faded\n blue\n :label=\"t('INTEGRATION_SETTINGS.CONNECT.BUTTON_TEXT')\"\n />\n </a>\n </slot>\n </div>\n </div>\n <Dialog\n ref=\"dialogRef\"\n type=\"alert\"\n :title=\"\n deleteConfirmationText.title ||\n t('INTEGRATION_SETTINGS.WEBHOOK.DELETE.CONFIRM.TITLE')\n \"\n :description=\"\n deleteConfirmationText.message ||\n t('INTEGRATION_SETTINGS.WEBHOOK.DELETE.CONFIRM.MESSAGE')\n \"\n :confirm-button-label=\"\n t('INTEGRATION_SETTINGS.WEBHOOK.DELETE.CONFIRM.YES')\n \"\n :cancel-button-label=\"t('INTEGRATION_SETTINGS.WEBHOOK.DELETE.CONFIRM.NO')\"\n @confirm=\"confirmDeletion\"\n />\n </div>\n</template>\n","<script setup>\nimport { ref, computed } from 'vue';\nimport { useStore } from 'vuex';\nimport { useI18n } from 'vue-i18n';\nimport { useAlert } from 'dashboard/composables';\nimport { useInstallationName } from 'shared/mixins/globalConfigMixin';\nimport { useMessageFormatter } from 'shared/composables/useMessageFormatter';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n hasConnectedAChannel: {\n type: Boolean,\n default: true,\n },\n});\n\nconst store = useStore();\nconst { t } = useI18n();\n\nconst { formatMessage } = useMessageFormatter();\n\nconst selectedChannelId = ref('');\nconst availableChannels = ref([]);\n\nconst uiFlags = computed(() => store.getters['integrations/getUIFlags']);\n\nconst errorDescription = computed(() => {\n return !props.hasConnectedAChannel\n ? t('INTEGRATION_SETTINGS.SLACK.SELECT_CHANNEL.DESCRIPTION')\n : t('INTEGRATION_SETTINGS.SLACK.SELECT_CHANNEL.EXPIRED');\n});\nconst globalConfig = computed(() => store.getters['globalConfig/get']);\n\nconst formattedErrorMessage = computed(() => {\n return formatMessage(\n useInstallationName(\n errorDescription.value,\n globalConfig.value.installationName\n ),\n false\n );\n});\n\nconst fetchChannels = async () => {\n try {\n availableChannels.value = await store.dispatch(\n 'integrations/listAllSlackChannels'\n );\n availableChannels.value.sort((c1, c2) => c1.name - c2.name);\n } catch {\n t('INTEGRATION_SETTINGS.SLACK.FAILED_TO_FETCH_CHANNELS');\n availableChannels.value = [];\n }\n};\n\nconst updateIntegration = async () => {\n try {\n await store.dispatch('integrations/updateSlack', {\n referenceId: selectedChannelId.value,\n });\n useAlert(t('INTEGRATION_SETTINGS.SLACK.UPDATE_SUCCESS'));\n } catch (error) {\n useAlert(error.message || 'INTEGRATION_SETTINGS.SLACK.UPDATE_ERROR');\n }\n};\n</script>\n\n<template>\n <div\n class=\"px-6 py-4 mb-4 outline outline-n-container outline-1 bg-n-alpha-3 rounded-md shadow\"\n >\n <div class=\"flex\">\n <div class=\"flex-shrink-0\">\n <div class=\"i-lucide-bell text-xl text-n-amber-11 mt-1\" />\n </div>\n <div class=\"ml-3\">\n <p class=\"mb-1 text-base font-semibold text-n-slate-12\">\n {{\n $t('INTEGRATION_SETTINGS.SLACK.SELECT_CHANNEL.ATTENTION_REQUIRED')\n }}\n </p>\n <div class=\"mt-2 text-sm text-n-slate-11 mb-3\">\n <p v-dompurify-html=\"formattedErrorMessage\" />\n </div>\n </div>\n </div>\n <div v-if=\"!hasConnectedAChannel\" class=\"mb-2 mt-1 ml-8\">\n <Button\n v-if=\"!availableChannels.length\"\n amber\n sm\n :is-loading=\"uiFlags.isFetchingSlackChannels\"\n @click=\"fetchChannels\"\n >\n {{ $t('INTEGRATION_SETTINGS.SLACK.SELECT_CHANNEL.BUTTON_TEXT') }}\n </Button>\n <div v-else class=\"inline-flex\">\n <select\n v-model=\"selectedChannelId\"\n class=\"h-8 py-1 mr-4 text-xs leading-4 border border-yellow-300\"\n >\n <option value=\"\">\n {{ $t('INTEGRATION_SETTINGS.SLACK.SELECT_CHANNEL.OPTION_LABEL') }}\n </option>\n <option\n v-for=\"channel in availableChannels\"\n :key=\"channel.id\"\n :value=\"channel.id\"\n >\n #{{ channel.name }}\n </option>\n </select>\n <Button\n teal\n sm\n :is-loading=\"uiFlags.isUpdatingSlack\"\n @click=\"updateIntegration\"\n >\n {{ $t('INTEGRATION_SETTINGS.SLACK.SELECT_CHANNEL.UPDATE') }}\n </Button>\n </div>\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useMessageFormatter } from 'shared/composables/useMessageFormatter';\n\nconst props = defineProps({\n selectedChannelName: {\n type: String,\n required: true,\n },\n});\n\nconst { t } = useI18n();\nconst { formatMessage } = useMessageFormatter();\n\nconst formattedHelpText = computed(() => {\n return formatMessage(\n t('INTEGRATION_SETTINGS.SLACK.HELP_TEXT.BODY', {\n selectedChannelName: props.selectedChannelName,\n }),\n false\n );\n});\n</script>\n\n<template>\n <div\n class=\"flex-1 w-full px-6 py-5 outline outline-n-container outline-1 bg-n-alpha-3 rounded-md shadow\"\n >\n <div class=\"prose-lg max-w-5xl\">\n <h5 class=\"text-n-slate-12 tracking-tight\">\n {{ t('INTEGRATION_SETTINGS.SLACK.HELP_TEXT.TITLE') }}\n </h5>\n <div v-dompurify-html=\"formattedHelpText\" class=\"text-n-slate-11\" />\n </div>\n </div>\n</template>\n","<script setup>\nimport { ref, computed, onMounted } from 'vue';\nimport { useStore } from 'vuex';\nimport { useRouter, useRoute } from 'vue-router';\nimport { useI18n } from 'vue-i18n';\nimport Integration from './Integration.vue';\nimport SelectChannelWarning from './Slack/SelectChannelWarning.vue';\nimport SlackIntegrationHelpText from './Slack/SlackIntegrationHelpText.vue';\nimport Spinner from 'shared/components/Spinner.vue';\n\nconst props = defineProps({\n code: { type: String, default: '' },\n});\n\nconst store = useStore();\nconst router = useRouter();\nconst route = useRoute();\nconst { t } = useI18n();\n\nconst integrationLoaded = ref(false);\n\nconst integration = computed(() => {\n return store.getters['integrations/getIntegration']('slack');\n});\n\nconst areHooksAvailable = computed(() => {\n const { hooks = [] } = integration.value || {};\n return !!hooks.length;\n});\n\nconst hook = computed(() => {\n const { hooks = [] } = integration.value || {};\n const [firstHook] = hooks;\n return firstHook || {};\n});\n\nconst isIntegrationHookEnabled = computed(() => {\n return hook.value.status || false;\n});\n\nconst hasConnectedAChannel = computed(() => {\n return !!hook.value.reference_id;\n});\n\nconst selectedChannelName = computed(() => {\n if (hook.value.status) {\n const { settings: { channel_name: channelName = '' } = {} } = hook.value;\n return channelName || 'customer-conversations';\n }\n return t('INTEGRATION_SETTINGS.SLACK.HELP_TEXT.SELECTED');\n});\n\nconst uiFlags = computed(() => store.getters['integrations/getUIFlags']);\n\nconst integrationAction = computed(() => {\n if (integration.value.enabled) {\n return 'disconnect';\n }\n return integration.value.action;\n});\n\nconst intializeSlackIntegration = async () => {\n await store.dispatch('integrations/get', 'slack');\n if (props.code) {\n await store.dispatch('integrations/connectSlack', props.code);\n // Clear the query param `code` from the URL as the\n // subsequent reloads would result in an error\n router.replace(route.path);\n }\n integrationLoaded.value = true;\n};\n\nonMounted(() => {\n intializeSlackIntegration();\n});\n</script>\n\n<template>\n <div\n v-if=\"integrationLoaded && !uiFlags.isCreatingSlack\"\n class=\"flex flex-col flex-1 overflow-auto gap-5 pt-1 pb-10\"\n >\n <Integration\n :integration-id=\"integration.id\"\n :integration-logo=\"integration.logo\"\n :integration-name=\"integration.name\"\n :integration-description=\"integration.description\"\n :integration-enabled=\"integration.enabled\"\n :integration-action=\"integrationAction\"\n :action-button-text=\"$t('INTEGRATION_SETTINGS.SLACK.DELETE')\"\n :delete-confirmation-text=\"{\n title: $t('INTEGRATION_SETTINGS.SLACK.DELETE_CONFIRMATION.TITLE'),\n message: $t('INTEGRATION_SETTINGS.SLACK.DELETE_CONFIRMATION.MESSAGE'),\n }\"\n />\n <div v-if=\"areHooksAvailable\" class=\"flex-1\">\n <SelectChannelWarning\n v-if=\"!isIntegrationHookEnabled\"\n :has-connected-a-channel=\"hasConnectedAChannel\"\n />\n <SlackIntegrationHelpText :selected-channel-name=\"selectedChannelName\" />\n </div>\n </div>\n <div v-else class=\"flex items-center justify-center flex-1\">\n <Spinner size=\"\" color-scheme=\"primary\" />\n </div>\n</template>\n","<script setup>\nimport { ref, computed, onMounted } from 'vue';\nimport {\n useFunctionGetter,\n useMapGetter,\n useStore,\n} from 'dashboard/composables/store';\n\nimport Integration from './Integration.vue';\nimport Spinner from 'shared/components/Spinner.vue';\n\nconst store = useStore();\n\nconst integrationLoaded = ref(false);\n\nconst integration = useFunctionGetter('integrations/getIntegration', 'linear');\n\nconst uiFlags = useMapGetter('integrations/getUIFlags');\n\nconst integrationAction = computed(() => {\n if (integration.value.enabled) {\n return 'disconnect';\n }\n return integration.value.action;\n});\n\nconst initializeLinearIntegration = async () => {\n await store.dispatch('integrations/get', 'linear');\n integrationLoaded.value = true;\n};\n\nonMounted(() => {\n initializeLinearIntegration();\n});\n</script>\n\n<template>\n <div class=\"flex-grow flex-shrink p-4 overflow-auto max-w-6xl mx-auto\">\n <div v-if=\"integrationLoaded && !uiFlags.isCreatingLinear\">\n <Integration\n :integration-id=\"integration.id\"\n :integration-logo=\"integration.logo\"\n :integration-name=\"integration.name\"\n :integration-description=\"integration.description\"\n :integration-enabled=\"integration.enabled\"\n :integration-action=\"integrationAction\"\n :delete-confirmation-text=\"{\n title: $t('INTEGRATION_SETTINGS.LINEAR.DELETE.TITLE'),\n message: $t('INTEGRATION_SETTINGS.LINEAR.DELETE.MESSAGE'),\n }\"\n />\n </div>\n <div v-else class=\"flex items-center justify-center flex-1\">\n <Spinner size=\"\" color-scheme=\"primary\" />\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed, ref, onMounted, nextTick } from 'vue';\nconst props = defineProps({\n modelValue: {\n type: [String, Number],\n default: '',\n },\n type: {\n type: String,\n default: 'text',\n },\n customInputClass: {\n type: [String, Object, Array],\n default: '',\n },\n placeholder: {\n type: String,\n default: '',\n },\n label: {\n type: String,\n default: '',\n },\n id: {\n type: String,\n default: '',\n },\n message: {\n type: String,\n default: '',\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n messageType: {\n type: String,\n default: 'info',\n validator: value => ['info', 'error', 'success'].includes(value),\n },\n min: {\n type: String,\n default: '',\n },\n autofocus: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits([\n 'update:modelValue',\n 'blur',\n 'input',\n 'focus',\n 'enter',\n]);\n\nconst isFocused = ref(false);\nconst inputRef = ref(null);\n\nconst messageClass = computed(() => {\n switch (props.messageType) {\n case 'error':\n return 'text-n-ruby-9 dark:text-n-ruby-9';\n case 'success':\n return 'text-green-500 dark:text-green-400';\n default:\n return 'text-n-slate-11 dark:text-n-slate-11';\n }\n});\n\nconst inputOutlineClass = computed(() => {\n switch (props.messageType) {\n case 'error':\n return 'outline-n-ruby-8 dark:outline-n-ruby-8 hover:outline-n-ruby-9 dark:hover:outline-n-ruby-9 disabled:outline-n-ruby-8 dark:disabled:outline-n-ruby-8';\n default:\n return 'outline-n-weak dark:outline-n-weak hover:outline-n-slate-6 dark:hover:outline-n-slate-6 disabled:outline-n-weak dark:disabled:outline-n-weak focus:outline-n-brand dark:focus:outline-n-brand';\n }\n});\n\nconst handleInput = event => {\n emit('update:modelValue', event.target.value);\n emit('input', event);\n};\n\nconst handleFocus = event => {\n emit('focus', event);\n isFocused.value = true;\n};\n\nconst handleBlur = event => {\n emit('blur', event);\n isFocused.value = false;\n};\n\nconst handleEnter = event => {\n emit('enter', event);\n};\n\nonMounted(() => {\n if (props.autofocus) {\n nextTick(() => {\n inputRef.value?.focus();\n });\n }\n});\n</script>\n\n<template>\n <div class=\"relative flex flex-col min-w-0 gap-1\">\n <label\n v-if=\"label\"\n :for=\"id\"\n class=\"mb-0.5 text-sm font-medium text-n-slate-12\"\n >\n {{ label }}\n </label>\n <!-- Added prefix slot to allow adding icons to the input -->\n <slot name=\"prefix\" />\n <input\n :id=\"id\"\n ref=\"inputRef\"\n :value=\"modelValue\"\n :class=\"[\n customInputClass,\n inputOutlineClass,\n {\n error: messageType === 'error',\n focus: isFocused,\n },\n ]\"\n :type=\"type\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :min=\"['date', 'datetime-local', 'time'].includes(type) ? min : undefined\"\n class=\"block w-full reset-base text-sm h-10 !px-3 !py-2.5 !mb-0 outline outline-1 border-none border-0 outline-offset-[-1px] rounded-lg bg-n-alpha-black2 file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-n-slate-10 dark:placeholder:text-n-slate-10 disabled:cursor-not-allowed disabled:opacity-50 text-n-slate-12 transition-all duration-500 ease-in-out\"\n @input=\"handleInput\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @keyup.enter=\"handleEnter\"\n />\n <p\n v-if=\"message\"\n class=\"min-w-0 mt-1 mb-0 text-xs truncate transition-all duration-500 ease-in-out\"\n :class=\"messageClass\"\n >\n {{ message }}\n </p>\n </div>\n</template>\n","<script setup>\nimport { ref, computed, onMounted } from 'vue';\nimport {\n useFunctionGetter,\n useMapGetter,\n useStore,\n} from 'dashboard/composables/store';\nimport Integration from './Integration.vue';\nimport Spinner from 'shared/components/Spinner.vue';\nimport integrationAPI from 'dashboard/api/integrations';\n\nimport Input from 'dashboard/components-next/input/Input.vue';\nimport Dialog from 'dashboard/components-next/dialog/Dialog.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\ndefineProps({\n error: {\n type: String,\n default: '',\n },\n});\n\nconst store = useStore();\nconst dialogRef = ref(null);\nconst integrationLoaded = ref(false);\nconst storeUrl = ref('');\nconst isSubmitting = ref(false);\nconst storeUrlError = ref('');\nconst integration = useFunctionGetter('integrations/getIntegration', 'shopify');\nconst uiFlags = useMapGetter('integrations/getUIFlags');\n\nconst integrationAction = computed(() => {\n if (integration.value.enabled) {\n return 'disconnect';\n }\n return 'connect';\n});\n\nconst hideStoreUrlModal = () => {\n storeUrl.value = '';\n storeUrlError.value = '';\n isSubmitting.value = false;\n};\n\nconst validateStoreUrl = url => {\n const pattern = /^[a-zA-Z0-9][a-zA-Z0-9-]*\\.myshopify\\.com$/;\n return pattern.test(url);\n};\n\nconst openStoreUrlDialog = () => {\n if (dialogRef.value) {\n dialogRef.value.open();\n }\n};\n\nconst handleStoreUrlSubmit = async () => {\n try {\n storeUrlError.value = '';\n if (!validateStoreUrl(storeUrl.value)) {\n storeUrlError.value =\n 'Please enter a valid Shopify store URL (e.g., your-store.myshopify.com)';\n return;\n }\n\n isSubmitting.value = true;\n const { data } = await integrationAPI.connectShopify({\n shopDomain: storeUrl.value,\n });\n\n if (data.redirect_url) {\n window.location.href = data.redirect_url;\n }\n } catch (error) {\n storeUrlError.value = error.message;\n } finally {\n isSubmitting.value = false;\n }\n};\n\nconst initializeShopifyIntegration = async () => {\n await store.dispatch('integrations/get', 'shopify');\n integrationLoaded.value = true;\n};\n\nonMounted(() => {\n initializeShopifyIntegration();\n});\n</script>\n\n<template>\n <div class=\"flex-grow flex-shrink p-4 overflow-auto max-w-6xl mx-auto\">\n <div\n v-if=\"integrationLoaded && !uiFlags.isCreatingShopify\"\n class=\"flex flex-col gap-6\"\n >\n <Integration\n :integration-id=\"integration.id\"\n :integration-logo=\"integration.logo\"\n :integration-name=\"integration.name\"\n :integration-description=\"integration.description\"\n :integration-enabled=\"integration.enabled\"\n :integration-action=\"integrationAction\"\n :delete-confirmation-text=\"{\n title: $t('INTEGRATION_SETTINGS.SHOPIFY.DELETE.TITLE'),\n message: $t('INTEGRATION_SETTINGS.SHOPIFY.DELETE.MESSAGE'),\n }\"\n >\n <template #action>\n <Button\n teal\n :label=\"$t('INTEGRATION_SETTINGS.CONNECT.BUTTON_TEXT')\"\n @click=\"openStoreUrlDialog\"\n />\n </template>\n </Integration>\n <div\n v-if=\"error\"\n class=\"flex items-center justify-center flex-1 outline outline-n-container outline-1 bg-n-alpha-3 rounded-md shadow p-6\"\n >\n <p class=\"text-red-500\">\n {{ $t('INTEGRATION_SETTINGS.SHOPIFY.ERROR') }}\n </p>\n </div>\n <Dialog\n ref=\"dialogRef\"\n :title=\"$t('INTEGRATION_SETTINGS.SHOPIFY.STORE_URL.TITLE')\"\n :is-loading=\"isSubmitting\"\n @confirm=\"handleStoreUrlSubmit\"\n @close=\"hideStoreUrlModal\"\n >\n <Input\n v-model=\"storeUrl\"\n :label=\"$t('INTEGRATION_SETTINGS.SHOPIFY.STORE_URL.LABEL')\"\n :placeholder=\"\n $t('INTEGRATION_SETTINGS.SHOPIFY.STORE_URL.PLACEHOLDER')\n \"\n :message=\"\n !storeUrlError\n ? $t('INTEGRATION_SETTINGS.SHOPIFY.STORE_URL.HELP')\n : storeUrlError\n \"\n :message-type=\"storeUrlError ? 'error' : 'info'\"\n />\n </Dialog>\n </div>\n\n <div v-else class=\"flex items-center justify-center flex-1\">\n <Spinner size=\"\" color-scheme=\"primary\" />\n </div>\n </div>\n</template>\n","import { FEATURE_FLAGS } from '../../../../featureFlags';\nimport { frontendURL } from '../../../../helper/URLHelper';\nimport SettingsWrapper from '../SettingsWrapper.vue';\nimport IntegrationHooks from './IntegrationHooks.vue';\nimport Index from './Index.vue';\nimport Webhook from './Webhooks/Index.vue';\nimport DashboardApps from './DashboardApps/Index.vue';\nimport Slack from './Slack.vue';\nimport SettingsContent from '../Wrapper.vue';\nimport Linear from './Linear.vue';\nimport Shopify from './Shopify.vue';\n\nexport default {\n routes: [\n {\n path: frontendURL('accounts/:accountId/settings/integrations'),\n component: SettingsWrapper,\n props: {},\n children: [\n {\n path: '',\n name: 'settings_applications',\n component: Index,\n meta: {\n featureFlag: FEATURE_FLAGS.INTEGRATIONS,\n permissions: ['administrator'],\n },\n },\n {\n path: 'dashboard_apps',\n component: DashboardApps,\n name: 'settings_integrations_dashboard_apps',\n meta: {\n featureFlag: FEATURE_FLAGS.INTEGRATIONS,\n permissions: ['administrator'],\n },\n },\n {\n path: 'webhook',\n component: Webhook,\n name: 'settings_integrations_webhook',\n meta: {\n featureFlag: FEATURE_FLAGS.INTEGRATIONS,\n permissions: ['administrator'],\n },\n },\n ],\n },\n {\n path: frontendURL('accounts/:accountId/settings/integrations'),\n component: SettingsContent,\n props: params => {\n const integrationId = params.params?.integration_id;\n const hideHeader = ['dialogflow'].includes(integrationId);\n\n // Don't show header\n if (hideHeader) {\n return {};\n }\n\n const showBackButton = params.name !== 'settings_integrations';\n const backUrl =\n params.name === 'settings_integrations_integration'\n ? { name: 'settings_integrations' }\n : '';\n return {\n headerTitle: 'INTEGRATION_SETTINGS.HEADER',\n icon: 'flash-on',\n showBackButton,\n backUrl,\n };\n },\n children: [\n {\n path: 'slack',\n name: 'settings_integrations_slack',\n component: Slack,\n meta: {\n featureFlag: FEATURE_FLAGS.INTEGRATIONS,\n permissions: ['administrator'],\n },\n props: route => ({ code: route.query.code }),\n },\n {\n path: 'linear',\n name: 'settings_integrations_linear',\n component: Linear,\n meta: {\n permissions: ['administrator'],\n },\n props: route => ({ code: route.query.code }),\n },\n {\n path: 'shopify',\n name: 'settings_integrations_shopify',\n component: Shopify,\n meta: {\n featureFlag: FEATURE_FLAGS.INTEGRATIONS,\n permissions: ['administrator'],\n },\n props: route => ({ error: route.query.error }),\n },\n {\n path: ':integration_id',\n name: 'settings_applications_integration',\n component: IntegrationHooks,\n meta: {\n featureFlag: FEATURE_FLAGS.INTEGRATIONS,\n permissions: ['administrator'],\n },\n props: route => ({\n integrationId: route.params.integration_id,\n }),\n },\n ],\n },\n ],\n};\n","import { required, minLength } from '@vuelidate/validators';\n\nexport const validLabelCharacters = (str = '') => !!str && !str.includes(' ');\n\nexport const getLabelTitleErrorMessage = validation => {\n let errorMessage = '';\n if (!validation.title.$error) {\n errorMessage = '';\n } else if (!validation.title.required) {\n errorMessage = 'LABEL_MGMT.FORM.NAME.REQUIRED_ERROR';\n } else if (!validation.title.minLength) {\n errorMessage = 'LABEL_MGMT.FORM.NAME.MINIMUM_LENGTH_ERROR';\n } else if (!validation.title.validLabelCharacters) {\n errorMessage = 'LABEL_MGMT.FORM.NAME.VALID_ERROR';\n }\n return errorMessage;\n};\n\nexport default {\n title: {\n required,\n minLength: minLength(2),\n validLabelCharacters,\n },\n description: {},\n color: {\n required,\n },\n showOnSidebar: {},\n};\n","export const getRandomColor = () => {\n const letters = '0123456789ABCDEF';\n let color = '#';\n for (let i = 0; i < 6; i += 1) {\n color += letters[Math.floor(Math.random() * 16)];\n }\n return color;\n};\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\nimport validations, { getLabelTitleErrorMessage } from './validations';\nimport { getRandomColor } from 'dashboard/helper/labelColor';\nimport { useVuelidate } from '@vuelidate/core';\n\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n NextButton,\n },\n props: {\n prefillTitle: {\n type: String,\n default: '',\n },\n },\n emits: ['close'],\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n color: '#000',\n description: '',\n title: '',\n showOnSidebar: true,\n };\n },\n validations,\n computed: {\n ...mapGetters({\n uiFlags: 'labels/getUIFlags',\n }),\n labelTitleErrorMessage() {\n const errorMessage = getLabelTitleErrorMessage(this.v$);\n return this.$t(errorMessage);\n },\n },\n mounted() {\n this.color = getRandomColor();\n this.title = this.prefillTitle.toLowerCase();\n },\n methods: {\n onClose() {\n this.$emit('close');\n },\n async addLabel() {\n try {\n await this.$store.dispatch('labels/create', {\n color: this.color,\n description: this.description,\n title: this.title.toLowerCase(),\n show_on_sidebar: this.showOnSidebar,\n });\n useAlert(this.$t('LABEL_MGMT.ADD.API.SUCCESS_MESSAGE'));\n this.onClose();\n } catch (error) {\n const errorMessage =\n error.message || this.$t('LABEL_MGMT.ADD.API.ERROR_MESSAGE');\n useAlert(errorMessage);\n }\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex flex-col h-auto overflow-auto\">\n <woot-modal-header\n :header-title=\"$t('LABEL_MGMT.ADD.TITLE')\"\n :header-content=\"$t('LABEL_MGMT.ADD.DESC')\"\n />\n <form class=\"flex flex-wrap mx-0\" @submit.prevent=\"addLabel\">\n <woot-input\n v-model=\"title\"\n :class=\"{ error: v$.title.$error }\"\n class=\"w-full label-name--input\"\n :label=\"$t('LABEL_MGMT.FORM.NAME.LABEL')\"\n :placeholder=\"$t('LABEL_MGMT.FORM.NAME.PLACEHOLDER')\"\n :error=\"labelTitleErrorMessage\"\n data-testid=\"label-title\"\n @input=\"v$.title.$touch\"\n @blur=\"v$.title.$touch\"\n />\n\n <woot-input\n v-model=\"description\"\n :class=\"{ error: v$.description.$error }\"\n class=\"w-full\"\n :label=\"$t('LABEL_MGMT.FORM.DESCRIPTION.LABEL')\"\n :placeholder=\"$t('LABEL_MGMT.FORM.DESCRIPTION.PLACEHOLDER')\"\n data-testid=\"label-description\"\n @input=\"v$.description.$touch\"\n @blur=\"v$.description.$touch\"\n />\n\n <div class=\"w-full\">\n <label>\n {{ $t('LABEL_MGMT.FORM.COLOR.LABEL') }}\n <woot-color-picker v-model=\"color\" />\n </label>\n </div>\n <div class=\"flex items-center w-full gap-2\">\n <input v-model=\"showOnSidebar\" type=\"checkbox\" :value=\"true\" />\n <label for=\"conversation_creation\">\n {{ $t('LABEL_MGMT.FORM.SHOW_ON_SIDEBAR.LABEL') }}\n </label>\n </div>\n <div class=\"flex items-center justify-end w-full gap-2 px-0 py-2\">\n <NextButton\n faded\n slate\n type=\"reset\"\n :label=\"$t('LABEL_MGMT.FORM.CANCEL')\"\n @click.prevent=\"onClose\"\n />\n <NextButton\n type=\"submit\"\n data-testid=\"label-submit\"\n :label=\"$t('LABEL_MGMT.FORM.CREATE')\"\n :disabled=\"v$.title.$invalid || uiFlags.isCreating\"\n :is-loading=\"uiFlags.isCreating\"\n />\n </div>\n </form>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n// Label API supports only lowercase letters\n.label-name--input {\n ::v-deep {\n input {\n @apply lowercase;\n }\n }\n}\n</style>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\nimport validations, { getLabelTitleErrorMessage } from './validations';\nimport { useVuelidate } from '@vuelidate/core';\n\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n NextButton,\n },\n props: {\n selectedResponse: {\n type: Object,\n default: () => {},\n },\n },\n emits: ['close'],\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n title: '',\n description: '',\n showOnSidebar: true,\n color: '',\n };\n },\n validations,\n computed: {\n ...mapGetters({\n uiFlags: 'labels/getUIFlags',\n }),\n pageTitle() {\n return `${this.$t('LABEL_MGMT.EDIT.TITLE')} - ${\n this.selectedResponse.title\n }`;\n },\n labelTitleErrorMessage() {\n const errorMessage = getLabelTitleErrorMessage(this.v$);\n return this.$t(errorMessage);\n },\n },\n mounted() {\n this.setFormValues();\n },\n methods: {\n onClose() {\n this.$emit('close');\n },\n setFormValues() {\n this.title = this.selectedResponse.title;\n this.description = this.selectedResponse.description;\n this.showOnSidebar = this.selectedResponse.show_on_sidebar;\n this.color = this.selectedResponse.color;\n },\n editLabel() {\n this.$store\n .dispatch('labels/update', {\n id: this.selectedResponse.id,\n color: this.color,\n description: this.description,\n title: this.title.toLowerCase(),\n show_on_sidebar: this.showOnSidebar,\n })\n .then(() => {\n useAlert(this.$t('LABEL_MGMT.EDIT.API.SUCCESS_MESSAGE'));\n setTimeout(() => this.onClose(), 10);\n })\n .catch(() => {\n useAlert(this.$t('LABEL_MGMT.EDIT.API.ERROR_MESSAGE'));\n });\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex flex-col h-auto overflow-auto\">\n <woot-modal-header :header-title=\"pageTitle\" />\n <form class=\"flex flex-wrap mx-0\" @submit.prevent=\"editLabel\">\n <woot-input\n v-model=\"title\"\n :class=\"{ error: v$.title.$error }\"\n class=\"w-full label-name--input\"\n :label=\"$t('LABEL_MGMT.FORM.NAME.LABEL')\"\n :placeholder=\"$t('LABEL_MGMT.FORM.NAME.PLACEHOLDER')\"\n :error=\"labelTitleErrorMessage\"\n @input=\"v$.title.$touch\"\n @blur=\"v$.title.$touch\"\n />\n <woot-input\n v-model=\"description\"\n :class=\"{ error: v$.description.$error }\"\n class=\"w-full\"\n :label=\"$t('LABEL_MGMT.FORM.DESCRIPTION.LABEL')\"\n :placeholder=\"$t('LABEL_MGMT.FORM.DESCRIPTION.PLACEHOLDER')\"\n @input=\"v$.description.$touch\"\n @blur=\"v$.description.$touch\"\n />\n\n <div class=\"w-full\">\n <label>\n {{ $t('LABEL_MGMT.FORM.COLOR.LABEL') }}\n <woot-color-picker v-model=\"color\" />\n </label>\n </div>\n <div class=\"flex items-center w-full gap-2\">\n <input v-model=\"showOnSidebar\" type=\"checkbox\" :value=\"true\" />\n <label for=\"conversation_creation\">\n {{ $t('LABEL_MGMT.FORM.SHOW_ON_SIDEBAR.LABEL') }}\n </label>\n </div>\n <div class=\"flex items-center justify-end w-full gap-2 px-0 py-2\">\n <NextButton\n faded\n slate\n type=\"reset\"\n :label=\"$t('LABEL_MGMT.FORM.CANCEL')\"\n @click.prevent=\"onClose\"\n />\n <NextButton\n type=\"submit\"\n :label=\"$t('LABEL_MGMT.FORM.EDIT')\"\n :disabled=\"v$.title.$invalid || uiFlags.isUpdating\"\n :is-loading=\"uiFlags.isUpdating\"\n />\n </div>\n </form>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n// Label API supports only lowercase letters\n.label-name--input {\n ::v-deep {\n input {\n @apply lowercase;\n }\n }\n}\n</style>\n","<script setup>\nimport { useAlert } from 'dashboard/composables';\nimport { computed, onBeforeMount, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useStoreGetters, useStore } from 'dashboard/composables/store';\n\nimport AddLabel from './AddLabel.vue';\nimport EditLabel from './EditLabel.vue';\nimport BaseSettingsHeader from '../components/BaseSettingsHeader.vue';\nimport SettingsLayout from '../SettingsLayout.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst getters = useStoreGetters();\nconst store = useStore();\nconst { t } = useI18n();\n\nconst loading = ref({});\nconst showAddPopup = ref(false);\nconst showEditPopup = ref(false);\nconst showDeleteConfirmationPopup = ref(false);\nconst selectedLabel = ref({});\n\nconst records = computed(() => getters['labels/getLabels'].value);\nconst uiFlags = computed(() => getters['labels/getUIFlags'].value);\n\nconst deleteMessage = computed(() => ` ${selectedLabel.value.title}?`);\n\nconst openAddPopup = () => {\n showAddPopup.value = true;\n};\nconst hideAddPopup = () => {\n showAddPopup.value = false;\n};\n\nconst openEditPopup = response => {\n showEditPopup.value = true;\n selectedLabel.value = response;\n};\nconst hideEditPopup = () => {\n showEditPopup.value = false;\n};\n\nconst openDeletePopup = response => {\n showDeleteConfirmationPopup.value = true;\n selectedLabel.value = response;\n};\nconst closeDeletePopup = () => {\n showDeleteConfirmationPopup.value = false;\n};\n\nconst deleteLabel = async id => {\n try {\n await store.dispatch('labels/delete', id);\n useAlert(t('LABEL_MGMT.DELETE.API.SUCCESS_MESSAGE'));\n } catch (error) {\n const errorMessage =\n error?.message || t('LABEL_MGMT.DELETE.API.ERROR_MESSAGE');\n useAlert(errorMessage);\n } finally {\n loading.value[selectedLabel.value.id] = false;\n }\n};\n\nconst confirmDeletion = () => {\n loading.value[selectedLabel.value.id] = true;\n closeDeletePopup();\n deleteLabel(selectedLabel.value.id);\n};\n\nconst tableHeaders = computed(() => {\n return [\n t('LABEL_MGMT.LIST.TABLE_HEADER.NAME'),\n t('LABEL_MGMT.LIST.TABLE_HEADER.DESCRIPTION'),\n t('LABEL_MGMT.LIST.TABLE_HEADER.COLOR'),\n ];\n});\n\nonBeforeMount(() => {\n store.dispatch('labels/get');\n});\n</script>\n\n<template>\n <SettingsLayout\n :is-loading=\"uiFlags.isFetching\"\n :loading-message=\"$t('LABEL_MGMT.LOADING')\"\n :no-records-found=\"!records.length\"\n :no-records-message=\"$t('LABEL_MGMT.LIST.404')\"\n >\n <template #header>\n <BaseSettingsHeader\n :title=\"$t('LABEL_MGMT.HEADER')\"\n :description=\"$t('LABEL_MGMT.DESCRIPTION')\"\n :link-text=\"$t('LABEL_MGMT.LEARN_MORE')\"\n feature-name=\"labels\"\n >\n <template #actions>\n <Button\n icon=\"i-lucide-circle-plus\"\n :label=\"$t('LABEL_MGMT.HEADER_BTN_TXT')\"\n @click=\"openAddPopup\"\n />\n </template>\n </BaseSettingsHeader>\n </template>\n <template #body>\n <table\n class=\"min-w-full overflow-x-auto divide-y divide-slate-75 dark:divide-slate-700\"\n >\n <thead>\n <th\n v-for=\"thHeader in tableHeaders\"\n :key=\"thHeader\"\n class=\"py-4 font-semibold text-left ltr:pr-4 rtl:pl-4 text-slate-700 dark:text-slate-300\"\n >\n {{ thHeader }}\n </th>\n </thead>\n <tbody\n class=\"flex-1 divide-y divide-slate-25 dark:divide-slate-800 text-slate-700 dark:text-slate-100\"\n >\n <tr v-for=\"(label, index) in records\" :key=\"label.title\">\n <td class=\"py-4 ltr:pr-4 rtl:pl-4\">\n <span\n class=\"mb-1 font-medium break-words text-slate-700 dark:text-slate-100\"\n >\n {{ label.title }}\n </span>\n </td>\n <td class=\"py-4 ltr:pr-4 rtl:pl-4\">{{ label.description }}</td>\n <td class=\"py-4 leading-6 ltr:pr-4 rtl:pl-4\">\n <div class=\"flex items-center\">\n <span\n class=\"w-4 h-4 mr-1 border border-solid rounded rtl:mr-0 rtl:ml-1 border-slate-50 dark:border-slate-700\"\n :style=\"{ backgroundColor: label.color }\"\n />\n {{ label.color }}\n </div>\n </td>\n <td class=\"py-4 min-w-xs\">\n <div class=\"flex gap-1 justify-end\">\n <Button\n v-tooltip.top=\"$t('LABEL_MGMT.FORM.EDIT')\"\n icon=\"i-lucide-pen\"\n slate\n xs\n faded\n :is-loading=\"loading[label.id]\"\n @click=\"openEditPopup(label)\"\n />\n <Button\n v-tooltip.top=\"$t('LABEL_MGMT.FORM.DELETE')\"\n icon=\"i-lucide-trash-2\"\n xs\n ruby\n faded\n :is-loading=\"loading[label.id]\"\n @click=\"openDeletePopup(label, index)\"\n />\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </template>\n\n <woot-modal v-model:show=\"showAddPopup\" :on-close=\"hideAddPopup\">\n <AddLabel @close=\"hideAddPopup\" />\n </woot-modal>\n\n <woot-modal v-model:show=\"showEditPopup\" :on-close=\"hideEditPopup\">\n <EditLabel :selected-response=\"selectedLabel\" @close=\"hideEditPopup\" />\n </woot-modal>\n\n <woot-delete-modal\n v-model:show=\"showDeleteConfirmationPopup\"\n :on-close=\"closeDeletePopup\"\n :on-confirm=\"confirmDeletion\"\n :title=\"$t('LABEL_MGMT.DELETE.CONFIRM.TITLE')\"\n :message=\"$t('LABEL_MGMT.DELETE.CONFIRM.MESSAGE')\"\n :message-value=\"deleteMessage\"\n :confirm-text=\"$t('LABEL_MGMT.DELETE.CONFIRM.YES')\"\n :reject-text=\"$t('LABEL_MGMT.DELETE.CONFIRM.NO')\"\n />\n </SettingsLayout>\n</template>\n","import { FEATURE_FLAGS } from '../../../../featureFlags';\nimport { frontendURL } from '../../../../helper/URLHelper';\n\nimport SettingsWrapper from '../SettingsWrapper.vue';\nimport Index from './Index.vue';\n\nexport default {\n routes: [\n {\n path: frontendURL('accounts/:accountId/settings/labels'),\n component: SettingsWrapper,\n children: [\n {\n path: '',\n name: 'labels_wrapper',\n meta: {\n permissions: ['administrator'],\n },\n redirect: to => {\n return { name: 'labels_list', params: to.params };\n },\n },\n {\n path: 'list',\n name: 'labels_list',\n meta: {\n featureFlag: FEATURE_FLAGS.LABELS,\n permissions: ['administrator'],\n },\n component: Index,\n },\n ],\n },\n ],\n};\n","<script setup>\nimport { computed } from 'vue';\nimport Thumbnail from 'dashboard/components/widgets/Thumbnail.vue';\nimport { useI18n } from 'vue-i18n';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n macro: {\n type: Object,\n required: true,\n },\n});\ndefineEmits(['delete']);\nconst { t } = useI18n();\n\nconst createdByName = computed(() => {\n const createdBy = props.macro.created_by;\n return createdBy.available_name ?? createdBy.email ?? '';\n});\n\nconst updatedByName = computed(() => {\n const updatedBy = props.macro.updated_by;\n return updatedBy.available_name ?? updatedBy.email ?? '';\n});\n\nconst visibilityLabel = computed(() => {\n const i18nKey =\n props.macro.visibility === 'global'\n ? 'MACROS.EDITOR.VISIBILITY.GLOBAL.LABEL'\n : 'MACROS.EDITOR.VISIBILITY.PERSONAL.LABEL';\n return t(i18nKey);\n});\n</script>\n\n<template>\n <tr>\n <td class=\"py-4 ltr:pr-4 rtl:pl-4 truncate\">{{ macro.name }}</td>\n <td class=\"py-4 ltr:pr-4 rtl:pl-4\">\n <div v-if=\"macro.created_by\" class=\"flex items-center\">\n <Thumbnail :username=\"createdByName\" size=\"24px\" />\n <span class=\"mx-2\">{{ createdByName }}</span>\n </div>\n <div v-else>--</div>\n </td>\n <td class=\"py-4 ltr:pr-4 rtl:pl-4\">\n <div v-if=\"macro.updated_by\" class=\"flex items-center\">\n <Thumbnail :username=\"updatedByName\" size=\"24px\" />\n <span class=\"mx-2\">{{ updatedByName }}</span>\n </div>\n <div v-else>--</div>\n </td>\n <td class=\"py-4 ltr:pr-4 rtl:pl-4\">{{ visibilityLabel }}</td>\n <td class=\"py-4 flex justify-end gap-1\">\n <router-link :to=\"{ name: 'macros_edit', params: { macroId: macro.id } }\">\n <Button\n v-tooltip.top=\"$t('MACROS.EDIT.TOOLTIP')\"\n icon=\"i-lucide-pen\"\n slate\n xs\n faded\n />\n </router-link>\n <Button\n v-tooltip.top=\"$t('MACROS.DELETE.TOOLTIP')\"\n icon=\"i-lucide-trash-2\"\n xs\n ruby\n faded\n @click=\"$emit('delete')\"\n />\n </td>\n </tr>\n</template>\n","<script setup>\nimport { useAlert } from 'dashboard/composables';\nimport MacrosTableRow from './MacrosTableRow.vue';\nimport BaseSettingsHeader from '../components/BaseSettingsHeader.vue';\nimport SettingsLayout from '../SettingsLayout.vue';\nimport { computed, onMounted, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useStoreGetters, useStore } from 'dashboard/composables/store';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst getters = useStoreGetters();\nconst store = useStore();\nconst { t } = useI18n();\n\nconst showDeleteConfirmationPopup = ref(false);\nconst selectedMacro = ref({});\n\nconst records = computed(() => getters['macros/getMacros'].value);\nconst uiFlags = computed(() => getters['macros/getUIFlags'].value);\n\nconst deleteMessage = computed(() => ` ${selectedMacro.value.name}?`);\n\nonMounted(() => {\n store.dispatch('macros/get');\n});\n\nconst deleteMacro = async id => {\n try {\n await store.dispatch('macros/delete', id);\n useAlert(t('MACROS.DELETE.API.SUCCESS_MESSAGE'));\n } catch (error) {\n useAlert(t('MACROS.DELETE.API.ERROR_MESSAGE'));\n }\n};\n\nconst openDeletePopup = response => {\n showDeleteConfirmationPopup.value = true;\n selectedMacro.value = response;\n};\n\nconst closeDeletePopup = () => {\n showDeleteConfirmationPopup.value = false;\n};\n\nconst confirmDeletion = () => {\n closeDeletePopup();\n deleteMacro(selectedMacro.value.id);\n};\n\nconst tableHeaders = computed(() => {\n return [\n t('MACROS.LIST.TABLE_HEADER.NAME'),\n t('MACROS.LIST.TABLE_HEADER.CREATED BY'),\n t('MACROS.LIST.TABLE_HEADER.LAST_UPDATED_BY'),\n t('MACROS.LIST.TABLE_HEADER.VISIBILITY'),\n ];\n});\n</script>\n\n<template>\n <SettingsLayout\n :no-records-message=\"$t('MACROS.LIST.404')\"\n :no-records-found=\"!records.length\"\n :is-loading=\"uiFlags.isFetching\"\n :loading-message=\"$t('MACROS.LOADING')\"\n feature-name=\"macros\"\n >\n <template #header>\n <BaseSettingsHeader\n :title=\"$t('MACROS.HEADER')\"\n :description=\"$t('MACROS.DESCRIPTION')\"\n :link-text=\"$t('MACROS.LEARN_MORE')\"\n feature-name=\"macros\"\n >\n <template #actions>\n <router-link :to=\"{ name: 'macros_new' }\">\n <Button\n icon=\"i-lucide-circle-plus\"\n :label=\"$t('MACROS.HEADER_BTN_TXT')\"\n />\n </router-link>\n </template>\n </BaseSettingsHeader>\n </template>\n <template #body>\n <table class=\"min-w-full divide-y divide-slate-75 dark:divide-slate-700\">\n <thead>\n <th\n v-for=\"thHeader in tableHeaders\"\n :key=\"thHeader\"\n class=\"py-4 ltr:pr-4 rtl:pl-4 text-left font-semibold text-n-slate-11\"\n >\n {{ thHeader }}\n </th>\n </thead>\n <tbody class=\"divide-y divide-n-weak text-n-slate-11\">\n <MacrosTableRow\n v-for=\"(macro, index) in records\"\n :key=\"index\"\n :macro=\"macro\"\n @delete=\"openDeletePopup(macro)\"\n />\n </tbody>\n </table>\n <woot-delete-modal\n v-model:show=\"showDeleteConfirmationPopup\"\n :on-close=\"closeDeletePopup\"\n :on-confirm=\"confirmDeletion\"\n :title=\"$t('LABEL_MGMT.DELETE.CONFIRM.TITLE')\"\n :message=\"$t('MACROS.DELETE.CONFIRM.MESSAGE')\"\n :message-value=\"deleteMessage\"\n :confirm-text=\"$t('MACROS.DELETE.CONFIRM.YES')\"\n :reject-text=\"$t('MACROS.DELETE.CONFIRM.NO')\"\n />\n </template>\n </SettingsLayout>\n</template>\n","import { computed } from 'vue';\nimport { useStoreGetters } from 'dashboard/composables/store';\nimport { PRIORITY_CONDITION_VALUES } from 'dashboard/constants/automation';\n\n/**\n * Composable for handling macro-related functionality\n * @returns {Object} An object containing the getMacroDropdownValues function\n */\nexport const useMacros = () => {\n const getters = useStoreGetters();\n\n const labels = computed(() => getters['labels/getLabels'].value);\n const teams = computed(() => getters['teams/getTeams'].value);\n const agents = computed(() => getters['agents/getAgents'].value);\n\n /**\n * Get dropdown values based on the specified type\n * @param {string} type - The type of dropdown values to retrieve\n * @returns {Array} An array of dropdown values\n */\n const getMacroDropdownValues = type => {\n switch (type) {\n case 'assign_team':\n case 'send_email_to_team':\n return teams.value;\n case 'assign_agent':\n return [{ id: 'self', name: 'Self' }, ...agents.value];\n case 'add_label':\n case 'remove_label':\n return labels.value.map(i => ({\n id: i.title,\n name: i.title,\n }));\n case 'change_priority':\n return PRIORITY_CONDITION_VALUES;\n default:\n return [];\n }\n };\n\n return {\n getMacroDropdownValues,\n };\n};\n","<script setup>\nimport { computed, inject, defineModel } from 'vue';\nimport { useMacros } from 'dashboard/composables/useMacros';\nimport { useI18n } from 'vue-i18n';\nimport ActionInput from 'dashboard/components/widgets/AutomationActionInput.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n singleNode: {\n type: Boolean,\n default: false,\n },\n errorKey: {\n type: String,\n default: '',\n },\n fileName: {\n type: String,\n default: '',\n },\n});\n\ndefineEmits(['resetAction', 'deleteNode']);\n\nconst { t } = useI18n();\nconst macroActionTypes = inject('macroActionTypes');\nconst { getMacroDropdownValues } = useMacros();\n\nconst actionData = defineModel({\n type: Object,\n required: true,\n});\n\nconst errorMessage = computed(() => {\n if (!props.errorKey) return '';\n return t(`MACROS.ERRORS.${props.errorKey}`);\n});\n\nconst showActionInput = computed(() => {\n if (\n actionData.value.action_name === 'send_email_to_team' ||\n actionData.value.action_name === 'send_message'\n )\n return false;\n const type = macroActionTypes.find(\n action => action.key === actionData.value.action_name\n ).inputType;\n return !!type;\n});\n\nconst dropdownValues = () => {\n return getMacroDropdownValues(actionData.value.action_name);\n};\n</script>\n\n<template>\n <div class=\"relative flex items-start w-full min-w-0 basis-full\">\n <NextButton\n v-if=\"!singleNode\"\n ghost\n sm\n slate\n icon=\"i-lucide-menu\"\n class=\"absolute cursor-move -left-10 mr-2 macros__node-drag-handle\"\n />\n <div\n class=\"flex-grow p-2 mr-2 rounded-md shadow-sm outline outline-1 outline-n-weak\"\n :class=\"\n errorKey\n ? 'animate-shake bg-n-ruby-8/20 outline-n-ruby-5 dark:outline-n-ruby-5'\n : 'bg-n-background dark:bg-n-solid-1'\n \"\n >\n <ActionInput\n v-model=\"actionData\"\n :action-types=\"macroActionTypes\"\n :dropdown-values=\"dropdownValues()\"\n :show-action-input=\"showActionInput\"\n :show-remove-button=\"false\"\n is-macro\n :error-message=\"errorMessage\"\n :initial-file-name=\"fileName\"\n @reset-action=\"$emit('resetAction')\"\n />\n </div>\n <NextButton\n v-if=\"!singleNode\"\n v-tooltip=\"$t('MACROS.EDITOR.DELETE_BTN_TOOLTIP')\"\n icon=\"i-lucide-trash-2\"\n sm\n faded\n ruby\n class=\"flex-shrink-0\"\n @click=\"$emit('deleteNode')\"\n />\n </div>\n</template>\n","export const MACRO_ACTION_TYPES = [\n {\n key: 'assign_team',\n label: 'Assign a team',\n inputType: 'search_select',\n },\n {\n key: 'assign_agent',\n label: 'Assign an agent',\n inputType: 'search_select',\n },\n {\n key: 'add_label',\n label: 'Add a label',\n inputType: 'multi_select',\n },\n {\n key: 'remove_label',\n label: 'Remove a label',\n inputType: 'multi_select',\n },\n {\n key: 'remove_assigned_team',\n label: 'Remove Assigned Team',\n inputType: null,\n },\n {\n key: 'send_email_transcript',\n label: 'Send an email transcript',\n inputType: 'email',\n },\n {\n key: 'mute_conversation',\n label: 'Mute conversation',\n inputType: null,\n },\n {\n key: 'snooze_conversation',\n label: 'Snooze conversation',\n inputType: null,\n },\n {\n key: 'resolve_conversation',\n label: 'Resolve conversation',\n inputType: null,\n },\n {\n key: 'send_attachment',\n label: 'Send Attachment',\n inputType: 'attachment',\n },\n {\n key: 'send_message',\n label: 'Send a message',\n inputType: 'textarea',\n },\n {\n key: 'add_private_note',\n label: 'Add a private note',\n inputType: 'textarea',\n },\n {\n key: 'change_priority',\n label: 'Change Priority',\n inputType: 'search_select',\n },\n];\n","import { MACRO_ACTION_TYPES as macroActionTypes } from 'dashboard/routes/dashboard/settings/macros/constants.js';\nexport const emptyMacro = {\n name: '',\n actions: [\n {\n action_name: 'assign_team',\n action_params: [],\n },\n ],\n visibility: 'global',\n};\n\nexport const resolveActionName = key => {\n return macroActionTypes.find(i => i.key === key).label;\n};\n\nexport const resolveTeamIds = (teams, ids) => {\n return ids\n .map(id => {\n const team = teams.find(i => i.id === id);\n return team ? team.name : '';\n })\n .join(', ');\n};\n\nexport const resolveLabels = (labels, ids) => {\n return ids\n .map(id => {\n const label = labels.find(i => i.title === id);\n return label ? label.title : '';\n })\n .join(', ');\n};\n\nexport const resolveAgents = (agents, ids) => {\n return ids\n .map(id => {\n const agent = agents.find(i => i.id === id);\n return agent ? agent.name : '';\n })\n .join(', ');\n};\n\nexport const getFileName = (id, actionType, files) => {\n if (!id || !files) return '';\n if (actionType === 'send_attachment') {\n const file = files.find(item => item.blob_id === id);\n if (file) return file.filename.toString();\n }\n return '';\n};\n","<script>\nimport Draggable from 'vuedraggable';\nimport MacroNode from './MacroNode.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\nimport { getFileName } from './macroHelper';\n\nexport default {\n components: {\n Draggable,\n MacroNode,\n NextButton,\n },\n props: {\n errors: {\n type: Object,\n default: () => ({}),\n },\n modelValue: {\n type: Array,\n default: () => [],\n },\n files: {\n type: Array,\n default: () => [],\n },\n },\n emits: ['update:modelValue', 'resetAction', 'deleteNode', 'addNewNode'],\n computed: {\n actionData: {\n get() {\n return this.modelValue;\n },\n set(value) {\n this.$emit('update:modelValue', value);\n },\n },\n },\n methods: {\n fileName() {\n return getFileName(...arguments);\n },\n },\n};\n</script>\n\n<template>\n <div class=\"macros__nodes\">\n <div class=\"macro__node\">\n <div>\n <span\n class=\"bg-n-solid-blue text-n-blue-text py-1 px-1.5 leading-none text-sm rounded-md\"\n >\n {{ $t('MACROS.EDITOR.START_FLOW') }}\n </span>\n </div>\n </div>\n <Draggable\n :list=\"actionData\"\n animation=\"200\"\n item-key=\"id\"\n ghost-class=\"ghost\"\n tag=\"div\"\n class=\"macros__nodes-draggable\"\n handle=\".macros__node-drag-handle\"\n >\n <template #item=\"{ index: i }\">\n <div :key=\"i\" class=\"macro__node\">\n <MacroNode\n v-model=\"actionData[i]\"\n class=\"macros__node-action\"\n type=\"add\"\n :index=\"i\"\n :error-key=\"errors[`action_${i}`]\"\n :file-name=\"\n fileName(\n actionData[i].action_params[0],\n actionData[i].action_name,\n files\n )\n \"\n :single-node=\"actionData.length === 1\"\n @reset-action=\"$emit('resetAction', i)\"\n @delete-node=\"$emit('deleteNode', i)\"\n />\n </div>\n </template>\n </Draggable>\n <div class=\"macro__node\">\n <div>\n <NextButton\n :title=\"$t('MACROS.EDITOR.ADD_BTN_TOOLTIP')\"\n class=\"shadow-sm\"\n solid\n teal\n icon=\"i-lucide-plus-circle\"\n @click=\"$emit('addNewNode')\"\n >\n {{ $t('MACROS.EDITOR.ADD_BTN_TOOLTIP') }}\n </NextButton>\n </div>\n </div>\n <div class=\"macro__node\">\n <div>\n <span\n class=\"bg-n-solid-blue text-n-blue-text py-1 px-1.5 leading-none text-sm rounded-md\"\n >\n {{ $t('MACROS.EDITOR.END_FLOW') }}\n </span>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.macros__nodes {\n max-width: 800px;\n}\n\n.macro__node:not(:last-child) {\n position: relative;\n padding-bottom: var(--space-large);\n}\n\n.macro__node:not(:last-child):not(.sortable-chosen):after,\n.macros__nodes-draggable:after {\n content: '';\n position: absolute;\n height: var(--space-large);\n width: var(--space-smaller);\n margin-left: var(--space-medium);\n\n border-left: 1px dashed var(--s-500);\n}\n\n.macros__nodes-draggable {\n position: relative;\n padding-bottom: var(--space-large);\n}\n\n.macros__node-action-container {\n position: relative;\n .drag-handle {\n position: absolute;\n left: var(--space-minus-medium);\n top: var(--space-smaller);\n cursor: move;\n color: var(--s-400);\n }\n}\n</style>\n","<script>\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n NextButton,\n },\n inject: ['v$'],\n props: {\n macroName: {\n type: String,\n default: '',\n },\n macroVisibility: {\n type: String,\n default: 'global',\n },\n },\n emits: ['update:name', 'update:visibility', 'submit'],\n methods: {\n isActive(key) {\n return this.macroVisibility === key\n ? 'bg-woot-25 dark:bg-slate-900 border-woot-200 dark:border-woot-700'\n : 'bg-white dark:bg-slate-900 border-slate-200 dark:border-slate-600';\n },\n onUpdateName(value) {\n this.$emit('update:name', value);\n },\n onUpdateVisibility(value) {\n this.$emit('update:visibility', value);\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"p-4 bg-n-solid-2 border border-n-weak rounded-lg shadow-sm h-full flex flex-col\"\n >\n <div>\n <woot-input\n :model-value=\"macroName\"\n :label=\"$t('MACROS.ADD.FORM.NAME.LABEL')\"\n :placeholder=\"$t('MACROS.ADD.FORM.NAME.PLACEHOLDER')\"\n :error=\"v$.macro.name.$error ? $t('MACROS.ADD.FORM.NAME.ERROR') : null\"\n :class=\"{ error: v$.macro.name.$error }\"\n @update:model-value=\"onUpdateName\"\n />\n </div>\n <div class=\"mt-2\">\n <p\n class=\"block m-0 text-sm font-medium leading-[1.8] text-slate-700 dark:text-slate-100\"\n >\n {{ $t('MACROS.EDITOR.VISIBILITY.LABEL') }}\n </p>\n <div class=\"grid grid-cols-1 lg:grid-cols-2 gap-3\">\n <button\n class=\"p-2 relative rounded-md border border-solid text-left cursor-default\"\n :class=\"isActive('global')\"\n @click=\"onUpdateVisibility('global')\"\n >\n <fluent-icon\n v-if=\"macroVisibility === 'global'\"\n icon=\"checkmark-circle\"\n type=\"solid\"\n class=\"absolute text-woot-500 dark:text-woot-500 top-2 right-2\"\n />\n <p\n class=\"block m-0 text-sm font-medium leading-[1.8] text-slate-700 dark:text-slate-100\"\n >\n {{ $t('MACROS.EDITOR.VISIBILITY.GLOBAL.LABEL') }}\n </p>\n <p class=\"text-xs text-slate-500 dark:text-slate-200\">\n {{ $t('MACROS.EDITOR.VISIBILITY.GLOBAL.DESCRIPTION') }}\n </p>\n </button>\n <button\n class=\"p-2 relative rounded-md border border-solid text-left cursor-default\"\n :class=\"isActive('personal')\"\n @click=\"onUpdateVisibility('personal')\"\n >\n <fluent-icon\n v-if=\"macroVisibility === 'personal'\"\n icon=\"checkmark-circle\"\n type=\"solid\"\n class=\"absolute text-woot-500 dark:text-woot-500 top-2 right-2\"\n />\n <p\n class=\"block m-0 text-sm font-medium leading-[1.8] text-slate-700 dark:text-slate-100\"\n >\n {{ $t('MACROS.EDITOR.VISIBILITY.PERSONAL.LABEL') }}\n </p>\n <p class=\"text-xs text-slate-500 dark:text-slate-200\">\n {{ $t('MACROS.EDITOR.VISIBILITY.PERSONAL.DESCRIPTION') }}\n </p>\n </button>\n </div>\n <div\n class=\"mt-2 flex items-start p-2 bg-n-slate-3 dark:bg-n-solid-3 rounded-md\"\n >\n <fluent-icon icon=\"info\" size=\"16\" class=\"flex-shrink-0 mt-0.5\" />\n <p\n class=\"ml-2 rtl:ml-0 rtl:mr-2 mb-0 text-slate-600 dark:text-slate-200\"\n >\n {{ $t('MACROS.ORDER_INFO') }}\n </p>\n </div>\n </div>\n <div class=\"mt-auto w-full\">\n <NextButton\n blue\n solid\n :label=\"$t('MACROS.HEADER_BTN_TXT_SAVE')\"\n class=\"w-full\"\n @click=\"$emit('submit')\"\n />\n </div>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n::v-deep input[type='text'] {\n @apply mb-0;\n}\n\n::v-deep .error {\n .message {\n @apply mb-0;\n }\n}\n</style>\n","<script>\nimport { provide } from 'vue';\nimport MacroNodes from './MacroNodes.vue';\nimport MacroProperties from './MacroProperties.vue';\nimport { required } from '@vuelidate/validators';\nimport { useVuelidate } from '@vuelidate/core';\nimport { validateActions } from 'dashboard/helper/validations';\n\nexport default {\n components: {\n MacroNodes,\n MacroProperties,\n },\n props: {\n macroData: {\n type: Object,\n default: () => ({}),\n },\n },\n emits: ['submit'],\n setup() {\n const v$ = useVuelidate();\n provide('v$', v$);\n\n return { v$ };\n },\n data() {\n return {\n macro: this.macroData,\n errors: {},\n };\n },\n computed: {\n files() {\n if (this.macro && this.macro.files) return this.macro.files;\n return [];\n },\n },\n watch: {\n $route: {\n handler() {\n this.resetValidation();\n },\n immediate: true,\n },\n macroData: {\n handler() {\n this.macro = this.macroData;\n },\n immediate: true,\n },\n },\n validations: {\n macro: {\n name: {\n required,\n },\n visibility: {\n required,\n },\n },\n },\n methods: {\n removeObjectProperty(obj, keyToRemove) {\n return Object.fromEntries(\n Object.entries(obj).filter(([key]) => key !== keyToRemove)\n );\n },\n updateName(value) {\n this.macro.name = value;\n },\n updateVisibility(value) {\n this.macro.visibility = value;\n },\n appendNode() {\n this.macro.actions.push({\n action_name: 'assign_team',\n action_params: [],\n });\n },\n deleteNode(index) {\n // remove that index specifically\n // so that the next item does not get marked invalid\n this.errors = this.removeObjectProperty(this.errors, `action_${index}`);\n this.macro.actions.splice(index, 1);\n },\n submit() {\n this.errors = validateActions(this.macro.actions);\n if (Object.keys(this.errors).length !== 0) return;\n\n this.v$.$touch();\n if (this.v$.$invalid) return;\n\n this.$emit('submit', this.macro);\n },\n resetNode(index) {\n // remove that index specifically\n // so that the next item does not get marked invalid\n this.errors = this.removeObjectProperty(this.errors, `action_${index}`);\n this.macro.actions[index].action_params = [];\n },\n resetValidation() {\n this.errors = {};\n this.v$?.$reset?.();\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex flex-col w-full h-auto md:flex-row md:h-full\">\n <div\n class=\"flex-1 w-full h-full max-h-full px-12 py-4 overflow-y-auto md:w-auto macro-gradient-radial dark:macro-dark-gradient-radial macro-gradient-radial-size\"\n >\n <MacroNodes\n v-model=\"macro.actions\"\n :files=\"files\"\n :errors=\"errors\"\n @add-new-node=\"appendNode\"\n @delete-node=\"deleteNode\"\n @reset-action=\"resetNode\"\n />\n </div>\n <div class=\"w-full md:w-1/3 pb-4\">\n <MacroProperties\n :macro-name=\"macro.name\"\n :macro-visibility=\"macro.visibility\"\n @update:name=\"updateName\"\n @update:visibility=\"updateVisibility\"\n @submit=\"submit\"\n />\n </div>\n </div>\n</template>\n\n<style scoped>\n@tailwind components;\n\n@layer components {\n .macro-gradient-radial {\n background-image: radial-gradient(#ebf0f5 1.2px, transparent 0);\n }\n\n .macro-dark-gradient-radial {\n background-image: radial-gradient(#293f51 1.2px, transparent 0);\n }\n\n .macro-gradient-radial-size {\n background-size: 1rem 1rem;\n }\n}\n</style>\n","<script setup>\nimport { ref, computed, watch, provide } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { useI18n } from 'vue-i18n';\nimport { useStore, useStoreGetters } from 'dashboard/composables/store';\nimport MacroForm from './MacroForm.vue';\nimport { MACRO_ACTION_TYPES } from './constants';\nimport { useAlert } from 'dashboard/composables';\nimport actionQueryGenerator from 'dashboard/helper/actionQueryGenerator.js';\nimport { useMacros } from 'dashboard/composables/useMacros';\n\nconst store = useStore();\nconst getters = useStoreGetters();\n\nconst route = useRoute();\nconst router = useRouter();\n\nconst { t } = useI18n();\n\nconst { getMacroDropdownValues } = useMacros();\n\nconst macro = ref(null);\nconst mode = ref('CREATE');\nconst macroActionTypes = MACRO_ACTION_TYPES;\n\nprovide('macroActionTypes', macroActionTypes);\n\nconst uiFlags = computed(() => getters['macros/getUIFlags'].value);\nconst macroId = computed(() => route.params.macroId);\n\nconst fetchDropdownData = () => {\n store.dispatch('agents/get');\n store.dispatch('teams/get');\n store.dispatch('labels/get');\n};\n\nconst formatMacro = macroData => {\n const formattedActions = macroData.actions.map(action => {\n let actionParams = [];\n if (action.action_params.length) {\n const inputType = macroActionTypes.find(\n item => item.key === action.action_name\n ).inputType;\n if (inputType === 'multi_select' || inputType === 'search_select') {\n actionParams = getMacroDropdownValues(action.action_name).filter(item =>\n [...action.action_params].includes(item.id)\n );\n } else if (inputType === 'team_message') {\n actionParams = {\n team_ids: getMacroDropdownValues(action.action_name).filter(item =>\n [...action.action_params[0].team_ids].includes(item.id)\n ),\n message: action.action_params[0].message,\n };\n } else actionParams = [...action.action_params];\n }\n return {\n ...action,\n action_params: actionParams,\n };\n });\n return {\n ...macroData,\n actions: formattedActions,\n };\n};\n\nconst manifestMacro = async () => {\n await store.dispatch('macros/getSingleMacro', macroId.value);\n const singleMacro = store.getters['macros/getMacro'](macroId.value);\n macro.value = formatMacro(singleMacro);\n};\n\nconst fetchMacro = () => {\n mode.value = 'EDIT';\n manifestMacro();\n};\n\nconst initNewMacro = () => {\n mode.value = 'CREATE';\n macro.value = {\n name: '',\n actions: [\n {\n action_name: 'assign_team',\n action_params: [],\n },\n ],\n visibility: 'global',\n };\n};\n\nwatch(\n () => route,\n () => {\n fetchDropdownData();\n if (route.params.macroId) {\n fetchMacro();\n } else {\n initNewMacro();\n }\n },\n { immediate: true, deep: true }\n);\n\nconst saveMacro = async macroData => {\n try {\n const action = mode.value === 'EDIT' ? 'macros/update' : 'macros/create';\n const successMessage =\n mode.value === 'EDIT'\n ? t('MACROS.EDIT.API.SUCCESS_MESSAGE')\n : t('MACROS.ADD.API.SUCCESS_MESSAGE');\n let serializedMacro = JSON.parse(JSON.stringify(macroData));\n serializedMacro.actions = actionQueryGenerator(serializedMacro.actions);\n await store.dispatch(action, serializedMacro);\n useAlert(successMessage);\n router.push({ name: 'macros_wrapper' });\n } catch (error) {\n useAlert(t('MACROS.ERROR'));\n }\n};\n</script>\n\n<template>\n <div class=\"flex flex-col flex-1 h-full overflow-auto\">\n <woot-loading-state\n v-if=\"uiFlags.isFetchingItem\"\n :message=\"t('MACROS.EDITOR.LOADING')\"\n />\n <MacroForm\n v-if=\"macro && !uiFlags.isFetchingItem\"\n :macro-data=\"macro\"\n @update:macro-data=\"macro = $event\"\n @submit=\"saveMacro\"\n />\n </div>\n</template>\n","import { FEATURE_FLAGS } from '../../../../featureFlags';\nimport { frontendURL } from 'dashboard/helper/URLHelper';\n\nimport {\n ROLES,\n CONVERSATION_PERMISSIONS,\n} from 'dashboard/constants/permissions.js';\nimport SettingsContent from '../Wrapper.vue';\nimport SettingsWrapper from '../SettingsWrapper.vue';\nimport Macros from './Index.vue';\nimport MacroEditor from './MacroEditor.vue';\n\nexport default {\n routes: [\n {\n path: frontendURL('accounts/:accountId/settings/macros'),\n component: SettingsWrapper,\n children: [\n {\n path: '',\n name: 'macros_wrapper',\n component: Macros,\n meta: {\n featureFlag: FEATURE_FLAGS.MACROS,\n permissions: [...ROLES, ...CONVERSATION_PERMISSIONS],\n },\n },\n ],\n },\n {\n path: frontendURL('accounts/:accountId/settings/macros'),\n component: SettingsContent,\n props: () => {\n return {\n headerTitle: 'MACROS.HEADER',\n icon: 'flash-settings',\n showBackButton: true,\n };\n },\n children: [\n {\n path: ':macroId/edit',\n name: 'macros_edit',\n component: MacroEditor,\n meta: {\n featureFlag: FEATURE_FLAGS.MACROS,\n permissions: [...ROLES, ...CONVERSATION_PERMISSIONS],\n },\n },\n {\n path: 'new',\n name: 'macros_new',\n component: MacroEditor,\n meta: {\n featureFlag: FEATURE_FLAGS.MACROS,\n permissions: [...ROLES, ...CONVERSATION_PERMISSIONS],\n },\n },\n ],\n },\n ],\n};\n","<template>\n <div\n class=\"reports--wrapper overflow-auto bg-n-background w-full px-8 xl:px-0\"\n >\n <div class=\"max-w-[60rem] mx-auto pb-12\">\n <router-view />\n </div>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.reports--wrapper {\n :deep() {\n .multiselect--disabled {\n @apply opacity-50 border border-n-weak rounded-md cursor-not-allowed;\n }\n\n .multiselect__content-wrapper {\n @apply bg-n-solid-2 border border-n-weak text-n-slate-12;\n }\n\n .multiselect__tags {\n @apply bg-n-slate-1 border border-n-weak m-0 min-h-[2.875rem] pt-0;\n\n input[type='text'] {\n @apply bg-n-alpha-3 border-n-weak placeholder:text-n-slate-11 min-h-[2.375rem] h-[2.375rem] px-0.5 py-0 text-sm;\n }\n }\n\n .multiselect__placeholder {\n @apply text-n-slate-11;\n }\n\n .multiselect__select {\n @apply min-h-0;\n }\n\n .multiselect__single {\n @apply bg-n-alpha-3 text-n-slate-11;\n }\n\n .multiselect__input {\n @apply text-sm h-[2.375rem] mb-0 py-0;\n }\n\n .multiselect__tags,\n .multiselect__input,\n .multiselect {\n @apply bg-n-alpha-3 !border-n-weak text-n-slate-12 rounded-lg text-sm min-h-[2.5rem];\n }\n\n .mx-input-wrapper {\n @apply bg-n-alpha-3 border-n-weak text-n-slate-12 rounded-lg text-sm;\n\n input {\n @apply border-n-weak text-sm;\n }\n }\n\n .multiselect__option {\n @apply flex items-center;\n }\n\n .mx-datepicker {\n .mx-input {\n background-color: transparent !important;\n }\n\n .mx-input-wrapper input::placeholder {\n @apply text-n-slate-11;\n }\n\n .mx-input-wrapper input {\n @apply text-n-slate-11;\n }\n }\n\n .multiselect--active:not(.multiselect--above) .multiselect__current,\n .multiselect--active:not(.multiselect--above) .multiselect__input,\n .multiselect--active:not(.multiselect--above) .multiselect__tags {\n @apply rounded-b-none;\n }\n }\n}\n</style>\n","export function isDate(value) {\n return value instanceof Date || Object.prototype.toString.call(value) === '[object Date]';\n}\nexport function toDate(value) {\n if (isDate(value)) {\n return new Date(value.getTime());\n }\n\n if (value == null) {\n return new Date(NaN);\n }\n\n return new Date(value);\n}\nexport function isValidDate(value) {\n return isDate(value) && !isNaN(value.getTime());\n}\nexport function startOfWeek(value) {\n var firstDayOfWeek = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n if (!(firstDayOfWeek >= 0 && firstDayOfWeek <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6');\n }\n\n var date = toDate(value);\n var day = date.getDay();\n var diff = (day + 7 - firstDayOfWeek) % 7;\n date.setDate(date.getDate() - diff);\n date.setHours(0, 0, 0, 0);\n return date;\n}\nexport function startOfWeekYear(value) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$firstDayOfWeek = _ref.firstDayOfWeek,\n firstDayOfWeek = _ref$firstDayOfWeek === void 0 ? 0 : _ref$firstDayOfWeek,\n _ref$firstWeekContain = _ref.firstWeekContainsDate,\n firstWeekContainsDate = _ref$firstWeekContain === void 0 ? 1 : _ref$firstWeekContain;\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7');\n }\n\n var date = toDate(value);\n var year = date.getFullYear();\n var firstDateOfFirstWeek = new Date(0);\n\n for (var i = year + 1; i >= year - 1; i--) {\n firstDateOfFirstWeek.setFullYear(i, 0, firstWeekContainsDate);\n firstDateOfFirstWeek.setHours(0, 0, 0, 0);\n firstDateOfFirstWeek = startOfWeek(firstDateOfFirstWeek, firstDayOfWeek);\n\n if (date.getTime() >= firstDateOfFirstWeek.getTime()) {\n break;\n }\n }\n\n return firstDateOfFirstWeek;\n}\nexport function getWeek(value) {\n var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref2$firstDayOfWeek = _ref2.firstDayOfWeek,\n firstDayOfWeek = _ref2$firstDayOfWeek === void 0 ? 0 : _ref2$firstDayOfWeek,\n _ref2$firstWeekContai = _ref2.firstWeekContainsDate,\n firstWeekContainsDate = _ref2$firstWeekContai === void 0 ? 1 : _ref2$firstWeekContai;\n\n var date = toDate(value);\n var firstDateOfThisWeek = startOfWeek(date, firstDayOfWeek);\n var firstDateOfFirstWeek = startOfWeekYear(date, {\n firstDayOfWeek: firstDayOfWeek,\n firstWeekContainsDate: firstWeekContainsDate\n });\n var diff = firstDateOfThisWeek.getTime() - firstDateOfFirstWeek.getTime();\n return Math.round(diff / (7 * 24 * 3600 * 1000)) + 1;\n}","var locale = {\n months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n weekdaysMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n firstDayOfWeek: 0,\n firstWeekContainsDate: 1\n};\nexport default locale;","import { toDate, isValidDate, getWeek } from './util';\nimport defaultLocale from './locale/en';\nvar REGEX_FORMAT = /\\[([^\\]]+)]|YYYY|YY?|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|m{1,2}|s{1,2}|Z{1,2}|S{1,3}|w{1,2}|x|X|a|A/g;\n\nfunction pad(val) {\n var len = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;\n var output = \"\".concat(Math.abs(val));\n var sign = val < 0 ? '-' : '';\n\n while (output.length < len) {\n output = \"0\".concat(output);\n }\n\n return sign + output;\n}\n\nfunction getOffset(date) {\n return Math.round(date.getTimezoneOffset() / 15) * 15;\n}\n\nfunction formatTimezone(offset) {\n var delimeter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = Math.floor(absOffset / 60);\n var minutes = absOffset % 60;\n return sign + pad(hours, 2) + delimeter + pad(minutes, 2);\n}\n\nvar meridiem = function meridiem(h, _, isLowercase) {\n var word = h < 12 ? 'AM' : 'PM';\n return isLowercase ? word.toLocaleLowerCase() : word;\n};\n\nvar formatFlags = {\n Y: function Y(date) {\n var y = date.getFullYear();\n return y <= 9999 ? \"\".concat(y) : \"+\".concat(y);\n },\n // Year: 00, 01, ..., 99\n YY: function YY(date) {\n return pad(date.getFullYear(), 4).substr(2);\n },\n // Year: 1900, 1901, ..., 2099\n YYYY: function YYYY(date) {\n return pad(date.getFullYear(), 4);\n },\n // Month: 1, 2, ..., 12\n M: function M(date) {\n return date.getMonth() + 1;\n },\n // Month: 01, 02, ..., 12\n MM: function MM(date) {\n return pad(date.getMonth() + 1, 2);\n },\n MMM: function MMM(date, locale) {\n return locale.monthsShort[date.getMonth()];\n },\n MMMM: function MMMM(date, locale) {\n return locale.months[date.getMonth()];\n },\n // Day of month: 1, 2, ..., 31\n D: function D(date) {\n return date.getDate();\n },\n // Day of month: 01, 02, ..., 31\n DD: function DD(date) {\n return pad(date.getDate(), 2);\n },\n // Hour: 0, 1, ... 23\n H: function H(date) {\n return date.getHours();\n },\n // Hour: 00, 01, ..., 23\n HH: function HH(date) {\n return pad(date.getHours(), 2);\n },\n // Hour: 1, 2, ..., 12\n h: function h(date) {\n var hours = date.getHours();\n\n if (hours === 0) {\n return 12;\n }\n\n if (hours > 12) {\n return hours % 12;\n }\n\n return hours;\n },\n // Hour: 01, 02, ..., 12\n hh: function hh() {\n var hours = formatFlags.h.apply(formatFlags, arguments);\n return pad(hours, 2);\n },\n // Minute: 0, 1, ..., 59\n m: function m(date) {\n return date.getMinutes();\n },\n // Minute: 00, 01, ..., 59\n mm: function mm(date) {\n return pad(date.getMinutes(), 2);\n },\n // Second: 0, 1, ..., 59\n s: function s(date) {\n return date.getSeconds();\n },\n // Second: 00, 01, ..., 59\n ss: function ss(date) {\n return pad(date.getSeconds(), 2);\n },\n // 1/10 of second: 0, 1, ..., 9\n S: function S(date) {\n return Math.floor(date.getMilliseconds() / 100);\n },\n // 1/100 of second: 00, 01, ..., 99\n SS: function SS(date) {\n return pad(Math.floor(date.getMilliseconds() / 10), 2);\n },\n // Millisecond: 000, 001, ..., 999\n SSS: function SSS(date) {\n return pad(date.getMilliseconds(), 3);\n },\n // Day of week: 0, 1, ..., 6\n d: function d(date) {\n return date.getDay();\n },\n // Day of week: 'Su', 'Mo', ..., 'Sa'\n dd: function dd(date, locale) {\n return locale.weekdaysMin[date.getDay()];\n },\n // Day of week: 'Sun', 'Mon',..., 'Sat'\n ddd: function ddd(date, locale) {\n return locale.weekdaysShort[date.getDay()];\n },\n // Day of week: 'Sunday', 'Monday', ...,'Saturday'\n dddd: function dddd(date, locale) {\n return locale.weekdays[date.getDay()];\n },\n // AM, PM\n A: function A(date, locale) {\n var meridiemFunc = locale.meridiem || meridiem;\n return meridiemFunc(date.getHours(), date.getMinutes(), false);\n },\n // am, pm\n a: function a(date, locale) {\n var meridiemFunc = locale.meridiem || meridiem;\n return meridiemFunc(date.getHours(), date.getMinutes(), true);\n },\n // Timezone: -01:00, +00:00, ... +12:00\n Z: function Z(date) {\n return formatTimezone(getOffset(date), ':');\n },\n // Timezone: -0100, +0000, ... +1200\n ZZ: function ZZ(date) {\n return formatTimezone(getOffset(date));\n },\n // Seconds timestamp: 512969520\n X: function X(date) {\n return Math.floor(date.getTime() / 1000);\n },\n // Milliseconds timestamp: 512969520900\n x: function x(date) {\n return date.getTime();\n },\n w: function w(date, locale) {\n return getWeek(date, {\n firstDayOfWeek: locale.firstDayOfWeek,\n firstWeekContainsDate: locale.firstWeekContainsDate\n });\n },\n ww: function ww(date, locale) {\n return pad(formatFlags.w(date, locale), 2);\n }\n};\nexport function format(val, str) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var formatStr = str ? String(str) : 'YYYY-MM-DDTHH:mm:ss.SSSZ';\n var date = toDate(val);\n\n if (!isValidDate(date)) {\n return 'Invalid Date';\n }\n\n var locale = options.locale || defaultLocale;\n return formatStr.replace(REGEX_FORMAT, function (match, p1) {\n if (p1) {\n return p1;\n }\n\n if (typeof formatFlags[match] === 'function') {\n return \"\".concat(formatFlags[match](date, locale));\n }\n\n return match;\n });\n}","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (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 = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\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\nimport defaultLocale from './locale/en';\nimport { startOfWeekYear } from './util';\nvar formattingTokens = /(\\[[^\\[]*\\])|(MM?M?M?|Do|DD?|ddd?d?|w[o|w]?|YYYY|YY|a|A|hh?|HH?|mm?|ss?|S{1,3}|x|X|ZZ?|.)/g;\nvar match1 = /\\d/; // 0 - 9\n\nvar match2 = /\\d\\d/; // 00 - 99\n\nvar match3 = /\\d{3}/; // 000 - 999\n\nvar match4 = /\\d{4}/; // 0000 - 9999\n\nvar match1to2 = /\\d\\d?/; // 0 - 99\n\nvar matchShortOffset = /[+-]\\d\\d:?\\d\\d/; // +00:00 -00:00 +0000 or -0000\n\nvar matchSigned = /[+-]?\\d+/; // -inf - inf\n\nvar matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n// const matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i; // Word\n\nvar YEAR = 'year';\nvar MONTH = 'month';\nvar DAY = 'day';\nvar HOUR = 'hour';\nvar MINUTE = 'minute';\nvar SECOND = 'second';\nvar MILLISECOND = 'millisecond';\nvar parseFlags = {};\n\nvar addParseFlag = function addParseFlag(token, regex, callback) {\n var tokens = Array.isArray(token) ? token : [token];\n var func;\n\n if (typeof callback === 'string') {\n func = function func(input) {\n var value = parseInt(input, 10);\n return _defineProperty({}, callback, value);\n };\n } else {\n func = callback;\n }\n\n tokens.forEach(function (key) {\n parseFlags[key] = [regex, func];\n });\n};\n\nvar escapeStringRegExp = function escapeStringRegExp(str) {\n return str.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n};\n\nvar matchWordRegExp = function matchWordRegExp(localeKey) {\n return function (locale) {\n var array = locale[localeKey];\n\n if (!Array.isArray(array)) {\n throw new Error(\"Locale[\".concat(localeKey, \"] need an array\"));\n }\n\n return new RegExp(array.map(escapeStringRegExp).join('|'));\n };\n};\n\nvar matchWordCallback = function matchWordCallback(localeKey, key) {\n return function (input, locale) {\n var array = locale[localeKey];\n\n if (!Array.isArray(array)) {\n throw new Error(\"Locale[\".concat(localeKey, \"] need an array\"));\n }\n\n var index = array.indexOf(input);\n\n if (index < 0) {\n throw new Error('Invalid Word');\n }\n\n return _defineProperty({}, key, index);\n };\n};\n\naddParseFlag('Y', matchSigned, YEAR);\naddParseFlag('YY', match2, function (input) {\n var year = new Date().getFullYear();\n var cent = Math.floor(year / 100);\n var value = parseInt(input, 10);\n value = (value > 68 ? cent - 1 : cent) * 100 + value;\n return _defineProperty({}, YEAR, value);\n});\naddParseFlag('YYYY', match4, YEAR);\naddParseFlag('M', match1to2, function (input) {\n return _defineProperty({}, MONTH, parseInt(input, 10) - 1);\n});\naddParseFlag('MM', match2, function (input) {\n return _defineProperty({}, MONTH, parseInt(input, 10) - 1);\n});\naddParseFlag('MMM', matchWordRegExp('monthsShort'), matchWordCallback('monthsShort', MONTH));\naddParseFlag('MMMM', matchWordRegExp('months'), matchWordCallback('months', MONTH));\naddParseFlag('D', match1to2, DAY);\naddParseFlag('DD', match2, DAY);\naddParseFlag(['H', 'h'], match1to2, HOUR);\naddParseFlag(['HH', 'hh'], match2, HOUR);\naddParseFlag('m', match1to2, MINUTE);\naddParseFlag('mm', match2, MINUTE);\naddParseFlag('s', match1to2, SECOND);\naddParseFlag('ss', match2, SECOND);\naddParseFlag('S', match1, function (input) {\n return _defineProperty({}, MILLISECOND, parseInt(input, 10) * 100);\n});\naddParseFlag('SS', match2, function (input) {\n return _defineProperty({}, MILLISECOND, parseInt(input, 10) * 10);\n});\naddParseFlag('SSS', match3, MILLISECOND);\n\nfunction matchMeridiem(locale) {\n return locale.meridiemParse || /[ap]\\.?m?\\.?/i;\n}\n\nfunction defaultIsPM(input) {\n return \"\".concat(input).toLowerCase().charAt(0) === 'p';\n}\n\naddParseFlag(['A', 'a'], matchMeridiem, function (input, locale) {\n var isPM = typeof locale.isPM === 'function' ? locale.isPM(input) : defaultIsPM(input);\n return {\n isPM: isPM\n };\n});\n\nfunction offsetFromString(str) {\n var _ref8 = str.match(/([+-]|\\d\\d)/g) || ['-', '0', '0'],\n _ref9 = _slicedToArray(_ref8, 3),\n symbol = _ref9[0],\n hour = _ref9[1],\n minute = _ref9[2];\n\n var minutes = parseInt(hour, 10) * 60 + parseInt(minute, 10);\n\n if (minutes === 0) {\n return 0;\n }\n\n return symbol === '+' ? -minutes : +minutes;\n}\n\naddParseFlag(['Z', 'ZZ'], matchShortOffset, function (input) {\n return {\n offset: offsetFromString(input)\n };\n});\naddParseFlag('x', matchSigned, function (input) {\n return {\n date: new Date(parseInt(input, 10))\n };\n});\naddParseFlag('X', matchTimestamp, function (input) {\n return {\n date: new Date(parseFloat(input) * 1000)\n };\n});\naddParseFlag('d', match1, 'weekday');\naddParseFlag('dd', matchWordRegExp('weekdaysMin'), matchWordCallback('weekdaysMin', 'weekday'));\naddParseFlag('ddd', matchWordRegExp('weekdaysShort'), matchWordCallback('weekdaysShort', 'weekday'));\naddParseFlag('dddd', matchWordRegExp('weekdays'), matchWordCallback('weekdays', 'weekday'));\naddParseFlag('w', match1to2, 'week');\naddParseFlag('ww', match2, 'week');\n\nfunction to24hour(hour, isPM) {\n if (hour !== undefined && isPM !== undefined) {\n if (isPM) {\n if (hour < 12) {\n return hour + 12;\n }\n } else if (hour === 12) {\n return 0;\n }\n }\n\n return hour;\n}\n\nfunction getFullInputArray(input) {\n var backupDate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date();\n var result = [0, 0, 1, 0, 0, 0, 0];\n var backupArr = [backupDate.getFullYear(), backupDate.getMonth(), backupDate.getDate(), backupDate.getHours(), backupDate.getMinutes(), backupDate.getSeconds(), backupDate.getMilliseconds()];\n var useBackup = true;\n\n for (var i = 0; i < 7; i++) {\n if (input[i] === undefined) {\n result[i] = useBackup ? backupArr[i] : result[i];\n } else {\n result[i] = input[i];\n useBackup = false;\n }\n }\n\n return result;\n}\n\nfunction createDate(y, m, d, h, M, s, ms) {\n var date;\n\n if (y < 100 && y >= 0) {\n date = new Date(y + 400, m, d, h, M, s, ms);\n\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n}\n\nfunction createUTCDate() {\n var date;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var y = args[0];\n\n if (y < 100 && y >= 0) {\n args[0] += 400;\n date = new Date(Date.UTC.apply(Date, args)); // eslint-disable-next-line no-restricted-globals\n\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(Date, args));\n }\n\n return date;\n}\n\nfunction makeParser(dateString, format, locale) {\n var tokens = format.match(formattingTokens);\n\n if (!tokens) {\n throw new Error();\n }\n\n var length = tokens.length;\n var mark = {};\n\n for (var i = 0; i < length; i += 1) {\n var token = tokens[i];\n var parseTo = parseFlags[token];\n\n if (!parseTo) {\n var word = token.replace(/^\\[|\\]$/g, '');\n\n if (dateString.indexOf(word) === 0) {\n dateString = dateString.substr(word.length);\n } else {\n throw new Error('not match');\n }\n } else {\n var regex = typeof parseTo[0] === 'function' ? parseTo[0](locale) : parseTo[0];\n var parser = parseTo[1];\n var value = (regex.exec(dateString) || [])[0];\n var obj = parser(value, locale);\n mark = _objectSpread({}, mark, {}, obj);\n dateString = dateString.replace(value, '');\n }\n }\n\n return mark;\n}\n\nexport function parse(str, format) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n try {\n var _options$locale = options.locale,\n _locale = _options$locale === void 0 ? defaultLocale : _options$locale,\n _options$backupDate = options.backupDate,\n backupDate = _options$backupDate === void 0 ? new Date() : _options$backupDate;\n\n var parseResult = makeParser(str, format, _locale);\n var year = parseResult.year,\n month = parseResult.month,\n day = parseResult.day,\n hour = parseResult.hour,\n minute = parseResult.minute,\n second = parseResult.second,\n millisecond = parseResult.millisecond,\n isPM = parseResult.isPM,\n date = parseResult.date,\n offset = parseResult.offset,\n weekday = parseResult.weekday,\n week = parseResult.week;\n\n if (date) {\n return date;\n }\n\n var inputArray = [year, month, day, hour, minute, second, millisecond];\n inputArray[3] = to24hour(inputArray[3], isPM); // check week\n\n if (week !== undefined && month === undefined && day === undefined) {\n // new Date(year, 3) make sure in current year\n var firstDate = startOfWeekYear(year === undefined ? backupDate : new Date(year, 3), {\n firstDayOfWeek: _locale.firstDayOfWeek,\n firstWeekContainsDate: _locale.firstWeekContainsDate\n });\n return new Date(firstDate.getTime() + (week - 1) * 7 * 24 * 3600 * 1000);\n }\n\n var parsedDate;\n var result = getFullInputArray(inputArray, backupDate);\n\n if (offset !== undefined) {\n result[6] += offset * 60 * 1000;\n parsedDate = createUTCDate.apply(void 0, _toConsumableArray(result));\n } else {\n parsedDate = createDate.apply(void 0, _toConsumableArray(result));\n } // check weekday\n\n\n if (weekday !== undefined && parsedDate.getDay() !== weekday) {\n return new Date(NaN);\n }\n\n return parsedDate;\n } catch (e) {\n return new Date(NaN);\n }\n}","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nimport { inject, shallowRef, computed, provide, ref, watchEffect, createVNode, Teleport, Transition, openBlock, createElementBlock, createElementVNode, toRef, defineComponent, onMounted, onUnmounted, isVNode, watch, h } from \"vue\";\nimport { getWeek, format, parse } from \"date-format-parse\";\nimport en from \"date-format-parse/es/locale/en\";\nconst lang = {\n formatLocale: en,\n yearFormat: \"YYYY\",\n monthFormat: \"MMM\",\n monthBeforeYear: true\n};\nlet defaultLocale = \"en\";\nconst locales = {};\nlocales[defaultLocale] = lang;\nfunction locale(name, object, isLocal = false) {\n if (typeof name !== \"string\")\n return locales[defaultLocale];\n let l = defaultLocale;\n if (locales[name]) {\n l = name;\n }\n if (object) {\n locales[name] = object;\n l = name;\n }\n if (!isLocal) {\n defaultLocale = l;\n }\n return locales[name] || locales[defaultLocale];\n}\nfunction getLocale(name) {\n return locale(name, void 0, true);\n}\nfunction chunk(arr, size) {\n if (!Array.isArray(arr)) {\n return [];\n }\n const result = [];\n const len = arr.length;\n let i = 0;\n size = size || len;\n while (i < len) {\n result.push(arr.slice(i, i += size));\n }\n return result;\n}\nfunction last(array) {\n return Array.isArray(array) ? array[array.length - 1] : void 0;\n}\nfunction isPlainObject(obj) {\n return Object.prototype.toString.call(obj) === \"[object Object]\";\n}\nfunction pick(obj, props) {\n const res = {};\n if (!isPlainObject(obj))\n return res;\n if (!Array.isArray(props)) {\n props = [props];\n }\n props.forEach((prop) => {\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n res[prop] = obj[prop];\n }\n });\n return res;\n}\nfunction mergeDeep(target, source) {\n if (!isPlainObject(target)) {\n return {};\n }\n let result = target;\n if (isPlainObject(source)) {\n Object.keys(source).forEach((key) => {\n let value = source[key];\n const targetValue = target[key];\n if (isPlainObject(value) && isPlainObject(targetValue)) {\n value = mergeDeep(targetValue, value);\n }\n result = __spreadProps(__spreadValues({}, result), { [key]: value });\n });\n }\n return result;\n}\nfunction padNumber(value) {\n const num = parseInt(String(value), 10);\n return num < 10 ? `0${num}` : `${num}`;\n}\nfunction camelcase(str) {\n const camelizeRE = /-(\\w)/g;\n return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n}\nconst localeContextKey = \"datepicker_locale\";\nconst prefixClassKey = \"datepicker_prefixClass\";\nconst getWeekKey = \"datepicker_getWeek\";\nfunction useLocale() {\n return inject(localeContextKey, shallowRef(getLocale()));\n}\nfunction provideLocale(lang2) {\n const locale2 = computed(() => {\n if (isPlainObject(lang2.value)) {\n return mergeDeep(getLocale(), lang2.value);\n }\n return getLocale(lang2.value);\n });\n provide(localeContextKey, locale2);\n return locale2;\n}\nfunction providePrefixClass(value) {\n provide(prefixClassKey, value);\n}\nfunction usePrefixClass() {\n return inject(prefixClassKey, \"mx\");\n}\nfunction provideGetWeek(value) {\n provide(getWeekKey, value);\n}\nfunction useGetWeek() {\n return inject(getWeekKey, getWeek);\n}\nfunction getPopupElementSize(element) {\n const originalDisplay = element.style.display;\n const originalVisibility = element.style.visibility;\n element.style.display = \"block\";\n element.style.visibility = \"hidden\";\n const styles = window.getComputedStyle(element);\n const width = element.offsetWidth + parseInt(styles.marginLeft, 10) + parseInt(styles.marginRight, 10);\n const height = element.offsetHeight + parseInt(styles.marginTop, 10) + parseInt(styles.marginBottom, 10);\n element.style.display = originalDisplay;\n element.style.visibility = originalVisibility;\n return { width, height };\n}\nfunction getRelativePosition(el, targetWidth, targetHeight, fixed) {\n let left = 0;\n let top = 0;\n let offsetX = 0;\n let offsetY = 0;\n const relativeRect = el.getBoundingClientRect();\n const dw = document.documentElement.clientWidth;\n const dh = document.documentElement.clientHeight;\n if (fixed) {\n offsetX = window.pageXOffset + relativeRect.left;\n offsetY = window.pageYOffset + relativeRect.top;\n }\n if (dw - relativeRect.left < targetWidth && relativeRect.right < targetWidth) {\n left = offsetX - relativeRect.left + 1;\n } else if (relativeRect.left + relativeRect.width / 2 <= dw / 2) {\n left = offsetX;\n } else {\n left = offsetX + relativeRect.width - targetWidth;\n }\n if (relativeRect.top <= targetHeight && dh - relativeRect.bottom <= targetHeight) {\n top = offsetY + dh - relativeRect.top - targetHeight;\n } else if (relativeRect.top + relativeRect.height / 2 <= dh / 2) {\n top = offsetY + relativeRect.height;\n } else {\n top = offsetY - targetHeight;\n }\n return { left: `${left}px`, top: `${top}px` };\n}\nfunction getScrollParent(node, until = document.body) {\n if (!node || node === until) {\n return null;\n }\n const style = (value, prop) => getComputedStyle(value, null).getPropertyValue(prop);\n const regex = /(auto|scroll)/;\n const scroll = regex.test(style(node, \"overflow\") + style(node, \"overflow-y\") + style(node, \"overflow-x\"));\n return scroll ? node : getScrollParent(node.parentElement, until);\n}\nlet scrollBarWidth;\nfunction getScrollbarWidth() {\n if (typeof window === \"undefined\")\n return 0;\n if (scrollBarWidth !== void 0)\n return scrollBarWidth;\n const outer = document.createElement(\"div\");\n outer.style.visibility = \"hidden\";\n outer.style.overflow = \"scroll\";\n outer.style.width = \"100px\";\n outer.style.position = \"absolute\";\n outer.style.top = \"-9999px\";\n document.body.appendChild(outer);\n const inner = document.createElement(\"div\");\n inner.style.width = \"100%\";\n outer.appendChild(inner);\n scrollBarWidth = outer.offsetWidth - inner.offsetWidth;\n outer.parentNode.removeChild(outer);\n return scrollBarWidth;\n}\nconst mousedownEvent = \"ontouchend\" in document ? \"touchstart\" : \"mousedown\";\nfunction rafThrottle(fn) {\n let isRunning = false;\n return function fnBinfRaf(...args) {\n if (isRunning)\n return;\n isRunning = true;\n requestAnimationFrame(() => {\n isRunning = false;\n fn.apply(this, args);\n });\n };\n}\nfunction defineVueComponent(setup, props) {\n return { setup, name: setup.name, props };\n}\nfunction withDefault(props, defaultProps) {\n const result = new Proxy(props, {\n get(target, key) {\n const value = target[key];\n if (value !== void 0) {\n return value;\n }\n return defaultProps[key];\n }\n });\n return result;\n}\nconst keys = () => (props) => props;\nconst resolveProps = (obj, booleanKeys2) => {\n const props = {};\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n const camelizeKey = camelcase(key);\n let value = obj[key];\n if (booleanKeys2.indexOf(camelizeKey) !== -1 && value === \"\") {\n value = true;\n }\n props[camelizeKey] = value;\n }\n }\n return props;\n};\nfunction Popup(originalProps, {\n slots\n}) {\n const props = withDefault(originalProps, {\n appendToBody: true\n });\n const prefixClass = usePrefixClass();\n const popup = ref(null);\n const position = ref({\n left: \"\",\n top: \"\"\n });\n const displayPopup = () => {\n if (!props.visible || !popup.value)\n return;\n const relativeElement = props.getRelativeElement();\n if (!relativeElement)\n return;\n const {\n width,\n height\n } = getPopupElementSize(popup.value);\n position.value = getRelativePosition(relativeElement, width, height, props.appendToBody);\n };\n watchEffect(displayPopup, {\n flush: \"post\"\n });\n watchEffect((onInvalidate) => {\n const relativeElement = props.getRelativeElement();\n if (!relativeElement)\n return;\n const scrollElement = getScrollParent(relativeElement) || window;\n const handleMove = rafThrottle(displayPopup);\n scrollElement.addEventListener(\"scroll\", handleMove);\n window.addEventListener(\"resize\", handleMove);\n onInvalidate(() => {\n scrollElement.removeEventListener(\"scroll\", handleMove);\n window.removeEventListener(\"resize\", handleMove);\n });\n }, {\n flush: \"post\"\n });\n const handleClickOutside = (evt) => {\n if (!props.visible)\n return;\n const target = evt.target;\n const el = popup.value;\n const relativeElement = props.getRelativeElement();\n if (el && !el.contains(target) && relativeElement && !relativeElement.contains(target)) {\n props.onClickOutside(evt);\n }\n };\n watchEffect((onInvalidate) => {\n document.addEventListener(mousedownEvent, handleClickOutside);\n onInvalidate(() => {\n document.removeEventListener(mousedownEvent, handleClickOutside);\n });\n });\n return () => {\n return createVNode(Teleport, {\n \"to\": \"body\",\n \"disabled\": !props.appendToBody\n }, {\n default: () => [createVNode(Transition, {\n \"name\": `${prefixClass}-zoom-in-down`\n }, {\n default: () => {\n var _a;\n return [props.visible && createVNode(\"div\", {\n \"ref\": popup,\n \"class\": `${prefixClass}-datepicker-main ${prefixClass}-datepicker-popup ${props.className}`,\n \"style\": [__spreadValues({\n position: \"absolute\"\n }, position.value), props.style || {}]\n }, [(_a = slots.default) == null ? void 0 : _a.call(slots)])];\n }\n })]\n });\n };\n}\nconst popupProps = keys()([\"style\", \"className\", \"visible\", \"appendToBody\", \"onClickOutside\", \"getRelativeElement\"]);\nvar Popup$1 = defineVueComponent(Popup, popupProps);\nconst _hoisted_1$2 = {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 1024 1024\",\n width: \"1em\",\n height: \"1em\"\n};\nconst _hoisted_2$2 = /* @__PURE__ */ createElementVNode(\"path\", { d: \"M940.218 107.055H730.764v-60.51H665.6v60.51H363.055v-60.51H297.89v60.51H83.78c-18.617 0-32.581 13.963-32.581 32.581v805.237c0 18.618 13.964 32.582 32.582 32.582h861.09c18.619 0 32.583-13.964 32.583-32.582V139.636c-4.655-18.618-18.619-32.581-37.237-32.581zm-642.327 65.163v60.51h65.164v-60.51h307.2v60.51h65.163v-60.51h176.873v204.8H116.364v-204.8H297.89zM116.364 912.291V442.18H912.29v470.11H116.364z\" }, null, -1);\nconst _hoisted_3$2 = [\n _hoisted_2$2\n];\nfunction render$2(_ctx, _cache) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1$2, _hoisted_3$2);\n}\nconst _hoisted_1$1 = {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 1024 1024\",\n width: \"1em\",\n height: \"1em\"\n};\nconst _hoisted_2$1 = /* @__PURE__ */ createElementVNode(\"path\", { d: \"M810.005 274.005 572.011 512l237.994 237.995-60.01 60.01L512 572.011 274.005 810.005l-60.01-60.01L451.989 512 213.995 274.005l60.01-60.01L512 451.989l237.995-237.994z\" }, null, -1);\nconst _hoisted_3$1 = [\n _hoisted_2$1\n];\nfunction render$1(_ctx, _cache) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1$1, _hoisted_3$1);\n}\nconst _hoisted_1 = {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n width: \"1em\",\n height: \"1em\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n}, null, -1);\nconst _hoisted_3 = /* @__PURE__ */ createElementVNode(\"path\", { d: \"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\" }, null, -1);\nconst _hoisted_4 = /* @__PURE__ */ createElementVNode(\"path\", { d: \"M12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z\" }, null, -1);\nconst _hoisted_5 = [\n _hoisted_2,\n _hoisted_3,\n _hoisted_4\n];\nfunction render(_ctx, _cache) {\n return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_5);\n}\nfunction createDate(y, M = 0, d = 1, h2 = 0, m = 0, s = 0, ms = 0) {\n const date = new Date(y, M, d, h2, m, s, ms);\n if (y < 100 && y >= 0) {\n date.setFullYear(y);\n }\n return date;\n}\nfunction isValidDate(date) {\n return date instanceof Date && !isNaN(date.getTime());\n}\nfunction isValidRangeDate(dates) {\n return Array.isArray(dates) && dates.length === 2 && dates.every(isValidDate) && dates[0] <= dates[1];\n}\nfunction isValidDates(dates) {\n return Array.isArray(dates) && dates.every(isValidDate);\n}\nfunction getValidDate(...values) {\n if (values[0] !== void 0 && values[0] !== null) {\n const date = new Date(values[0]);\n if (isValidDate(date)) {\n return date;\n }\n }\n const rest = values.slice(1);\n if (rest.length) {\n return getValidDate(...rest);\n }\n return new Date();\n}\nfunction startOfYear(value) {\n const date = new Date(value);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n}\nfunction startOfMonth(value) {\n const date = new Date(value);\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n return date;\n}\nfunction startOfDay(value) {\n const date = new Date(value);\n date.setHours(0, 0, 0, 0);\n return date;\n}\nfunction getCalendar({\n firstDayOfWeek,\n year,\n month\n}) {\n const arr = [];\n const calendar = createDate(year, month, 0);\n const lastDayInLastMonth = calendar.getDate();\n const firstDayInLastMonth = lastDayInLastMonth - (calendar.getDay() + 7 - firstDayOfWeek) % 7;\n for (let i = firstDayInLastMonth; i <= lastDayInLastMonth; i++) {\n arr.push(createDate(year, month, i - lastDayInLastMonth));\n }\n calendar.setMonth(month + 1, 0);\n const lastDayInCurrentMonth = calendar.getDate();\n for (let i = 1; i <= lastDayInCurrentMonth; i++) {\n arr.push(createDate(year, month, i));\n }\n const lastMonthLength = lastDayInLastMonth - firstDayInLastMonth + 1;\n const nextMonthLength = 6 * 7 - lastMonthLength - lastDayInCurrentMonth;\n for (let i = 1; i <= nextMonthLength; i++) {\n arr.push(createDate(year, month, lastDayInCurrentMonth + i));\n }\n return arr;\n}\nfunction setMonth(dirtyDate, dirtyMonth) {\n const date = new Date(dirtyDate);\n const month = typeof dirtyMonth === \"function\" ? dirtyMonth(date.getMonth()) : Number(dirtyMonth);\n const year = date.getFullYear();\n const daysInMonth = createDate(year, month + 1, 0).getDate();\n const day = date.getDate();\n date.setMonth(month, Math.min(day, daysInMonth));\n return date;\n}\nfunction setYear(dirtyDate, dirtyYear) {\n const date = new Date(dirtyDate);\n const year = typeof dirtyYear === \"function\" ? dirtyYear(date.getFullYear()) : dirtyYear;\n date.setFullYear(year);\n return date;\n}\nfunction diffCalendarMonths(dirtyDateLeft, dirtyDateRight) {\n const dateRight = new Date(dirtyDateRight);\n const dateLeft = new Date(dirtyDateLeft);\n const yearDiff = dateRight.getFullYear() - dateLeft.getFullYear();\n const monthDiff = dateRight.getMonth() - dateLeft.getMonth();\n return yearDiff * 12 + monthDiff;\n}\nfunction assignTime(target, source) {\n const date = new Date(target);\n const time = new Date(source);\n date.setHours(time.getHours(), time.getMinutes(), time.getSeconds());\n return date;\n}\nfunction PickerInput(originalProps, {\n slots\n}) {\n const props = withDefault(originalProps, {\n editable: true,\n disabled: false,\n clearable: true,\n range: false,\n multiple: false\n });\n const prefixClass = usePrefixClass();\n const userInput = ref(null);\n const innerSeparator = computed(() => {\n return props.separator || (props.range ? \" ~ \" : \",\");\n });\n const isValidValue = (value) => {\n if (props.range) {\n return isValidRangeDate(value);\n }\n if (props.multiple) {\n return isValidDates(value);\n }\n return isValidDate(value);\n };\n const isDisabledValue = (value) => {\n if (Array.isArray(value)) {\n return value.some((v) => props.disabledDate(v));\n }\n return props.disabledDate(value);\n };\n const text = computed(() => {\n if (userInput.value !== null) {\n return userInput.value;\n }\n if (typeof props.renderInputText === \"function\") {\n return props.renderInputText(props.value);\n }\n if (!isValidValue(props.value)) {\n return \"\";\n }\n if (Array.isArray(props.value)) {\n return props.value.map((v) => props.formatDate(v)).join(innerSeparator.value);\n }\n return props.formatDate(props.value);\n });\n const handleClear = (evt) => {\n var _a;\n if (evt) {\n evt.stopPropagation();\n }\n props.onChange(props.range ? [null, null] : null);\n (_a = props.onClear) == null ? void 0 : _a.call(props);\n };\n const handleChange = () => {\n var _a;\n if (!props.editable || userInput.value === null)\n return;\n const text2 = userInput.value.trim();\n userInput.value = null;\n if (text2 === \"\") {\n handleClear();\n return;\n }\n let date;\n if (props.range) {\n let arr = text2.split(innerSeparator.value);\n if (arr.length !== 2) {\n arr = text2.split(innerSeparator.value.trim());\n }\n date = arr.map((v) => props.parseDate(v.trim()));\n } else if (props.multiple) {\n date = text2.split(innerSeparator.value).map((v) => props.parseDate(v.trim()));\n } else {\n date = props.parseDate(text2);\n }\n if (isValidValue(date) && !isDisabledValue(date)) {\n props.onChange(date);\n } else {\n (_a = props.onInputError) == null ? void 0 : _a.call(props, text2);\n }\n };\n const handleInput = (evt) => {\n userInput.value = typeof evt === \"string\" ? evt : evt.target.value;\n };\n const handleKeydown = (evt) => {\n const {\n keyCode\n } = evt;\n if (keyCode === 9) {\n props.onBlur();\n } else if (keyCode === 13) {\n handleChange();\n }\n };\n return () => {\n var _a, _b, _c;\n const showClearIcon = !props.disabled && props.clearable && text.value;\n const inputProps = __spreadProps(__spreadValues({\n name: \"date\",\n type: \"text\",\n autocomplete: \"off\",\n value: text.value,\n class: props.inputClass || `${prefixClass}-input`,\n readonly: !props.editable,\n disabled: props.disabled,\n placeholder: props.placeholder\n }, props.inputAttr), {\n onFocus: props.onFocus,\n onKeydown: handleKeydown,\n onInput: handleInput,\n onChange: handleChange\n });\n return createVNode(\"div\", {\n \"class\": `${prefixClass}-input-wrapper`,\n \"onClick\": props.onClick\n }, [((_a = slots.input) == null ? void 0 : _a.call(slots, inputProps)) || createVNode(\"input\", inputProps, null), showClearIcon ? createVNode(\"i\", {\n \"class\": `${prefixClass}-icon-clear`,\n \"onClick\": handleClear\n }, [((_b = slots[\"icon-clear\"]) == null ? void 0 : _b.call(slots)) || createVNode(render$1, null, null)]) : null, createVNode(\"i\", {\n \"class\": `${prefixClass}-icon-calendar`\n }, [((_c = slots[\"icon-calendar\"]) == null ? void 0 : _c.call(slots)) || createVNode(render$2, null, null)])]);\n };\n}\nconst pickerInputBaseProps = keys()([\"placeholder\", \"editable\", \"disabled\", \"clearable\", \"inputClass\", \"inputAttr\", \"range\", \"multiple\", \"separator\", \"renderInputText\", \"onInputError\", \"onClear\"]);\nconst pickerInputProps = keys()([\"value\", \"formatDate\", \"parseDate\", \"disabledDate\", \"onChange\", \"onFocus\", \"onBlur\", \"onClick\", ...pickerInputBaseProps]);\nvar PickerInput$1 = defineVueComponent(PickerInput, pickerInputProps);\nfunction Picker(originalProps, {\n slots\n}) {\n var _a;\n const props = withDefault(originalProps, {\n prefixClass: \"mx\",\n valueType: \"date\",\n format: \"YYYY-MM-DD\",\n type: \"date\",\n disabledDate: () => false,\n disabledTime: () => false,\n confirmText: \"OK\"\n });\n providePrefixClass(props.prefixClass);\n provideGetWeek(((_a = props.formatter) == null ? void 0 : _a.getWeek) || getWeek);\n const locale2 = provideLocale(toRef(originalProps, \"lang\"));\n const container = ref();\n const getContainer = () => container.value;\n const defaultOpen = ref(false);\n const popupVisible = computed(() => {\n return !props.disabled && (typeof props.open === \"boolean\" ? props.open : defaultOpen.value);\n });\n const openPopup = () => {\n var _a2, _b;\n if (props.disabled || popupVisible.value)\n return;\n defaultOpen.value = true;\n (_a2 = props[\"onUpdate:open\"]) == null ? void 0 : _a2.call(props, true);\n (_b = props.onOpen) == null ? void 0 : _b.call(props);\n };\n const closePopup = () => {\n var _a2, _b;\n if (!popupVisible.value)\n return;\n defaultOpen.value = false;\n (_a2 = props[\"onUpdate:open\"]) == null ? void 0 : _a2.call(props, false);\n (_b = props.onClose) == null ? void 0 : _b.call(props);\n };\n const formatDate = (date, fmt) => {\n fmt = fmt || props.format;\n if (isPlainObject(props.formatter) && typeof props.formatter.stringify === \"function\") {\n return props.formatter.stringify(date, fmt);\n }\n return format(date, fmt, {\n locale: locale2.value.formatLocale\n });\n };\n const parseDate = (value, fmt) => {\n fmt = fmt || props.format;\n if (isPlainObject(props.formatter) && typeof props.formatter.parse === \"function\") {\n return props.formatter.parse(value, fmt);\n }\n const backupDate = new Date();\n return parse(value, fmt, {\n locale: locale2.value.formatLocale,\n backupDate\n });\n };\n const value2date = (value) => {\n switch (props.valueType) {\n case \"date\":\n return value instanceof Date ? new Date(value.getTime()) : new Date(NaN);\n case \"timestamp\":\n return typeof value === \"number\" ? new Date(value) : new Date(NaN);\n case \"format\":\n return typeof value === \"string\" ? parseDate(value) : new Date(NaN);\n default:\n return typeof value === \"string\" ? parseDate(value, props.valueType) : new Date(NaN);\n }\n };\n const date2value = (date) => {\n if (!isValidDate(date))\n return null;\n switch (props.valueType) {\n case \"date\":\n return date;\n case \"timestamp\":\n return date.getTime();\n case \"format\":\n return formatDate(date);\n default:\n return formatDate(date, props.valueType);\n }\n };\n const innerValue = computed(() => {\n const value = props.value;\n if (props.range) {\n return (Array.isArray(value) ? value.slice(0, 2) : [null, null]).map(value2date);\n }\n if (props.multiple) {\n return (Array.isArray(value) ? value : []).map(value2date);\n }\n return value2date(value);\n });\n const emitValue = (date, type, close = true) => {\n var _a2, _b;\n const value = Array.isArray(date) ? date.map(date2value) : date2value(date);\n (_a2 = props[\"onUpdate:value\"]) == null ? void 0 : _a2.call(props, value);\n (_b = props.onChange) == null ? void 0 : _b.call(props, value, type);\n if (close) {\n closePopup();\n }\n return value;\n };\n const currentValue = ref(new Date());\n watchEffect(() => {\n if (popupVisible.value) {\n currentValue.value = innerValue.value;\n }\n });\n const handleSelect = (val, type) => {\n if (props.confirm) {\n currentValue.value = val;\n } else {\n emitValue(val, type, !props.multiple && (type === props.type || type === \"time\"));\n }\n };\n const handleConfirm = () => {\n var _a2;\n const value = emitValue(currentValue.value);\n (_a2 = props.onConfirm) == null ? void 0 : _a2.call(props, value);\n };\n const disabledDateTime = (v) => {\n return props.disabledDate(v) || props.disabledTime(v);\n };\n const renderSidebar = (slotProps) => {\n var _a2;\n const {\n prefixClass\n } = props;\n return createVNode(\"div\", {\n \"class\": `${prefixClass}-datepicker-sidebar`\n }, [(_a2 = slots.sidebar) == null ? void 0 : _a2.call(slots, slotProps), (props.shortcuts || []).map((v, i) => createVNode(\"button\", {\n \"key\": i,\n \"data-index\": i,\n \"type\": \"button\",\n \"class\": `${prefixClass}-btn ${prefixClass}-btn-text ${prefixClass}-btn-shortcut`,\n \"onClick\": () => {\n var _a3;\n const date = (_a3 = v.onClick) == null ? void 0 : _a3.call(v);\n if (date) {\n emitValue(date);\n }\n }\n }, [v.text]))]);\n };\n return () => {\n var _a2, _b;\n const {\n prefixClass,\n disabled,\n confirm,\n range,\n popupClass,\n popupStyle,\n appendToBody\n } = props;\n const slotProps = {\n value: currentValue.value,\n [\"onUpdate:value\"]: handleSelect,\n emit: emitValue\n };\n const header = slots.header && createVNode(\"div\", {\n \"class\": `${prefixClass}-datepicker-header`\n }, [slots.header(slotProps)]);\n const footer = (slots.footer || confirm) && createVNode(\"div\", {\n \"class\": `${prefixClass}-datepicker-footer`\n }, [(_a2 = slots.footer) == null ? void 0 : _a2.call(slots, slotProps), confirm && createVNode(\"button\", {\n \"type\": \"button\",\n \"class\": `${prefixClass}-btn ${prefixClass}-datepicker-btn-confirm`,\n \"onClick\": handleConfirm\n }, [props.confirmText])]);\n const content = (_b = slots.content) == null ? void 0 : _b.call(slots, slotProps);\n const sidedar = (slots.sidebar || props.shortcuts) && renderSidebar(slotProps);\n return createVNode(\"div\", {\n \"ref\": container,\n \"class\": {\n [`${prefixClass}-datepicker`]: true,\n [`${prefixClass}-datepicker-range`]: range,\n disabled\n }\n }, [createVNode(PickerInput$1, __spreadProps(__spreadValues({}, pick(props, pickerInputBaseProps)), {\n \"value\": innerValue.value,\n \"formatDate\": formatDate,\n \"parseDate\": parseDate,\n \"disabledDate\": disabledDateTime,\n \"onChange\": emitValue,\n \"onClick\": openPopup,\n \"onFocus\": openPopup,\n \"onBlur\": closePopup\n }), pick(slots, [\"icon-calendar\", \"icon-clear\", \"input\"])), createVNode(Popup$1, {\n \"className\": popupClass,\n \"style\": popupStyle,\n \"visible\": popupVisible.value,\n \"appendToBody\": appendToBody,\n \"getRelativeElement\": getContainer,\n \"onClickOutside\": closePopup\n }, {\n default: () => [sidedar, createVNode(\"div\", {\n \"class\": `${prefixClass}-datepicker-content`\n }, [header, content, footer])]\n })]);\n };\n}\nconst pickerbaseProps = keys()([\"value\", \"valueType\", \"type\", \"format\", \"formatter\", \"lang\", \"prefixClass\", \"appendToBody\", \"open\", \"popupClass\", \"popupStyle\", \"confirm\", \"confirmText\", \"shortcuts\", \"disabledDate\", \"disabledTime\", \"onOpen\", \"onClose\", \"onConfirm\", \"onChange\", \"onUpdate:open\", \"onUpdate:value\"]);\nconst pickerProps = [...pickerbaseProps, ...pickerInputBaseProps];\nvar Picker$1 = defineVueComponent(Picker, pickerProps);\nfunction ButtonIcon(_a) {\n var _b = _a, {\n value\n } = _b, rest = __objRest(_b, [\n \"value\"\n ]);\n const prefixClass = usePrefixClass();\n return createVNode(\"button\", __spreadProps(__spreadValues({}, rest), {\n \"type\": \"button\",\n \"class\": `${prefixClass}-btn ${prefixClass}-btn-text ${prefixClass}-btn-icon-${value}`\n }), [createVNode(\"i\", {\n \"class\": `${prefixClass}-icon-${value}`\n }, null)]);\n}\nfunction TableHeader({\n type,\n calendar,\n onUpdateCalendar\n}, {\n slots\n}) {\n var _a;\n const prefixClass = usePrefixClass();\n const lastMonth = () => {\n onUpdateCalendar(setMonth(calendar, (v) => v - 1));\n };\n const nextMonth = () => {\n onUpdateCalendar(setMonth(calendar, (v) => v + 1));\n };\n const lastYear = () => {\n onUpdateCalendar(setYear(calendar, (v) => v - 1));\n };\n const nextYear = () => {\n onUpdateCalendar(setYear(calendar, (v) => v + 1));\n };\n const lastDecade = () => {\n onUpdateCalendar(setYear(calendar, (v) => v - 10));\n };\n const nextDecade = () => {\n onUpdateCalendar(setYear(calendar, (v) => v + 10));\n };\n return createVNode(\"div\", {\n \"class\": `${prefixClass}-calendar-header`\n }, [createVNode(ButtonIcon, {\n \"value\": \"double-left\",\n \"onClick\": type === \"year\" ? lastDecade : lastYear\n }, null), type === \"date\" && createVNode(ButtonIcon, {\n \"value\": \"left\",\n \"onClick\": lastMonth\n }, null), createVNode(ButtonIcon, {\n \"value\": \"double-right\",\n \"onClick\": type === \"year\" ? nextDecade : nextYear\n }, null), type === \"date\" && createVNode(ButtonIcon, {\n \"value\": \"right\",\n \"onClick\": nextMonth\n }, null), createVNode(\"span\", {\n \"class\": `${prefixClass}-calendar-header-label`\n }, [(_a = slots.default) == null ? void 0 : _a.call(slots)])]);\n}\nfunction TableDate({\n calendar,\n isWeekMode,\n showWeekNumber,\n titleFormat,\n getWeekActive,\n getCellClasses,\n onSelect,\n onUpdatePanel,\n onUpdateCalendar,\n onDateMouseEnter,\n onDateMouseLeave\n}) {\n const prefixClass = usePrefixClass();\n const getWeekNumber = useGetWeek();\n const locale2 = useLocale().value;\n const {\n yearFormat,\n monthBeforeYear,\n monthFormat = \"MMM\",\n formatLocale\n } = locale2;\n const firstDayOfWeek = formatLocale.firstDayOfWeek || 0;\n let days = locale2.days || formatLocale.weekdaysMin;\n days = days.concat(days).slice(firstDayOfWeek, firstDayOfWeek + 7);\n const year = calendar.getFullYear();\n const month = calendar.getMonth();\n const dates = chunk(getCalendar({\n firstDayOfWeek,\n year,\n month\n }), 7);\n const formatDate = (date, fmt) => {\n return format(date, fmt, {\n locale: locale2.formatLocale\n });\n };\n const handlePanelChange = (panel) => {\n onUpdatePanel(panel);\n };\n const getCellDate = (el) => {\n const index2 = el.getAttribute(\"data-index\");\n const [row, col] = index2.split(\",\").map((v) => parseInt(v, 10));\n const value = dates[row][col];\n return new Date(value);\n };\n const handleCellClick = (evt) => {\n onSelect(getCellDate(evt.currentTarget));\n };\n const handleMouseEnter = (evt) => {\n if (onDateMouseEnter) {\n onDateMouseEnter(getCellDate(evt.currentTarget));\n }\n };\n const handleMouseLeave = (evt) => {\n if (onDateMouseLeave) {\n onDateMouseLeave(getCellDate(evt.currentTarget));\n }\n };\n const yearLabel = createVNode(\"button\", {\n \"type\": \"button\",\n \"class\": `${prefixClass}-btn ${prefixClass}-btn-text ${prefixClass}-btn-current-year`,\n \"onClick\": () => handlePanelChange(\"year\")\n }, [formatDate(calendar, yearFormat)]);\n const monthLabel = createVNode(\"button\", {\n \"type\": \"button\",\n \"class\": `${prefixClass}-btn ${prefixClass}-btn-text ${prefixClass}-btn-current-month`,\n \"onClick\": () => handlePanelChange(\"month\")\n }, [formatDate(calendar, monthFormat)]);\n showWeekNumber = typeof showWeekNumber === \"boolean\" ? showWeekNumber : isWeekMode;\n return createVNode(\"div\", {\n \"class\": [`${prefixClass}-calendar ${prefixClass}-calendar-panel-date`, {\n [`${prefixClass}-calendar-week-mode`]: isWeekMode\n }]\n }, [createVNode(TableHeader, {\n \"type\": \"date\",\n \"calendar\": calendar,\n \"onUpdateCalendar\": onUpdateCalendar\n }, {\n default: () => [monthBeforeYear ? [monthLabel, yearLabel] : [yearLabel, monthLabel]]\n }), createVNode(\"div\", {\n \"class\": `${prefixClass}-calendar-content`\n }, [createVNode(\"table\", {\n \"class\": `${prefixClass}-table ${prefixClass}-table-date`\n }, [createVNode(\"thead\", null, [createVNode(\"tr\", null, [showWeekNumber && createVNode(\"th\", {\n \"class\": `${prefixClass}-week-number-header`\n }, null), days.map((day) => createVNode(\"th\", {\n \"key\": day\n }, [day]))])]), createVNode(\"tbody\", null, [dates.map((row, i) => createVNode(\"tr\", {\n \"key\": i,\n \"class\": [`${prefixClass}-date-row`, {\n [`${prefixClass}-active-week`]: getWeekActive(row)\n }]\n }, [showWeekNumber && createVNode(\"td\", {\n \"class\": `${prefixClass}-week-number`,\n \"data-index\": `${i},0`,\n \"onClick\": handleCellClick\n }, [createVNode(\"div\", null, [getWeekNumber(row[0])])]), row.map((cell, j) => createVNode(\"td\", {\n \"key\": j,\n \"class\": [\"cell\", getCellClasses(cell)],\n \"title\": formatDate(cell, titleFormat),\n \"data-index\": `${i},${j}`,\n \"onClick\": handleCellClick,\n \"onMouseenter\": handleMouseEnter,\n \"onMouseleave\": handleMouseLeave\n }, [createVNode(\"div\", null, [cell.getDate()])]))]))])])])]);\n}\nfunction TableMonth({\n calendar,\n getCellClasses,\n onSelect,\n onUpdateCalendar,\n onUpdatePanel\n}) {\n const prefixClass = usePrefixClass();\n const locale2 = useLocale().value;\n const months = locale2.months || locale2.formatLocale.monthsShort;\n const getDate = (month) => {\n return createDate(calendar.getFullYear(), month);\n };\n const handleClick = (evt) => {\n const target = evt.currentTarget;\n const month = target.getAttribute(\"data-month\");\n onSelect(getDate(parseInt(month, 10)));\n };\n return createVNode(\"div\", {\n \"class\": `${prefixClass}-calendar ${prefixClass}-calendar-panel-month`\n }, [createVNode(TableHeader, {\n \"type\": \"month\",\n \"calendar\": calendar,\n \"onUpdateCalendar\": onUpdateCalendar\n }, {\n default: () => [createVNode(\"button\", {\n \"type\": \"button\",\n \"class\": `${prefixClass}-btn ${prefixClass}-btn-text ${prefixClass}-btn-current-year`,\n \"onClick\": () => onUpdatePanel(\"year\")\n }, [calendar.getFullYear()])]\n }), createVNode(\"div\", {\n \"class\": `${prefixClass}-calendar-content`\n }, [createVNode(\"table\", {\n \"class\": `${prefixClass}-table ${prefixClass}-table-month`\n }, [chunk(months, 3).map((row, i) => createVNode(\"tr\", {\n \"key\": i\n }, [row.map((cell, j) => {\n const month = i * 3 + j;\n return createVNode(\"td\", {\n \"key\": j,\n \"class\": [\"cell\", getCellClasses(getDate(month))],\n \"data-month\": month,\n \"onClick\": handleClick\n }, [createVNode(\"div\", null, [cell])]);\n })]))])])]);\n}\nconst getDefaultYears = (calendar) => {\n const firstYear = Math.floor(calendar.getFullYear() / 10) * 10;\n const years = [];\n for (let i = 0; i < 10; i++) {\n years.push(firstYear + i);\n }\n return chunk(years, 2);\n};\nfunction TableYear({\n calendar,\n getCellClasses = () => [],\n getYearPanel = getDefaultYears,\n onSelect,\n onUpdateCalendar\n}) {\n const prefixClass = usePrefixClass();\n const getDate = (year) => {\n return createDate(year, 0);\n };\n const handleClick = (evt) => {\n const target = evt.currentTarget;\n const year = target.getAttribute(\"data-year\");\n onSelect(getDate(parseInt(year, 10)));\n };\n const years = getYearPanel(new Date(calendar));\n const firstYear = years[0][0];\n const lastYear = last(last(years));\n return createVNode(\"div\", {\n \"class\": `${prefixClass}-calendar ${prefixClass}-calendar-panel-year`\n }, [createVNode(TableHeader, {\n \"type\": \"year\",\n \"calendar\": calendar,\n \"onUpdateCalendar\": onUpdateCalendar\n }, {\n default: () => [createVNode(\"span\", null, [firstYear]), createVNode(\"span\", {\n \"class\": `${prefixClass}-calendar-decade-separator`\n }, null), createVNode(\"span\", null, [lastYear])]\n }), createVNode(\"div\", {\n \"class\": `${prefixClass}-calendar-content`\n }, [createVNode(\"table\", {\n \"class\": `${prefixClass}-table ${prefixClass}-table-year`\n }, [years.map((row, i) => createVNode(\"tr\", {\n \"key\": i\n }, [row.map((cell, j) => createVNode(\"td\", {\n \"key\": j,\n \"class\": [\"cell\", getCellClasses(getDate(cell))],\n \"data-year\": cell,\n \"onClick\": handleClick\n }, [createVNode(\"div\", null, [cell])]))]))])])]);\n}\nfunction Calendar(originalProps) {\n const props = withDefault(originalProps, {\n defaultValue: startOfDay(new Date()),\n type: \"date\",\n disabledDate: () => false,\n getClasses: () => [],\n titleFormat: \"YYYY-MM-DD\"\n });\n const innerValue = computed(() => {\n const value = Array.isArray(props.value) ? props.value : [props.value];\n return value.filter(isValidDate).map((v) => {\n if (props.type === \"year\")\n return startOfYear(v);\n if (props.type === \"month\")\n return startOfMonth(v);\n return startOfDay(v);\n });\n });\n const innerCalendar = ref(new Date());\n watchEffect(() => {\n let calendarDate = props.calendar;\n if (!isValidDate(calendarDate)) {\n const {\n length\n } = innerValue.value;\n calendarDate = getValidDate(length > 0 ? innerValue.value[length - 1] : props.defaultValue);\n }\n innerCalendar.value = startOfMonth(calendarDate);\n });\n const handleCalendarChange = (calendar) => {\n var _a;\n innerCalendar.value = calendar;\n (_a = props.onCalendarChange) == null ? void 0 : _a.call(props, calendar);\n };\n const panel = ref(\"date\");\n watchEffect(() => {\n const panels = [\"date\", \"month\", \"year\"];\n const index2 = Math.max(panels.indexOf(props.type), panels.indexOf(props.defaultPanel));\n panel.value = index2 !== -1 ? panels[index2] : \"date\";\n });\n const handelPanelChange = (value) => {\n var _a;\n const oldPanel = panel.value;\n panel.value = value;\n (_a = props.onPanelChange) == null ? void 0 : _a.call(props, value, oldPanel);\n };\n const isDisabled = (date) => {\n return props.disabledDate(new Date(date), innerValue.value);\n };\n const emitDate = (date, type) => {\n var _a, _b, _c;\n if (!isDisabled(date)) {\n (_a = props.onPick) == null ? void 0 : _a.call(props, date);\n if (props.multiple === true) {\n const nextDates = innerValue.value.filter((v) => v.getTime() !== date.getTime());\n if (nextDates.length === innerValue.value.length) {\n nextDates.push(date);\n }\n (_b = props[\"onUpdate:value\"]) == null ? void 0 : _b.call(props, nextDates, type);\n } else {\n (_c = props[\"onUpdate:value\"]) == null ? void 0 : _c.call(props, date, type);\n }\n }\n };\n const handleSelectDate = (date) => {\n emitDate(date, props.type === \"week\" ? \"week\" : \"date\");\n };\n const handleSelectYear = (date) => {\n if (props.type === \"year\") {\n emitDate(date, \"year\");\n } else {\n handleCalendarChange(date);\n handelPanelChange(\"month\");\n if (props.partialUpdate && innerValue.value.length === 1) {\n const value = setYear(innerValue.value[0], date.getFullYear());\n emitDate(value, \"year\");\n }\n }\n };\n const handleSelectMonth = (date) => {\n if (props.type === \"month\") {\n emitDate(date, \"month\");\n } else {\n handleCalendarChange(date);\n handelPanelChange(\"date\");\n if (props.partialUpdate && innerValue.value.length === 1) {\n const value = setMonth(setYear(innerValue.value[0], date.getFullYear()), date.getMonth());\n emitDate(value, \"month\");\n }\n }\n };\n const getCellClasses = (cellDate, classes = []) => {\n if (isDisabled(cellDate)) {\n classes.push(\"disabled\");\n } else if (innerValue.value.some((v) => v.getTime() === cellDate.getTime())) {\n classes.push(\"active\");\n }\n return classes.concat(props.getClasses(cellDate, innerValue.value, classes.join(\" \")));\n };\n const getDateClasses = (cellDate) => {\n const notCurrentMonth = cellDate.getMonth() !== innerCalendar.value.getMonth();\n const classes = [];\n if (cellDate.getTime() === new Date().setHours(0, 0, 0, 0)) {\n classes.push(\"today\");\n }\n if (notCurrentMonth) {\n classes.push(\"not-current-month\");\n }\n return getCellClasses(cellDate, classes);\n };\n const getMonthClasses = (cellDate) => {\n if (props.type !== \"month\") {\n return innerCalendar.value.getMonth() === cellDate.getMonth() ? \"active\" : \"\";\n }\n return getCellClasses(cellDate);\n };\n const getYearClasses = (cellDate) => {\n if (props.type !== \"year\") {\n return innerCalendar.value.getFullYear() === cellDate.getFullYear() ? \"active\" : \"\";\n }\n return getCellClasses(cellDate);\n };\n const getWeekActive = (row) => {\n if (props.type !== \"week\")\n return false;\n const start = row[0].getTime();\n const end = row[6].getTime();\n return innerValue.value.some((v) => {\n const time = v.getTime();\n return time >= start && time <= end;\n });\n };\n return () => {\n if (panel.value === \"year\") {\n return createVNode(TableYear, {\n \"calendar\": innerCalendar.value,\n \"getCellClasses\": getYearClasses,\n \"getYearPanel\": props.getYearPanel,\n \"onSelect\": handleSelectYear,\n \"onUpdateCalendar\": handleCalendarChange\n }, null);\n }\n if (panel.value === \"month\") {\n return createVNode(TableMonth, {\n \"calendar\": innerCalendar.value,\n \"getCellClasses\": getMonthClasses,\n \"onSelect\": handleSelectMonth,\n \"onUpdatePanel\": handelPanelChange,\n \"onUpdateCalendar\": handleCalendarChange\n }, null);\n }\n return createVNode(TableDate, {\n \"isWeekMode\": props.type === \"week\",\n \"showWeekNumber\": props.showWeekNumber,\n \"titleFormat\": props.titleFormat,\n \"calendar\": innerCalendar.value,\n \"getCellClasses\": getDateClasses,\n \"getWeekActive\": getWeekActive,\n \"onSelect\": handleSelectDate,\n \"onUpdatePanel\": handelPanelChange,\n \"onUpdateCalendar\": handleCalendarChange,\n \"onDateMouseEnter\": props.onDateMouseEnter,\n \"onDateMouseLeave\": props.onDateMouseLeave\n }, null);\n };\n}\nconst calendarProps = keys()([\"type\", \"value\", \"defaultValue\", \"defaultPanel\", \"disabledDate\", \"getClasses\", \"calendar\", \"multiple\", \"partialUpdate\", \"showWeekNumber\", \"titleFormat\", \"getYearPanel\", \"onDateMouseEnter\", \"onDateMouseLeave\", \"onCalendarChange\", \"onPanelChange\", \"onUpdate:value\", \"onPick\"]);\nvar Calendar$1 = defineVueComponent(Calendar, calendarProps);\nconst inRange = (date, range) => {\n const value = date.getTime();\n let [min, max] = range.map((v) => v.getTime());\n if (min > max) {\n [min, max] = [max, min];\n }\n return value > min && value < max;\n};\nfunction CalendarRange(originalProps) {\n const props = withDefault(originalProps, {\n defaultValue: new Date(),\n type: \"date\"\n });\n const prefixClass = usePrefixClass();\n const defaultValues = computed(() => {\n let values = Array.isArray(props.defaultValue) ? props.defaultValue : [props.defaultValue, props.defaultValue];\n values = values.map((v) => startOfDay(v));\n if (isValidRangeDate(values)) {\n return values;\n }\n return [new Date(), new Date()].map((v) => startOfDay(v));\n });\n const innerValue = ref([new Date(NaN), new Date(NaN)]);\n watchEffect(() => {\n if (isValidRangeDate(props.value)) {\n innerValue.value = props.value;\n }\n });\n const handlePick = (date, type) => {\n var _a;\n const [startValue, endValue] = innerValue.value;\n if (isValidDate(startValue) && !isValidDate(endValue)) {\n if (startValue.getTime() > date.getTime()) {\n innerValue.value = [date, startValue];\n } else {\n innerValue.value = [startValue, date];\n }\n (_a = props[\"onUpdate:value\"]) == null ? void 0 : _a.call(props, innerValue.value, type);\n } else {\n innerValue.value = [date, new Date(NaN)];\n }\n };\n const defaultCalendars = ref([new Date(), new Date()]);\n const calendars = computed(() => {\n return isValidRangeDate(props.calendar) ? props.calendar : defaultCalendars.value;\n });\n const calendarMinDiff = computed(() => {\n if (props.type === \"year\")\n return 10 * 12;\n if (props.type === \"month\")\n return 1 * 12;\n return 1;\n });\n const updateCalendars = (dates, index2) => {\n var _a;\n const diff = diffCalendarMonths(dates[0], dates[1]);\n const gap = calendarMinDiff.value - diff;\n if (gap > 0) {\n const anotherIndex = index2 === 1 ? 0 : 1;\n dates[anotherIndex] = setMonth(dates[anotherIndex], (v) => v + (anotherIndex === 0 ? -gap : gap));\n }\n defaultCalendars.value = dates;\n (_a = props.onCalendarChange) == null ? void 0 : _a.call(props, dates, index2);\n };\n const updateCalendarStart = (date) => {\n updateCalendars([date, calendars.value[1]], 0);\n };\n const updateCalendarEnd = (date) => {\n updateCalendars([calendars.value[0], date], 1);\n };\n watchEffect(() => {\n const dates = isValidRangeDate(props.value) ? props.value : defaultValues.value;\n updateCalendars(dates.slice(0, 2));\n });\n const hoveredValue = ref(null);\n const handleMouseEnter = (v) => hoveredValue.value = v;\n const handleMouseLeave = () => hoveredValue.value = null;\n const getRangeClasses = (cellDate, currentDates, classnames) => {\n const outerClasses = props.getClasses ? props.getClasses(cellDate, currentDates, classnames) : [];\n const classes = Array.isArray(outerClasses) ? outerClasses : [outerClasses];\n if (/disabled|active/.test(classnames))\n return classes;\n if (currentDates.length === 2 && inRange(cellDate, currentDates)) {\n classes.push(\"in-range\");\n }\n if (currentDates.length === 1 && hoveredValue.value && inRange(cellDate, [currentDates[0], hoveredValue.value])) {\n return classes.concat(\"hover-in-range\");\n }\n return classes;\n };\n return () => {\n const calendarRange = calendars.value.map((calendar, index2) => {\n const calendarProps2 = __spreadProps(__spreadValues({}, props), {\n calendar,\n value: innerValue.value,\n defaultValue: defaultValues.value[index2],\n getClasses: getRangeClasses,\n partialUpdate: false,\n multiple: false,\n [\"onUpdate:value\"]: handlePick,\n onCalendarChange: index2 === 0 ? updateCalendarStart : updateCalendarEnd,\n onDateMouseLeave: handleMouseLeave,\n onDateMouseEnter: handleMouseEnter\n });\n return createVNode(Calendar$1, calendarProps2, null);\n });\n return createVNode(\"div\", {\n \"class\": `${prefixClass}-calendar-range`\n }, [calendarRange]);\n };\n}\nconst calendarRangeProps = calendarProps;\nvar CalendarRange$1 = defineVueComponent(CalendarRange, calendarRangeProps);\nconst ScrollbarVertical = defineComponent({\n setup(props, {\n slots\n }) {\n const prefixClass = usePrefixClass();\n const wrapper = ref();\n const thumbHeight = ref(\"\");\n const thumbTop = ref(\"\");\n const getThumbHeight = () => {\n if (!wrapper.value)\n return;\n const el = wrapper.value;\n const heightPercentage = el.clientHeight * 100 / el.scrollHeight;\n thumbHeight.value = heightPercentage < 100 ? `${heightPercentage}%` : \"\";\n };\n onMounted(getThumbHeight);\n const scrollbarWidth = getScrollbarWidth();\n const handleScroll = (evt) => {\n const el = evt.currentTarget;\n const {\n scrollHeight,\n scrollTop\n } = el;\n thumbTop.value = `${scrollTop * 100 / scrollHeight}%`;\n };\n let draggable = false;\n let prevY = 0;\n const handleDragstart = (evt) => {\n evt.stopImmediatePropagation();\n const el = evt.currentTarget;\n const {\n offsetTop\n } = el;\n draggable = true;\n prevY = evt.clientY - offsetTop;\n };\n const handleDraging = (evt) => {\n if (!draggable || !wrapper.value)\n return;\n const {\n clientY\n } = evt;\n const {\n scrollHeight,\n clientHeight\n } = wrapper.value;\n const offsetY = clientY - prevY;\n const top = offsetY * scrollHeight / clientHeight;\n wrapper.value.scrollTop = top;\n };\n const handleDragend = () => {\n draggable = false;\n };\n onMounted(() => {\n document.addEventListener(\"mousemove\", handleDraging);\n document.addEventListener(\"mouseup\", handleDragend);\n });\n onUnmounted(() => {\n document.addEventListener(\"mousemove\", handleDraging);\n document.addEventListener(\"mouseup\", handleDragend);\n });\n return () => {\n var _a;\n return createVNode(\"div\", {\n \"class\": `${prefixClass}-scrollbar`,\n \"style\": {\n position: \"relative\",\n overflow: \"hidden\"\n }\n }, [createVNode(\"div\", {\n \"ref\": wrapper,\n \"class\": `${prefixClass}-scrollbar-wrap`,\n \"style\": {\n marginRight: `-${scrollbarWidth}px`\n },\n \"onScroll\": handleScroll\n }, [(_a = slots.default) == null ? void 0 : _a.call(slots)]), createVNode(\"div\", {\n \"class\": `${prefixClass}-scrollbar-track`\n }, [createVNode(\"div\", {\n \"class\": `${prefixClass}-scrollbar-thumb`,\n \"style\": {\n height: thumbHeight.value,\n top: thumbTop.value\n },\n \"onMousedown\": handleDragstart\n }, null)])]);\n };\n }\n});\nfunction Columns({\n options,\n getClasses,\n onSelect\n}) {\n const prefixClass = usePrefixClass();\n const handleSelect = (evt) => {\n const target = evt.target;\n const currentTarget = evt.currentTarget;\n if (target.tagName.toUpperCase() !== \"LI\")\n return;\n const type = currentTarget.getAttribute(\"data-type\");\n const col = parseInt(currentTarget.getAttribute(\"data-index\"), 10);\n const index2 = parseInt(target.getAttribute(\"data-index\"), 10);\n const value = options[col].list[index2].value;\n onSelect(value, type);\n };\n return createVNode(\"div\", {\n \"class\": `${prefixClass}-time-columns`\n }, [options.map((col, i) => createVNode(ScrollbarVertical, {\n \"key\": col.type,\n \"class\": `${prefixClass}-time-column`\n }, {\n default: () => [createVNode(\"ul\", {\n \"class\": `${prefixClass}-time-list`,\n \"data-index\": i,\n \"data-type\": col.type,\n \"onClick\": handleSelect\n }, [col.list.map((item, j) => createVNode(\"li\", {\n \"key\": item.text,\n \"data-index\": j,\n \"class\": [`${prefixClass}-time-item`, getClasses(item.value, col.type)]\n }, [item.text]))])]\n }))]);\n}\nfunction _isSlot(s) {\n return typeof s === \"function\" || Object.prototype.toString.call(s) === \"[object Object]\" && !isVNode(s);\n}\nfunction FixedList(props) {\n let _slot;\n const prefixClass = usePrefixClass();\n return createVNode(ScrollbarVertical, null, _isSlot(_slot = props.options.map((item) => createVNode(\"div\", {\n \"key\": item.text,\n \"class\": [`${prefixClass}-time-option`, props.getClasses(item.value, \"time\")],\n \"onClick\": () => props.onSelect(item.value, \"time\")\n }, [item.text]))) ? _slot : {\n default: () => [_slot]\n });\n}\nfunction generateList({\n length,\n step = 1,\n options\n}) {\n if (Array.isArray(options)) {\n return options.filter((v) => v >= 0 && v < length);\n }\n if (step <= 0) {\n step = 1;\n }\n const arr = [];\n for (let i = 0; i < length; i += step) {\n arr.push(i);\n }\n return arr;\n}\nfunction getColumnOptions(date, options) {\n let { showHour, showMinute, showSecond, use12h } = options;\n const format2 = options.format || \"HH:mm:ss\";\n showHour = typeof showHour === \"boolean\" ? showHour : /[HhKk]/.test(format2);\n showMinute = typeof showMinute === \"boolean\" ? showMinute : /m/.test(format2);\n showSecond = typeof showSecond === \"boolean\" ? showSecond : /s/.test(format2);\n use12h = typeof use12h === \"boolean\" ? use12h : /a/i.test(format2);\n const columns = [];\n const isPM = use12h && date.getHours() >= 12;\n if (showHour) {\n columns.push({\n type: \"hour\",\n list: generateList({\n length: use12h ? 12 : 24,\n step: options.hourStep,\n options: options.hourOptions\n }).map((num) => {\n const text = num === 0 && use12h ? \"12\" : padNumber(num);\n const value = new Date(date);\n value.setHours(isPM ? num + 12 : num);\n return { value, text };\n })\n });\n }\n if (showMinute) {\n columns.push({\n type: \"minute\",\n list: generateList({\n length: 60,\n step: options.minuteStep,\n options: options.minuteOptions\n }).map((num) => {\n const value = new Date(date);\n value.setMinutes(num);\n return { value, text: padNumber(num) };\n })\n });\n }\n if (showSecond) {\n columns.push({\n type: \"second\",\n list: generateList({\n length: 60,\n step: options.secondStep,\n options: options.secondOptions\n }).map((num) => {\n const value = new Date(date);\n value.setSeconds(num);\n return { value, text: padNumber(num) };\n })\n });\n }\n if (use12h) {\n columns.push({\n type: \"ampm\",\n list: [\"AM\", \"PM\"].map((text, i) => {\n const value = new Date(date);\n value.setHours(value.getHours() % 12 + i * 12);\n return { text, value };\n })\n });\n }\n return columns;\n}\nfunction parseOption(time = \"\") {\n const values = time.split(\":\");\n if (values.length >= 2) {\n const hours = parseInt(values[0], 10);\n const minutes = parseInt(values[1], 10);\n return {\n hours,\n minutes\n };\n }\n return null;\n}\nfunction getFixedOptions({\n date,\n option,\n format: format2,\n formatDate\n}) {\n const result = [];\n if (typeof option === \"function\") {\n return option() || [];\n }\n const start = parseOption(option.start);\n const end = parseOption(option.end);\n const step = parseOption(option.step);\n const fmt = option.format || format2;\n if (start && end && step) {\n const startMinutes = start.minutes + start.hours * 60;\n const endMinutes = end.minutes + end.hours * 60;\n const stepMinutes = step.minutes + step.hours * 60;\n const len = Math.floor((endMinutes - startMinutes) / stepMinutes);\n for (let i = 0; i <= len; i++) {\n const timeMinutes = startMinutes + i * stepMinutes;\n const hours = Math.floor(timeMinutes / 60);\n const minutes = timeMinutes % 60;\n const value = new Date(date);\n value.setHours(hours, minutes, 0);\n result.push({\n value,\n text: formatDate(value, fmt)\n });\n }\n }\n return result;\n}\nconst scrollTo = (element, to, duration = 0) => {\n if (duration <= 0) {\n requestAnimationFrame(() => {\n element.scrollTop = to;\n });\n return;\n }\n const difference = to - element.scrollTop;\n const tick = difference / duration * 10;\n requestAnimationFrame(() => {\n const scrollTop = element.scrollTop + tick;\n if (scrollTop >= to) {\n element.scrollTop = to;\n return;\n }\n element.scrollTop = scrollTop;\n scrollTo(element, to, duration - 10);\n });\n};\nfunction TimePanel(originalProps) {\n const props = withDefault(originalProps, {\n defaultValue: startOfDay(new Date()),\n format: \"HH:mm:ss\",\n timeTitleFormat: \"YYYY-MM-DD\",\n disabledTime: () => false,\n scrollDuration: 100\n });\n const prefixClass = usePrefixClass();\n const locale2 = useLocale();\n const formatDate = (date, fmt) => {\n return format(date, fmt, {\n locale: locale2.value.formatLocale\n });\n };\n const innerValue = ref(new Date());\n watchEffect(() => {\n innerValue.value = getValidDate(props.value, props.defaultValue);\n });\n const isDisabledTimes = (value) => {\n if (Array.isArray(value)) {\n return value.every((v) => props.disabledTime(new Date(v)));\n }\n return props.disabledTime(new Date(value));\n };\n const isDisabledHour = (date) => {\n const value = new Date(date);\n return isDisabledTimes([value.getTime(), value.setMinutes(0, 0, 0), value.setMinutes(59, 59, 999)]);\n };\n const isDisabledMinute = (date) => {\n const value = new Date(date);\n return isDisabledTimes([value.getTime(), value.setSeconds(0, 0), value.setSeconds(59, 999)]);\n };\n const isDisabledAMPM = (date) => {\n const value = new Date(date);\n const minHour = value.getHours() < 12 ? 0 : 12;\n const maxHour = minHour + 11;\n return isDisabledTimes([value.getTime(), value.setHours(minHour, 0, 0, 0), value.setHours(maxHour, 59, 59, 999)]);\n };\n const isDisabled = (date, type) => {\n if (type === \"hour\") {\n return isDisabledHour(date);\n }\n if (type === \"minute\") {\n return isDisabledMinute(date);\n }\n if (type === \"ampm\") {\n return isDisabledAMPM(date);\n }\n return isDisabledTimes(date);\n };\n const handleSelect = (value, type) => {\n var _a;\n if (!isDisabled(value, type)) {\n const date = new Date(value);\n innerValue.value = date;\n if (!isDisabledTimes(date)) {\n (_a = props[\"onUpdate:value\"]) == null ? void 0 : _a.call(props, date, type);\n }\n }\n };\n const getClasses = (cellDate, type) => {\n if (isDisabled(cellDate, type)) {\n return \"disabled\";\n }\n if (cellDate.getTime() === innerValue.value.getTime()) {\n return \"active\";\n }\n return \"\";\n };\n const container = ref();\n const scrollToSelected = (duration) => {\n if (!container.value)\n return;\n const elements = container.value.querySelectorAll(\".active\");\n for (let i = 0; i < elements.length; i++) {\n const element = elements[i];\n const scrollElement = getScrollParent(element, container.value);\n if (scrollElement) {\n const to = element.offsetTop;\n scrollTo(scrollElement, to, duration);\n }\n }\n };\n onMounted(() => scrollToSelected(0));\n watch(innerValue, () => scrollToSelected(props.scrollDuration), {\n flush: \"post\"\n });\n return () => {\n let content;\n if (props.timePickerOptions) {\n content = createVNode(FixedList, {\n \"onSelect\": handleSelect,\n \"getClasses\": getClasses,\n \"options\": getFixedOptions({\n date: innerValue.value,\n format: props.format,\n option: props.timePickerOptions,\n formatDate\n })\n }, null);\n } else {\n content = createVNode(Columns, {\n \"options\": getColumnOptions(innerValue.value, props),\n \"onSelect\": handleSelect,\n \"getClasses\": getClasses\n }, null);\n }\n return createVNode(\"div\", {\n \"class\": `${prefixClass}-time`,\n \"ref\": container\n }, [props.showTimeHeader && createVNode(\"div\", {\n \"class\": `${prefixClass}-time-header`\n }, [createVNode(\"button\", {\n \"type\": \"button\",\n \"class\": `${prefixClass}-btn ${prefixClass}-btn-text ${prefixClass}-time-header-title`,\n \"onClick\": props.onClickTitle\n }, [formatDate(innerValue.value, props.timeTitleFormat)])]), createVNode(\"div\", {\n \"class\": `${prefixClass}-time-content`\n }, [content])]);\n };\n}\nconst timePanelProps = keys()([\"value\", \"defaultValue\", \"format\", \"timeTitleFormat\", \"showTimeHeader\", \"disabledTime\", \"timePickerOptions\", \"hourOptions\", \"minuteOptions\", \"secondOptions\", \"hourStep\", \"minuteStep\", \"secondStep\", \"showHour\", \"showMinute\", \"showSecond\", \"use12h\", \"scrollDuration\", \"onClickTitle\", \"onUpdate:value\"]);\nvar TimePanel$1 = defineVueComponent(TimePanel, timePanelProps);\nfunction TimeRange(originalProps) {\n const props = withDefault(originalProps, {\n defaultValue: startOfDay(new Date()),\n disabledTime: () => false\n });\n const prefixClass = usePrefixClass();\n const innerValue = ref([new Date(NaN), new Date(NaN)]);\n watchEffect(() => {\n if (isValidRangeDate(props.value)) {\n innerValue.value = props.value;\n } else {\n innerValue.value = [new Date(NaN), new Date(NaN)];\n }\n });\n const emitChange = (type, index2) => {\n var _a;\n (_a = props[\"onUpdate:value\"]) == null ? void 0 : _a.call(props, innerValue.value, type === \"time\" ? \"time-range\" : type, index2);\n };\n const handleSelectStart = (date, type) => {\n innerValue.value[0] = date;\n if (!(innerValue.value[1].getTime() >= date.getTime())) {\n innerValue.value[1] = date;\n }\n emitChange(type, 0);\n };\n const handleSelectEnd = (date, type) => {\n innerValue.value[1] = date;\n if (!(innerValue.value[0].getTime() <= date.getTime())) {\n innerValue.value[0] = date;\n }\n emitChange(type, 1);\n };\n const disabledStartTime = (date) => {\n return props.disabledTime(date, 0);\n };\n const disabledEndTime = (date) => {\n return date.getTime() < innerValue.value[0].getTime() || props.disabledTime(date, 1);\n };\n return () => {\n const defaultValues = Array.isArray(props.defaultValue) ? props.defaultValue : [props.defaultValue, props.defaultValue];\n return createVNode(\"div\", {\n \"class\": `${prefixClass}-time-range`\n }, [createVNode(TimePanel$1, __spreadProps(__spreadValues({}, props), {\n [\"onUpdate:value\"]: handleSelectStart,\n \"value\": innerValue.value[0],\n \"defaultValue\": defaultValues[0],\n \"disabledTime\": disabledStartTime\n }), null), createVNode(TimePanel$1, __spreadProps(__spreadValues({}, props), {\n [\"onUpdate:value\"]: handleSelectEnd,\n \"value\": innerValue.value[1],\n \"defaultValue\": defaultValues[1],\n \"disabledTime\": disabledEndTime\n }), null)]);\n };\n}\nconst timeRangeProps = timePanelProps;\nvar TimeRange$1 = defineVueComponent(TimeRange, timeRangeProps);\nfunction useTimePanelVisible(props) {\n const defaultTimeVisible = ref(false);\n const closeTimePanel = () => {\n var _a;\n defaultTimeVisible.value = false;\n (_a = props.onShowTimePanelChange) == null ? void 0 : _a.call(props, false);\n };\n const openTimePanel = () => {\n var _a;\n defaultTimeVisible.value = true;\n (_a = props.onShowTimePanelChange) == null ? void 0 : _a.call(props, true);\n };\n const timeVisible = computed(() => {\n return typeof props.showTimePanel === \"boolean\" ? props.showTimePanel : defaultTimeVisible.value;\n });\n return { timeVisible, openTimePanel, closeTimePanel };\n}\nfunction DateTime(originalProps) {\n const props = withDefault(originalProps, {\n disabledTime: () => false,\n defaultValue: startOfDay(new Date())\n });\n const currentValue = ref(props.value);\n watchEffect(() => {\n currentValue.value = props.value;\n });\n const {\n openTimePanel,\n closeTimePanel,\n timeVisible\n } = useTimePanelVisible(props);\n const handleSelect = (date, type) => {\n var _a;\n if (type === \"date\") {\n openTimePanel();\n }\n let datetime = assignTime(date, getValidDate(props.value, props.defaultValue));\n if (props.disabledTime(new Date(datetime))) {\n datetime = assignTime(date, props.defaultValue);\n if (props.disabledTime(new Date(datetime))) {\n currentValue.value = datetime;\n return;\n }\n }\n (_a = props[\"onUpdate:value\"]) == null ? void 0 : _a.call(props, datetime, type);\n };\n return () => {\n const prefixClass = usePrefixClass();\n const calendarProp = __spreadProps(__spreadValues({}, pick(props, calendarProps)), {\n multiple: false,\n type: \"date\",\n value: currentValue.value,\n [\"onUpdate:value\"]: handleSelect\n });\n const timeProps = __spreadProps(__spreadValues({}, pick(props, timePanelProps)), {\n showTimeHeader: true,\n value: currentValue.value,\n [\"onUpdate:value\"]: props[\"onUpdate:value\"],\n onClickTitle: closeTimePanel\n });\n return createVNode(\"div\", {\n \"class\": `${prefixClass}-date-time`\n }, [createVNode(Calendar$1, calendarProp, null), timeVisible.value && createVNode(TimePanel$1, timeProps, null)]);\n };\n}\nconst datetimeBaseProps = keys()([\"showTimePanel\", \"onShowTimePanelChange\"]);\nconst datetimeProps = [...datetimeBaseProps, ...calendarProps, ...timePanelProps];\nvar DateTime$1 = defineVueComponent(DateTime, datetimeProps);\nfunction DateTimeRange(originalProps) {\n const props = withDefault(originalProps, {\n defaultValue: startOfDay(new Date()),\n disabledTime: () => false\n });\n const currentValue = ref(props.value);\n watchEffect(() => {\n currentValue.value = props.value;\n });\n const {\n openTimePanel,\n closeTimePanel,\n timeVisible\n } = useTimePanelVisible(props);\n const handleSelect = (dates, type) => {\n var _a;\n if (type === \"date\") {\n openTimePanel();\n }\n const defaultValues = Array.isArray(props.defaultValue) ? props.defaultValue : [props.defaultValue, props.defaultValue];\n let datetimes = dates.map((date, i) => {\n const time = isValidRangeDate(props.value) ? props.value[i] : defaultValues[i];\n return assignTime(date, time);\n });\n if (datetimes[1].getTime() < datetimes[0].getTime()) {\n datetimes = [datetimes[0], datetimes[0]];\n }\n if (datetimes.some(props.disabledTime)) {\n datetimes = dates.map((date, i) => assignTime(date, defaultValues[i]));\n if (datetimes.some(props.disabledTime)) {\n currentValue.value = datetimes;\n return;\n }\n }\n (_a = props[\"onUpdate:value\"]) == null ? void 0 : _a.call(props, datetimes, type);\n };\n return () => {\n const prefixClass = usePrefixClass();\n const calendarProp = __spreadProps(__spreadValues({}, pick(props, calendarRangeProps)), {\n type: \"date\",\n value: currentValue.value,\n [\"onUpdate:value\"]: handleSelect\n });\n const timeProps = __spreadProps(__spreadValues({}, pick(props, timeRangeProps)), {\n showTimeHeader: true,\n value: currentValue.value,\n [\"onUpdate:value\"]: props[\"onUpdate:value\"],\n onClickTitle: closeTimePanel\n });\n return createVNode(\"div\", {\n \"class\": `${prefixClass}-date-time-range`\n }, [createVNode(CalendarRange$1, calendarProp, null), timeVisible.value && createVNode(TimeRange$1, timeProps, null)]);\n };\n}\nconst datetimeRangeProps = [...datetimeBaseProps, ...timeRangeProps, ...calendarRangeProps];\nvar DateTimeRange$1 = defineVueComponent(DateTimeRange, datetimeRangeProps);\nconst booleanKeys = keys()([\"range\", \"open\", \"appendToBody\", \"clearable\", \"confirm\", \"disabled\", \"editable\", \"multiple\", \"partialUpdate\", \"showHour\", \"showMinute\", \"showSecond\", \"showTimeHeader\", \"showTimePanel\", \"showWeekNumber\", \"use12h\"]);\nconst formatMap = {\n date: \"YYYY-MM-DD\",\n datetime: \"YYYY-MM-DD HH:mm:ss\",\n year: \"YYYY\",\n month: \"YYYY-MM\",\n time: \"HH:mm:ss\",\n week: \"w\"\n};\nfunction DatePicker(originalProps, {\n slots\n}) {\n const type = originalProps.type || \"date\";\n const format2 = originalProps.format || formatMap[type] || formatMap.date;\n const props = __spreadProps(__spreadValues({}, resolveProps(originalProps, booleanKeys)), {\n type,\n format: format2\n });\n return createVNode(Picker$1, pick(props, Picker$1.props), __spreadValues({\n content: (slotProps) => {\n if (props.range) {\n const Content = type === \"time\" ? TimeRange$1 : type === \"datetime\" ? DateTimeRange$1 : CalendarRange$1;\n return h(Content, pick(__spreadValues(__spreadValues({}, props), slotProps), Content.props));\n } else {\n const Content = type === \"time\" ? TimePanel$1 : type === \"datetime\" ? DateTime$1 : Calendar$1;\n return h(Content, pick(__spreadValues(__spreadValues({}, props), slotProps), Content.props));\n }\n },\n [\"icon-calendar\"]: () => type === \"time\" ? createVNode(render, null, null) : createVNode(render$2, null, null)\n }, slots));\n}\nconst api = {\n locale,\n install: (app) => {\n app.component(\"DatePicker\", DatePicker);\n }\n};\nvar index = Object.assign(DatePicker, api, {\n Calendar: Calendar$1,\n CalendarRange: CalendarRange$1,\n TimePanel: TimePanel$1,\n TimeRange: TimeRange$1,\n DateTime: DateTime$1,\n DateTimeRange: DateTimeRange$1\n});\nexport { index as default };\n","<script>\nimport DatePicker from 'vue-datepicker-next';\nexport default {\n components: { DatePicker },\n props: {\n confirmText: {\n type: String,\n default: '',\n },\n placeholder: {\n type: String,\n default: '',\n },\n value: {\n type: Array,\n default: () => [],\n },\n },\n emits: ['change'],\n methods: {\n handleChange(value) {\n this.$emit('change', value);\n },\n },\n};\n</script>\n\n<template>\n <div class=\"date-picker\">\n <DatePicker\n range\n confirm\n :clearable=\"false\"\n :editable=\"false\"\n :confirm-text=\"confirmText\"\n :placeholder=\"placeholder\"\n :value=\"value\"\n @change=\"handleChange\"\n />\n </div>\n</template>\n","export const formatTime = timeInSeconds => {\n if (!timeInSeconds) {\n return '';\n }\n\n if (timeInSeconds < 60) {\n return `${timeInSeconds}s`;\n }\n\n if (timeInSeconds < 3600) {\n const minutes = Math.floor(timeInSeconds / 60);\n return `${minutes}m`;\n }\n\n if (timeInSeconds < 86400) {\n const hours = Math.floor(timeInSeconds / 3600);\n return `${hours}h`;\n }\n\n const days = Math.floor(timeInSeconds / 86400);\n return `${days}d`;\n};\n\nexport const GROUP_BY_FILTER = {\n 1: { id: 1, period: 'day' },\n 2: { id: 2, period: 'week' },\n 3: { id: 3, period: 'month' },\n 4: { id: 4, period: 'year' },\n};\n\nexport const GROUP_BY_OPTIONS = {\n DAY: {\n id: 'DAY',\n period: 'day',\n translationKey: 'REPORT.GROUPING_OPTIONS.DAY',\n },\n WEEK: {\n id: 'WEEK',\n period: 'week',\n translationKey: 'REPORT.GROUPING_OPTIONS.WEEK',\n },\n MONTH: {\n id: 'MONTH',\n period: 'month',\n translationKey: 'REPORT.GROUPING_OPTIONS.MONTH',\n },\n YEAR: {\n id: 'YEAR',\n period: 'year',\n translationKey: 'REPORT.GROUPING_OPTIONS.YEAR',\n },\n};\n\nexport const DATE_RANGE_OPTIONS = {\n LAST_7_DAYS: {\n id: 'LAST_7_DAYS',\n translationKey: 'REPORT.DATE_RANGE_OPTIONS.LAST_7_DAYS',\n offset: 6,\n groupByOptions: [GROUP_BY_OPTIONS.DAY],\n },\n LAST_30_DAYS: {\n id: 'LAST_30_DAYS',\n translationKey: 'REPORT.DATE_RANGE_OPTIONS.LAST_30_DAYS',\n offset: 29,\n groupByOptions: [GROUP_BY_OPTIONS.DAY, GROUP_BY_OPTIONS.WEEK],\n },\n LAST_3_MONTHS: {\n id: 'LAST_3_MONTHS',\n translationKey: 'REPORT.DATE_RANGE_OPTIONS.LAST_3_MONTHS',\n offset: 89,\n groupByOptions: [\n GROUP_BY_OPTIONS.DAY,\n GROUP_BY_OPTIONS.WEEK,\n GROUP_BY_OPTIONS.MONTH,\n ],\n },\n LAST_6_MONTHS: {\n id: 'LAST_6_MONTHS',\n translationKey: 'REPORT.DATE_RANGE_OPTIONS.LAST_6_MONTHS',\n offset: 179,\n groupByOptions: [GROUP_BY_OPTIONS.WEEK, GROUP_BY_OPTIONS.MONTH],\n },\n LAST_YEAR: {\n id: 'LAST_YEAR',\n translationKey: 'REPORT.DATE_RANGE_OPTIONS.LAST_YEAR',\n offset: 364,\n groupByOptions: [GROUP_BY_OPTIONS.WEEK, GROUP_BY_OPTIONS.MONTH],\n },\n CUSTOM_DATE_RANGE: {\n id: 'CUSTOM_DATE_RANGE',\n translationKey: 'REPORT.DATE_RANGE_OPTIONS.CUSTOM_DATE_RANGE',\n offset: null,\n groupByOptions: [\n GROUP_BY_OPTIONS.DAY,\n GROUP_BY_OPTIONS.WEEK,\n GROUP_BY_OPTIONS.MONTH,\n GROUP_BY_OPTIONS.YEAR,\n ],\n },\n};\n\nexport const CHART_FONT_FAMILY =\n 'Inter,-apple-system,system-ui,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif';\n\nexport const DEFAULT_LINE_CHART = {\n type: 'line',\n fill: false,\n borderColor: '#779BBB',\n pointBackgroundColor: '#779BBB',\n};\n\nexport const DEFAULT_BAR_CHART = {\n type: 'bar',\n backgroundColor: 'rgb(31, 147, 255)',\n};\n\nconst createChartConfig = yAxisTickCallback => ({\n datasets: [DEFAULT_BAR_CHART],\n scales: {\n x: {\n ticks: {\n fontFamily: CHART_FONT_FAMILY,\n },\n grid: {\n drawOnChartArea: false,\n },\n },\n y: {\n type: 'linear',\n position: 'left',\n ticks: {\n fontFamily: CHART_FONT_FAMILY,\n beginAtZero: true,\n stepSize: 1,\n callback: yAxisTickCallback,\n },\n grid: {\n drawOnChartArea: false,\n },\n },\n },\n});\n\nexport const DEFAULT_CHART = createChartConfig((value, index, ticks) => {\n if (!index || index === ticks.length - 1) {\n return value;\n }\n return '';\n});\n\nexport const TIME_CHART_CONFIG = createChartConfig((value, index, values) => {\n if (!index || index === values.length - 1) {\n return formatTime(value);\n }\n return '';\n});\n\nexport const METRIC_CHART = {\n conversations_count: DEFAULT_CHART,\n incoming_messages_count: DEFAULT_CHART,\n outgoing_messages_count: DEFAULT_CHART,\n avg_first_response_time: TIME_CHART_CONFIG,\n reply_time: TIME_CHART_CONFIG,\n avg_resolution_time: TIME_CHART_CONFIG,\n resolutions_count: DEFAULT_CHART,\n bot_resolutions_count: DEFAULT_CHART,\n bot_handoffs_count: DEFAULT_CHART,\n};\n\nexport const OVERVIEW_METRICS = {\n open: 'OPEN',\n unattended: 'UNATTENDED',\n unassigned: 'UNASSIGNED',\n pending: 'PENDING',\n online: 'ONLINE',\n busy: 'BUSY',\n offline: 'OFFLINE',\n};\n","<script>\nimport { DATE_RANGE_OPTIONS } from '../../constants';\n\nconst EVENT_NAME = 'on-range-change';\n\nexport default {\n name: 'ReportFiltersDateRange',\n data() {\n const translatedOptions = Object.values(DATE_RANGE_OPTIONS).map(option => ({\n ...option,\n name: this.$t(option.translationKey),\n }));\n\n return {\n // relies on translations, need to move it to constants\n selectedOption: translatedOptions[0],\n options: translatedOptions,\n };\n },\n methods: {\n updateRange(selectedRange) {\n this.selectedOption = selectedRange;\n this.$emit(EVENT_NAME, selectedRange);\n },\n },\n};\n</script>\n\n<template>\n <div class=\"multiselect-wrap--small\">\n <multiselect\n v-model=\"selectedOption\"\n class=\"no-margin\"\n track-by=\"name\"\n label=\"name\"\n :placeholder=\"$t('FORMS.MULTISELECT.SELECT_ONE')\"\n selected-label\n :select-label=\"$t('FORMS.MULTISELECT.ENTER_TO_SELECT')\"\n deselect-label=\"\"\n :options=\"options\"\n :searchable=\"false\"\n :allow-empty=\"false\"\n @select=\"updateRange\"\n />\n </div>\n</template>\n","<script>\nimport { GROUP_BY_OPTIONS } from '../../constants';\n\nexport default {\n name: 'ReportsFiltersDateGroupBy',\n props: {\n validGroupOptions: {\n type: Array,\n default: () => [GROUP_BY_OPTIONS.DAY],\n },\n selectedOption: {\n type: Object,\n default: () => GROUP_BY_OPTIONS.DAY,\n },\n },\n emits: ['onGroupingChange'],\n data() {\n return {\n currentSelectedFilter: null,\n };\n },\n computed: {\n translatedOptions() {\n return this.validGroupOptions.map(option => ({\n ...option,\n groupBy: this.$t(option.translationKey),\n }));\n },\n },\n watch: {\n selectedOption: {\n handler() {\n this.currentSelectedFilter = {\n ...this.selectedOption,\n groupBy: this.$t(this.selectedOption.translationKey),\n };\n },\n immediate: true,\n },\n },\n methods: {\n changeFilterSelection(selectedFilter) {\n this.groupByOptions = this.$emit('onGroupingChange', selectedFilter);\n },\n },\n};\n</script>\n\n<template>\n <div class=\"multiselect-wrap--small\">\n <p aria-hidden=\"true\" class=\"hide\">\n {{ $t('REPORT.GROUP_BY_FILTER_DROPDOWN_LABEL') }}\n </p>\n <multiselect\n v-model=\"currentSelectedFilter\"\n class=\"no-margin\"\n track-by=\"id\"\n label=\"groupBy\"\n :placeholder=\"$t('REPORT.GROUP_BY_FILTER_DROPDOWN_LABEL')\"\n :options=\"translatedOptions\"\n :allow-empty=\"false\"\n :show-labels=\"false\"\n @select=\"changeFilterSelection\"\n />\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\n\nexport default {\n name: 'ReportsFiltersAgents',\n emits: ['agentsFilterSelection'],\n data() {\n return {\n selectedOptions: [],\n };\n },\n computed: {\n ...mapGetters({\n options: 'agents/getAgents',\n }),\n },\n mounted() {\n this.$store.dispatch('agents/get');\n },\n methods: {\n handleInput() {\n this.$emit('agentsFilterSelection', this.selectedOptions);\n },\n },\n};\n</script>\n\n<template>\n <div class=\"multiselect-wrap--small\">\n <multiselect\n v-model=\"selectedOptions\"\n class=\"no-margin\"\n :options=\"options\"\n track-by=\"id\"\n label=\"name\"\n multiple\n :close-on-select=\"false\"\n :clear-on-select=\"false\"\n hide-selected\n :placeholder=\"$t('CSAT_REPORTS.FILTERS.AGENTS.PLACEHOLDER')\"\n selected-label\n :select-label=\"$t('FORMS.MULTISELECT.ENTER_TO_SELECT')\"\n :deselect-label=\"$t('FORMS.MULTISELECT.ENTER_TO_REMOVE')\"\n @update:model-value=\"handleInput\"\n />\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\n\nexport default {\n name: 'ReportsFiltersLabels',\n emits: ['labelsFilterSelection'],\n data() {\n return {\n selectedOption: null,\n };\n },\n computed: {\n ...mapGetters({\n options: 'labels/getLabels',\n }),\n },\n mounted() {\n this.$store.dispatch('labels/get');\n },\n methods: {\n handleInput() {\n this.$emit('labelsFilterSelection', this.selectedOption);\n },\n },\n};\n</script>\n\n<template>\n <div class=\"multiselect-wrap--small\">\n <multiselect\n v-model=\"selectedOption\"\n class=\"no-margin\"\n :placeholder=\"$t('LABEL_REPORTS.FILTER_DROPDOWN_LABEL')\"\n label=\"title\"\n track-by=\"id\"\n :options=\"options\"\n :option-height=\"24\"\n :show-labels=\"false\"\n @update:model-value=\"handleInput\"\n >\n <template #singleLabel=\"props\">\n <div class=\"flex items-center min-w-0 gap-2\">\n <div\n :style=\"{ backgroundColor: props.option.color }\"\n class=\"w-5 h-5 rounded-full\"\n />\n <span class=\"my-0 text-slate-800 dark:text-slate-75\">\n {{ props.option.title }}\n </span>\n </div>\n </template>\n <template #option=\"props\">\n <div class=\"flex items-center gap-2\">\n <div\n :style=\"{ backgroundColor: props.option.color }\"\n class=\"flex-shrink-0 w-5 h-5 border border-solid rounded-full border-slate-100 dark:border-slate-800\"\n />\n\n <span class=\"my-0 text-slate-800 truncate min-w-0 dark:text-slate-75\">\n {{ props.option.title }}\n </span>\n </div>\n </template>\n </multiselect>\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\n\nexport default {\n name: 'ReportsFiltersInboxes',\n emits: ['inboxFilterSelection'],\n data() {\n return {\n selectedOption: null,\n };\n },\n computed: {\n ...mapGetters({\n options: 'inboxes/getInboxes',\n }),\n },\n mounted() {\n this.$store.dispatch('inboxes/get');\n },\n methods: {\n handleInput() {\n this.$emit('inboxFilterSelection', this.selectedOption);\n },\n },\n};\n</script>\n\n<template>\n <div class=\"multiselect-wrap--small\">\n <multiselect\n v-model=\"selectedOption\"\n class=\"no-margin\"\n :placeholder=\"$t('INBOX_REPORTS.FILTER_DROPDOWN_LABEL')\"\n label=\"name\"\n track-by=\"id\"\n :options=\"options\"\n :option-height=\"24\"\n :show-labels=\"false\"\n @update:model-value=\"handleInput\"\n />\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\n\nexport default {\n name: 'ReportsFiltersTeams',\n emits: ['teamFilterSelection'],\n data() {\n return {\n selectedOption: null,\n };\n },\n computed: {\n ...mapGetters({\n options: 'teams/getTeams',\n }),\n },\n mounted() {\n this.$store.dispatch('teams/get');\n },\n methods: {\n handleInput() {\n this.$emit('teamFilterSelection', this.selectedOption);\n },\n },\n};\n</script>\n\n<template>\n <div class=\"multiselect-wrap--small\">\n <multiselect\n v-model=\"selectedOption\"\n class=\"no-margin\"\n :placeholder=\"$t('TEAM_REPORTS.FILTER_DROPDOWN_LABEL')\"\n label=\"name\"\n track-by=\"id\"\n :options=\"options\"\n :option-height=\"24\"\n :show-labels=\"false\"\n @update:model-value=\"handleInput\"\n />\n </div>\n</template>\n","<script>\nimport { CSAT_RATINGS } from 'shared/constants/messages';\n\nexport default {\n name: 'ReportFiltersRatings',\n emits: ['ratingFilterSelection'],\n data() {\n const translatedOptions = CSAT_RATINGS.reverse().map(option => ({\n ...option,\n label: this.$t(option.translationKey),\n }));\n\n return {\n selectedOption: null,\n options: translatedOptions,\n };\n },\n methods: {\n handleInput(selectedRating) {\n this.$emit('ratingFilterSelection', selectedRating);\n },\n },\n};\n</script>\n\n<template>\n <div class=\"multiselect-wrap--small\">\n <multiselect\n v-model=\"selectedOption\"\n class=\"no-margin\"\n :option-height=\"24\"\n :placeholder=\"$t('FORMS.MULTISELECT.SELECT_ONE')\"\n :options=\"options\"\n :show-labels=\"false\"\n track-by=\"value\"\n label=\"label\"\n @update:model-value=\"handleInput\"\n />\n </div>\n</template>\n","<script>\nimport WootDateRangePicker from 'dashboard/components/ui/DateRangePicker.vue';\nimport ReportsFiltersDateRange from './Filters/DateRange.vue';\nimport ReportsFiltersDateGroupBy from './Filters/DateGroupBy.vue';\nimport ReportsFiltersAgents from './Filters/Agents.vue';\nimport ReportsFiltersLabels from './Filters/Labels.vue';\nimport ReportsFiltersInboxes from './Filters/Inboxes.vue';\nimport ReportsFiltersTeams from './Filters/Teams.vue';\nimport ReportsFiltersRatings from './Filters/Ratings.vue';\nimport subDays from 'date-fns/subDays';\nimport { DATE_RANGE_OPTIONS } from '../constants';\nimport { getUnixStartOfDay, getUnixEndOfDay } from 'helpers/DateHelper';\n\nexport default {\n components: {\n WootDateRangePicker,\n ReportsFiltersDateRange,\n ReportsFiltersDateGroupBy,\n ReportsFiltersAgents,\n ReportsFiltersLabels,\n ReportsFiltersInboxes,\n ReportsFiltersTeams,\n ReportsFiltersRatings,\n },\n props: {\n showGroupByFilter: {\n type: Boolean,\n default: false,\n },\n showAgentsFilter: {\n type: Boolean,\n default: false,\n },\n showLabelsFilter: {\n type: Boolean,\n default: false,\n },\n showInboxFilter: {\n type: Boolean,\n default: false,\n },\n showRatingFilter: {\n type: Boolean,\n default: false,\n },\n showTeamFilter: {\n type: Boolean,\n default: false,\n },\n showBusinessHoursSwitch: {\n type: Boolean,\n default: true,\n },\n },\n emits: ['filterChange'],\n data() {\n return {\n // default value, need not be translated\n selectedDateRange: DATE_RANGE_OPTIONS.LAST_7_DAYS,\n selectedGroupByFilter: null,\n selectedLabel: null,\n selectedInbox: null,\n selectedTeam: null,\n selectedRating: null,\n selectedAgents: [],\n customDateRange: [new Date(), new Date()],\n businessHoursSelected: false,\n };\n },\n computed: {\n isDateRangeSelected() {\n return (\n this.selectedDateRange.id === DATE_RANGE_OPTIONS.CUSTOM_DATE_RANGE.id\n );\n },\n isGroupByPossible() {\n return this.selectedDateRange.id !== DATE_RANGE_OPTIONS.LAST_7_DAYS.id;\n },\n to() {\n if (this.isDateRangeSelected) {\n return getUnixEndOfDay(this.customDateRange[1]);\n }\n return getUnixEndOfDay(new Date());\n },\n from() {\n if (this.isDateRangeSelected) {\n return getUnixStartOfDay(this.customDateRange[0]);\n }\n\n const { offset } = this.selectedDateRange;\n const fromDate = subDays(new Date(), offset);\n return getUnixStartOfDay(fromDate);\n },\n validGroupOptions() {\n return this.selectedDateRange.groupByOptions;\n },\n validGroupBy() {\n if (!this.selectedGroupByFilter) {\n return this.validGroupOptions[0];\n }\n\n const validIds = this.validGroupOptions.map(opt => opt.id);\n if (validIds.includes(this.selectedGroupByFilter.id)) {\n return this.selectedGroupByFilter;\n }\n return this.validGroupOptions[0];\n },\n },\n watch: {\n businessHoursSelected() {\n this.emitChange();\n },\n },\n mounted() {\n this.emitChange();\n },\n methods: {\n emitChange() {\n const {\n from,\n to,\n selectedGroupByFilter: groupBy,\n businessHoursSelected: businessHours,\n selectedAgents,\n selectedLabel,\n selectedInbox,\n selectedTeam,\n selectedRating,\n } = this;\n this.$emit('filterChange', {\n from,\n to,\n groupBy,\n businessHours,\n selectedAgents,\n selectedLabel,\n selectedInbox,\n selectedTeam,\n selectedRating,\n });\n },\n onDateRangeChange(selectedRange) {\n this.selectedDateRange = selectedRange;\n this.selectedGroupByFilter = this.validGroupBy;\n this.emitChange();\n },\n onCustomDateRangeChange(value) {\n this.customDateRange = value;\n this.selectedGroupByFilter = this.validGroupBy;\n this.emitChange();\n },\n onGroupingChange(payload) {\n this.selectedGroupByFilter = payload;\n this.emitChange();\n },\n handleAgentsFilterSelection(selectedAgents) {\n this.selectedAgents = selectedAgents;\n this.emitChange();\n },\n handleLabelsFilterSelection(selectedLabel) {\n this.selectedLabel = selectedLabel;\n this.emitChange();\n },\n handleInboxFilterSelection(selectedInbox) {\n this.selectedInbox = selectedInbox;\n this.emitChange();\n },\n handleTeamFilterSelection(selectedTeam) {\n this.selectedTeam = selectedTeam;\n this.emitChange();\n },\n handleRatingFilterSelection(selectedRating) {\n this.selectedRating = selectedRating;\n this.emitChange();\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex flex-col justify-between gap-3 md:flex-row\">\n <div\n class=\"w-full grid gap-y-2 gap-x-1.5 grid-cols-[repeat(auto-fill,minmax(250px,1fr))]\"\n >\n <ReportsFiltersDateRange @on-range-change=\"onDateRangeChange\" />\n <WootDateRangePicker\n v-if=\"isDateRangeSelected\"\n show-range\n class=\"no-margin auto-width\"\n :value=\"customDateRange\"\n :confirm-text=\"$t('REPORT.CUSTOM_DATE_RANGE.CONFIRM')\"\n :placeholder=\"$t('REPORT.CUSTOM_DATE_RANGE.PLACEHOLDER')\"\n @change=\"onCustomDateRangeChange\"\n />\n <ReportsFiltersDateGroupBy\n v-if=\"showGroupByFilter && isGroupByPossible\"\n :valid-group-options=\"validGroupOptions\"\n :selected-option=\"selectedGroupByFilter\"\n @on-grouping-change=\"onGroupingChange\"\n />\n <ReportsFiltersAgents\n v-if=\"showAgentsFilter\"\n @agents-filter-selection=\"handleAgentsFilterSelection\"\n />\n <ReportsFiltersLabels\n v-if=\"showLabelsFilter\"\n @labels-filter-selection=\"handleLabelsFilterSelection\"\n />\n <ReportsFiltersTeams\n v-if=\"showTeamFilter\"\n @team-filter-selection=\"handleTeamFilterSelection\"\n />\n <ReportsFiltersInboxes\n v-if=\"showInboxFilter\"\n @inbox-filter-selection=\"handleInboxFilterSelection\"\n />\n <ReportsFiltersRatings\n v-if=\"showRatingFilter\"\n @rating-filter-selection=\"handleRatingFilterSelection\"\n />\n </div>\n <div v-if=\"showBusinessHoursSwitch\" class=\"flex items-center\">\n <span class=\"mx-2 text-sm whitespace-nowrap\">\n {{ $t('REPORT.BUSINESS_HOURS') }}\n </span>\n <span>\n <woot-switch v-model=\"businessHoursSelected\" />\n </span>\n </div>\n </div>\n</template>\n","import { useMapGetter } from 'dashboard/composables/store';\nimport { formatTime } from '@chatwoot/utils';\n\n/**\n * A composable function for report metrics calculations and display.\n *\n * @param {string} [accountSummaryKey='getAccountSummary'] - The key for accessing account summary data.\n * @returns {Object} An object containing utility functions for report metrics.\n */\nexport function useReportMetrics(accountSummaryKey = 'getAccountSummary') {\n const accountSummary = useMapGetter(accountSummaryKey);\n\n /**\n * Calculates the trend percentage for a given metric.\n *\n * @param {string} key - The key of the metric to calculate trend for.\n * @returns {number} The calculated trend percentage, rounded to the nearest integer.\n */\n const calculateTrend = key => {\n if (!accountSummary.value.previous[key]) return 0;\n const diff = accountSummary.value[key] - accountSummary.value.previous[key];\n return Math.round((diff / accountSummary.value.previous[key]) * 100);\n };\n\n /**\n * Checks if a given metric key represents an average metric type.\n *\n * @param {string} key - The key of the metric to check.\n * @returns {boolean} True if the metric is an average type, false otherwise.\n */\n const isAverageMetricType = key => {\n return [\n 'avg_first_response_time',\n 'avg_resolution_time',\n 'reply_time',\n ].includes(key);\n };\n\n /**\n * Formats and displays a metric value based on its type.\n *\n * @param {string} key - The key of the metric to display.\n * @returns {string} The formatted metric value as a string.\n */\n const displayMetric = key => {\n if (isAverageMetricType(key)) {\n return formatTime(accountSummary.value[key]);\n }\n return Number(accountSummary.value[key] || '').toLocaleString();\n };\n\n return {\n calculateTrend,\n isAverageMetricType,\n displayMetric,\n };\n}\n","<script setup>\nimport { useReportMetrics } from 'dashboard/composables/useReportMetrics';\n\nconst props = defineProps({\n metric: {\n type: Object,\n default: () => ({}),\n },\n accountSummaryKey: {\n type: String,\n default: 'getAccountSummary',\n },\n});\n\nconst { calculateTrend, displayMetric, isAverageMetricType } = useReportMetrics(\n props.accountSummaryKey\n);\n\nconst trendColor = (value, key) => {\n if (isAverageMetricType(key)) {\n return value > 0\n ? 'border-red-500 text-red-500'\n : 'border-green-500 text-green-500';\n }\n return value < 0\n ? 'border-red-500 text-red-500'\n : 'border-green-500 text-green-500';\n};\n</script>\n\n<template>\n <div class=\"text-n-slate-11\">\n <span class=\"text-sm\">\n {{ metric.NAME }}\n </span>\n <div class=\"flex items-end text-n-slate-12\">\n <div class=\"text-xl font-medium\">\n {{ displayMetric(metric.KEY) }}\n </div>\n <div v-if=\"metric.trend\" class=\"text-xs ml-4 flex items-center mb-0.5\">\n <div\n v-if=\"metric.trend < 0\"\n class=\"h-0 w-0 border-x-4 medium border-x-transparent border-t-[8px] mr-1\"\n :class=\"trendColor(metric.trend, metric.KEY)\"\n />\n <div\n v-else\n class=\"h-0 w-0 border-x-4 medium border-x-transparent border-b-[8px] mr-1\"\n :class=\"trendColor(metric.trend, metric.KEY)\"\n />\n <span class=\"font-medium\" :class=\"trendColor(metric.trend, metric.KEY)\">\n {{ calculateTrend(metric.KEY) }}%\n </span>\n </div>\n </div>\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useReportMetrics } from 'dashboard/composables/useReportMetrics';\nimport { GROUP_BY_FILTER, METRIC_CHART } from './constants';\nimport fromUnixTime from 'date-fns/fromUnixTime';\nimport format from 'date-fns/format';\nimport { formatTime } from '@chatwoot/utils';\nimport ChartStats from './components/ChartElements/ChartStats.vue';\nimport BarChart from 'shared/components/charts/BarChart.vue';\n\nexport default {\n components: { ChartStats, BarChart },\n props: {\n groupBy: {\n type: Object,\n default: () => ({}),\n },\n accountSummaryKey: {\n type: String,\n default: 'getAccountSummary',\n },\n reportKeys: {\n type: Object,\n default: () => ({\n CONVERSATIONS: 'conversations_count',\n INCOMING_MESSAGES: 'incoming_messages_count',\n OUTGOING_MESSAGES: 'outgoing_messages_count',\n FIRST_RESPONSE_TIME: 'avg_first_response_time',\n RESOLUTION_TIME: 'avg_resolution_time',\n RESOLUTION_COUNT: 'resolutions_count',\n REPLY_TIME: 'reply_time',\n }),\n },\n },\n setup(props) {\n const { calculateTrend, isAverageMetricType } = useReportMetrics(\n props.accountSummaryKey\n );\n return { calculateTrend, isAverageMetricType };\n },\n computed: {\n ...mapGetters({\n accountReport: 'getAccountReports',\n }),\n metrics() {\n const reportKeys = Object.keys(this.reportKeys);\n const infoText = {\n FIRST_RESPONSE_TIME: this.$t(\n `REPORT.METRICS.FIRST_RESPONSE_TIME.INFO_TEXT`\n ),\n RESOLUTION_TIME: this.$t(`REPORT.METRICS.RESOLUTION_TIME.INFO_TEXT`),\n };\n return reportKeys.map(key => ({\n NAME: this.$t(`REPORT.METRICS.${key}.NAME`),\n KEY: this.reportKeys[key],\n DESC: this.$t(`REPORT.METRICS.${key}.DESC`),\n INFO_TEXT: infoText[key],\n TOOLTIP_TEXT: `REPORT.METRICS.${key}.TOOLTIP_TEXT`,\n trend: this.calculateTrend(this.reportKeys[key]),\n }));\n },\n },\n methods: {\n getCollection(metric) {\n if (!this.accountReport.data[metric.KEY]) {\n return {};\n }\n const data = this.accountReport.data[metric.KEY];\n const labels = data.map(element => {\n if (this.groupBy?.period === GROUP_BY_FILTER[2].period) {\n let week_date = new Date(fromUnixTime(element.timestamp));\n const first_day = week_date.getDate() - week_date.getDay();\n const last_day = first_day + 6;\n const week_first_date = new Date(week_date.setDate(first_day));\n const week_last_date = new Date(week_date.setDate(last_day));\n return `${format(week_first_date, 'dd-MMM')} - ${format(\n week_last_date,\n 'dd-MMM'\n )}`;\n }\n if (this.groupBy?.period === GROUP_BY_FILTER[3].period) {\n return format(fromUnixTime(element.timestamp), 'MMM-yyyy');\n }\n if (this.groupBy?.period === GROUP_BY_FILTER[4].period) {\n return format(fromUnixTime(element.timestamp), 'yyyy');\n }\n return format(fromUnixTime(element.timestamp), 'dd-MMM');\n });\n const datasets = METRIC_CHART[metric.KEY].datasets.map(dataset => {\n switch (dataset.type) {\n case 'bar':\n return {\n ...dataset,\n yAxisID: 'y',\n label: metric.NAME,\n data: data.map(element => element.value),\n };\n case 'line':\n return {\n ...dataset,\n yAxisID: 'y',\n label: this.metrics[0].NAME,\n data: data.map(element => element.count),\n };\n default:\n return dataset;\n }\n });\n return {\n labels,\n datasets,\n };\n },\n getChartOptions(metric) {\n const options = {\n scales: METRIC_CHART[metric.KEY].scales,\n };\n\n // Only add tooltip configuration for time-based metrics\n if (this.isAverageMetricType(metric.KEY)) {\n options.plugins = {\n tooltip: {\n callbacks: {\n label: ({ raw, dataIndex }) => {\n return this.$t(metric.TOOLTIP_TEXT, {\n metricValue: formatTime(raw || 0),\n conversationCount:\n this.accountReport.data[metric.KEY][dataIndex]?.count || 0,\n });\n },\n },\n },\n };\n }\n\n return options;\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-2 px-6 py-5 shadow outline-1 outline outline-n-container rounded-xl bg-n-solid-2\"\n >\n <div\n v-for=\"metric in metrics\"\n :key=\"metric.KEY\"\n class=\"p-4 mb-3 rounded-md\"\n >\n <ChartStats :metric=\"metric\" :account-summary-key=\"accountSummaryKey\" />\n <div class=\"mt-4 h-72\">\n <woot-loading-state\n v-if=\"accountReport.isFetching[metric.KEY]\"\n class=\"text-xs\"\n :message=\"$t('REPORT.LOADING_CHART')\"\n />\n <div v-else class=\"flex items-center justify-center h-72\">\n <BarChart\n v-if=\"accountReport.data[metric.KEY].length\"\n :collection=\"getCollection(metric)\"\n :chart-options=\"getChartOptions(metric)\"\n />\n <span v-else class=\"text-sm text-slate-600\">\n {{ $t('REPORT.NO_ENOUGH_DATA') }}\n </span>\n </div>\n </div>\n </div>\n </div>\n</template>\n","<script>\nimport V4Button from 'dashboard/components-next/button/Button.vue';\nimport { useAlert, useTrack } from 'dashboard/composables';\nimport fromUnixTime from 'date-fns/fromUnixTime';\nimport format from 'date-fns/format';\nimport ReportFilterSelector from './components/FilterSelector.vue';\nimport { GROUP_BY_FILTER } from './constants';\nimport { REPORTS_EVENTS } from '../../../../helper/AnalyticsHelper/events';\nimport ReportContainer from './ReportContainer.vue';\nimport ReportHeader from './components/ReportHeader.vue';\n\nconst REPORTS_KEYS = {\n CONVERSATIONS: 'conversations_count',\n INCOMING_MESSAGES: 'incoming_messages_count',\n OUTGOING_MESSAGES: 'outgoing_messages_count',\n FIRST_RESPONSE_TIME: 'avg_first_response_time',\n RESOLUTION_TIME: 'avg_resolution_time',\n RESOLUTION_COUNT: 'resolutions_count',\n REPLY_TIME: 'reply_time',\n};\n\nexport default {\n name: 'ConversationReports',\n components: {\n ReportHeader,\n ReportFilterSelector,\n ReportContainer,\n V4Button,\n },\n data() {\n return {\n from: 0,\n to: 0,\n groupBy: GROUP_BY_FILTER[1],\n businessHours: false,\n };\n },\n methods: {\n fetchAllData() {\n this.fetchAccountSummary();\n this.fetchChartData();\n },\n fetchAccountSummary() {\n try {\n this.$store.dispatch('fetchAccountSummary', this.getRequestPayload());\n } catch {\n useAlert(this.$t('REPORT.SUMMARY_FETCHING_FAILED'));\n }\n },\n fetchChartData() {\n [\n 'CONVERSATIONS',\n 'INCOMING_MESSAGES',\n 'OUTGOING_MESSAGES',\n 'FIRST_RESPONSE_TIME',\n 'RESOLUTION_TIME',\n 'RESOLUTION_COUNT',\n 'REPLY_TIME',\n ].forEach(async key => {\n try {\n await this.$store.dispatch('fetchAccountReport', {\n metric: REPORTS_KEYS[key],\n ...this.getRequestPayload(),\n });\n } catch {\n useAlert(this.$t('REPORT.DATA_FETCHING_FAILED'));\n }\n });\n },\n getRequestPayload() {\n const { from, to, groupBy, businessHours } = this;\n\n return {\n from,\n to,\n groupBy: groupBy?.period,\n businessHours,\n };\n },\n downloadAgentReports() {\n const { from, to } = this;\n const fileName = `agent-report-${format(\n fromUnixTime(to),\n 'dd-MM-yyyy'\n )}.csv`;\n this.$store.dispatch('downloadAgentReports', { from, to, fileName });\n },\n onFilterChange({ from, to, groupBy, businessHours }) {\n this.from = from;\n this.to = to;\n this.groupBy = groupBy;\n this.businessHours = businessHours;\n this.fetchAllData();\n\n useTrack(REPORTS_EVENTS.FILTER_REPORT, {\n filterValue: { from, to, groupBy, businessHours },\n reportType: 'conversations',\n });\n },\n },\n};\n</script>\n\n<template>\n <ReportHeader :header-title=\"$t('REPORT.HEADER')\">\n <V4Button\n :label=\"$t('REPORT.DOWNLOAD_AGENT_REPORTS')\"\n icon=\"i-ph-download-simple\"\n size=\"sm\"\n @click=\"downloadAgentReports\"\n />\n </ReportHeader>\n <div class=\"flex flex-col gap-3\">\n <ReportFilterSelector\n :show-agents-filter=\"false\"\n show-group-by-filter\n @filter-change=\"onFilterChange\"\n />\n <ReportContainer :group-by=\"groupBy\" />\n </div>\n</template>\n","/**\n * table-core\n *\n * Copyright (c) TanStack\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\n// type Person = {\n// firstName: string\n// lastName: string\n// age: number\n// visits: number\n// status: string\n// progress: number\n// createdAt: Date\n// nested: {\n// foo: [\n// {\n// bar: 'bar'\n// }\n// ]\n// bar: { subBar: boolean }[]\n// baz: {\n// foo: 'foo'\n// bar: {\n// baz: 'baz'\n// }\n// }\n// }\n// }\n\n// const test: DeepKeys<Person> = 'nested.foo.0.bar'\n// const test2: DeepKeys<Person> = 'nested.bar'\n\n// const helper = createColumnHelper<Person>()\n\n// helper.accessor('nested.foo', {\n// cell: info => info.getValue(),\n// })\n\n// helper.accessor('nested.foo.0.bar', {\n// cell: info => info.getValue(),\n// })\n\n// helper.accessor('nested.bar', {\n// cell: info => info.getValue(),\n// })\n\nfunction createColumnHelper() {\n return {\n accessor: (accessor, column) => {\n return typeof accessor === 'function' ? {\n ...column,\n accessorFn: accessor\n } : {\n ...column,\n accessorKey: accessor\n };\n },\n display: column => column,\n group: column => column\n };\n}\n\n// Is this type a tuple?\n\n// If this type is a tuple, what indices are allowed?\n\n///\n\nfunction functionalUpdate(updater, input) {\n return typeof updater === 'function' ? updater(input) : updater;\n}\nfunction noop() {\n //\n}\nfunction makeStateUpdater(key, instance) {\n return updater => {\n instance.setState(old => {\n return {\n ...old,\n [key]: functionalUpdate(updater, old[key])\n };\n });\n };\n}\nfunction isFunction(d) {\n return d instanceof Function;\n}\nfunction isNumberArray(d) {\n return Array.isArray(d) && d.every(val => typeof val === 'number');\n}\nfunction flattenBy(arr, getChildren) {\n const flat = [];\n const recurse = subArr => {\n subArr.forEach(item => {\n flat.push(item);\n const children = getChildren(item);\n if (children != null && children.length) {\n recurse(children);\n }\n });\n };\n recurse(arr);\n return flat;\n}\nfunction memo(getDeps, fn, opts) {\n let deps = [];\n let result;\n return depArgs => {\n let depTime;\n if (opts.key && opts.debug) depTime = Date.now();\n const newDeps = getDeps(depArgs);\n const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);\n if (!depsChanged) {\n return result;\n }\n deps = newDeps;\n let resultTime;\n if (opts.key && opts.debug) resultTime = Date.now();\n result = fn(...newDeps);\n opts == null || opts.onChange == null || opts.onChange(result);\n if (opts.key && opts.debug) {\n if (opts != null && opts.debug()) {\n const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;\n const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;\n const resultFpsPercentage = resultEndTime / 16;\n const pad = (str, num) => {\n str = String(str);\n while (str.length < num) {\n str = ' ' + str;\n }\n return str;\n };\n console.info(`%cⱠ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`, `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(0, Math.min(120 - 120 * resultFpsPercentage, 120))}deg 100% 31%);`, opts == null ? void 0 : opts.key);\n }\n }\n return result;\n };\n}\nfunction getMemoOptions(tableOptions, debugLevel, key, onChange) {\n return {\n debug: () => {\n var _tableOptions$debugAl;\n return (_tableOptions$debugAl = tableOptions == null ? void 0 : tableOptions.debugAll) != null ? _tableOptions$debugAl : tableOptions[debugLevel];\n },\n key: process.env.NODE_ENV === 'development' && key,\n onChange\n };\n}\n\nfunction createCell(table, row, column, columnId) {\n const getRenderValue = () => {\n var _cell$getValue;\n return (_cell$getValue = cell.getValue()) != null ? _cell$getValue : table.options.renderFallbackValue;\n };\n const cell = {\n id: `${row.id}_${column.id}`,\n row,\n column,\n getValue: () => row.getValue(columnId),\n renderValue: getRenderValue,\n getContext: memo(() => [table, column, row, cell], (table, column, row, cell) => ({\n table,\n column,\n row,\n cell: cell,\n getValue: cell.getValue,\n renderValue: cell.renderValue\n }), getMemoOptions(table.options, 'debugCells', 'cell.getContext'))\n };\n table._features.forEach(feature => {\n feature.createCell == null || feature.createCell(cell, column, row, table);\n }, {});\n return cell;\n}\n\nfunction createColumn(table, columnDef, depth, parent) {\n var _ref, _resolvedColumnDef$id;\n const defaultColumn = table._getDefaultColumnDef();\n const resolvedColumnDef = {\n ...defaultColumn,\n ...columnDef\n };\n const accessorKey = resolvedColumnDef.accessorKey;\n let id = (_ref = (_resolvedColumnDef$id = resolvedColumnDef.id) != null ? _resolvedColumnDef$id : accessorKey ? typeof String.prototype.replaceAll === 'function' ? accessorKey.replaceAll('.', '_') : accessorKey.replace(/\\./g, '_') : undefined) != null ? _ref : typeof resolvedColumnDef.header === 'string' ? resolvedColumnDef.header : undefined;\n let accessorFn;\n if (resolvedColumnDef.accessorFn) {\n accessorFn = resolvedColumnDef.accessorFn;\n } else if (accessorKey) {\n // Support deep accessor keys\n if (accessorKey.includes('.')) {\n accessorFn = originalRow => {\n let result = originalRow;\n for (const key of accessorKey.split('.')) {\n var _result;\n result = (_result = result) == null ? void 0 : _result[key];\n if (process.env.NODE_ENV !== 'production' && result === undefined) {\n console.warn(`\"${key}\" in deeply nested key \"${accessorKey}\" returned undefined.`);\n }\n }\n return result;\n };\n } else {\n accessorFn = originalRow => originalRow[resolvedColumnDef.accessorKey];\n }\n }\n if (!id) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(resolvedColumnDef.accessorFn ? `Columns require an id when using an accessorFn` : `Columns require an id when using a non-string header`);\n }\n throw new Error();\n }\n let column = {\n id: `${String(id)}`,\n accessorFn,\n parent: parent,\n depth,\n columnDef: resolvedColumnDef,\n columns: [],\n getFlatColumns: memo(() => [true], () => {\n var _column$columns;\n return [column, ...((_column$columns = column.columns) == null ? void 0 : _column$columns.flatMap(d => d.getFlatColumns()))];\n }, getMemoOptions(table.options, 'debugColumns', 'column.getFlatColumns')),\n getLeafColumns: memo(() => [table._getOrderColumnsFn()], orderColumns => {\n var _column$columns2;\n if ((_column$columns2 = column.columns) != null && _column$columns2.length) {\n let leafColumns = column.columns.flatMap(column => column.getLeafColumns());\n return orderColumns(leafColumns);\n }\n return [column];\n }, getMemoOptions(table.options, 'debugColumns', 'column.getLeafColumns'))\n };\n for (const feature of table._features) {\n feature.createColumn == null || feature.createColumn(column, table);\n }\n\n // Yes, we have to convert table to unknown, because we know more than the compiler here.\n return column;\n}\n\nconst debug = 'debugHeaders';\n//\n\nfunction createHeader(table, column, options) {\n var _options$id;\n const id = (_options$id = options.id) != null ? _options$id : column.id;\n let header = {\n id,\n column,\n index: options.index,\n isPlaceholder: !!options.isPlaceholder,\n placeholderId: options.placeholderId,\n depth: options.depth,\n subHeaders: [],\n colSpan: 0,\n rowSpan: 0,\n headerGroup: null,\n getLeafHeaders: () => {\n const leafHeaders = [];\n const recurseHeader = h => {\n if (h.subHeaders && h.subHeaders.length) {\n h.subHeaders.map(recurseHeader);\n }\n leafHeaders.push(h);\n };\n recurseHeader(header);\n return leafHeaders;\n },\n getContext: () => ({\n table,\n header: header,\n column\n })\n };\n table._features.forEach(feature => {\n feature.createHeader == null || feature.createHeader(header, table);\n });\n return header;\n}\nconst Headers = {\n createTable: table => {\n // Header Groups\n\n table.getHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, leafColumns, left, right) => {\n var _left$map$filter, _right$map$filter;\n const leftColumns = (_left$map$filter = left == null ? void 0 : left.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _left$map$filter : [];\n const rightColumns = (_right$map$filter = right == null ? void 0 : right.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _right$map$filter : [];\n const centerColumns = leafColumns.filter(column => !(left != null && left.includes(column.id)) && !(right != null && right.includes(column.id)));\n const headerGroups = buildHeaderGroups(allColumns, [...leftColumns, ...centerColumns, ...rightColumns], table);\n return headerGroups;\n }, getMemoOptions(table.options, debug, 'getHeaderGroups'));\n table.getCenterHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, leafColumns, left, right) => {\n leafColumns = leafColumns.filter(column => !(left != null && left.includes(column.id)) && !(right != null && right.includes(column.id)));\n return buildHeaderGroups(allColumns, leafColumns, table, 'center');\n }, getMemoOptions(table.options, debug, 'getCenterHeaderGroups'));\n table.getLeftHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left], (allColumns, leafColumns, left) => {\n var _left$map$filter2;\n const orderedLeafColumns = (_left$map$filter2 = left == null ? void 0 : left.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _left$map$filter2 : [];\n return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'left');\n }, getMemoOptions(table.options, debug, 'getLeftHeaderGroups'));\n table.getRightHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.right], (allColumns, leafColumns, right) => {\n var _right$map$filter2;\n const orderedLeafColumns = (_right$map$filter2 = right == null ? void 0 : right.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _right$map$filter2 : [];\n return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'right');\n }, getMemoOptions(table.options, debug, 'getRightHeaderGroups'));\n\n // Footer Groups\n\n table.getFooterGroups = memo(() => [table.getHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getFooterGroups'));\n table.getLeftFooterGroups = memo(() => [table.getLeftHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getLeftFooterGroups'));\n table.getCenterFooterGroups = memo(() => [table.getCenterHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getCenterFooterGroups'));\n table.getRightFooterGroups = memo(() => [table.getRightHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getRightFooterGroups'));\n\n // Flat Headers\n\n table.getFlatHeaders = memo(() => [table.getHeaderGroups()], headerGroups => {\n return headerGroups.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getFlatHeaders'));\n table.getLeftFlatHeaders = memo(() => [table.getLeftHeaderGroups()], left => {\n return left.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getLeftFlatHeaders'));\n table.getCenterFlatHeaders = memo(() => [table.getCenterHeaderGroups()], left => {\n return left.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getCenterFlatHeaders'));\n table.getRightFlatHeaders = memo(() => [table.getRightHeaderGroups()], left => {\n return left.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getRightFlatHeaders'));\n\n // Leaf Headers\n\n table.getCenterLeafHeaders = memo(() => [table.getCenterFlatHeaders()], flatHeaders => {\n return flatHeaders.filter(header => {\n var _header$subHeaders;\n return !((_header$subHeaders = header.subHeaders) != null && _header$subHeaders.length);\n });\n }, getMemoOptions(table.options, debug, 'getCenterLeafHeaders'));\n table.getLeftLeafHeaders = memo(() => [table.getLeftFlatHeaders()], flatHeaders => {\n return flatHeaders.filter(header => {\n var _header$subHeaders2;\n return !((_header$subHeaders2 = header.subHeaders) != null && _header$subHeaders2.length);\n });\n }, getMemoOptions(table.options, debug, 'getLeftLeafHeaders'));\n table.getRightLeafHeaders = memo(() => [table.getRightFlatHeaders()], flatHeaders => {\n return flatHeaders.filter(header => {\n var _header$subHeaders3;\n return !((_header$subHeaders3 = header.subHeaders) != null && _header$subHeaders3.length);\n });\n }, getMemoOptions(table.options, debug, 'getRightLeafHeaders'));\n table.getLeafHeaders = memo(() => [table.getLeftHeaderGroups(), table.getCenterHeaderGroups(), table.getRightHeaderGroups()], (left, center, right) => {\n var _left$0$headers, _left$, _center$0$headers, _center$, _right$0$headers, _right$;\n return [...((_left$0$headers = (_left$ = left[0]) == null ? void 0 : _left$.headers) != null ? _left$0$headers : []), ...((_center$0$headers = (_center$ = center[0]) == null ? void 0 : _center$.headers) != null ? _center$0$headers : []), ...((_right$0$headers = (_right$ = right[0]) == null ? void 0 : _right$.headers) != null ? _right$0$headers : [])].map(header => {\n return header.getLeafHeaders();\n }).flat();\n }, getMemoOptions(table.options, debug, 'getLeafHeaders'));\n }\n};\nfunction buildHeaderGroups(allColumns, columnsToGroup, table, headerFamily) {\n var _headerGroups$0$heade, _headerGroups$;\n // Find the max depth of the columns:\n // build the leaf column row\n // build each buffer row going up\n // placeholder for non-existent level\n // real column for existing level\n\n let maxDepth = 0;\n const findMaxDepth = function (columns, depth) {\n if (depth === void 0) {\n depth = 1;\n }\n maxDepth = Math.max(maxDepth, depth);\n columns.filter(column => column.getIsVisible()).forEach(column => {\n var _column$columns;\n if ((_column$columns = column.columns) != null && _column$columns.length) {\n findMaxDepth(column.columns, depth + 1);\n }\n }, 0);\n };\n findMaxDepth(allColumns);\n let headerGroups = [];\n const createHeaderGroup = (headersToGroup, depth) => {\n // The header group we are creating\n const headerGroup = {\n depth,\n id: [headerFamily, `${depth}`].filter(Boolean).join('_'),\n headers: []\n };\n\n // The parent columns we're going to scan next\n const pendingParentHeaders = [];\n\n // Scan each column for parents\n headersToGroup.forEach(headerToGroup => {\n // What is the latest (last) parent column?\n\n const latestPendingParentHeader = [...pendingParentHeaders].reverse()[0];\n const isLeafHeader = headerToGroup.column.depth === headerGroup.depth;\n let column;\n let isPlaceholder = false;\n if (isLeafHeader && headerToGroup.column.parent) {\n // The parent header is new\n column = headerToGroup.column.parent;\n } else {\n // The parent header is repeated\n column = headerToGroup.column;\n isPlaceholder = true;\n }\n if (latestPendingParentHeader && (latestPendingParentHeader == null ? void 0 : latestPendingParentHeader.column) === column) {\n // This column is repeated. Add it as a sub header to the next batch\n latestPendingParentHeader.subHeaders.push(headerToGroup);\n } else {\n // This is a new header. Let's create it\n const header = createHeader(table, column, {\n id: [headerFamily, depth, column.id, headerToGroup == null ? void 0 : headerToGroup.id].filter(Boolean).join('_'),\n isPlaceholder,\n placeholderId: isPlaceholder ? `${pendingParentHeaders.filter(d => d.column === column).length}` : undefined,\n depth,\n index: pendingParentHeaders.length\n });\n\n // Add the headerToGroup as a subHeader of the new header\n header.subHeaders.push(headerToGroup);\n // Add the new header to the pendingParentHeaders to get grouped\n // in the next batch\n pendingParentHeaders.push(header);\n }\n headerGroup.headers.push(headerToGroup);\n headerToGroup.headerGroup = headerGroup;\n });\n headerGroups.push(headerGroup);\n if (depth > 0) {\n createHeaderGroup(pendingParentHeaders, depth - 1);\n }\n };\n const bottomHeaders = columnsToGroup.map((column, index) => createHeader(table, column, {\n depth: maxDepth,\n index\n }));\n createHeaderGroup(bottomHeaders, maxDepth - 1);\n headerGroups.reverse();\n\n // headerGroups = headerGroups.filter(headerGroup => {\n // return !headerGroup.headers.every(header => header.isPlaceholder)\n // })\n\n const recurseHeadersForSpans = headers => {\n const filteredHeaders = headers.filter(header => header.column.getIsVisible());\n return filteredHeaders.map(header => {\n let colSpan = 0;\n let rowSpan = 0;\n let childRowSpans = [0];\n if (header.subHeaders && header.subHeaders.length) {\n childRowSpans = [];\n recurseHeadersForSpans(header.subHeaders).forEach(_ref => {\n let {\n colSpan: childColSpan,\n rowSpan: childRowSpan\n } = _ref;\n colSpan += childColSpan;\n childRowSpans.push(childRowSpan);\n });\n } else {\n colSpan = 1;\n }\n const minChildRowSpan = Math.min(...childRowSpans);\n rowSpan = rowSpan + minChildRowSpan;\n header.colSpan = colSpan;\n header.rowSpan = rowSpan;\n return {\n colSpan,\n rowSpan\n };\n });\n };\n recurseHeadersForSpans((_headerGroups$0$heade = (_headerGroups$ = headerGroups[0]) == null ? void 0 : _headerGroups$.headers) != null ? _headerGroups$0$heade : []);\n return headerGroups;\n}\n\nconst createRow = (table, id, original, rowIndex, depth, subRows, parentId) => {\n let row = {\n id,\n index: rowIndex,\n original,\n depth,\n parentId,\n _valuesCache: {},\n _uniqueValuesCache: {},\n getValue: columnId => {\n if (row._valuesCache.hasOwnProperty(columnId)) {\n return row._valuesCache[columnId];\n }\n const column = table.getColumn(columnId);\n if (!(column != null && column.accessorFn)) {\n return undefined;\n }\n row._valuesCache[columnId] = column.accessorFn(row.original, rowIndex);\n return row._valuesCache[columnId];\n },\n getUniqueValues: columnId => {\n if (row._uniqueValuesCache.hasOwnProperty(columnId)) {\n return row._uniqueValuesCache[columnId];\n }\n const column = table.getColumn(columnId);\n if (!(column != null && column.accessorFn)) {\n return undefined;\n }\n if (!column.columnDef.getUniqueValues) {\n row._uniqueValuesCache[columnId] = [row.getValue(columnId)];\n return row._uniqueValuesCache[columnId];\n }\n row._uniqueValuesCache[columnId] = column.columnDef.getUniqueValues(row.original, rowIndex);\n return row._uniqueValuesCache[columnId];\n },\n renderValue: columnId => {\n var _row$getValue;\n return (_row$getValue = row.getValue(columnId)) != null ? _row$getValue : table.options.renderFallbackValue;\n },\n subRows: subRows != null ? subRows : [],\n getLeafRows: () => flattenBy(row.subRows, d => d.subRows),\n getParentRow: () => row.parentId ? table.getRow(row.parentId, true) : undefined,\n getParentRows: () => {\n let parentRows = [];\n let currentRow = row;\n while (true) {\n const parentRow = currentRow.getParentRow();\n if (!parentRow) break;\n parentRows.push(parentRow);\n currentRow = parentRow;\n }\n return parentRows.reverse();\n },\n getAllCells: memo(() => [table.getAllLeafColumns()], leafColumns => {\n return leafColumns.map(column => {\n return createCell(table, row, column, column.id);\n });\n }, getMemoOptions(table.options, 'debugRows', 'getAllCells')),\n _getAllCellsByColumnId: memo(() => [row.getAllCells()], allCells => {\n return allCells.reduce((acc, cell) => {\n acc[cell.column.id] = cell;\n return acc;\n }, {});\n }, getMemoOptions(table.options, 'debugRows', 'getAllCellsByColumnId'))\n };\n for (let i = 0; i < table._features.length; i++) {\n const feature = table._features[i];\n feature == null || feature.createRow == null || feature.createRow(row, table);\n }\n return row;\n};\n\n//\n\nconst ColumnFaceting = {\n createColumn: (column, table) => {\n column._getFacetedRowModel = table.options.getFacetedRowModel && table.options.getFacetedRowModel(table, column.id);\n column.getFacetedRowModel = () => {\n if (!column._getFacetedRowModel) {\n return table.getPreFilteredRowModel();\n }\n return column._getFacetedRowModel();\n };\n column._getFacetedUniqueValues = table.options.getFacetedUniqueValues && table.options.getFacetedUniqueValues(table, column.id);\n column.getFacetedUniqueValues = () => {\n if (!column._getFacetedUniqueValues) {\n return new Map();\n }\n return column._getFacetedUniqueValues();\n };\n column._getFacetedMinMaxValues = table.options.getFacetedMinMaxValues && table.options.getFacetedMinMaxValues(table, column.id);\n column.getFacetedMinMaxValues = () => {\n if (!column._getFacetedMinMaxValues) {\n return undefined;\n }\n return column._getFacetedMinMaxValues();\n };\n }\n};\n\nconst includesString = (row, columnId, filterValue) => {\n var _filterValue$toString, _row$getValue;\n const search = filterValue == null || (_filterValue$toString = filterValue.toString()) == null ? void 0 : _filterValue$toString.toLowerCase();\n return Boolean((_row$getValue = row.getValue(columnId)) == null || (_row$getValue = _row$getValue.toString()) == null || (_row$getValue = _row$getValue.toLowerCase()) == null ? void 0 : _row$getValue.includes(search));\n};\nincludesString.autoRemove = val => testFalsey(val);\nconst includesStringSensitive = (row, columnId, filterValue) => {\n var _row$getValue2;\n return Boolean((_row$getValue2 = row.getValue(columnId)) == null || (_row$getValue2 = _row$getValue2.toString()) == null ? void 0 : _row$getValue2.includes(filterValue));\n};\nincludesStringSensitive.autoRemove = val => testFalsey(val);\nconst equalsString = (row, columnId, filterValue) => {\n var _row$getValue3;\n return ((_row$getValue3 = row.getValue(columnId)) == null || (_row$getValue3 = _row$getValue3.toString()) == null ? void 0 : _row$getValue3.toLowerCase()) === (filterValue == null ? void 0 : filterValue.toLowerCase());\n};\nequalsString.autoRemove = val => testFalsey(val);\nconst arrIncludes = (row, columnId, filterValue) => {\n var _row$getValue4;\n return (_row$getValue4 = row.getValue(columnId)) == null ? void 0 : _row$getValue4.includes(filterValue);\n};\narrIncludes.autoRemove = val => testFalsey(val) || !(val != null && val.length);\nconst arrIncludesAll = (row, columnId, filterValue) => {\n return !filterValue.some(val => {\n var _row$getValue5;\n return !((_row$getValue5 = row.getValue(columnId)) != null && _row$getValue5.includes(val));\n });\n};\narrIncludesAll.autoRemove = val => testFalsey(val) || !(val != null && val.length);\nconst arrIncludesSome = (row, columnId, filterValue) => {\n return filterValue.some(val => {\n var _row$getValue6;\n return (_row$getValue6 = row.getValue(columnId)) == null ? void 0 : _row$getValue6.includes(val);\n });\n};\narrIncludesSome.autoRemove = val => testFalsey(val) || !(val != null && val.length);\nconst equals = (row, columnId, filterValue) => {\n return row.getValue(columnId) === filterValue;\n};\nequals.autoRemove = val => testFalsey(val);\nconst weakEquals = (row, columnId, filterValue) => {\n return row.getValue(columnId) == filterValue;\n};\nweakEquals.autoRemove = val => testFalsey(val);\nconst inNumberRange = (row, columnId, filterValue) => {\n let [min, max] = filterValue;\n const rowValue = row.getValue(columnId);\n return rowValue >= min && rowValue <= max;\n};\ninNumberRange.resolveFilterValue = val => {\n let [unsafeMin, unsafeMax] = val;\n let parsedMin = typeof unsafeMin !== 'number' ? parseFloat(unsafeMin) : unsafeMin;\n let parsedMax = typeof unsafeMax !== 'number' ? parseFloat(unsafeMax) : unsafeMax;\n let min = unsafeMin === null || Number.isNaN(parsedMin) ? -Infinity : parsedMin;\n let max = unsafeMax === null || Number.isNaN(parsedMax) ? Infinity : parsedMax;\n if (min > max) {\n const temp = min;\n min = max;\n max = temp;\n }\n return [min, max];\n};\ninNumberRange.autoRemove = val => testFalsey(val) || testFalsey(val[0]) && testFalsey(val[1]);\n\n// Export\n\nconst filterFns = {\n includesString,\n includesStringSensitive,\n equalsString,\n arrIncludes,\n arrIncludesAll,\n arrIncludesSome,\n equals,\n weakEquals,\n inNumberRange\n};\n// Utils\n\nfunction testFalsey(val) {\n return val === undefined || val === null || val === '';\n}\n\n//\n\nconst ColumnFiltering = {\n getDefaultColumnDef: () => {\n return {\n filterFn: 'auto'\n };\n },\n getInitialState: state => {\n return {\n columnFilters: [],\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnFiltersChange: makeStateUpdater('columnFilters', table),\n filterFromLeafRows: false,\n maxLeafRowFilterDepth: 100\n };\n },\n createColumn: (column, table) => {\n column.getAutoFilterFn = () => {\n const firstRow = table.getCoreRowModel().flatRows[0];\n const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n if (typeof value === 'string') {\n return filterFns.includesString;\n }\n if (typeof value === 'number') {\n return filterFns.inNumberRange;\n }\n if (typeof value === 'boolean') {\n return filterFns.equals;\n }\n if (value !== null && typeof value === 'object') {\n return filterFns.equals;\n }\n if (Array.isArray(value)) {\n return filterFns.arrIncludes;\n }\n return filterFns.weakEquals;\n };\n column.getFilterFn = () => {\n var _table$options$filter, _table$options$filter2;\n return isFunction(column.columnDef.filterFn) ? column.columnDef.filterFn : column.columnDef.filterFn === 'auto' ? column.getAutoFilterFn() : // @ts-ignore\n (_table$options$filter = (_table$options$filter2 = table.options.filterFns) == null ? void 0 : _table$options$filter2[column.columnDef.filterFn]) != null ? _table$options$filter : filterFns[column.columnDef.filterFn];\n };\n column.getCanFilter = () => {\n var _column$columnDef$ena, _table$options$enable, _table$options$enable2;\n return ((_column$columnDef$ena = column.columnDef.enableColumnFilter) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableColumnFilters) != null ? _table$options$enable : true) && ((_table$options$enable2 = table.options.enableFilters) != null ? _table$options$enable2 : true) && !!column.accessorFn;\n };\n column.getIsFiltered = () => column.getFilterIndex() > -1;\n column.getFilterValue = () => {\n var _table$getState$colum;\n return (_table$getState$colum = table.getState().columnFilters) == null || (_table$getState$colum = _table$getState$colum.find(d => d.id === column.id)) == null ? void 0 : _table$getState$colum.value;\n };\n column.getFilterIndex = () => {\n var _table$getState$colum2, _table$getState$colum3;\n return (_table$getState$colum2 = (_table$getState$colum3 = table.getState().columnFilters) == null ? void 0 : _table$getState$colum3.findIndex(d => d.id === column.id)) != null ? _table$getState$colum2 : -1;\n };\n column.setFilterValue = value => {\n table.setColumnFilters(old => {\n const filterFn = column.getFilterFn();\n const previousFilter = old == null ? void 0 : old.find(d => d.id === column.id);\n const newFilter = functionalUpdate(value, previousFilter ? previousFilter.value : undefined);\n\n //\n if (shouldAutoRemoveFilter(filterFn, newFilter, column)) {\n var _old$filter;\n return (_old$filter = old == null ? void 0 : old.filter(d => d.id !== column.id)) != null ? _old$filter : [];\n }\n const newFilterObj = {\n id: column.id,\n value: newFilter\n };\n if (previousFilter) {\n var _old$map;\n return (_old$map = old == null ? void 0 : old.map(d => {\n if (d.id === column.id) {\n return newFilterObj;\n }\n return d;\n })) != null ? _old$map : [];\n }\n if (old != null && old.length) {\n return [...old, newFilterObj];\n }\n return [newFilterObj];\n });\n };\n },\n createRow: (row, _table) => {\n row.columnFilters = {};\n row.columnFiltersMeta = {};\n },\n createTable: table => {\n table.setColumnFilters = updater => {\n const leafColumns = table.getAllLeafColumns();\n const updateFn = old => {\n var _functionalUpdate;\n return (_functionalUpdate = functionalUpdate(updater, old)) == null ? void 0 : _functionalUpdate.filter(filter => {\n const column = leafColumns.find(d => d.id === filter.id);\n if (column) {\n const filterFn = column.getFilterFn();\n if (shouldAutoRemoveFilter(filterFn, filter.value, column)) {\n return false;\n }\n }\n return true;\n });\n };\n table.options.onColumnFiltersChange == null || table.options.onColumnFiltersChange(updateFn);\n };\n table.resetColumnFilters = defaultState => {\n var _table$initialState$c, _table$initialState;\n table.setColumnFilters(defaultState ? [] : (_table$initialState$c = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.columnFilters) != null ? _table$initialState$c : []);\n };\n table.getPreFilteredRowModel = () => table.getCoreRowModel();\n table.getFilteredRowModel = () => {\n if (!table._getFilteredRowModel && table.options.getFilteredRowModel) {\n table._getFilteredRowModel = table.options.getFilteredRowModel(table);\n }\n if (table.options.manualFiltering || !table._getFilteredRowModel) {\n return table.getPreFilteredRowModel();\n }\n return table._getFilteredRowModel();\n };\n }\n};\nfunction shouldAutoRemoveFilter(filterFn, value, column) {\n return (filterFn && filterFn.autoRemove ? filterFn.autoRemove(value, column) : false) || typeof value === 'undefined' || typeof value === 'string' && !value;\n}\n\nconst sum = (columnId, _leafRows, childRows) => {\n // It's faster to just add the aggregations together instead of\n // process leaf nodes individually\n return childRows.reduce((sum, next) => {\n const nextValue = next.getValue(columnId);\n return sum + (typeof nextValue === 'number' ? nextValue : 0);\n }, 0);\n};\nconst min = (columnId, _leafRows, childRows) => {\n let min;\n childRows.forEach(row => {\n const value = row.getValue(columnId);\n if (value != null && (min > value || min === undefined && value >= value)) {\n min = value;\n }\n });\n return min;\n};\nconst max = (columnId, _leafRows, childRows) => {\n let max;\n childRows.forEach(row => {\n const value = row.getValue(columnId);\n if (value != null && (max < value || max === undefined && value >= value)) {\n max = value;\n }\n });\n return max;\n};\nconst extent = (columnId, _leafRows, childRows) => {\n let min;\n let max;\n childRows.forEach(row => {\n const value = row.getValue(columnId);\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n });\n return [min, max];\n};\nconst mean = (columnId, leafRows) => {\n let count = 0;\n let sum = 0;\n leafRows.forEach(row => {\n let value = row.getValue(columnId);\n if (value != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n });\n if (count) return sum / count;\n return;\n};\nconst median = (columnId, leafRows) => {\n if (!leafRows.length) {\n return;\n }\n const values = leafRows.map(row => row.getValue(columnId));\n if (!isNumberArray(values)) {\n return;\n }\n if (values.length === 1) {\n return values[0];\n }\n const mid = Math.floor(values.length / 2);\n const nums = values.sort((a, b) => a - b);\n return values.length % 2 !== 0 ? nums[mid] : (nums[mid - 1] + nums[mid]) / 2;\n};\nconst unique = (columnId, leafRows) => {\n return Array.from(new Set(leafRows.map(d => d.getValue(columnId))).values());\n};\nconst uniqueCount = (columnId, leafRows) => {\n return new Set(leafRows.map(d => d.getValue(columnId))).size;\n};\nconst count = (_columnId, leafRows) => {\n return leafRows.length;\n};\nconst aggregationFns = {\n sum,\n min,\n max,\n extent,\n mean,\n median,\n unique,\n uniqueCount,\n count\n};\n\n//\n\nconst ColumnGrouping = {\n getDefaultColumnDef: () => {\n return {\n aggregatedCell: props => {\n var _toString, _props$getValue;\n return (_toString = (_props$getValue = props.getValue()) == null || _props$getValue.toString == null ? void 0 : _props$getValue.toString()) != null ? _toString : null;\n },\n aggregationFn: 'auto'\n };\n },\n getInitialState: state => {\n return {\n grouping: [],\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onGroupingChange: makeStateUpdater('grouping', table),\n groupedColumnMode: 'reorder'\n };\n },\n createColumn: (column, table) => {\n column.toggleGrouping = () => {\n table.setGrouping(old => {\n // Find any existing grouping for this column\n if (old != null && old.includes(column.id)) {\n return old.filter(d => d !== column.id);\n }\n return [...(old != null ? old : []), column.id];\n });\n };\n column.getCanGroup = () => {\n var _column$columnDef$ena, _table$options$enable;\n return ((_column$columnDef$ena = column.columnDef.enableGrouping) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableGrouping) != null ? _table$options$enable : true) && (!!column.accessorFn || !!column.columnDef.getGroupingValue);\n };\n column.getIsGrouped = () => {\n var _table$getState$group;\n return (_table$getState$group = table.getState().grouping) == null ? void 0 : _table$getState$group.includes(column.id);\n };\n column.getGroupedIndex = () => {\n var _table$getState$group2;\n return (_table$getState$group2 = table.getState().grouping) == null ? void 0 : _table$getState$group2.indexOf(column.id);\n };\n column.getToggleGroupingHandler = () => {\n const canGroup = column.getCanGroup();\n return () => {\n if (!canGroup) return;\n column.toggleGrouping();\n };\n };\n column.getAutoAggregationFn = () => {\n const firstRow = table.getCoreRowModel().flatRows[0];\n const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n if (typeof value === 'number') {\n return aggregationFns.sum;\n }\n if (Object.prototype.toString.call(value) === '[object Date]') {\n return aggregationFns.extent;\n }\n };\n column.getAggregationFn = () => {\n var _table$options$aggreg, _table$options$aggreg2;\n if (!column) {\n throw new Error();\n }\n return isFunction(column.columnDef.aggregationFn) ? column.columnDef.aggregationFn : column.columnDef.aggregationFn === 'auto' ? column.getAutoAggregationFn() : (_table$options$aggreg = (_table$options$aggreg2 = table.options.aggregationFns) == null ? void 0 : _table$options$aggreg2[column.columnDef.aggregationFn]) != null ? _table$options$aggreg : aggregationFns[column.columnDef.aggregationFn];\n };\n },\n createTable: table => {\n table.setGrouping = updater => table.options.onGroupingChange == null ? void 0 : table.options.onGroupingChange(updater);\n table.resetGrouping = defaultState => {\n var _table$initialState$g, _table$initialState;\n table.setGrouping(defaultState ? [] : (_table$initialState$g = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.grouping) != null ? _table$initialState$g : []);\n };\n table.getPreGroupedRowModel = () => table.getFilteredRowModel();\n table.getGroupedRowModel = () => {\n if (!table._getGroupedRowModel && table.options.getGroupedRowModel) {\n table._getGroupedRowModel = table.options.getGroupedRowModel(table);\n }\n if (table.options.manualGrouping || !table._getGroupedRowModel) {\n return table.getPreGroupedRowModel();\n }\n return table._getGroupedRowModel();\n };\n },\n createRow: (row, table) => {\n row.getIsGrouped = () => !!row.groupingColumnId;\n row.getGroupingValue = columnId => {\n if (row._groupingValuesCache.hasOwnProperty(columnId)) {\n return row._groupingValuesCache[columnId];\n }\n const column = table.getColumn(columnId);\n if (!(column != null && column.columnDef.getGroupingValue)) {\n return row.getValue(columnId);\n }\n row._groupingValuesCache[columnId] = column.columnDef.getGroupingValue(row.original);\n return row._groupingValuesCache[columnId];\n };\n row._groupingValuesCache = {};\n },\n createCell: (cell, column, row, table) => {\n cell.getIsGrouped = () => column.getIsGrouped() && column.id === row.groupingColumnId;\n cell.getIsPlaceholder = () => !cell.getIsGrouped() && column.getIsGrouped();\n cell.getIsAggregated = () => {\n var _row$subRows;\n return !cell.getIsGrouped() && !cell.getIsPlaceholder() && !!((_row$subRows = row.subRows) != null && _row$subRows.length);\n };\n }\n};\nfunction orderColumns(leafColumns, grouping, groupedColumnMode) {\n if (!(grouping != null && grouping.length) || !groupedColumnMode) {\n return leafColumns;\n }\n const nonGroupingColumns = leafColumns.filter(col => !grouping.includes(col.id));\n if (groupedColumnMode === 'remove') {\n return nonGroupingColumns;\n }\n const groupingColumns = grouping.map(g => leafColumns.find(col => col.id === g)).filter(Boolean);\n return [...groupingColumns, ...nonGroupingColumns];\n}\n\n//\n\nconst ColumnOrdering = {\n getInitialState: state => {\n return {\n columnOrder: [],\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnOrderChange: makeStateUpdater('columnOrder', table)\n };\n },\n createColumn: (column, table) => {\n column.getIndex = memo(position => [_getVisibleLeafColumns(table, position)], columns => columns.findIndex(d => d.id === column.id), getMemoOptions(table.options, 'debugColumns', 'getIndex'));\n column.getIsFirstColumn = position => {\n var _columns$;\n const columns = _getVisibleLeafColumns(table, position);\n return ((_columns$ = columns[0]) == null ? void 0 : _columns$.id) === column.id;\n };\n column.getIsLastColumn = position => {\n var _columns;\n const columns = _getVisibleLeafColumns(table, position);\n return ((_columns = columns[columns.length - 1]) == null ? void 0 : _columns.id) === column.id;\n };\n },\n createTable: table => {\n table.setColumnOrder = updater => table.options.onColumnOrderChange == null ? void 0 : table.options.onColumnOrderChange(updater);\n table.resetColumnOrder = defaultState => {\n var _table$initialState$c;\n table.setColumnOrder(defaultState ? [] : (_table$initialState$c = table.initialState.columnOrder) != null ? _table$initialState$c : []);\n };\n table._getOrderColumnsFn = memo(() => [table.getState().columnOrder, table.getState().grouping, table.options.groupedColumnMode], (columnOrder, grouping, groupedColumnMode) => columns => {\n // Sort grouped columns to the start of the column list\n // before the headers are built\n let orderedColumns = [];\n\n // If there is no order, return the normal columns\n if (!(columnOrder != null && columnOrder.length)) {\n orderedColumns = columns;\n } else {\n const columnOrderCopy = [...columnOrder];\n\n // If there is an order, make a copy of the columns\n const columnsCopy = [...columns];\n\n // And make a new ordered array of the columns\n\n // Loop over the columns and place them in order into the new array\n while (columnsCopy.length && columnOrderCopy.length) {\n const targetColumnId = columnOrderCopy.shift();\n const foundIndex = columnsCopy.findIndex(d => d.id === targetColumnId);\n if (foundIndex > -1) {\n orderedColumns.push(columnsCopy.splice(foundIndex, 1)[0]);\n }\n }\n\n // If there are any columns left, add them to the end\n orderedColumns = [...orderedColumns, ...columnsCopy];\n }\n return orderColumns(orderedColumns, grouping, groupedColumnMode);\n }, getMemoOptions(table.options, 'debugTable', '_getOrderColumnsFn'));\n }\n};\n\n//\n\nconst getDefaultColumnPinningState = () => ({\n left: [],\n right: []\n});\nconst ColumnPinning = {\n getInitialState: state => {\n return {\n columnPinning: getDefaultColumnPinningState(),\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnPinningChange: makeStateUpdater('columnPinning', table)\n };\n },\n createColumn: (column, table) => {\n column.pin = position => {\n const columnIds = column.getLeafColumns().map(d => d.id).filter(Boolean);\n table.setColumnPinning(old => {\n var _old$left3, _old$right3;\n if (position === 'right') {\n var _old$left, _old$right;\n return {\n left: ((_old$left = old == null ? void 0 : old.left) != null ? _old$left : []).filter(d => !(columnIds != null && columnIds.includes(d))),\n right: [...((_old$right = old == null ? void 0 : old.right) != null ? _old$right : []).filter(d => !(columnIds != null && columnIds.includes(d))), ...columnIds]\n };\n }\n if (position === 'left') {\n var _old$left2, _old$right2;\n return {\n left: [...((_old$left2 = old == null ? void 0 : old.left) != null ? _old$left2 : []).filter(d => !(columnIds != null && columnIds.includes(d))), ...columnIds],\n right: ((_old$right2 = old == null ? void 0 : old.right) != null ? _old$right2 : []).filter(d => !(columnIds != null && columnIds.includes(d)))\n };\n }\n return {\n left: ((_old$left3 = old == null ? void 0 : old.left) != null ? _old$left3 : []).filter(d => !(columnIds != null && columnIds.includes(d))),\n right: ((_old$right3 = old == null ? void 0 : old.right) != null ? _old$right3 : []).filter(d => !(columnIds != null && columnIds.includes(d)))\n };\n });\n };\n column.getCanPin = () => {\n const leafColumns = column.getLeafColumns();\n return leafColumns.some(d => {\n var _d$columnDef$enablePi, _ref, _table$options$enable;\n return ((_d$columnDef$enablePi = d.columnDef.enablePinning) != null ? _d$columnDef$enablePi : true) && ((_ref = (_table$options$enable = table.options.enableColumnPinning) != null ? _table$options$enable : table.options.enablePinning) != null ? _ref : true);\n });\n };\n column.getIsPinned = () => {\n const leafColumnIds = column.getLeafColumns().map(d => d.id);\n const {\n left,\n right\n } = table.getState().columnPinning;\n const isLeft = leafColumnIds.some(d => left == null ? void 0 : left.includes(d));\n const isRight = leafColumnIds.some(d => right == null ? void 0 : right.includes(d));\n return isLeft ? 'left' : isRight ? 'right' : false;\n };\n column.getPinnedIndex = () => {\n var _table$getState$colum, _table$getState$colum2;\n const position = column.getIsPinned();\n return position ? (_table$getState$colum = (_table$getState$colum2 = table.getState().columnPinning) == null || (_table$getState$colum2 = _table$getState$colum2[position]) == null ? void 0 : _table$getState$colum2.indexOf(column.id)) != null ? _table$getState$colum : -1 : 0;\n };\n },\n createRow: (row, table) => {\n row.getCenterVisibleCells = memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allCells, left, right) => {\n const leftAndRight = [...(left != null ? left : []), ...(right != null ? right : [])];\n return allCells.filter(d => !leftAndRight.includes(d.column.id));\n }, getMemoOptions(table.options, 'debugRows', 'getCenterVisibleCells'));\n row.getLeftVisibleCells = memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.left], (allCells, left) => {\n const cells = (left != null ? left : []).map(columnId => allCells.find(cell => cell.column.id === columnId)).filter(Boolean).map(d => ({\n ...d,\n position: 'left'\n }));\n return cells;\n }, getMemoOptions(table.options, 'debugRows', 'getLeftVisibleCells'));\n row.getRightVisibleCells = memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.right], (allCells, right) => {\n const cells = (right != null ? right : []).map(columnId => allCells.find(cell => cell.column.id === columnId)).filter(Boolean).map(d => ({\n ...d,\n position: 'right'\n }));\n return cells;\n }, getMemoOptions(table.options, 'debugRows', 'getRightVisibleCells'));\n },\n createTable: table => {\n table.setColumnPinning = updater => table.options.onColumnPinningChange == null ? void 0 : table.options.onColumnPinningChange(updater);\n table.resetColumnPinning = defaultState => {\n var _table$initialState$c, _table$initialState;\n return table.setColumnPinning(defaultState ? getDefaultColumnPinningState() : (_table$initialState$c = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.columnPinning) != null ? _table$initialState$c : getDefaultColumnPinningState());\n };\n table.getIsSomeColumnsPinned = position => {\n var _pinningState$positio;\n const pinningState = table.getState().columnPinning;\n if (!position) {\n var _pinningState$left, _pinningState$right;\n return Boolean(((_pinningState$left = pinningState.left) == null ? void 0 : _pinningState$left.length) || ((_pinningState$right = pinningState.right) == null ? void 0 : _pinningState$right.length));\n }\n return Boolean((_pinningState$positio = pinningState[position]) == null ? void 0 : _pinningState$positio.length);\n };\n table.getLeftLeafColumns = memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.left], (allColumns, left) => {\n return (left != null ? left : []).map(columnId => allColumns.find(column => column.id === columnId)).filter(Boolean);\n }, getMemoOptions(table.options, 'debugColumns', 'getLeftLeafColumns'));\n table.getRightLeafColumns = memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.right], (allColumns, right) => {\n return (right != null ? right : []).map(columnId => allColumns.find(column => column.id === columnId)).filter(Boolean);\n }, getMemoOptions(table.options, 'debugColumns', 'getRightLeafColumns'));\n table.getCenterLeafColumns = memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, left, right) => {\n const leftAndRight = [...(left != null ? left : []), ...(right != null ? right : [])];\n return allColumns.filter(d => !leftAndRight.includes(d.id));\n }, getMemoOptions(table.options, 'debugColumns', 'getCenterLeafColumns'));\n }\n};\n\n//\n\n//\n\nconst defaultColumnSizing = {\n size: 150,\n minSize: 20,\n maxSize: Number.MAX_SAFE_INTEGER\n};\nconst getDefaultColumnSizingInfoState = () => ({\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n isResizingColumn: false,\n columnSizingStart: []\n});\nconst ColumnSizing = {\n getDefaultColumnDef: () => {\n return defaultColumnSizing;\n },\n getInitialState: state => {\n return {\n columnSizing: {},\n columnSizingInfo: getDefaultColumnSizingInfoState(),\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n columnResizeMode: 'onEnd',\n columnResizeDirection: 'ltr',\n onColumnSizingChange: makeStateUpdater('columnSizing', table),\n onColumnSizingInfoChange: makeStateUpdater('columnSizingInfo', table)\n };\n },\n createColumn: (column, table) => {\n column.getSize = () => {\n var _column$columnDef$min, _ref, _column$columnDef$max;\n const columnSize = table.getState().columnSizing[column.id];\n return Math.min(Math.max((_column$columnDef$min = column.columnDef.minSize) != null ? _column$columnDef$min : defaultColumnSizing.minSize, (_ref = columnSize != null ? columnSize : column.columnDef.size) != null ? _ref : defaultColumnSizing.size), (_column$columnDef$max = column.columnDef.maxSize) != null ? _column$columnDef$max : defaultColumnSizing.maxSize);\n };\n column.getStart = memo(position => [position, _getVisibleLeafColumns(table, position), table.getState().columnSizing], (position, columns) => columns.slice(0, column.getIndex(position)).reduce((sum, column) => sum + column.getSize(), 0), getMemoOptions(table.options, 'debugColumns', 'getStart'));\n column.getAfter = memo(position => [position, _getVisibleLeafColumns(table, position), table.getState().columnSizing], (position, columns) => columns.slice(column.getIndex(position) + 1).reduce((sum, column) => sum + column.getSize(), 0), getMemoOptions(table.options, 'debugColumns', 'getAfter'));\n column.resetSize = () => {\n table.setColumnSizing(_ref2 => {\n let {\n [column.id]: _,\n ...rest\n } = _ref2;\n return rest;\n });\n };\n column.getCanResize = () => {\n var _column$columnDef$ena, _table$options$enable;\n return ((_column$columnDef$ena = column.columnDef.enableResizing) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableColumnResizing) != null ? _table$options$enable : true);\n };\n column.getIsResizing = () => {\n return table.getState().columnSizingInfo.isResizingColumn === column.id;\n };\n },\n createHeader: (header, table) => {\n header.getSize = () => {\n let sum = 0;\n const recurse = header => {\n if (header.subHeaders.length) {\n header.subHeaders.forEach(recurse);\n } else {\n var _header$column$getSiz;\n sum += (_header$column$getSiz = header.column.getSize()) != null ? _header$column$getSiz : 0;\n }\n };\n recurse(header);\n return sum;\n };\n header.getStart = () => {\n if (header.index > 0) {\n const prevSiblingHeader = header.headerGroup.headers[header.index - 1];\n return prevSiblingHeader.getStart() + prevSiblingHeader.getSize();\n }\n return 0;\n };\n header.getResizeHandler = _contextDocument => {\n const column = table.getColumn(header.column.id);\n const canResize = column == null ? void 0 : column.getCanResize();\n return e => {\n if (!column || !canResize) {\n return;\n }\n e.persist == null || e.persist();\n if (isTouchStartEvent(e)) {\n // lets not respond to multiple touches (e.g. 2 or 3 fingers)\n if (e.touches && e.touches.length > 1) {\n return;\n }\n }\n const startSize = header.getSize();\n const columnSizingStart = header ? header.getLeafHeaders().map(d => [d.column.id, d.column.getSize()]) : [[column.id, column.getSize()]];\n const clientX = isTouchStartEvent(e) ? Math.round(e.touches[0].clientX) : e.clientX;\n const newColumnSizing = {};\n const updateOffset = (eventType, clientXPos) => {\n if (typeof clientXPos !== 'number') {\n return;\n }\n table.setColumnSizingInfo(old => {\n var _old$startOffset, _old$startSize;\n const deltaDirection = table.options.columnResizeDirection === 'rtl' ? -1 : 1;\n const deltaOffset = (clientXPos - ((_old$startOffset = old == null ? void 0 : old.startOffset) != null ? _old$startOffset : 0)) * deltaDirection;\n const deltaPercentage = Math.max(deltaOffset / ((_old$startSize = old == null ? void 0 : old.startSize) != null ? _old$startSize : 0), -0.999999);\n old.columnSizingStart.forEach(_ref3 => {\n let [columnId, headerSize] = _ref3;\n newColumnSizing[columnId] = Math.round(Math.max(headerSize + headerSize * deltaPercentage, 0) * 100) / 100;\n });\n return {\n ...old,\n deltaOffset,\n deltaPercentage\n };\n });\n if (table.options.columnResizeMode === 'onChange' || eventType === 'end') {\n table.setColumnSizing(old => ({\n ...old,\n ...newColumnSizing\n }));\n }\n };\n const onMove = clientXPos => updateOffset('move', clientXPos);\n const onEnd = clientXPos => {\n updateOffset('end', clientXPos);\n table.setColumnSizingInfo(old => ({\n ...old,\n isResizingColumn: false,\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n columnSizingStart: []\n }));\n };\n const contextDocument = _contextDocument || typeof document !== 'undefined' ? document : null;\n const mouseEvents = {\n moveHandler: e => onMove(e.clientX),\n upHandler: e => {\n contextDocument == null || contextDocument.removeEventListener('mousemove', mouseEvents.moveHandler);\n contextDocument == null || contextDocument.removeEventListener('mouseup', mouseEvents.upHandler);\n onEnd(e.clientX);\n }\n };\n const touchEvents = {\n moveHandler: e => {\n if (e.cancelable) {\n e.preventDefault();\n e.stopPropagation();\n }\n onMove(e.touches[0].clientX);\n return false;\n },\n upHandler: e => {\n var _e$touches$;\n contextDocument == null || contextDocument.removeEventListener('touchmove', touchEvents.moveHandler);\n contextDocument == null || contextDocument.removeEventListener('touchend', touchEvents.upHandler);\n if (e.cancelable) {\n e.preventDefault();\n e.stopPropagation();\n }\n onEnd((_e$touches$ = e.touches[0]) == null ? void 0 : _e$touches$.clientX);\n }\n };\n const passiveIfSupported = passiveEventSupported() ? {\n passive: false\n } : false;\n if (isTouchStartEvent(e)) {\n contextDocument == null || contextDocument.addEventListener('touchmove', touchEvents.moveHandler, passiveIfSupported);\n contextDocument == null || contextDocument.addEventListener('touchend', touchEvents.upHandler, passiveIfSupported);\n } else {\n contextDocument == null || contextDocument.addEventListener('mousemove', mouseEvents.moveHandler, passiveIfSupported);\n contextDocument == null || contextDocument.addEventListener('mouseup', mouseEvents.upHandler, passiveIfSupported);\n }\n table.setColumnSizingInfo(old => ({\n ...old,\n startOffset: clientX,\n startSize,\n deltaOffset: 0,\n deltaPercentage: 0,\n columnSizingStart,\n isResizingColumn: column.id\n }));\n };\n };\n },\n createTable: table => {\n table.setColumnSizing = updater => table.options.onColumnSizingChange == null ? void 0 : table.options.onColumnSizingChange(updater);\n table.setColumnSizingInfo = updater => table.options.onColumnSizingInfoChange == null ? void 0 : table.options.onColumnSizingInfoChange(updater);\n table.resetColumnSizing = defaultState => {\n var _table$initialState$c;\n table.setColumnSizing(defaultState ? {} : (_table$initialState$c = table.initialState.columnSizing) != null ? _table$initialState$c : {});\n };\n table.resetHeaderSizeInfo = defaultState => {\n var _table$initialState$c2;\n table.setColumnSizingInfo(defaultState ? getDefaultColumnSizingInfoState() : (_table$initialState$c2 = table.initialState.columnSizingInfo) != null ? _table$initialState$c2 : getDefaultColumnSizingInfoState());\n };\n table.getTotalSize = () => {\n var _table$getHeaderGroup, _table$getHeaderGroup2;\n return (_table$getHeaderGroup = (_table$getHeaderGroup2 = table.getHeaderGroups()[0]) == null ? void 0 : _table$getHeaderGroup2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getHeaderGroup : 0;\n };\n table.getLeftTotalSize = () => {\n var _table$getLeftHeaderG, _table$getLeftHeaderG2;\n return (_table$getLeftHeaderG = (_table$getLeftHeaderG2 = table.getLeftHeaderGroups()[0]) == null ? void 0 : _table$getLeftHeaderG2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getLeftHeaderG : 0;\n };\n table.getCenterTotalSize = () => {\n var _table$getCenterHeade, _table$getCenterHeade2;\n return (_table$getCenterHeade = (_table$getCenterHeade2 = table.getCenterHeaderGroups()[0]) == null ? void 0 : _table$getCenterHeade2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getCenterHeade : 0;\n };\n table.getRightTotalSize = () => {\n var _table$getRightHeader, _table$getRightHeader2;\n return (_table$getRightHeader = (_table$getRightHeader2 = table.getRightHeaderGroups()[0]) == null ? void 0 : _table$getRightHeader2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getRightHeader : 0;\n };\n }\n};\nlet passiveSupported = null;\nfunction passiveEventSupported() {\n if (typeof passiveSupported === 'boolean') return passiveSupported;\n let supported = false;\n try {\n const options = {\n get passive() {\n supported = true;\n return false;\n }\n };\n const noop = () => {};\n window.addEventListener('test', noop, options);\n window.removeEventListener('test', noop);\n } catch (err) {\n supported = false;\n }\n passiveSupported = supported;\n return passiveSupported;\n}\nfunction isTouchStartEvent(e) {\n return e.type === 'touchstart';\n}\n\n//\n\nconst ColumnVisibility = {\n getInitialState: state => {\n return {\n columnVisibility: {},\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnVisibilityChange: makeStateUpdater('columnVisibility', table)\n };\n },\n createColumn: (column, table) => {\n column.toggleVisibility = value => {\n if (column.getCanHide()) {\n table.setColumnVisibility(old => ({\n ...old,\n [column.id]: value != null ? value : !column.getIsVisible()\n }));\n }\n };\n column.getIsVisible = () => {\n var _ref, _table$getState$colum;\n const childColumns = column.columns;\n return (_ref = childColumns.length ? childColumns.some(c => c.getIsVisible()) : (_table$getState$colum = table.getState().columnVisibility) == null ? void 0 : _table$getState$colum[column.id]) != null ? _ref : true;\n };\n column.getCanHide = () => {\n var _column$columnDef$ena, _table$options$enable;\n return ((_column$columnDef$ena = column.columnDef.enableHiding) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableHiding) != null ? _table$options$enable : true);\n };\n column.getToggleVisibilityHandler = () => {\n return e => {\n column.toggleVisibility == null || column.toggleVisibility(e.target.checked);\n };\n };\n },\n createRow: (row, table) => {\n row._getAllVisibleCells = memo(() => [row.getAllCells(), table.getState().columnVisibility], cells => {\n return cells.filter(cell => cell.column.getIsVisible());\n }, getMemoOptions(table.options, 'debugRows', '_getAllVisibleCells'));\n row.getVisibleCells = memo(() => [row.getLeftVisibleCells(), row.getCenterVisibleCells(), row.getRightVisibleCells()], (left, center, right) => [...left, ...center, ...right], getMemoOptions(table.options, 'debugRows', 'getVisibleCells'));\n },\n createTable: table => {\n const makeVisibleColumnsMethod = (key, getColumns) => {\n return memo(() => [getColumns(), getColumns().filter(d => d.getIsVisible()).map(d => d.id).join('_')], columns => {\n return columns.filter(d => d.getIsVisible == null ? void 0 : d.getIsVisible());\n }, getMemoOptions(table.options, 'debugColumns', key));\n };\n table.getVisibleFlatColumns = makeVisibleColumnsMethod('getVisibleFlatColumns', () => table.getAllFlatColumns());\n table.getVisibleLeafColumns = makeVisibleColumnsMethod('getVisibleLeafColumns', () => table.getAllLeafColumns());\n table.getLeftVisibleLeafColumns = makeVisibleColumnsMethod('getLeftVisibleLeafColumns', () => table.getLeftLeafColumns());\n table.getRightVisibleLeafColumns = makeVisibleColumnsMethod('getRightVisibleLeafColumns', () => table.getRightLeafColumns());\n table.getCenterVisibleLeafColumns = makeVisibleColumnsMethod('getCenterVisibleLeafColumns', () => table.getCenterLeafColumns());\n table.setColumnVisibility = updater => table.options.onColumnVisibilityChange == null ? void 0 : table.options.onColumnVisibilityChange(updater);\n table.resetColumnVisibility = defaultState => {\n var _table$initialState$c;\n table.setColumnVisibility(defaultState ? {} : (_table$initialState$c = table.initialState.columnVisibility) != null ? _table$initialState$c : {});\n };\n table.toggleAllColumnsVisible = value => {\n var _value;\n value = (_value = value) != null ? _value : !table.getIsAllColumnsVisible();\n table.setColumnVisibility(table.getAllLeafColumns().reduce((obj, column) => ({\n ...obj,\n [column.id]: !value ? !(column.getCanHide != null && column.getCanHide()) : value\n }), {}));\n };\n table.getIsAllColumnsVisible = () => !table.getAllLeafColumns().some(column => !(column.getIsVisible != null && column.getIsVisible()));\n table.getIsSomeColumnsVisible = () => table.getAllLeafColumns().some(column => column.getIsVisible == null ? void 0 : column.getIsVisible());\n table.getToggleAllColumnsVisibilityHandler = () => {\n return e => {\n var _target;\n table.toggleAllColumnsVisible((_target = e.target) == null ? void 0 : _target.checked);\n };\n };\n }\n};\nfunction _getVisibleLeafColumns(table, position) {\n return !position ? table.getVisibleLeafColumns() : position === 'center' ? table.getCenterVisibleLeafColumns() : position === 'left' ? table.getLeftVisibleLeafColumns() : table.getRightVisibleLeafColumns();\n}\n\n//\n\nconst GlobalFaceting = {\n createTable: table => {\n table._getGlobalFacetedRowModel = table.options.getFacetedRowModel && table.options.getFacetedRowModel(table, '__global__');\n table.getGlobalFacetedRowModel = () => {\n if (table.options.manualFiltering || !table._getGlobalFacetedRowModel) {\n return table.getPreFilteredRowModel();\n }\n return table._getGlobalFacetedRowModel();\n };\n table._getGlobalFacetedUniqueValues = table.options.getFacetedUniqueValues && table.options.getFacetedUniqueValues(table, '__global__');\n table.getGlobalFacetedUniqueValues = () => {\n if (!table._getGlobalFacetedUniqueValues) {\n return new Map();\n }\n return table._getGlobalFacetedUniqueValues();\n };\n table._getGlobalFacetedMinMaxValues = table.options.getFacetedMinMaxValues && table.options.getFacetedMinMaxValues(table, '__global__');\n table.getGlobalFacetedMinMaxValues = () => {\n if (!table._getGlobalFacetedMinMaxValues) {\n return;\n }\n return table._getGlobalFacetedMinMaxValues();\n };\n }\n};\n\n//\n\nconst GlobalFiltering = {\n getInitialState: state => {\n return {\n globalFilter: undefined,\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onGlobalFilterChange: makeStateUpdater('globalFilter', table),\n globalFilterFn: 'auto',\n getColumnCanGlobalFilter: column => {\n var _table$getCoreRowMode;\n const value = (_table$getCoreRowMode = table.getCoreRowModel().flatRows[0]) == null || (_table$getCoreRowMode = _table$getCoreRowMode._getAllCellsByColumnId()[column.id]) == null ? void 0 : _table$getCoreRowMode.getValue();\n return typeof value === 'string' || typeof value === 'number';\n }\n };\n },\n createColumn: (column, table) => {\n column.getCanGlobalFilter = () => {\n var _column$columnDef$ena, _table$options$enable, _table$options$enable2, _table$options$getCol;\n return ((_column$columnDef$ena = column.columnDef.enableGlobalFilter) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableGlobalFilter) != null ? _table$options$enable : true) && ((_table$options$enable2 = table.options.enableFilters) != null ? _table$options$enable2 : true) && ((_table$options$getCol = table.options.getColumnCanGlobalFilter == null ? void 0 : table.options.getColumnCanGlobalFilter(column)) != null ? _table$options$getCol : true) && !!column.accessorFn;\n };\n },\n createTable: table => {\n table.getGlobalAutoFilterFn = () => {\n return filterFns.includesString;\n };\n table.getGlobalFilterFn = () => {\n var _table$options$filter, _table$options$filter2;\n const {\n globalFilterFn: globalFilterFn\n } = table.options;\n return isFunction(globalFilterFn) ? globalFilterFn : globalFilterFn === 'auto' ? table.getGlobalAutoFilterFn() : (_table$options$filter = (_table$options$filter2 = table.options.filterFns) == null ? void 0 : _table$options$filter2[globalFilterFn]) != null ? _table$options$filter : filterFns[globalFilterFn];\n };\n table.setGlobalFilter = updater => {\n table.options.onGlobalFilterChange == null || table.options.onGlobalFilterChange(updater);\n };\n table.resetGlobalFilter = defaultState => {\n table.setGlobalFilter(defaultState ? undefined : table.initialState.globalFilter);\n };\n }\n};\n\n//\n\nconst RowExpanding = {\n getInitialState: state => {\n return {\n expanded: {},\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onExpandedChange: makeStateUpdater('expanded', table),\n paginateExpandedRows: true\n };\n },\n createTable: table => {\n let registered = false;\n let queued = false;\n table._autoResetExpanded = () => {\n var _ref, _table$options$autoRe;\n if (!registered) {\n table._queue(() => {\n registered = true;\n });\n return;\n }\n if ((_ref = (_table$options$autoRe = table.options.autoResetAll) != null ? _table$options$autoRe : table.options.autoResetExpanded) != null ? _ref : !table.options.manualExpanding) {\n if (queued) return;\n queued = true;\n table._queue(() => {\n table.resetExpanded();\n queued = false;\n });\n }\n };\n table.setExpanded = updater => table.options.onExpandedChange == null ? void 0 : table.options.onExpandedChange(updater);\n table.toggleAllRowsExpanded = expanded => {\n if (expanded != null ? expanded : !table.getIsAllRowsExpanded()) {\n table.setExpanded(true);\n } else {\n table.setExpanded({});\n }\n };\n table.resetExpanded = defaultState => {\n var _table$initialState$e, _table$initialState;\n table.setExpanded(defaultState ? {} : (_table$initialState$e = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.expanded) != null ? _table$initialState$e : {});\n };\n table.getCanSomeRowsExpand = () => {\n return table.getPrePaginationRowModel().flatRows.some(row => row.getCanExpand());\n };\n table.getToggleAllRowsExpandedHandler = () => {\n return e => {\n e.persist == null || e.persist();\n table.toggleAllRowsExpanded();\n };\n };\n table.getIsSomeRowsExpanded = () => {\n const expanded = table.getState().expanded;\n return expanded === true || Object.values(expanded).some(Boolean);\n };\n table.getIsAllRowsExpanded = () => {\n const expanded = table.getState().expanded;\n\n // If expanded is true, save some cycles and return true\n if (typeof expanded === 'boolean') {\n return expanded === true;\n }\n if (!Object.keys(expanded).length) {\n return false;\n }\n\n // If any row is not expanded, return false\n if (table.getRowModel().flatRows.some(row => !row.getIsExpanded())) {\n return false;\n }\n\n // They must all be expanded :shrug:\n return true;\n };\n table.getExpandedDepth = () => {\n let maxDepth = 0;\n const rowIds = table.getState().expanded === true ? Object.keys(table.getRowModel().rowsById) : Object.keys(table.getState().expanded);\n rowIds.forEach(id => {\n const splitId = id.split('.');\n maxDepth = Math.max(maxDepth, splitId.length);\n });\n return maxDepth;\n };\n table.getPreExpandedRowModel = () => table.getSortedRowModel();\n table.getExpandedRowModel = () => {\n if (!table._getExpandedRowModel && table.options.getExpandedRowModel) {\n table._getExpandedRowModel = table.options.getExpandedRowModel(table);\n }\n if (table.options.manualExpanding || !table._getExpandedRowModel) {\n return table.getPreExpandedRowModel();\n }\n return table._getExpandedRowModel();\n };\n },\n createRow: (row, table) => {\n row.toggleExpanded = expanded => {\n table.setExpanded(old => {\n var _expanded;\n const exists = old === true ? true : !!(old != null && old[row.id]);\n let oldExpanded = {};\n if (old === true) {\n Object.keys(table.getRowModel().rowsById).forEach(rowId => {\n oldExpanded[rowId] = true;\n });\n } else {\n oldExpanded = old;\n }\n expanded = (_expanded = expanded) != null ? _expanded : !exists;\n if (!exists && expanded) {\n return {\n ...oldExpanded,\n [row.id]: true\n };\n }\n if (exists && !expanded) {\n const {\n [row.id]: _,\n ...rest\n } = oldExpanded;\n return rest;\n }\n return old;\n });\n };\n row.getIsExpanded = () => {\n var _table$options$getIsR;\n const expanded = table.getState().expanded;\n return !!((_table$options$getIsR = table.options.getIsRowExpanded == null ? void 0 : table.options.getIsRowExpanded(row)) != null ? _table$options$getIsR : expanded === true || (expanded == null ? void 0 : expanded[row.id]));\n };\n row.getCanExpand = () => {\n var _table$options$getRow, _table$options$enable, _row$subRows;\n return (_table$options$getRow = table.options.getRowCanExpand == null ? void 0 : table.options.getRowCanExpand(row)) != null ? _table$options$getRow : ((_table$options$enable = table.options.enableExpanding) != null ? _table$options$enable : true) && !!((_row$subRows = row.subRows) != null && _row$subRows.length);\n };\n row.getIsAllParentsExpanded = () => {\n let isFullyExpanded = true;\n let currentRow = row;\n while (isFullyExpanded && currentRow.parentId) {\n currentRow = table.getRow(currentRow.parentId, true);\n isFullyExpanded = currentRow.getIsExpanded();\n }\n return isFullyExpanded;\n };\n row.getToggleExpandedHandler = () => {\n const canExpand = row.getCanExpand();\n return () => {\n if (!canExpand) return;\n row.toggleExpanded();\n };\n };\n }\n};\n\n//\n\nconst defaultPageIndex = 0;\nconst defaultPageSize = 10;\nconst getDefaultPaginationState = () => ({\n pageIndex: defaultPageIndex,\n pageSize: defaultPageSize\n});\nconst RowPagination = {\n getInitialState: state => {\n return {\n ...state,\n pagination: {\n ...getDefaultPaginationState(),\n ...(state == null ? void 0 : state.pagination)\n }\n };\n },\n getDefaultOptions: table => {\n return {\n onPaginationChange: makeStateUpdater('pagination', table)\n };\n },\n createTable: table => {\n let registered = false;\n let queued = false;\n table._autoResetPageIndex = () => {\n var _ref, _table$options$autoRe;\n if (!registered) {\n table._queue(() => {\n registered = true;\n });\n return;\n }\n if ((_ref = (_table$options$autoRe = table.options.autoResetAll) != null ? _table$options$autoRe : table.options.autoResetPageIndex) != null ? _ref : !table.options.manualPagination) {\n if (queued) return;\n queued = true;\n table._queue(() => {\n table.resetPageIndex();\n queued = false;\n });\n }\n };\n table.setPagination = updater => {\n const safeUpdater = old => {\n let newState = functionalUpdate(updater, old);\n return newState;\n };\n return table.options.onPaginationChange == null ? void 0 : table.options.onPaginationChange(safeUpdater);\n };\n table.resetPagination = defaultState => {\n var _table$initialState$p;\n table.setPagination(defaultState ? getDefaultPaginationState() : (_table$initialState$p = table.initialState.pagination) != null ? _table$initialState$p : getDefaultPaginationState());\n };\n table.setPageIndex = updater => {\n table.setPagination(old => {\n let pageIndex = functionalUpdate(updater, old.pageIndex);\n const maxPageIndex = typeof table.options.pageCount === 'undefined' || table.options.pageCount === -1 ? Number.MAX_SAFE_INTEGER : table.options.pageCount - 1;\n pageIndex = Math.max(0, Math.min(pageIndex, maxPageIndex));\n return {\n ...old,\n pageIndex\n };\n });\n };\n table.resetPageIndex = defaultState => {\n var _table$initialState$p2, _table$initialState;\n table.setPageIndex(defaultState ? defaultPageIndex : (_table$initialState$p2 = (_table$initialState = table.initialState) == null || (_table$initialState = _table$initialState.pagination) == null ? void 0 : _table$initialState.pageIndex) != null ? _table$initialState$p2 : defaultPageIndex);\n };\n table.resetPageSize = defaultState => {\n var _table$initialState$p3, _table$initialState2;\n table.setPageSize(defaultState ? defaultPageSize : (_table$initialState$p3 = (_table$initialState2 = table.initialState) == null || (_table$initialState2 = _table$initialState2.pagination) == null ? void 0 : _table$initialState2.pageSize) != null ? _table$initialState$p3 : defaultPageSize);\n };\n table.setPageSize = updater => {\n table.setPagination(old => {\n const pageSize = Math.max(1, functionalUpdate(updater, old.pageSize));\n const topRowIndex = old.pageSize * old.pageIndex;\n const pageIndex = Math.floor(topRowIndex / pageSize);\n return {\n ...old,\n pageIndex,\n pageSize\n };\n });\n };\n //deprecated\n table.setPageCount = updater => table.setPagination(old => {\n var _table$options$pageCo;\n let newPageCount = functionalUpdate(updater, (_table$options$pageCo = table.options.pageCount) != null ? _table$options$pageCo : -1);\n if (typeof newPageCount === 'number') {\n newPageCount = Math.max(-1, newPageCount);\n }\n return {\n ...old,\n pageCount: newPageCount\n };\n });\n table.getPageOptions = memo(() => [table.getPageCount()], pageCount => {\n let pageOptions = [];\n if (pageCount && pageCount > 0) {\n pageOptions = [...new Array(pageCount)].fill(null).map((_, i) => i);\n }\n return pageOptions;\n }, getMemoOptions(table.options, 'debugTable', 'getPageOptions'));\n table.getCanPreviousPage = () => table.getState().pagination.pageIndex > 0;\n table.getCanNextPage = () => {\n const {\n pageIndex\n } = table.getState().pagination;\n const pageCount = table.getPageCount();\n if (pageCount === -1) {\n return true;\n }\n if (pageCount === 0) {\n return false;\n }\n return pageIndex < pageCount - 1;\n };\n table.previousPage = () => {\n return table.setPageIndex(old => old - 1);\n };\n table.nextPage = () => {\n return table.setPageIndex(old => {\n return old + 1;\n });\n };\n table.firstPage = () => {\n return table.setPageIndex(0);\n };\n table.lastPage = () => {\n return table.setPageIndex(table.getPageCount() - 1);\n };\n table.getPrePaginationRowModel = () => table.getExpandedRowModel();\n table.getPaginationRowModel = () => {\n if (!table._getPaginationRowModel && table.options.getPaginationRowModel) {\n table._getPaginationRowModel = table.options.getPaginationRowModel(table);\n }\n if (table.options.manualPagination || !table._getPaginationRowModel) {\n return table.getPrePaginationRowModel();\n }\n return table._getPaginationRowModel();\n };\n table.getPageCount = () => {\n var _table$options$pageCo2;\n return (_table$options$pageCo2 = table.options.pageCount) != null ? _table$options$pageCo2 : Math.ceil(table.getRowCount() / table.getState().pagination.pageSize);\n };\n table.getRowCount = () => {\n var _table$options$rowCou;\n return (_table$options$rowCou = table.options.rowCount) != null ? _table$options$rowCou : table.getPrePaginationRowModel().rows.length;\n };\n }\n};\n\n//\n\nconst getDefaultRowPinningState = () => ({\n top: [],\n bottom: []\n});\nconst RowPinning = {\n getInitialState: state => {\n return {\n rowPinning: getDefaultRowPinningState(),\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onRowPinningChange: makeStateUpdater('rowPinning', table)\n };\n },\n createRow: (row, table) => {\n row.pin = (position, includeLeafRows, includeParentRows) => {\n const leafRowIds = includeLeafRows ? row.getLeafRows().map(_ref => {\n let {\n id\n } = _ref;\n return id;\n }) : [];\n const parentRowIds = includeParentRows ? row.getParentRows().map(_ref2 => {\n let {\n id\n } = _ref2;\n return id;\n }) : [];\n const rowIds = new Set([...parentRowIds, row.id, ...leafRowIds]);\n table.setRowPinning(old => {\n var _old$top3, _old$bottom3;\n if (position === 'bottom') {\n var _old$top, _old$bottom;\n return {\n top: ((_old$top = old == null ? void 0 : old.top) != null ? _old$top : []).filter(d => !(rowIds != null && rowIds.has(d))),\n bottom: [...((_old$bottom = old == null ? void 0 : old.bottom) != null ? _old$bottom : []).filter(d => !(rowIds != null && rowIds.has(d))), ...Array.from(rowIds)]\n };\n }\n if (position === 'top') {\n var _old$top2, _old$bottom2;\n return {\n top: [...((_old$top2 = old == null ? void 0 : old.top) != null ? _old$top2 : []).filter(d => !(rowIds != null && rowIds.has(d))), ...Array.from(rowIds)],\n bottom: ((_old$bottom2 = old == null ? void 0 : old.bottom) != null ? _old$bottom2 : []).filter(d => !(rowIds != null && rowIds.has(d)))\n };\n }\n return {\n top: ((_old$top3 = old == null ? void 0 : old.top) != null ? _old$top3 : []).filter(d => !(rowIds != null && rowIds.has(d))),\n bottom: ((_old$bottom3 = old == null ? void 0 : old.bottom) != null ? _old$bottom3 : []).filter(d => !(rowIds != null && rowIds.has(d)))\n };\n });\n };\n row.getCanPin = () => {\n var _ref3;\n const {\n enableRowPinning,\n enablePinning\n } = table.options;\n if (typeof enableRowPinning === 'function') {\n return enableRowPinning(row);\n }\n return (_ref3 = enableRowPinning != null ? enableRowPinning : enablePinning) != null ? _ref3 : true;\n };\n row.getIsPinned = () => {\n const rowIds = [row.id];\n const {\n top,\n bottom\n } = table.getState().rowPinning;\n const isTop = rowIds.some(d => top == null ? void 0 : top.includes(d));\n const isBottom = rowIds.some(d => bottom == null ? void 0 : bottom.includes(d));\n return isTop ? 'top' : isBottom ? 'bottom' : false;\n };\n row.getPinnedIndex = () => {\n var _ref4, _visiblePinnedRowIds$;\n const position = row.getIsPinned();\n if (!position) return -1;\n const visiblePinnedRowIds = (_ref4 = position === 'top' ? table.getTopRows() : table.getBottomRows()) == null ? void 0 : _ref4.map(_ref5 => {\n let {\n id\n } = _ref5;\n return id;\n });\n return (_visiblePinnedRowIds$ = visiblePinnedRowIds == null ? void 0 : visiblePinnedRowIds.indexOf(row.id)) != null ? _visiblePinnedRowIds$ : -1;\n };\n },\n createTable: table => {\n table.setRowPinning = updater => table.options.onRowPinningChange == null ? void 0 : table.options.onRowPinningChange(updater);\n table.resetRowPinning = defaultState => {\n var _table$initialState$r, _table$initialState;\n return table.setRowPinning(defaultState ? getDefaultRowPinningState() : (_table$initialState$r = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.rowPinning) != null ? _table$initialState$r : getDefaultRowPinningState());\n };\n table.getIsSomeRowsPinned = position => {\n var _pinningState$positio;\n const pinningState = table.getState().rowPinning;\n if (!position) {\n var _pinningState$top, _pinningState$bottom;\n return Boolean(((_pinningState$top = pinningState.top) == null ? void 0 : _pinningState$top.length) || ((_pinningState$bottom = pinningState.bottom) == null ? void 0 : _pinningState$bottom.length));\n }\n return Boolean((_pinningState$positio = pinningState[position]) == null ? void 0 : _pinningState$positio.length);\n };\n table._getPinnedRows = (visibleRows, pinnedRowIds, position) => {\n var _table$options$keepPi;\n const rows = ((_table$options$keepPi = table.options.keepPinnedRows) != null ? _table$options$keepPi : true) ?\n //get all rows that are pinned even if they would not be otherwise visible\n //account for expanded parent rows, but not pagination or filtering\n (pinnedRowIds != null ? pinnedRowIds : []).map(rowId => {\n const row = table.getRow(rowId, true);\n return row.getIsAllParentsExpanded() ? row : null;\n }) :\n //else get only visible rows that are pinned\n (pinnedRowIds != null ? pinnedRowIds : []).map(rowId => visibleRows.find(row => row.id === rowId));\n return rows.filter(Boolean).map(d => ({\n ...d,\n position\n }));\n };\n table.getTopRows = memo(() => [table.getRowModel().rows, table.getState().rowPinning.top], (allRows, topPinnedRowIds) => table._getPinnedRows(allRows, topPinnedRowIds, 'top'), getMemoOptions(table.options, 'debugRows', 'getTopRows'));\n table.getBottomRows = memo(() => [table.getRowModel().rows, table.getState().rowPinning.bottom], (allRows, bottomPinnedRowIds) => table._getPinnedRows(allRows, bottomPinnedRowIds, 'bottom'), getMemoOptions(table.options, 'debugRows', 'getBottomRows'));\n table.getCenterRows = memo(() => [table.getRowModel().rows, table.getState().rowPinning.top, table.getState().rowPinning.bottom], (allRows, top, bottom) => {\n const topAndBottom = new Set([...(top != null ? top : []), ...(bottom != null ? bottom : [])]);\n return allRows.filter(d => !topAndBottom.has(d.id));\n }, getMemoOptions(table.options, 'debugRows', 'getCenterRows'));\n }\n};\n\n//\n\nconst RowSelection = {\n getInitialState: state => {\n return {\n rowSelection: {},\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onRowSelectionChange: makeStateUpdater('rowSelection', table),\n enableRowSelection: true,\n enableMultiRowSelection: true,\n enableSubRowSelection: true\n // enableGroupingRowSelection: false,\n // isAdditiveSelectEvent: (e: unknown) => !!e.metaKey,\n // isInclusiveSelectEvent: (e: unknown) => !!e.shiftKey,\n };\n },\n createTable: table => {\n table.setRowSelection = updater => table.options.onRowSelectionChange == null ? void 0 : table.options.onRowSelectionChange(updater);\n table.resetRowSelection = defaultState => {\n var _table$initialState$r;\n return table.setRowSelection(defaultState ? {} : (_table$initialState$r = table.initialState.rowSelection) != null ? _table$initialState$r : {});\n };\n table.toggleAllRowsSelected = value => {\n table.setRowSelection(old => {\n value = typeof value !== 'undefined' ? value : !table.getIsAllRowsSelected();\n const rowSelection = {\n ...old\n };\n const preGroupedFlatRows = table.getPreGroupedRowModel().flatRows;\n\n // We don't use `mutateRowIsSelected` here for performance reasons.\n // All of the rows are flat already, so it wouldn't be worth it\n if (value) {\n preGroupedFlatRows.forEach(row => {\n if (!row.getCanSelect()) {\n return;\n }\n rowSelection[row.id] = true;\n });\n } else {\n preGroupedFlatRows.forEach(row => {\n delete rowSelection[row.id];\n });\n }\n return rowSelection;\n });\n };\n table.toggleAllPageRowsSelected = value => table.setRowSelection(old => {\n const resolvedValue = typeof value !== 'undefined' ? value : !table.getIsAllPageRowsSelected();\n const rowSelection = {\n ...old\n };\n table.getRowModel().rows.forEach(row => {\n mutateRowIsSelected(rowSelection, row.id, resolvedValue, true, table);\n });\n return rowSelection;\n });\n\n // addRowSelectionRange: rowId => {\n // const {\n // rows,\n // rowsById,\n // options: { selectGroupingRows, selectSubRows },\n // } = table\n\n // const findSelectedRow = (rows: Row[]) => {\n // let found\n // rows.find(d => {\n // if (d.getIsSelected()) {\n // found = d\n // return true\n // }\n // const subFound = findSelectedRow(d.subRows || [])\n // if (subFound) {\n // found = subFound\n // return true\n // }\n // return false\n // })\n // return found\n // }\n\n // const firstRow = findSelectedRow(rows) || rows[0]\n // const lastRow = rowsById[rowId]\n\n // let include = false\n // const selectedRowIds = {}\n\n // const addRow = (row: Row) => {\n // mutateRowIsSelected(selectedRowIds, row.id, true, {\n // rowsById,\n // selectGroupingRows: selectGroupingRows!,\n // selectSubRows: selectSubRows!,\n // })\n // }\n\n // table.rows.forEach(row => {\n // const isFirstRow = row.id === firstRow.id\n // const isLastRow = row.id === lastRow.id\n\n // if (isFirstRow || isLastRow) {\n // if (!include) {\n // include = true\n // } else if (include) {\n // addRow(row)\n // include = false\n // }\n // }\n\n // if (include) {\n // addRow(row)\n // }\n // })\n\n // table.setRowSelection(selectedRowIds)\n // },\n table.getPreSelectedRowModel = () => table.getCoreRowModel();\n table.getSelectedRowModel = memo(() => [table.getState().rowSelection, table.getCoreRowModel()], (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n }\n return selectRowsFn(table, rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getSelectedRowModel'));\n table.getFilteredSelectedRowModel = memo(() => [table.getState().rowSelection, table.getFilteredRowModel()], (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n }\n return selectRowsFn(table, rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getFilteredSelectedRowModel'));\n table.getGroupedSelectedRowModel = memo(() => [table.getState().rowSelection, table.getSortedRowModel()], (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n }\n return selectRowsFn(table, rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getGroupedSelectedRowModel'));\n\n ///\n\n // getGroupingRowCanSelect: rowId => {\n // const row = table.getRow(rowId)\n\n // if (!row) {\n // throw new Error()\n // }\n\n // if (typeof table.options.enableGroupingRowSelection === 'function') {\n // return table.options.enableGroupingRowSelection(row)\n // }\n\n // return table.options.enableGroupingRowSelection ?? false\n // },\n\n table.getIsAllRowsSelected = () => {\n const preGroupedFlatRows = table.getFilteredRowModel().flatRows;\n const {\n rowSelection\n } = table.getState();\n let isAllRowsSelected = Boolean(preGroupedFlatRows.length && Object.keys(rowSelection).length);\n if (isAllRowsSelected) {\n if (preGroupedFlatRows.some(row => row.getCanSelect() && !rowSelection[row.id])) {\n isAllRowsSelected = false;\n }\n }\n return isAllRowsSelected;\n };\n table.getIsAllPageRowsSelected = () => {\n const paginationFlatRows = table.getPaginationRowModel().flatRows.filter(row => row.getCanSelect());\n const {\n rowSelection\n } = table.getState();\n let isAllPageRowsSelected = !!paginationFlatRows.length;\n if (isAllPageRowsSelected && paginationFlatRows.some(row => !rowSelection[row.id])) {\n isAllPageRowsSelected = false;\n }\n return isAllPageRowsSelected;\n };\n table.getIsSomeRowsSelected = () => {\n var _table$getState$rowSe;\n const totalSelected = Object.keys((_table$getState$rowSe = table.getState().rowSelection) != null ? _table$getState$rowSe : {}).length;\n return totalSelected > 0 && totalSelected < table.getFilteredRowModel().flatRows.length;\n };\n table.getIsSomePageRowsSelected = () => {\n const paginationFlatRows = table.getPaginationRowModel().flatRows;\n return table.getIsAllPageRowsSelected() ? false : paginationFlatRows.filter(row => row.getCanSelect()).some(d => d.getIsSelected() || d.getIsSomeSelected());\n };\n table.getToggleAllRowsSelectedHandler = () => {\n return e => {\n table.toggleAllRowsSelected(e.target.checked);\n };\n };\n table.getToggleAllPageRowsSelectedHandler = () => {\n return e => {\n table.toggleAllPageRowsSelected(e.target.checked);\n };\n };\n },\n createRow: (row, table) => {\n row.toggleSelected = (value, opts) => {\n const isSelected = row.getIsSelected();\n table.setRowSelection(old => {\n var _opts$selectChildren;\n value = typeof value !== 'undefined' ? value : !isSelected;\n if (row.getCanSelect() && isSelected === value) {\n return old;\n }\n const selectedRowIds = {\n ...old\n };\n mutateRowIsSelected(selectedRowIds, row.id, value, (_opts$selectChildren = opts == null ? void 0 : opts.selectChildren) != null ? _opts$selectChildren : true, table);\n return selectedRowIds;\n });\n };\n row.getIsSelected = () => {\n const {\n rowSelection\n } = table.getState();\n return isRowSelected(row, rowSelection);\n };\n row.getIsSomeSelected = () => {\n const {\n rowSelection\n } = table.getState();\n return isSubRowSelected(row, rowSelection) === 'some';\n };\n row.getIsAllSubRowsSelected = () => {\n const {\n rowSelection\n } = table.getState();\n return isSubRowSelected(row, rowSelection) === 'all';\n };\n row.getCanSelect = () => {\n var _table$options$enable;\n if (typeof table.options.enableRowSelection === 'function') {\n return table.options.enableRowSelection(row);\n }\n return (_table$options$enable = table.options.enableRowSelection) != null ? _table$options$enable : true;\n };\n row.getCanSelectSubRows = () => {\n var _table$options$enable2;\n if (typeof table.options.enableSubRowSelection === 'function') {\n return table.options.enableSubRowSelection(row);\n }\n return (_table$options$enable2 = table.options.enableSubRowSelection) != null ? _table$options$enable2 : true;\n };\n row.getCanMultiSelect = () => {\n var _table$options$enable3;\n if (typeof table.options.enableMultiRowSelection === 'function') {\n return table.options.enableMultiRowSelection(row);\n }\n return (_table$options$enable3 = table.options.enableMultiRowSelection) != null ? _table$options$enable3 : true;\n };\n row.getToggleSelectedHandler = () => {\n const canSelect = row.getCanSelect();\n return e => {\n var _target;\n if (!canSelect) return;\n row.toggleSelected((_target = e.target) == null ? void 0 : _target.checked);\n };\n };\n }\n};\nconst mutateRowIsSelected = (selectedRowIds, id, value, includeChildren, table) => {\n var _row$subRows;\n const row = table.getRow(id, true);\n\n // const isGrouped = row.getIsGrouped()\n\n // if ( // TODO: enforce grouping row selection rules\n // !isGrouped ||\n // (isGrouped && table.options.enableGroupingRowSelection)\n // ) {\n if (value) {\n if (!row.getCanMultiSelect()) {\n Object.keys(selectedRowIds).forEach(key => delete selectedRowIds[key]);\n }\n if (row.getCanSelect()) {\n selectedRowIds[id] = true;\n }\n } else {\n delete selectedRowIds[id];\n }\n // }\n\n if (includeChildren && (_row$subRows = row.subRows) != null && _row$subRows.length && row.getCanSelectSubRows()) {\n row.subRows.forEach(row => mutateRowIsSelected(selectedRowIds, row.id, value, includeChildren, table));\n }\n};\nfunction selectRowsFn(table, rowModel) {\n const rowSelection = table.getState().rowSelection;\n const newSelectedFlatRows = [];\n const newSelectedRowsById = {};\n\n // Filters top level and nested rows\n const recurseRows = function (rows, depth) {\n return rows.map(row => {\n var _row$subRows2;\n const isSelected = isRowSelected(row, rowSelection);\n if (isSelected) {\n newSelectedFlatRows.push(row);\n newSelectedRowsById[row.id] = row;\n }\n if ((_row$subRows2 = row.subRows) != null && _row$subRows2.length) {\n row = {\n ...row,\n subRows: recurseRows(row.subRows)\n };\n }\n if (isSelected) {\n return row;\n }\n }).filter(Boolean);\n };\n return {\n rows: recurseRows(rowModel.rows),\n flatRows: newSelectedFlatRows,\n rowsById: newSelectedRowsById\n };\n}\nfunction isRowSelected(row, selection) {\n var _selection$row$id;\n return (_selection$row$id = selection[row.id]) != null ? _selection$row$id : false;\n}\nfunction isSubRowSelected(row, selection, table) {\n var _row$subRows3;\n if (!((_row$subRows3 = row.subRows) != null && _row$subRows3.length)) return false;\n let allChildrenSelected = true;\n let someSelected = false;\n row.subRows.forEach(subRow => {\n // Bail out early if we know both of these\n if (someSelected && !allChildrenSelected) {\n return;\n }\n if (subRow.getCanSelect()) {\n if (isRowSelected(subRow, selection)) {\n someSelected = true;\n } else {\n allChildrenSelected = false;\n }\n }\n\n // Check row selection of nested subrows\n if (subRow.subRows && subRow.subRows.length) {\n const subRowChildrenSelected = isSubRowSelected(subRow, selection);\n if (subRowChildrenSelected === 'all') {\n someSelected = true;\n } else if (subRowChildrenSelected === 'some') {\n someSelected = true;\n allChildrenSelected = false;\n } else {\n allChildrenSelected = false;\n }\n }\n });\n return allChildrenSelected ? 'all' : someSelected ? 'some' : false;\n}\n\nconst reSplitAlphaNumeric = /([0-9]+)/gm;\nconst alphanumeric = (rowA, rowB, columnId) => {\n return compareAlphanumeric(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());\n};\nconst alphanumericCaseSensitive = (rowA, rowB, columnId) => {\n return compareAlphanumeric(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));\n};\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst text = (rowA, rowB, columnId) => {\n return compareBasic(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());\n};\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst textCaseSensitive = (rowA, rowB, columnId) => {\n return compareBasic(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));\n};\nconst datetime = (rowA, rowB, columnId) => {\n const a = rowA.getValue(columnId);\n const b = rowB.getValue(columnId);\n\n // Can handle nullish values\n // Use > and < because == (and ===) doesn't work with\n // Date objects (would require calling getTime()).\n return a > b ? 1 : a < b ? -1 : 0;\n};\nconst basic = (rowA, rowB, columnId) => {\n return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId));\n};\n\n// Utils\n\nfunction compareBasic(a, b) {\n return a === b ? 0 : a > b ? 1 : -1;\n}\nfunction toString(a) {\n if (typeof a === 'number') {\n if (isNaN(a) || a === Infinity || a === -Infinity) {\n return '';\n }\n return String(a);\n }\n if (typeof a === 'string') {\n return a;\n }\n return '';\n}\n\n// Mixed sorting is slow, but very inclusive of many edge cases.\n// It handles numbers, mixed alphanumeric combinations, and even\n// null, undefined, and Infinity\nfunction compareAlphanumeric(aStr, bStr) {\n // Split on number groups, but keep the delimiter\n // Then remove falsey split values\n const a = aStr.split(reSplitAlphaNumeric).filter(Boolean);\n const b = bStr.split(reSplitAlphaNumeric).filter(Boolean);\n\n // While\n while (a.length && b.length) {\n const aa = a.shift();\n const bb = b.shift();\n const an = parseInt(aa, 10);\n const bn = parseInt(bb, 10);\n const combo = [an, bn].sort();\n\n // Both are string\n if (isNaN(combo[0])) {\n if (aa > bb) {\n return 1;\n }\n if (bb > aa) {\n return -1;\n }\n continue;\n }\n\n // One is a string, one is a number\n if (isNaN(combo[1])) {\n return isNaN(an) ? -1 : 1;\n }\n\n // Both are numbers\n if (an > bn) {\n return 1;\n }\n if (bn > an) {\n return -1;\n }\n }\n return a.length - b.length;\n}\n\n// Exports\n\nconst sortingFns = {\n alphanumeric,\n alphanumericCaseSensitive,\n text,\n textCaseSensitive,\n datetime,\n basic\n};\n\n//\n\nconst RowSorting = {\n getInitialState: state => {\n return {\n sorting: [],\n ...state\n };\n },\n getDefaultColumnDef: () => {\n return {\n sortingFn: 'auto',\n sortUndefined: 1\n };\n },\n getDefaultOptions: table => {\n return {\n onSortingChange: makeStateUpdater('sorting', table),\n isMultiSortEvent: e => {\n return e.shiftKey;\n }\n };\n },\n createColumn: (column, table) => {\n column.getAutoSortingFn = () => {\n const firstRows = table.getFilteredRowModel().flatRows.slice(10);\n let isString = false;\n for (const row of firstRows) {\n const value = row == null ? void 0 : row.getValue(column.id);\n if (Object.prototype.toString.call(value) === '[object Date]') {\n return sortingFns.datetime;\n }\n if (typeof value === 'string') {\n isString = true;\n if (value.split(reSplitAlphaNumeric).length > 1) {\n return sortingFns.alphanumeric;\n }\n }\n }\n if (isString) {\n return sortingFns.text;\n }\n return sortingFns.basic;\n };\n column.getAutoSortDir = () => {\n const firstRow = table.getFilteredRowModel().flatRows[0];\n const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n if (typeof value === 'string') {\n return 'asc';\n }\n return 'desc';\n };\n column.getSortingFn = () => {\n var _table$options$sortin, _table$options$sortin2;\n if (!column) {\n throw new Error();\n }\n return isFunction(column.columnDef.sortingFn) ? column.columnDef.sortingFn : column.columnDef.sortingFn === 'auto' ? column.getAutoSortingFn() : (_table$options$sortin = (_table$options$sortin2 = table.options.sortingFns) == null ? void 0 : _table$options$sortin2[column.columnDef.sortingFn]) != null ? _table$options$sortin : sortingFns[column.columnDef.sortingFn];\n };\n column.toggleSorting = (desc, multi) => {\n // if (column.columns.length) {\n // column.columns.forEach((c, i) => {\n // if (c.id) {\n // table.toggleColumnSorting(c.id, undefined, multi || !!i)\n // }\n // })\n // return\n // }\n\n // this needs to be outside of table.setSorting to be in sync with rerender\n const nextSortingOrder = column.getNextSortingOrder();\n const hasManualValue = typeof desc !== 'undefined' && desc !== null;\n table.setSorting(old => {\n // Find any existing sorting for this column\n const existingSorting = old == null ? void 0 : old.find(d => d.id === column.id);\n const existingIndex = old == null ? void 0 : old.findIndex(d => d.id === column.id);\n let newSorting = [];\n\n // What should we do with this sort action?\n let sortAction;\n let nextDesc = hasManualValue ? desc : nextSortingOrder === 'desc';\n\n // Multi-mode\n if (old != null && old.length && column.getCanMultiSort() && multi) {\n if (existingSorting) {\n sortAction = 'toggle';\n } else {\n sortAction = 'add';\n }\n } else {\n // Normal mode\n if (old != null && old.length && existingIndex !== old.length - 1) {\n sortAction = 'replace';\n } else if (existingSorting) {\n sortAction = 'toggle';\n } else {\n sortAction = 'replace';\n }\n }\n\n // Handle toggle states that will remove the sorting\n if (sortAction === 'toggle') {\n // If we are \"actually\" toggling (not a manual set value), should we remove the sorting?\n if (!hasManualValue) {\n // Is our intention to remove?\n if (!nextSortingOrder) {\n sortAction = 'remove';\n }\n }\n }\n if (sortAction === 'add') {\n var _table$options$maxMul;\n newSorting = [...old, {\n id: column.id,\n desc: nextDesc\n }];\n // Take latest n columns\n newSorting.splice(0, newSorting.length - ((_table$options$maxMul = table.options.maxMultiSortColCount) != null ? _table$options$maxMul : Number.MAX_SAFE_INTEGER));\n } else if (sortAction === 'toggle') {\n // This flips (or sets) the\n newSorting = old.map(d => {\n if (d.id === column.id) {\n return {\n ...d,\n desc: nextDesc\n };\n }\n return d;\n });\n } else if (sortAction === 'remove') {\n newSorting = old.filter(d => d.id !== column.id);\n } else {\n newSorting = [{\n id: column.id,\n desc: nextDesc\n }];\n }\n return newSorting;\n });\n };\n column.getFirstSortDir = () => {\n var _ref, _column$columnDef$sor;\n const sortDescFirst = (_ref = (_column$columnDef$sor = column.columnDef.sortDescFirst) != null ? _column$columnDef$sor : table.options.sortDescFirst) != null ? _ref : column.getAutoSortDir() === 'desc';\n return sortDescFirst ? 'desc' : 'asc';\n };\n column.getNextSortingOrder = multi => {\n var _table$options$enable, _table$options$enable2;\n const firstSortDirection = column.getFirstSortDir();\n const isSorted = column.getIsSorted();\n if (!isSorted) {\n return firstSortDirection;\n }\n if (isSorted !== firstSortDirection && ((_table$options$enable = table.options.enableSortingRemoval) != null ? _table$options$enable : true) && (\n // If enableSortRemove, enable in general\n multi ? (_table$options$enable2 = table.options.enableMultiRemove) != null ? _table$options$enable2 : true : true) // If multi, don't allow if enableMultiRemove))\n ) {\n return false;\n }\n return isSorted === 'desc' ? 'asc' : 'desc';\n };\n column.getCanSort = () => {\n var _column$columnDef$ena, _table$options$enable3;\n return ((_column$columnDef$ena = column.columnDef.enableSorting) != null ? _column$columnDef$ena : true) && ((_table$options$enable3 = table.options.enableSorting) != null ? _table$options$enable3 : true) && !!column.accessorFn;\n };\n column.getCanMultiSort = () => {\n var _ref2, _column$columnDef$ena2;\n return (_ref2 = (_column$columnDef$ena2 = column.columnDef.enableMultiSort) != null ? _column$columnDef$ena2 : table.options.enableMultiSort) != null ? _ref2 : !!column.accessorFn;\n };\n column.getIsSorted = () => {\n var _table$getState$sorti;\n const columnSort = (_table$getState$sorti = table.getState().sorting) == null ? void 0 : _table$getState$sorti.find(d => d.id === column.id);\n return !columnSort ? false : columnSort.desc ? 'desc' : 'asc';\n };\n column.getSortIndex = () => {\n var _table$getState$sorti2, _table$getState$sorti3;\n return (_table$getState$sorti2 = (_table$getState$sorti3 = table.getState().sorting) == null ? void 0 : _table$getState$sorti3.findIndex(d => d.id === column.id)) != null ? _table$getState$sorti2 : -1;\n };\n column.clearSorting = () => {\n //clear sorting for just 1 column\n table.setSorting(old => old != null && old.length ? old.filter(d => d.id !== column.id) : []);\n };\n column.getToggleSortingHandler = () => {\n const canSort = column.getCanSort();\n return e => {\n if (!canSort) return;\n e.persist == null || e.persist();\n column.toggleSorting == null || column.toggleSorting(undefined, column.getCanMultiSort() ? table.options.isMultiSortEvent == null ? void 0 : table.options.isMultiSortEvent(e) : false);\n };\n };\n },\n createTable: table => {\n table.setSorting = updater => table.options.onSortingChange == null ? void 0 : table.options.onSortingChange(updater);\n table.resetSorting = defaultState => {\n var _table$initialState$s, _table$initialState;\n table.setSorting(defaultState ? [] : (_table$initialState$s = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.sorting) != null ? _table$initialState$s : []);\n };\n table.getPreSortedRowModel = () => table.getGroupedRowModel();\n table.getSortedRowModel = () => {\n if (!table._getSortedRowModel && table.options.getSortedRowModel) {\n table._getSortedRowModel = table.options.getSortedRowModel(table);\n }\n if (table.options.manualSorting || !table._getSortedRowModel) {\n return table.getPreSortedRowModel();\n }\n return table._getSortedRowModel();\n };\n }\n};\n\nconst builtInFeatures = [Headers, ColumnVisibility, ColumnOrdering, ColumnPinning, ColumnFaceting, ColumnFiltering, GlobalFaceting,\n//depends on ColumnFaceting\nGlobalFiltering,\n//depends on ColumnFiltering\nRowSorting, ColumnGrouping,\n//depends on RowSorting\nRowExpanding, RowPagination, RowPinning, RowSelection, ColumnSizing];\n\n//\n\nfunction createTable(options) {\n var _options$_features, _options$initialState;\n if (process.env.NODE_ENV !== 'production' && (options.debugAll || options.debugTable)) {\n console.info('Creating Table Instance...');\n }\n const _features = [...builtInFeatures, ...((_options$_features = options._features) != null ? _options$_features : [])];\n let table = {\n _features\n };\n const defaultOptions = table._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.getDefaultOptions == null ? void 0 : feature.getDefaultOptions(table));\n }, {});\n const mergeOptions = options => {\n if (table.options.mergeOptions) {\n return table.options.mergeOptions(defaultOptions, options);\n }\n return {\n ...defaultOptions,\n ...options\n };\n };\n const coreInitialState = {};\n let initialState = {\n ...coreInitialState,\n ...((_options$initialState = options.initialState) != null ? _options$initialState : {})\n };\n table._features.forEach(feature => {\n var _feature$getInitialSt;\n initialState = (_feature$getInitialSt = feature.getInitialState == null ? void 0 : feature.getInitialState(initialState)) != null ? _feature$getInitialSt : initialState;\n });\n const queued = [];\n let queuedTimeout = false;\n const coreInstance = {\n _features,\n options: {\n ...defaultOptions,\n ...options\n },\n initialState,\n _queue: cb => {\n queued.push(cb);\n if (!queuedTimeout) {\n queuedTimeout = true;\n\n // Schedule a microtask to run the queued callbacks after\n // the current call stack (render, etc) has finished.\n Promise.resolve().then(() => {\n while (queued.length) {\n queued.shift()();\n }\n queuedTimeout = false;\n }).catch(error => setTimeout(() => {\n throw error;\n }));\n }\n },\n reset: () => {\n table.setState(table.initialState);\n },\n setOptions: updater => {\n const newOptions = functionalUpdate(updater, table.options);\n table.options = mergeOptions(newOptions);\n },\n getState: () => {\n return table.options.state;\n },\n setState: updater => {\n table.options.onStateChange == null || table.options.onStateChange(updater);\n },\n _getRowId: (row, index, parent) => {\n var _table$options$getRow;\n return (_table$options$getRow = table.options.getRowId == null ? void 0 : table.options.getRowId(row, index, parent)) != null ? _table$options$getRow : `${parent ? [parent.id, index].join('.') : index}`;\n },\n getCoreRowModel: () => {\n if (!table._getCoreRowModel) {\n table._getCoreRowModel = table.options.getCoreRowModel(table);\n }\n return table._getCoreRowModel();\n },\n // The final calls start at the bottom of the model,\n // expanded rows, which then work their way up\n\n getRowModel: () => {\n return table.getPaginationRowModel();\n },\n //in next version, we should just pass in the row model as the optional 2nd arg\n getRow: (id, searchAll) => {\n let row = (searchAll ? table.getPrePaginationRowModel() : table.getRowModel()).rowsById[id];\n if (!row) {\n row = table.getCoreRowModel().rowsById[id];\n if (!row) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(`getRow could not find row with ID: ${id}`);\n }\n throw new Error();\n }\n }\n return row;\n },\n _getDefaultColumnDef: memo(() => [table.options.defaultColumn], defaultColumn => {\n var _defaultColumn;\n defaultColumn = (_defaultColumn = defaultColumn) != null ? _defaultColumn : {};\n return {\n header: props => {\n const resolvedColumnDef = props.header.column.columnDef;\n if (resolvedColumnDef.accessorKey) {\n return resolvedColumnDef.accessorKey;\n }\n if (resolvedColumnDef.accessorFn) {\n return resolvedColumnDef.id;\n }\n return null;\n },\n // footer: props => props.header.column.id,\n cell: props => {\n var _props$renderValue$to, _props$renderValue;\n return (_props$renderValue$to = (_props$renderValue = props.renderValue()) == null || _props$renderValue.toString == null ? void 0 : _props$renderValue.toString()) != null ? _props$renderValue$to : null;\n },\n ...table._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.getDefaultColumnDef == null ? void 0 : feature.getDefaultColumnDef());\n }, {}),\n ...defaultColumn\n };\n }, getMemoOptions(options, 'debugColumns', '_getDefaultColumnDef')),\n _getColumnDefs: () => table.options.columns,\n getAllColumns: memo(() => [table._getColumnDefs()], columnDefs => {\n const recurseColumns = function (columnDefs, parent, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n return columnDefs.map(columnDef => {\n const column = createColumn(table, columnDef, depth, parent);\n const groupingColumnDef = columnDef;\n column.columns = groupingColumnDef.columns ? recurseColumns(groupingColumnDef.columns, column, depth + 1) : [];\n return column;\n });\n };\n return recurseColumns(columnDefs);\n }, getMemoOptions(options, 'debugColumns', 'getAllColumns')),\n getAllFlatColumns: memo(() => [table.getAllColumns()], allColumns => {\n return allColumns.flatMap(column => {\n return column.getFlatColumns();\n });\n }, getMemoOptions(options, 'debugColumns', 'getAllFlatColumns')),\n _getAllFlatColumnsById: memo(() => [table.getAllFlatColumns()], flatColumns => {\n return flatColumns.reduce((acc, column) => {\n acc[column.id] = column;\n return acc;\n }, {});\n }, getMemoOptions(options, 'debugColumns', 'getAllFlatColumnsById')),\n getAllLeafColumns: memo(() => [table.getAllColumns(), table._getOrderColumnsFn()], (allColumns, orderColumns) => {\n let leafColumns = allColumns.flatMap(column => column.getLeafColumns());\n return orderColumns(leafColumns);\n }, getMemoOptions(options, 'debugColumns', 'getAllLeafColumns')),\n getColumn: columnId => {\n const column = table._getAllFlatColumnsById()[columnId];\n if (process.env.NODE_ENV !== 'production' && !column) {\n console.error(`[Table] Column with id '${columnId}' does not exist.`);\n }\n return column;\n }\n };\n Object.assign(table, coreInstance);\n for (let index = 0; index < table._features.length; index++) {\n const feature = table._features[index];\n feature == null || feature.createTable == null || feature.createTable(table);\n }\n return table;\n}\n\nfunction getCoreRowModel() {\n return table => memo(() => [table.options.data], data => {\n const rowModel = {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n const accessRows = function (originalRows, depth, parentRow) {\n if (depth === void 0) {\n depth = 0;\n }\n const rows = [];\n for (let i = 0; i < originalRows.length; i++) {\n // This could be an expensive check at scale, so we should move it somewhere else, but where?\n // if (!id) {\n // if (process.env.NODE_ENV !== 'production') {\n // throw new Error(`getRowId expected an ID, but got ${id}`)\n // }\n // }\n\n // Make the row\n const row = createRow(table, table._getRowId(originalRows[i], i, parentRow), originalRows[i], i, depth, undefined, parentRow == null ? void 0 : parentRow.id);\n\n // Keep track of every row in a flat array\n rowModel.flatRows.push(row);\n // Also keep track of every row by its ID\n rowModel.rowsById[row.id] = row;\n // Push table row into parent\n rows.push(row);\n\n // Get the original subrows\n if (table.options.getSubRows) {\n var _row$originalSubRows;\n row.originalSubRows = table.options.getSubRows(originalRows[i], i);\n\n // Then recursively access them\n if ((_row$originalSubRows = row.originalSubRows) != null && _row$originalSubRows.length) {\n row.subRows = accessRows(row.originalSubRows, depth + 1, row);\n }\n }\n }\n return rows;\n };\n rowModel.rows = accessRows(data);\n return rowModel;\n }, getMemoOptions(table.options, 'debugTable', 'getRowModel', () => table._autoResetPageIndex()));\n}\n\nfunction getExpandedRowModel() {\n return table => memo(() => [table.getState().expanded, table.getPreExpandedRowModel(), table.options.paginateExpandedRows], (expanded, rowModel, paginateExpandedRows) => {\n if (!rowModel.rows.length || expanded !== true && !Object.keys(expanded != null ? expanded : {}).length) {\n return rowModel;\n }\n if (!paginateExpandedRows) {\n // Only expand rows at this point if they are being paginated\n return rowModel;\n }\n return expandRows(rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getExpandedRowModel'));\n}\nfunction expandRows(rowModel) {\n const expandedRows = [];\n const handleRow = row => {\n var _row$subRows;\n expandedRows.push(row);\n if ((_row$subRows = row.subRows) != null && _row$subRows.length && row.getIsExpanded()) {\n row.subRows.forEach(handleRow);\n }\n };\n rowModel.rows.forEach(handleRow);\n return {\n rows: expandedRows,\n flatRows: rowModel.flatRows,\n rowsById: rowModel.rowsById\n };\n}\n\nfunction getFacetedMinMaxValues() {\n return (table, columnId) => memo(() => {\n var _table$getColumn;\n return [(_table$getColumn = table.getColumn(columnId)) == null ? void 0 : _table$getColumn.getFacetedRowModel()];\n }, facetedRowModel => {\n if (!facetedRowModel) return undefined;\n const uniqueValues = facetedRowModel.flatRows.flatMap(flatRow => {\n var _flatRow$getUniqueVal;\n return (_flatRow$getUniqueVal = flatRow.getUniqueValues(columnId)) != null ? _flatRow$getUniqueVal : [];\n }).map(Number).filter(value => !Number.isNaN(value));\n if (!uniqueValues.length) return;\n let facetedMinValue = uniqueValues[0];\n let facetedMaxValue = uniqueValues[uniqueValues.length - 1];\n for (const value of uniqueValues) {\n if (value < facetedMinValue) facetedMinValue = value;else if (value > facetedMaxValue) facetedMaxValue = value;\n }\n return [facetedMinValue, facetedMaxValue];\n }, getMemoOptions(table.options, 'debugTable', 'getFacetedMinMaxValues'));\n}\n\nfunction filterRows(rows, filterRowImpl, table) {\n if (table.options.filterFromLeafRows) {\n return filterRowModelFromLeafs(rows, filterRowImpl, table);\n }\n return filterRowModelFromRoot(rows, filterRowImpl, table);\n}\nfunction filterRowModelFromLeafs(rowsToFilter, filterRow, table) {\n var _table$options$maxLea;\n const newFilteredFlatRows = [];\n const newFilteredRowsById = {};\n const maxDepth = (_table$options$maxLea = table.options.maxLeafRowFilterDepth) != null ? _table$options$maxLea : 100;\n const recurseFilterRows = function (rowsToFilter, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n const rows = [];\n\n // Filter from children up first\n for (let i = 0; i < rowsToFilter.length; i++) {\n var _row$subRows;\n let row = rowsToFilter[i];\n const newRow = createRow(table, row.id, row.original, row.index, row.depth, undefined, row.parentId);\n newRow.columnFilters = row.columnFilters;\n if ((_row$subRows = row.subRows) != null && _row$subRows.length && depth < maxDepth) {\n newRow.subRows = recurseFilterRows(row.subRows, depth + 1);\n row = newRow;\n if (filterRow(row) && !newRow.subRows.length) {\n rows.push(row);\n newFilteredRowsById[row.id] = row;\n newFilteredFlatRows.push(row);\n continue;\n }\n if (filterRow(row) || newRow.subRows.length) {\n rows.push(row);\n newFilteredRowsById[row.id] = row;\n newFilteredFlatRows.push(row);\n continue;\n }\n } else {\n row = newRow;\n if (filterRow(row)) {\n rows.push(row);\n newFilteredRowsById[row.id] = row;\n newFilteredFlatRows.push(row);\n }\n }\n }\n return rows;\n };\n return {\n rows: recurseFilterRows(rowsToFilter),\n flatRows: newFilteredFlatRows,\n rowsById: newFilteredRowsById\n };\n}\nfunction filterRowModelFromRoot(rowsToFilter, filterRow, table) {\n var _table$options$maxLea2;\n const newFilteredFlatRows = [];\n const newFilteredRowsById = {};\n const maxDepth = (_table$options$maxLea2 = table.options.maxLeafRowFilterDepth) != null ? _table$options$maxLea2 : 100;\n\n // Filters top level and nested rows\n const recurseFilterRows = function (rowsToFilter, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n // Filter from parents downward first\n\n const rows = [];\n\n // Apply the filter to any subRows\n for (let i = 0; i < rowsToFilter.length; i++) {\n let row = rowsToFilter[i];\n const pass = filterRow(row);\n if (pass) {\n var _row$subRows2;\n if ((_row$subRows2 = row.subRows) != null && _row$subRows2.length && depth < maxDepth) {\n const newRow = createRow(table, row.id, row.original, row.index, row.depth, undefined, row.parentId);\n newRow.subRows = recurseFilterRows(row.subRows, depth + 1);\n row = newRow;\n }\n rows.push(row);\n newFilteredFlatRows.push(row);\n newFilteredRowsById[row.id] = row;\n }\n }\n return rows;\n };\n return {\n rows: recurseFilterRows(rowsToFilter),\n flatRows: newFilteredFlatRows,\n rowsById: newFilteredRowsById\n };\n}\n\nfunction getFacetedRowModel() {\n return (table, columnId) => memo(() => [table.getPreFilteredRowModel(), table.getState().columnFilters, table.getState().globalFilter, table.getFilteredRowModel()], (preRowModel, columnFilters, globalFilter) => {\n if (!preRowModel.rows.length || !(columnFilters != null && columnFilters.length) && !globalFilter) {\n return preRowModel;\n }\n const filterableIds = [...columnFilters.map(d => d.id).filter(d => d !== columnId), globalFilter ? '__global__' : undefined].filter(Boolean);\n const filterRowsImpl = row => {\n // Horizontally filter rows through each column\n for (let i = 0; i < filterableIds.length; i++) {\n if (row.columnFilters[filterableIds[i]] === false) {\n return false;\n }\n }\n return true;\n };\n return filterRows(preRowModel.rows, filterRowsImpl, table);\n }, getMemoOptions(table.options, 'debugTable', 'getFacetedRowModel'));\n}\n\nfunction getFacetedUniqueValues() {\n return (table, columnId) => memo(() => {\n var _table$getColumn;\n return [(_table$getColumn = table.getColumn(columnId)) == null ? void 0 : _table$getColumn.getFacetedRowModel()];\n }, facetedRowModel => {\n if (!facetedRowModel) return new Map();\n let facetedUniqueValues = new Map();\n for (let i = 0; i < facetedRowModel.flatRows.length; i++) {\n const values = facetedRowModel.flatRows[i].getUniqueValues(columnId);\n for (let j = 0; j < values.length; j++) {\n const value = values[j];\n if (facetedUniqueValues.has(value)) {\n var _facetedUniqueValues$;\n facetedUniqueValues.set(value, ((_facetedUniqueValues$ = facetedUniqueValues.get(value)) != null ? _facetedUniqueValues$ : 0) + 1);\n } else {\n facetedUniqueValues.set(value, 1);\n }\n }\n }\n return facetedUniqueValues;\n }, getMemoOptions(table.options, 'debugTable', `getFacetedUniqueValues_${columnId}`));\n}\n\nfunction getFilteredRowModel() {\n return table => memo(() => [table.getPreFilteredRowModel(), table.getState().columnFilters, table.getState().globalFilter], (rowModel, columnFilters, globalFilter) => {\n if (!rowModel.rows.length || !(columnFilters != null && columnFilters.length) && !globalFilter) {\n for (let i = 0; i < rowModel.flatRows.length; i++) {\n rowModel.flatRows[i].columnFilters = {};\n rowModel.flatRows[i].columnFiltersMeta = {};\n }\n return rowModel;\n }\n const resolvedColumnFilters = [];\n const resolvedGlobalFilters = [];\n (columnFilters != null ? columnFilters : []).forEach(d => {\n var _filterFn$resolveFilt;\n const column = table.getColumn(d.id);\n if (!column) {\n return;\n }\n const filterFn = column.getFilterFn();\n if (!filterFn) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Could not find a valid 'column.filterFn' for column with the ID: ${column.id}.`);\n }\n return;\n }\n resolvedColumnFilters.push({\n id: d.id,\n filterFn,\n resolvedValue: (_filterFn$resolveFilt = filterFn.resolveFilterValue == null ? void 0 : filterFn.resolveFilterValue(d.value)) != null ? _filterFn$resolveFilt : d.value\n });\n });\n const filterableIds = (columnFilters != null ? columnFilters : []).map(d => d.id);\n const globalFilterFn = table.getGlobalFilterFn();\n const globallyFilterableColumns = table.getAllLeafColumns().filter(column => column.getCanGlobalFilter());\n if (globalFilter && globalFilterFn && globallyFilterableColumns.length) {\n filterableIds.push('__global__');\n globallyFilterableColumns.forEach(column => {\n var _globalFilterFn$resol;\n resolvedGlobalFilters.push({\n id: column.id,\n filterFn: globalFilterFn,\n resolvedValue: (_globalFilterFn$resol = globalFilterFn.resolveFilterValue == null ? void 0 : globalFilterFn.resolveFilterValue(globalFilter)) != null ? _globalFilterFn$resol : globalFilter\n });\n });\n }\n let currentColumnFilter;\n let currentGlobalFilter;\n\n // Flag the prefiltered row model with each filter state\n for (let j = 0; j < rowModel.flatRows.length; j++) {\n const row = rowModel.flatRows[j];\n row.columnFilters = {};\n if (resolvedColumnFilters.length) {\n for (let i = 0; i < resolvedColumnFilters.length; i++) {\n currentColumnFilter = resolvedColumnFilters[i];\n const id = currentColumnFilter.id;\n\n // Tag the row with the column filter state\n row.columnFilters[id] = currentColumnFilter.filterFn(row, id, currentColumnFilter.resolvedValue, filterMeta => {\n row.columnFiltersMeta[id] = filterMeta;\n });\n }\n }\n if (resolvedGlobalFilters.length) {\n for (let i = 0; i < resolvedGlobalFilters.length; i++) {\n currentGlobalFilter = resolvedGlobalFilters[i];\n const id = currentGlobalFilter.id;\n // Tag the row with the first truthy global filter state\n if (currentGlobalFilter.filterFn(row, id, currentGlobalFilter.resolvedValue, filterMeta => {\n row.columnFiltersMeta[id] = filterMeta;\n })) {\n row.columnFilters.__global__ = true;\n break;\n }\n }\n if (row.columnFilters.__global__ !== true) {\n row.columnFilters.__global__ = false;\n }\n }\n }\n const filterRowsImpl = row => {\n // Horizontally filter rows through each column\n for (let i = 0; i < filterableIds.length; i++) {\n if (row.columnFilters[filterableIds[i]] === false) {\n return false;\n }\n }\n return true;\n };\n\n // Filter final rows using all of the active filters\n return filterRows(rowModel.rows, filterRowsImpl, table);\n }, getMemoOptions(table.options, 'debugTable', 'getFilteredRowModel', () => table._autoResetPageIndex()));\n}\n\nfunction getGroupedRowModel() {\n return table => memo(() => [table.getState().grouping, table.getPreGroupedRowModel()], (grouping, rowModel) => {\n if (!rowModel.rows.length || !grouping.length) {\n rowModel.rows.forEach(row => {\n row.depth = 0;\n row.parentId = undefined;\n });\n return rowModel;\n }\n\n // Filter the grouping list down to columns that exist\n const existingGrouping = grouping.filter(columnId => table.getColumn(columnId));\n const groupedFlatRows = [];\n const groupedRowsById = {};\n // const onlyGroupedFlatRows: Row[] = [];\n // const onlyGroupedRowsById: Record<RowId, Row> = {};\n // const nonGroupedFlatRows: Row[] = [];\n // const nonGroupedRowsById: Record<RowId, Row> = {};\n\n // Recursively group the data\n const groupUpRecursively = function (rows, depth, parentId) {\n if (depth === void 0) {\n depth = 0;\n }\n // Grouping depth has been been met\n // Stop grouping and simply rewrite thd depth and row relationships\n if (depth >= existingGrouping.length) {\n return rows.map(row => {\n row.depth = depth;\n groupedFlatRows.push(row);\n groupedRowsById[row.id] = row;\n if (row.subRows) {\n row.subRows = groupUpRecursively(row.subRows, depth + 1, row.id);\n }\n return row;\n });\n }\n const columnId = existingGrouping[depth];\n\n // Group the rows together for this level\n const rowGroupsMap = groupBy(rows, columnId);\n\n // Perform aggregations for each group\n const aggregatedGroupedRows = Array.from(rowGroupsMap.entries()).map((_ref, index) => {\n let [groupingValue, groupedRows] = _ref;\n let id = `${columnId}:${groupingValue}`;\n id = parentId ? `${parentId}>${id}` : id;\n\n // First, Recurse to group sub rows before aggregation\n const subRows = groupUpRecursively(groupedRows, depth + 1, id);\n subRows.forEach(subRow => {\n subRow.parentId = id;\n });\n\n // Flatten the leaf rows of the rows in this group\n const leafRows = depth ? flattenBy(groupedRows, row => row.subRows) : groupedRows;\n const row = createRow(table, id, leafRows[0].original, index, depth, undefined, parentId);\n Object.assign(row, {\n groupingColumnId: columnId,\n groupingValue,\n subRows,\n leafRows,\n getValue: columnId => {\n // Don't aggregate columns that are in the grouping\n if (existingGrouping.includes(columnId)) {\n if (row._valuesCache.hasOwnProperty(columnId)) {\n return row._valuesCache[columnId];\n }\n if (groupedRows[0]) {\n var _groupedRows$0$getVal;\n row._valuesCache[columnId] = (_groupedRows$0$getVal = groupedRows[0].getValue(columnId)) != null ? _groupedRows$0$getVal : undefined;\n }\n return row._valuesCache[columnId];\n }\n if (row._groupingValuesCache.hasOwnProperty(columnId)) {\n return row._groupingValuesCache[columnId];\n }\n\n // Aggregate the values\n const column = table.getColumn(columnId);\n const aggregateFn = column == null ? void 0 : column.getAggregationFn();\n if (aggregateFn) {\n row._groupingValuesCache[columnId] = aggregateFn(columnId, leafRows, groupedRows);\n return row._groupingValuesCache[columnId];\n }\n }\n });\n subRows.forEach(subRow => {\n groupedFlatRows.push(subRow);\n groupedRowsById[subRow.id] = subRow;\n // if (subRow.getIsGrouped?.()) {\n // onlyGroupedFlatRows.push(subRow);\n // onlyGroupedRowsById[subRow.id] = subRow;\n // } else {\n // nonGroupedFlatRows.push(subRow);\n // nonGroupedRowsById[subRow.id] = subRow;\n // }\n });\n return row;\n });\n return aggregatedGroupedRows;\n };\n const groupedRows = groupUpRecursively(rowModel.rows, 0);\n groupedRows.forEach(subRow => {\n groupedFlatRows.push(subRow);\n groupedRowsById[subRow.id] = subRow;\n // if (subRow.getIsGrouped?.()) {\n // onlyGroupedFlatRows.push(subRow);\n // onlyGroupedRowsById[subRow.id] = subRow;\n // } else {\n // nonGroupedFlatRows.push(subRow);\n // nonGroupedRowsById[subRow.id] = subRow;\n // }\n });\n return {\n rows: groupedRows,\n flatRows: groupedFlatRows,\n rowsById: groupedRowsById\n };\n }, getMemoOptions(table.options, 'debugTable', 'getGroupedRowModel', () => {\n table._queue(() => {\n table._autoResetExpanded();\n table._autoResetPageIndex();\n });\n }));\n}\nfunction groupBy(rows, columnId) {\n const groupMap = new Map();\n return rows.reduce((map, row) => {\n const resKey = `${row.getGroupingValue(columnId)}`;\n const previous = map.get(resKey);\n if (!previous) {\n map.set(resKey, [row]);\n } else {\n previous.push(row);\n }\n return map;\n }, groupMap);\n}\n\nfunction getPaginationRowModel(opts) {\n return table => memo(() => [table.getState().pagination, table.getPrePaginationRowModel(), table.options.paginateExpandedRows ? undefined : table.getState().expanded], (pagination, rowModel) => {\n if (!rowModel.rows.length) {\n return rowModel;\n }\n const {\n pageSize,\n pageIndex\n } = pagination;\n let {\n rows,\n flatRows,\n rowsById\n } = rowModel;\n const pageStart = pageSize * pageIndex;\n const pageEnd = pageStart + pageSize;\n rows = rows.slice(pageStart, pageEnd);\n let paginatedRowModel;\n if (!table.options.paginateExpandedRows) {\n paginatedRowModel = expandRows({\n rows,\n flatRows,\n rowsById\n });\n } else {\n paginatedRowModel = {\n rows,\n flatRows,\n rowsById\n };\n }\n paginatedRowModel.flatRows = [];\n const handleRow = row => {\n paginatedRowModel.flatRows.push(row);\n if (row.subRows.length) {\n row.subRows.forEach(handleRow);\n }\n };\n paginatedRowModel.rows.forEach(handleRow);\n return paginatedRowModel;\n }, getMemoOptions(table.options, 'debugTable', 'getPaginationRowModel'));\n}\n\nfunction getSortedRowModel() {\n return table => memo(() => [table.getState().sorting, table.getPreSortedRowModel()], (sorting, rowModel) => {\n if (!rowModel.rows.length || !(sorting != null && sorting.length)) {\n return rowModel;\n }\n const sortingState = table.getState().sorting;\n const sortedFlatRows = [];\n\n // Filter out sortings that correspond to non existing columns\n const availableSorting = sortingState.filter(sort => {\n var _table$getColumn;\n return (_table$getColumn = table.getColumn(sort.id)) == null ? void 0 : _table$getColumn.getCanSort();\n });\n const columnInfoById = {};\n availableSorting.forEach(sortEntry => {\n const column = table.getColumn(sortEntry.id);\n if (!column) return;\n columnInfoById[sortEntry.id] = {\n sortUndefined: column.columnDef.sortUndefined,\n invertSorting: column.columnDef.invertSorting,\n sortingFn: column.getSortingFn()\n };\n });\n const sortData = rows => {\n // This will also perform a stable sorting using the row index\n // if needed.\n const sortedData = rows.map(row => ({\n ...row\n }));\n sortedData.sort((rowA, rowB) => {\n for (let i = 0; i < availableSorting.length; i += 1) {\n var _sortEntry$desc;\n const sortEntry = availableSorting[i];\n const columnInfo = columnInfoById[sortEntry.id];\n const sortUndefined = columnInfo.sortUndefined;\n const isDesc = (_sortEntry$desc = sortEntry == null ? void 0 : sortEntry.desc) != null ? _sortEntry$desc : false;\n let sortInt = 0;\n\n // All sorting ints should always return in ascending order\n if (sortUndefined) {\n const aValue = rowA.getValue(sortEntry.id);\n const bValue = rowB.getValue(sortEntry.id);\n const aUndefined = aValue === undefined;\n const bUndefined = bValue === undefined;\n if (aUndefined || bUndefined) {\n if (sortUndefined === 'first') return aUndefined ? -1 : 1;\n if (sortUndefined === 'last') return aUndefined ? 1 : -1;\n sortInt = aUndefined && bUndefined ? 0 : aUndefined ? sortUndefined : -sortUndefined;\n }\n }\n if (sortInt === 0) {\n sortInt = columnInfo.sortingFn(rowA, rowB, sortEntry.id);\n }\n\n // If sorting is non-zero, take care of desc and inversion\n if (sortInt !== 0) {\n if (isDesc) {\n sortInt *= -1;\n }\n if (columnInfo.invertSorting) {\n sortInt *= -1;\n }\n return sortInt;\n }\n }\n return rowA.index - rowB.index;\n });\n\n // If there are sub-rows, sort them\n sortedData.forEach(row => {\n var _row$subRows;\n sortedFlatRows.push(row);\n if ((_row$subRows = row.subRows) != null && _row$subRows.length) {\n row.subRows = sortData(row.subRows);\n }\n });\n return sortedData;\n };\n return {\n rows: sortData(rowModel.rows),\n flatRows: sortedFlatRows,\n rowsById: rowModel.rowsById\n };\n }, getMemoOptions(table.options, 'debugTable', 'getSortedRowModel', () => table._autoResetPageIndex()));\n}\n\nexport { ColumnFaceting, ColumnFiltering, ColumnGrouping, ColumnOrdering, ColumnPinning, ColumnSizing, ColumnVisibility, GlobalFaceting, GlobalFiltering, Headers, RowExpanding, RowPagination, RowPinning, RowSelection, RowSorting, _getVisibleLeafColumns, aggregationFns, buildHeaderGroups, createCell, createColumn, createColumnHelper, createRow, createTable, defaultColumnSizing, expandRows, filterFns, flattenBy, functionalUpdate, getCoreRowModel, getExpandedRowModel, getFacetedMinMaxValues, getFacetedRowModel, getFacetedUniqueValues, getFilteredRowModel, getGroupedRowModel, getMemoOptions, getPaginationRowModel, getSortedRowModel, isFunction, isNumberArray, isRowSelected, isSubRowSelected, makeStateUpdater, memo, noop, orderColumns, passiveEventSupported, reSplitAlphaNumeric, selectRowsFn, shouldAutoRemoveFilter, sortingFns };\n//# sourceMappingURL=index.mjs.map\n","/**\n * vue-table\n *\n * Copyright (c) TanStack\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport { createTable } from '@tanstack/table-core';\nexport * from '@tanstack/table-core';\nimport { defineComponent, h, isRef, shallowRef, watch, ref, watchEffect, unref } from 'vue';\n\nfunction trueFn() {\n return true;\n}\nconst $PROXY = Symbol('merge-proxy');\n\n// https://github.com/solidjs/solid/blob/c20ca4fd8c36bc0522fedb2c7f38a110b7ee2663/packages/solid/src/render/component.ts#L51-L118\nconst propTraps = {\n get(_, property, receiver) {\n if (property === $PROXY) return receiver;\n return _.get(property);\n },\n has(_, property) {\n return _.has(property);\n },\n set: trueFn,\n deleteProperty: trueFn,\n getOwnPropertyDescriptor(_, property) {\n return {\n configurable: true,\n enumerable: true,\n get() {\n return _.get(property);\n },\n set: trueFn,\n deleteProperty: trueFn\n };\n },\n ownKeys(_) {\n return _.keys();\n }\n};\nfunction resolveSource(s) {\n return 'value' in s ? s.value : s;\n}\nfunction mergeProxy() {\n for (var _len = arguments.length, sources = new Array(_len), _key = 0; _key < _len; _key++) {\n sources[_key] = arguments[_key];\n }\n return new Proxy({\n get(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n const v = resolveSource(sources[i])[property];\n if (v !== undefined) return v;\n }\n },\n has(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n if (property in resolveSource(sources[i])) return true;\n }\n return false;\n },\n keys() {\n const keys = [];\n for (let i = 0; i < sources.length; i++) keys.push(...Object.keys(resolveSource(sources[i])));\n return [...Array.from(new Set(keys))];\n }\n }, propTraps);\n}\n\nconst FlexRender = defineComponent({\n props: ['render', 'props'],\n setup: props => {\n return () => {\n if (typeof props.render === 'function' || typeof props.render === 'object') {\n return h(props.render, props.props);\n }\n return props.render;\n };\n }\n});\nfunction getOptionsWithReactiveData(options) {\n return mergeProxy(options, {\n data: unref(options.data)\n });\n}\nfunction useVueTable(initialOptions) {\n const IS_REACTIVE = isRef(initialOptions.data);\n const resolvedOptions = mergeProxy({\n state: {},\n // Dummy state\n onStateChange: () => {},\n // noop\n renderFallbackValue: null,\n mergeOptions(defaultOptions, options) {\n return IS_REACTIVE ? {\n ...defaultOptions,\n ...options\n } : mergeProxy(defaultOptions, options);\n }\n }, IS_REACTIVE ? getOptionsWithReactiveData(initialOptions) : initialOptions);\n const table = createTable(resolvedOptions);\n\n // Add reactivity support\n if (IS_REACTIVE) {\n const dataRef = shallowRef(initialOptions.data);\n watch(dataRef, () => {\n table.setState(prev => ({\n ...prev,\n data: dataRef.value\n }));\n }, {\n immediate: true\n });\n }\n\n // can't use `reactive` because update needs to be immutable\n const state = ref(table.initialState);\n watchEffect(() => {\n table.setOptions(prev => {\n var _initialOptions$state;\n const stateProxy = new Proxy({}, {\n get: (_, prop) => state.value[prop]\n });\n return mergeProxy(prev, IS_REACTIVE ? getOptionsWithReactiveData(initialOptions) : initialOptions, {\n // merge the initialState and `options.state`\n // create a new proxy on each `setOptions` call\n // and get the value from state on each property access\n state: mergeProxy(stateProxy, (_initialOptions$state = initialOptions.state) != null ? _initialOptions$state : {}),\n // Similarly, we'll maintain both our internal state and any user-provided\n // state.\n onStateChange: updater => {\n if (updater instanceof Function) {\n state.value = updater(state.value);\n } else {\n state.value = updater;\n }\n initialOptions.onStateChange == null || initialOptions.onStateChange(updater);\n }\n });\n });\n });\n return table;\n}\n\nexport { FlexRender, useVueTable };\n//# sourceMappingURL=index.mjs.map\n","<script setup>\ndefineProps({\n header: {\n type: Object,\n required: true,\n },\n});\n\nconst sortIconMap = {\n default: 'i-lucide-chevrons-up-down',\n asc: 'i-lucide-chevron-up',\n desc: 'i-lucide-chevron-down',\n};\n</script>\n\n<template>\n <span :class=\"sortIconMap[header.column.getIsSorted() || 'default']\" />\n</template>\n","<script setup>\nimport { FlexRender } from '@tanstack/vue-table';\nimport SortButton from './SortButton.vue';\nimport { computed } from 'vue';\n\nconst props = defineProps({\n table: {\n type: Object,\n required: true,\n },\n fixed: {\n type: Boolean,\n default: false,\n },\n type: {\n type: String,\n default: 'relaxed',\n },\n});\n\nconst isRelaxed = computed(() => props.type === 'relaxed');\nconst headerClass = computed(() =>\n isRelaxed.value\n ? 'first:rounded-bl-lg first:rounded-tl-lg last:rounded-br-lg last:rounded-tr-lg'\n : ''\n);\n</script>\n\n<template>\n <table :class=\"{ 'table-fixed': fixed }\">\n <thead class=\"sticky top-0 z-10 bg-n-slate-1\">\n <tr\n v-for=\"headerGroup in table.getHeaderGroups()\"\n :key=\"headerGroup.id\"\n class=\"rounded-xl\"\n >\n <th\n v-for=\"header in headerGroup.headers\"\n :key=\"header.id\"\n :style=\"{\n width: `${header.getSize()}px`,\n }\"\n class=\"text-left py-3 px-5 font-medium text-sm text-n-slate-12\"\n :class=\"headerClass\"\n @click=\"header.column.getCanSort() && header.column.toggleSorting()\"\n >\n <div\n v-if=\"!header.isPlaceholder\"\n class=\"flex place-items-center gap-1\"\n >\n <FlexRender\n :render=\"header.column.columnDef.header\"\n :props=\"header.getContext()\"\n />\n <SortButton v-if=\"header.column.getCanSort()\" :header=\"header\" />\n </div>\n </th>\n </tr>\n </thead>\n\n <tbody class=\"divide-y divide-n-slate-2\">\n <tr v-for=\"row in table.getRowModel().rows\" :key=\"row.id\">\n <td\n v-for=\"cell in row.getVisibleCells()\"\n :key=\"cell.id\"\n :class=\"isRelaxed ? 'py-4 px-5' : 'py-2 px-5'\"\n >\n <FlexRender\n :render=\"cell.column.columnDef.cell\"\n :props=\"cell.getContext()\"\n />\n </td>\n </tr>\n </tbody>\n </table>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nconst props = defineProps({\n row: {\n type: Object,\n required: true,\n },\n});\n\nconst routeName = computed(() => `${props.row.original.type}_reports_show`);\n</script>\n\n<template>\n <router-link\n :to=\"{ name: routeName, params: { id: row.original.id } }\"\n class=\"text-n-slate-12 hover:underline\"\n >\n {{ row.original.name }}\n </router-link>\n</template>\n","<script setup>\nimport ReportFilterSelector from './FilterSelector.vue';\nimport { formatTime } from '@chatwoot/utils';\nimport { useStore, useMapGetter } from 'dashboard/composables/store';\nimport Table from 'dashboard/components/table/Table.vue';\nimport { generateFileName } from 'dashboard/helper/downloadHelper';\nimport {\n useVueTable,\n createColumnHelper,\n getCoreRowModel,\n} from '@tanstack/vue-table';\nimport { computed, onMounted, ref, h } from 'vue';\n\nconst props = defineProps({\n type: {\n type: String,\n default: 'account',\n },\n getterKey: {\n type: String,\n default: '',\n },\n actionKey: {\n type: String,\n default: '',\n },\n summaryKey: {\n type: String,\n default: '',\n },\n fetchItemsKey: {\n type: String,\n required: true,\n },\n});\n\nconst store = useStore();\n\nconst from = ref(0);\nconst to = ref(0);\nconst businessHours = ref(false);\nimport { useI18n } from 'vue-i18n';\nimport SummaryReportLink from './SummaryReportLink.vue';\n\nconst rowItems = useMapGetter([props.getterKey]) || [];\nconst reportMetrics = useMapGetter([props.summaryKey]) || [];\n\nconst getMetrics = id =>\n reportMetrics.value.find(metrics => metrics.id === Number(id)) || {};\nconst columnHelper = createColumnHelper();\nconst { t } = useI18n();\n\nconst defaulSpanRender = cellProps =>\n h(\n 'span',\n {\n class: cellProps.getValue() ? '' : 'text-n-slate-12',\n },\n cellProps.getValue()\n );\n\nconst columns = [\n columnHelper.accessor('name', {\n header: t(`SUMMARY_REPORTS.${props.type.toUpperCase()}`),\n width: 300,\n cell: cellProps => h(SummaryReportLink, cellProps),\n }),\n columnHelper.accessor('conversationsCount', {\n header: t('SUMMARY_REPORTS.CONVERSATIONS'),\n width: 200,\n cell: defaulSpanRender,\n }),\n columnHelper.accessor('avgFirstResponseTime', {\n header: t('SUMMARY_REPORTS.AVG_FIRST_RESPONSE_TIME'),\n width: 200,\n cell: defaulSpanRender,\n }),\n columnHelper.accessor('avgResolutionTime', {\n header: t('SUMMARY_REPORTS.AVG_RESOLUTION_TIME'),\n width: 200,\n cell: defaulSpanRender,\n }),\n columnHelper.accessor('avgReplyTime', {\n header: t('SUMMARY_REPORTS.AVG_REPLY_TIME'),\n width: 200,\n cell: defaulSpanRender,\n }),\n columnHelper.accessor('resolutionsCount', {\n header: t('SUMMARY_REPORTS.RESOLUTION_COUNT'),\n width: 200,\n cell: defaulSpanRender,\n }),\n];\n\nconst renderAvgTime = value => (value ? formatTime(value) : '--');\n\nconst renderCount = value => (value ? value.toLocaleString() : '--');\n\nconst tableData = computed(() =>\n rowItems.value.map(row => {\n const rowMetrics = getMetrics(row.id);\n const {\n conversationsCount,\n avgFirstResponseTime,\n avgResolutionTime,\n avgReplyTime,\n resolvedConversationsCount,\n } = rowMetrics;\n return {\n id: row.id,\n name: row.name,\n type: props.type,\n conversationsCount: renderCount(conversationsCount),\n avgFirstResponseTime: renderAvgTime(avgFirstResponseTime),\n avgReplyTime: renderAvgTime(avgReplyTime),\n avgResolutionTime: renderAvgTime(avgResolutionTime),\n resolutionsCount: renderCount(resolvedConversationsCount),\n };\n })\n);\n\nconst fetchAllData = () => {\n store.dispatch(props.fetchItemsKey);\n store.dispatch(props.actionKey, {\n since: from.value,\n until: to.value,\n businessHours: businessHours.value,\n });\n};\n\nonMounted(() => fetchAllData());\n\nconst onFilterChange = updatedFilter => {\n from.value = updatedFilter.from;\n to.value = updatedFilter.to;\n businessHours.value = updatedFilter.businessHours;\n fetchAllData();\n};\n\nconst table = useVueTable({\n get data() {\n return tableData.value;\n },\n columns,\n enableSorting: false,\n getCoreRowModel: getCoreRowModel(),\n});\n\n// downloadReports method is not used in this component\n// but it is exposed to be used in the parent component\nconst downloadReports = () => {\n const dispatchMethods = {\n agent: 'downloadAgentReports',\n label: 'downloadLabelReports',\n inbox: 'downloadInboxReports',\n team: 'downloadTeamReports',\n };\n if (dispatchMethods[props.type]) {\n const fileName = generateFileName({\n type: props.type,\n to: to.value,\n businessHours: businessHours.value,\n });\n const params = {\n from: from.value,\n to: to.value,\n fileName,\n businessHours: businessHours.value,\n };\n store.dispatch(dispatchMethods[props.type], params);\n }\n};\n\ndefineExpose({ downloadReports });\n</script>\n\n<template>\n <ReportFilterSelector @filter-change=\"onFilterChange\" />\n <div\n class=\"flex-1 overflow-auto px-5 py-6 mt-5 shadow outline-1 outline outline-n-container rounded-xl bg-n-solid-2\"\n >\n <Table :table=\"table\" />\n </div>\n</template>\n","<script setup>\nimport { ref } from 'vue';\nimport ReportHeader from './components/ReportHeader.vue';\nimport SummaryReports from './components/SummaryReports.vue';\nimport V4Button from 'dashboard/components-next/button/Button.vue';\n\nconst summarReportsRef = ref(null);\n\nconst onDownloadClick = () => {\n summarReportsRef.value.downloadReports();\n};\n</script>\n\n<template>\n <ReportHeader\n :header-title=\"$t('AGENT_REPORTS.HEADER')\"\n :header-description=\"$t('AGENT_REPORTS.DESCRIPTION')\"\n >\n <V4Button\n :label=\"$t('AGENT_REPORTS.DOWNLOAD_AGENT_REPORTS')\"\n icon=\"i-ph-download-simple\"\n size=\"sm\"\n @click=\"onDownloadClick\"\n />\n </ReportHeader>\n\n <SummaryReports\n ref=\"summarReportsRef\"\n action-key=\"summaryReports/fetchAgentSummaryReports\"\n getter-key=\"agents/getAgents\"\n fetch-items-key=\"agents/get\"\n summary-key=\"summaryReports/getAgentSummaryReports\"\n type=\"agent\"\n />\n</template>\n","<script setup>\nimport { ref } from 'vue';\nimport ReportHeader from './components/ReportHeader.vue';\nimport SummaryReports from './components/SummaryReports.vue';\nimport V4Button from 'dashboard/components-next/button/Button.vue';\n\nconst summarReportsRef = ref(null);\n\nconst onDownloadClick = () => {\n summarReportsRef.value.downloadReports();\n};\n</script>\n\n<template>\n <ReportHeader\n :header-title=\"$t('INBOX_REPORTS.HEADER')\"\n :header-description=\"$t('INBOX_REPORTS.DESCRIPTION')\"\n >\n <V4Button\n :label=\"$t('INBOX_REPORTS.DOWNLOAD_INBOX_REPORTS')\"\n icon=\"i-ph-download-simple\"\n size=\"sm\"\n @click=\"onDownloadClick\"\n />\n </ReportHeader>\n\n <SummaryReports\n ref=\"summarReportsRef\"\n action-key=\"summaryReports/fetchInboxSummaryReports\"\n getter-key=\"inboxes/getInboxes\"\n fetch-items-key=\"inboxes/get\"\n summary-key=\"summaryReports/getInboxSummaryReports\"\n type=\"inbox\"\n />\n</template>\n","<script setup>\nimport { ref } from 'vue';\nimport ReportHeader from './components/ReportHeader.vue';\nimport SummaryReports from './components/SummaryReports.vue';\nimport V4Button from 'dashboard/components-next/button/Button.vue';\n\nconst summarReportsRef = ref(null);\n\nconst onDownloadClick = () => {\n summarReportsRef.value.downloadReports();\n};\n</script>\n\n<template>\n <ReportHeader\n :header-title=\"$t('TEAM_REPORTS.HEADER')\"\n :header-description=\"$t('TEAM_REPORTS.DESCRIPTION')\"\n >\n <V4Button\n :label=\"$t('TEAM_REPORTS.DOWNLOAD_TEAM_REPORTS')\"\n icon=\"i-ph-download-simple\"\n size=\"sm\"\n @click=\"onDownloadClick\"\n />\n </ReportHeader>\n\n <SummaryReports\n ref=\"summarReportsRef\"\n action-key=\"summaryReports/fetchTeamSummaryReports\"\n getter-key=\"teams/getTeams\"\n fetch-items-key=\"teams/get\"\n summary-key=\"summaryReports/getTeamSummaryReports\"\n type=\"team\"\n />\n</template>\n","<script>\nimport endOfDay from 'date-fns/endOfDay';\nimport getUnixTime from 'date-fns/getUnixTime';\nimport startOfDay from 'date-fns/startOfDay';\nimport subDays from 'date-fns/subDays';\nimport Thumbnail from 'dashboard/components/widgets/Thumbnail.vue';\nimport WootDateRangePicker from 'dashboard/components/ui/DateRangePicker.vue';\n\nimport { GROUP_BY_FILTER } from '../constants';\nconst CUSTOM_DATE_RANGE_ID = 5;\n\nexport default {\n components: {\n WootDateRangePicker,\n Thumbnail,\n },\n props: {\n currentFilter: {\n type: Object,\n default: () => null,\n },\n filterItemsList: {\n type: Array,\n default: () => [],\n },\n groupByFilterItemsList: {\n type: Array,\n default: () => [],\n },\n type: {\n type: String,\n default: 'agent',\n },\n selectedGroupByFilter: {\n type: Object,\n default: () => {},\n },\n },\n emits: [\n 'businessHoursToggle',\n 'dateRangeChange',\n 'filterChange',\n 'groupByFilterChange',\n ],\n data() {\n return {\n currentSelectedFilter: this.currentFilter || null,\n currentDateRangeSelection: {\n id: 0,\n name: this.$t('REPORT.DATE_RANGE_OPTIONS.LAST_7_DAYS'),\n },\n customDateRange: [new Date(), new Date()],\n currentSelectedGroupByFilter: null,\n businessHoursSelected: false,\n };\n },\n computed: {\n dateRange() {\n return [\n { id: 0, name: this.$t('REPORT.DATE_RANGE_OPTIONS.LAST_7_DAYS') },\n { id: 1, name: this.$t('REPORT.DATE_RANGE_OPTIONS.LAST_30_DAYS') },\n { id: 2, name: this.$t('REPORT.DATE_RANGE_OPTIONS.LAST_3_MONTHS') },\n { id: 3, name: this.$t('REPORT.DATE_RANGE_OPTIONS.LAST_6_MONTHS') },\n { id: 4, name: this.$t('REPORT.DATE_RANGE_OPTIONS.LAST_YEAR') },\n { id: 5, name: this.$t('REPORT.DATE_RANGE_OPTIONS.CUSTOM_DATE_RANGE') },\n ];\n },\n isDateRangeSelected() {\n return this.currentDateRangeSelection.id === CUSTOM_DATE_RANGE_ID;\n },\n to() {\n if (this.isDateRangeSelected) {\n return this.toCustomDate(this.customDateRange[1]);\n }\n return this.toCustomDate(new Date());\n },\n from() {\n if (this.isDateRangeSelected) {\n return this.fromCustomDate(this.customDateRange[0]);\n }\n const dateRange = {\n 0: 6,\n 1: 29,\n 2: 89,\n 3: 179,\n 4: 364,\n };\n const diff = dateRange[this.currentDateRangeSelection.id];\n const fromDate = subDays(new Date(), diff);\n return this.fromCustomDate(fromDate);\n },\n multiselectLabel() {\n const typeLabels = {\n agent: this.$t('AGENT_REPORTS.FILTER_DROPDOWN_LABEL'),\n label: this.$t('LABEL_REPORTS.FILTER_DROPDOWN_LABEL'),\n inbox: this.$t('INBOX_REPORTS.FILTER_DROPDOWN_LABEL'),\n team: this.$t('TEAM_REPORTS.FILTER_DROPDOWN_LABEL'),\n };\n return typeLabels[this.type] || this.$t('FORMS.MULTISELECT.SELECT_ONE');\n },\n groupBy() {\n if (this.isDateRangeSelected) {\n return GROUP_BY_FILTER[4].period;\n }\n const groupRange = {\n 0: GROUP_BY_FILTER[1].period,\n 1: GROUP_BY_FILTER[2].period,\n 2: GROUP_BY_FILTER[3].period,\n 3: GROUP_BY_FILTER[3].period,\n 4: GROUP_BY_FILTER[4].period,\n };\n return groupRange[this.currentDateRangeSelection.id];\n },\n notLast7Days() {\n return this.groupBy !== GROUP_BY_FILTER[1].period;\n },\n },\n watch: {\n filterItemsList(val) {\n this.currentSelectedFilter = !this.currentFilter\n ? val[0]\n : this.currentFilter;\n this.changeFilterSelection();\n },\n groupByFilterItemsList() {\n this.currentSelectedGroupByFilter = this.selectedGroupByFilter;\n },\n businessHoursSelected() {\n this.$emit('businessHoursToggle', this.businessHoursSelected);\n },\n },\n mounted() {\n this.onDateRangeChange();\n },\n methods: {\n onDateRangeChange() {\n this.$emit('dateRangeChange', {\n from: this.from,\n to: this.to,\n groupBy: this.groupBy,\n });\n },\n fromCustomDate(date) {\n return getUnixTime(startOfDay(date));\n },\n toCustomDate(date) {\n return getUnixTime(endOfDay(date));\n },\n changeDateSelection(selectedRange) {\n this.currentDateRangeSelection = selectedRange;\n this.onDateRangeChange();\n },\n changeFilterSelection() {\n this.$emit('filterChange', this.currentSelectedFilter);\n },\n onChange(value) {\n this.customDateRange = value;\n this.onDateRangeChange();\n },\n changeGroupByFilterSelection() {\n this.$emit('groupByFilterChange', this.currentSelectedGroupByFilter);\n },\n },\n};\n</script>\n\n<template>\n <div class=\"grid grid-cols-1 md:grid-cols-3 gap-y-0.5 gap-x-2\">\n <div v-if=\"type === 'agent'\" class=\"multiselect-wrap--small\">\n <p class=\"mb-2 text-xs font-medium\">\n {{ $t('AGENT_REPORTS.FILTER_DROPDOWN_LABEL') }}\n </p>\n <multiselect\n v-model=\"currentSelectedFilter\"\n :placeholder=\"multiselectLabel\"\n label=\"name\"\n track-by=\"id\"\n :options=\"filterItemsList\"\n :option-height=\"24\"\n :show-labels=\"false\"\n @update:model-value=\"changeFilterSelection\"\n >\n <template #singleLabel=\"props\">\n <div class=\"flex min-w-0 items-center gap-2\">\n <Thumbnail\n :src=\"props.option.thumbnail\"\n :status=\"props.option.availability_status\"\n :username=\"props.option.name\"\n size=\"22px\"\n />\n <span class=\"my-0 text-slate-800 truncate dark:text-slate-75\">{{\n props.option.name\n }}</span>\n </div>\n </template>\n <template #options=\"props\">\n <div class=\"flex items-center gap-2\">\n <Thumbnail\n :src=\"props.option.thumbnail\"\n :status=\"props.option.availability_status\"\n :username=\"props.option.name\"\n size=\"22px\"\n />\n <p class=\"my-0 text-slate-800 dark:text-slate-75\">\n {{ props.option.name }}\n </p>\n </div>\n </template>\n </multiselect>\n </div>\n\n <div v-else-if=\"type === 'label'\" class=\"multiselect-wrap--small\">\n <p class=\"mb-2 text-xs font-medium\">\n {{ $t('LABEL_REPORTS.FILTER_DROPDOWN_LABEL') }}\n </p>\n <multiselect\n v-model=\"currentSelectedFilter\"\n :placeholder=\"multiselectLabel\"\n label=\"title\"\n track-by=\"id\"\n :options=\"filterItemsList\"\n :option-height=\"24\"\n :show-labels=\"false\"\n @update:model-value=\"changeFilterSelection\"\n >\n <template #singleLabel=\"props\">\n <div class=\"flex items-center min-w-0 gap-2\">\n <div\n :style=\"{ backgroundColor: props.option.color }\"\n class=\"w-5 h-5 rounded-full\"\n />\n\n <span class=\"my-0 text-slate-800 truncate dark:text-slate-75\">\n {{ props.option.title }}\n </span>\n </div>\n </template>\n <template #option=\"props\">\n <div class=\"flex items-center min-w-0 gap-2\">\n <div\n :style=\"{ backgroundColor: props.option.color }\"\n class=\"flex-shrink-0 w-5 h-5 border border-solid rounded-full border-slate-100 dark:border-slate-800\"\n />\n\n <span class=\"my-0 text-slate-800 truncate dark:text-slate-75\">\n {{ props.option.title }}\n </span>\n </div>\n </template>\n </multiselect>\n </div>\n\n <div v-else class=\"multiselect-wrap--small\">\n <p class=\"mb-2 text-xs font-medium\">\n <template v-if=\"type === 'inbox'\">\n {{ $t('INBOX_REPORTS.FILTER_DROPDOWN_LABEL') }}\n </template>\n <template v-else-if=\"type === 'team'\">\n {{ $t('TEAM_REPORTS.FILTER_DROPDOWN_LABEL') }}\n </template>\n <template v-else>\n {{ $t('FORMS.MULTISELECT.SELECT_ONE') }}\n </template>\n </p>\n <multiselect\n v-model=\"currentSelectedFilter\"\n track-by=\"id\"\n label=\"name\"\n :placeholder=\"multiselectLabel\"\n selected-label\n :select-label=\"$t('FORMS.MULTISELECT.ENTER_TO_SELECT')\"\n deselect-label=\"\"\n :options=\"filterItemsList\"\n :searchable=\"false\"\n :allow-empty=\"false\"\n @update:model-value=\"changeFilterSelection\"\n />\n </div>\n\n <div class=\"multiselect-wrap--small\">\n <p class=\"mb-2 text-xs font-medium\">\n {{ $t('REPORT.DURATION_FILTER_LABEL') }}\n </p>\n <multiselect\n v-model=\"currentDateRangeSelection\"\n track-by=\"name\"\n label=\"name\"\n :placeholder=\"$t('FORMS.MULTISELECT.SELECT_ONE')\"\n selected-label\n :select-label=\"$t('FORMS.MULTISELECT.ENTER_TO_SELECT')\"\n deselect-label=\"\"\n :options=\"dateRange\"\n :searchable=\"false\"\n :allow-empty=\"false\"\n @select=\"changeDateSelection\"\n />\n </div>\n\n <div\n class=\"flex items-center h-10 self-center order-5 md:order-2 md:justify-self-end\"\n >\n <span class=\"mr-2 text-sm whitespace-nowrap\">\n {{ $t('REPORT.BUSINESS_HOURS') }}\n </span>\n <span>\n <woot-switch v-model=\"businessHoursSelected\" />\n </span>\n </div>\n\n <div v-if=\"isDateRangeSelected\" class=\"order-3 md:order-4\">\n <p class=\"mb-2 text-xs font-medium\">\n {{ $t('REPORT.CUSTOM_DATE_RANGE.PLACEHOLDER') }}\n </p>\n <WootDateRangePicker\n show-range\n :value=\"customDateRange\"\n :confirm-text=\"$t('REPORT.CUSTOM_DATE_RANGE.CONFIRM')\"\n :placeholder=\"$t('REPORT.CUSTOM_DATE_RANGE.PLACEHOLDER')\"\n class=\"auto-width\"\n @change=\"onChange\"\n />\n </div>\n\n <div v-if=\"notLast7Days\" class=\"multiselect-wrap--small order-4 md:order-5\">\n <p class=\"mb-2 text-xs font-medium\">\n {{ $t('REPORT.GROUP_BY_FILTER_DROPDOWN_LABEL') }}\n </p>\n <multiselect\n v-model=\"currentSelectedGroupByFilter\"\n track-by=\"id\"\n label=\"groupBy\"\n :placeholder=\"$t('REPORT.GROUP_BY_FILTER_DROPDOWN_LABEL')\"\n :options=\"groupByFilterItemsList\"\n :allow-empty=\"false\"\n :show-labels=\"false\"\n @update:model-value=\"changeGroupByFilterSelection\"\n />\n </div>\n </div>\n</template>\n","<script>\nimport V4Button from 'dashboard/components-next/button/Button.vue';\nimport { useAlert, useTrack } from 'dashboard/composables';\nimport ReportFilters from './ReportFilters.vue';\nimport ReportContainer from '../ReportContainer.vue';\nimport { GROUP_BY_FILTER } from '../constants';\nimport { generateFileName } from '../../../../../helper/downloadHelper';\nimport { REPORTS_EVENTS } from '../../../../../helper/AnalyticsHelper/events';\nimport ReportHeader from './ReportHeader.vue';\n\nconst GROUP_BY_OPTIONS = {\n DAY: [{ id: 1, groupByKey: 'REPORT.GROUPING_OPTIONS.DAY' }],\n WEEK: [\n { id: 1, groupByKey: 'REPORT.GROUPING_OPTIONS.DAY' },\n { id: 2, groupByKey: 'REPORT.GROUPING_OPTIONS.WEEK' },\n ],\n MONTH: [\n { id: 1, groupByKey: 'REPORT.GROUPING_OPTIONS.DAY' },\n { id: 2, groupByKey: 'REPORT.GROUPING_OPTIONS.WEEK' },\n { id: 3, groupByKey: 'REPORT.GROUPING_OPTIONS.MONTH' },\n ],\n YEAR: [\n { id: 2, groupByKey: 'REPORT.GROUPING_OPTIONS.WEEK' },\n { id: 3, groupByKey: 'REPORT.GROUPING_OPTIONS.MONTH' },\n { id: 4, groupByKey: 'REPORT.GROUPING_OPTIONS.YEAR' },\n ],\n};\n\nexport default {\n components: {\n ReportHeader,\n V4Button,\n ReportFilters,\n ReportContainer,\n },\n props: {\n type: {\n type: String,\n default: 'account',\n },\n getterKey: {\n type: String,\n default: '',\n },\n actionKey: {\n type: String,\n default: '',\n },\n downloadButtonLabel: {\n type: String,\n default: 'Download Reports',\n },\n reportTitle: {\n type: String,\n default: 'Download Reports',\n },\n hasBackButton: {\n type: Boolean,\n default: false,\n },\n selectedItem: {\n type: Object,\n default: null,\n },\n },\n data() {\n return {\n from: 0,\n to: 0,\n selectedFilter: this.selectedItem,\n groupBy: GROUP_BY_FILTER[1],\n groupByfilterItemsList: GROUP_BY_OPTIONS.DAY.map(this.translateOptions),\n selectedGroupByFilter: null,\n businessHours: false,\n };\n },\n computed: {\n filterItemsList() {\n return this.$store.getters[this.getterKey] || [];\n },\n isAgentType() {\n return this.type === 'agent';\n },\n reportKeys() {\n return {\n CONVERSATIONS: 'conversations_count',\n ...(!this.isAgentType && {\n INCOMING_MESSAGES: 'incoming_messages_count',\n }),\n OUTGOING_MESSAGES: 'outgoing_messages_count',\n FIRST_RESPONSE_TIME: 'avg_first_response_time',\n RESOLUTION_TIME: 'avg_resolution_time',\n RESOLUTION_COUNT: 'resolutions_count',\n REPLY_TIME: 'reply_time',\n };\n },\n },\n mounted() {\n this.$store.dispatch(this.actionKey);\n },\n methods: {\n fetchAllData() {\n if (this.selectedFilter) {\n const { from, to, groupBy, businessHours } = this;\n this.$store.dispatch('fetchAccountSummary', {\n from,\n to,\n type: this.type,\n id: this.selectedFilter.id,\n groupBy: groupBy.period,\n businessHours,\n });\n this.fetchChartData();\n }\n },\n fetchChartData() {\n Object.keys(this.reportKeys).forEach(async key => {\n try {\n const { from, to, groupBy, businessHours } = this;\n this.$store.dispatch('fetchAccountReport', {\n metric: this.reportKeys[key],\n from,\n to,\n type: this.type,\n id: this.selectedFilter.id,\n groupBy: groupBy.period,\n businessHours,\n });\n } catch {\n useAlert(this.$t('REPORT.DATA_FETCHING_FAILED'));\n }\n });\n },\n downloadReports() {\n const { from, to, type, businessHours } = this;\n const dispatchMethods = {\n agent: 'downloadAgentReports',\n label: 'downloadLabelReports',\n inbox: 'downloadInboxReports',\n team: 'downloadTeamReports',\n };\n if (dispatchMethods[type]) {\n const fileName = generateFileName({ type, to, businessHours });\n const params = { from, to, fileName, businessHours };\n this.$store.dispatch(dispatchMethods[type], params);\n }\n },\n onDateRangeChange({ from, to, groupBy }) {\n // do not track filter change on inital load\n if (this.from !== 0 && this.to !== 0) {\n useTrack(REPORTS_EVENTS.FILTER_REPORT, {\n filterType: 'date',\n reportType: this.type,\n });\n }\n\n this.from = from;\n this.to = to;\n this.groupByfilterItemsList = this.fetchFilterItems(groupBy);\n const filterItems = this.groupByfilterItemsList.filter(\n item => item.id === this.groupBy.id\n );\n if (filterItems.length > 0) {\n this.selectedGroupByFilter = filterItems[0];\n } else {\n this.selectedGroupByFilter = this.groupByfilterItemsList[0];\n this.groupBy = GROUP_BY_FILTER[this.selectedGroupByFilter.id];\n }\n this.fetchAllData();\n },\n onFilterChange(payload) {\n if (payload) {\n this.selectedFilter = payload;\n this.fetchAllData();\n }\n },\n onGroupByFilterChange(payload) {\n this.groupBy = GROUP_BY_FILTER[payload.id];\n this.fetchAllData();\n\n useTrack(REPORTS_EVENTS.FILTER_REPORT, {\n filterType: 'groupBy',\n filterValue: this.groupBy?.period,\n reportType: this.type,\n });\n },\n fetchFilterItems(groupBy) {\n switch (groupBy) {\n case GROUP_BY_FILTER[2].period:\n return GROUP_BY_OPTIONS.WEEK.map(this.translateOptions);\n case GROUP_BY_FILTER[3].period:\n return GROUP_BY_OPTIONS.MONTH.map(this.translateOptions);\n case GROUP_BY_FILTER[4].period:\n return GROUP_BY_OPTIONS.YEAR.map(this.translateOptions);\n default:\n return GROUP_BY_OPTIONS.DAY.map(this.translateOptions);\n }\n },\n translateOptions(opts) {\n return { id: opts.id, groupBy: this.$t(opts.groupByKey) };\n },\n onBusinessHoursToggle(value) {\n this.businessHours = value;\n this.fetchAllData();\n\n useTrack(REPORTS_EVENTS.FILTER_REPORT, {\n filterType: 'businessHours',\n filterValue: value,\n reportType: this.type,\n });\n },\n },\n};\n</script>\n\n<template>\n <ReportHeader :header-title=\"reportTitle\" :has-back-button=\"hasBackButton\">\n <V4Button\n :label=\"downloadButtonLabel\"\n icon=\"i-ph-download-simple\"\n size=\"sm\"\n @click=\"downloadReports\"\n />\n </ReportHeader>\n <ReportFilters\n v-if=\"filterItemsList\"\n :type=\"type\"\n :filter-items-list=\"filterItemsList\"\n :group-by-filter-items-list=\"groupByfilterItemsList\"\n :selected-group-by-filter=\"selectedGroupByFilter\"\n :current-filter=\"selectedFilter\"\n @date-range-change=\"onDateRangeChange\"\n @filter-change=\"onFilterChange\"\n @group-by-filter-change=\"onGroupByFilterChange\"\n @business-hours-toggle=\"onBusinessHoursToggle\"\n />\n <ReportContainer\n v-if=\"filterItemsList.length\"\n :group-by=\"groupBy\"\n :report-keys=\"reportKeys\"\n />\n</template>\n","<script setup>\nimport { onMounted } from 'vue';\nimport { useRoute } from 'vue-router';\nimport { useFunctionGetter, useStore } from 'dashboard/composables/store';\n\nimport WootReports from './components/WootReports.vue';\nimport Spinner from 'dashboard/components-next/spinner/Spinner.vue';\n\nconst route = useRoute();\nconst store = useStore();\nconst agent = useFunctionGetter('agents/getAgentById', route.params.id);\n\nonMounted(() => store.dispatch('agents/get'));\n</script>\n\n<template>\n <WootReports\n v-if=\"agent.id\"\n :key=\"agent.id\"\n type=\"agent\"\n getter-key=\"agents/getAgents\"\n action-key=\"agents/get\"\n :selected-item=\"agent\"\n :download-button-label=\"$t('AGENT_REPORTS.DOWNLOAD_AGENT_REPORTS')\"\n :report-title=\"$t('AGENT_REPORTS.HEADER')\"\n has-back-button\n />\n <div v-else class=\"w-full py-20\">\n <Spinner class=\"mx-auto\" />\n </div>\n</template>\n","<script setup>\nimport { useRoute } from 'vue-router';\nimport { useFunctionGetter } from 'dashboard/composables/store';\n\nimport WootReports from './components/WootReports.vue';\nimport Spinner from 'dashboard/components-next/spinner/Spinner.vue';\n\nconst route = useRoute();\nconst inbox = useFunctionGetter('inboxes/getInboxById', route.params.id);\n</script>\n\n<template>\n <WootReports\n v-if=\"inbox.id\"\n :key=\"inbox.id\"\n type=\"inbox\"\n getter-key=\"inboxes/getInboxes\"\n action-key=\"inboxes/get\"\n :selected-item=\"inbox\"\n :download-button-label=\"$t('INBOX_REPORTS.DOWNLOAD_INBOX_REPORTS')\"\n :report-title=\"$t('INBOX_REPORTS.HEADER')\"\n has-back-button\n />\n <div v-else class=\"w-full py-20\">\n <Spinner class=\"mx-auto\" />\n </div>\n</template>\n","<script setup>\nimport { useRoute } from 'vue-router';\nimport { useFunctionGetter } from 'dashboard/composables/store';\n\nimport WootReports from './components/WootReports.vue';\nimport Spinner from 'dashboard/components-next/spinner/Spinner.vue';\n\nconst route = useRoute();\nconst team = useFunctionGetter('teams/getTeamById', route.params.id);\n</script>\n\n<template>\n <WootReports\n v-if=\"team.id\"\n :key=\"team.id\"\n type=\"team\"\n getter-key=\"teams/getTeams\"\n action-key=\"teams/get\"\n :selected-item=\"team\"\n :download-button-label=\"$t('TEAM_REPORTS.DOWNLOAD_TEAM_REPORTS')\"\n :report-title=\"$t('TEAM_REPORTS.HEADER')\"\n has-back-button\n />\n <div v-else class=\"w-full py-20\">\n <Spinner class=\"mx-auto\" />\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport CsatMetricCard from './ReportMetricCard.vue';\nimport { CSAT_RATINGS } from 'shared/constants/messages';\nimport BarChart from 'shared/components/charts/BarChart.vue';\n\nexport default {\n components: { BarChart, CsatMetricCard },\n props: {\n filters: {\n type: Object,\n required: true,\n },\n },\n data() {\n return {\n csatRatings: CSAT_RATINGS,\n };\n },\n computed: {\n ...mapGetters({\n metrics: 'csat/getMetrics',\n ratingPercentage: 'csat/getRatingPercentage',\n satisfactionScore: 'csat/getSatisfactionScore',\n responseRate: 'csat/getResponseRate',\n }),\n ratingFilterEnabled() {\n return Boolean(this.filters.rating);\n },\n chartData() {\n const sortedRatings = [...CSAT_RATINGS].sort((a, b) => b.value - a.value);\n return {\n labels: ['Rating'],\n datasets: sortedRatings.map(rating => ({\n label: rating.emoji,\n data: [this.ratingPercentage[rating.value]],\n backgroundColor: rating.color,\n })),\n };\n },\n responseCount() {\n return this.metrics.totalResponseCount\n ? this.metrics.totalResponseCount.toLocaleString()\n : '--';\n },\n chartOptions() {\n return {\n indexAxis: 'y',\n responsive: true,\n plugins: {\n legend: {\n display: false,\n },\n title: {\n display: false,\n },\n tooltip: {\n enabled: false,\n },\n },\n scales: {\n x: {\n display: false,\n stacked: true,\n },\n y: {\n display: false,\n stacked: true,\n },\n },\n };\n },\n },\n methods: {\n formatToPercent(value) {\n return value ? `${value}%` : '--';\n },\n ratingToEmoji(value) {\n return CSAT_RATINGS.find(rating => rating.value === Number(value)).emoji;\n },\n },\n};\n</script>\n\n<!-- eslint-disable vue/no-unused-refs -->\n<!-- Added ref for writing specs -->\n<template>\n <div\n class=\"flex-col lg:flex-row flex flex-wrap mx-0 shadow outline-1 outline outline-n-container rounded-xl bg-n-solid-2 px-6 py-8 gap-4\"\n >\n <CsatMetricCard\n :label=\"$t('CSAT_REPORTS.METRIC.TOTAL_RESPONSES.LABEL')\"\n :info-text=\"$t('CSAT_REPORTS.METRIC.TOTAL_RESPONSES.TOOLTIP')\"\n :value=\"responseCount\"\n class=\"xs:w-full sm:max-w-[50%] lg:w-1/6 lg:max-w-[16%]\"\n />\n <CsatMetricCard\n :disabled=\"ratingFilterEnabled\"\n :label=\"$t('CSAT_REPORTS.METRIC.SATISFACTION_SCORE.LABEL')\"\n :info-text=\"$t('CSAT_REPORTS.METRIC.SATISFACTION_SCORE.TOOLTIP')\"\n :value=\"ratingFilterEnabled ? '--' : formatToPercent(satisfactionScore)\"\n class=\"xs:w-full sm:max-w-[50%] lg:w-1/6 lg:max-w-[16%]\"\n />\n <CsatMetricCard\n :label=\"$t('CSAT_REPORTS.METRIC.RESPONSE_RATE.LABEL')\"\n :info-text=\"$t('CSAT_REPORTS.METRIC.RESPONSE_RATE.TOOLTIP')\"\n :value=\"formatToPercent(responseRate)\"\n class=\"xs:w-full sm:max-w-[50%] lg:w-1/6 lg:max-w-[16%]\"\n />\n\n <div\n v-if=\"metrics.totalResponseCount && !ratingFilterEnabled\"\n ref=\"csatBarChart\"\n class=\"w-full md:w-1/2 md:max-w-[50%] flex-1 rtl:[direction:initial]\"\n >\n <h3\n class=\"flex items-center m-0 text-xs font-medium md:text-sm text-n-slate-12\"\n >\n <div class=\"flex flex-row-reverse justify-end\">\n <div\n v-for=\"(rating, key, index) in ratingPercentage\"\n :key=\"rating + key + index\"\n class=\"ltr:pr-4 rtl:pl-4\"\n >\n <span class=\"my-0 mx-0.5\">{{ ratingToEmoji(key) }}</span>\n <span>{{ formatToPercent(rating) }}</span>\n </div>\n </div>\n </h3>\n <div class=\"mt-2 h-6\">\n <BarChart :collection=\"chartData\" :chart-options=\"chartOptions\" />\n </div>\n </div>\n </div>\n</template>\n","import { inject, provide } from 'vue';\n\nconst DropdownControl = Symbol('DropdownControl');\n\nexport function useDropdownContext() {\n const context = inject(DropdownControl, null);\n\n if (context === null) {\n throw new Error(\n `Component is missing a parent <DropdownContainer /> component.`\n );\n }\n\n return context;\n}\n\nexport function provideDropdownContext(context) {\n provide(DropdownControl, context);\n}\n","<script setup>\nimport { useToggle } from '@vueuse/core';\nimport { vOnClickOutside } from '@vueuse/components';\nimport { provideDropdownContext } from './provider.js';\n\nconst emit = defineEmits(['close']);\nconst [isOpen, toggle] = useToggle(false);\n\nconst closeMenu = () => {\n if (isOpen.value) {\n emit('close');\n toggle(false);\n }\n};\n\nprovideDropdownContext({\n isOpen,\n toggle,\n closeMenu,\n});\n</script>\n\n<template>\n <div v-on-click-outside=\"closeMenu\" class=\"relative space-y-2\">\n <slot name=\"trigger\" :is-open :toggle=\"() => toggle()\" />\n <div v-if=\"isOpen\" class=\"absolute\">\n <slot />\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nconst { strong } = defineProps({\n // Use strong prop when this dropdown is stacked inside another dropdown\n // Chrome has issues with stacked backdrop-blur, so we need an extra blur layer when stacked\n // Also, stacked dropdowns should have a strong border\n strong: {\n type: Boolean,\n default: false,\n },\n});\n\nconst borderClass = computed(() => {\n return strong ? 'border-n-strong' : 'border-n-weak';\n});\n\nconst beforeClass = computed(() => {\n if (!strong) return '';\n\n // Add extra blur layer only when strong prop is true, as a hack for Chrome's stacked backdrop-blur limitation\n // https://issues.chromium.org/issues/40835530\n return \"before:content-['\\x00A0'] before:absolute before:bottom-0 before:left-0 before:w-full before:h-full before:rounded-xl before:backdrop-contrast-70 before:backdrop-blur-sm before:z-0 [&>*]:relative\";\n});\n</script>\n\n<template>\n <div class=\"absolute\">\n <ul\n class=\"text-sm bg-n-alpha-3 backdrop-blur-[100px] border rounded-xl shadow-sm py-2 n-dropdown-body gap-2 grid list-none px-2 reset-base relative\"\n :class=\"[borderClass, beforeClass]\"\n >\n <slot />\n </ul>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport Icon from 'dashboard/components-next/icon/Icon.vue';\nimport { useDropdownContext } from './provider.js';\n\nconst props = defineProps({\n label: { type: String, default: '' },\n icon: { type: [String, Object, Function], default: '' },\n link: { type: [String, Object], default: '' },\n nativeLink: { type: Boolean, default: false },\n click: { type: Function, default: null },\n preserveOpen: { type: Boolean, default: false },\n});\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst { closeMenu } = useDropdownContext();\n\nconst componentIs = computed(() => {\n if (props.link) {\n if (props.nativeLink && typeof props.link === 'string') {\n return 'a';\n }\n\n return 'router-link';\n }\n if (props.click) return 'button';\n\n return 'div';\n});\n\nconst triggerClick = () => {\n if (props.click) {\n props.click();\n }\n if (!props.preserveOpen) closeMenu();\n};\n</script>\n\n<template>\n <li class=\"n-dropdown-item\">\n <component\n :is=\"componentIs\"\n v-bind=\"$attrs\"\n class=\"flex text-left rtl:text-right items-center p-2 reset-base text-sm text-n-slate-12 w-full border-0\"\n :class=\"{\n 'hover:bg-n-alpha-2 rounded-lg w-full gap-3': !$slots.default,\n }\"\n :href=\"componentIs === 'a' ? props.link : null\"\n :to=\"componentIs === 'router-link' ? props.link : null\"\n @click=\"triggerClick\"\n >\n <slot>\n <slot name=\"icon\">\n <Icon v-if=\"icon\" class=\"size-4 text-n-slate-11\" :icon=\"icon\" />\n </slot>\n <slot name=\"label\">{{ label }}</slot>\n </slot>\n </component>\n </li>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport DropdownContainer from 'next/dropdown-menu/base/DropdownContainer.vue';\nimport DropdownSection from 'next/dropdown-menu/base/DropdownSection.vue';\nimport DropdownBody from 'next/dropdown-menu/base/DropdownBody.vue';\nimport DropdownItem from 'next/dropdown-menu/base/DropdownItem.vue';\n\nimport Button from 'next/button/Button.vue';\n\n// [{label, icon, value}]\nconst props = defineProps({\n options: {\n type: Array,\n required: true,\n },\n hideLabel: {\n type: Boolean,\n default: false,\n },\n hideIcon: {\n type: Boolean,\n default: false,\n },\n variant: {\n type: String,\n default: 'faded',\n },\n});\n\nconst selected = defineModel({\n type: [String, Number],\n required: true,\n});\n\nconst selectedOption = computed(() => {\n return props.options.find(o => o.value === selected.value) || {};\n});\n\nconst iconToRender = computed(() => {\n if (props.hideIcon) return null;\n return selectedOption.value.icon || 'i-lucide-chevron-down';\n});\n\nconst updateSelected = newValue => {\n selected.value = newValue;\n};\n</script>\n\n<template>\n <DropdownContainer>\n <template #trigger=\"{ toggle }\">\n <slot name=\"trigger\" :toggle=\"toggle\">\n <Button\n sm\n slate\n :variant\n :icon=\"iconToRender\"\n :trailing-icon=\"selectedOption.icon ? false : true\"\n :label=\"hideLabel ? null : selectedOption.label\"\n @click=\"toggle\"\n />\n </slot>\n </template>\n <DropdownBody class=\"top-0 min-w-48 z-50\" strong>\n <DropdownSection class=\"max-h-80 overflow-scroll\">\n <DropdownItem\n v-for=\"option in options\"\n :key=\"option.value\"\n :label=\"option.label\"\n :icon=\"option.icon\"\n @click=\"updateSelected(option.value)\"\n />\n </DropdownSection>\n </DropdownBody>\n </DropdownContainer>\n</template>\n","<script setup>\nimport { computed, onMounted } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport FilterSelect from 'dashboard/components-next/filter/inputs/FilterSelect.vue';\n\nconst props = defineProps({\n table: {\n type: Object,\n required: true,\n },\n defaultPageSize: {\n type: Number,\n default: 10,\n },\n showPageSizeSelector: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits(['pageSizeChange']);\nconst { t } = useI18n();\n\nconst pageSizeOptions = [\n {\n label: `${t('REPORT.PAGINATION.PER_PAGE_TEMPLATE', { size: 10 })}`,\n value: 10,\n },\n {\n label: `${t('REPORT.PAGINATION.PER_PAGE_TEMPLATE', { size: 20 })}`,\n value: 20,\n },\n {\n label: `${t('REPORT.PAGINATION.PER_PAGE_TEMPLATE', { size: 50 })}`,\n value: 50,\n },\n {\n label: `${t('REPORT.PAGINATION.PER_PAGE_TEMPLATE', { size: 100 })}`,\n value: 100,\n },\n];\n\nconst getFormattedPages = (start, end) => {\n const formatter = new Intl.NumberFormat(navigator.language);\n return Array.from({ length: end - start + 1 }, (_, i) =>\n formatter.format(start + i)\n );\n};\n\nconst currentPage = computed(() => {\n return props.table.getState().pagination.pageIndex + 1;\n});\n\nconst totalPages = computed(() => {\n return props.table.getPageCount();\n});\n\nconst visiblePages = computed(() => {\n if (totalPages.value <= 3) return getFormattedPages(1, totalPages.value);\n if (currentPage.value === 1) return getFormattedPages(1, 3);\n if (currentPage.value === totalPages.value) {\n return getFormattedPages(totalPages.value - 2, totalPages.value);\n }\n\n return getFormattedPages(currentPage.value - 1, currentPage.value + 1);\n});\n\nconst total = computed(() => {\n return props.table.getRowCount();\n});\n\nconst start = computed(() => {\n const { pagination } = props.table.getState();\n return pagination.pageIndex * pagination.pageSize + 1;\n});\n\nconst end = computed(() => {\n const { pagination } = props.table.getState();\n return Math.min(\n (pagination.pageIndex + 1) * pagination.pageSize,\n total.value\n );\n});\n\nconst currentPageSize = computed({\n get() {\n return props.table.getState().pagination.pageSize;\n },\n set(newValue) {\n props.table.setPageSize(Number(newValue));\n emit('pageSizeChange', Number(newValue));\n },\n});\n\nonMounted(() => {\n if (\n props.showPageSizeSelector &&\n props.defaultPageSize &&\n props.defaultPageSize !== 10\n ) {\n props.table.setPageSize(props.defaultPageSize);\n }\n});\n</script>\n\n<template>\n <div class=\"flex items-center justify-between\">\n <div class=\"flex flex-1 items-center gap-2 justify-between\">\n <p class=\"text-sm truncate text-n-slate-11 mb-0\">\n {{ $t('REPORT.PAGINATION.RESULTS', { start, end, total }) }}\n </p>\n <div class=\"flex items-center gap-2\">\n <FilterSelect\n v-if=\"showPageSizeSelector\"\n v-model=\"currentPageSize\"\n variant=\"outline\"\n hide-icon\n class=\"[&>button]:text-n-slate-11 [&>button]:hover:text-n-slate-12 [&>button]:h-6\"\n :options=\"pageSizeOptions\"\n />\n <nav class=\"isolate inline-flex items-center gap-1.5\">\n <Button\n icon=\"i-lucide-chevrons-left\"\n ghost\n slate\n sm\n class=\"!size-6\"\n :disabled=\"!table.getCanPreviousPage()\"\n @click=\"table.setPageIndex(0)\"\n />\n <Button\n icon=\"i-lucide-chevron-left\"\n ghost\n slate\n sm\n class=\"!size-6\"\n :disabled=\"!table.getCanPreviousPage()\"\n @click=\"table.previousPage()\"\n />\n <Button\n v-for=\"page in visiblePages\"\n :key=\"page\"\n xs\n outline\n :color=\"page == currentPage ? 'blue' : 'slate'\"\n class=\"!h-6 min-w-6\"\n @click=\"table.setPageIndex(page - 1)\"\n >\n <span\n class=\"text-center\"\n :class=\"{ 'text-n-brand': page == currentPage }\"\n >\n {{ page }}\n </span>\n </Button>\n <Button\n icon=\"i-lucide-chevron-right\"\n ghost\n slate\n sm\n class=\"!size-6\"\n :disabled=\"!table.getCanNextPage()\"\n @click=\"table.nextPage()\"\n />\n <Button\n icon=\"i-lucide-chevrons-right\"\n ghost\n slate\n sm\n class=\"!size-6\"\n :disabled=\"!table.getCanNextPage()\"\n @click=\"table.setPageIndex(table.getPageCount() - 1)\"\n />\n </nav>\n </div>\n </div>\n </div>\n</template>\n","<script setup>\nconst { row } = defineProps({\n row: {\n type: Object,\n required: true,\n },\n});\n\nconst routerParams = {\n name: 'inbox_conversation',\n params: { conversation_id: row.original.conversationId },\n};\n</script>\n\n<template>\n <div class=\"text-right\">\n <router-link :to=\"routerParams\" class=\"hover:underline\">\n {{ `#${row.original.conversationId}` }}\n </router-link>\n <div\n v-tooltip=\"row.original.createdAt\"\n class=\"text-slate-600 dark:text-slate-200 text-sm\"\n >\n {{ row.original.createdAgo }}\n </div>\n </div>\n</template>\n","<script setup>\nimport { defineEmits, computed, h } from 'vue';\nimport { useMapGetter } from 'dashboard/composables/store';\nimport { useI18n } from 'vue-i18n';\n\n// [TODO] Instead of converting the values to their reprentation when building the tableData\n// We should do the change in the cell\nimport { messageStamp, dynamicTime } from 'shared/helpers/timeHelper';\n\n// components\nimport Table from 'dashboard/components/table/Table.vue';\nimport Pagination from 'dashboard/components/table/Pagination.vue';\nimport UserAvatarWithName from 'dashboard/components/widgets/UserAvatarWithName.vue';\nimport ConversationCell from './ConversationCell.vue';\n\n// constants\nimport { CSAT_RATINGS } from 'shared/constants/messages';\n\nimport {\n useVueTable,\n createColumnHelper,\n getCoreRowModel,\n} from '@tanstack/vue-table';\n\nconst { pageIndex } = defineProps({\n pageIndex: {\n type: Number,\n default: 0,\n },\n});\n\nconst emit = defineEmits(['pageChange']);\nconst { t } = useI18n();\n// const isRTL = useMapGetter('accounts/isRTL');\nconst csatResponses = useMapGetter('csat/getCSATResponses');\nconst metrics = useMapGetter('csat/getMetrics');\n\nconst tableData = computed(() => {\n return csatResponses.value.map(response => ({\n contact: response.contact,\n assignedAgent: response.assigned_agent,\n rating: response.rating,\n feedbackText: response.feedback_message || '---',\n conversationId: response.conversation_id,\n createdAgo: dynamicTime(response.created_at),\n createdAt: messageStamp(response.created_at, 'LLL d yyyy, h:mm a'),\n }));\n});\n\nconst defaulSpanRender = cellProps =>\n h(\n 'span',\n {\n class: cellProps.getValue() ? '' : 'text-slate-300 dark:text-slate-700',\n },\n cellProps.getValue() ? cellProps.getValue() : '---'\n );\n\nconst columnHelper = createColumnHelper();\n\nconst columns = [\n columnHelper.accessor('contact', {\n header: t('CSAT_REPORTS.TABLE.HEADER.CONTACT_NAME'),\n width: 200,\n cell: cellProps => {\n const { contact } = cellProps.row.original;\n if (contact) {\n return h(UserAvatarWithName, { user: contact });\n }\n return '--';\n },\n }),\n columnHelper.accessor('assignedAgent', {\n header: t('CSAT_REPORTS.TABLE.HEADER.AGENT_NAME'),\n width: 200,\n cell: cellProps => {\n const { assignedAgent } = cellProps.row.original;\n if (assignedAgent) {\n return h(UserAvatarWithName, { user: assignedAgent });\n }\n return '--';\n },\n }),\n columnHelper.accessor('rating', {\n header: t('CSAT_REPORTS.TABLE.HEADER.RATING'),\n align: 'center',\n width: 80,\n cell: cellProps => {\n const { rating: giveRating } = cellProps.row.original;\n const [ratingObject = {}] = CSAT_RATINGS.filter(\n rating => rating.value === giveRating\n );\n\n return h(\n 'span',\n {\n class: ratingObject.emoji\n ? 'emoji-response text-lg'\n : 'text-slate-300 dark:text-slate-700',\n },\n ratingObject.emoji || '---'\n );\n },\n }),\n columnHelper.accessor('feedbackText', {\n header: t('CSAT_REPORTS.TABLE.HEADER.FEEDBACK_TEXT'),\n width: 400,\n cell: defaulSpanRender,\n }),\n columnHelper.accessor('conversationId', {\n header: '',\n width: 100,\n cell: cellProps => h(ConversationCell, cellProps),\n }),\n];\n\nconst paginationParams = computed(() => {\n return {\n pageIndex: pageIndex,\n pageSize: 25,\n };\n});\n\nconst table = useVueTable({\n get data() {\n return tableData.value;\n },\n columns,\n manualPagination: true,\n enableSorting: false,\n getCoreRowModel: getCoreRowModel(),\n get rowCount() {\n return metrics.value.totalResponseCount;\n },\n state: {\n get pagination() {\n return paginationParams.value;\n },\n },\n onPaginationChange: updater => {\n const newPagintaion = updater(paginationParams.value);\n emit('pageChange', newPagintaion.pageIndex);\n },\n});\n</script>\n\n<template>\n <div\n class=\"shadow outline-1 outline outline-n-container rounded-xl bg-n-solid-2 px-6 py-5\"\n >\n <Table :table=\"table\" class=\"max-h-[calc(100vh-21.875rem)]\" />\n <div\n v-show=\"!tableData.length\"\n class=\"h-48 flex items-center justify-center text-n-slate-12 text-sm\"\n >\n {{ $t('CSAT_REPORTS.NO_RECORDS') }}\n </div>\n <div v-if=\"metrics.totalResponseCount\" class=\"table-pagination\">\n <Pagination class=\"mt-2\" :table=\"table\" />\n </div>\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useAlert, useTrack } from 'dashboard/composables';\nimport CsatMetrics from './components/CsatMetrics.vue';\nimport CsatTable from './components/CsatTable.vue';\nimport ReportFilterSelector from './components/FilterSelector.vue';\nimport { generateFileName } from '../../../../helper/downloadHelper';\nimport { REPORTS_EVENTS } from '../../../../helper/AnalyticsHelper/events';\nimport { FEATURE_FLAGS } from '../../../../featureFlags';\nimport V4Button from 'dashboard/components-next/button/Button.vue';\nimport ReportHeader from './components/ReportHeader.vue';\n\nexport default {\n name: 'CsatResponses',\n components: {\n CsatMetrics,\n CsatTable,\n ReportFilterSelector,\n ReportHeader,\n V4Button,\n },\n data() {\n return {\n pageIndex: 0,\n from: 0,\n to: 0,\n userIds: [],\n inbox: null,\n team: null,\n rating: null,\n };\n },\n computed: {\n ...mapGetters({\n accountId: 'getCurrentAccountId',\n isFeatureEnabledOnAccount: 'accounts/isFeatureEnabledonAccount',\n }),\n requestPayload() {\n return {\n from: this.from,\n to: this.to,\n user_ids: this.userIds,\n inbox_id: this.inbox,\n team_id: this.team,\n rating: this.rating,\n };\n },\n isTeamsEnabled() {\n return this.isFeatureEnabledOnAccount(\n this.accountId,\n FEATURE_FLAGS.TEAM_MANAGEMENT\n );\n },\n },\n methods: {\n getAllData() {\n try {\n this.$store.dispatch('csat/getMetrics', this.requestPayload);\n this.getResponses();\n } catch {\n useAlert(this.$t('REPORT.DATA_FETCHING_FAILED'));\n }\n },\n getResponses() {\n this.$store.dispatch('csat/get', {\n page: this.pageIndex + 1,\n ...this.requestPayload,\n });\n },\n downloadReports() {\n const type = 'csat';\n try {\n this.$store.dispatch('csat/downloadCSATReports', {\n fileName: generateFileName({ type, to: this.to }),\n ...this.requestPayload,\n });\n } catch (error) {\n useAlert(this.$t('REPORT.CSAT_REPORTS.DOWNLOAD_FAILED'));\n }\n },\n onPageNumberChange(pageIndex) {\n this.pageIndex = pageIndex;\n this.getResponses();\n },\n onFilterChange({\n from,\n to,\n selectedAgents,\n selectedInbox,\n selectedTeam,\n selectedRating,\n }) {\n // do not track filter change on inital load\n if (this.from !== 0 && this.to !== 0) {\n useTrack(REPORTS_EVENTS.FILTER_REPORT, {\n filterType: 'date',\n reportType: 'csat',\n });\n }\n\n this.from = from;\n this.to = to;\n this.userIds = selectedAgents.map(el => el.id);\n this.inbox = selectedInbox?.id;\n this.team = selectedTeam?.id;\n this.rating = selectedRating?.value;\n\n this.getAllData();\n },\n },\n};\n</script>\n\n<template>\n <ReportHeader :header-title=\"$t('CSAT_REPORTS.HEADER')\">\n <V4Button\n :label=\"$t('CSAT_REPORTS.DOWNLOAD')\"\n icon=\"i-ph-download-simple\"\n size=\"sm\"\n @click=\"downloadReports\"\n />\n </ReportHeader>\n\n <div class=\"flex flex-col gap-4\">\n <ReportFilterSelector\n show-agents-filter\n show-inbox-filter\n show-rating-filter\n :show-team-filter=\"isTeamsEnabled\"\n :show-business-hours-switch=\"false\"\n @filter-change=\"onFilterChange\"\n />\n\n <CsatMetrics :filters=\"requestPayload\" />\n <CsatTable :page-index=\"pageIndex\" @page-change=\"onPageNumberChange\" />\n </div>\n</template>\n","<script setup>\nimport { ref, watch, onMounted } from 'vue';\nimport ReportMetricCard from './ReportMetricCard.vue';\nimport ReportsAPI from 'dashboard/api/reports';\n\nconst props = defineProps({\n filters: {\n type: Object,\n required: true,\n },\n});\n\nconst conversationCount = ref('0');\nconst messageCount = ref('0');\nconst resolutionRate = ref('0');\nconst handoffRate = ref('0');\n\nconst formatToPercent = value => {\n return value ? `${value}%` : '--';\n};\n\nconst fetchMetrics = () => {\n if (!props.filters.to || !props.filters.from) {\n return;\n }\n ReportsAPI.getBotMetrics(props.filters).then(response => {\n conversationCount.value = response.data.conversation_count.toLocaleString();\n messageCount.value = response.data.message_count.toLocaleString();\n resolutionRate.value = response.data.resolution_rate.toString();\n handoffRate.value = response.data.handoff_rate.toString();\n });\n};\n\nwatch(() => props.filters, fetchMetrics, { deep: true });\n\nonMounted(fetchMetrics);\n</script>\n\n<template>\n <div\n class=\"flex flex-wrap mx-0 shadow outline-1 outline outline-n-container rounded-xl bg-n-solid-2 px-6 py-5\"\n >\n <ReportMetricCard\n :label=\"$t('BOT_REPORTS.METRIC.TOTAL_CONVERSATIONS.LABEL')\"\n :info-text=\"$t('BOT_REPORTS.METRIC.TOTAL_CONVERSATIONS.TOOLTIP')\"\n :value=\"conversationCount\"\n class=\"flex-1\"\n />\n <ReportMetricCard\n :label=\"$t('BOT_REPORTS.METRIC.TOTAL_RESPONSES.LABEL')\"\n :info-text=\"$t('BOT_REPORTS.METRIC.TOTAL_RESPONSES.TOOLTIP')\"\n :value=\"messageCount\"\n class=\"flex-1\"\n />\n <ReportMetricCard\n :label=\"$t('BOT_REPORTS.METRIC.RESOLUTION_RATE.LABEL')\"\n :info-text=\"$t('BOT_REPORTS.METRIC.RESOLUTION_RATE.TOOLTIP')\"\n :value=\"formatToPercent(resolutionRate)\"\n class=\"flex-1\"\n />\n <ReportMetricCard\n :label=\"$t('BOT_REPORTS.METRIC.HANDOFF_RATE.LABEL')\"\n :info-text=\"$t('BOT_REPORTS.METRIC.HANDOFF_RATE.TOOLTIP')\"\n :value=\"formatToPercent(handoffRate)\"\n class=\"flex-1\"\n />\n </div>\n</template>\n","<script>\nimport { useAlert, useTrack } from 'dashboard/composables';\nimport BotMetrics from './components/BotMetrics.vue';\nimport ReportFilterSelector from './components/FilterSelector.vue';\nimport { GROUP_BY_FILTER } from './constants';\nimport ReportContainer from './ReportContainer.vue';\nimport { REPORTS_EVENTS } from '../../../../helper/AnalyticsHelper/events';\nimport ReportHeader from './components/ReportHeader.vue';\n\nexport default {\n name: 'BotReports',\n components: {\n BotMetrics,\n ReportHeader,\n ReportFilterSelector,\n ReportContainer,\n },\n data() {\n return {\n from: 0,\n to: 0,\n groupBy: GROUP_BY_FILTER[1],\n reportKeys: {\n BOT_RESOLUTION_COUNT: 'bot_resolutions_count',\n BOT_HANDOFF_COUNT: 'bot_handoffs_count',\n },\n businessHours: false,\n };\n },\n computed: {\n requestPayload() {\n return {\n from: this.from,\n to: this.to,\n };\n },\n },\n methods: {\n fetchAllData() {\n this.fetchBotSummary();\n this.fetchChartData();\n },\n fetchBotSummary() {\n try {\n this.$store.dispatch('fetchBotSummary', this.getRequestPayload());\n } catch {\n useAlert(this.$t('REPORT.SUMMARY_FETCHING_FAILED'));\n }\n },\n fetchChartData() {\n Object.keys(this.reportKeys).forEach(async key => {\n try {\n await this.$store.dispatch('fetchAccountReport', {\n metric: this.reportKeys[key],\n ...this.getRequestPayload(),\n });\n } catch {\n useAlert(this.$t('REPORT.DATA_FETCHING_FAILED'));\n }\n });\n },\n getRequestPayload() {\n const { from, to, groupBy, businessHours } = this;\n\n return {\n from,\n to,\n groupBy: groupBy?.period,\n businessHours,\n };\n },\n onFilterChange({ from, to, groupBy, businessHours }) {\n this.from = from;\n this.to = to;\n this.groupBy = groupBy;\n this.businessHours = businessHours;\n this.fetchAllData();\n\n useTrack(REPORTS_EVENTS.FILTER_REPORT, {\n filterValue: { from, to, groupBy, businessHours },\n reportType: 'bots',\n });\n },\n },\n};\n</script>\n\n<template>\n <ReportHeader :header-title=\"$t('BOT_REPORTS.HEADER')\" />\n <div class=\"flex flex-col gap-4\">\n <ReportFilterSelector\n :show-agents-filter=\"false\"\n show-group-by-filter\n :show-business-hours-switch=\"false\"\n @filter-change=\"onFilterChange\"\n />\n\n <BotMetrics :filters=\"requestPayload\" />\n <ReportContainer\n account-summary-key=\"getBotSummary\"\n :group-by=\"groupBy\"\n :report-keys=\"reportKeys\"\n />\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\n\nimport format from 'date-fns/format';\nimport getDay from 'date-fns/getDay';\n\nimport { getQuantileIntervals } from '@chatwoot/utils';\n\nimport { groupHeatmapByDay } from 'helpers/ReportsDataHelper';\nimport { useI18n } from 'vue-i18n';\n\nconst props = defineProps({\n heatmapData: {\n type: Array,\n default: () => [],\n },\n numberOfRows: {\n type: Number,\n default: 7,\n },\n isLoading: {\n type: Boolean,\n default: false,\n },\n});\nconst { t } = useI18n();\nconst processedData = computed(() => {\n return groupHeatmapByDay(props.heatmapData);\n});\n\nconst quantileRange = computed(() => {\n const flattendedData = props.heatmapData.map(data => data.value);\n return getQuantileIntervals(flattendedData, [0.2, 0.4, 0.6, 0.8, 0.9, 0.99]);\n});\n\nfunction getCountTooltip(value) {\n if (!value) {\n return t('OVERVIEW_REPORTS.CONVERSATION_HEATMAP.NO_CONVERSATIONS');\n }\n\n if (value === 1) {\n return t('OVERVIEW_REPORTS.CONVERSATION_HEATMAP.CONVERSATION', {\n count: value,\n });\n }\n\n return t('OVERVIEW_REPORTS.CONVERSATION_HEATMAP.CONVERSATIONS', {\n count: value,\n });\n}\n\nfunction formatDate(dateString) {\n return format(new Date(dateString), 'MMM d, yyyy');\n}\n\nfunction getDayOfTheWeek(date) {\n const dayIndex = getDay(date);\n const days = [\n t('DAYS_OF_WEEK.SUNDAY'),\n t('DAYS_OF_WEEK.MONDAY'),\n t('DAYS_OF_WEEK.TUESDAY'),\n t('DAYS_OF_WEEK.WEDNESDAY'),\n t('DAYS_OF_WEEK.THURSDAY'),\n t('DAYS_OF_WEEK.FRIDAY'),\n t('DAYS_OF_WEEK.SATURDAY'),\n ];\n return days[dayIndex];\n}\nfunction getHeatmapLevelClass(value) {\n if (!value) return 'outline-n-container dark:bg-slate-700/40 bg-slate-50/50';\n\n let level = [...quantileRange.value, Infinity].findIndex(\n range => value <= range && value > 0\n );\n\n if (level > 6) level = 5;\n\n if (level === 0) {\n return 'outline-n-container dark:bg-slate-700/40 bg-slate-50/50';\n }\n\n const classes = [\n 'bg-woot-50 dark:bg-woot-800/40 dark:outline-woot-800/80',\n 'bg-woot-100 dark:bg-woot-800/30 dark:outline-woot-800/80',\n 'bg-woot-200 dark:bg-woot-500/40 dark:outline-woot-700/80',\n 'bg-woot-300 dark:bg-woot-500/60 dark:outline-woot-600/80',\n 'bg-woot-600 dark:bg-woot-500/80 dark:outline-woot-500/80',\n 'bg-woot-800 dark:bg-woot-500 dark:outline-woot-400/80',\n ];\n\n return classes[level - 1];\n}\n</script>\n\n<template>\n <div\n class=\"grid relative w-full gap-x-4 gap-y-2.5 overflow-y-scroll md:overflow-visible grid-cols-[80px_1fr] min-h-72\"\n >\n <template v-if=\"isLoading\">\n <div class=\"grid gap-[5px] flex-shrink-0\">\n <div\n v-for=\"ii in numberOfRows\"\n :key=\"ii\"\n class=\"w-full rounded-sm bg-slate-100 dark:bg-slate-900 animate-loader-pulse h-8 min-w-[70px]\"\n />\n </div>\n <div class=\"grid gap-[5px] w-full min-w-[700px]\">\n <div\n v-for=\"ii in numberOfRows\"\n :key=\"ii\"\n class=\"grid gap-[5px] grid-cols-[repeat(24,_1fr)]\"\n >\n <div\n v-for=\"jj in 24\"\n :key=\"jj\"\n class=\"w-full h-8 rounded-sm bg-slate-100 dark:bg-slate-900 animate-loader-pulse\"\n />\n </div>\n </div>\n <div />\n <div\n class=\"grid grid-cols-[repeat(24,_1fr)] gap-[5px] w-full text-[8px] font-semibold h-5 text-slate-800 dark:text-slate-200\"\n >\n <div\n v-for=\"ii in 24\"\n :key=\"ii\"\n class=\"flex items-center justify-center\"\n >\n {{ ii - 1 }} – {{ ii }}\n </div>\n </div>\n </template>\n <template v-else>\n <div class=\"grid gap-[5px] flex-shrink-0\">\n <div\n v-for=\"dateKey in processedData.keys()\"\n :key=\"dateKey\"\n class=\"h-8 min-w-[70px] text-slate-800 dark:text-slate-200 text-[10px] font-semibold flex flex-col items-end justify-center\"\n >\n {{ getDayOfTheWeek(new Date(dateKey)) }}\n <time class=\"font-normal text-slate-700 dark:text-slate-200\">\n {{ formatDate(dateKey) }}\n </time>\n </div>\n </div>\n <div class=\"grid gap-[5px] w-full min-w-[700px]\">\n <div\n v-for=\"dateKey in processedData.keys()\"\n :key=\"dateKey\"\n class=\"grid gap-[5px] grid-cols-[repeat(24,_1fr)]\"\n >\n <div\n v-for=\"data in processedData.get(dateKey)\"\n :key=\"data.timestamp\"\n v-tooltip.top=\"getCountTooltip(data.value)\"\n class=\"h-8 rounded-sm shadow-inner dark:outline dark:outline-1 shadow-black\"\n :class=\"getHeatmapLevelClass(data.value)\"\n />\n </div>\n </div>\n <div />\n <div\n class=\"grid grid-cols-[repeat(24,_1fr)] gap-[5px] w-full text-[8px] font-semibold h-5 text-slate-800 dark:text-slate-200\"\n >\n <div\n v-for=\"ii in 24\"\n :key=\"ii\"\n class=\"flex items-center justify-center\"\n >\n {{ ii - 1 }} – {{ ii }}\n </div>\n </div>\n </template>\n </div>\n</template>\n","import { ref, onBeforeUnmount } from 'vue';\n\nexport const useLiveRefresh = (callback, interval = 60000) => {\n const timeoutId = ref(null);\n\n const startRefetching = () => {\n timeoutId.value = setTimeout(async () => {\n await callback();\n startRefetching();\n }, interval);\n };\n\n const stopRefetching = () => {\n if (timeoutId.value) {\n clearTimeout(timeoutId.value);\n timeoutId.value = null;\n }\n };\n\n onBeforeUnmount(() => {\n stopRefetching();\n });\n\n return {\n startRefetching,\n stopRefetching,\n };\n};\n","<script setup>\nimport { defineProps, ref, defineEmits, computed, onMounted } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nimport Icon from 'dashboard/components-next/icon/Icon.vue';\nimport Avatar from 'dashboard/components-next/avatar/Avatar.vue';\n\nconst props = defineProps({\n menuItems: {\n type: Array,\n required: true,\n validator: value => {\n return value.every(item => item.action && item.value && item.label);\n },\n },\n thumbnailSize: {\n type: Number,\n default: 20,\n },\n showSearch: {\n type: Boolean,\n default: false,\n },\n searchPlaceholder: {\n type: String,\n default: '',\n },\n isSearching: {\n type: Boolean,\n default: false,\n },\n labelClass: {\n type: String,\n default: '',\n },\n});\n\nconst emit = defineEmits(['action']);\n\nconst { t } = useI18n();\n\nconst searchInput = ref(null);\nconst searchQuery = ref('');\n\nconst filteredMenuItems = computed(() => {\n if (!searchQuery.value) return props.menuItems;\n\n return props.menuItems.filter(item =>\n item.label.toLowerCase().includes(searchQuery.value.toLowerCase())\n );\n});\n\nconst handleAction = item => {\n const { action, value, ...rest } = item;\n emit('action', { action, value, ...rest });\n};\n\nonMounted(() => {\n if (searchInput.value && props.showSearch) {\n searchInput.value.focus();\n }\n});\n</script>\n\n<template>\n <div\n class=\"bg-n-alpha-3 backdrop-blur-[100px] border-0 outline outline-1 outline-n-container absolute rounded-xl z-50 py-2 px-2 gap-2 flex flex-col min-w-[136px] shadow-lg\"\n >\n <div v-if=\"showSearch\" class=\"relative\">\n <span class=\"absolute i-lucide-search size-3.5 top-2 left-3\" />\n <input\n ref=\"searchInput\"\n v-model=\"searchQuery\"\n type=\"search\"\n :placeholder=\"\n searchPlaceholder || t('DROPDOWN_MENU.SEARCH_PLACEHOLDER')\n \"\n class=\"reset-base w-full h-8 py-2 pl-10 pr-2 text-sm focus:outline-none border-none rounded-lg bg-n-alpha-black2 dark:bg-n-solid-1 text-n-slate-12\"\n />\n </div>\n <button\n v-for=\"(item, index) in filteredMenuItems\"\n :key=\"index\"\n class=\"inline-flex items-center justify-start w-full h-8 min-w-0 gap-2 px-2 py-1.5 transition-all duration-200 ease-in-out border-0 rounded-lg z-60 hover:bg-n-alpha-1 dark:hover:bg-n-alpha-2 disabled:cursor-not-allowed disabled:pointer-events-none disabled:opacity-50\"\n :class=\"{\n 'bg-n-alpha-1 dark:bg-n-solid-active': item.isSelected,\n 'text-n-ruby-11': item.action === 'delete',\n 'text-n-slate-12': item.action !== 'delete',\n }\"\n :disabled=\"item.disabled\"\n @click=\"handleAction(item)\"\n >\n <slot name=\"thumbnail\" :item=\"item\">\n <Avatar\n v-if=\"item.thumbnail\"\n :name=\"item.thumbnail.name\"\n :src=\"item.thumbnail.src\"\n :size=\"thumbnailSize\"\n rounded-full\n />\n </slot>\n <Icon v-if=\"item.icon\" :icon=\"item.icon\" class=\"flex-shrink-0 size-3.5\" />\n <span v-if=\"item.emoji\" class=\"flex-shrink-0\">{{ item.emoji }}</span>\n <span\n v-if=\"item.label\"\n class=\"min-w-0 text-sm truncate\"\n :class=\"labelClass\"\n >\n {{ item.label }}\n </span>\n </button>\n <div\n v-if=\"filteredMenuItems.length === 0\"\n class=\"text-sm text-n-slate-11 px-2 py-1.5\"\n >\n {{\n isSearching\n ? t('DROPDOWN_MENU.SEARCHING')\n : t('DROPDOWN_MENU.EMPTY_STATE')\n }}\n </div>\n </div>\n</template>\n","<script setup>\nimport { onMounted, ref, computed } from 'vue';\nimport { useToggle } from '@vueuse/core';\nimport MetricCard from './overview/MetricCard.vue';\nimport ReportHeatmap from './Heatmap.vue';\nimport { useStore, useMapGetter } from 'dashboard/composables/store';\nimport { useLiveRefresh } from 'dashboard/composables/useLiveRefresh';\nimport endOfDay from 'date-fns/endOfDay';\nimport getUnixTime from 'date-fns/getUnixTime';\nimport startOfDay from 'date-fns/startOfDay';\nimport subDays from 'date-fns/subDays';\nimport DropdownMenu from 'dashboard/components-next/dropdown-menu/DropdownMenu.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport { useI18n } from 'vue-i18n';\n\nconst store = useStore();\n\nconst uiFlags = useMapGetter('getOverviewUIFlags');\nconst accountConversationHeatmap = useMapGetter(\n 'getAccountConversationHeatmapData'\n);\nconst { t } = useI18n();\n\nconst menuItems = [\n {\n label: t('REPORT.DATE_RANGE_OPTIONS.LAST_7_DAYS'),\n value: 6,\n },\n {\n label: t('REPORT.DATE_RANGE_OPTIONS.LAST_30_DAYS'),\n value: 29,\n },\n];\n\nconst selectedDays = ref(6);\n\nconst selectedDayFilter = computed(() =>\n menuItems.find(menuItem => menuItem.value === selectedDays.value)\n);\n\nconst downloadHeatmapData = () => {\n const to = endOfDay(new Date());\n store.dispatch('downloadAccountConversationHeatmap', {\n daysBefore: selectedDays.value,\n to: getUnixTime(to),\n });\n};\nconst [showDropdown, toggleDropdown] = useToggle();\nconst fetchHeatmapData = () => {\n if (uiFlags.value.isFetchingAccountConversationsHeatmap) {\n return;\n }\n\n let to = endOfDay(new Date());\n let from = startOfDay(subDays(to, Number(selectedDays.value)));\n\n store.dispatch('fetchAccountConversationHeatmap', {\n metric: 'conversations_count',\n from: getUnixTime(from),\n to: getUnixTime(to),\n groupBy: 'hour',\n businessHours: false,\n });\n};\n\nconst handleAction = ({ value }) => {\n toggleDropdown(false);\n selectedDays.value = value;\n fetchHeatmapData();\n};\n\nconst { startRefetching } = useLiveRefresh(fetchHeatmapData);\n\nonMounted(() => {\n fetchHeatmapData();\n startRefetching();\n});\n</script>\n\n<template>\n <div class=\"flex flex-row flex-wrap max-w-full\">\n <MetricCard :header=\"$t('OVERVIEW_REPORTS.CONVERSATION_HEATMAP.HEADER')\">\n <template #control>\n <div\n v-on-clickaway=\"() => toggleDropdown(false)\"\n class=\"relative flex items-center group\"\n >\n <Button\n sm\n slate\n faded\n :label=\"selectedDayFilter.label\"\n class=\"rounded-md group-hover:bg-n-alpha-2\"\n @click=\"toggleDropdown()\"\n />\n <DropdownMenu\n v-if=\"showDropdown\"\n :menu-items=\"menuItems\"\n class=\"mt-1 ltr:right-0 rtl:left-0 xl:ltr:right-0 xl:rtl:left-0 top-full\"\n @action=\"handleAction($event)\"\n />\n </div>\n <Button\n sm\n slate\n faded\n :label=\"t('OVERVIEW_REPORTS.CONVERSATION_HEATMAP.DOWNLOAD_REPORT')\"\n class=\"rounded-md group-hover:bg-n-alpha-2\"\n @click=\"downloadHeatmapData\"\n />\n </template>\n <ReportHeatmap\n :heatmap-data=\"accountConversationHeatmap\"\n :number-of-rows=\"selectedDays + 1\"\n :is-loading=\"uiFlags.isFetchingAccountConversationsHeatmap\"\n />\n </MetricCard>\n </div>\n</template>\n","<script setup>\nimport { useMapGetter } from 'dashboard/composables/store';\n\ndefineProps({\n content: {\n type: String,\n default: '',\n },\n});\n\nconst isRTL = useMapGetter('accounts/isRTL');\n</script>\n\n<template>\n <div\n class=\"overflow-hidden whitespace-nowrap text-ellipsis\"\n :class=\"{ 'text-right': isRTL }\"\n >\n <slot v-if=\"$slots.default || content\">\n <template v-if=\"content\">{{ content }}</template>\n </slot>\n <span v-else class=\"text-slate-300 dark:text-slate-700\"> --- </span>\n </div>\n</template>\n","<script setup>\nimport BaseCell from 'dashboard/components/table/BaseCell.vue';\nimport Thumbnail from 'dashboard/components/widgets/Thumbnail.vue';\nimport { useMapGetter } from 'dashboard/composables/store';\n\ndefineProps({\n row: {\n type: Object,\n required: true,\n },\n});\n\nconst isRTL = useMapGetter('accounts/isRTL');\n</script>\n\n<template>\n <BaseCell>\n <div\n class=\"items-center flex text-left\"\n :class=\"{ 'flex-row-reverse': isRTL }\"\n >\n <Thumbnail\n :src=\"row.original.thumbnail\"\n size=\"32px\"\n :username=\"row.original.agent\"\n :status=\"row.original.status\"\n />\n <div class=\"items-start flex flex-col min-w-0 my-0 mx-2\">\n <h6\n class=\"overflow-hidden text-sm m-0 leading-[1.2] text-slate-800 dark:text-slate-100 whitespace-nowrap text-ellipsis\"\n >\n {{ row.original.agent }}\n </h6>\n <span class=\"text-xs text-slate-600 dark:text-slate-200\">\n {{ row.original.email }}\n </span>\n </div>\n </div>\n </BaseCell>\n</template>\n","<script setup>\nimport { computed, h } from 'vue';\nimport {\n useVueTable,\n createColumnHelper,\n getCoreRowModel,\n getPaginationRowModel,\n} from '@tanstack/vue-table';\nimport { useI18n } from 'vue-i18n';\nimport { useUISettings } from 'dashboard/composables/useUISettings';\n\nimport Spinner from 'shared/components/Spinner.vue';\nimport EmptyState from 'dashboard/components/widgets/EmptyState.vue';\nimport Table from 'dashboard/components/table/Table.vue';\nimport Pagination from 'dashboard/components/table/Pagination.vue';\nimport AgentCell from './AgentCell.vue';\n\nconst { agents, agentMetrics } = defineProps({\n agents: {\n type: Array,\n default: () => [],\n },\n agentMetrics: {\n type: Array,\n default: () => [],\n },\n isLoading: {\n type: Boolean,\n default: false,\n },\n});\n\nconst { t } = useI18n();\nconst { uiSettings, updateUISettings } = useUISettings();\n\n// UI Settings key for agent table page size\nconst AGENT_TABLE_PAGE_SIZE_KEY = 'report_overview_agent_table_page_size';\n\n// Get the saved page size from UI settings or default to 10\nconst getPageSize = () => {\n return uiSettings.value[AGENT_TABLE_PAGE_SIZE_KEY] || 10;\n};\n\nconst handlePageSizeChange = pageSize => {\n updateUISettings({ [AGENT_TABLE_PAGE_SIZE_KEY]: pageSize });\n};\n\nconst getAgentMetrics = id =>\n agentMetrics.find(metrics => metrics.assignee_id === Number(id)) || {};\n\nconst tableData = computed(() =>\n agents\n .map(agent => {\n const metric = getAgentMetrics(agent.id);\n return {\n agent: agent.available_name || agent.name,\n email: agent.email,\n thumbnail: agent.thumbnail,\n open: metric.open || 0,\n unattended: metric.unattended || 0,\n status: agent.availability_status,\n };\n })\n .sort((a, b) => {\n // First sort by open tickets (descending)\n const openDiff = b.open - a.open;\n // If open tickets are equal, sort by name (ascending)\n if (openDiff === 0) {\n return a.agent.localeCompare(b.agent);\n }\n return openDiff;\n })\n);\n\nconst defaulSpanRender = cellProps =>\n h(\n 'span',\n\n {\n class: cellProps.getValue()\n ? 'capitalize text-n-slate-12'\n : 'capitalize text-n-slate-11',\n },\n cellProps.getValue() ? cellProps.getValue() : '---'\n );\n\nconst columnHelper = createColumnHelper();\nconst columns = [\n columnHelper.accessor('agent', {\n header: t('OVERVIEW_REPORTS.AGENT_CONVERSATIONS.TABLE_HEADER.AGENT'),\n cell: cellProps => h(AgentCell, cellProps),\n\n size: 250,\n }),\n columnHelper.accessor('open', {\n header: t('OVERVIEW_REPORTS.AGENT_CONVERSATIONS.TABLE_HEADER.OPEN'),\n cell: defaulSpanRender,\n size: 100,\n }),\n columnHelper.accessor('unattended', {\n header: t('OVERVIEW_REPORTS.AGENT_CONVERSATIONS.TABLE_HEADER.UNATTENDED'),\n cell: defaulSpanRender,\n size: 100,\n }),\n];\n\nconst table = useVueTable({\n get data() {\n return tableData.value;\n },\n columns,\n enableSorting: false,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n initialState: {\n pagination: {\n pageSize: getPageSize(),\n },\n },\n});\n</script>\n\n<template>\n <div class=\"flex flex-col flex-1\">\n <Table :table=\"table\" class=\"max-h-[calc(100vh-21.875rem)]\" />\n <Pagination\n class=\"mt-2\"\n :table=\"table\"\n show-page-size-selector\n :default-page-size=\"getPageSize()\"\n @page-size-change=\"handlePageSizeChange\"\n />\n <div\n v-if=\"isLoading\"\n class=\"items-center flex text-base justify-center p-8\"\n >\n <Spinner />\n <span>\n {{ $t('OVERVIEW_REPORTS.AGENT_CONVERSATIONS.LOADING_MESSAGE') }}\n </span>\n </div>\n <EmptyState\n v-else-if=\"!isLoading && !agents.length\"\n :title=\"$t('OVERVIEW_REPORTS.AGENT_CONVERSATIONS.NO_AGENTS')\"\n />\n </div>\n</template>\n","<script setup>\nimport { onMounted } from 'vue';\n\nimport AgentTable from './overview/AgentTable.vue';\nimport MetricCard from './overview/MetricCard.vue';\nimport { useStore, useMapGetter } from 'dashboard/composables/store';\nimport { useLiveRefresh } from 'dashboard/composables/useLiveRefresh';\n\nconst store = useStore();\n\nconst uiFlags = useMapGetter('getOverviewUIFlags');\nconst agentConversationMetric = useMapGetter('getAgentConversationMetric');\nconst agents = useMapGetter('agents/getAgents');\n\nconst fetchData = () => store.dispatch('fetchAgentConversationMetric');\n\nconst { startRefetching } = useLiveRefresh(fetchData);\n\nonMounted(() => {\n store.dispatch('agents/get');\n fetchData();\n startRefetching();\n});\n</script>\n\n<template>\n <div class=\"flex flex-row flex-wrap max-w-full\">\n <MetricCard :header=\"$t('OVERVIEW_REPORTS.AGENT_CONVERSATIONS.HEADER')\">\n <AgentTable\n :agents=\"agents\"\n :agent-metrics=\"agentConversationMetric\"\n :is-loading=\"uiFlags.isFetchingAgentConversationMetric\"\n />\n </MetricCard>\n </div>\n</template>\n","<script setup>\nimport { computed, h } from 'vue';\nimport {\n useVueTable,\n createColumnHelper,\n getCoreRowModel,\n getPaginationRowModel,\n} from '@tanstack/vue-table';\nimport { useI18n } from 'vue-i18n';\nimport { useUISettings } from 'dashboard/composables/useUISettings';\n\nimport Spinner from 'shared/components/Spinner.vue';\nimport EmptyState from 'dashboard/components/widgets/EmptyState.vue';\nimport Table from 'dashboard/components/table/Table.vue';\nimport Pagination from 'dashboard/components/table/Pagination.vue';\n\nconst { teams, teamMetrics } = defineProps({\n teams: {\n type: Array,\n default: () => [],\n },\n teamMetrics: {\n type: Array,\n default: () => [],\n },\n isLoading: {\n type: Boolean,\n default: false,\n },\n});\n\nconst { t } = useI18n();\nconst { uiSettings, updateUISettings } = useUISettings();\n\n// UI Settings key for team table page size\nconst TEAM_TABLE_PAGE_SIZE_KEY = 'report_overview_team_table_page_size';\n\n// Get the saved page size from UI settings or default to 10\nconst getPageSize = () => {\n return uiSettings.value[TEAM_TABLE_PAGE_SIZE_KEY] || 10;\n};\n\nconst handlePageSizeChange = pageSize => {\n updateUISettings({ [TEAM_TABLE_PAGE_SIZE_KEY]: pageSize });\n};\n\nconst getTeamMetrics = id =>\n teamMetrics.find(metrics => metrics.team_id === Number(id)) || {};\n\nconst tableData = computed(() =>\n teams\n .map(team => {\n const metric = getTeamMetrics(team.id);\n return {\n agent: team.name,\n open: metric.open || 0,\n unattended: metric.unattended || 0,\n };\n })\n .sort((a, b) => {\n // First sort by open tickets (descending)\n const openDiff = b.open - a.open;\n // If open tickets are equal, sort by name (ascending)\n if (openDiff === 0) {\n return a.agent.localeCompare(b.agent);\n }\n return openDiff;\n })\n);\n\nconst defaulSpanRender = cellProps =>\n h(\n 'span',\n {\n class: cellProps.getValue()\n ? 'capitalize text-n-slate-12'\n : 'capitalize text-n-slate-11',\n },\n cellProps.getValue() ? cellProps.getValue() : '---'\n );\n\nconst columnHelper = createColumnHelper();\nconst columns = [\n columnHelper.accessor('agent', {\n header: t('OVERVIEW_REPORTS.TEAM_CONVERSATIONS.TABLE_HEADER.TEAM'),\n cell: defaulSpanRender,\n size: 250,\n }),\n columnHelper.accessor('open', {\n header: t('OVERVIEW_REPORTS.TEAM_CONVERSATIONS.TABLE_HEADER.OPEN'),\n cell: defaulSpanRender,\n size: 100,\n }),\n columnHelper.accessor('unattended', {\n header: t('OVERVIEW_REPORTS.TEAM_CONVERSATIONS.TABLE_HEADER.UNATTENDED'),\n cell: defaulSpanRender,\n size: 100,\n }),\n];\n\nconst table = useVueTable({\n get data() {\n return tableData.value;\n },\n columns,\n enableSorting: false,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n initialState: {\n pagination: {\n pageSize: getPageSize(),\n },\n },\n});\n</script>\n\n<template>\n <div class=\"flex flex-col flex-1\">\n <Table :table=\"table\" class=\"max-h-[calc(100vh-21.875rem)]\" />\n <Pagination\n class=\"mt-2\"\n :table=\"table\"\n show-page-size-selector\n :default-page-size=\"getPageSize()\"\n @page-size-change=\"handlePageSizeChange\"\n />\n <div\n v-if=\"isLoading\"\n class=\"items-center flex text-base justify-center p-8\"\n >\n <Spinner />\n <span>\n {{ $t('OVERVIEW_REPORTS.TEAM_CONVERSATIONS.LOADING_MESSAGE') }}\n </span>\n </div>\n <EmptyState\n v-else-if=\"!isLoading && !teams.length\"\n :title=\"$t('OVERVIEW_REPORTS.TEAM_CONVERSATIONS.NO_TEAMS')\"\n />\n </div>\n</template>\n","<script setup>\nimport { onMounted } from 'vue';\n\nimport MetricCard from './overview/MetricCard.vue';\nimport { useStore, useMapGetter } from 'dashboard/composables/store';\nimport { useLiveRefresh } from 'dashboard/composables/useLiveRefresh';\nimport TeamTable from './overview/TeamTable.vue';\n\nconst store = useStore();\n\nconst uiFlags = useMapGetter('getOverviewUIFlags');\nconst teamConversationMetric = useMapGetter('getTeamConversationMetric');\nconst teams = useMapGetter('teams/getTeams');\n\nconst fetchData = () => store.dispatch('fetchTeamConversationMetric');\n\nconst { startRefetching } = useLiveRefresh(fetchData);\n\nonMounted(() => {\n store.dispatch('teams/get');\n fetchData();\n startRefetching();\n});\n</script>\n\n<template>\n <div class=\"flex flex-row flex-wrap max-w-full\">\n <MetricCard :header=\"$t('OVERVIEW_REPORTS.TEAM_CONVERSATIONS.HEADER')\">\n <TeamTable\n :teams=\"teams\"\n :team-metrics=\"teamConversationMetric\"\n :is-loading=\"uiFlags.isFetchingTeamConversationMetric\"\n />\n </MetricCard>\n </div>\n</template>\n","<script setup>\nimport { computed, onMounted, ref } from 'vue';\nimport { OVERVIEW_METRICS } from '../constants';\nimport { useToggle } from '@vueuse/core';\n\nimport MetricCard from './overview/MetricCard.vue';\nimport { useStore, useMapGetter } from 'dashboard/composables/store';\nimport { useLiveRefresh } from 'dashboard/composables/useLiveRefresh';\nimport DropdownMenu from 'dashboard/components-next/dropdown-menu/DropdownMenu.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport { useI18n } from 'vue-i18n';\nconst { t } = useI18n();\n\nconst uiFlags = useMapGetter('getOverviewUIFlags');\nconst agentStatus = useMapGetter('agents/getAgentStatus');\nconst accountConversationMetric = useMapGetter('getAccountConversationMetric');\nconst store = useStore();\n\nconst accounti18nKey = 'OVERVIEW_REPORTS.ACCOUNT_CONVERSATIONS';\nconst teams = useMapGetter('teams/getTeams');\n\nconst teamMenuList = computed(() => {\n return [\n { label: t('OVERVIEW_REPORTS.TEAM_CONVERSATIONS.ALL_TEAMS'), value: null },\n ...teams.value.map(team => ({ label: team.name, value: team.id })),\n ];\n});\n\nconst agentStatusMetrics = computed(() => {\n let metric = {};\n Object.keys(agentStatus.value).forEach(key => {\n const metricName = t(\n `OVERVIEW_REPORTS.AGENT_STATUS.${OVERVIEW_METRICS[key]}`\n );\n metric[metricName] = agentStatus.value[key];\n });\n return metric;\n});\nconst conversationMetrics = computed(() => {\n let metric = {};\n Object.keys(accountConversationMetric.value).forEach(key => {\n const metricName = t(`${accounti18nKey}.${OVERVIEW_METRICS[key]}`);\n metric[metricName] = accountConversationMetric.value[key];\n });\n return metric;\n});\n\nconst selectedTeam = ref(null);\nconst selectedTeamLabel = computed(() => {\n const team =\n teamMenuList.value.find(\n menuItem => menuItem.value === selectedTeam.value\n ) || {};\n return team.label;\n});\nconst fetchData = () => {\n const params = {};\n if (selectedTeam.value) {\n params.team_id = selectedTeam.value;\n }\n store.dispatch('fetchAccountConversationMetric', params);\n};\n\nconst { startRefetching } = useLiveRefresh(fetchData);\nconst [showDropdown, toggleDropdown] = useToggle();\n\nconst handleAction = ({ value }) => {\n toggleDropdown(false);\n selectedTeam.value = value;\n fetchData();\n};\n\nonMounted(() => {\n fetchData();\n startRefetching();\n});\n</script>\n\n<template>\n <div class=\"flex flex-col items-center md:flex-row gap-4\">\n <div\n class=\"flex-1 w-full max-w-full md:w-[65%] md:max-w-[65%] conversation-metric\"\n >\n <MetricCard\n :header=\"t(`${accounti18nKey}.HEADER`)\"\n :is-loading=\"uiFlags.isFetchingAccountConversationMetric\"\n :loading-message=\"t(`${accounti18nKey}.LOADING_MESSAGE`)\"\n >\n <template v-if=\"teams.length\" #control>\n <div\n v-on-clickaway=\"() => toggleDropdown(false)\"\n class=\"relative flex items-center group z-50\"\n >\n <Button\n sm\n slate\n faded\n :label=\"selectedTeamLabel\"\n class=\"capitalize rounded-md group-hover:bg-n-alpha-2\"\n @click=\"toggleDropdown()\"\n />\n <DropdownMenu\n v-if=\"showDropdown\"\n :menu-items=\"teamMenuList\"\n class=\"mt-1 ltr:right-0 rtl:left-0 xl:ltr:right-0 xl:rtl:left-0 top-full\"\n label-class=\"capitalize\"\n @action=\"handleAction($event)\"\n />\n </div>\n </template>\n <div\n v-for=\"(metric, name, index) in conversationMetrics\"\n :key=\"index\"\n class=\"flex-1 min-w-0 pb-2\"\n >\n <h3 class=\"text-base text-n-slate-11\">\n {{ name }}\n </h3>\n <p class=\"text-n-slate-12 text-3xl mb-0 mt-1\">\n {{ metric }}\n </p>\n </div>\n </MetricCard>\n </div>\n <div class=\"flex-1 w-full max-w-full md:w-[35%] md:max-w-[35%]\">\n <MetricCard :header=\"$t('OVERVIEW_REPORTS.AGENT_STATUS.HEADER')\">\n <div\n v-for=\"(metric, name, index) in agentStatusMetrics\"\n :key=\"index\"\n class=\"flex-1 min-w-0 pb-2\"\n >\n <h3 class=\"text-base text-n-slate-11\">\n {{ name }}\n </h3>\n <p class=\"text-n-slate-12 text-3xl mb-0 mt-1\">\n {{ metric }}\n </p>\n </div>\n </MetricCard>\n </div>\n </div>\n</template>\n","<script>\nexport default {\n props: {\n label: {\n type: String,\n required: true,\n },\n value: {\n type: [String, Number],\n required: true,\n },\n toolTip: {\n type: String,\n required: true,\n },\n isLoading: {\n type: Boolean,\n default: false,\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex flex-col gap-2 items-start justify-center min-w-[10rem]\">\n <span\n class=\"inline-flex items-center gap-1 text-sm font-medium text-n-slate-11\"\n >\n {{ label }}\n <fluent-icon\n v-tooltip.right=\"toolTip\"\n size=\"14\"\n icon=\"information\"\n type=\"outline\"\n class=\"flex flex-shrink-0 text-sm font-normal sm:font-medium text-n-slate-10\"\n />\n </span>\n <div\n v-if=\"isLoading\"\n class=\"w-12 h-6 mb-0.5 rounded-md bg-n-slate-3 animate-pulse\"\n />\n\n <span v-else class=\"text-2xl font-medium text-n-slate-12\">\n {{ value }}\n </span>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nconst props = defineProps({\n span: {\n type: Number,\n required: true,\n },\n label: {\n type: String,\n required: true,\n },\n});\n\nconst spanClass = computed(() => {\n if (props.span === 1) return 'col-span-1';\n if (props.span === 2) return 'col-span-2';\n if (props.span === 3) return 'col-span-3';\n if (props.span === 4) return 'col-span-4';\n if (props.span === 5) return 'col-span-5';\n if (props.span === 6) return 'col-span-6';\n if (props.span === 7) return 'col-span-7';\n if (props.span === 8) return 'col-span-8';\n if (props.span === 9) return 'col-span-9';\n if (props.span === 10) return 'col-span-10';\n\n return 'col-span-1';\n});\n</script>\n\n<template>\n <div\n class=\"flex items-center px-0 py-2 text-xs font-medium text-right uppercase text-n-slate-11 rtl:text-left\"\n :class=\"spanClass\"\n >\n <slot>\n {{ label }}\n </slot>\n </div>\n</template>\n","<script setup>\nimport { ref, computed, watch, onMounted, nextTick, useSlots } from 'vue';\nimport { useMapGetter } from 'dashboard/composables/store';\n\nconst props = defineProps({\n conversationLabels: {\n type: Array,\n required: true,\n },\n});\n\nconst slots = useSlots();\nconst accountLabels = useMapGetter('labels/getLabels');\n\nconst activeLabels = computed(() => {\n return accountLabels.value.filter(({ title }) =>\n props.conversationLabels.includes(title)\n );\n});\n\nconst showAllLabels = ref(false);\nconst showExpandLabelButton = ref(false);\nconst labelPosition = ref(-1);\nconst labelContainer = ref(null);\n\nconst computeVisibleLabelPosition = () => {\n const beforeSlot = slots.before ? 100 : 0;\n if (!labelContainer.value) {\n return;\n }\n\n const labels = Array.from(labelContainer.value.querySelectorAll('.label'));\n let labelOffset = 0;\n showExpandLabelButton.value = false;\n labels.forEach((label, index) => {\n labelOffset += label.offsetWidth + 8;\n\n if (labelOffset < labelContainer.value.clientWidth - beforeSlot) {\n labelPosition.value = index;\n } else {\n showExpandLabelButton.value = labels.length > 1;\n }\n });\n};\n\nwatch(activeLabels, () => {\n nextTick(() => computeVisibleLabelPosition());\n});\n\nonMounted(() => {\n computeVisibleLabelPosition();\n});\n\nconst onShowLabels = e => {\n e.stopPropagation();\n showAllLabels.value = !showAllLabels.value;\n nextTick(() => computeVisibleLabelPosition());\n};\n</script>\n\n<template>\n <div ref=\"labelContainer\" v-resize=\"computeVisibleLabelPosition\">\n <div\n v-if=\"activeLabels.length || $slots.before\"\n class=\"flex items-end flex-shrink min-w-0 gap-y-1\"\n :class=\"{ 'h-auto overflow-visible flex-row flex-wrap': showAllLabels }\"\n >\n <slot name=\"before\" />\n <woot-label\n v-for=\"(label, index) in activeLabels\"\n :key=\"label ? label.id : index\"\n :title=\"label.title\"\n :description=\"label.description\"\n :color=\"label.color\"\n variant=\"smooth\"\n class=\"!mb-0 max-w-[calc(100%-0.5rem)]\"\n small\n :class=\"{\n 'invisible absolute': !showAllLabels && index > labelPosition,\n }\"\n />\n <button\n v-if=\"showExpandLabelButton\"\n :title=\"\n showAllLabels\n ? $t('CONVERSATION.CARD.HIDE_LABELS')\n : $t('CONVERSATION.CARD.SHOW_LABELS')\n \"\n class=\"h-5 py-0 px-1 flex-shrink-0 mr-6 ml-0 rtl:ml-6 rtl:mr-0 rtl:rotate-180 text-slate-700 dark:text-slate-200 border-n-strong dark:border-n-strong\"\n @click=\"onShowLabels\"\n >\n <fluent-icon\n :icon=\"showAllLabels ? 'chevron-left' : 'chevron-right'\"\n size=\"12\"\n />\n </button>\n </div>\n </div>\n</template>\n","<script setup>\nimport { format, fromUnixTime } from 'date-fns';\n\ndefineProps({\n label: {\n type: String,\n required: true,\n },\n items: {\n type: Array,\n required: true,\n },\n});\nconst formatDate = timestamp =>\n format(fromUnixTime(timestamp), 'MMM dd, yyyy, hh:mm a');\n</script>\n\n<template>\n <div class=\"flex justify-between w-full\">\n <span\n class=\"text-sm sticky top-0 h-fit font-normal tracking-[-0.6%] min-w-[140px] truncate text-n-slate-11\"\n >\n {{ label }}\n </span>\n <div class=\"flex flex-col w-full gap-2\">\n <span\n v-for=\"item in items\"\n :key=\"item.id\"\n class=\"text-sm font-normal text-n-slate-12 text-right tabular-nums\"\n >\n {{ formatDate(item.created_at) }}\n </span>\n <slot name=\"showMore\" />\n </div>\n </div>\n</template>\n","<script setup>\nimport { ref, computed } from 'vue';\n\nimport wootConstants from 'dashboard/constants/globals';\nimport SLAEventItem from './SLAEventItem.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n slaMissedEvents: {\n type: Array,\n required: true,\n },\n});\n\nconst { SLA_MISS_TYPES } = wootConstants;\n\nconst shouldShowAllNrts = ref(false);\n\nconst frtMisses = computed(() =>\n props.slaMissedEvents.filter(\n slaEvent => slaEvent.event_type === SLA_MISS_TYPES.FRT\n )\n);\nconst nrtMisses = computed(() => {\n const missedEvents = props.slaMissedEvents.filter(\n slaEvent => slaEvent.event_type === SLA_MISS_TYPES.NRT\n );\n return shouldShowAllNrts.value ? missedEvents : missedEvents.slice(0, 6);\n});\nconst rtMisses = computed(() =>\n props.slaMissedEvents.filter(\n slaEvent => slaEvent.event_type === SLA_MISS_TYPES.RT\n )\n);\n\nconst shouldShowMoreNRTButton = computed(() => nrtMisses.value.length > 6);\nconst toggleShowAllNRT = () => {\n shouldShowAllNrts.value = !shouldShowAllNrts.value;\n};\n</script>\n\n<template>\n <div\n class=\"absolute flex flex-col items-start border-n-strong bg-n-solid-3 w-96 backdrop-blur-[100px] px-6 py-5 z-50 shadow rounded-xl gap-4 max-h-96 overflow-auto\"\n >\n <span class=\"text-sm font-medium text-n-slate-12\">\n {{ $t('SLA.EVENTS.TITLE') }}\n </span>\n <SLAEventItem\n v-if=\"frtMisses.length\"\n :label=\"$t('SLA.EVENTS.FRT')\"\n :items=\"frtMisses\"\n />\n <SLAEventItem\n v-if=\"nrtMisses.length\"\n :label=\"$t('SLA.EVENTS.NRT')\"\n :items=\"nrtMisses\"\n >\n <template #showMore>\n <div\n v-if=\"shouldShowMoreNRTButton\"\n class=\"flex flex-col items-end w-full\"\n >\n <Button\n link\n xs\n slate\n class=\"hover:!no-underline\"\n :icon=\"!shouldShowAllNrts ? 'i-lucide-plus' : ''\"\n :label=\"\n shouldShowAllNrts\n ? $t('SLA.EVENTS.HIDE', { count: nrtMisses.length })\n : $t('SLA.EVENTS.SHOW_MORE', { count: nrtMisses.length })\n \"\n @click=\"toggleShowAllNRT\"\n />\n </div>\n </template>\n </SLAEventItem>\n <SLAEventItem\n v-if=\"rtMisses.length\"\n :label=\"$t('SLA.EVENTS.RT')\"\n :items=\"rtMisses\"\n />\n </div>\n</template>\n","<script>\nimport SLAPopoverCard from 'dashboard/components/widgets/conversation/components/SLAPopoverCard.vue';\nexport default {\n components: {\n SLAPopoverCard,\n },\n props: {\n slaEvents: {\n type: Array,\n default: () => [],\n },\n },\n\n data() {\n return {\n showSlaPopoverCard: false,\n };\n },\n\n methods: {\n closeSlaEvents() {\n this.showSlaPopoverCard = false;\n },\n openSlaEvents() {\n this.showSlaPopoverCard = !this.showSlaPopoverCard;\n },\n },\n};\n</script>\n\n<template>\n <div\n v-on-clickaway=\"closeSlaEvents\"\n class=\"flex items-center col-span-2 text-slate-11 justify-end\"\n >\n <div class=\"relative\">\n <woot-button\n color-scheme=\"secondary\"\n variant=\"link\"\n @click=\"openSlaEvents\"\n >\n {{ $t('SLA_REPORTS.TABLE.VIEW_DETAILS') }}\n </woot-button>\n <SLAPopoverCard\n v-if=\"showSlaPopoverCard\"\n :sla-missed-events=\"slaEvents\"\n class=\"right-0\"\n />\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport UserAvatarWithName from 'dashboard/components/widgets/UserAvatarWithName.vue';\nimport CardLabels from 'dashboard/components/widgets/conversation/conversationCardComponents/CardLabels.vue';\nimport SLAViewDetails from './SLAViewDetails.vue';\nconst props = defineProps({\n slaName: {\n type: String,\n required: true,\n },\n conversationId: {\n type: Number,\n required: true,\n },\n conversation: {\n type: Object,\n required: true,\n },\n slaEvents: {\n type: Array,\n default: () => [],\n },\n});\n\nconst conversationLabels = computed(() => {\n return props.conversation.labels\n ? props.conversation.labels.split(',').map(item => item.trim())\n : [];\n});\n</script>\n\n<template>\n <div\n class=\"grid items-center content-center w-full h-16 grid-cols-12 gap-4 px-6 py-0 border-b last:border-b-0 last:rounded-b-xl border-n-weak\"\n >\n <div\n class=\"flex items-center gap-2 col-span-6 px-0 py-2 text-sm tracking-[0.5] text-slate-700 dark:text-slate-100 rtl:text-right\"\n >\n <span class=\"text-n-slate-12\">\n {{ `#${conversationId} ` }}\n </span>\n <span class=\"text-slate-11\">\n {{ $t('SLA_REPORTS.WITH') }}\n </span>\n <span class=\"capitalize truncate text-n-slate-12\">{{\n conversation.contact.name\n }}</span>\n <CardLabels\n v-if=\"conversationLabels.length\"\n class=\"w-[60%]\"\n :conversation-id=\"conversationId\"\n :conversation-labels=\"conversationLabels\"\n />\n </div>\n <div\n class=\"flex items-center capitalize py-2 px-0 text-sm tracking-[0.5] text-slate-700 dark:text-slate-50 text-left rtl:text-right col-span-2\"\n >\n {{ slaName }}\n </div>\n <div class=\"flex items-center col-span-2 gap-2\">\n <UserAvatarWithName\n v-if=\"conversation.assignee\"\n :user=\"conversation.assignee\"\n />\n <span v-else class=\"text-n-slate-11\"> --- </span>\n </div>\n <SLAViewDetails :sla-events=\"slaEvents\" />\n </div>\n</template>\n","<script>\nimport TableFooter from 'dashboard/components/widgets/TableFooter.vue';\nimport TableHeaderCell from 'dashboard/components/widgets/TableHeaderCell.vue';\nimport SLAReportItem from './SLAReportItem.vue';\nimport Spinner from 'shared/components/Spinner.vue';\nexport default {\n name: 'SLATable',\n components: {\n SLAReportItem,\n TableFooter,\n Spinner,\n TableHeaderCell,\n },\n props: {\n slaReports: {\n type: Array,\n default: () => [],\n },\n totalCount: {\n type: Number,\n default: 0,\n },\n currentPage: {\n type: Number,\n default: 1,\n },\n pageSize: {\n type: Number,\n default: 25,\n },\n isLoading: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['pageChange'],\n data() {\n return {\n pageNo: 1,\n };\n },\n computed: {\n shouldShowFooter() {\n return this.currentPage === 1\n ? this.totalCount > this.pageSize\n : this.slaReports.length > 0;\n },\n },\n methods: {\n onPageChange(page) {\n this.$emit('pageChange', page);\n },\n },\n};\n</script>\n\n<template>\n <div>\n <div\n class=\"min-w-full shadow outline-1 outline outline-n-container rounded-xl bg-n-solid-2 p-6\"\n >\n <div\n class=\"grid content-center h-12 grid-cols-12 gap-4 px-6 py-0 bg-n-slate-2 rounded-md\"\n >\n <TableHeaderCell\n :span=\"6\"\n :label=\"$t('SLA_REPORTS.TABLE.HEADER.CONVERSATION')\"\n />\n <TableHeaderCell\n :span=\"2\"\n :label=\"$t('SLA_REPORTS.TABLE.HEADER.POLICY')\"\n />\n <TableHeaderCell\n :span=\"2\"\n :label=\"$t('SLA_REPORTS.TABLE.HEADER.AGENT')\"\n />\n <TableHeaderCell :span=\"1\" label=\"\" />\n </div>\n\n <div v-if=\"isLoading\" class=\"flex items-center justify-center h-32\">\n <Spinner />\n <span>{{ $t('SLA_REPORTS.LOADING') }}</span>\n </div>\n <div v-else-if=\"slaReports.length > 0\">\n <SLAReportItem\n v-for=\"slaReport in slaReports\"\n :key=\"slaReport.applied_sla.id\"\n :sla-name=\"slaReport.applied_sla.sla_name\"\n :conversation=\"slaReport.conversation\"\n :conversation-id=\"slaReport.conversation.id\"\n :sla-events=\"slaReport.sla_events\"\n />\n </div>\n <div v-else class=\"flex items-center justify-center h-32\">\n {{ $t('SLA_REPORTS.NO_RECORDS') }}\n </div>\n </div>\n <TableFooter\n v-if=\"shouldShowFooter\"\n :current-page=\"currentPage\"\n :total-count=\"totalCount\"\n :page-size=\"pageSize\"\n @page-change=\"onPageChange\"\n />\n </div>\n</template>\n","export const buildFilterList = (items, type) =>\n // Build the filter list for the dropdown\n items.map(item => ({\n id: item.id,\n name: type === 'labels' ? item.title : item.name,\n type,\n }));\n\nexport const getActiveFilter = (filters, type, key) => {\n // Method is used to get the active filter from the filter list\n return filters.find(filterItem =>\n type === 'labels'\n ? filterItem.title === key\n : filterItem.id.toString() === key.toString()\n );\n};\n\nexport const getFilterType = (input, direction) => {\n // Method is used to map the filter key to the filter type\n const filterMap = {\n keyToType: {\n assigned_agent_id: 'agents',\n inbox_id: 'inboxes',\n team_id: 'teams',\n sla_policy_id: 'sla',\n label_list: 'labels',\n },\n typeToKey: {\n agents: 'assigned_agent_id',\n inboxes: 'inbox_id',\n teams: 'team_id',\n sla: 'sla_policy_id',\n labels: 'label_list',\n },\n };\n return filterMap[direction][input];\n};\n","function S(e,t){e.length<t.length&&([e,t]=[t,e]);let r=e.length,i=t.length;if(r===0||i===0)return 0;let o=Math.floor(r/2)-1,s=Array(i).fill(!1),u=Array(r).fill(\"\"),h=0;for(let n=0;n<r;n++){let c=e[n];for(let a=0;a<i;a++){let T=t[a];if(a<=n+o&&a+o>=1&&c===T&&!s[a]){s[a]=!0,u[h++]=c;break}}}if(!h)return 0;let m=0;for(let n=0,c=0;c<i;c++)s[c]&&(t[c]!==u[n]&&m++,n++);let l=h,g=(l/r+l/i+(l-m/2)/l)/3,p=0,f=Math.min(4,i);for(let n=0;n<f;n++)e[n]===t[n]&&p++;return g+p*.1*(1-g)}function b(e,t){let r=0,i=0;if(t&&e.length!==t.length)throw new Error(\"The number of values must be equal to the number of weights\");for(let o=0;o<e.length;o++){let s=t?t[o]:1;r+=e[o]*s,i+=s}return r/i}function d(e){return Math.max(0,Math.min(1,e))}function y(e){return e.split(/\\s+/).filter((t,r,i)=>t&&i.indexOf(t)===r)}var A={CONTAINS_MATCH:1.2,FIRST_SIMILARITY:1.1,STARTS_WITH:1.05};function j(e,t,r,i){if(!t||typeof t!=\"string\")return e;let o=[],s=i?.threshold??.8,u=t.trim().toLowerCase(),h=y(u);return e.forEach(m=>{let l=[],g=[];r.forEach(f=>{let n,c=1;typeof f==\"string\"?n=f:(n=f.name,c=f.weight),g.push(c);let a=m[n]?.trim().toLowerCase();if(a){let T=I(a,h);l.push(T)}else l.push(0)});let p=b(l,g);p>=s&&o.push({object:m,similarity:p})}),o.sort((m,l)=>l.similarity-m.similarity),o.map(m=>m.object)}function I(e,t){let r=y(e),i=t.map(o=>{let s=r.map(h=>x(h,o)),u=Math.max(...s);return u===s[0]?u*A.FIRST_SIMILARITY:d(u)});return b(i)}function x(e,t){let r=S(e,t);return e.includes(t)?r*A.CONTAINS_MATCH:r}export{j as picoSearch};\n//# sourceMappingURL=index.mjs.map","<script setup>\nimport { defineEmits, defineModel } from 'vue';\ndefineProps({\n inputPlaceholder: {\n type: String,\n default: '',\n },\n showClearFilter: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits(['remove']);\n\nconst value = defineModel({\n type: String,\n default: '',\n});\n</script>\n\n<template>\n <div\n class=\"flex items-center justify-between h-10 min-h-[40px] sticky top-0 bg-white z-10 dark:bg-slate-800 gap-2 px-3 border-b rounded-t-xl border-slate-50 dark:border-slate-700\"\n >\n <div class=\"flex items-center w-full gap-2\" @keyup.space.prevent>\n <fluent-icon\n icon=\"search\"\n size=\"16\"\n class=\"text-slate-400 dark:text-slate-400 flex-shrink-0\"\n />\n <input\n v-model=\"value\"\n :placeholder=\"inputPlaceholder\"\n type=\"text\"\n class=\"w-full mb-0 text-sm bg-white dark:bg-slate-800 text-slate-800 dark:text-slate-75 reset-base\"\n />\n </div>\n <!-- Clear filter button -->\n <woot-button\n v-if=\"!modelValue && showClearFilter\"\n size=\"small\"\n variant=\"clear\"\n color-scheme=\"primary\"\n class=\"!px-1 !py-1.5\"\n @click=\"emit('remove')\"\n >\n {{ $t('REPORT.FILTER_ACTIONS.CLEAR_FILTER') }}\n </woot-button>\n </div>\n</template>\n","<script setup>\nimport { ref, computed } from 'vue';\nimport { debounce } from '@chatwoot/utils';\nimport { picoSearch } from '@scmmishra/pico-search';\nimport ListItemButton from './DropdownListItemButton.vue';\nimport DropdownSearch from './DropdownSearch.vue';\nimport DropdownEmptyState from './DropdownEmptyState.vue';\nimport DropdownLoadingState from './DropdownLoadingState.vue';\n\nconst props = defineProps({\n listItems: {\n type: Array,\n default: () => [],\n },\n enableSearch: {\n type: Boolean,\n default: false,\n },\n inputPlaceholder: {\n type: String,\n default: '',\n },\n activeFilterId: {\n type: [String, Number],\n default: null,\n },\n showClearFilter: {\n type: Boolean,\n default: false,\n },\n isLoading: {\n type: Boolean,\n default: false,\n },\n loadingPlaceholder: {\n type: String,\n default: '',\n },\n});\n\nconst emit = defineEmits(['onSearch', 'select', 'removeFilter']);\n\nconst searchTerm = ref('');\n\nconst debouncedEmit = debounce(value => {\n emit('onSearch', value);\n}, 300);\n\nconst onSearch = value => {\n searchTerm.value = value;\n debouncedEmit(value);\n};\n\nconst filteredListItems = computed(() => {\n if (!searchTerm.value) return props.listItems;\n return picoSearch(props.listItems, searchTerm.value, ['name']);\n});\n\nconst isDropdownListEmpty = computed(() => {\n return !filteredListItems.value.length;\n});\n\nconst isFilterActive = id => {\n if (!props.activeFilterId) return false;\n return id === props.activeFilterId;\n};\n\nconst shouldShowLoadingState = computed(() => {\n return (\n props.isLoading && isDropdownListEmpty.value && props.loadingPlaceholder\n );\n});\n\nconst shouldShowEmptyState = computed(() => {\n return !props.isLoading && isDropdownListEmpty.value;\n});\n</script>\n\n<template>\n <div\n class=\"absolute z-20 w-40 bg-white border shadow dark:bg-slate-800 rounded-xl border-slate-50 dark:border-slate-700/50 max-h-[400px]\"\n @click.stop\n >\n <slot name=\"search\">\n <DropdownSearch\n v-if=\"enableSearch\"\n v-model=\"searchTerm\"\n :input-placeholder=\"inputPlaceholder\"\n :show-clear-filter=\"showClearFilter\"\n @update:model-value=\"onSearch\"\n @remove=\"$emit('removeFilter')\"\n />\n </slot>\n <slot name=\"listItem\">\n <DropdownLoadingState\n v-if=\"shouldShowLoadingState\"\n :message=\"loadingPlaceholder\"\n />\n <DropdownEmptyState\n v-else-if=\"shouldShowEmptyState\"\n :message=\"$t('REPORT.FILTER_ACTIONS.EMPTY_LIST')\"\n />\n <ListItemButton\n v-for=\"item in filteredListItems\"\n :key=\"item.id\"\n :is-active=\"isFilterActive(item.id)\"\n :button-text=\"item.name\"\n :icon=\"item.icon\"\n :icon-color=\"item.iconColor\"\n @click.stop.prevent=\"emit('select', item)\"\n />\n </slot>\n </div>\n</template>\n","<script setup>\nimport FilterButton from 'dashboard/components/ui/Dropdown/DropdownButton.vue';\nimport FilterListDropdown from 'dashboard/components/ui/Dropdown/DropdownList.vue';\n\nconst props = defineProps({\n name: {\n type: String,\n required: true,\n },\n id: {\n type: Number,\n required: true,\n },\n type: {\n type: String,\n required: true,\n },\n options: {\n type: Array,\n default: () => [],\n },\n activeFilterType: {\n type: String,\n default: '',\n },\n showMenu: {\n type: Boolean,\n default: false,\n },\n placeholder: {\n type: String,\n default: '',\n },\n enableSearch: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits([\n 'toggleDropdown',\n 'removeFilter',\n 'addFilter',\n 'closeDropdown',\n]);\nconst toggleDropdown = () => emit('toggleDropdown', props.type);\nconst removeFilter = () => emit('removeFilter', props.type);\nconst addFilter = item => emit('addFilter', item);\nconst closeDropdown = () => emit('closeDropdown');\n</script>\n\n<template>\n <FilterButton\n right-icon=\"chevron-down\"\n :button-text=\"name\"\n @click=\"toggleDropdown\"\n >\n <template v-if=\"showMenu && activeFilterType === type\" #dropdown>\n <FilterListDropdown\n v-if=\"options\"\n v-on-clickaway=\"closeDropdown\"\n show-clear-filter\n :list-items=\"options\"\n :active-filter-id=\"id\"\n :input-placeholder=\"placeholder\"\n :enable-search=\"enableSearch\"\n class=\"flex flex-col w-[240px] overflow-y-auto left-0 md:left-auto md:right-0 top-10\"\n @select=\"addFilter\"\n @remove-filter=\"removeFilter\"\n />\n </template>\n </FilterButton>\n</template>\n","<script setup>\nimport FilterButton from 'dashboard/components/ui/Dropdown/DropdownButton.vue';\nimport FilterListDropdown from 'dashboard/components/ui/Dropdown/DropdownList.vue';\nimport FilterListItemButton from 'dashboard/components/ui/Dropdown/DropdownListItemButton.vue';\nimport FilterDropdownEmptyState from 'dashboard/components/ui/Dropdown/DropdownEmptyState.vue';\n\nimport { ref } from 'vue';\n\ndefineProps({\n name: {\n type: String,\n required: true,\n },\n menuOption: {\n type: Array,\n default: () => [],\n },\n showMenu: {\n type: Boolean,\n default: false,\n },\n placeholderI18nKey: {\n type: String,\n default: '',\n },\n enableSearch: {\n type: Boolean,\n default: true,\n },\n emptyStateMessage: {\n type: String,\n default: '',\n },\n});\n\nconst emit = defineEmits(['toggleDropdown', 'addFilter', 'closeDropdown']);\n\nconst hoveredItemId = ref(null);\n\nconst showSubMenu = id => {\n hoveredItemId.value = id;\n};\n\nconst hideSubMenu = () => {\n hoveredItemId.value = null;\n};\n\nconst isHovered = id => hoveredItemId.value === id;\n\nconst toggleDropdown = () => emit('toggleDropdown');\nconst addFilter = item => {\n emit('addFilter', item);\n hideSubMenu();\n};\nconst closeDropdown = () => {\n hideSubMenu();\n emit('closeDropdown');\n};\n</script>\n\n<template>\n <FilterButton :button-text=\"name\" left-icon=\"filter\" @click=\"toggleDropdown\">\n <!-- Dropdown with search and sub-dropdown -->\n <template v-if=\"showMenu\" #dropdown>\n <FilterListDropdown\n v-on-clickaway=\"closeDropdown\"\n class=\"left-0 md:right-0 top-10\"\n >\n <template #listItem>\n <FilterDropdownEmptyState\n v-if=\"!menuOption.length\"\n :message=\"emptyStateMessage\"\n />\n <FilterListItemButton\n v-for=\"item in menuOption\"\n :key=\"item.id\"\n :button-text=\"item.name\"\n @mouseenter=\"showSubMenu(item.id)\"\n @mouseleave=\"hideSubMenu\"\n @focus=\"showSubMenu(item.id)\"\n >\n <!-- Submenu with search and clear button -->\n <template v-if=\"item.options && isHovered(item.id)\" #dropdown>\n <FilterListDropdown\n :list-items=\"item.options\"\n :input-placeholder=\"\n $t(`${placeholderI18nKey}.${item.type.toUpperCase()}`)\n \"\n :enable-search=\"enableSearch\"\n class=\"flex flex-col w-[216px] overflow-y-auto top-0 left-36\"\n @select=\"addFilter\"\n />\n </template>\n </FilterListItemButton>\n </template>\n </FilterListDropdown>\n </template>\n </FilterButton>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport {\n buildFilterList,\n getActiveFilter,\n getFilterType,\n} from './helpers/SLAFilterHelpers';\nimport FilterButton from 'dashboard/components/ui/Dropdown/DropdownButton.vue';\nimport ActiveFilterChip from '../Filters/v3/ActiveFilterChip.vue';\nimport AddFilterChip from '../Filters/v3/AddFilterChip.vue';\n\nexport default {\n components: {\n FilterButton,\n ActiveFilterChip,\n AddFilterChip,\n },\n emits: ['filterChange'],\n data() {\n return {\n showDropdownMenu: false,\n showSubDropdownMenu: false,\n activeFilterType: '',\n appliedFilters: {\n assigned_agent_id: null,\n inbox_id: null,\n team_id: null,\n sla_policy_id: null,\n label_list: null,\n },\n };\n },\n computed: {\n ...mapGetters({\n agents: 'agents/getAgents',\n inboxes: 'inboxes/getInboxes',\n teams: 'teams/getTeams',\n labels: 'labels/getLabels',\n sla: 'sla/getSLA',\n }),\n filterListMenuItems() {\n const filterTypes = [\n { id: '1', name: this.$t('SLA_REPORTS.DROPDOWN.SLA'), type: 'sla' },\n {\n id: '2',\n name: this.$t('SLA_REPORTS.DROPDOWN.INBOXES'),\n type: 'inboxes',\n },\n {\n id: '3',\n name: this.$t('SLA_REPORTS.DROPDOWN.AGENTS'),\n type: 'agents',\n },\n { id: '4', name: this.$t('SLA_REPORTS.DROPDOWN.TEAMS'), type: 'teams' },\n {\n id: '5',\n name: this.$t('SLA_REPORTS.DROPDOWN.LABELS'),\n type: 'labels',\n },\n ];\n // Filter out the active filters from the filter list\n // We only want to show the filters that are not already applied\n // In the add filter dropdown\n const activeFilters = Object.keys(this.appliedFilters).filter(\n key => this.appliedFilters[key]\n );\n const activeFilterTypes = activeFilters.map(key =>\n getFilterType(key, 'keyToType')\n );\n return filterTypes\n .filter(({ type }) => !activeFilterTypes.includes(type))\n .map(({ id, name, type }) => ({\n id,\n name,\n type,\n options: buildFilterList(this[type], type),\n }));\n },\n activeFilters() {\n // Get the active filters from the applied filters\n // and return the filter name, type and options\n const activeKey = Object.keys(this.appliedFilters).filter(\n key => this.appliedFilters[key]\n );\n return activeKey.map(key => {\n const filterType = getFilterType(key, 'keyToType');\n const item = getActiveFilter(\n this[filterType],\n filterType,\n this.appliedFilters[key]\n );\n return {\n id: item.id,\n name: filterType === 'labels' ? item.title : item.name,\n type: filterType,\n options: buildFilterList(this[filterType], filterType),\n };\n });\n },\n hasActiveFilters() {\n return Object.values(this.appliedFilters).some(value => value !== null);\n },\n isAllFilterSelected() {\n return !this.filterListMenuItems.length;\n },\n },\n methods: {\n addFilter(item) {\n const { type, id, name } = item;\n const filterKey = getFilterType(type, 'typeToKey');\n this.appliedFilters[filterKey] = type === 'labels' ? name : id;\n this.$emit('filterChange', this.appliedFilters);\n this.resetDropdown();\n },\n removeFilter(type) {\n const filterKey = getFilterType(type, 'typeToKey');\n this.appliedFilters[filterKey] = null;\n this.$emit('filterChange', this.appliedFilters);\n },\n clearAllFilters() {\n this.appliedFilters = {\n assigned_agent_id: null,\n inbox_id: null,\n team_id: null,\n sla_policy_id: null,\n label_list: null,\n };\n this.$emit('filterChange', this.appliedFilters);\n this.resetDropdown();\n },\n showDropdown() {\n this.showSubDropdownMenu = false;\n this.showDropdownMenu = !this.showDropdownMenu;\n },\n closeDropdown() {\n this.showDropdownMenu = false;\n },\n openActiveFilterDropdown(filterType) {\n this.closeDropdown();\n this.activeFilterType = filterType;\n this.showSubDropdownMenu = !this.showSubDropdownMenu;\n },\n closeActiveFilterDropdown() {\n this.activeFilterType = '';\n this.showSubDropdownMenu = false;\n },\n resetDropdown() {\n this.closeDropdown();\n this.closeActiveFilterDropdown();\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"flex flex-col flex-wrap items-start gap-2 md:items-center md:flex-nowrap md:flex-row\"\n >\n <!-- Active filters section -->\n <div v-if=\"hasActiveFilters\" class=\"flex flex-wrap gap-2 md:flex-nowrap\">\n <ActiveFilterChip\n v-for=\"filter in activeFilters\"\n v-bind=\"filter\"\n :key=\"filter.type\"\n :placeholder=\"\n $t(\n `SLA_REPORTS.DROPDOWN.INPUT_PLACEHOLDER.${filter.type.toUpperCase()}`\n )\n \"\n :active-filter-type=\"activeFilterType\"\n :show-menu=\"showSubDropdownMenu\"\n enable-search\n @toggle-dropdown=\"openActiveFilterDropdown\"\n @close-dropdown=\"closeActiveFilterDropdown\"\n @add-filter=\"addFilter\"\n @remove-filter=\"removeFilter\"\n />\n </div>\n <!-- Dividing line between Active filters and Add filter button -->\n <div\n v-if=\"hasActiveFilters && !isAllFilterSelected\"\n class=\"w-full h-px border md:w-px md:h-5 border-slate-75 dark:border-slate-800\"\n />\n <!-- Add filter and clear filter button -->\n <div class=\"flex items-center gap-2\">\n <AddFilterChip\n v-if=\"!isAllFilterSelected\"\n placeholder-i18n-key=\"SLA_REPORTS.DROPDOWN.INPUT_PLACEHOLDER\"\n :name=\"$t('SLA_REPORTS.DROPDOWN.ADD_FIlTER')\"\n :menu-option=\"filterListMenuItems\"\n :show-menu=\"showDropdownMenu\"\n :empty-state-message=\"$t('SLA_REPORTS.DROPDOWN.NO_FILTER')\"\n @toggle-dropdown=\"showDropdown\"\n @close-dropdown=\"closeDropdown\"\n @add-filter=\"addFilter\"\n />\n\n <!-- Dividing line between Add filter and Clear all filter button -->\n <div\n v-if=\"hasActiveFilters\"\n class=\"w-px h-5 border border-slate-75 dark:border-slate-800\"\n />\n <!-- Clear all filter button -->\n <FilterButton\n v-if=\"hasActiveFilters\"\n :button-text=\"$t('SLA_REPORTS.DROPDOWN.CLEAR_ALL')\"\n @click=\"clearAllFilters\"\n />\n </div>\n </div>\n</template>\n","<script>\nimport SLAFilter from '../SLA/SLAFilter.vue';\nimport subDays from 'date-fns/subDays';\nimport { DATE_RANGE_OPTIONS } from '../../constants';\nimport { getUnixStartOfDay, getUnixEndOfDay } from 'helpers/DateHelper';\n\nexport default {\n components: {\n SLAFilter,\n },\n emits: ['filterChange'],\n\n data() {\n return {\n selectedDateRange: DATE_RANGE_OPTIONS.LAST_7_DAYS,\n selectedGroupByFilter: null,\n customDateRange: [new Date(), new Date()],\n };\n },\n computed: {\n to() {\n return getUnixEndOfDay(this.customDateRange[1]);\n },\n from() {\n return getUnixStartOfDay(this.customDateRange[0]);\n },\n },\n watch: {\n businessHoursSelected() {\n this.emitChange();\n },\n },\n mounted() {\n this.setInitialRange();\n },\n methods: {\n setInitialRange() {\n const { offset } = this.selectedDateRange;\n const fromDate = subDays(new Date(), offset);\n const from = getUnixStartOfDay(fromDate);\n const to = getUnixEndOfDay(new Date());\n this.$emit('filterChange', {\n from,\n to,\n ...this.selectedGroupByFilter,\n });\n },\n emitChange() {\n const { from, to } = this;\n this.$emit('filterChange', {\n from,\n to,\n ...this.selectedGroupByFilter,\n });\n },\n emitFilterChange(params) {\n this.selectedGroupByFilter = params;\n this.emitChange();\n },\n onDateRangeChange(value) {\n this.customDateRange = value;\n this.emitChange();\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex flex-col flex-wrap w-full gap-3 md:flex-row\">\n <woot-date-picker @date-range-changed=\"onDateRangeChange\" />\n <SLAFilter @filter-change=\"emitFilterChange\" />\n </div>\n</template>\n","<script>\nimport V4Button from 'dashboard/components-next/button/Button.vue';\nimport { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\nimport SLAMetrics from './components/SLA/SLAMetrics.vue';\nimport SLATable from './components/SLA/SLATable.vue';\nimport SLAReportFilters from './components/SLA/SLAReportFilters.vue';\nimport { generateFileName } from 'dashboard/helper/downloadHelper';\nimport ReportHeader from './components/ReportHeader.vue';\nexport default {\n name: 'SLAReports',\n components: {\n V4Button,\n ReportHeader,\n SLAMetrics,\n SLATable,\n SLAReportFilters,\n },\n data() {\n return {\n pageNumber: 1,\n activeFilter: {\n from: 0,\n to: 0,\n assigned_agent_id: null,\n inbox_id: null,\n team_id: null,\n sla_policy_id: null,\n label_list: null,\n },\n };\n },\n computed: {\n ...mapGetters({\n slaReports: 'slaReports/getAll',\n slaMetrics: 'slaReports/getMetrics',\n slaMeta: 'slaReports/getMeta',\n uiFlags: 'slaReports/getUIFlags',\n }),\n },\n mounted() {\n this.$store.dispatch('agents/get');\n this.$store.dispatch('inboxes/get');\n this.$store.dispatch('teams/get');\n this.$store.dispatch('labels/get');\n this.$store.dispatch('sla/get');\n this.fetchSLAMetrics();\n this.fetchSLAReports();\n },\n methods: {\n fetchSLAReports({ pageNumber } = {}) {\n this.$store.dispatch('slaReports/get', {\n page: pageNumber || this.pageNumber,\n ...this.activeFilter,\n });\n },\n fetchSLAMetrics() {\n this.$store.dispatch('slaReports/getMetrics', this.activeFilter);\n },\n onPageChange(pageNumber) {\n this.fetchSLAReports({ pageNumber });\n },\n onFilterChange(params) {\n this.activeFilter = params;\n this.fetchSLAReports();\n this.fetchSLAMetrics();\n },\n downloadReports() {\n const type = 'sla';\n try {\n this.$store.dispatch('slaReports/download', {\n fileName: generateFileName({ type, to: this.activeFilter.to }),\n ...this.activeFilter,\n });\n } catch (error) {\n useAlert(this.$t('SLA_REPORTS.DOWNLOAD_FAILED'));\n }\n },\n },\n};\n</script>\n\n<template>\n <ReportHeader :header-title=\"$t('SLA_REPORTS.HEADER')\">\n <V4Button\n :label=\"$t('SLA_REPORTS.DOWNLOAD_SLA_REPORTS')\"\n icon=\"i-ph-download-simple\"\n size=\"sm\"\n @click=\"downloadReports\"\n />\n </ReportHeader>\n <div class=\"flex flex-col flex-1 gap-6\">\n <SLAReportFilters @filter-change=\"onFilterChange\" />\n <SLAMetrics\n :hit-rate=\"slaMetrics.hitRate\"\n :no-of-breaches=\"slaMetrics.numberOfSLAMisses\"\n :no-of-conversations=\"slaMetrics.numberOfConversations\"\n :is-loading=\"uiFlags.isFetchingMetrics\"\n />\n <SLATable\n :sla-reports=\"slaReports\"\n :is-loading=\"uiFlags.isFetching\"\n :current-page=\"Number(slaMeta.currentPage)\"\n :total-count=\"Number(slaMeta.count)\"\n @page-change=\"onPageChange\"\n />\n </div>\n</template>\n","import { frontendURL } from '../../../../helper/URLHelper';\nimport { FEATURE_FLAGS } from 'dashboard/featureFlags';\n\nimport ReportsWrapper from './components/ReportsWrapper.vue';\nimport Index from './Index.vue';\n\nimport AgentReportsIndex from './AgentReportsIndex.vue';\nimport InboxReportsIndex from './InboxReportsIndex.vue';\nimport TeamReportsIndex from './TeamReportsIndex.vue';\n\nimport AgentReportsShow from './AgentReportsShow.vue';\nimport InboxReportsShow from './InboxReportsShow.vue';\nimport TeamReportsShow from './TeamReportsShow.vue';\n\nimport AgentReports from './AgentReports.vue';\nimport InboxReports from './InboxReports.vue';\nimport LabelReports from './LabelReports.vue';\nimport TeamReports from './TeamReports.vue';\n\nimport CsatResponses from './CsatResponses.vue';\nimport BotReports from './BotReports.vue';\nimport LiveReports from './LiveReports.vue';\nimport SLAReports from './SLAReports.vue';\n\nconst meta = {\n featureFlag: FEATURE_FLAGS.REPORTS,\n permissions: ['administrator', 'report_manage'],\n};\n\nconst oldReportRoutes = [\n {\n path: 'agent',\n name: 'agent_reports',\n meta,\n component: AgentReports,\n },\n {\n path: 'inboxes',\n name: 'inbox_reports',\n meta,\n component: InboxReports,\n },\n {\n path: 'label',\n name: 'label_reports',\n meta,\n component: LabelReports,\n },\n {\n path: 'teams',\n name: 'team_reports',\n meta,\n component: TeamReports,\n },\n];\n\nconst revisedReportRoutes = [\n {\n path: 'agents_overview',\n name: 'agent_reports_index',\n meta: {\n permissions: ['administrator', 'report_manage'],\n },\n component: AgentReportsIndex,\n },\n {\n path: 'agents/:id',\n name: 'agent_reports_show',\n meta: {\n permissions: ['administrator', 'report_manage'],\n },\n component: AgentReportsShow,\n },\n\n {\n path: 'inboxes_overview',\n name: 'inbox_reports_index',\n meta: {\n permissions: ['administrator', 'report_manage'],\n },\n component: InboxReportsIndex,\n },\n {\n path: 'inboxes/:id',\n name: 'inbox_reports_show',\n meta: {\n permissions: ['administrator', 'report_manage'],\n },\n component: InboxReportsShow,\n },\n {\n path: 'teams_overview',\n name: 'team_reports_index',\n meta: {\n permissions: ['administrator', 'report_manage'],\n },\n component: TeamReportsIndex,\n },\n {\n path: 'teams/:id',\n name: 'team_reports_show',\n meta: {\n permissions: ['administrator', 'report_manage'],\n },\n component: TeamReportsShow,\n },\n];\n\nexport default {\n routes: [\n {\n path: frontendURL('accounts/:accountId/reports'),\n component: ReportsWrapper,\n children: [\n {\n path: '',\n redirect: to => {\n return { name: 'account_overview_reports', params: to.params };\n },\n },\n {\n path: 'overview',\n name: 'account_overview_reports',\n meta,\n component: LiveReports,\n },\n {\n path: 'conversation',\n name: 'conversation_reports',\n meta,\n component: Index,\n },\n ...oldReportRoutes,\n ...revisedReportRoutes,\n {\n path: 'sla',\n name: 'sla_reports',\n meta,\n component: SLAReports,\n },\n {\n path: 'csat',\n name: 'csat_reports',\n meta,\n component: CsatResponses,\n },\n {\n path: 'bot',\n name: 'bot_reports',\n meta,\n component: BotReports,\n },\n ],\n },\n ],\n};\n","import { required, minLength, minValue, decimal } from '@vuelidate/validators';\n\nexport default {\n name: {\n required,\n minLength: minLength(2),\n },\n thresholdTime: {\n decimal,\n minValue: minValue(0.001),\n },\n};\n","<script>\nimport validations from './validations';\nimport { useVuelidate } from '@vuelidate/core';\n\nexport default {\n props: {\n threshold: {\n type: Number,\n default: null,\n },\n thresholdUnit: {\n type: String,\n default: 'Minutes',\n },\n label: {\n type: String,\n default: '',\n },\n placeholder: {\n type: String,\n default: '',\n },\n },\n emits: ['unit', 'isInValid', 'updateThreshold'],\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n thresholdTime: this.threshold || '',\n thresholdUnitValue: this.thresholdUnit,\n options: [\n { value: 'Minutes', label: 'minutes' },\n { value: 'Hours', label: 'hours' },\n { value: 'Days', label: 'days' },\n ],\n };\n },\n validations,\n computed: {\n thresholdTimeErrorMessage() {\n let errorMessage = '';\n if (this.v$.thresholdTime.$error) {\n if (!this.v$.thresholdTime.numeric || !this.v$.thresholdTime.minValue) {\n errorMessage = this.$t(\n 'SLA.FORM.THRESHOLD_TIME.INVALID_FORMAT_ERROR'\n );\n }\n }\n return errorMessage;\n },\n },\n watch: {\n threshold: {\n immediate: true,\n handler(value) {\n if (!Number.isNaN(value)) {\n this.thresholdTime = value;\n }\n },\n },\n thresholdUnit: {\n immediate: true,\n handler(value) {\n this.thresholdUnitValue = value;\n },\n },\n },\n methods: {\n onThresholdUnitChange() {\n this.$emit('unit', this.thresholdUnitValue);\n },\n onThresholdTimeChange() {\n this.v$.thresholdTime.$touch();\n const isInvalid = this.v$.thresholdTime.$invalid;\n this.$emit('isInValid', isInvalid);\n this.$emit(\n 'updateThreshold',\n this.thresholdTime ? Number(this.thresholdTime) : null\n );\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex items-center w-full gap-3\">\n <woot-input\n v-model=\"thresholdTime\"\n type=\"number\"\n :class=\"{ error: v$.thresholdTime.$error }\"\n class=\"flex-grow\"\n :styles=\"{\n borderRadius: '0.75rem',\n padding: '0.375rem 0.75rem',\n fontSize: '0.875rem',\n }\"\n :label=\"label\"\n :placeholder=\"placeholder\"\n :error=\"thresholdTimeErrorMessage\"\n @update:model-value=\"onThresholdTimeChange\"\n />\n <!-- the mt-7 handles the label offset -->\n <div class=\"mt-7\">\n <select\n v-model=\"thresholdUnitValue\"\n class=\"px-4 py-1.5 min-w-[6.5rem] h-10 text-sm font-medium border-0 rounded-xl hover:cursor-pointer pr-7\"\n @change=\"onThresholdUnitChange\"\n >\n <option\n v-for=\"(option, index) in options\"\n :key=\"index\"\n :value=\"option.value\"\n >\n {{ option.label }}\n </option>\n </select>\n </div>\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { convertSecondsToTimeUnit } from '@chatwoot/utils';\nimport validations from './validations';\nimport SlaTimeInput from './SlaTimeInput.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\nimport { useVuelidate } from '@vuelidate/core';\n\nexport default {\n components: {\n SlaTimeInput,\n NextButton,\n },\n props: {\n selectedResponse: {\n type: Object,\n default: () => {},\n },\n submitLabel: {\n type: String,\n required: true,\n },\n },\n emits: ['close', 'submitSla'],\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n name: '',\n description: '',\n isSlaTimeInputsInvalid: false,\n slaTimeInputsValidation: {},\n slaTimeInputs: [\n {\n threshold: null,\n unit: 'Minutes',\n label: 'SLA.FORM.FIRST_RESPONSE_TIME.LABEL',\n placeholder: 'SLA.FORM.FIRST_RESPONSE_TIME.PLACEHOLDER',\n },\n {\n threshold: null,\n unit: 'Minutes',\n label: 'SLA.FORM.NEXT_RESPONSE_TIME.LABEL',\n placeholder: 'SLA.FORM.NEXT_RESPONSE_TIME.PLACEHOLDER',\n },\n {\n threshold: null,\n unit: 'Minutes',\n label: 'SLA.FORM.RESOLUTION_TIME.LABEL',\n placeholder: 'SLA.FORM.RESOLUTION_TIME.PLACEHOLDER',\n },\n ],\n onlyDuringBusinessHours: false,\n };\n },\n validations,\n computed: {\n ...mapGetters({\n uiFlags: 'sla/getUIFlags',\n }),\n isSubmitDisabled() {\n return (\n this.v$.name.$invalid ||\n this.isSlaTimeInputsInvalid ||\n this.uiFlags.isUpdating\n );\n },\n slaNameErrorMessage() {\n let errorMessage = '';\n if (this.v$.name.$error) {\n if (!this.v$.name.required) {\n errorMessage = this.$t('SLA.FORM.NAME.REQUIRED_ERROR');\n } else if (!this.v$.name.minLength) {\n errorMessage = this.$t('SLA.FORM.NAME.MINIMUM_LENGTH_ERROR');\n }\n }\n return errorMessage;\n },\n },\n mounted() {\n if (this.selectedResponse) this.setFormValues();\n },\n methods: {\n onClose() {\n this.$emit('close');\n },\n setFormValues() {\n const {\n name,\n description,\n first_response_time_threshold: firstResponseTimeThreshold,\n next_response_time_threshold: nextResponseTimeThreshold,\n resolution_time_threshold: resolutionTimeThreshold,\n only_during_business_hours: onlyDuringBusinessHours,\n } = this.selectedResponse;\n\n this.name = name;\n this.description = description;\n this.onlyDuringBusinessHours = onlyDuringBusinessHours;\n\n const thresholds = [\n firstResponseTimeThreshold,\n nextResponseTimeThreshold,\n resolutionTimeThreshold,\n ];\n this.slaTimeInputs.forEach((input, index) => {\n const converted = convertSecondsToTimeUnit(thresholds[index], {\n minute: 'Minutes',\n hour: 'Hours',\n day: 'Days',\n });\n input.threshold = converted.time;\n input.unit = converted.unit;\n });\n },\n updateThreshold(index, value) {\n this.slaTimeInputs[index].threshold = value;\n },\n updateUnit(index, unit) {\n this.slaTimeInputs[index].unit = unit;\n },\n onSubmit() {\n const payload = {\n name: this.name,\n description: this.description,\n first_response_time_threshold: this.convertToSeconds(0),\n next_response_time_threshold: this.convertToSeconds(1),\n resolution_time_threshold: this.convertToSeconds(2),\n only_during_business_hours: this.onlyDuringBusinessHours,\n };\n this.$emit('submitSla', payload);\n },\n convertToSeconds(index) {\n const { threshold, unit } = this.slaTimeInputs[index];\n if (threshold === null || threshold === 0) return null;\n const unitsToSeconds = { Minutes: 60, Hours: 3600, Days: 86400 };\n return Number(threshold * (unitsToSeconds[unit] || 1));\n },\n handleIsInvalid(index, isInvalid) {\n this.slaTimeInputsValidation = {\n ...this.slaTimeInputsValidation,\n [index]: isInvalid,\n };\n\n this.checkValidationState();\n },\n checkValidationState() {\n const isAnyInvalid = Object.values(this.slaTimeInputsValidation).some(\n isInvalid => isInvalid\n );\n this.isSlaTimeInputsInvalid = isAnyInvalid;\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex flex-col h-auto overflow-auto\">\n <form class=\"flex flex-wrap mx-0\" @submit.prevent=\"onSubmit\">\n <woot-input\n v-model=\"name\"\n :class=\"{ error: v$.name.$error }\"\n class=\"w-full\"\n :styles=\"{\n borderRadius: '0.75rem',\n padding: '0.375rem 0.75rem',\n fontSize: '0.875rem',\n }\"\n :label=\"$t('SLA.FORM.NAME.LABEL')\"\n :placeholder=\"$t('SLA.FORM.NAME.PLACEHOLDER')\"\n :error=\"slaNameErrorMessage\"\n @input=\"v$.name.$touch\"\n @blur=\"v$.name.$touch\"\n />\n <woot-input\n v-model=\"description\"\n class=\"w-full\"\n :styles=\"{\n borderRadius: '0.75rem',\n padding: '0.375rem 0.75rem',\n fontSize: '0.875rem',\n }\"\n :label=\"$t('SLA.FORM.DESCRIPTION.LABEL')\"\n :placeholder=\"$t('SLA.FORM.DESCRIPTION.PLACEHOLDER')\"\n />\n\n <SlaTimeInput\n v-for=\"(input, index) in slaTimeInputs\"\n :key=\"index\"\n :threshold=\"input.threshold\"\n :threshold-unit=\"input.unit\"\n :label=\"$t(input.label)\"\n :placeholder=\"$t(input.placeholder)\"\n @update-threshold=\"updateThreshold(index, $event)\"\n @unit=\"updateUnit(index, $event)\"\n @is-in-valid=\"handleIsInvalid(index, $event)\"\n />\n\n <div\n class=\"mt-3 flex h-10 items-center text-sm w-full gap-2 border border-solid border-n-strong px-3 py-1.5 rounded-xl justify-between\"\n >\n <span for=\"sla_bh\" class=\"text-slate-700 dark:text-slate-200\">\n {{ $t('SLA.FORM.BUSINESS_HOURS.PLACEHOLDER') }}\n </span>\n <woot-switch id=\"sla_bh\" v-model=\"onlyDuringBusinessHours\" />\n </div>\n\n <div class=\"flex items-center justify-end w-full gap-2 mt-8\">\n <NextButton\n faded\n slate\n type=\"reset\"\n :label=\"$t('SLA.FORM.CANCEL')\"\n @click.prevent=\"onClose\"\n />\n <NextButton\n type=\"submit\"\n :label=\"submitLabel\"\n :disabled=\"isSubmitDisabled\"\n :is-loading=\"uiFlags.isUpdating\"\n />\n </div>\n </form>\n </div>\n</template>\n","<script>\nimport { useAlert } from 'dashboard/composables';\nimport SlaForm from './SlaForm.vue';\n\nexport default {\n components: {\n SlaForm,\n },\n emits: ['close'],\n methods: {\n onClose() {\n this.$emit('close');\n },\n async addSLA(payload) {\n try {\n await this.$store.dispatch('sla/create', payload);\n useAlert(this.$t('SLA.ADD.API.SUCCESS_MESSAGE'));\n this.onClose();\n } catch (error) {\n const errorMessage =\n error.message || this.$t('SLA.ADD.API.ERROR_MESSAGE');\n useAlert(errorMessage);\n }\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex flex-col h-auto overflow-auto\">\n <woot-modal-header\n :header-title=\"$t('SLA.ADD.TITLE')\"\n :header-content=\"$t('SLA.ADD.DESC')\"\n />\n <SlaForm\n :submit-label=\"$t('SLA.FORM.CREATE')\"\n @submit-sla=\"addSLA\"\n @close=\"onClose\"\n />\n </div>\n</template>\n","<script setup>\nimport BaseSettingsListItem from '../../components/BaseSettingsListItem.vue';\nimport SLAResponseTime from './SLAResponseTime.vue';\nimport SLABusinessHoursLabel from './SLABusinessHoursLabel.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\ndefineProps({\n slaName: {\n type: String,\n required: true,\n },\n description: {\n type: String,\n required: true,\n },\n firstResponse: {\n type: String,\n required: true,\n },\n nextResponse: {\n type: String,\n required: true,\n },\n resolutionTime: {\n type: String,\n required: true,\n },\n hasBusinessHours: {\n type: Boolean,\n required: true,\n },\n isLoading: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits(['delete']);\n</script>\n\n<template>\n <BaseSettingsListItem\n class=\"sm:divide-x sm:divide-slate-75 sm:dark:divide-slate-700/50\"\n :title=\"slaName\"\n :description=\"description\"\n >\n <template #label>\n <SLABusinessHoursLabel :has-business-hours=\"hasBusinessHours\" />\n </template>\n <template #rightSection>\n <div\n class=\"flex items-center divide-x rtl:divide-x-reverse sm:rtl:!border-l-0 sm:rtl:!border-r sm:rtl:border-solid sm:rtl:border-slate-75 sm:rtl:dark:border-slate-700/50 gap-1.5 w-fit sm:w-full sm:gap-0 sm:justify-between divide-slate-75 dark:divide-slate-700/50\"\n >\n <SLAResponseTime response-type=\"FRT\" :response-time=\"firstResponse\" />\n <SLAResponseTime response-type=\"NRT\" :response-time=\"nextResponse\" />\n <SLAResponseTime response-type=\"RT\" :response-time=\"resolutionTime\" />\n </div>\n </template>\n <template #actions>\n <Button\n v-tooltip.top=\"$t('SLA.FORM.DELETE')\"\n faded\n ruby\n xs\n icon=\"i-lucide-trash-2\"\n :is-loading=\"isLoading\"\n @click=\"emit('delete')\"\n />\n </template>\n </BaseSettingsListItem>\n</template>\n","<script setup>\nimport BaseEmptyState from './BaseEmptyState.vue';\n\nconst emit = defineEmits(['primaryAction']);\nconst primaryAction = () => emit('primaryAction');\n</script>\n\n<template>\n <BaseEmptyState>\n <p class=\"max-w-xs text-sm font-medium text-center\">\n {{ $t('SLA.LIST.404') }}\n </p>\n <woot-button\n color-scheme=\"primary\"\n icon=\"plus-sign\"\n class=\"px-5 mt-4 rounded-xl\"\n @click=\"primaryAction\"\n >\n {{ $t('SLA.ADD_ACTION_LONG') }}\n </woot-button>\n </BaseEmptyState>\n</template>\n","<script setup>\nimport Icon from 'next/icon/Icon.vue';\nimport ButtonV4 from 'next/button/Button.vue';\n\ndefineProps({\n featurePrefix: {\n type: String,\n required: true,\n },\n i18nKey: {\n type: String,\n required: true,\n },\n isOnChatwootCloud: {\n type: Boolean,\n default: false,\n },\n isSuperAdmin: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits(['upgrade']);\n</script>\n\n<template>\n <div\n class=\"flex flex-col max-w-md px-6 py-6 border shadow bg-n-solid-1 rounded-xl border-n-weak\"\n >\n <div class=\"flex items-center w-full gap-2 mb-4\">\n <span\n class=\"flex items-center justify-center w-6 h-6 rounded-full bg-n-solid-blue\"\n >\n <Icon\n class=\"flex-shrink-0 text-n-brand size-[14px]\"\n icon=\"i-lucide-lock-keyhole\"\n />\n </span>\n <span class=\"text-base font-medium text-n-slate-12\">\n {{ $t(`${featurePrefix}.PAYWALL.TITLE`) }}\n </span>\n </div>\n <p\n v-dompurify-html=\"$t(`${featurePrefix}.${i18nKey}.AVAILABLE_ON`)\"\n class=\"text-sm font-normal text-n-slate-11\"\n />\n <p class=\"text-sm font-normal text-n-slate-11\">\n {{ $t(`${featurePrefix}.${i18nKey}.UPGRADE_PROMPT`) }}\n <span v-if=\"!isOnChatwootCloud && !isSuperAdmin\">\n {{ $t(`${featurePrefix}.ENTERPRISE_PAYWALL.ASK_ADMIN`) }}\n </span>\n </p>\n <template v-if=\"isOnChatwootCloud\">\n <ButtonV4 blue solid md @click=\"emit('upgrade')\">\n {{ $t(`${featurePrefix}.PAYWALL.UPGRADE_NOW`) }}\n </ButtonV4>\n <span class=\"mt-2 text-xs tracking-tight text-center text-n-slate-11\">\n {{ $t(`${featurePrefix}.PAYWALL.CANCEL_ANYTIME`) }}\n </span>\n </template>\n <template v-else-if=\"isSuperAdmin\">\n <a href=\"/super_admin\" class=\"block w-full\">\n <ButtonV4 solid blue md class=\"w-full\">\n {{ $t(`${featurePrefix}.PAYWALL.UPGRADE_NOW`) }}\n </ButtonV4>\n </a>\n </template>\n </div>\n</template>\n","<script setup>\nimport BaseEmptyState from './BaseEmptyState.vue';\nimport BasePaywallModal from 'dashboard/routes/dashboard/settings/components/BasePaywallModal.vue';\n\nconst props = defineProps({\n isSuperAdmin: {\n type: Boolean,\n default: false,\n },\n isOnChatwootCloud: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits(['upgrade']);\nconst i18nKey = props.isOnChatwootCloud ? 'PAYWALL' : 'ENTERPRISE_PAYWALL';\n</script>\n\n<template>\n <BaseEmptyState>\n <BasePaywallModal\n feature-prefix=\"SLA\"\n :i18n-key=\"i18nKey\"\n :is-on-chatwoot-cloud=\"isOnChatwootCloud\"\n :is-super-admin=\"isSuperAdmin\"\n @upgrade=\"emit('upgrade')\"\n />\n </BaseEmptyState>\n</template>\n","<script>\nimport AddSLA from './AddSLA.vue';\nimport SettingsLayout from '../SettingsLayout.vue';\nimport SLAEmptyState from './components/SLAEmptyState.vue';\nimport SLAHeader from './components/SLAHeader.vue';\nimport SLAListItem from './components/SLAListItem.vue';\nimport SLAListItemLoading from './components/SLAListItemLoading.vue';\nimport SLAPaywallEnterprise from './components/SLAPaywallEnterprise.vue';\n\nimport { mapGetters } from 'vuex';\nimport { convertSecondsToTimeUnit } from '@chatwoot/utils';\nimport { useAlert } from 'dashboard/composables';\n\nexport default {\n components: {\n AddSLA,\n SettingsLayout,\n SLAEmptyState,\n SLAHeader,\n SLAListItem,\n SLAListItemLoading,\n SLAPaywallEnterprise,\n },\n data() {\n return {\n loading: {},\n showAddPopup: false,\n showDeleteConfirmationPopup: false,\n selectedResponse: {},\n };\n },\n computed: {\n ...mapGetters({\n isOnChatwootCloud: 'globalConfig/isOnChatwootCloud',\n isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount',\n records: 'sla/getSLA',\n currentUser: 'getCurrentUser',\n accountId: 'getCurrentAccountId',\n uiFlags: 'sla/getUIFlags',\n }),\n deleteConfirmText() {\n return this.$t('SLA.DELETE.CONFIRM.YES');\n },\n deleteRejectText() {\n return this.$t('SLA.DELETE.CONFIRM.NO');\n },\n deleteMessage() {\n return ` ${this.selectedResponse.name}`;\n },\n isBehindAPaywall() {\n return !this.isFeatureEnabledonAccount(this.accountId, 'sla');\n },\n isSuperAdmin() {\n return this.currentUser.type === 'SuperAdmin';\n },\n },\n mounted() {\n this.$store.dispatch('sla/get');\n },\n methods: {\n openAddPopup() {\n if (this.isBehindAPaywall) {\n return;\n }\n this.showAddPopup = true;\n },\n hideAddPopup() {\n this.showAddPopup = false;\n },\n openDeletePopup(response) {\n this.showDeleteConfirmationPopup = true;\n this.selectedResponse = response;\n },\n closeDeletePopup() {\n this.showDeleteConfirmationPopup = false;\n },\n confirmDeletion() {\n this.loading[this.selectedResponse.id] = true;\n this.closeDeletePopup();\n this.deleteSla(this.selectedResponse.id);\n },\n deleteSla(id) {\n this.$store\n .dispatch('sla/delete', id)\n .then(() => {\n useAlert(this.$t('SLA.DELETE.API.SUCCESS_MESSAGE'));\n })\n .catch(() => {\n useAlert(this.$t('SLA.DELETE.API.ERROR_MESSAGE'));\n })\n .finally(() => {\n this.loading[this.selectedResponse.id] = false;\n });\n },\n displayTime(threshold) {\n const { time, unit } = convertSecondsToTimeUnit(threshold, {\n minute: 'm',\n hour: 'h',\n day: 'd',\n });\n if (!time) return '-';\n return `${time}${unit}`;\n },\n onClickCTA() {\n this.$router.push({\n name: 'billing_settings_index',\n params: { accountId: this.accountId },\n });\n },\n },\n};\n</script>\n\n<template>\n <SettingsLayout\n :is-loading=\"uiFlags.isFetching\"\n :loading-message=\"$t('SLA.LOADING')\"\n >\n <template #header>\n <SLAHeader :show-actions=\"records.length > 0\" @add=\"openAddPopup\" />\n </template>\n <template #loading>\n <SLAListItemLoading v-for=\"ii in 2\" :key=\"ii\" class=\"mb-3\" />\n </template>\n <template #body>\n <SLAPaywallEnterprise\n v-if=\"isBehindAPaywall\"\n :is-super-admin=\"isSuperAdmin\"\n :is-on-chatwoot-cloud=\"isOnChatwootCloud\"\n @upgrade=\"onClickCTA\"\n />\n <SLAEmptyState\n v-else-if=\"!records.length\"\n @primary-action=\"openAddPopup\"\n />\n <div v-else class=\"flex flex-col w-full h-full gap-3\">\n <SLAListItem\n v-for=\"sla in records\"\n :key=\"sla.title\"\n :sla-name=\"sla.name\"\n :description=\"sla.description\"\n :first-response=\"displayTime(sla.first_response_time_threshold)\"\n :next-response=\"displayTime(sla.next_response_time_threshold)\"\n :resolution-time=\"displayTime(sla.resolution_time_threshold)\"\n :has-business-hours=\"sla.only_during_business_hours\"\n :is-loading=\"loading[sla.id]\"\n @delete=\"openDeletePopup(sla)\"\n />\n </div>\n\n <woot-modal v-model:show=\"showAddPopup\" :on-close=\"hideAddPopup\">\n <AddSLA @close=\"hideAddPopup\" />\n </woot-modal>\n\n <woot-delete-modal\n v-model:show=\"showDeleteConfirmationPopup\"\n :on-close=\"closeDeletePopup\"\n :on-confirm=\"confirmDeletion\"\n :title=\"$t('SLA.DELETE.CONFIRM.TITLE')\"\n :message=\"$t('SLA.DELETE.CONFIRM.MESSAGE')\"\n :message-value=\"deleteMessage\"\n :confirm-text=\"deleteConfirmText\"\n :reject-text=\"deleteRejectText\"\n />\n </template>\n </SettingsLayout>\n</template>\n","import { FEATURE_FLAGS } from '../../../../featureFlags';\nimport { INSTALLATION_TYPES } from 'dashboard/constants/installationTypes';\nimport { frontendURL } from '../../../../helper/URLHelper';\n\nimport SettingsWrapper from '../SettingsWrapper.vue';\nimport Index from './Index.vue';\n\nconst meta = {\n featureFlag: FEATURE_FLAGS.SLA,\n permissions: ['administrator'],\n installationTypes: [INSTALLATION_TYPES.CLOUD, INSTALLATION_TYPES.ENTERPRISE],\n};\n\nexport default {\n routes: [\n {\n path: frontendURL('accounts/:accountId/settings/sla'),\n component: SettingsWrapper,\n props: {},\n children: [\n {\n path: '',\n name: 'sla_wrapper',\n meta,\n redirect: to => {\n return { name: 'sla_list', params: to.params };\n },\n },\n {\n path: 'list',\n name: 'sla_list',\n meta,\n component: Index,\n },\n ],\n },\n ],\n};\n","<script setup>\nimport { useAlert } from 'dashboard/composables';\nimport { useAdmin } from 'dashboard/composables/useAdmin';\nimport BaseSettingsHeader from '../components/BaseSettingsHeader.vue';\nimport { computed, ref } from 'vue';\n\nimport { useStoreGetters, useStore } from 'dashboard/composables/store';\nimport { useI18n } from 'vue-i18n';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst store = useStore();\nconst { t } = useI18n();\nconst getters = useStoreGetters();\nconst teamsList = computed(() => getters['teams/getTeams'].value);\nconst uiFlags = computed(() => getters['teams/getUIFlags'].value);\nconst { isAdmin } = useAdmin();\n\nconst loading = ref({});\n\nconst deleteTeam = async ({ id }) => {\n try {\n loading.value[id] = true;\n await store.dispatch('teams/delete', id);\n useAlert(t('TEAMS_SETTINGS.DELETE.API.SUCCESS_MESSAGE'));\n } catch (error) {\n useAlert(t('TEAMS_SETTINGS.DELETE.API.ERROR_MESSAGE'));\n } finally {\n loading.value[id] = false;\n }\n};\n\nconst showDeletePopup = ref(false);\nconst selectedTeam = ref({});\n\nconst openDelete = team => {\n showDeletePopup.value = true;\n selectedTeam.value = team;\n};\n\nconst closeDelete = () => {\n showDeletePopup.value = false;\n selectedTeam.value = {};\n};\n\nconst confirmDeletion = () => {\n deleteTeam(selectedTeam.value);\n closeDelete();\n};\n\nconst deleteConfirmText = computed(\n () => `${t('TEAMS_SETTINGS.DELETE.CONFIRM.YES')} ${selectedTeam.value.name}`\n);\n\nconst deleteRejectText = computed(() => t('TEAMS_SETTINGS.DELETE.CONFIRM.NO'));\n\nconst confirmDeleteTitle = computed(() =>\n t('TEAMS_SETTINGS.DELETE.CONFIRM.TITLE', {\n teamName: selectedTeam.value.name,\n })\n);\n\nconst confirmPlaceHolderText = computed(() =>\n t('TEAMS_SETTINGS.DELETE.CONFIRM.PLACE_HOLDER', {\n teamName: selectedTeam.value.name,\n })\n);\n</script>\n\n<template>\n <div class=\"flex-1 overflow-auto\">\n <BaseSettingsHeader\n :title=\"$t('TEAMS_SETTINGS.HEADER')\"\n :description=\"$t('TEAMS_SETTINGS.DESCRIPTION')\"\n :link-text=\"$t('TEAMS_SETTINGS.LEARN_MORE')\"\n feature-name=\"team_management\"\n >\n <template #actions>\n <router-link v-if=\"isAdmin\" :to=\"{ name: 'settings_teams_new' }\">\n <Button\n icon=\"i-lucide-circle-plus\"\n :label=\"$t('TEAMS_SETTINGS.NEW_TEAM')\"\n />\n </router-link>\n </template>\n </BaseSettingsHeader>\n <div class=\"mt-6 flex-1 text-slate-700 dark:text-slate-300\">\n <woot-loading-state\n v-if=\"uiFlags.isFetching\"\n :message=\"$t('TEAMS_SETTINGS.LOADING')\"\n />\n <p\n v-else-if=\"!teamsList.length\"\n class=\"flex flex-col items-center justify-center h-full text-base p-8\"\n >\n {{ $t('TEAMS_SETTINGS.LIST.404') }}\n </p>\n\n <table\n v-else\n class=\"min-w-full divide-y divide-slate-75 dark:divide-slate-700\"\n >\n <tbody class=\"divide-y divide-slate-50 dark:divide-slate-800\">\n <tr v-for=\"team in teamsList\" :key=\"team.id\">\n <td class=\"py-4 ltr:pr-4 rtl:pl-4\">\n <span class=\"block font-medium capitalize\">{{ team.name }}</span>\n <p class=\"mb-0\">{{ team.description }}</p>\n </td>\n\n <td class=\"py-4 flex justify-end gap-1\">\n <router-link\n :to=\"{\n name: 'settings_teams_edit',\n params: { teamId: team.id },\n }\"\n >\n <Button\n v-if=\"isAdmin\"\n v-tooltip.top=\"$t('TEAMS_SETTINGS.LIST.EDIT_TEAM')\"\n icon=\"i-lucide-settings\"\n slate\n xs\n faded\n />\n </router-link>\n\n <Button\n v-if=\"isAdmin\"\n v-tooltip.top=\"$t('TEAMS_SETTINGS.DELETE.BUTTON_TEXT')\"\n icon=\"i-lucide-trash-2\"\n xs\n ruby\n faded\n :is-loading=\"loading[team.id]\"\n @click=\"openDelete(team)\"\n />\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n <woot-confirm-delete-modal\n v-if=\"showDeletePopup\"\n v-model:show=\"showDeletePopup\"\n :title=\"confirmDeleteTitle\"\n :message=\"$t('TEAMS_SETTINGS.DELETE.CONFIRM.MESSAGE')\"\n :confirm-text=\"deleteConfirmText\"\n :reject-text=\"deleteRejectText\"\n :confirm-value=\"selectedTeam.name\"\n :confirm-place-holder-text=\"confirmPlaceHolderText\"\n @on-confirm=\"confirmDeletion\"\n @on-close=\"closeDelete\"\n />\n </div>\n</template>\n","<script>\nexport default {\n computed: {\n items() {\n const steps = ['WIZARD_CREATE', 'WIZARD_ADD_AGENTS', 'WIZARD_FINISH'];\n\n const routes = {\n WIZARD_CREATE: 'settings_teams_new',\n WIZARD_ADD_AGENTS: 'settings_teams_add_agents',\n WIZARD_FINISH: 'settings_teams_finish',\n };\n\n return steps.map(step => {\n return {\n title: this.$t(`TEAMS_SETTINGS.CREATE_FLOW.${step}.TITLE`),\n body: this.$t(`TEAMS_SETTINGS.CREATE_FLOW.${step}.BODY`),\n route: routes[step],\n };\n });\n },\n },\n};\n</script>\n\n<template>\n <div class=\"grid grid-cols-1 md:grid-cols-8 overflow-auto h-full px-5 flex-1\">\n <woot-wizard class=\"hidden md:block col-span-2\" :items=\"items\" />\n <router-view />\n </div>\n</template>\n","<script>\nexport default {\n computed: {\n items() {\n const routes = {\n EDIT_WIZARD_DETAILS: 'settings_teams_edit',\n EDIT_WIZARD_AGENTS: 'settings_teams_edit_members',\n EDIT_WIZARD_FINISH: 'settings_teams_edit_finish',\n };\n\n const steps = [\n 'EDIT_WIZARD_DETAILS',\n 'EDIT_WIZARD_AGENTS',\n 'EDIT_WIZARD_FINISH',\n ];\n\n return steps.map(step => {\n return {\n title: this.$t(`TEAMS_SETTINGS.EDIT_FLOW.${step}.TITLE`),\n body: this.$t(`TEAMS_SETTINGS.EDIT_FLOW.${step}.BODY`),\n route: routes[step],\n };\n });\n },\n },\n};\n</script>\n\n<template>\n <div class=\"grid grid-cols-1 md:grid-cols-8 overflow-auto h-full px-5 flex-1\">\n <woot-wizard class=\"hidden md:block col-span-2\" :items=\"items\" />\n <router-view />\n </div>\n</template>\n","import { required, minLength } from '@vuelidate/validators';\n\nexport default {\n title: {\n required,\n minLength: minLength(2),\n },\n description: {},\n showOnSidebar: {},\n};\n","<script>\nimport validations from './helpers/validations';\nimport FormInput from 'v3/components/Form/Input.vue';\nimport { reactive } from 'vue';\nimport { useVuelidate } from '@vuelidate/core';\n\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n NextButton,\n FormInput,\n },\n props: {\n onSubmit: {\n type: Function,\n default: () => {},\n },\n submitInProgress: {\n type: Boolean,\n default: false,\n },\n formData: {\n type: Object,\n default: () => {},\n },\n submitButtonText: {\n type: String,\n default: '',\n },\n },\n setup(props) {\n const formData = props.formData || {};\n const {\n description = '',\n name: title = '',\n allow_auto_assign: allowAutoAssign = true,\n } = formData;\n\n const state = reactive({\n description,\n title,\n allowAutoAssign,\n });\n\n const rules = validations;\n const v$ = useVuelidate(rules, state);\n return { state, v$ };\n },\n methods: {\n handleSubmit() {\n this.v$.$touch();\n if (this.v$.$invalid) {\n return;\n }\n this.onSubmit({\n description: this.state.description,\n name: this.state.title,\n allow_auto_assign: this.state.allowAutoAssign,\n });\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex-shrink-0 w-full\">\n <form class=\"mx-0 grid gap-4\" @submit.prevent=\"handleSubmit\">\n <FormInput\n v-model=\"state.title\"\n name=\"title\"\n spacing=\"compact\"\n :label=\"$t('TEAMS_SETTINGS.FORM.NAME.LABEL')\"\n :placeholder=\"$t('TEAMS_SETTINGS.FORM.NAME.PLACEHOLDER')\"\n :has-error=\"v$.title.$error\"\n :error-message=\"v$.title.$error ? v$.title.$errors[0].$message : ''\"\n @blur=\"v$.title.$touch\"\n />\n <FormInput\n v-model=\"state.description\"\n name=\"description\"\n spacing=\"compact\"\n :label=\"$t('TEAMS_SETTINGS.FORM.DESCRIPTION.LABEL')\"\n :placeholder=\"$t('TEAMS_SETTINGS.FORM.DESCRIPTION.PLACEHOLDER')\"\n :has-error=\"v$.description.$error\"\n :error-message=\"\n v$.description.$error ? v$.description.$errors[0].$message : ''\n \"\n @blur=\"v$.description.$touch\"\n />\n <div class=\"w-full flex items-center gap-2\">\n <input v-model=\"state.allowAutoAssign\" type=\"checkbox\" :value=\"true\" />\n <label for=\"conversation_creation\">\n {{ $t('TEAMS_SETTINGS.FORM.AUTO_ASSIGN.LABEL') }}\n </label>\n </div>\n <div class=\"flex flex-row justify-end gap-2 py-2 px-0 w-full\">\n <div class=\"w-full\">\n <NextButton\n type=\"submit\"\n :label=\"submitButtonText\"\n :disabled=\"v$.title.$invalid || submitInProgress\"\n :is-loading=\"submitInProgress\"\n />\n </div>\n </div>\n </form>\n </div>\n</template>\n","<script>\nimport { useAlert } from 'dashboard/composables';\nimport TeamForm from '../TeamForm.vue';\nimport router from '../../../../index';\nimport PageHeader from '../../SettingsSubPageHeader.vue';\n\nexport default {\n components: {\n TeamForm,\n PageHeader,\n },\n data() {\n return {\n enabledFeatures: {},\n };\n },\n methods: {\n async createTeam(data) {\n try {\n const team = await this.$store.dispatch('teams/create', {\n ...data,\n });\n\n router.replace({\n name: 'settings_teams_add_agents',\n params: {\n page: 'new',\n teamId: team.id,\n },\n });\n } catch (error) {\n useAlert(this.$t('TEAMS_SETTINGS.TEAM_FORM.ERROR_MESSAGE'));\n }\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"border border-n-weak bg-n-solid-1 rounded-t-lg border-b-0 h-full w-full p-6 col-span-6 overflow-auto\"\n >\n <PageHeader\n :header-title=\"$t('TEAMS_SETTINGS.CREATE_FLOW.CREATE.TITLE')\"\n :header-content=\"$t('TEAMS_SETTINGS.CREATE_FLOW.CREATE.DESC')\"\n />\n <div class=\"flex flex-wrap\">\n <TeamForm\n :on-submit=\"createTeam\"\n :submit-in-progress=\"false\"\n :submit-button-text=\"$t('TEAMS_SETTINGS.FORM.SUBMIT_CREATE')\"\n />\n </div>\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\n\nimport TeamForm from '../TeamForm.vue';\nimport router from '../../../../index';\nimport PageHeader from '../../SettingsSubPageHeader.vue';\nimport Spinner from 'shared/components/Spinner.vue';\n\nexport default {\n components: {\n TeamForm,\n PageHeader,\n Spinner,\n },\n data() {\n return {\n enabledFeatures: {},\n };\n },\n computed: {\n teamData() {\n const { teamId } = this.$route.params;\n return this.$store.getters['teams/getTeam'](teamId);\n },\n showTeamForm() {\n const { id } = this.teamData;\n return id && !this.uiFlags.isFetching;\n },\n ...mapGetters({\n uiFlags: 'teams/getUIFlags',\n }),\n },\n methods: {\n async updateTeam(data) {\n try {\n const { teamId } = this.$route.params;\n\n await this.$store.dispatch('teams/update', {\n id: teamId,\n ...data,\n });\n\n router.replace({\n name: 'settings_teams_edit_members',\n params: {\n page: 'edit',\n teamId,\n },\n });\n } catch (error) {\n useAlert(this.$t('TEAMS_SETTINGS.TEAM_FORM.ERROR_MESSAGE'));\n }\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"border border-n-weak bg-n-solid-1 rounded-t-lg border-b-0 h-full w-full p-6 col-span-6 overflow-auto\"\n >\n <PageHeader\n :header-title=\"$t('TEAMS_SETTINGS.EDIT_FLOW.CREATE.TITLE')\"\n :header-content=\"$t('TEAMS_SETTINGS.EDIT_FLOW.CREATE.DESC')\"\n />\n <div class=\"flex flex-wrap\">\n <TeamForm\n v-if=\"showTeamForm\"\n :on-submit=\"updateTeam\"\n :submit-in-progress=\"false\"\n :submit-button-text=\"$t('TEAMS_SETTINGS.EDIT_FLOW.CREATE.BUTTON_TEXT')\"\n :form-data=\"teamData\"\n />\n <Spinner v-else />\n </div>\n </div>\n</template>\n","<script>\nimport NextButton from 'dashboard/components-next/button/Button.vue';\nimport Thumbnail from 'dashboard/components/widgets/Thumbnail.vue';\n\nexport default {\n components: {\n NextButton,\n Thumbnail,\n },\n props: {\n agentList: {\n type: Array,\n default: () => [],\n },\n selectedAgents: {\n type: Array,\n default: () => [],\n },\n updateSelectedAgents: {\n type: Function,\n default: () => {},\n },\n isWorking: {\n type: Boolean,\n default: false,\n },\n submitButtonText: {\n type: String,\n default: '',\n },\n },\n data() {\n return {};\n },\n computed: {\n selectedAgentCount() {\n return this.selectedAgents.length;\n },\n allAgentsSelected() {\n return this.selectedAgents.length === this.agentList.length;\n },\n disableSubmitButton() {\n return this.selectedAgentCount === 0;\n },\n },\n methods: {\n isAgentSelected(agentId) {\n return this.selectedAgents.includes(agentId);\n },\n handleSelectAgent(agentId) {\n const shouldRemove = this.isAgentSelected(agentId);\n\n let result = [];\n if (shouldRemove) {\n result = this.selectedAgents.filter(item => item !== agentId);\n } else {\n result = [...this.selectedAgents, agentId];\n }\n\n this.updateSelectedAgents(result);\n },\n selectAllAgents() {\n const result = this.agentList.map(item => item.id);\n this.updateSelectedAgents(result);\n },\n agentRowClass(agentId) {\n return { 'is-active': this.isAgentSelected(agentId) };\n },\n },\n};\n</script>\n\n<template>\n <div>\n <div class=\"add-agents__header\" />\n <table class=\"woot-table\">\n <thead>\n <tr>\n <td class=\"ltr:pl-2.5 rtl:pr-2.5\">\n <div class=\"flex items-center\">\n <input\n name=\"select-all-agents\"\n type=\"checkbox\"\n :checked=\"allAgentsSelected ? 'checked' : ''\"\n :title=\"$t('TEAMS_SETTINGS.AGENTS.SELECT_ALL')\"\n @click.self=\"selectAllAgents\"\n />\n </div>\n </td>\n <td class=\"text-slate-800 dark:text-slate-100 ltr:pl-2.5 rtl:pr-2.5\">\n {{ $t('TEAMS_SETTINGS.AGENTS.AGENT') }}\n </td>\n <td class=\"text-slate-800 dark:text-slate-100 ltr:pl-2.5 rtl:pr-2.5\">\n {{ $t('TEAMS_SETTINGS.AGENTS.EMAIL') }}\n </td>\n </tr>\n </thead>\n <tbody>\n <tr\n v-for=\"agent in agentList\"\n :key=\"agent.id\"\n :class=\"agentRowClass(agent.id)\"\n >\n <td class=\"w-12\">\n <div class=\"flex items-center\">\n <input\n type=\"checkbox\"\n :checked=\"isAgentSelected(agent.id)\"\n @click.self=\"() => handleSelectAgent(agent.id)\"\n />\n </div>\n </td>\n <td>\n <div class=\"flex items-center gap-2\">\n <Thumbnail\n :src=\"agent.thumbnail\"\n size=\"24px\"\n :username=\"agent.name\"\n :status=\"agent.availability_status\"\n />\n <h4 class=\"text-base mb-0 text-slate-800 dark:text-slate-100\">\n {{ agent.name }}\n </h4>\n </div>\n </td>\n <td>\n {{ agent.email || '---' }}\n </td>\n </tr>\n </tbody>\n </table>\n <div class=\"flex items-center justify-between mt-2\">\n <p>\n {{\n $t('TEAMS_SETTINGS.AGENTS.SELECTED_COUNT', {\n selected: selectedAgents.length,\n total: agentList.length,\n })\n }}\n </p>\n <NextButton\n type=\"submit\"\n :label=\"submitButtonText\"\n :disabled=\"disableSubmitButton\"\n :is-loading=\"isWorking\"\n />\n </div>\n </div>\n</template>\n\n<style scoped>\ninput {\n @apply mb-0;\n}\n</style>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\n\nimport router from '../../../../index';\nimport PageHeader from '../../SettingsSubPageHeader.vue';\nimport AgentSelector from '../AgentSelector.vue';\nimport { useVuelidate } from '@vuelidate/core';\n\nexport default {\n components: {\n PageHeader,\n AgentSelector,\n },\n validations: {\n selectedAgents: {\n isEmpty() {\n return !!this.selectedAgents.length;\n },\n },\n },\n\n setup() {\n return { v$: useVuelidate() };\n },\n\n data() {\n return {\n selectedAgents: [],\n isCreating: false,\n };\n },\n\n computed: {\n ...mapGetters({\n agentList: 'agents/getAgents',\n }),\n\n teamId() {\n return this.$route.params.teamId;\n },\n headerTitle() {\n return this.$t('TEAMS_SETTINGS.ADD.TITLE', {\n teamName: this.currentTeam.name,\n });\n },\n currentTeam() {\n return this.$store.getters['teams/getTeam'](this.teamId);\n },\n },\n\n mounted() {\n this.$store.dispatch('agents/get');\n },\n\n methods: {\n updateSelectedAgents(newAgentList) {\n this.v$.selectedAgents.$touch();\n this.selectedAgents = [...newAgentList];\n },\n selectAllAgents() {\n this.selectedAgents = this.agentList.map(agent => agent.id);\n },\n async addAgents() {\n this.isCreating = true;\n const { teamId, selectedAgents } = this;\n\n try {\n await this.$store.dispatch('teamMembers/create', {\n teamId,\n agentsList: selectedAgents,\n });\n router.replace({\n name: 'settings_teams_finish',\n params: {\n page: 'new',\n teamId,\n },\n });\n this.$store.dispatch('teams/get');\n } catch (error) {\n useAlert(error.message);\n }\n this.isCreating = false;\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"border border-n-weak bg-n-solid-1 rounded-t-lg border-b-0 h-full w-full p-6 col-span-6 overflow-auto\"\n >\n <form\n class=\"flex flex-wrap mx-0 overflow-x-auto\"\n @submit.prevent=\"addAgents\"\n >\n <div class=\"w-full\">\n <PageHeader\n :header-title=\"headerTitle\"\n :header-content=\"$t('TEAMS_SETTINGS.ADD.DESC')\"\n />\n </div>\n\n <div class=\"w-full\">\n <div v-if=\"v$.selectedAgents.$error\">\n <p class=\"error-message\">\n {{ $t('TEAMS_SETTINGS.ADD.AGENT_VALIDATION_ERROR') }}\n </p>\n </div>\n <AgentSelector\n :agent-list=\"agentList\"\n :selected-agents=\"selectedAgents\"\n :update-selected-agents=\"updateSelectedAgents\"\n :is-working=\"isCreating\"\n :submit-button-text=\"$t('TEAMS_SETTINGS.ADD.BUTTON_TEXT')\"\n />\n </div>\n </form>\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport router from '../../../../index';\nimport { useAlert } from 'dashboard/composables';\nimport { useVuelidate } from '@vuelidate/core';\n\nimport Spinner from 'shared/components/Spinner.vue';\nimport PageHeader from '../../SettingsSubPageHeader.vue';\nimport AgentSelector from '../AgentSelector.vue';\n\nexport default {\n components: {\n Spinner,\n PageHeader,\n AgentSelector,\n },\n validations: {\n selectedAgents: {\n isEmpty() {\n return !!this.selectedAgents.length;\n },\n },\n },\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n selectedAgents: [],\n isCreating: false,\n };\n },\n\n computed: {\n ...mapGetters({\n agentList: 'agents/getAgents',\n uiFlags: 'teamMembers/getUIFlags',\n }),\n\n teamId() {\n return this.$route.params.teamId;\n },\n headerTitle() {\n return this.$t('TEAMS_SETTINGS.EDIT_FLOW.AGENTS.TITLE', {\n teamName: this.currentTeam.name,\n });\n },\n currentTeam() {\n return this.$store.getters['teams/getTeam'](this.teamId);\n },\n teamMembers() {\n return this.$store.getters['teamMembers/getTeamMembers'](this.teamId);\n },\n showAgentsList() {\n const { id } = this.currentTeam;\n return id && !this.uiFlags.isFetching;\n },\n },\n\n async mounted() {\n const { teamId } = this.$route.params;\n this.$store.dispatch('agents/get');\n try {\n await this.$store.dispatch('teamMembers/get', {\n teamId,\n });\n const members = this.teamMembers.map(item => item.id);\n this.updateSelectedAgents(members);\n } catch {\n this.updateSelectedAgents([]);\n }\n },\n\n methods: {\n updateSelectedAgents(newAgentList) {\n this.v$.selectedAgents.$touch();\n this.selectedAgents = [...newAgentList];\n },\n async addAgents() {\n this.isCreating = true;\n const { teamId, selectedAgents } = this;\n\n try {\n await this.$store.dispatch('teamMembers/update', {\n teamId,\n agentsList: selectedAgents,\n });\n router.replace({\n name: 'settings_teams_edit_finish',\n params: {\n page: 'edit',\n teamId,\n },\n });\n this.$store.dispatch('teams/get');\n } catch (error) {\n useAlert(error.message);\n }\n this.isCreating = false;\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"border border-n-weak bg-n-solid-1 rounded-t-lg border-b-0 h-full w-full p-6 col-span-6 overflow-auto\"\n >\n <form\n class=\"flex flex-wrap mx-0 overflow-x-auto\"\n @submit.prevent=\"addAgents\"\n >\n <div class=\"w-full\">\n <PageHeader\n :header-title=\"headerTitle\"\n :header-content=\"$t('TEAMS_SETTINGS.EDIT_FLOW.AGENTS.DESC')\"\n />\n </div>\n\n <div class=\"w-full\">\n <div v-if=\"v$.selectedAgents.$error\">\n <p class=\"error-message\">\n {{ $t('TEAMS_SETTINGS.ADD.AGENT_VALIDATION_ERROR') }}\n </p>\n </div>\n <AgentSelector\n v-if=\"showAgentsList\"\n :agent-list=\"agentList\"\n :selected-agents=\"selectedAgents\"\n :update-selected-agents=\"updateSelectedAgents\"\n :is-working=\"isCreating\"\n :submit-button-text=\"\n $t('TEAMS_SETTINGS.EDIT_FLOW.AGENTS.BUTTON_TEXT')\n \"\n />\n <Spinner v-else />\n </div>\n </form>\n </div>\n</template>\n","<script>\nimport NextButton from 'dashboard/components-next/button/Button.vue';\nimport EmptyState from '../../../../components/widgets/EmptyState.vue';\n\nexport default {\n components: {\n NextButton,\n EmptyState,\n },\n};\n</script>\n\n<template>\n <div\n class=\"border border-n-weak bg-n-solid-1 rounded-t-lg border-b-0 h-full w-full p-6 col-span-6 overflow-auto\"\n >\n <EmptyState\n :title=\"$t('TEAMS_SETTINGS.FINISH.TITLE')\"\n :message=\"$t('TEAMS_SETTINGS.FINISH.MESSAGE')\"\n :button-text=\"$t('TEAMS_SETTINGS.FINISH.BUTTON_TEXT')\"\n >\n <div class=\"w-full text-center\">\n <router-link\n :to=\"{\n name: 'settings_teams_list',\n }\"\n >\n <NextButton teal :label=\"$t('TEAMS_SETTINGS.FINISH.BUTTON_TEXT')\" />\n </router-link>\n </div>\n </EmptyState>\n </div>\n</template>\n","import { frontendURL } from '../../../../helper/URLHelper';\nimport { FEATURE_FLAGS } from '../../../../featureFlags';\n\nimport TeamsIndex from './Index.vue';\nimport CreateStepWrap from './Create/Index.vue';\nimport EditStepWrap from './Edit/Index.vue';\nimport CreateTeam from './Create/CreateTeam.vue';\nimport EditTeam from './Edit/EditTeam.vue';\nimport AddAgents from './Create/AddAgents.vue';\nimport EditAgents from './Edit/EditAgents.vue';\nimport FinishSetup from './FinishSetup.vue';\nimport SettingsContent from '../Wrapper.vue';\nimport SettingsWrapper from '../SettingsWrapper.vue';\n\nexport default {\n routes: [\n {\n path: frontendURL('accounts/:accountId/settings/teams'),\n component: SettingsWrapper,\n children: [\n {\n path: '',\n redirect: to => {\n return { name: 'settings_teams_list', params: to.params };\n },\n },\n {\n path: 'list',\n name: 'settings_teams_list',\n component: TeamsIndex,\n meta: {\n featureFlag: FEATURE_FLAGS.TEAM_MANAGEMENT,\n permissions: ['administrator'],\n },\n },\n ],\n },\n {\n path: frontendURL('accounts/:accountId/settings/teams'),\n component: SettingsContent,\n props: () => {\n return {\n headerTitle: 'TEAMS_SETTINGS.HEADER',\n headerButtonText: 'TEAMS_SETTINGS.NEW_TEAM',\n icon: 'people-team',\n newButtonRoutes: ['settings_teams_new'],\n showBackButton: true,\n };\n },\n children: [\n {\n path: 'new',\n component: CreateStepWrap,\n children: [\n {\n path: '',\n name: 'settings_teams_new',\n component: CreateTeam,\n meta: {\n featureFlag: FEATURE_FLAGS.TEAM_MANAGEMENT,\n permissions: ['administrator'],\n },\n },\n {\n path: ':teamId/finish',\n name: 'settings_teams_finish',\n component: FinishSetup,\n meta: {\n featureFlag: FEATURE_FLAGS.TEAM_MANAGEMENT,\n permissions: ['administrator'],\n },\n },\n {\n path: ':teamId/agents',\n name: 'settings_teams_add_agents',\n meta: {\n featureFlag: FEATURE_FLAGS.TEAM_MANAGEMENT,\n permissions: ['administrator'],\n },\n component: AddAgents,\n },\n ],\n },\n {\n path: ':teamId/edit',\n component: EditStepWrap,\n children: [\n {\n path: '',\n name: 'settings_teams_edit',\n component: EditTeam,\n meta: {\n featureFlag: FEATURE_FLAGS.TEAM_MANAGEMENT,\n permissions: ['administrator'],\n },\n },\n {\n path: 'agents',\n name: 'settings_teams_edit_members',\n component: EditAgents,\n meta: {\n featureFlag: FEATURE_FLAGS.TEAM_MANAGEMENT,\n permissions: ['administrator'],\n },\n },\n {\n path: 'finish',\n name: 'settings_teams_edit_finish',\n meta: {\n featureFlag: FEATURE_FLAGS.TEAM_MANAGEMENT,\n permissions: ['administrator'],\n },\n component: FinishSetup,\n },\n ],\n },\n ],\n },\n ],\n};\n","<script setup>\nimport { ref, reactive, computed, onMounted, watch } from 'vue';\nimport { useStore } from 'dashboard/composables/store';\nimport { useI18n } from 'vue-i18n';\nimport { useVuelidate } from '@vuelidate/core';\nimport { required, minLength } from '@vuelidate/validators';\nimport { useAlert } from 'dashboard/composables';\nimport {\n AVAILABLE_CUSTOM_ROLE_PERMISSIONS,\n MANAGE_ALL_CONVERSATION_PERMISSIONS,\n CONVERSATION_UNASSIGNED_PERMISSIONS,\n CONVERSATION_PARTICIPATING_PERMISSIONS,\n} from 'dashboard/constants/permissions.js';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n mode: {\n type: String,\n default: 'add',\n validator: value => ['add', 'edit'].includes(value),\n },\n selectedRole: {\n type: Object,\n default: () => ({}),\n },\n});\n\nconst emit = defineEmits(['close']);\n\nconst store = useStore();\nconst { t } = useI18n();\n\nconst name = ref('');\nconst description = ref('');\nconst selectedPermissions = ref([]);\n\nconst nameInput = ref(null);\n\nconst addCustomRole = reactive({\n showLoading: false,\n message: '',\n});\n\nconst rules = computed(() => ({\n name: { required, minLength: minLength(2) },\n description: { required },\n selectedPermissions: { required, minLength: minLength(1) },\n}));\n\nconst v$ = useVuelidate(rules, { name, description, selectedPermissions });\n\nconst resetForm = () => {\n name.value = '';\n description.value = '';\n selectedPermissions.value = [];\n v$.value.$reset();\n};\n\nconst populateEditForm = () => {\n name.value = props.selectedRole.name || '';\n description.value = props.selectedRole.description || '';\n selectedPermissions.value = props.selectedRole.permissions || [];\n};\n\nwatch(\n selectedPermissions,\n (newValue, oldValue) => {\n // Check if manage all conversation permission is added or removed\n const hasAddedManageAllConversation =\n newValue.includes(MANAGE_ALL_CONVERSATION_PERMISSIONS) &&\n !oldValue.includes(MANAGE_ALL_CONVERSATION_PERMISSIONS);\n const hasRemovedManageAllConversation =\n oldValue.includes(MANAGE_ALL_CONVERSATION_PERMISSIONS) &&\n !newValue.includes(MANAGE_ALL_CONVERSATION_PERMISSIONS);\n\n if (hasAddedManageAllConversation) {\n // If manage all conversation permission is added,\n // then add unassigned and participating permissions automatically\n selectedPermissions.value = [\n ...new Set([\n ...selectedPermissions.value,\n CONVERSATION_UNASSIGNED_PERMISSIONS,\n CONVERSATION_PARTICIPATING_PERMISSIONS,\n ]),\n ];\n } else if (hasRemovedManageAllConversation) {\n // If manage all conversation permission is removed,\n // then only remove manage all conversation permission\n selectedPermissions.value = selectedPermissions.value.filter(\n p => p !== MANAGE_ALL_CONVERSATION_PERMISSIONS\n );\n }\n },\n { deep: true }\n);\n\nonMounted(() => {\n if (props.mode === 'edit') {\n populateEditForm();\n }\n // Focus the name input when mounted\n nameInput.value?.focus();\n});\n\nconst getTranslationKey = base => {\n return props.mode === 'edit'\n ? `CUSTOM_ROLE.EDIT.${base}`\n : `CUSTOM_ROLE.ADD.${base}`;\n};\n\nconst modalTitle = computed(() => t(getTranslationKey('TITLE')));\nconst modalDescription = computed(() => t(getTranslationKey('DESC')));\nconst submitButtonText = computed(() => t(getTranslationKey('SUBMIT')));\n\nconst handleCustomRole = async () => {\n v$.value.$touch();\n if (v$.value.$invalid) return;\n\n addCustomRole.showLoading = true;\n try {\n const roleData = {\n name: name.value,\n description: description.value,\n permissions: selectedPermissions.value,\n };\n\n if (props.mode === 'edit') {\n await store.dispatch('customRole/updateCustomRole', {\n id: props.selectedRole.id,\n ...roleData,\n });\n useAlert(t('CUSTOM_ROLE.EDIT.API.SUCCESS_MESSAGE'));\n } else {\n await store.dispatch('customRole/createCustomRole', roleData);\n useAlert(t('CUSTOM_ROLE.ADD.API.SUCCESS_MESSAGE'));\n }\n\n resetForm();\n emit('close');\n } catch (error) {\n const errorMessage =\n error?.message || t(`CUSTOM_ROLE.FORM.API.ERROR_MESSAGE`);\n useAlert(errorMessage);\n } finally {\n addCustomRole.showLoading = false;\n }\n};\n\nconst isSubmitDisabled = computed(\n () => v$.value.$invalid || addCustomRole.showLoading\n);\n</script>\n\n<template>\n <div class=\"flex flex-col h-auto overflow-auto\">\n <woot-modal-header\n :header-title=\"modalTitle\"\n :header-content=\"modalDescription\"\n />\n <form class=\"flex flex-col w-full\" @submit.prevent=\"handleCustomRole\">\n <div class=\"w-full\">\n <label :class=\"{ error: v$.name.$error }\">\n {{ $t('CUSTOM_ROLE.FORM.NAME.LABEL') }}\n <input\n ref=\"nameInput\"\n v-model.trim=\"name\"\n type=\"text\"\n :placeholder=\"$t('CUSTOM_ROLE.FORM.NAME.PLACEHOLDER')\"\n @blur=\"v$.name.$touch\"\n />\n </label>\n </div>\n\n <div class=\"w-full\">\n <label :class=\"{ error: v$.description.$error }\">\n {{ $t('CUSTOM_ROLE.FORM.DESCRIPTION.LABEL') }}\n\n <textarea\n v-model=\"description\"\n :rows=\"3\"\n :placeholder=\"$t('CUSTOM_ROLE.FORM.DESCRIPTION.PLACEHOLDER')\"\n @blur=\"v$.description.$touch\"\n />\n </label>\n </div>\n\n <div class=\"w-full\">\n <label :class=\"{ 'text-red-500': v$.selectedPermissions.$error }\">\n {{ $t('CUSTOM_ROLE.FORM.PERMISSIONS.LABEL') }}\n </label>\n <div class=\"flex flex-col gap-2.5 mb-4 mt-2\">\n <div\n v-for=\"permission in AVAILABLE_CUSTOM_ROLE_PERMISSIONS\"\n :key=\"permission\"\n class=\"flex items-center\"\n >\n <input\n :id=\"permission\"\n v-model=\"selectedPermissions\"\n type=\"checkbox\"\n :value=\"permission\"\n name=\"permissions\"\n class=\"ltr:mr-2 rtl:ml-2\"\n />\n <label :for=\"permission\" class=\"text-sm font-normal\">\n {{ $t(`CUSTOM_ROLE.PERMISSIONS.${permission.toUpperCase()}`) }}\n </label>\n </div>\n </div>\n </div>\n\n <div class=\"flex flex-row justify-end w-full gap-2 px-0 py-2\">\n <Button\n faded\n slate\n type=\"reset\"\n :label=\"$t('CUSTOM_ROLE.FORM.CANCEL_BUTTON_TEXT')\"\n @click.prevent=\"emit('close')\"\n />\n <Button\n type=\"submit\"\n :label=\"submitButtonText\"\n :disabled=\"isSubmitDisabled\"\n :is-loading=\"addCustomRole.showLoading\"\n />\n </div>\n </form>\n </div>\n</template>\n","<script setup>\nimport { useI18n } from 'vue-i18n';\nimport { getI18nKey } from 'dashboard/routes/dashboard/settings/helper/settingsHelper';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\n\ndefineProps({\n roles: {\n type: Array,\n required: true,\n },\n loading: {\n type: Object,\n default: () => ({}),\n },\n});\n\nconst emit = defineEmits(['edit', 'delete']);\n\nconst { t } = useI18n();\n\nconst getFormattedPermissions = role => {\n return role.permissions\n .map(event => t(getI18nKey('CUSTOM_ROLE.PERMISSIONS', event)))\n .join(', ');\n};\n</script>\n\n<template>\n <tbody class=\"divide-y divide-n-weak text-n-slate-11\">\n <tr v-for=\"(customRole, index) in roles\" :key=\"index\">\n <td\n class=\"max-w-xs py-4 ltr:pr-4 rtl:pl-4 font-medium truncate align-baseline\"\n :title=\"customRole.name\"\n >\n {{ customRole.name }}\n </td>\n <td\n class=\"py-4 ltr:pr-4 rtl:pl-4 whitespace-normal align-baseline md:break-words\"\n >\n {{ customRole.description }}\n </td>\n <td\n class=\"py-4 ltr:pr-4 rtl:pl-4 whitespace-normal align-baseline md:break-words\"\n >\n {{ getFormattedPermissions(customRole) }}\n </td>\n <td class=\"flex justify-end gap-1 py-4\">\n <Button\n v-tooltip.top=\"$t('CUSTOM_ROLE.EDIT.BUTTON_TEXT')\"\n icon=\"i-lucide-pen\"\n slate\n xs\n faded\n @click=\"emit('edit', customRole)\"\n />\n <Button\n v-tooltip.top=\"$t('CUSTOM_ROLE.DELETE.BUTTON_TEXT')\"\n icon=\"i-lucide-trash-2\"\n xs\n ruby\n faded\n :is-loading=\"loading[customRole.id]\"\n @click=\"emit('delete', customRole)\"\n />\n </td>\n </tr>\n </tbody>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useMapGetter } from 'dashboard/composables/store';\nimport { useRouter } from 'vue-router';\nimport BasePaywallModal from 'dashboard/routes/dashboard/settings/components/BasePaywallModal.vue';\nimport CustomRoleListItem from './CustomRoleTableBody.vue';\nimport { useI18n } from 'vue-i18n';\n\nconst dummyCustomRolesData = [\n {\n name: 'All Permissions',\n description: 'All permissions',\n permissions: [\n 'conversation_manage',\n 'conversation_participating_manage',\n 'conversation_unassigned_manage',\n 'contact_manage',\n 'report_manage',\n 'knowledge_base_manage',\n ],\n },\n {\n name: 'Conversation Permissions',\n description: 'Conversation permissions',\n permissions: [\n 'conversation_manage',\n 'conversation_participating_manage',\n 'conversation_unassigned_manage',\n ],\n },\n {\n name: 'Contact Permissions',\n description: 'Contact permissions',\n permissions: ['contact_manage'],\n },\n {\n name: 'Report Permissions',\n description: 'Report permissions',\n permissions: ['report_manage'],\n },\n];\n\nconst router = useRouter();\n\nconst isOnChatwootCloud = useMapGetter('globalConfig/isOnChatwootCloud');\n\nconst currentUser = useMapGetter('getCurrentUser');\nconst currentAccountId = useMapGetter('getCurrentAccountId');\n\nconst isSuperAdmin = computed(() => {\n return currentUser.value.type === 'SuperAdmin';\n});\nconst i18nKey = computed(() =>\n isOnChatwootCloud.value ? 'PAYWALL' : 'ENTERPRISE_PAYWALL'\n);\n\nconst goToBillingSettings = () => {\n router.push({\n name: 'billing_settings_index',\n params: { accountId: currentAccountId.value },\n });\n};\n\nconst { t } = useI18n();\nconst tableHeaders = computed(() => {\n return [\n t('CUSTOM_ROLE.LIST.TABLE_HEADER.NAME'),\n t('CUSTOM_ROLE.LIST.TABLE_HEADER.DESCRIPTION'),\n t('CUSTOM_ROLE.LIST.TABLE_HEADER.PERMISSIONS'),\n t('CUSTOM_ROLE.LIST.TABLE_HEADER.ACTIONS'),\n ];\n});\n</script>\n\n<template>\n <div class=\"w-full min-h-[12rem] relative\">\n <div class=\"w-full space-y-3 text-sm\">\n <thead class=\"opacity-30 dark:opacity-30\">\n <th\n v-for=\"thHeader in tableHeaders\"\n :key=\"thHeader\"\n class=\"py-4 ltr:pr-4 rtl:pl-4 font-semibold text-left text-slate-700 dark:text-slate-300\"\n >\n <span class=\"mb-0\">\n {{ thHeader }}\n </span>\n </th>\n </thead>\n <CustomRoleListItem\n class=\"opacity-25 dark:opacity-20\"\n :roles=\"dummyCustomRolesData\"\n :loading=\"{}\"\n />\n </div>\n <div\n class=\"absolute inset-0 flex flex-col items-center justify-center w-full h-full bg-gradient-to-t from-white dark:from-slate-900 to-transparent\"\n >\n <BasePaywallModal\n feature-prefix=\"CUSTOM_ROLE\"\n :i18n-key=\"i18nKey\"\n :is-on-chatwoot-cloud=\"isOnChatwootCloud\"\n :is-super-admin=\"isSuperAdmin\"\n @upgrade=\"goToBillingSettings\"\n />\n </div>\n </div>\n</template>\n","<script setup>\nimport { useAlert } from 'dashboard/composables';\nimport SettingsLayout from '../SettingsLayout.vue';\nimport BaseSettingsHeader from '../components/BaseSettingsHeader.vue';\nimport CustomRoleModal from './component/CustomRoleModal.vue';\nimport CustomRoleTableBody from './component/CustomRoleTableBody.vue';\nimport CustomRolePaywall from './component/CustomRolePaywall.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport { computed, onMounted, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useStore, useMapGetter } from 'dashboard/composables/store';\n\nconst store = useStore();\nconst { t } = useI18n();\n\nconst showCustomRoleModal = ref(false);\nconst customRoleModalMode = ref('add');\nconst selectedRole = ref(null);\nconst loading = ref({});\nconst showDeleteConfirmationPopup = ref(false);\nconst activeResponse = ref({});\n\nconst records = useMapGetter('customRole/getCustomRoles');\nconst uiFlags = useMapGetter('customRole/getUIFlags');\n\nconst deleteConfirmText = computed(\n () => `${t('CUSTOM_ROLE.DELETE.CONFIRM.YES')} ${activeResponse.value.name}`\n);\n\nconst deleteRejectText = computed(\n () => `${t('CUSTOM_ROLE.DELETE.CONFIRM.NO')} ${activeResponse.value.name}`\n);\n\nconst deleteMessage = computed(() => {\n return ` ${activeResponse.value.name} ? `;\n});\n\nconst isFeatureEnabledOnAccount = useMapGetter(\n 'accounts/isFeatureEnabledonAccount'\n);\n\nconst currentAccountId = useMapGetter('getCurrentAccountId');\n\nconst isBehindAPaywall = computed(() => {\n return !isFeatureEnabledOnAccount.value(\n currentAccountId.value,\n 'custom_roles'\n );\n});\n\nconst fetchCustomRoles = async () => {\n try {\n await store.dispatch('customRole/getCustomRole');\n } catch (error) {\n // Ignore Error\n }\n};\n\nonMounted(() => {\n fetchCustomRoles();\n});\n\nconst tableHeaders = computed(() => {\n return [\n t('CUSTOM_ROLE.LIST.TABLE_HEADER.NAME'),\n t('CUSTOM_ROLE.LIST.TABLE_HEADER.DESCRIPTION'),\n t('CUSTOM_ROLE.LIST.TABLE_HEADER.PERMISSIONS'),\n t('CUSTOM_ROLE.LIST.TABLE_HEADER.ACTIONS'),\n ];\n});\n\nconst showAlertMessage = message => {\n loading.value[activeResponse.value.id] = false;\n activeResponse.value = {};\n useAlert(message);\n};\n\nconst openAddModal = () => {\n if (isBehindAPaywall.value) return;\n customRoleModalMode.value = 'add';\n selectedRole.value = null;\n showCustomRoleModal.value = true;\n};\n\nconst openEditModal = role => {\n customRoleModalMode.value = 'edit';\n selectedRole.value = role;\n showCustomRoleModal.value = true;\n};\n\nconst hideCustomRoleModal = () => {\n selectedRole.value = null;\n showCustomRoleModal.value = false;\n};\n\nconst openDeletePopup = response => {\n showDeleteConfirmationPopup.value = true;\n activeResponse.value = response;\n};\n\nconst closeDeletePopup = () => {\n showDeleteConfirmationPopup.value = false;\n};\n\nconst deleteCustomRole = async id => {\n try {\n await store.dispatch('customRole/deleteCustomRole', id);\n showAlertMessage(t('CUSTOM_ROLE.DELETE.API.SUCCESS_MESSAGE'));\n } catch (error) {\n const errorMessage =\n error?.message || t('CUSTOM_ROLE.DELETE.API.ERROR_MESSAGE');\n showAlertMessage(errorMessage);\n }\n};\n\nconst confirmDeletion = () => {\n loading[activeResponse.value.id] = true;\n closeDeletePopup();\n deleteCustomRole(activeResponse.value.id);\n};\n</script>\n\n<template>\n <SettingsLayout\n :is-loading=\"uiFlags.fetchingList\"\n :loading-message=\"$t('CUSTOM_ROLE.LOADING')\"\n :no-records-found=\"!records.length && !isBehindAPaywall\"\n :no-records-message=\"$t('CUSTOM_ROLE.LIST.404')\"\n >\n <template #header>\n <BaseSettingsHeader\n :title=\"$t('CUSTOM_ROLE.HEADER')\"\n :description=\"$t('CUSTOM_ROLE.DESCRIPTION')\"\n :link-text=\"$t('CUSTOM_ROLE.LEARN_MORE')\"\n feature-name=\"canned_responses\"\n >\n <template #actions>\n <Button\n icon=\"i-lucide-circle-plus\"\n :label=\"$t('CUSTOM_ROLE.HEADER_BTN_TXT')\"\n :disabled=\"isBehindAPaywall\"\n @click=\"openAddModal\"\n />\n </template>\n </BaseSettingsHeader>\n </template>\n\n <template #body>\n <CustomRolePaywall v-if=\"isBehindAPaywall\" />\n <table\n v-else\n class=\"min-w-full overflow-x-auto divide-y divide-slate-75 dark:divide-slate-700\"\n >\n <thead>\n <th\n v-for=\"thHeader in tableHeaders\"\n :key=\"thHeader\"\n class=\"py-4 ltr:pr-4 rtl:pl-4 font-semibold text-left text-slate-700 dark:text-slate-300\"\n >\n <span class=\"mb-0\">\n {{ thHeader }}\n </span>\n </th>\n </thead>\n\n <CustomRoleTableBody\n :roles=\"records\"\n :loading=\"loading\"\n @edit=\"openEditModal\"\n @delete=\"openDeletePopup\"\n />\n </table>\n </template>\n\n <woot-modal\n v-model:show=\"showCustomRoleModal\"\n :on-close=\"hideCustomRoleModal\"\n >\n <CustomRoleModal\n :mode=\"customRoleModalMode\"\n :selected-role=\"selectedRole\"\n @close=\"hideCustomRoleModal\"\n />\n </woot-modal>\n\n <woot-delete-modal\n v-model:show=\"showDeleteConfirmationPopup\"\n :on-close=\"closeDeletePopup\"\n :on-confirm=\"confirmDeletion\"\n :title=\"$t('CUSTOM_ROLE.DELETE.CONFIRM.TITLE')\"\n :message=\"$t('CUSTOM_ROLE.DELETE.CONFIRM.MESSAGE')\"\n :message-value=\"deleteMessage\"\n :confirm-text=\"deleteConfirmText\"\n :reject-text=\"deleteRejectText\"\n />\n </SettingsLayout>\n</template>\n","import { FEATURE_FLAGS } from '../../../../featureFlags';\nimport { INSTALLATION_TYPES } from 'dashboard/constants/installationTypes';\nimport { frontendURL } from 'dashboard/helper/URLHelper';\n\nimport SettingsWrapper from '../SettingsWrapper.vue';\nimport CustomRolesHome from './Index.vue';\n\nexport default {\n routes: [\n {\n path: frontendURL('accounts/:accountId/settings/custom-roles'),\n component: SettingsWrapper,\n children: [\n {\n path: '',\n redirect: 'list',\n },\n {\n path: 'list',\n name: 'custom_roles_list',\n meta: {\n featureFlag: FEATURE_FLAGS.CUSTOM_ROLES,\n installationTypes: [\n INSTALLATION_TYPES.CLOUD,\n INSTALLATION_TYPES.ENTERPRISE,\n ],\n permissions: ['administrator'],\n },\n component: CustomRolesHome,\n },\n ],\n },\n ],\n};\n","<script setup>\nimport Avatar from 'dashboard/components-next/avatar/Avatar.vue';\ndefineProps({\n src: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: '',\n },\n});\n\nconst emit = defineEmits(['change', 'delete']);\n\nconst updateProfilePicture = e => {\n emit('change', e);\n};\n\nconst deleteProfilePicture = () => {\n emit('delete');\n};\n</script>\n\n<template>\n <div class=\"flex flex-col gap-2\">\n <span class=\"text-sm font-medium text-ash-900\">\n {{ $t('PROFILE_SETTINGS.FORM.PICTURE') }}\n </span>\n <Avatar\n :src=\"src || ''\"\n :name=\"name || ''\"\n :size=\"72\"\n allow-upload\n @upload=\"updateProfilePicture\"\n @delete=\"deleteProfilePicture\"\n />\n </div>\n</template>\n","<script setup>\nimport { computed, useAttrs } from 'vue';\n\nconst props = defineProps({\n variant: {\n type: String,\n default: 'solid',\n validator: value => ['outline', 'ghost', 'solid'].includes(value),\n },\n size: {\n type: String,\n default: 'large',\n validator: value => ['medium', 'large'].includes(value),\n },\n icon: {\n type: String,\n default: '',\n },\n colorScheme: {\n type: String,\n default: 'primary',\n validator: value => ['primary', 'secondary', 'danger'].includes(value),\n },\n trailingIcon: {\n type: Boolean,\n default: false,\n },\n});\n\nconst attrs = useAttrs();\n\nconst baseClasses = {\n outline: 'outline outline-1 -outline-offset-1',\n ghost: 'hover:text-600 active:text-600 focus:outline focus:outline-offset-1',\n solid:\n 'hover:bg-700 active:bg-700 focus:outline focus:outline-offset-1 focus:outline-2',\n};\n\nconst colorClass = computed(() => {\n if (attrs.disabled) {\n return 'bg-ash-200 text-ash-600 cursor-not-allowed';\n }\n\n const styleMap = {\n primary: {\n outline: `${baseClasses.outline} outline-primary-400 hover:text-primary-600 active:text-primary-600`,\n ghost: `${baseClasses.ghost} focus:outline-primary-400`,\n solid: `${baseClasses.solid} bg-primary-600 text-white focus:outline-primary-400`,\n },\n secondary: {\n outline: `${baseClasses.outline} outline-ash-400 hover:text-ash-900 active:text-ash-900 `,\n ghost: `${baseClasses.ghost} focus:outline-ash-400`,\n solid: `${baseClasses.solid} bg-ash-100 text-ash-900 focus:outline-ash-400`,\n },\n danger: {\n outline: `${baseClasses.outline} outline-ruby-400 hover:text-ruby-600 active:text-ruby-600`,\n ghost: `${baseClasses.ghost} focus:outline-ruby-400`,\n solid: `${baseClasses.solid} bg-ruby-600 text-white focus:outline-ruby-400`,\n },\n };\n\n const schemeStyles = styleMap[props.colorScheme];\n return schemeStyles[props.variant] || schemeStyles.solid;\n});\n\nconst sizeClass = computed(() => {\n if (props.size === 'medium') {\n return 'h-8 px-3 py-1.5 text-sm';\n }\n return 'h-10 px-4 py-2.5 text';\n});\n\nconst buttonClasses = computed(() => [colorClass.value, sizeClass.value]);\n</script>\n\n<template>\n <button\n class=\"inline-flex items-center gap-1 text-sm font-medium reset-base rounded-xl w-fit\"\n :class=\"buttonClasses\"\n v-bind=\"$attrs\"\n >\n <fluent-icon\n v-if=\"icon && !trailingIcon\"\n size=\"1.16em\"\n :icon=\"icon\"\n class=\"flex-shrink-0\"\n />\n <span\n v-if=\"$slots.default\"\n class=\"text-sm font-medium truncate ltr:text-left rtl:text-right\"\n >\n <slot />\n </span>\n <fluent-icon\n v-if=\"icon && trailingIcon\"\n size=\"1.16em\"\n :icon=\"icon\"\n class=\"flex-shrink-0\"\n />\n </button>\n</template>\n","<script>\nimport { useAlert } from 'dashboard/composables';\nimport FormButton from 'v3/components/Form/Button.vue';\nimport { useVuelidate } from '@vuelidate/core';\nimport { required, minLength, email } from '@vuelidate/validators';\nexport default {\n components: {\n FormButton,\n },\n props: {\n name: {\n type: String,\n default: '',\n },\n email: {\n type: String,\n default: '',\n },\n displayName: {\n type: String,\n default: '',\n },\n emailEnabled: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['updateUser'],\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n userName: this.name,\n userDisplayName: this.displayName,\n userEmail: this.email,\n inputStyles: {\n borderRadius: '0.75rem',\n padding: '0.375rem 0.75rem',\n fontSize: '0.875rem',\n marginBottom: '0.125rem',\n },\n };\n },\n validations: {\n userName: {\n required,\n minLength: minLength(1),\n },\n userDisplayName: {},\n userEmail: {\n required,\n email,\n },\n },\n watch: {\n name: {\n handler(value) {\n this.userName = value;\n },\n immediate: true,\n },\n displayName: {\n handler(value) {\n this.userDisplayName = value;\n },\n immediate: true,\n },\n email: {\n handler(value) {\n this.userEmail = value;\n },\n immediate: true,\n },\n },\n methods: {\n async updateUser() {\n this.v$.$touch();\n if (this.v$.$invalid) {\n useAlert(this.$t('PROFILE_SETTINGS.FORM.ERROR'));\n return;\n }\n this.$emit('updateUser', {\n name: this.userName,\n displayName: this.userDisplayName,\n email: this.userEmail,\n });\n },\n },\n};\n</script>\n\n<template>\n <form class=\"flex flex-col gap-4\" @submit.prevent=\"updateUser('profile')\">\n <woot-input\n v-model=\"userName\"\n :styles=\"inputStyles\"\n :class=\"{ error: v$.userName.$error }\"\n :label=\"$t('PROFILE_SETTINGS.FORM.NAME.LABEL')\"\n :placeholder=\"$t('PROFILE_SETTINGS.FORM.NAME.PLACEHOLDER')\"\n :error=\"`${\n v$.userName.$error ? $t('PROFILE_SETTINGS.FORM.NAME.ERROR') : ''\n }`\"\n @input=\"v$.userName.$touch\"\n @blur=\"v$.userName.$touch\"\n />\n <woot-input\n v-model=\"userDisplayName\"\n :styles=\"inputStyles\"\n :class=\"{ error: v$.userDisplayName.$error }\"\n :label=\"$t('PROFILE_SETTINGS.FORM.DISPLAY_NAME.LABEL')\"\n :placeholder=\"$t('PROFILE_SETTINGS.FORM.DISPLAY_NAME.PLACEHOLDER')\"\n :error=\"`${\n v$.userDisplayName.$error\n ? $t('PROFILE_SETTINGS.FORM.DISPLAY_NAME.ERROR')\n : ''\n }`\"\n @input=\"v$.userDisplayName.$touch\"\n @blur=\"v$.userDisplayName.$touch\"\n />\n <woot-input\n v-if=\"emailEnabled\"\n v-model=\"userEmail\"\n :styles=\"inputStyles\"\n :class=\"{ error: v$.userEmail.$error }\"\n :label=\"$t('PROFILE_SETTINGS.FORM.EMAIL.LABEL')\"\n :placeholder=\"$t('PROFILE_SETTINGS.FORM.EMAIL.PLACEHOLDER')\"\n :error=\"`${\n v$.userEmail.$error ? $t('PROFILE_SETTINGS.FORM.EMAIL.ERROR') : ''\n }`\"\n @input=\"v$.userEmail.$touch\"\n @blur=\"v$.userEmail.$touch\"\n />\n <FormButton\n type=\"submit\"\n color-scheme=\"primary\"\n variant=\"solid\"\n size=\"large\"\n >\n {{ $t('PROFILE_SETTINGS.BTN_TEXT') }}\n </FormButton>\n </form>\n</template>\n","<script setup>\nimport { ref, watch } from 'vue';\nimport WootMessageEditor from 'dashboard/components/widgets/WootWriter/Editor.vue';\nimport { MESSAGE_SIGNATURE_EDITOR_MENU_OPTIONS } from 'dashboard/constants/editor';\nimport FormButton from 'v3/components/Form/Button.vue';\n\nconst props = defineProps({\n messageSignature: {\n type: String,\n default: '',\n },\n});\n\nconst emit = defineEmits(['updateSignature']);\nconst customEditorMenuList = MESSAGE_SIGNATURE_EDITOR_MENU_OPTIONS;\nconst signature = ref(props.messageSignature);\nwatch(\n () => props.messageSignature ?? '',\n newValue => {\n signature.value = newValue;\n }\n);\n\nconst updateSignature = () => {\n emit('updateSignature', signature.value);\n};\n</script>\n\n<template>\n <form class=\"flex flex-col gap-6\" @submit.prevent=\"updateSignature()\">\n <WootMessageEditor\n id=\"message-signature-input\"\n v-model=\"signature\"\n class=\"message-editor h-[10rem] !px-3\"\n is-format-mode\n :placeholder=\"$t('PROFILE_SETTINGS.FORM.MESSAGE_SIGNATURE.PLACEHOLDER')\"\n :enabled-menu-options=\"customEditorMenuList\"\n :enable-suggestions=\"false\"\n show-image-resize-toolbar\n />\n <FormButton\n type=\"submit\"\n color-scheme=\"primary\"\n variant=\"solid\"\n size=\"large\"\n >\n {{ $t('PROFILE_SETTINGS.FORM.MESSAGE_SIGNATURE_SECTION.BTN_TEXT') }}\n </FormButton>\n </form>\n</template>\n","<script>\nimport WithLabel from './WithLabel.vue';\nexport default {\n components: {\n WithLabel,\n },\n props: {\n id: {\n type: String,\n default: '',\n },\n options: {\n type: Array,\n default: () => [],\n },\n placeholder: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n required: true,\n },\n icon: {\n type: String,\n default: '',\n },\n label: {\n type: String,\n required: true,\n },\n modelValue: {\n type: String,\n default: '',\n },\n hasError: {\n type: Boolean,\n default: false,\n },\n errorMessage: {\n type: String,\n default: '',\n },\n },\n emits: ['update:modelValue'],\n methods: {\n onInput(e) {\n this.$emit('update:modelValue', e.target.value);\n },\n },\n};\n</script>\n\n<template>\n <WithLabel\n :label=\"label\"\n :icon=\"icon\"\n :name=\"name\"\n :has-error=\"hasError\"\n :error-message=\"errorMessage\"\n >\n <select\n :id=\"id\"\n :selected=\"modelValue\"\n :name=\"name\"\n :class=\"{\n 'text-ash-400': !modelValue,\n 'text-ash-900': modelValue,\n 'pl-9': icon,\n }\"\n class=\"block w-full px-3 py-2 pr-6 mb-0 border-0 shadow-sm outline-none appearance-none rounded-xl select-caret ring-ash-200 ring-1 ring-inset placeholder:text-ash-900 focus:ring-2 focus:ring-inset focus:ring-primary-500 text-sm leading-6\"\n @input=\"onInput\"\n >\n <option value=\"\" disabled selected class=\"hidden\">\n {{ placeholder }}\n </option>\n <slot>\n <option v-for=\"opt in options\" :key=\"opt.value\" :value=\"opt.value\">\n {{ opt.label }}\n </option>\n </slot>\n </select>\n </WithLabel>\n</template>\n\n<style scoped>\n.select-caret {\n background-image: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' version='1.1' width='32' height='24' viewBox='0 0 32 24'><polygon points='0,0 32,0 16,24' style='fill: rgb%28110, 111, 115%29'></polygon></svg>\");\n background-origin: content-box;\n background-position: right -1rem center;\n background-repeat: no-repeat;\n background-size: 9px 6px;\n}\n</style>\n","<script setup>\nimport { computed } from 'vue';\nimport FormSelect from 'v3/components/Form/Select.vue';\nimport { useFontSize } from 'dashboard/composables/useFontSize';\n\nconst props = defineProps({\n value: {\n type: String,\n default: 'default',\n },\n label: {\n type: String,\n default: '',\n },\n description: {\n type: String,\n default: '',\n },\n});\n\nconst emit = defineEmits(['change']);\n\nconst { fontSizeOptions } = useFontSize();\n\nconst selectedValue = computed({\n get: () => props.value,\n set: value => {\n emit('change', value);\n },\n});\n</script>\n\n<template>\n <div class=\"flex gap-2 justify-between w-full items-start\">\n <div>\n <label class=\"text-n-gray-12 font-medium leading-6 text-sm\">\n {{ label }}\n </label>\n <p class=\"text-n-gray-11\">\n {{ description }}\n </p>\n </div>\n <FormSelect\n v-model=\"selectedValue\"\n name=\"fontSize\"\n spacing=\"compact\"\n class=\"min-w-28 mt-px\"\n :value=\"selectedValue\"\n :options=\"fontSizeOptions\"\n label=\"\"\n >\n <option\n v-for=\"option in fontSizeOptions\"\n :key=\"option.value\"\n :value=\"option.value\"\n :selected=\"option.value === selectedValue\"\n >\n {{ option.label }}\n </option>\n </FormSelect>\n </div>\n</template>\n","<script>\nimport { useVuelidate } from '@vuelidate/core';\nimport { required, minLength } from '@vuelidate/validators';\nimport { useAlert } from 'dashboard/composables';\nimport { parseAPIErrorResponse } from 'dashboard/store/utils/api';\nimport FormButton from 'v3/components/Form/Button.vue';\n\nexport default {\n components: {\n FormButton,\n },\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n currentPassword: '',\n password: '',\n passwordConfirmation: '',\n isPasswordChanging: false,\n errorMessage: '',\n inputStyles: {\n borderRadius: '0.75rem',\n padding: '0.375rem 0.75rem',\n fontSize: '0.875rem',\n marginBottom: '0.125rem',\n },\n };\n },\n validations: {\n currentPassword: {\n required,\n },\n password: {\n minLength: minLength(6),\n },\n passwordConfirmation: {\n minLength: minLength(6),\n isEqPassword(value) {\n if (value !== this.password) {\n return false;\n }\n return true;\n },\n },\n },\n computed: {\n isButtonDisabled() {\n return (\n !this.currentPassword ||\n !this.passwordConfirmation ||\n !this.v$.passwordConfirmation.isEqPassword\n );\n },\n },\n methods: {\n async changePassword() {\n this.v$.$touch();\n if (this.v$.$invalid) {\n useAlert(this.$t('PROFILE_SETTINGS.FORM.ERROR'));\n return;\n }\n let alertMessage = this.$t('PROFILE_SETTINGS.PASSWORD_UPDATE_SUCCESS');\n try {\n await this.$store.dispatch('updateProfile', {\n password: this.password,\n password_confirmation: this.passwordConfirmation,\n current_password: this.currentPassword,\n });\n } catch (error) {\n alertMessage =\n parseAPIErrorResponse(error) ||\n this.$t('RESET_PASSWORD.API.ERROR_MESSAGE');\n } finally {\n useAlert(alertMessage);\n }\n },\n },\n};\n</script>\n\n<template>\n <form @submit.prevent=\"changePassword()\">\n <div class=\"flex flex-col w-full gap-4\">\n <woot-input\n v-model=\"currentPassword\"\n type=\"password\"\n :styles=\"inputStyles\"\n :class=\"{ error: v$.currentPassword.$error }\"\n :label=\"$t('PROFILE_SETTINGS.FORM.CURRENT_PASSWORD.LABEL')\"\n :placeholder=\"$t('PROFILE_SETTINGS.FORM.CURRENT_PASSWORD.PLACEHOLDER')\"\n :error=\"`${\n v$.currentPassword.$error\n ? $t('PROFILE_SETTINGS.FORM.CURRENT_PASSWORD.ERROR')\n : ''\n }`\"\n @input=\"v$.currentPassword.$touch\"\n @blur=\"v$.currentPassword.$touch\"\n />\n\n <woot-input\n v-model=\"password\"\n type=\"password\"\n :styles=\"inputStyles\"\n :class=\"{ error: v$.password.$error }\"\n :label=\"$t('PROFILE_SETTINGS.FORM.PASSWORD.LABEL')\"\n :placeholder=\"$t('PROFILE_SETTINGS.FORM.PASSWORD.PLACEHOLDER')\"\n :error=\"`${\n v$.password.$error ? $t('PROFILE_SETTINGS.FORM.PASSWORD.ERROR') : ''\n }`\"\n @input=\"v$.password.$touch\"\n @blur=\"v$.password.$touch\"\n />\n\n <woot-input\n v-model=\"passwordConfirmation\"\n type=\"password\"\n :styles=\"inputStyles\"\n :class=\"{ error: v$.passwordConfirmation.$error }\"\n :label=\"$t('PROFILE_SETTINGS.FORM.PASSWORD_CONFIRMATION.LABEL')\"\n :placeholder=\"\n $t('PROFILE_SETTINGS.FORM.PASSWORD_CONFIRMATION.PLACEHOLDER')\n \"\n :error=\"`${\n v$.passwordConfirmation.$error\n ? $t('PROFILE_SETTINGS.FORM.PASSWORD_CONFIRMATION.ERROR')\n : ''\n }`\"\n @input=\"v$.passwordConfirmation.$touch\"\n @blur=\"v$.passwordConfirmation.$touch\"\n />\n\n <FormButton\n type=\"submit\"\n color-scheme=\"primary\"\n variant=\"solid\"\n size=\"large\"\n :disabled=\"isButtonDisabled\"\n >\n {{ $t('PROFILE_SETTINGS.FORM.PASSWORD_SECTION.BTN_TEXT') }}\n </FormButton>\n </div>\n </form>\n</template>\n","<script setup>\nimport { computed } from 'vue';\n\nconst props = defineProps({\n isChecked: {\n type: Boolean,\n default: false,\n },\n value: {\n type: String,\n default: null,\n },\n});\n\nconst emit = defineEmits(['update']);\n\nconst checked = computed({\n get: () => props.isChecked,\n set: value => emit('update', props.value, value),\n});\n</script>\n\n<template>\n <input\n :id=\"value\"\n v-model=\"checked\"\n type=\"checkbox\"\n :value=\"value\"\n class=\"flex-shrink-0 mt-0.5 border-ash-200 border bg-ash-50 checked:border-none checked:bg-primary-600 dark:checked:bg-primary-600 shadow-sm appearance-none rounded-[4px] w-4 h-4 focus:ring-1 after:content-[''] after:text-white checked:after:content-['✓'] after:flex after:items-center after:justify-center after:text-center after:text-xs after:font-bold after:relative\"\n />\n</template>\n","<script>\nexport default {\n props: {\n modelValue: { type: Boolean, default: false },\n },\n emits: ['update:modelValue'],\n methods: {\n onClick() {\n this.$emit('update:modelValue', !this.modelValue);\n },\n },\n};\n</script>\n\n<template>\n <button\n type=\"button\"\n class=\"relative flex-shrink-0 h-4 p-0 border-none shadow-inner w-7 rounded-3xl\"\n :class=\"\n modelValue\n ? 'bg-primary-600 shadow-primary-800'\n : 'shadow-ash-400 bg-ash-200'\n \"\n role=\"switch\"\n :aria-checked=\"modelValue.toString()\"\n @click=\"onClick\"\n >\n <span\n aria-hidden=\"true\"\n class=\"rounded-full bg-white top-0.5 absolute dark:bg-white w-3 h-3 translate-y-0 duration-200 transition-transform ease-in-out\"\n :class=\"\n modelValue\n ? 'ltr:translate-x-0 rtl:translate-x-[0.75rem]'\n : 'ltr:-translate-x-[0.75rem] rtl:translate-x-0'\n \"\n />\n </button>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\nimport TableHeaderCell from 'dashboard/components/widgets/TableHeaderCell.vue';\nimport CheckBox from 'v3/components/Form/CheckBox.vue';\nimport {\n hasPushPermissions,\n requestPushPermissions,\n verifyServiceWorkerExistence,\n} from 'dashboard/helper/pushHelper.js';\nimport { FEATURE_FLAGS } from 'dashboard/featureFlags';\nimport FormSwitch from 'v3/components/Form/Switch.vue';\nimport { NOTIFICATION_TYPES } from './constants';\n\nexport default {\n components: {\n TableHeaderCell,\n FormSwitch,\n CheckBox,\n },\n data() {\n return {\n selectedEmailFlags: [],\n selectedPushFlags: [],\n enableAudioAlerts: false,\n hasEnabledPushPermissions: false,\n notificationTypes: NOTIFICATION_TYPES,\n };\n },\n computed: {\n ...mapGetters({\n accountId: 'getCurrentAccountId',\n emailFlags: 'userNotificationSettings/getSelectedEmailFlags',\n pushFlags: 'userNotificationSettings/getSelectedPushFlags',\n isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount',\n }),\n hasPushAPISupport() {\n return !!('Notification' in window);\n },\n isSLAEnabled() {\n return this.isFeatureEnabledonAccount(this.accountId, FEATURE_FLAGS.SLA);\n },\n filteredNotificationTypes() {\n return this.notificationTypes.filter(notification =>\n this.isSLAEnabled\n ? true\n : ![\n 'sla_missed_first_response',\n 'sla_missed_next_response',\n 'sla_missed_resolution',\n ].includes(notification.value)\n );\n },\n },\n watch: {\n emailFlags(value) {\n this.selectedEmailFlags = value;\n },\n pushFlags(value) {\n this.selectedPushFlags = value;\n },\n },\n mounted() {\n if (hasPushPermissions()) {\n this.getPushSubscription();\n }\n this.$store.dispatch('userNotificationSettings/get');\n },\n methods: {\n checkFlagStatus(type, flagType) {\n const selectedFlags =\n type === 'email' ? this.selectedEmailFlags : this.selectedPushFlags;\n return selectedFlags.includes(`${type}_${flagType}`);\n },\n onRegistrationSuccess() {\n this.hasEnabledPushPermissions = true;\n },\n onRequestPermissions() {\n requestPushPermissions({\n onSuccess: this.onRegistrationSuccess,\n });\n },\n getPushSubscription() {\n verifyServiceWorkerExistence(registration =>\n registration.pushManager\n .getSubscription()\n .then(subscription => {\n if (!subscription) {\n this.hasEnabledPushPermissions = false;\n } else {\n this.hasEnabledPushPermissions = true;\n }\n })\n // eslint-disable-next-line no-console\n .catch(error => console.log(error))\n );\n },\n async updateNotificationSettings() {\n try {\n this.$store.dispatch('userNotificationSettings/update', {\n selectedEmailFlags: this.selectedEmailFlags,\n selectedPushFlags: this.selectedPushFlags,\n });\n useAlert(this.$t('PROFILE_SETTINGS.FORM.API.UPDATE_SUCCESS'));\n } catch (error) {\n useAlert(this.$t('PROFILE_SETTINGS.FORM.API.UPDATE_ERROR'));\n }\n },\n handleInput(type, id) {\n if (type === 'email') {\n this.handleEmailInput(id);\n } else {\n this.handlePushInput(id);\n }\n },\n handleEmailInput(id) {\n this.selectedEmailFlags = this.toggleInput(this.selectedEmailFlags, id);\n this.updateNotificationSettings();\n },\n handlePushInput(id) {\n this.selectedPushFlags = this.toggleInput(this.selectedPushFlags, id);\n this.updateNotificationSettings();\n },\n toggleInput(selected, current) {\n if (selected.includes(current)) {\n const newSelectedFlags = selected.filter(flag => flag !== current);\n return newSelectedFlags;\n }\n return [...selected, current];\n },\n },\n};\n</script>\n\n<template>\n <div id=\"profile-settings-notifications\" class=\"flex flex-col gap-6\">\n <!-- Layout for desktop devices -->\n <div class=\"hidden sm:block\">\n <div\n class=\"grid content-center h-12 grid-cols-12 gap-4 py-0 rounded-t-xl\"\n >\n <TableHeaderCell\n :span=\"7\"\n label=\"`${$t('PROFILE_SETTINGS.FORM.NOTIFICATIONS.TYPE_TITLE')}`\"\n >\n <span class=\"text-sm font-normal normal-case text-ash-800\">\n {{ $t('PROFILE_SETTINGS.FORM.NOTIFICATIONS.TYPE_TITLE') }}\n </span>\n </TableHeaderCell>\n <TableHeaderCell\n :span=\"2\"\n label=\"`${$t('PROFILE_SETTINGS.FORM.NOTIFICATIONS.EMAIL')}`\"\n >\n <span class=\"text-sm font-medium normal-case text-ash-900\">\n {{ $t('PROFILE_SETTINGS.FORM.NOTIFICATIONS.EMAIL') }}\n </span>\n </TableHeaderCell>\n <TableHeaderCell\n :span=\"3\"\n label=\"`${$t('PROFILE_SETTINGS.FORM.NOTIFICATIONS.PUSH')}`\"\n >\n <div class=\"flex items-center justify-between gap-1\">\n <span\n class=\"text-sm font-medium normal-case text-ash-900 whitespace-nowrap\"\n >\n {{ $t('PROFILE_SETTINGS.FORM.NOTIFICATIONS.PUSH') }}\n </span>\n </div>\n </TableHeaderCell>\n </div>\n <div\n v-for=\"(notification, index) in filteredNotificationTypes\"\n :key=\"index\"\n >\n <div\n class=\"grid items-center content-center h-12 grid-cols-12 gap-4 py-0 rounded-t-xl\"\n >\n <div\n class=\"flex flex-row items-start gap-2 col-span-7 px-0 py-2 text-sm tracking-[0.5] rtl:text-right\"\n >\n <span class=\"text-sm text-ash-900\">\n {{ $t(notification.label) }}\n </span>\n </div>\n <div\n v-for=\"(type, typeIndex) in ['email', 'push']\"\n :key=\"typeIndex\"\n class=\"flex items-start gap-2 px-0 text-sm tracking-[0.5] text-left rtl:text-right\"\n :class=\"`col-span-${type === 'push' ? 3 : 2}`\"\n >\n <CheckBox\n :value=\"`${type}_${notification.value}`\"\n :is-checked=\"\n checkFlagStatus(type, notification.value, selectedPushFlags)\n \"\n @update=\"id => handleInput(type, id)\"\n />\n </div>\n </div>\n </div>\n </div>\n <!-- Layout for mobile devices -->\n <div class=\"flex flex-col gap-6 sm:hidden\">\n <span class=\"text-sm font-medium normal-case text-ash-900\">\n {{ $t('PROFILE_SETTINGS.FORM.EMAIL_NOTIFICATIONS_SECTION.TITLE') }}\n </span>\n <div class=\"flex flex-col gap-4\">\n <div\n v-for=\"(notification, index) in filteredNotificationTypes\"\n :key=\"index\"\n class=\"flex flex-row items-start gap-2\"\n >\n <CheckBox\n :id=\"`email_${notification.value}`\"\n :value=\"`email_${notification.value}`\"\n :is-checked=\"checkFlagStatus('email', notification.value)\"\n @update=\"handleEmailInput\"\n />\n <span class=\"text-sm text-ash-900\">{{ $t(notification.label) }}</span>\n </div>\n </div>\n\n <div class=\"flex items-center justify-start gap-2\">\n <span class=\"text-sm font-medium normal-case text-ash-900\">\n {{ $t('PROFILE_SETTINGS.FORM.PUSH_NOTIFICATIONS_SECTION.TITLE') }}\n </span>\n </div>\n\n <div class=\"flex flex-col gap-4\">\n <div\n v-for=\"(notification, index) in filteredNotificationTypes\"\n :key=\"index\"\n class=\"flex flex-row items-start gap-2\"\n >\n <CheckBox\n :id=\"`push_${notification.value}`\"\n :value=\"`push_${notification.value}`\"\n :is-checked=\"checkFlagStatus('push', notification.value)\"\n @update=\"handlePushInput\"\n />\n <span class=\"text-sm text-ash-900\">{{ $t(notification.label) }}</span>\n </div>\n </div>\n </div>\n\n <div\n class=\"flex items-center justify-between w-full gap-2 p-4 border border-solid border-ash-200 rounded-xl\"\n >\n <div class=\"flex flex-row items-center gap-2\">\n <fluent-icon\n icon=\"alert\"\n class=\"flex-shrink-0 text-ash-900\"\n size=\"18\"\n />\n <span class=\"text-sm text-ash-900\">\n {{ $t('PROFILE_SETTINGS.FORM.NOTIFICATIONS.BROWSER_PERMISSION') }}\n </span>\n </div>\n <FormSwitch\n :model-value=\"hasEnabledPushPermissions\"\n @update:model-value=\"onRequestPermissions\"\n />\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport Icon from 'next/icon/Icon.vue';\nimport * as Sentry from '@sentry/vue';\nimport FormSelect from 'v3/components/Form/Select.vue';\n\nconst props = defineProps({\n value: {\n type: String,\n required: true,\n validator: value =>\n ['ding', 'bell', 'chime', 'magic', 'ping'].includes(value),\n },\n label: {\n type: String,\n default: '',\n },\n});\n\nconst emit = defineEmits(['change']);\n\nconst alertTones = computed(() => [\n {\n value: 'ding',\n label: 'Ding',\n },\n {\n value: 'bell',\n label: 'Bell',\n },\n {\n value: 'chime',\n label: 'Chime',\n },\n {\n value: 'magic',\n label: 'Magic',\n },\n {\n value: 'ping',\n label: 'Ping',\n },\n]);\n\nconst selectedValue = computed({\n get: () => props.value,\n set: value => {\n emit('change', value);\n },\n});\n\nconst audio = new Audio();\n\nconst playAudio = async () => {\n try {\n // Has great support https://caniuse.com/mdn-api_htmlaudioelement\n audio.src = `/audio/dashboard/${selectedValue.value}.mp3`;\n await audio.play();\n } catch (error) {\n Sentry.captureException(error);\n }\n};\n</script>\n\n<template>\n <div class=\"flex items-center gap-2\">\n <FormSelect\n v-model=\"selectedValue\"\n name=\"alertTone\"\n spacing=\"compact\"\n class=\"flex-grow\"\n :value=\"selectedValue\"\n :options=\"alertTones\"\n :label=\"label\"\n >\n <option\n v-for=\"tone in alertTones\"\n :key=\"tone.label\"\n :value=\"tone.value\"\n :selected=\"tone.value === selectedValue\"\n >\n {{ tone.label }}\n </option>\n </FormSelect>\n <button\n v-tooltip.top=\"\n $t('PROFILE_SETTINGS.FORM.AUDIO_NOTIFICATIONS_SECTION.PLAY')\n \"\n class=\"border-0 shadow-sm outline-none flex justify-center items-center size-10 appearance-none rounded-xl ring-ash-200 ring-1 ring-inset focus:ring-2 focus:ring-inset focus:ring-primary-500 flex-shrink-0 mt-[1.75rem]\"\n @click=\"playAudio\"\n >\n <Icon icon=\"i-lucide-volume-2\" />\n </button>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport CheckBox from 'v3/components/Form/CheckBox.vue';\nimport { ALERT_EVENTS, EVENT_TYPES } from './constants';\n\nconst props = defineProps({\n label: {\n type: String,\n default: '',\n },\n value: {\n type: String,\n default: '',\n },\n});\n\nconst emit = defineEmits(['update']);\n\nconst alertEvents = ALERT_EVENTS;\nconst alertEventValues = Object.values(EVENT_TYPES);\n\nconst selectedValue = computed({\n get: () => {\n // maintain backward compatibility\n if (props.value === 'none') return [];\n if (props.value === 'mine') return [EVENT_TYPES.ASSIGNED];\n if (props.value === 'all') return [...alertEventValues];\n\n const validValues = props.value\n .split('+')\n .filter(value => alertEventValues.includes(value));\n\n return [...new Set(validValues)];\n },\n set: value => {\n const sortedValues = value.filter(Boolean).sort();\n const uniqueValues = [...new Set(sortedValues)];\n\n if (uniqueValues.length === 0) {\n emit('update', 'none');\n return;\n }\n\n emit('update', uniqueValues.join('+'));\n },\n});\n\nconst setValue = (isChecked, value) => {\n let updatedValue = selectedValue.value;\n if (isChecked) {\n updatedValue.push(value);\n } else {\n updatedValue = updatedValue.filter(item => item !== value);\n }\n\n selectedValue.value = updatedValue;\n};\n\nconst alertDescription = computed(() => {\n const base =\n 'PROFILE_SETTINGS.FORM.AUDIO_NOTIFICATIONS_SECTION.ALERT_COMBINATIONS.';\n\n if (props.value === '' || props.value === 'none') {\n return base + 'NONE';\n }\n\n return base + selectedValue.value.join('+').toUpperCase();\n});\n</script>\n\n<template>\n <div>\n <label class=\"pb-1 text-sm font-medium leading-6 text-ash-900\">\n {{ label }}\n </label>\n <div class=\"grid gap-3 mt-2\">\n <div\n v-for=\"option in alertEvents\"\n :key=\"option.value\"\n class=\"flex items-center gap-2\"\n >\n <CheckBox\n :id=\"`checkbox-${option.value}`\"\n :is-checked=\"selectedValue.includes(option.value)\"\n @update=\"(_val, isChecked) => setValue(isChecked, option.value)\"\n />\n <label\n :for=\"`checkbox-${option.value}`\"\n class=\"text-sm text-ash-900 font-normal\"\n >\n {{\n $t(\n `PROFILE_SETTINGS.FORM.AUDIO_NOTIFICATIONS_SECTION.ALERT_TYPES.${option.label.toUpperCase()}`\n )\n }}\n </label>\n </div>\n <div class=\"text-n-slate-11 text-sm font-medium mt-2\">\n {{ $t(alertDescription) }}\n </div>\n </div>\n </div>\n</template>\n","<script setup>\nimport CheckBox from 'v3/components/Form/CheckBox.vue';\ndefineProps({\n label: {\n type: String,\n required: true,\n },\n items: {\n type: Array,\n required: true,\n },\n});\n\nconst emit = defineEmits(['change']);\nconst onChange = (id, value) => {\n emit('change', id, value);\n};\n</script>\n\n<template>\n <div>\n <label\n class=\"flex justify-between pb-1 text-sm font-medium leading-6 text-ash-900\"\n >\n {{ label }}\n </label>\n <div class=\"flex flex-col gap-3 mt-2\">\n <div\n v-for=\"item in items\"\n :key=\"item.id\"\n class=\"flex flex-row items-start gap-2\"\n >\n <CheckBox\n :id=\"`checkbox-condition-${item.value}`\"\n :is-checked=\"item.model\"\n :value=\"item.value\"\n @update=\"onChange\"\n />\n <label\n class=\"text-sm font-normal text-ash-900\"\n :for=\"`checkbox-condition-${item.value}`\"\n >\n {{ item.label }}\n </label>\n </div>\n </div>\n </div>\n</template>\n","<script setup>\nimport { useAlert } from 'dashboard/composables';\nimport { useUISettings } from 'dashboard/composables/useUISettings';\nimport AudioAlertTone from './AudioAlertTone.vue';\nimport AudioAlertEvent from './AudioAlertEvent.vue';\nimport AudioAlertCondition from './AudioAlertCondition.vue';\nimport { computed, onMounted, ref, watch } from 'vue';\nimport { useStore } from 'dashboard/composables/store';\nconst store = useStore();\nimport { useI18n } from 'vue-i18n';\nimport camelcaseKeys from 'camelcase-keys';\nimport { initializeAudioAlerts } from 'dashboard/helper/scriptHelpers';\nimport { useStoreGetters } from 'dashboard/composables/store';\n\nconst getters = useStoreGetters();\nconst currentUser = computed(() => getters.getCurrentUser.value);\n\nconst { uiSettings, updateUISettings } = useUISettings();\n\nconst { t } = useI18n();\nconst audioAlert = ref('');\nconst playAudioWhenTabIsInactive = ref(false);\nconst alertIfUnreadConversationExist = ref(false);\nconst alertTone = ref('ding');\nconst audioAlertConditions = ref([]);\nconst i18nKeyPrefix = 'PROFILE_SETTINGS.FORM.AUDIO_NOTIFICATIONS_SECTION';\n\nconst initializeNotificationUISettings = newUISettings => {\n const updatedUISettings = camelcaseKeys(newUISettings);\n\n audioAlert.value = updatedUISettings.enableAudioAlerts;\n playAudioWhenTabIsInactive.value = !updatedUISettings.alwaysPlayAudioAlert;\n alertIfUnreadConversationExist.value =\n updatedUISettings.alertIfUnreadAssignedConversationExist;\n audioAlertConditions.value = [\n {\n id: 'audio1',\n label: t(`${i18nKeyPrefix}.CONDITIONS.CONDITION_ONE`),\n model: playAudioWhenTabIsInactive.value,\n value: 'tab_is_inactive',\n },\n {\n id: 'audio2',\n label: t(`${i18nKeyPrefix}.CONDITIONS.CONDITION_TWO`),\n model: alertIfUnreadConversationExist.value,\n value: 'conversations_are_read',\n },\n ];\n alertTone.value = updatedUISettings.notificationTone || 'ding';\n};\n\nwatch(\n uiSettings,\n value => {\n initializeNotificationUISettings(value);\n },\n { immediate: true }\n);\n\nconst handleAudioConfigChange = value => {\n updateUISettings(value);\n initializeAudioAlerts(currentUser.value);\n useAlert(t('PROFILE_SETTINGS.FORM.API.UPDATE_SUCCESS'));\n};\n\nonMounted(() => {\n store.dispatch('userNotificationSettings/get');\n});\n\nconst handAudioAlertChange = value => {\n audioAlert.value = value;\n handleAudioConfigChange({\n enable_audio_alerts: value,\n });\n};\nconst handleAudioAlertConditions = (id, value) => {\n if (id === 'tab_is_inactive') {\n handleAudioConfigChange({\n always_play_audio_alert: !value,\n });\n } else if (id === 'conversations_are_read') {\n handleAudioConfigChange({\n alert_if_unread_assigned_conversation_exist: value,\n });\n }\n};\nconst handleAudioToneChange = value => {\n handleAudioConfigChange({ notification_tone: value });\n};\n</script>\n\n<template>\n <div id=\"profile-settings-notifications\" class=\"flex flex-col gap-6\">\n <AudioAlertTone\n :value=\"alertTone\"\n :label=\"$t(`${i18nKeyPrefix}.DEFAULT_TONE.TITLE`)\"\n @change=\"handleAudioToneChange\"\n />\n\n <AudioAlertEvent\n :label=\"$t(`${i18nKeyPrefix}.ALERT_TYPE.TITLE`)\"\n :value=\"audioAlert\"\n @update=\"handAudioAlertChange\"\n />\n\n <AudioAlertCondition\n :items=\"audioAlertConditions\"\n :label=\"$t(`${i18nKeyPrefix}.CONDITIONS.TITLE`)\"\n @change=\"handleAudioAlertConditions\"\n />\n </div>\n</template>\n","<script setup>\nimport { ref, computed } from 'vue';\nimport FormButton from 'v3/components/Form/Button.vue';\nconst props = defineProps({\n value: {\n type: String,\n default: '',\n },\n});\nconst emit = defineEmits(['onCopy']);\nconst inputType = ref('password');\nconst toggleMasked = () => {\n inputType.value = inputType.value === 'password' ? 'text' : 'password';\n};\n\nconst maskIcon = computed(() => {\n return inputType.value === 'password' ? 'eye-hide' : 'eye-show';\n});\n\nconst onClick = () => {\n emit('onCopy', props.value);\n};\n</script>\n\n<template>\n <div class=\"flex flex-row justify-between gap-4\">\n <woot-input\n name=\"access_token\"\n class=\"flex-1 [&>input]:!py-1.5 ltr:[&>input]:!pr-9 ltr:[&>input]:!pl-3 rtl:[&>input]:!pl-9 rtl:[&>input]:!pr-3 focus:[&>input]:!border-slate-200 focus:[&>input]:dark:!border-slate-600 [&>input]:cursor-not-allowed relative\"\n :styles=\"{\n borderRadius: '12px',\n fontSize: '14px',\n marginBottom: '2px',\n }\"\n :type=\"inputType\"\n :model-value=\"value\"\n readonly\n >\n <template #masked>\n <button\n class=\"absolute top-1.5 ltr:right-0.5 rtl:left-0.5\"\n @click=\"toggleMasked\"\n >\n <fluent-icon :icon=\"maskIcon\" :size=\"16\" />\n </button>\n </template>\n </woot-input>\n <FormButton\n type=\"submit\"\n size=\"large\"\n icon=\"text-copy\"\n variant=\"outline\"\n color-scheme=\"secondary\"\n @click=\"onClick\"\n >\n {{ $t('PROFILE_SETTINGS.FORM.ACCESS_TOKEN.COPY') }}\n </FormButton>\n </div>\n</template>\n","import { computed, unref } from 'vue';\nimport { useMapGetter } from 'dashboard/composables/store';\nimport { useAccount } from 'dashboard/composables/useAccount';\nimport { useConfig } from 'dashboard/composables/useConfig';\nimport {\n getUserPermissions,\n hasPermissions,\n} from 'dashboard/helper/permissionsHelper';\nimport { PREMIUM_FEATURES } from 'dashboard/featureFlags';\n\nimport { INSTALLATION_TYPES } from 'dashboard/constants/installationTypes';\n\nexport function usePolicy() {\n const user = useMapGetter('getCurrentUser');\n const isFeatureEnabled = useMapGetter('accounts/isFeatureEnabledonAccount');\n const isOnChatwootCloud = useMapGetter('globalConfig/isOnChatwootCloud');\n const isACustomBrandedInstance = useMapGetter(\n 'globalConfig/isACustomBrandedInstance'\n );\n\n const { isEnterprise, enterprisePlanName } = useConfig();\n const { accountId } = useAccount();\n\n const getUserPermissionsForAccount = () => {\n return getUserPermissions(user.value, accountId.value);\n };\n\n const isFeatureFlagEnabled = featureFlag => {\n if (!featureFlag) return true;\n return isFeatureEnabled.value(accountId.value, featureFlag);\n };\n\n const checkPermissions = requiredPermissions => {\n if (!requiredPermissions || !requiredPermissions.length) return true;\n const userPermissions = getUserPermissionsForAccount();\n return hasPermissions(requiredPermissions, userPermissions);\n };\n\n const checkInstallationType = config => {\n if (Array.isArray(config) && config.length > 0) {\n const installationCheck = {\n [INSTALLATION_TYPES.ENTERPRISE]: isEnterprise,\n [INSTALLATION_TYPES.CLOUD]: isOnChatwootCloud.value,\n [INSTALLATION_TYPES.COMMUNITY]: true,\n };\n\n return config.some(type => installationCheck[type]);\n }\n\n return true;\n };\n\n const isPremiumFeature = featureFlag => {\n if (!featureFlag) return true;\n return PREMIUM_FEATURES.includes(featureFlag);\n };\n\n const hasPremiumEnterprise = computed(() => {\n if (isEnterprise) return enterprisePlanName !== 'community';\n\n return true;\n });\n\n const shouldShow = (featureFlag, permissions, installationTypes) => {\n const flag = unref(featureFlag);\n const perms = unref(permissions);\n const installation = unref(installationTypes);\n\n // if the user does not have permissions or installation type is not supported\n // return false;\n // This supersedes everything\n if (!checkPermissions(perms)) return false;\n if (!checkInstallationType(installation)) return false;\n\n if (isACustomBrandedInstance.value) {\n // if this is a custom branded instance, we just use the feature flag as a reference\n return isFeatureFlagEnabled(flag);\n }\n\n // if on cloud, we should if the feature is allowed\n // or if the feature is a premium one like SLA to show a paywall\n // the paywall should be managed by the individual component\n if (isOnChatwootCloud.value) {\n return isFeatureFlagEnabled(flag) || isPremiumFeature(flag);\n }\n\n if (isEnterprise) {\n // in enterprise, if the feature is premium but they don't have an enterprise plan\n // we should it anyway this is to show upsells on enterprise regardless of the feature flag\n // Feature flag is only honored if they have a premium plan\n //\n // In case they have a premium plan, the check on feature flag alone is enough\n // because the second condition will always be false\n // That means once subscribed, the feature can be disabled by the admin\n //\n // the paywall should be managed by the individual component\n return (\n isFeatureFlagEnabled(flag) ||\n (isPremiumFeature(flag) && !hasPremiumEnterprise.value)\n );\n }\n\n // default to true\n return true;\n };\n\n const shouldShowPaywall = featureFlag => {\n const flag = unref(featureFlag);\n if (!flag) return false;\n\n if (isACustomBrandedInstance.value) {\n // custom branded instances never show paywall\n return false;\n }\n\n if (isPremiumFeature(flag)) {\n if (isOnChatwootCloud.value) {\n return !isFeatureFlagEnabled(flag);\n }\n\n if (isEnterprise) {\n return !hasPremiumEnterprise.value;\n }\n }\n\n return false;\n };\n\n return {\n checkPermissions,\n shouldShowPaywall,\n shouldShow,\n };\n}\n","<script setup>\nimport { usePolicy } from 'dashboard/composables/usePolicy';\nimport { computed } from 'vue';\n\nconst props = defineProps({\n as: {\n type: String,\n default: 'div',\n },\n permissions: {\n type: Array,\n required: true,\n },\n featureFlag: {\n type: String,\n default: null,\n },\n installationTypes: {\n type: Array,\n default: null,\n },\n});\n\nconst { shouldShow } = usePolicy();\n\nconst show = computed(() =>\n shouldShow(props.featureFlag, props.permissions, props.installationTypes)\n);\n</script>\n\n<!-- eslint-disable vue/no-root-v-if -->\n<template>\n <component :is=\"as\" v-if=\"show\">\n <slot />\n </component>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\nimport { useUISettings } from 'dashboard/composables/useUISettings';\nimport { useFontSize } from 'dashboard/composables/useFontSize';\nimport { clearCookiesOnLogout } from 'dashboard/store/utils/api.js';\nimport { copyTextToClipboard } from 'shared/helpers/clipboard';\nimport { parseAPIErrorResponse } from 'dashboard/store/utils/api';\nimport globalConfigMixin from 'shared/mixins/globalConfigMixin';\nimport UserProfilePicture from './UserProfilePicture.vue';\nimport UserBasicDetails from './UserBasicDetails.vue';\nimport MessageSignature from './MessageSignature.vue';\nimport FontSize from './FontSize.vue';\nimport HotKeyCard from './HotKeyCard.vue';\nimport ChangePassword from './ChangePassword.vue';\nimport NotificationPreferences from './NotificationPreferences.vue';\nimport AudioNotifications from './AudioNotifications.vue';\nimport FormSection from 'dashboard/components/FormSection.vue';\nimport AccessToken from './AccessToken.vue';\nimport Policy from 'dashboard/components/policy.vue';\nimport {\n ROLES,\n CONVERSATION_PERMISSIONS,\n} from 'dashboard/constants/permissions.js';\n\nexport default {\n components: {\n MessageSignature,\n FormSection,\n FontSize,\n UserProfilePicture,\n Policy,\n UserBasicDetails,\n HotKeyCard,\n ChangePassword,\n NotificationPreferences,\n AudioNotifications,\n AccessToken,\n },\n mixins: [globalConfigMixin],\n setup() {\n const { isEditorHotKeyEnabled, updateUISettings } = useUISettings();\n const { currentFontSize, updateFontSize } = useFontSize();\n\n return {\n currentFontSize,\n updateFontSize,\n isEditorHotKeyEnabled,\n updateUISettings,\n };\n },\n data() {\n return {\n avatarFile: '',\n avatarUrl: '',\n name: '',\n displayName: '',\n email: '',\n messageSignature: '',\n hotKeys: [\n {\n key: 'enter',\n title: this.$t(\n 'PROFILE_SETTINGS.FORM.SEND_MESSAGE.CARD.ENTER_KEY.HEADING'\n ),\n description: this.$t(\n 'PROFILE_SETTINGS.FORM.SEND_MESSAGE.CARD.ENTER_KEY.CONTENT'\n ),\n lightImage: '/assets/images/dashboard/profile/hot-key-enter.svg',\n darkImage: '/assets/images/dashboard/profile/hot-key-enter-dark.svg',\n },\n {\n key: 'cmd_enter',\n title: this.$t(\n 'PROFILE_SETTINGS.FORM.SEND_MESSAGE.CARD.CMD_ENTER_KEY.HEADING'\n ),\n description: this.$t(\n 'PROFILE_SETTINGS.FORM.SEND_MESSAGE.CARD.CMD_ENTER_KEY.CONTENT'\n ),\n lightImage: '/assets/images/dashboard/profile/hot-key-ctrl-enter.svg',\n darkImage:\n '/assets/images/dashboard/profile/hot-key-ctrl-enter-dark.svg',\n },\n ],\n notificationPermissions: [...ROLES, ...CONVERSATION_PERMISSIONS],\n audioNotificationPermissions: [...ROLES, ...CONVERSATION_PERMISSIONS],\n };\n },\n computed: {\n ...mapGetters({\n currentUser: 'getCurrentUser',\n currentUserId: 'getCurrentUserID',\n globalConfig: 'globalConfig/get',\n }),\n },\n mounted() {\n if (this.currentUserId) {\n this.initializeUser();\n }\n },\n methods: {\n initializeUser() {\n this.name = this.currentUser.name;\n this.email = this.currentUser.email;\n this.avatarUrl = this.currentUser.avatar_url;\n this.displayName = this.currentUser.display_name;\n this.messageSignature = this.currentUser.message_signature;\n },\n async dispatchUpdate(payload, successMessage, errorMessage) {\n let alertMessage = '';\n try {\n await this.$store.dispatch('updateProfile', payload);\n alertMessage = successMessage;\n\n return true; // return the value so that the status can be known\n } catch (error) {\n alertMessage = parseAPIErrorResponse(error) || errorMessage;\n\n return false; // return the value so that the status can be known\n } finally {\n useAlert(alertMessage);\n }\n },\n async updateProfile(userAttributes) {\n const { name, email, displayName } = userAttributes;\n const hasEmailChanged = this.currentUser.email !== email;\n this.name = name || this.name;\n this.email = email || this.email;\n this.displayName = displayName || this.displayName;\n\n const updatePayload = {\n name: this.name,\n email: this.email,\n displayName: this.displayName,\n avatar: this.avatarFile,\n };\n\n const success = await this.dispatchUpdate(\n updatePayload,\n hasEmailChanged\n ? this.$t('PROFILE_SETTINGS.AFTER_EMAIL_CHANGED')\n : this.$t('PROFILE_SETTINGS.UPDATE_SUCCESS'),\n this.$t('RESET_PASSWORD.API.ERROR_MESSAGE')\n );\n\n if (hasEmailChanged && success) clearCookiesOnLogout();\n },\n async updateSignature(signature) {\n const payload = { message_signature: signature };\n let successMessage = this.$t(\n 'PROFILE_SETTINGS.FORM.MESSAGE_SIGNATURE_SECTION.API_SUCCESS'\n );\n let errorMessage = this.$t(\n 'PROFILE_SETTINGS.FORM.MESSAGE_SIGNATURE_SECTION.API_ERROR'\n );\n\n await this.dispatchUpdate(payload, successMessage, errorMessage);\n },\n updateProfilePicture({ file, url }) {\n this.avatarFile = file;\n this.avatarUrl = url;\n },\n async deleteProfilePicture() {\n try {\n await this.$store.dispatch('deleteAvatar');\n this.avatarUrl = '';\n this.avatarFile = '';\n useAlert(this.$t('PROFILE_SETTINGS.AVATAR_DELETE_SUCCESS'));\n } catch (error) {\n useAlert(this.$t('PROFILE_SETTINGS.AVATAR_DELETE_FAILED'));\n }\n },\n toggleHotKey(key) {\n this.hotKeys = this.hotKeys.map(hotKey =>\n hotKey.key === key ? { ...hotKey, active: !hotKey.active } : hotKey\n );\n this.updateUISettings({ editor_message_key: key });\n useAlert(this.$t('PROFILE_SETTINGS.FORM.SEND_MESSAGE.UPDATE_SUCCESS'));\n },\n async onCopyToken(value) {\n await copyTextToClipboard(value);\n useAlert(this.$t('COMPONENTS.CODE.COPY_SUCCESSFUL'));\n },\n },\n};\n</script>\n\n<template>\n <div class=\"grid py-16 px-5 font-inter mx-auto gap-16 sm:max-w-screen-md\">\n <div class=\"flex flex-col gap-6\">\n <h2 class=\"text-2xl font-medium text-ash-900\">\n {{ $t('PROFILE_SETTINGS.TITLE') }}\n </h2>\n <UserProfilePicture\n :src=\"avatarUrl\"\n :name=\"name\"\n @change=\"updateProfilePicture\"\n @delete=\"deleteProfilePicture\"\n />\n <UserBasicDetails\n :name=\"name\"\n :display-name=\"displayName\"\n :email=\"email\"\n :email-enabled=\"!globalConfig.disableUserProfileUpdate\"\n @update-user=\"updateProfile\"\n />\n </div>\n <FormSection\n :title=\"$t('PROFILE_SETTINGS.FORM.INTERFACE_SECTION.TITLE')\"\n :description=\"$t('PROFILE_SETTINGS.FORM.INTERFACE_SECTION.NOTE')\"\n >\n <FontSize\n :value=\"currentFontSize\"\n :label=\"$t('PROFILE_SETTINGS.FORM.INTERFACE_SECTION.FONT_SIZE.TITLE')\"\n :description=\"\n $t('PROFILE_SETTINGS.FORM.INTERFACE_SECTION.FONT_SIZE.NOTE')\n \"\n @change=\"updateFontSize\"\n />\n </FormSection>\n <FormSection\n :title=\"$t('PROFILE_SETTINGS.FORM.MESSAGE_SIGNATURE_SECTION.TITLE')\"\n :description=\"$t('PROFILE_SETTINGS.FORM.MESSAGE_SIGNATURE_SECTION.NOTE')\"\n >\n <MessageSignature\n :message-signature=\"messageSignature\"\n @update-signature=\"updateSignature\"\n />\n </FormSection>\n <FormSection\n :title=\"$t('PROFILE_SETTINGS.FORM.SEND_MESSAGE.TITLE')\"\n :description=\"$t('PROFILE_SETTINGS.FORM.SEND_MESSAGE.NOTE')\"\n >\n <div\n class=\"flex flex-col justify-between w-full gap-5 sm:gap-4 sm:flex-row\"\n >\n <button\n v-for=\"hotKey in hotKeys\"\n :key=\"hotKey.key\"\n class=\"px-0 reset-base w-full sm:flex-1\"\n >\n <HotKeyCard\n :key=\"hotKey.title\"\n :title=\"hotKey.title\"\n :description=\"hotKey.description\"\n :light-image=\"hotKey.lightImage\"\n :dark-image=\"hotKey.darkImage\"\n :active=\"isEditorHotKeyEnabled(hotKey.key)\"\n @click=\"toggleHotKey(hotKey.key)\"\n />\n </button>\n </div>\n </FormSection>\n <FormSection\n v-if=\"!globalConfig.disableUserProfileUpdate\"\n :title=\"$t('PROFILE_SETTINGS.FORM.PASSWORD_SECTION.TITLE')\"\n >\n <ChangePassword />\n </FormSection>\n <Policy :permissions=\"audioNotificationPermissions\">\n <FormSection\n :title=\"$t('PROFILE_SETTINGS.FORM.AUDIO_NOTIFICATIONS_SECTION.TITLE')\"\n :description=\"\n $t('PROFILE_SETTINGS.FORM.AUDIO_NOTIFICATIONS_SECTION.NOTE')\n \"\n >\n <AudioNotifications />\n </FormSection>\n </Policy>\n <Policy :permissions=\"notificationPermissions\">\n <FormSection :title=\"$t('PROFILE_SETTINGS.FORM.NOTIFICATIONS.TITLE')\">\n <NotificationPreferences />\n </FormSection>\n </Policy>\n <FormSection\n :title=\"$t('PROFILE_SETTINGS.FORM.ACCESS_TOKEN.TITLE')\"\n :description=\"\n useInstallationName(\n $t('PROFILE_SETTINGS.FORM.ACCESS_TOKEN.NOTE'),\n globalConfig.installationName\n )\n \"\n >\n <AccessToken :value=\"currentUser.access_token\" @on-copy=\"onCopyToken\" />\n </FormSection>\n </div>\n</template>\n","import { frontendURL } from '../../../../helper/URLHelper';\n\nimport SettingsContent from './Wrapper.vue';\nimport Index from './Index.vue';\n\nexport default {\n routes: [\n {\n path: frontendURL('accounts/:accountId/profile'),\n name: 'profile_settings',\n meta: {\n permissions: ['administrator', 'agent', 'custom_role'],\n },\n component: SettingsContent,\n children: [\n {\n path: 'settings',\n name: 'profile_settings_index',\n component: Index,\n meta: {\n permissions: ['administrator', 'agent', 'custom_role'],\n },\n },\n ],\n },\n ],\n};\n","import { frontendURL } from '../../../helper/URLHelper';\nimport {\n ROLES,\n CONVERSATION_PERMISSIONS,\n} from 'dashboard/constants/permissions.js';\n\nimport account from './account/account.routes';\nimport agent from './agents/agent.routes';\nimport agentBot from './agentBots/agentBot.routes';\nimport attributes from './attributes/attributes.routes';\nimport automation from './automation/automation.routes';\nimport auditlogs from './auditlogs/audit.routes';\nimport billing from './billing/billing.routes';\nimport canned from './canned/canned.routes';\nimport inbox from './inbox/inbox.routes';\nimport integrations from './integrations/integrations.routes';\nimport labels from './labels/labels.routes';\nimport macros from './macros/macros.routes';\nimport reports from './reports/reports.routes';\nimport store from '../../../store';\nimport sla from './sla/sla.routes';\nimport teams from './teams/teams.routes';\nimport customRoles from './customRoles/customRole.routes';\nimport profile from './profile/profile.routes';\n\nexport default {\n routes: [\n {\n path: frontendURL('accounts/:accountId/settings'),\n name: 'settings_home',\n meta: {\n permissions: [...ROLES, ...CONVERSATION_PERMISSIONS],\n },\n redirect: to => {\n if (\n store.getters.getCurrentRole === 'administrator' &&\n store.getters.getCurrentCustomRoleId === null\n ) {\n return { name: 'general_settings_index', params: to.params };\n }\n\n return { name: 'canned_list', params: to.params };\n },\n },\n ...account.routes,\n ...agent.routes,\n ...agentBot.routes,\n ...attributes.routes,\n ...automation.routes,\n ...auditlogs.routes,\n ...billing.routes,\n ...canned.routes,\n ...inbox.routes,\n ...integrations.routes,\n ...labels.routes,\n ...macros.routes,\n ...reports.routes,\n ...sla.routes,\n ...teams.routes,\n ...customRoles.routes,\n ...profile.routes,\n ],\n};\n","import { nextTick, pushScopeId, popScopeId, openBlock, createBlock, withScopeId } from 'vue';\n\nfunction getInternetExplorerVersion() {\n var ua = window.navigator.userAgent;\n var msie = ua.indexOf('MSIE ');\n\n if (msie > 0) {\n // IE 10 or older => return version number\n return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\n }\n\n var trident = ua.indexOf('Trident/');\n\n if (trident > 0) {\n // IE 11 => return version number\n var rv = ua.indexOf('rv:');\n return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\n }\n\n var edge = ua.indexOf('Edge/');\n\n if (edge > 0) {\n // Edge (IE 12+) => return version number\n return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\n } // other browser\n\n\n return -1;\n}\n\nlet isIE;\n\nfunction initCompat () {\n if (!initCompat.init) {\n initCompat.init = true;\n isIE = getInternetExplorerVersion() !== -1;\n }\n}\n\nvar script = {\n name: 'ResizeObserver',\n\n props: {\n emitOnMount: {\n type: Boolean,\n default: false,\n },\n\n ignoreWidth: {\n type: Boolean,\n default: false,\n },\n\n ignoreHeight: {\n type: Boolean,\n default: false,\n },\n },\n\n emits: [\n 'notify',\n ],\n\n mounted () {\n initCompat();\n nextTick(() => {\n this._w = this.$el.offsetWidth;\n this._h = this.$el.offsetHeight;\n if (this.emitOnMount) {\n this.emitSize();\n }\n });\n const object = document.createElement('object');\n this._resizeObject = object;\n object.setAttribute('aria-hidden', 'true');\n object.setAttribute('tabindex', -1);\n object.onload = this.addResizeHandlers;\n object.type = 'text/html';\n if (isIE) {\n this.$el.appendChild(object);\n }\n object.data = 'about:blank';\n if (!isIE) {\n this.$el.appendChild(object);\n }\n },\n\n beforeUnmount () {\n this.removeResizeHandlers();\n },\n\n methods: {\n compareAndNotify () {\n if ((!this.ignoreWidth && this._w !== this.$el.offsetWidth) || (!this.ignoreHeight && this._h !== this.$el.offsetHeight)) {\n this._w = this.$el.offsetWidth;\n this._h = this.$el.offsetHeight;\n this.emitSize();\n }\n },\n\n emitSize () {\n this.$emit('notify', {\n width: this._w,\n height: this._h,\n });\n },\n\n addResizeHandlers () {\n this._resizeObject.contentDocument.defaultView.addEventListener('resize', this.compareAndNotify);\n this.compareAndNotify();\n },\n\n removeResizeHandlers () {\n if (this._resizeObject && this._resizeObject.onload) {\n if (!isIE && this._resizeObject.contentDocument) {\n this._resizeObject.contentDocument.defaultView.removeEventListener('resize', this.compareAndNotify);\n }\n this.$el.removeChild(this._resizeObject);\n this._resizeObject.onload = null;\n this._resizeObject = null;\n }\n },\n },\n};\n\nconst _withId = /*#__PURE__*/withScopeId(\"data-v-b329ee4c\");\n\npushScopeId(\"data-v-b329ee4c\");\nconst _hoisted_1 = {\n class: \"resize-observer\",\n tabindex: \"-1\"\n};\npopScopeId();\n\nconst render = /*#__PURE__*/_withId((_ctx, _cache, $props, $setup, $data, $options) => {\n return (openBlock(), createBlock(\"div\", _hoisted_1))\n});\n\nscript.render = render;\nscript.__scopeId = \"data-v-b329ee4c\";\nscript.__file = \"src/components/ResizeObserver.vue\";\n\nfunction install(app) {\n // eslint-disable-next-line vue/component-definition-name-casing\n app.component('resize-observer', script);\n app.component('ResizeObserver', script);\n}\n\nvar plugin = {\n // eslint-disable-next-line no-undef\n version: \"2.0.0-alpha.1\",\n install: install\n};\n\nexport default plugin;\nexport { script as ResizeObserver, install };\n//# sourceMappingURL=vue-resize.esm.js.map\n","import { nextTick } from 'vue';\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction processOptions(value) {\n var options;\n\n if (typeof value === 'function') {\n // Simple options (callback-only)\n options = {\n callback: value\n };\n } else {\n // Options object\n options = value;\n }\n\n return options;\n}\nfunction throttle(callback, delay) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var timeout;\n var lastState;\n var currentArgs;\n\n var throttled = function throttled(state) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n currentArgs = args;\n if (timeout && state === lastState) return;\n var leading = options.leading;\n\n if (typeof leading === 'function') {\n leading = leading(state, lastState);\n }\n\n if ((!timeout || state !== lastState) && leading) {\n callback.apply(void 0, [state].concat(_toConsumableArray(currentArgs)));\n }\n\n lastState = state;\n clearTimeout(timeout);\n timeout = setTimeout(function () {\n callback.apply(void 0, [state].concat(_toConsumableArray(currentArgs)));\n timeout = 0;\n }, delay);\n };\n\n throttled._clear = function () {\n clearTimeout(timeout);\n timeout = null;\n };\n\n return throttled;\n}\nfunction deepEqual(val1, val2) {\n if (val1 === val2) return true;\n\n if (_typeof(val1) === 'object') {\n for (var key in val1) {\n if (!deepEqual(val1[key], val2[key])) {\n return false;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\nvar VisibilityState = /*#__PURE__*/function () {\n function VisibilityState(el, options, vnode) {\n _classCallCheck(this, VisibilityState);\n\n this.el = el;\n this.observer = null;\n this.frozen = false;\n this.createObserver(options, vnode);\n }\n\n _createClass(VisibilityState, [{\n key: \"createObserver\",\n value: function createObserver(options, vnode) {\n var _this = this;\n\n if (this.observer) {\n this.destroyObserver();\n }\n\n if (this.frozen) return;\n this.options = processOptions(options);\n\n this.callback = function (result, entry) {\n _this.options.callback(result, entry);\n\n if (result && _this.options.once) {\n _this.frozen = true;\n\n _this.destroyObserver();\n }\n }; // Throttle\n\n\n if (this.callback && this.options.throttle) {\n var _ref = this.options.throttleOptions || {},\n _leading = _ref.leading;\n\n this.callback = throttle(this.callback, this.options.throttle, {\n leading: function leading(state) {\n return _leading === 'both' || _leading === 'visible' && state || _leading === 'hidden' && !state;\n }\n });\n }\n\n this.oldResult = undefined;\n this.observer = new IntersectionObserver(function (entries) {\n var entry = entries[0];\n\n if (entries.length > 1) {\n var intersectingEntry = entries.find(function (e) {\n return e.isIntersecting;\n });\n\n if (intersectingEntry) {\n entry = intersectingEntry;\n }\n }\n\n if (_this.callback) {\n // Use isIntersecting if possible because browsers can report isIntersecting as true, but intersectionRatio as 0, when something very slowly enters the viewport.\n var result = entry.isIntersecting && entry.intersectionRatio >= _this.threshold;\n if (result === _this.oldResult) return;\n _this.oldResult = result;\n\n _this.callback(result, entry);\n }\n }, this.options.intersection); // Wait for the element to be in document\n\n nextTick(function () {\n if (_this.observer) {\n _this.observer.observe(_this.el);\n }\n });\n }\n }, {\n key: \"destroyObserver\",\n value: function destroyObserver() {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n } // Cancel throttled call\n\n\n if (this.callback && this.callback._clear) {\n this.callback._clear();\n\n this.callback = null;\n }\n }\n }, {\n key: \"threshold\",\n get: function get() {\n return this.options.intersection && typeof this.options.intersection.threshold === 'number' ? this.options.intersection.threshold : 0;\n }\n }]);\n\n return VisibilityState;\n}();\n\nfunction beforeMount(el, _ref2, vnode) {\n var value = _ref2.value;\n if (!value) return;\n\n if (typeof IntersectionObserver === 'undefined') {\n console.warn('[vue-observe-visibility] IntersectionObserver API is not available in your browser. Please install this polyfill: https://github.com/w3c/IntersectionObserver/tree/master/polyfill');\n } else {\n var state = new VisibilityState(el, value, vnode);\n el._vue_visibilityState = state;\n }\n}\n\nfunction updated(el, _ref3, vnode) {\n var value = _ref3.value,\n oldValue = _ref3.oldValue;\n if (deepEqual(value, oldValue)) return;\n var state = el._vue_visibilityState;\n\n if (!value) {\n unmounted(el);\n return;\n }\n\n if (state) {\n state.createObserver(value, vnode);\n } else {\n beforeMount(el, {\n value: value\n }, vnode);\n }\n}\n\nfunction unmounted(el) {\n var state = el._vue_visibilityState;\n\n if (state) {\n state.destroyObserver();\n delete el._vue_visibilityState;\n }\n}\n\nvar ObserveVisibility = {\n beforeMount: beforeMount,\n updated: updated,\n unmounted: unmounted\n};\n\nfunction install(app) {\n app.directive('observe-visibility', ObserveVisibility);\n /* -- Add more components here -- */\n}\n/* -- Plugin definition & Auto-install -- */\n\n/* You shouldn't have to modify the code below */\n// Plugin\n\nvar plugin = {\n // eslint-disable-next-line no-undef\n version: \"2.0.0-alpha.1\",\n install: install\n};\n\nexport default plugin;\nexport { ObserveVisibility, install };\n","export default function(n){return{all:n=n||new Map,on:function(t,e){var i=n.get(t);i&&i.push(e)||n.set(t,[e])},off:function(t,e){var i=n.get(t);i&&i.splice(i.indexOf(e)>>>0,1)},emit:function(t,e){(n.get(t)||[]).slice().map(function(n){n(e)}),(n.get(\"*\")||[]).slice().map(function(n){n(t,e)})}}}\n//# sourceMappingURL=mitt.es.js.map\n","import { markRaw, shallowReactive, resolveComponent, resolveDirective, withDirectives, openBlock, createElementBlock, normalizeClass, renderSlot, createCommentVNode, createBlock, resolveDynamicComponent, normalizeStyle, withCtx, Fragment, renderList, mergeProps, toHandlers, createVNode, normalizeProps, guardReactiveProps, h, reactive } from 'vue';\nimport { ResizeObserver as ResizeObserver$1 } from 'vue-resize';\nimport { ObserveVisibility } from 'vue-observe-visibility';\nimport mitt from 'mitt';\n\nvar config = {\n itemsLimit: 1000\n};\n\n// Fork of https://github.com/olahol/scrollparent.js to be able to build with Rollup\n\nvar regex = /(auto|scroll)/;\nfunction parents(node, ps) {\n if (node.parentNode === null) {\n return ps;\n }\n return parents(node.parentNode, ps.concat([node]));\n}\nvar style = function style(node, prop) {\n return getComputedStyle(node, null).getPropertyValue(prop);\n};\nvar overflow = function overflow(node) {\n return style(node, 'overflow') + style(node, 'overflow-y') + style(node, 'overflow-x');\n};\nvar scroll = function scroll(node) {\n return regex.test(overflow(node));\n};\nfunction getScrollParent(node) {\n if (!(node instanceof HTMLElement || node instanceof SVGElement)) {\n return;\n }\n var ps = parents(node.parentNode, []);\n for (var i = 0; i < ps.length; i += 1) {\n if (scroll(ps[i])) {\n return ps[i];\n }\n }\n return document.scrollingElement || document.documentElement;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}\n\nvar props = {\n items: {\n type: Array,\n required: true\n },\n keyField: {\n type: String,\n default: 'id'\n },\n direction: {\n type: String,\n default: 'vertical',\n validator: function validator(value) {\n return ['vertical', 'horizontal'].includes(value);\n }\n },\n listTag: {\n type: String,\n default: 'div'\n },\n itemTag: {\n type: String,\n default: 'div'\n }\n};\nfunction simpleArray() {\n return this.items.length && _typeof(this.items[0]) !== 'object';\n}\n\nvar supportsPassive = false;\nif (typeof window !== 'undefined') {\n supportsPassive = false;\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassive = true;\n }\n });\n window.addEventListener('test', null, opts);\n } catch (e) {}\n}\n\nlet uid = 0;\n\nvar script$2 = {\n name: 'RecycleScroller',\n\n components: {\n ResizeObserver: ResizeObserver$1,\n },\n\n directives: {\n ObserveVisibility,\n },\n\n props: {\n ...props,\n\n itemSize: {\n type: Number,\n default: null,\n },\n\n gridItems: {\n type: Number,\n default: undefined,\n },\n\n itemSecondarySize: {\n type: Number,\n default: undefined,\n },\n\n minItemSize: {\n type: [Number, String],\n default: null,\n },\n\n sizeField: {\n type: String,\n default: 'size',\n },\n\n typeField: {\n type: String,\n default: 'type',\n },\n\n buffer: {\n type: Number,\n default: 200,\n },\n\n pageMode: {\n type: Boolean,\n default: false,\n },\n\n prerender: {\n type: Number,\n default: 0,\n },\n\n emitUpdate: {\n type: Boolean,\n default: false,\n },\n\n updateInterval: {\n type: Number,\n default: 0,\n },\n\n skipHover: {\n type: Boolean,\n default: false,\n },\n\n listTag: {\n type: String,\n default: 'div',\n },\n\n itemTag: {\n type: String,\n default: 'div',\n },\n\n listClass: {\n type: [String, Object, Array],\n default: '',\n },\n\n itemClass: {\n type: [String, Object, Array],\n default: '',\n },\n },\n\n emits: [\n 'resize',\n 'visible',\n 'hidden',\n 'update',\n 'scroll-start',\n 'scroll-end',\n ],\n\n data () {\n return {\n pool: [],\n totalSize: 0,\n ready: false,\n hoverKey: null,\n }\n },\n\n computed: {\n sizes () {\n if (this.itemSize === null) {\n const sizes = {\n '-1': { accumulator: 0 },\n };\n const items = this.items;\n const field = this.sizeField;\n const minItemSize = this.minItemSize;\n let computedMinSize = 10000;\n let accumulator = 0;\n let current;\n for (let i = 0, l = items.length; i < l; i++) {\n current = items[i][field] || minItemSize;\n if (current < computedMinSize) {\n computedMinSize = current;\n }\n accumulator += current;\n sizes[i] = { accumulator, size: current };\n }\n // eslint-disable-next-line\n this.$_computedMinItemSize = computedMinSize;\n return sizes\n }\n return []\n },\n\n simpleArray,\n\n itemIndexByKey () {\n const { keyField, items } = this;\n const result = {};\n for (let i = 0, l = items.length; i < l; i++) {\n result[items[i][keyField]] = i;\n }\n return result\n },\n },\n\n watch: {\n items () {\n this.updateVisibleItems(true);\n },\n\n pageMode () {\n this.applyPageMode();\n this.updateVisibleItems(false);\n },\n\n sizes: {\n handler () {\n this.updateVisibleItems(false);\n },\n deep: true,\n },\n\n gridItems () {\n this.updateVisibleItems(true);\n },\n\n itemSecondarySize () {\n this.updateVisibleItems(true);\n },\n },\n\n created () {\n this.$_startIndex = 0;\n this.$_endIndex = 0;\n this.$_views = new Map();\n this.$_unusedViews = new Map();\n this.$_scrollDirty = false;\n this.$_lastUpdateScrollPosition = 0;\n\n // In SSR mode, we also prerender the same number of item for the first render\n // to avoir mismatch between server and client templates\n if (this.prerender) {\n this.$_prerender = true;\n this.updateVisibleItems(false);\n }\n\n if (this.gridItems && !this.itemSize) {\n console.error('[vue-recycle-scroller] You must provide an itemSize when using gridItems');\n }\n },\n\n mounted () {\n this.applyPageMode();\n this.$nextTick(() => {\n // In SSR mode, render the real number of visible items\n this.$_prerender = false;\n this.updateVisibleItems(true);\n this.ready = true;\n });\n },\n\n activated () {\n const lastPosition = this.$_lastUpdateScrollPosition;\n if (typeof lastPosition === 'number') {\n this.$nextTick(() => {\n this.scrollToPosition(lastPosition);\n });\n }\n },\n\n beforeUnmount () {\n this.removeListeners();\n },\n\n methods: {\n addView (pool, index, item, key, type) {\n const nr = markRaw({\n id: uid++,\n index,\n used: true,\n key,\n type,\n });\n const view = shallowReactive({\n item,\n position: 0,\n nr,\n });\n pool.push(view);\n return view\n },\n\n unuseView (view, fake = false) {\n const unusedViews = this.$_unusedViews;\n const type = view.nr.type;\n let unusedPool = unusedViews.get(type);\n if (!unusedPool) {\n unusedPool = [];\n unusedViews.set(type, unusedPool);\n }\n unusedPool.push(view);\n if (!fake) {\n view.nr.used = false;\n view.position = -9999;\n }\n },\n\n handleResize () {\n this.$emit('resize');\n if (this.ready) this.updateVisibleItems(false);\n },\n\n handleScroll (event) {\n if (!this.$_scrollDirty) {\n this.$_scrollDirty = true;\n if (this.$_updateTimeout) return\n\n const requestUpdate = () => requestAnimationFrame(() => {\n this.$_scrollDirty = false;\n const { continuous } = this.updateVisibleItems(false, true);\n\n // It seems sometimes chrome doesn't fire scroll event :/\n // When non continous scrolling is ending, we force a refresh\n if (!continuous) {\n clearTimeout(this.$_refreshTimout);\n this.$_refreshTimout = setTimeout(this.handleScroll, this.updateInterval + 100);\n }\n });\n\n requestUpdate();\n\n // Schedule the next update with throttling\n if (this.updateInterval) {\n this.$_updateTimeout = setTimeout(() => {\n this.$_updateTimeout = 0;\n if (this.$_scrollDirty) requestUpdate();\n }, this.updateInterval);\n }\n }\n },\n\n handleVisibilityChange (isVisible, entry) {\n if (this.ready) {\n if (isVisible || entry.boundingClientRect.width !== 0 || entry.boundingClientRect.height !== 0) {\n this.$emit('visible');\n requestAnimationFrame(() => {\n this.updateVisibleItems(false);\n });\n } else {\n this.$emit('hidden');\n }\n }\n },\n\n updateVisibleItems (checkItem, checkPositionDiff = false) {\n const itemSize = this.itemSize;\n const gridItems = this.gridItems || 1;\n const itemSecondarySize = this.itemSecondarySize || itemSize;\n const minItemSize = this.$_computedMinItemSize;\n const typeField = this.typeField;\n const keyField = this.simpleArray ? null : this.keyField;\n const items = this.items;\n const count = items.length;\n const sizes = this.sizes;\n const views = this.$_views;\n const unusedViews = this.$_unusedViews;\n const pool = this.pool;\n const itemIndexByKey = this.itemIndexByKey;\n let startIndex, endIndex;\n let totalSize;\n let visibleStartIndex, visibleEndIndex;\n\n if (!count) {\n startIndex = endIndex = visibleStartIndex = visibleEndIndex = totalSize = 0;\n } else if (this.$_prerender) {\n startIndex = visibleStartIndex = 0;\n endIndex = visibleEndIndex = Math.min(this.prerender, items.length);\n totalSize = null;\n } else {\n const scroll = this.getScroll();\n\n // Skip update if use hasn't scrolled enough\n if (checkPositionDiff) {\n let positionDiff = scroll.start - this.$_lastUpdateScrollPosition;\n if (positionDiff < 0) positionDiff = -positionDiff;\n if ((itemSize === null && positionDiff < minItemSize) || positionDiff < itemSize) {\n return {\n continuous: true,\n }\n }\n }\n this.$_lastUpdateScrollPosition = scroll.start;\n\n const buffer = this.buffer;\n scroll.start -= buffer;\n scroll.end += buffer;\n\n // account for leading slot\n let beforeSize = 0;\n if (this.$refs.before) {\n beforeSize = this.$refs.before.scrollHeight;\n scroll.start -= beforeSize;\n }\n\n // account for trailing slot\n if (this.$refs.after) {\n const afterSize = this.$refs.after.scrollHeight;\n scroll.end += afterSize;\n }\n\n // Variable size mode\n if (itemSize === null) {\n let h;\n let a = 0;\n let b = count - 1;\n let i = ~~(count / 2);\n let oldI;\n\n // Searching for startIndex\n do {\n oldI = i;\n h = sizes[i].accumulator;\n if (h < scroll.start) {\n a = i;\n } else if (i < count - 1 && sizes[i + 1].accumulator > scroll.start) {\n b = i;\n }\n i = ~~((a + b) / 2);\n } while (i !== oldI)\n i < 0 && (i = 0);\n startIndex = i;\n\n // For container style\n totalSize = sizes[count - 1].accumulator;\n\n // Searching for endIndex\n for (endIndex = i; endIndex < count && sizes[endIndex].accumulator < scroll.end; endIndex++);\n if (endIndex === -1) {\n endIndex = items.length - 1;\n } else {\n endIndex++;\n // Bounds\n endIndex > count && (endIndex = count);\n }\n\n // search visible startIndex\n for (visibleStartIndex = startIndex; visibleStartIndex < count && (beforeSize + sizes[visibleStartIndex].accumulator) < scroll.start; visibleStartIndex++);\n\n // search visible endIndex\n for (visibleEndIndex = visibleStartIndex; visibleEndIndex < count && (beforeSize + sizes[visibleEndIndex].accumulator) < scroll.end; visibleEndIndex++);\n } else {\n // Fixed size mode\n startIndex = ~~(scroll.start / itemSize * gridItems);\n const remainer = startIndex % gridItems;\n startIndex -= remainer;\n endIndex = Math.ceil(scroll.end / itemSize * gridItems);\n visibleStartIndex = Math.max(0, Math.floor((scroll.start - beforeSize) / itemSize * gridItems));\n visibleEndIndex = Math.floor((scroll.end - beforeSize) / itemSize * gridItems);\n\n // Bounds\n startIndex < 0 && (startIndex = 0);\n endIndex > count && (endIndex = count);\n visibleStartIndex < 0 && (visibleStartIndex = 0);\n visibleEndIndex > count && (visibleEndIndex = count);\n\n totalSize = Math.ceil(count / gridItems) * itemSize;\n }\n }\n\n if (endIndex - startIndex > config.itemsLimit) {\n this.itemsLimitError();\n }\n\n this.totalSize = totalSize;\n\n let view;\n\n const continuous = startIndex <= this.$_endIndex && endIndex >= this.$_startIndex;\n\n // Unuse views that are no longer visible\n if (continuous) {\n for (let i = 0, l = pool.length; i < l; i++) {\n view = pool[i];\n if (view.nr.used) {\n // Update view item index\n if (checkItem) {\n view.nr.index = itemIndexByKey[view.item[keyField]];\n }\n\n // Check if index is still in visible range\n if (\n view.nr.index == null ||\n view.nr.index < startIndex ||\n view.nr.index >= endIndex\n ) {\n this.unuseView(view);\n }\n }\n }\n }\n\n const unusedIndex = continuous ? null : new Map();\n\n let item, type;\n let v;\n for (let i = startIndex; i < endIndex; i++) {\n item = items[i];\n const key = keyField ? item[keyField] : item;\n if (key == null) {\n throw new Error(`Key is ${key} on item (keyField is '${keyField}')`)\n }\n view = views.get(key);\n\n if (!itemSize && !sizes[i].size) {\n if (view) this.unuseView(view);\n continue\n }\n\n type = item[typeField];\n\n let unusedPool = unusedViews.get(type);\n let newlyUsedView = false;\n\n // No view assigned to item\n if (!view) {\n if (continuous) {\n // Reuse existing view\n if (unusedPool && unusedPool.length) {\n view = unusedPool.pop();\n } else {\n view = this.addView(pool, i, item, key, type);\n }\n } else {\n // Use existing view\n // We don't care if they are already used\n // because we are not in continous scrolling\n v = unusedIndex.get(type) || 0;\n\n if (!unusedPool || v >= unusedPool.length) {\n view = this.addView(pool, i, item, key, type);\n this.unuseView(view, true);\n unusedPool = unusedViews.get(type);\n }\n\n view = unusedPool[v];\n unusedIndex.set(type, v + 1);\n }\n\n // Assign view to item\n views.delete(view.nr.key);\n view.nr.used = true;\n view.nr.index = i;\n view.nr.key = key;\n view.nr.type = type;\n views.set(key, view);\n\n newlyUsedView = true;\n } else {\n // View already assigned to item\n if (!view.nr.used) {\n view.nr.used = true;\n newlyUsedView = true;\n if (unusedPool) {\n const index = unusedPool.indexOf(view);\n if (index !== -1) unusedPool.splice(index, 1);\n }\n }\n }\n\n // Always set item in case it's a new object with the same key\n view.item = item;\n\n if (newlyUsedView) {\n if (i === items.length - 1) this.$emit('scroll-end');\n if (i === 0) this.$emit('scroll-start');\n }\n\n // Update position\n if (itemSize === null) {\n view.position = sizes[i - 1].accumulator;\n view.offset = 0;\n } else {\n view.position = Math.floor(i / gridItems) * itemSize;\n view.offset = (i % gridItems) * itemSecondarySize;\n }\n }\n\n this.$_startIndex = startIndex;\n this.$_endIndex = endIndex;\n\n if (this.emitUpdate) this.$emit('update', startIndex, endIndex, visibleStartIndex, visibleEndIndex);\n\n // After the user has finished scrolling\n // Sort views so text selection is correct\n clearTimeout(this.$_sortTimer);\n this.$_sortTimer = setTimeout(this.sortViews, this.updateInterval + 300);\n\n return {\n continuous,\n }\n },\n\n getListenerTarget () {\n let target = getScrollParent(this.$el);\n // Fix global scroll target for Chrome and Safari\n if (window.document && (target === window.document.documentElement || target === window.document.body)) {\n target = window;\n }\n return target\n },\n\n getScroll () {\n const { $el: el, direction } = this;\n const isVertical = direction === 'vertical';\n let scrollState;\n\n if (this.pageMode) {\n const bounds = el.getBoundingClientRect();\n const boundsSize = isVertical ? bounds.height : bounds.width;\n let start = -(isVertical ? bounds.top : bounds.left);\n let size = isVertical ? window.innerHeight : window.innerWidth;\n if (start < 0) {\n size += start;\n start = 0;\n }\n if (start + size > boundsSize) {\n size = boundsSize - start;\n }\n scrollState = {\n start,\n end: start + size,\n };\n } else if (isVertical) {\n scrollState = {\n start: el.scrollTop,\n end: el.scrollTop + el.clientHeight,\n };\n } else {\n scrollState = {\n start: el.scrollLeft,\n end: el.scrollLeft + el.clientWidth,\n };\n }\n\n return scrollState\n },\n\n applyPageMode () {\n if (this.pageMode) {\n this.addListeners();\n } else {\n this.removeListeners();\n }\n },\n\n addListeners () {\n this.listenerTarget = this.getListenerTarget();\n this.listenerTarget.addEventListener('scroll', this.handleScroll, supportsPassive\n ? {\n passive: true,\n }\n : false);\n this.listenerTarget.addEventListener('resize', this.handleResize);\n },\n\n removeListeners () {\n if (!this.listenerTarget) {\n return\n }\n\n this.listenerTarget.removeEventListener('scroll', this.handleScroll);\n this.listenerTarget.removeEventListener('resize', this.handleResize);\n\n this.listenerTarget = null;\n },\n\n scrollToItem (index) {\n let scroll;\n const gridItems = this.gridItems || 1;\n if (this.itemSize === null) {\n scroll = index > 0 ? this.sizes[index - 1].accumulator : 0;\n } else {\n scroll = Math.floor(index / gridItems) * this.itemSize;\n }\n this.scrollToPosition(scroll);\n },\n\n scrollToPosition (position) {\n const direction = this.direction === 'vertical'\n ? { scroll: 'scrollTop', start: 'top' }\n : { scroll: 'scrollLeft', start: 'left' };\n\n let viewport;\n let scrollDirection;\n let scrollDistance;\n\n if (this.pageMode) {\n const viewportEl = getScrollParent(this.$el);\n // HTML doesn't overflow like other elements\n const scrollTop = viewportEl.tagName === 'HTML' ? 0 : viewportEl[direction.scroll];\n const bounds = viewportEl.getBoundingClientRect();\n\n const scroller = this.$el.getBoundingClientRect();\n const scrollerPosition = scroller[direction.start] - bounds[direction.start];\n\n viewport = viewportEl;\n scrollDirection = direction.scroll;\n scrollDistance = position + scrollTop + scrollerPosition;\n } else {\n viewport = this.$el;\n scrollDirection = direction.scroll;\n scrollDistance = position;\n }\n\n viewport[scrollDirection] = scrollDistance;\n },\n\n itemsLimitError () {\n setTimeout(() => {\n console.log('It seems the scroller element isn\\'t scrolling, so it tries to render all the items at once.', 'Scroller:', this.$el);\n console.log('Make sure the scroller has a fixed height (or width) and \\'overflow-y\\' (or \\'overflow-x\\') set to \\'auto\\' so it can scroll correctly and only render the items visible in the scroll viewport.');\n });\n throw new Error('Rendered items limit reached')\n },\n\n sortViews () {\n this.pool.sort((viewA, viewB) => viewA.nr.index - viewB.nr.index);\n },\n },\n};\n\nconst _hoisted_1 = {\n key: 0,\n ref: \"before\",\n class: \"vue-recycle-scroller__slot\"\n};\nconst _hoisted_2 = {\n key: 1,\n ref: \"after\",\n class: \"vue-recycle-scroller__slot\"\n};\n\nfunction render$1(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_ResizeObserver = resolveComponent(\"ResizeObserver\");\n const _directive_observe_visibility = resolveDirective(\"observe-visibility\");\n\n return withDirectives((openBlock(), createElementBlock(\"div\", {\n class: normalizeClass([\"vue-recycle-scroller\", {\n ready: $data.ready,\n 'page-mode': $props.pageMode,\n [`direction-${_ctx.direction}`]: true,\n }]),\n onScrollPassive: _cache[0] || (_cache[0] = (...args) => ($options.handleScroll && $options.handleScroll(...args)))\n }, [\n (_ctx.$slots.before)\n ? (openBlock(), createElementBlock(\"div\", _hoisted_1, [\n renderSlot(_ctx.$slots, \"before\")\n ], 512 /* NEED_PATCH */))\n : createCommentVNode(\"v-if\", true),\n (openBlock(), createBlock(resolveDynamicComponent($props.listTag), {\n ref: \"wrapper\",\n style: normalizeStyle({ [_ctx.direction === 'vertical' ? 'minHeight' : 'minWidth']: $data.totalSize + 'px' }),\n class: normalizeClass([\"vue-recycle-scroller__item-wrapper\", $props.listClass])\n }, {\n default: withCtx(() => [\n (openBlock(true), createElementBlock(Fragment, null, renderList($data.pool, (view) => {\n return (openBlock(), createBlock(resolveDynamicComponent($props.itemTag), mergeProps({\n key: view.nr.id,\n style: $data.ready ? {\n transform: `translate${_ctx.direction === 'vertical' ? 'Y' : 'X'}(${view.position}px) translate${_ctx.direction === 'vertical' ? 'X' : 'Y'}(${view.offset}px)`,\n width: $props.gridItems ? `${_ctx.direction === 'vertical' ? $props.itemSecondarySize || $props.itemSize : $props.itemSize}px` : undefined,\n height: $props.gridItems ? `${_ctx.direction === 'horizontal' ? $props.itemSecondarySize || $props.itemSize : $props.itemSize}px` : undefined,\n } : null,\n class: [\"vue-recycle-scroller__item-view\", [\n $props.itemClass,\n {\n hover: !$props.skipHover && $data.hoverKey === view.nr.key\n },\n ]]\n }, toHandlers($props.skipHover ? {} : {\n mouseenter: () => { $data.hoverKey = view.nr.key; },\n mouseleave: () => { $data.hoverKey = null; },\n })), {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"default\", {\n item: view.item,\n index: view.nr.index,\n active: view.nr.used\n })\n ]),\n _: 2 /* DYNAMIC */\n }, 1040 /* FULL_PROPS, DYNAMIC_SLOTS */, [\"style\", \"class\"]))\n }), 128 /* KEYED_FRAGMENT */)),\n renderSlot(_ctx.$slots, \"empty\")\n ]),\n _: 3 /* FORWARDED */\n }, 8 /* PROPS */, [\"style\", \"class\"])),\n (_ctx.$slots.after)\n ? (openBlock(), createElementBlock(\"div\", _hoisted_2, [\n renderSlot(_ctx.$slots, \"after\")\n ], 512 /* NEED_PATCH */))\n : createCommentVNode(\"v-if\", true),\n createVNode(_component_ResizeObserver, { onNotify: $options.handleResize }, null, 8 /* PROPS */, [\"onNotify\"])\n ], 34 /* CLASS, HYDRATE_EVENTS */)), [\n [_directive_observe_visibility, $options.handleVisibilityChange]\n ])\n}\n\nscript$2.render = render$1;\nscript$2.__file = \"src/components/RecycleScroller.vue\";\n\nvar script$1 = {\n name: 'DynamicScroller',\n\n components: {\n RecycleScroller: script$2,\n },\n\n provide () {\n if (typeof ResizeObserver !== 'undefined') {\n this.$_resizeObserver = new ResizeObserver(entries => {\n requestAnimationFrame(() => {\n if (!Array.isArray(entries)) {\n return\n }\n for (const entry of entries) {\n if (entry.target && entry.target.$_vs_onResize) {\n let width, height;\n if (entry.borderBoxSize) {\n const resizeObserverSize = entry.borderBoxSize[0];\n width = resizeObserverSize.inlineSize;\n height = resizeObserverSize.blockSize;\n } else {\n // @TODO remove when contentRect is deprecated\n width = entry.contentRect.width;\n height = entry.contentRect.height;\n }\n entry.target.$_vs_onResize(entry.target.$_vs_id, width, height);\n }\n }\n });\n });\n }\n\n return {\n vscrollData: this.vscrollData,\n vscrollParent: this,\n vscrollResizeObserver: this.$_resizeObserver,\n }\n },\n\n inheritAttrs: false,\n\n props: {\n ...props,\n\n minItemSize: {\n type: [Number, String],\n required: true,\n },\n },\n\n emits: [\n 'resize',\n 'visible',\n ],\n\n data () {\n return {\n vscrollData: {\n active: true,\n sizes: {},\n keyField: this.keyField,\n simpleArray: false,\n },\n }\n },\n\n computed: {\n simpleArray,\n\n itemsWithSize () {\n const result = [];\n const { items, keyField, simpleArray } = this;\n const sizes = this.vscrollData.sizes;\n const l = items.length;\n for (let i = 0; i < l; i++) {\n const item = items[i];\n const id = simpleArray ? i : item[keyField];\n let size = sizes[id];\n if (typeof size === 'undefined' && !this.$_undefinedMap[id]) {\n size = 0;\n }\n result.push({\n item,\n id,\n size,\n });\n }\n return result\n },\n },\n\n watch: {\n items () {\n this.forceUpdate();\n },\n\n simpleArray: {\n handler (value) {\n this.vscrollData.simpleArray = value;\n },\n immediate: true,\n },\n\n direction (value) {\n this.forceUpdate(true);\n },\n\n itemsWithSize (next, prev) {\n const scrollTop = this.$el.scrollTop;\n\n // Calculate total diff between prev and next sizes\n // over current scroll top. Then add it to scrollTop to\n // avoid jumping the contents that the user is seeing.\n let prevActiveTop = 0; let activeTop = 0;\n const length = Math.min(next.length, prev.length);\n for (let i = 0; i < length; i++) {\n if (prevActiveTop >= scrollTop) {\n break\n }\n prevActiveTop += prev[i].size || this.minItemSize;\n activeTop += next[i].size || this.minItemSize;\n }\n const offset = activeTop - prevActiveTop;\n\n if (offset === 0) {\n return\n }\n\n this.$el.scrollTop += offset;\n },\n },\n\n beforeCreate () {\n this.$_updates = [];\n this.$_undefinedSizes = 0;\n this.$_undefinedMap = {};\n this.$_events = mitt();\n },\n\n activated () {\n this.vscrollData.active = true;\n },\n\n deactivated () {\n this.vscrollData.active = false;\n },\n\n unmounted () {\n this.$_events.all.clear();\n },\n\n methods: {\n onScrollerResize () {\n const scroller = this.$refs.scroller;\n if (scroller) {\n this.forceUpdate();\n }\n this.$emit('resize');\n },\n\n onScrollerVisible () {\n this.$_events.emit('vscroll:update', { force: false });\n this.$emit('visible');\n },\n\n forceUpdate (clear = false) {\n if (clear || this.simpleArray) {\n this.vscrollData.sizes = {};\n }\n this.$_events.emit('vscroll:update', { force: true });\n },\n\n scrollToItem (index) {\n const scroller = this.$refs.scroller;\n if (scroller) scroller.scrollToItem(index);\n },\n\n getItemSize (item, index = undefined) {\n const id = this.simpleArray ? (index != null ? index : this.items.indexOf(item)) : item[this.keyField];\n return this.vscrollData.sizes[id] || 0\n },\n\n scrollToBottom () {\n if (this.$_scrollingToBottom) return\n this.$_scrollingToBottom = true;\n const el = this.$el;\n // Item is inserted to the DOM\n this.$nextTick(() => {\n el.scrollTop = el.scrollHeight + 5000;\n // Item sizes are computed\n const cb = () => {\n el.scrollTop = el.scrollHeight + 5000;\n requestAnimationFrame(() => {\n el.scrollTop = el.scrollHeight + 5000;\n if (this.$_undefinedSizes === 0) {\n this.$_scrollingToBottom = false;\n } else {\n requestAnimationFrame(cb);\n }\n });\n };\n requestAnimationFrame(cb);\n });\n },\n },\n};\n\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_RecycleScroller = resolveComponent(\"RecycleScroller\");\n\n return (openBlock(), createBlock(_component_RecycleScroller, mergeProps({\n ref: \"scroller\",\n items: $options.itemsWithSize,\n \"min-item-size\": $props.minItemSize,\n direction: _ctx.direction,\n \"key-field\": \"id\",\n \"list-tag\": _ctx.listTag,\n \"item-tag\": _ctx.itemTag\n }, _ctx.$attrs, {\n onResize: $options.onScrollerResize,\n onVisible: $options.onScrollerVisible\n }), {\n default: withCtx(({ item: itemWithSize, index, active }) => [\n renderSlot(_ctx.$slots, \"default\", normalizeProps(guardReactiveProps({\n item: itemWithSize.item,\n index,\n active,\n itemWithSize\n })))\n ]),\n before: withCtx(() => [\n renderSlot(_ctx.$slots, \"before\")\n ]),\n after: withCtx(() => [\n renderSlot(_ctx.$slots, \"after\")\n ]),\n empty: withCtx(() => [\n renderSlot(_ctx.$slots, \"empty\")\n ]),\n _: 3 /* FORWARDED */\n }, 16 /* FULL_PROPS */, [\"items\", \"min-item-size\", \"direction\", \"list-tag\", \"item-tag\", \"onResize\", \"onVisible\"]))\n}\n\nscript$1.render = render;\nscript$1.__file = \"src/components/DynamicScroller.vue\";\n\nvar script = {\n name: 'DynamicScrollerItem',\n\n inject: [\n 'vscrollData',\n 'vscrollParent',\n 'vscrollResizeObserver',\n ],\n\n props: {\n // eslint-disable-next-line vue/require-prop-types\n item: {\n required: true,\n },\n\n watchData: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Indicates if the view is actively used to display an item.\n */\n active: {\n type: Boolean,\n required: true,\n },\n\n index: {\n type: Number,\n default: undefined,\n },\n\n sizeDependencies: {\n type: [Array, Object],\n default: null,\n },\n\n emitResize: {\n type: Boolean,\n default: false,\n },\n\n tag: {\n type: String,\n default: 'div',\n },\n },\n\n emits: [\n 'resize',\n ],\n\n computed: {\n id () {\n if (this.vscrollData.simpleArray) return this.index\n // eslint-disable-next-line no-prototype-builtins\n if (this.vscrollData.keyField in this.item) return this.item[this.vscrollData.keyField]\n throw new Error(`keyField '${this.vscrollData.keyField}' not found in your item. You should set a valid keyField prop on your Scroller`)\n },\n\n size () {\n return this.vscrollData.sizes[this.id] || 0\n },\n\n finalActive () {\n return this.active && this.vscrollData.active\n },\n },\n\n watch: {\n watchData: 'updateWatchData',\n\n id (value, oldValue) {\n this.$el.$_vs_id = this.id;\n if (!this.size) {\n this.onDataUpdate();\n }\n\n if (this.$_sizeObserved) {\n // In case the old item had the same size, it won't trigger the ResizeObserver\n // since we are reusing the same DOM node\n const oldSize = this.vscrollData.sizes[oldValue];\n const size = this.vscrollData.sizes[value];\n if (oldSize != null && oldSize !== size) {\n this.applySize(oldSize);\n }\n }\n },\n\n finalActive (value) {\n if (!this.size) {\n if (value) {\n if (!this.vscrollParent.$_undefinedMap[this.id]) {\n this.vscrollParent.$_undefinedSizes++;\n this.vscrollParent.$_undefinedMap[this.id] = true;\n }\n } else {\n if (this.vscrollParent.$_undefinedMap[this.id]) {\n this.vscrollParent.$_undefinedSizes--;\n this.vscrollParent.$_undefinedMap[this.id] = false;\n }\n }\n }\n\n if (this.vscrollResizeObserver) {\n if (value) {\n this.observeSize();\n } else {\n this.unobserveSize();\n }\n } else if (value && this.$_pendingVScrollUpdate === this.id) {\n this.updateSize();\n }\n },\n },\n\n created () {\n if (this.$isServer) return\n\n this.$_forceNextVScrollUpdate = null;\n this.updateWatchData();\n\n if (!this.vscrollResizeObserver) {\n for (const k in this.sizeDependencies) {\n this.$watch(() => this.sizeDependencies[k], this.onDataUpdate);\n }\n\n this.vscrollParent.$_events.on('vscroll:update', this.onVscrollUpdate);\n }\n },\n\n mounted () {\n if (this.finalActive) {\n this.updateSize();\n this.observeSize();\n }\n },\n\n beforeUnmount () {\n this.vscrollParent.$_events.off('vscroll:update', this.onVscrollUpdate);\n this.unobserveSize();\n },\n\n methods: {\n updateSize () {\n if (this.finalActive) {\n if (this.$_pendingSizeUpdate !== this.id) {\n this.$_pendingSizeUpdate = this.id;\n this.$_forceNextVScrollUpdate = null;\n this.$_pendingVScrollUpdate = null;\n this.computeSize(this.id);\n }\n } else {\n this.$_forceNextVScrollUpdate = this.id;\n }\n },\n\n updateWatchData () {\n if (this.watchData && !this.vscrollResizeObserver) {\n this.$_watchData = this.$watch('item', () => {\n this.onDataUpdate();\n }, {\n deep: true,\n });\n } else if (this.$_watchData) {\n this.$_watchData();\n this.$_watchData = null;\n }\n },\n\n onVscrollUpdate ({ force }) {\n // If not active, sechedule a size update when it becomes active\n if (!this.finalActive && force) {\n this.$_pendingVScrollUpdate = this.id;\n }\n\n if (this.$_forceNextVScrollUpdate === this.id || force || !this.size) {\n this.updateSize();\n }\n },\n\n onDataUpdate () {\n this.updateSize();\n },\n\n computeSize (id) {\n this.$nextTick(() => {\n if (this.id === id) {\n const width = this.$el.offsetWidth;\n const height = this.$el.offsetHeight;\n this.applyWidthHeight(width, height);\n }\n this.$_pendingSizeUpdate = null;\n });\n },\n\n applyWidthHeight (width, height) {\n const size = ~~(this.vscrollParent.direction === 'vertical' ? height : width);\n if (size && this.size !== size) {\n this.applySize(size);\n }\n },\n\n applySize (size) {\n if (this.vscrollParent.$_undefinedMap[this.id]) {\n this.vscrollParent.$_undefinedSizes--;\n this.vscrollParent.$_undefinedMap[this.id] = undefined;\n }\n this.vscrollData.sizes[this.id] = size;\n if (this.emitResize) this.$emit('resize', this.id);\n },\n\n observeSize () {\n if (!this.vscrollResizeObserver) return\n if (this.$_sizeObserved) return\n this.vscrollResizeObserver.observe(this.$el);\n this.$el.$_vs_id = this.id;\n this.$el.$_vs_onResize = this.onResize;\n this.$_sizeObserved = true;\n },\n\n unobserveSize () {\n if (!this.vscrollResizeObserver) return\n if (!this.$_sizeObserved) return\n this.vscrollResizeObserver.unobserve(this.$el);\n this.$el.$_vs_onResize = undefined;\n this.$_sizeObserved = false;\n },\n\n onResize (id, width, height) {\n if (this.id === id) {\n this.applyWidthHeight(width, height);\n }\n },\n },\n\n render () {\n return h(this.tag, this.$slots.default())\n },\n};\n\nscript.__file = \"src/components/DynamicScrollerItem.vue\";\n\nfunction IdState () {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$idProp = _ref.idProp,\n idProp = _ref$idProp === void 0 ? function (vm) {\n return vm.item.id;\n } : _ref$idProp;\n var store = reactive({});\n\n // @vue/component\n return {\n data: function data() {\n return {\n idState: null\n };\n },\n created: function created() {\n var _this = this;\n this.$_id = null;\n if (typeof idProp === 'function') {\n this.$_getId = function () {\n return idProp.call(_this, _this);\n };\n } else {\n this.$_getId = function () {\n return _this[idProp];\n };\n }\n this.$watch(this.$_getId, {\n handler: function handler(value) {\n var _this2 = this;\n this.$nextTick(function () {\n _this2.$_id = value;\n });\n },\n immediate: true\n });\n this.$_updateIdState();\n },\n beforeUpdate: function beforeUpdate() {\n this.$_updateIdState();\n },\n methods: {\n /**\n * Initialize an idState\n * @param {number|string} id Unique id for the data\n */$_idStateInit: function $_idStateInit(id) {\n var factory = this.$options.idState;\n if (typeof factory === 'function') {\n var data = factory.call(this, this);\n store[id] = data;\n this.$_id = id;\n return data;\n } else {\n throw new Error('[mixin IdState] Missing `idState` function on component definition.');\n }\n },\n /**\n * Ensure idState is created and up-to-date\n */$_updateIdState: function $_updateIdState() {\n var id = this.$_getId();\n if (id == null) {\n console.warn(\"No id found for IdState with idProp: '\".concat(idProp, \"'.\"));\n }\n if (id !== this.$_id) {\n if (!store[id]) {\n this.$_idStateInit(id);\n }\n this.idState = store[id];\n }\n }\n }\n };\n}\n\nfunction registerComponents(app, prefix) {\n app.component(\"\".concat(prefix, \"recycle-scroller\"), script$2);\n app.component(\"\".concat(prefix, \"RecycleScroller\"), script$2);\n app.component(\"\".concat(prefix, \"dynamic-scroller\"), script$1);\n app.component(\"\".concat(prefix, \"DynamicScroller\"), script$1);\n app.component(\"\".concat(prefix, \"dynamic-scroller-item\"), script);\n app.component(\"\".concat(prefix, \"DynamicScrollerItem\"), script);\n}\nvar plugin = {\n // eslint-disable-next-line no-undef\n version: \"2.0.0-beta.8\",\n install: function install(app, options) {\n var finalOptions = Object.assign({}, {\n installComponents: true,\n componentsPrefix: ''\n }, options);\n for (var key in finalOptions) {\n if (typeof finalOptions[key] !== 'undefined') {\n config[key] = finalOptions[key];\n }\n }\n if (finalOptions.installComponents) {\n registerComponents(app, finalOptions.componentsPrefix);\n }\n }\n};\n\nexport { script$1 as DynamicScroller, script as DynamicScrollerItem, IdState, script$2 as RecycleScroller, plugin as default };\n//# sourceMappingURL=vue-virtual-scroller.esm.js.map\n","<script>\nexport default {\n props: {\n selectedValue: {\n type: String,\n required: true,\n },\n items: {\n type: Array,\n required: true,\n },\n type: {\n type: String,\n required: true,\n },\n pathPrefix: {\n type: String,\n required: true,\n },\n },\n emits: ['onChangeFilter'],\n data() {\n return {\n activeValue: this.selectedValue,\n };\n },\n methods: {\n onTabChange() {\n if (this.type === 'status') {\n this.$store.dispatch('setChatStatusFilter', this.activeValue);\n } else {\n this.$store.dispatch('setChatSortFilter', this.activeValue);\n }\n this.$emit('onChangeFilter', this.activeValue, this.type);\n },\n },\n};\n</script>\n\n<template>\n <select\n v-model=\"activeValue\"\n class=\"w-32 h-6 py-0 pl-2 pr-6 mx-1 my-0 text-xs border border-solid bg-n-slate-3 dark:bg-n-solid-3 border-n-weak dark:border-n-weak text-n-slate-12\"\n @change=\"onTabChange()\"\n >\n <option v-for=\"value in items\" :key=\"value\" :value=\"value\">\n {{ $t(`${pathPrefix}.${value}.TEXT`) }}\n </option>\n </select>\n</template>\n","<script>\nimport wootConstants from 'dashboard/constants/globals';\nimport { mapGetters } from 'vuex';\nimport FilterItem from './FilterItem.vue';\nimport { useUISettings } from 'dashboard/composables/useUISettings';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nconst CHAT_STATUS_FILTER_ITEMS = Object.freeze([\n 'open',\n 'resolved',\n 'pending',\n 'snoozed',\n 'all',\n]);\n\nconst SORT_ORDER_ITEMS = Object.freeze([\n 'last_activity_at_asc',\n 'last_activity_at_desc',\n 'created_at_desc',\n 'created_at_asc',\n 'priority_desc',\n 'priority_asc',\n 'waiting_since_asc',\n 'waiting_since_desc',\n]);\n\nexport default {\n components: {\n FilterItem,\n NextButton,\n },\n props: {\n isOnExpandedLayout: {\n type: Boolean,\n required: true,\n },\n },\n emits: ['changeFilter'],\n setup() {\n const { updateUISettings } = useUISettings();\n\n return {\n updateUISettings,\n };\n },\n data() {\n return {\n showActionsDropdown: false,\n chatStatusItems: CHAT_STATUS_FILTER_ITEMS,\n chatSortItems: SORT_ORDER_ITEMS,\n };\n },\n computed: {\n ...mapGetters({\n chatStatusFilter: 'getChatStatusFilter',\n chatSortFilter: 'getChatSortFilter',\n }),\n chatStatus() {\n return this.chatStatusFilter || wootConstants.STATUS_TYPE.OPEN;\n },\n sortFilter() {\n return (\n this.chatSortFilter || wootConstants.SORT_BY_TYPE.LAST_ACTIVITY_AT_DESC\n );\n },\n },\n methods: {\n onTabChange(value) {\n this.$emit('changeFilter', value);\n this.closeDropdown();\n },\n toggleDropdown() {\n this.showActionsDropdown = !this.showActionsDropdown;\n },\n closeDropdown() {\n this.showActionsDropdown = false;\n },\n onChangeFilter(value, type) {\n this.$emit('changeFilter', value, type);\n this.saveSelectedFilter(type, value);\n },\n saveSelectedFilter(type, value) {\n this.updateUISettings({\n conversations_filter_by: {\n status: type === 'status' ? value : this.chatStatus,\n order_by: type === 'sort' ? value : this.sortFilter,\n },\n });\n },\n },\n};\n</script>\n\n<template>\n <div class=\"relative flex\">\n <NextButton\n v-tooltip.right=\"$t('CHAT_LIST.SORT_TOOLTIP_LABEL')\"\n icon=\"i-lucide-arrow-up-down\"\n slate\n faded\n xs\n @click=\"toggleDropdown\"\n />\n <div\n v-if=\"showActionsDropdown\"\n v-on-clickaway=\"closeDropdown\"\n class=\"mt-1 dropdown-pane dropdown-pane--open !w-52 !p-4 top-6 border !border-n-weak dark:!border-n-weak !bg-n-alpha-3 dark:!bg-n-alpha-3 backdrop-blur-[100px]\"\n :class=\"{\n 'ltr:left-0 rtl:right-0': !isOnExpandedLayout,\n 'ltr:right-0 rtl:left-0': isOnExpandedLayout,\n }\"\n >\n <div class=\"flex items-center justify-between last:mt-4\">\n <span class=\"text-xs font-medium text-n-slate-12\">{{\n $t('CHAT_LIST.CHAT_SORT.STATUS')\n }}</span>\n <FilterItem\n type=\"status\"\n :selected-value=\"chatStatus\"\n :items=\"chatStatusItems\"\n path-prefix=\"CHAT_LIST.CHAT_STATUS_FILTER_ITEMS\"\n @on-change-filter=\"onChangeFilter\"\n />\n </div>\n <div class=\"flex items-center justify-between last:mt-4\">\n <span class=\"text-xs font-medium text-n-slate-12\">{{\n $t('CHAT_LIST.CHAT_SORT.ORDER_BY')\n }}</span>\n <FilterItem\n type=\"sort\"\n :selected-value=\"sortFilter\"\n :items=\"chatSortItems\"\n path-prefix=\"CHAT_LIST.SORT_ORDER_ITEMS\"\n @on-change-filter=\"onChangeFilter\"\n />\n </div>\n </div>\n </div>\n</template>\n","<script>\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n NextButton,\n },\n props: {\n isOnExpandedLayout: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['toggle'],\n methods: {\n toggle() {\n this.$emit('toggle');\n },\n },\n};\n</script>\n\n<template>\n <NextButton\n v-tooltip.left=\"$t('CONVERSATION.SWITCH_VIEW_LAYOUT')\"\n :icon=\"\n isOnExpandedLayout\n ? 'i-lucide-arrow-left-to-line'\n : 'i-lucide-arrow-right-to-line'\n \"\n slate\n xs\n faded\n class=\"flex-shrink-0 rtl:rotate-180 ltr:rotate-0\"\n @click=\"toggle\"\n />\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useUISettings } from 'dashboard/composables/useUISettings';\nimport { useMapGetter } from 'dashboard/composables/store.js';\nimport wootConstants from 'dashboard/constants/globals';\nimport { FEATURE_FLAGS } from 'dashboard/featureFlags';\n\nimport ConversationBasicFilter from './widgets/conversation/ConversationBasicFilter.vue';\nimport SwitchLayout from 'dashboard/routes/dashboard/conversation/search/SwitchLayout.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n pageTitle: {\n type: String,\n required: true,\n },\n hasAppliedFilters: {\n type: Boolean,\n required: true,\n },\n hasActiveFolders: {\n type: Boolean,\n required: true,\n },\n activeStatus: {\n type: String,\n required: true,\n },\n isOnExpandedLayout: {\n type: Boolean,\n required: true,\n },\n});\n\nconst emit = defineEmits([\n 'addFolders',\n 'deleteFolders',\n 'resetFilters',\n 'basicFilterChange',\n 'filtersModal',\n]);\n\nconst { uiSettings, updateUISettings } = useUISettings();\n\nconst currentAccountId = useMapGetter('getCurrentAccountId');\nconst isFeatureEnabledonAccount = useMapGetter(\n 'accounts/isFeatureEnabledonAccount'\n);\n\nconst onBasicFilterChange = (value, type) => {\n emit('basicFilterChange', value, type);\n};\n\nconst hasAppliedFiltersOrActiveFolders = computed(() => {\n return props.hasAppliedFilters || props.hasActiveFolders;\n});\n\nconst showV4View = computed(() => {\n return isFeatureEnabledonAccount.value(\n currentAccountId.value,\n FEATURE_FLAGS.CHATWOOT_V4\n );\n});\n\nconst toggleConversationLayout = () => {\n const { LAYOUT_TYPES } = wootConstants;\n const {\n conversation_display_type: conversationDisplayType = LAYOUT_TYPES.CONDENSED,\n } = uiSettings.value;\n const newViewType =\n conversationDisplayType === LAYOUT_TYPES.CONDENSED\n ? LAYOUT_TYPES.EXPANDED\n : LAYOUT_TYPES.CONDENSED;\n updateUISettings({\n conversation_display_type: newViewType,\n previously_used_conversation_display_type: newViewType,\n });\n};\n</script>\n\n<template>\n <div\n class=\"flex items-center justify-between gap-2 px-4\"\n :class=\"{\n 'pb-3 border-b border-n-strong': hasAppliedFiltersOrActiveFolders,\n 'pt-3 pb-2': showV4View,\n 'mb-2 pb-0': !showV4View,\n }\"\n >\n <div class=\"flex items-center justify-center min-w-0\">\n <h1\n class=\"text-lg font-medium truncate text-n-slate-12\"\n :title=\"pageTitle\"\n >\n {{ pageTitle }}\n </h1>\n <span\n v-if=\"!hasAppliedFiltersOrActiveFolders\"\n class=\"px-2 py-1 my-0.5 mx-1 rounded-md capitalize bg-n-slate-3 text-xxs text-n-slate-12 shrink-0\"\n >\n {{ $t(`CHAT_LIST.CHAT_STATUS_FILTER_ITEMS.${activeStatus}.TEXT`) }}\n </span>\n </div>\n <div class=\"flex items-center gap-1\">\n <template v-if=\"hasAppliedFilters && !hasActiveFolders\">\n <div class=\"relative\">\n <NextButton\n v-tooltip.top-end=\"$t('FILTER.CUSTOM_VIEWS.ADD.SAVE_BUTTON')\"\n icon=\"i-lucide-save\"\n slate\n xs\n faded\n @click=\"emit('addFolders')\"\n />\n <div\n id=\"saveFilterTeleportTarget\"\n class=\"absolute z-40 mt-2\"\n :class=\"{ 'ltr:right-0 rtl:left-0': isOnExpandedLayout }\"\n />\n </div>\n <NextButton\n v-tooltip.top-end=\"$t('FILTER.CLEAR_BUTTON_LABEL')\"\n icon=\"i-lucide-circle-x\"\n ruby\n faded\n xs\n @click=\"emit('resetFilters')\"\n />\n </template>\n <template v-if=\"hasActiveFolders\">\n <div class=\"relative\">\n <NextButton\n id=\"toggleConversationFilterButton\"\n v-tooltip.top-end=\"$t('FILTER.CUSTOM_VIEWS.EDIT.EDIT_BUTTON')\"\n icon=\"i-lucide-pen-line\"\n slate\n xs\n faded\n @click=\"emit('filtersModal')\"\n />\n <div\n id=\"conversationFilterTeleportTarget\"\n class=\"absolute z-40 mt-2\"\n :class=\"{ 'ltr:right-0 rtl:left-0': isOnExpandedLayout }\"\n />\n </div>\n <NextButton\n id=\"toggleConversationFilterButton\"\n v-tooltip.top-end=\"$t('FILTER.CUSTOM_VIEWS.DELETE.DELETE_BUTTON')\"\n icon=\"i-lucide-trash-2\"\n ruby\n xs\n faded\n @click=\"emit('deleteFolders')\"\n />\n </template>\n <div v-else class=\"relative\">\n <NextButton\n id=\"toggleConversationFilterButton\"\n v-tooltip.right=\"$t('FILTER.TOOLTIP_LABEL')\"\n icon=\"i-lucide-list-filter\"\n slate\n xs\n faded\n @click=\"emit('filtersModal')\"\n />\n <div\n id=\"conversationFilterTeleportTarget\"\n class=\"absolute z-40 mt-2\"\n :class=\"{ 'ltr:right-0 rtl:left-0': isOnExpandedLayout }\"\n />\n </div>\n <ConversationBasicFilter\n v-if=\"!hasAppliedFiltersOrActiveFolders\"\n :is-on-expanded-layout=\"isOnExpandedLayout\"\n @change-filter=\"onBasicFilterChange\"\n />\n <SwitchLayout\n v-if=\"showV4View\"\n :is-on-expanded-layout=\"isOnExpandedLayout\"\n @toggle=\"toggleConversationLayout\"\n />\n </div>\n </div>\n</template>\n","import { computed, h } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\n/**\n * @typedef {Object} FilterOperations\n * @property {string} EQUAL_TO - Equals comparison\n * @property {string} NOT_EQUAL_TO - Not equals comparison\n * @property {string} IS_PRESENT - Present check\n * @property {string} IS_NOT_PRESENT - Not present check\n * @property {string} CONTAINS - Contains check\n * @property {string} DOES_NOT_CONTAIN - Does not contain check\n * @property {string} IS_GREATER_THAN - Greater than comparison\n * @property {string} IS_LESS_THAN - Less than comparison\n * @property {string} DAYS_BEFORE - Days before check\n * @property {string} STARTS_WITH - Starts with check\n */\n\n/**\n * @typedef {Object} Operator\n * @property {string} value - Operator value from FILTER_OPS\n * @property {string} label - Translated display label\n * @property {import('vue').VNode} icon - Vue icon component instance\n * @property {string|null} inputOverride - Input field type override\n * @property {boolean} hasInput - Whether operator requires an input value\n */\n\nconst FILTER_OPS = {\n EQUAL_TO: 'equal_to',\n NOT_EQUAL_TO: 'not_equal_to',\n IS_PRESENT: 'is_present',\n IS_NOT_PRESENT: 'is_not_present',\n CONTAINS: 'contains',\n DOES_NOT_CONTAIN: 'does_not_contain',\n IS_GREATER_THAN: 'is_greater_than',\n IS_LESS_THAN: 'is_less_than',\n DAYS_BEFORE: 'days_before',\n STARTS_WITH: 'starts_with',\n};\n\nconst NO_INPUT_OPTS = [FILTER_OPS.IS_PRESENT, FILTER_OPS.IS_NOT_PRESENT];\n\nconst OPS_INPUT_OVERRIDE = {\n [FILTER_OPS.DAYS_BEFORE]: 'plainText',\n};\n\n/**\n * @type {Record<string, string>}\n */\nconst filterOperatorIcon = {\n [FILTER_OPS.EQUAL_TO]: 'i-ph-equals-bold',\n [FILTER_OPS.NOT_EQUAL_TO]: 'i-ph-not-equals-bold',\n [FILTER_OPS.IS_PRESENT]: 'i-ph-member-of-bold',\n [FILTER_OPS.IS_NOT_PRESENT]: 'i-ph-not-member-of-bold',\n [FILTER_OPS.CONTAINS]: 'i-ph-superset-of-bold',\n [FILTER_OPS.DOES_NOT_CONTAIN]: 'i-ph-not-superset-of-bold',\n [FILTER_OPS.IS_GREATER_THAN]: 'i-ph-greater-than-bold',\n [FILTER_OPS.IS_LESS_THAN]: 'i-ph-less-than-bold',\n [FILTER_OPS.DAYS_BEFORE]: 'i-ph-calendar-minus-bold',\n [FILTER_OPS.STARTS_WITH]: 'i-ph-caret-line-right-bold',\n};\n\n/**\n * Vue composable providing access to filter operators and related functionality\n * @returns {Object} Collection of operators and utility functions\n * @property {import('vue').ComputedRef<Record<string, Operator>>} operators - All available operators\n * @property {import('vue').ComputedRef<Operator[]>} equalityOperators - Equality comparison operators\n * @property {import('vue').ComputedRef<Operator[]>} presenceOperators - Presence check operators\n * @property {import('vue').ComputedRef<Operator[]>} containmentOperators - Containment check operators\n * @property {import('vue').ComputedRef<Operator[]>} comparisonOperators - Numeric comparison operators\n * @property {import('vue').ComputedRef<Operator[]>} dateOperators - Date-specific operators\n * @property {(key: 'list'|'text'|'number'|'link'|'date'|'checkbox') => Operator[]} getOperatorTypes - Get operators for a field type\n */\nexport function useOperators() {\n const { t } = useI18n();\n\n /** @type {import('vue').ComputedRef<Record<string, Operator>>} */\n const operators = computed(() => {\n return Object.values(FILTER_OPS).reduce((acc, value) => {\n acc[value] = {\n value,\n label: t(`FILTER.OPERATOR_LABELS.${value}`),\n hasInput: !NO_INPUT_OPTS.includes(value),\n inputOverride: OPS_INPUT_OVERRIDE[value] || null,\n icon: h('span', {\n class: `${filterOperatorIcon[value]} !text-n-blue-text`,\n }),\n };\n return acc;\n }, {});\n });\n\n /** @type {import('vue').ComputedRef<Array<Operator>>} */\n const equalityOperators = computed(() => [\n operators.value[FILTER_OPS.EQUAL_TO],\n operators.value[FILTER_OPS.NOT_EQUAL_TO],\n ]);\n\n /** @type {import('vue').ComputedRef<Array<Operator>>} */\n const presenceOperators = computed(() => [\n operators.value[FILTER_OPS.EQUAL_TO],\n operators.value[FILTER_OPS.NOT_EQUAL_TO],\n operators.value[FILTER_OPS.IS_PRESENT],\n operators.value[FILTER_OPS.IS_NOT_PRESENT],\n ]);\n\n /** @type {import('vue').ComputedRef<Array<Operator>>} */\n const containmentOperators = computed(() => [\n operators.value[FILTER_OPS.EQUAL_TO],\n operators.value[FILTER_OPS.NOT_EQUAL_TO],\n operators.value[FILTER_OPS.CONTAINS],\n operators.value[FILTER_OPS.DOES_NOT_CONTAIN],\n ]);\n\n /** @type {import('vue').ComputedRef<Array<Operator>>} */\n const comparisonOperators = computed(() => [\n operators.value[FILTER_OPS.EQUAL_TO],\n operators.value[FILTER_OPS.NOT_EQUAL_TO],\n operators.value[FILTER_OPS.IS_PRESENT],\n operators.value[FILTER_OPS.IS_NOT_PRESENT],\n operators.value[FILTER_OPS.IS_GREATER_THAN],\n operators.value[FILTER_OPS.IS_LESS_THAN],\n ]);\n\n /** @type {import('vue').ComputedRef<Array<Operator>>} */\n const dateOperators = computed(() => [\n operators.value[FILTER_OPS.IS_GREATER_THAN],\n operators.value[FILTER_OPS.IS_LESS_THAN],\n operators.value[FILTER_OPS.DAYS_BEFORE],\n ]);\n\n /**\n * Get operator types based on key\n * @param {string} key - Type of operator to get\n * @returns {Array<Operator>}\n */\n const getOperatorTypes = key => {\n switch (key) {\n case 'list':\n return equalityOperators.value;\n case 'text':\n return containmentOperators.value;\n case 'number':\n return equalityOperators.value;\n case 'link':\n return equalityOperators.value;\n case 'date':\n return comparisonOperators.value;\n case 'checkbox':\n return equalityOperators.value;\n default:\n return equalityOperators.value;\n }\n };\n\n return {\n operators,\n equalityOperators,\n presenceOperators,\n containmentOperators,\n comparisonOperators,\n dateOperators,\n getOperatorTypes,\n };\n}\n","/**\n * Standard attributes of the conversation model\n */\nexport const CONVERSATION_ATTRIBUTES = {\n STATUS: 'status',\n PRIORITY: 'priority',\n ASSIGNEE_ID: 'assignee_id',\n INBOX_ID: 'inbox_id',\n TEAM_ID: 'team_id',\n DISPLAY_ID: 'display_id',\n CAMPAIGN_ID: 'campaign_id',\n LABELS: 'labels',\n BROWSER_LANGUAGE: 'browser_language',\n COUNTRY_CODE: 'country_code',\n REFERER: 'referer',\n CREATED_AT: 'created_at',\n LAST_ACTIVITY_AT: 'last_activity_at',\n};\n\nexport const CONTACT_ATTRIBUTES = {\n NAME: 'name',\n EMAIL: 'email',\n PHONE_NUMBER: 'phone_number',\n IDENTIFIER: 'identifier',\n COUNTRY_CODE: 'country_code',\n CITY: 'city',\n CREATED_AT: 'created_at',\n LAST_ACTIVITY_AT: 'last_activity_at',\n REFERER: 'referer',\n BLOCKED: 'blocked',\n};\n\n/**\n * Determines the input type for a custom attribute based on its key\n * @param {string} key - The attribute display type key\n * @returns {'date'|'plainText'|'searchSelect'|'booleanSelect'} The corresponding input type\n */\nexport const getCustomAttributeInputType = key => {\n switch (key) {\n case 'date':\n return 'date';\n case 'text':\n return 'plainText';\n case 'list':\n return 'searchSelect';\n case 'checkbox':\n return 'booleanSelect';\n default:\n return 'plainText';\n }\n};\n\n/**\n * Builds filter types for custom attributes\n * This also removes any conflicting attributes\n * @param {Array} attributes - The attributes array\n * @param {Function} getOperatorTypes - Function to get operator types\n * @returns {Array} Array of filter types\n */\nexport const buildAttributesFilterTypes = (\n attributes,\n getOperatorTypes,\n filterModel = 'conversation'\n) => {\n const standardAttributes = Object.values(\n filterModel === 'conversation'\n ? CONVERSATION_ATTRIBUTES\n : CONTACT_ATTRIBUTES\n );\n\n return attributes\n .filter(attr => !standardAttributes.includes(attr.attributeKey))\n .map(attr => ({\n attributeKey: attr.attributeKey,\n value: attr.attributeKey,\n attributeName: attr.attributeDisplayName,\n label: attr.attributeDisplayName,\n inputType: getCustomAttributeInputType(attr.attributeDisplayType),\n filterOperators: getOperatorTypes(attr.attributeDisplayType),\n options:\n attr.attributeDisplayType === 'list'\n ? attr.attributeValues.map(item => ({ id: item, name: item }))\n : [],\n attributeModel: 'customAttributes',\n }));\n};\n\n/**\n * Replaces underscores with spaces in a string\n * @param {string} text - The input string\n * @returns {string} The string with underscores replaced by spaces\n */\nexport const replaceUnderscoreWithSpace = text =>\n text?.replaceAll('_', ' ') ?? '';\n","import { computed, h } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useOperators } from './operators';\nimport { useMapGetter } from 'dashboard/composables/store.js';\nimport { useChannelIcon } from 'next/icon/provider';\nimport {\n buildAttributesFilterTypes,\n CONVERSATION_ATTRIBUTES,\n} from './helper/filterHelper';\nimport countries from 'shared/constants/countries.js';\nimport languages from 'dashboard/components/widgets/conversation/advancedFilterItems/languages.js';\n\n/**\n * @typedef {Object} FilterOption\n * @property {string|number} id\n * @property {string} name\n * @property {import('vue').VNode} [icon]\n */\n\n/**\n * @typedef {Object} FilterOperator\n * @property {string} value\n * @property {string} label\n * @property {string} icon\n * @property {boolean} hasInput\n */\n\n/**\n * @typedef {Object} FilterType\n * @property {string} attributeKey - The attribute key\n * @property {string} value - This is a proxy for the attribute key used in FilterSelect\n * @property {string} attributeName - The attribute name used to display on the UI\n * @property {string} label - This is a proxy for the attribute name used in FilterSelect\n * @property {'multiSelect'|'searchSelect'|'plainText'|'date'|'booleanSelect'} inputType - The input type for the attribute\n * @property {FilterOption[]} [options] - The options available for the attribute if it is a multiSelect or singleSelect type\n * @property {'text'|'number'} dataType\n * @property {FilterOperator[]} filterOperators - The operators available for the attribute\n * @property {'standard'|'additional'|'customAttributes'} attributeModel\n */\n\n/**\n * @typedef {Object} FilterGroup\n * @property {string} name\n * @property {FilterType[]} attributes\n */\n\n/**\n * Composable that provides conversation filtering context\n * @returns {{ filterTypes: import('vue').ComputedRef<FilterType[]>, filterGroups: import('vue').ComputedRef<FilterGroup[]> }}\n */\nexport function useConversationFilterContext() {\n const { t } = useI18n();\n\n const conversationAttributes = useMapGetter(\n 'attributes/getConversationAttributes'\n );\n\n const labels = useMapGetter('labels/getLabels');\n const agents = useMapGetter('agents/getAgents');\n const inboxes = useMapGetter('inboxes/getInboxes');\n const teams = useMapGetter('teams/getTeams');\n const campaigns = useMapGetter('campaigns/getAllCampaigns');\n\n const {\n equalityOperators,\n presenceOperators,\n containmentOperators,\n dateOperators,\n getOperatorTypes,\n } = useOperators();\n\n /**\n * @type {import('vue').ComputedRef<FilterType[]>}\n */\n const customFilterTypes = computed(() =>\n buildAttributesFilterTypes(\n conversationAttributes.value,\n getOperatorTypes,\n 'conversation'\n )\n );\n\n /**\n * @type {import('vue').ComputedRef<FilterType[]>}\n */\n const filterTypes = computed(() => [\n {\n attributeKey: CONVERSATION_ATTRIBUTES.STATUS,\n value: CONVERSATION_ATTRIBUTES.STATUS,\n attributeName: t('FILTER.ATTRIBUTES.STATUS'),\n label: t('FILTER.ATTRIBUTES.STATUS'),\n inputType: 'multiSelect',\n options: ['open', 'resolved', 'pending', 'snoozed', 'all'].map(id => {\n return {\n id,\n name: t(`CHAT_LIST.CHAT_STATUS_FILTER_ITEMS.${id}.TEXT`),\n };\n }),\n dataType: 'text',\n filterOperators: equalityOperators.value,\n attributeModel: 'standard',\n },\n {\n attributeKey: CONVERSATION_ATTRIBUTES.PRIORITY,\n value: CONVERSATION_ATTRIBUTES.PRIORITY,\n attributeName: t('FILTER.ATTRIBUTES.PRIORITY'),\n label: t('FILTER.ATTRIBUTES.PRIORITY'),\n inputType: 'multiSelect',\n options: ['low', 'medium', 'high', 'urgent'].map(id => {\n return {\n id,\n name: t(`CONVERSATION.PRIORITY.OPTIONS.${id.toUpperCase()}`),\n };\n }),\n dataType: 'text',\n filterOperators: equalityOperators.value,\n attributeModel: 'standard',\n },\n {\n attributeKey: CONVERSATION_ATTRIBUTES.ASSIGNEE_ID,\n value: CONVERSATION_ATTRIBUTES.ASSIGNEE_ID,\n attributeName: t('FILTER.ATTRIBUTES.ASSIGNEE_NAME'),\n label: t('FILTER.ATTRIBUTES.ASSIGNEE_NAME'),\n inputType: 'searchSelect',\n options: agents.value.map(agent => {\n return {\n id: agent.id,\n name: agent.name,\n };\n }),\n dataType: 'text',\n filterOperators: presenceOperators.value,\n attributeModel: 'standard',\n },\n {\n attributeKey: CONVERSATION_ATTRIBUTES.INBOX_ID,\n value: CONVERSATION_ATTRIBUTES.INBOX_ID,\n attributeName: t('FILTER.ATTRIBUTES.INBOX_NAME'),\n label: t('FILTER.ATTRIBUTES.INBOX_NAME'),\n inputType: 'searchSelect',\n options: inboxes.value.map(inbox => {\n return {\n ...inbox,\n icon: useChannelIcon(inbox).value,\n };\n }),\n dataType: 'text',\n filterOperators: presenceOperators.value,\n attributeModel: 'standard',\n },\n {\n attributeKey: CONVERSATION_ATTRIBUTES.TEAM_ID,\n value: CONVERSATION_ATTRIBUTES.TEAM_ID,\n attributeName: t('FILTER.ATTRIBUTES.TEAM_NAME'),\n label: t('FILTER.ATTRIBUTES.TEAM_NAME'),\n inputType: 'searchSelect',\n options: teams.value,\n dataType: 'number',\n filterOperators: presenceOperators.value,\n attributeModel: 'standard',\n },\n {\n attributeKey: CONVERSATION_ATTRIBUTES.DISPLAY_ID,\n value: CONVERSATION_ATTRIBUTES.DISPLAY_ID,\n attributeName: t('FILTER.ATTRIBUTES.CONVERSATION_IDENTIFIER'),\n label: t('FILTER.ATTRIBUTES.CONVERSATION_IDENTIFIER'),\n inputType: 'plainText',\n datatype: 'number',\n filterOperators: containmentOperators.value,\n attributeModel: 'standard',\n },\n {\n attributeKey: CONVERSATION_ATTRIBUTES.CAMPAIGN_ID,\n value: CONVERSATION_ATTRIBUTES.CAMPAIGN_ID,\n attributeName: t('FILTER.ATTRIBUTES.CAMPAIGN_NAME'),\n label: t('FILTER.ATTRIBUTES.CAMPAIGN_NAME'),\n inputType: 'searchSelect',\n options: campaigns.value.map(campaign => ({\n id: campaign.id,\n name: campaign.title,\n })),\n datatype: 'number',\n filterOperators: presenceOperators.value,\n attributeModel: 'standard',\n },\n {\n attributeKey: CONVERSATION_ATTRIBUTES.LABELS,\n value: CONVERSATION_ATTRIBUTES.LABELS,\n attributeName: t('FILTER.ATTRIBUTES.LABELS'),\n label: t('FILTER.ATTRIBUTES.LABELS'),\n inputType: 'multiSelect',\n options: labels.value.map(label => {\n return {\n id: label.title,\n name: label.title,\n icon: h('span', {\n class: `rounded-full`,\n style: {\n backgroundColor: label.color,\n height: '6px',\n width: '6px',\n },\n }),\n };\n }),\n dataType: 'text',\n filterOperators: presenceOperators.value,\n attributeModel: 'standard',\n },\n {\n attributeKey: CONVERSATION_ATTRIBUTES.BROWSER_LANGUAGE,\n value: CONVERSATION_ATTRIBUTES.BROWSER_LANGUAGE,\n attributeName: t('FILTER.ATTRIBUTES.BROWSER_LANGUAGE'),\n label: t('FILTER.ATTRIBUTES.BROWSER_LANGUAGE'),\n inputType: 'searchSelect',\n options: languages,\n dataType: 'text',\n filterOperators: equalityOperators.value,\n attributeModel: 'additional',\n },\n {\n attributeKey: CONVERSATION_ATTRIBUTES.COUNTRY_CODE,\n value: CONVERSATION_ATTRIBUTES.COUNTRY_CODE,\n attributeName: t('FILTER.ATTRIBUTES.COUNTRY_NAME'),\n label: t('FILTER.ATTRIBUTES.COUNTRY_NAME'),\n inputType: 'searchSelect',\n options: countries,\n dataType: 'text',\n filterOperators: equalityOperators.value,\n attributeModel: 'additional',\n },\n {\n attributeKey: CONVERSATION_ATTRIBUTES.REFERER,\n value: CONVERSATION_ATTRIBUTES.REFERER,\n attributeName: t('FILTER.ATTRIBUTES.REFERER_LINK'),\n label: t('FILTER.ATTRIBUTES.REFERER_LINK'),\n inputType: 'plainText',\n dataType: 'text',\n filterOperators: containmentOperators.value,\n attributeModel: 'additional',\n },\n {\n attributeKey: CONVERSATION_ATTRIBUTES.CREATED_AT,\n value: CONVERSATION_ATTRIBUTES.CREATED_AT,\n attributeName: t('FILTER.ATTRIBUTES.CREATED_AT'),\n label: t('FILTER.ATTRIBUTES.CREATED_AT'),\n inputType: 'date',\n dataType: 'text',\n filterOperators: dateOperators.value,\n attributeModel: 'standard',\n },\n {\n attributeKey: CONVERSATION_ATTRIBUTES.LAST_ACTIVITY_AT,\n value: CONVERSATION_ATTRIBUTES.LAST_ACTIVITY_AT,\n attributeName: t('FILTER.ATTRIBUTES.LAST_ACTIVITY'),\n label: t('FILTER.ATTRIBUTES.LAST_ACTIVITY'),\n inputType: 'date',\n dataType: 'text',\n filterOperators: dateOperators.value,\n attributeModel: 'standard',\n },\n ...customFilterTypes.value,\n ]);\n\n return { filterTypes };\n}\n","<script setup>\nimport { defineModel, computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport Icon from 'next/icon/Icon.vue';\nimport Button from 'next/button/Button.vue';\nimport DropdownContainer from 'next/dropdown-menu/base/DropdownContainer.vue';\nimport DropdownSection from 'next/dropdown-menu/base/DropdownSection.vue';\nimport DropdownBody from 'next/dropdown-menu/base/DropdownBody.vue';\nimport DropdownItem from 'next/dropdown-menu/base/DropdownItem.vue';\n\nconst { options, maxChips } = defineProps({\n options: {\n type: Array,\n required: true,\n },\n maxChips: {\n type: Number,\n default: 3,\n },\n});\n\nconst { t } = useI18n();\nconst selected = defineModel({\n type: [Array, String],\n required: true,\n});\n\nconst hasItems = computed(() => {\n if (!selected.value) return false;\n if (!Array.isArray(selected.value)) return false;\n if (selected.value.length === 0) return false;\n\n return true;\n});\n\nconst selectedIds = computed(() => {\n if (!hasItems.value) return [];\n return selected.value.map(value => value.id);\n});\n\nconst selectedItems = computed(() => {\n // Options has additional properties, so we need to use them directly\n if (!hasItems.value) return [];\n return options.filter(option => selectedIds.value.includes(option.id));\n});\n\nconst selectedVisibleItems = computed(() => {\n if (!hasItems.value) return [];\n // avoid showing \"+1 more\" coz it takes up space anway, might as well show it\n if (selectedItems.value.length === maxChips + 1) return selectedItems.value;\n // if we have more than maxChips then show only maxChips\n return selectedItems.value.slice(0, maxChips);\n});\n\nconst remainingItems = computed(() => {\n if (!hasItems.value) return [];\n if (selectedItems.value.length === maxChips + 1) return [];\n return selectedItems.value.slice(maxChips);\n});\n\nconst remainingTooltip = computed(() => {\n if (!hasItems.value) return '';\n return remainingItems.value.map(item => item.name).join(', ');\n});\n\nconst toggleOption = option => {\n // Ensure that the `icon` prop is not included, icon is a VNode which has circular references\n // This causes an error when creating a clone using JSON.parse(JSON.stringify())\n const optionToToggle = {\n id: option.id,\n name: option.name,\n };\n\n const idToToggle = optionToToggle.id;\n\n if (!hasItems.value) {\n selected.value = [optionToToggle];\n return;\n }\n\n if (selectedIds.value.includes(idToToggle)) {\n selected.value = selected.value.filter(value => value.id !== idToToggle);\n } else {\n selected.value = [...selected.value, optionToToggle];\n }\n};\n</script>\n\n<template>\n <DropdownContainer>\n <template #trigger=\"{ toggle }\">\n <button\n v-if=\"hasItems\"\n class=\"bg-n-alpha-2 py-2 rounded-lg h-8 flex items-center px-0\"\n @click=\"toggle\"\n >\n <div\n v-for=\"item in selectedVisibleItems\"\n :key=\"item.name\"\n class=\"px-3 border-r rtl:border-l rtl:border-r-0 border-n-weak text-n-slate-12 text-sm flex gap-2 items-center max-w-[100px]\"\n >\n <Icon v-if=\"item.icon\" :icon=\"item.icon\" class=\"flex-shrink-0\" />\n <span class=\"truncate\">{{ item.name }}</span>\n </div>\n <div\n v-if=\"remainingItems.length > 0\"\n v-tooltip.top=\"remainingTooltip\"\n class=\"px-3 border-r rtl:border-l rtl:border-r-0 border-n-weak text-n-slate-12 text-sm flex gap-2 items-center max-w-[100px]\"\n >\n <span class=\"truncate\">{{\n t('COMBOBOX.MORE', { count: remainingItems.length })\n }}</span>\n </div>\n <div class=\"flex items-center border-none px-3 gap-2\">\n <Icon icon=\"i-lucide-plus\" />\n </div>\n </button>\n <Button v-else sm slate faded @click=\"toggle\">\n <template #icon>\n <Icon icon=\"i-lucide-plus\" class=\"text-n-slate-11\" />\n </template>\n <span class=\"text-n-slate-11\">{{ t('COMBOBOX.PLACEHOLDER') }}</span>\n </Button>\n </template>\n <DropdownBody class=\"top-0 min-w-48 z-50\" strong>\n <DropdownSection class=\"max-h-80 overflow-scroll\">\n <DropdownItem\n v-for=\"option in options\"\n :key=\"option.id\"\n :icon=\"option.icon\"\n preserve-open\n @click=\"toggleOption(option)\"\n >\n <template #label>\n {{ option.name }}\n <Icon\n v-if=\"selectedIds.includes(option.id)\"\n icon=\"i-lucide-check\"\n class=\"bg-n-blue-text pointer-events-none\"\n />\n </template>\n </DropdownItem>\n </DropdownSection>\n </DropdownBody>\n </DropdownContainer>\n</template>\n","<script setup>\nimport { defineModel, computed, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { picoSearch } from '@scmmishra/pico-search';\nimport Icon from 'next/icon/Icon.vue';\nimport Button from 'next/button/Button.vue';\nimport DropdownContainer from 'next/dropdown-menu/base/DropdownContainer.vue';\nimport DropdownSection from 'next/dropdown-menu/base/DropdownSection.vue';\nimport DropdownBody from 'next/dropdown-menu/base/DropdownBody.vue';\nimport DropdownItem from 'next/dropdown-menu/base/DropdownItem.vue';\n\nconst { options } = defineProps({\n options: {\n type: Array,\n required: true,\n },\n disableSearch: {\n type: Boolean,\n default: false,\n },\n});\n\nconst { t } = useI18n();\nconst selected = defineModel({\n type: Object,\n required: true,\n});\n\nconst searchTerm = ref('');\nconst searchResults = computed(() => {\n if (!options) return [];\n return picoSearch(options, searchTerm.value, ['name']);\n});\n\nconst selectedItem = computed(() => {\n if (!options) return null;\n if (!selected.value) return null;\n\n // there are cases where the selected value is an array\n const optionToSearch = Array.isArray(selected.value)\n ? selected.value[0]\n : selected.value;\n // extract the selected item from the options array\n // this ensures that options like icon is also included\n return options.find(option => option.id === optionToSearch.id);\n});\n\nconst toggleSelected = option => {\n // Ensure that the `icon` prop is not included, icon is a VNode which has circular references\n // This causes an error when creating a clone using JSON.parse(JSON.stringify())\n const optionToToggle = {\n id: option.id,\n name: option.name,\n };\n\n if (selected.value && selected.value.id === optionToToggle.id) {\n selected.value = null;\n } else {\n selected.value = optionToToggle;\n }\n};\n</script>\n\n<template>\n <DropdownContainer>\n <template #trigger=\"{ toggle }\">\n <Button\n v-if=\"selectedItem\"\n sm\n slate\n faded\n :icon=\"selectedItem.icon\"\n :label=\"selectedItem.name\"\n @click=\"toggle\"\n />\n <Button v-else sm slate faded @click=\"toggle\">\n <template #icon>\n <Icon icon=\"i-lucide-plus\" class=\"text-n-slate-11\" />\n </template>\n <span class=\"text-n-slate-11\">{{ t('COMBOBOX.PLACEHOLDER') }}</span>\n </Button>\n </template>\n <DropdownBody class=\"top-0 min-w-56 z-50\" strong>\n <div v-if=\"!disableSearch\" class=\"relative\">\n <Icon class=\"absolute size-4 left-2 top-2\" icon=\"i-lucide-search\" />\n <input\n v-model=\"searchTerm\"\n autofocus\n class=\"p-1.5 pl-8 text-n-slate-11 bg-n-alpha-1 rounded-lg w-full\"\n :placeholder=\"t('COMBOBOX.SEARCH_PLACEHOLDER')\"\n />\n </div>\n <DropdownSection class=\"max-h-80 overflow-scroll\">\n <template v-if=\"searchResults.length\">\n <DropdownItem\n v-for=\"option in searchResults\"\n :key=\"option.id\"\n :icon=\"option.icon\"\n @click=\"toggleSelected(option)\"\n >\n <template #label>\n {{ option.name }}\n <Icon\n v-if=\"selectedItem && selectedItem.id === option.id\"\n icon=\"i-lucide-check\"\n class=\"bg-n-blue-text pointer-events-none\"\n />\n </template>\n </DropdownItem>\n </template>\n <template v-else-if=\"searchTerm\">\n <DropdownItem disabled>\n {{ t('COMBOBOX.EMPTY_SEARCH_RESULTS', { searchTerm: searchTerm }) }}\n </DropdownItem>\n </template>\n <template v-else>\n <DropdownItem disabled>\n {{ t('COMBOBOX.EMPTY_STATE') }}\n </DropdownItem>\n </template>\n </DropdownSection>\n </DropdownBody>\n </DropdownContainer>\n</template>\n","<script setup>\nimport { computed, defineModel, h, watch, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport Button from 'next/button/Button.vue';\nimport FilterSelect from './inputs/FilterSelect.vue';\nimport MultiSelect from './inputs/MultiSelect.vue';\nimport SingleSelect from './inputs/SingleSelect.vue';\n\nimport { useSnakeCase } from 'dashboard/composables/useTransformKeys';\nimport { validateSingleFilter } from 'dashboard/helper/validations.js';\n\n// filterTypes: import('vue').ComputedRef<FilterType[]>\nconst { filterTypes } = defineProps({\n showQueryOperator: { type: Boolean, default: false },\n filterTypes: { type: Array, required: true },\n});\n\nconst emit = defineEmits(['remove']);\nconst { t } = useI18n();\nconst showErrors = ref(false);\n\nconst attributeKey = defineModel('attributeKey', {\n type: String,\n required: true,\n});\n\nconst values = defineModel('values', {\n type: [String, Number, Array, Object],\n required: true,\n});\n\nconst filterOperator = defineModel('filterOperator', {\n type: String,\n required: true,\n});\n\nconst queryOperator = defineModel('queryOperator', {\n type: String,\n required: false,\n default: undefined,\n validator: value => ['and', 'or'].includes(value),\n});\n\nconst getFilterFromFilterTypes = key =>\n filterTypes.find(filterObj => filterObj.attributeKey === key);\n\nconst currentFilter = computed(() =>\n getFilterFromFilterTypes(attributeKey.value)\n);\n\nconst getOperator = (filter, selectedOperator) => {\n const operatorFromOptions = filter.filterOperators.find(\n operator => operator.value === selectedOperator\n );\n\n if (!operatorFromOptions) {\n return filter.filterOperators[0];\n }\n\n return operatorFromOptions;\n};\n\nconst currentOperator = computed(() =>\n getOperator(currentFilter.value, filterOperator.value)\n);\n\nconst getInputType = (operator, filter) =>\n operator.inputOverride ?? filter.inputType;\n\nconst inputType = computed(() =>\n getInputType(currentOperator.value, currentFilter.value)\n);\n\nconst queryOperatorOptions = computed(() => {\n return [\n {\n label: t(`FILTER.QUERY_DROPDOWN_LABELS.AND`),\n value: 'and',\n icon: h('span', { class: 'i-lucide-ampersands !text-n-blue-text' }),\n },\n {\n label: t(`FILTER.QUERY_DROPDOWN_LABELS.OR`),\n value: 'or',\n icon: h('span', { class: 'i-woot-logic-or !text-n-blue-text' }),\n },\n ];\n});\n\nconst booleanOptions = computed(() => [\n { id: true, name: t('FILTER.ATTRIBUTE_LABELS.TRUE') },\n { id: false, name: t('FILTER.ATTRIBUTE_LABELS.FALSE') },\n]);\n\nconst validationError = computed(() => {\n // TOOD: Migrate validateSingleFilter to use camelcase and then remove useSnakeCase here too\n return validateSingleFilter(\n useSnakeCase({\n attributeKey: attributeKey.value,\n filterOperator: filterOperator.value,\n values: values.value,\n })\n );\n});\n\nconst resetModelOnAttributeKeyChange = newAttributeKey => {\n /**\n * Resets the filter values and operator when the attribute key changes. This ensures that\n * the values and operator remain compatible with the new attribute type. For example,\n * switching from a text field to a multi-select should reset the value from '' (empty string)\n * to an empty array.\n */\n const filter = getFilterFromFilterTypes(newAttributeKey);\n const newOperator = getOperator(filter, filterOperator.value);\n const newInputType = getInputType(newOperator, filter);\n if (newInputType === 'multiSelect') {\n values.value = [];\n } else if (['searchSelect', 'booleanSelect'].includes(newInputType)) {\n values.value = {};\n } else {\n values.value = '';\n }\n filterOperator.value = newOperator.value;\n};\n\nwatch([attributeKey, values, filterOperator], () => {\n showErrors.value = false;\n});\n\nconst validate = () => {\n showErrors.value = true;\n return !validationError.value;\n};\n\ndefineExpose({ validate });\n</script>\n\n<template>\n <li class=\"list-none\">\n <div\n class=\"flex items-center gap-2 rounded-md\"\n :class=\"{\n 'animate-wiggle': showErrors && validationError,\n }\"\n >\n <FilterSelect\n v-if=\"showQueryOperator\"\n v-model=\"queryOperator\"\n variant=\"faded\"\n hide-icon\n class=\"text-sm\"\n :options=\"queryOperatorOptions\"\n />\n <FilterSelect\n v-model=\"attributeKey\"\n variant=\"faded\"\n :options=\"filterTypes\"\n @update:model-value=\"resetModelOnAttributeKeyChange\"\n />\n <FilterSelect\n v-model=\"filterOperator\"\n variant=\"ghost\"\n :options=\"currentFilter.filterOperators\"\n />\n <template v-if=\"currentOperator.hasInput\">\n <MultiSelect\n v-if=\"inputType === 'multiSelect'\"\n v-model=\"values\"\n :options=\"currentFilter.options\"\n />\n <SingleSelect\n v-else-if=\"inputType === 'searchSelect'\"\n v-model=\"values\"\n :options=\"currentFilter.options\"\n />\n <SingleSelect\n v-else-if=\"inputType === 'booleanSelect'\"\n v-model=\"values\"\n disable-search\n :options=\"booleanOptions\"\n />\n <input\n v-else\n v-model=\"values\"\n :type=\"inputType === 'date' ? 'date' : 'text'\"\n class=\"py-1.5 px-3 text-n-slate-12 bg-n-alpha-1 text-sm rounded-lg reset-base\"\n :placeholder=\"t('FILTER.INPUT_PLACEHOLDER')\"\n />\n </template>\n <Button\n sm\n solid\n slate\n icon=\"i-lucide-trash\"\n @click.stop=\"emit('remove')\"\n />\n </div>\n <span v-if=\"showErrors && validationError\" class=\"text-sm text-n-ruby-11\">\n {{ t(`FILTER.ERRORS.${validationError}`) }}\n </span>\n </li>\n</template>\n","<script setup>\nimport { useTemplateRef, onBeforeUnmount, computed, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useTrack } from 'dashboard/composables';\nimport { useStore } from 'dashboard/composables/store';\nimport { vOnClickOutside } from '@vueuse/components';\nimport { CONVERSATION_EVENTS } from 'dashboard/helper/AnalyticsHelper/events';\nimport { useConversationFilterContext } from './provider.js';\nimport { useSnakeCase } from 'dashboard/composables/useTransformKeys';\n\nimport Button from 'next/button/Button.vue';\nimport ConditionRow from './ConditionRow.vue';\n\nconst props = defineProps({\n isFolderView: {\n type: Boolean,\n default: false,\n },\n folderName: {\n type: String,\n default: '',\n },\n});\n\nconst emit = defineEmits(['applyFilter', 'updateFolder', 'close']);\nconst { filterTypes } = useConversationFilterContext();\n\nconst filters = defineModel({\n type: Array,\n default: [],\n});\nconst folderNameLocal = ref(props.folderName);\n\nconst DEFAULT_FILTER = {\n attributeKey: 'status',\n filterOperator: 'equal_to',\n values: [],\n queryOperator: 'and',\n};\n\nconst { t } = useI18n();\nconst store = useStore();\n\nconst resetFilter = () => {\n filters.value = [{ ...DEFAULT_FILTER }];\n};\n\nconst removeFilter = index => {\n if (filters.value.length === 1) {\n resetFilter();\n } else {\n filters.value.splice(index, 1);\n }\n};\n\nconst addFilter = () => {\n filters.value.push({ ...DEFAULT_FILTER });\n};\n\nconst conditionsRef = useTemplateRef('conditionsRef');\n\nconst isConditionsValid = () => {\n return conditionsRef.value.every(condition => condition.validate());\n};\n\nconst updateSavedCustomViews = () => {\n if (isConditionsValid()) {\n emit('updateFolder', filters.value, folderNameLocal.value);\n }\n};\n\nfunction validateAndSubmit() {\n if (!isConditionsValid()) {\n return;\n }\n\n store.dispatch(\n 'setConversationFilters',\n useSnakeCase(JSON.parse(JSON.stringify(filters.value)))\n );\n emit('applyFilter', filters.value);\n useTrack(CONVERSATION_EVENTS.APPLY_FILTER, {\n appliedFilters: filters.value.map(filter => ({\n key: filter.attributeKey,\n operator: filter.filterOperator,\n queryOperator: filter.queryOperator,\n })),\n });\n}\n\nconst filterModalHeaderTitle = computed(() => {\n return !props.isFolderView\n ? t('FILTER.TITLE')\n : t('FILTER.EDIT_CUSTOM_FILTER');\n});\n\nonBeforeUnmount(() => emit('close'));\nconst outsideClickHandler = [\n () => emit('close'),\n { ignore: ['#toggleConversationFilterButton'] },\n];\n</script>\n\n<template>\n <div\n v-on-click-outside=\"outsideClickHandler\"\n class=\"z-40 max-w-3xl lg:w-[750px] overflow-visible w-full border border-n-weak bg-n-alpha-3 backdrop-blur-[100px] shadow-lg rounded-xl p-6 grid gap-6\"\n >\n <h3 class=\"text-base font-medium leading-6 text-n-slate-12\">\n {{ filterModalHeaderTitle }}\n </h3>\n <div v-if=\"props.isFolderView\">\n <label class=\"border-b border-n-weak pb-6\">\n <div class=\"text-n-slate-11 text-sm mb-2\">\n {{ t('FILTER.FOLDER_LABEL') }}\n </div>\n <input\n v-model=\"folderNameLocal\"\n class=\"py-1.5 px-3 text-n-slate-12 bg-n-alpha-1 text-sm rounded-lg reset-base w-full\"\n :placeholder=\"t('FILTER.INPUT_PLACEHOLDER')\"\n />\n </label>\n </div>\n <ul class=\"grid gap-4 list-none\">\n <template v-for=\"(filter, index) in filters\" :key=\"filter.id\">\n <ConditionRow\n v-if=\"index === 0\"\n ref=\"conditionsRef\"\n :key=\"`filter-${filter.attributeKey}-0`\"\n v-model:attribute-key=\"filter.attributeKey\"\n v-model:filter-operator=\"filter.filterOperator\"\n v-model:values=\"filter.values\"\n :filter-types=\"filterTypes\"\n :show-query-operator=\"false\"\n @remove=\"removeFilter(index)\"\n />\n <ConditionRow\n v-else\n :key=\"`filter-${filter.attributeKey}-${index}`\"\n ref=\"conditionsRef\"\n v-model:attribute-key=\"filter.attributeKey\"\n v-model:filter-operator=\"filter.filterOperator\"\n v-model:query-operator=\"filters[index - 1].queryOperator\"\n v-model:values=\"filter.values\"\n show-query-operator\n :filter-types=\"filterTypes\"\n @remove=\"removeFilter(index)\"\n />\n </template>\n </ul>\n <div class=\"flex gap-2 justify-between\">\n <Button sm ghost blue @click=\"addFilter\">\n {{ $t('FILTER.ADD_NEW_FILTER') }}\n </Button>\n <div class=\"flex gap-2\">\n <Button sm faded slate @click=\"resetFilter\">\n {{ t('FILTER.CLEAR_BUTTON_LABEL') }}\n </Button>\n <Button\n v-if=\"isFolderView\"\n sm\n solid\n blue\n :disabled=\"!folderNameLocal\"\n @click=\"updateSavedCustomViews\"\n >\n {{ t('FILTER.UPDATE_BUTTON_LABEL') }}\n </Button>\n <Button v-else sm solid blue @click=\"validateAndSubmit\">\n {{ t('FILTER.SUBMIT_BUTTON_LABEL') }}\n </Button>\n </div>\n </div>\n </div>\n</template>\n","<script>\nimport { useVuelidate } from '@vuelidate/core';\nimport { required, minLength } from '@vuelidate/validators';\nimport { useAlert } from 'dashboard/composables';\nimport { CONTACTS_EVENTS } from 'dashboard/helper/AnalyticsHelper/events';\nimport { vOnClickOutside } from '@vueuse/components';\nimport { useTrack } from 'dashboard/composables';\nimport NextButton from 'next/button/Button.vue';\n\nexport default {\n components: {\n NextButton,\n },\n directives: {\n onClickOutside: vOnClickOutside,\n },\n props: {\n filterType: {\n type: Number,\n default: 0,\n },\n customViewsQuery: {\n type: Object,\n default: () => {},\n },\n openLastSavedItem: {\n type: Function,\n default: () => {},\n },\n },\n emits: ['close'],\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n show: true,\n name: '',\n };\n },\n\n computed: {\n isButtonDisabled() {\n return this.v$.name.$invalid;\n },\n },\n\n validations: {\n name: {\n required,\n minLength: minLength(1),\n },\n },\n\n methods: {\n onClose() {\n this.$emit('close');\n },\n async saveCustomViews() {\n this.v$.$touch();\n if (this.v$.$invalid) {\n return;\n }\n try {\n await this.$store.dispatch('customViews/create', {\n name: this.name,\n filter_type: this.filterType,\n query: this.customViewsQuery,\n });\n this.alertMessage =\n this.filterType === 0\n ? this.$t('FILTER.CUSTOM_VIEWS.ADD.API_FOLDERS.SUCCESS_MESSAGE')\n : this.$t('FILTER.CUSTOM_VIEWS.ADD.API_SEGMENTS.SUCCESS_MESSAGE');\n this.onClose();\n\n useTrack(CONTACTS_EVENTS.SAVE_FILTER, {\n type: this.filterType === 0 ? 'folder' : 'segment',\n });\n } catch (error) {\n const errorMessage = error?.message;\n this.alertMessage =\n errorMessage || this.filterType === 0\n ? errorMessage\n : this.$t('FILTER.CUSTOM_VIEWS.ADD.API_SEGMENTS.ERROR_MESSAGE');\n } finally {\n useAlert(this.alertMessage);\n }\n this.openLastSavedItem();\n },\n },\n};\n</script>\n\n<template>\n <div\n v-on-click-outside=\"[\n () => $emit('close'),\n { ignore: ['#saveFilterTeleportTarget'] },\n ]\"\n class=\"z-40 max-w-3xl lg:w-[500px] overflow-visible w-full border border-n-weak bg-n-alpha-3 backdrop-blur-[100px] shadow-lg rounded-xl p-6 grid gap-6\"\n >\n <h3 class=\"text-base font-medium leading-6 text-n-slate-12\">\n {{ $t('FILTER.CUSTOM_VIEWS.ADD.TITLE') }}\n </h3>\n <form class=\"w-full grid gap-6\" @submit.prevent=\"saveCustomViews\">\n <div>\n <input\n v-model=\"name\"\n class=\"py-1.5 px-3 text-n-slate-12 bg-n-alpha-1 text-sm rounded-lg reset-base w-full\"\n :placeholder=\"$t('FILTER.CUSTOM_VIEWS.ADD.PLACEHOLDER')\"\n @blur=\"v$.name.$touch\"\n />\n <span\n v-if=\"v$.name.$error\"\n class=\"text-xs text-n-ruby-11 ml-1 rtl:mr-1\"\n >\n {{ $t('FILTER.CUSTOM_VIEWS.ADD.ERROR_MESSAGE') }}\n </span>\n </div>\n <div class=\"flex flex-row justify-end w-full gap-2\">\n <NextButton sm solid blue :disabled=\"isButtonDisabled\">\n {{ $t('FILTER.CUSTOM_VIEWS.ADD.SAVE_BUTTON') }}\n </NextButton>\n <NextButton faded slate sm @click.prevent=\"onClose\">\n {{ $t('FILTER.CUSTOM_VIEWS.ADD.CANCEL_BUTTON') }}\n </NextButton>\n </div>\n </form>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useKeyboardEvents } from 'dashboard/composables/useKeyboardEvents';\nimport wootConstants from 'dashboard/constants/globals';\n\nconst props = defineProps({\n items: {\n type: Array,\n default: () => [],\n },\n activeTab: {\n type: String,\n default: wootConstants.ASSIGNEE_TYPE.ME,\n },\n});\n\nconst emit = defineEmits(['chatTabChange']);\n\nconst activeTabIndex = computed(() => {\n return props.items.findIndex(item => item.key === props.activeTab);\n});\n\nconst onTabChange = selectedTabIndex => {\n if (selectedTabIndex >= 0 && selectedTabIndex < props.items.length) {\n const selectedItem = props.items[selectedTabIndex];\n if (selectedItem.key !== props.activeTab) {\n emit('chatTabChange', selectedItem.key);\n }\n }\n};\n\nconst keyboardEvents = {\n 'Alt+KeyN': {\n action: () => {\n if (props.activeTab === wootConstants.ASSIGNEE_TYPE.ALL) {\n onTabChange(0);\n } else {\n const nextIndex = (activeTabIndex.value + 1) % props.items.length;\n onTabChange(nextIndex);\n }\n },\n },\n};\n\nuseKeyboardEvents(keyboardEvents);\n</script>\n\n<template>\n <woot-tabs\n :index=\"activeTabIndex\"\n class=\"w-full px-4 py-0 tab--chat-type\"\n @change=\"onTabChange\"\n >\n <woot-tabs-item\n v-for=\"(item, index) in items\"\n :key=\"item.key\"\n :index=\"index\"\n :name=\"item.name\"\n :count=\"item.count\"\n />\n </woot-tabs>\n</template>\n\n<style scoped lang=\"scss\">\n.tab--chat-type {\n ::v-deep {\n .tabs {\n @apply p-0;\n }\n }\n}\n</style>\n","/**\n * Determines the last non-activity message between store and API messages.\n * @param {Object} messageInStore - The last non-activity message from the store.\n * @param {Object} messageFromAPI - The last non-activity message from the API.\n * @returns {Object} The latest non-activity message.\n */\nconst getLastNonActivityMessage = (messageInStore, messageFromAPI) => {\n // If both API value and store value for last non activity message\n // are available, then return the latest one.\n if (messageInStore && messageFromAPI) {\n return messageInStore.created_at >= messageFromAPI.created_at\n ? messageInStore\n : messageFromAPI;\n }\n // Otherwise, return whichever is available\n return messageInStore || messageFromAPI;\n};\n\n/**\n * Filters out duplicate source messages from an array of messages.\n * @param {Array} messages - The array of messages to filter.\n * @returns {Array} An array of messages without duplicates.\n */\nexport const filterDuplicateSourceMessages = (messages = []) => {\n const messagesWithoutDuplicates = [];\n // We cannot use Map or any short hand method as it returns the last message with the duplicate ID\n // We should return the message with smaller id when there is a duplicate\n messages.forEach(m1 => {\n if (m1.source_id) {\n const index = messagesWithoutDuplicates.findIndex(\n m2 => m1.source_id === m2.source_id\n );\n\n if (index < 0) {\n messagesWithoutDuplicates.push(m1);\n }\n } else {\n messagesWithoutDuplicates.push(m1);\n }\n });\n return messagesWithoutDuplicates;\n};\n\n/**\n * Retrieves the last message from a conversation, prioritizing non-activity messages.\n * @param {Object} m - The conversation object containing messages.\n * @returns {Object} The last message of the conversation.\n */\nexport const getLastMessage = m => {\n const lastMessageIncludingActivity = m.messages[m.messages.length - 1];\n\n const nonActivityMessages = m.messages.filter(\n message => message.message_type !== 2\n );\n const lastNonActivityMessageInStore =\n nonActivityMessages[nonActivityMessages.length - 1];\n\n const lastNonActivityMessageFromAPI = m.last_non_activity_message;\n\n // If API value and store value for last non activity message\n // is empty, then return the last activity message\n if (!lastNonActivityMessageInStore && !lastNonActivityMessageFromAPI) {\n return lastMessageIncludingActivity;\n }\n\n return getLastNonActivityMessage(\n lastNonActivityMessageInStore,\n lastNonActivityMessageFromAPI\n );\n};\n\n/**\n * Filters messages that have been read by the agent.\n * @param {Array} messages - The array of messages to filter.\n * @param {number} agentLastSeenAt - The timestamp of when the agent last saw the messages.\n * @returns {Array} An array of read messages.\n */\nexport const getReadMessages = (messages, agentLastSeenAt) => {\n return messages.filter(\n message => message.created_at * 1000 <= agentLastSeenAt * 1000\n );\n};\n\n/**\n * Filters messages that have not been read by the agent.\n * @param {Array} messages - The array of messages to filter.\n * @param {number} agentLastSeenAt - The timestamp of when the agent last saw the messages.\n * @returns {Array} An array of unread messages.\n */\nexport const getUnreadMessages = (messages, agentLastSeenAt) => {\n return messages.filter(\n message => message.created_at * 1000 > agentLastSeenAt * 1000\n );\n};\n","<script>\nimport { MESSAGE_TYPE } from 'widget/helpers/constants';\nimport { useMessageFormatter } from 'shared/composables/useMessageFormatter';\nimport { ATTACHMENT_ICONS } from 'shared/constants/messages';\n\nexport default {\n name: 'MessagePreview',\n props: {\n message: {\n type: Object,\n required: true,\n },\n showMessageType: {\n type: Boolean,\n default: true,\n },\n defaultEmptyMessage: {\n type: String,\n default: '',\n },\n },\n setup() {\n const { getPlainText } = useMessageFormatter();\n return {\n getPlainText,\n };\n },\n computed: {\n messageByAgent() {\n const { message_type: messageType } = this.message;\n return messageType === MESSAGE_TYPE.OUTGOING;\n },\n isMessageAnActivity() {\n const { message_type: messageType } = this.message;\n return messageType === MESSAGE_TYPE.ACTIVITY;\n },\n isMessagePrivate() {\n const { private: isPrivate } = this.message;\n return isPrivate;\n },\n parsedLastMessage() {\n const { content_attributes: contentAttributes } = this.message;\n const { email: { subject } = {} } = contentAttributes || {};\n return this.getPlainText(subject || this.message.content);\n },\n lastMessageFileType() {\n const [{ file_type: fileType } = {}] = this.message.attachments;\n return fileType;\n },\n attachmentIcon() {\n return ATTACHMENT_ICONS[this.lastMessageFileType];\n },\n attachmentMessageContent() {\n return `CHAT_LIST.ATTACHMENTS.${this.lastMessageFileType}.CONTENT`;\n },\n isMessageSticker() {\n return this.message && this.message.content_type === 'sticker';\n },\n },\n};\n</script>\n\n<template>\n <div class=\"overflow-hidden text-ellipsis whitespace-nowrap\">\n <template v-if=\"showMessageType\">\n <fluent-icon\n v-if=\"isMessagePrivate\"\n size=\"16\"\n class=\"-mt-0.5 align-middle text-slate-600 dark:text-slate-300 inline-block\"\n icon=\"lock-closed\"\n />\n <fluent-icon\n v-else-if=\"messageByAgent\"\n size=\"16\"\n class=\"-mt-0.5 align-middle text-slate-600 dark:text-slate-300 inline-block\"\n icon=\"arrow-reply\"\n />\n <fluent-icon\n v-else-if=\"isMessageAnActivity\"\n size=\"16\"\n class=\"-mt-0.5 align-middle text-slate-600 dark:text-slate-300 inline-block\"\n icon=\"info\"\n />\n </template>\n <span v-if=\"message.content && isMessageSticker\">\n <fluent-icon\n size=\"16\"\n class=\"-mt-0.5 align-middle inline-block text-slate-600 dark:text-slate-300\"\n icon=\"image\"\n />\n {{ $t('CHAT_LIST.ATTACHMENTS.image.CONTENT') }}\n </span>\n <span v-else-if=\"message.content\">\n {{ parsedLastMessage }}\n </span>\n <span v-else-if=\"message.attachments\">\n <fluent-icon\n v-if=\"attachmentIcon && showMessageType\"\n size=\"16\"\n class=\"-mt-0.5 align-middle inline-block text-slate-600 dark:text-slate-300\"\n :icon=\"attachmentIcon\"\n />\n {{ $t(`${attachmentMessageContent}`) }}\n </span>\n <span v-else>\n {{ defaultEmptyMessage || $t('CHAT_LIST.NO_CONTENT') }}\n </span>\n </div>\n</template>\n","<script>\nimport { getInboxClassByType } from 'dashboard/helper/inbox';\n\nexport default {\n props: {\n inbox: {\n type: Object,\n default: () => {},\n },\n },\n computed: {\n computedInboxClass() {\n const { phone_number: phoneNumber, channel_type: type } = this.inbox;\n const classByType = getInboxClassByType(type, phoneNumber);\n return classByType;\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"inbox--name inline-flex items-center py-0.5 px-0 leading-3 whitespace-nowrap bg-none text-n-slate-11 text-xs my-0 mx-2.5\"\n >\n <fluent-icon\n class=\"mr-0.5 rtl:ml-0.5 rtl:mr-0\"\n :icon=\"computedInboxClass\"\n size=\"12\"\n />\n {{ inbox.name }}\n </div>\n</template>\n","/**\n * Filters and sorts agents by availability status\n * @param {Array} agents - List of agents\n * @param {string} availability - Availability status to filter by\n * @returns {Array} Filtered and sorted list of agents\n */\nexport const getAgentsByAvailability = (agents, availability) => {\n return agents\n .filter(agent => agent.availability_status === availability)\n .sort((a, b) => a.name.localeCompare(b.name));\n};\n\n/**\n * Sorts agents by availability status: online, busy, then offline\n * @param {Array} agents - List of agents\n * @returns {Array} Sorted list of agents\n */\nexport const getSortedAgentsByAvailability = agents => {\n const onlineAgents = getAgentsByAvailability(agents, 'online');\n const busyAgents = getAgentsByAvailability(agents, 'busy');\n const offlineAgents = getAgentsByAvailability(agents, 'offline');\n const filteredAgents = [...onlineAgents, ...busyAgents, ...offlineAgents];\n return filteredAgents;\n};\n\n/**\n * Updates the availability status of the current user based on the current account\n * @param {Array} agents - List of agents\n * @param {Object} currentUser - Current user object\n * @param {number} currentAccountId - ID of the current account\n * @returns {Array} Updated list of agents with dynamic presence\n */\n// Here we are updating the availability status of the current user dynamically\n// based on the current account availability status\nexport const getAgentsByUpdatedPresence = (\n agents,\n currentUser,\n currentAccountId\n) => {\n const agentsWithDynamicPresenceUpdate = agents.map(item =>\n item.id === currentUser.id\n ? {\n ...item,\n availability_status: currentUser.accounts.find(\n account => account.id === currentAccountId\n ).availability_status,\n }\n : item\n );\n return agentsWithDynamicPresenceUpdate;\n};\n","<script>\nimport Thumbnail from 'dashboard/components/widgets/Thumbnail.vue';\nexport default {\n components: {\n Thumbnail,\n },\n props: {\n option: {\n type: Object,\n default: () => {},\n },\n variant: {\n type: String,\n default: 'default',\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"menu text-slate-800 dark:text-slate-100 min-h-7 min-w-0\"\n role=\"button\"\n >\n <fluent-icon\n v-if=\"variant === 'icon' && option.icon\"\n :icon=\"option.icon\"\n size=\"14\"\n class=\"flex-shrink-0\"\n />\n <span\n v-if=\"variant === 'label' && option.color\"\n class=\"label-pill flex-shrink-0\"\n :style=\"{ backgroundColor: option.color }\"\n />\n <Thumbnail\n v-if=\"variant === 'agent'\"\n :username=\"option.label\"\n :src=\"option.thumbnail\"\n :status=\"option.status\"\n size=\"20px\"\n class=\"flex-shrink-0\"\n />\n <p class=\"menu-label truncate min-w-0 flex-1\">\n {{ option.label }}\n </p>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.menu {\n width: calc(var(--space-mega) * 2);\n @apply flex items-center flex-nowrap p-1 rounded-md overflow-hidden cursor-pointer;\n\n .menu-label {\n @apply my-0 mx-2 text-xs flex-shrink-0;\n }\n\n &:hover {\n @apply bg-n-brand text-white dark:text-slate-50;\n }\n}\n\n.agent-thumbnail {\n margin-top: 0 !important;\n}\n\n.label-pill {\n @apply w-4 h-4 rounded-full border border-n-strong border-solid flex-shrink-0;\n}\n</style>\n","<script setup>\nimport { computed, useTemplateRef } from 'vue';\nimport { useWindowSize, useElementBounding } from '@vueuse/core';\n\ndefineProps({\n option: {\n type: Object,\n default: () => {},\n },\n subMenuAvailable: {\n type: Boolean,\n default: true,\n },\n});\n\nconst menuRef = useTemplateRef('menuRef');\nconst { width: windowWidth, height: windowHeight } = useWindowSize();\nconst { bottom, right } = useElementBounding(menuRef);\n\n// Vertical position\nconst verticalPosition = computed(() => {\n const SUBMENU_HEIGHT = 240; // 15rem in pixels\n const spaceBelow = windowHeight.value - bottom.value;\n return spaceBelow < SUBMENU_HEIGHT ? 'bottom-0' : 'top-0';\n});\n\n// Horizontal position\nconst horizontalPosition = computed(() => {\n const SUBMENU_WIDTH = 240;\n const spaceRight = windowWidth.value - right.value;\n return spaceRight < SUBMENU_WIDTH ? 'right-full' : 'left-full';\n});\n\nconst submenuPosition = computed(() => [\n verticalPosition.value,\n horizontalPosition.value,\n]);\n</script>\n\n<template>\n <div\n ref=\"menuRef\"\n class=\"text-slate-800 dark:text-slate-100 menu-with-submenu min-width-calc w-full p-1 flex items-center h-7 rounded-md relative bg-n-alpha-3/50 backdrop-blur-[100px] justify-between hover:bg-n-brand/10 cursor-pointer dark:hover:bg-n-solid-3\"\n :class=\"!subMenuAvailable ? 'opacity-50 cursor-not-allowed' : ''\"\n >\n <div class=\"flex items-center h-4\">\n <fluent-icon :icon=\"option.icon\" size=\"14\" class=\"menu-icon\" />\n <p class=\"my-0 mx-2 text-xs\">{{ option.label }}</p>\n </div>\n <fluent-icon icon=\"chevron-right\" size=\"12\" />\n <div\n v-if=\"subMenuAvailable\"\n class=\"submenu bg-n-alpha-3 backdrop-blur-[100px] p-1 shadow-lg rounded-md absolute hidden max-h-[15rem] overflow-y-auto overflow-x-hidden cursor-pointer\"\n :class=\"submenuPosition\"\n >\n <slot />\n </div>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.menu-with-submenu {\n min-width: calc(6.25rem * 2);\n\n &:hover {\n .submenu {\n @apply block;\n }\n }\n}\n</style>\n","<script>\nimport Spinner from 'shared/components/Spinner.vue';\n\nexport default {\n components: {\n Spinner,\n },\n};\n</script>\n\n<template>\n <div class=\"agent-placeholder\">\n <Spinner />\n <p>{{ $t('CONVERSATION.CARD_CONTEXT_MENU.AGENTS_LOADING') }}</p>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.agent-placeholder {\n display: flex;\n align-items: center;\n flex-direction: column;\n justify-content: center;\n padding: var(--space-normal) 0;\n min-width: calc(var(--space-mega) * 2);\n\n p {\n margin: var(--space-small) 0 0 0;\n }\n}\n</style>\n","<script>\nimport { mapGetters } from 'vuex';\nimport {\n getSortedAgentsByAvailability,\n getAgentsByUpdatedPresence,\n} from 'dashboard/helper/agentHelper.js';\nimport MenuItem from './menuItem.vue';\nimport MenuItemWithSubmenu from './menuItemWithSubmenu.vue';\nimport wootConstants from 'dashboard/constants/globals';\nimport AgentLoadingPlaceholder from './agentLoadingPlaceholder.vue';\n\nexport default {\n components: {\n MenuItem,\n MenuItemWithSubmenu,\n AgentLoadingPlaceholder,\n },\n props: {\n chatId: {\n type: Number,\n default: null,\n },\n status: {\n type: String,\n default: '',\n },\n hasUnreadMessages: {\n type: Boolean,\n default: false,\n },\n inboxId: {\n type: Number,\n default: null,\n },\n priority: {\n type: String,\n default: null,\n },\n },\n emits: [\n 'updateConversation',\n 'assignPriority',\n 'markAsUnread',\n 'markAsRead',\n 'assignAgent',\n 'assignTeam',\n 'assignLabel',\n ],\n data() {\n return {\n STATUS_TYPE: wootConstants.STATUS_TYPE,\n readOption: {\n label: this.$t('CONVERSATION.CARD_CONTEXT_MENU.MARK_AS_READ'),\n icon: 'mail',\n },\n unreadOption: {\n label: this.$t('CONVERSATION.CARD_CONTEXT_MENU.MARK_AS_UNREAD'),\n icon: 'mail',\n },\n statusMenuConfig: [\n {\n key: wootConstants.STATUS_TYPE.RESOLVED,\n label: this.$t('CONVERSATION.CARD_CONTEXT_MENU.RESOLVED'),\n icon: 'checkmark',\n },\n {\n key: wootConstants.STATUS_TYPE.OPEN,\n label: this.$t('CONVERSATION.CARD_CONTEXT_MENU.REOPEN'),\n icon: 'arrow-redo',\n },\n {\n key: wootConstants.STATUS_TYPE.PENDING,\n label: this.$t('CONVERSATION.CARD_CONTEXT_MENU.PENDING'),\n icon: 'book-clock',\n },\n ],\n snoozeOption: {\n key: wootConstants.STATUS_TYPE.SNOOZED,\n label: this.$t('CONVERSATION.CARD_CONTEXT_MENU.SNOOZE.TITLE'),\n icon: 'snooze',\n },\n priorityConfig: {\n key: 'priority',\n label: this.$t('CONVERSATION.PRIORITY.TITLE'),\n icon: 'warning',\n options: [\n {\n label: this.$t('CONVERSATION.PRIORITY.OPTIONS.NONE'),\n key: null,\n },\n {\n label: this.$t('CONVERSATION.PRIORITY.OPTIONS.URGENT'),\n key: 'urgent',\n },\n {\n label: this.$t('CONVERSATION.PRIORITY.OPTIONS.HIGH'),\n key: 'high',\n },\n {\n label: this.$t('CONVERSATION.PRIORITY.OPTIONS.MEDIUM'),\n key: 'medium',\n },\n {\n label: this.$t('CONVERSATION.PRIORITY.OPTIONS.LOW'),\n key: 'low',\n },\n ].filter(item => item.key !== this.priority),\n },\n labelMenuConfig: {\n key: 'label',\n icon: 'tag',\n label: this.$t('CONVERSATION.CARD_CONTEXT_MENU.ASSIGN_LABEL'),\n },\n agentMenuConfig: {\n key: 'agent',\n icon: 'person-add',\n label: this.$t('CONVERSATION.CARD_CONTEXT_MENU.ASSIGN_AGENT'),\n },\n teamMenuConfig: {\n key: 'team',\n icon: 'people-team-add',\n label: this.$t('CONVERSATION.CARD_CONTEXT_MENU.ASSIGN_TEAM'),\n },\n };\n },\n computed: {\n ...mapGetters({\n labels: 'labels/getLabels',\n teams: 'teams/getTeams',\n assignableAgentsUiFlags: 'inboxAssignableAgents/getUIFlags',\n currentUser: 'getCurrentUser',\n currentAccountId: 'getCurrentAccountId',\n }),\n filteredAgentOnAvailability() {\n const agents = this.$store.getters[\n 'inboxAssignableAgents/getAssignableAgents'\n ](this.inboxId);\n const agentsByUpdatedPresence = getAgentsByUpdatedPresence(\n agents,\n this.currentUser,\n this.currentAccountId\n );\n const filteredAgents = getSortedAgentsByAvailability(\n agentsByUpdatedPresence\n );\n return filteredAgents;\n },\n assignableAgents() {\n return [\n {\n confirmed: true,\n name: 'None',\n id: null,\n role: 'agent',\n account_id: 0,\n email: 'None',\n },\n ...this.filteredAgentOnAvailability,\n ];\n },\n showSnooze() {\n // Don't show snooze if the conversation is already snoozed/resolved/pending\n return this.status === wootConstants.STATUS_TYPE.OPEN;\n },\n },\n mounted() {\n this.$store.dispatch('inboxAssignableAgents/fetch', [this.inboxId]);\n },\n methods: {\n toggleStatus(status, snoozedUntil) {\n this.$emit('updateConversation', status, snoozedUntil);\n },\n async snoozeConversation() {\n await this.$store.dispatch('setContextMenuChatId', this.chatId);\n const ninja = document.querySelector('ninja-keys');\n ninja.open({ parent: 'snooze_conversation' });\n },\n assignPriority(priority) {\n this.$emit('assignPriority', priority);\n },\n show(key) {\n // If the conversation status is same as the action, then don't display the option\n // i.e.: Don't show an option to resolve if the conversation is already resolved.\n return this.status !== key;\n },\n generateMenuLabelConfig(option, type = 'text') {\n return {\n key: option.id,\n ...(type === 'icon' && { icon: option.icon }),\n ...(type === 'label' && { color: option.color }),\n ...(type === 'agent' && { thumbnail: option.thumbnail }),\n ...(type === 'agent' && { status: option.availability_status }),\n ...(type === 'text' && { label: option.label }),\n ...(type === 'label' && { label: option.title }),\n ...(type === 'agent' && { label: option.name }),\n ...(type === 'team' && { label: option.name }),\n };\n },\n },\n};\n</script>\n\n<template>\n <div class=\"p-1 rounded-md shadow-xl bg-n-alpha-3/50 backdrop-blur-[100px]\">\n <MenuItem\n v-if=\"!hasUnreadMessages\"\n :option=\"unreadOption\"\n variant=\"icon\"\n @click.stop=\"$emit('markAsUnread')\"\n />\n <MenuItem\n v-else\n :option=\"readOption\"\n variant=\"icon\"\n @click.stop=\"$emit('markAsRead')\"\n />\n <hr class=\"m-1 rounded border-b border-n-weak dark:border-n-weak\" />\n <template v-for=\"option in statusMenuConfig\">\n <MenuItem\n v-if=\"show(option.key)\"\n :key=\"option.key\"\n :option=\"option\"\n variant=\"icon\"\n @click.stop=\"toggleStatus(option.key, null)\"\n />\n </template>\n <MenuItem\n v-if=\"showSnooze\"\n :option=\"snoozeOption\"\n variant=\"icon\"\n @click.stop=\"snoozeConversation()\"\n />\n <hr class=\"m-1 rounded border-b border-n-weak dark:border-n-weak\" />\n <MenuItemWithSubmenu :option=\"priorityConfig\">\n <MenuItem\n v-for=\"(option, i) in priorityConfig.options\"\n :key=\"i\"\n :option=\"option\"\n @click.stop=\"assignPriority(option.key)\"\n />\n </MenuItemWithSubmenu>\n <MenuItemWithSubmenu\n :option=\"labelMenuConfig\"\n :sub-menu-available=\"!!labels.length\"\n >\n <MenuItem\n v-for=\"label in labels\"\n :key=\"label.id\"\n :option=\"generateMenuLabelConfig(label, 'label')\"\n variant=\"label\"\n @click.stop=\"$emit('assignLabel', label)\"\n />\n </MenuItemWithSubmenu>\n <MenuItemWithSubmenu\n :option=\"agentMenuConfig\"\n :sub-menu-available=\"!!assignableAgents.length\"\n >\n <AgentLoadingPlaceholder v-if=\"assignableAgentsUiFlags.isFetching\" />\n <template v-else>\n <MenuItem\n v-for=\"agent in assignableAgents\"\n :key=\"agent.id\"\n :option=\"generateMenuLabelConfig(agent, 'agent')\"\n variant=\"agent\"\n @click.stop=\"$emit('assignAgent', agent)\"\n />\n </template>\n </MenuItemWithSubmenu>\n <MenuItemWithSubmenu\n :option=\"teamMenuConfig\"\n :sub-menu-available=\"!!teams.length\"\n >\n <MenuItem\n v-for=\"team in teams\"\n :key=\"team.id\"\n :option=\"generateMenuLabelConfig(team, 'team')\"\n @click.stop=\"$emit('assignTeam', team)\"\n />\n </MenuItemWithSubmenu>\n </div>\n</template>\n","<script>\nconst MINUTE_IN_MILLI_SECONDS = 60000;\nconst HOUR_IN_MILLI_SECONDS = MINUTE_IN_MILLI_SECONDS * 60;\nconst DAY_IN_MILLI_SECONDS = HOUR_IN_MILLI_SECONDS * 24;\n\nimport {\n dynamicTime,\n dateFormat,\n shortTimestamp,\n} from 'shared/helpers/timeHelper';\n\nexport default {\n name: 'TimeAgo',\n props: {\n isAutoRefreshEnabled: {\n type: Boolean,\n default: true,\n },\n lastActivityTimestamp: {\n type: [String, Date, Number],\n default: '',\n },\n createdAtTimestamp: {\n type: [String, Date, Number],\n default: '',\n },\n },\n data() {\n return {\n lastActivityAtTimeAgo: dynamicTime(this.lastActivityTimestamp),\n createdAtTimeAgo: dynamicTime(this.createdAtTimestamp),\n timer: null,\n };\n },\n computed: {\n lastActivityTime() {\n return shortTimestamp(this.lastActivityAtTimeAgo);\n },\n createdAtTime() {\n return shortTimestamp(this.createdAtTimeAgo);\n },\n createdAt() {\n const createdTimeDiff = Date.now() - this.createdAtTimestamp * 1000;\n const isBeforeAMonth = createdTimeDiff > DAY_IN_MILLI_SECONDS * 30;\n return !isBeforeAMonth\n ? `${this.$t('CHAT_LIST.CHAT_TIME_STAMP.CREATED.LATEST')} ${\n this.createdAtTimeAgo\n }`\n : `${this.$t('CHAT_LIST.CHAT_TIME_STAMP.CREATED.OLDEST')} ${dateFormat(\n this.createdAtTimestamp\n )}`;\n },\n lastActivity() {\n const lastActivityTimeDiff =\n Date.now() - this.lastActivityTimestamp * 1000;\n const isNotActive = lastActivityTimeDiff > DAY_IN_MILLI_SECONDS * 30;\n return !isNotActive\n ? `${this.$t('CHAT_LIST.CHAT_TIME_STAMP.LAST_ACTIVITY.ACTIVE')} ${\n this.lastActivityAtTimeAgo\n }`\n : `${this.$t(\n 'CHAT_LIST.CHAT_TIME_STAMP.LAST_ACTIVITY.NOT_ACTIVE'\n )} ${dateFormat(this.lastActivityTimestamp)}`;\n },\n tooltipText() {\n return `${this.createdAt}\n ${this.lastActivity}`;\n },\n },\n watch: {\n lastActivityTimestamp() {\n this.lastActivityAtTimeAgo = dynamicTime(this.lastActivityTimestamp);\n },\n createdAtTimestamp() {\n this.createdAtTimeAgo = dynamicTime(this.createdAtTimestamp);\n },\n },\n mounted() {\n if (this.isAutoRefreshEnabled) {\n this.createTimer();\n }\n },\n unmounted() {\n clearTimeout(this.timer);\n },\n methods: {\n createTimer() {\n this.timer = setTimeout(() => {\n this.lastActivityAtTimeAgo = dynamicTime(this.lastActivityTimestamp);\n this.createdAtTimeAgo = dynamicTime(this.createdAtTimestamp);\n this.createTimer();\n }, this.refreshTime());\n },\n refreshTime() {\n const timeDiff = Date.now() - this.lastActivityTimestamp * 1000;\n if (timeDiff > DAY_IN_MILLI_SECONDS) {\n return DAY_IN_MILLI_SECONDS;\n }\n if (timeDiff > HOUR_IN_MILLI_SECONDS) {\n return HOUR_IN_MILLI_SECONDS;\n }\n\n return MINUTE_IN_MILLI_SECONDS;\n },\n },\n};\n</script>\n\n<template>\n <div\n v-tooltip.top=\"{\n content: tooltipText,\n delay: { show: 1000, hide: 0 },\n hideOnClick: true,\n }\"\n class=\"ml-auto leading-4 text-xxs text-n-slate-10 hover:text-slate-11\"\n >\n <span>{{ `${createdAtTime} • ${lastActivityTime}` }}</span>\n </div>\n</template>\n","<script>\nimport { CONVERSATION_PRIORITY } from '../../../../shared/constants/messages';\n\nexport default {\n name: 'PriorityMark',\n props: {\n priority: {\n type: String,\n default: '',\n validate: value =>\n [...Object.values(CONVERSATION_PRIORITY), ''].includes(value),\n },\n },\n data() {\n return {\n CONVERSATION_PRIORITY,\n };\n },\n computed: {\n tooltipText() {\n return this.$t(\n `CONVERSATION.PRIORITY.OPTIONS.${this.priority.toUpperCase()}`\n );\n },\n isUrgent() {\n return this.priority === CONVERSATION_PRIORITY.URGENT;\n },\n },\n};\n</script>\n\n<!-- eslint-disable-next-line vue/no-root-v-if -->\n<template>\n <span\n v-if=\"priority\"\n v-tooltip=\"{\n content: tooltipText,\n delay: { show: 1500, hide: 0 },\n hideOnClick: true,\n }\"\n class=\"shrink-0 rounded-sm inline-flex items-center justify-center w-3.5 h-3.5\"\n :class=\"{\n 'bg-n-ruby-4 text-n-ruby-10': isUrgent,\n 'bg-n-slate-4 text-n-slate-11': !isUrgent,\n }\"\n >\n <fluent-icon\n :icon=\"`priority-${priority.toLowerCase()}`\"\n :size=\"isUrgent ? 12 : 14\"\n class=\"flex-shrink-0\"\n view-box=\"0 0 14 14\"\n />\n </span>\n</template>\n","<script>\nimport { evaluateSLAStatus } from '@chatwoot/utils';\nimport SLAPopoverCard from './SLAPopoverCard.vue';\n\nconst REFRESH_INTERVAL = 60000;\n\nexport default {\n components: {\n SLAPopoverCard,\n },\n props: {\n chat: {\n type: Object,\n default: () => ({}),\n },\n showExtendedInfo: {\n type: Boolean,\n default: false,\n },\n },\n data() {\n return {\n timer: null,\n showSlaPopover: false,\n slaStatus: {\n threshold: null,\n isSlaMissed: false,\n type: null,\n icon: null,\n },\n };\n },\n computed: {\n slaPolicyId() {\n return this.chat?.sla_policy_id;\n },\n appliedSLA() {\n return this.chat?.applied_sla;\n },\n slaEvents() {\n return this.chat?.sla_events;\n },\n hasSlaThreshold() {\n return this.slaStatus?.threshold;\n },\n isSlaMissed() {\n return this.slaStatus?.isSlaMissed;\n },\n slaTextStyles() {\n return this.isSlaMissed ? 'text-n-ruby-11' : 'text-n-amber-11';\n },\n slaStatusText() {\n const upperCaseType = this.slaStatus?.type?.toUpperCase(); // FRT, NRT, or RT\n const statusKey = this.isSlaMissed ? 'MISSED' : 'DUE';\n\n return this.$t(`CONVERSATION.HEADER.SLA_STATUS.${upperCaseType}`, {\n status: this.$t(`CONVERSATION.HEADER.SLA_STATUS.${statusKey}`),\n });\n },\n showSlaPopoverCard() {\n return (\n this.showExtendedInfo && this.showSlaPopover && this.slaEvents.length\n );\n },\n },\n watch: {\n chat() {\n this.updateSlaStatus();\n },\n },\n mounted() {\n this.updateSlaStatus();\n this.createTimer();\n },\n unmounted() {\n if (this.timer) {\n clearTimeout(this.timer);\n }\n },\n methods: {\n createTimer() {\n this.timer = setTimeout(() => {\n this.updateSlaStatus();\n this.createTimer();\n }, REFRESH_INTERVAL);\n },\n updateSlaStatus() {\n this.slaStatus = evaluateSLAStatus({\n appliedSla: this.appliedSLA,\n chat: this.chat,\n });\n },\n openSlaPopover() {\n if (!this.showExtendedInfo) return;\n this.showSlaPopover = true;\n },\n closeSlaPopover() {\n this.showSlaPopover = false;\n },\n },\n};\n</script>\n\n<!-- eslint-disable-next-line vue/no-root-v-if -->\n<template>\n <div\n v-if=\"hasSlaThreshold\"\n class=\"relative flex items-center cursor-pointer min-w-fit\"\n :class=\"\n showExtendedInfo\n ? 'h-[26px] rounded-lg bg-n-alpha-1'\n : 'rounded h-5 border border-n-strong'\n \"\n >\n <div\n v-on-clickaway=\"closeSlaPopover\"\n class=\"flex items-center w-full truncate\"\n :class=\"showExtendedInfo ? 'px-1.5' : 'px-2 gap-1'\"\n @mouseover=\"openSlaPopover()\"\n >\n <div\n class=\"flex items-center gap-1\"\n :class=\"\n showExtendedInfo &&\n 'ltr:pr-1.5 rtl:pl-1.5 ltr:border-r rtl:border-l border-n-strong'\n \"\n >\n <fluent-icon\n size=\"14\"\n :icon=\"slaStatus.icon\"\n type=\"outline\"\n :icon-lib=\"isSlaMissed ? 'lucide' : 'fluent'\"\n class=\"flex-shrink-0\"\n :class=\"slaTextStyles\"\n />\n <span\n v-if=\"showExtendedInfo\"\n class=\"text-xs font-medium\"\n :class=\"slaTextStyles\"\n >\n {{ slaStatusText }}\n </span>\n </div>\n <span\n class=\"text-xs font-medium\"\n :class=\"[slaTextStyles, showExtendedInfo && 'ltr:pl-1.5 rtl:pr-1.5']\"\n >\n {{ slaStatus.threshold }}\n </span>\n </div>\n <SLAPopoverCard\n v-if=\"showSlaPopoverCard\"\n :sla-missed-events=\"slaEvents\"\n class=\"right-0 top-7\"\n />\n </div>\n</template>\n","<script setup>\nimport { computed, onMounted, nextTick, useTemplateRef } from 'vue';\nimport { useWindowSize, useElementBounding } from '@vueuse/core';\n\nconst props = defineProps({\n x: { type: Number, default: 0 },\n y: { type: Number, default: 0 },\n});\n\nconst emit = defineEmits(['close']);\n\nconst menuRef = useTemplateRef('menuRef');\n\nconst { width: windowWidth, height: windowHeight } = useWindowSize();\nconst { width: menuWidth, height: menuHeight } = useElementBounding(menuRef);\n\nconst calculatePosition = (x, y, menuW, menuH, windowW, windowH) => {\n // Initial position\n let left = x;\n let top = y;\n\n // Boundary checks\n const isOverflowingRight = left + menuW > windowW;\n const isOverflowingBottom = top + menuH > windowH;\n\n // Adjust position if overflowing\n if (isOverflowingRight) left = windowW - menuW;\n if (isOverflowingBottom) top = windowH - menuH;\n\n return {\n left: Math.max(0, left),\n top: Math.max(0, top),\n };\n};\n\nconst position = computed(() => {\n if (!menuRef.value) return { top: `${props.y}px`, left: `${props.x}px` };\n\n const { left, top } = calculatePosition(\n props.x,\n props.y,\n menuWidth.value,\n menuHeight.value,\n windowWidth.value,\n windowHeight.value\n );\n\n return {\n top: `${top}px`,\n left: `${left}px`,\n };\n});\n\nonMounted(() => {\n nextTick(() => menuRef.value?.focus());\n});\n</script>\n\n<template>\n <Teleport to=\"body\">\n <div\n ref=\"menuRef\"\n class=\"fixed outline-none z-[9999] cursor-pointer\"\n :style=\"position\"\n tabindex=\"0\"\n @blur=\"emit('close')\"\n >\n <slot />\n </div>\n </Teleport>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { getLastMessage } from 'dashboard/helper/conversationHelper';\nimport Thumbnail from '../Thumbnail.vue';\nimport MessagePreview from './MessagePreview.vue';\nimport router from '../../../routes';\nimport { frontendURL, conversationUrl } from '../../../helper/URLHelper';\nimport InboxName from '../InboxName.vue';\nimport inboxMixin from 'shared/mixins/inboxMixin';\nimport ConversationContextMenu from './contextMenu/Index.vue';\nimport TimeAgo from 'dashboard/components/ui/TimeAgo.vue';\nimport CardLabels from './conversationCardComponents/CardLabels.vue';\nimport PriorityMark from './PriorityMark.vue';\nimport SLACardLabel from './components/SLACardLabel.vue';\nimport ContextMenu from 'dashboard/components/ui/ContextMenu.vue';\n\nexport default {\n components: {\n CardLabels,\n InboxName,\n Thumbnail,\n ConversationContextMenu,\n TimeAgo,\n MessagePreview,\n PriorityMark,\n SLACardLabel,\n ContextMenu,\n },\n mixins: [inboxMixin],\n props: {\n activeLabel: {\n type: String,\n default: '',\n },\n chat: {\n type: Object,\n default: () => {},\n },\n hideInboxName: {\n type: Boolean,\n default: false,\n },\n hideThumbnail: {\n type: Boolean,\n default: false,\n },\n teamId: {\n type: [String, Number],\n default: 0,\n },\n foldersId: {\n type: [String, Number],\n default: 0,\n },\n showAssignee: {\n type: Boolean,\n default: false,\n },\n conversationType: {\n type: String,\n default: '',\n },\n selected: {\n type: Boolean,\n default: false,\n },\n enableContextMenu: {\n type: Boolean,\n default: false,\n },\n },\n emits: [\n 'contextMenuToggle',\n 'assignAgent',\n 'assignLabel',\n 'assignTeam',\n 'markAsUnread',\n 'markAsRead',\n 'assignPriority',\n 'updateConversationStatus',\n ],\n data() {\n return {\n hovered: false,\n showContextMenu: false,\n contextMenu: {\n x: null,\n y: null,\n },\n };\n },\n computed: {\n ...mapGetters({\n currentChat: 'getSelectedChat',\n inboxesList: 'inboxes/getInboxes',\n activeInbox: 'getSelectedInbox',\n accountId: 'getCurrentAccountId',\n }),\n chatMetadata() {\n return this.chat.meta || {};\n },\n\n assignee() {\n return this.chatMetadata.assignee || {};\n },\n\n currentContact() {\n return this.$store.getters['contacts/getContact'](\n this.chatMetadata.sender.id\n );\n },\n\n isActiveChat() {\n return this.currentChat.id === this.chat.id;\n },\n\n unreadCount() {\n return this.chat.unread_count;\n },\n\n hasUnread() {\n return this.unreadCount > 0;\n },\n\n isInboxNameVisible() {\n return !this.activeInbox;\n },\n\n lastMessageInChat() {\n return getLastMessage(this.chat);\n },\n\n inbox() {\n const { inbox_id: inboxId } = this.chat;\n const stateInbox = this.$store.getters['inboxes/getInbox'](inboxId);\n return stateInbox;\n },\n\n showInboxName() {\n return (\n !this.hideInboxName &&\n this.isInboxNameVisible &&\n this.inboxesList.length > 1\n );\n },\n inboxName() {\n const stateInbox = this.inbox;\n return stateInbox.name || '';\n },\n hasSlaPolicyId() {\n return this.chat?.sla_policy_id;\n },\n },\n methods: {\n onCardClick(e) {\n const { activeInbox, chat } = this;\n const path = frontendURL(\n conversationUrl({\n accountId: this.accountId,\n activeInbox,\n id: chat.id,\n label: this.activeLabel,\n teamId: this.teamId,\n foldersId: this.foldersId,\n conversationType: this.conversationType,\n })\n );\n\n if (e.metaKey || e.ctrlKey) {\n window.open(\n window.chatwootConfig.hostURL + path,\n '_blank',\n 'noopener noreferrer nofollow'\n );\n return;\n }\n if (this.isActiveChat) {\n return;\n }\n\n router.push({ path });\n },\n onThumbnailHover() {\n this.hovered = !this.hideThumbnail;\n },\n onThumbnailLeave() {\n this.hovered = false;\n },\n onSelectConversation(checked) {\n const action = checked ? 'selectConversation' : 'deSelectConversation';\n this.$emit(action, this.chat.id, this.inbox.id);\n },\n openContextMenu(e) {\n if (!this.enableContextMenu) return;\n e.preventDefault();\n this.$emit('contextMenuToggle', true);\n this.contextMenu.x = e.pageX || e.clientX;\n this.contextMenu.y = e.pageY || e.clientY;\n this.showContextMenu = true;\n },\n closeContextMenu() {\n this.$emit('contextMenuToggle', false);\n this.showContextMenu = false;\n this.contextMenu.x = null;\n this.contextMenu.y = null;\n },\n onUpdateConversation(status, snoozedUntil) {\n this.closeContextMenu();\n this.$emit(\n 'updateConversationStatus',\n this.chat.id,\n status,\n snoozedUntil\n );\n },\n async onAssignAgent(agent) {\n this.$emit('assignAgent', agent, [this.chat.id]);\n this.closeContextMenu();\n },\n async onAssignLabel(label) {\n this.$emit('assignLabel', [label.title], [this.chat.id]);\n this.closeContextMenu();\n },\n async onAssignTeam(team) {\n this.$emit('assignTeam', team, this.chat.id);\n this.closeContextMenu();\n },\n async markAsUnread() {\n this.$emit('markAsUnread', this.chat.id);\n this.closeContextMenu();\n },\n async markAsRead() {\n this.$emit('markAsRead', this.chat.id);\n this.closeContextMenu();\n },\n async assignPriority(priority) {\n this.$emit('assignPriority', priority, this.chat.id);\n this.closeContextMenu();\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"relative flex items-start flex-grow-0 flex-shrink-0 w-auto max-w-full px-4 py-0 border-t-0 border-b-0 border-l-2 border-r-0 border-transparent border-solid cursor-pointer conversation hover:bg-n-alpha-1 dark:hover:bg-n-alpha-3 group\"\n :class=\"{\n 'active animate-card-select bg-n-alpha-1 dark:bg-n-alpha-3 border-n-weak':\n isActiveChat,\n 'unread-chat': hasUnread,\n 'has-inbox-name': showInboxName,\n 'conversation-selected': selected,\n }\"\n @click=\"onCardClick\"\n @contextmenu=\"openContextMenu($event)\"\n >\n <div\n class=\"relative\"\n @mouseenter=\"onThumbnailHover\"\n @mouseleave=\"onThumbnailLeave\"\n >\n <label\n v-if=\"hovered || selected\"\n class=\"checkbox-wrapper absolute inset-0 z-20 backdrop-blur-[2px]\"\n @click.stop\n >\n <input\n :value=\"selected\"\n :checked=\"selected\"\n class=\"checkbox\"\n type=\"checkbox\"\n @change=\"onSelectConversation($event.target.checked)\"\n />\n </label>\n <Thumbnail\n v-if=\"!hideThumbnail\"\n :src=\"currentContact.thumbnail\"\n :badge=\"inboxBadge\"\n :username=\"currentContact.name\"\n :status=\"currentContact.availability_status\"\n size=\"40px\"\n />\n </div>\n <div\n class=\"px-0 py-3 border-b group-hover:border-transparent flex-1 border-n-slate-3 w-[calc(100%-40px)]\"\n >\n <div class=\"flex justify-between conversation-card--meta\">\n <InboxName v-if=\"showInboxName\" :inbox=\"inbox\" />\n <div class=\"flex gap-2 ml-2 rtl:mr-2 rtl:ml-0\">\n <span\n v-if=\"showAssignee && assignee.name\"\n class=\"text-n-slate-11 text-xs font-medium leading-3 py-0.5 px-0 inline-flex text-ellipsis overflow-hidden whitespace-nowrap\"\n >\n <fluent-icon icon=\"person\" size=\"12\" class=\"text-n-slate-11\" />\n {{ assignee.name }}\n </span>\n <PriorityMark :priority=\"chat.priority\" />\n </div>\n </div>\n <h4\n class=\"conversation--user text-sm my-0 mx-2 capitalize pt-0.5 text-ellipsis overflow-hidden whitespace-nowrap w-[calc(100%-70px)] text-n-slate-12\"\n :class=\"hasUnread ? 'font-semibold' : 'font-medium'\"\n >\n {{ currentContact.name }}\n </h4>\n <MessagePreview\n v-if=\"lastMessageInChat\"\n :message=\"lastMessageInChat\"\n class=\"conversation--message my-0 mx-2 leading-6 h-6 max-w-[96%] w-[16.875rem] text-sm\"\n :class=\"hasUnread ? 'font-medium text-n-slate-12' : 'text-n-slate-11'\"\n />\n <p\n v-else\n class=\"conversation--message text-n-slate-11 text-sm my-0 mx-2 leading-6 h-6 max-w-[96%] w-[16.875rem] overflow-hidden text-ellipsis whitespace-nowrap\"\n :class=\"hasUnread ? 'font-medium text-n-slate-12' : 'text-n-slate-11'\"\n >\n <fluent-icon\n size=\"16\"\n class=\"-mt-0.5 align-middle inline-block text-n-slate-10\"\n icon=\"info\"\n />\n <span>\n {{ $t(`CHAT_LIST.NO_MESSAGES`) }}\n </span>\n </p>\n <div\n class=\"absolute flex flex-col conversation--meta ltr:right-4 rtl:left-4 top-4\"\n >\n <span class=\"ml-auto font-normal leading-4 text-xxs\">\n <TimeAgo\n :last-activity-timestamp=\"chat.timestamp\"\n :created-at-timestamp=\"chat.created_at\"\n />\n </span>\n <span\n class=\"unread shadow-lg rounded-full hidden text-xxs font-semibold h-4 leading-4 ml-auto mt-1 min-w-[1rem] px-1 py-0 text-center text-white bg-n-teal-9\"\n >\n {{ unreadCount > 9 ? '9+' : unreadCount }}\n </span>\n </div>\n <CardLabels :conversation-labels=\"chat.labels\" class=\"mt-0.5 mx-2 mb-0\">\n <template v-if=\"hasSlaPolicyId\" #before>\n <SLACardLabel :chat=\"chat\" class=\"ltr:mr-1 rtl:ml-1\" />\n </template>\n </CardLabels>\n </div>\n <ContextMenu\n v-if=\"showContextMenu\"\n :x=\"contextMenu.x\"\n :y=\"contextMenu.y\"\n @close=\"closeContextMenu\"\n >\n <ConversationContextMenu\n :status=\"chat.status\"\n :inbox-id=\"inbox.id\"\n :priority=\"chat.priority\"\n :chat-id=\"chat.id\"\n :has-unread-messages=\"hasUnread\"\n @update-conversation=\"onUpdateConversation\"\n @assign-agent=\"onAssignAgent\"\n @assign-label=\"onAssignLabel\"\n @assign-team=\"onAssignTeam\"\n @mark-as-unread=\"markAsUnread\"\n @mark-as-read=\"markAsRead\"\n @assign-priority=\"assignPriority\"\n />\n </ContextMenu>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.conversation {\n &.unread-chat {\n .unread {\n @apply block;\n }\n }\n\n &.compact {\n @apply pl-0;\n\n .conversation-card--meta {\n @apply ltr:pr-4 rtl:pl-4;\n }\n\n .conversation--details {\n @apply rounded-sm ml-0 pl-5 pr-2;\n }\n }\n\n &::v-deep .user-thumbnail-box {\n @apply mt-4;\n }\n\n &.conversation-selected {\n @apply bg-n-slate-2 dark:bg-n-slate-3;\n }\n\n &.has-inbox-name {\n &::v-deep .user-thumbnail-box {\n @apply mt-8;\n }\n\n .checkbox-wrapper {\n @apply mt-8;\n }\n\n .conversation--meta {\n @apply mt-4;\n }\n }\n\n .checkbox-wrapper {\n @apply flex items-center justify-center rounded-full cursor-pointer mt-4;\n\n input[type='checkbox'] {\n @apply m-0 cursor-pointer;\n }\n }\n}\n</style>\n","<script>\nimport ConversationCard from './widgets/conversation/ConversationCard.vue';\nexport default {\n components: {\n ConversationCard,\n },\n inject: [\n 'selectConversation',\n 'deSelectConversation',\n 'assignAgent',\n 'assignTeam',\n 'assignLabels',\n 'updateConversationStatus',\n 'toggleContextMenu',\n 'markAsUnread',\n 'markAsRead',\n 'assignPriority',\n 'isConversationSelected',\n ],\n props: {\n source: {\n type: Object,\n required: true,\n },\n teamId: {\n type: [String, Number],\n default: 0,\n },\n label: {\n type: String,\n default: '',\n },\n conversationType: {\n type: String,\n default: '',\n },\n foldersId: {\n type: [String, Number],\n default: 0,\n },\n showAssignee: {\n type: Boolean,\n default: false,\n },\n },\n};\n</script>\n\n<template>\n <ConversationCard\n :key=\"source.id\"\n :active-label=\"label\"\n :team-id=\"teamId\"\n :folders-id=\"foldersId\"\n :chat=\"source\"\n :conversation-type=\"conversationType\"\n :selected=\"isConversationSelected(source.id)\"\n :show-assignee=\"showAssignee\"\n enable-context-menu\n @select-conversation=\"selectConversation\"\n @de-select-conversation=\"deSelectConversation\"\n @assign-agent=\"assignAgent\"\n @assign-team=\"assignTeam\"\n @assign-label=\"assignLabels\"\n @update-conversation-status=\"updateConversationStatus\"\n @context-menu-toggle=\"toggleContextMenu\"\n @mark-as-unread=\"markAsUnread\"\n @mark-as-read=\"markAsRead\"\n @assign-priority=\"assignPriority\"\n />\n</template>\n","<script>\nimport { useAlert } from 'dashboard/composables';\nimport { CONTACTS_EVENTS } from '../../../helper/AnalyticsHelper/events';\nimport { useTrack } from 'dashboard/composables';\n\nexport default {\n props: {\n show: {\n type: Boolean,\n default: false,\n },\n activeCustomView: {\n type: Object,\n default: () => {},\n },\n customViewsId: {\n type: [String, Number],\n default: 0,\n },\n activeFilterType: {\n type: Number,\n default: 0,\n },\n openLastItemAfterDelete: {\n type: Function,\n default: () => {},\n },\n },\n emits: ['close', 'update:show'],\n computed: {\n localShow: {\n get() {\n return this.show;\n },\n set(value) {\n this.$emit('update:show', value);\n },\n },\n activeCustomViews() {\n if (this.activeFilterType === 0) {\n return 'conversation';\n }\n if (this.activeFilterType === 1) {\n return 'contact';\n }\n return '';\n },\n deleteMessage() {\n return ` ${this.activeCustomView && this.activeCustomView.name}?`;\n },\n deleteConfirmText() {\n return `${this.$t('FILTER.CUSTOM_VIEWS.DELETE.MODAL.CONFIRM.YES')}`;\n },\n deleteRejectText() {\n return `${this.$t('FILTER.CUSTOM_VIEWS.DELETE.MODAL.CONFIRM.NO')}`;\n },\n isFolderSection() {\n return this.activeFilterType === 0 && this.$route.name !== 'home';\n },\n isSegmentSection() {\n return (\n this.activeFilterType === 1 && this.$route.name !== 'contacts_dashboard'\n );\n },\n },\n\n methods: {\n async deleteSavedCustomViews() {\n try {\n const id = Number(this.customViewsId);\n const filterType = this.activeCustomViews;\n await this.$store.dispatch('customViews/delete', { id, filterType });\n this.closeDeletePopup();\n useAlert(\n this.activeFilterType === 0\n ? this.$t('FILTER.CUSTOM_VIEWS.DELETE.API_FOLDERS.SUCCESS_MESSAGE')\n : this.$t('FILTER.CUSTOM_VIEWS.DELETE.API_SEGMENTS.SUCCESS_MESSAGE')\n );\n useTrack(CONTACTS_EVENTS.DELETE_FILTER, {\n type: this.filterType === 0 ? 'folder' : 'segment',\n });\n } catch (error) {\n const errorMessage =\n error?.response?.message || this.activeFilterType === 0\n ? this.$t('FILTER.CUSTOM_VIEWS.DELETE.API_FOLDERS.SUCCESS_MESSAGE')\n : this.$t(\n 'FILTER.CUSTOM_VIEWS.DELETE.API_SEGMENTS.SUCCESS_MESSAGE'\n );\n useAlert(errorMessage);\n }\n this.openLastItemAfterDelete();\n },\n closeDeletePopup() {\n this.$emit('close');\n },\n },\n};\n</script>\n\n<template>\n <div>\n <woot-delete-modal\n v-if=\"localShow\"\n v-model:show=\"localShow\"\n :on-close=\"closeDeletePopup\"\n :on-confirm=\"deleteSavedCustomViews\"\n :title=\"$t('FILTER.CUSTOM_VIEWS.DELETE.MODAL.CONFIRM.TITLE')\"\n :message=\"$t('FILTER.CUSTOM_VIEWS.DELETE.MODAL.CONFIRM.MESSAGE')\"\n :message-value=\"deleteMessage\"\n :confirm-text=\"deleteConfirmText\"\n :reject-text=\"deleteRejectText\"\n />\n </div>\n</template>\n","import {\n getUnixTime,\n format,\n add,\n startOfWeek,\n addWeeks,\n startOfMonth,\n isMonday,\n isToday,\n setHours,\n setMinutes,\n setSeconds,\n} from 'date-fns';\nimport wootConstants from 'dashboard/constants/globals';\n\nconst SNOOZE_OPTIONS = wootConstants.SNOOZE_OPTIONS;\n\nexport const findStartOfNextWeek = currentDate => {\n const startOfNextWeek = startOfWeek(addWeeks(currentDate, 1));\n return isMonday(startOfNextWeek)\n ? startOfNextWeek\n : add(startOfNextWeek, {\n days: (8 - startOfNextWeek.getDay()) % 7,\n });\n};\n\nexport const findStartOfNextMonth = currentDate => {\n const startOfNextMonth = startOfMonth(add(currentDate, { months: 1 }));\n return isMonday(startOfNextMonth)\n ? startOfNextMonth\n : add(startOfNextMonth, {\n days: (8 - startOfNextMonth.getDay()) % 7,\n });\n};\n\nexport const findNextDay = currentDate => {\n return add(currentDate, { days: 1 });\n};\n\nexport const setHoursToNine = date => {\n return setSeconds(setMinutes(setHours(date, 9), 0), 0);\n};\n\nexport const findSnoozeTime = (snoozeType, currentDate = new Date()) => {\n let parsedDate = null;\n if (snoozeType === SNOOZE_OPTIONS.AN_HOUR_FROM_NOW) {\n parsedDate = add(currentDate, { hours: 1 });\n } else if (snoozeType === SNOOZE_OPTIONS.UNTIL_TOMORROW) {\n parsedDate = setHoursToNine(findNextDay(currentDate));\n } else if (snoozeType === SNOOZE_OPTIONS.UNTIL_NEXT_WEEK) {\n parsedDate = setHoursToNine(findStartOfNextWeek(currentDate));\n } else if (snoozeType === SNOOZE_OPTIONS.UNTIL_NEXT_MONTH) {\n parsedDate = setHoursToNine(findStartOfNextMonth(currentDate));\n }\n\n return parsedDate ? getUnixTime(parsedDate) : null;\n};\nexport const snoozedReopenTime = snoozedUntil => {\n if (!snoozedUntil) {\n return null;\n }\n const date = new Date(snoozedUntil);\n\n if (isToday(date)) {\n return format(date, 'h.mmaaa');\n }\n return snoozedUntil ? format(date, 'd MMM, h.mmaaa') : null;\n};\n\nexport const snoozedReopenTimeToTimestamp = snoozedUntil => {\n return snoozedUntil ? getUnixTime(new Date(snoozedUntil)) : null;\n};\nexport const shortenSnoozeTime = snoozedUntil => {\n if (!snoozedUntil) {\n return null;\n }\n const unitMap = {\n minutes: 'm',\n minute: 'm',\n hours: 'h',\n hour: 'h',\n days: 'd',\n day: 'd',\n months: 'mo',\n month: 'mo',\n years: 'y',\n year: 'y',\n };\n const shortenTime = snoozedUntil\n .replace(/^in\\s+/i, '')\n .replace(\n /\\s(minute|hour|day|month|year)s?\\b/gi,\n (match, unit) => unitMap[unit.toLowerCase()] || match\n );\n\n return shortenTime;\n};\n","// General Actions - Switch conversation tabs\nexport const CMD_SWITCH_TAB = 'CMD_SWITCH_TAB';\n\n// General Actions - Switch conversation status\nexport const CMD_SWITCH_STATUS = 'CMD_SWITCH_STATUS';\n\n// Conversation Actions\nexport const CMD_MUTE_CONVERSATION = 'CMD_MUTE_CONVERSATION';\nexport const CMD_UNMUTE_CONVERSATION = 'CMD_UNMUTE_CONVERSATION';\nexport const CMD_SEND_TRANSCRIPT = 'CMD_SEND_TRANSCRIPT';\nexport const CMD_TOGGLE_CONTACT_SIDEBAR = 'CMD_TOGGLE_CONTACT_SIDEBAR';\n\n// Status Commands\nexport const CMD_REOPEN_CONVERSATION = 'CMD_REOPEN_CONVERSATION';\nexport const CMD_RESOLVE_CONVERSATION = 'CMD_RESOLVE_CONVERSATION';\nexport const CMD_SNOOZE_CONVERSATION = 'CMD_SNOOZE_CONVERSATION';\nexport const CMD_AI_ASSIST = 'CMD_AI_ASSIST';\n\n// Bulk Actions\nexport const CMD_BULK_ACTION_SNOOZE_CONVERSATION =\n 'CMD_BULK_ACTION_SNOOZE_CONVERSATION';\nexport const CMD_BULK_ACTION_REOPEN_CONVERSATION =\n 'CMD_BULK_ACTION_REOPEN_CONVERSATION';\nexport const CMD_BULK_ACTION_RESOLVE_CONVERSATION =\n 'CMD_BULK_ACTION_RESOLVE_CONVERSATION';\n\n// Inbox Commands (Notifications)\nexport const CMD_SNOOZE_NOTIFICATION = 'CMD_SNOOZE_NOTIFICATION';\n","<script>\nimport { mapGetters } from 'vuex';\nimport Thumbnail from 'dashboard/components/widgets/Thumbnail.vue';\nimport Spinner from 'shared/components/Spinner.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n Thumbnail,\n Spinner,\n NextButton,\n },\n props: {\n selectedInboxes: {\n type: Array,\n default: () => [],\n },\n conversationCount: {\n type: Number,\n default: 0,\n },\n },\n emits: ['select', 'close'],\n data() {\n return {\n query: '',\n selectedAgent: null,\n goBackToAgentList: false,\n };\n },\n computed: {\n ...mapGetters({\n uiFlags: 'bulkActions/getUIFlags',\n assignableAgentsUiFlags: 'inboxAssignableAgents/getUIFlags',\n }),\n filteredAgents() {\n if (this.query) {\n return this.assignableAgents.filter(agent =>\n agent.name.toLowerCase().includes(this.query.toLowerCase())\n );\n }\n return [\n {\n confirmed: true,\n name: 'None',\n id: null,\n role: 'agent',\n account_id: 0,\n email: 'None',\n },\n ...this.assignableAgents,\n ];\n },\n assignableAgents() {\n return this.$store.getters['inboxAssignableAgents/getAssignableAgents'](\n this.selectedInboxes.join(',')\n );\n },\n conversationLabel() {\n return this.conversationCount > 1 ? 'conversations' : 'conversation';\n },\n },\n mounted() {\n this.$store.dispatch('inboxAssignableAgents/fetch', this.selectedInboxes);\n },\n methods: {\n submit() {\n this.$emit('select', this.selectedAgent);\n },\n goBack() {\n this.goBackToAgentList = true;\n this.selectedAgent = null;\n },\n assignAgent(agent) {\n this.selectedAgent = agent;\n },\n onClose() {\n this.$emit('close');\n },\n onCloseAgentList() {\n if (this.selectedAgent === null && !this.goBackToAgentList) {\n this.onClose();\n }\n this.goBackToAgentList = false;\n },\n },\n};\n</script>\n\n<template>\n <div v-on-clickaway=\"onCloseAgentList\" class=\"bulk-action__agents\">\n <div class=\"triangle\">\n <svg height=\"12\" viewBox=\"0 0 24 12\" width=\"24\">\n <path d=\"M20 12l-8-8-12 12\" fill-rule=\"evenodd\" stroke-width=\"1px\" />\n </svg>\n </div>\n <div class=\"flex items-center justify-between header\">\n <span>{{ $t('BULK_ACTION.AGENT_SELECT_LABEL') }}</span>\n <NextButton ghost xs slate icon=\"i-lucide-x\" @click=\"onClose\" />\n </div>\n <div class=\"container\">\n <div\n v-if=\"assignableAgentsUiFlags.isFetching\"\n class=\"agent__list-loading\"\n >\n <Spinner />\n <p>{{ $t('BULK_ACTION.AGENT_LIST_LOADING') }}</p>\n </div>\n <div v-else class=\"agent__list-container\">\n <ul v-if=\"!selectedAgent\">\n <li class=\"search-container\">\n <div\n class=\"flex items-center justify-between h-8 gap-2 agent-list-search\"\n >\n <fluent-icon icon=\"search\" class=\"search-icon\" size=\"16\" />\n <input\n v-model=\"query\"\n type=\"search\"\n :placeholder=\"$t('BULK_ACTION.SEARCH_INPUT_PLACEHOLDER')\"\n class=\"reset-base !outline-0 !text-sm agent--search_input\"\n />\n </div>\n </li>\n <li v-for=\"agent in filteredAgents\" :key=\"agent.id\">\n <div class=\"agent-list-item\" @click=\"assignAgent(agent)\">\n <Thumbnail\n :src=\"agent.thumbnail\"\n :status=\"agent.availability_status\"\n :username=\"agent.name\"\n size=\"22px\"\n />\n <span class=\"my-0 text-slate-800 dark:text-slate-75\">\n {{ agent.name }}\n </span>\n </div>\n </li>\n </ul>\n <div v-else class=\"agent-confirmation-container\">\n <p v-if=\"selectedAgent.id\">\n {{\n $t('BULK_ACTION.ASSIGN_CONFIRMATION_LABEL', {\n conversationCount,\n conversationLabel,\n })\n }}\n <strong>\n {{ selectedAgent.name }}\n </strong>\n <span>?</span>\n </p>\n <p v-else>\n {{\n $t('BULK_ACTION.UNASSIGN_CONFIRMATION_LABEL', {\n conversationCount,\n conversationLabel,\n })\n }}\n </p>\n <div class=\"agent-confirmation-actions\">\n <NextButton\n faded\n sm\n slate\n type=\"reset\"\n :label=\"$t('BULK_ACTION.GO_BACK_LABEL')\"\n @click=\"goBack\"\n />\n <NextButton\n sm\n type=\"submit\"\n :label=\"$t('BULK_ACTION.YES')\"\n :is-loading=\"uiFlags.isUpdating\"\n @click=\"submit\"\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.bulk-action__agents {\n @apply max-w-[75%] absolute right-2 top-12 origin-top-right w-auto z-20 min-w-[15rem] bg-n-alpha-3 backdrop-blur-[100px] border-n-weak rounded-lg border border-solid shadow-md;\n .header {\n @apply p-2.5;\n\n span {\n @apply text-sm font-medium;\n }\n }\n\n .container {\n @apply overflow-y-auto max-h-[15rem];\n .agent__list-container {\n @apply h-full;\n }\n .agent-list-search {\n @apply py-0 px-2.5 bg-n-alpha-black2 border border-solid border-n-strong rounded-md;\n .search-icon {\n @apply text-slate-400 dark:text-slate-200;\n }\n\n .agent--search_input {\n @apply border-0 text-xs m-0 dark:bg-transparent bg-transparent h-[unset] w-full;\n }\n }\n }\n .triangle {\n right: var(--triangle-position);\n @apply block z-10 absolute -top-3 text-left;\n\n svg path {\n @apply fill-n-alpha-3 backdrop-blur-[100px] stroke-n-weak;\n }\n }\n}\nul {\n @apply m-0 list-none;\n\n li {\n &:last-child {\n .agent-list-item {\n @apply last:rounded-b-lg;\n }\n }\n }\n}\n\n.agent-list-item {\n @apply flex items-center p-2.5 gap-2 cursor-pointer hover:bg-n-slate-3 dark:hover:bg-n-solid-3;\n span {\n @apply text-sm;\n }\n}\n\n.agent-confirmation-container {\n @apply flex flex-col h-full p-2.5;\n p {\n @apply flex-grow;\n }\n .agent-confirmation-actions {\n @apply w-full grid grid-cols-2 gap-2.5;\n }\n}\n.search-container {\n @apply py-0 px-2.5 sticky top-0 z-20 bg-n-alpha-3 backdrop-blur-[100px];\n}\n\n.agent__list-loading {\n @apply m-2.5 rounded-md bg-slate-25 dark:bg-slate-900 flex items-center justify-center flex-col p-5 h-[calc(95%-6.25rem)];\n}\n</style>\n","<script setup>\nimport { useI18n } from 'vue-i18n';\nimport { ref } from 'vue';\n\nimport WootDropdownItem from 'shared/components/ui/dropdown/DropdownItem.vue';\nimport WootDropdownMenu from 'shared/components/ui/dropdown/DropdownMenu.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n showResolve: {\n type: Boolean,\n default: true,\n },\n showReopen: {\n type: Boolean,\n default: true,\n },\n showSnooze: {\n type: Boolean,\n default: true,\n },\n});\n\nconst emit = defineEmits(['update', 'close']);\n\nconst { t } = useI18n();\n\nconst actions = ref([\n { icon: 'i-lucide-check', key: 'resolved' },\n { icon: 'i-lucide-redo', key: 'open' },\n { icon: 'i-lucide-alarm-clock', key: 'snoozed' },\n]);\n\nconst updateConversations = key => {\n if (key === 'snoozed') {\n // If the user clicks on the snooze option from the bulk action change status dropdown.\n // Open the snooze option for bulk action in the cmd bar.\n const ninja = document.querySelector('ninja-keys');\n ninja?.open({ parent: 'bulk_action_snooze_conversation' });\n } else {\n emit('update', key);\n }\n};\n\nconst onClose = () => {\n emit('close');\n};\n\nconst showAction = key => {\n const actionsMap = {\n resolved: props.showResolve,\n open: props.showReopen,\n snoozed: props.showSnooze,\n };\n return actionsMap[key] || false;\n};\n\nconst actionLabel = key => {\n const labelsMap = {\n resolved: t('CONVERSATION.HEADER.RESOLVE_ACTION'),\n open: t('CONVERSATION.HEADER.REOPEN_ACTION'),\n snoozed: t('BULK_ACTION.UPDATE.SNOOZE_UNTIL'),\n };\n return labelsMap[key] || '';\n};\n</script>\n\n<template>\n <div\n v-on-clickaway=\"onClose\"\n class=\"absolute z-20 w-auto origin-top-right border border-solid rounded-lg shadow-md right-2 top-12 bg-n-alpha-3 backdrop-blur-[100px] border-n-weak\"\n >\n <div\n class=\"right-[var(--triangle-position)] block z-10 absolute text-left -top-3\"\n >\n <svg height=\"12\" viewBox=\"0 0 24 12\" width=\"24\">\n <path\n d=\"M20 12l-8-8-12 12\"\n fill-rule=\"evenodd\"\n stroke-width=\"1px\"\n class=\"fill-n-alpha-3 backdrop-blur-[100px] stroke-n-weak\"\n />\n </svg>\n </div>\n <div class=\"p-2.5 flex gap-1 items-center justify-between\">\n <span class=\"text-sm font-medium text-slate-600 dark:text-slate-100\">\n {{ $t('BULK_ACTION.UPDATE.CHANGE_STATUS') }}\n </span>\n <Button ghost xs slate icon=\"i-lucide-x\" @click=\"onClose\" />\n </div>\n <div class=\"px-2.5 pt-0 pb-2.5\">\n <WootDropdownMenu class=\"m-0 list-none\">\n <template v-for=\"action in actions\">\n <WootDropdownItem v-if=\"showAction(action.key)\" :key=\"action.key\">\n <Button\n ghost\n sm\n slate\n class=\"!w-full ltr:!justify-start rtl:!justify-end\"\n :icon=\"action.icon\"\n :label=\"actionLabel(action.key)\"\n @click=\"updateConversations(action.key)\"\n />\n </WootDropdownItem>\n </template>\n </WootDropdownMenu>\n </div>\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n NextButton,\n },\n emits: ['update', 'close', 'assign'],\n data() {\n return {\n query: '',\n selectedLabels: [],\n };\n },\n computed: {\n ...mapGetters({ labels: 'labels/getLabels' }),\n filteredLabels() {\n return this.labels.filter(label =>\n label.title.toLowerCase().includes(this.query.toLowerCase())\n );\n },\n },\n methods: {\n isLabelSelected(label) {\n return this.selectedLabels.includes(label);\n },\n assignLabels(key) {\n this.$emit('update', key);\n },\n onClose() {\n this.$emit('close');\n },\n },\n};\n</script>\n\n<template>\n <div v-on-clickaway=\"onClose\" class=\"labels-container\">\n <div class=\"triangle\">\n <svg height=\"12\" viewBox=\"0 0 24 12\" width=\"24\">\n <path d=\"M20 12l-8-8-12 12\" fill-rule=\"evenodd\" stroke-width=\"1px\" />\n </svg>\n </div>\n <div class=\"flex items-center justify-between header\">\n <span>{{ $t('BULK_ACTION.LABELS.ASSIGN_LABELS') }}</span>\n <NextButton ghost xs slate icon=\"i-lucide-x\" @click=\"onClose\" />\n </div>\n <div class=\"labels-list\">\n <header class=\"labels-list__header\">\n <div\n class=\"flex items-center justify-between h-8 gap-2 label-list-search\"\n >\n <fluent-icon icon=\"search\" class=\"search-icon\" size=\"16\" />\n <input\n v-model=\"query\"\n type=\"search\"\n :placeholder=\"$t('BULK_ACTION.SEARCH_INPUT_PLACEHOLDER')\"\n class=\"reset-base !outline-0 !text-sm label--search_input\"\n />\n </div>\n </header>\n <ul class=\"labels-list__body\">\n <li\n v-for=\"label in filteredLabels\"\n :key=\"label.id\"\n class=\"label__list-item\"\n >\n <label\n class=\"item\"\n :class=\"{ 'label-selected': isLabelSelected(label.title) }\"\n >\n <input\n v-model=\"selectedLabels\"\n type=\"checkbox\"\n :value=\"label.title\"\n class=\"label-checkbox\"\n />\n <span\n class=\"overflow-hidden label-title whitespace-nowrap text-ellipsis\"\n >\n {{ label.title }}\n </span>\n <span\n class=\"label-pill\"\n :style=\"{ backgroundColor: label.color }\"\n />\n </label>\n </li>\n </ul>\n <footer class=\"labels-list__footer\">\n <NextButton\n sm\n type=\"submit\"\n :label=\"$t('BULK_ACTION.LABELS.ASSIGN_SELECTED_LABELS')\"\n :disabled=\"!selectedLabels.length\"\n @click=\"$emit('assign', selectedLabels)\"\n />\n </footer>\n </div>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.labels-list {\n @apply flex flex-col max-h-[15rem] min-h-[auto];\n\n .labels-list__header {\n @apply bg-n-alpha-3 backdrop-blur-[100px] py-0 px-2.5;\n }\n\n .labels-list__body {\n @apply flex-1 overflow-y-auto py-2.5 mx-0;\n }\n\n .labels-list__footer {\n @apply p-2;\n\n button {\n @apply w-full;\n\n .button__content {\n @apply text-center;\n }\n }\n }\n}\n\n.label-list-search {\n @apply bg-n-alpha-black2 py-0 px-2.5 border border-solid border-n-strong rounded-md;\n\n .search-icon {\n @apply text-slate-400 dark:text-slate-200;\n }\n\n .label--search_input {\n @apply border-0 text-xs m-0 dark:bg-transparent bg-transparent h-[unset] w-full;\n }\n}\n\n.labels-container {\n @apply absolute right-2 top-12 origin-top-right w-auto z-20 max-w-[15rem] min-w-[15rem] bg-n-alpha-3 backdrop-blur-[100px] border-n-weak rounded-lg border border-solid shadow-md;\n\n .header {\n @apply p-2.5;\n\n span {\n @apply text-sm font-medium;\n }\n }\n\n .container {\n @apply max-h-[15rem] overflow-y-auto;\n\n .label__list-container {\n @apply h-full;\n }\n }\n\n .triangle {\n right: var(--triangle-position);\n @apply block z-10 absolute text-left -top-3;\n\n svg path {\n @apply fill-n-alpha-3 backdrop-blur-[100px] stroke-n-weak;\n }\n }\n}\n\nul {\n @apply m-0 list-none;\n}\n\n.labels-placeholder {\n @apply p-2;\n}\n\n.label__list-item {\n @apply my-1 mx-0 py-0 px-2.5;\n\n .item {\n @apply items-center rounded-md cursor-pointer flex py-1 px-2.5 hover:bg-n-slate-3 dark:hover:bg-n-solid-3;\n\n &.label-selected {\n @apply bg-slate-50 dark:bg-slate-900;\n }\n\n span {\n @apply text-sm;\n }\n\n .label-checkbox {\n @apply my-0 mr-2.5 ml-0;\n }\n\n .label-title {\n @apply flex-grow w-full;\n }\n\n .label-pill {\n @apply bg-slate-50 rounded-md h-3 w-3 flex-shrink-0 border border-solid border-n-weak;\n }\n }\n}\n\n.search-container {\n @apply bg-n-alpha-3 backdrop-blur-[100px] py-0 px-2.5 sticky top-0 z-20;\n}\n\n.actions-container {\n @apply bg-white dark:bg-slate-900 bottom-0 p-2 sticky z-20;\n\n button {\n @apply w-full;\n }\n}\n</style>\n","<script>\nimport { mapGetters } from 'vuex';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n NextButton,\n },\n emits: ['assignTeam', 'close'],\n\n data() {\n return {\n query: '',\n selectedteams: [],\n };\n },\n computed: {\n ...mapGetters({ teams: 'teams/getTeams' }),\n filteredTeams() {\n return [\n { name: 'None', id: 0 },\n ...this.teams.filter(team =>\n team.name.toLowerCase().includes(this.query.toLowerCase())\n ),\n ];\n },\n },\n methods: {\n assignTeam(key) {\n this.$emit('assignTeam', key);\n },\n onClose() {\n this.$emit('close');\n },\n },\n};\n</script>\n\n<template>\n <div v-on-clickaway=\"onClose\" class=\"bulk-action__teams\">\n <div class=\"triangle\">\n <svg height=\"12\" viewBox=\"0 0 24 12\" width=\"24\">\n <path d=\"M20 12l-8-8-12 12\" fill-rule=\"evenodd\" stroke-width=\"1px\" />\n </svg>\n </div>\n <div class=\"flex items-center justify-between header\">\n <span>{{ $t('BULK_ACTION.TEAMS.TEAM_SELECT_LABEL') }}</span>\n <NextButton ghost xs slate icon=\"i-lucide-x\" @click=\"onClose\" />\n </div>\n <div class=\"container\">\n <div class=\"team__list-container\">\n <ul>\n <li class=\"search-container\">\n <div\n class=\"flex items-center justify-between h-8 gap-2 agent-list-search\"\n >\n <fluent-icon icon=\"search\" class=\"search-icon\" size=\"16\" />\n <input\n v-model=\"query\"\n type=\"search\"\n :placeholder=\"$t('BULK_ACTION.SEARCH_INPUT_PLACEHOLDER')\"\n class=\"reset-base !outline-0 !text-sm agent--search_input\"\n />\n </div>\n </li>\n <template v-if=\"filteredTeams.length\">\n <li v-for=\"team in filteredTeams\" :key=\"team.id\">\n <div class=\"team__list-item\" @click=\"assignTeam(team)\">\n <span\n class=\"my-0 ltr:ml-2 rtl:mr-2 text-slate-800 dark:text-slate-75\"\n >\n {{ team.name }}\n </span>\n </div>\n </li>\n </template>\n <li v-else>\n <div class=\"team__list-item\">\n <span\n class=\"my-0 ltr:ml-2 rtl:mr-2 text-slate-800 dark:text-slate-75\"\n >\n {{ $t('BULK_ACTION.TEAMS.NO_TEAMS_AVAILABLE') }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.bulk-action__teams {\n @apply max-w-[75%] absolute right-2 top-12 origin-top-right w-auto z-20 min-w-[15rem] bg-n-alpha-3 backdrop-blur-[100px] border-n-weak rounded-lg border border-solid shadow-md;\n .header {\n @apply p-2.5;\n\n span {\n @apply text-sm font-medium;\n }\n }\n\n .container {\n @apply overflow-y-auto max-h-[15rem];\n .team__list-container {\n @apply h-full;\n }\n .agent-list-search {\n @apply py-0 px-2.5 bg-n-alpha-black2 border border-solid border-n-strong rounded-md;\n .search-icon {\n @apply text-slate-400 dark:text-slate-200;\n }\n\n .agent--search_input {\n @apply border-0 text-xs m-0 dark:bg-transparent bg-transparent w-full h-[unset];\n }\n }\n }\n .triangle {\n right: var(--triangle-position);\n @apply block z-10 absolute text-left -top-3;\n\n svg path {\n @apply fill-n-alpha-3 backdrop-blur-[100px] stroke-n-weak;\n }\n }\n}\nul {\n @apply m-0 list-none;\n\n li {\n &:last-child {\n .agent-list-item {\n @apply last:rounded-b-lg;\n }\n }\n }\n}\n\n.team__list-item {\n @apply flex items-center p-2.5 cursor-pointer hover:bg-n-slate-3 dark:hover:bg-n-solid-3;\n span {\n @apply text-sm;\n }\n}\n\n.search-container {\n @apply py-0 px-2.5 sticky top-0 z-20 bg-n-alpha-3 backdrop-blur-[100px];\n}\n</style>\n","<script>\nimport DatePicker from 'vue-datepicker-next';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n DatePicker,\n NextButton,\n },\n emits: ['close', 'chooseTime'],\n\n data() {\n return {\n snoozeTime: null,\n lang: {\n days: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n yearFormat: 'YYYY',\n monthFormat: 'MMMM',\n },\n };\n },\n\n methods: {\n onClose() {\n this.$emit('close');\n },\n chooseTime() {\n this.$emit('chooseTime', this.snoozeTime);\n },\n disabledDate(date) {\n // Disable all the previous dates\n const yesterday = new Date();\n yesterday.setDate(yesterday.getDate() - 1);\n return date < yesterday;\n },\n disabledTime(date) {\n // Allow only time after 1 hour\n const now = new Date();\n now.setHours(now.getHours() + 1);\n return date < now;\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex flex-col\">\n <woot-modal-header :header-title=\"$t('CONVERSATION.CUSTOM_SNOOZE.TITLE')\" />\n <form\n class=\"modal-content w-full pt-2 px-5 pb-6\"\n @submit.prevent=\"chooseTime\"\n >\n <DatePicker\n v-model:value=\"snoozeTime\"\n type=\"datetime\"\n inline\n input-class=\"mx-input \"\n :lang=\"lang\"\n :disabled-date=\"disabledDate\"\n :disabled-time=\"disabledTime\"\n />\n <div class=\"flex flex-row justify-end w-full gap-2 px-0 py-2\">\n <NextButton\n faded\n slate\n type=\"reset\"\n :label=\"$t('CONVERSATION.CUSTOM_SNOOZE.CANCEL')\"\n @click.prevent=\"onClose\"\n />\n <NextButton\n type=\"submit\"\n :label=\"$t('CONVERSATION.CUSTOM_SNOOZE.APPLY')\"\n />\n </div>\n </form>\n </div>\n</template>\n","<script>\nimport { getUnixTime } from 'date-fns';\nimport { findSnoozeTime } from 'dashboard/helper/snoozeHelpers';\nimport { emitter } from 'shared/helpers/mitt';\nimport wootConstants from 'dashboard/constants/globals';\nimport {\n CMD_BULK_ACTION_SNOOZE_CONVERSATION,\n CMD_BULK_ACTION_REOPEN_CONVERSATION,\n CMD_BULK_ACTION_RESOLVE_CONVERSATION,\n} from 'dashboard/helper/commandbar/events';\n\nimport NextButton from 'dashboard/components-next/button/Button.vue';\nimport AgentSelector from './AgentSelector.vue';\nimport UpdateActions from './UpdateActions.vue';\nimport LabelActions from './LabelActions.vue';\nimport TeamActions from './TeamActions.vue';\nimport CustomSnoozeModal from 'dashboard/components/CustomSnoozeModal.vue';\nexport default {\n components: {\n AgentSelector,\n UpdateActions,\n LabelActions,\n TeamActions,\n CustomSnoozeModal,\n NextButton,\n },\n props: {\n conversations: {\n type: Array,\n default: () => [],\n },\n allConversationsSelected: {\n type: Boolean,\n default: false,\n },\n selectedInboxes: {\n type: Array,\n default: () => [],\n },\n showOpenAction: {\n type: Boolean,\n default: false,\n },\n showResolvedAction: {\n type: Boolean,\n default: false,\n },\n showSnoozedAction: {\n type: Boolean,\n default: false,\n },\n },\n emits: [\n 'selectAllConversations',\n 'assignAgent',\n 'updateConversations',\n 'assignLabels',\n 'assignTeam',\n 'resolveConversations',\n ],\n data() {\n return {\n showAgentsList: false,\n showUpdateActions: false,\n showLabelActions: false,\n showTeamsList: false,\n popoverPositions: {},\n showCustomTimeSnoozeModal: false,\n };\n },\n mounted() {\n emitter.on(\n CMD_BULK_ACTION_SNOOZE_CONVERSATION,\n this.onCmdSnoozeConversation\n );\n emitter.on(\n CMD_BULK_ACTION_REOPEN_CONVERSATION,\n this.onCmdReopenConversation\n );\n emitter.on(\n CMD_BULK_ACTION_RESOLVE_CONVERSATION,\n this.onCmdResolveConversation\n );\n },\n unmounted() {\n emitter.off(\n CMD_BULK_ACTION_SNOOZE_CONVERSATION,\n this.onCmdSnoozeConversation\n );\n emitter.off(\n CMD_BULK_ACTION_REOPEN_CONVERSATION,\n this.onCmdReopenConversation\n );\n emitter.off(\n CMD_BULK_ACTION_RESOLVE_CONVERSATION,\n this.onCmdResolveConversation\n );\n },\n methods: {\n onCmdSnoozeConversation(snoozeType) {\n if (snoozeType === wootConstants.SNOOZE_OPTIONS.UNTIL_CUSTOM_TIME) {\n this.showCustomTimeSnoozeModal = true;\n } else {\n this.updateConversations('snoozed', findSnoozeTime(snoozeType) || null);\n }\n },\n onCmdReopenConversation() {\n this.updateConversations('open', null);\n },\n onCmdResolveConversation() {\n this.updateConversations('resolved', null);\n },\n customSnoozeTime(customSnoozedTime) {\n this.showCustomTimeSnoozeModal = false;\n if (customSnoozedTime) {\n this.updateConversations('snoozed', getUnixTime(customSnoozedTime));\n }\n },\n hideCustomSnoozeModal() {\n this.showCustomTimeSnoozeModal = false;\n },\n selectAll(e) {\n this.$emit('selectAllConversations', e.target.checked);\n },\n submit(agent) {\n this.$emit('assignAgent', agent);\n },\n updateConversations(status, snoozedUntil) {\n this.$emit('updateConversations', status, snoozedUntil);\n },\n assignLabels(labels) {\n this.$emit('assignLabels', labels);\n },\n assignTeam(team) {\n this.$emit('assignTeam', team);\n },\n resolveConversations() {\n this.$emit('resolveConversations');\n },\n toggleUpdateActions() {\n this.showUpdateActions = !this.showUpdateActions;\n },\n toggleLabelActions() {\n this.showLabelActions = !this.showLabelActions;\n },\n toggleAgentList() {\n this.showAgentsList = !this.showAgentsList;\n },\n toggleTeamsList() {\n this.showTeamsList = !this.showTeamsList;\n },\n },\n};\n</script>\n\n<template>\n <div class=\"bulk-action__container\">\n <div class=\"flex items-center justify-between\">\n <label class=\"flex items-center justify-between bulk-action__panel\">\n <input\n type=\"checkbox\"\n class=\"checkbox\"\n :checked=\"allConversationsSelected\"\n :indeterminate.prop=\"!allConversationsSelected\"\n @change=\"selectAll($event)\"\n />\n <span>\n {{\n $t('BULK_ACTION.CONVERSATIONS_SELECTED', {\n conversationCount: conversations.length,\n })\n }}\n </span>\n </label>\n <div class=\"flex items-center gap-1 bulk-action__actions\">\n <NextButton\n v-tooltip=\"$t('BULK_ACTION.LABELS.ASSIGN_LABELS')\"\n icon=\"i-lucide-tags\"\n slate\n xs\n faded\n @click=\"toggleLabelActions\"\n />\n <NextButton\n v-tooltip=\"$t('BULK_ACTION.UPDATE.CHANGE_STATUS')\"\n icon=\"i-lucide-repeat\"\n slate\n xs\n faded\n @click=\"toggleUpdateActions\"\n />\n <NextButton\n v-tooltip=\"$t('BULK_ACTION.ASSIGN_AGENT_TOOLTIP')\"\n icon=\"i-lucide-user-round-plus\"\n slate\n xs\n faded\n @click=\"toggleAgentList\"\n />\n <NextButton\n v-tooltip=\"$t('BULK_ACTION.ASSIGN_TEAM_TOOLTIP')\"\n icon=\"i-lucide-users-round\"\n slate\n xs\n faded\n @click=\"toggleTeamsList\"\n />\n </div>\n <transition name=\"popover-animation\">\n <LabelActions\n v-if=\"showLabelActions\"\n class=\"label-actions-box\"\n @assign=\"assignLabels\"\n @close=\"showLabelActions = false\"\n />\n </transition>\n <transition name=\"popover-animation\">\n <UpdateActions\n v-if=\"showUpdateActions\"\n class=\"update-actions-box\"\n :selected-inboxes=\"selectedInboxes\"\n :conversation-count=\"conversations.length\"\n :show-resolve=\"!showResolvedAction\"\n :show-reopen=\"!showOpenAction\"\n :show-snooze=\"!showSnoozedAction\"\n @update=\"updateConversations\"\n @close=\"showUpdateActions = false\"\n />\n </transition>\n <transition name=\"popover-animation\">\n <AgentSelector\n v-if=\"showAgentsList\"\n class=\"agent-actions-box\"\n :selected-inboxes=\"selectedInboxes\"\n :conversation-count=\"conversations.length\"\n @select=\"submit\"\n @close=\"showAgentsList = false\"\n />\n </transition>\n <transition name=\"popover-animation\">\n <TeamActions\n v-if=\"showTeamsList\"\n class=\"team-actions-box\"\n @assign-team=\"assignTeam\"\n @close=\"showTeamsList = false\"\n />\n </transition>\n </div>\n <div v-if=\"allConversationsSelected\" class=\"bulk-action__alert\">\n {{ $t('BULK_ACTION.ALL_CONVERSATIONS_SELECTED_ALERT') }}\n </div>\n <woot-modal\n v-model:show=\"showCustomTimeSnoozeModal\"\n :on-close=\"hideCustomSnoozeModal\"\n >\n <CustomSnoozeModal\n @close=\"hideCustomSnoozeModal\"\n @choose-time=\"customSnoozeTime\"\n />\n </woot-modal>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n// For RTL direction view\n.app-rtl--wrapper {\n .bulk-action__actions {\n ::v-deep .button--only-icon:last-child {\n margin-right: var(--space-smaller);\n }\n }\n}\n\n.bulk-action__container {\n @apply p-4 relative border-b border-solid border-n-strong dark:border-n-weak;\n}\n\n.bulk-action__panel {\n @apply cursor-pointer;\n\n span {\n @apply text-xs my-0 mx-1;\n }\n\n input[type='checkbox'] {\n @apply cursor-pointer m-0;\n }\n}\n\n.bulk-action__alert {\n @apply bg-yellow-50 text-yellow-700 rounded text-xs mt-2 py-1 px-2 border border-solid border-yellow-300 dark:border-yellow-300/10 dark:bg-yellow-200/20 dark:text-yellow-400;\n}\n\n.popover-animation-enter-active,\n.popover-animation-leave-active {\n transition: transform ease-out 0.1s;\n}\n\n.popover-animation-enter {\n transform: scale(0.95);\n @apply opacity-0;\n}\n\n.popover-animation-enter-to {\n transform: scale(1);\n @apply opacity-100;\n}\n\n.popover-animation-leave {\n transform: scale(1);\n @apply opacity-100;\n}\n\n.popover-animation-leave-to {\n transform: scale(0.95);\n @apply opacity-0;\n}\n\n.label-actions-box {\n --triangle-position: 5.3125rem;\n}\n.update-actions-box {\n --triangle-position: 3.5rem;\n}\n.agent-actions-box {\n --triangle-position: 1.75rem;\n}\n.team-actions-box {\n --triangle-position: 0.125rem;\n}\n</style>\n","<script setup>\nimport { ref, defineEmits } from 'vue';\nimport { useIntersectionObserver } from '@vueuse/core';\n\nconst { options } = defineProps({\n options: {\n type: Object,\n default: () => ({ root: document, rootMargin: '100px 0 100px 0)' }),\n },\n});\n\nconst emit = defineEmits(['observed']);\nconst observedElement = ref('');\n\nuseIntersectionObserver(\n observedElement,\n ([{ isIntersecting }]) => {\n if (isIntersecting) {\n emit('observed');\n }\n },\n options\n);\n</script>\n\n<template>\n <div ref=\"observedElement\" class=\"h-6 w-full\" />\n</template>\n","import { useKeyboardEvents } from 'dashboard/composables/useKeyboardEvents';\n\nexport function useChatListKeyboardEvents(listRef) {\n const getKeyboardListenerParams = () => {\n const allConversations = listRef.value.querySelectorAll(\n 'div.conversations-list div.conversation'\n );\n const activeConversation = listRef.value.querySelector(\n 'div.conversations-list div.conversation.active'\n );\n const activeConversationIndex = [...allConversations].indexOf(\n activeConversation\n );\n const lastConversationIndex = allConversations.length - 1;\n return {\n allConversations,\n activeConversation,\n activeConversationIndex,\n lastConversationIndex,\n };\n };\n\n const handleConversationNavigation = direction => {\n const { allConversations, activeConversationIndex, lastConversationIndex } =\n getKeyboardListenerParams();\n\n // Determine the new index based on the direction\n const newIndex =\n direction === 'previous'\n ? activeConversationIndex - 1\n : activeConversationIndex + 1;\n\n // Check if the new index is within the valid range\n if (\n allConversations.length > 0 &&\n newIndex >= 0 &&\n newIndex <= lastConversationIndex\n ) {\n // Click the conversation at the new index\n allConversations[newIndex].click();\n } else if (allConversations.length > 0) {\n // If the new index is out of range, click the first or last conversation based on the direction\n const fallbackIndex =\n direction === 'previous' ? 0 : lastConversationIndex;\n allConversations[fallbackIndex].click();\n }\n };\n const keyboardEvents = {\n 'Alt+KeyJ': {\n action: () => handleConversationNavigation('previous'),\n allowOnFocusedInput: true,\n },\n 'Alt+KeyK': {\n action: () => handleConversationNavigation('next'),\n allowOnFocusedInput: true,\n },\n };\n\n useKeyboardEvents(keyboardEvents);\n}\n","import { ref, unref } from 'vue';\nimport { useStore } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\nimport { useI18n } from 'vue-i18n';\nimport { useMapGetter } from 'dashboard/composables/store.js';\n\nexport function useBulkActions() {\n const store = useStore();\n const { t } = useI18n();\n\n const selectedConversations = useMapGetter(\n 'bulkActions/getSelectedConversationIds'\n );\n const selectedInboxes = ref([]);\n\n function selectConversation(conversationId, inboxId) {\n store.dispatch('bulkActions/setSelectedConversationIds', conversationId);\n selectedInboxes.value = [...selectedInboxes.value, inboxId];\n }\n\n function deSelectConversation(conversationId, inboxId) {\n store.dispatch('bulkActions/removeSelectedConversationIds', conversationId);\n selectedInboxes.value = selectedInboxes.value.filter(\n item => item !== inboxId\n );\n }\n\n function resetBulkActions() {\n store.dispatch('bulkActions/clearSelectedConversationIds');\n selectedInboxes.value = [];\n }\n\n function selectAllConversations(check, conversationList) {\n const availableConversations = unref(conversationList);\n if (check) {\n store.dispatch(\n 'bulkActions/setSelectedConversationIds',\n availableConversations.map(item => item.id)\n );\n selectedInboxes.value = availableConversations.map(item => item.inbox_id);\n } else {\n resetBulkActions();\n }\n }\n\n function isConversationSelected(id) {\n return selectedConversations.value.includes(id);\n }\n\n // Same method used in context menu, conversationId being passed from there.\n async function onAssignAgent(agent, conversationId = null) {\n try {\n await store.dispatch('bulkActions/process', {\n type: 'Conversation',\n ids: conversationId || selectedConversations.value,\n fields: {\n assignee_id: agent.id,\n },\n });\n store.dispatch('bulkActions/clearSelectedConversationIds');\n if (conversationId) {\n useAlert(\n t('CONVERSATION.CARD_CONTEXT_MENU.API.AGENT_ASSIGNMENT.SUCCESFUL', {\n agentName: agent.name,\n conversationId,\n })\n );\n } else {\n useAlert(t('BULK_ACTION.ASSIGN_SUCCESFUL'));\n }\n } catch (err) {\n useAlert(t('BULK_ACTION.ASSIGN_FAILED'));\n }\n }\n\n // Same method used in context menu, conversationId being passed from there.\n async function onAssignLabels(newLabels, conversationId = null) {\n try {\n await store.dispatch('bulkActions/process', {\n type: 'Conversation',\n ids: conversationId || selectedConversations.value,\n labels: {\n add: newLabels,\n },\n });\n store.dispatch('bulkActions/clearSelectedConversationIds');\n if (conversationId) {\n useAlert(\n t('CONVERSATION.CARD_CONTEXT_MENU.API.LABEL_ASSIGNMENT.SUCCESFUL', {\n labelName: newLabels[0],\n conversationId,\n })\n );\n } else {\n useAlert(t('BULK_ACTION.LABELS.ASSIGN_SUCCESFUL'));\n }\n } catch (err) {\n useAlert(t('BULK_ACTION.LABELS.ASSIGN_FAILED'));\n }\n }\n\n async function onAssignTeamsForBulk(team) {\n try {\n await store.dispatch('bulkActions/process', {\n type: 'Conversation',\n ids: selectedConversations.value,\n fields: {\n team_id: team.id,\n },\n });\n store.dispatch('bulkActions/clearSelectedConversationIds');\n useAlert(t('BULK_ACTION.TEAMS.ASSIGN_SUCCESFUL'));\n } catch (err) {\n useAlert(t('BULK_ACTION.TEAMS.ASSIGN_FAILED'));\n }\n }\n\n async function onUpdateConversations(status, snoozedUntil) {\n try {\n await store.dispatch('bulkActions/process', {\n type: 'Conversation',\n ids: selectedConversations.value,\n fields: {\n status,\n },\n snoozed_until: snoozedUntil,\n });\n store.dispatch('bulkActions/clearSelectedConversationIds');\n useAlert(t('BULK_ACTION.UPDATE.UPDATE_SUCCESFUL'));\n } catch (err) {\n useAlert(t('BULK_ACTION.UPDATE.UPDATE_FAILED'));\n }\n }\n\n return {\n selectedConversations,\n selectedInboxes,\n selectConversation,\n deSelectConversation,\n selectAllConversations,\n resetBulkActions,\n isConversationSelected,\n onAssignAgent,\n onAssignLabels,\n onAssignTeamsForBulk,\n onUpdateConversations,\n };\n}\n","export const OPERATOR_TYPES_1 = [\n {\n value: 'equal_to',\n label: 'Equal to',\n },\n {\n value: 'not_equal_to',\n label: 'Not equal to',\n },\n];\n\nexport const OPERATOR_TYPES_2 = [\n {\n value: 'equal_to',\n label: 'Equal to',\n },\n {\n value: 'not_equal_to',\n label: 'Not equal to',\n },\n {\n value: 'is_present',\n label: 'Is present',\n },\n {\n value: 'is_not_present',\n label: 'Is not present',\n },\n];\n\nexport const OPERATOR_TYPES_3 = [\n {\n value: 'equal_to',\n label: 'Equal to',\n },\n {\n value: 'not_equal_to',\n label: 'Not equal to',\n },\n {\n value: 'contains',\n label: 'Contains',\n },\n {\n value: 'does_not_contain',\n label: 'Does not contain',\n },\n];\n\nexport const OPERATOR_TYPES_4 = [\n {\n value: 'equal_to',\n label: 'Equal to',\n },\n {\n value: 'not_equal_to',\n label: 'Not equal to',\n },\n {\n value: 'is_present',\n label: 'Is present',\n },\n {\n value: 'is_not_present',\n label: 'Is not present',\n },\n {\n value: 'is_greater_than',\n label: 'Is greater than',\n },\n {\n value: 'is_less_than',\n label: 'Is less than',\n },\n];\n\nexport const OPERATOR_TYPES_5 = [\n {\n value: 'is_greater_than',\n label: 'Is greater than',\n },\n {\n value: 'is_less_than',\n label: 'Is less than',\n },\n {\n value: 'days_before',\n label: 'Is x days before',\n },\n];\n","import {\n OPERATOR_TYPES_1,\n OPERATOR_TYPES_2,\n OPERATOR_TYPES_3,\n OPERATOR_TYPES_5,\n} from '../../FilterInput/FilterOperatorTypes';\n\nconst filterTypes = [\n {\n attributeKey: 'status',\n attributeI18nKey: 'STATUS',\n inputType: 'multi_select',\n dataType: 'text',\n filterOperators: OPERATOR_TYPES_1,\n attributeModel: 'standard',\n },\n {\n attributeKey: 'assignee_id',\n attributeI18nKey: 'ASSIGNEE_NAME',\n inputType: 'search_select',\n dataType: 'text',\n filterOperators: OPERATOR_TYPES_2,\n attributeModel: 'standard',\n },\n {\n attributeKey: 'inbox_id',\n attributeI18nKey: 'INBOX_NAME',\n inputType: 'search_select',\n dataType: 'text',\n filterOperators: OPERATOR_TYPES_2,\n attributeModel: 'standard',\n },\n {\n attributeKey: 'team_id',\n attributeI18nKey: 'TEAM_NAME',\n inputType: 'search_select',\n dataType: 'number',\n filterOperators: OPERATOR_TYPES_2,\n attributeModel: 'standard',\n },\n {\n attributeKey: 'display_id',\n attributeI18nKey: 'CONVERSATION_IDENTIFIER',\n inputType: 'plain_text',\n dataType: 'Number',\n filterOperators: OPERATOR_TYPES_3,\n attributeModel: 'standard',\n },\n {\n attributeKey: 'campaign_id',\n attributeI18nKey: 'CAMPAIGN_NAME',\n inputType: 'search_select',\n dataType: 'Number',\n filterOperators: OPERATOR_TYPES_2,\n attributeModel: 'standard',\n },\n {\n attributeKey: 'labels',\n attributeI18nKey: 'LABELS',\n inputType: 'multi_select',\n dataType: 'text',\n filterOperators: OPERATOR_TYPES_2,\n attributeModel: 'standard',\n },\n {\n attributeKey: 'browser_language',\n attributeI18nKey: 'BROWSER_LANGUAGE',\n inputType: 'search_select',\n dataType: 'text',\n filterOperators: OPERATOR_TYPES_1,\n attributeModel: 'additional',\n },\n {\n attributeKey: 'country_code',\n attributeI18nKey: 'COUNTRY_NAME',\n inputType: 'search_select',\n dataType: 'text',\n filterOperators: OPERATOR_TYPES_1,\n attributeModel: 'additional',\n },\n {\n attributeKey: 'referer',\n attributeI18nKey: 'REFERER_LINK',\n inputType: 'plain_text',\n dataType: 'text',\n filterOperators: OPERATOR_TYPES_3,\n attributeModel: 'additional',\n },\n {\n attributeKey: 'created_at',\n attributeI18nKey: 'CREATED_AT',\n inputType: 'date',\n dataType: 'text',\n filterOperators: OPERATOR_TYPES_5,\n attributeModel: 'standard',\n },\n {\n attributeKey: 'last_activity_at',\n attributeI18nKey: 'LAST_ACTIVITY',\n inputType: 'date',\n dataType: 'text',\n filterOperators: OPERATOR_TYPES_5,\n attributeModel: 'standard',\n },\n {\n attributeKey: 'referer',\n attributeI18nKey: 'REFERER_LINK',\n inputType: 'plain_text',\n dataType: 'text',\n filterOperators: OPERATOR_TYPES_5,\n attributeModel: 'standard',\n },\n];\n\nexport const filterAttributeGroups = [\n {\n name: 'Standard Filters',\n i18nGroup: 'STANDARD_FILTERS',\n attributes: [\n {\n key: 'status',\n i18nKey: 'STATUS',\n },\n {\n key: 'assignee_id',\n i18nKey: 'ASSIGNEE_NAME',\n },\n {\n key: 'inbox_id',\n i18nKey: 'INBOX_NAME',\n },\n {\n key: 'team_id',\n i18nKey: 'TEAM_NAME',\n },\n {\n key: 'display_id',\n i18nKey: 'CONVERSATION_IDENTIFIER',\n },\n {\n key: 'campaign_id',\n i18nKey: 'CAMPAIGN_NAME',\n },\n {\n key: 'labels',\n i18nKey: 'LABELS',\n },\n {\n key: 'created_at',\n i18nKey: 'CREATED_AT',\n },\n {\n key: 'last_activity_at',\n i18nKey: 'LAST_ACTIVITY',\n },\n ],\n },\n {\n name: 'Additional Filters',\n i18nGroup: 'ADDITIONAL_FILTERS',\n attributes: [\n {\n key: 'browser_language',\n i18nKey: 'BROWSER_LANGUAGE',\n },\n {\n key: 'country_code',\n i18nKey: 'COUNTRY_NAME',\n },\n {\n key: 'referer',\n i18nKey: 'REFERER_LINK',\n },\n ],\n },\n];\n\nexport default filterTypes;\n","import {\n OPERATOR_TYPES_1,\n OPERATOR_TYPES_3,\n OPERATOR_TYPES_5,\n} from 'dashboard/components/widgets/FilterInput/FilterOperatorTypes.js';\nconst filterTypes = [\n {\n attributeKey: 'name',\n attributeI18nKey: 'NAME',\n inputType: 'plain_text',\n dataType: 'text',\n filterOperators: OPERATOR_TYPES_1,\n attribute_type: 'standard',\n },\n {\n attributeKey: 'email',\n attributeI18nKey: 'EMAIL',\n inputType: 'plain_text',\n dataType: 'text',\n filterOperators: OPERATOR_TYPES_3,\n attribute_type: 'standard',\n },\n {\n attributeKey: 'phone_number',\n attributeI18nKey: 'PHONE_NUMBER',\n inputType: 'plain_text',\n dataType: 'text',\n filterOperators: OPERATOR_TYPES_3,\n attribute_type: 'standard',\n },\n {\n attributeKey: 'identifier',\n attributeI18nKey: 'IDENTIFIER',\n inputType: 'plain_text',\n dataType: 'number',\n filterOperators: OPERATOR_TYPES_1,\n attribute_type: 'standard',\n },\n {\n attributeKey: 'country_code',\n attributeI18nKey: 'COUNTRY',\n inputType: 'search_select',\n dataType: 'number',\n filterOperators: OPERATOR_TYPES_1,\n attribute_type: 'standard',\n },\n {\n attributeKey: 'city',\n attributeI18nKey: 'CITY',\n inputType: 'plain_text',\n dataType: 'Number',\n filterOperators: OPERATOR_TYPES_3,\n attribute_type: 'standard',\n },\n {\n attributeKey: 'created_at',\n attributeI18nKey: 'CREATED_AT',\n inputType: 'date',\n dataType: 'text',\n filterOperators: OPERATOR_TYPES_5,\n attributeModel: 'standard',\n },\n {\n attributeKey: 'last_activity_at',\n attributeI18nKey: 'LAST_ACTIVITY',\n inputType: 'date',\n dataType: 'text',\n filterOperators: OPERATOR_TYPES_5,\n attributeModel: 'standard',\n },\n {\n attributeKey: 'referer',\n attributeI18nKey: 'REFERER_LINK',\n inputType: 'plain_text',\n dataType: 'text',\n filterOperators: OPERATOR_TYPES_5,\n attributeModel: 'standard',\n },\n {\n attributeKey: 'blocked',\n attributeI18nKey: 'BLOCKED',\n inputType: 'search_select',\n dataType: 'text',\n filterOperators: OPERATOR_TYPES_1,\n attributeModel: 'standard',\n },\n];\n\nexport const filterAttributeGroups = [\n {\n name: 'Standard Filters',\n i18nGroup: 'STANDARD_FILTERS',\n attributes: [\n {\n key: 'name',\n i18nKey: 'NAME',\n },\n {\n key: 'email',\n i18nKey: 'EMAIL',\n },\n {\n key: 'phone_number',\n i18nKey: 'PHONE_NUMBER',\n },\n {\n key: 'identifier',\n i18nKey: 'IDENTIFIER',\n },\n {\n key: 'country_code',\n i18nKey: 'COUNTRY',\n },\n {\n key: 'city',\n i18nKey: 'CITY',\n },\n {\n key: 'created_at',\n i18nKey: 'CREATED_AT',\n },\n {\n key: 'last_activity_at',\n i18nKey: 'LAST_ACTIVITY',\n },\n {\n key: 'blocked',\n i18nKey: 'BLOCKED',\n },\n ],\n },\n];\n\nexport default filterTypes;\n","import wootConstants from 'dashboard/constants/globals';\nimport { useStore } from 'dashboard/composables/store';\nimport { useI18n } from 'vue-i18n';\nimport { filterAttributeGroups as conversationFilterAttributeGroups } from 'dashboard/components/widgets/conversation/advancedFilterItems';\nimport { filterAttributeGroups as contactFilterAttributeGroups } from 'dashboard/routes/dashboard/contacts/contactFilterItems';\nimport * as OPERATORS from 'dashboard/components/widgets/FilterInput/FilterOperatorTypes.js';\n\nconst customAttributeInputType = key => {\n switch (key) {\n case 'date':\n return 'date';\n case 'text':\n return 'plain_text';\n case 'list':\n return 'search_select';\n case 'checkbox':\n return 'search_select';\n default:\n return 'plain_text';\n }\n};\n\nconst getOperatorTypes = key => {\n switch (key) {\n case 'list':\n return OPERATORS.OPERATOR_TYPES_1;\n case 'text':\n return OPERATORS.OPERATOR_TYPES_3;\n case 'number':\n return OPERATORS.OPERATOR_TYPES_1;\n case 'link':\n return OPERATORS.OPERATOR_TYPES_1;\n case 'date':\n return OPERATORS.OPERATOR_TYPES_4;\n case 'checkbox':\n return OPERATORS.OPERATOR_TYPES_1;\n default:\n return OPERATORS.OPERATOR_TYPES_1;\n }\n};\n\nexport const useFilter = ({ filteri18nKey, attributeModel }) => {\n const { t: $t } = useI18n();\n const { getters } = useStore();\n\n const filterAttributeGroups =\n attributeModel === 'contact_attribute'\n ? contactFilterAttributeGroups\n : conversationFilterAttributeGroups;\n\n const setFilterAttributes = () => {\n const allCustomAttributes =\n getters['attributes/getAttributesByModel'](attributeModel);\n\n const customAttributesFormatted = {\n name: $t(`${filteri18nKey}.GROUPS.CUSTOM_ATTRIBUTES`),\n attributes: allCustomAttributes.map(attr => {\n return {\n key: attr.attribute_key,\n name: attr.attribute_display_name,\n };\n }),\n };\n\n const allFilterGroups = filterAttributeGroups.map(group => {\n return {\n name: $t(`${filteri18nKey}.GROUPS.${group.i18nGroup}`),\n attributes: group.attributes.map(attribute => {\n return {\n key: attribute.key,\n name: $t(`${filteri18nKey}.ATTRIBUTES.${attribute.i18nKey}`),\n };\n }),\n };\n });\n\n const customAttributeTypes = allCustomAttributes.map(attr => {\n return {\n attributeKey: attr.attribute_key,\n attributeI18nKey: `CUSTOM_ATTRIBUTE_${attr.attribute_display_type.toUpperCase()}`,\n inputType: customAttributeInputType(attr.attribute_display_type),\n filterOperators: getOperatorTypes(attr.attribute_display_type),\n attributeModel: 'custom_attributes',\n };\n });\n\n return {\n filterGroups: [...allFilterGroups, customAttributesFormatted],\n filterTypes: [...customAttributeTypes],\n };\n };\n\n const initializeStatusAndAssigneeFilterToModal = (\n activeStatus,\n currentUserDetails,\n activeAssigneeTab\n ) => {\n if (activeStatus !== '') {\n return {\n attribute_key: 'status',\n attribute_model: 'standard',\n filter_operator: 'equal_to',\n values: [\n {\n id: activeStatus,\n name: $t(`CHAT_LIST.CHAT_STATUS_FILTER_ITEMS.${activeStatus}.TEXT`),\n },\n ],\n query_operator: 'and',\n custom_attribute_type: '',\n };\n }\n if (activeAssigneeTab === wootConstants.ASSIGNEE_TYPE.ME) {\n return {\n attribute_key: 'assignee_id',\n filter_operator: 'equal_to',\n values: currentUserDetails,\n query_operator: 'and',\n custom_attribute_type: '',\n };\n }\n return null;\n };\n\n const initializeInboxTeamAndLabelFilterToModal = (\n conversationInbox,\n inbox,\n teamId,\n activeTeam,\n label\n ) => {\n const filters = [];\n if (conversationInbox) {\n filters.push({\n attribute_key: 'inbox_id',\n attribute_model: 'standard',\n filter_operator: 'equal_to',\n values: [\n {\n id: conversationInbox,\n name: inbox.name,\n },\n ],\n query_operator: 'and',\n custom_attribute_type: '',\n });\n }\n if (teamId) {\n filters.push({\n attribute_key: 'team_id',\n attribute_model: 'standard',\n filter_operator: 'equal_to',\n values: activeTeam,\n query_operator: 'and',\n custom_attribute_type: '',\n });\n }\n if (label) {\n filters.push({\n attribute_key: 'labels',\n attribute_model: 'standard',\n filter_operator: 'equal_to',\n values: [\n {\n id: label,\n name: label,\n },\n ],\n query_operator: 'and',\n custom_attribute_type: '',\n });\n }\n return filters;\n };\n\n return {\n setFilterAttributes,\n initializeStatusAndAssigneeFilterToModal,\n initializeInboxTeamAndLabelFilterToModal,\n };\n};\n","export const getInputType = (key, operator, filterTypes) => {\n if (key === 'created_at' || key === 'last_activity_at')\n if (operator === 'days_before') return 'plain_text';\n const type = filterTypes.find(filter => filter.attributeKey === key);\n return type?.inputType;\n};\n\nexport const generateCustomAttributesInputType = type => {\n const filterInputTypes = {\n text: 'string',\n number: 'string',\n date: 'string',\n checkbox: 'multi_select',\n list: 'multi_select',\n link: 'string',\n };\n return filterInputTypes[type];\n};\n\nexport const getAttributeInputType = (key, allCustomAttributes) => {\n const customAttribute = allCustomAttributes.find(\n attr => attr.attribute_key === key\n );\n const { attribute_display_type } = customAttribute;\n const filterInputTypes = generateCustomAttributesInputType(\n attribute_display_type\n );\n return filterInputTypes;\n};\n\nexport const getValuesName = (values, list, idKey, nameKey) => {\n const item = list?.find(v => v[idKey] === values[0]);\n return {\n id: values[0],\n name: item ? item[nameKey] : values[0],\n };\n};\n\nexport const getValuesForStatus = values => {\n return values.map(value => ({ id: value, name: value }));\n};\n\nconst getValuesForLabels = (values, labels) => {\n const selectedLabels = labels.filter(label => values.includes(label.title));\n return selectedLabels.map(({ title }) => ({\n id: title,\n name: title,\n }));\n};\n\nconst getValuesForLanguages = (values, languages) => {\n const selectedLanguages = languages.filter(language =>\n values.includes(language.id)\n );\n return selectedLanguages.map(({ id, name }) => ({\n id: id.toLowerCase(),\n name: name,\n }));\n};\n\nconst getValuesForCountries = (values, countries) => {\n const selectedCountries = countries.filter(country =>\n values.includes(country.id)\n );\n return selectedCountries.map(({ id, name }) => ({\n id: id,\n name: name,\n }));\n};\n\nexport const getValuesForFilter = (filter, params) => {\n const { attribute_key, values } = filter;\n const { languages, countries, agents, inboxes, teams, campaigns, labels } =\n params;\n switch (attribute_key) {\n case 'status':\n return getValuesForStatus(values);\n case 'assignee_id':\n return getValuesName(values, agents, 'id', 'name');\n case 'inbox_id':\n return getValuesName(values, inboxes, 'id', 'name');\n case 'team_id':\n return getValuesName(values, teams, 'id', 'name');\n case 'campaign_id':\n return getValuesName(values, campaigns, 'id', 'title');\n case 'labels': {\n return getValuesForLabels(values, labels);\n }\n case 'browser_language': {\n return getValuesForLanguages(values, languages);\n }\n case 'country_code': {\n return getValuesForCountries(values, countries);\n }\n default:\n return { id: values[0], name: values[0] };\n }\n};\n\nexport const generateValuesForEditCustomViews = (filter, params) => {\n const { attribute_key, filter_operator, values } = filter;\n const { filterTypes, allCustomAttributes } = params;\n const inboxType = getInputType(attribute_key, filter_operator, filterTypes);\n\n if (inboxType === undefined) {\n const filterInputTypes = getAttributeInputType(\n attribute_key,\n allCustomAttributes\n );\n return filterInputTypes === 'string'\n ? values[0].toString()\n : { id: values[0], name: values[0] };\n }\n\n return inboxType === 'multi_select' || inboxType === 'search_select'\n ? getValuesForFilter(filter, params)\n : values[0].toString();\n};\n","<script setup>\n// [TODO] This componet is too big and bulky to be in the same file, we can consider splitting this into multiple\n// composables and components, useVirtualChatList, useChatlistFilters\nimport {\n ref,\n unref,\n provide,\n computed,\n watch,\n onMounted,\n defineEmits,\n} from 'vue';\nimport { useStore } from 'vuex';\nimport { useRoute, useRouter } from 'vue-router';\nimport {\n useMapGetter,\n useFunctionGetter,\n} from 'dashboard/composables/store.js';\n\n// [VITE] [TODO] We are using vue-virtual-scroll for now, since that seemed the simplest way to migrate\n// from the current one. But we should consider using tanstack virtual in the future\n// https://tanstack.com/virtual/latest/docs/framework/vue/examples/variable\nimport { DynamicScroller, DynamicScrollerItem } from 'vue-virtual-scroller';\nimport ChatListHeader from './ChatListHeader.vue';\nimport ConversationFilter from 'next/filter/ConversationFilter.vue';\nimport SaveCustomView from 'next/filter/SaveCustomView.vue';\nimport ChatTypeTabs from './widgets/ChatTypeTabs.vue';\nimport ConversationItem from './ConversationItem.vue';\nimport DeleteCustomViews from 'dashboard/routes/dashboard/customviews/DeleteCustomViews.vue';\nimport ConversationBulkActions from './widgets/conversation/conversationBulkActions/Index.vue';\nimport IntersectionObserver from './IntersectionObserver.vue';\n\nimport { useUISettings } from 'dashboard/composables/useUISettings';\nimport { useAlert } from 'dashboard/composables';\nimport { useChatListKeyboardEvents } from 'dashboard/composables/chatlist/useChatListKeyboardEvents';\nimport { useBulkActions } from 'dashboard/composables/chatlist/useBulkActions';\nimport { useFilter } from 'shared/composables/useFilter';\nimport { useTrack } from 'dashboard/composables';\nimport { useI18n } from 'vue-i18n';\nimport {\n useCamelCase,\n useSnakeCase,\n} from 'dashboard/composables/useTransformKeys';\nimport { useEmitter } from 'dashboard/composables/emitter';\nimport { useEventListener } from '@vueuse/core';\n\nimport { emitter } from 'shared/helpers/mitt';\n\nimport wootConstants from 'dashboard/constants/globals';\nimport advancedFilterOptions from './widgets/conversation/advancedFilterItems';\nimport filterQueryGenerator from '../helper/filterQueryGenerator.js';\nimport languages from 'dashboard/components/widgets/conversation/advancedFilterItems/languages';\nimport countries from 'shared/constants/countries';\nimport { generateValuesForEditCustomViews } from 'dashboard/helper/customViewsHelper';\nimport { conversationListPageURL } from '../helper/URLHelper';\nimport {\n isOnMentionsView,\n isOnUnattendedView,\n} from '../store/modules/conversations/helpers/actionHelpers';\nimport {\n getUserPermissions,\n filterItemsByPermission,\n} from 'dashboard/helper/permissionsHelper.js';\nimport { CONVERSATION_EVENTS } from '../helper/AnalyticsHelper/events';\nimport { ASSIGNEE_TYPE_TAB_PERMISSIONS } from 'dashboard/constants/permissions.js';\n\nimport 'vue-virtual-scroller/dist/vue-virtual-scroller.css';\n\nconst props = defineProps({\n conversationInbox: { type: [String, Number], default: 0 },\n teamId: { type: [String, Number], default: 0 },\n label: { type: String, default: '' },\n conversationType: { type: String, default: '' },\n foldersId: { type: [String, Number], default: 0 },\n showConversationList: { default: true, type: Boolean },\n isOnExpandedLayout: { default: false, type: Boolean },\n});\n\nconst emit = defineEmits(['conversationLoad']);\nconst { uiSettings } = useUISettings();\nconst { t } = useI18n();\nconst router = useRouter();\nconst store = useStore();\n\nconst conversationListRef = ref(null);\nconst conversationDynamicScroller = ref(null);\n\nconst activeAssigneeTab = ref(wootConstants.ASSIGNEE_TYPE.ME);\nconst activeStatus = ref(wootConstants.STATUS_TYPE.OPEN);\nconst activeSortBy = ref(wootConstants.SORT_BY_TYPE.LAST_ACTIVITY_AT_DESC);\nconst showAdvancedFilters = ref(false);\n// chatsOnView is to store the chats that are currently visible on the screen,\n// which mirrors the conversationList.\nconst chatsOnView = ref([]);\nconst foldersQuery = ref({});\nconst showAddFoldersModal = ref(false);\nconst showDeleteFoldersModal = ref(false);\nconst isContextMenuOpen = ref(false);\nconst appliedFilter = ref([]);\nconst advancedFilterTypes = ref(\n advancedFilterOptions.map(filter => ({\n ...filter,\n attributeName: t(`FILTER.ATTRIBUTES.${filter.attributeI18nKey}`),\n }))\n);\n\nconst currentUser = useMapGetter('getCurrentUser');\nconst chatLists = useMapGetter('getAllConversations');\nconst mineChatsList = useMapGetter('getMineChats');\nconst allChatList = useMapGetter('getAllStatusChats');\nconst unAssignedChatsList = useMapGetter('getUnAssignedChats');\nconst chatListLoading = useMapGetter('getChatListLoadingStatus');\nconst activeInbox = useMapGetter('getSelectedInbox');\nconst conversationStats = useMapGetter('conversationStats/getStats');\nconst appliedFilters = useMapGetter('getAppliedConversationFiltersV2');\nconst folders = useMapGetter('customViews/getConversationCustomViews');\nconst agentList = useMapGetter('agents/getAgents');\nconst teamsList = useMapGetter('teams/getTeams');\nconst inboxesList = useMapGetter('inboxes/getInboxes');\nconst campaigns = useMapGetter('campaigns/getAllCampaigns');\nconst labels = useMapGetter('labels/getLabels');\nconst currentAccountId = useMapGetter('getCurrentAccountId');\n// We can't useFunctionGetter here since it needs to be called on setup?\nconst getTeamFn = useMapGetter('teams/getTeam');\n\nuseChatListKeyboardEvents(conversationListRef);\nconst {\n selectedConversations,\n selectedInboxes,\n selectConversation,\n deSelectConversation,\n selectAllConversations,\n resetBulkActions,\n isConversationSelected,\n onAssignAgent,\n onAssignLabels,\n onAssignTeamsForBulk,\n onUpdateConversations,\n} = useBulkActions();\n\nconst {\n initializeStatusAndAssigneeFilterToModal,\n initializeInboxTeamAndLabelFilterToModal,\n} = useFilter({\n filteri18nKey: 'FILTER',\n attributeModel: 'conversation_attribute',\n});\n\n// computed\nconst intersectionObserverOptions = computed(() => {\n return {\n root: conversationListRef.value,\n rootMargin: '100px 0px 100px 0px',\n };\n});\n\nconst hasAppliedFilters = computed(() => {\n return appliedFilters.value.length !== 0;\n});\n\nconst activeFolder = computed(() => {\n if (props.foldersId) {\n const activeView = folders.value.filter(\n view => view.id === Number(props.foldersId)\n );\n const [firstValue] = activeView;\n return firstValue;\n }\n return undefined;\n});\n\nconst activeFolderName = computed(() => {\n return activeFolder.value?.name;\n});\n\nconst hasActiveFolders = computed(() => {\n return Boolean(activeFolder.value && props.foldersId !== 0);\n});\n\nconst hasAppliedFiltersOrActiveFolders = computed(() => {\n return hasAppliedFilters.value || hasActiveFolders.value;\n});\n\nconst currentUserDetails = computed(() => {\n const { id, name } = currentUser.value;\n return { id, name };\n});\n\nconst userPermissions = computed(() => {\n return getUserPermissions(currentUser.value, currentAccountId.value);\n});\n\nconst assigneeTabItems = computed(() => {\n return filterItemsByPermission(\n ASSIGNEE_TYPE_TAB_PERMISSIONS,\n userPermissions.value,\n item => item.permissions\n ).map(({ key, count: countKey }) => ({\n key,\n name: t(`CHAT_LIST.ASSIGNEE_TYPE_TABS.${key}`),\n count: conversationStats.value[countKey] || 0,\n }));\n});\n\nconst showAssigneeInConversationCard = computed(() => {\n return (\n hasAppliedFiltersOrActiveFolders.value ||\n activeAssigneeTab.value === wootConstants.ASSIGNEE_TYPE.ALL\n );\n});\n\nconst currentPageFilterKey = computed(() => {\n return hasAppliedFiltersOrActiveFolders.value\n ? 'appliedFilters'\n : activeAssigneeTab.value;\n});\n\nconst inbox = useFunctionGetter('inboxes/getInbox', activeInbox);\nconst currentPage = useFunctionGetter(\n 'conversationPage/getCurrentPageFilter',\n activeAssigneeTab\n);\nconst currentFiltersPage = useFunctionGetter(\n 'conversationPage/getCurrentPageFilter',\n currentPageFilterKey\n);\nconst hasCurrentPageEndReached = useFunctionGetter(\n 'conversationPage/getHasEndReached',\n currentPageFilterKey\n);\n\nconst conversationCustomAttributes = useFunctionGetter(\n 'attributes/getAttributesByModel',\n 'conversation_attribute'\n);\n\nconst activeAssigneeTabCount = computed(() => {\n const count = assigneeTabItems.value.find(\n item => item.key === activeAssigneeTab.value\n ).count;\n return count;\n});\n\nconst conversationListPagination = computed(() => {\n const conversationsPerPage = 25;\n const hasChatsOnView =\n chatsOnView.value &&\n Array.isArray(chatsOnView.value) &&\n !chatsOnView.value.length;\n const isNoFiltersOrFoldersAndChatListNotEmpty =\n !hasAppliedFiltersOrActiveFolders.value && hasChatsOnView;\n const isUnderPerPage =\n chatsOnView.value.length < conversationsPerPage &&\n activeAssigneeTabCount.value < conversationsPerPage &&\n activeAssigneeTabCount.value > chatsOnView.value.length;\n\n if (isNoFiltersOrFoldersAndChatListNotEmpty && isUnderPerPage) {\n return 1;\n }\n\n return currentPage.value + 1;\n});\n\nconst conversationFilters = computed(() => {\n return {\n inboxId: props.conversationInbox ? props.conversationInbox : undefined,\n assigneeType: activeAssigneeTab.value,\n status: activeStatus.value,\n sortBy: activeSortBy.value,\n page: conversationListPagination.value,\n labels: props.label ? [props.label] : undefined,\n teamId: props.teamId || undefined,\n conversationType: props.conversationType || undefined,\n };\n});\n\nconst activeTeam = computed(() => {\n if (props.teamId) {\n return getTeamFn.value(props.teamId);\n }\n return {};\n});\n\nconst pageTitle = computed(() => {\n if (hasAppliedFilters.value) {\n return t('CHAT_LIST.TAB_HEADING');\n }\n if (inbox.value.name) {\n return inbox.value.name;\n }\n if (activeTeam.value.name) {\n return activeTeam.value.name;\n }\n if (props.label) {\n return `#${props.label}`;\n }\n if (props.conversationType === 'mention') {\n return t('CHAT_LIST.MENTION_HEADING');\n }\n if (props.conversationType === 'participating') {\n return t('CONVERSATION_PARTICIPANTS.SIDEBAR_MENU_TITLE');\n }\n if (props.conversationType === 'unattended') {\n return t('CHAT_LIST.UNATTENDED_HEADING');\n }\n if (hasActiveFolders.value) {\n return activeFolder.value.name;\n }\n return t('CHAT_LIST.TAB_HEADING');\n});\n\nconst conversationList = computed(() => {\n let localConversationList = [];\n\n if (!hasAppliedFiltersOrActiveFolders.value) {\n const filters = conversationFilters.value;\n if (activeAssigneeTab.value === 'me') {\n localConversationList = [...mineChatsList.value(filters)];\n } else if (activeAssigneeTab.value === 'unassigned') {\n localConversationList = [...unAssignedChatsList.value(filters)];\n } else {\n localConversationList = [...allChatList.value(filters)];\n }\n } else {\n localConversationList = [...chatLists.value];\n }\n return localConversationList;\n});\n\nconst showEndOfListMessage = computed(() => {\n return (\n conversationList.value.length &&\n hasCurrentPageEndReached.value &&\n !chatListLoading.value\n );\n});\n\nconst allConversationsSelected = computed(() => {\n return (\n conversationList.value.length === selectedConversations.value.length &&\n conversationList.value.every(el =>\n selectedConversations.value.includes(el.id)\n )\n );\n});\n\nconst uniqueInboxes = computed(() => {\n return [...new Set(selectedInboxes.value)];\n});\n\n// ---------------------- Methods -----------------------\nfunction setFiltersFromUISettings() {\n const { conversations_filter_by: filterBy = {} } = uiSettings.value;\n const { status, order_by: orderBy } = filterBy;\n activeStatus.value = status || wootConstants.STATUS_TYPE.OPEN;\n activeSortBy.value = Object.values(wootConstants.SORT_BY_TYPE).includes(\n orderBy\n )\n ? orderBy\n : wootConstants.SORT_BY_TYPE.LAST_ACTIVITY_AT_DESC;\n}\n\nfunction emitConversationLoaded() {\n emit('conversationLoad');\n // [VITE] removing this since the library has changed\n // nextTick(() => {\n // // Addressing a known issue in the virtual list library where dynamically added items\n // // might not render correctly. This workaround involves a slight manual adjustment\n // // to the scroll position, triggering the list to refresh its rendering.\n // const virtualList = conversationListRef.value;\n // const scrollToOffset = virtualList?.scrollToOffset;\n // const currentOffset = virtualList?.getOffset() || 0;\n // if (scrollToOffset) {\n // scrollToOffset(currentOffset + 1);\n // }\n // });\n}\n\nfunction fetchFilteredConversations(payload) {\n payload = useSnakeCase(payload);\n let page = currentFiltersPage.value + 1;\n store\n .dispatch('fetchFilteredConversations', {\n queryData: filterQueryGenerator(payload),\n page,\n })\n .then(emitConversationLoaded);\n\n showAdvancedFilters.value = false;\n}\n\nfunction fetchSavedFilteredConversations(payload) {\n payload = useSnakeCase(payload);\n let page = currentFiltersPage.value + 1;\n store\n .dispatch('fetchFilteredConversations', {\n queryData: payload,\n page,\n })\n .then(emitConversationLoaded);\n}\n\nfunction onApplyFilter(payload) {\n payload = useSnakeCase(payload);\n resetBulkActions();\n foldersQuery.value = filterQueryGenerator(payload);\n store.dispatch('conversationPage/reset');\n store.dispatch('emptyAllConversations');\n fetchFilteredConversations(payload);\n}\n\nfunction closeAdvanceFiltersModal() {\n showAdvancedFilters.value = false;\n appliedFilter.value = [];\n}\n\nfunction onUpdateSavedFilter(payload, folderName) {\n const transformedPayload = useSnakeCase(payload);\n const payloadData = {\n ...unref(activeFolder),\n name: unref(folderName),\n query: filterQueryGenerator(transformedPayload),\n };\n store.dispatch('customViews/update', payloadData);\n closeAdvanceFiltersModal();\n}\n\nfunction onClickOpenAddFoldersModal() {\n showAddFoldersModal.value = true;\n}\n\nfunction onCloseAddFoldersModal() {\n showAddFoldersModal.value = false;\n}\n\nfunction onClickOpenDeleteFoldersModal() {\n showDeleteFoldersModal.value = true;\n}\n\nfunction onCloseDeleteFoldersModal() {\n showDeleteFoldersModal.value = false;\n}\n\nfunction setParamsForEditFolderModal() {\n // Here we are setting the params for edit folder modal to show the existing values.\n\n // For agent, team, inboxes,and campaigns we get only the id's from the query.\n // So we are mapping the id's to the actual values.\n\n // For labels we get the name of the label from the query.\n // If we delete the label from the label list then we will not be able to show the label name.\n\n // For custom attributes we get only attribute key.\n // So we are mapping it to find the input type of the attribute to show in the edit folder modal.\n return {\n agents: agentList.value,\n teams: teamsList.value,\n inboxes: inboxesList.value,\n labels: labels.value,\n campaigns: campaigns.value,\n languages: languages,\n countries: countries,\n filterTypes: advancedFilterTypes.value,\n allCustomAttributes: conversationCustomAttributes.value,\n };\n}\n\nfunction initializeExistingFilterToModal() {\n const statusFilter = initializeStatusAndAssigneeFilterToModal(\n activeStatus.value,\n currentUserDetails.value,\n activeAssigneeTab.value\n );\n // TODO: Remove the usage of useCamelCase after migrating useFilter to camelcase\n if (statusFilter) {\n appliedFilter.value = [...appliedFilter.value, useCamelCase(statusFilter)];\n }\n\n // TODO: Remove the usage of useCamelCase after migrating useFilter to camelcase\n const otherFilters = initializeInboxTeamAndLabelFilterToModal(\n props.conversationInbox,\n inbox.value,\n props.teamId,\n activeTeam.value,\n props.label\n ).map(useCamelCase);\n\n appliedFilter.value = [...appliedFilter.value, ...otherFilters];\n}\n\nfunction initializeFolderToFilterModal(newActiveFolder) {\n // Here we are setting the params for edit folder modal.\n // To show the existing values. when we click on edit folder button.\n\n // Here we get the query from the active folder.\n // And we are mapping the query to the actual values.\n // To show in the edit folder modal by the help of generateValuesForEditCustomViews helper.\n const query = unref(newActiveFolder)?.query?.payload;\n if (!Array.isArray(query)) return;\n\n const newFilters = query.map(filter => {\n const transformed = useCamelCase(filter);\n const values = Array.isArray(transformed.values)\n ? generateValuesForEditCustomViews(\n useSnakeCase(filter),\n setParamsForEditFolderModal()\n )\n : [];\n\n return {\n attributeKey: transformed.attributeKey,\n attributeModel: transformed.attributeModel,\n customAttributeType: transformed.customAttributeType,\n filterOperator: transformed.filterOperator,\n queryOperator: transformed.queryOperator ?? 'and',\n values,\n };\n });\n\n appliedFilter.value = [...appliedFilter.value, ...newFilters];\n}\n\nfunction initalizeAppliedFiltersToModal() {\n appliedFilter.value = [...appliedFilters.value];\n}\n\nfunction onToggleAdvanceFiltersModal() {\n if (showAdvancedFilters.value === true) {\n closeAdvanceFiltersModal();\n return;\n }\n\n if (!hasAppliedFilters.value && !hasActiveFolders.value) {\n initializeExistingFilterToModal();\n }\n if (hasActiveFolders.value) {\n initializeFolderToFilterModal(activeFolder.value);\n }\n if (hasAppliedFilters.value) {\n initalizeAppliedFiltersToModal();\n }\n\n showAdvancedFilters.value = true;\n}\n\nfunction fetchConversations() {\n store.dispatch('updateChatListFilters', conversationFilters.value);\n store.dispatch('fetchAllConversations').then(emitConversationLoaded);\n}\n\nfunction resetAndFetchData() {\n appliedFilter.value = [];\n resetBulkActions();\n store.dispatch('conversationPage/reset');\n store.dispatch('emptyAllConversations');\n store.dispatch('clearConversationFilters');\n if (hasActiveFolders.value) {\n const payload = activeFolder.value.query;\n fetchSavedFilteredConversations(payload);\n }\n if (props.foldersId) {\n return;\n }\n fetchConversations();\n}\n\nfunction loadMoreConversations() {\n if (hasCurrentPageEndReached.value || chatListLoading.value) {\n return;\n }\n\n if (!hasAppliedFiltersOrActiveFolders.value) {\n fetchConversations();\n } else if (hasActiveFolders.value) {\n const payload = activeFolder.value.query;\n fetchSavedFilteredConversations(payload);\n } else if (hasAppliedFilters.value) {\n fetchFilteredConversations(appliedFilters.value);\n }\n}\n\n// Add a method to handle scroll events\nfunction handleScroll() {\n const scroller = conversationDynamicScroller.value;\n if (scroller && scroller.hasScrollbar) {\n const { scrollTop, scrollHeight, clientHeight } = scroller.$el;\n if (scrollHeight - (scrollTop + clientHeight) < 100) {\n loadMoreConversations();\n }\n }\n}\n\nfunction updateAssigneeTab(selectedTab) {\n if (activeAssigneeTab.value !== selectedTab) {\n resetBulkActions();\n emitter.emit('clearSearchInput');\n activeAssigneeTab.value = selectedTab;\n if (!currentPage.value) {\n fetchConversations();\n }\n }\n}\n\nfunction onBasicFilterChange(value, type) {\n if (type === 'status') {\n activeStatus.value = value;\n } else {\n activeSortBy.value = value;\n }\n resetAndFetchData();\n}\n\nfunction openLastSavedItemInFolder() {\n const lastItemOfFolder = folders.value[folders.value.length - 1];\n const lastItemId = lastItemOfFolder.id;\n router.push({\n name: 'folder_conversations',\n params: { id: lastItemId },\n });\n}\n\nfunction openLastItemAfterDeleteInFolder() {\n if (folders.value.length > 0) {\n openLastSavedItemInFolder();\n } else {\n router.push({ name: 'home' });\n fetchConversations();\n }\n}\n\nasync function assignPriority(priority, conversationId = null) {\n store.dispatch('setCurrentChatPriority', {\n priority,\n conversationId,\n });\n store.dispatch('assignPriority', { conversationId, priority }).then(() => {\n useTrack(CONVERSATION_EVENTS.CHANGE_PRIORITY, {\n newValue: priority,\n from: 'Context menu',\n });\n useAlert(\n t('CONVERSATION.PRIORITY.CHANGE_PRIORITY.SUCCESSFUL', {\n priority,\n conversationId,\n })\n );\n });\n}\n\nasync function markAsUnread(conversationId) {\n try {\n await store.dispatch('markMessagesUnread', {\n id: conversationId,\n });\n const {\n params: { accountId, inbox_id: inboxId, label, teamId },\n name,\n } = useRoute();\n let conversationType = '';\n if (isOnMentionsView({ route: { name } })) {\n conversationType = 'mention';\n } else if (isOnUnattendedView({ route: { name } })) {\n conversationType = 'unattended';\n }\n router.push(\n conversationListPageURL({\n accountId,\n conversationType: conversationType,\n customViewId: props.foldersId,\n inboxId,\n label,\n teamId,\n })\n );\n } catch (error) {\n // Ignore error\n }\n}\nasync function markAsRead(conversationId) {\n try {\n await store.dispatch('markMessagesRead', {\n id: conversationId,\n });\n } catch (error) {\n // Ignore error\n }\n}\nasync function onAssignTeam(team, conversationId = null) {\n try {\n await store.dispatch('assignTeam', {\n conversationId,\n teamId: team.id,\n });\n useAlert(\n t('CONVERSATION.CARD_CONTEXT_MENU.API.TEAM_ASSIGNMENT.SUCCESFUL', {\n team: team.name,\n conversationId,\n })\n );\n } catch (error) {\n useAlert(t('CONVERSATION.CARD_CONTEXT_MENU.API.TEAM_ASSIGNMENT.FAILED'));\n }\n}\n\nfunction toggleConversationStatus(conversationId, status, snoozedUntil) {\n store\n .dispatch('toggleStatus', {\n conversationId,\n status,\n snoozedUntil,\n })\n .then(() => {\n useAlert(t('CONVERSATION.CHANGE_STATUS'));\n });\n}\n\nfunction allSelectedConversationsStatus(status) {\n if (!selectedConversations.value.length) return false;\n return selectedConversations.value.every(item => {\n return store.getters.getConversationById(item)?.status === status;\n });\n}\n\nfunction onContextMenuToggle(state) {\n isContextMenuOpen.value = state;\n}\n\nfunction toggleSelectAll(check) {\n selectAllConversations(check, conversationList);\n}\n\nuseEmitter('fetch_conversation_stats', () => {\n store.dispatch('conversationStats/get', conversationFilters.value);\n});\n\nuseEventListener(conversationDynamicScroller, 'scroll', handleScroll);\n\nonMounted(() => {\n store.dispatch('setChatListFilters', conversationFilters.value);\n setFiltersFromUISettings();\n store.dispatch('setChatStatusFilter', activeStatus.value);\n store.dispatch('setChatSortFilter', activeSortBy.value);\n resetAndFetchData();\n if (hasActiveFolders.value) {\n store.dispatch('campaigns/get');\n }\n});\n\nprovide('selectConversation', selectConversation);\nprovide('deSelectConversation', deSelectConversation);\nprovide('assignAgent', onAssignAgent);\nprovide('assignTeam', onAssignTeam);\nprovide('assignLabels', onAssignLabels);\nprovide('updateConversationStatus', toggleConversationStatus);\nprovide('toggleContextMenu', onContextMenuToggle);\nprovide('markAsUnread', markAsUnread);\nprovide('markAsRead', markAsRead);\nprovide('assignPriority', assignPriority);\nprovide('isConversationSelected', isConversationSelected);\n\nwatch(activeTeam, () => resetAndFetchData());\n\nwatch(\n computed(() => props.conversationInbox),\n () => resetAndFetchData()\n);\nwatch(\n computed(() => props.label),\n () => resetAndFetchData()\n);\nwatch(\n computed(() => props.conversationType),\n () => resetAndFetchData()\n);\n\nwatch(activeFolder, (newVal, oldVal) => {\n if (newVal !== oldVal) {\n store.dispatch('customViews/setActiveConversationFolder', newVal || null);\n }\n resetAndFetchData();\n});\n\nwatch(chatLists, () => {\n chatsOnView.value = conversationList.value;\n});\n\nwatch(conversationFilters, (newVal, oldVal) => {\n if (newVal !== oldVal) {\n store.dispatch('updateChatListFilters', newVal);\n }\n});\n</script>\n\n<template>\n <div\n class=\"flex flex-col flex-shrink-0 bg-n-solid-1 conversations-list-wrap\"\n :class=\"[\n { hidden: !showConversationList },\n isOnExpandedLayout ? 'basis-full' : 'w-[360px] 2xl:w-[420px]',\n ]\"\n >\n <slot />\n <ChatListHeader\n :page-title=\"pageTitle\"\n :has-applied-filters=\"hasAppliedFilters\"\n :has-active-folders=\"hasActiveFolders\"\n :active-status=\"activeStatus\"\n :is-on-expanded-layout=\"isOnExpandedLayout\"\n @add-folders=\"onClickOpenAddFoldersModal\"\n @delete-folders=\"onClickOpenDeleteFoldersModal\"\n @filters-modal=\"onToggleAdvanceFiltersModal\"\n @reset-filters=\"resetAndFetchData\"\n @basic-filter-change=\"onBasicFilterChange\"\n />\n\n <Teleport v-if=\"showAddFoldersModal\" to=\"#saveFilterTeleportTarget\">\n <SaveCustomView\n v-model=\"appliedFilter\"\n :custom-views-query=\"foldersQuery\"\n :open-last-saved-item=\"openLastSavedItemInFolder\"\n @close=\"onCloseAddFoldersModal\"\n />\n </Teleport>\n\n <DeleteCustomViews\n v-if=\"showDeleteFoldersModal\"\n v-model:show=\"showDeleteFoldersModal\"\n :active-custom-view=\"activeFolder\"\n :custom-views-id=\"foldersId\"\n :open-last-item-after-delete=\"openLastItemAfterDeleteInFolder\"\n @close=\"onCloseDeleteFoldersModal\"\n />\n\n <ChatTypeTabs\n v-if=\"!hasAppliedFiltersOrActiveFolders\"\n :items=\"assigneeTabItems\"\n :active-tab=\"activeAssigneeTab\"\n is-compact\n @chat-tab-change=\"updateAssigneeTab\"\n />\n\n <p\n v-if=\"!chatListLoading && !conversationList.length\"\n class=\"flex items-center justify-center p-4 overflow-auto\"\n >\n {{ $t('CHAT_LIST.LIST.404') }}\n </p>\n <ConversationBulkActions\n v-if=\"selectedConversations.length\"\n :conversations=\"selectedConversations\"\n :all-conversations-selected=\"allConversationsSelected\"\n :selected-inboxes=\"uniqueInboxes\"\n :show-open-action=\"allSelectedConversationsStatus('open')\"\n :show-resolved-action=\"allSelectedConversationsStatus('resolved')\"\n :show-snoozed-action=\"allSelectedConversationsStatus('snoozed')\"\n @select-all-conversations=\"toggleSelectAll\"\n @assign-agent=\"onAssignAgent\"\n @update-conversations=\"onUpdateConversations\"\n @assign-labels=\"onAssignLabels\"\n @assign-team=\"onAssignTeamsForBulk\"\n />\n <div\n ref=\"conversationListRef\"\n class=\"flex-1 overflow-hidden conversations-list hover:overflow-y-auto\"\n :class=\"{ 'overflow-hidden': isContextMenuOpen }\"\n >\n <DynamicScroller\n ref=\"conversationDynamicScroller\"\n :items=\"conversationList\"\n :min-item-size=\"24\"\n class=\"w-full h-full overflow-auto\"\n >\n <template #default=\"{ item, index, active }\">\n <!--\n If we encounter resizing issues, we can set the `watchData` prop to true\n this will deeply watch the entire object instead of just size dependencies\n But it can impact performance\n -->\n <DynamicScrollerItem\n :item=\"item\"\n :active=\"active\"\n :data-index=\"index\"\n :size-dependencies=\"[\n item.messages,\n item.labels,\n item.uuid,\n item.inbox_id,\n ]\"\n >\n <ConversationItem\n :source=\"item\"\n :label=\"label\"\n :team-id=\"teamId\"\n :folders-id=\"foldersId\"\n :conversation-type=\"conversationType\"\n :show-assignee=\"showAssigneeInConversationCard\"\n @select-conversation=\"selectConversation\"\n @de-select-conversation=\"deSelectConversation\"\n />\n </DynamicScrollerItem>\n </template>\n <template #after>\n <div v-if=\"chatListLoading\" class=\"text-center\">\n <span class=\"mt-4 mb-4 spinner\" />\n </div>\n <p\n v-else-if=\"showEndOfListMessage\"\n class=\"p-4 text-center text-slate-400 dark:text-slate-300\"\n >\n {{ $t('CHAT_LIST.EOF') }}\n </p>\n <IntersectionObserver\n v-else\n :options=\"intersectionObserverOptions\"\n @observed=\"loadMoreConversations\"\n />\n </template>\n </DynamicScroller>\n </div>\n <Teleport v-if=\"showAdvancedFilters\" to=\"#conversationFilterTeleportTarget\">\n <ConversationFilter\n v-model=\"appliedFilter\"\n :folder-name=\"activeFolderName\"\n :is-folder-view=\"hasActiveFolders\"\n @apply-filter=\"onApplyFilter\"\n @update-folder=\"onUpdateSavedFilter\"\n @close=\"closeAdvanceFiltersModal\"\n />\n </Teleport>\n </div>\n</template>\n","<script>\nimport { useVuelidate } from '@vuelidate/core';\nimport { required, minLength, email } from '@vuelidate/validators';\nimport { useAlert } from 'dashboard/composables';\n\nexport default {\n props: {\n show: {\n type: Boolean,\n default: false,\n },\n currentChat: {\n type: Object,\n default: () => ({}),\n },\n },\n emits: ['cancel', 'update:show'],\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n email: '',\n selectedType: '',\n isSubmitting: false,\n };\n },\n validations: {\n email: {\n required,\n email,\n minLength: minLength(4),\n },\n },\n computed: {\n localShow: {\n get() {\n return this.show;\n },\n set(value) {\n this.$emit('update:show', value);\n },\n },\n sentToOtherEmailAddress() {\n return this.selectedType === 'other_email_address';\n },\n isFormValid() {\n if (this.selectedType) {\n if (this.sentToOtherEmailAddress) {\n return !!this.email && !this.v$.email.$error;\n }\n return true;\n }\n return false;\n },\n selectedEmailAddress() {\n const { meta } = this.currentChat;\n switch (this.selectedType) {\n case 'contact':\n return meta.sender.email;\n case 'assignee':\n return meta.assignee.email;\n case 'other_email_address':\n return this.email;\n default:\n return '';\n }\n },\n },\n methods: {\n onCancel() {\n this.$emit('cancel');\n },\n async onSubmit() {\n this.isSubmitting = false;\n try {\n await this.$store.dispatch('sendEmailTranscript', {\n email: this.selectedEmailAddress,\n conversationId: this.currentChat.id,\n });\n useAlert(this.$t('EMAIL_TRANSCRIPT.SEND_EMAIL_SUCCESS'));\n this.onCancel();\n } catch (error) {\n useAlert(this.$t('EMAIL_TRANSCRIPT.SEND_EMAIL_ERROR'));\n } finally {\n this.isSubmitting = false;\n }\n },\n },\n};\n</script>\n\n<template>\n <woot-modal v-model:show=\"localShow\" :on-close=\"onCancel\">\n <div class=\"flex flex-col h-auto overflow-auto\">\n <woot-modal-header\n :header-title=\"$t('EMAIL_TRANSCRIPT.TITLE')\"\n :header-content=\"$t('EMAIL_TRANSCRIPT.DESC')\"\n />\n <form class=\"w-full\" @submit.prevent=\"onSubmit\">\n <div class=\"w-full\">\n <div\n v-if=\"currentChat.meta.sender && currentChat.meta.sender.email\"\n class=\"flex items-center gap-2\"\n >\n <input\n id=\"contact\"\n v-model=\"selectedType\"\n type=\"radio\"\n name=\"selectedType\"\n value=\"contact\"\n />\n <label for=\"contact\">{{\n $t('EMAIL_TRANSCRIPT.FORM.SEND_TO_CONTACT')\n }}</label>\n </div>\n <div v-if=\"currentChat.meta.assignee\" class=\"flex items-center gap-2\">\n <input\n id=\"assignee\"\n v-model=\"selectedType\"\n type=\"radio\"\n name=\"selectedType\"\n value=\"assignee\"\n />\n <label for=\"assignee\">{{\n $t('EMAIL_TRANSCRIPT.FORM.SEND_TO_AGENT')\n }}</label>\n </div>\n <div class=\"flex items-center gap-2\">\n <input\n id=\"other_email_address\"\n v-model=\"selectedType\"\n type=\"radio\"\n name=\"selectedType\"\n value=\"other_email_address\"\n />\n <label for=\"other_email_address\">{{\n $t('EMAIL_TRANSCRIPT.FORM.SEND_TO_OTHER_EMAIL_ADDRESS')\n }}</label>\n </div>\n <div v-if=\"sentToOtherEmailAddress\" class=\"w-[50%] mt-1\">\n <label :class=\"{ error: v$.email.$error }\">\n <input\n v-model=\"email\"\n type=\"text\"\n :placeholder=\"$t('EMAIL_TRANSCRIPT.FORM.EMAIL.PLACEHOLDER')\"\n @input=\"v$.email.$touch\"\n />\n <span v-if=\"v$.email.$error\" class=\"message\">\n {{ $t('EMAIL_TRANSCRIPT.FORM.EMAIL.ERROR') }}\n </span>\n </label>\n </div>\n </div>\n <div class=\"flex flex-row justify-end w-full gap-2 px-0 py-2\">\n <woot-submit-button\n :button-text=\"$t('EMAIL_TRANSCRIPT.SUBMIT')\"\n :disabled=\"!isFormValid\"\n />\n <button class=\"button clear\" @click.prevent=\"onCancel\">\n {{ $t('EMAIL_TRANSCRIPT.CANCEL') }}\n </button>\n </div>\n </form>\n </div>\n </woot-modal>\n</template>\n","<script setup>\nimport { ref, computed } from 'vue';\nimport { useAlert } from 'dashboard/composables';\nimport { useToggle } from '@vueuse/core';\nimport { useI18n } from 'vue-i18n';\nimport { useStore, useStoreGetters } from 'dashboard/composables/store';\nimport { useEmitter } from 'dashboard/composables/emitter';\nimport { useKeyboardEvents } from 'dashboard/composables/useKeyboardEvents';\n\nimport WootDropdownItem from 'shared/components/ui/dropdown/DropdownItem.vue';\nimport WootDropdownMenu from 'shared/components/ui/dropdown/DropdownMenu.vue';\nimport wootConstants from 'dashboard/constants/globals';\nimport {\n CMD_REOPEN_CONVERSATION,\n CMD_RESOLVE_CONVERSATION,\n} from 'dashboard/helper/commandbar/events';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst store = useStore();\nconst getters = useStoreGetters();\nconst { t } = useI18n();\n\nconst arrowDownButtonRef = ref(null);\nconst isLoading = ref(false);\n\nconst [showActionsDropdown, toggleDropdown] = useToggle();\nconst closeDropdown = () => toggleDropdown(false);\nconst openDropdown = () => toggleDropdown(true);\n\nconst currentChat = computed(() => getters.getSelectedChat.value);\n\nconst isOpen = computed(\n () => currentChat.value.status === wootConstants.STATUS_TYPE.OPEN\n);\nconst isPending = computed(\n () => currentChat.value.status === wootConstants.STATUS_TYPE.PENDING\n);\nconst isResolved = computed(\n () => currentChat.value.status === wootConstants.STATUS_TYPE.RESOLVED\n);\nconst isSnoozed = computed(\n () => currentChat.value.status === wootConstants.STATUS_TYPE.SNOOZED\n);\n\nconst showAdditionalActions = computed(\n () => !isPending.value && !isSnoozed.value\n);\n\nconst showOpenButton = computed(() => {\n return isPending.value || isSnoozed.value;\n});\n\nconst getConversationParams = () => {\n const allConversations = document.querySelectorAll(\n '.conversations-list .conversation'\n );\n\n const activeConversation = document.querySelector(\n 'div.conversations-list div.conversation.active'\n );\n const activeConversationIndex = [...allConversations].indexOf(\n activeConversation\n );\n const lastConversationIndex = allConversations.length - 1;\n\n return {\n all: allConversations,\n activeIndex: activeConversationIndex,\n lastIndex: lastConversationIndex,\n };\n};\n\nconst openSnoozeModal = () => {\n const ninja = document.querySelector('ninja-keys');\n ninja.open({ parent: 'snooze_conversation' });\n};\n\nconst toggleStatus = (status, snoozedUntil) => {\n closeDropdown();\n isLoading.value = true;\n store\n .dispatch('toggleStatus', {\n conversationId: currentChat.value.id,\n status,\n snoozedUntil,\n })\n .then(() => {\n useAlert(t('CONVERSATION.CHANGE_STATUS'));\n isLoading.value = false;\n });\n};\n\nconst onCmdOpenConversation = () => {\n toggleStatus(wootConstants.STATUS_TYPE.OPEN);\n};\n\nconst onCmdResolveConversation = () => {\n toggleStatus(wootConstants.STATUS_TYPE.RESOLVED);\n};\n\nconst keyboardEvents = {\n 'Alt+KeyM': {\n action: () => arrowDownButtonRef.value?.$el.click(),\n allowOnFocusedInput: true,\n },\n 'Alt+KeyE': {\n action: async () => {\n await toggleStatus(wootConstants.STATUS_TYPE.RESOLVED);\n },\n },\n '$mod+Alt+KeyE': {\n action: async event => {\n const { all, activeIndex, lastIndex } = getConversationParams();\n await toggleStatus(wootConstants.STATUS_TYPE.RESOLVED);\n\n if (activeIndex < lastIndex) {\n all[activeIndex + 1].click();\n } else if (all.length > 1) {\n all[0].click();\n document.querySelector('.conversations-list').scrollTop = 0;\n }\n event.preventDefault();\n },\n },\n};\n\nuseKeyboardEvents(keyboardEvents);\n\nuseEmitter(CMD_REOPEN_CONVERSATION, onCmdOpenConversation);\nuseEmitter(CMD_RESOLVE_CONVERSATION, onCmdResolveConversation);\n</script>\n\n<template>\n <div class=\"relative flex items-center justify-end resolve-actions\">\n <div\n class=\"rounded-lg shadow button-group outline-1 outline\"\n :class=\"!showOpenButton ? 'outline-n-container' : 'outline-transparent'\"\n >\n <Button\n v-if=\"isOpen\"\n :label=\"t('CONVERSATION.HEADER.RESOLVE_ACTION')\"\n size=\"sm\"\n color=\"slate\"\n class=\"ltr:rounded-r-none rtl:rounded-l-none !outline-0\"\n :is-loading=\"isLoading\"\n @click=\"onCmdResolveConversation\"\n />\n <Button\n v-else-if=\"isResolved\"\n :label=\"t('CONVERSATION.HEADER.REOPEN_ACTION')\"\n size=\"sm\"\n color=\"slate\"\n class=\"ltr:rounded-r-none rtl:rounded-l-none !outline-0\"\n :is-loading=\"isLoading\"\n @click=\"onCmdOpenConversation\"\n />\n <Button\n v-else-if=\"showOpenButton\"\n :label=\"t('CONVERSATION.HEADER.OPEN_ACTION')\"\n size=\"sm\"\n color=\"slate\"\n :is-loading=\"isLoading\"\n @click=\"onCmdOpenConversation\"\n />\n <Button\n v-if=\"showAdditionalActions\"\n ref=\"arrowDownButtonRef\"\n icon=\"i-lucide-chevron-down\"\n :disabled=\"isLoading\"\n size=\"sm\"\n class=\"ltr:rounded-l-none rtl:rounded-r-none !outline-0\"\n color=\"slate\"\n trailing-icon\n @click=\"openDropdown\"\n />\n </div>\n <div\n v-if=\"showActionsDropdown\"\n v-on-clickaway=\"closeDropdown\"\n class=\"dropdown-pane dropdown-pane--open left-auto top-full mt-0.5 ltr:right-0 rtl:left-0 max-w-[12.5rem] min-w-[9.75rem]\"\n >\n <WootDropdownMenu class=\"mb-0\">\n <WootDropdownItem v-if=\"!isPending\">\n <Button\n :label=\"t('CONVERSATION.RESOLVE_DROPDOWN.SNOOZE_UNTIL')\"\n ghost\n slate\n sm\n start\n icon=\"i-lucide-alarm-clock-minus\"\n class=\"w-full\"\n @click=\"() => openSnoozeModal()\"\n />\n </WootDropdownItem>\n <WootDropdownItem v-if=\"!isPending\">\n <Button\n :label=\"t('CONVERSATION.RESOLVE_DROPDOWN.MARK_PENDING')\"\n ghost\n slate\n sm\n start\n icon=\"i-lucide-circle-dot-dashed\"\n class=\"w-full\"\n @click=\"() => toggleStatus(wootConstants.STATUS_TYPE.PENDING)\"\n />\n </WootDropdownItem>\n </WootDropdownMenu>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.dropdown-pane {\n .dropdown-menu__item {\n @apply mb-0;\n }\n}\n</style>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\nimport { emitter } from 'shared/helpers/mitt';\nimport EmailTranscriptModal from './EmailTranscriptModal.vue';\nimport ResolveAction from '../../buttons/ResolveAction.vue';\nimport ButtonV4 from 'dashboard/components-next/button/Button.vue';\n\nimport {\n CMD_MUTE_CONVERSATION,\n CMD_SEND_TRANSCRIPT,\n CMD_UNMUTE_CONVERSATION,\n} from 'dashboard/helper/commandbar/events';\n\nexport default {\n components: {\n EmailTranscriptModal,\n ResolveAction,\n ButtonV4,\n },\n data() {\n return {\n showEmailActionsModal: false,\n };\n },\n computed: {\n ...mapGetters({ currentChat: 'getSelectedChat' }),\n },\n mounted() {\n emitter.on(CMD_MUTE_CONVERSATION, this.mute);\n emitter.on(CMD_UNMUTE_CONVERSATION, this.unmute);\n emitter.on(CMD_SEND_TRANSCRIPT, this.toggleEmailActionsModal);\n },\n unmounted() {\n emitter.off(CMD_MUTE_CONVERSATION, this.mute);\n emitter.off(CMD_UNMUTE_CONVERSATION, this.unmute);\n emitter.off(CMD_SEND_TRANSCRIPT, this.toggleEmailActionsModal);\n },\n methods: {\n mute() {\n this.$store.dispatch('muteConversation', this.currentChat.id);\n useAlert(this.$t('CONTACT_PANEL.MUTED_SUCCESS'));\n },\n unmute() {\n this.$store.dispatch('unmuteConversation', this.currentChat.id);\n useAlert(this.$t('CONTACT_PANEL.UNMUTED_SUCCESS'));\n },\n toggleEmailActionsModal() {\n this.showEmailActionsModal = !this.showEmailActionsModal;\n },\n },\n};\n</script>\n\n<template>\n <div class=\"relative flex items-center gap-2 actions--container\">\n <ButtonV4\n v-if=\"!currentChat.muted\"\n v-tooltip=\"$t('CONTACT_PANEL.MUTE_CONTACT')\"\n size=\"sm\"\n variant=\"ghost\"\n color=\"slate\"\n icon=\"i-lucide-volume-off\"\n @click=\"mute\"\n />\n <ButtonV4\n v-else\n v-tooltip.left=\"$t('CONTACT_PANEL.UNMUTE_CONTACT')\"\n size=\"sm\"\n variant=\"ghost\"\n color=\"slate\"\n icon=\"i-lucide-volume-1\"\n @click=\"unmute\"\n />\n <ButtonV4\n v-tooltip=\"$t('CONTACT_PANEL.SEND_TRANSCRIPT')\"\n size=\"sm\"\n variant=\"ghost\"\n color=\"slate\"\n icon=\"i-lucide-share\"\n @click=\"toggleEmailActionsModal\"\n />\n <ResolveAction\n :conversation-id=\"currentChat.id\"\n :status=\"currentChat.status\"\n />\n <EmailTranscriptModal\n v-if=\"showEmailActionsModal\"\n :show=\"showEmailActionsModal\"\n :current-chat=\"currentChat\"\n @cancel=\"toggleEmailActionsModal\"\n />\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.more--button {\n @apply items-center flex ml-2 rtl:ml-0 rtl:mr-2;\n}\n\n.dropdown-pane {\n @apply -right-2 top-12;\n}\n\n.icon {\n @apply mr-1 rtl:mr-0 rtl:ml-1 min-w-[1rem];\n}\n</style>\n","/* global axios */\n\nimport ApiClient from '../ApiClient';\n\nclass LinearAPI extends ApiClient {\n constructor() {\n super('integrations/linear', { accountScoped: true });\n }\n\n getTeams() {\n return axios.get(`${this.url}/teams`);\n }\n\n getTeamEntities(teamId) {\n return axios.get(`${this.url}/team_entities?team_id=${teamId}`);\n }\n\n createIssue(data) {\n return axios.post(`${this.url}/create_issue`, data);\n }\n\n link_issue(conversationId, issueId, title) {\n return axios.post(`${this.url}/link_issue`, {\n issue_id: issueId,\n conversation_id: conversationId,\n title: title,\n });\n }\n\n getLinkedIssue(conversationId) {\n return axios.get(\n `${this.url}/linked_issues?conversation_id=${conversationId}`\n );\n }\n\n unlinkIssue(linkId) {\n return axios.post(`${this.url}/unlink_issue`, {\n link_id: linkId,\n });\n }\n\n searchIssues(query) {\n return axios.get(`${this.url}/search_issue?q=${query}`);\n }\n}\n\nexport default new LinearAPI();\n","<script setup>\nimport { ref, computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useTrack } from 'dashboard/composables';\nimport { useAlert } from 'dashboard/composables';\nimport LinearAPI from 'dashboard/api/integrations/linear';\nimport FilterButton from 'dashboard/components/ui/Dropdown/DropdownButton.vue';\nimport FilterListDropdown from 'dashboard/components/ui/Dropdown/DropdownList.vue';\nimport { parseLinearAPIErrorResponse } from 'dashboard/store/utils/api';\nimport { LINEAR_EVENTS } from 'dashboard/helper/AnalyticsHelper/events';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n conversationId: {\n type: [Number, String],\n required: true,\n },\n title: {\n type: String,\n default: null,\n },\n});\n\nconst emit = defineEmits(['close']);\n\nconst { t } = useI18n();\nconst issues = ref([]);\nconst shouldShowDropdown = ref(false);\nconst selectedOption = ref({ id: null, name: '' });\nconst isFetching = ref(false);\nconst isLinking = ref(false);\nconst searchQuery = ref('');\n\nconst toggleDropdown = () => {\n issues.value = [];\n shouldShowDropdown.value = !shouldShowDropdown.value;\n};\n\nconst linkIssueTitle = computed(() => {\n return selectedOption.value.id\n ? selectedOption.value.name\n : t('INTEGRATION_SETTINGS.LINEAR.LINK.SELECT');\n});\n\nconst isSubmitDisabled = computed(() => {\n return !selectedOption.value.id || isLinking.value;\n});\n\nconst onSelectIssue = item => {\n selectedOption.value = item;\n toggleDropdown();\n};\n\nconst onClose = () => {\n emit('close');\n};\n\nconst onSearch = async value => {\n issues.value = [];\n if (!value) return;\n searchQuery.value = value;\n try {\n isFetching.value = true;\n const response = await LinearAPI.searchIssues(value);\n issues.value = response.data.map(issue => ({\n id: issue.id,\n name: `${issue.identifier} ${issue.title}`,\n icon: 'status',\n iconColor: issue.state.color,\n }));\n } catch (error) {\n const errorMessage = parseLinearAPIErrorResponse(\n error,\n t('INTEGRATION_SETTINGS.LINEAR.LINK.ERROR')\n );\n useAlert(errorMessage);\n } finally {\n isFetching.value = false;\n }\n};\n\nconst linkIssue = async () => {\n const { id: issueId } = selectedOption.value;\n try {\n isLinking.value = true;\n await LinearAPI.link_issue(props.conversationId, issueId, props.title);\n useAlert(t('INTEGRATION_SETTINGS.LINEAR.LINK.LINK_SUCCESS'));\n searchQuery.value = '';\n issues.value = [];\n onClose();\n useTrack(LINEAR_EVENTS.LINK_ISSUE);\n } catch (error) {\n const errorMessage = parseLinearAPIErrorResponse(\n error,\n t('INTEGRATION_SETTINGS.LINEAR.LINK.LINK_ERROR')\n );\n useAlert(errorMessage);\n } finally {\n isLinking.value = false;\n }\n};\n</script>\n\n<template>\n <div\n class=\"flex flex-col justify-between\"\n :class=\"shouldShowDropdown ? 'h-[256px]' : 'gap-2'\"\n >\n <FilterButton\n right-icon=\"chevron-down\"\n :button-text=\"linkIssueTitle\"\n class=\"justify-between w-full h-[2.5rem] py-1.5 px-3 rounded-xl border border-slate-50 bg-slate-25 dark:border-slate-600 dark:bg-slate-900 hover:bg-slate-50 dark:hover:bg-slate-900/50\"\n @click=\"toggleDropdown\"\n >\n <template v-if=\"shouldShowDropdown\" #dropdown>\n <FilterListDropdown\n v-if=\"issues\"\n v-on-clickaway=\"toggleDropdown\"\n :show-clear-filter=\"false\"\n :list-items=\"issues\"\n :active-filter-id=\"selectedOption.id\"\n :is-loading=\"isFetching\"\n :input-placeholder=\"$t('INTEGRATION_SETTINGS.LINEAR.LINK.SEARCH')\"\n :loading-placeholder=\"$t('INTEGRATION_SETTINGS.LINEAR.LINK.LOADING')\"\n enable-search\n class=\"left-0 flex flex-col w-full overflow-y-auto h-fit !max-h-[160px] md:left-auto md:right-0 top-10\"\n @on-search=\"onSearch\"\n @select=\"onSelectIssue\"\n />\n </template>\n </FilterButton>\n <div class=\"flex items-center justify-end w-full gap-2 mt-2\">\n <Button\n faded\n slate\n type=\"reset\"\n :label=\"$t('INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.CANCEL')\"\n @click.prevent=\"onClose\"\n />\n <Button\n type=\"submit\"\n :label=\"$t('INTEGRATION_SETTINGS.LINEAR.LINK.TITLE')\"\n :disabled=\"isSubmitDisabled\"\n :is-loading=\"isLinking\"\n @click.prevent=\"linkIssue\"\n />\n </div>\n </div>\n</template>\n","import { required } from '@vuelidate/validators';\n\nexport default {\n title: {\n required,\n },\n teamId: {\n required,\n },\n};\n","<script setup>\nimport { ref, computed, defineOptions } from 'vue';\nimport FilterButton from 'dashboard/components/ui/Dropdown/DropdownButton.vue';\nimport FilterListDropdown from 'dashboard/components/ui/Dropdown/DropdownList.vue';\n\nconst props = defineProps({\n type: { type: String, required: true },\n label: { type: String, default: null },\n items: { type: Array, required: true },\n value: { type: [Number, String], default: null },\n placeholder: { type: String, default: null },\n error: { type: String, default: null },\n});\n\nconst emit = defineEmits(['change']);\n\ndefineOptions({\n name: 'SearchableDropdown',\n});\n\nconst shouldShowDropdown = ref(false);\n\nconst toggleDropdown = () => {\n shouldShowDropdown.value = !shouldShowDropdown.value;\n};\nconst onSelect = item => {\n emit('change', item, props.type);\n toggleDropdown();\n};\n\nconst hasError = computed(() => !!props.error);\n\nconst selectedItem = computed(() => {\n if (!props.value) return null;\n return props.items.find(i => i.id === props.value);\n});\n\nconst selectedItemName = computed(\n () => selectedItem.value?.name || props.placeholder\n);\n\nconst selectedItemId = computed(() => selectedItem.value?.id || null);\n</script>\n\n<template>\n <div\n class=\"flex w-full\"\n :class=\"type === 'stateId' && shouldShowDropdown ? 'h-[150px]' : 'gap-2'\"\n >\n <label class=\"w-full\" :class=\"{ error: hasError }\">\n {{ label }}\n <FilterButton\n right-icon=\"chevron-down\"\n :button-text=\"selectedItemName\"\n class=\"justify-between w-full h-[2.5rem] py-1.5 px-3 rounded-xl border border-slate-50 bg-slate-25 dark:border-slate-600 dark:bg-slate-900 hover:bg-slate-50 dark:hover:bg-slate-900/50\"\n @click=\"toggleDropdown\"\n >\n <template v-if=\"shouldShowDropdown\" #dropdown>\n <FilterListDropdown\n v-on-clickaway=\"toggleDropdown\"\n :show-clear-filter=\"false\"\n :list-items=\"items\"\n :active-filter-id=\"selectedItemId\"\n :input-placeholder=\"placeholder\"\n enable-search\n class=\"left-0 flex flex-col w-full overflow-y-auto h-fit !max-h-[160px] md:left-auto md:right-0 top-10\"\n @select=\"onSelect\"\n />\n </template>\n </FilterButton>\n <span v-if=\"hasError\" class=\"mt-1 message\">{{ error }}</span>\n </label>\n </div>\n</template>\n","<script setup>\nimport { reactive, computed, onMounted, ref } from 'vue';\nimport { useVuelidate } from '@vuelidate/core';\nimport { useI18n } from 'vue-i18n';\nimport { useTrack } from 'dashboard/composables';\nimport { useAlert } from 'dashboard/composables';\nimport LinearAPI from 'dashboard/api/integrations/linear';\nimport validations from './validations';\nimport { parseLinearAPIErrorResponse } from 'dashboard/store/utils/api';\nimport SearchableDropdown from './SearchableDropdown.vue';\nimport { LINEAR_EVENTS } from 'dashboard/helper/AnalyticsHelper/events';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n conversationId: {\n type: [Number, String],\n required: true,\n },\n title: {\n type: String,\n default: null,\n },\n});\n\nconst emit = defineEmits(['close']);\nconst { t } = useI18n();\n\nconst teams = ref([]);\nconst assignees = ref([]);\nconst projects = ref([]);\nconst labels = ref([]);\nconst statuses = ref([]);\n\nconst priorities = [\n { id: 0, name: 'No priority' },\n { id: 1, name: 'Urgent' },\n { id: 2, name: 'High' },\n { id: 3, name: 'Normal' },\n { id: 4, name: 'Low' },\n];\n\nconst statusDesiredOrder = [\n 'Backlog',\n 'Todo',\n 'In Progress',\n 'Done',\n 'Canceled',\n];\n\nconst isCreating = ref(false);\nconst inputStyles = { borderRadius: '0.75rem', fontSize: '0.875rem' };\n\nconst formState = reactive({\n title: '',\n description: '',\n teamId: '',\n assigneeId: '',\n labelId: '',\n stateId: '',\n priority: '',\n projectId: '',\n});\nconst v$ = useVuelidate(validations, formState);\n\nconst isSubmitDisabled = computed(\n () => v$.value.title.$invalid || isCreating.value\n);\nconst nameError = computed(() =>\n v$.value.title.$error\n ? t('INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.FORM.TITLE.REQUIRED_ERROR')\n : ''\n);\nconst teamError = computed(() =>\n v$.value.teamId.$error\n ? t('INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.FORM.TEAM.REQUIRED_ERROR')\n : ''\n);\n\nconst dropdowns = computed(() => {\n return [\n {\n type: 'teamId',\n label: 'INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.FORM.TEAM.LABEL',\n items: teams.value,\n placeholder: 'INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.FORM.TEAM.SEARCH',\n error: teamError.value,\n },\n {\n type: 'assigneeId',\n label: 'INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.FORM.ASSIGNEE.LABEL',\n items: assignees.value,\n placeholder:\n 'INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.FORM.ASSIGNEE.SEARCH',\n error: '',\n },\n {\n type: 'labelId',\n label: 'INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.FORM.LABEL.LABEL',\n items: labels.value,\n placeholder: 'INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.FORM.LABEL.SEARCH',\n error: '',\n },\n {\n type: 'priority',\n label: 'INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.FORM.PRIORITY.LABEL',\n items: priorities,\n placeholder:\n 'INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.FORM.PRIORITY.SEARCH',\n error: '',\n },\n {\n type: 'projectId',\n label: 'INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.FORM.PROJECT.LABEL',\n items: projects.value,\n placeholder:\n 'INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.FORM.PROJECT.SEARCH',\n error: '',\n },\n {\n type: 'stateId',\n label: 'INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.FORM.STATUS.LABEL',\n items: statuses.value,\n placeholder: 'INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.FORM.STATUS.SEARCH',\n error: '',\n },\n ];\n});\n\nconst onClose = () => emit('close');\n\nconst getTeams = async () => {\n try {\n const response = await LinearAPI.getTeams();\n teams.value = response.data;\n } catch (error) {\n const errorMessage = parseLinearAPIErrorResponse(\n error,\n t('INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.LOADING_TEAM_ERROR')\n );\n useAlert(errorMessage);\n }\n};\n\nconst getTeamEntities = async () => {\n try {\n const response = await LinearAPI.getTeamEntities(formState.teamId);\n assignees.value = response.data.users;\n labels.value = response.data.labels;\n projects.value = response.data.projects;\n statuses.value = statusDesiredOrder\n .map(name => response.data.states.find(status => status.name === name))\n .filter(Boolean);\n } catch (error) {\n const errorMessage = parseLinearAPIErrorResponse(\n error,\n t('INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.LOADING_TEAM_ENTITIES_ERROR')\n );\n useAlert(errorMessage);\n }\n};\n\nconst onChange = (item, type) => {\n formState[type] = item.id;\n if (type === 'teamId') {\n formState.assigneeId = '';\n formState.stateId = '';\n formState.labelId = '';\n formState.projectId = '';\n getTeamEntities();\n }\n};\n\nconst createIssue = async () => {\n v$.value.$touch();\n if (v$.value.$invalid) return;\n\n const payload = {\n team_id: formState.teamId,\n title: formState.title,\n description: formState.description || undefined,\n assignee_id: formState.assigneeId || undefined,\n project_id: formState.projectId || undefined,\n state_id: formState.stateId || undefined,\n priority: formState.priority || undefined,\n label_ids: formState.labelId ? [formState.labelId] : undefined,\n };\n\n try {\n isCreating.value = true;\n const response = await LinearAPI.createIssue(payload);\n const { id: issueId } = response.data;\n await LinearAPI.link_issue(props.conversationId, issueId, props.title);\n useAlert(t('INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.CREATE_SUCCESS'));\n useTrack(LINEAR_EVENTS.CREATE_ISSUE);\n onClose();\n } catch (error) {\n const errorMessage = parseLinearAPIErrorResponse(\n error,\n t('INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.CREATE_ERROR')\n );\n useAlert(errorMessage);\n } finally {\n isCreating.value = false;\n }\n};\n\nonMounted(getTeams);\n</script>\n\n<template>\n <div>\n <woot-input\n v-model=\"formState.title\"\n :class=\"{ error: v$.title.$error }\"\n class=\"w-full\"\n :styles=\"{ ...inputStyles, padding: '0.375rem 0.75rem' }\"\n :label=\"$t('INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.FORM.TITLE.LABEL')\"\n :placeholder=\"\n $t('INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.FORM.TITLE.PLACEHOLDER')\n \"\n :error=\"nameError\"\n @input=\"v$.title.$touch\"\n />\n <label>\n {{ $t('INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.FORM.DESCRIPTION.LABEL') }}\n <textarea\n v-model=\"formState.description\"\n :style=\"{ ...inputStyles, padding: '0.5rem 0.75rem' }\"\n rows=\"3\"\n class=\"text-sm\"\n :placeholder=\"\n $t(\n 'INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.FORM.DESCRIPTION.PLACEHOLDER'\n )\n \"\n />\n </label>\n <div class=\"flex flex-col gap-4\">\n <SearchableDropdown\n v-for=\"dropdown in dropdowns\"\n :key=\"dropdown.type\"\n :type=\"dropdown.type\"\n :value=\"formState[dropdown.type]\"\n :label=\"$t(dropdown.label)\"\n :items=\"dropdown.items\"\n :placeholder=\"$t(dropdown.placeholder)\"\n :error=\"dropdown.error\"\n @change=\"onChange\"\n />\n </div>\n <div class=\"flex items-center justify-end w-full gap-2 mt-8\">\n <Button\n faded\n slate\n type=\"reset\"\n :label=\"$t('INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.CANCEL')\"\n @click.prevent=\"onClose\"\n />\n <Button\n type=\"submit\"\n :label=\"$t('INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.CREATE')\"\n :disabled=\"isSubmitDisabled\"\n :is-loading=\"isCreating\"\n @click.prevent=\"createIssue\"\n />\n </div>\n </div>\n</template>\n","<script setup>\nimport { useI18n } from 'vue-i18n';\nimport { computed, ref } from 'vue';\nimport LinkIssue from './LinkIssue.vue';\nimport CreateIssue from './CreateIssue.vue';\n\nconst props = defineProps({\n accountId: {\n type: [Number, String],\n required: true,\n },\n conversation: {\n type: Object,\n required: true,\n },\n});\n\nconst emit = defineEmits(['close']);\n\nconst { t } = useI18n();\n\nconst selectedTabIndex = ref(0);\n\nconst title = computed(() => {\n const { meta: { sender: { name = null } = {} } = {} } = props.conversation;\n return t('INTEGRATION_SETTINGS.LINEAR.LINK.LINK_TITLE', {\n conversationId: props.conversation.id,\n name,\n });\n});\n\nconst tabs = ref([\n {\n key: 0,\n name: t('INTEGRATION_SETTINGS.LINEAR.CREATE'),\n },\n {\n key: 1,\n name: t('INTEGRATION_SETTINGS.LINEAR.LINK.TITLE'),\n },\n]);\nconst onClose = () => {\n emit('close');\n};\n\nconst onClickTabChange = index => {\n selectedTabIndex.value = index;\n};\n</script>\n\n<template>\n <div class=\"flex flex-col h-auto overflow-auto\">\n <woot-modal-header\n :header-title=\"$t('INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.TITLE')\"\n :header-content=\"\n $t('INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK.DESCRIPTION')\n \"\n />\n\n <div class=\"flex flex-col h-auto overflow-auto\">\n <div class=\"flex flex-col px-8 pb-4\">\n <woot-tabs\n class=\"ltr:[&>ul]:pl-0 rtl:[&>ul]:pr-0\"\n :index=\"selectedTabIndex\"\n @change=\"onClickTabChange\"\n >\n <woot-tabs-item\n v-for=\"(tab, index) in tabs\"\n :key=\"tab.key\"\n :index=\"index\"\n :name=\"tab.name\"\n :show-badge=\"false\"\n />\n </woot-tabs>\n </div>\n <div v-if=\"selectedTabIndex === 0\" class=\"flex flex-col px-8 pb-4\">\n <CreateIssue\n :account-id=\"accountId\"\n :conversation-id=\"conversation.id\"\n :title=\"title\"\n @close=\"onClose\"\n />\n </div>\n\n <div v-else class=\"flex flex-col px-8 pb-4\">\n <LinkIssue\n :conversation-id=\"conversation.id\"\n :title=\"title\"\n @close=\"onClose\"\n />\n </div>\n </div>\n </div>\n</template>\n","<script setup>\nimport { inject } from 'vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n identifier: {\n type: String,\n required: true,\n },\n issueUrl: {\n type: String,\n required: true,\n },\n});\n\nconst emit = defineEmits(['unlinkIssue']);\n\nconst isUnlinking = inject('isUnlinking');\n\nconst unlinkIssue = () => {\n emit('unlinkIssue');\n};\n\nconst openIssue = () => {\n window.open(props.issueUrl, '_blank');\n};\n</script>\n\n<template>\n <div class=\"flex flex-row justify-between\">\n <div\n class=\"flex items-center justify-center gap-1 h-[24px] px-2 py-1 border rounded-lg border-ash-200\"\n >\n <fluent-icon\n icon=\"linear\"\n size=\"19\"\n class=\"text-[#5E6AD2]\"\n view-box=\"0 0 19 19\"\n />\n <span class=\"text-xs font-medium text-ash-900\">{{ identifier }}</span>\n </div>\n <div class=\"flex items-center gap-1\">\n <Button\n ghost\n xs\n slate\n icon=\"i-lucide-unlink\"\n class=\"!transition-none\"\n :is-loading=\"isUnlinking\"\n @click=\"unlinkIssue\"\n />\n <Button\n ghost\n xs\n slate\n class=\"!transition-none\"\n icon=\"i-lucide-arrow-up-right\"\n @click=\"openIssue\"\n />\n </div>\n </div>\n</template>\n","<script setup>\nimport { format } from 'date-fns';\nimport UserAvatarWithName from 'dashboard/components/widgets/UserAvatarWithName.vue';\nimport IssueHeader from './IssueHeader.vue';\nimport { computed } from 'vue';\n\nconst props = defineProps({\n issue: {\n type: Object,\n required: true,\n },\n linkId: {\n type: String,\n required: true,\n },\n});\n\nconst emit = defineEmits(['unlinkIssue']);\n\nconst priorityMap = {\n 1: 'Urgent',\n 2: 'High',\n 3: 'Medium',\n 4: 'Low',\n};\n\nconst formattedDate = computed(() => {\n const { createdAt } = props.issue;\n return format(new Date(createdAt), 'hh:mm a, MMM dd');\n});\n\nconst assignee = computed(() => {\n const assigneeDetails = props.issue.assignee;\n\n if (!assigneeDetails) return null;\n const { name, avatarUrl } = assigneeDetails;\n\n return {\n name,\n thumbnail: avatarUrl,\n };\n});\n\nconst labels = computed(() => {\n return props.issue.labels?.nodes || [];\n});\n\nconst priorityLabel = computed(() => {\n return priorityMap[props.issue.priority];\n});\n\nconst unlinkIssue = () => {\n emit('unlinkIssue', props.linkId);\n};\n</script>\n\n<template>\n <div\n class=\"absolute flex flex-col items-start bg-white dark:bg-slate-800 z-50 px-4 py-3 border border-solid border-ash-200 w-[384px] rounded-xl gap-4 max-h-96 overflow-auto\"\n >\n <div class=\"flex flex-col w-full\">\n <IssueHeader\n :identifier=\"issue.identifier\"\n :link-id=\"linkId\"\n :issue-url=\"issue.url\"\n @unlink-issue=\"unlinkIssue\"\n />\n\n <span class=\"mt-2 text-sm font-medium text-ash-900\">\n {{ issue.title }}\n </span>\n <span\n v-if=\"issue.description\"\n class=\"mt-1 text-sm text-ash-800 line-clamp-3\"\n >\n {{ issue.description }}\n </span>\n </div>\n <div class=\"flex flex-row items-center h-6 gap-2\">\n <UserAvatarWithName v-if=\"assignee\" :user=\"assignee\" class=\"py-1\" />\n <div v-if=\"assignee\" class=\"w-px h-3 bg-ash-200\" />\n <div class=\"flex items-center gap-1 py-1\">\n <fluent-icon\n icon=\"status\"\n size=\"14\"\n :style=\"{ color: issue.state.color }\"\n />\n <h6 class=\"text-xs text-ash-900\">\n {{ issue.state.name }}\n </h6>\n </div>\n <div v-if=\"priorityLabel\" class=\"w-px h-3 bg-ash-200\" />\n <div v-if=\"priorityLabel\" class=\"flex items-center gap-1 py-1\">\n <fluent-icon\n :icon=\"`priority-${priorityLabel.toLowerCase()}`\"\n size=\"14\"\n view-box=\"0 0 12 12\"\n />\n <h6 class=\"text-xs text-ash-900\">{{ priorityLabel }}</h6>\n </div>\n </div>\n <div v-if=\"labels.length\" class=\"flex flex-wrap items-center gap-1\">\n <woot-label\n v-for=\"label in labels\"\n :key=\"label.id\"\n :title=\"label.name\"\n :description=\"label.description\"\n :color=\"label.color\"\n variant=\"smooth\"\n small\n />\n </div>\n <div class=\"flex items-center\">\n <span class=\"text-xs text-ash-800\">\n {{\n $t('INTEGRATION_SETTINGS.LINEAR.ISSUE.CREATED_AT', {\n createdAt: formattedDate,\n })\n }}\n </span>\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed, ref, onMounted, watch, defineOptions, provide } from 'vue';\nimport { useAlert } from 'dashboard/composables';\nimport { useStoreGetters } from 'dashboard/composables/store';\nimport { useI18n } from 'vue-i18n';\nimport LinearAPI from 'dashboard/api/integrations/linear';\nimport CreateOrLinkIssue from './CreateOrLinkIssue.vue';\nimport Issue from './Issue.vue';\nimport { useTrack } from 'dashboard/composables';\nimport { LINEAR_EVENTS } from 'dashboard/helper/AnalyticsHelper/events';\nimport { parseLinearAPIErrorResponse } from 'dashboard/store/utils/api';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n conversationId: {\n type: [Number, String],\n required: true,\n },\n});\n\ndefineOptions({\n name: 'Linear',\n});\n\nconst getters = useStoreGetters();\nconst { t } = useI18n();\n\nconst linkedIssue = ref(null);\nconst shouldShow = ref(false);\nconst shouldShowPopup = ref(false);\nconst isUnlinking = ref(false);\n\nprovide('isUnlinking', isUnlinking);\n\nconst currentAccountId = getters.getCurrentAccountId;\n\nconst conversation = computed(() =>\n getters.getConversationById.value(props.conversationId)\n);\n\nconst tooltipText = computed(() => {\n return linkedIssue.value === null\n ? t('INTEGRATION_SETTINGS.LINEAR.ADD_OR_LINK_BUTTON')\n : null;\n});\n\nconst loadLinkedIssue = async () => {\n linkedIssue.value = null;\n try {\n const response = await LinearAPI.getLinkedIssue(props.conversationId);\n const issues = response.data;\n linkedIssue.value = issues && issues.length ? issues[0] : null;\n } catch (error) {\n // We don't want to show an error message here, as it's not critical. When someone clicks on the Linear icon, we can inform them that the integration is disabled.\n }\n};\n\nconst unlinkIssue = async linkId => {\n try {\n isUnlinking.value = true;\n await LinearAPI.unlinkIssue(linkId);\n useTrack(LINEAR_EVENTS.UNLINK_ISSUE);\n linkedIssue.value = null;\n useAlert(t('INTEGRATION_SETTINGS.LINEAR.UNLINK.SUCCESS'));\n } catch (error) {\n const errorMessage = parseLinearAPIErrorResponse(\n error,\n t('INTEGRATION_SETTINGS.LINEAR.UNLINK.ERROR')\n );\n useAlert(errorMessage);\n } finally {\n isUnlinking.value = false;\n }\n};\n\nconst openIssue = () => {\n if (!linkedIssue.value) shouldShowPopup.value = true;\n shouldShow.value = true;\n};\n\nconst closePopup = () => {\n shouldShowPopup.value = false;\n loadLinkedIssue();\n};\n\nconst closeIssue = () => {\n shouldShow.value = false;\n};\n\nwatch(\n () => props.conversationId,\n () => {\n loadLinkedIssue();\n }\n);\n\nonMounted(() => {\n loadLinkedIssue();\n});\n</script>\n\n<template>\n <div class=\"relative\" :class=\"{ group: linkedIssue }\">\n <Button\n v-on-clickaway=\"closeIssue\"\n v-tooltip=\"tooltipText\"\n sm\n ghost\n slate\n class=\"!gap-1\"\n @click=\"openIssue\"\n >\n <fluent-icon\n icon=\"linear\"\n size=\"19\"\n class=\"text-[#5E6AD2] flex-shrink-0\"\n view-box=\"0 0 19 19\"\n />\n <span v-if=\"linkedIssue\" class=\"text-xs font-medium text-n-slate-11\">\n {{ linkedIssue.issue.identifier }}\n </span>\n </Button>\n <Issue\n v-if=\"linkedIssue\"\n :issue=\"linkedIssue.issue\"\n :link-id=\"linkedIssue.id\"\n class=\"absolute right-0 top-[40px] invisible group-hover:visible\"\n @unlink-issue=\"unlinkIssue\"\n />\n <woot-modal\n v-model:show=\"shouldShowPopup\"\n :on-close=\"closePopup\"\n :close-on-backdrop-click=\"false\"\n class=\"!items-start [&>div]:!top-12 [&>div]:sticky\"\n >\n <CreateOrLinkIssue\n :conversation=\"conversation\"\n :account-id=\"currentAccountId\"\n @close=\"closePopup\"\n />\n </woot-modal>\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useKeyboardEvents } from 'dashboard/composables/useKeyboardEvents';\nimport BackButton from '../BackButton.vue';\nimport inboxMixin from 'shared/mixins/inboxMixin';\nimport InboxName from '../InboxName.vue';\nimport MoreActions from './MoreActions.vue';\nimport Thumbnail from '../Thumbnail.vue';\nimport SLACardLabel from './components/SLACardLabel.vue';\nimport wootConstants from 'dashboard/constants/globals';\nimport { conversationListPageURL } from 'dashboard/helper/URLHelper';\nimport { snoozedReopenTime } from 'dashboard/helper/snoozeHelpers';\nimport { FEATURE_FLAGS } from 'dashboard/featureFlags';\nimport Linear from './linear/index.vue';\n\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n BackButton,\n InboxName,\n MoreActions,\n Thumbnail,\n SLACardLabel,\n Linear,\n NextButton,\n },\n mixins: [inboxMixin],\n props: {\n chat: {\n type: Object,\n default: () => {},\n },\n isContactPanelOpen: {\n type: Boolean,\n default: false,\n },\n showBackButton: {\n type: Boolean,\n default: false,\n },\n isInboxView: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['contactPanelToggle'],\n setup(props, { emit }) {\n const keyboardEvents = {\n 'Alt+KeyO': {\n action: () => emit('contactPanelToggle'),\n },\n };\n useKeyboardEvents(keyboardEvents);\n },\n computed: {\n ...mapGetters({\n currentChat: 'getSelectedChat',\n accountId: 'getCurrentAccountId',\n isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount',\n appIntegrations: 'integrations/getAppIntegrations',\n }),\n chatMetadata() {\n return this.chat.meta;\n },\n backButtonUrl() {\n const {\n params: { accountId, inbox_id: inboxId, label, teamId },\n name,\n } = this.$route;\n return conversationListPageURL({\n accountId,\n inboxId,\n label,\n teamId,\n conversationType: name === 'conversation_mentions' ? 'mention' : '',\n });\n },\n isHMACVerified() {\n if (!this.isAWebWidgetInbox) {\n return true;\n }\n return this.chatMetadata.hmac_verified;\n },\n currentContact() {\n return this.$store.getters['contacts/getContact'](\n this.chat.meta.sender.id\n );\n },\n isSnoozed() {\n return this.currentChat.status === wootConstants.STATUS_TYPE.SNOOZED;\n },\n snoozedDisplayText() {\n const { snoozed_until: snoozedUntil } = this.currentChat;\n if (snoozedUntil) {\n return `${this.$t(\n 'CONVERSATION.HEADER.SNOOZED_UNTIL'\n )} ${snoozedReopenTime(snoozedUntil)}`;\n }\n return this.$t('CONVERSATION.HEADER.SNOOZED_UNTIL_NEXT_REPLY');\n },\n contactPanelToggleText() {\n return `${\n this.isContactPanelOpen\n ? this.$t('CONVERSATION.HEADER.CLOSE')\n : this.$t('CONVERSATION.HEADER.OPEN')\n } ${this.$t('CONVERSATION.HEADER.DETAILS')}`;\n },\n inbox() {\n const { inbox_id: inboxId } = this.chat;\n return this.$store.getters['inboxes/getInbox'](inboxId);\n },\n hasMultipleInboxes() {\n return this.$store.getters['inboxes/getInboxes'].length > 1;\n },\n hasSlaPolicyId() {\n return this.chat?.sla_policy_id;\n },\n isLinearIntegrationEnabled() {\n return this.appIntegrations.find(\n integration => integration.id === 'linear' && !!integration.hooks.length\n );\n },\n isLinearFeatureEnabled() {\n return this.isFeatureEnabledonAccount(\n this.accountId,\n FEATURE_FLAGS.LINEAR\n );\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"flex flex-col items-center justify-between px-4 py-2 border-b bg-n-background border-n-weak md:flex-row\"\n >\n <div\n class=\"flex flex-col items-center justify-center flex-1 w-full min-w-0\"\n :class=\"isInboxView ? 'sm:flex-row' : 'md:flex-row'\"\n >\n <div class=\"flex items-center justify-start max-w-full min-w-0 w-fit\">\n <BackButton\n v-if=\"showBackButton\"\n :back-url=\"backButtonUrl\"\n class=\"ltr:mr-2 rtl:ml-2\"\n />\n <Thumbnail\n :src=\"currentContact.thumbnail\"\n :badge=\"inboxBadge\"\n :username=\"currentContact.name\"\n :status=\"currentContact.availability_status\"\n />\n <div\n class=\"flex flex-col items-start min-w-0 ml-2 overflow-hidden rtl:ml-0 rtl:mr-2 w-fit\"\n >\n <div\n class=\"flex flex-row items-center max-w-full gap-1 p-0 m-0 w-fit\"\n >\n <NextButton link slate @click.prevent=\"$emit('contactPanelToggle')\">\n <span\n class=\"text-base font-medium truncate leading-tight text-n-slate-12\"\n >\n {{ currentContact.name }}\n </span>\n </NextButton>\n <fluent-icon\n v-if=\"!isHMACVerified\"\n v-tooltip=\"$t('CONVERSATION.UNVERIFIED_SESSION')\"\n size=\"14\"\n class=\"text-n-amber-10 my-0 mx-0 min-w-[14px]\"\n icon=\"warning\"\n />\n </div>\n\n <div\n class=\"flex items-center gap-2 overflow-hidden text-xs conversation--header--actions text-ellipsis whitespace-nowrap\"\n >\n <InboxName v-if=\"hasMultipleInboxes\" :inbox=\"inbox\" />\n <span v-if=\"isSnoozed\" class=\"font-medium text-n-amber-10\">\n {{ snoozedDisplayText }}\n </span>\n <NextButton\n link\n xs\n blue\n :label=\"contactPanelToggleText\"\n @click=\"$emit('contactPanelToggle')\"\n />\n </div>\n </div>\n </div>\n <div\n class=\"flex flex-row items-center justify-end flex-grow gap-2 mt-3 header-actions-wrap lg:mt-0\"\n :class=\"{ 'justify-end': isContactPanelOpen }\"\n >\n <SLACardLabel v-if=\"hasSlaPolicyId\" :chat=\"chat\" show-extended-info />\n <Linear\n v-if=\"isLinearIntegrationEnabled && isLinearFeatureEnabled\"\n :conversation-id=\"currentChat.id\"\n />\n <MoreActions :conversation-id=\"currentChat.id\" />\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.conversation--header--actions {\n ::v-deep .inbox--name {\n @apply m-0;\n }\n}\n</style>\n","<script>\nimport LoadingState from 'dashboard/components/widgets/LoadingState.vue';\n\nexport default {\n components: {\n LoadingState,\n },\n props: {\n config: {\n type: Array,\n default: () => [],\n },\n currentChat: {\n type: Object,\n default: () => ({}),\n },\n isVisible: {\n type: Boolean,\n default: false,\n },\n position: {\n type: Number,\n required: true,\n },\n },\n data() {\n return {\n hasOpenedAtleastOnce: false,\n iframeLoading: true,\n };\n },\n computed: {\n dashboardAppContext() {\n return {\n conversation: this.currentChat,\n contact: this.$store.getters['contacts/getContact'](this.contactId),\n currentAgent: this.currentAgent,\n };\n },\n contactId() {\n return this.currentChat?.meta?.sender?.id;\n },\n currentAgent() {\n const { id, name, email } = this.$store.getters.getCurrentUser;\n return { id, name, email };\n },\n },\n watch: {\n isVisible() {\n if (this.isVisible) {\n this.hasOpenedAtleastOnce = true;\n }\n },\n },\n mounted() {\n window.addEventListener('message', this.triggerEvent);\n },\n unmounted() {\n window.removeEventListener('message', this.triggerEvent);\n },\n methods: {\n triggerEvent(event) {\n if (!this.isVisible) return;\n if (event.data === 'chatwoot-dashboard-app:fetch-info') {\n this.onIframeLoad(0);\n }\n },\n getFrameId(index) {\n return `dashboard-app--frame-${this.position}-${index}`;\n },\n onIframeLoad(index) {\n // A possible alternative is to use ref instead of document.getElementById\n // However, when ref is used together with v-for, the ref you get will be\n // an array containing the child components mirroring the data source.\n const frameElement = document.getElementById(this.getFrameId(index));\n const eventData = { event: 'appContext', data: this.dashboardAppContext };\n frameElement.contentWindow.postMessage(JSON.stringify(eventData), '*');\n this.iframeLoading = false;\n },\n },\n};\n</script>\n\n<!-- eslint-disable-next-line vue/no-root-v-if -->\n<template>\n <div v-if=\"hasOpenedAtleastOnce\" class=\"dashboard-app--container\">\n <div\n v-for=\"(configItem, index) in config\"\n :key=\"index\"\n class=\"dashboard-app--list\"\n >\n <LoadingState\n v-if=\"iframeLoading\"\n :message=\"$t('DASHBOARD_APPS.LOADING_MESSAGE')\"\n class=\"dashboard-app_loading-container\"\n />\n <iframe\n v-if=\"configItem.type === 'frame' && configItem.url\"\n :id=\"getFrameId(index)\"\n :src=\"configItem.url\"\n @load=\"() => onIframeLoad(index)\"\n />\n </div>\n </div>\n</template>\n\n<style scoped>\n.dashboard-app--container,\n.dashboard-app--list,\n.dashboard-app--list iframe {\n height: 100%;\n width: 100%;\n}\n\n.dashboard-app--list iframe {\n border: 0;\n}\n.dashboard-app_loading-container {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n}\n</style>\n","<script setup>\nimport OnboardingFeatureCard from './OnboardingFeatureCard.vue';\nimport { computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useStoreGetters } from 'dashboard/composables/store';\n\nconst getters = useStoreGetters();\nconst { t } = useI18n();\nconst globalConfig = computed(() => getters['globalConfig/get'].value);\nconst currentUser = computed(() => getters.getCurrentUser.value);\n\nconst greetingMessage = computed(() => {\n const hours = new Date().getHours();\n let translationKey;\n if (hours < 12) {\n translationKey = 'ONBOARDING.GREETING_MORNING';\n } else if (hours < 18) {\n translationKey = 'ONBOARDING.GREETING_AFTERNOON';\n } else {\n translationKey = 'ONBOARDING.GREETING_EVENING';\n }\n return t(translationKey, {\n name: currentUser.value.name,\n installationName: globalConfig.value.installationName,\n });\n});\n</script>\n\n<template>\n <div\n class=\"min-h-screen lg:max-w-5xl max-w-4xl mx-auto grid grid-cols-2 grid-rows-[auto_1fr_1fr] auto-rows-min gap-4 p-8 w-full font-inter overflow-auto\"\n >\n <div class=\"col-span-full self-start\">\n <p\n class=\"text-xl font-semibold text-slate-900 dark:text-white font-interDisplay tracking-[0.3px]\"\n >\n {{ greetingMessage }}\n </p>\n <p class=\"text-slate-600 dark:text-slate-400 max-w-2xl text-base\">\n {{\n $t('ONBOARDING.DESCRIPTION', {\n installationName: globalConfig.installationName,\n })\n }}\n </p>\n </div>\n <OnboardingFeatureCard\n image-src=\"/dashboard/images/onboarding/omnichannel-inbox.png\"\n image-alt=\"Omnichannel\"\n to=\"settings_inbox_new\"\n :title=\"$t('ONBOARDING.ALL_CONVERSATION.TITLE')\"\n :description=\"$t('ONBOARDING.ALL_CONVERSATION.DESCRIPTION')\"\n :link-text=\"$t('ONBOARDING.ALL_CONVERSATION.NEW_LINK')\"\n />\n <OnboardingFeatureCard\n image-src=\"/dashboard/images/onboarding/teams.png\"\n image-alt=\"Teams\"\n to=\"settings_teams_new\"\n :title=\"$t('ONBOARDING.TEAM_MEMBERS.TITLE')\"\n :description=\"$t('ONBOARDING.TEAM_MEMBERS.DESCRIPTION')\"\n :link-text=\"$t('ONBOARDING.TEAM_MEMBERS.NEW_LINK')\"\n />\n <OnboardingFeatureCard\n image-src=\"/dashboard/images/onboarding/canned-responses.png\"\n image-alt=\"Canned responses\"\n to=\"canned_list\"\n :title=\"$t('ONBOARDING.CANNED_RESPONSES.TITLE')\"\n :description=\"$t('ONBOARDING.CANNED_RESPONSES.DESCRIPTION')\"\n :link-text=\"$t('ONBOARDING.CANNED_RESPONSES.NEW_LINK')\"\n />\n <OnboardingFeatureCard\n image-src=\"/dashboard/images/onboarding/labels.png\"\n image-alt=\"Labels\"\n to=\"labels_list\"\n :title=\"$t('ONBOARDING.LABELS.TITLE')\"\n :description=\"$t('ONBOARDING.LABELS.DESCRIPTION')\"\n :link-text=\"$t('ONBOARDING.LABELS.NEW_LINK')\"\n />\n </div>\n</template>\n","<script>\nexport default {\n props: {\n customClass: {\n type: String,\n default: '',\n },\n },\n};\n</script>\n\n<template>\n <kbd class=\"hotkey p-0.5 min-w-[1rem] uppercase\" :class=\"customClass\">\n <slot />\n </kbd>\n</template>\n\n<style lang=\"scss\">\nkbd.hotkey {\n @apply inline-flex leading-[0.625rem] rounded tracking-wide flex-shrink-0 items-center select-none justify-center;\n}\n</style>\n","<script>\nimport Hotkey from 'dashboard/components/base/Hotkey.vue';\n\nexport default {\n components: {\n Hotkey,\n },\n data() {\n return {\n keyShortcuts: [\n {\n key: 'K',\n description: this.$t('CONVERSATION.EMPTY_STATE.CMD_BAR'),\n },\n {\n key: '/',\n description: this.$t('CONVERSATION.EMPTY_STATE.KEYBOARD_SHORTCUTS'),\n },\n ],\n };\n },\n};\n</script>\n\n<template>\n <div class=\"flex flex-col gap-2 mt-9\">\n <div\n v-for=\"keyShortcut in keyShortcuts\"\n :key=\"keyShortcut.key\"\n class=\"flex items-center gap-2\"\n >\n <div class=\"flex items-center gap-2\">\n <Hotkey\n custom-class=\"w-8 h-6 text-lg font-medium text-n-slate-12 outline outline-n-container outline-1 bg-n-alpha-3\"\n >\n ⌘\n </Hotkey>\n <Hotkey\n custom-class=\"w-8 h-6 text-xs font-medium text-n-slate-12 outline outline-n-container outline-1 bg-n-alpha-3\"\n >\n {{ keyShortcut.key }}\n </Hotkey>\n </div>\n <span class=\"text-sm font-medium text-center text-n-slate-12\">\n {{ keyShortcut.description }}\n </span>\n </div>\n </div>\n</template>\n","export default \"__VITE_ASSET__DMnO5EpZ__\"","export default \"__VITE_ASSET__QkP3XGCo__\"","<script>\nimport FeaturePlaceholder from './FeaturePlaceholder.vue';\nexport default {\n components: { FeaturePlaceholder },\n props: {\n message: {\n type: String,\n required: true,\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex flex-col items-center justify-center h-full\">\n <img\n class=\"m-4 w-32 hidden dark:block\"\n src=\"dashboard/assets/images/no-chat-dark.svg\"\n alt=\"No Chat dark\"\n />\n <img\n class=\"m-4 w-32 block dark:hidden\"\n src=\"dashboard/assets/images/no-chat.svg\"\n alt=\"No Chat\"\n />\n <span\n class=\"text-sm text-slate-800 dark:text-slate-200 font-medium text-center\"\n >\n {{ message }}\n <br />\n </span>\n <!-- Cmd bar, keyboard shortcuts placeholder -->\n <FeaturePlaceholder />\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useAdmin } from 'dashboard/composables/useAdmin';\nimport { useAccount } from 'dashboard/composables/useAccount';\nimport OnboardingView from '../OnboardingView.vue';\nimport EmptyStateMessage from './EmptyStateMessage.vue';\n\nexport default {\n components: {\n OnboardingView,\n EmptyStateMessage,\n },\n props: {\n isOnExpandedLayout: {\n type: Boolean,\n default: false,\n },\n },\n setup() {\n const { isAdmin } = useAdmin();\n\n const { accountScopedUrl } = useAccount();\n\n return {\n isAdmin,\n accountScopedUrl,\n };\n },\n computed: {\n ...mapGetters({\n currentChat: 'getSelectedChat',\n allConversations: 'getAllConversations',\n inboxesList: 'inboxes/getInboxes',\n uiFlags: 'inboxes/getUIFlags',\n loadingChatList: 'getChatListLoadingStatus',\n }),\n loadingIndicatorMessage() {\n if (this.uiFlags.isFetching) {\n return this.$t('CONVERSATION.LOADING_INBOXES');\n }\n return this.$t('CONVERSATION.LOADING_CONVERSATIONS');\n },\n conversationMissingMessage() {\n if (!this.isOnExpandedLayout) {\n return this.$t('CONVERSATION.SELECT_A_CONVERSATION');\n }\n return this.$t('CONVERSATION.404');\n },\n newInboxURL() {\n return this.accountScopedUrl('settings/inboxes/new');\n },\n emptyClassName() {\n if (\n !this.inboxesList.length &&\n !this.uiFlags.isFetching &&\n !this.loadingChatList &&\n this.isAdmin\n ) {\n return 'h-full overflow-auto w-full';\n }\n return 'flex-1 min-w-0 px-0 flex flex-col items-center justify-center h-full';\n },\n },\n};\n</script>\n\n<template>\n <div :class=\"emptyClassName\">\n <woot-loading-state\n v-if=\"uiFlags.isFetching || loadingChatList\"\n :message=\"loadingIndicatorMessage\"\n />\n <!-- No inboxes attached -->\n <div\n v-if=\"!inboxesList.length && !uiFlags.isFetching && !loadingChatList\"\n class=\"clearfix mx-auto\"\n >\n <OnboardingView v-if=\"isAdmin\" />\n <EmptyStateMessage v-else :message=\"$t('CONVERSATION.NO_INBOX_AGENT')\" />\n </div>\n <!-- Show empty state images if not loading -->\n\n <div\n v-else-if=\"!uiFlags.isFetching && !loadingChatList\"\n class=\"flex flex-col items-center justify-center h-full\"\n >\n <!-- No conversations available -->\n <EmptyStateMessage\n v-if=\"!allConversations.length\"\n :message=\"$t('CONVERSATION.NO_MESSAGE_1')\"\n />\n <EmptyStateMessage\n v-else-if=\"allConversations.length && !currentChat.id\"\n :message=\"conversationMissingMessage\"\n />\n </div>\n </div>\n</template>\n","/* global axios */\n\nimport ApiClient from '../ApiClient';\n\n/**\n * Represents the data object for a OpenAI hook.\n * @typedef {Object} ConversationMessageData\n * @property {string} [tone] - The tone of the message.\n * @property {string} [content] - The content of the message.\n * @property {string} [conversation_display_id] - The display ID of the conversation (optional).\n */\n\n/**\n * A client for the OpenAI API.\n * @extends ApiClient\n */\nclass OpenAIAPI extends ApiClient {\n /**\n * Creates a new OpenAIAPI instance.\n */\n constructor() {\n super('integrations', { accountScoped: true });\n\n /**\n * The conversation events supported by the API.\n * @type {string[]}\n */\n this.conversation_events = [\n 'summarize',\n 'reply_suggestion',\n 'label_suggestion',\n ];\n\n /**\n * The message events supported by the API.\n * @type {string[]}\n */\n this.message_events = ['rephrase'];\n }\n\n /**\n * Processes an event using the OpenAI API.\n * @param {Object} options - The options for the event.\n * @param {string} [options.type='rephrase'] - The type of event to process.\n * @param {string} [options.content] - The content of the event.\n * @param {string} [options.tone] - The tone of the event.\n * @param {string} [options.conversationId] - The ID of the conversation to process the event for.\n * @param {string} options.hookId - The ID of the hook to use for processing the event.\n * @returns {Promise} A promise that resolves with the result of the event processing.\n */\n processEvent({ type = 'rephrase', content, tone, conversationId, hookId }) {\n /**\n * @type {ConversationMessageData}\n */\n let data = {\n tone,\n content,\n };\n\n if (this.conversation_events.includes(type)) {\n data = {\n conversation_display_id: conversationId,\n };\n }\n\n return axios.post(`${this.url}/hooks/${hookId}/process_event`, {\n event: {\n name: type,\n data,\n },\n });\n }\n}\n\nexport default new OpenAIAPI();\n","import { computed, onMounted } from 'vue';\nimport {\n useStore,\n useStoreGetters,\n useMapGetter,\n} from 'dashboard/composables/store';\nimport { useAlert, useTrack } from 'dashboard/composables';\nimport { useI18n } from 'vue-i18n';\nimport { OPEN_AI_EVENTS } from 'dashboard/helper/AnalyticsHelper/events';\nimport OpenAPI from 'dashboard/api/integrations/openapi';\n\n/**\n * Cleans and normalizes a list of labels.\n * @param {string} labels - A comma-separated string of labels.\n * @returns {string[]} An array of cleaned and unique labels.\n */\nconst cleanLabels = labels => {\n return labels\n .toLowerCase() // Set it to lowercase\n .split(',') // split the string into an array\n .filter(label => label.trim()) // remove any empty strings\n .map(label => label.trim()) // trim the words\n .filter((label, index, self) => self.indexOf(label) === index);\n};\n\n/**\n * A composable function for AI-related operations in the dashboard.\n * @returns {Object} An object containing AI-related methods and computed properties.\n */\nexport function useAI() {\n const store = useStore();\n const getters = useStoreGetters();\n const { t } = useI18n();\n\n /**\n * Computed property for UI flags.\n * @type {import('vue').ComputedRef<Object>}\n */\n const uiFlags = computed(() => getters['integrations/getUIFlags'].value);\n\n const appIntegrations = useMapGetter('integrations/getAppIntegrations');\n const currentChat = useMapGetter('getSelectedChat');\n const replyMode = useMapGetter('draftMessages/getReplyEditorMode');\n\n /**\n * Computed property for the AI integration.\n * @type {import('vue').ComputedRef<Object|undefined>}\n */\n const aiIntegration = computed(\n () =>\n appIntegrations.value.find(\n integration => integration.id === 'openai' && !!integration.hooks.length\n )?.hooks[0]\n );\n\n /**\n * Computed property to check if AI integration is enabled.\n * @type {import('vue').ComputedRef<boolean>}\n */\n const isAIIntegrationEnabled = computed(() => !!aiIntegration.value);\n\n /**\n * Computed property to check if label suggestion feature is enabled.\n * @type {import('vue').ComputedRef<boolean>}\n */\n const isLabelSuggestionFeatureEnabled = computed(() => {\n if (aiIntegration.value) {\n const { settings = {} } = aiIntegration.value || {};\n return settings.label_suggestion;\n }\n return false;\n });\n\n /**\n * Computed property to check if app integrations are being fetched.\n * @type {import('vue').ComputedRef<boolean>}\n */\n const isFetchingAppIntegrations = computed(() => uiFlags.value.isFetching);\n\n /**\n * Computed property for the hook ID.\n * @type {import('vue').ComputedRef<string|undefined>}\n */\n const hookId = computed(() => aiIntegration.value?.id);\n\n /**\n * Computed property for the conversation ID.\n * @type {import('vue').ComputedRef<string|undefined>}\n */\n const conversationId = computed(() => currentChat.value?.id);\n\n /**\n * Computed property for the draft key.\n * @type {import('vue').ComputedRef<string>}\n */\n const draftKey = computed(\n () => `draft-${conversationId.value}-${replyMode.value}`\n );\n\n /**\n * Computed property for the draft message.\n * @type {import('vue').ComputedRef<string>}\n */\n const draftMessage = computed(() =>\n getters['draftMessages/get'].value(draftKey.value)\n );\n\n /**\n * Fetches integrations if they haven't been loaded yet.\n * @returns {Promise<void>}\n */\n const fetchIntegrationsIfRequired = async () => {\n if (!appIntegrations.value.length) {\n await store.dispatch('integrations/get');\n }\n };\n\n /**\n * Records analytics for AI-related events.\n * @param {string} type - The type of event.\n * @param {Object} payload - Additional data for the event.\n * @returns {Promise<void>}\n */\n const recordAnalytics = async (type, payload) => {\n const event = OPEN_AI_EVENTS[type.toUpperCase()];\n if (event) {\n useTrack(event, {\n type,\n ...payload,\n });\n }\n };\n\n /**\n * Fetches label suggestions for the current conversation.\n * @returns {Promise<string[]>} An array of suggested labels.\n */\n const fetchLabelSuggestions = async () => {\n if (!conversationId.value) return [];\n\n try {\n const result = await OpenAPI.processEvent({\n type: 'label_suggestion',\n hookId: hookId.value,\n conversationId: conversationId.value,\n });\n\n const {\n data: { message: labels },\n } = result;\n\n return cleanLabels(labels);\n } catch {\n return [];\n }\n };\n\n /**\n * Processes an AI event, such as rephrasing content.\n * @param {string} [type='rephrase'] - The type of AI event to process.\n * @returns {Promise<string>} The generated message or an empty string if an error occurs.\n */\n const processEvent = async (type = 'rephrase') => {\n try {\n const result = await OpenAPI.processEvent({\n hookId: hookId.value,\n type,\n content: draftMessage.value,\n conversationId: conversationId.value,\n });\n const {\n data: { message: generatedMessage },\n } = result;\n return generatedMessage;\n } catch (error) {\n const errorData = error.response.data.error;\n const errorMessage =\n errorData?.error?.message ||\n t('INTEGRATION_SETTINGS.OPEN_AI.GENERATE_ERROR');\n useAlert(errorMessage);\n return '';\n }\n };\n\n onMounted(() => {\n fetchIntegrationsIfRequired();\n });\n\n return {\n draftMessage,\n uiFlags,\n appIntegrations,\n currentChat,\n replyMode,\n isAIIntegrationEnabled,\n isLabelSuggestionFeatureEnabled,\n isFetchingAppIntegrations,\n fetchIntegrationsIfRequired,\n recordAnalytics,\n fetchLabelSuggestions,\n processEvent,\n };\n}\n","import { isActiveElementTypeable, isEscape } from '../helpers/KeyboardHelpers';\n\nimport { createKeybindingsHandler } from 'tinykeys';\n\n// this is a store that stores the handler globally, and only gets reset on reload\nconst taggedHandlers = [];\n\nexport default {\n mounted() {\n const events = this.getKeyboardEvents();\n if (events) {\n const wrappedEvents = this.wrapEventsInKeybindingsHandler(events);\n const keydownHandler = createKeybindingsHandler(wrappedEvents);\n this.addEventHandler(keydownHandler);\n }\n },\n unmounted() {\n if (this.$el && this.$el.dataset?.keydownHandlerIndex) {\n const handlerToRemove =\n taggedHandlers[this.$el.dataset.keydownHandlerIndex];\n document.removeEventListener('keydown', handlerToRemove);\n }\n },\n methods: {\n addEventHandler(keydownHandler) {\n const indexToAppend = taggedHandlers.push(keydownHandler) - 1;\n const root = this.getElementToBind();\n if (root && root.dataset) {\n // For the components with a top level v-if Vue renders it as an empty comment in the DOM\n // so we need to check if the root element has a dataset property to ensure it is a valid element\n document.addEventListener('keydown', keydownHandler);\n root.dataset.keydownHandlerIndex = indexToAppend;\n }\n },\n getElementToBind() {\n return this.$el;\n },\n getKeyboardEvents() {\n return null;\n },\n wrapEventsInKeybindingsHandler(events) {\n const wrappedEvents = {};\n Object.keys(events).forEach(eventName => {\n wrappedEvents[eventName] = this.keydownWrapper(events[eventName]);\n });\n\n return wrappedEvents;\n },\n keydownWrapper(handler) {\n return e => {\n const actionToPerform =\n typeof handler === 'function' ? handler : handler.action;\n const allowOnFocusedInput =\n typeof handler === 'function' ? false : handler.allowOnFocusedInput;\n\n const isTypeable = isActiveElementTypeable(e);\n\n if (isTypeable) {\n if (isEscape(e)) {\n e.target.blur();\n }\n\n if (!allowOnFocusedInput) return;\n }\n\n actionToPerform(e);\n };\n },\n },\n};\n","<script setup>\nimport MessagePreview from 'dashboard/components/widgets/conversation/MessagePreview.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\ndefineProps({\n message: {\n type: Object,\n required: true,\n },\n});\n\nconst emit = defineEmits(['dismiss']);\n</script>\n\n<template>\n <div\n class=\"reply-editor bg-n-slate-9/10 rounded-md py-1 pl-2 pr-1 text-xs tracking-wide mt-2 flex items-center gap-1.5 -mx-2\"\n >\n <fluent-icon class=\"flex-shrink-0 icon\" icon=\"arrow-reply\" size=\"14\" />\n <div class=\"flex-grow gap-1 mt-px text-xs truncate\">\n {{ $t('CONVERSATION.REPLYBOX.REPLYING_TO') }}\n <MessagePreview\n :message=\"message\"\n :show-message-type=\"false\"\n :default-empty-message=\"$t('CONVERSATION.REPLY_MESSAGE_NOT_FOUND')\"\n class=\"inline\"\n />\n </div>\n <Button\n v-tooltip=\"$t('CONVERSATION.REPLYBOX.DISMISS_REPLY')\"\n ghost\n xs\n slate\n icon=\"i-lucide-x\"\n @click.stop=\"emit('dismiss')\"\n />\n </div>\n</template>\n\n<style lang=\"scss\">\n// TODO: Remove this\n// override for dashboard/assets/scss/widgets/_reply-box.scss\n.reply-editor {\n .icon {\n margin-right: 0px !important;\n }\n}\n</style>\n","<script setup>\nimport { computed } from 'vue';\nimport { formatBytes } from 'shared/helpers/FileHelper';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n attachments: {\n type: Array,\n default: () => [],\n },\n});\n\nconst emit = defineEmits(['removeAttachment']);\n\nconst nonRecordedAudioAttachments = computed(() => {\n return props.attachments.filter(attachment => !attachment?.isRecordedAudio);\n});\n\nconst recordedAudioAttachments = computed(() =>\n props.attachments.filter(attachment => attachment.isRecordedAudio)\n);\n\nconst onRemoveAttachment = itemIndex => {\n emit(\n 'removeAttachment',\n nonRecordedAudioAttachments.value\n .filter((_, index) => index !== itemIndex)\n .concat(recordedAudioAttachments.value)\n );\n};\n\nconst formatFileSize = file => {\n const size = file.byte_size || file.size;\n return formatBytes(size, 0);\n};\n\nconst isTypeImage = file => {\n const type = file.content_type || file.type;\n return type.includes('image');\n};\n\nconst fileName = file => {\n return file.filename || file.name;\n};\n</script>\n\n<template>\n <div class=\"flex overflow-auto max-h-[12.5rem]\">\n <div\n v-for=\"(attachment, index) in nonRecordedAudioAttachments\"\n :key=\"attachment.id\"\n class=\"preview-item flex items-center p-1 bg-slate-50 dark:bg-slate-800 gap-1 rounded-md w-[15rem] mb-1\"\n >\n <div class=\"max-w-[4rem] flex-shrink-0 w-6 flex items-center\">\n <img\n v-if=\"isTypeImage(attachment.resource)\"\n class=\"object-cover w-6 h-6 rounded-sm\"\n :src=\"attachment.thumb\"\n />\n <span v-else class=\"relative w-6 h-6 text-lg text-left -top-px\">\n 📄\n </span>\n </div>\n <div class=\"max-w-3/5 min-w-[50%] overflow-hidden text-ellipsis\">\n <span\n class=\"h-4 overflow-hidden text-sm font-medium text-ellipsis whitespace-nowrap\"\n >\n {{ fileName(attachment.resource) }}\n </span>\n </div>\n <div class=\"w-[30%] justify-center\">\n <span class=\"overflow-hidden text-xs text-ellipsis whitespace-nowrap\">\n {{ formatFileSize(attachment.resource) }}\n </span>\n </div>\n <div class=\"flex items-center justify-center\">\n <Button\n ghost\n slate\n xs\n icon=\"i-lucide-x\"\n @click=\"onRemoveAttachment(index)\"\n />\n </div>\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed, useTemplateRef } from 'vue';\nimport { useElementSize } from '@vueuse/core';\nimport { REPLY_EDITOR_MODES } from './constants';\n\nconst props = defineProps({\n mode: {\n type: String,\n default: REPLY_EDITOR_MODES.REPLY,\n },\n});\n\ndefineEmits(['toggleMode']);\n\nconst wootEditorReplyMode = useTemplateRef('wootEditorReplyMode');\nconst wootEditorPrivateMode = useTemplateRef('wootEditorPrivateMode');\n\nconst replyModeSize = useElementSize(wootEditorReplyMode);\nconst privateModeSize = useElementSize(wootEditorPrivateMode);\n\n/**\n * Computed boolean indicating if the editor is in private note mode\n * @type {ComputedRef<boolean>}\n */\nconst isPrivate = computed(() => props.mode === REPLY_EDITOR_MODES.NOTE);\n\n/**\n * Computes the width of the sliding background chip in pixels\n * Includes 16px of padding in the calculation\n * @type {ComputedRef<string>}\n */\nconst width = computed(() => {\n const widthToUse = isPrivate.value\n ? privateModeSize.width.value\n : replyModeSize.width.value;\n\n const widthWithPadding = widthToUse + 16;\n return `${widthWithPadding}px`;\n});\n\n/**\n * Computes the X translation value for the sliding background chip\n * Translates by the width of reply mode + padding when in private mode\n * @type {ComputedRef<string>}\n */\nconst translateValue = computed(() => {\n const xTranslate = isPrivate.value ? replyModeSize.width.value + 16 : 0;\n\n return `${xTranslate}px`;\n});\n</script>\n\n<template>\n <button\n class=\"flex items-center w-auto h-8 p-1 transition-all border rounded-full bg-n-alpha-2 group relative duration-300 ease-in-out z-0\"\n @click=\"$emit('toggleMode')\"\n >\n <div ref=\"wootEditorReplyMode\" class=\"flex items-center gap-1 px-2 z-20\">\n {{ $t('CONVERSATION.REPLYBOX.REPLY') }}\n </div>\n <div ref=\"wootEditorPrivateMode\" class=\"flex items-center gap-1 px-2 z-20\">\n {{ $t('CONVERSATION.REPLYBOX.PRIVATE_NOTE') }}\n </div>\n <div\n class=\"absolute shadow-sm rounded-full h-6 w-[var(--chip-width)] transition-all duration-300 ease-in-out translate-x-[var(--translate-x)] rtl:translate-x-[var(--rtl-translate-x)] bg-n-solid-1\"\n :style=\"{\n '--chip-width': width,\n '--translate-x': translateValue,\n '--rtl-translate-x': `calc(-1 * var(--translate-x))`,\n }\"\n />\n </button>\n</template>\n","<script>\nimport { useKeyboardEvents } from 'dashboard/composables/useKeyboardEvents';\nimport { REPLY_EDITOR_MODES, CHAR_LENGTH_WARNING } from './constants';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\nimport EditorModeToggle from './EditorModeToggle.vue';\n\nexport default {\n name: 'ReplyTopPanel',\n components: {\n NextButton,\n EditorModeToggle,\n },\n props: {\n mode: {\n type: String,\n default: REPLY_EDITOR_MODES.REPLY,\n },\n isMessageLengthReachingThreshold: {\n type: Boolean,\n default: () => false,\n },\n charactersRemaining: {\n type: Number,\n default: () => 0,\n },\n },\n emits: ['setReplyMode', 'togglePopout'],\n setup(props, { emit }) {\n const setReplyMode = mode => {\n emit('setReplyMode', mode);\n };\n const handleReplyClick = () => {\n setReplyMode(REPLY_EDITOR_MODES.REPLY);\n };\n const handleNoteClick = () => {\n setReplyMode(REPLY_EDITOR_MODES.NOTE);\n };\n const handleModeToggle = () => {\n const newMode =\n props.mode === REPLY_EDITOR_MODES.REPLY\n ? REPLY_EDITOR_MODES.NOTE\n : REPLY_EDITOR_MODES.REPLY;\n setReplyMode(newMode);\n };\n const keyboardEvents = {\n 'Alt+KeyP': {\n action: () => handleNoteClick(),\n allowOnFocusedInput: true,\n },\n 'Alt+KeyL': {\n action: () => handleReplyClick(),\n allowOnFocusedInput: true,\n },\n };\n useKeyboardEvents(keyboardEvents);\n\n return {\n handleModeToggle,\n handleReplyClick,\n handleNoteClick,\n REPLY_EDITOR_MODES,\n };\n },\n computed: {\n replyButtonClass() {\n return {\n 'is-active': this.mode === REPLY_EDITOR_MODES.REPLY,\n };\n },\n noteButtonClass() {\n return {\n 'is-active': this.mode === REPLY_EDITOR_MODES.NOTE,\n };\n },\n charLengthClass() {\n return this.charactersRemaining < 0 ? 'text-red-600' : 'text-slate-600';\n },\n characterLengthWarning() {\n return this.charactersRemaining < 0\n ? `${-this.charactersRemaining} ${CHAR_LENGTH_WARNING.NEGATIVE}`\n : `${this.charactersRemaining} ${CHAR_LENGTH_WARNING.UNDER_50}`;\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex justify-between h-[3.25rem] gap-2 ltr:pl-3 rtl:pr-3\">\n <EditorModeToggle\n :mode=\"mode\"\n class=\"mt-3\"\n @toggle-mode=\"handleModeToggle\"\n />\n <div class=\"flex items-center mx-4 my-0\">\n <div v-if=\"isMessageLengthReachingThreshold\" class=\"text-xs\">\n <span :class=\"charLengthClass\">\n {{ characterLengthWarning }}\n </span>\n </div>\n </div>\n <NextButton\n ghost\n class=\"ltr:rounded-bl-md rtl:rounded-br-md ltr:rounded-br-none rtl:rounded-bl-none ltr:rounded-tl-none rtl:rounded-tr-none text-n-slate-11 ltr:rounded-tr-[11px] rtl:rounded-tl-[11px]\"\n icon=\"i-lucide-maximize-2\"\n @click=\"$emit('togglePopout')\"\n />\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.button-group {\n @apply flex border-0 p-0 m-0;\n\n .button {\n @apply text-sm font-medium py-2.5 px-4 m-0 relative z-10;\n\n &.is-active {\n @apply bg-white dark:bg-slate-900;\n }\n }\n\n .button--reply {\n @apply border-r rounded-none border-b-0 border-l-0 border-t-0 border-slate-50 dark:border-slate-700;\n\n &:hover,\n &:focus {\n @apply border-r border-slate-50 dark:border-slate-700;\n }\n }\n\n .button--note {\n @apply border-l-0 rounded-none;\n\n &.is-active {\n @apply border-r border-b-0 bg-yellow-100 dark:bg-yellow-800 border-t-0 border-slate-50 dark:border-slate-700;\n }\n\n &:hover,\n &:active {\n @apply text-yellow-700 dark:text-yellow-700;\n }\n }\n}\n\n.button--note {\n @apply text-yellow-600 dark:text-yellow-600 bg-transparent dark:bg-transparent;\n}\n</style>\n","import { email as emailValidator } from '@vuelidate/validators';\n\nexport const validEmailsByComma = value => {\n if (!value.length) return true;\n const emails = value.replace(/\\s+/g, '').split(',');\n return emails.every(email => emailValidator.$validator(email));\n};\n","<script>\nimport { validEmailsByComma } from './helpers/emailHeadHelper';\nimport { useVuelidate } from '@vuelidate/core';\nimport ButtonV4 from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n ButtonV4,\n },\n props: {\n ccEmails: {\n type: String,\n default: '',\n },\n bccEmails: {\n type: String,\n default: '',\n },\n toEmails: {\n type: String,\n default: '',\n },\n },\n emits: ['update:bccEmails', 'update:ccEmails', 'update:toEmails'],\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n showBcc: false,\n ccEmailsVal: '',\n bccEmailsVal: '',\n toEmailsVal: '',\n };\n },\n watch: {\n bccEmails(newVal) {\n if (newVal !== this.bccEmailsVal) {\n this.bccEmailsVal = newVal;\n }\n },\n ccEmails(newVal) {\n if (newVal !== this.ccEmailsVal) {\n this.ccEmailsVal = newVal;\n }\n },\n toEmails(newVal) {\n if (newVal !== this.toEmailsVal) {\n this.toEmailsVal = newVal;\n }\n },\n },\n mounted() {\n this.ccEmailsVal = this.ccEmails;\n this.bccEmailsVal = this.bccEmails;\n this.toEmailsVal = this.toEmails;\n },\n validations: {\n ccEmailsVal: {\n hasValidEmails(value) {\n return validEmailsByComma(value);\n },\n },\n bccEmailsVal: {\n hasValidEmails(value) {\n return validEmailsByComma(value);\n },\n },\n toEmailsVal: {\n hasValidEmails(value) {\n return validEmailsByComma(value);\n },\n },\n },\n methods: {\n handleAddBcc() {\n this.showBcc = true;\n },\n onBlur() {\n this.v$.$touch();\n this.$emit('update:bccEmails', this.bccEmailsVal);\n this.$emit('update:ccEmails', this.ccEmailsVal);\n this.$emit('update:toEmails', this.toEmailsVal);\n },\n },\n};\n</script>\n\n<template>\n <div>\n <div v-if=\"toEmails\">\n <div class=\"input-group small\" :class=\"{ error: v$.toEmailsVal.$error }\">\n <label class=\"input-group-label\">\n {{ $t('CONVERSATION.REPLYBOX.EMAIL_HEAD.TO') }}\n </label>\n <div class=\"flex-1 min-w-0 m-0 rounded-none whitespace-nowrap\">\n <woot-input\n v-model=\"v$.toEmailsVal.$model\"\n type=\"text\"\n class=\"[&>input]:!mb-0 [&>input]:border-transparent [&>input]:!outline-none [&>input]:h-8 [&>input]:!text-sm [&>input]:!border-0 [&>input]:border-none [&>input]:!bg-transparent dark:[&>input]:!bg-transparent\"\n :class=\"{ error: v$.toEmailsVal.$error }\"\n :placeholder=\"$t('CONVERSATION.REPLYBOX.EMAIL_HEAD.CC.PLACEHOLDER')\"\n @blur=\"onBlur\"\n />\n </div>\n </div>\n </div>\n <div class=\"input-group-wrap\">\n <div class=\"input-group small\" :class=\"{ error: v$.ccEmailsVal.$error }\">\n <label class=\"input-group-label\">\n {{ $t('CONVERSATION.REPLYBOX.EMAIL_HEAD.CC.LABEL') }}\n </label>\n <div class=\"flex-1 min-w-0 m-0 rounded-none whitespace-nowrap\">\n <woot-input\n v-model=\"v$.ccEmailsVal.$model\"\n class=\"[&>input]:!mb-0 [&>input]:border-transparent [&>input]:!outline-none [&>input]:h-8 [&>input]:!text-sm [&>input]:!border-0 [&>input]:border-none [&>input]:!bg-transparent dark:[&>input]:!bg-transparent\"\n type=\"text\"\n :class=\"{ error: v$.ccEmailsVal.$error }\"\n :placeholder=\"$t('CONVERSATION.REPLYBOX.EMAIL_HEAD.CC.PLACEHOLDER')\"\n @blur=\"onBlur\"\n />\n </div>\n <ButtonV4\n v-if=\"!showBcc\"\n :label=\"$t('CONVERSATION.REPLYBOX.EMAIL_HEAD.ADD_BCC')\"\n ghost\n xs\n primary\n @click=\"handleAddBcc\"\n />\n </div>\n <span v-if=\"v$.ccEmailsVal.$error\" class=\"message\">\n {{ $t('CONVERSATION.REPLYBOX.EMAIL_HEAD.CC.ERROR') }}\n </span>\n </div>\n <div v-if=\"showBcc\" class=\"input-group-wrap\">\n <div class=\"input-group small\" :class=\"{ error: v$.bccEmailsVal.$error }\">\n <label class=\"input-group-label\">\n {{ $t('CONVERSATION.REPLYBOX.EMAIL_HEAD.BCC.LABEL') }}\n </label>\n <div class=\"flex-1 min-w-0 m-0 rounded-none whitespace-nowrap\">\n <woot-input\n v-model=\"v$.bccEmailsVal.$model\"\n type=\"text\"\n class=\"[&>input]:!mb-0 [&>input]:border-transparent [&>input]:!outline-none [&>input]:h-8 [&>input]:!text-sm [&>input]:!border-0 [&>input]:border-none [&>input]:!bg-transparent dark:[&>input]:!bg-transparent\"\n :class=\"{ error: v$.bccEmailsVal.$error }\"\n :placeholder=\"\n $t('CONVERSATION.REPLYBOX.EMAIL_HEAD.BCC.PLACEHOLDER')\n \"\n @blur=\"onBlur\"\n />\n </div>\n </div>\n <span v-if=\"v$.bccEmailsVal.$error\" class=\"message\">\n {{ $t('CONVERSATION.REPLYBOX.EMAIL_HEAD.BCC.ERROR') }}\n </span>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.input-group-wrap .message {\n @apply text-sm text-n-ruby-8;\n}\n.input-group {\n @apply border-b border-solid border-n-weak my-1 flex items-center gap-2;\n\n .input-group-label {\n @apply border-transparent bg-transparent text-xs font-semibold pl-0;\n }\n}\n\n.input-group.error {\n @apply border-n-ruby-8;\n .input-group-label {\n @apply text-n-ruby-8;\n }\n}\n</style>\n","/* global axios */\n\nimport ApiClient from '../ApiClient';\n\nclass DyteAPI extends ApiClient {\n constructor() {\n super('integrations/dyte', { accountScoped: true });\n }\n\n createAMeeting(conversationId) {\n return axios.post(`${this.url}/create_a_meeting`, {\n conversation_id: conversationId,\n });\n }\n\n addParticipantToMeeting(messageId) {\n return axios.post(`${this.url}/add_participant_to_meeting`, {\n message_id: messageId,\n });\n }\n}\n\nexport default new DyteAPI();\n","<script>\nimport { mapGetters } from 'vuex';\nimport DyteAPI from 'dashboard/api/integrations/dyte';\nimport { useAlert } from 'dashboard/composables';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n NextButton,\n },\n props: {\n conversationId: {\n type: Number,\n default: 0,\n },\n },\n data() {\n return { isLoading: false };\n },\n computed: {\n ...mapGetters({ appIntegrations: 'integrations/getAppIntegrations' }),\n isVideoIntegrationEnabled() {\n return this.appIntegrations.find(\n integration => integration.id === 'dyte' && !!integration.hooks.length\n );\n },\n },\n mounted() {\n if (!this.appIntegrations.length) {\n this.$store.dispatch('integrations/get');\n }\n },\n methods: {\n async onClick() {\n this.isLoading = true;\n try {\n await DyteAPI.createAMeeting(this.conversationId);\n } catch (error) {\n useAlert(this.$t('INTEGRATION_SETTINGS.DYTE.CREATE_ERROR'));\n } finally {\n this.isLoading = false;\n }\n },\n },\n};\n</script>\n\n<!-- eslint-disable-next-line vue/no-root-v-if -->\n<template>\n <NextButton\n v-if=\"isVideoIntegrationEnabled\"\n v-tooltip.top-end=\"\n $t('INTEGRATION_SETTINGS.DYTE.START_VIDEO_CALL_HELP_TEXT')\n \"\n icon=\"i-ph-video-camera\"\n slate\n faded\n sm\n @click=\"onClick\"\n />\n</template>\n","<script>\nimport { useVuelidate } from '@vuelidate/core';\nimport { required } from '@vuelidate/validators';\nimport { useAlert } from 'dashboard/composables';\nimport { useUISettings } from 'dashboard/composables/useUISettings';\nimport { useAI } from 'dashboard/composables/useAI';\nimport { OPEN_AI_EVENTS } from 'dashboard/helper/AnalyticsHelper/events';\n\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n NextButton,\n },\n emits: ['close'],\n\n setup() {\n const { updateUISettings } = useUISettings();\n const { recordAnalytics } = useAI();\n const v$ = useVuelidate();\n\n return { updateUISettings, v$, recordAnalytics };\n },\n data() {\n return {\n value: '',\n };\n },\n validations: {\n value: {\n required,\n },\n },\n methods: {\n onClose() {\n this.$emit('close');\n },\n\n onDismiss() {\n useAlert(\n this.$t('INTEGRATION_SETTINGS.OPEN_AI.CTA_MODAL.DISMISS_MESSAGE')\n );\n this.updateUISettings({\n is_open_ai_cta_modal_dismissed: true,\n });\n this.onClose();\n },\n\n async finishOpenAI() {\n const payload = {\n app_id: 'openai',\n settings: {\n api_key: this.value,\n },\n };\n try {\n await this.$store.dispatch('integrations/createHook', payload);\n this.alertMessage = this.$t(\n 'INTEGRATION_SETTINGS.OPEN_AI.CTA_MODAL.SUCCESS_MESSAGE'\n );\n this.recordAnalytics(\n OPEN_AI_EVENTS.ADDED_AI_INTEGRATION_VIA_CTA_BUTTON\n );\n this.onClose();\n } catch (error) {\n const errorMessage = error?.response?.data?.message;\n this.alertMessage =\n errorMessage || this.$t('INTEGRATION_APPS.ADD.API.ERROR_MESSAGE');\n } finally {\n useAlert(this.alertMessage);\n }\n },\n openOpenAIDoc() {\n window.open('https://www.chatwoot.com/blog/v2-17', '_blank');\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex-1 min-w-0 px-0\">\n <woot-modal-header\n :header-title=\"$t('INTEGRATION_SETTINGS.OPEN_AI.CTA_MODAL.TITLE')\"\n :header-content=\"$t('INTEGRATION_SETTINGS.OPEN_AI.CTA_MODAL.DESC')\"\n />\n <form\n class=\"flex flex-col flex-wrap modal-content\"\n @submit.prevent=\"finishOpenAI\"\n >\n <div class=\"w-full mt-2\">\n <woot-input\n v-model=\"value\"\n type=\"text\"\n :class=\"{ error: v$.value.$error }\"\n :placeholder=\"\n $t('INTEGRATION_SETTINGS.OPEN_AI.CTA_MODAL.KEY_PLACEHOLDER')\n \"\n @blur=\"v$.value.$touch\"\n />\n </div>\n <div class=\"flex flex-row justify-between w-full gap-2 px-0 py-2\">\n <NextButton\n ghost\n type=\"button\"\n class=\"!px-3\"\n :label=\"\n $t('INTEGRATION_SETTINGS.OPEN_AI.CTA_MODAL.BUTTONS.NEED_HELP')\n \"\n @click.prevent=\"openOpenAIDoc\"\n />\n <div class=\"flex items-center gap-1\">\n <NextButton\n faded\n slate\n type=\"reset\"\n :label=\"\n $t('INTEGRATION_SETTINGS.OPEN_AI.CTA_MODAL.BUTTONS.DISMISS')\n \"\n @click.prevent=\"onDismiss\"\n />\n <NextButton\n type=\"submit\"\n :disabled=\"v$.value.$invalid\"\n :label=\"$t('INTEGRATION_SETTINGS.OPEN_AI.CTA_MODAL.BUTTONS.FINISH')\"\n />\n </div>\n </div>\n </form>\n </div>\n</template>\n","<template>\n <div class=\"animation-container margin-top-1\">\n <div class=\"ai-typing--wrap\">\n <fluent-icon icon=\"wand\" size=\"14\" class=\"ai-typing--icon\" />\n <label>\n {{ $t('INTEGRATION_SETTINGS.OPEN_AI.ASSISTANCE_MODAL.AI_WRITING') }}\n </label>\n </div>\n <span class=\"loader\" />\n <span class=\"loader\" />\n <span class=\"loader\" />\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.animation-container {\n position: relative;\n display: flex;\n .ai-typing--wrap {\n display: flex;\n align-items: center;\n gap: 4px;\n\n .ai-typing--icon {\n color: var(--v-500);\n }\n }\n label {\n display: inline-block;\n margin-right: var(--space-smaller);\n color: var(--v-400);\n }\n .loader {\n display: inline-block;\n width: 6px;\n height: 6px;\n margin-right: var(--space-smaller);\n margin-top: var(--space-slab);\n background-color: var(--v-300);\n border-radius: 50%;\n animation: bubble-scale 1.2s infinite;\n }\n\n .loader:nth-child(2) {\n animation-delay: 0.4s;\n }\n\n .loader:nth-child(3) {\n animation-delay: 0.8s;\n }\n\n @keyframes bubble-scale {\n 0%,\n 100% {\n transform: scale(1);\n }\n 25% {\n transform: scale(1.3);\n }\n 50% {\n transform: scale(1);\n }\n }\n}\n</style>\n","<script>\nimport { useMessageFormatter } from 'shared/composables/useMessageFormatter';\nimport { useAI } from 'dashboard/composables/useAI';\nimport AILoader from './AILoader.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n AILoader,\n NextButton,\n },\n props: {\n aiOption: {\n type: String,\n required: true,\n },\n },\n emits: ['close', 'applyText'],\n setup() {\n const { formatMessage } = useMessageFormatter();\n const { draftMessage, processEvent, recordAnalytics } = useAI();\n return { draftMessage, processEvent, recordAnalytics, formatMessage };\n },\n data() {\n return {\n generatedContent: '',\n isGenerating: true,\n };\n },\n computed: {\n headerTitle() {\n const translationKey = this.aiOption?.toUpperCase();\n return translationKey\n ? this.$t(`INTEGRATION_SETTINGS.OPEN_AI.WITH_AI`, {\n option: this.$t(\n `INTEGRATION_SETTINGS.OPEN_AI.OPTIONS.${translationKey}`\n ),\n })\n : '';\n },\n },\n mounted() {\n this.generateAIContent(this.aiOption);\n },\n\n methods: {\n onClose() {\n this.$emit('close');\n },\n\n async generateAIContent(type = 'rephrase') {\n this.isGenerating = true;\n this.generatedContent = await this.processEvent(type);\n this.isGenerating = false;\n },\n applyText() {\n this.recordAnalytics(this.aiOption);\n this.$emit('applyText', this.generatedContent);\n this.onClose();\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex flex-col\">\n <woot-modal-header :header-title=\"headerTitle\" />\n <form\n class=\"flex flex-col w-full modal-content\"\n @submit.prevent=\"applyText\"\n >\n <div v-if=\"draftMessage\" class=\"w-full\">\n <h4 class=\"mt-1 text-base text-slate-700 dark:text-slate-100\">\n {{ $t('INTEGRATION_SETTINGS.OPEN_AI.ASSISTANCE_MODAL.DRAFT_TITLE') }}\n </h4>\n <p v-dompurify-html=\"formatMessage(draftMessage, false)\" />\n <h4 class=\"mt-1 text-base text-slate-700 dark:text-slate-100\">\n {{\n $t('INTEGRATION_SETTINGS.OPEN_AI.ASSISTANCE_MODAL.GENERATED_TITLE')\n }}\n </h4>\n </div>\n <div>\n <AILoader v-if=\"isGenerating\" />\n <p v-else v-dompurify-html=\"formatMessage(generatedContent, false)\" />\n </div>\n\n <div class=\"flex flex-row justify-end w-full gap-2 px-0 py-2\">\n <NextButton\n faded\n slate\n type=\"reset\"\n :label=\"\n $t('INTEGRATION_SETTINGS.OPEN_AI.ASSISTANCE_MODAL.BUTTONS.CANCEL')\n \"\n @click.prevent=\"onClose\"\n />\n <NextButton\n type=\"submit\"\n :disabled=\"!generatedContent\"\n :label=\"\n $t('INTEGRATION_SETTINGS.OPEN_AI.ASSISTANCE_MODAL.BUTTONS.APPLY')\n \"\n />\n </div>\n </form>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.modal-content {\n @apply pt-2 px-8 pb-8;\n}\n\n.container {\n width: 100%;\n}\n</style>\n","<script setup>\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nconst emit = defineEmits(['open']);\n\nconst onClick = () => {\n emit('open');\n};\n</script>\n\n<template>\n <div class=\"relative\">\n <NextButton\n class=\"cta-btn cta-btn-light dark:cta-btn-dark hover:cta-btn-light-hover dark:hover:cta-btn-dark-hover\"\n :label=\"$t('INTEGRATION_SETTINGS.OPEN_AI.AI_ASSIST')\"\n icon=\"i-ph-magic-wand\"\n sm\n @click=\"onClick\"\n />\n\n <div\n class=\"radar-ping-animation absolute top-0 right-0 -mt-1 -mr-1 rounded-full w-3 h-3 bg-woot-500 dark:bg-woot-500\"\n />\n <div\n class=\"absolute top-0 right-0 -mt-1 -mr-1 rounded-full w-3 h-3 bg-woot-500 dark:bg-woot-500 opacity-50\"\n />\n </div>\n</template>\n\n<style scoped>\n@tailwind components;\n\n@layer components {\n /* Gradient animation */\n @keyframes gradient {\n 0% {\n background-position: 0% 50%;\n }\n\n 50% {\n background-position: 100% 50%;\n }\n\n 100% {\n background-position: 0% 50%;\n }\n }\n\n .cta-btn {\n animation: gradient 5s ease infinite;\n @apply text-n-slate-12 border-0 text-xs;\n }\n\n .cta-btn-light {\n background: linear-gradient(\n 255.98deg,\n rgba(161, 87, 246, 0.2) 15.83%,\n rgba(71, 145, 247, 0.2) 81.39%\n ),\n linear-gradient(0deg, #f2f5f8, #f2f5f8);\n }\n\n .cta-btn-dark {\n background: linear-gradient(\n 255.98deg,\n rgba(161, 87, 246, 0.2) 15.83%,\n rgba(71, 145, 247, 0.2) 81.39%\n ),\n linear-gradient(0deg, #313538, #313538);\n }\n\n .cta-btn-light-hover {\n background: linear-gradient(\n 255.98deg,\n rgba(161, 87, 246, 0.2) 15.83%,\n rgba(71, 145, 247, 0.2) 81.39%\n ),\n linear-gradient(0deg, #e3e5e7, #e3e5e7);\n }\n\n .cta-btn-dark-hover {\n background: linear-gradient(\n 255.98deg,\n rgba(161, 87, 246, 0.2) 15.83%,\n rgba(71, 145, 247, 0.2) 81.39%\n ),\n linear-gradient(0deg, #202425, #202425);\n }\n\n /* Radar ping animation */\n @keyframes ping {\n 75%,\n 100% {\n transform: scale(2);\n opacity: 0;\n }\n }\n\n .radar-ping-animation {\n animation: ping 1s ease infinite;\n }\n}\n</style>\n","<script>\nimport { ref } from 'vue';\nimport { mapGetters } from 'vuex';\nimport { useAdmin } from 'dashboard/composables/useAdmin';\nimport { useUISettings } from 'dashboard/composables/useUISettings';\nimport { useKeyboardEvents } from 'dashboard/composables/useKeyboardEvents';\nimport { useAI } from 'dashboard/composables/useAI';\nimport AICTAModal from './AICTAModal.vue';\nimport AIAssistanceModal from './AIAssistanceModal.vue';\nimport { CMD_AI_ASSIST } from 'dashboard/helper/commandbar/events';\nimport AIAssistanceCTAButton from './AIAssistanceCTAButton.vue';\nimport { emitter } from 'shared/helpers/mitt';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n NextButton,\n AIAssistanceModal,\n AICTAModal,\n AIAssistanceCTAButton,\n },\n emits: ['replaceText'],\n setup(props, { emit }) {\n const { uiSettings, updateUISettings } = useUISettings();\n\n const { isAIIntegrationEnabled, draftMessage, recordAnalytics } = useAI();\n\n const { isAdmin } = useAdmin();\n\n const initialMessage = ref('');\n\n const initializeMessage = draftMsg => {\n initialMessage.value = draftMsg;\n };\n const keyboardEvents = {\n '$mod+KeyZ': {\n action: () => {\n if (initialMessage.value) {\n emit('replaceText', initialMessage.value);\n initialMessage.value = '';\n }\n },\n allowOnFocusedInput: true,\n },\n };\n useKeyboardEvents(keyboardEvents);\n\n return {\n uiSettings,\n updateUISettings,\n isAdmin,\n initialMessage,\n initializeMessage,\n recordAnalytics,\n isAIIntegrationEnabled,\n draftMessage,\n };\n },\n data: () => ({\n showAIAssistanceModal: false,\n showAICtaModal: false,\n aiOption: '',\n }),\n computed: {\n ...mapGetters({\n isAChatwootInstance: 'globalConfig/isAChatwootInstance',\n }),\n isAICTAModalDismissed() {\n return this.uiSettings.is_open_ai_cta_modal_dismissed;\n },\n // Display a AI CTA button for admins if the AI integration has not been added yet and the AI assistance modal has not been dismissed.\n shouldShowAIAssistCTAButtonForAdmin() {\n return (\n this.isAdmin &&\n !this.isAIIntegrationEnabled &&\n !this.isAICTAModalDismissed &&\n this.isAChatwootInstance\n );\n },\n // Display a AI CTA button for agents and other admins who have not yet opened the AI assistance modal.\n shouldShowAIAssistCTAButton() {\n return this.isAIIntegrationEnabled && !this.isAICTAModalDismissed;\n },\n },\n\n mounted() {\n emitter.on(CMD_AI_ASSIST, this.onAIAssist);\n this.initializeMessage(this.draftMessage);\n },\n\n methods: {\n hideAIAssistanceModal() {\n this.recordAnalytics('DISMISS_AI_SUGGESTION', {\n aiOption: this.aiOption,\n });\n this.showAIAssistanceModal = false;\n },\n openAIAssist() {\n // Dismiss the CTA modal if it is not dismissed\n if (!this.isAICTAModalDismissed) {\n this.updateUISettings({\n is_open_ai_cta_modal_dismissed: true,\n });\n }\n this.initializeMessage(this.draftMessage);\n const ninja = document.querySelector('ninja-keys');\n ninja.open({ parent: 'ai_assist' });\n },\n hideAICtaModal() {\n this.showAICtaModal = false;\n },\n openAICta() {\n this.showAICtaModal = true;\n },\n onAIAssist(option) {\n this.aiOption = option;\n this.showAIAssistanceModal = true;\n },\n insertText(message) {\n this.$emit('replaceText', message);\n },\n },\n};\n</script>\n\n<template>\n <div>\n <div v-if=\"isAIIntegrationEnabled\" class=\"relative\">\n <AIAssistanceCTAButton\n v-if=\"shouldShowAIAssistCTAButton\"\n @open=\"openAIAssist\"\n />\n <NextButton\n v-else\n v-tooltip.top-end=\"$t('INTEGRATION_SETTINGS.OPEN_AI.AI_ASSIST')\"\n icon=\"i-ph-magic-wand\"\n slate\n faded\n sm\n @click=\"openAIAssist\"\n />\n <woot-modal\n v-model:show=\"showAIAssistanceModal\"\n :on-close=\"hideAIAssistanceModal\"\n >\n <AIAssistanceModal\n :ai-option=\"aiOption\"\n @apply-text=\"insertText\"\n @close=\"hideAIAssistanceModal\"\n />\n </woot-modal>\n </div>\n <div v-else-if=\"shouldShowAIAssistCTAButtonForAdmin\" class=\"relative\">\n <AIAssistanceCTAButton @click=\"openAICta\" />\n <woot-modal v-model:show=\"showAICtaModal\" :on-close=\"hideAICtaModal\">\n <AICTAModal @close=\"hideAICtaModal\" />\n </woot-modal>\n </div>\n </div>\n</template>\n","<script>\nimport { ref } from 'vue';\nimport { useUISettings } from 'dashboard/composables/useUISettings';\nimport { useKeyboardEvents } from 'dashboard/composables/useKeyboardEvents';\nimport FileUpload from 'vue-upload-component';\nimport * as ActiveStorage from 'activestorage';\nimport inboxMixin from 'shared/mixins/inboxMixin';\nimport { FEATURE_FLAGS } from 'dashboard/featureFlags';\nimport {\n ALLOWED_FILE_TYPES,\n ALLOWED_FILE_TYPES_FOR_TWILIO_WHATSAPP,\n ALLOWED_FILE_TYPES_FOR_LINE,\n} from 'shared/constants/messages';\nimport VideoCallButton from '../VideoCallButton.vue';\nimport AIAssistanceButton from '../AIAssistanceButton.vue';\nimport { REPLY_EDITOR_MODES } from './constants';\nimport { mapGetters } from 'vuex';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n name: 'ReplyBottomPanel',\n components: { NextButton, FileUpload, VideoCallButton, AIAssistanceButton },\n mixins: [inboxMixin],\n props: {\n mode: {\n type: String,\n default: REPLY_EDITOR_MODES.REPLY,\n },\n onSend: {\n type: Function,\n default: () => {},\n },\n sendButtonText: {\n type: String,\n default: '',\n },\n recordingAudioDurationText: {\n type: String,\n default: '00:00',\n },\n // inbox prop is used in /mixins/inboxMixin,\n // remove this props when refactoring to composable if not needed\n // eslint-disable-next-line vue/no-unused-properties\n inbox: {\n type: Object,\n default: () => ({}),\n },\n showFileUpload: {\n type: Boolean,\n default: false,\n },\n showAudioRecorder: {\n type: Boolean,\n default: false,\n },\n onFileUpload: {\n type: Function,\n default: () => {},\n },\n toggleEmojiPicker: {\n type: Function,\n default: () => {},\n },\n toggleAudioRecorder: {\n type: Function,\n default: () => {},\n },\n toggleAudioRecorderPlayPause: {\n type: Function,\n default: () => {},\n },\n isRecordingAudio: {\n type: Boolean,\n default: false,\n },\n recordingAudioState: {\n type: String,\n default: '',\n },\n isSendDisabled: {\n type: Boolean,\n default: false,\n },\n showEditorToggle: {\n type: Boolean,\n default: false,\n },\n isOnPrivateNote: {\n type: Boolean,\n default: false,\n },\n enableMultipleFileUpload: {\n type: Boolean,\n default: true,\n },\n hasWhatsappTemplates: {\n type: Boolean,\n default: false,\n },\n conversationId: {\n type: Number,\n required: true,\n },\n message: {\n type: String,\n default: '',\n },\n newConversationModalActive: {\n type: Boolean,\n default: false,\n },\n portalSlug: {\n type: String,\n required: true,\n },\n },\n emits: [\n 'replaceText',\n 'toggleInsertArticle',\n 'toggleEditor',\n 'selectWhatsappTemplate',\n ],\n setup() {\n const { setSignatureFlagForInbox, fetchSignatureFlagFromUISettings } =\n useUISettings();\n\n const uploadRef = ref(false);\n\n const keyboardEvents = {\n '$mod+Alt+KeyA': {\n action: () => {\n // TODO: This is really hacky, we need to replace the file picker component with\n // a custom one, where the logic and the component markup is isolated.\n // Once we have the custom component, we can remove the hacky logic below.\n\n const uploadTriggerButton = document.querySelector(\n '#conversationAttachment'\n );\n uploadTriggerButton.click();\n },\n allowOnFocusedInput: true,\n },\n };\n\n useKeyboardEvents(keyboardEvents);\n\n return {\n setSignatureFlagForInbox,\n fetchSignatureFlagFromUISettings,\n uploadRef,\n };\n },\n computed: {\n ...mapGetters({\n accountId: 'getCurrentAccountId',\n isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount',\n uiFlags: 'integrations/getUIFlags',\n }),\n isNote() {\n return this.mode === REPLY_EDITOR_MODES.NOTE;\n },\n wrapClass() {\n return {\n 'is-note-mode': this.isNote,\n };\n },\n showAttachButton() {\n return this.showFileUpload || this.isNote;\n },\n showAudioRecorderButton() {\n if (this.isALineChannel) {\n return false;\n }\n // Disable audio recorder for safari browser as recording is not supported\n // const isSafari = /^((?!chrome|android|crios|fxios).)*safari/i.test(\n // navigator.userAgent\n // );\n\n return (\n this.isFeatureEnabledonAccount(\n this.accountId,\n FEATURE_FLAGS.VOICE_RECORDER\n ) && this.showAudioRecorder\n // !isSafari\n );\n },\n showAudioPlayStopButton() {\n return this.showAudioRecorder && this.isRecordingAudio;\n },\n allowedFileTypes() {\n if (this.isATwilioWhatsAppChannel) {\n return ALLOWED_FILE_TYPES_FOR_TWILIO_WHATSAPP;\n }\n if (this.isALineChannel) {\n return ALLOWED_FILE_TYPES_FOR_LINE;\n }\n return ALLOWED_FILE_TYPES;\n },\n enableDragAndDrop() {\n return !this.newConversationModalActive;\n },\n audioRecorderPlayStopIcon() {\n switch (this.recordingAudioState) {\n // playing paused recording stopped inactive destroyed\n case 'playing':\n return 'i-ph-pause';\n case 'paused':\n return 'i-ph-play';\n case 'stopped':\n return 'i-ph-play';\n default:\n return 'i-ph-stop';\n }\n },\n showMessageSignatureButton() {\n return !this.isOnPrivateNote;\n },\n sendWithSignature() {\n // channelType is sourced from inboxMixin\n return this.fetchSignatureFlagFromUISettings(this.channelType);\n },\n signatureToggleTooltip() {\n return this.sendWithSignature\n ? this.$t('CONVERSATION.FOOTER.DISABLE_SIGN_TOOLTIP')\n : this.$t('CONVERSATION.FOOTER.ENABLE_SIGN_TOOLTIP');\n },\n enableInsertArticleInReply() {\n return this.portalSlug;\n },\n isFetchingAppIntegrations() {\n return this.uiFlags.isFetching;\n },\n },\n mounted() {\n ActiveStorage.start();\n },\n methods: {\n toggleMessageSignature() {\n this.setSignatureFlagForInbox(this.channelType, !this.sendWithSignature);\n },\n replaceText(text) {\n this.$emit('replaceText', text);\n },\n toggleInsertArticle() {\n this.$emit('toggleInsertArticle');\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex justify-between p-3\" :class=\"wrapClass\">\n <div class=\"left-wrap\">\n <NextButton\n v-tooltip.top-end=\"$t('CONVERSATION.REPLYBOX.TIP_EMOJI_ICON')\"\n icon=\"i-ph-smiley-sticker\"\n slate\n faded\n sm\n @click=\"toggleEmojiPicker\"\n />\n <FileUpload\n ref=\"uploadRef\"\n v-tooltip.top-end=\"$t('CONVERSATION.REPLYBOX.TIP_ATTACH_ICON')\"\n input-id=\"conversationAttachment\"\n :size=\"4096 * 4096\"\n :accept=\"allowedFileTypes\"\n :multiple=\"enableMultipleFileUpload\"\n :drop=\"enableDragAndDrop\"\n :drop-directory=\"false\"\n :data=\"{\n direct_upload_url: '/rails/active_storage/direct_uploads',\n direct_upload: true,\n }\"\n @input-file=\"onFileUpload\"\n >\n <NextButton\n v-if=\"showAttachButton\"\n v-tooltip.top-end=\"$t('CONVERSATION.REPLYBOX.TIP_ATTACH_ICON')\"\n icon=\"i-ph-paperclip\"\n slate\n faded\n sm\n />\n </FileUpload>\n <NextButton\n v-if=\"showAudioRecorderButton\"\n v-tooltip.top-end=\"$t('CONVERSATION.REPLYBOX.TIP_AUDIORECORDER_ICON')\"\n :icon=\"!isRecordingAudio ? 'i-ph-microphone' : 'i-ph-microphone-slash'\"\n slate\n faded\n sm\n @click=\"toggleAudioRecorder\"\n />\n <NextButton\n v-if=\"showEditorToggle\"\n v-tooltip.top-end=\"$t('CONVERSATION.REPLYBOX.TIP_FORMAT_ICON')\"\n icon=\"i-ph-quotes\"\n slate\n faded\n sm\n @click=\"$emit('toggleEditor')\"\n />\n <NextButton\n v-if=\"showAudioPlayStopButton\"\n v-tooltip.top-end=\"$t('CONVERSATION.REPLYBOX.TIP_FORMAT_ICON')\"\n :icon=\"audioRecorderPlayStopIcon\"\n slate\n faded\n sm\n :label=\"recordingAudioDurationText\"\n @click=\"toggleAudioRecorderPlayPause\"\n />\n <NextButton\n v-if=\"showMessageSignatureButton\"\n v-tooltip.top-end=\"signatureToggleTooltip\"\n icon=\"i-ph-signature\"\n slate\n faded\n sm\n @click=\"toggleMessageSignature\"\n />\n <NextButton\n v-if=\"hasWhatsappTemplates\"\n v-tooltip.top-end=\"$t('CONVERSATION.FOOTER.WHATSAPP_TEMPLATES')\"\n icon=\"i-ph-whatsapp-logo\"\n slate\n faded\n sm\n @click=\"$emit('selectWhatsappTemplate')\"\n />\n <VideoCallButton\n v-if=\"(isAWebWidgetInbox || isAPIInbox) && !isOnPrivateNote\"\n :conversation-id=\"conversationId\"\n />\n <AIAssistanceButton\n v-if=\"!isFetchingAppIntegrations\"\n :conversation-id=\"conversationId\"\n :is-private-note=\"isOnPrivateNote\"\n :message=\"message\"\n @replace-text=\"replaceText\"\n />\n <transition name=\"modal-fade\">\n <div\n v-show=\"uploadRef && uploadRef.dropActive\"\n class=\"fixed top-0 bottom-0 left-0 right-0 z-20 flex flex-col items-center justify-center w-full h-full gap-2 text-slate-900 dark:text-slate-50 bg-modal-backdrop-light dark:bg-modal-backdrop-dark\"\n >\n <fluent-icon icon=\"cloud-backup\" size=\"40\" />\n <h4 class=\"text-2xl break-words text-slate-900 dark:text-slate-50\">\n {{ $t('CONVERSATION.REPLYBOX.DRAG_DROP') }}\n </h4>\n </div>\n </transition>\n <NextButton\n v-if=\"enableInsertArticleInReply\"\n v-tooltip.top-end=\"$t('HELP_CENTER.ARTICLE_SEARCH.OPEN_ARTICLE_SEARCH')\"\n icon=\"i-ph-article-ny-times\"\n slate\n faded\n sm\n @click=\"toggleInsertArticle\"\n />\n </div>\n <div class=\"right-wrap\">\n <NextButton\n :label=\"sendButtonText\"\n type=\"submit\"\n sm\n :color=\"isNote ? 'amber' : 'blue'\"\n :disabled=\"isSendDisabled\"\n class=\"flex-shrink-0\"\n @click=\"onSend\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.left-wrap {\n @apply items-center flex gap-2;\n}\n\n.right-wrap {\n @apply flex;\n}\n\n::v-deep .file-uploads {\n label {\n @apply cursor-pointer;\n }\n\n &:hover button {\n @apply dark:bg-slate-800 bg-slate-100;\n }\n}\n</style>\n","const locales = {\n af: 'Afrikaans',\n af_NA: 'Afrikaans (Namibia)',\n af_ZA: 'Afrikaans (South Africa)',\n ak: 'Akan',\n ak_GH: 'Akan (Ghana)',\n sq: 'Albanian',\n sq_AL: 'Albanian (Albania)',\n sq_XK: 'Albanian (Kosovo)',\n sq_MK: 'Albanian (Macedonia)',\n am: 'Amharic',\n am_ET: 'Amharic (Ethiopia)',\n ar: 'Arabic',\n ar_DZ: 'Arabic (Algeria)',\n ar_BH: 'Arabic (Bahrain)',\n ar_TD: 'Arabic (Chad)',\n ar_KM: 'Arabic (Comoros)',\n ar_DJ: 'Arabic (Djibouti)',\n ar_EG: 'Arabic (Egypt)',\n ar_ER: 'Arabic (Eritrea)',\n ar_IQ: 'Arabic (Iraq)',\n ar_IL: 'Arabic (Israel)',\n ar_JO: 'Arabic (Jordan)',\n ar_KW: 'Arabic (Kuwait)',\n ar_LB: 'Arabic (Lebanon)',\n ar_LY: 'Arabic (Libya)',\n ar_MR: 'Arabic (Mauritania)',\n ar_MA: 'Arabic (Morocco)',\n ar_OM: 'Arabic (Oman)',\n ar_PS: 'Arabic (Palestinian Territories)',\n ar_QA: 'Arabic (Qatar)',\n ar_SA: 'Arabic (Saudi Arabia)',\n ar_SO: 'Arabic (Somalia)',\n ar_SS: 'Arabic (South Sudan)',\n ar_SD: 'Arabic (Sudan)',\n ar_SY: 'Arabic (Syria)',\n ar_TN: 'Arabic (Tunisia)',\n ar_AE: 'Arabic (United Arab Emirates)',\n ar_EH: 'Arabic (Western Sahara)',\n ar_YE: 'Arabic (Yemen)',\n hy: 'Armenian',\n hy_AM: 'Armenian (Armenia)',\n as: 'Assamese',\n as_IN: 'Assamese (India)',\n az: 'Azerbaijani',\n az_AZ: 'Azerbaijani (Azerbaijan)',\n az_Cyrl_AZ: 'Azerbaijani (Cyrillic, Azerbaijan)',\n az_Cyrl: 'Azerbaijani (Cyrillic)',\n az_Latn_AZ: 'Azerbaijani (Latin, Azerbaijan)',\n az_Latn: 'Azerbaijani (Latin)',\n bm: 'Bambara',\n bm_Latn_ML: 'Bambara (Latin, Mali)',\n bm_Latn: 'Bambara (Latin)',\n eu: 'Basque',\n eu_ES: 'Basque (Spain)',\n be: 'Belarusian',\n be_BY: 'Belarusian (Belarus)',\n bn: 'Bengali',\n bn_BD: 'Bengali (Bangladesh)',\n bn_IN: 'Bengali (India)',\n bs: 'Bosnian',\n bs_BA: 'Bosnian (Bosnia & Herzegovina)',\n bs_Cyrl_BA: 'Bosnian (Cyrillic, Bosnia & Herzegovina)',\n bs_Cyrl: 'Bosnian (Cyrillic)',\n bs_Latn_BA: 'Bosnian (Latin, Bosnia & Herzegovina)',\n bs_Latn: 'Bosnian (Latin)',\n br: 'Breton',\n br_FR: 'Breton (France)',\n bg: 'Bulgarian',\n bg_BG: 'Bulgarian (Bulgaria)',\n my: 'Burmese',\n my_MM: 'Burmese (Myanmar (Burma))',\n ca: 'Catalan',\n ca_AD: 'Catalan (Andorra)',\n ca_FR: 'Catalan (France)',\n ca_IT: 'Catalan (Italy)',\n ca_ES: 'Catalan (Spain)',\n zh: 'Chinese',\n zh_CN: 'Chinese (China)',\n zh_HK: 'Chinese (Hong Kong SAR China)',\n zh_MO: 'Chinese (Macau SAR China)',\n zh_Hans_CN: 'Chinese (Simplified, China)',\n zh_Hans_HK: 'Chinese (Simplified, Hong Kong SAR China)',\n zh_Hans_MO: 'Chinese (Simplified, Macau SAR China)',\n zh_Hans_SG: 'Chinese (Simplified, Singapore)',\n zh_Hans: 'Chinese (Simplified)',\n zh_SG: 'Chinese (Singapore)',\n zh_TW: 'Chinese (Taiwan)',\n zh_Hant_HK: 'Chinese (Traditional, Hong Kong SAR China)',\n zh_Hant_MO: 'Chinese (Traditional, Macau SAR China)',\n zh_Hant_TW: 'Chinese (Traditional, Taiwan)',\n zh_Hant: 'Chinese (Traditional)',\n kw: 'Cornish',\n kw_GB: 'Cornish (United Kingdom)',\n hr: 'Croatian',\n hr_BA: 'Croatian (Bosnia & Herzegovina)',\n hr_HR: 'Croatian (Croatia)',\n cs: 'Czech',\n cs_CZ: 'Czech (Czech Republic)',\n da: 'Danish',\n da_DK: 'Danish (Denmark)',\n da_GL: 'Danish (Greenland)',\n nl: 'Dutch',\n nl_AW: 'Dutch (Aruba)',\n nl_BE: 'Dutch (Belgium)',\n nl_BQ: 'Dutch (Caribbean Netherlands)',\n nl_CW: 'Dutch (Curaçao)',\n nl_NL: 'Dutch (Netherlands)',\n nl_SX: 'Dutch (Sint Maarten)',\n nl_SR: 'Dutch (Suriname)',\n dz: 'Dzongkha',\n dz_BT: 'Dzongkha (Bhutan)',\n en: 'English',\n en_AS: 'English (American Samoa)',\n en_AI: 'English (Anguilla)',\n en_AG: 'English (Antigua & Barbuda)',\n en_AU: 'English (Australia)',\n en_BS: 'English (Bahamas)',\n en_BB: 'English (Barbados)',\n en_BE: 'English (Belgium)',\n en_BZ: 'English (Belize)',\n en_BM: 'English (Bermuda)',\n en_BW: 'English (Botswana)',\n en_IO: 'English (British Indian Ocean Territory)',\n en_VG: 'English (British Virgin Islands)',\n en_CM: 'English (Cameroon)',\n en_CA: 'English (Canada)',\n en_KY: 'English (Cayman Islands)',\n en_CX: 'English (Christmas Island)',\n en_CC: 'English (Cocos (Keeling) Islands)',\n en_CK: 'English (Cook Islands)',\n en_DG: 'English (Diego Garcia)',\n en_DM: 'English (Dominica)',\n en_ER: 'English (Eritrea)',\n en_FK: 'English (Falkland Islands)',\n en_FJ: 'English (Fiji)',\n en_GM: 'English (Gambia)',\n en_GH: 'English (Ghana)',\n en_GI: 'English (Gibraltar)',\n en_GD: 'English (Grenada)',\n en_GU: 'English (Guam)',\n en_GG: 'English (Guernsey)',\n en_GY: 'English (Guyana)',\n en_HK: 'English (Hong Kong SAR China)',\n en_IN: 'English (India)',\n en_IE: 'English (Ireland)',\n en_IM: 'English (Isle of Man)',\n en_JM: 'English (Jamaica)',\n en_JE: 'English (Jersey)',\n en_KE: 'English (Kenya)',\n en_KI: 'English (Kiribati)',\n en_LS: 'English (Lesotho)',\n en_LR: 'English (Liberia)',\n en_MO: 'English (Macau SAR China)',\n en_MG: 'English (Madagascar)',\n en_MW: 'English (Malawi)',\n en_MY: 'English (Malaysia)',\n en_MT: 'English (Malta)',\n en_MH: 'English (Marshall Islands)',\n en_MU: 'English (Mauritius)',\n en_FM: 'English (Micronesia)',\n en_MS: 'English (Montserrat)',\n en_NA: 'English (Namibia)',\n en_NR: 'English (Nauru)',\n en_NZ: 'English (New Zealand)',\n en_NG: 'English (Nigeria)',\n en_NU: 'English (Niue)',\n en_NF: 'English (Norfolk Island)',\n en_MP: 'English (Northern Mariana Islands)',\n en_PK: 'English (Pakistan)',\n en_PW: 'English (Palau)',\n en_PG: 'English (Papua New Guinea)',\n en_PH: 'English (Philippines)',\n en_PN: 'English (Pitcairn Islands)',\n en_PR: 'English (Puerto Rico)',\n en_RW: 'English (Rwanda)',\n en_WS: 'English (Samoa)',\n en_SC: 'English (Seychelles)',\n en_SL: 'English (Sierra Leone)',\n en_SG: 'English (Singapore)',\n en_SX: 'English (Sint Maarten)',\n en_SB: 'English (Solomon Islands)',\n en_ZA: 'English (South Africa)',\n en_SS: 'English (South Sudan)',\n en_SH: 'English (St. Helena)',\n en_KN: 'English (St. Kitts & Nevis)',\n en_LC: 'English (St. Lucia)',\n en_VC: 'English (St. Vincent & Grenadines)',\n en_SD: 'English (Sudan)',\n en_SZ: 'English (Swaziland)',\n en_TZ: 'English (Tanzania)',\n en_TK: 'English (Tokelau)',\n en_TO: 'English (Tonga)',\n en_TT: 'English (Trinidad & Tobago)',\n en_TC: 'English (Turks & Caicos Islands)',\n en_TV: 'English (Tuvalu)',\n en_UM: 'English (U.S. Outlying Islands)',\n en_VI: 'English (U.S. Virgin Islands)',\n en_UG: 'English (Uganda)',\n en_GB: 'English (United Kingdom)',\n en_US: 'English (United States)',\n en_VU: 'English (Vanuatu)',\n en_ZM: 'English (Zambia)',\n en_ZW: 'English (Zimbabwe)',\n eo: 'Esperanto',\n et: 'Estonian',\n et_EE: 'Estonian (Estonia)',\n ee: 'Ewe',\n ee_GH: 'Ewe (Ghana)',\n ee_TG: 'Ewe (Togo)',\n fo: 'Faroese',\n fo_FO: 'Faroese (Faroe Islands)',\n fi: 'Finnish',\n fi_FI: 'Finnish (Finland)',\n fr: 'French',\n fr_DZ: 'French (Algeria)',\n fr_BE: 'French (Belgium)',\n fr_BJ: 'French (Benin)',\n fr_BF: 'French (Burkina Faso)',\n fr_BI: 'French (Burundi)',\n fr_CM: 'French (Cameroon)',\n fr_CA: 'French (Canada)',\n fr_CF: 'French (Central African Republic)',\n fr_TD: 'French (Chad)',\n fr_KM: 'French (Comoros)',\n fr_CG: 'French (Congo - Brazzaville)',\n fr_CD: 'French (Congo - Kinshasa)',\n fr_CI: 'French (Côte d’Ivoire)',\n fr_DJ: 'French (Djibouti)',\n fr_GQ: 'French (Equatorial Guinea)',\n fr_FR: 'French (France)',\n fr_GF: 'French (French Guiana)',\n fr_PF: 'French (French Polynesia)',\n fr_GA: 'French (Gabon)',\n fr_GP: 'French (Guadeloupe)',\n fr_GN: 'French (Guinea)',\n fr_HT: 'French (Haiti)',\n fr_LU: 'French (Luxembourg)',\n fr_MG: 'French (Madagascar)',\n fr_ML: 'French (Mali)',\n fr_MQ: 'French (Martinique)',\n fr_MR: 'French (Mauritania)',\n fr_MU: 'French (Mauritius)',\n fr_YT: 'French (Mayotte)',\n fr_MC: 'French (Monaco)',\n fr_MA: 'French (Morocco)',\n fr_NC: 'French (New Caledonia)',\n fr_NE: 'French (Niger)',\n fr_RE: 'French (Réunion)',\n fr_RW: 'French (Rwanda)',\n fr_SN: 'French (Senegal)',\n fr_SC: 'French (Seychelles)',\n fr_BL: 'French (St. Barthélemy)',\n fr_MF: 'French (St. Martin)',\n fr_PM: 'French (St. Pierre & Miquelon)',\n fr_CH: 'French (Switzerland)',\n fr_SY: 'French (Syria)',\n fr_TG: 'French (Togo)',\n fr_TN: 'French (Tunisia)',\n fr_VU: 'French (Vanuatu)',\n fr_WF: 'French (Wallis & Futuna)',\n ff: 'Fulah',\n ff_CM: 'Fulah (Cameroon)',\n ff_GN: 'Fulah (Guinea)',\n ff_MR: 'Fulah (Mauritania)',\n ff_SN: 'Fulah (Senegal)',\n gl: 'Galician',\n gl_ES: 'Galician (Spain)',\n lg: 'Ganda',\n lg_UG: 'Ganda (Uganda)',\n ka: 'Georgian',\n ka_GE: 'Georgian (Georgia)',\n de: 'German',\n de_AT: 'German (Austria)',\n de_BE: 'German (Belgium)',\n de_DE: 'German (Germany)',\n de_LI: 'German (Liechtenstein)',\n de_LU: 'German (Luxembourg)',\n de_CH: 'German (Switzerland)',\n el: 'Greek',\n el_CY: 'Greek (Cyprus)',\n el_GR: 'Greek (Greece)',\n gu: 'Gujarati',\n gu_IN: 'Gujarati (India)',\n ha: 'Hausa',\n ha_GH: 'Hausa (Ghana)',\n ha_Latn_GH: 'Hausa (Latin, Ghana)',\n ha_Latn_NE: 'Hausa (Latin, Niger)',\n ha_Latn_NG: 'Hausa (Latin, Nigeria)',\n ha_Latn: 'Hausa (Latin)',\n ha_NE: 'Hausa (Niger)',\n ha_NG: 'Hausa (Nigeria)',\n he: 'Hebrew',\n he_IL: 'Hebrew (Israel)',\n hi: 'Hindi',\n hi_IN: 'Hindi (India)',\n hu: 'Hungarian',\n hu_HU: 'Hungarian (Hungary)',\n is: 'Icelandic',\n is_IS: 'Icelandic (Iceland)',\n ig: 'Igbo',\n ig_NG: 'Igbo (Nigeria)',\n id: 'Indonesian',\n id_ID: 'Indonesian (Indonesia)',\n ga: 'Irish',\n ga_IE: 'Irish (Ireland)',\n it: 'Italian',\n it_IT: 'Italian (Italy)',\n it_SM: 'Italian (San Marino)',\n it_CH: 'Italian (Switzerland)',\n ja: 'Japanese',\n ja_JP: 'Japanese (Japan)',\n kl: 'Kalaallisut',\n kl_GL: 'Kalaallisut (Greenland)',\n kn: 'Kannada',\n kn_IN: 'Kannada (India)',\n ks: 'Kashmiri',\n ks_Arab_IN: 'Kashmiri (Arabic, India)',\n ks_Arab: 'Kashmiri (Arabic)',\n ks_IN: 'Kashmiri (India)',\n kk: 'Kazakh',\n kk_Cyrl_KZ: 'Kazakh (Cyrillic, Kazakhstan)',\n kk_Cyrl: 'Kazakh (Cyrillic)',\n kk_KZ: 'Kazakh (Kazakhstan)',\n km: 'Khmer',\n km_KH: 'Khmer (Cambodia)',\n ki: 'Kikuyu',\n ki_KE: 'Kikuyu (Kenya)',\n rw: 'Kinyarwanda',\n rw_RW: 'Kinyarwanda (Rwanda)',\n ko: 'Korean',\n ko_KP: 'Korean (North Korea)',\n ko_KR: 'Korean (South Korea)',\n ky: 'Kyrgyz',\n ky_Cyrl_KG: 'Kyrgyz (Cyrillic, Kyrgyzstan)',\n ky_Cyrl: 'Kyrgyz (Cyrillic)',\n ky_KG: 'Kyrgyz (Kyrgyzstan)',\n lo: 'Lao',\n lo_LA: 'Lao (Laos)',\n lv: 'Latvian',\n lv_LV: 'Latvian (Latvia)',\n ln: 'Lingala',\n ln_AO: 'Lingala (Angola)',\n ln_CF: 'Lingala (Central African Republic)',\n ln_CG: 'Lingala (Congo - Brazzaville)',\n ln_CD: 'Lingala (Congo - Kinshasa)',\n lt: 'Lithuanian',\n lt_LT: 'Lithuanian (Lithuania)',\n lu: 'Luba-Katanga',\n lu_CD: 'Luba-Katanga (Congo - Kinshasa)',\n lb: 'Luxembourgish',\n lb_LU: 'Luxembourgish (Luxembourg)',\n mk: 'Macedonian',\n mk_MK: 'Macedonian (Macedonia)',\n mg: 'Malagasy',\n mg_MG: 'Malagasy (Madagascar)',\n ms: 'Malay',\n ms_BN: 'Malay (Brunei)',\n ms_Latn_BN: 'Malay (Latin, Brunei)',\n ms_Latn_MY: 'Malay (Latin, Malaysia)',\n ms_Latn_SG: 'Malay (Latin, Singapore)',\n ms_Latn: 'Malay (Latin)',\n ms_MY: 'Malay (Malaysia)',\n ms_SG: 'Malay (Singapore)',\n ml: 'Malayalam',\n ml_IN: 'Malayalam (India)',\n mt: 'Maltese',\n mt_MT: 'Maltese (Malta)',\n gv: 'Manx',\n gv_IM: 'Manx (Isle of Man)',\n mr: 'Marathi',\n mr_IN: 'Marathi (India)',\n mn: 'Mongolian',\n mn_Cyrl_MN: 'Mongolian (Cyrillic, Mongolia)',\n mn_Cyrl: 'Mongolian (Cyrillic)',\n mn_MN: 'Mongolian (Mongolia)',\n ne: 'Nepali',\n ne_IN: 'Nepali (India)',\n ne_NP: 'Nepali (Nepal)',\n nd: 'North Ndebele',\n nd_ZW: 'North Ndebele (Zimbabwe)',\n se: 'Northern Sami',\n se_FI: 'Northern Sami (Finland)',\n se_NO: 'Northern Sami (Norway)',\n se_SE: 'Northern Sami (Sweden)',\n no: 'Norwegian',\n no_NO: 'Norwegian (Norway)',\n nb: 'Norwegian BokmÃ¥l',\n nb_NO: 'Norwegian BokmÃ¥l (Norway)',\n nb_SJ: 'Norwegian BokmÃ¥l (Svalbard & Jan Mayen)',\n nn: 'Norwegian Nynorsk',\n nn_NO: 'Norwegian Nynorsk (Norway)',\n or: 'Oriya',\n or_IN: 'Oriya (India)',\n om: 'Oromo',\n om_ET: 'Oromo (Ethiopia)',\n om_KE: 'Oromo (Kenya)',\n os: 'Ossetic',\n os_GE: 'Ossetic (Georgia)',\n os_RU: 'Ossetic (Russia)',\n ps: 'Pashto',\n ps_AF: 'Pashto (Afghanistan)',\n fa: 'Persian',\n fa_AF: 'Persian (Afghanistan)',\n fa_IR: 'Persian (Iran)',\n pl: 'Polish',\n pl_PL: 'Polish (Poland)',\n pt: 'Portuguese',\n pt_AO: 'Portuguese (Angola)',\n pt_BR: 'Portuguese (Brazil)',\n pt_CV: 'Portuguese (Cape Verde)',\n pt_GW: 'Portuguese (Guinea-Bissau)',\n pt_MO: 'Portuguese (Macau SAR China)',\n pt_MZ: 'Portuguese (Mozambique)',\n pt_PT: 'Portuguese (Portugal)',\n pt_ST: 'Portuguese (São Tomé & PrÃncipe)',\n pt_TL: 'Portuguese (Timor-Leste)',\n pa: 'Punjabi',\n pa_Arab_PK: 'Punjabi (Arabic, Pakistan)',\n pa_Arab: 'Punjabi (Arabic)',\n pa_Guru_IN: 'Punjabi (Gurmukhi, India)',\n pa_Guru: 'Punjabi (Gurmukhi)',\n pa_IN: 'Punjabi (India)',\n pa_PK: 'Punjabi (Pakistan)',\n qu: 'Quechua',\n qu_BO: 'Quechua (Bolivia)',\n qu_EC: 'Quechua (Ecuador)',\n qu_PE: 'Quechua (Peru)',\n ro: 'Romanian',\n ro_MD: 'Romanian (Moldova)',\n ro_RO: 'Romanian (Romania)',\n rm: 'Romansh',\n rm_CH: 'Romansh (Switzerland)',\n rn: 'Rundi',\n rn_BI: 'Rundi (Burundi)',\n ru: 'Russian',\n ru_BY: 'Russian (Belarus)',\n ru_KZ: 'Russian (Kazakhstan)',\n ru_KG: 'Russian (Kyrgyzstan)',\n ru_MD: 'Russian (Moldova)',\n ru_RU: 'Russian (Russia)',\n ru_UA: 'Russian (Ukraine)',\n sg: 'Sango',\n sg_CF: 'Sango (Central African Republic)',\n gd: 'Scottish Gaelic',\n gd_GB: 'Scottish Gaelic (United Kingdom)',\n sr: 'Serbian',\n sr_BA: 'Serbian (Bosnia & Herzegovina)',\n sr_Cyrl_BA: 'Serbian (Cyrillic, Bosnia & Herzegovina)',\n sr_Cyrl_XK: 'Serbian (Cyrillic, Kosovo)',\n sr_Cyrl_ME: 'Serbian (Cyrillic, Montenegro)',\n sr_Cyrl_RS: 'Serbian (Cyrillic, Serbia)',\n sr_Cyrl: 'Serbian (Cyrillic)',\n sr_XK: 'Serbian (Kosovo)',\n sr_Latn_BA: 'Serbian (Latin, Bosnia & Herzegovina)',\n sr_Latn_XK: 'Serbian (Latin, Kosovo)',\n sr_Latn_ME: 'Serbian (Latin, Montenegro)',\n sr_Latn_RS: 'Serbian (Latin, Serbia)',\n sr_Latn: 'Serbian (Latin)',\n sr_ME: 'Serbian (Montenegro)',\n sr_RS: 'Serbian (Serbia)',\n sh: 'Serbo-Croatian',\n sh_BA: 'Serbo-Croatian (Bosnia & Herzegovina)',\n sn: 'Shona',\n sn_ZW: 'Shona (Zimbabwe)',\n ii: 'Sichuan Yi',\n ii_CN: 'Sichuan Yi (China)',\n si: 'Sinhala',\n si_LK: 'Sinhala (Sri Lanka)',\n sk: 'Slovak',\n sk_SK: 'Slovak (Slovakia)',\n sl: 'Slovenian',\n sl_SI: 'Slovenian (Slovenia)',\n so: 'Somali',\n so_DJ: 'Somali (Djibouti)',\n so_ET: 'Somali (Ethiopia)',\n so_KE: 'Somali (Kenya)',\n so_SO: 'Somali (Somalia)',\n es: 'Spanish',\n es_AR: 'Spanish (Argentina)',\n es_BO: 'Spanish (Bolivia)',\n es_IC: 'Spanish (Canary Islands)',\n es_EA: 'Spanish (Ceuta & Melilla)',\n es_CL: 'Spanish (Chile)',\n es_CO: 'Spanish (Colombia)',\n es_CR: 'Spanish (Costa Rica)',\n es_CU: 'Spanish (Cuba)',\n es_DO: 'Spanish (Dominican Republic)',\n es_EC: 'Spanish (Ecuador)',\n es_SV: 'Spanish (El Salvador)',\n es_GQ: 'Spanish (Equatorial Guinea)',\n es_GT: 'Spanish (Guatemala)',\n es_HN: 'Spanish (Honduras)',\n es_MX: 'Spanish (Mexico)',\n es_NI: 'Spanish (Nicaragua)',\n es_PA: 'Spanish (Panama)',\n es_PY: 'Spanish (Paraguay)',\n es_PE: 'Spanish (Peru)',\n es_PH: 'Spanish (Philippines)',\n es_PR: 'Spanish (Puerto Rico)',\n es_ES: 'Spanish (Spain)',\n es_US: 'Spanish (United States)',\n es_UY: 'Spanish (Uruguay)',\n es_VE: 'Spanish (Venezuela)',\n sw: 'Swahili',\n sw_KE: 'Swahili (Kenya)',\n sw_TZ: 'Swahili (Tanzania)',\n sw_UG: 'Swahili (Uganda)',\n sv: 'Swedish',\n sv_AX: 'Swedish (Ã…land Islands)',\n sv_FI: 'Swedish (Finland)',\n sv_SE: 'Swedish (Sweden)',\n tl: 'Tagalog',\n tl_PH: 'Tagalog (Philippines)',\n ta: 'Tamil',\n ta_IN: 'Tamil (India)',\n ta_MY: 'Tamil (Malaysia)',\n ta_SG: 'Tamil (Singapore)',\n ta_LK: 'Tamil (Sri Lanka)',\n te: 'Telugu',\n te_IN: 'Telugu (India)',\n th: 'Thai',\n th_TH: 'Thai (Thailand)',\n bo: 'Tibetan',\n bo_CN: 'Tibetan (China)',\n bo_IN: 'Tibetan (India)',\n ti: 'Tigrinya',\n ti_ER: 'Tigrinya (Eritrea)',\n ti_ET: 'Tigrinya (Ethiopia)',\n to: 'Tongan',\n to_TO: 'Tongan (Tonga)',\n tr: 'Turkish',\n tr_CY: 'Turkish (Cyprus)',\n tr_TR: 'Turkish (Turkey)',\n uk: 'Ukrainian',\n uk_UA: 'Ukrainian (Ukraine)',\n ur: 'Urdu',\n ur_IN: 'Urdu (India)',\n ur_PK: 'Urdu (Pakistan)',\n ug: 'Uyghur',\n ug_Arab_CN: 'Uyghur (Arabic, China)',\n ug_Arab: 'Uyghur (Arabic)',\n ug_CN: 'Uyghur (China)',\n uz: 'Uzbek',\n uz_AF: 'Uzbek (Afghanistan)',\n uz_Arab_AF: 'Uzbek (Arabic, Afghanistan)',\n uz_Arab: 'Uzbek (Arabic)',\n uz_Cyrl_UZ: 'Uzbek (Cyrillic, Uzbekistan)',\n uz_Cyrl: 'Uzbek (Cyrillic)',\n uz_Latn_UZ: 'Uzbek (Latin, Uzbekistan)',\n uz_Latn: 'Uzbek (Latin)',\n uz_UZ: 'Uzbek (Uzbekistan)',\n vi: 'Vietnamese',\n vi_VN: 'Vietnamese (Vietnam)',\n cy: 'Welsh',\n cy_GB: 'Welsh (United Kingdom)',\n fy: 'Western Frisian',\n fy_NL: 'Western Frisian (Netherlands)',\n yi: 'Yiddish',\n yo: 'Yoruba',\n yo_BJ: 'Yoruba (Benin)',\n yo_NG: 'Yoruba (Nigeria)',\n zu: 'Zulu',\n zu_ZA: 'Zulu (South Africa)',\n};\nexport default locales;\n","<script setup>\nimport { ref, onMounted } from 'vue';\nimport { useKeyboardEvents } from 'dashboard/composables/useKeyboardEvents';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\ndefineProps({\n title: {\n type: String,\n default: 'Chatwoot',\n },\n});\n\nconst emit = defineEmits(['search', 'close']);\n\nconst searchInputRef = ref(null);\nconst searchQuery = ref('');\n\nonMounted(() => {\n searchInputRef.value.focus();\n});\n\nconst onInput = e => {\n emit('search', e.target.value);\n};\n\nconst onClose = () => {\n emit('close');\n};\n\nconst keyboardEvents = {\n Slash: {\n action: e => {\n e.preventDefault();\n searchInputRef.value.focus();\n },\n },\n Escape: {\n action: () => {\n onClose();\n },\n allowOnFocusedInput: true,\n },\n};\nuseKeyboardEvents(keyboardEvents);\n</script>\n\n<template>\n <div class=\"flex flex-col py-1\">\n <div class=\"flex items-center justify-between py-2 mb-1\">\n <h3 class=\"text-base text-slate-900 dark:text-slate-25\">\n {{ title }}\n </h3>\n <Button ghost xs slate icon=\"i-lucide-x\" @click=\"onClose\" />\n </div>\n\n <div class=\"relative\">\n <div\n class=\"absolute ltr:left-0 rtl:right-0 w-8 top-0.5 h-8 flex justify-center items-center\"\n >\n <fluent-icon icon=\"search\" class=\"\" size=\"18\" />\n </div>\n <input\n ref=\"searchInputRef\"\n type=\"text\"\n :placeholder=\"$t('HELP_CENTER.ARTICLE_SEARCH.PLACEHOLDER')\"\n class=\"block w-full !h-9 ltr:!pl-8 rtl:!pr-8 dark:!bg-n-slate-2 !border-n-weak !bg-n-slate-2 text-sm rounded-md leading-8 text-slate-700 shadow-sm ring-2 ring-transparent ring-slate-300 border border-solid placeholder:text-slate-400 focus:border-woot-600 focus:ring-woot-200 !mb-0 focus:bg-slate-25 dark:focus:bg-slate-700 dark:focus:ring-woot-700\"\n :value=\"searchQuery\"\n @input=\"onInput\"\n />\n </div>\n </div>\n</template>\n","<script setup>\nimport { useAlert } from 'dashboard/composables';\nimport { useI18n } from 'vue-i18n';\nimport { copyTextToClipboard } from 'shared/helpers/clipboard';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n id: {\n type: Number,\n default: 0,\n },\n title: {\n type: String,\n default: 'Untitled',\n },\n url: {\n type: String,\n default: '',\n },\n category: {\n type: String,\n default: '',\n },\n locale: {\n type: String,\n default: '',\n },\n});\n\nconst emit = defineEmits(['insert', 'preview']);\n\nconst { t } = useI18n();\n\nconst handleInsert = e => {\n e.stopPropagation();\n emit('insert', props.id);\n};\n\nconst handlePreview = e => {\n e.stopPropagation();\n emit('preview', props.id);\n};\n\nconst handleCopy = async e => {\n e.stopPropagation();\n await copyTextToClipboard(props.url);\n useAlert(t('CONTACT_PANEL.COPY_SUCCESSFUL'));\n};\n</script>\n\n<template>\n <button\n class=\"flex flex-col w-full gap-1 px-2 py-1 bg-white border border-transparent border-solid rounded-md cursor-pointer dark:bg-slate-900 hover:bg-slate-25 hover:dark:bg-slate-800 group focus:outline-none focus:bg-slate-25 focus:border-slate-500 dark:focus:border-slate-400 dark:focus:bg-slate-800\"\n @click=\"handlePreview\"\n >\n <h4\n class=\"w-full mb-0 -mx-1 text-sm rounded-sm ltr:text-left rtl:text-right text-slate-900 dark:text-slate-25 hover:underline group-hover:underline\"\n >\n {{ title }}\n </h4>\n\n <div class=\"flex content-between items-center gap-0.5 w-full\">\n <p\n class=\"w-full mb-0 text-sm ltr:text-left rtl:text-right text-slate-600 dark:text-slate-300\"\n >\n {{ locale }}\n {{ ` / ` }}\n {{ category || $t('HELP_CENTER.ARTICLE_SEARCH_RESULT.UNCATEGORIZED') }}\n </p>\n <div class=\"flex gap-0.5\">\n <Button\n :title=\"$t('HELP_CENTER.ARTICLE_SEARCH_RESULT.COPY_LINK')\"\n faded\n slate\n xs\n type=\"reset\"\n icon=\"i-lucide-copy\"\n class=\"invisible group-hover:visible\"\n @click=\"handleCopy\"\n />\n <Button\n xs\n faded\n slate\n :label=\"$t('HELP_CENTER.ARTICLE_SEARCH_RESULT.INSERT_ARTICLE')\"\n @click=\"handleInsert\"\n />\n </div>\n </div>\n </button>\n</template>\n","<script>\nimport SearchResultItem from './ArticleSearchResultItem.vue';\n\nexport default {\n name: 'SearchResults',\n components: {\n SearchResultItem,\n },\n props: {\n articles: {\n type: Array,\n default: () => [],\n },\n isLoading: {\n type: Boolean,\n default: false,\n },\n searchQuery: {\n type: String,\n default: '',\n },\n },\n emits: ['preview', 'insert'],\n computed: {\n showNoResults() {\n return this.searchQuery && this.articles.length === 0;\n },\n },\n methods: {\n handlePreview(id) {\n this.$emit('preview', id);\n },\n handleInsert(id) {\n this.$emit('insert', id);\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"flex justify-end h-full gap-1 py-4 overflow-y-auto bg-white dark:bg-slate-900\"\n >\n <div class=\"flex flex-col w-full gap-1\">\n <div v-if=\"isLoading\" class=\"empty-state-message\">\n {{ $t('HELP_CENTER.ARTICLE_SEARCH_RESULT.SEARCH_LOADER') }}\n </div>\n <div v-else-if=\"showNoResults\" class=\"empty-state-message\">\n {{ $t('HELP_CENTER.ARTICLE_SEARCH_RESULT.NO_RESULT') }}\n </div>\n <template v-else>\n <SearchResultItem\n v-for=\"article in articles\"\n :id=\"article.id\"\n :key=\"article.id\"\n :title=\"article.title\"\n :body=\"article.content\"\n :url=\"article.url\"\n :category=\"article.category.name\"\n :locale=\"article.localeName\"\n @preview=\"handlePreview\"\n @insert=\"handleInsert\"\n />\n </template>\n </div>\n </div>\n</template>\n\n<style scoped>\n.empty-state-message {\n @apply text-center flex items-center justify-center px-4 py-8 text-slate-500 text-sm;\n}\n</style>\n","<script setup>\nimport IframeLoader from 'shared/components/IframeLoader.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\ndefineProps({\n url: {\n type: String,\n default: '',\n },\n});\n\nconst emit = defineEmits(['back', 'insert']);\n\nconst onBack = e => {\n e.stopPropagation();\n emit('back');\n};\n\nconst onInsert = e => {\n e.stopPropagation();\n emit('insert');\n};\n</script>\n\n<template>\n <div class=\"h-full w-full flex flex-col flex-1 overflow-hidden\">\n <div class=\"py-1\">\n <Button\n link\n xs\n :label=\"$t('HELP_CENTER.ARTICLE_SEARCH.BACK_RESULTS')\"\n icon=\"i-lucide-chevron-left\"\n @click=\"onBack\"\n />\n </div>\n <div class=\"-ml-4 h-full overflow-y-auto\">\n <div class=\"w-full h-full min-h-0\">\n <IframeLoader :url=\"url\" />\n </div>\n </div>\n\n <div class=\"flex justify-end gap-2 py-2\">\n <Button\n faded\n slate\n sm\n type=\"reset\"\n icon=\"i-lucide-chevron-left\"\n :label=\"$t('HELP_CENTER.ARTICLE_SEARCH.BACK')\"\n @click=\"onBack\"\n />\n <Button\n sm\n type=\"submit\"\n icon=\"i-lucide-arrow-down-to-dot\"\n :label=\"$t('HELP_CENTER.ARTICLE_SEARCH.INSERT_ARTICLE')\"\n @click=\"onInsert\"\n />\n </div>\n </div>\n</template>\n","export const buildPortalURL = portalSlug => {\n const { hostURL, helpCenterURL } = window.chatwootConfig;\n const baseURL = helpCenterURL || hostURL || '';\n return `${baseURL}/hc/${portalSlug}`;\n};\n\nexport const buildPortalArticleURL = (\n portalSlug,\n categorySlug,\n locale,\n articleSlug\n) => {\n const portalURL = buildPortalURL(portalSlug);\n return `${portalURL}/articles/${articleSlug}`;\n};\n\nexport const getArticleStatus = status => {\n switch (status) {\n case 'draft':\n return 0;\n case 'published':\n return 1;\n case 'archived':\n return 2;\n default:\n return undefined;\n }\n};\n\n// Constants\nexport const HELP_CENTER_MENU_ITEMS = [\n {\n label: 'Articles',\n icon: 'i-lucide-book',\n action: 'portals_articles_index',\n value: [\n 'portals_articles_index',\n 'portals_articles_new',\n 'portals_articles_edit',\n ],\n },\n {\n label: 'Categories',\n icon: 'i-lucide-folder',\n action: 'portals_categories_index',\n value: [\n 'portals_categories_index',\n 'portals_categories_articles_index',\n 'portals_categories_articles_edit',\n ],\n },\n {\n label: 'Locales',\n icon: 'i-lucide-languages',\n action: 'portals_locales_index',\n value: ['portals_locales_index'],\n },\n {\n label: 'Settings',\n icon: 'i-lucide-settings',\n action: 'portals_settings_index',\n value: ['portals_settings_index'],\n },\n];\n\nexport const ARTICLE_STATUSES = {\n DRAFT: 'draft',\n PUBLISHED: 'published',\n ARCHIVED: 'archived',\n};\n\nexport const ARTICLE_MENU_ITEMS = {\n publish: {\n label: 'HELP_CENTER.ARTICLES_PAGE.ARTICLE_CARD.CARD.DROPDOWN_MENU.PUBLISH',\n value: ARTICLE_STATUSES.PUBLISHED,\n action: 'publish',\n icon: 'i-lucide-check',\n },\n draft: {\n label: 'HELP_CENTER.ARTICLES_PAGE.ARTICLE_CARD.CARD.DROPDOWN_MENU.DRAFT',\n value: ARTICLE_STATUSES.DRAFT,\n action: 'draft',\n icon: 'i-lucide-pencil-line',\n },\n archive: {\n label: 'HELP_CENTER.ARTICLES_PAGE.ARTICLE_CARD.CARD.DROPDOWN_MENU.ARCHIVE',\n value: ARTICLE_STATUSES.ARCHIVED,\n action: 'archive',\n icon: 'i-lucide-archive-restore',\n },\n delete: {\n label: 'HELP_CENTER.ARTICLES_PAGE.ARTICLE_CARD.CARD.DROPDOWN_MENU.DELETE',\n value: 'delete',\n action: 'delete',\n icon: 'i-lucide-trash',\n },\n};\n\nexport const ARTICLE_MENU_OPTIONS = {\n [ARTICLE_STATUSES.ARCHIVED]: ['publish', 'draft'],\n [ARTICLE_STATUSES.DRAFT]: ['publish', 'archive'],\n [ARTICLE_STATUSES.PUBLISHED]: ['draft', 'archive'],\n};\n\nexport const ARTICLE_TABS = {\n ALL: 'all',\n MINE: 'mine',\n DRAFT: 'draft',\n ARCHIVED: 'archived',\n};\n\nexport const CATEGORY_ALL = 'all';\n\nexport const ARTICLE_TABS_OPTIONS = [\n {\n key: 'ALL',\n value: 'all',\n },\n {\n key: 'MINE',\n value: 'mine',\n },\n {\n key: 'DRAFT',\n value: 'draft',\n },\n {\n key: 'ARCHIVED',\n value: 'archived',\n },\n];\n\nexport const LOCALE_MENU_ITEMS = [\n {\n label: 'HELP_CENTER.LOCALES_PAGE.LOCALE_CARD.DROPDOWN_MENU.MAKE_DEFAULT',\n action: 'change-default',\n value: 'default',\n icon: 'i-lucide-star',\n },\n {\n label: 'HELP_CENTER.LOCALES_PAGE.LOCALE_CARD.DROPDOWN_MENU.DELETE',\n action: 'delete',\n value: 'delete',\n icon: 'i-lucide-trash',\n },\n];\n\nexport const ARTICLE_EDITOR_STATUS_OPTIONS = {\n published: ['archive', 'draft'],\n archived: ['draft'],\n draft: ['archive'],\n};\n","<script>\nimport { debounce } from '@chatwoot/utils';\nimport { useAlert } from 'dashboard/composables';\nimport allLocales from 'shared/constants/locales.js';\n\nimport SearchHeader from './Header.vue';\nimport SearchResults from './SearchResults.vue';\nimport ArticleView from './ArticleView.vue';\nimport ArticlesAPI from 'dashboard/api/helpCenter/articles';\nimport { buildPortalArticleURL } from 'dashboard/helper/portalHelper';\n\nexport default {\n name: 'ArticleSearchPopover',\n components: {\n SearchHeader,\n SearchResults,\n ArticleView,\n },\n props: {\n selectedPortalSlug: {\n type: String,\n required: true,\n },\n },\n emits: ['close', 'insert'],\n data() {\n return {\n searchQuery: '',\n isLoading: false,\n searchResults: [],\n activeId: '',\n debounceSearch: () => {},\n };\n },\n computed: {\n articleViewerUrl() {\n const article = this.activeArticle(this.activeId);\n if (!article) return '';\n const isDark = document.body.classList.contains('dark');\n\n const url = new URL(article.url);\n url.searchParams.set('show_plain_layout', 'true');\n\n if (isDark) {\n url.searchParams.set('theme', 'dark');\n }\n\n return `${url}`;\n },\n searchResultsWithUrl() {\n return this.searchResults.map(article => ({\n ...article,\n localeName: this.localeName(article.category.locale || 'en'),\n url: this.generateArticleUrl(article),\n }));\n },\n },\n mounted() {\n this.fetchArticlesByQuery(this.searchQuery);\n this.debounceSearch = debounce(this.fetchArticlesByQuery, 500, false);\n },\n methods: {\n generateArticleUrl(article) {\n return buildPortalArticleURL(\n this.selectedPortalSlug,\n '',\n '',\n article.slug\n );\n },\n localeName(code) {\n return allLocales[code];\n },\n activeArticle(id) {\n return this.searchResultsWithUrl.find(article => article.id === id);\n },\n onSearch(query) {\n this.searchQuery = query;\n this.activeId = '';\n this.debounceSearch(query);\n },\n onClose() {\n this.$emit('close');\n this.searchQuery = '';\n this.activeId = '';\n this.searchResults = [];\n },\n async fetchArticlesByQuery(query) {\n try {\n const sort = query ? '' : 'views';\n this.isLoading = true;\n this.searchResults = [];\n const { data } = await ArticlesAPI.searchArticles({\n portalSlug: this.selectedPortalSlug,\n query,\n sort,\n });\n this.searchResults = data.payload;\n this.isLoading = true;\n } catch (error) {\n // Show something wrong message\n } finally {\n this.isLoading = false;\n }\n },\n handlePreview(id) {\n this.activeId = id;\n },\n onBack() {\n this.activeId = '';\n },\n onInsert(id) {\n const article = this.activeArticle(id || this.activeId);\n\n this.$emit('insert', article);\n useAlert(this.$t('HELP_CENTER.ARTICLE_SEARCH.SUCCESS_ARTICLE_INSERTED'));\n this.onClose();\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"fixed top-0 left-0 z-50 flex items-center justify-center w-screen h-screen bg-modal-backdrop-light dark:bg-modal-backdrop-dark\"\n >\n <div\n v-on-clickaway=\"onClose\"\n class=\"flex flex-col px-4 pb-4 rounded-md shadow-md border border-solid border-slate-50 dark:border-slate-800 bg-white dark:bg-slate-900 z-[1000] max-w-[720px] md:w-[20rem] lg:w-[24rem] xl:w-[28rem] 2xl:w-[32rem] h-[calc(100vh-20rem)] max-h-[40rem]\"\n >\n <SearchHeader\n :title=\"$t('HELP_CENTER.ARTICLE_SEARCH.TITLE')\"\n class=\"w-full sticky top-0 bg-[inherit]\"\n @close=\"onClose\"\n @search=\"onSearch\"\n />\n\n <ArticleView\n v-if=\"activeId\"\n :url=\"articleViewerUrl\"\n @back=\"onBack\"\n @insert=\"onInsert\"\n />\n <SearchResults\n v-else\n :search-query=\"searchQuery\"\n :is-loading=\"isLoading\"\n :portal-slug=\"selectedPortalSlug\"\n :articles=\"searchResultsWithUrl\"\n @preview=\"handlePreview\"\n @insert=\"onInsert\"\n />\n </div>\n </div>\n</template>\n","<script setup>\nimport { useRouter } from 'vue-router';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst router = useRouter();\n\nconst openProfileSettings = () => {\n return router.push({ name: 'profile_settings_index' });\n};\n</script>\n\n<template>\n <div\n class=\"my-0 mx-4 px-1 flex max-h-[8vh] items-baseline justify-between hover:bg-slate-25 dark:hover:bg-slate-800 border border-dashed border-slate-100 dark:border-slate-700 rounded-sm overflow-auto\"\n >\n <p class=\"w-fit !m-0\">\n {{ $t('CONVERSATION.FOOTER.MESSAGE_SIGNATURE_NOT_CONFIGURED') }}\n\n <Button\n link\n :label=\"$t('CONVERSATION.FOOTER.CLICK_HERE')\"\n @click=\"openProfileSettings\"\n />\n </p>\n </div>\n</template>\n","function t(t,e,i,s){return new(i||(i=Promise))((function(n,r){function o(t){try{h(s.next(t))}catch(t){r(t)}}function a(t){try{h(s.throw(t))}catch(t){r(t)}}function h(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,a)}h((s=s.apply(t,e||[])).next())}))}\"function\"==typeof SuppressedError&&SuppressedError;class e{constructor(){this.listeners={}}on(t,e,i){if(this.listeners[t]||(this.listeners[t]=new Set),this.listeners[t].add(e),null==i?void 0:i.once){const i=()=>{this.un(t,i),this.un(t,e)};return this.on(t,i),i}return()=>this.un(t,e)}un(t,e){var i;null===(i=this.listeners[t])||void 0===i||i.delete(e)}once(t,e){return this.on(t,e,{once:!0})}unAll(){this.listeners={}}emit(t,...e){this.listeners[t]&&this.listeners[t].forEach((t=>t(...e)))}}const i={decode:function(e,i){return t(this,void 0,void 0,(function*(){const t=new AudioContext({sampleRate:i});return t.decodeAudioData(e).finally((()=>t.close()))}))},createBuffer:function(t,e){return\"number\"==typeof t[0]&&(t=[t]),function(t){const e=t[0];if(e.some((t=>t>1||t<-1))){const i=e.length;let s=0;for(let t=0;t<i;t++){const i=Math.abs(e[t]);i>s&&(s=i)}for(const e of t)for(let t=0;t<i;t++)e[t]/=s}}(t),{duration:e,length:t[0].length,sampleRate:t[0].length/e,numberOfChannels:t.length,getChannelData:e=>null==t?void 0:t[e],copyFromChannel:AudioBuffer.prototype.copyFromChannel,copyToChannel:AudioBuffer.prototype.copyToChannel}}};function s(t,e){const i=e.xmlns?document.createElementNS(e.xmlns,t):document.createElement(t);for(const[t,n]of Object.entries(e))if(\"children\"===t)for(const[t,n]of Object.entries(e))\"string\"==typeof n?i.appendChild(document.createTextNode(n)):i.appendChild(s(t,n));else\"style\"===t?Object.assign(i.style,n):\"textContent\"===t?i.textContent=n:i.setAttribute(t,n.toString());return i}function n(t,e,i){const n=s(t,e||{});return null==i||i.appendChild(n),n}var r=Object.freeze({__proto__:null,createElement:n,default:n});const o={fetchBlob:function(e,i,s){return t(this,void 0,void 0,(function*(){const n=yield fetch(e,s);if(n.status>=400)throw new Error(`Failed to fetch ${e}: ${n.status} (${n.statusText})`);return function(e,i){t(this,void 0,void 0,(function*(){if(!e.body||!e.headers)return;const s=e.body.getReader(),n=Number(e.headers.get(\"Content-Length\"))||0;let r=0;const o=e=>t(this,void 0,void 0,(function*(){r+=(null==e?void 0:e.length)||0;const t=Math.round(r/n*100);i(t)})),a=()=>t(this,void 0,void 0,(function*(){let t;try{t=yield s.read()}catch(t){return}t.done||(o(t.value),yield a())}));a()}))}(n.clone(),i),n.blob()}))}};class a extends e{constructor(t){super(),this.isExternalMedia=!1,t.media?(this.media=t.media,this.isExternalMedia=!0):this.media=document.createElement(\"audio\"),t.mediaControls&&(this.media.controls=!0),t.autoplay&&(this.media.autoplay=!0),null!=t.playbackRate&&this.onMediaEvent(\"canplay\",(()=>{null!=t.playbackRate&&(this.media.playbackRate=t.playbackRate)}),{once:!0})}onMediaEvent(t,e,i){return this.media.addEventListener(t,e,i),()=>this.media.removeEventListener(t,e,i)}getSrc(){return this.media.currentSrc||this.media.src||\"\"}revokeSrc(){const t=this.getSrc();t.startsWith(\"blob:\")&&URL.revokeObjectURL(t)}canPlayType(t){return\"\"!==this.media.canPlayType(t)}setSrc(t,e){const i=this.getSrc();if(t&&i===t)return;this.revokeSrc();const s=e instanceof Blob&&(this.canPlayType(e.type)||!t)?URL.createObjectURL(e):t;try{this.media.src=s}catch(e){this.media.src=t}}destroy(){this.media.pause(),this.isExternalMedia||(this.media.remove(),this.revokeSrc(),this.media.src=\"\",this.media.load())}setMediaElement(t){this.media=t}play(){return t(this,void 0,void 0,(function*(){return this.media.play()}))}pause(){this.media.pause()}isPlaying(){return!this.media.paused&&!this.media.ended}setTime(t){this.media.currentTime=t}getDuration(){return this.media.duration}getCurrentTime(){return this.media.currentTime}getVolume(){return this.media.volume}setVolume(t){this.media.volume=t}getMuted(){return this.media.muted}setMuted(t){this.media.muted=t}getPlaybackRate(){return this.media.playbackRate}isSeeking(){return this.media.seeking}setPlaybackRate(t,e){null!=e&&(this.media.preservesPitch=e),this.media.playbackRate=t}getMediaElement(){return this.media}setSinkId(t){return this.media.setSinkId(t)}}class h extends e{constructor(t,e){super(),this.timeouts=[],this.isScrollable=!1,this.audioData=null,this.resizeObserver=null,this.lastContainerWidth=0,this.isDragging=!1,this.subscriptions=[],this.subscriptions=[],this.options=t;const i=this.parentFromOptionsContainer(t.container);this.parent=i;const[s,n]=this.initHtml();i.appendChild(s),this.container=s,this.scrollContainer=n.querySelector(\".scroll\"),this.wrapper=n.querySelector(\".wrapper\"),this.canvasWrapper=n.querySelector(\".canvases\"),this.progressWrapper=n.querySelector(\".progress\"),this.cursor=n.querySelector(\".cursor\"),e&&n.appendChild(e),this.initEvents()}parentFromOptionsContainer(t){let e;if(\"string\"==typeof t?e=document.querySelector(t):t instanceof HTMLElement&&(e=t),!e)throw new Error(\"Container not found\");return e}initEvents(){const t=t=>{const e=this.wrapper.getBoundingClientRect(),i=t.clientX-e.left,s=t.clientY-e.top;return[i/e.width,s/e.height]};if(this.wrapper.addEventListener(\"click\",(e=>{const[i,s]=t(e);this.emit(\"click\",i,s)})),this.wrapper.addEventListener(\"dblclick\",(e=>{const[i,s]=t(e);this.emit(\"dblclick\",i,s)})),!0!==this.options.dragToSeek&&\"object\"!=typeof this.options.dragToSeek||this.initDrag(),this.scrollContainer.addEventListener(\"scroll\",(()=>{const{scrollLeft:t,scrollWidth:e,clientWidth:i}=this.scrollContainer,s=t/e,n=(t+i)/e;this.emit(\"scroll\",s,n,t,t+i)})),\"function\"==typeof ResizeObserver){const t=this.createDelay(100);this.resizeObserver=new ResizeObserver((()=>{t().then((()=>this.onContainerResize())).catch((()=>{}))})),this.resizeObserver.observe(this.scrollContainer)}}onContainerResize(){const t=this.parent.clientWidth;t===this.lastContainerWidth&&\"auto\"!==this.options.height||(this.lastContainerWidth=t,this.reRender())}initDrag(){this.subscriptions.push(function(t,e,i,s,n=3,r=0,o=100){if(!t)return()=>{};const a=matchMedia(\"(pointer: coarse)\").matches;let h=()=>{};const l=l=>{if(l.button!==r)return;l.preventDefault(),l.stopPropagation();let d=l.clientX,c=l.clientY,u=!1;const p=Date.now(),m=s=>{if(s.preventDefault(),s.stopPropagation(),a&&Date.now()-p<o)return;const r=s.clientX,h=s.clientY,l=r-d,m=h-c;if(u||Math.abs(l)>n||Math.abs(m)>n){const s=t.getBoundingClientRect(),{left:n,top:o}=s;u||(null==i||i(d-n,c-o),u=!0),e(l,m,r-n,h-o),d=r,c=h}},g=e=>{if(u){const i=e.clientX,n=e.clientY,r=t.getBoundingClientRect(),{left:o,top:a}=r;null==s||s(i-o,n-a)}h()},f=t=>{t.relatedTarget&&t.relatedTarget!==document.documentElement||g(t)},v=t=>{u&&(t.stopPropagation(),t.preventDefault())},b=t=>{u&&t.preventDefault()};document.addEventListener(\"pointermove\",m),document.addEventListener(\"pointerup\",g),document.addEventListener(\"pointerout\",f),document.addEventListener(\"pointercancel\",f),document.addEventListener(\"touchmove\",b,{passive:!1}),document.addEventListener(\"click\",v,{capture:!0}),h=()=>{document.removeEventListener(\"pointermove\",m),document.removeEventListener(\"pointerup\",g),document.removeEventListener(\"pointerout\",f),document.removeEventListener(\"pointercancel\",f),document.removeEventListener(\"touchmove\",b),setTimeout((()=>{document.removeEventListener(\"click\",v,{capture:!0})}),10)}};return t.addEventListener(\"pointerdown\",l),()=>{h(),t.removeEventListener(\"pointerdown\",l)}}(this.wrapper,((t,e,i)=>{this.emit(\"drag\",Math.max(0,Math.min(1,i/this.wrapper.getBoundingClientRect().width)))}),(t=>{this.isDragging=!0,this.emit(\"dragstart\",Math.max(0,Math.min(1,t/this.wrapper.getBoundingClientRect().width)))}),(t=>{this.isDragging=!1,this.emit(\"dragend\",Math.max(0,Math.min(1,t/this.wrapper.getBoundingClientRect().width)))})))}getHeight(t,e){var i;const s=(null===(i=this.audioData)||void 0===i?void 0:i.numberOfChannels)||1;if(null==t)return 128;if(!isNaN(Number(t)))return Number(t);if(\"auto\"===t){const t=this.parent.clientHeight||128;return(null==e?void 0:e.every((t=>!t.overlay)))?t/s:t}return 128}initHtml(){const t=document.createElement(\"div\"),e=t.attachShadow({mode:\"open\"}),i=this.options.cspNonce&&\"string\"==typeof this.options.cspNonce?this.options.cspNonce.replace(/\"/g,\"\"):\"\";return e.innerHTML=`\\n <style${i?` nonce=\"${i}\"`:\"\"}>\\n :host {\\n user-select: none;\\n min-width: 1px;\\n }\\n :host audio {\\n display: block;\\n width: 100%;\\n }\\n :host .scroll {\\n overflow-x: auto;\\n overflow-y: hidden;\\n width: 100%;\\n position: relative;\\n }\\n :host .noScrollbar {\\n scrollbar-color: transparent;\\n scrollbar-width: none;\\n }\\n :host .noScrollbar::-webkit-scrollbar {\\n display: none;\\n -webkit-appearance: none;\\n }\\n :host .wrapper {\\n position: relative;\\n overflow: visible;\\n z-index: 2;\\n }\\n :host .canvases {\\n min-height: ${this.getHeight(this.options.height,this.options.splitChannels)}px;\\n }\\n :host .canvases > div {\\n position: relative;\\n }\\n :host canvas {\\n display: block;\\n position: absolute;\\n top: 0;\\n image-rendering: pixelated;\\n }\\n :host .progress {\\n pointer-events: none;\\n position: absolute;\\n z-index: 2;\\n top: 0;\\n left: 0;\\n width: 0;\\n height: 100%;\\n overflow: hidden;\\n }\\n :host .progress > div {\\n position: relative;\\n }\\n :host .cursor {\\n pointer-events: none;\\n position: absolute;\\n z-index: 5;\\n top: 0;\\n left: 0;\\n height: 100%;\\n border-radius: 2px;\\n }\\n </style>\\n\\n <div class=\"scroll\" part=\"scroll\">\\n <div class=\"wrapper\" part=\"wrapper\">\\n <div class=\"canvases\" part=\"canvases\"></div>\\n <div class=\"progress\" part=\"progress\"></div>\\n <div class=\"cursor\" part=\"cursor\"></div>\\n </div>\\n </div>\\n `,[t,e]}setOptions(t){if(this.options.container!==t.container){const e=this.parentFromOptionsContainer(t.container);e.appendChild(this.container),this.parent=e}!0!==t.dragToSeek&&\"object\"!=typeof this.options.dragToSeek||this.initDrag(),this.options=t,this.reRender()}getWrapper(){return this.wrapper}getWidth(){return this.scrollContainer.clientWidth}getScroll(){return this.scrollContainer.scrollLeft}setScroll(t){this.scrollContainer.scrollLeft=t}setScrollPercentage(t){const{scrollWidth:e}=this.scrollContainer,i=e*t;this.setScroll(i)}destroy(){var t,e;this.subscriptions.forEach((t=>t())),this.container.remove(),null===(t=this.resizeObserver)||void 0===t||t.disconnect(),null===(e=this.unsubscribeOnScroll)||void 0===e||e.call(this)}createDelay(t=10){let e,i;const s=()=>{e&&clearTimeout(e),i&&i()};return this.timeouts.push(s),()=>new Promise(((n,r)=>{s(),i=r,e=setTimeout((()=>{e=void 0,i=void 0,n()}),t)}))}convertColorValues(t){if(!Array.isArray(t))return t||\"\";if(t.length<2)return t[0]||\"\";const e=document.createElement(\"canvas\"),i=e.getContext(\"2d\"),s=e.height*(window.devicePixelRatio||1),n=i.createLinearGradient(0,0,0,s),r=1/(t.length-1);return t.forEach(((t,e)=>{const i=e*r;n.addColorStop(i,t)})),n}getPixelRatio(){return Math.max(1,window.devicePixelRatio||1)}renderBarWaveform(t,e,i,s){const n=t[0],r=t[1]||t[0],o=n.length,{width:a,height:h}=i.canvas,l=h/2,d=this.getPixelRatio(),c=e.barWidth?e.barWidth*d:1,u=e.barGap?e.barGap*d:e.barWidth?c/2:0,p=e.barRadius||0,m=a/(c+u)/o,g=p&&\"roundRect\"in i?\"roundRect\":\"rect\";i.beginPath();let f=0,v=0,b=0;for(let t=0;t<=o;t++){const o=Math.round(t*m);if(o>f){const t=Math.round(v*l*s),n=t+Math.round(b*l*s)||1;let r=l-t;\"top\"===e.barAlign?r=0:\"bottom\"===e.barAlign&&(r=h-n),i[g](f*(c+u),r,c,n,p),f=o,v=0,b=0}const a=Math.abs(n[t]||0),d=Math.abs(r[t]||0);a>v&&(v=a),d>b&&(b=d)}i.fill(),i.closePath()}renderLineWaveform(t,e,i,s){const n=e=>{const n=t[e]||t[0],r=n.length,{height:o}=i.canvas,a=o/2,h=i.canvas.width/r;i.moveTo(0,a);let l=0,d=0;for(let t=0;t<=r;t++){const r=Math.round(t*h);if(r>l){const t=a+(Math.round(d*a*s)||1)*(0===e?-1:1);i.lineTo(l,t),l=r,d=0}const o=Math.abs(n[t]||0);o>d&&(d=o)}i.lineTo(l,a)};i.beginPath(),n(0),n(1),i.fill(),i.closePath()}renderWaveform(t,e,i){if(i.fillStyle=this.convertColorValues(e.waveColor),e.renderFunction)return void e.renderFunction(t,i);let s=e.barHeight||1;if(e.normalize){const e=Array.from(t[0]).reduce(((t,e)=>Math.max(t,Math.abs(e))),0);s=e?1/e:1}e.barWidth||e.barGap||e.barAlign?this.renderBarWaveform(t,e,i,s):this.renderLineWaveform(t,e,i,s)}renderSingleCanvas(t,e,i,s,n,r,o){const a=this.getPixelRatio(),h=document.createElement(\"canvas\");h.width=Math.round(i*a),h.height=Math.round(s*a),h.style.width=`${i}px`,h.style.height=`${s}px`,h.style.left=`${Math.round(n)}px`,r.appendChild(h);const l=h.getContext(\"2d\");if(this.renderWaveform(t,e,l),h.width>0&&h.height>0){const t=h.cloneNode(),i=t.getContext(\"2d\");i.drawImage(h,0,0),i.globalCompositeOperation=\"source-in\",i.fillStyle=this.convertColorValues(e.progressColor),i.fillRect(0,0,h.width,h.height),o.appendChild(t)}}renderMultiCanvas(t,e,i,s,n,r){const o=this.getPixelRatio(),{clientWidth:a}=this.scrollContainer,l=i/o;let d=Math.min(h.MAX_CANVAS_WIDTH,a,l),c={};if(e.barWidth||e.barGap){const t=e.barWidth||.5,i=t+(e.barGap||t/2);d%i!=0&&(d=Math.floor(d/i)*i)}const u=i=>{if(i<0||i>=p)return;if(c[i])return;c[i]=!0;const o=i*d,a=Math.min(l-o,d);if(a<=0)return;const h=t.map((t=>{const e=Math.floor(o/l*t.length),i=Math.floor((o+a)/l*t.length);return t.slice(e,i)}));this.renderSingleCanvas(h,e,a,s,o,n,r)},p=Math.ceil(l/d);if(!this.isScrollable){for(let t=0;t<p;t++)u(t);return}const m=this.scrollContainer.scrollLeft/l,g=Math.floor(m*p);u(g-1),u(g),u(g+1),p>1&&(this.unsubscribeOnScroll=this.on(\"scroll\",(()=>{const{scrollLeft:t}=this.scrollContainer,e=Math.floor(t/l*p);Object.keys(c).length>h.MAX_NODES&&(n.innerHTML=\"\",r.innerHTML=\"\",c={}),u(e-1),u(e),u(e+1)})))}renderChannel(t,e,i,s){var{overlay:n}=e,r=function(t,e){var i={};for(var s in t)Object.prototype.hasOwnProperty.call(t,s)&&e.indexOf(s)<0&&(i[s]=t[s]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var n=0;for(s=Object.getOwnPropertySymbols(t);n<s.length;n++)e.indexOf(s[n])<0&&Object.prototype.propertyIsEnumerable.call(t,s[n])&&(i[s[n]]=t[s[n]])}return i}(e,[\"overlay\"]);const o=document.createElement(\"div\"),a=this.getHeight(r.height,r.splitChannels);o.style.height=`${a}px`,n&&s>0&&(o.style.marginTop=`-${a}px`),this.canvasWrapper.style.minHeight=`${a}px`,this.canvasWrapper.appendChild(o);const h=o.cloneNode();this.progressWrapper.appendChild(h),this.renderMultiCanvas(t,r,i,a,o,h)}render(e){return t(this,void 0,void 0,(function*(){var t;this.timeouts.forEach((t=>t())),this.timeouts=[],this.canvasWrapper.innerHTML=\"\",this.progressWrapper.innerHTML=\"\",null!=this.options.width&&(this.scrollContainer.style.width=\"number\"==typeof this.options.width?`${this.options.width}px`:this.options.width);const i=this.getPixelRatio(),s=this.scrollContainer.clientWidth,n=Math.ceil(e.duration*(this.options.minPxPerSec||0));this.isScrollable=n>s;const r=this.options.fillParent&&!this.isScrollable,o=(r?s:n)*i;if(this.wrapper.style.width=r?\"100%\":`${n}px`,this.scrollContainer.style.overflowX=this.isScrollable?\"auto\":\"hidden\",this.scrollContainer.classList.toggle(\"noScrollbar\",!!this.options.hideScrollbar),this.cursor.style.backgroundColor=`${this.options.cursorColor||this.options.progressColor}`,this.cursor.style.width=`${this.options.cursorWidth}px`,this.audioData=e,this.emit(\"render\"),this.options.splitChannels)for(let i=0;i<e.numberOfChannels;i++){const s=Object.assign(Object.assign({},this.options),null===(t=this.options.splitChannels)||void 0===t?void 0:t[i]);this.renderChannel([e.getChannelData(i)],s,o,i)}else{const t=[e.getChannelData(0)];e.numberOfChannels>1&&t.push(e.getChannelData(1)),this.renderChannel(t,this.options,o,0)}Promise.resolve().then((()=>this.emit(\"rendered\")))}))}reRender(){var t;if(null===(t=this.unsubscribeOnScroll)||void 0===t||t.call(this),delete this.unsubscribeOnScroll,!this.audioData)return;const{scrollWidth:e}=this.scrollContainer,{right:i}=this.progressWrapper.getBoundingClientRect();if(this.render(this.audioData),this.isScrollable&&e!==this.scrollContainer.scrollWidth){const{right:t}=this.progressWrapper.getBoundingClientRect();let e=t-i;e*=2,e=e<0?Math.floor(e):Math.ceil(e),e/=2,this.scrollContainer.scrollLeft+=e}}zoom(t){this.options.minPxPerSec=t,this.reRender()}scrollIntoView(t,e=!1){const{scrollLeft:i,scrollWidth:s,clientWidth:n}=this.scrollContainer,r=t*s,o=i,a=i+n,h=n/2;if(this.isDragging){const t=30;r+t>a?this.scrollContainer.scrollLeft+=t:r-t<o&&(this.scrollContainer.scrollLeft-=t)}else{(r<o||r>a)&&(this.scrollContainer.scrollLeft=r-(this.options.autoCenter?h:0));const t=r-i-h;e&&this.options.autoCenter&&t>0&&(this.scrollContainer.scrollLeft+=Math.min(t,10))}{const t=this.scrollContainer.scrollLeft,e=t/s,i=(t+n)/s;this.emit(\"scroll\",e,i,t,t+n)}}renderProgress(t,e){if(isNaN(t))return;const i=100*t;this.canvasWrapper.style.clipPath=`polygon(${i}% 0, 100% 0, 100% 100%, ${i}% 100%)`,this.progressWrapper.style.width=`${i}%`,this.cursor.style.left=`${i}%`,this.cursor.style.transform=`translateX(-${100===Math.round(i)?this.options.cursorWidth:0}px)`,this.isScrollable&&this.options.autoScroll&&this.scrollIntoView(t,e)}exportImage(e,i,s){return t(this,void 0,void 0,(function*(){const t=this.canvasWrapper.querySelectorAll(\"canvas\");if(!t.length)throw new Error(\"No waveform data\");if(\"dataURL\"===s){const s=Array.from(t).map((t=>t.toDataURL(e,i)));return Promise.resolve(s)}return Promise.all(Array.from(t).map((t=>new Promise(((s,n)=>{t.toBlob((t=>{t?s(t):n(new Error(\"Could not export image\"))}),e,i)})))))}))}}h.MAX_CANVAS_WIDTH=8e3,h.MAX_NODES=10;class l extends e{constructor(){super(...arguments),this.unsubscribe=()=>{}}start(){this.unsubscribe=this.on(\"tick\",(()=>{requestAnimationFrame((()=>{this.emit(\"tick\")}))})),this.emit(\"tick\")}stop(){this.unsubscribe()}destroy(){this.unsubscribe()}}class d extends e{constructor(t=new AudioContext){super(),this.bufferNode=null,this.playStartTime=0,this.playedDuration=0,this._muted=!1,this._playbackRate=1,this._duration=void 0,this.buffer=null,this.currentSrc=\"\",this.paused=!0,this.crossOrigin=null,this.seeking=!1,this.autoplay=!1,this.addEventListener=this.on,this.removeEventListener=this.un,this.audioContext=t,this.gainNode=this.audioContext.createGain(),this.gainNode.connect(this.audioContext.destination)}load(){return t(this,void 0,void 0,(function*(){}))}get src(){return this.currentSrc}set src(t){if(this.currentSrc=t,this._duration=void 0,!t)return this.buffer=null,void this.emit(\"emptied\");fetch(t).then((e=>{if(e.status>=400)throw new Error(`Failed to fetch ${t}: ${e.status} (${e.statusText})`);return e.arrayBuffer()})).then((e=>this.currentSrc!==t?null:this.audioContext.decodeAudioData(e))).then((e=>{this.currentSrc===t&&(this.buffer=e,this.emit(\"loadedmetadata\"),this.emit(\"canplay\"),this.autoplay&&this.play())}))}_play(){var t;if(!this.paused)return;this.paused=!1,null===(t=this.bufferNode)||void 0===t||t.disconnect(),this.bufferNode=this.audioContext.createBufferSource(),this.buffer&&(this.bufferNode.buffer=this.buffer),this.bufferNode.playbackRate.value=this._playbackRate,this.bufferNode.connect(this.gainNode);let e=this.playedDuration*this._playbackRate;e>=this.duration&&(e=0,this.playedDuration=0),this.bufferNode.start(this.audioContext.currentTime,e),this.playStartTime=this.audioContext.currentTime,this.bufferNode.onended=()=>{this.currentTime>=this.duration&&(this.pause(),this.emit(\"ended\"))}}_pause(){var t;this.paused=!0,null===(t=this.bufferNode)||void 0===t||t.stop(),this.playedDuration+=this.audioContext.currentTime-this.playStartTime}play(){return t(this,void 0,void 0,(function*(){this.paused&&(this._play(),this.emit(\"play\"))}))}pause(){this.paused||(this._pause(),this.emit(\"pause\"))}stopAt(t){var e,i;const s=t-this.currentTime;null===(e=this.bufferNode)||void 0===e||e.stop(this.audioContext.currentTime+s),null===(i=this.bufferNode)||void 0===i||i.addEventListener(\"ended\",(()=>{this.bufferNode=null,this.pause()}),{once:!0})}setSinkId(e){return t(this,void 0,void 0,(function*(){return this.audioContext.setSinkId(e)}))}get playbackRate(){return this._playbackRate}set playbackRate(t){this._playbackRate=t,this.bufferNode&&(this.bufferNode.playbackRate.value=t)}get currentTime(){return(this.paused?this.playedDuration:this.playedDuration+(this.audioContext.currentTime-this.playStartTime))*this._playbackRate}set currentTime(t){const e=!this.paused;e&&this._pause(),this.playedDuration=t/this._playbackRate,e&&this._play(),this.emit(\"seeking\"),this.emit(\"timeupdate\")}get duration(){var t,e;return null!==(t=this._duration)&&void 0!==t?t:(null===(e=this.buffer)||void 0===e?void 0:e.duration)||0}set duration(t){this._duration=t}get volume(){return this.gainNode.gain.value}set volume(t){this.gainNode.gain.value=t,this.emit(\"volumechange\")}get muted(){return this._muted}set muted(t){this._muted!==t&&(this._muted=t,this._muted?this.gainNode.disconnect():this.gainNode.connect(this.audioContext.destination))}canPlayType(t){return/^(audio|video)\\//.test(t)}getGainNode(){return this.gainNode}getChannelData(){const t=[];if(!this.buffer)return t;const e=this.buffer.numberOfChannels;for(let i=0;i<e;i++)t.push(this.buffer.getChannelData(i));return t}}const c={waveColor:\"#999\",progressColor:\"#555\",cursorWidth:1,minPxPerSec:0,fillParent:!0,interact:!0,dragToSeek:!1,autoScroll:!0,autoCenter:!0,sampleRate:8e3};class u extends a{static create(t){return new u(t)}constructor(t){const e=t.media||(\"WebAudio\"===t.backend?new d:void 0);super({media:e,mediaControls:t.mediaControls,autoplay:t.autoplay,playbackRate:t.audioRate}),this.plugins=[],this.decodedData=null,this.subscriptions=[],this.mediaSubscriptions=[],this.abortController=null,this.options=Object.assign({},c,t),this.timer=new l;const i=e?void 0:this.getMediaElement();this.renderer=new h(this.options,i),this.initPlayerEvents(),this.initRendererEvents(),this.initTimerEvents(),this.initPlugins();const s=this.options.url||this.getSrc()||\"\";Promise.resolve().then((()=>{this.emit(\"init\");const{peaks:t,duration:e}=this.options;(s||t&&e)&&this.load(s,t,e).catch((()=>null))}))}updateProgress(t=this.getCurrentTime()){return this.renderer.renderProgress(t/this.getDuration(),this.isPlaying()),t}initTimerEvents(){this.subscriptions.push(this.timer.on(\"tick\",(()=>{if(!this.isSeeking()){const t=this.updateProgress();this.emit(\"timeupdate\",t),this.emit(\"audioprocess\",t)}})))}initPlayerEvents(){this.isPlaying()&&(this.emit(\"play\"),this.timer.start()),this.mediaSubscriptions.push(this.onMediaEvent(\"timeupdate\",(()=>{const t=this.updateProgress();this.emit(\"timeupdate\",t)})),this.onMediaEvent(\"play\",(()=>{this.emit(\"play\"),this.timer.start()})),this.onMediaEvent(\"pause\",(()=>{this.emit(\"pause\"),this.timer.stop()})),this.onMediaEvent(\"emptied\",(()=>{this.timer.stop()})),this.onMediaEvent(\"ended\",(()=>{this.emit(\"finish\")})),this.onMediaEvent(\"seeking\",(()=>{this.emit(\"seeking\",this.getCurrentTime())})),this.onMediaEvent(\"error\",(t=>{this.emit(\"error\",t.error)})))}initRendererEvents(){this.subscriptions.push(this.renderer.on(\"click\",((t,e)=>{this.options.interact&&(this.seekTo(t),this.emit(\"interaction\",t*this.getDuration()),this.emit(\"click\",t,e))})),this.renderer.on(\"dblclick\",((t,e)=>{this.emit(\"dblclick\",t,e)})),this.renderer.on(\"scroll\",((t,e,i,s)=>{const n=this.getDuration();this.emit(\"scroll\",t*n,e*n,i,s)})),this.renderer.on(\"render\",(()=>{this.emit(\"redraw\")})),this.renderer.on(\"rendered\",(()=>{this.emit(\"redrawcomplete\")})),this.renderer.on(\"dragstart\",(t=>{this.emit(\"dragstart\",t)})),this.renderer.on(\"dragend\",(t=>{this.emit(\"dragend\",t)})));{let t;this.subscriptions.push(this.renderer.on(\"drag\",(e=>{if(!this.options.interact)return;let i;this.renderer.renderProgress(e),clearTimeout(t),this.isPlaying()?i=0:!0===this.options.dragToSeek?i=200:\"object\"==typeof this.options.dragToSeek&&void 0!==this.options.dragToSeek&&(i=this.options.dragToSeek.debounceTime),t=setTimeout((()=>{this.seekTo(e)}),i),this.emit(\"interaction\",e*this.getDuration()),this.emit(\"drag\",e)})))}}initPlugins(){var t;(null===(t=this.options.plugins)||void 0===t?void 0:t.length)&&this.options.plugins.forEach((t=>{this.registerPlugin(t)}))}unsubscribePlayerEvents(){this.mediaSubscriptions.forEach((t=>t())),this.mediaSubscriptions=[]}setOptions(t){this.options=Object.assign({},this.options,t),this.renderer.setOptions(this.options),t.audioRate&&this.setPlaybackRate(t.audioRate),null!=t.mediaControls&&(this.getMediaElement().controls=t.mediaControls)}registerPlugin(t){return t._init(this),this.plugins.push(t),this.subscriptions.push(t.once(\"destroy\",(()=>{this.plugins=this.plugins.filter((e=>e!==t))}))),t}getWrapper(){return this.renderer.getWrapper()}getWidth(){return this.renderer.getWidth()}getScroll(){return this.renderer.getScroll()}setScroll(t){return this.renderer.setScroll(t)}setScrollTime(t){const e=t/this.getDuration();this.renderer.setScrollPercentage(e)}getActivePlugins(){return this.plugins}loadAudio(e,s,n,r){return t(this,void 0,void 0,(function*(){var t;if(this.emit(\"load\",e),!this.options.media&&this.isPlaying()&&this.pause(),this.decodedData=null,!s&&!n){const i=this.options.fetchParams||{};window.AbortController&&!i.signal&&(this.abortController=new AbortController,i.signal=null===(t=this.abortController)||void 0===t?void 0:t.signal);const n=t=>this.emit(\"loading\",t);s=yield o.fetchBlob(e,n,i)}this.setSrc(e,s);const a=yield new Promise((t=>{const e=r||this.getDuration();e?t(e):this.mediaSubscriptions.push(this.onMediaEvent(\"loadedmetadata\",(()=>t(this.getDuration())),{once:!0}))}));if(!e&&!s){const t=this.getMediaElement();t instanceof d&&(t.duration=a)}if(n)this.decodedData=i.createBuffer(n,a||0);else if(s){const t=yield s.arrayBuffer();this.decodedData=yield i.decode(t,this.options.sampleRate)}this.decodedData&&(this.emit(\"decode\",this.getDuration()),this.renderer.render(this.decodedData)),this.emit(\"ready\",this.getDuration())}))}load(e,i,s){return t(this,void 0,void 0,(function*(){try{return yield this.loadAudio(e,void 0,i,s)}catch(t){throw this.emit(\"error\",t),t}}))}loadBlob(e,i,s){return t(this,void 0,void 0,(function*(){try{return yield this.loadAudio(\"\",e,i,s)}catch(t){throw this.emit(\"error\",t),t}}))}zoom(t){if(!this.decodedData)throw new Error(\"No audio loaded\");this.renderer.zoom(t),this.emit(\"zoom\",t)}getDecodedData(){return this.decodedData}exportPeaks({channels:t=2,maxLength:e=8e3,precision:i=1e4}={}){if(!this.decodedData)throw new Error(\"The audio has not been decoded yet\");const s=Math.min(t,this.decodedData.numberOfChannels),n=[];for(let t=0;t<s;t++){const s=this.decodedData.getChannelData(t),r=[],o=s.length/e;for(let t=0;t<e;t++){const e=s.slice(Math.floor(t*o),Math.ceil((t+1)*o));let n=0;for(let t=0;t<e.length;t++){const i=e[t];Math.abs(i)>Math.abs(n)&&(n=i)}r.push(Math.round(n*i)/i)}n.push(r)}return n}getDuration(){let t=super.getDuration()||0;return 0!==t&&t!==1/0||!this.decodedData||(t=this.decodedData.duration),t}toggleInteraction(t){this.options.interact=t}setTime(t){super.setTime(t),this.updateProgress(t),this.emit(\"timeupdate\",t)}seekTo(t){const e=this.getDuration()*t;this.setTime(e)}playPause(){return t(this,void 0,void 0,(function*(){return this.isPlaying()?this.pause():this.play()}))}stop(){this.pause(),this.setTime(0)}skip(t){this.setTime(this.getCurrentTime()+t)}empty(){this.load(\"\",[[0]],.001)}setMediaElement(t){this.unsubscribePlayerEvents(),super.setMediaElement(t),this.initPlayerEvents()}exportImage(){return t(this,arguments,void 0,(function*(t=\"image/png\",e=1,i=\"dataURL\"){return this.renderer.exportImage(t,e,i)}))}destroy(){var t;this.emit(\"destroy\"),null===(t=this.abortController)||void 0===t||t.abort(),this.plugins.forEach((t=>t.destroy())),this.subscriptions.forEach((t=>t())),this.unsubscribePlayerEvents(),this.timer.destroy(),this.renderer.destroy(),super.destroy()}}u.BasePlugin=class extends e{constructor(t){super(),this.subscriptions=[],this.options=t}onInit(){}_init(t){this.wavesurfer=t,this.onInit()}destroy(){this.emit(\"destroy\"),this.subscriptions.forEach((t=>t()))}},u.dom=r;export{u as default};\n","function t(t,i,e,s){return new(e||(e=Promise))((function(o,r){function n(t){try{d(s.next(t))}catch(t){r(t)}}function a(t){try{d(s.throw(t))}catch(t){r(t)}}function d(t){var i;t.done?o(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(n,a)}d((s=s.apply(t,i||[])).next())}))}\"function\"==typeof SuppressedError&&SuppressedError;class i{constructor(){this.listeners={}}on(t,i,e){if(this.listeners[t]||(this.listeners[t]=new Set),this.listeners[t].add(i),null==e?void 0:e.once){const e=()=>{this.un(t,e),this.un(t,i)};return this.on(t,e),e}return()=>this.un(t,i)}un(t,i){var e;null===(e=this.listeners[t])||void 0===e||e.delete(i)}once(t,i){return this.on(t,i,{once:!0})}unAll(){this.listeners={}}emit(t,...i){this.listeners[t]&&this.listeners[t].forEach((t=>t(...i)))}}class e extends i{constructor(t){super(),this.subscriptions=[],this.options=t}onInit(){}_init(t){this.wavesurfer=t,this.onInit()}destroy(){this.emit(\"destroy\"),this.subscriptions.forEach((t=>t()))}}class s extends i{constructor(){super(...arguments),this.unsubscribe=()=>{}}start(){this.unsubscribe=this.on(\"tick\",(()=>{requestAnimationFrame((()=>{this.emit(\"tick\")}))})),this.emit(\"tick\")}stop(){this.unsubscribe()}destroy(){this.unsubscribe()}}const o=[\"audio/webm\",\"audio/wav\",\"audio/mpeg\",\"audio/mp4\",\"audio/mp3\"];class r extends e{constructor(t){var i,e,o,r,n,a;super(Object.assign(Object.assign({},t),{audioBitsPerSecond:null!==(i=t.audioBitsPerSecond)&&void 0!==i?i:128e3,scrollingWaveform:null!==(e=t.scrollingWaveform)&&void 0!==e&&e,scrollingWaveformWindow:null!==(o=t.scrollingWaveformWindow)&&void 0!==o?o:5,continuousWaveform:null!==(r=t.continuousWaveform)&&void 0!==r&&r,renderRecordedAudio:null===(n=t.renderRecordedAudio)||void 0===n||n,mediaRecorderTimeslice:null!==(a=t.mediaRecorderTimeslice)&&void 0!==a?a:void 0})),this.stream=null,this.mediaRecorder=null,this.dataWindow=null,this.isWaveformPaused=!1,this.lastStartTime=0,this.lastDuration=0,this.duration=0,this.timer=new s,this.subscriptions.push(this.timer.on(\"tick\",(()=>{const t=performance.now()-this.lastStartTime;this.duration=this.isPaused()?this.duration:this.lastDuration+t,this.emit(\"record-progress\",this.duration)})))}static create(t){return new r(t||{})}renderMicStream(t){var i;const e=new AudioContext,s=e.createMediaStreamSource(t),o=e.createAnalyser();s.connect(o),this.options.continuousWaveform&&(o.fftSize=32);const r=o.frequencyBinCount,n=new Float32Array(r);let a=0;this.wavesurfer&&(null!==(i=this.originalOptions)&&void 0!==i||(this.originalOptions=Object.assign({},this.wavesurfer.options)),this.wavesurfer.options.interact=!1,this.options.scrollingWaveform&&(this.wavesurfer.options.cursorWidth=0));const d=setInterval((()=>{var t,i,s,d;if(!this.isWaveformPaused){if(o.getFloatTimeDomainData(n),this.options.scrollingWaveform){const t=Math.floor((this.options.scrollingWaveformWindow||0)*e.sampleRate),i=Math.min(t,this.dataWindow?this.dataWindow.length+r:r),s=new Float32Array(t);if(this.dataWindow){const e=Math.max(0,t-this.dataWindow.length);s.set(this.dataWindow.slice(-i+r),e)}s.set(n,t-r),this.dataWindow=s}else if(this.options.continuousWaveform){if(!this.dataWindow){const e=this.options.continuousWaveformDuration?Math.round(100*this.options.continuousWaveformDuration):(null!==(i=null===(t=this.wavesurfer)||void 0===t?void 0:t.getWidth())&&void 0!==i?i:0)*window.devicePixelRatio;this.dataWindow=new Float32Array(e)}let e=0;for(let t=0;t<r;t++){const i=Math.abs(n[t]);i>e&&(e=i)}if(a+1>this.dataWindow.length){const t=new Float32Array(2*this.dataWindow.length);t.set(this.dataWindow,0),this.dataWindow=t}this.dataWindow[a]=e,a++}else this.dataWindow=n;if(this.wavesurfer){const t=(null!==(d=null===(s=this.dataWindow)||void 0===s?void 0:s.length)&&void 0!==d?d:0)/100;this.wavesurfer.load(\"\",[this.dataWindow],this.options.scrollingWaveform?this.options.scrollingWaveformWindow:t).then((()=>{this.wavesurfer&&this.options.continuousWaveform&&(this.wavesurfer.setTime(this.getDuration()/1e3),this.wavesurfer.options.minPxPerSec||this.wavesurfer.setOptions({minPxPerSec:this.wavesurfer.getWidth()/this.wavesurfer.getDuration()}))})).catch((t=>{console.error(\"Error rendering real-time recording data:\",t)}))}}}),10);return{onDestroy:()=>{clearInterval(d),null==s||s.disconnect(),null==e||e.close()},onEnd:()=>{this.isWaveformPaused=!0,clearInterval(d),this.stopMic()}}}startMic(i){return t(this,void 0,void 0,(function*(){let t;try{t=yield navigator.mediaDevices.getUserMedia({audio:!(null==i?void 0:i.deviceId)||{deviceId:i.deviceId}})}catch(t){throw new Error(\"Error accessing the microphone: \"+t.message)}const{onDestroy:e,onEnd:s}=this.renderMicStream(t);return this.subscriptions.push(this.once(\"destroy\",e)),this.subscriptions.push(this.once(\"record-end\",s)),this.stream=t,t}))}stopMic(){this.stream&&(this.stream.getTracks().forEach((t=>t.stop())),this.stream=null,this.mediaRecorder=null)}startRecording(i){return t(this,void 0,void 0,(function*(){const t=this.stream||(yield this.startMic(i));this.dataWindow=null;const e=this.mediaRecorder||new MediaRecorder(t,{mimeType:this.options.mimeType||o.find((t=>MediaRecorder.isTypeSupported(t))),audioBitsPerSecond:this.options.audioBitsPerSecond});this.mediaRecorder=e,this.stopRecording();const s=[];e.ondataavailable=t=>{t.data.size>0&&s.push(t.data),this.emit(\"record-data-available\",t.data)};const r=t=>{var i;const o=new Blob(s,{type:e.mimeType});this.emit(t,o),this.options.renderRecordedAudio&&(this.applyOriginalOptionsIfNeeded(),null===(i=this.wavesurfer)||void 0===i||i.load(URL.createObjectURL(o)))};e.onpause=()=>r(\"record-pause\"),e.onstop=()=>r(\"record-end\"),e.start(this.options.mediaRecorderTimeslice),this.lastStartTime=performance.now(),this.lastDuration=0,this.duration=0,this.isWaveformPaused=!1,this.timer.start(),this.emit(\"record-start\")}))}getDuration(){return this.duration}isRecording(){var t;return\"recording\"===(null===(t=this.mediaRecorder)||void 0===t?void 0:t.state)}isPaused(){var t;return\"paused\"===(null===(t=this.mediaRecorder)||void 0===t?void 0:t.state)}isActive(){var t;return\"inactive\"!==(null===(t=this.mediaRecorder)||void 0===t?void 0:t.state)}stopRecording(){var t;this.isActive()&&(null===(t=this.mediaRecorder)||void 0===t||t.stop(),this.timer.stop())}pauseRecording(){var t,i;this.isRecording()&&(this.isWaveformPaused=!0,null===(t=this.mediaRecorder)||void 0===t||t.requestData(),null===(i=this.mediaRecorder)||void 0===i||i.pause(),this.timer.stop(),this.lastDuration=this.duration)}resumeRecording(){var t;this.isPaused()&&(this.isWaveformPaused=!1,null===(t=this.mediaRecorder)||void 0===t||t.resume(),this.timer.start(),this.lastStartTime=performance.now(),this.emit(\"record-resume\"))}static getAvailableAudioDevices(){return t(this,void 0,void 0,(function*(){return navigator.mediaDevices.enumerateDevices().then((t=>t.filter((t=>\"audioinput\"===t.kind))))}))}destroy(){this.applyOriginalOptionsIfNeeded(),super.destroy(),this.stopRecording(),this.stopMic()}applyOriginalOptionsIfNeeded(){this.wavesurfer&&this.originalOptions&&(this.wavesurfer.setOptions(this.originalOptions),delete this.originalOptions)}}export{r as default};\n","var fa = {};\nfunction Xa(w) {\n return new Int8Array(w);\n}\nfunction ma(w) {\n return new Int16Array(w);\n}\nfunction ba(w) {\n return new Int32Array(w);\n}\nfunction ca(w) {\n return new Float32Array(w);\n}\nfunction Ya(w) {\n return new Float64Array(w);\n}\nfunction Sa(w) {\n if (w.length == 1)\n return ca(w[0]);\n var Z = w[0];\n w = w.slice(1);\n for (var X = [], z = 0; z < Z; z++)\n X.push(Sa(w));\n return X;\n}\nfunction da(w) {\n if (w.length == 1)\n return ba(w[0]);\n var Z = w[0];\n w = w.slice(1);\n for (var X = [], z = 0; z < Z; z++)\n X.push(da(w));\n return X;\n}\nfunction Aa(w) {\n if (w.length == 1)\n return ma(w[0]);\n var Z = w[0];\n w = w.slice(1);\n for (var X = [], z = 0; z < Z; z++)\n X.push(Aa(w));\n return X;\n}\nfunction Ra(w) {\n if (w.length == 1)\n return new Array(w[0]);\n var Z = w[0];\n w = w.slice(1);\n for (var X = [], z = 0; z < Z; z++)\n X.push(Ra(w));\n return X;\n}\nvar xa = {};\nxa.fill = function(w, Z, X, z) {\n if (arguments.length == 2)\n for (var u0 = 0; u0 < w.length; u0++)\n w[u0] = arguments[1];\n else\n for (var u0 = Z; u0 < X; u0++)\n w[u0] = z;\n};\nvar W1 = {};\nW1.arraycopy = function(w, Z, X, z, u0) {\n for (var W = Z + u0; Z < W; )\n X[z++] = w[Z++];\n};\nW1.out = {};\nW1.out.println = function(w) {\n console.log(w);\n};\nW1.out.printf = function() {\n console.log.apply(console, arguments);\n};\nvar se = {};\nse.SQRT2 = 1.4142135623730951;\nse.FAST_LOG10 = function(w) {\n return Math.log10(w);\n};\nse.FAST_LOG10_X = function(w, Z) {\n return Math.log10(w) * Z;\n};\nfunction B1(w) {\n this.ordinal = w;\n}\nB1.short_block_allowed = new B1(0);\nB1.short_block_coupled = new B1(1);\nB1.short_block_dispensed = new B1(2);\nB1.short_block_forced = new B1(3);\nvar Ma = {};\nMa.MAX_VALUE = 34028235e31;\nfunction u1(w) {\n this.ordinal = w;\n}\nu1.vbr_off = new u1(0);\nu1.vbr_mt = new u1(1);\nu1.vbr_rh = new u1(2);\nu1.vbr_abr = new u1(3);\nu1.vbr_mtrh = new u1(4);\nu1.vbr_default = u1.vbr_mtrh;\nvar qa = function(w) {\n}, Q0 = {\n System: W1,\n VbrMode: u1,\n Float: Ma,\n ShortBlock: B1,\n Util: se,\n Arrays: xa,\n new_array_n: Ra,\n new_byte: Xa,\n new_double: Ya,\n new_float: ca,\n new_float_n: Sa,\n new_int: ba,\n new_int_n: da,\n new_short: ma,\n new_short_n: Aa,\n assert: qa\n}, ce, De;\nfunction Da() {\n if (De)\n return ce;\n De = 1;\n var w = Q0, Z = w.System, X = w.Util, z = w.Arrays, u0 = w.new_float, W = t1();\n function Q() {\n var D = [\n -0.1482523854003001,\n 32.308141959636465,\n 296.40344946382766,\n 883.1344870032432,\n 11113.947376231741,\n 1057.2713659324597,\n 305.7402417275812,\n 30.825928907280012,\n /* 15 */\n 3.8533188138216365,\n 59.42900443849514,\n 709.5899960123345,\n 5281.91112291017,\n -5829.66483675846,\n -817.6293103748613,\n -76.91656988279972,\n -4.594269939176596,\n 0.9063471690191471,\n 0.1960342806591213,\n -0.15466694054279598,\n 34.324387823855965,\n 301.8067566458425,\n 817.599602898885,\n 11573.795901679885,\n 1181.2520595540152,\n 321.59731579894424,\n 31.232021761053772,\n /* 14 */\n 3.7107095756221318,\n 53.650946155329365,\n 684.167428119626,\n 5224.56624370173,\n -6366.391851890084,\n -908.9766368219582,\n -89.83068876699639,\n -5.411397422890401,\n 0.8206787908286602,\n 0.3901806440322567,\n -0.16070888947830023,\n 36.147034243915876,\n 304.11815768187864,\n 732.7429163887613,\n 11989.60988270091,\n 1300.012278487897,\n 335.28490093152146,\n 31.48816102859945,\n /* 13 */\n 3.373875931311736,\n 47.232241542899175,\n 652.7371796173471,\n 5132.414255594984,\n -6909.087078780055,\n -1001.9990371107289,\n -103.62185754286375,\n -6.104916304710272,\n 0.7416505462720353,\n 0.5805693545089249,\n -0.16636367662261495,\n 37.751650073343995,\n 303.01103387567713,\n 627.9747488785183,\n 12358.763425278165,\n 1412.2779918482834,\n 346.7496836825721,\n 31.598286663170416,\n /* 12 */\n 3.1598635433980946,\n 40.57878626349686,\n 616.1671130880391,\n 5007.833007176154,\n -7454.040671756168,\n -1095.7960341867115,\n -118.24411666465777,\n -6.818469345853504,\n 0.6681786379192989,\n 0.7653668647301797,\n -0.1716176790982088,\n 39.11551877123304,\n 298.3413246578966,\n 503.5259106886539,\n 12679.589408408976,\n 1516.5821921214542,\n 355.9850766329023,\n 31.395241710249053,\n /* 11 */\n 2.9164211881972335,\n 33.79716964664243,\n 574.8943997801362,\n 4853.234992253242,\n -7997.57021486075,\n -1189.7624067269965,\n -133.6444792601766,\n -7.7202770609839915,\n 0.5993769336819237,\n 0.9427934736519954,\n -0.17645823955292173,\n 40.21879108166477,\n 289.9982036694474,\n 359.3226160751053,\n 12950.259102786438,\n 1612.1013903507662,\n 362.85067106591504,\n 31.045922092242872,\n /* 10 */\n 2.822222032597987,\n 26.988862316190684,\n 529.8996541764288,\n 4671.371946949588,\n -8535.899136645805,\n -1282.5898586244496,\n -149.58553632943463,\n -8.643494270763135,\n 0.5345111359507916,\n 1.111140466039205,\n -0.36174739330527045,\n 41.04429910497807,\n 277.5463268268618,\n 195.6386023135583,\n 13169.43812144731,\n 1697.6433561479398,\n 367.40983966190305,\n 30.557037410382826,\n /* 9 */\n 2.531473372857427,\n 20.070154905927314,\n 481.50208566532336,\n 4464.970341588308,\n -9065.36882077239,\n -1373.62841526722,\n -166.1660487028118,\n -9.58289321133207,\n 0.4729647758913199,\n 1.268786568327291,\n -0.36970682634889585,\n 41.393213350082036,\n 261.2935935556502,\n 12.935476055240873,\n 13336.131683328815,\n 1772.508612059496,\n 369.76534388639965,\n 29.751323653701338,\n 2.4023193045459172,\n 13.304795348228817,\n 430.5615775526625,\n 4237.0568611071185,\n -9581.931701634761,\n -1461.6913552409758,\n -183.12733958476446,\n -10.718010163869403,\n 0.41421356237309503,\n /* tan(PI/8) */\n 1.414213562373095,\n -0.37677560326535325,\n 41.619486213528496,\n 241.05423794991074,\n -187.94665032361226,\n 13450.063605744153,\n 1836.153896465782,\n 369.4908799925761,\n 29.001847876923147,\n /* 7 */\n 2.0714759319987186,\n 6.779591200894186,\n 377.7767837205709,\n 3990.386575512536,\n -10081.709459700915,\n -1545.947424837898,\n -200.3762958015653,\n -11.864482073055006,\n 0.3578057213145241,\n 1.546020906725474,\n -0.3829366947518991,\n 41.1516456456653,\n 216.47684307105183,\n -406.1569483347166,\n 13511.136535077321,\n 1887.8076599260432,\n 367.3025214564151,\n 28.136213436723654,\n /* 6 */\n 1.913880671464418,\n 0.3829366947518991,\n 323.85365704338597,\n 3728.1472257487526,\n -10561.233882199509,\n -1625.2025997821418,\n -217.62525175416,\n -13.015432208941645,\n 0.3033466836073424,\n 1.66293922460509,\n -0.5822628872992417,\n 40.35639251440489,\n 188.20071124269245,\n -640.2706748618148,\n 13519.21490106562,\n 1927.6022433578062,\n 362.8197642637487,\n 26.968821921868447,\n /* 5 */\n 1.7463817695935329,\n -5.62650678237171,\n 269.3016715297017,\n 3453.386536448852,\n -11016.145278780888,\n -1698.6569643425091,\n -234.7658734267683,\n -14.16351421663124,\n 0.2504869601913055,\n 1.76384252869671,\n -0.5887180101749253,\n 39.23429103868072,\n 155.76096234403798,\n -889.2492977967378,\n 13475.470561874661,\n 1955.0535223723712,\n 356.4450994756727,\n 25.894952980042156,\n /* 4 */\n 1.5695032905781554,\n -11.181939564328772,\n 214.80884394039484,\n 3169.1640829158237,\n -11443.321309975563,\n -1765.1588461316153,\n -251.68908574481912,\n -15.49755935939164,\n 0.198912367379658,\n 1.847759065022573,\n -0.7912582233652842,\n 37.39369355329111,\n 119.699486012458,\n -1151.0956593239027,\n 13380.446257078214,\n 1970.3952110853447,\n 348.01959814116185,\n 24.731487364283044,\n /* 3 */\n 1.3850130831637748,\n -16.421408865300393,\n 161.05030052864092,\n 2878.3322807850063,\n -11838.991423510031,\n -1823.985884688674,\n -268.2854986386903,\n -16.81724543849939,\n 0.1483359875383474,\n 1.913880671464418,\n -0.7960642926861912,\n 35.2322109610459,\n 80.01928065061526,\n -1424.0212633405113,\n 13235.794061869668,\n 1973.804052543835,\n 337.9908651258184,\n 23.289159354463873,\n 1.3934255946442087,\n -21.099669467133474,\n 108.48348407242611,\n 2583.700758091299,\n -12199.726194855148,\n -1874.2780658979746,\n -284.2467154529415,\n -18.11369784385905,\n 0.09849140335716425,\n 1.961570560806461,\n -0.998795456205172,\n 32.56307803611191,\n 36.958364584370486,\n -1706.075448829146,\n 13043.287458812016,\n 1965.3831106103316,\n 326.43182772364605,\n 22.175018750622293,\n 1.198638339011324,\n -25.371248002043963,\n 57.53505923036915,\n 2288.41886619975,\n -12522.674544337233,\n -1914.8400385312243,\n -299.26241273417224,\n -19.37805630698734,\n 0.04912684976946725,\n 1.990369453344394,\n 0.035780907 * X.SQRT2 * 0.5 / 2384e-9,\n 0.017876148 * X.SQRT2 * 0.5 / 2384e-9,\n 3134727e-9 * X.SQRT2 * 0.5 / 2384e-9,\n 2457142e-9 * X.SQRT2 * 0.5 / 2384e-9,\n 971317e-9 * X.SQRT2 * 0.5 / 2384e-9,\n 218868e-9 * X.SQRT2 * 0.5 / 2384e-9,\n 101566e-9 * X.SQRT2 * 0.5 / 2384e-9,\n 13828e-9 * X.SQRT2 * 0.5 / 2384e-9,\n 12804.797818791945,\n 1945.5515939597317,\n 313.4244966442953,\n 20.801593959731544,\n 1995.1556208053692,\n 9.000838926174497,\n -29.20218120805369\n /* 2.384e-06/2.384e-06 */\n ], g = 12, f0 = 36, A = [\n [\n 2382191739347913e-28,\n 6423305872147834e-28,\n 9400849094049688e-28,\n 1122435026096556e-27,\n 1183840321267481e-27,\n 1122435026096556e-27,\n 940084909404969e-27,\n 6423305872147839e-28,\n 2382191739347918e-28,\n 5456116108943412e-27,\n 4878985199565852e-27,\n 4240448995017367e-27,\n 3559909094758252e-27,\n 2858043359288075e-27,\n 2156177623817898e-27,\n 1475637723558783e-27,\n 8371015190102974e-28,\n 2599706096327376e-28,\n -5456116108943412e-27,\n -4878985199565852e-27,\n -4240448995017367e-27,\n -3559909094758252e-27,\n -2858043359288076e-27,\n -2156177623817898e-27,\n -1475637723558783e-27,\n -8371015190102975e-28,\n -2599706096327376e-28,\n -2382191739347923e-28,\n -6423305872147843e-28,\n -9400849094049696e-28,\n -1122435026096556e-27,\n -1183840321267481e-27,\n -1122435026096556e-27,\n -9400849094049694e-28,\n -642330587214784e-27,\n -2382191739347918e-28\n ],\n [\n 2382191739347913e-28,\n 6423305872147834e-28,\n 9400849094049688e-28,\n 1122435026096556e-27,\n 1183840321267481e-27,\n 1122435026096556e-27,\n 9400849094049688e-28,\n 6423305872147841e-28,\n 2382191739347918e-28,\n 5456116108943413e-27,\n 4878985199565852e-27,\n 4240448995017367e-27,\n 3559909094758253e-27,\n 2858043359288075e-27,\n 2156177623817898e-27,\n 1475637723558782e-27,\n 8371015190102975e-28,\n 2599706096327376e-28,\n -5461314069809755e-27,\n -4921085770524055e-27,\n -4343405037091838e-27,\n -3732668368707687e-27,\n -3093523840190885e-27,\n -2430835727329465e-27,\n -1734679010007751e-27,\n -974825365660928e-27,\n -2797435120168326e-28,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n -2283748241799531e-28,\n -4037858874020686e-28,\n -2146547464825323e-28\n ],\n [\n 0.1316524975873958,\n /* win[SHORT_TYPE] */\n 0.414213562373095,\n 0.7673269879789602,\n 1.091308501069271,\n /* tantab_l */\n 1.303225372841206,\n 1.56968557711749,\n 1.920982126971166,\n 2.414213562373094,\n 3.171594802363212,\n 4.510708503662055,\n 7.595754112725146,\n 22.90376554843115,\n 0.984807753012208,\n /* cx */\n 0.6427876096865394,\n 0.3420201433256688,\n 0.9396926207859084,\n -0.1736481776669303,\n -0.7660444431189779,\n 0.8660254037844387,\n 0.5,\n -0.5144957554275265,\n /* ca */\n -0.4717319685649723,\n -0.3133774542039019,\n -0.1819131996109812,\n -0.09457419252642064,\n -0.04096558288530405,\n -0.01419856857247115,\n -0.003699974673760037,\n 0.8574929257125442,\n /* cs */\n 0.8817419973177052,\n 0.9496286491027329,\n 0.9833145924917901,\n 0.9955178160675857,\n 0.9991605581781475,\n 0.999899195244447,\n 0.9999931550702802\n ],\n [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 2283748241799531e-28,\n 4037858874020686e-28,\n 2146547464825323e-28,\n 5461314069809755e-27,\n 4921085770524055e-27,\n 4343405037091838e-27,\n 3732668368707687e-27,\n 3093523840190885e-27,\n 2430835727329466e-27,\n 1734679010007751e-27,\n 974825365660928e-27,\n 2797435120168326e-28,\n -5456116108943413e-27,\n -4878985199565852e-27,\n -4240448995017367e-27,\n -3559909094758253e-27,\n -2858043359288075e-27,\n -2156177623817898e-27,\n -1475637723558782e-27,\n -8371015190102975e-28,\n -2599706096327376e-28,\n -2382191739347913e-28,\n -6423305872147834e-28,\n -9400849094049688e-28,\n -1122435026096556e-27,\n -1183840321267481e-27,\n -1122435026096556e-27,\n -9400849094049688e-28,\n -6423305872147841e-28,\n -2382191739347918e-28\n ]\n ], m = A[W.SHORT_TYPE], O = A[W.SHORT_TYPE], s0 = A[W.SHORT_TYPE], K = A[W.SHORT_TYPE], t0 = [\n 0,\n 1,\n 16,\n 17,\n 8,\n 9,\n 24,\n 25,\n 4,\n 5,\n 20,\n 21,\n 12,\n 13,\n 28,\n 29,\n 2,\n 3,\n 18,\n 19,\n 10,\n 11,\n 26,\n 27,\n 6,\n 7,\n 22,\n 23,\n 14,\n 15,\n 30,\n 31\n ];\n function U(u, d, e) {\n for (var l = 10, M = d + 238 - 14 - 286, p = -15; p < 0; p++) {\n var H, B, I;\n H = D[l + -10], B = u[M + -224] * H, I = u[d + 224] * H, H = D[l + -9], B += u[M + -160] * H, I += u[d + 160] * H, H = D[l + -8], B += u[M + -96] * H, I += u[d + 96] * H, H = D[l + -7], B += u[M + -32] * H, I += u[d + 32] * H, H = D[l + -6], B += u[M + 32] * H, I += u[d + -32] * H, H = D[l + -5], B += u[M + 96] * H, I += u[d + -96] * H, H = D[l + -4], B += u[M + 160] * H, I += u[d + -160] * H, H = D[l + -3], B += u[M + 224] * H, I += u[d + -224] * H, H = D[l + -2], B += u[d + -256] * H, I -= u[M + 256] * H, H = D[l + -1], B += u[d + -192] * H, I -= u[M + 192] * H, H = D[l + 0], B += u[d + -128] * H, I -= u[M + 128] * H, H = D[l + 1], B += u[d + -64] * H, I -= u[M + 64] * H, H = D[l + 2], B += u[d + 0] * H, I -= u[M + 0] * H, H = D[l + 3], B += u[d + 64] * H, I -= u[M + -64] * H, H = D[l + 4], B += u[d + 128] * H, I -= u[M + -128] * H, H = D[l + 5], B += u[d + 192] * H, I -= u[M + -192] * H, B *= D[l + 6], H = I - B, e[30 + p * 2] = I + B, e[31 + p * 2] = D[l + 7] * H, l += 18, d--, M++;\n }\n {\n var B, I, v0, b;\n I = u[d + -16] * D[l + -10], B = u[d + -32] * D[l + -2], I += (u[d + -48] - u[d + 16]) * D[l + -9], B += u[d + -96] * D[l + -1], I += (u[d + -80] + u[d + 48]) * D[l + -8], B += u[d + -160] * D[l + 0], I += (u[d + -112] - u[d + 80]) * D[l + -7], B += u[d + -224] * D[l + 1], I += (u[d + -144] + u[d + 112]) * D[l + -6], B -= u[d + 32] * D[l + 2], I += (u[d + -176] - u[d + 144]) * D[l + -5], B -= u[d + 96] * D[l + 3], I += (u[d + -208] + u[d + 176]) * D[l + -4], B -= u[d + 160] * D[l + 4], I += (u[d + -240] - u[d + 208]) * D[l + -3], B -= u[d + 224], v0 = B - I, b = B + I, I = e[14], B = e[15] - I, e[31] = b + I, e[30] = v0 + B, e[15] = v0 - B, e[14] = b - I;\n }\n {\n var a;\n a = e[28] - e[0], e[0] += e[28], e[28] = a * D[l + -2 * 18 + 7], a = e[29] - e[1], e[1] += e[29], e[29] = a * D[l + -2 * 18 + 7], a = e[26] - e[2], e[2] += e[26], e[26] = a * D[l + -4 * 18 + 7], a = e[27] - e[3], e[3] += e[27], e[27] = a * D[l + -4 * 18 + 7], a = e[24] - e[4], e[4] += e[24], e[24] = a * D[l + -6 * 18 + 7], a = e[25] - e[5], e[5] += e[25], e[25] = a * D[l + -6 * 18 + 7], a = e[22] - e[6], e[6] += e[22], e[22] = a * X.SQRT2, a = e[23] - e[7], e[7] += e[23], e[23] = a * X.SQRT2 - e[7], e[7] -= e[6], e[22] -= e[7], e[23] -= e[22], a = e[6], e[6] = e[31] - a, e[31] = e[31] + a, a = e[7], e[7] = e[30] - a, e[30] = e[30] + a, a = e[22], e[22] = e[15] - a, e[15] = e[15] + a, a = e[23], e[23] = e[14] - a, e[14] = e[14] + a, a = e[20] - e[8], e[8] += e[20], e[20] = a * D[l + -10 * 18 + 7], a = e[21] - e[9], e[9] += e[21], e[21] = a * D[l + -10 * 18 + 7], a = e[18] - e[10], e[10] += e[18], e[18] = a * D[l + -12 * 18 + 7], a = e[19] - e[11], e[11] += e[19], e[19] = a * D[l + -12 * 18 + 7], a = e[16] - e[12], e[12] += e[16], e[16] = a * D[l + -14 * 18 + 7], a = e[17] - e[13], e[13] += e[17], e[17] = a * D[l + -14 * 18 + 7], a = -e[20] + e[24], e[20] += e[24], e[24] = a * D[l + -12 * 18 + 7], a = -e[21] + e[25], e[21] += e[25], e[25] = a * D[l + -12 * 18 + 7], a = e[4] - e[8], e[4] += e[8], e[8] = a * D[l + -12 * 18 + 7], a = e[5] - e[9], e[5] += e[9], e[9] = a * D[l + -12 * 18 + 7], a = e[0] - e[12], e[0] += e[12], e[12] = a * D[l + -4 * 18 + 7], a = e[1] - e[13], e[1] += e[13], e[13] = a * D[l + -4 * 18 + 7], a = e[16] - e[28], e[16] += e[28], e[28] = a * D[l + -4 * 18 + 7], a = -e[17] + e[29], e[17] += e[29], e[29] = a * D[l + -4 * 18 + 7], a = X.SQRT2 * (e[2] - e[10]), e[2] += e[10], e[10] = a, a = X.SQRT2 * (e[3] - e[11]), e[3] += e[11], e[11] = a, a = X.SQRT2 * (-e[18] + e[26]), e[18] += e[26], e[26] = a - e[18], a = X.SQRT2 * (-e[19] + e[27]), e[19] += e[27], e[27] = a - e[19], a = e[2], e[19] -= e[3], e[3] -= a, e[2] = e[31] - a, e[31] += a, a = e[3], e[11] -= e[19], e[18] -= a, e[3] = e[30] - a, e[30] += a, a = e[18], e[27] -= e[11], e[19] -= a, e[18] = e[15] - a, e[15] += a, a = e[19], e[10] -= a, e[19] = e[14] - a, e[14] += a, a = e[10], e[11] -= a, e[10] = e[23] - a, e[23] += a, a = e[11], e[26] -= a, e[11] = e[22] - a, e[22] += a, a = e[26], e[27] -= a, e[26] = e[7] - a, e[7] += a, a = e[27], e[27] = e[6] - a, e[6] += a, a = X.SQRT2 * (e[0] - e[4]), e[0] += e[4], e[4] = a, a = X.SQRT2 * (e[1] - e[5]), e[1] += e[5], e[5] = a, a = X.SQRT2 * (e[16] - e[20]), e[16] += e[20], e[20] = a, a = X.SQRT2 * (e[17] - e[21]), e[17] += e[21], e[21] = a, a = -X.SQRT2 * (e[8] - e[12]), e[8] += e[12], e[12] = a - e[8], a = -X.SQRT2 * (e[9] - e[13]), e[9] += e[13], e[13] = a - e[9], a = -X.SQRT2 * (e[25] - e[29]), e[25] += e[29], e[29] = a - e[25], a = -X.SQRT2 * (e[24] + e[28]), e[24] -= e[28], e[28] = a - e[24], a = e[24] - e[16], e[24] = a, a = e[20] - a, e[20] = a, a = e[28] - a, e[28] = a, a = e[25] - e[17], e[25] = a, a = e[21] - a, e[21] = a, a = e[29] - a, e[29] = a, a = e[17] - e[1], e[17] = a, a = e[9] - a, e[9] = a, a = e[25] - a, e[25] = a, a = e[5] - a, e[5] = a, a = e[21] - a, e[21] = a, a = e[13] - a, e[13] = a, a = e[29] - a, e[29] = a, a = e[1] - e[0], e[1] = a, a = e[16] - a, e[16] = a, a = e[17] - a, e[17] = a, a = e[8] - a, e[8] = a, a = e[9] - a, e[9] = a, a = e[24] - a, e[24] = a, a = e[25] - a, e[25] = a, a = e[4] - a, e[4] = a, a = e[5] - a, e[5] = a, a = e[20] - a, e[20] = a, a = e[21] - a, e[21] = a, a = e[12] - a, e[12] = a, a = e[13] - a, e[13] = a, a = e[28] - a, e[28] = a, a = e[29] - a, e[29] = a, a = e[0], e[0] += e[31], e[31] -= a, a = e[1], e[1] += e[30], e[30] -= a, a = e[16], e[16] += e[15], e[15] -= a, a = e[17], e[17] += e[14], e[14] -= a, a = e[8], e[8] += e[23], e[23] -= a, a = e[9], e[9] += e[22], e[22] -= a, a = e[24], e[24] += e[7], e[7] -= a, a = e[25], e[25] += e[6], e[6] -= a, a = e[4], e[4] += e[27], e[27] -= a, a = e[5], e[5] += e[26], e[26] -= a, a = e[20], e[20] += e[11], e[11] -= a, a = e[21], e[21] += e[10], e[10] -= a, a = e[12], e[12] += e[19], e[19] -= a, a = e[13], e[13] += e[18], e[18] -= a, a = e[28], e[28] += e[3], e[3] -= a, a = e[29], e[29] += e[2], e[2] -= a;\n }\n }\n function R(u, d) {\n for (var e = 0; e < 3; e++) {\n var l, M, p, H, B, I;\n H = u[d + 2 * 3] * A[W.SHORT_TYPE][0] - u[d + 5 * 3], l = u[d + 0 * 3] * A[W.SHORT_TYPE][2] - u[d + 3 * 3], M = H + l, p = H - l, H = u[d + 5 * 3] * A[W.SHORT_TYPE][0] + u[d + 2 * 3], l = u[d + 3 * 3] * A[W.SHORT_TYPE][2] + u[d + 0 * 3], B = H + l, I = -H + l, l = (u[d + 1 * 3] * A[W.SHORT_TYPE][1] - u[d + 4 * 3]) * 2069978111953089e-26, H = (u[d + 4 * 3] * A[W.SHORT_TYPE][1] + u[d + 1 * 3]) * 2069978111953089e-26, u[d + 3 * 0] = M * 190752519173728e-25 + l, u[d + 3 * 5] = -B * 190752519173728e-25 + H, p = p * 0.8660254037844387 * 1907525191737281e-26, B = B * 0.5 * 1907525191737281e-26 + H, u[d + 3 * 1] = p - B, u[d + 3 * 2] = p + B, M = M * 0.5 * 1907525191737281e-26 - l, I = I * 0.8660254037844387 * 1907525191737281e-26, u[d + 3 * 3] = M + I, u[d + 3 * 4] = M - I, d++;\n }\n }\n function o(u, d, e) {\n var l, M;\n {\n var p, H, B, I, v0, b, a, S;\n p = e[17] - e[9], B = e[15] - e[11], I = e[14] - e[12], v0 = e[0] + e[8], b = e[1] + e[7], a = e[2] + e[6], S = e[3] + e[5], u[d + 17] = v0 + a - S - (b - e[4]), M = (v0 + a - S) * O[12 + 7] + (b - e[4]), l = (p - B - I) * O[12 + 6], u[d + 5] = l + M, u[d + 6] = l - M, H = (e[16] - e[10]) * O[12 + 6], b = b * O[12 + 7] + e[4], l = p * O[12 + 0] + H + B * O[12 + 1] + I * O[12 + 2], M = -v0 * O[12 + 4] + b - a * O[12 + 5] + S * O[12 + 3], u[d + 1] = l + M, u[d + 2] = l - M, l = p * O[12 + 1] - H - B * O[12 + 2] + I * O[12 + 0], M = -v0 * O[12 + 5] + b - a * O[12 + 3] + S * O[12 + 4], u[d + 9] = l + M, u[d + 10] = l - M, l = p * O[12 + 2] - H + B * O[12 + 0] - I * O[12 + 1], M = v0 * O[12 + 3] - b + a * O[12 + 4] - S * O[12 + 5], u[d + 13] = l + M, u[d + 14] = l - M;\n }\n {\n var L, V, N, P, E, i, s, r;\n L = e[8] - e[0], N = e[6] - e[2], P = e[5] - e[3], E = e[17] + e[9], i = e[16] + e[10], s = e[15] + e[11], r = e[14] + e[12], u[d + 0] = E + s + r + (i + e[13]), l = (E + s + r) * O[12 + 7] - (i + e[13]), M = (L - N + P) * O[12 + 6], u[d + 11] = l + M, u[d + 12] = l - M, V = (e[7] - e[1]) * O[12 + 6], i = e[13] - i * O[12 + 7], l = E * O[12 + 3] - i + s * O[12 + 4] + r * O[12 + 5], M = L * O[12 + 2] + V + N * O[12 + 0] + P * O[12 + 1], u[d + 3] = l + M, u[d + 4] = l - M, l = -E * O[12 + 5] + i - s * O[12 + 3] - r * O[12 + 4], M = L * O[12 + 1] + V - N * O[12 + 2] - P * O[12 + 0], u[d + 7] = l + M, u[d + 8] = l - M, l = -E * O[12 + 4] + i - s * O[12 + 5] - r * O[12 + 3], M = L * O[12 + 0] - V + N * O[12 + 1] - P * O[12 + 2], u[d + 15] = l + M, u[d + 16] = l - M;\n }\n }\n this.mdct_sub48 = function(u, d, e) {\n for (var l = d, M = 286, p = 0; p < u.channels_out; p++) {\n for (var H = 0; H < u.mode_gr; H++) {\n for (var B, I = u.l3_side.tt[H][p], v0 = I.xr, b = 0, a = u.sb_sample[p][1 - H], S = 0, L = 0; L < 18 / 2; L++)\n for (U(l, M, a[S]), U(l, M + 32, a[S + 1]), S += 2, M += 64, B = 1; B < 32; B += 2)\n a[S - 1][B] *= -1;\n for (B = 0; B < 32; B++, b += 18) {\n var V = I.block_type, N = u.sb_sample[p][H], P = u.sb_sample[p][1 - H];\n if (I.mixed_block_flag != 0 && B < 2 && (V = 0), u.amp_filter[B] < 1e-12)\n z.fill(\n v0,\n b + 0,\n b + 18,\n 0\n );\n else {\n if (u.amp_filter[B] < 1)\n for (var L = 0; L < 18; L++)\n P[L][t0[B]] *= u.amp_filter[B];\n if (V == W.SHORT_TYPE) {\n for (var L = -g / 4; L < 0; L++) {\n var E = A[W.SHORT_TYPE][L + 3];\n v0[b + L * 3 + 9] = N[9 + L][t0[B]] * E - N[8 - L][t0[B]], v0[b + L * 3 + 18] = N[14 - L][t0[B]] * E + N[15 + L][t0[B]], v0[b + L * 3 + 10] = N[15 + L][t0[B]] * E - N[14 - L][t0[B]], v0[b + L * 3 + 19] = P[2 - L][t0[B]] * E + P[3 + L][t0[B]], v0[b + L * 3 + 11] = P[3 + L][t0[B]] * E - P[2 - L][t0[B]], v0[b + L * 3 + 20] = P[8 - L][t0[B]] * E + P[9 + L][t0[B]];\n }\n R(v0, b);\n } else {\n for (var i = u0(18), L = -f0 / 4; L < 0; L++) {\n var s, r;\n s = A[V][L + 27] * P[L + 9][t0[B]] + A[V][L + 36] * P[8 - L][t0[B]], r = A[V][L + 9] * N[L + 9][t0[B]] - A[V][L + 18] * N[8 - L][t0[B]], i[L + 9] = s - r * m[3 + L + 9], i[L + 18] = s * m[3 + L + 9] + r;\n }\n o(v0, b, i);\n }\n }\n if (V != W.SHORT_TYPE && B != 0)\n for (var L = 7; L >= 0; --L) {\n var n, f;\n n = v0[b + L] * s0[20 + L] + v0[b + -1 - L] * K[28 + L], f = v0[b + L] * K[28 + L] - v0[b + -1 - L] * s0[20 + L], v0[b + -1 - L] = n, v0[b + L] = f;\n }\n }\n }\n if (l = e, M = 286, u.mode_gr == 1)\n for (var Y = 0; Y < 18; Y++)\n Z.arraycopy(\n u.sb_sample[p][1][Y],\n 0,\n u.sb_sample[p][0][Y],\n 0,\n 32\n );\n }\n };\n }\n return ce = Q, ce;\n}\nvar Se, Ge;\nfunction Ea() {\n if (Ge)\n return Se;\n Ge = 1;\n var w = t1(), Z = Q0, X = Z.System, z = Z.new_float, u0 = Z.new_float_n;\n function W() {\n this.l = z(w.SBMAX_l), this.s = u0([w.SBMAX_s, 3]);\n var Q = this;\n this.assign = function(D) {\n X.arraycopy(D.l, 0, Q.l, 0, w.SBMAX_l);\n for (var g = 0; g < w.SBMAX_s; g++)\n for (var f0 = 0; f0 < 3; f0++)\n Q.s[g][f0] = D.s[g][f0];\n };\n }\n return Se = W, Se;\n}\nvar de, $e;\nfunction Ga() {\n if ($e)\n return de;\n $e = 1;\n var w = Ea();\n function Z() {\n this.thm = new w(), this.en = new w();\n }\n return de = Z, de;\n}\nfunction R1(w) {\n var Z = w;\n this.ordinal = function() {\n return Z;\n };\n}\nR1.STEREO = new R1(0);\nR1.JOINT_STEREO = new R1(1);\nR1.DUAL_CHANNEL = new R1(2);\nR1.MONO = new R1(3);\nR1.NOT_SET = new R1(4);\nvar j1 = R1, Ae, Pe;\nfunction t1() {\n if (Pe)\n return Ae;\n Pe = 1;\n var w = Q0, Z = w.System, X = w.VbrMode, z = w.new_array_n, u0 = w.new_float, W = w.new_float_n, Q = w.new_int, D = w.assert;\n g.ENCDELAY = 576, g.POSTDELAY = 1152, g.MDCTDELAY = 48, g.FFTOFFSET = 224 + g.MDCTDELAY, g.DECDELAY = 528, g.SBLIMIT = 32, g.CBANDS = 64, g.SBPSY_l = 21, g.SBPSY_s = 12, g.SBMAX_l = 22, g.SBMAX_s = 13, g.PSFB21 = 6, g.PSFB12 = 6, g.BLKSIZE = 1024, g.HBLKSIZE = g.BLKSIZE / 2 + 1, g.BLKSIZE_s = 256, g.HBLKSIZE_s = g.BLKSIZE_s / 2 + 1, g.NORM_TYPE = 0, g.START_TYPE = 1, g.SHORT_TYPE = 2, g.STOP_TYPE = 3, g.MPG_MD_LR_LR = 0, g.MPG_MD_LR_I = 1, g.MPG_MD_MS_LR = 2, g.MPG_MD_MS_I = 3, g.fircoef = [\n -0.0207887 * 5,\n -0.0378413 * 5,\n -0.0432472 * 5,\n -0.031183 * 5,\n 779609e-23 * 5,\n 0.0467745 * 5,\n 0.10091 * 5,\n 0.151365 * 5,\n 0.187098 * 5\n ];\n function g() {\n var f0 = Da(), A = Ga(), m = j1, O = g.FFTOFFSET, s0 = g.MPG_MD_MS_LR, K = null;\n this.psy = null;\n var t0 = null, U = null, R = null;\n this.setModules = function(l, M, p, H) {\n K = l, this.psy = M, t0 = M, U = H, R = p;\n };\n var o = new f0();\n function u(l) {\n var M, p;\n if (l.ATH.useAdjust == 0) {\n l.ATH.adjust = 1;\n return;\n }\n if (p = l.loudness_sq[0][0], M = l.loudness_sq[1][0], l.channels_out == 2 ? (p += l.loudness_sq[0][1], M += l.loudness_sq[1][1]) : (p += p, M += M), l.mode_gr == 2 && (p = Math.max(p, M)), p *= 0.5, p *= l.ATH.aaSensitivityP, p > 0.03125)\n l.ATH.adjust >= 1 ? l.ATH.adjust = 1 : l.ATH.adjust < l.ATH.adjustLimit && (l.ATH.adjust = l.ATH.adjustLimit), l.ATH.adjustLimit = 1;\n else {\n var H = 31.98 * p + 625e-6;\n l.ATH.adjust >= H ? (l.ATH.adjust *= H * 0.075 + 0.925, l.ATH.adjust < H && (l.ATH.adjust = H)) : l.ATH.adjustLimit >= H ? l.ATH.adjust = H : l.ATH.adjust < l.ATH.adjustLimit && (l.ATH.adjust = l.ATH.adjustLimit), l.ATH.adjustLimit = H;\n }\n }\n function d(l) {\n var M, p;\n for (D(0 <= l.bitrate_index && l.bitrate_index < 16), D(0 <= l.mode_ext && l.mode_ext < 4), l.bitrate_stereoMode_Hist[l.bitrate_index][4]++, l.bitrate_stereoMode_Hist[15][4]++, l.channels_out == 2 && (l.bitrate_stereoMode_Hist[l.bitrate_index][l.mode_ext]++, l.bitrate_stereoMode_Hist[15][l.mode_ext]++), M = 0; M < l.mode_gr; ++M)\n for (p = 0; p < l.channels_out; ++p) {\n var H = l.l3_side.tt[M][p].block_type | 0;\n l.l3_side.tt[M][p].mixed_block_flag != 0 && (H = 4), l.bitrate_blockType_Hist[l.bitrate_index][H]++, l.bitrate_blockType_Hist[l.bitrate_index][5]++, l.bitrate_blockType_Hist[15][H]++, l.bitrate_blockType_Hist[15][5]++;\n }\n }\n function e(l, M) {\n var p = l.internal_flags, H, B;\n if (p.lame_encode_frame_init == 0) {\n var I, v0, b = u0(2014), a = u0(286 + 1152 + 576);\n for (p.lame_encode_frame_init = 1, I = 0, v0 = 0; I < 286 + 576 * (1 + p.mode_gr); ++I)\n I < 576 * p.mode_gr ? (b[I] = 0, p.channels_out == 2 && (a[I] = 0)) : (b[I] = M[0][v0], p.channels_out == 2 && (a[I] = M[1][v0]), ++v0);\n for (B = 0; B < p.mode_gr; B++)\n for (H = 0; H < p.channels_out; H++)\n p.l3_side.tt[B][H].block_type = g.SHORT_TYPE;\n o.mdct_sub48(p, b, a), D(576 >= g.FFTOFFSET), D(p.mf_size >= g.BLKSIZE + l.framesize - g.FFTOFFSET), D(p.mf_size >= 512 + l.framesize - 32);\n }\n }\n this.lame_encode_mp3_frame = function(l, M, p, H, B, I) {\n var v0, b = z([2, 2]);\n b[0][0] = new A(), b[0][1] = new A(), b[1][0] = new A(), b[1][1] = new A();\n var a = z([2, 2]);\n a[0][0] = new A(), a[0][1] = new A(), a[1][0] = new A(), a[1][1] = new A();\n var S, L = [null, null], V = l.internal_flags, N = W([2, 4]), P = [0.5, 0.5], E = [[0, 0], [0, 0]], i = [[0, 0], [0, 0]], s, r, n;\n if (L[0] = M, L[1] = p, V.lame_encode_frame_init == 0 && e(l, L), V.padding = 0, (V.slot_lag -= V.frac_SpF) < 0 && (V.slot_lag += l.out_samplerate, V.padding = 1), V.psymodel != 0) {\n var f, Y = [null, null], J = 0, T = Q(2);\n for (n = 0; n < V.mode_gr; n++) {\n for (r = 0; r < V.channels_out; r++)\n Y[r] = L[r], J = 576 + n * 576 - g.FFTOFFSET;\n if (l.VBR == X.vbr_mtrh || l.VBR == X.vbr_mt ? f = t0.L3psycho_anal_vbr(\n l,\n Y,\n J,\n n,\n b,\n a,\n E[n],\n i[n],\n N[n],\n T\n ) : f = t0.L3psycho_anal_ns(\n l,\n Y,\n J,\n n,\n b,\n a,\n E[n],\n i[n],\n N[n],\n T\n ), f != 0)\n return -4;\n for (l.mode == m.JOINT_STEREO && (P[n] = N[n][2] + N[n][3], P[n] > 0 && (P[n] = N[n][3] / P[n])), r = 0; r < V.channels_out; r++) {\n var q = V.l3_side.tt[n][r];\n q.block_type = T[r], q.mixed_block_flag = 0;\n }\n }\n } else\n for (n = 0; n < V.mode_gr; n++)\n for (r = 0; r < V.channels_out; r++)\n V.l3_side.tt[n][r].block_type = g.NORM_TYPE, V.l3_side.tt[n][r].mixed_block_flag = 0, i[n][r] = E[n][r] = 700;\n if (u(V), o.mdct_sub48(V, L[0], L[1]), V.mode_ext = g.MPG_MD_LR_LR, l.force_ms)\n V.mode_ext = g.MPG_MD_MS_LR;\n else if (l.mode == m.JOINT_STEREO) {\n var i0 = 0, h0 = 0;\n for (n = 0; n < V.mode_gr; n++)\n for (r = 0; r < V.channels_out; r++)\n i0 += i[n][r], h0 += E[n][r];\n if (i0 <= 1 * h0) {\n var d0 = V.l3_side.tt[0], M0 = V.l3_side.tt[V.mode_gr - 1];\n d0[0].block_type == d0[1].block_type && M0[0].block_type == M0[1].block_type && (V.mode_ext = g.MPG_MD_MS_LR);\n }\n }\n if (V.mode_ext == s0 ? (S = a, s = i) : (S = b, s = E), l.analysis && V.pinfo != null)\n for (n = 0; n < V.mode_gr; n++)\n for (r = 0; r < V.channels_out; r++)\n V.pinfo.ms_ratio[n] = V.ms_ratio[n], V.pinfo.ms_ener_ratio[n] = P[n], V.pinfo.blocktype[n][r] = V.l3_side.tt[n][r].block_type, V.pinfo.pe[n][r] = s[n][r], Z.arraycopy(\n V.l3_side.tt[n][r].xr,\n 0,\n V.pinfo.xr[n][r],\n 0,\n 576\n ), V.mode_ext == s0 && (V.pinfo.ers[n][r] = V.pinfo.ers[n][r + 2], Z.arraycopy(\n V.pinfo.energy[n][r + 2],\n 0,\n V.pinfo.energy[n][r],\n 0,\n V.pinfo.energy[n][r].length\n ));\n if (l.VBR == X.vbr_off || l.VBR == X.vbr_abr) {\n var R0, A0;\n for (R0 = 0; R0 < 18; R0++)\n V.nsPsy.pefirbuf[R0] = V.nsPsy.pefirbuf[R0 + 1];\n for (A0 = 0, n = 0; n < V.mode_gr; n++)\n for (r = 0; r < V.channels_out; r++)\n A0 += s[n][r];\n for (V.nsPsy.pefirbuf[18] = A0, A0 = V.nsPsy.pefirbuf[9], R0 = 0; R0 < 9; R0++)\n A0 += (V.nsPsy.pefirbuf[R0] + V.nsPsy.pefirbuf[18 - R0]) * g.fircoef[R0];\n for (A0 = 670 * 5 * V.mode_gr * V.channels_out / A0, n = 0; n < V.mode_gr; n++)\n for (r = 0; r < V.channels_out; r++)\n s[n][r] *= A0;\n }\n if (V.iteration_loop.iteration_loop(l, s, P, S), K.format_bitstream(l), v0 = K.copy_buffer(V, H, B, I, 1), l.bWriteVbrTag && U.addVbrFrame(l), l.analysis && V.pinfo != null) {\n for (r = 0; r < V.channels_out; r++) {\n var w0;\n for (w0 = 0; w0 < O; w0++)\n V.pinfo.pcmdata[r][w0] = V.pinfo.pcmdata[r][w0 + l.framesize];\n for (w0 = O; w0 < 1600; w0++)\n V.pinfo.pcmdata[r][w0] = L[r][w0 - O];\n }\n R.set_frame_pinfo(l, S);\n }\n return d(V), v0;\n };\n }\n return Ae = g, Ae;\n}\nvar Ba = Q0, Ze = Ba.Util, Ke = Ba.new_float, J0 = t1();\nfunction $a() {\n var w = Ke(J0.BLKSIZE), Z = Ke(J0.BLKSIZE_s / 2), X = [\n 0.9238795325112867,\n 0.3826834323650898,\n 0.9951847266721969,\n 0.0980171403295606,\n 0.9996988186962042,\n 0.02454122852291229,\n 0.9999811752826011,\n 0.006135884649154475\n ];\n function z(W, Q, D) {\n var g = 0, f0, A, m;\n D <<= 1;\n var O = Q + D;\n f0 = 4;\n do {\n var s0, K, t0, U, R, o, u;\n u = f0 >> 1, U = f0, R = f0 << 1, o = R + U, f0 = R << 1, A = Q, m = A + u;\n do {\n var d, e, l, M;\n e = W[A + 0] - W[A + U], d = W[A + 0] + W[A + U], M = W[A + R] - W[A + o], l = W[A + R] + W[A + o], W[A + R] = d - l, W[A + 0] = d + l, W[A + o] = e - M, W[A + U] = e + M, e = W[m + 0] - W[m + U], d = W[m + 0] + W[m + U], M = Ze.SQRT2 * W[m + o], l = Ze.SQRT2 * W[m + R], W[m + R] = d - l, W[m + 0] = d + l, W[m + o] = e - M, W[m + U] = e + M, m += f0, A += f0;\n } while (A < O);\n for (K = X[g + 0], s0 = X[g + 1], t0 = 1; t0 < u; t0++) {\n var p, H;\n p = 1 - 2 * s0 * s0, H = 2 * s0 * K, A = Q + t0, m = Q + U - t0;\n do {\n var B, I, v0, d, e, b, l, a, M, S;\n I = H * W[A + U] - p * W[m + U], B = p * W[A + U] + H * W[m + U], e = W[A + 0] - B, d = W[A + 0] + B, b = W[m + 0] - I, v0 = W[m + 0] + I, I = H * W[A + o] - p * W[m + o], B = p * W[A + o] + H * W[m + o], M = W[A + R] - B, l = W[A + R] + B, S = W[m + R] - I, a = W[m + R] + I, I = s0 * l - K * S, B = K * l + s0 * S, W[A + R] = d - B, W[A + 0] = d + B, W[m + o] = b - I, W[m + U] = b + I, I = K * a - s0 * M, B = s0 * a + K * M, W[m + R] = v0 - B, W[m + 0] = v0 + B, W[A + o] = e - I, W[A + U] = e + I, m += f0, A += f0;\n } while (A < O);\n p = K, K = p * X[g + 0] - s0 * X[g + 1], s0 = p * X[g + 1] + s0 * X[g + 0];\n }\n g += 2;\n } while (f0 < D);\n }\n var u0 = [\n 0,\n 128,\n 64,\n 192,\n 32,\n 160,\n 96,\n 224,\n 16,\n 144,\n 80,\n 208,\n 48,\n 176,\n 112,\n 240,\n 8,\n 136,\n 72,\n 200,\n 40,\n 168,\n 104,\n 232,\n 24,\n 152,\n 88,\n 216,\n 56,\n 184,\n 120,\n 248,\n 4,\n 132,\n 68,\n 196,\n 36,\n 164,\n 100,\n 228,\n 20,\n 148,\n 84,\n 212,\n 52,\n 180,\n 116,\n 244,\n 12,\n 140,\n 76,\n 204,\n 44,\n 172,\n 108,\n 236,\n 28,\n 156,\n 92,\n 220,\n 60,\n 188,\n 124,\n 252,\n 2,\n 130,\n 66,\n 194,\n 34,\n 162,\n 98,\n 226,\n 18,\n 146,\n 82,\n 210,\n 50,\n 178,\n 114,\n 242,\n 10,\n 138,\n 74,\n 202,\n 42,\n 170,\n 106,\n 234,\n 26,\n 154,\n 90,\n 218,\n 58,\n 186,\n 122,\n 250,\n 6,\n 134,\n 70,\n 198,\n 38,\n 166,\n 102,\n 230,\n 22,\n 150,\n 86,\n 214,\n 54,\n 182,\n 118,\n 246,\n 14,\n 142,\n 78,\n 206,\n 46,\n 174,\n 110,\n 238,\n 30,\n 158,\n 94,\n 222,\n 62,\n 190,\n 126,\n 254\n ];\n this.fft_short = function(W, Q, D, g, f0) {\n for (var A = 0; A < 3; A++) {\n var m = J0.BLKSIZE_s / 2, O = 65535 & 576 / 3 * (A + 1), s0 = J0.BLKSIZE_s / 8 - 1;\n do {\n var K, t0, U, R, o, u = u0[s0 << 2] & 255;\n K = Z[u] * g[D][f0 + u + O], o = Z[127 - u] * g[D][f0 + u + O + 128], t0 = K - o, K = K + o, U = Z[u + 64] * g[D][f0 + u + O + 64], o = Z[63 - u] * g[D][f0 + u + O + 192], R = U - o, U = U + o, m -= 4, Q[A][m + 0] = K + U, Q[A][m + 2] = K - U, Q[A][m + 1] = t0 + R, Q[A][m + 3] = t0 - R, K = Z[u + 1] * g[D][f0 + u + O + 1], o = Z[126 - u] * g[D][f0 + u + O + 129], t0 = K - o, K = K + o, U = Z[u + 65] * g[D][f0 + u + O + 65], o = Z[62 - u] * g[D][f0 + u + O + 193], R = U - o, U = U + o, Q[A][m + J0.BLKSIZE_s / 2 + 0] = K + U, Q[A][m + J0.BLKSIZE_s / 2 + 2] = K - U, Q[A][m + J0.BLKSIZE_s / 2 + 1] = t0 + R, Q[A][m + J0.BLKSIZE_s / 2 + 3] = t0 - R;\n } while (--s0 >= 0);\n z(Q[A], m, J0.BLKSIZE_s / 2);\n }\n }, this.fft_long = function(W, Q, D, g, f0) {\n var A = J0.BLKSIZE / 8 - 1, m = J0.BLKSIZE / 2;\n do {\n var O, s0, K, t0, U, R = u0[A] & 255;\n O = w[R] * g[D][f0 + R], U = w[R + 512] * g[D][f0 + R + 512], s0 = O - U, O = O + U, K = w[R + 256] * g[D][f0 + R + 256], U = w[R + 768] * g[D][f0 + R + 768], t0 = K - U, K = K + U, m -= 4, Q[m + 0] = O + K, Q[m + 2] = O - K, Q[m + 1] = s0 + t0, Q[m + 3] = s0 - t0, O = w[R + 1] * g[D][f0 + R + 1], U = w[R + 513] * g[D][f0 + R + 513], s0 = O - U, O = O + U, K = w[R + 257] * g[D][f0 + R + 257], U = w[R + 769] * g[D][f0 + R + 769], t0 = K - U, K = K + U, Q[m + J0.BLKSIZE / 2 + 0] = O + K, Q[m + J0.BLKSIZE / 2 + 2] = O - K, Q[m + J0.BLKSIZE / 2 + 1] = s0 + t0, Q[m + J0.BLKSIZE / 2 + 3] = s0 - t0;\n } while (--A >= 0);\n z(Q, m, J0.BLKSIZE / 2);\n }, this.init_fft = function(W) {\n for (var Q = 0; Q < J0.BLKSIZE; Q++)\n w[Q] = 0.42 - 0.5 * Math.cos(2 * Math.PI * (Q + 0.5) / J0.BLKSIZE) + 0.08 * Math.cos(4 * Math.PI * (Q + 0.5) / J0.BLKSIZE);\n for (var Q = 0; Q < J0.BLKSIZE_s / 2; Q++)\n Z[Q] = 0.5 * (1 - Math.cos(2 * Math.PI * (Q + 0.5) / J0.BLKSIZE_s));\n };\n}\nvar Pa = $a, T1 = Q0, C1 = T1.VbrMode, Ue = T1.Float, F1 = T1.ShortBlock, n1 = T1.Util, Za = T1.Arrays, g0 = T1.new_float, m1 = T1.new_float_n, L1 = T1.new_int, C0 = T1.assert, Ka = Pa, r0 = t1();\nfunction Ua() {\n var w = j1, Z = new Ka(), X = 2.302585092994046, z = 2, u0 = 16, W = 2, Q = 16, D = 0.34, g = 1 / (14752 * 14752) / (r0.BLKSIZE / 2), f0 = 0.01, A = 0.8, m = 0.6, O = 0.3, s0 = 3.5, K = 21, t0 = 0.2302585093;\n function U(v) {\n return v;\n }\n function R(v, h) {\n for (var x = 0, y = 0; y < r0.BLKSIZE / 2; ++y)\n x += v[y] * h.ATH.eql_w[y];\n return x *= g, x;\n }\n function o(v, h, x, y, k, c, C, G, F, e0, $) {\n var a0 = v.internal_flags;\n if (F < 2)\n Z.fft_long(a0, y[k], F, e0, $), Z.fft_short(a0, c[C], F, e0, $);\n else if (F == 2) {\n for (var m0 = r0.BLKSIZE - 1; m0 >= 0; --m0) {\n var N0 = y[k + 0][m0], n0 = y[k + 1][m0];\n y[k + 0][m0] = (N0 + n0) * n1.SQRT2 * 0.5, y[k + 1][m0] = (N0 - n0) * n1.SQRT2 * 0.5;\n }\n for (var L0 = 2; L0 >= 0; --L0)\n for (var m0 = r0.BLKSIZE_s - 1; m0 >= 0; --m0) {\n var N0 = c[C + 0][L0][m0], n0 = c[C + 1][L0][m0];\n c[C + 0][L0][m0] = (N0 + n0) * n1.SQRT2 * 0.5, c[C + 1][L0][m0] = (N0 - n0) * n1.SQRT2 * 0.5;\n }\n }\n h[0] = y[k + 0][0], h[0] *= h[0];\n for (var m0 = r0.BLKSIZE / 2 - 1; m0 >= 0; --m0) {\n var j = y[k + 0][r0.BLKSIZE / 2 - m0], x0 = y[k + 0][r0.BLKSIZE / 2 + m0];\n h[r0.BLKSIZE / 2 - m0] = (j * j + x0 * x0) * 0.5;\n }\n for (var L0 = 2; L0 >= 0; --L0) {\n x[L0][0] = c[C + 0][L0][0], x[L0][0] *= x[L0][0];\n for (var m0 = r0.BLKSIZE_s / 2 - 1; m0 >= 0; --m0) {\n var j = c[C + 0][L0][r0.BLKSIZE_s / 2 - m0], x0 = c[C + 0][L0][r0.BLKSIZE_s / 2 + m0];\n x[L0][r0.BLKSIZE_s / 2 - m0] = (j * j + x0 * x0) * 0.5;\n }\n }\n {\n for (var k0 = 0, m0 = 11; m0 < r0.HBLKSIZE; m0++)\n k0 += h[m0];\n a0.tot_ener[F] = k0;\n }\n if (v.analysis) {\n for (var m0 = 0; m0 < r0.HBLKSIZE; m0++)\n a0.pinfo.energy[G][F][m0] = a0.pinfo.energy_save[F][m0], a0.pinfo.energy_save[F][m0] = h[m0];\n a0.pinfo.pe[G][F] = a0.pe[F];\n }\n v.athaa_loudapprox == 2 && F < 2 && (a0.loudness_sq[G][F] = a0.loudness_sq_save[F], a0.loudness_sq_save[F] = R(h, a0));\n }\n var u = 8, d = 23, e = 15, l, M, p, H = [\n 1,\n 0.79433,\n 0.63096,\n 0.63096,\n 0.63096,\n 0.63096,\n 0.63096,\n 0.25119,\n 0.11749\n ];\n function B() {\n l = Math.pow(10, (u + 1) / 16), M = Math.pow(10, (d + 1) / 16), p = Math.pow(10, e / 10);\n }\n var I = [\n 3.3246 * 3.3246,\n 3.23837 * 3.23837,\n 3.15437 * 3.15437,\n 3.00412 * 3.00412,\n 2.86103 * 2.86103,\n 2.65407 * 2.65407,\n 2.46209 * 2.46209,\n 2.284 * 2.284,\n 2.11879 * 2.11879,\n 1.96552 * 1.96552,\n 1.82335 * 1.82335,\n 1.69146 * 1.69146,\n 1.56911 * 1.56911,\n 1.46658 * 1.46658,\n 1.37074 * 1.37074,\n 1.31036 * 1.31036,\n 1.25264 * 1.25264,\n 1.20648 * 1.20648,\n 1.16203 * 1.16203,\n 1.12765 * 1.12765,\n 1.09428 * 1.09428,\n 1.0659 * 1.0659,\n 1.03826 * 1.03826,\n 1.01895 * 1.01895,\n 1\n ], v0 = [\n 1.33352 * 1.33352,\n 1.35879 * 1.35879,\n 1.38454 * 1.38454,\n 1.39497 * 1.39497,\n 1.40548 * 1.40548,\n 1.3537 * 1.3537,\n 1.30382 * 1.30382,\n 1.22321 * 1.22321,\n 1.14758 * 1.14758,\n 1\n ], b = [\n 2.35364 * 2.35364,\n 2.29259 * 2.29259,\n 2.23313 * 2.23313,\n 2.12675 * 2.12675,\n 2.02545 * 2.02545,\n 1.87894 * 1.87894,\n 1.74303 * 1.74303,\n 1.61695 * 1.61695,\n 1.49999 * 1.49999,\n 1.39148 * 1.39148,\n 1.29083 * 1.29083,\n 1.19746 * 1.19746,\n 1.11084 * 1.11084,\n 1.03826 * 1.03826\n ];\n function a(v, h, x, y, k, c) {\n var C;\n if (h > v)\n if (h < v * M)\n C = h / v;\n else\n return v + h;\n else {\n if (v >= h * M)\n return v + h;\n C = v / h;\n }\n if (v += h, y + 3 <= 3 + 3) {\n if (C >= l)\n return v;\n var G = 0 | n1.FAST_LOG10_X(C, 16);\n return v * v0[G];\n }\n var G = 0 | n1.FAST_LOG10_X(C, 16);\n if (c != 0 ? h = k.ATH.cb_s[x] * k.ATH.adjust : h = k.ATH.cb_l[x] * k.ATH.adjust, v < p * h) {\n if (v > h) {\n var F, e0;\n return F = 1, G <= 13 && (F = b[G]), e0 = n1.FAST_LOG10_X(v / h, 10 / 15), v * ((I[G] - F) * e0 + F);\n }\n return G > 13 ? v : v * b[G];\n }\n return v * I[G];\n }\n var S = [\n 1.33352 * 1.33352,\n 1.35879 * 1.35879,\n 1.38454 * 1.38454,\n 1.39497 * 1.39497,\n 1.40548 * 1.40548,\n 1.3537 * 1.3537,\n 1.30382 * 1.30382,\n 1.22321 * 1.22321,\n 1.14758 * 1.14758,\n 1\n ];\n function L(v, h, x) {\n var y;\n if (v < 0 && (v = 0), h < 0 && (h = 0), v <= 0)\n return h;\n if (h <= 0)\n return v;\n if (h > v ? y = h / v : y = v / h, -2 <= x && x <= 2) {\n if (y >= l)\n return v + h;\n var k = 0 | n1.FAST_LOG10_X(y, 16);\n return (v + h) * S[k];\n }\n return y < M ? v + h : (v < h && (v = h), v);\n }\n function V(v, h) {\n var x = v.internal_flags;\n if (x.channels_out > 1) {\n for (var y = 0; y < r0.SBMAX_l; y++) {\n var k = x.thm[0].l[y], c = x.thm[1].l[y];\n x.thm[0].l[y] += c * h, x.thm[1].l[y] += k * h;\n }\n for (var y = 0; y < r0.SBMAX_s; y++)\n for (var C = 0; C < 3; C++) {\n var k = x.thm[0].s[y][C], c = x.thm[1].s[y][C];\n x.thm[0].s[y][C] += c * h, x.thm[1].s[y][C] += k * h;\n }\n }\n }\n function N(v) {\n for (var h = 0; h < r0.SBMAX_l; h++)\n if (!(v.thm[0].l[h] > 1.58 * v.thm[1].l[h] || v.thm[1].l[h] > 1.58 * v.thm[0].l[h])) {\n var x = v.mld_l[h] * v.en[3].l[h], y = Math.max(\n v.thm[2].l[h],\n Math.min(v.thm[3].l[h], x)\n );\n x = v.mld_l[h] * v.en[2].l[h];\n var k = Math.max(\n v.thm[3].l[h],\n Math.min(v.thm[2].l[h], x)\n );\n v.thm[2].l[h] = y, v.thm[3].l[h] = k;\n }\n for (var h = 0; h < r0.SBMAX_s; h++)\n for (var c = 0; c < 3; c++)\n if (!(v.thm[0].s[h][c] > 1.58 * v.thm[1].s[h][c] || v.thm[1].s[h][c] > 1.58 * v.thm[0].s[h][c])) {\n var x = v.mld_s[h] * v.en[3].s[h][c], y = Math.max(\n v.thm[2].s[h][c],\n Math.min(v.thm[3].s[h][c], x)\n );\n x = v.mld_s[h] * v.en[2].s[h][c];\n var k = Math.max(\n v.thm[3].s[h][c],\n Math.min(v.thm[2].s[h][c], x)\n );\n v.thm[2].s[h][c] = y, v.thm[3].s[h][c] = k;\n }\n }\n function P(v, h, x) {\n var y = h, k = Math.pow(10, x);\n h *= 2, y *= 2;\n for (var c = 0; c < r0.SBMAX_l; c++) {\n var C, G, F, e0;\n if (e0 = v.ATH.cb_l[v.bm_l[c]] * k, C = Math.min(\n Math.max(v.thm[0].l[c], e0),\n Math.max(v.thm[1].l[c], e0)\n ), G = Math.max(v.thm[2].l[c], e0), F = Math.max(v.thm[3].l[c], e0), C * h < G + F) {\n var $ = C * y / (G + F);\n G *= $, F *= $;\n }\n v.thm[2].l[c] = Math.min(G, v.thm[2].l[c]), v.thm[3].l[c] = Math.min(F, v.thm[3].l[c]);\n }\n k *= r0.BLKSIZE_s / r0.BLKSIZE;\n for (var c = 0; c < r0.SBMAX_s; c++)\n for (var a0 = 0; a0 < 3; a0++) {\n var C, G, F, e0;\n if (e0 = v.ATH.cb_s[v.bm_s[c]] * k, C = Math.min(\n Math.max(v.thm[0].s[c][a0], e0),\n Math.max(v.thm[1].s[c][a0], e0)\n ), G = Math.max(v.thm[2].s[c][a0], e0), F = Math.max(v.thm[3].s[c][a0], e0), C * h < G + F) {\n var $ = C * h / (G + F);\n G *= $, F *= $;\n }\n v.thm[2].s[c][a0] = Math.min(\n v.thm[2].s[c][a0],\n G\n ), v.thm[3].s[c][a0] = Math.min(\n v.thm[3].s[c][a0],\n F\n );\n }\n }\n function E(v, h, x, y, k) {\n var c, C, G = 0, F = 0;\n for (c = C = 0; c < r0.SBMAX_s; ++C, ++c) {\n for (var e0 = v.bo_s[c], $ = v.npart_s, a0 = e0 < $ ? e0 : $; C < a0; )\n C0(h[C] >= 0), C0(x[C] >= 0), G += h[C], F += x[C], C++;\n if (v.en[y].s[c][k] = G, v.thm[y].s[c][k] = F, C >= $) {\n ++c;\n break;\n }\n C0(h[C] >= 0), C0(x[C] >= 0);\n {\n var m0 = v.PSY.bo_s_weight[c], N0 = 1 - m0;\n G = m0 * h[C], F = m0 * x[C], v.en[y].s[c][k] += G, v.thm[y].s[c][k] += F, G = N0 * h[C], F = N0 * x[C];\n }\n }\n for (; c < r0.SBMAX_s; ++c)\n v.en[y].s[c][k] = 0, v.thm[y].s[c][k] = 0;\n }\n function i(v, h, x, y) {\n var k, c, C = 0, G = 0;\n for (k = c = 0; k < r0.SBMAX_l; ++c, ++k) {\n for (var F = v.bo_l[k], e0 = v.npart_l, $ = F < e0 ? F : e0; c < $; )\n C0(h[c] >= 0), C0(x[c] >= 0), C += h[c], G += x[c], c++;\n if (v.en[y].l[k] = C, v.thm[y].l[k] = G, c >= e0) {\n ++k;\n break;\n }\n C0(h[c] >= 0), C0(x[c] >= 0);\n {\n var a0 = v.PSY.bo_l_weight[k], m0 = 1 - a0;\n C = a0 * h[c], G = a0 * x[c], v.en[y].l[k] += C, v.thm[y].l[k] += G, C = m0 * h[c], G = m0 * x[c];\n }\n }\n for (; k < r0.SBMAX_l; ++k)\n v.en[y].l[k] = 0, v.thm[y].l[k] = 0;\n }\n function s(v, h, x, y, k, c) {\n var C = v.internal_flags, G, F;\n for (F = G = 0; F < C.npart_s; ++F) {\n for (var e0 = 0, $ = C.numlines_s[F], a0 = 0; a0 < $; ++a0, ++G) {\n var m0 = h[c][G];\n e0 += m0;\n }\n x[F] = e0;\n }\n for (C0(F == C.npart_s), G = F = 0; F < C.npart_s; F++) {\n var N0 = C.s3ind_s[F][0], n0 = C.s3_ss[G++] * x[N0];\n for (++N0; N0 <= C.s3ind_s[F][1]; )\n n0 += C.s3_ss[G] * x[N0], ++G, ++N0;\n {\n var L0 = W * C.nb_s1[k][F];\n y[F] = Math.min(n0, L0);\n }\n if (C.blocktype_old[k & 1] == r0.SHORT_TYPE) {\n var L0 = Q * C.nb_s2[k][F], j = y[F];\n y[F] = Math.min(L0, j);\n }\n C.nb_s2[k][F] = C.nb_s1[k][F], C.nb_s1[k][F] = n0, C0(y[F] >= 0);\n }\n for (; F <= r0.CBANDS; ++F)\n x[F] = 0, y[F] = 0;\n }\n function r(v, h, x, y) {\n var k = v.internal_flags;\n v.short_blocks == F1.short_block_coupled && !(h[0] != 0 && h[1] != 0) && (h[0] = h[1] = 0);\n for (var c = 0; c < k.channels_out; c++)\n y[c] = r0.NORM_TYPE, v.short_blocks == F1.short_block_dispensed && (h[c] = 1), v.short_blocks == F1.short_block_forced && (h[c] = 0), h[c] != 0 ? (C0(k.blocktype_old[c] != r0.START_TYPE), k.blocktype_old[c] == r0.SHORT_TYPE && (y[c] = r0.STOP_TYPE)) : (y[c] = r0.SHORT_TYPE, k.blocktype_old[c] == r0.NORM_TYPE && (k.blocktype_old[c] = r0.START_TYPE), k.blocktype_old[c] == r0.STOP_TYPE && (k.blocktype_old[c] = r0.SHORT_TYPE)), x[c] = k.blocktype_old[c], k.blocktype_old[c] = y[c];\n }\n function n(v, h, x) {\n return x >= 1 ? v : x <= 0 ? h : h > 0 ? Math.pow(v / h, x) * h : 0;\n }\n var f = [\n 11.8,\n 13.6,\n 17.2,\n 32,\n 46.5,\n 51.3,\n 57.5,\n 67.1,\n 71.5,\n 84.6,\n 97.6,\n 130\n /* 255.8 */\n ];\n function Y(v, h) {\n for (var x = 309.07, y = 0; y < r0.SBMAX_s - 1; y++)\n for (var k = 0; k < 3; k++) {\n var c = v.thm.s[y][k];\n if (c > 0) {\n var C = c * h, G = v.en.s[y][k];\n G > C && (G > C * 1e10 ? x += f[y] * (10 * X) : x += f[y] * n1.FAST_LOG10(G / C));\n }\n }\n return x;\n }\n var J = [\n 6.8,\n 5.8,\n 5.8,\n 6.4,\n 6.5,\n 9.9,\n 12.1,\n 14.4,\n 15,\n 18.9,\n 21.6,\n 26.9,\n 34.2,\n 40.2,\n 46.8,\n 56.5,\n 60.7,\n 73.9,\n 85.7,\n 93.4,\n 126.1\n /* 241.3 */\n ];\n function T(v, h) {\n for (var x = 281.0575, y = 0; y < r0.SBMAX_l - 1; y++) {\n var k = v.thm.l[y];\n if (k > 0) {\n var c = k * h, C = v.en.l[y];\n C > c && (C > c * 1e10 ? x += J[y] * (10 * X) : x += J[y] * n1.FAST_LOG10(C / c));\n }\n }\n return x;\n }\n function q(v, h, x, y, k) {\n var c, C;\n for (c = C = 0; c < v.npart_l; ++c) {\n var G = 0, F = 0, e0;\n for (e0 = 0; e0 < v.numlines_l[c]; ++e0, ++C) {\n var $ = h[C];\n G += $, F < $ && (F = $);\n }\n x[c] = G, y[c] = F, k[c] = G * v.rnumlines_l[c], C0(v.rnumlines_l[c] >= 0), C0(x[c] >= 0), C0(y[c] >= 0), C0(k[c] >= 0);\n }\n }\n function i0(v, h, x, y) {\n var k = H.length - 1, c = 0, C = x[c] + x[c + 1];\n if (C > 0) {\n var G = h[c];\n G < h[c + 1] && (G = h[c + 1]), C0(v.numlines_l[c] + v.numlines_l[c + 1] - 1 > 0), C = 20 * (G * 2 - C) / (C * (v.numlines_l[c] + v.numlines_l[c + 1] - 1));\n var F = 0 | C;\n F > k && (F = k), y[c] = F;\n } else\n y[c] = 0;\n for (c = 1; c < v.npart_l - 1; c++)\n if (C = x[c - 1] + x[c] + x[c + 1], C > 0) {\n var G = h[c - 1];\n G < h[c] && (G = h[c]), G < h[c + 1] && (G = h[c + 1]), C0(v.numlines_l[c - 1] + v.numlines_l[c] + v.numlines_l[c + 1] - 1 > 0), C = 20 * (G * 3 - C) / (C * (v.numlines_l[c - 1] + v.numlines_l[c] + v.numlines_l[c + 1] - 1));\n var F = 0 | C;\n F > k && (F = k), y[c] = F;\n } else\n y[c] = 0;\n if (C0(c == v.npart_l - 1), C = x[c - 1] + x[c], C > 0) {\n var G = h[c - 1];\n G < h[c] && (G = h[c]), C0(v.numlines_l[c - 1] + v.numlines_l[c] - 1 > 0), C = 20 * (G * 2 - C) / (C * (v.numlines_l[c - 1] + v.numlines_l[c] - 1));\n var F = 0 | C;\n F > k && (F = k), y[c] = F;\n } else\n y[c] = 0;\n C0(c == v.npart_l - 1);\n }\n var h0 = [\n -865163e-23 * 2,\n -851586e-8 * 2,\n -674764e-23 * 2,\n 0.0209036 * 2,\n -336639e-22 * 2,\n -0.0438162 * 2,\n -154175e-22 * 2,\n 0.0931738 * 2,\n -552212e-22 * 2,\n -0.313819 * 2\n ];\n this.L3psycho_anal_ns = function(v, h, x, y, k, c, C, G, F, e0) {\n var $ = v.internal_flags, a0 = m1([2, r0.BLKSIZE]), m0 = m1([2, 3, r0.BLKSIZE_s]), N0 = g0(r0.CBANDS + 1), n0 = g0(r0.CBANDS + 1), L0 = g0(r0.CBANDS + 2), j = L1(2), x0 = L1(2), k0, _0, B0, l0, p0, P0, c0, O0, X0 = m1([2, 576]), Z0, v1 = L1(r0.CBANDS + 2), z0 = L1(r0.CBANDS + 2);\n for (Za.fill(z0, 0), k0 = $.channels_out, v.mode == w.JOINT_STEREO && (k0 = 4), v.VBR == C1.vbr_off ? Z0 = $.ResvMax == 0 ? 0 : $.ResvSize / $.ResvMax * 0.5 : v.VBR == C1.vbr_rh || v.VBR == C1.vbr_mtrh || v.VBR == C1.vbr_mt ? Z0 = 0.6 : Z0 = 1, _0 = 0; _0 < $.channels_out; _0++) {\n var K0 = h[_0], s1 = x + 576 - 350 - K + 192;\n for (l0 = 0; l0 < 576; l0++) {\n var o1, h1;\n for (o1 = K0[s1 + l0 + 10], h1 = 0, p0 = 0; p0 < (K - 1) / 2 - 1; p0 += 2)\n o1 += h0[p0] * (K0[s1 + l0 + p0] + K0[s1 + l0 + K - p0]), h1 += h0[p0 + 1] * (K0[s1 + l0 + p0 + 1] + K0[s1 + l0 + K - p0 - 1]);\n X0[_0][l0] = o1 + h1;\n }\n k[y][_0].en.assign($.en[_0]), k[y][_0].thm.assign($.thm[_0]), k0 > 2 && (c[y][_0].en.assign($.en[_0 + 2]), c[y][_0].thm.assign($.thm[_0 + 2]));\n }\n for (_0 = 0; _0 < k0; _0++) {\n var c1, S1, r1 = g0(12), x1 = [0, 0, 0, 0], O1 = g0(12), le = 1, Ce, Fe = g0(r0.CBANDS), ke = g0(r0.CBANDS), U0 = [0, 0, 0, 0], Xe = g0(r0.HBLKSIZE), Ye = m1([3, r0.HBLKSIZE_s]);\n for (C0($.npart_s <= r0.CBANDS), C0($.npart_l <= r0.CBANDS), l0 = 0; l0 < 3; l0++)\n r1[l0] = $.nsPsy.last_en_subshort[_0][l0 + 6], C0($.nsPsy.last_en_subshort[_0][l0 + 4] > 0), O1[l0] = r1[l0] / $.nsPsy.last_en_subshort[_0][l0 + 4], x1[0] += r1[l0];\n if (_0 == 2)\n for (l0 = 0; l0 < 576; l0++) {\n var ve, oe;\n ve = X0[0][l0], oe = X0[1][l0], X0[0][l0] = ve + oe, X0[1][l0] = ve - oe;\n }\n {\n var qe = X0[_0 & 1], G1 = 0;\n for (l0 = 0; l0 < 9; l0++) {\n for (var ka = G1 + 64, a1 = 1; G1 < ka; G1++)\n a1 < Math.abs(qe[G1]) && (a1 = Math.abs(qe[G1]));\n $.nsPsy.last_en_subshort[_0][l0] = r1[l0 + 3] = a1, x1[1 + l0 / 3] += a1, a1 > r1[l0 + 3 - 2] ? (C0(r1[l0 + 3 - 2] > 0), a1 = a1 / r1[l0 + 3 - 2]) : r1[l0 + 3 - 2] > a1 * 10 ? a1 = r1[l0 + 3 - 2] / (a1 * 10) : a1 = 0, O1[l0 + 3] = a1;\n }\n }\n if (v.analysis) {\n var he = O1[0];\n for (l0 = 1; l0 < 12; l0++)\n he < O1[l0] && (he = O1[l0]);\n $.pinfo.ers[y][_0] = $.pinfo.ers_save[_0], $.pinfo.ers_save[_0] = he;\n }\n for (Ce = _0 == 3 ? $.nsPsy.attackthre_s : $.nsPsy.attackthre, l0 = 0; l0 < 12; l0++)\n U0[l0 / 3] == 0 && O1[l0] > Ce && (U0[l0 / 3] = l0 % 3 + 1);\n for (l0 = 1; l0 < 4; l0++) {\n var ue;\n x1[l0 - 1] > x1[l0] ? (C0(x1[l0] > 0), ue = x1[l0 - 1] / x1[l0]) : (C0(x1[l0 - 1] > 0), ue = x1[l0] / x1[l0 - 1]), ue < 1.7 && (U0[l0] = 0, l0 == 1 && (U0[0] = 0));\n }\n for (U0[0] != 0 && $.nsPsy.lastAttacks[_0] != 0 && (U0[0] = 0), ($.nsPsy.lastAttacks[_0] == 3 || U0[0] + U0[1] + U0[2] + U0[3] != 0) && (le = 0, U0[1] != 0 && U0[0] != 0 && (U0[1] = 0), U0[2] != 0 && U0[1] != 0 && (U0[2] = 0), U0[3] != 0 && U0[2] != 0 && (U0[3] = 0)), _0 < 2 ? x0[_0] = le : le == 0 && (x0[0] = x0[1] = 0), F[_0] = $.tot_ener[_0], S1 = m0, c1 = a0, o(\n v,\n Xe,\n Ye,\n c1,\n _0 & 1,\n S1,\n _0 & 1,\n y,\n _0,\n h,\n x\n ), q($, Xe, N0, Fe, ke), i0($, Fe, ke, v1), O0 = 0; O0 < 3; O0++) {\n var fe, i1;\n for (s(v, Ye, n0, L0, _0, O0), E($, n0, L0, _0, O0), c0 = 0; c0 < r0.SBMAX_s; c0++) {\n if (i1 = $.thm[_0].s[c0][O0], i1 *= A, U0[O0] >= 2 || U0[O0 + 1] == 1) {\n var $1 = O0 != 0 ? O0 - 1 : 2, a1 = n(\n $.thm[_0].s[c0][$1],\n i1,\n m * Z0\n );\n i1 = Math.min(i1, a1);\n }\n if (U0[O0] == 1) {\n var $1 = O0 != 0 ? O0 - 1 : 2, a1 = n(\n $.thm[_0].s[c0][$1],\n i1,\n O * Z0\n );\n i1 = Math.min(i1, a1);\n } else if (O0 != 0 && U0[O0 - 1] == 3 || O0 == 0 && $.nsPsy.lastAttacks[_0] == 3) {\n var $1 = O0 != 2 ? O0 + 1 : 0, a1 = n(\n $.thm[_0].s[c0][$1],\n i1,\n O * Z0\n );\n i1 = Math.min(i1, a1);\n }\n fe = r1[O0 * 3 + 3] + r1[O0 * 3 + 4] + r1[O0 * 3 + 5], r1[O0 * 3 + 5] * 6 < fe && (i1 *= 0.5, r1[O0 * 3 + 4] * 6 < fe && (i1 *= 0.5)), $.thm[_0].s[c0][O0] = i1;\n }\n }\n for ($.nsPsy.lastAttacks[_0] = U0[2], P0 = 0, B0 = 0; B0 < $.npart_l; B0++) {\n for (var w1 = $.s3ind[B0][0], me = N0[w1] * H[v1[w1]], I1 = $.s3_ll[P0++] * me; ++w1 <= $.s3ind[B0][1]; )\n me = N0[w1] * H[v1[w1]], I1 = a(\n I1,\n $.s3_ll[P0++] * me,\n w1,\n w1 - B0,\n $,\n 0\n );\n I1 *= 0.158489319246111, $.blocktype_old[_0 & 1] == r0.SHORT_TYPE ? L0[B0] = I1 : L0[B0] = n(\n Math.min(I1, Math.min(z * $.nb_1[_0][B0], u0 * $.nb_2[_0][B0])),\n I1,\n Z0\n ), $.nb_2[_0][B0] = $.nb_1[_0][B0], $.nb_1[_0][B0] = I1;\n }\n for (; B0 <= r0.CBANDS; ++B0)\n N0[B0] = 0, L0[B0] = 0;\n i($, N0, L0, _0);\n }\n if ((v.mode == w.STEREO || v.mode == w.JOINT_STEREO) && v.interChRatio > 0 && V(v, v.interChRatio), v.mode == w.JOINT_STEREO) {\n var be;\n N($), be = v.msfix, Math.abs(be) > 0 && P($, be, v.ATHlower * $.ATH.adjust);\n }\n for (r(v, x0, e0, j), _0 = 0; _0 < k0; _0++) {\n var P1, Z1 = 0, z1, J1;\n _0 > 1 ? (P1 = G, Z1 = -2, z1 = r0.NORM_TYPE, (e0[0] == r0.SHORT_TYPE || e0[1] == r0.SHORT_TYPE) && (z1 = r0.SHORT_TYPE), J1 = c[y][_0 - 2]) : (P1 = C, Z1 = 0, z1 = e0[_0], J1 = k[y][_0]), z1 == r0.SHORT_TYPE ? P1[Z1 + _0] = Y(J1, $.masking_lower) : P1[Z1 + _0] = T(J1, $.masking_lower), v.analysis && ($.pinfo.pe[y][_0] = P1[Z1 + _0]);\n }\n return 0;\n };\n function d0(v, h, x, y, k, c, C, G) {\n var F = v.internal_flags;\n if (y < 2)\n Z.fft_long(F, C[G], y, h, x);\n else if (y == 2)\n for (var e0 = r0.BLKSIZE - 1; e0 >= 0; --e0) {\n var $ = C[G + 0][e0], a0 = C[G + 1][e0];\n C[G + 0][e0] = ($ + a0) * n1.SQRT2 * 0.5, C[G + 1][e0] = ($ - a0) * n1.SQRT2 * 0.5;\n }\n c[0] = C[G + 0][0], c[0] *= c[0];\n for (var e0 = r0.BLKSIZE / 2 - 1; e0 >= 0; --e0) {\n var m0 = C[G + 0][r0.BLKSIZE / 2 - e0], N0 = C[G + 0][r0.BLKSIZE / 2 + e0];\n c[r0.BLKSIZE / 2 - e0] = (m0 * m0 + N0 * N0) * 0.5;\n }\n {\n for (var n0 = 0, e0 = 11; e0 < r0.HBLKSIZE; e0++)\n n0 += c[e0];\n F.tot_ener[y] = n0;\n }\n if (v.analysis) {\n for (var e0 = 0; e0 < r0.HBLKSIZE; e0++)\n F.pinfo.energy[k][y][e0] = F.pinfo.energy_save[y][e0], F.pinfo.energy_save[y][e0] = c[e0];\n F.pinfo.pe[k][y] = F.pe[y];\n }\n }\n function M0(v, h, x, y, k, c, C, G) {\n var F = v.internal_flags;\n if (k == 0 && y < 2 && Z.fft_short(F, C[G], y, h, x), y == 2)\n for (var e0 = r0.BLKSIZE_s - 1; e0 >= 0; --e0) {\n var $ = C[G + 0][k][e0], a0 = C[G + 1][k][e0];\n C[G + 0][k][e0] = ($ + a0) * n1.SQRT2 * 0.5, C[G + 1][k][e0] = ($ - a0) * n1.SQRT2 * 0.5;\n }\n c[k][0] = C[G + 0][k][0], c[k][0] *= c[k][0];\n for (var e0 = r0.BLKSIZE_s / 2 - 1; e0 >= 0; --e0) {\n var m0 = C[G + 0][k][r0.BLKSIZE_s / 2 - e0], N0 = C[G + 0][k][r0.BLKSIZE_s / 2 + e0];\n c[k][r0.BLKSIZE_s / 2 - e0] = (m0 * m0 + N0 * N0) * 0.5;\n }\n }\n function R0(v, h, x, y) {\n var k = v.internal_flags;\n v.athaa_loudapprox == 2 && x < 2 && (k.loudness_sq[h][x] = k.loudness_sq_save[x], k.loudness_sq_save[x] = R(y, k));\n }\n var A0 = [\n -865163e-23 * 2,\n -851586e-8 * 2,\n -674764e-23 * 2,\n 0.0209036 * 2,\n -336639e-22 * 2,\n -0.0438162 * 2,\n -154175e-22 * 2,\n 0.0931738 * 2,\n -552212e-22 * 2,\n -0.313819 * 2\n ];\n function w0(v, h, x, y, k, c, C, G, F, e0) {\n for (var $ = m1([2, 576]), a0 = v.internal_flags, m0 = a0.channels_out, N0 = v.mode == w.JOINT_STEREO ? 4 : m0, n0 = 0; n0 < m0; n0++) {\n firbuf = h[n0];\n for (var L0 = x + 576 - 350 - K + 192, j = 0; j < 576; j++) {\n var x0, k0;\n x0 = firbuf[L0 + j + 10], k0 = 0;\n for (var _0 = 0; _0 < (K - 1) / 2 - 1; _0 += 2)\n x0 += A0[_0] * (firbuf[L0 + j + _0] + firbuf[L0 + j + K - _0]), k0 += A0[_0 + 1] * (firbuf[L0 + j + _0 + 1] + firbuf[L0 + j + K - _0 - 1]);\n $[n0][j] = x0 + k0;\n }\n k[y][n0].en.assign(a0.en[n0]), k[y][n0].thm.assign(a0.thm[n0]), N0 > 2 && (c[y][n0].en.assign(a0.en[n0 + 2]), c[y][n0].thm.assign(a0.thm[n0 + 2]));\n }\n for (var n0 = 0; n0 < N0; n0++) {\n var B0 = g0(12), l0 = g0(12), p0 = [0, 0, 0, 0], P0 = $[n0 & 1], c0 = 0, O0 = n0 == 3 ? a0.nsPsy.attackthre_s : a0.nsPsy.attackthre, X0 = 1;\n if (n0 == 2)\n for (var j = 0, _0 = 576; _0 > 0; ++j, --_0) {\n var Z0 = $[0][j], v1 = $[1][j];\n $[0][j] = Z0 + v1, $[1][j] = Z0 - v1;\n }\n for (var j = 0; j < 3; j++)\n l0[j] = a0.nsPsy.last_en_subshort[n0][j + 6], C0(a0.nsPsy.last_en_subshort[n0][j + 4] > 0), B0[j] = l0[j] / a0.nsPsy.last_en_subshort[n0][j + 4], p0[0] += l0[j];\n for (var j = 0; j < 9; j++) {\n for (var z0 = c0 + 64, K0 = 1; c0 < z0; c0++)\n K0 < Math.abs(P0[c0]) && (K0 = Math.abs(P0[c0]));\n a0.nsPsy.last_en_subshort[n0][j] = l0[j + 3] = K0, p0[1 + j / 3] += K0, K0 > l0[j + 3 - 2] ? (C0(l0[j + 3 - 2] > 0), K0 = K0 / l0[j + 3 - 2]) : l0[j + 3 - 2] > K0 * 10 ? K0 = l0[j + 3 - 2] / (K0 * 10) : K0 = 0, B0[j + 3] = K0;\n }\n for (var j = 0; j < 3; ++j) {\n var s1 = l0[j * 3 + 3] + l0[j * 3 + 4] + l0[j * 3 + 5], o1 = 1;\n l0[j * 3 + 5] * 6 < s1 && (o1 *= 0.5, l0[j * 3 + 4] * 6 < s1 && (o1 *= 0.5)), G[n0][j] = o1;\n }\n if (v.analysis) {\n for (var h1 = B0[0], j = 1; j < 12; j++)\n h1 < B0[j] && (h1 = B0[j]);\n a0.pinfo.ers[y][n0] = a0.pinfo.ers_save[n0], a0.pinfo.ers_save[n0] = h1;\n }\n for (var j = 0; j < 12; j++)\n F[n0][j / 3] == 0 && B0[j] > O0 && (F[n0][j / 3] = j % 3 + 1);\n for (var j = 1; j < 4; j++) {\n var c1 = p0[j - 1], S1 = p0[j], r1 = Math.max(c1, S1);\n r1 < 4e4 && c1 < 1.7 * S1 && S1 < 1.7 * c1 && (j == 1 && F[n0][0] <= F[n0][j] && (F[n0][0] = 0), F[n0][j] = 0);\n }\n F[n0][0] <= a0.nsPsy.lastAttacks[n0] && (F[n0][0] = 0), (a0.nsPsy.lastAttacks[n0] == 3 || F[n0][0] + F[n0][1] + F[n0][2] + F[n0][3] != 0) && (X0 = 0, F[n0][1] != 0 && F[n0][0] != 0 && (F[n0][1] = 0), F[n0][2] != 0 && F[n0][1] != 0 && (F[n0][2] = 0), F[n0][3] != 0 && F[n0][2] != 0 && (F[n0][3] = 0)), n0 < 2 ? e0[n0] = X0 : X0 == 0 && (e0[0] = e0[1] = 0), C[n0] = a0.tot_ener[n0];\n }\n }\n function $0(v, h, x) {\n if (x == 0)\n for (var y = 0; y < v.npart_s; y++)\n v.nb_s2[h][y] = v.nb_s1[h][y], v.nb_s1[h][y] = 0;\n }\n function f1(v, h) {\n for (var x = 0; x < v.npart_l; x++)\n v.nb_2[h][x] = v.nb_1[h][x], v.nb_1[h][x] = 0;\n }\n function t(v, h, x, y) {\n var k = H.length - 1, c = 0, C = x[c] + x[c + 1];\n if (C > 0) {\n var G = h[c];\n G < h[c + 1] && (G = h[c + 1]), C0(v.numlines_s[c] + v.numlines_s[c + 1] - 1 > 0), C = 20 * (G * 2 - C) / (C * (v.numlines_s[c] + v.numlines_s[c + 1] - 1));\n var F = 0 | C;\n F > k && (F = k), y[c] = F;\n } else\n y[c] = 0;\n for (c = 1; c < v.npart_s - 1; c++)\n if (C = x[c - 1] + x[c] + x[c + 1], C0(c + 1 < v.npart_s), C > 0) {\n var G = h[c - 1];\n G < h[c] && (G = h[c]), G < h[c + 1] && (G = h[c + 1]), C0(v.numlines_s[c - 1] + v.numlines_s[c] + v.numlines_s[c + 1] - 1 > 0), C = 20 * (G * 3 - C) / (C * (v.numlines_s[c - 1] + v.numlines_s[c] + v.numlines_s[c + 1] - 1));\n var F = 0 | C;\n F > k && (F = k), y[c] = F;\n } else\n y[c] = 0;\n if (C0(c == v.npart_s - 1), C = x[c - 1] + x[c], C > 0) {\n var G = h[c - 1];\n G < h[c] && (G = h[c]), C0(v.numlines_s[c - 1] + v.numlines_s[c] - 1 > 0), C = 20 * (G * 2 - C) / (C * (v.numlines_s[c - 1] + v.numlines_s[c] - 1));\n var F = 0 | C;\n F > k && (F = k), y[c] = F;\n } else\n y[c] = 0;\n C0(c == v.npart_s - 1);\n }\n function _(v, h, x, y, k, c) {\n var C = v.internal_flags, G = new float[r0.CBANDS](), F = g0(r0.CBANDS), e0, $, a0, m0 = new int[r0.CBANDS]();\n for (a0 = $ = 0; a0 < C.npart_s; ++a0) {\n var N0 = 0, n0 = 0, L0 = C.numlines_s[a0];\n for (e0 = 0; e0 < L0; ++e0, ++$) {\n var j = h[c][$];\n N0 += j, n0 < j && (n0 = j);\n }\n x[a0] = N0, G[a0] = n0, F[a0] = N0 / L0, C0(F[a0] >= 0);\n }\n for (C0(a0 == C.npart_s); a0 < r0.CBANDS; ++a0)\n G[a0] = 0, F[a0] = 0;\n for (t(C, G, F, m0), $ = a0 = 0; a0 < C.npart_s; a0++) {\n var x0 = C.s3ind_s[a0][0], k0 = C.s3ind_s[a0][1], _0, B0, l0, p0, P0;\n for (_0 = m0[x0], B0 = 1, p0 = C.s3_ss[$] * x[x0] * H[m0[x0]], ++$, ++x0; x0 <= k0; )\n _0 += m0[x0], B0 += 1, l0 = C.s3_ss[$] * x[x0] * H[m0[x0]], p0 = L(p0, l0, x0 - a0), ++$, ++x0;\n _0 = (1 + 2 * _0) / (2 * B0), P0 = H[_0] * 0.5, p0 *= P0, y[a0] = p0, C.nb_s2[k][a0] = C.nb_s1[k][a0], C.nb_s1[k][a0] = p0, l0 = G[a0], l0 *= C.minval_s[a0], l0 *= P0, y[a0] > l0 && (y[a0] = l0), C.masking_lower > 1 && (y[a0] *= C.masking_lower), y[a0] > x[a0] && (y[a0] = x[a0]), C.masking_lower < 1 && (y[a0] *= C.masking_lower), C0(y[a0] >= 0);\n }\n for (; a0 < r0.CBANDS; ++a0)\n x[a0] = 0, y[a0] = 0;\n }\n function S0(v, h, x, y, k) {\n var c = g0(r0.CBANDS), C = g0(r0.CBANDS), G = L1(r0.CBANDS + 2), F;\n q(v, h, x, c, C), i0(v, c, C, G);\n var e0 = 0;\n for (F = 0; F < v.npart_l; F++) {\n var $, a0, m0, N0, n0 = v.s3ind[F][0], L0 = v.s3ind[F][1], j = 0, x0 = 0;\n for (j = G[n0], x0 += 1, a0 = v.s3_ll[e0] * x[n0] * H[G[n0]], ++e0, ++n0; n0 <= L0; )\n j += G[n0], x0 += 1, $ = v.s3_ll[e0] * x[n0] * H[G[n0]], N0 = L(a0, $, n0 - F), a0 = N0, ++e0, ++n0;\n if (j = (1 + 2 * j) / (2 * x0), m0 = H[j] * 0.5, a0 *= m0, v.blocktype_old[k & 1] == r0.SHORT_TYPE) {\n var k0 = z * v.nb_1[k][F];\n k0 > 0 ? y[F] = Math.min(a0, k0) : y[F] = Math.min(a0, x[F] * O);\n } else {\n var _0 = u0 * v.nb_2[k][F], B0 = z * v.nb_1[k][F], k0;\n _0 <= 0 && (_0 = a0), B0 <= 0 && (B0 = a0), v.blocktype_old[k & 1] == r0.NORM_TYPE ? k0 = Math.min(B0, _0) : k0 = B0, y[F] = Math.min(a0, k0);\n }\n v.nb_2[k][F] = v.nb_1[k][F], v.nb_1[k][F] = a0, $ = c[F], $ *= v.minval_l[F], $ *= m0, y[F] > $ && (y[F] = $), v.masking_lower > 1 && (y[F] *= v.masking_lower), y[F] > x[F] && (y[F] = x[F]), v.masking_lower < 1 && (y[F] *= v.masking_lower), C0(y[F] >= 0);\n }\n for (; F < r0.CBANDS; ++F)\n x[F] = 0, y[F] = 0;\n }\n function E0(v, h) {\n var x = v.internal_flags;\n v.short_blocks == F1.short_block_coupled && !(h[0] != 0 && h[1] != 0) && (h[0] = h[1] = 0);\n for (var y = 0; y < x.channels_out; y++)\n v.short_blocks == F1.short_block_dispensed && (h[y] = 1), v.short_blocks == F1.short_block_forced && (h[y] = 0);\n }\n function V0(v, h, x) {\n for (var y = v.internal_flags, k = 0; k < y.channels_out; k++) {\n var c = r0.NORM_TYPE;\n h[k] != 0 ? (C0(y.blocktype_old[k] != r0.START_TYPE), y.blocktype_old[k] == r0.SHORT_TYPE && (c = r0.STOP_TYPE)) : (c = r0.SHORT_TYPE, y.blocktype_old[k] == r0.NORM_TYPE && (y.blocktype_old[k] = r0.START_TYPE), y.blocktype_old[k] == r0.STOP_TYPE && (y.blocktype_old[k] = r0.SHORT_TYPE)), x[k] = y.blocktype_old[k], y.blocktype_old[k] = c;\n }\n }\n function H0(v, h, x, y, k, c, C) {\n for (var G = c * 2, F = c > 0 ? Math.pow(10, k) : 1, e0, $, a0 = 0; a0 < C; ++a0) {\n var m0 = v[2][a0], N0 = v[3][a0], n0 = h[0][a0], L0 = h[1][a0], j = h[2][a0], x0 = h[3][a0];\n if (n0 <= 1.58 * L0 && L0 <= 1.58 * n0) {\n var k0 = x[a0] * N0, _0 = x[a0] * m0;\n $ = Math.max(j, Math.min(x0, k0)), e0 = Math.max(x0, Math.min(j, _0));\n } else\n $ = j, e0 = x0;\n if (c > 0) {\n var B0, l0, p0 = y[a0] * F;\n if (B0 = Math.min(Math.max(n0, p0), Math.max(L0, p0)), j = Math.max($, p0), x0 = Math.max(e0, p0), l0 = j + x0, l0 > 0 && B0 * G < l0) {\n var P0 = B0 * G / l0;\n j *= P0, x0 *= P0;\n }\n $ = Math.min(j, $), e0 = Math.min(x0, e0);\n }\n $ > m0 && ($ = m0), e0 > N0 && (e0 = N0), h[2][a0] = $, h[3][a0] = e0;\n }\n }\n this.L3psycho_anal_vbr = function(v, h, x, y, k, c, C, G, F, e0) {\n var $ = v.internal_flags, a0, m0, N0 = g0(r0.HBLKSIZE), n0 = m1([3, r0.HBLKSIZE_s]), L0 = m1([2, r0.BLKSIZE]), j = m1([2, 3, r0.BLKSIZE_s]), x0 = m1([4, r0.CBANDS]), k0 = m1([4, r0.CBANDS]), _0 = m1([4, 3]), B0 = 0.6, l0 = [\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0]\n ], p0 = L1(2), P0 = v.mode == w.JOINT_STEREO ? 4 : $.channels_out;\n w0(\n v,\n h,\n x,\n y,\n k,\n c,\n F,\n _0,\n l0,\n p0\n ), E0(v, p0);\n {\n for (var c0 = 0; c0 < P0; c0++) {\n var O0 = c0 & 1;\n a0 = L0, d0(\n v,\n h,\n x,\n c0,\n y,\n N0,\n a0,\n O0\n ), R0(\n v,\n y,\n c0,\n N0\n ), p0[O0] != 0 ? S0(\n $,\n N0,\n x0[c0],\n k0[c0],\n c0\n ) : f1($, c0);\n }\n p0[0] + p0[1] == 2 && v.mode == w.JOINT_STEREO && H0(\n x0,\n k0,\n $.mld_cb_l,\n $.ATH.cb_l,\n v.ATHlower * $.ATH.adjust,\n v.msfix,\n $.npart_l\n );\n for (var c0 = 0; c0 < P0; c0++) {\n var O0 = c0 & 1;\n p0[O0] != 0 && i($, x0[c0], k0[c0], c0);\n }\n }\n {\n for (var X0 = 0; X0 < 3; X0++) {\n for (var c0 = 0; c0 < P0; ++c0) {\n var O0 = c0 & 1;\n p0[O0] != 0 ? $0($, c0, X0) : (m0 = j, M0(\n v,\n h,\n x,\n c0,\n X0,\n n0,\n m0,\n O0\n ), _(\n v,\n n0,\n x0[c0],\n k0[c0],\n c0,\n X0\n ));\n }\n p0[0] + p0[1] == 0 && v.mode == w.JOINT_STEREO && H0(\n x0,\n k0,\n $.mld_cb_s,\n $.ATH.cb_s,\n v.ATHlower * $.ATH.adjust,\n v.msfix,\n $.npart_s\n );\n for (var c0 = 0; c0 < P0; ++c0) {\n var O0 = c0 & 1;\n p0[O0] == 0 && E(\n $,\n x0[c0],\n k0[c0],\n c0,\n X0\n );\n }\n }\n for (var c0 = 0; c0 < P0; c0++) {\n var O0 = c0 & 1;\n if (p0[O0] == 0)\n for (var Z0 = 0; Z0 < r0.SBMAX_s; Z0++) {\n for (var v1 = g0(3), X0 = 0; X0 < 3; X0++) {\n var z0 = $.thm[c0].s[Z0][X0];\n if (z0 *= A, l0[c0][X0] >= 2 || l0[c0][X0 + 1] == 1) {\n var K0 = X0 != 0 ? X0 - 1 : 2, s1 = n(\n $.thm[c0].s[Z0][K0],\n z0,\n m * B0\n );\n z0 = Math.min(z0, s1);\n } else if (l0[c0][X0] == 1) {\n var K0 = X0 != 0 ? X0 - 1 : 2, s1 = n(\n $.thm[c0].s[Z0][K0],\n z0,\n O * B0\n );\n z0 = Math.min(z0, s1);\n } else if (X0 != 0 && l0[c0][X0 - 1] == 3 || X0 == 0 && $.nsPsy.lastAttacks[c0] == 3) {\n var K0 = X0 != 2 ? X0 + 1 : 0, s1 = n(\n $.thm[c0].s[Z0][K0],\n z0,\n O * B0\n );\n z0 = Math.min(z0, s1);\n }\n z0 *= _0[c0][X0], v1[X0] = z0;\n }\n for (var X0 = 0; X0 < 3; X0++)\n $.thm[c0].s[Z0][X0] = v1[X0];\n }\n }\n }\n for (var c0 = 0; c0 < P0; c0++)\n $.nsPsy.lastAttacks[c0] = l0[c0][2];\n V0(v, p0, e0);\n for (var c0 = 0; c0 < P0; c0++) {\n var o1, h1, c1, S1;\n c0 > 1 ? (o1 = G, h1 = -2, c1 = r0.NORM_TYPE, (e0[0] == r0.SHORT_TYPE || e0[1] == r0.SHORT_TYPE) && (c1 = r0.SHORT_TYPE), S1 = c[y][c0 - 2]) : (o1 = C, h1 = 0, c1 = e0[c0], S1 = k[y][c0]), c1 == r0.SHORT_TYPE ? o1[h1 + c0] = Y(S1, $.masking_lower) : o1[h1 + c0] = T(S1, $.masking_lower), v.analysis && ($.pinfo.pe[y][c0] = o1[h1 + c0]);\n }\n return 0;\n };\n function y0(v, h) {\n var x = v, y;\n return x >= 0 ? y = -x * 27 : y = x * h, y <= -72 ? 0 : Math.exp(y * t0);\n }\n function T0(v) {\n var h = 0, x = 0;\n {\n var y = 0, k, c;\n for (y = 0; y0(y, v) > 1e-20; y -= 1)\n ;\n for (k = y, c = 0; Math.abs(c - k) > 1e-12; )\n y = (c + k) / 2, y0(y, v) > 0 ? c = y : k = y;\n h = k;\n }\n {\n var y = 0, k, c;\n for (y = 0; y0(y, v) > 1e-20; y += 1)\n ;\n for (k = 0, c = y; Math.abs(c - k) > 1e-12; )\n y = (c + k) / 2, y0(y, v) > 0 ? k = y : c = y;\n x = c;\n }\n {\n var C = 0, G = 1e3, F;\n for (F = 0; F <= G; ++F) {\n var y = h + F * (x - h) / G, e0 = y0(y, v);\n C += e0;\n }\n {\n var $ = (G + 1) / (C * (x - h));\n return $;\n }\n }\n }\n function F0(v) {\n var h, x, y, k;\n return h = v, h >= 0 ? h *= 3 : h *= 1.5, h >= 0.5 && h <= 2.5 ? (k = h - 0.5, x = 8 * (k * k - 2 * k)) : x = 0, h += 0.474, y = 15.811389 + 7.5 * h - 17.5 * Math.sqrt(1 + h * h), y <= -60 ? 0 : (h = Math.exp((x + y) * t0), h /= 0.6609193, h);\n }\n function I0(v) {\n return v < 0 && (v = 0), v = v * 1e-3, 13 * Math.atan(0.76 * v) + 3.5 * Math.atan(v * v / (7.5 * 7.5));\n }\n function b0(v, h, x, y, k, c, C, G, F, e0, $, a0) {\n var m0 = g0(r0.CBANDS + 1), N0 = G / (a0 > 15 ? 2 * 576 : 2 * 192), n0 = L1(r0.HBLKSIZE), L0;\n G /= F;\n var j = 0, x0 = 0;\n for (L0 = 0; L0 < r0.CBANDS; L0++) {\n var k0, _0;\n for (k0 = I0(G * j), m0[L0] = G * j, _0 = j; I0(G * _0) - k0 < D && _0 <= F / 2; _0++)\n ;\n for (v[L0] = _0 - j, x0 = L0 + 1; j < _0; )\n C0(j < r0.HBLKSIZE), n0[j++] = L0;\n if (j > F / 2) {\n j = F / 2, ++L0;\n break;\n }\n }\n C0(L0 < r0.CBANDS), m0[L0] = G * j;\n for (var B0 = 0; B0 < a0; B0++) {\n var l0, p0, P0, c0, O0;\n P0 = e0[B0], c0 = e0[B0 + 1], l0 = 0 | Math.floor(0.5 + $ * (P0 - 0.5)), l0 < 0 && (l0 = 0), p0 = 0 | Math.floor(0.5 + $ * (c0 - 0.5)), p0 > F / 2 && (p0 = F / 2), x[B0] = (n0[l0] + n0[p0]) / 2, h[B0] = n0[p0];\n var X0 = N0 * c0;\n C[B0] = (X0 - m0[h[B0]]) / (m0[h[B0] + 1] - m0[h[B0]]), C[B0] < 0 ? C[B0] = 0 : C[B0] > 1 && (C[B0] = 1), O0 = I0(G * e0[B0] * $), O0 = Math.min(O0, 15.5) / 15.5, c[B0] = Math.pow(\n 10,\n 1.25 * (1 - Math.cos(Math.PI * O0)) - 2.5\n );\n }\n j = 0;\n for (var Z0 = 0; Z0 < x0; Z0++) {\n var v1 = v[Z0], k0, z0;\n k0 = I0(G * j), z0 = I0(G * (j + v1 - 1)), y[Z0] = 0.5 * (k0 + z0), k0 = I0(G * (j - 0.5)), z0 = I0(G * (j + v1 - 0.5)), k[Z0] = z0 - k0, j += v1;\n }\n return x0;\n }\n function G0(v, h, x, y, k, c) {\n var C = m1([r0.CBANDS, r0.CBANDS]), G, F = 0;\n if (c)\n for (var e0 = 0; e0 < h; e0++)\n for (G = 0; G < h; G++) {\n var $ = F0(x[e0] - x[G]) * y[G];\n C[e0][G] = $ * k[e0];\n }\n else\n for (G = 0; G < h; G++)\n for (var a0 = 15 + Math.min(21 / x[G], 12), m0 = T0(a0), e0 = 0; e0 < h; e0++) {\n var $ = m0 * y0(x[e0] - x[G], a0) * y[G];\n C[e0][G] = $ * k[e0];\n }\n for (var e0 = 0; e0 < h; e0++) {\n for (G = 0; G < h && !(C[e0][G] > 0); G++)\n ;\n for (v[e0][0] = G, G = h - 1; G > 0 && !(C[e0][G] > 0); G--)\n ;\n v[e0][1] = G, F += v[e0][1] - v[e0][0] + 1;\n }\n for (var N0 = g0(F), n0 = 0, e0 = 0; e0 < h; e0++)\n for (G = v[e0][0]; G <= v[e0][1]; G++)\n N0[n0++] = C[e0][G];\n return N0;\n }\n function e1(v) {\n var h = I0(v);\n return h = Math.min(h, 15.5) / 15.5, Math.pow(\n 10,\n 1.25 * (1 - Math.cos(Math.PI * h)) - 2.5\n );\n }\n this.psymodel_init = function(v) {\n var h = v.internal_flags, x, y = !0, k = 13, c = 24, C = 0, G = 0, F = -8.25, e0 = -4.5, $ = g0(r0.CBANDS), a0 = g0(r0.CBANDS), m0 = g0(r0.CBANDS), N0 = v.out_samplerate;\n switch (v.experimentalZ) {\n default:\n case 0:\n y = !0;\n break;\n case 1:\n y = !(v.VBR == C1.vbr_mtrh || v.VBR == C1.vbr_mt);\n break;\n case 2:\n y = !1;\n break;\n case 3:\n k = 8, C = -1.75, G = -0.0125, F = -8.25, e0 = -2.25;\n break;\n }\n for (h.ms_ener_ratio_old = 0.25, h.blocktype_old[0] = h.blocktype_old[1] = r0.NORM_TYPE, x = 0; x < 4; ++x) {\n for (var j = 0; j < r0.CBANDS; ++j)\n h.nb_1[x][j] = 1e20, h.nb_2[x][j] = 1e20, h.nb_s1[x][j] = h.nb_s2[x][j] = 1;\n for (var n0 = 0; n0 < r0.SBMAX_l; n0++)\n h.en[x].l[n0] = 1e20, h.thm[x].l[n0] = 1e20;\n for (var j = 0; j < 3; ++j) {\n for (var n0 = 0; n0 < r0.SBMAX_s; n0++)\n h.en[x].s[n0][j] = 1e20, h.thm[x].s[n0][j] = 1e20;\n h.nsPsy.lastAttacks[x] = 0;\n }\n for (var j = 0; j < 9; j++)\n h.nsPsy.last_en_subshort[x][j] = 10;\n }\n for (h.loudness_sq_save[0] = h.loudness_sq_save[1] = 0, h.npart_l = b0(\n h.numlines_l,\n h.bo_l,\n h.bm_l,\n $,\n a0,\n h.mld_l,\n h.PSY.bo_l_weight,\n N0,\n r0.BLKSIZE,\n h.scalefac_band.l,\n r0.BLKSIZE / (2 * 576),\n r0.SBMAX_l\n ), C0(h.npart_l < r0.CBANDS), x = 0; x < h.npart_l; x++) {\n var L0 = C;\n $[x] >= k && (L0 = G * ($[x] - k) / (c - k) + C * (c - $[x]) / (c - k)), m0[x] = Math.pow(10, L0 / 10), h.numlines_l[x] > 0 ? h.rnumlines_l[x] = 1 / h.numlines_l[x] : h.rnumlines_l[x] = 0;\n }\n h.s3_ll = G0(\n h.s3ind,\n h.npart_l,\n $,\n a0,\n m0,\n y\n );\n var j = 0;\n for (x = 0; x < h.npart_l; x++) {\n var x0;\n x0 = Ue.MAX_VALUE;\n for (var k0 = 0; k0 < h.numlines_l[x]; k0++, j++) {\n var _0 = N0 * j / (1e3 * r0.BLKSIZE), B0;\n B0 = this.ATHformula(_0 * 1e3, v) - 20, B0 = Math.pow(10, 0.1 * B0), B0 *= h.numlines_l[x], x0 > B0 && (x0 = B0);\n }\n h.ATH.cb_l[x] = x0, x0 = -20 + $[x] * 20 / 10, x0 > 6 && (x0 = 100), x0 < -15 && (x0 = -15), x0 -= 8, h.minval_l[x] = Math.pow(10, x0 / 10) * h.numlines_l[x];\n }\n for (h.npart_s = b0(\n h.numlines_s,\n h.bo_s,\n h.bm_s,\n $,\n a0,\n h.mld_s,\n h.PSY.bo_s_weight,\n N0,\n r0.BLKSIZE_s,\n h.scalefac_band.s,\n r0.BLKSIZE_s / (2 * 192),\n r0.SBMAX_s\n ), C0(h.npart_s < r0.CBANDS), j = 0, x = 0; x < h.npart_s; x++) {\n var x0, L0 = F;\n $[x] >= k && (L0 = e0 * ($[x] - k) / (c - k) + F * (c - $[x]) / (c - k)), m0[x] = Math.pow(10, L0 / 10), x0 = Ue.MAX_VALUE;\n for (var k0 = 0; k0 < h.numlines_s[x]; k0++, j++) {\n var _0 = N0 * j / (1e3 * r0.BLKSIZE_s), B0;\n B0 = this.ATHformula(_0 * 1e3, v) - 20, B0 = Math.pow(10, 0.1 * B0), B0 *= h.numlines_s[x], x0 > B0 && (x0 = B0);\n }\n h.ATH.cb_s[x] = x0, x0 = -7 + $[x] * 7 / 12, $[x] > 12 && (x0 *= 1 + Math.log(1 + x0) * 3.1), $[x] < 12 && (x0 *= 1 + Math.log(1 - x0) * 2.3), x0 < -15 && (x0 = -15), x0 -= 8, h.minval_s[x] = Math.pow(10, x0 / 10) * h.numlines_s[x];\n }\n h.s3_ss = G0(\n h.s3ind_s,\n h.npart_s,\n $,\n a0,\n m0,\n y\n ), B(), Z.init_fft(h), h.decay = Math.exp(-1 * X / (f0 * N0 / 192));\n {\n var l0;\n l0 = s0, v.exp_nspsytune & 2 && (l0 = 1), Math.abs(v.msfix) > 0 && (l0 = v.msfix), v.msfix = l0;\n for (var p0 = 0; p0 < h.npart_l; p0++)\n h.s3ind[p0][1] > h.npart_l - 1 && (h.s3ind[p0][1] = h.npart_l - 1);\n }\n var P0 = 576 * h.mode_gr / N0;\n if (h.ATH.decay = Math.pow(10, -12 / 10 * P0), h.ATH.adjust = 0.01, h.ATH.adjustLimit = 1, C0(h.bo_l[r0.SBMAX_l - 1] <= h.npart_l), C0(h.bo_s[r0.SBMAX_s - 1] <= h.npart_s), v.ATHtype != -1) {\n var _0, c0 = v.out_samplerate / r0.BLKSIZE, O0 = 0;\n for (_0 = 0, x = 0; x < r0.BLKSIZE / 2; ++x)\n _0 += c0, h.ATH.eql_w[x] = 1 / Math.pow(10, this.ATHformula(_0, v) / 10), O0 += h.ATH.eql_w[x];\n for (O0 = 1 / O0, x = r0.BLKSIZE / 2; --x >= 0; )\n h.ATH.eql_w[x] *= O0;\n }\n {\n for (var p0 = j = 0; p0 < h.npart_s; ++p0)\n for (x = 0; x < h.numlines_s[p0]; ++x)\n ++j;\n for (var p0 = j = 0; p0 < h.npart_l; ++p0)\n for (x = 0; x < h.numlines_l[p0]; ++x)\n ++j;\n }\n for (j = 0, x = 0; x < h.npart_l; x++) {\n var _0 = N0 * (j + h.numlines_l[x] / 2) / (1 * r0.BLKSIZE);\n h.mld_cb_l[x] = e1(_0), j += h.numlines_l[x];\n }\n for (; x < r0.CBANDS; ++x)\n h.mld_cb_l[x] = 1;\n for (j = 0, x = 0; x < h.npart_s; x++) {\n var _0 = N0 * (j + h.numlines_s[x] / 2) / (1 * r0.BLKSIZE_s);\n h.mld_cb_s[x] = e1(_0), j += h.numlines_s[x];\n }\n for (; x < r0.CBANDS; ++x)\n h.mld_cb_s[x] = 1;\n return 0;\n };\n function Y0(v, h) {\n v < -0.3 && (v = 3410), v /= 1e3, v = Math.max(0.1, v);\n var x = 3.64 * Math.pow(v, -0.8) - 6.8 * Math.exp(-0.6 * Math.pow(v - 3.4, 2)) + 6 * Math.exp(-0.15 * Math.pow(v - 8.7, 2)) + (0.6 + 0.04 * h) * 1e-3 * Math.pow(v, 4);\n return x;\n }\n this.ATHformula = function(v, h) {\n var x;\n switch (h.ATHtype) {\n case 0:\n x = Y0(v, 9);\n break;\n case 1:\n x = Y0(v, -1);\n break;\n case 2:\n x = Y0(v, 0);\n break;\n case 3:\n x = Y0(v, 1) + 6;\n break;\n case 4:\n x = Y0(v, h.ATHcurve);\n break;\n default:\n x = Y0(v, 0);\n break;\n }\n return x;\n };\n}\nvar Qa = Ua, Wa = j1;\nfunction ja() {\n this.class_id = 0, this.num_samples = 0, this.num_channels = 0, this.in_samplerate = 0, this.out_samplerate = 0, this.scale = 0, this.scale_left = 0, this.scale_right = 0, this.analysis = !1, this.bWriteVbrTag = !1, this.decode_only = !1, this.quality = 0, this.mode = Wa.STEREO, this.force_ms = !1, this.free_format = !1, this.findReplayGain = !1, this.decode_on_the_fly = !1, this.write_id3tag_automatic = !1, this.brate = 0, this.compression_ratio = 0, this.copyright = 0, this.original = 0, this.extension = 0, this.emphasis = 0, this.error_protection = 0, this.strict_ISO = !1, this.disable_reservoir = !1, this.quant_comp = 0, this.quant_comp_short = 0, this.experimentalY = !1, this.experimentalZ = 0, this.exp_nspsytune = 0, this.preset = 0, this.VBR = null, this.VBR_q_frac = 0, this.VBR_q = 0, this.VBR_mean_bitrate_kbps = 0, this.VBR_min_bitrate_kbps = 0, this.VBR_max_bitrate_kbps = 0, this.VBR_hard_min = 0, this.lowpassfreq = 0, this.highpassfreq = 0, this.lowpasswidth = 0, this.highpasswidth = 0, this.maskingadjust = 0, this.maskingadjust_short = 0, this.ATHonly = !1, this.ATHshort = !1, this.noATH = !1, this.ATHtype = 0, this.ATHcurve = 0, this.ATHlower = 0, this.athaa_type = 0, this.athaa_loudapprox = 0, this.athaa_sensitivity = 0, this.short_blocks = null, this.useTemporal = !1, this.interChRatio = 0, this.msfix = 0, this.tune = !1, this.tune_value_a = 0, this.version = 0, this.encoder_delay = 0, this.encoder_padding = 0, this.framesize = 0, this.frameNum = 0, this.lame_allocated_gfp = 0, this.internal_flags = null;\n}\nvar za = ja, Ja = t1(), Ta = {};\nTa.SFBMAX = Ja.SBMAX_s * 3;\nvar ie = Ta, ya = Q0, ga = ya.new_float, N1 = ya.new_int, Re = ie;\nfunction e2() {\n this.xr = ga(576), this.l3_enc = N1(576), this.scalefac = N1(Re.SFBMAX), this.xrpow_max = 0, this.part2_3_length = 0, this.big_values = 0, this.count1 = 0, this.global_gain = 0, this.scalefac_compress = 0, this.block_type = 0, this.mixed_block_flag = 0, this.table_select = N1(3), this.subblock_gain = N1(3 + 1), this.region0_count = 0, this.region1_count = 0, this.preflag = 0, this.scalefac_scale = 0, this.count1table_select = 0, this.part2_length = 0, this.sfb_lmax = 0, this.sfb_smin = 0, this.psy_lmax = 0, this.sfbmax = 0, this.psymax = 0, this.sfbdivide = 0, this.width = N1(Re.SFBMAX), this.window = N1(Re.SFBMAX), this.count1bits = 0, this.sfb_partition_table = null, this.slen = N1(4), this.max_nonzero_coeff = 0;\n var w = this;\n function Z(z) {\n return new Int32Array(z);\n }\n function X(z) {\n return new Float32Array(z);\n }\n this.assign = function(z) {\n w.xr = X(z.xr), w.l3_enc = Z(z.l3_enc), w.scalefac = Z(z.scalefac), w.xrpow_max = z.xrpow_max, w.part2_3_length = z.part2_3_length, w.big_values = z.big_values, w.count1 = z.count1, w.global_gain = z.global_gain, w.scalefac_compress = z.scalefac_compress, w.block_type = z.block_type, w.mixed_block_flag = z.mixed_block_flag, w.table_select = Z(z.table_select), w.subblock_gain = Z(z.subblock_gain), w.region0_count = z.region0_count, w.region1_count = z.region1_count, w.preflag = z.preflag, w.scalefac_scale = z.scalefac_scale, w.count1table_select = z.count1table_select, w.part2_length = z.part2_length, w.sfb_lmax = z.sfb_lmax, w.sfb_smin = z.sfb_smin, w.psy_lmax = z.psy_lmax, w.sfbmax = z.sfbmax, w.psymax = z.psymax, w.sfbdivide = z.sfbdivide, w.width = Z(z.width), w.window = Z(z.window), w.count1bits = z.count1bits, w.sfb_partition_table = z.sfb_partition_table.slice(0), w.slen = Z(z.slen), w.max_nonzero_coeff = z.max_nonzero_coeff;\n };\n}\nvar Le = e2, a2 = Q0, Qe = a2.new_int, r2 = Le;\nfunction t2() {\n this.tt = [[null, null], [null, null]], this.main_data_begin = 0, this.private_bits = 0, this.resvDrain_pre = 0, this.resvDrain_post = 0, this.scfsi = [Qe(4), Qe(4)];\n for (var w = 0; w < 2; w++)\n for (var Z = 0; Z < 2; Z++)\n this.tt[w][Z] = new r2();\n}\nvar s2 = t2, wa = Q0, g1 = wa.System, ee = wa.new_int, ae = t1();\nfunction i2(w, Z, X, z) {\n this.l = ee(1 + ae.SBMAX_l), this.s = ee(1 + ae.SBMAX_s), this.psfb21 = ee(1 + ae.PSFB21), this.psfb12 = ee(1 + ae.PSFB12);\n var u0 = this.l, W = this.s;\n arguments.length == 4 && (this.arrL = arguments[0], this.arrS = arguments[1], this.arr21 = arguments[2], this.arr12 = arguments[3], g1.arraycopy(this.arrL, 0, u0, 0, Math.min(this.arrL.length, this.l.length)), g1.arraycopy(this.arrS, 0, W, 0, Math.min(this.arrS.length, this.s.length)), g1.arraycopy(this.arr21, 0, this.psfb21, 0, Math.min(this.arr21.length, this.psfb21.length)), g1.arraycopy(this.arr12, 0, this.psfb12, 0, Math.min(this.arr12.length, this.psfb12.length)));\n}\nvar Ia = i2, Ne = Q0, xe = Ne.new_float, n2 = Ne.new_float_n, _2 = Ne.new_int, We = t1();\nfunction l2() {\n this.last_en_subshort = n2([4, 9]), this.lastAttacks = _2(4), this.pefirbuf = xe(19), this.longfact = xe(We.SBMAX_l), this.shortfact = xe(We.SBMAX_s), this.attackthre = 0, this.attackthre_s = 0;\n}\nvar v2 = l2;\nfunction o2() {\n this.sum = 0, this.seen = 0, this.want = 0, this.pos = 0, this.size = 0, this.bag = null, this.nVbrNumFrames = 0, this.nBytesWritten = 0, this.TotalFrameSize = 0;\n}\nvar h2 = o2, Y1 = Q0, u2 = Y1.new_byte, f2 = Y1.new_double, b1 = Y1.new_float, p1 = Y1.new_float_n, d1 = Y1.new_int, re = Y1.new_int_n, m2 = s2, b2 = Ia, c2 = v2, S2 = h2, je = Ea(), W0 = t1(), d2 = ie;\nE1.MFSIZE = 3 * 1152 + W0.ENCDELAY - W0.MDCTDELAY;\nE1.MAX_HEADER_BUF = 256;\nE1.MAX_BITS_PER_CHANNEL = 4095;\nE1.MAX_BITS_PER_GRANULE = 7680;\nE1.BPC = 320;\nfunction E1() {\n var w = 40;\n this.Class_ID = 0, this.lame_encode_frame_init = 0, this.iteration_init_init = 0, this.fill_buffer_resample_init = 0, this.mfbuf = p1([2, E1.MFSIZE]), this.mode_gr = 0, this.channels_in = 0, this.channels_out = 0, this.resample_ratio = 0, this.mf_samples_to_encode = 0, this.mf_size = 0, this.VBR_min_bitrate = 0, this.VBR_max_bitrate = 0, this.bitrate_index = 0, this.samplerate_index = 0, this.mode_ext = 0, this.lowpass1 = 0, this.lowpass2 = 0, this.highpass1 = 0, this.highpass2 = 0, this.noise_shaping = 0, this.noise_shaping_amp = 0, this.substep_shaping = 0, this.psymodel = 0, this.noise_shaping_stop = 0, this.subblock_gain = 0, this.use_best_huffman = 0, this.full_outer_loop = 0, this.l3_side = new m2(), this.ms_ratio = b1(2), this.padding = 0, this.frac_SpF = 0, this.slot_lag = 0, this.tag_spec = null, this.nMusicCRC = 0, this.OldValue = d1(2), this.CurrentStep = d1(2), this.masking_lower = 0, this.bv_scf = d1(576), this.pseudohalf = d1(d2.SFBMAX), this.sfb21_extra = !1, this.inbuf_old = new Array(2), this.blackfilt = new Array(2 * E1.BPC + 1), this.itime = f2(2), this.sideinfo_len = 0, this.sb_sample = p1([2, 2, 18, W0.SBLIMIT]), this.amp_filter = b1(32);\n function Z() {\n this.write_timing = 0, this.ptr = 0, this.buf = u2(w);\n }\n this.header = new Array(E1.MAX_HEADER_BUF), this.h_ptr = 0, this.w_ptr = 0, this.ancillary_flag = 0, this.ResvSize = 0, this.ResvMax = 0, this.scalefac_band = new b2(), this.minval_l = b1(W0.CBANDS), this.minval_s = b1(W0.CBANDS), this.nb_1 = p1([4, W0.CBANDS]), this.nb_2 = p1([4, W0.CBANDS]), this.nb_s1 = p1([4, W0.CBANDS]), this.nb_s2 = p1([4, W0.CBANDS]), this.s3_ss = null, this.s3_ll = null, this.decay = 0, this.thm = new Array(4), this.en = new Array(4), this.tot_ener = b1(4), this.loudness_sq = p1([2, 2]), this.loudness_sq_save = b1(2), this.mld_l = b1(W0.SBMAX_l), this.mld_s = b1(W0.SBMAX_s), this.bm_l = d1(W0.SBMAX_l), this.bo_l = d1(W0.SBMAX_l), this.bm_s = d1(W0.SBMAX_s), this.bo_s = d1(W0.SBMAX_s), this.npart_l = 0, this.npart_s = 0, this.s3ind = re([W0.CBANDS, 2]), this.s3ind_s = re([W0.CBANDS, 2]), this.numlines_s = d1(W0.CBANDS), this.numlines_l = d1(W0.CBANDS), this.rnumlines_l = b1(W0.CBANDS), this.mld_cb_l = b1(W0.CBANDS), this.mld_cb_s = b1(W0.CBANDS), this.numlines_s_num1 = 0, this.numlines_l_num1 = 0, this.pe = b1(4), this.ms_ratio_s_old = 0, this.ms_ratio_l_old = 0, this.ms_ener_ratio_old = 0, this.blocktype_old = d1(2), this.nsPsy = new c2(), this.VBR_seek_table = new S2(), this.ATH = null, this.PSY = null, this.nogap_total = 0, this.nogap_current = 0, this.decode_on_the_fly = !0, this.findReplayGain = !0, this.findPeakSample = !0, this.PeakSample = 0, this.RadioGain = 0, this.AudiophileGain = 0, this.rgdata = null, this.noclipGainChange = 0, this.noclipScale = 0, this.bitrate_stereoMode_Hist = re([16, 4 + 1]), this.bitrate_blockType_Hist = re([16, 4 + 1 + 1]), this.pinfo = null, this.hip = null, this.in_buffer_nsamples = 0, this.in_buffer_0 = null, this.in_buffer_1 = null, this.iteration_loop = null;\n for (var X = 0; X < this.en.length; X++)\n this.en[X] = new je();\n for (var X = 0; X < this.thm.length; X++)\n this.thm[X] = new je();\n for (var X = 0; X < this.header.length; X++)\n this.header[X] = new Z();\n}\nvar ne = E1, A2 = Q0, H1 = A2.new_float, V1 = t1();\nfunction R2() {\n this.useAdjust = 0, this.aaSensitivityP = 0, this.adjust = 0, this.adjustLimit = 0, this.decay = 0, this.floor = 0, this.l = H1(V1.SBMAX_l), this.s = H1(V1.SBMAX_s), this.psfb21 = H1(V1.PSFB21), this.psfb12 = H1(V1.PSFB12), this.cb_l = H1(V1.CBANDS), this.cb_s = H1(V1.CBANDS), this.eql_w = H1(V1.BLKSIZE / 2);\n}\nvar x2 = R2, La = Q0, _1 = La.System, ze = La.Arrays;\nj0.STEPS_per_dB = 100;\nj0.MAX_dB = 120;\nj0.GAIN_NOT_ENOUGH_SAMPLES = -24601;\nj0.GAIN_ANALYSIS_ERROR = 0;\nj0.GAIN_ANALYSIS_OK = 1;\nj0.INIT_GAIN_ANALYSIS_ERROR = 0;\nj0.INIT_GAIN_ANALYSIS_OK = 1;\nj0.YULE_ORDER = 10;\nj0.MAX_ORDER = j0.YULE_ORDER;\nj0.MAX_SAMP_FREQ = 48e3;\nj0.RMS_WINDOW_TIME_NUMERATOR = 1;\nj0.RMS_WINDOW_TIME_DENOMINATOR = 20;\nj0.MAX_SAMPLES_PER_WINDOW = j0.MAX_SAMP_FREQ * j0.RMS_WINDOW_TIME_NUMERATOR / j0.RMS_WINDOW_TIME_DENOMINATOR + 1;\nfunction j0() {\n var w = 64.82, Z = 0.95, X = j0.RMS_WINDOW_TIME_NUMERATOR, z = j0.RMS_WINDOW_TIME_DENOMINATOR, u0 = [\n [\n 0.038575994352,\n -3.84664617118067,\n -0.02160367184185,\n 7.81501653005538,\n -0.00123395316851,\n -11.34170355132042,\n -9291677959e-14,\n 13.05504219327545,\n -0.01655260341619,\n -12.28759895145294,\n 0.02161526843274,\n 9.4829380631979,\n -0.02074045215285,\n -5.87257861775999,\n 0.00594298065125,\n 2.75465861874613,\n 0.00306428023191,\n -0.86984376593551,\n 12025322027e-14,\n 0.13919314567432,\n 0.00288463683916\n ],\n [\n 0.0541865640643,\n -3.47845948550071,\n -0.02911007808948,\n 6.36317777566148,\n -0.00848709379851,\n -8.54751527471874,\n -0.00851165645469,\n 9.4769360780128,\n -0.00834990904936,\n -8.81498681370155,\n 0.02245293253339,\n 6.85401540936998,\n -0.02596338512915,\n -4.39470996079559,\n 0.01624864962975,\n 2.19611684890774,\n -0.00240879051584,\n -0.75104302451432,\n 0.00674613682247,\n 0.13149317958808,\n -0.00187763777362\n ],\n [\n 0.15457299681924,\n -2.37898834973084,\n -0.09331049056315,\n 2.84868151156327,\n -0.06247880153653,\n -2.64577170229825,\n 0.02163541888798,\n 2.23697657451713,\n -0.05588393329856,\n -1.67148153367602,\n 0.04781476674921,\n 1.00595954808547,\n 0.00222312597743,\n -0.45953458054983,\n 0.03174092540049,\n 0.16378164858596,\n -0.01390589421898,\n -0.05032077717131,\n 0.00651420667831,\n 0.0234789740702,\n -0.00881362733839\n ],\n [\n 0.30296907319327,\n -1.61273165137247,\n -0.22613988682123,\n 1.0797749225997,\n -0.08587323730772,\n -0.2565625775407,\n 0.03282930172664,\n -0.1627671912044,\n -0.00915702933434,\n -0.22638893773906,\n -0.02364141202522,\n 0.39120800788284,\n -0.00584456039913,\n -0.22138138954925,\n 0.06276101321749,\n 0.04500235387352,\n -828086748e-14,\n 0.02005851806501,\n 0.00205861885564,\n 0.00302439095741,\n -0.02950134983287\n ],\n [\n 0.33642304856132,\n -1.49858979367799,\n -0.2557224142557,\n 0.87350271418188,\n -0.11828570177555,\n 0.12205022308084,\n 0.11921148675203,\n -0.80774944671438,\n -0.07834489609479,\n 0.47854794562326,\n -0.0046997791438,\n -0.12453458140019,\n -0.0058950022444,\n -0.04067510197014,\n 0.05724228140351,\n 0.08333755284107,\n 0.00832043980773,\n -0.04237348025746,\n -0.0163538138454,\n 0.02977207319925,\n -0.0176017656815\n ],\n [\n 0.4491525660845,\n -0.62820619233671,\n -0.14351757464547,\n 0.29661783706366,\n -0.22784394429749,\n -0.372563729424,\n -0.01419140100551,\n 0.00213767857124,\n 0.04078262797139,\n -0.42029820170918,\n -0.12398163381748,\n 0.22199650564824,\n 0.04097565135648,\n 0.00613424350682,\n 0.10478503600251,\n 0.06747620744683,\n -0.01863887810927,\n 0.05784820375801,\n -0.03193428438915,\n 0.03222754072173,\n 0.00541907748707\n ],\n [\n 0.56619470757641,\n -1.04800335126349,\n -0.75464456939302,\n 0.29156311971249,\n 0.1624213774223,\n -0.26806001042947,\n 0.16744243493672,\n 0.00819999645858,\n -0.18901604199609,\n 0.45054734505008,\n 0.3093178284183,\n -0.33032403314006,\n -0.27562961986224,\n 0.0673936833311,\n 0.00647310677246,\n -0.04784254229033,\n 0.08647503780351,\n 0.01639907836189,\n -0.0378898455484,\n 0.01807364323573,\n -0.00588215443421\n ],\n [\n 0.58100494960553,\n -0.51035327095184,\n -0.53174909058578,\n -0.31863563325245,\n -0.14289799034253,\n -0.20256413484477,\n 0.17520704835522,\n 0.1472815413433,\n 0.02377945217615,\n 0.38952639978999,\n 0.15558449135573,\n -0.23313271880868,\n -0.25344790059353,\n -0.05246019024463,\n 0.01628462406333,\n -0.02505961724053,\n 0.06920467763959,\n 0.02442357316099,\n -0.03721611395801,\n 0.01818801111503,\n -0.00749618797172\n ],\n [\n 0.53648789255105,\n -0.2504987195602,\n -0.42163034350696,\n -0.43193942311114,\n -0.00275953611929,\n -0.03424681017675,\n 0.04267842219415,\n -0.04678328784242,\n -0.10214864179676,\n 0.26408300200955,\n 0.14590772289388,\n 0.15113130533216,\n -0.02459864859345,\n -0.17556493366449,\n -0.11202315195388,\n -0.18823009262115,\n -0.04060034127,\n 0.05477720428674,\n 0.0478866554818,\n 0.0470440968812,\n -0.02217936801134\n ]\n ], W = [\n [\n 0.98621192462708,\n -1.97223372919527,\n -1.97242384925416,\n 0.97261396931306,\n 0.98621192462708\n ],\n [\n 0.98500175787242,\n -1.96977855582618,\n -1.97000351574484,\n 0.9702284756635,\n 0.98500175787242\n ],\n [\n 0.97938932735214,\n -1.95835380975398,\n -1.95877865470428,\n 0.95920349965459,\n 0.97938932735214\n ],\n [\n 0.97531843204928,\n -1.95002759149878,\n -1.95063686409857,\n 0.95124613669835,\n 0.97531843204928\n ],\n [\n 0.97316523498161,\n -1.94561023566527,\n -1.94633046996323,\n 0.94705070426118,\n 0.97316523498161\n ],\n [\n 0.96454515552826,\n -1.92783286977036,\n -1.92909031105652,\n 0.93034775234268,\n 0.96454515552826\n ],\n [\n 0.96009142950541,\n -1.91858953033784,\n -1.92018285901082,\n 0.92177618768381,\n 0.96009142950541\n ],\n [\n 0.95856916599601,\n -1.9154210807478,\n -1.91713833199203,\n 0.91885558323625,\n 0.95856916599601\n ],\n [\n 0.94597685600279,\n -1.88903307939452,\n -1.89195371200558,\n 0.89487434461664,\n 0.94597685600279\n ]\n ];\n function Q(m, O, s0, K, t0, U) {\n for (; t0-- != 0; )\n s0[K] = 1e-10 + m[O + 0] * U[0] - s0[K - 1] * U[1] + m[O - 1] * U[2] - s0[K - 2] * U[3] + m[O - 2] * U[4] - s0[K - 3] * U[5] + m[O - 3] * U[6] - s0[K - 4] * U[7] + m[O - 4] * U[8] - s0[K - 5] * U[9] + m[O - 5] * U[10] - s0[K - 6] * U[11] + m[O - 6] * U[12] - s0[K - 7] * U[13] + m[O - 7] * U[14] - s0[K - 8] * U[15] + m[O - 8] * U[16] - s0[K - 9] * U[17] + m[O - 9] * U[18] - s0[K - 10] * U[19] + m[O - 10] * U[20], ++K, ++O;\n }\n function D(m, O, s0, K, t0, U) {\n for (; t0-- != 0; )\n s0[K] = m[O + 0] * U[0] - s0[K - 1] * U[1] + m[O - 1] * U[2] - s0[K - 2] * U[3] + m[O - 2] * U[4], ++K, ++O;\n }\n function g(m, O) {\n for (var s0 = 0; s0 < MAX_ORDER; s0++)\n m.linprebuf[s0] = m.lstepbuf[s0] = m.loutbuf[s0] = m.rinprebuf[s0] = m.rstepbuf[s0] = m.routbuf[s0] = 0;\n switch (0 | O) {\n case 48e3:\n m.reqindex = 0;\n break;\n case 44100:\n m.reqindex = 1;\n break;\n case 32e3:\n m.reqindex = 2;\n break;\n case 24e3:\n m.reqindex = 3;\n break;\n case 22050:\n m.reqindex = 4;\n break;\n case 16e3:\n m.reqindex = 5;\n break;\n case 12e3:\n m.reqindex = 6;\n break;\n case 11025:\n m.reqindex = 7;\n break;\n case 8e3:\n m.reqindex = 8;\n break;\n default:\n return INIT_GAIN_ANALYSIS_ERROR;\n }\n return m.sampleWindow = 0 | (O * X + z - 1) / z, m.lsum = 0, m.rsum = 0, m.totsamp = 0, ze.ill(m.A, 0), INIT_GAIN_ANALYSIS_OK;\n }\n this.InitGainAnalysis = function(m, O) {\n return g(m, O) != INIT_GAIN_ANALYSIS_OK ? INIT_GAIN_ANALYSIS_ERROR : (m.linpre = MAX_ORDER, m.rinpre = MAX_ORDER, m.lstep = MAX_ORDER, m.rstep = MAX_ORDER, m.lout = MAX_ORDER, m.rout = MAX_ORDER, ze.fill(m.B, 0), INIT_GAIN_ANALYSIS_OK);\n };\n function f0(m) {\n return m * m;\n }\n this.AnalyzeSamples = function(m, O, s0, K, t0, U, R) {\n var o, u, d, e, l, M, p;\n if (U == 0)\n return GAIN_ANALYSIS_OK;\n switch (p = 0, l = U, R) {\n case 1:\n K = O, t0 = s0;\n break;\n case 2:\n break;\n default:\n return GAIN_ANALYSIS_ERROR;\n }\n for (U < MAX_ORDER ? (_1.arraycopy(\n O,\n s0,\n m.linprebuf,\n MAX_ORDER,\n U\n ), _1.arraycopy(\n K,\n t0,\n m.rinprebuf,\n MAX_ORDER,\n U\n )) : (_1.arraycopy(\n O,\n s0,\n m.linprebuf,\n MAX_ORDER,\n MAX_ORDER\n ), _1.arraycopy(\n K,\n t0,\n m.rinprebuf,\n MAX_ORDER,\n MAX_ORDER\n )); l > 0; ) {\n M = l > m.sampleWindow - m.totsamp ? m.sampleWindow - m.totsamp : l, p < MAX_ORDER ? (o = m.linpre + p, u = m.linprebuf, d = m.rinpre + p, e = m.rinprebuf, M > MAX_ORDER - p && (M = MAX_ORDER - p)) : (o = s0 + p, u = O, d = t0 + p, e = K), Q(u, o, m.lstepbuf, m.lstep + m.totsamp, M, u0[m.reqindex]), Q(e, d, m.rstepbuf, m.rstep + m.totsamp, M, u0[m.reqindex]), D(\n m.lstepbuf,\n m.lstep + m.totsamp,\n m.loutbuf,\n m.lout + m.totsamp,\n M,\n W[m.reqindex]\n ), D(\n m.rstepbuf,\n m.rstep + m.totsamp,\n m.routbuf,\n m.rout + m.totsamp,\n M,\n W[m.reqindex]\n ), o = m.lout + m.totsamp, u = m.loutbuf, d = m.rout + m.totsamp, e = m.routbuf;\n for (var H = M % 8; H-- != 0; )\n m.lsum += f0(u[o++]), m.rsum += f0(e[d++]);\n for (H = M / 8; H-- != 0; )\n m.lsum += f0(u[o + 0]) + f0(u[o + 1]) + f0(u[o + 2]) + f0(u[o + 3]) + f0(u[o + 4]) + f0(u[o + 5]) + f0(u[o + 6]) + f0(u[o + 7]), o += 8, m.rsum += f0(e[d + 0]) + f0(e[d + 1]) + f0(e[d + 2]) + f0(e[d + 3]) + f0(e[d + 4]) + f0(e[d + 5]) + f0(e[d + 6]) + f0(e[d + 7]), d += 8;\n if (l -= M, p += M, m.totsamp += M, m.totsamp == m.sampleWindow) {\n var B = j0.STEPS_per_dB * 10 * Math.log10((m.lsum + m.rsum) / m.totsamp * 0.5 + 1e-37), I = B <= 0 ? 0 : 0 | B;\n I >= m.A.length && (I = m.A.length - 1), m.A[I]++, m.lsum = m.rsum = 0, _1.arraycopy(\n m.loutbuf,\n m.totsamp,\n m.loutbuf,\n 0,\n MAX_ORDER\n ), _1.arraycopy(\n m.routbuf,\n m.totsamp,\n m.routbuf,\n 0,\n MAX_ORDER\n ), _1.arraycopy(\n m.lstepbuf,\n m.totsamp,\n m.lstepbuf,\n 0,\n MAX_ORDER\n ), _1.arraycopy(\n m.rstepbuf,\n m.totsamp,\n m.rstepbuf,\n 0,\n MAX_ORDER\n ), m.totsamp = 0;\n }\n if (m.totsamp > m.sampleWindow)\n return GAIN_ANALYSIS_ERROR;\n }\n return U < MAX_ORDER ? (_1.arraycopy(\n m.linprebuf,\n U,\n m.linprebuf,\n 0,\n MAX_ORDER - U\n ), _1.arraycopy(\n m.rinprebuf,\n U,\n m.rinprebuf,\n 0,\n MAX_ORDER - U\n ), _1.arraycopy(\n O,\n s0,\n m.linprebuf,\n MAX_ORDER - U,\n U\n ), _1.arraycopy(\n K,\n t0,\n m.rinprebuf,\n MAX_ORDER - U,\n U\n )) : (_1.arraycopy(O, s0 + U - MAX_ORDER, m.linprebuf, 0, MAX_ORDER), _1.arraycopy(K, t0 + U - MAX_ORDER, m.rinprebuf, 0, MAX_ORDER)), GAIN_ANALYSIS_OK;\n };\n function A(m, O) {\n var s0, K = 0;\n for (s0 = 0; s0 < O; s0++)\n K += m[s0];\n if (K == 0)\n return GAIN_NOT_ENOUGH_SAMPLES;\n var t0 = 0 | Math.ceil(K * (1 - Z));\n for (s0 = O; s0-- > 0 && !((t0 -= m[s0]) <= 0); )\n ;\n return w - s0 / j0.STEPS_per_dB;\n }\n this.GetTitleGain = function(m) {\n for (var O = A(m.A, m.A.length), s0 = 0; s0 < m.A.length; s0++)\n m.B[s0] += m.A[s0], m.A[s0] = 0;\n for (var s0 = 0; s0 < MAX_ORDER; s0++)\n m.linprebuf[s0] = m.lstepbuf[s0] = m.loutbuf[s0] = m.rinprebuf[s0] = m.rstepbuf[s0] = m.routbuf[s0] = 0;\n return m.totsamp = 0, m.lsum = m.rsum = 0, O;\n };\n}\nvar Na = j0, pa = Q0, k1 = pa.new_float, Je = pa.new_int, l1 = Na;\nfunction M2() {\n this.linprebuf = k1(l1.MAX_ORDER * 2), this.linpre = 0, this.lstepbuf = k1(l1.MAX_SAMPLES_PER_WINDOW + l1.MAX_ORDER), this.lstep = 0, this.loutbuf = k1(l1.MAX_SAMPLES_PER_WINDOW + l1.MAX_ORDER), this.lout = 0, this.rinprebuf = k1(l1.MAX_ORDER * 2), this.rinpre = 0, this.rstepbuf = k1(l1.MAX_SAMPLES_PER_WINDOW + l1.MAX_ORDER), this.rstep = 0, this.routbuf = k1(l1.MAX_SAMPLES_PER_WINDOW + l1.MAX_ORDER), this.rout = 0, this.sampleWindow = 0, this.totsamp = 0, this.lsum = 0, this.rsum = 0, this.freqindex = 0, this.first = 0, this.A = Je(0 | l1.STEPS_per_dB * l1.MAX_dB), this.B = Je(0 | l1.STEPS_per_dB * l1.MAX_dB);\n}\nvar E2 = M2;\nfunction B2(w) {\n this.bits = w;\n}\nvar Ha = B2, pe = Q0, ge = pe.new_float, T2 = pe.new_int, ea = pe.assert, y2 = Ha, aa = t1(), w2 = ie, I2 = ne;\nfunction L2(w) {\n var Z = w;\n this.quantize = Z, this.iteration_loop = function(X, z, u0, W) {\n var Q = X.internal_flags, D = ge(w2.SFBMAX), g = ge(576), f0 = T2(2), A = 0, m, O = Q.l3_side, s0 = new y2(A);\n this.quantize.rv.ResvFrameBegin(X, s0), A = s0.bits;\n for (var K = 0; K < Q.mode_gr; K++) {\n m = this.quantize.qupvt.on_pe(\n X,\n z,\n f0,\n A,\n K,\n K\n ), Q.mode_ext == aa.MPG_MD_MS_LR && (this.quantize.ms_convert(Q.l3_side, K), this.quantize.qupvt.reduce_side(\n f0,\n u0[K],\n A,\n m\n ));\n for (var t0 = 0; t0 < Q.channels_out; t0++) {\n var U, R, o = O.tt[K][t0];\n o.block_type != aa.SHORT_TYPE ? (U = 0, R = Q.PSY.mask_adjust - U) : (U = 0, R = Q.PSY.mask_adjust_short - U), Q.masking_lower = Math.pow(\n 10,\n R * 0.1\n ), this.quantize.init_outer_loop(Q, o), this.quantize.init_xrpow(Q, o, g) && (this.quantize.qupvt.calc_xmin(\n X,\n W[K][t0],\n o,\n D\n ), this.quantize.outer_loop(\n X,\n o,\n D,\n g,\n t0,\n f0[t0]\n )), this.quantize.iteration_finish_one(Q, K, t0), ea(o.part2_3_length <= I2.MAX_BITS_PER_CHANNEL), ea(o.part2_3_length <= f0[t0]);\n }\n }\n this.quantize.rv.ResvFrameEnd(Q, A);\n };\n}\nvar N2 = L2;\nfunction q0(w, Z, X, z) {\n this.xlen = w, this.linmax = Z, this.table = X, this.hlen = z;\n}\nvar o0 = {};\no0.t1HB = [\n 1,\n 1,\n 1,\n 0\n];\no0.t2HB = [\n 1,\n 2,\n 1,\n 3,\n 1,\n 1,\n 3,\n 2,\n 0\n];\no0.t3HB = [\n 3,\n 2,\n 1,\n 1,\n 1,\n 1,\n 3,\n 2,\n 0\n];\no0.t5HB = [\n 1,\n 2,\n 6,\n 5,\n 3,\n 1,\n 4,\n 4,\n 7,\n 5,\n 7,\n 1,\n 6,\n 1,\n 1,\n 0\n];\no0.t6HB = [\n 7,\n 3,\n 5,\n 1,\n 6,\n 2,\n 3,\n 2,\n 5,\n 4,\n 4,\n 1,\n 3,\n 3,\n 2,\n 0\n];\no0.t7HB = [\n 1,\n 2,\n 10,\n 19,\n 16,\n 10,\n 3,\n 3,\n 7,\n 10,\n 5,\n 3,\n 11,\n 4,\n 13,\n 17,\n 8,\n 4,\n 12,\n 11,\n 18,\n 15,\n 11,\n 2,\n 7,\n 6,\n 9,\n 14,\n 3,\n 1,\n 6,\n 4,\n 5,\n 3,\n 2,\n 0\n];\no0.t8HB = [\n 3,\n 4,\n 6,\n 18,\n 12,\n 5,\n 5,\n 1,\n 2,\n 16,\n 9,\n 3,\n 7,\n 3,\n 5,\n 14,\n 7,\n 3,\n 19,\n 17,\n 15,\n 13,\n 10,\n 4,\n 13,\n 5,\n 8,\n 11,\n 5,\n 1,\n 12,\n 4,\n 4,\n 1,\n 1,\n 0\n];\no0.t9HB = [\n 7,\n 5,\n 9,\n 14,\n 15,\n 7,\n 6,\n 4,\n 5,\n 5,\n 6,\n 7,\n 7,\n 6,\n 8,\n 8,\n 8,\n 5,\n 15,\n 6,\n 9,\n 10,\n 5,\n 1,\n 11,\n 7,\n 9,\n 6,\n 4,\n 1,\n 14,\n 4,\n 6,\n 2,\n 6,\n 0\n];\no0.t10HB = [\n 1,\n 2,\n 10,\n 23,\n 35,\n 30,\n 12,\n 17,\n 3,\n 3,\n 8,\n 12,\n 18,\n 21,\n 12,\n 7,\n 11,\n 9,\n 15,\n 21,\n 32,\n 40,\n 19,\n 6,\n 14,\n 13,\n 22,\n 34,\n 46,\n 23,\n 18,\n 7,\n 20,\n 19,\n 33,\n 47,\n 27,\n 22,\n 9,\n 3,\n 31,\n 22,\n 41,\n 26,\n 21,\n 20,\n 5,\n 3,\n 14,\n 13,\n 10,\n 11,\n 16,\n 6,\n 5,\n 1,\n 9,\n 8,\n 7,\n 8,\n 4,\n 4,\n 2,\n 0\n];\no0.t11HB = [\n 3,\n 4,\n 10,\n 24,\n 34,\n 33,\n 21,\n 15,\n 5,\n 3,\n 4,\n 10,\n 32,\n 17,\n 11,\n 10,\n 11,\n 7,\n 13,\n 18,\n 30,\n 31,\n 20,\n 5,\n 25,\n 11,\n 19,\n 59,\n 27,\n 18,\n 12,\n 5,\n 35,\n 33,\n 31,\n 58,\n 30,\n 16,\n 7,\n 5,\n 28,\n 26,\n 32,\n 19,\n 17,\n 15,\n 8,\n 14,\n 14,\n 12,\n 9,\n 13,\n 14,\n 9,\n 4,\n 1,\n 11,\n 4,\n 6,\n 6,\n 6,\n 3,\n 2,\n 0\n];\no0.t12HB = [\n 9,\n 6,\n 16,\n 33,\n 41,\n 39,\n 38,\n 26,\n 7,\n 5,\n 6,\n 9,\n 23,\n 16,\n 26,\n 11,\n 17,\n 7,\n 11,\n 14,\n 21,\n 30,\n 10,\n 7,\n 17,\n 10,\n 15,\n 12,\n 18,\n 28,\n 14,\n 5,\n 32,\n 13,\n 22,\n 19,\n 18,\n 16,\n 9,\n 5,\n 40,\n 17,\n 31,\n 29,\n 17,\n 13,\n 4,\n 2,\n 27,\n 12,\n 11,\n 15,\n 10,\n 7,\n 4,\n 1,\n 27,\n 12,\n 8,\n 12,\n 6,\n 3,\n 1,\n 0\n];\no0.t13HB = [\n 1,\n 5,\n 14,\n 21,\n 34,\n 51,\n 46,\n 71,\n 42,\n 52,\n 68,\n 52,\n 67,\n 44,\n 43,\n 19,\n 3,\n 4,\n 12,\n 19,\n 31,\n 26,\n 44,\n 33,\n 31,\n 24,\n 32,\n 24,\n 31,\n 35,\n 22,\n 14,\n 15,\n 13,\n 23,\n 36,\n 59,\n 49,\n 77,\n 65,\n 29,\n 40,\n 30,\n 40,\n 27,\n 33,\n 42,\n 16,\n 22,\n 20,\n 37,\n 61,\n 56,\n 79,\n 73,\n 64,\n 43,\n 76,\n 56,\n 37,\n 26,\n 31,\n 25,\n 14,\n 35,\n 16,\n 60,\n 57,\n 97,\n 75,\n 114,\n 91,\n 54,\n 73,\n 55,\n 41,\n 48,\n 53,\n 23,\n 24,\n 58,\n 27,\n 50,\n 96,\n 76,\n 70,\n 93,\n 84,\n 77,\n 58,\n 79,\n 29,\n 74,\n 49,\n 41,\n 17,\n 47,\n 45,\n 78,\n 74,\n 115,\n 94,\n 90,\n 79,\n 69,\n 83,\n 71,\n 50,\n 59,\n 38,\n 36,\n 15,\n 72,\n 34,\n 56,\n 95,\n 92,\n 85,\n 91,\n 90,\n 86,\n 73,\n 77,\n 65,\n 51,\n 44,\n 43,\n 42,\n 43,\n 20,\n 30,\n 44,\n 55,\n 78,\n 72,\n 87,\n 78,\n 61,\n 46,\n 54,\n 37,\n 30,\n 20,\n 16,\n 53,\n 25,\n 41,\n 37,\n 44,\n 59,\n 54,\n 81,\n 66,\n 76,\n 57,\n 54,\n 37,\n 18,\n 39,\n 11,\n 35,\n 33,\n 31,\n 57,\n 42,\n 82,\n 72,\n 80,\n 47,\n 58,\n 55,\n 21,\n 22,\n 26,\n 38,\n 22,\n 53,\n 25,\n 23,\n 38,\n 70,\n 60,\n 51,\n 36,\n 55,\n 26,\n 34,\n 23,\n 27,\n 14,\n 9,\n 7,\n 34,\n 32,\n 28,\n 39,\n 49,\n 75,\n 30,\n 52,\n 48,\n 40,\n 52,\n 28,\n 18,\n 17,\n 9,\n 5,\n 45,\n 21,\n 34,\n 64,\n 56,\n 50,\n 49,\n 45,\n 31,\n 19,\n 12,\n 15,\n 10,\n 7,\n 6,\n 3,\n 48,\n 23,\n 20,\n 39,\n 36,\n 35,\n 53,\n 21,\n 16,\n 23,\n 13,\n 10,\n 6,\n 1,\n 4,\n 2,\n 16,\n 15,\n 17,\n 27,\n 25,\n 20,\n 29,\n 11,\n 17,\n 12,\n 16,\n 8,\n 1,\n 1,\n 0,\n 1\n];\no0.t15HB = [\n 7,\n 12,\n 18,\n 53,\n 47,\n 76,\n 124,\n 108,\n 89,\n 123,\n 108,\n 119,\n 107,\n 81,\n 122,\n 63,\n 13,\n 5,\n 16,\n 27,\n 46,\n 36,\n 61,\n 51,\n 42,\n 70,\n 52,\n 83,\n 65,\n 41,\n 59,\n 36,\n 19,\n 17,\n 15,\n 24,\n 41,\n 34,\n 59,\n 48,\n 40,\n 64,\n 50,\n 78,\n 62,\n 80,\n 56,\n 33,\n 29,\n 28,\n 25,\n 43,\n 39,\n 63,\n 55,\n 93,\n 76,\n 59,\n 93,\n 72,\n 54,\n 75,\n 50,\n 29,\n 52,\n 22,\n 42,\n 40,\n 67,\n 57,\n 95,\n 79,\n 72,\n 57,\n 89,\n 69,\n 49,\n 66,\n 46,\n 27,\n 77,\n 37,\n 35,\n 66,\n 58,\n 52,\n 91,\n 74,\n 62,\n 48,\n 79,\n 63,\n 90,\n 62,\n 40,\n 38,\n 125,\n 32,\n 60,\n 56,\n 50,\n 92,\n 78,\n 65,\n 55,\n 87,\n 71,\n 51,\n 73,\n 51,\n 70,\n 30,\n 109,\n 53,\n 49,\n 94,\n 88,\n 75,\n 66,\n 122,\n 91,\n 73,\n 56,\n 42,\n 64,\n 44,\n 21,\n 25,\n 90,\n 43,\n 41,\n 77,\n 73,\n 63,\n 56,\n 92,\n 77,\n 66,\n 47,\n 67,\n 48,\n 53,\n 36,\n 20,\n 71,\n 34,\n 67,\n 60,\n 58,\n 49,\n 88,\n 76,\n 67,\n 106,\n 71,\n 54,\n 38,\n 39,\n 23,\n 15,\n 109,\n 53,\n 51,\n 47,\n 90,\n 82,\n 58,\n 57,\n 48,\n 72,\n 57,\n 41,\n 23,\n 27,\n 62,\n 9,\n 86,\n 42,\n 40,\n 37,\n 70,\n 64,\n 52,\n 43,\n 70,\n 55,\n 42,\n 25,\n 29,\n 18,\n 11,\n 11,\n 118,\n 68,\n 30,\n 55,\n 50,\n 46,\n 74,\n 65,\n 49,\n 39,\n 24,\n 16,\n 22,\n 13,\n 14,\n 7,\n 91,\n 44,\n 39,\n 38,\n 34,\n 63,\n 52,\n 45,\n 31,\n 52,\n 28,\n 19,\n 14,\n 8,\n 9,\n 3,\n 123,\n 60,\n 58,\n 53,\n 47,\n 43,\n 32,\n 22,\n 37,\n 24,\n 17,\n 12,\n 15,\n 10,\n 2,\n 1,\n 71,\n 37,\n 34,\n 30,\n 28,\n 20,\n 17,\n 26,\n 21,\n 16,\n 10,\n 6,\n 8,\n 6,\n 2,\n 0\n];\no0.t16HB = [\n 1,\n 5,\n 14,\n 44,\n 74,\n 63,\n 110,\n 93,\n 172,\n 149,\n 138,\n 242,\n 225,\n 195,\n 376,\n 17,\n 3,\n 4,\n 12,\n 20,\n 35,\n 62,\n 53,\n 47,\n 83,\n 75,\n 68,\n 119,\n 201,\n 107,\n 207,\n 9,\n 15,\n 13,\n 23,\n 38,\n 67,\n 58,\n 103,\n 90,\n 161,\n 72,\n 127,\n 117,\n 110,\n 209,\n 206,\n 16,\n 45,\n 21,\n 39,\n 69,\n 64,\n 114,\n 99,\n 87,\n 158,\n 140,\n 252,\n 212,\n 199,\n 387,\n 365,\n 26,\n 75,\n 36,\n 68,\n 65,\n 115,\n 101,\n 179,\n 164,\n 155,\n 264,\n 246,\n 226,\n 395,\n 382,\n 362,\n 9,\n 66,\n 30,\n 59,\n 56,\n 102,\n 185,\n 173,\n 265,\n 142,\n 253,\n 232,\n 400,\n 388,\n 378,\n 445,\n 16,\n 111,\n 54,\n 52,\n 100,\n 184,\n 178,\n 160,\n 133,\n 257,\n 244,\n 228,\n 217,\n 385,\n 366,\n 715,\n 10,\n 98,\n 48,\n 91,\n 88,\n 165,\n 157,\n 148,\n 261,\n 248,\n 407,\n 397,\n 372,\n 380,\n 889,\n 884,\n 8,\n 85,\n 84,\n 81,\n 159,\n 156,\n 143,\n 260,\n 249,\n 427,\n 401,\n 392,\n 383,\n 727,\n 713,\n 708,\n 7,\n 154,\n 76,\n 73,\n 141,\n 131,\n 256,\n 245,\n 426,\n 406,\n 394,\n 384,\n 735,\n 359,\n 710,\n 352,\n 11,\n 139,\n 129,\n 67,\n 125,\n 247,\n 233,\n 229,\n 219,\n 393,\n 743,\n 737,\n 720,\n 885,\n 882,\n 439,\n 4,\n 243,\n 120,\n 118,\n 115,\n 227,\n 223,\n 396,\n 746,\n 742,\n 736,\n 721,\n 712,\n 706,\n 223,\n 436,\n 6,\n 202,\n 224,\n 222,\n 218,\n 216,\n 389,\n 386,\n 381,\n 364,\n 888,\n 443,\n 707,\n 440,\n 437,\n 1728,\n 4,\n 747,\n 211,\n 210,\n 208,\n 370,\n 379,\n 734,\n 723,\n 714,\n 1735,\n 883,\n 877,\n 876,\n 3459,\n 865,\n 2,\n 377,\n 369,\n 102,\n 187,\n 726,\n 722,\n 358,\n 711,\n 709,\n 866,\n 1734,\n 871,\n 3458,\n 870,\n 434,\n 0,\n 12,\n 10,\n 7,\n 11,\n 10,\n 17,\n 11,\n 9,\n 13,\n 12,\n 10,\n 7,\n 5,\n 3,\n 1,\n 3\n];\no0.t24HB = [\n 15,\n 13,\n 46,\n 80,\n 146,\n 262,\n 248,\n 434,\n 426,\n 669,\n 653,\n 649,\n 621,\n 517,\n 1032,\n 88,\n 14,\n 12,\n 21,\n 38,\n 71,\n 130,\n 122,\n 216,\n 209,\n 198,\n 327,\n 345,\n 319,\n 297,\n 279,\n 42,\n 47,\n 22,\n 41,\n 74,\n 68,\n 128,\n 120,\n 221,\n 207,\n 194,\n 182,\n 340,\n 315,\n 295,\n 541,\n 18,\n 81,\n 39,\n 75,\n 70,\n 134,\n 125,\n 116,\n 220,\n 204,\n 190,\n 178,\n 325,\n 311,\n 293,\n 271,\n 16,\n 147,\n 72,\n 69,\n 135,\n 127,\n 118,\n 112,\n 210,\n 200,\n 188,\n 352,\n 323,\n 306,\n 285,\n 540,\n 14,\n 263,\n 66,\n 129,\n 126,\n 119,\n 114,\n 214,\n 202,\n 192,\n 180,\n 341,\n 317,\n 301,\n 281,\n 262,\n 12,\n 249,\n 123,\n 121,\n 117,\n 113,\n 215,\n 206,\n 195,\n 185,\n 347,\n 330,\n 308,\n 291,\n 272,\n 520,\n 10,\n 435,\n 115,\n 111,\n 109,\n 211,\n 203,\n 196,\n 187,\n 353,\n 332,\n 313,\n 298,\n 283,\n 531,\n 381,\n 17,\n 427,\n 212,\n 208,\n 205,\n 201,\n 193,\n 186,\n 177,\n 169,\n 320,\n 303,\n 286,\n 268,\n 514,\n 377,\n 16,\n 335,\n 199,\n 197,\n 191,\n 189,\n 181,\n 174,\n 333,\n 321,\n 305,\n 289,\n 275,\n 521,\n 379,\n 371,\n 11,\n 668,\n 184,\n 183,\n 179,\n 175,\n 344,\n 331,\n 314,\n 304,\n 290,\n 277,\n 530,\n 383,\n 373,\n 366,\n 10,\n 652,\n 346,\n 171,\n 168,\n 164,\n 318,\n 309,\n 299,\n 287,\n 276,\n 263,\n 513,\n 375,\n 368,\n 362,\n 6,\n 648,\n 322,\n 316,\n 312,\n 307,\n 302,\n 292,\n 284,\n 269,\n 261,\n 512,\n 376,\n 370,\n 364,\n 359,\n 4,\n 620,\n 300,\n 296,\n 294,\n 288,\n 282,\n 273,\n 266,\n 515,\n 380,\n 374,\n 369,\n 365,\n 361,\n 357,\n 2,\n 1033,\n 280,\n 278,\n 274,\n 267,\n 264,\n 259,\n 382,\n 378,\n 372,\n 367,\n 363,\n 360,\n 358,\n 356,\n 0,\n 43,\n 20,\n 19,\n 17,\n 15,\n 13,\n 11,\n 9,\n 7,\n 6,\n 4,\n 7,\n 5,\n 3,\n 1,\n 3\n];\no0.t32HB = [\n 1,\n 10,\n 8,\n 20,\n 12,\n 20,\n 16,\n 32,\n 14,\n 12,\n 24,\n 0,\n 28,\n 16,\n 24,\n 16\n];\no0.t33HB = [\n 15,\n 28,\n 26,\n 48,\n 22,\n 40,\n 36,\n 64,\n 14,\n 24,\n 20,\n 32,\n 12,\n 16,\n 8,\n 0\n];\no0.t1l = [\n 1,\n 4,\n 3,\n 5\n];\no0.t2l = [\n 1,\n 4,\n 7,\n 4,\n 5,\n 7,\n 6,\n 7,\n 8\n];\no0.t3l = [\n 2,\n 3,\n 7,\n 4,\n 4,\n 7,\n 6,\n 7,\n 8\n];\no0.t5l = [\n 1,\n 4,\n 7,\n 8,\n 4,\n 5,\n 8,\n 9,\n 7,\n 8,\n 9,\n 10,\n 8,\n 8,\n 9,\n 10\n];\no0.t6l = [\n 3,\n 4,\n 6,\n 8,\n 4,\n 4,\n 6,\n 7,\n 5,\n 6,\n 7,\n 8,\n 7,\n 7,\n 8,\n 9\n];\no0.t7l = [\n 1,\n 4,\n 7,\n 9,\n 9,\n 10,\n 4,\n 6,\n 8,\n 9,\n 9,\n 10,\n 7,\n 7,\n 9,\n 10,\n 10,\n 11,\n 8,\n 9,\n 10,\n 11,\n 11,\n 11,\n 8,\n 9,\n 10,\n 11,\n 11,\n 12,\n 9,\n 10,\n 11,\n 12,\n 12,\n 12\n];\no0.t8l = [\n 2,\n 4,\n 7,\n 9,\n 9,\n 10,\n 4,\n 4,\n 6,\n 10,\n 10,\n 10,\n 7,\n 6,\n 8,\n 10,\n 10,\n 11,\n 9,\n 10,\n 10,\n 11,\n 11,\n 12,\n 9,\n 9,\n 10,\n 11,\n 12,\n 12,\n 10,\n 10,\n 11,\n 11,\n 13,\n 13\n];\no0.t9l = [\n 3,\n 4,\n 6,\n 7,\n 9,\n 10,\n 4,\n 5,\n 6,\n 7,\n 8,\n 10,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 7,\n 7,\n 8,\n 9,\n 9,\n 10,\n 8,\n 8,\n 9,\n 9,\n 10,\n 11,\n 9,\n 9,\n 10,\n 10,\n 11,\n 11\n];\no0.t10l = [\n 1,\n 4,\n 7,\n 9,\n 10,\n 10,\n 10,\n 11,\n 4,\n 6,\n 8,\n 9,\n 10,\n 11,\n 10,\n 10,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 11,\n 11,\n 8,\n 9,\n 10,\n 11,\n 12,\n 12,\n 11,\n 12,\n 9,\n 10,\n 11,\n 12,\n 12,\n 12,\n 12,\n 12,\n 10,\n 11,\n 12,\n 12,\n 13,\n 13,\n 12,\n 13,\n 9,\n 10,\n 11,\n 12,\n 12,\n 12,\n 13,\n 13,\n 10,\n 10,\n 11,\n 12,\n 12,\n 13,\n 13,\n 13\n];\no0.t11l = [\n 2,\n 4,\n 6,\n 8,\n 9,\n 10,\n 9,\n 10,\n 4,\n 5,\n 6,\n 8,\n 10,\n 10,\n 9,\n 10,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 10,\n 10,\n 8,\n 8,\n 9,\n 11,\n 10,\n 12,\n 10,\n 11,\n 9,\n 10,\n 10,\n 11,\n 11,\n 12,\n 11,\n 12,\n 9,\n 10,\n 11,\n 12,\n 12,\n 13,\n 12,\n 13,\n 9,\n 9,\n 9,\n 10,\n 11,\n 12,\n 12,\n 12,\n 9,\n 9,\n 10,\n 11,\n 12,\n 12,\n 12,\n 12\n];\no0.t12l = [\n 4,\n 4,\n 6,\n 8,\n 9,\n 10,\n 10,\n 10,\n 4,\n 5,\n 6,\n 7,\n 9,\n 9,\n 10,\n 10,\n 6,\n 6,\n 7,\n 8,\n 9,\n 10,\n 9,\n 10,\n 7,\n 7,\n 8,\n 8,\n 9,\n 10,\n 10,\n 10,\n 8,\n 8,\n 9,\n 9,\n 10,\n 10,\n 10,\n 11,\n 9,\n 9,\n 10,\n 10,\n 10,\n 11,\n 10,\n 11,\n 9,\n 9,\n 9,\n 10,\n 10,\n 11,\n 11,\n 12,\n 10,\n 10,\n 10,\n 11,\n 11,\n 11,\n 11,\n 12\n];\no0.t13l = [\n 1,\n 5,\n 7,\n 8,\n 9,\n 10,\n 10,\n 11,\n 10,\n 11,\n 12,\n 12,\n 13,\n 13,\n 14,\n 14,\n 4,\n 6,\n 8,\n 9,\n 10,\n 10,\n 11,\n 11,\n 11,\n 11,\n 12,\n 12,\n 13,\n 14,\n 14,\n 14,\n 7,\n 8,\n 9,\n 10,\n 11,\n 11,\n 12,\n 12,\n 11,\n 12,\n 12,\n 13,\n 13,\n 14,\n 15,\n 15,\n 8,\n 9,\n 10,\n 11,\n 11,\n 12,\n 12,\n 12,\n 12,\n 13,\n 13,\n 13,\n 13,\n 14,\n 15,\n 15,\n 9,\n 9,\n 11,\n 11,\n 12,\n 12,\n 13,\n 13,\n 12,\n 13,\n 13,\n 14,\n 14,\n 15,\n 15,\n 16,\n 10,\n 10,\n 11,\n 12,\n 12,\n 12,\n 13,\n 13,\n 13,\n 13,\n 14,\n 13,\n 15,\n 15,\n 16,\n 16,\n 10,\n 11,\n 12,\n 12,\n 13,\n 13,\n 13,\n 13,\n 13,\n 14,\n 14,\n 14,\n 15,\n 15,\n 16,\n 16,\n 11,\n 11,\n 12,\n 13,\n 13,\n 13,\n 14,\n 14,\n 14,\n 14,\n 15,\n 15,\n 15,\n 16,\n 18,\n 18,\n 10,\n 10,\n 11,\n 12,\n 12,\n 13,\n 13,\n 14,\n 14,\n 14,\n 14,\n 15,\n 15,\n 16,\n 17,\n 17,\n 11,\n 11,\n 12,\n 12,\n 13,\n 13,\n 13,\n 15,\n 14,\n 15,\n 15,\n 16,\n 16,\n 16,\n 18,\n 17,\n 11,\n 12,\n 12,\n 13,\n 13,\n 14,\n 14,\n 15,\n 14,\n 15,\n 16,\n 15,\n 16,\n 17,\n 18,\n 19,\n 12,\n 12,\n 12,\n 13,\n 14,\n 14,\n 14,\n 14,\n 15,\n 15,\n 15,\n 16,\n 17,\n 17,\n 17,\n 18,\n 12,\n 13,\n 13,\n 14,\n 14,\n 15,\n 14,\n 15,\n 16,\n 16,\n 17,\n 17,\n 17,\n 18,\n 18,\n 18,\n 13,\n 13,\n 14,\n 15,\n 15,\n 15,\n 16,\n 16,\n 16,\n 16,\n 16,\n 17,\n 18,\n 17,\n 18,\n 18,\n 14,\n 14,\n 14,\n 15,\n 15,\n 15,\n 17,\n 16,\n 16,\n 19,\n 17,\n 17,\n 17,\n 19,\n 18,\n 18,\n 13,\n 14,\n 15,\n 16,\n 16,\n 16,\n 17,\n 16,\n 17,\n 17,\n 18,\n 18,\n 21,\n 20,\n 21,\n 18\n];\no0.t15l = [\n 3,\n 5,\n 6,\n 8,\n 8,\n 9,\n 10,\n 10,\n 10,\n 11,\n 11,\n 12,\n 12,\n 12,\n 13,\n 14,\n 5,\n 5,\n 7,\n 8,\n 9,\n 9,\n 10,\n 10,\n 10,\n 11,\n 11,\n 12,\n 12,\n 12,\n 13,\n 13,\n 6,\n 7,\n 7,\n 8,\n 9,\n 9,\n 10,\n 10,\n 10,\n 11,\n 11,\n 12,\n 12,\n 13,\n 13,\n 13,\n 7,\n 8,\n 8,\n 9,\n 9,\n 10,\n 10,\n 11,\n 11,\n 11,\n 12,\n 12,\n 12,\n 13,\n 13,\n 13,\n 8,\n 8,\n 9,\n 9,\n 10,\n 10,\n 11,\n 11,\n 11,\n 11,\n 12,\n 12,\n 12,\n 13,\n 13,\n 13,\n 9,\n 9,\n 9,\n 10,\n 10,\n 10,\n 11,\n 11,\n 11,\n 11,\n 12,\n 12,\n 13,\n 13,\n 13,\n 14,\n 10,\n 9,\n 10,\n 10,\n 10,\n 11,\n 11,\n 11,\n 11,\n 12,\n 12,\n 12,\n 13,\n 13,\n 14,\n 14,\n 10,\n 10,\n 10,\n 11,\n 11,\n 11,\n 11,\n 12,\n 12,\n 12,\n 12,\n 12,\n 13,\n 13,\n 13,\n 14,\n 10,\n 10,\n 10,\n 11,\n 11,\n 11,\n 11,\n 12,\n 12,\n 12,\n 12,\n 13,\n 13,\n 14,\n 14,\n 14,\n 10,\n 10,\n 11,\n 11,\n 11,\n 11,\n 12,\n 12,\n 12,\n 13,\n 13,\n 13,\n 13,\n 14,\n 14,\n 14,\n 11,\n 11,\n 11,\n 11,\n 12,\n 12,\n 12,\n 12,\n 12,\n 13,\n 13,\n 13,\n 13,\n 14,\n 15,\n 14,\n 11,\n 11,\n 11,\n 11,\n 12,\n 12,\n 12,\n 12,\n 13,\n 13,\n 13,\n 13,\n 14,\n 14,\n 14,\n 15,\n 12,\n 12,\n 11,\n 12,\n 12,\n 12,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 14,\n 14,\n 15,\n 15,\n 12,\n 12,\n 12,\n 12,\n 12,\n 13,\n 13,\n 13,\n 13,\n 14,\n 14,\n 14,\n 14,\n 14,\n 15,\n 15,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 14,\n 14,\n 14,\n 14,\n 15,\n 15,\n 14,\n 15,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 14,\n 14,\n 14,\n 14,\n 14,\n 15,\n 15,\n 15,\n 15\n];\no0.t16_5l = [\n 1,\n 5,\n 7,\n 9,\n 10,\n 10,\n 11,\n 11,\n 12,\n 12,\n 12,\n 13,\n 13,\n 13,\n 14,\n 11,\n 4,\n 6,\n 8,\n 9,\n 10,\n 11,\n 11,\n 11,\n 12,\n 12,\n 12,\n 13,\n 14,\n 13,\n 14,\n 11,\n 7,\n 8,\n 9,\n 10,\n 11,\n 11,\n 12,\n 12,\n 13,\n 12,\n 13,\n 13,\n 13,\n 14,\n 14,\n 12,\n 9,\n 9,\n 10,\n 11,\n 11,\n 12,\n 12,\n 12,\n 13,\n 13,\n 14,\n 14,\n 14,\n 15,\n 15,\n 13,\n 10,\n 10,\n 11,\n 11,\n 12,\n 12,\n 13,\n 13,\n 13,\n 14,\n 14,\n 14,\n 15,\n 15,\n 15,\n 12,\n 10,\n 10,\n 11,\n 11,\n 12,\n 13,\n 13,\n 14,\n 13,\n 14,\n 14,\n 15,\n 15,\n 15,\n 16,\n 13,\n 11,\n 11,\n 11,\n 12,\n 13,\n 13,\n 13,\n 13,\n 14,\n 14,\n 14,\n 14,\n 15,\n 15,\n 16,\n 13,\n 11,\n 11,\n 12,\n 12,\n 13,\n 13,\n 13,\n 14,\n 14,\n 15,\n 15,\n 15,\n 15,\n 17,\n 17,\n 13,\n 11,\n 12,\n 12,\n 13,\n 13,\n 13,\n 14,\n 14,\n 15,\n 15,\n 15,\n 15,\n 16,\n 16,\n 16,\n 13,\n 12,\n 12,\n 12,\n 13,\n 13,\n 14,\n 14,\n 15,\n 15,\n 15,\n 15,\n 16,\n 15,\n 16,\n 15,\n 14,\n 12,\n 13,\n 12,\n 13,\n 14,\n 14,\n 14,\n 14,\n 15,\n 16,\n 16,\n 16,\n 17,\n 17,\n 16,\n 13,\n 13,\n 13,\n 13,\n 13,\n 14,\n 14,\n 15,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 15,\n 16,\n 14,\n 13,\n 14,\n 14,\n 14,\n 14,\n 15,\n 15,\n 15,\n 15,\n 17,\n 16,\n 16,\n 16,\n 16,\n 18,\n 14,\n 15,\n 14,\n 14,\n 14,\n 15,\n 15,\n 16,\n 16,\n 16,\n 18,\n 17,\n 17,\n 17,\n 19,\n 17,\n 14,\n 14,\n 15,\n 13,\n 14,\n 16,\n 16,\n 15,\n 16,\n 16,\n 17,\n 18,\n 17,\n 19,\n 17,\n 16,\n 14,\n 11,\n 11,\n 11,\n 12,\n 12,\n 13,\n 13,\n 13,\n 14,\n 14,\n 14,\n 14,\n 14,\n 14,\n 14,\n 12\n];\no0.t16l = [\n 1,\n 5,\n 7,\n 9,\n 10,\n 10,\n 11,\n 11,\n 12,\n 12,\n 12,\n 13,\n 13,\n 13,\n 14,\n 10,\n 4,\n 6,\n 8,\n 9,\n 10,\n 11,\n 11,\n 11,\n 12,\n 12,\n 12,\n 13,\n 14,\n 13,\n 14,\n 10,\n 7,\n 8,\n 9,\n 10,\n 11,\n 11,\n 12,\n 12,\n 13,\n 12,\n 13,\n 13,\n 13,\n 14,\n 14,\n 11,\n 9,\n 9,\n 10,\n 11,\n 11,\n 12,\n 12,\n 12,\n 13,\n 13,\n 14,\n 14,\n 14,\n 15,\n 15,\n 12,\n 10,\n 10,\n 11,\n 11,\n 12,\n 12,\n 13,\n 13,\n 13,\n 14,\n 14,\n 14,\n 15,\n 15,\n 15,\n 11,\n 10,\n 10,\n 11,\n 11,\n 12,\n 13,\n 13,\n 14,\n 13,\n 14,\n 14,\n 15,\n 15,\n 15,\n 16,\n 12,\n 11,\n 11,\n 11,\n 12,\n 13,\n 13,\n 13,\n 13,\n 14,\n 14,\n 14,\n 14,\n 15,\n 15,\n 16,\n 12,\n 11,\n 11,\n 12,\n 12,\n 13,\n 13,\n 13,\n 14,\n 14,\n 15,\n 15,\n 15,\n 15,\n 17,\n 17,\n 12,\n 11,\n 12,\n 12,\n 13,\n 13,\n 13,\n 14,\n 14,\n 15,\n 15,\n 15,\n 15,\n 16,\n 16,\n 16,\n 12,\n 12,\n 12,\n 12,\n 13,\n 13,\n 14,\n 14,\n 15,\n 15,\n 15,\n 15,\n 16,\n 15,\n 16,\n 15,\n 13,\n 12,\n 13,\n 12,\n 13,\n 14,\n 14,\n 14,\n 14,\n 15,\n 16,\n 16,\n 16,\n 17,\n 17,\n 16,\n 12,\n 13,\n 13,\n 13,\n 13,\n 14,\n 14,\n 15,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 15,\n 16,\n 13,\n 13,\n 14,\n 14,\n 14,\n 14,\n 15,\n 15,\n 15,\n 15,\n 17,\n 16,\n 16,\n 16,\n 16,\n 18,\n 13,\n 15,\n 14,\n 14,\n 14,\n 15,\n 15,\n 16,\n 16,\n 16,\n 18,\n 17,\n 17,\n 17,\n 19,\n 17,\n 13,\n 14,\n 15,\n 13,\n 14,\n 16,\n 16,\n 15,\n 16,\n 16,\n 17,\n 18,\n 17,\n 19,\n 17,\n 16,\n 13,\n 10,\n 10,\n 10,\n 11,\n 11,\n 12,\n 12,\n 12,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 10\n];\no0.t24l = [\n 4,\n 5,\n 7,\n 8,\n 9,\n 10,\n 10,\n 11,\n 11,\n 12,\n 12,\n 12,\n 12,\n 12,\n 13,\n 10,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 10,\n 11,\n 11,\n 11,\n 12,\n 12,\n 12,\n 12,\n 12,\n 10,\n 7,\n 7,\n 8,\n 9,\n 9,\n 10,\n 10,\n 11,\n 11,\n 11,\n 11,\n 12,\n 12,\n 12,\n 13,\n 9,\n 8,\n 8,\n 9,\n 9,\n 10,\n 10,\n 10,\n 11,\n 11,\n 11,\n 11,\n 12,\n 12,\n 12,\n 12,\n 9,\n 9,\n 9,\n 9,\n 10,\n 10,\n 10,\n 10,\n 11,\n 11,\n 11,\n 12,\n 12,\n 12,\n 12,\n 13,\n 9,\n 10,\n 9,\n 10,\n 10,\n 10,\n 10,\n 11,\n 11,\n 11,\n 11,\n 12,\n 12,\n 12,\n 12,\n 12,\n 9,\n 10,\n 10,\n 10,\n 10,\n 10,\n 11,\n 11,\n 11,\n 11,\n 12,\n 12,\n 12,\n 12,\n 12,\n 13,\n 9,\n 11,\n 10,\n 10,\n 10,\n 11,\n 11,\n 11,\n 11,\n 12,\n 12,\n 12,\n 12,\n 12,\n 13,\n 13,\n 10,\n 11,\n 11,\n 11,\n 11,\n 11,\n 11,\n 11,\n 11,\n 11,\n 12,\n 12,\n 12,\n 12,\n 13,\n 13,\n 10,\n 11,\n 11,\n 11,\n 11,\n 11,\n 11,\n 11,\n 12,\n 12,\n 12,\n 12,\n 12,\n 13,\n 13,\n 13,\n 10,\n 12,\n 11,\n 11,\n 11,\n 11,\n 12,\n 12,\n 12,\n 12,\n 12,\n 12,\n 13,\n 13,\n 13,\n 13,\n 10,\n 12,\n 12,\n 11,\n 11,\n 11,\n 12,\n 12,\n 12,\n 12,\n 12,\n 12,\n 13,\n 13,\n 13,\n 13,\n 10,\n 12,\n 12,\n 12,\n 12,\n 12,\n 12,\n 12,\n 12,\n 12,\n 12,\n 13,\n 13,\n 13,\n 13,\n 13,\n 10,\n 12,\n 12,\n 12,\n 12,\n 12,\n 12,\n 12,\n 12,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 10,\n 13,\n 12,\n 12,\n 12,\n 12,\n 12,\n 12,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 10,\n 9,\n 9,\n 9,\n 9,\n 9,\n 9,\n 9,\n 9,\n 9,\n 9,\n 9,\n 10,\n 10,\n 10,\n 10,\n 6\n];\no0.t32l = [\n 1 + 0,\n 4 + 1,\n 4 + 1,\n 5 + 2,\n 4 + 1,\n 6 + 2,\n 5 + 2,\n 6 + 3,\n 4 + 1,\n 5 + 2,\n 5 + 2,\n 6 + 3,\n 5 + 2,\n 6 + 3,\n 6 + 3,\n 6 + 4\n];\no0.t33l = [\n 4 + 0,\n 4 + 1,\n 4 + 1,\n 4 + 2,\n 4 + 1,\n 4 + 2,\n 4 + 2,\n 4 + 3,\n 4 + 1,\n 4 + 2,\n 4 + 2,\n 4 + 3,\n 4 + 2,\n 4 + 3,\n 4 + 3,\n 4 + 4\n];\no0.ht = [\n /* xlen, linmax, table, hlen */\n new q0(0, 0, null, null),\n new q0(2, 0, o0.t1HB, o0.t1l),\n new q0(3, 0, o0.t2HB, o0.t2l),\n new q0(3, 0, o0.t3HB, o0.t3l),\n new q0(0, 0, null, null),\n /* Apparently not used */\n new q0(4, 0, o0.t5HB, o0.t5l),\n new q0(4, 0, o0.t6HB, o0.t6l),\n new q0(6, 0, o0.t7HB, o0.t7l),\n new q0(6, 0, o0.t8HB, o0.t8l),\n new q0(6, 0, o0.t9HB, o0.t9l),\n new q0(8, 0, o0.t10HB, o0.t10l),\n new q0(8, 0, o0.t11HB, o0.t11l),\n new q0(8, 0, o0.t12HB, o0.t12l),\n new q0(16, 0, o0.t13HB, o0.t13l),\n new q0(0, 0, null, o0.t16_5l),\n /* Apparently not used */\n new q0(16, 0, o0.t15HB, o0.t15l),\n new q0(1, 1, o0.t16HB, o0.t16l),\n new q0(2, 3, o0.t16HB, o0.t16l),\n new q0(3, 7, o0.t16HB, o0.t16l),\n new q0(4, 15, o0.t16HB, o0.t16l),\n new q0(6, 63, o0.t16HB, o0.t16l),\n new q0(8, 255, o0.t16HB, o0.t16l),\n new q0(10, 1023, o0.t16HB, o0.t16l),\n new q0(13, 8191, o0.t16HB, o0.t16l),\n new q0(4, 15, o0.t24HB, o0.t24l),\n new q0(5, 31, o0.t24HB, o0.t24l),\n new q0(6, 63, o0.t24HB, o0.t24l),\n new q0(7, 127, o0.t24HB, o0.t24l),\n new q0(8, 255, o0.t24HB, o0.t24l),\n new q0(9, 511, o0.t24HB, o0.t24l),\n new q0(11, 2047, o0.t24HB, o0.t24l),\n new q0(13, 8191, o0.t24HB, o0.t24l),\n new q0(0, 0, o0.t32HB, o0.t32l),\n new q0(0, 0, o0.t33HB, o0.t33l)\n];\no0.largetbl = [\n 65540,\n 327685,\n 458759,\n 589832,\n 655369,\n 655370,\n 720906,\n 720907,\n 786443,\n 786444,\n 786444,\n 851980,\n 851980,\n 851980,\n 917517,\n 655370,\n 262149,\n 393222,\n 524295,\n 589832,\n 655369,\n 720906,\n 720906,\n 720907,\n 786443,\n 786443,\n 786444,\n 851980,\n 917516,\n 851980,\n 917516,\n 655370,\n 458759,\n 524295,\n 589832,\n 655369,\n 720905,\n 720906,\n 786442,\n 786443,\n 851979,\n 786443,\n 851979,\n 851980,\n 851980,\n 917516,\n 917517,\n 720905,\n 589832,\n 589832,\n 655369,\n 720905,\n 720906,\n 786442,\n 786442,\n 786443,\n 851979,\n 851979,\n 917515,\n 917516,\n 917516,\n 983052,\n 983052,\n 786441,\n 655369,\n 655369,\n 720905,\n 720906,\n 786442,\n 786442,\n 851978,\n 851979,\n 851979,\n 917515,\n 917516,\n 917516,\n 983052,\n 983052,\n 983053,\n 720905,\n 655370,\n 655369,\n 720906,\n 720906,\n 786442,\n 851978,\n 851979,\n 917515,\n 851979,\n 917515,\n 917516,\n 983052,\n 983052,\n 983052,\n 1048588,\n 786441,\n 720906,\n 720906,\n 720906,\n 786442,\n 851978,\n 851979,\n 851979,\n 851979,\n 917515,\n 917516,\n 917516,\n 917516,\n 983052,\n 983052,\n 1048589,\n 786441,\n 720907,\n 720906,\n 786442,\n 786442,\n 851979,\n 851979,\n 851979,\n 917515,\n 917516,\n 983052,\n 983052,\n 983052,\n 983052,\n 1114125,\n 1114125,\n 786442,\n 720907,\n 786443,\n 786443,\n 851979,\n 851979,\n 851979,\n 917515,\n 917515,\n 983051,\n 983052,\n 983052,\n 983052,\n 1048588,\n 1048589,\n 1048589,\n 786442,\n 786443,\n 786443,\n 786443,\n 851979,\n 851979,\n 917515,\n 917515,\n 983052,\n 983052,\n 983052,\n 983052,\n 1048588,\n 983053,\n 1048589,\n 983053,\n 851978,\n 786444,\n 851979,\n 786443,\n 851979,\n 917515,\n 917516,\n 917516,\n 917516,\n 983052,\n 1048588,\n 1048588,\n 1048589,\n 1114125,\n 1114125,\n 1048589,\n 786442,\n 851980,\n 851980,\n 851979,\n 851979,\n 917515,\n 917516,\n 983052,\n 1048588,\n 1048588,\n 1048588,\n 1048588,\n 1048589,\n 1048589,\n 983053,\n 1048589,\n 851978,\n 851980,\n 917516,\n 917516,\n 917516,\n 917516,\n 983052,\n 983052,\n 983052,\n 983052,\n 1114124,\n 1048589,\n 1048589,\n 1048589,\n 1048589,\n 1179661,\n 851978,\n 983052,\n 917516,\n 917516,\n 917516,\n 983052,\n 983052,\n 1048588,\n 1048588,\n 1048589,\n 1179661,\n 1114125,\n 1114125,\n 1114125,\n 1245197,\n 1114125,\n 851978,\n 917517,\n 983052,\n 851980,\n 917516,\n 1048588,\n 1048588,\n 983052,\n 1048589,\n 1048589,\n 1114125,\n 1179661,\n 1114125,\n 1245197,\n 1114125,\n 1048589,\n 851978,\n 655369,\n 655369,\n 655369,\n 720905,\n 720905,\n 786441,\n 786441,\n 786441,\n 851977,\n 851977,\n 851977,\n 851978,\n 851978,\n 851978,\n 851978,\n 655366\n];\no0.table23 = [\n 65538,\n 262147,\n 458759,\n 262148,\n 327684,\n 458759,\n 393222,\n 458759,\n 524296\n];\no0.table56 = [\n 65539,\n 262148,\n 458758,\n 524296,\n 262148,\n 327684,\n 524294,\n 589831,\n 458757,\n 524294,\n 589831,\n 655368,\n 524295,\n 524295,\n 589832,\n 655369\n];\no0.bitrate_table = [\n [0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, -1],\n /* MPEG 2 */\n [0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, -1],\n /* MPEG 1 */\n [0, 8, 16, 24, 32, 40, 48, 56, 64, -1, -1, -1, -1, -1, -1, -1]\n /* MPEG 2.5 */\n];\no0.samplerate_table = [\n [22050, 24e3, 16e3, -1],\n [44100, 48e3, 32e3, -1],\n [11025, 12e3, 8e3, -1]\n];\no0.scfsi_band = [0, 6, 11, 16, 21];\nvar He = o0, Me, ra;\nfunction Va() {\n if (ra)\n return Me;\n ra = 1;\n var w = Ia, Z = Q0, X = Z.VbrMode, z = Z.Float, u0 = Z.Util, W = Z.new_float, Q = Z.new_int, D = Z.assert, g = t1(), f0 = Ha, A = ne;\n m.Q_MAX = 256 + 1, m.Q_MAX2 = 116, m.LARGE_BITS = 1e5, m.IXMAX_VAL = 8206;\n function m() {\n var O = Ve(), s0 = null, K = null, t0 = null;\n this.setModules = function(S, L, V) {\n s0 = S, K = L, t0 = V;\n };\n function U(S) {\n return D(0 <= S + m.Q_MAX2 && S < m.Q_MAX), p[S + m.Q_MAX2];\n }\n this.IPOW20 = function(S) {\n return D(0 <= S && S < m.Q_MAX), H[S];\n };\n var R = 2220446049250313e-31, o = m.IXMAX_VAL, u = o + 2, d = m.Q_MAX, e = m.Q_MAX2;\n m.LARGE_BITS;\n var l = 100;\n this.nr_of_sfb_block = [\n [[6, 5, 5, 5], [9, 9, 9, 9], [6, 9, 9, 9]],\n [[6, 5, 7, 3], [9, 9, 12, 6], [6, 9, 12, 6]],\n [[11, 10, 0, 0], [18, 18, 0, 0], [15, 18, 0, 0]],\n [[7, 7, 7, 0], [12, 12, 12, 0], [6, 15, 12, 0]],\n [[6, 6, 6, 3], [12, 9, 9, 6], [6, 12, 9, 6]],\n [[8, 8, 5, 0], [15, 12, 9, 0], [6, 18, 9, 0]]\n ];\n var M = [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 1,\n 1,\n 1,\n 2,\n 2,\n 3,\n 3,\n 3,\n 2,\n 0\n ];\n this.pretab = M, this.sfBandIndex = [\n // Table B.2.b: 22.05 kHz\n new w(\n [\n 0,\n 6,\n 12,\n 18,\n 24,\n 30,\n 36,\n 44,\n 54,\n 66,\n 80,\n 96,\n 116,\n 140,\n 168,\n 200,\n 238,\n 284,\n 336,\n 396,\n 464,\n 522,\n 576\n ],\n [0, 4, 8, 12, 18, 24, 32, 42, 56, 74, 100, 132, 174, 192],\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0, 0, 0]\n // sfb12 pseudo sub bands\n ),\n /* Table B.2.c: 24 kHz */\n /* docs: 332. mpg123(broken): 330 */\n new w(\n [\n 0,\n 6,\n 12,\n 18,\n 24,\n 30,\n 36,\n 44,\n 54,\n 66,\n 80,\n 96,\n 114,\n 136,\n 162,\n 194,\n 232,\n 278,\n 332,\n 394,\n 464,\n 540,\n 576\n ],\n [0, 4, 8, 12, 18, 26, 36, 48, 62, 80, 104, 136, 180, 192],\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0, 0, 0]\n /* sfb12 pseudo sub bands */\n ),\n /* Table B.2.a: 16 kHz */\n new w(\n [\n 0,\n 6,\n 12,\n 18,\n 24,\n 30,\n 36,\n 44,\n 54,\n 66,\n 80,\n 96,\n 116,\n 140,\n 168,\n 200,\n 238,\n 284,\n 336,\n 396,\n 464,\n 522,\n 576\n ],\n [0, 4, 8, 12, 18, 26, 36, 48, 62, 80, 104, 134, 174, 192],\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0, 0, 0]\n /* sfb12 pseudo sub bands */\n ),\n /* Table B.8.b: 44.1 kHz */\n new w(\n [\n 0,\n 4,\n 8,\n 12,\n 16,\n 20,\n 24,\n 30,\n 36,\n 44,\n 52,\n 62,\n 74,\n 90,\n 110,\n 134,\n 162,\n 196,\n 238,\n 288,\n 342,\n 418,\n 576\n ],\n [0, 4, 8, 12, 16, 22, 30, 40, 52, 66, 84, 106, 136, 192],\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0, 0, 0]\n /* sfb12 pseudo sub bands */\n ),\n /* Table B.8.c: 48 kHz */\n new w(\n [\n 0,\n 4,\n 8,\n 12,\n 16,\n 20,\n 24,\n 30,\n 36,\n 42,\n 50,\n 60,\n 72,\n 88,\n 106,\n 128,\n 156,\n 190,\n 230,\n 276,\n 330,\n 384,\n 576\n ],\n [0, 4, 8, 12, 16, 22, 28, 38, 50, 64, 80, 100, 126, 192],\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0, 0, 0]\n /* sfb12 pseudo sub bands */\n ),\n /* Table B.8.a: 32 kHz */\n new w(\n [\n 0,\n 4,\n 8,\n 12,\n 16,\n 20,\n 24,\n 30,\n 36,\n 44,\n 54,\n 66,\n 82,\n 102,\n 126,\n 156,\n 194,\n 240,\n 296,\n 364,\n 448,\n 550,\n 576\n ],\n [0, 4, 8, 12, 16, 22, 30, 42, 58, 78, 104, 138, 180, 192],\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0, 0, 0]\n /* sfb12 pseudo sub bands */\n ),\n /* MPEG-2.5 11.025 kHz */\n new w(\n [\n 0,\n 6,\n 12,\n 18,\n 24,\n 30,\n 36,\n 44,\n 54,\n 66,\n 80,\n 96,\n 116,\n 140,\n 168,\n 200,\n 238,\n 284,\n 336,\n 396,\n 464,\n 522,\n 576\n ],\n [\n 0 / 3,\n 12 / 3,\n 24 / 3,\n 36 / 3,\n 54 / 3,\n 78 / 3,\n 108 / 3,\n 144 / 3,\n 186 / 3,\n 240 / 3,\n 312 / 3,\n 402 / 3,\n 522 / 3,\n 576 / 3\n ],\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0, 0, 0]\n /* sfb12 pseudo sub bands */\n ),\n /* MPEG-2.5 12 kHz */\n new w(\n [\n 0,\n 6,\n 12,\n 18,\n 24,\n 30,\n 36,\n 44,\n 54,\n 66,\n 80,\n 96,\n 116,\n 140,\n 168,\n 200,\n 238,\n 284,\n 336,\n 396,\n 464,\n 522,\n 576\n ],\n [\n 0 / 3,\n 12 / 3,\n 24 / 3,\n 36 / 3,\n 54 / 3,\n 78 / 3,\n 108 / 3,\n 144 / 3,\n 186 / 3,\n 240 / 3,\n 312 / 3,\n 402 / 3,\n 522 / 3,\n 576 / 3\n ],\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0, 0, 0]\n /* sfb12 pseudo sub bands */\n ),\n /* MPEG-2.5 8 kHz */\n new w(\n [\n 0,\n 12,\n 24,\n 36,\n 48,\n 60,\n 72,\n 88,\n 108,\n 132,\n 160,\n 192,\n 232,\n 280,\n 336,\n 400,\n 476,\n 566,\n 568,\n 570,\n 572,\n 574,\n 576\n ],\n [\n 0 / 3,\n 24 / 3,\n 48 / 3,\n 72 / 3,\n 108 / 3,\n 156 / 3,\n 216 / 3,\n 288 / 3,\n 372 / 3,\n 480 / 3,\n 486 / 3,\n 492 / 3,\n 498 / 3,\n 576 / 3\n ],\n [0, 0, 0, 0, 0, 0, 0],\n [0, 0, 0, 0, 0, 0, 0]\n /* sfb12 pseudo sub bands */\n )\n ];\n var p = W(d + e + 1), H = W(d), B = W(u), I = W(u);\n this.adj43 = I;\n function v0(S, L) {\n var V = t0.ATHformula(L, S);\n return V -= l, V = Math.pow(10, V / 10 + S.ATHlower), V;\n }\n function b(S) {\n for (var L = S.internal_flags.ATH.l, V = S.internal_flags.ATH.psfb21, N = S.internal_flags.ATH.s, P = S.internal_flags.ATH.psfb12, E = S.internal_flags, i = S.out_samplerate, s = 0; s < g.SBMAX_l; s++) {\n var r = E.scalefac_band.l[s], n = E.scalefac_band.l[s + 1];\n L[s] = z.MAX_VALUE;\n for (var f = r; f < n; f++) {\n var Y = f * i / 1152, J = v0(S, Y);\n L[s] = Math.min(L[s], J);\n }\n }\n for (var s = 0; s < g.PSFB21; s++) {\n var r = E.scalefac_band.psfb21[s], n = E.scalefac_band.psfb21[s + 1];\n V[s] = z.MAX_VALUE;\n for (var f = r; f < n; f++) {\n var Y = f * i / 1152, J = v0(S, Y);\n V[s] = Math.min(V[s], J);\n }\n }\n for (var s = 0; s < g.SBMAX_s; s++) {\n var r = E.scalefac_band.s[s], n = E.scalefac_band.s[s + 1];\n N[s] = z.MAX_VALUE;\n for (var f = r; f < n; f++) {\n var Y = f * i / 384, J = v0(S, Y);\n N[s] = Math.min(N[s], J);\n }\n N[s] *= E.scalefac_band.s[s + 1] - E.scalefac_band.s[s];\n }\n for (var s = 0; s < g.PSFB12; s++) {\n var r = E.scalefac_band.psfb12[s], n = E.scalefac_band.psfb12[s + 1];\n P[s] = z.MAX_VALUE;\n for (var f = r; f < n; f++) {\n var Y = f * i / 384, J = v0(S, Y);\n P[s] = Math.min(P[s], J);\n }\n P[s] *= E.scalefac_band.s[13] - E.scalefac_band.s[12];\n }\n if (S.noATH) {\n for (var s = 0; s < g.SBMAX_l; s++)\n L[s] = 1e-20;\n for (var s = 0; s < g.PSFB21; s++)\n V[s] = 1e-20;\n for (var s = 0; s < g.SBMAX_s; s++)\n N[s] = 1e-20;\n for (var s = 0; s < g.PSFB12; s++)\n P[s] = 1e-20;\n }\n E.ATH.floor = 10 * Math.log10(v0(S, -1));\n }\n this.iteration_init = function(S) {\n var L = S.internal_flags, V = L.l3_side, N;\n if (L.iteration_init_init == 0) {\n for (L.iteration_init_init = 1, V.main_data_begin = 0, b(S), B[0] = 0, N = 1; N < u; N++)\n B[N] = Math.pow(N, 4 / 3);\n for (N = 0; N < u - 1; N++)\n I[N] = N + 1 - Math.pow(\n 0.5 * (B[N] + B[N + 1]),\n 0.75\n );\n for (I[N] = 0.5, N = 0; N < d; N++)\n H[N] = Math.pow(2, (N - 210) * -0.1875);\n for (N = 0; N <= d + e; N++)\n p[N] = Math.pow(2, (N - 210 - e) * 0.25);\n s0.huffman_init(L);\n {\n var P, E, i, s;\n for (N = S.exp_nspsytune >> 2 & 63, N >= 32 && (N -= 64), P = Math.pow(10, N / 4 / 10), N = S.exp_nspsytune >> 8 & 63, N >= 32 && (N -= 64), E = Math.pow(10, N / 4 / 10), N = S.exp_nspsytune >> 14 & 63, N >= 32 && (N -= 64), i = Math.pow(10, N / 4 / 10), N = S.exp_nspsytune >> 20 & 63, N >= 32 && (N -= 64), s = i * Math.pow(10, N / 4 / 10), N = 0; N < g.SBMAX_l; N++) {\n var r;\n N <= 6 ? r = P : N <= 13 ? r = E : N <= 20 ? r = i : r = s, L.nsPsy.longfact[N] = r;\n }\n for (N = 0; N < g.SBMAX_s; N++) {\n var r;\n N <= 5 ? r = P : N <= 10 ? r = E : N <= 11 ? r = i : r = s, L.nsPsy.shortfact[N] = r;\n }\n }\n }\n }, this.on_pe = function(S, L, V, N, P, E) {\n var i = S.internal_flags, s = 0, r, n = Q(2), f, Y = new f0(s), J = K.ResvMaxBits(S, N, Y, E);\n s = Y.bits;\n var T = s + J;\n for (T > A.MAX_BITS_PER_GRANULE && (T = A.MAX_BITS_PER_GRANULE), r = 0, f = 0; f < i.channels_out; ++f)\n V[f] = Math.min(\n A.MAX_BITS_PER_CHANNEL,\n s / i.channels_out\n ), n[f] = 0 | V[f] * L[P][f] / 700 - V[f], n[f] > N * 3 / 4 && (n[f] = N * 3 / 4), n[f] < 0 && (n[f] = 0), n[f] + V[f] > A.MAX_BITS_PER_CHANNEL && (n[f] = Math.max(\n 0,\n A.MAX_BITS_PER_CHANNEL - V[f]\n )), r += n[f];\n if (r > J)\n for (f = 0; f < i.channels_out; ++f)\n n[f] = J * n[f] / r;\n for (f = 0; f < i.channels_out; ++f)\n V[f] += n[f], J -= n[f];\n for (r = 0, f = 0; f < i.channels_out; ++f)\n r += V[f];\n if (r > A.MAX_BITS_PER_GRANULE) {\n var q = 0;\n for (f = 0; f < i.channels_out; ++f)\n V[f] *= A.MAX_BITS_PER_GRANULE, V[f] /= r, q += V[f];\n }\n return T;\n }, this.reduce_side = function(S, L, V, N) {\n D(S[0] + S[1] <= A.MAX_BITS_PER_GRANULE);\n var P = 0.33 * (0.5 - L) / 0.5;\n P < 0 && (P = 0), P > 0.5 && (P = 0.5);\n var E = 0 | P * 0.5 * (S[0] + S[1]);\n E > A.MAX_BITS_PER_CHANNEL - S[0] && (E = A.MAX_BITS_PER_CHANNEL - S[0]), E < 0 && (E = 0), S[1] >= 125 && (S[1] - E > 125 ? (S[0] < V && (S[0] += E), S[1] -= E) : (S[0] += S[1] - 125, S[1] = 125)), E = S[0] + S[1], E > N && (S[0] = N * S[0] / E, S[1] = N * S[1] / E), D(S[0] <= A.MAX_BITS_PER_CHANNEL), D(S[1] <= A.MAX_BITS_PER_CHANNEL), D(S[0] + S[1] <= A.MAX_BITS_PER_GRANULE);\n }, this.athAdjust = function(S, L, V) {\n var N = 90.30873362, P = 94.82444863, E = u0.FAST_LOG10_X(L, 10), i = S * S, s = 0;\n return E -= V, i > 1e-20 && (s = 1 + u0.FAST_LOG10_X(i, 10 / N)), s < 0 && (s = 0), E *= s, E += V + N - P, Math.pow(10, 0.1 * E);\n }, this.calc_xmin = function(S, L, V, N) {\n var P = 0, E = S.internal_flags, i, s = 0, r = 0, n = E.ATH, f = V.xr, Y = S.VBR == X.vbr_mtrh ? 1 : 0, J = E.masking_lower;\n for ((S.VBR == X.vbr_mtrh || S.VBR == X.vbr_mt) && (J = 1), i = 0; i < V.psy_lmax; i++) {\n var T, q, i0, h0, d0, M0;\n S.VBR == X.vbr_rh || S.VBR == X.vbr_mtrh ? q = athAdjust(n.adjust, n.l[i], n.floor) : q = n.adjust * n.l[i], d0 = V.width[i], i0 = q / d0, h0 = R, M0 = d0 >> 1, T = 0;\n do {\n var R0, A0;\n R0 = f[s] * f[s], T += R0, h0 += R0 < i0 ? R0 : i0, s++, A0 = f[s] * f[s], T += A0, h0 += A0 < i0 ? A0 : i0, s++;\n } while (--M0 > 0);\n if (T > q && r++, i == g.SBPSY_l) {\n var w0 = q * E.nsPsy.longfact[i];\n h0 < w0 && (h0 = w0);\n }\n if (Y != 0 && (q = h0), !S.ATHonly) {\n var $0 = L.en.l[i];\n if ($0 > 0) {\n var w0;\n w0 = T * L.thm.l[i] * J / $0, Y != 0 && (w0 *= E.nsPsy.longfact[i]), q < w0 && (q = w0);\n }\n }\n Y != 0 ? N[P++] = q : N[P++] = q * E.nsPsy.longfact[i];\n }\n var f1 = 575;\n if (V.block_type != g.SHORT_TYPE)\n for (var t = 576; t-- != 0 && O.EQ(f[t], 0); )\n f1 = t;\n V.max_nonzero_coeff = f1;\n for (var _ = V.sfb_smin; i < V.psymax; _++, i += 3) {\n var d0, S0, E0;\n for (S.VBR == X.vbr_rh || S.VBR == X.vbr_mtrh ? E0 = athAdjust(n.adjust, n.s[_], n.floor) : E0 = n.adjust * n.s[_], d0 = V.width[i], S0 = 0; S0 < 3; S0++) {\n var T = 0, q, i0, h0, M0 = d0 >> 1;\n i0 = E0 / d0, h0 = R;\n do {\n var R0, A0;\n R0 = f[s] * f[s], T += R0, h0 += R0 < i0 ? R0 : i0, s++, A0 = f[s] * f[s], T += A0, h0 += A0 < i0 ? A0 : i0, s++;\n } while (--M0 > 0);\n if (T > E0 && r++, _ == g.SBPSY_s) {\n var w0 = E0 * E.nsPsy.shortfact[_];\n h0 < w0 && (h0 = w0);\n }\n if (Y != 0 ? q = h0 : q = E0, !S.ATHonly && !S.ATHshort) {\n var $0 = L.en.s[_][S0];\n if ($0 > 0) {\n var w0;\n w0 = T * L.thm.s[_][S0] * J / $0, Y != 0 && (w0 *= E.nsPsy.shortfact[_]), q < w0 && (q = w0);\n }\n }\n Y != 0 ? N[P++] = q : N[P++] = q * E.nsPsy.shortfact[_];\n }\n S.useTemporal && (N[P - 3] > N[P - 3 + 1] && (N[P - 3 + 1] += (N[P - 3] - N[P - 3 + 1]) * E.decay), N[P - 3 + 1] > N[P - 3 + 2] && (N[P - 3 + 2] += (N[P - 3 + 1] - N[P - 3 + 2]) * E.decay));\n }\n return r;\n };\n function a(S) {\n this.s = S;\n }\n this.calc_noise_core = function(S, L, V, N) {\n var P = 0, E = L.s, i = S.l3_enc;\n if (E > S.count1)\n for (; V-- != 0; ) {\n var s;\n s = S.xr[E], E++, P += s * s, s = S.xr[E], E++, P += s * s;\n }\n else if (E > S.big_values) {\n var r = W(2);\n for (r[0] = 0, r[1] = N; V-- != 0; ) {\n var s;\n s = Math.abs(S.xr[E]) - r[i[E]], E++, P += s * s, s = Math.abs(S.xr[E]) - r[i[E]], E++, P += s * s;\n }\n } else\n for (; V-- != 0; ) {\n var s;\n s = Math.abs(S.xr[E]) - B[i[E]] * N, E++, P += s * s, s = Math.abs(S.xr[E]) - B[i[E]] * N, E++, P += s * s;\n }\n return L.s = E, P;\n }, this.calc_noise = function(S, L, V, N, P) {\n var E = 0, i = 0, s, r, n = 0, f = 0, Y = 0, J = -20, T = 0, q = S.scalefac, i0 = 0;\n for (N.over_SSD = 0, s = 0; s < S.psymax; s++) {\n var h0 = S.global_gain - (q[i0++] + (S.preflag != 0 ? M[s] : 0) << S.scalefac_scale + 1) - S.subblock_gain[S.window[s]] * 8, d0 = 0;\n if (P != null && P.step[s] == h0)\n d0 = P.noise[s], T += S.width[s], V[E++] = d0 / L[i++], d0 = P.noise_log[s];\n else {\n var M0 = U(h0);\n if (r = S.width[s] >> 1, T + S.width[s] > S.max_nonzero_coeff) {\n var R0;\n R0 = S.max_nonzero_coeff - T + 1, R0 > 0 ? r = R0 >> 1 : r = 0;\n }\n var A0 = new a(T);\n d0 = this.calc_noise_core(S, A0, r, M0), T = A0.s, P != null && (P.step[s] = h0, P.noise[s] = d0), d0 = V[E++] = d0 / L[i++], d0 = u0.FAST_LOG10(Math.max(d0, 1e-20)), P != null && (P.noise_log[s] = d0);\n }\n if (P != null && (P.global_gain = S.global_gain), Y += d0, d0 > 0) {\n var w0;\n w0 = Math.max(0 | d0 * 10 + 0.5, 1), N.over_SSD += w0 * w0, n++, f += d0;\n }\n J = Math.max(J, d0);\n }\n return N.over_count = n, N.tot_noise = Y, N.over_noise = f, N.max_noise = J, n;\n }, this.set_pinfo = function(S, L, V, N, P) {\n var E = S.internal_flags, i, s, r, n, f, Y = L.scalefac_scale == 0 ? 0.5 : 1, J = L.scalefac, T = W(L3Side.SFBMAX), q = W(L3Side.SFBMAX), i0 = new CalcNoiseResult();\n calc_xmin(S, V, L, T), calc_noise(L, T, q, i0, null);\n var h0 = 0;\n for (s = L.sfb_lmax, L.block_type != g.SHORT_TYPE && L.mixed_block_flag == 0 && (s = 22), i = 0; i < s; i++) {\n var d0 = E.scalefac_band.l[i], M0 = E.scalefac_band.l[i + 1], R0 = M0 - d0;\n for (n = 0; h0 < M0; h0++)\n n += L.xr[h0] * L.xr[h0];\n n /= R0, f = 1e15, E.pinfo.en[N][P][i] = f * n, E.pinfo.xfsf[N][P][i] = f * T[i] * q[i] / R0, V.en.l[i] > 0 && !S.ATHonly ? n = n / V.en.l[i] : n = 0, E.pinfo.thr[N][P][i] = f * Math.max(n * V.thm.l[i], E.ATH.l[i]), E.pinfo.LAMEsfb[N][P][i] = 0, L.preflag != 0 && i >= 11 && (E.pinfo.LAMEsfb[N][P][i] = -Y * M[i]), i < g.SBPSY_l && (D(J[i] >= 0), E.pinfo.LAMEsfb[N][P][i] -= Y * J[i]);\n }\n if (L.block_type == g.SHORT_TYPE)\n for (s = i, i = L.sfb_smin; i < g.SBMAX_s; i++)\n for (var d0 = E.scalefac_band.s[i], M0 = E.scalefac_band.s[i + 1], R0 = M0 - d0, A0 = 0; A0 < 3; A0++) {\n for (n = 0, r = d0; r < M0; r++)\n n += L.xr[h0] * L.xr[h0], h0++;\n n = Math.max(n / R0, 1e-20), f = 1e15, E.pinfo.en_s[N][P][3 * i + A0] = f * n, E.pinfo.xfsf_s[N][P][3 * i + A0] = f * T[s] * q[s] / R0, V.en.s[i][A0] > 0 ? n = n / V.en.s[i][A0] : n = 0, (S.ATHonly || S.ATHshort) && (n = 0), E.pinfo.thr_s[N][P][3 * i + A0] = f * Math.max(\n n * V.thm.s[i][A0],\n E.ATH.s[i]\n ), E.pinfo.LAMEsfb_s[N][P][3 * i + A0] = -2 * L.subblock_gain[A0], i < g.SBPSY_s && (E.pinfo.LAMEsfb_s[N][P][3 * i + A0] -= Y * J[s]), s++;\n }\n E.pinfo.LAMEqss[N][P] = L.global_gain, E.pinfo.LAMEmainbits[N][P] = L.part2_3_length + L.part2_length, E.pinfo.LAMEsfbits[N][P] = L.part2_length, E.pinfo.over[N][P] = i0.over_count, E.pinfo.max_noise[N][P] = i0.max_noise * 10, E.pinfo.over_noise[N][P] = i0.over_noise * 10, E.pinfo.tot_noise[N][P] = i0.tot_noise * 10, E.pinfo.over_SSD[N][P] = i0.over_SSD;\n };\n }\n return Me = m, Me;\n}\nvar Ee, ta;\nfunction Oa() {\n if (ta)\n return Ee;\n ta = 1;\n var w = Q0, Z = w.System, X = w.Arrays, z = w.new_int, u0 = w.assert, W = t1(), Q = He, D = Le, g = Va();\n function f0() {\n var A = null;\n this.qupvt = null, this.setModules = function(E) {\n this.qupvt = E, A = E;\n };\n function m(E) {\n this.bits = 0 | E;\n }\n var O = [\n [0, 0],\n /* 0 bands */\n [0, 0],\n /* 1 bands */\n [0, 0],\n /* 2 bands */\n [0, 0],\n /* 3 bands */\n [0, 0],\n /* 4 bands */\n [0, 1],\n /* 5 bands */\n [1, 1],\n /* 6 bands */\n [1, 1],\n /* 7 bands */\n [1, 2],\n /* 8 bands */\n [2, 2],\n /* 9 bands */\n [2, 3],\n /* 10 bands */\n [2, 3],\n /* 11 bands */\n [3, 4],\n /* 12 bands */\n [3, 4],\n /* 13 bands */\n [3, 4],\n /* 14 bands */\n [4, 5],\n /* 15 bands */\n [4, 5],\n /* 16 bands */\n [4, 6],\n /* 17 bands */\n [5, 6],\n /* 18 bands */\n [5, 6],\n /* 19 bands */\n [5, 7],\n /* 20 bands */\n [6, 7],\n /* 21 bands */\n [6, 7]\n /* 22 bands */\n ];\n function s0(E, i, s, r, n, f) {\n var Y = 0.5946 / i;\n for (E = E >> 1; E-- != 0; )\n n[f++] = Y > s[r++] ? 0 : 1, n[f++] = Y > s[r++] ? 0 : 1;\n }\n function K(E, i, s, r, n, f) {\n E = E >> 1;\n var Y = E % 2;\n for (E = E >> 1; E-- != 0; ) {\n var J, T, q, i0, h0, d0, M0, R0;\n J = s[r++] * i, T = s[r++] * i, h0 = 0 | J, q = s[r++] * i, d0 = 0 | T, i0 = s[r++] * i, M0 = 0 | q, J += A.adj43[h0], R0 = 0 | i0, T += A.adj43[d0], n[f++] = 0 | J, q += A.adj43[M0], n[f++] = 0 | T, i0 += A.adj43[R0], n[f++] = 0 | q, n[f++] = 0 | i0;\n }\n if (Y != 0) {\n var J, T, h0, d0;\n J = s[r++] * i, T = s[r++] * i, h0 = 0 | J, d0 = 0 | T, J += A.adj43[h0], T += A.adj43[d0], n[f++] = 0 | J, n[f++] = 0 | T;\n }\n }\n function t0(E, i, s, r, n) {\n var f, Y, J = 0, T, q = 0, i0 = 0, h0 = 0, d0 = i, M0 = 0, R0 = d0, A0 = 0, w0 = E, $0 = 0;\n for (T = n != null && r.global_gain == n.global_gain, r.block_type == W.SHORT_TYPE ? Y = 38 : Y = 21, f = 0; f <= Y; f++) {\n var f1 = -1;\n if ((T || r.block_type == W.NORM_TYPE) && (f1 = r.global_gain - (r.scalefac[f] + (r.preflag != 0 ? A.pretab[f] : 0) << r.scalefac_scale + 1) - r.subblock_gain[r.window[f]] * 8), u0(r.width[f] >= 0), T && n.step[f] == f1)\n q != 0 && (K(\n q,\n s,\n w0,\n $0,\n R0,\n A0\n ), q = 0), i0 != 0 && (s0(\n i0,\n s,\n w0,\n $0,\n R0,\n A0\n ), i0 = 0);\n else {\n var t = r.width[f];\n if (J + r.width[f] > r.max_nonzero_coeff) {\n var _;\n _ = r.max_nonzero_coeff - J + 1, X.fill(i, r.max_nonzero_coeff, 576, 0), t = _, t < 0 && (t = 0), f = Y + 1;\n }\n if (q == 0 && i0 == 0 && (R0 = d0, A0 = M0, w0 = E, $0 = h0), n != null && n.sfb_count1 > 0 && f >= n.sfb_count1 && n.step[f] > 0 && f1 >= n.step[f] ? (q != 0 && (K(\n q,\n s,\n w0,\n $0,\n R0,\n A0\n ), q = 0, R0 = d0, A0 = M0, w0 = E, $0 = h0), i0 += t) : (i0 != 0 && (s0(\n i0,\n s,\n w0,\n $0,\n R0,\n A0\n ), i0 = 0, R0 = d0, A0 = M0, w0 = E, $0 = h0), q += t), t <= 0) {\n i0 != 0 && (s0(\n i0,\n s,\n w0,\n $0,\n R0,\n A0\n ), i0 = 0), q != 0 && (K(\n q,\n s,\n w0,\n $0,\n R0,\n A0\n ), q = 0);\n break;\n }\n }\n f <= Y && (M0 += r.width[f], h0 += r.width[f], J += r.width[f]);\n }\n q != 0 && (K(\n q,\n s,\n w0,\n $0,\n R0,\n A0\n ), q = 0), i0 != 0 && (s0(\n i0,\n s,\n w0,\n $0,\n R0,\n A0\n ), i0 = 0);\n }\n function U(E, i, s) {\n var r = 0, n = 0;\n do {\n var f = E[i++], Y = E[i++];\n r < f && (r = f), n < Y && (n = Y);\n } while (i < s);\n return r < n && (r = n), r;\n }\n function R(E, i, s, r, n, f) {\n var Y = Q.ht[r].xlen * 65536 + Q.ht[n].xlen, J = 0, T;\n do {\n var q = E[i++], i0 = E[i++];\n q != 0 && (q > 14 && (q = 15, J += Y), q *= 16), i0 != 0 && (i0 > 14 && (i0 = 15, J += Y), q += i0), J += Q.largetbl[q];\n } while (i < s);\n return T = J & 65535, J >>= 16, J > T && (J = T, r = n), f.bits += J, r;\n }\n function o(E, i, s, r) {\n var n = 0, f = Q.ht[1].hlen;\n do {\n var Y = E[i + 0] * 2 + E[i + 1];\n i += 2, n += f[Y];\n } while (i < s);\n return r.bits += n, 1;\n }\n function u(E, i, s, r, n) {\n var f = 0, Y, J = Q.ht[r].xlen, T;\n r == 2 ? T = Q.table23 : T = Q.table56;\n do {\n var q = E[i + 0] * J + E[i + 1];\n i += 2, f += T[q];\n } while (i < s);\n return Y = f & 65535, f >>= 16, f > Y && (f = Y, r++), n.bits += f, r;\n }\n function d(E, i, s, r, n) {\n var f = 0, Y = 0, J = 0, T = Q.ht[r].xlen, q = Q.ht[r].hlen, i0 = Q.ht[r + 1].hlen, h0 = Q.ht[r + 2].hlen;\n do {\n var d0 = E[i + 0] * T + E[i + 1];\n i += 2, f += q[d0], Y += i0[d0], J += h0[d0];\n } while (i < s);\n var M0 = r;\n return f > Y && (f = Y, M0++), f > J && (f = J, M0 = r + 2), n.bits += f, M0;\n }\n var e = [\n 1,\n 2,\n 5,\n 7,\n 7,\n 10,\n 10,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13\n ];\n function l(E, i, s, r) {\n var n = U(E, i, s);\n switch (n) {\n case 0:\n return n;\n case 1:\n return o(E, i, s, r);\n case 2:\n case 3:\n return u(\n E,\n i,\n s,\n e[n - 1],\n r\n );\n case 4:\n case 5:\n case 6:\n case 7:\n case 8:\n case 9:\n case 10:\n case 11:\n case 12:\n case 13:\n case 14:\n case 15:\n return d(\n E,\n i,\n s,\n e[n - 1],\n r\n );\n default:\n if (n > g.IXMAX_VAL)\n return r.bits = g.LARGE_BITS, -1;\n n -= 15;\n var f;\n for (f = 24; f < 32 && !(Q.ht[f].linmax >= n); f++)\n ;\n var Y;\n for (Y = f - 8; Y < 24 && !(Q.ht[Y].linmax >= n); Y++)\n ;\n return R(E, i, s, Y, f, r);\n }\n }\n this.noquant_count_bits = function(E, i, s) {\n var r = i.l3_enc, n = Math.min(576, i.max_nonzero_coeff + 2 >> 1 << 1);\n for (s != null && (s.sfb_count1 = 0); n > 1 && !(r[n - 1] | r[n - 2]); n -= 2)\n ;\n i.count1 = n;\n for (var f = 0, Y = 0; n > 3; n -= 4) {\n var J;\n if (((r[n - 1] | r[n - 2] | r[n - 3] | r[n - 4]) & 2147483647) > 1)\n break;\n J = ((r[n - 4] * 2 + r[n - 3]) * 2 + r[n - 2]) * 2 + r[n - 1], f += Q.t32l[J], Y += Q.t33l[J];\n }\n var T = f;\n if (i.count1table_select = 0, f > Y && (T = Y, i.count1table_select = 1), i.count1bits = T, i.big_values = n, n == 0)\n return T;\n if (i.block_type == W.SHORT_TYPE)\n f = 3 * E.scalefac_band.s[3], f > i.big_values && (f = i.big_values), Y = i.big_values;\n else if (i.block_type == W.NORM_TYPE) {\n if (f = i.region0_count = E.bv_scf[n - 2], Y = i.region1_count = E.bv_scf[n - 1], u0(f + Y + 2 < W.SBPSY_l), Y = E.scalefac_band.l[f + Y + 2], f = E.scalefac_band.l[f + 1], Y < n) {\n var q = new m(T);\n i.table_select[2] = l(r, Y, n, q), T = q.bits;\n }\n } else\n i.region0_count = 7, i.region1_count = W.SBMAX_l - 1 - 7 - 1, f = E.scalefac_band.l[7 + 1], Y = n, f > Y && (f = Y);\n if (f = Math.min(f, n), Y = Math.min(Y, n), 0 < f) {\n var q = new m(T);\n i.table_select[0] = l(r, 0, f, q), T = q.bits;\n }\n if (f < Y) {\n var q = new m(T);\n i.table_select[1] = l(r, f, Y, q), T = q.bits;\n }\n if (E.use_best_huffman == 2 && (i.part2_3_length = T, best_huffman_divide(E, i), T = i.part2_3_length), s != null && i.block_type == W.NORM_TYPE) {\n for (var i0 = 0; E.scalefac_band.l[i0] < i.big_values; )\n i0++;\n s.sfb_count1 = i0;\n }\n return T;\n }, this.count_bits = function(E, i, s, r) {\n var n = s.l3_enc, f = g.IXMAX_VAL / A.IPOW20(s.global_gain);\n if (s.xrpow_max > f)\n return g.LARGE_BITS;\n if (t0(i, n, A.IPOW20(s.global_gain), s, r), E.substep_shaping & 2)\n for (var Y = 0, J = s.global_gain + s.scalefac_scale, T = 0.634521682242439 / A.IPOW20(J), q = 0; q < s.sfbmax; q++) {\n var i0 = s.width[q];\n if (E.pseudohalf[q] == 0)\n Y += i0;\n else {\n var h0;\n for (h0 = Y, Y += i0; h0 < Y; ++h0)\n n[h0] = i[h0] >= T ? n[h0] : 0;\n }\n }\n return this.noquant_count_bits(E, s, r);\n };\n function M(E, i, s, r, n, f, Y) {\n for (var J = i.big_values, T = 0; T <= 7 + 15; T++)\n r[T] = g.LARGE_BITS;\n for (var T = 0; T < 16; T++) {\n var q = E.scalefac_band.l[T + 1];\n if (q >= J)\n break;\n var i0 = 0, h0 = new m(i0), d0 = l(s, 0, q, h0);\n i0 = h0.bits;\n for (var M0 = 0; M0 < 8; M0++) {\n var R0 = E.scalefac_band.l[T + M0 + 2];\n if (R0 >= J)\n break;\n var A0 = i0;\n h0 = new m(A0);\n var w0 = l(s, q, R0, h0);\n A0 = h0.bits, r[T + M0] > A0 && (r[T + M0] = A0, n[T + M0] = T, f[T + M0] = d0, Y[T + M0] = w0);\n }\n }\n }\n function p(E, i, s, r, n, f, Y, J) {\n for (var T = i.big_values, q = 2; q < W.SBMAX_l + 1; q++) {\n var i0 = E.scalefac_band.l[q];\n if (i0 >= T)\n break;\n var h0 = n[q - 2] + i.count1bits;\n if (s.part2_3_length <= h0)\n break;\n var d0 = new m(h0), M0 = l(r, i0, T, d0);\n h0 = d0.bits, !(s.part2_3_length <= h0) && (s.assign(i), s.part2_3_length = h0, s.region0_count = f[q - 2], s.region1_count = q - 2 - f[q - 2], s.table_select[0] = Y[q - 2], s.table_select[1] = J[q - 2], s.table_select[2] = M0);\n }\n }\n this.best_huffman_divide = function(E, i) {\n var s = new D(), r = i.l3_enc, n = z(7 + 15 + 1), f = z(7 + 15 + 1), Y = z(7 + 15 + 1), J = z(7 + 15 + 1);\n if (!(i.block_type == W.SHORT_TYPE && E.mode_gr == 1)) {\n s.assign(i), i.block_type == W.NORM_TYPE && (M(E, i, r, n, f, Y, J), p(\n E,\n s,\n i,\n r,\n n,\n f,\n Y,\n J\n ));\n var T = s.big_values;\n if (!(T == 0 || (r[T - 2] | r[T - 1]) > 1) && (T = i.count1 + 2, !(T > 576))) {\n s.assign(i), s.count1 = T;\n for (var q = 0, i0 = 0; T > s.big_values; T -= 4) {\n var h0 = ((r[T - 4] * 2 + r[T - 3]) * 2 + r[T - 2]) * 2 + r[T - 1];\n q += Q.t32l[h0], i0 += Q.t33l[h0];\n }\n if (s.big_values = T, s.count1table_select = 0, q > i0 && (q = i0, s.count1table_select = 1), s.count1bits = q, s.block_type == W.NORM_TYPE)\n p(\n E,\n s,\n i,\n r,\n n,\n f,\n Y,\n J\n );\n else {\n if (s.part2_3_length = q, q = E.scalefac_band.l[7 + 1], q > T && (q = T), q > 0) {\n var d0 = new m(s.part2_3_length);\n s.table_select[0] = l(r, 0, q, d0), s.part2_3_length = d0.bits;\n }\n if (T > q) {\n var d0 = new m(s.part2_3_length);\n s.table_select[1] = l(r, q, T, d0), s.part2_3_length = d0.bits;\n }\n i.part2_3_length > s.part2_3_length && i.assign(s);\n }\n }\n }\n };\n var H = [1, 1, 1, 1, 8, 2, 2, 2, 4, 4, 4, 8, 8, 8, 16, 16], B = [1, 2, 4, 8, 1, 2, 4, 8, 2, 4, 8, 2, 4, 8, 4, 8], I = [0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4], v0 = [0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3];\n f0.slen1_tab = I, f0.slen2_tab = v0;\n function b(E, i) {\n for (var s, r = i.tt[1][E], n = i.tt[0][E], f = 0; f < Q.scfsi_band.length - 1; f++) {\n for (s = Q.scfsi_band[f]; s < Q.scfsi_band[f + 1] && !(n.scalefac[s] != r.scalefac[s] && r.scalefac[s] >= 0); s++)\n ;\n if (s == Q.scfsi_band[f + 1]) {\n for (s = Q.scfsi_band[f]; s < Q.scfsi_band[f + 1]; s++)\n r.scalefac[s] = -1;\n i.scfsi[E][f] = 1;\n }\n }\n var Y = 0, J = 0;\n for (s = 0; s < 11; s++)\n r.scalefac[s] != -1 && (J++, Y < r.scalefac[s] && (Y = r.scalefac[s]));\n for (var T = 0, q = 0; s < W.SBPSY_l; s++)\n r.scalefac[s] != -1 && (q++, T < r.scalefac[s] && (T = r.scalefac[s]));\n for (var f = 0; f < 16; f++)\n if (Y < H[f] && T < B[f]) {\n var i0 = I[f] * J + v0[f] * q;\n r.part2_length > i0 && (r.part2_length = i0, r.scalefac_compress = f);\n }\n }\n this.best_scalefac_store = function(E, i, s, r) {\n var n = r.tt[i][s], f, Y, J, T, q = 0;\n for (J = 0, f = 0; f < n.sfbmax; f++) {\n var i0 = n.width[f];\n for (J += i0, T = -i0; T < 0 && n.l3_enc[T + J] == 0; T++)\n ;\n T == 0 && (n.scalefac[f] = q = -2);\n }\n if (n.scalefac_scale == 0 && n.preflag == 0) {\n var h0 = 0;\n for (f = 0; f < n.sfbmax; f++)\n n.scalefac[f] > 0 && (h0 |= n.scalefac[f]);\n if (!(h0 & 1) && h0 != 0) {\n for (f = 0; f < n.sfbmax; f++)\n n.scalefac[f] > 0 && (n.scalefac[f] >>= 1);\n n.scalefac_scale = q = 1;\n }\n }\n if (n.preflag == 0 && n.block_type != W.SHORT_TYPE && E.mode_gr == 2) {\n for (f = 11; f < W.SBPSY_l && !(n.scalefac[f] < A.pretab[f] && n.scalefac[f] != -2); f++)\n ;\n if (f == W.SBPSY_l) {\n for (f = 11; f < W.SBPSY_l; f++)\n n.scalefac[f] > 0 && (n.scalefac[f] -= A.pretab[f]);\n n.preflag = q = 1;\n }\n }\n for (Y = 0; Y < 4; Y++)\n r.scfsi[s][Y] = 0;\n for (E.mode_gr == 2 && i == 1 && r.tt[0][s].block_type != W.SHORT_TYPE && r.tt[1][s].block_type != W.SHORT_TYPE && (b(s, r), q = 0), f = 0; f < n.sfbmax; f++)\n n.scalefac[f] == -2 && (n.scalefac[f] = 0);\n q != 0 && (E.mode_gr == 2 ? this.scale_bitcount(n) : this.scale_bitcount_lsf(E, n));\n };\n function a(E, i) {\n for (var s = 0; s < i; ++s)\n if (E[s] < 0)\n return !1;\n return !0;\n }\n var S = [\n 0,\n 18,\n 36,\n 54,\n 54,\n 36,\n 54,\n 72,\n 54,\n 72,\n 90,\n 72,\n 90,\n 108,\n 108,\n 126\n ], L = [\n 0,\n 18,\n 36,\n 54,\n 51,\n 35,\n 53,\n 71,\n 52,\n 70,\n 88,\n 69,\n 87,\n 105,\n 104,\n 122\n ], V = [\n 0,\n 10,\n 20,\n 30,\n 33,\n 21,\n 31,\n 41,\n 32,\n 42,\n 52,\n 43,\n 53,\n 63,\n 64,\n 74\n ];\n this.scale_bitcount = function(E) {\n var i, s, r = 0, n = 0, f, Y = E.scalefac;\n if (u0(a(Y, E.sfbmax)), E.block_type == W.SHORT_TYPE)\n f = S, E.mixed_block_flag != 0 && (f = L);\n else if (f = V, E.preflag == 0) {\n for (s = 11; s < W.SBPSY_l && !(Y[s] < A.pretab[s]); s++)\n ;\n if (s == W.SBPSY_l)\n for (E.preflag = 1, s = 11; s < W.SBPSY_l; s++)\n Y[s] -= A.pretab[s];\n }\n for (s = 0; s < E.sfbdivide; s++)\n r < Y[s] && (r = Y[s]);\n for (; s < E.sfbmax; s++)\n n < Y[s] && (n = Y[s]);\n for (E.part2_length = g.LARGE_BITS, i = 0; i < 16; i++)\n r < H[i] && n < B[i] && E.part2_length > f[i] && (E.part2_length = f[i], E.scalefac_compress = i);\n return E.part2_length == g.LARGE_BITS;\n };\n var N = [\n [15, 15, 7, 7],\n [15, 15, 7, 0],\n [7, 3, 0, 0],\n [15, 31, 31, 0],\n [7, 7, 7, 0],\n [3, 3, 0, 0]\n ];\n this.scale_bitcount_lsf = function(E, i) {\n var s, r, n, f, Y, J, T, q, i0 = z(4), h0 = i.scalefac;\n for (i.preflag != 0 ? s = 2 : s = 0, T = 0; T < 4; T++)\n i0[T] = 0;\n if (i.block_type == W.SHORT_TYPE) {\n r = 1;\n var d0 = A.nr_of_sfb_block[s][r];\n for (q = 0, n = 0; n < 4; n++)\n for (f = d0[n] / 3, T = 0; T < f; T++, q++)\n for (Y = 0; Y < 3; Y++)\n h0[q * 3 + Y] > i0[n] && (i0[n] = h0[q * 3 + Y]);\n } else {\n r = 0;\n var d0 = A.nr_of_sfb_block[s][r];\n for (q = 0, n = 0; n < 4; n++)\n for (f = d0[n], T = 0; T < f; T++, q++)\n h0[q] > i0[n] && (i0[n] = h0[q]);\n }\n for (J = !1, n = 0; n < 4; n++)\n i0[n] > N[s][n] && (J = !0);\n if (!J) {\n var M0, R0, A0, w0;\n for (i.sfb_partition_table = A.nr_of_sfb_block[s][r], n = 0; n < 4; n++)\n i.slen[n] = P[i0[n]];\n switch (M0 = i.slen[0], R0 = i.slen[1], A0 = i.slen[2], w0 = i.slen[3], s) {\n case 0:\n i.scalefac_compress = (M0 * 5 + R0 << 4) + (A0 << 2) + w0;\n break;\n case 1:\n i.scalefac_compress = 400 + (M0 * 5 + R0 << 2) + A0;\n break;\n case 2:\n i.scalefac_compress = 500 + M0 * 3 + R0;\n break;\n default:\n Z.err.printf(`intensity stereo not implemented yet\n`);\n break;\n }\n }\n if (!J)\n for (u0(i.sfb_partition_table != null), i.part2_length = 0, n = 0; n < 4; n++)\n i.part2_length += i.slen[n] * i.sfb_partition_table[n];\n return J;\n };\n var P = [\n 0,\n 1,\n 2,\n 2,\n 3,\n 3,\n 3,\n 3,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4\n ];\n this.huffman_init = function(E) {\n for (var i = 2; i <= 576; i += 2) {\n for (var s = 0, r; E.scalefac_band.l[++s] < i; )\n ;\n for (r = O[s][0]; E.scalefac_band.l[r + 1] > i; )\n r--;\n for (r < 0 && (r = O[s][0]), E.bv_scf[i - 2] = r, r = O[s][1]; E.scalefac_band.l[r + E.bv_scf[i - 2] + 2] > i; )\n r--;\n r < 0 && (r = O[s][1]), E.bv_scf[i - 1] = r;\n }\n };\n }\n return Ee = f0, Ee;\n}\nvar Be, sa;\nfunction Ve() {\n if (sa)\n return Be;\n sa = 1;\n var w = Q0, Z = w.System, X = w.Arrays, z = w.new_byte, u0 = w.new_float_n, W = w.new_int, Q = w.assert, D = Oa(), g = He, f0 = t1(), A = ne;\n m.EQ = function(O, s0) {\n return Math.abs(O) > Math.abs(s0) ? Math.abs(O - s0) <= Math.abs(O) * 1e-6 : Math.abs(O - s0) <= Math.abs(s0) * 1e-6;\n }, m.NEQ = function(O, s0) {\n return !m.EQ(O, s0);\n };\n function m() {\n var O = Oe(), s0 = this, K = 32773, t0 = null, U = null, R = null, o = null;\n this.setModules = function(i, s, r, n) {\n t0 = i, U = s, R = r, o = n;\n };\n var u = null, d = 0, e = 0, l = 0;\n this.getframebits = function(i) {\n var s = i.internal_flags, r;\n s.bitrate_index != 0 ? r = g.bitrate_table[i.version][s.bitrate_index] : r = i.brate;\n var n = 0 | (i.version + 1) * 72e3 * r / i.out_samplerate + s.padding;\n return 8 * n;\n };\n function M(i) {\n Z.arraycopy(i.header[i.w_ptr].buf, 0, u, e, i.sideinfo_len), e += i.sideinfo_len, d += i.sideinfo_len * 8, i.w_ptr = i.w_ptr + 1 & A.MAX_HEADER_BUF - 1;\n }\n function p(i, s, r) {\n for (; r > 0; ) {\n var n;\n l == 0 && (l = 8, e++, Q(e < O.LAME_MAXMP3BUFFER), Q(i.header[i.w_ptr].write_timing >= d), i.header[i.w_ptr].write_timing == d && M(i), u[e] = 0), n = Math.min(r, l), r -= n, l -= n, u[e] |= s >> r << l, d += n;\n }\n }\n function H(i, s, r) {\n for (; r > 0; ) {\n var n;\n l == 0 && (l = 8, e++, Q(e < O.LAME_MAXMP3BUFFER), u[e] = 0), n = Math.min(r, l), r -= n, l -= n, u[e] |= s >> r << l, d += n;\n }\n }\n function B(i, s) {\n var r = i.internal_flags, n;\n if (s >= 8 && (p(r, 76, 8), s -= 8), s >= 8 && (p(r, 65, 8), s -= 8), s >= 8 && (p(r, 77, 8), s -= 8), s >= 8 && (p(r, 69, 8), s -= 8), s >= 32) {\n var f = R.getLameShortVersion();\n if (s >= 32)\n for (n = 0; n < f.length && s >= 8; ++n)\n s -= 8, p(r, f.charAt(n), 8);\n }\n for (; s >= 1; s -= 1)\n p(r, r.ancillary_flag, 1), r.ancillary_flag ^= i.disable_reservoir ? 0 : 1;\n }\n function I(i, s, r) {\n for (var n = i.header[i.h_ptr].ptr; r > 0; ) {\n var f = Math.min(r, 8 - (n & 7));\n r -= f, i.header[i.h_ptr].buf[n >> 3] |= s >> r << 8 - (n & 7) - f, n += f;\n }\n i.header[i.h_ptr].ptr = n;\n }\n function v0(i, s) {\n i <<= 8;\n for (var r = 0; r < 8; r++)\n i <<= 1, s <<= 1, (s ^ i) & 65536 && (s ^= K);\n return s;\n }\n this.CRC_writeheader = function(i, s) {\n var r = 65535;\n r = v0(s[2] & 255, r), r = v0(s[3] & 255, r);\n for (var n = 6; n < i.sideinfo_len; n++)\n r = v0(s[n] & 255, r);\n s[4] = byte(r >> 8), s[5] = byte(r & 255);\n };\n function b(i, s) {\n var r = i.internal_flags, n, f, Y;\n if (n = r.l3_side, r.header[r.h_ptr].ptr = 0, X.fill(r.header[r.h_ptr].buf, 0, r.sideinfo_len, 0), i.out_samplerate < 16e3 ? I(r, 4094, 12) : I(r, 4095, 12), I(r, i.version, 1), I(r, 4 - 3, 2), I(r, i.error_protection ? 0 : 1, 1), I(r, r.bitrate_index, 4), I(r, r.samplerate_index, 2), I(r, r.padding, 1), I(r, i.extension, 1), I(r, i.mode.ordinal(), 2), I(r, r.mode_ext, 2), I(r, i.copyright, 1), I(r, i.original, 1), I(r, i.emphasis, 2), i.error_protection && I(r, 0, 16), i.version == 1) {\n for (Q(n.main_data_begin >= 0), I(r, n.main_data_begin, 9), r.channels_out == 2 ? I(r, n.private_bits, 3) : I(r, n.private_bits, 5), Y = 0; Y < r.channels_out; Y++) {\n var J;\n for (J = 0; J < 4; J++)\n I(r, n.scfsi[Y][J], 1);\n }\n for (f = 0; f < 2; f++)\n for (Y = 0; Y < r.channels_out; Y++) {\n var T = n.tt[f][Y];\n I(r, T.part2_3_length + T.part2_length, 12), I(r, T.big_values / 2, 9), I(r, T.global_gain, 8), I(r, T.scalefac_compress, 4), T.block_type != f0.NORM_TYPE ? (I(r, 1, 1), I(r, T.block_type, 2), I(r, T.mixed_block_flag, 1), T.table_select[0] == 14 && (T.table_select[0] = 16), I(r, T.table_select[0], 5), T.table_select[1] == 14 && (T.table_select[1] = 16), I(r, T.table_select[1], 5), I(r, T.subblock_gain[0], 3), I(r, T.subblock_gain[1], 3), I(r, T.subblock_gain[2], 3)) : (I(r, 0, 1), T.table_select[0] == 14 && (T.table_select[0] = 16), I(r, T.table_select[0], 5), T.table_select[1] == 14 && (T.table_select[1] = 16), I(r, T.table_select[1], 5), T.table_select[2] == 14 && (T.table_select[2] = 16), I(r, T.table_select[2], 5), Q(0 <= T.region0_count && T.region0_count < 16), Q(0 <= T.region1_count && T.region1_count < 8), I(r, T.region0_count, 4), I(r, T.region1_count, 3)), I(r, T.preflag, 1), I(r, T.scalefac_scale, 1), I(r, T.count1table_select, 1);\n }\n } else\n for (Q(n.main_data_begin >= 0), I(r, n.main_data_begin, 8), I(r, n.private_bits, r.channels_out), f = 0, Y = 0; Y < r.channels_out; Y++) {\n var T = n.tt[f][Y];\n I(r, T.part2_3_length + T.part2_length, 12), I(r, T.big_values / 2, 9), I(r, T.global_gain, 8), I(r, T.scalefac_compress, 9), T.block_type != f0.NORM_TYPE ? (I(r, 1, 1), I(r, T.block_type, 2), I(r, T.mixed_block_flag, 1), T.table_select[0] == 14 && (T.table_select[0] = 16), I(r, T.table_select[0], 5), T.table_select[1] == 14 && (T.table_select[1] = 16), I(r, T.table_select[1], 5), I(r, T.subblock_gain[0], 3), I(r, T.subblock_gain[1], 3), I(r, T.subblock_gain[2], 3)) : (I(r, 0, 1), T.table_select[0] == 14 && (T.table_select[0] = 16), I(r, T.table_select[0], 5), T.table_select[1] == 14 && (T.table_select[1] = 16), I(r, T.table_select[1], 5), T.table_select[2] == 14 && (T.table_select[2] = 16), I(r, T.table_select[2], 5), Q(0 <= T.region0_count && T.region0_count < 16), Q(0 <= T.region1_count && T.region1_count < 8), I(r, T.region0_count, 4), I(r, T.region1_count, 3)), I(r, T.scalefac_scale, 1), I(r, T.count1table_select, 1);\n }\n i.error_protection && CRC_writeheader(r, r.header[r.h_ptr].buf);\n {\n var q = r.h_ptr;\n Q(r.header[q].ptr == r.sideinfo_len * 8), r.h_ptr = q + 1 & A.MAX_HEADER_BUF - 1, r.header[r.h_ptr].write_timing = r.header[q].write_timing + s, r.h_ptr == r.w_ptr && Z.err.println(`Error: MAX_HEADER_BUF too small in bitstream.c \n`);\n }\n }\n function a(i, s) {\n var r = g.ht[s.count1table_select + 32], n, f = 0, Y = s.big_values, J = s.big_values;\n for (Q(s.count1table_select < 2), n = (s.count1 - s.big_values) / 4; n > 0; --n) {\n var T = 0, q = 0, i0;\n i0 = s.l3_enc[Y + 0], i0 != 0 && (q += 8, s.xr[J + 0] < 0 && T++), i0 = s.l3_enc[Y + 1], i0 != 0 && (q += 4, T *= 2, s.xr[J + 1] < 0 && T++), i0 = s.l3_enc[Y + 2], i0 != 0 && (q += 2, T *= 2, s.xr[J + 2] < 0 && T++), i0 = s.l3_enc[Y + 3], i0 != 0 && (q++, T *= 2, s.xr[J + 3] < 0 && T++), Y += 4, J += 4, p(i, T + r.table[q], r.hlen[q]), f += r.hlen[q];\n }\n return f;\n }\n function S(i, s, r, n, f) {\n var Y = g.ht[s], J = 0;\n if (s == 0)\n return J;\n for (var T = r; T < n; T += 2) {\n var q = 0, i0 = 0, h0 = Y.xlen, d0 = Y.xlen, M0 = 0, R0 = f.l3_enc[T], A0 = f.l3_enc[T + 1];\n if (R0 != 0 && (f.xr[T] < 0 && M0++, q--), s > 15) {\n if (R0 > 14) {\n var w0 = R0 - 15;\n Q(w0 <= Y.linmax), M0 |= w0 << 1, i0 = h0, R0 = 15;\n }\n if (A0 > 14) {\n var $0 = A0 - 15;\n Q($0 <= Y.linmax), M0 <<= h0, M0 |= $0, i0 += h0, A0 = 15;\n }\n d0 = 16;\n }\n A0 != 0 && (M0 <<= 1, f.xr[T + 1] < 0 && M0++, q--), R0 = R0 * d0 + A0, i0 -= q, q += Y.hlen[R0], p(i, Y.table[R0], q), p(i, M0, i0), J += q + i0;\n }\n return J;\n }\n function L(i, s) {\n var r = 3 * i.scalefac_band.s[3];\n r > s.big_values && (r = s.big_values);\n var n = S(i, s.table_select[0], 0, r, s);\n return n += S(\n i,\n s.table_select[1],\n r,\n s.big_values,\n s\n ), n;\n }\n function V(i, s) {\n var r, n, f, Y;\n r = s.big_values;\n var J = s.region0_count + 1;\n return Q(J < i.scalefac_band.l.length), f = i.scalefac_band.l[J], J += s.region1_count + 1, Q(J < i.scalefac_band.l.length), Y = i.scalefac_band.l[J], f > r && (f = r), Y > r && (Y = r), n = S(i, s.table_select[0], 0, f, s), n += S(\n i,\n s.table_select[1],\n f,\n Y,\n s\n ), n += S(\n i,\n s.table_select[2],\n Y,\n r,\n s\n ), n;\n }\n function N(i) {\n var s, r, n, f, Y = 0, J = i.internal_flags, T = J.l3_side;\n if (i.version == 1)\n for (s = 0; s < 2; s++)\n for (r = 0; r < J.channels_out; r++) {\n var q = T.tt[s][r], i0 = D.slen1_tab[q.scalefac_compress], h0 = D.slen2_tab[q.scalefac_compress];\n for (f = 0, n = 0; n < q.sfbdivide; n++)\n q.scalefac[n] != -1 && (p(J, q.scalefac[n], i0), f += i0);\n for (; n < q.sfbmax; n++)\n q.scalefac[n] != -1 && (p(J, q.scalefac[n], h0), f += h0);\n Q(f == q.part2_length), q.block_type == f0.SHORT_TYPE ? f += L(J, q) : f += V(J, q), f += a(J, q), Q(f == q.part2_3_length + q.part2_length), Y += f;\n }\n else\n for (s = 0, r = 0; r < J.channels_out; r++) {\n var q = T.tt[s][r], d0, M0, R0 = 0;\n if (Q(q.sfb_partition_table != null), f = 0, n = 0, M0 = 0, q.block_type == f0.SHORT_TYPE) {\n for (; M0 < 4; M0++) {\n var A0 = q.sfb_partition_table[M0] / 3, w0 = q.slen[M0];\n for (d0 = 0; d0 < A0; d0++, n++)\n p(\n J,\n Math.max(q.scalefac[n * 3 + 0], 0),\n w0\n ), p(\n J,\n Math.max(q.scalefac[n * 3 + 1], 0),\n w0\n ), p(\n J,\n Math.max(q.scalefac[n * 3 + 2], 0),\n w0\n ), R0 += 3 * w0;\n }\n f += L(J, q);\n } else {\n for (; M0 < 4; M0++) {\n var A0 = q.sfb_partition_table[M0], w0 = q.slen[M0];\n for (d0 = 0; d0 < A0; d0++, n++)\n p(J, Math.max(q.scalefac[n], 0), w0), R0 += w0;\n }\n f += V(J, q);\n }\n f += a(J, q), Q(f == q.part2_3_length), Q(R0 == q.part2_length), Y += R0 + f;\n }\n return Y;\n }\n function P() {\n this.total = 0;\n }\n function E(i, s) {\n var r = i.internal_flags, n, f, Y, J, T;\n return T = r.w_ptr, J = r.h_ptr - 1, J == -1 && (J = A.MAX_HEADER_BUF - 1), n = r.header[J].write_timing - d, s.total = n, n >= 0 && (f = 1 + J - T, J < T && (f = 1 + J - T + A.MAX_HEADER_BUF), n -= f * 8 * r.sideinfo_len), Y = s0.getframebits(i), n += Y, s.total += Y, s.total % 8 != 0 ? s.total = 1 + s.total / 8 : s.total = s.total / 8, s.total += e + 1, n < 0 && Z.err.println(`strange error flushing buffer ... \n`), n;\n }\n this.flush_bitstream = function(i) {\n var s = i.internal_flags, r, n, f = s.h_ptr - 1;\n if (f == -1 && (f = A.MAX_HEADER_BUF - 1), r = s.l3_side, !((n = E(i, new P())) < 0)) {\n if (B(i, n), Q(s.header[f].write_timing + this.getframebits(i) == d), s.ResvSize = 0, r.main_data_begin = 0, s.findReplayGain) {\n var Y = t0.GetTitleGain(s.rgdata);\n Q(NEQ(Y, GainAnalysis.GAIN_NOT_ENOUGH_SAMPLES)), s.RadioGain = Math.floor(Y * 10 + 0.5) | 0;\n }\n s.findPeakSample && (s.noclipGainChange = Math.ceil(Math.log10(s.PeakSample / 32767) * 20 * 10) | 0, s.noclipGainChange > 0 && (EQ(i.scale, 1) || EQ(i.scale, 0)) ? s.noclipScale = Math.floor(32767 / s.PeakSample * 100) / 100 : s.noclipScale = -1);\n }\n }, this.add_dummy_byte = function(i, s, r) {\n for (var n = i.internal_flags, f; r-- > 0; )\n for (H(n, s, 8), f = 0; f < A.MAX_HEADER_BUF; ++f)\n n.header[f].write_timing += 8;\n }, this.format_bitstream = function(i) {\n var s = i.internal_flags, r;\n r = s.l3_side;\n var n = this.getframebits(i);\n B(i, r.resvDrain_pre), b(i, n);\n var f = 8 * s.sideinfo_len;\n if (f += N(i), B(i, r.resvDrain_post), f += r.resvDrain_post, r.main_data_begin += (n - f) / 8, E(i, new P()) != s.ResvSize && Z.err.println(\"Internal buffer inconsistency. flushbits <> ResvSize\"), r.main_data_begin * 8 != s.ResvSize && (Z.err.printf(\n `bit reservoir error: \nl3_side.main_data_begin: %d \nResvoir size: %d \nresv drain (post) %d \nresv drain (pre) %d \nheader and sideinfo: %d \ndata bits: %d \ntotal bits: %d (remainder: %d) \nbitsperframe: %d \n`,\n 8 * r.main_data_begin,\n s.ResvSize,\n r.resvDrain_post,\n r.resvDrain_pre,\n 8 * s.sideinfo_len,\n f - r.resvDrain_post - 8 * s.sideinfo_len,\n f,\n f % 8,\n n\n ), Z.err.println(\"This is a fatal error. It has several possible causes:\"), Z.err.println(\"90%% LAME compiled with buggy version of gcc using advanced optimizations\"), Z.err.println(\" 9%% Your system is overclocked\"), Z.err.println(\" 1%% bug in LAME encoding library\"), s.ResvSize = r.main_data_begin * 8), d > 1e9) {\n var Y;\n for (Y = 0; Y < A.MAX_HEADER_BUF; ++Y)\n s.header[Y].write_timing -= d;\n d = 0;\n }\n return 0;\n }, this.copy_buffer = function(i, s, r, n, f) {\n var Y = e + 1;\n if (Y <= 0)\n return 0;\n if (n != 0 && Y > n)\n return -1;\n if (Z.arraycopy(u, 0, s, r, Y), e = -1, l = 0, f != 0) {\n var J = W(1);\n if (J[0] = i.nMusicCRC, o.updateMusicCRC(J, s, r, Y), i.nMusicCRC = J[0], Y > 0 && (i.VBR_seek_table.nBytesWritten += Y), i.decode_on_the_fly) {\n for (var T = u0([2, 1152]), q = Y, i0 = -1, h0; i0 != 0; )\n if (i0 = U.hip_decode1_unclipped(\n i.hip,\n s,\n r,\n q,\n T[0],\n T[1]\n ), q = 0, i0 == -1 && (i0 = 0), i0 > 0) {\n if (i.findPeakSample) {\n for (h0 = 0; h0 < i0; h0++)\n T[0][h0] > i.PeakSample ? i.PeakSample = T[0][h0] : -T[0][h0] > i.PeakSample && (i.PeakSample = -T[0][h0]);\n if (i.channels_out > 1)\n for (h0 = 0; h0 < i0; h0++)\n T[1][h0] > i.PeakSample ? i.PeakSample = T[1][h0] : -T[1][h0] > i.PeakSample && (i.PeakSample = -T[1][h0]);\n }\n if (i.findReplayGain && t0.AnalyzeSamples(\n i.rgdata,\n T[0],\n 0,\n T[1],\n 0,\n i0,\n i.channels_out\n ) == GainAnalysis.GAIN_ANALYSIS_ERROR)\n return -6;\n }\n }\n }\n return Y;\n }, this.init_bit_stream_w = function(i) {\n u = z(O.LAME_MAXMP3BUFFER), i.h_ptr = i.w_ptr = 0, i.header[i.h_ptr].write_timing = 0, e = -1, l = 0, d = 0;\n };\n }\n return Be = m, Be;\n}\nvar Te, ia;\nfunction Oe() {\n if (ia)\n return Te;\n ia = 1;\n var w = Q0, Z = w.System, X = w.VbrMode, z = w.ShortBlock, u0 = w.new_float, W = w.new_int_n, Q = w.new_short_n, D = w.assert, g = Qa, f0 = za, A = ne, m = x2, O = E2, s0 = N2, K = Ve(), t0 = He, U = t1();\n function R() {\n var o = j1, u = this, d = 128 * 1024;\n R.V9 = 410, R.V8 = 420, R.V7 = 430, R.V6 = 440, R.V5 = 450, R.V4 = 460, R.V3 = 470, R.V2 = 480, R.V1 = 490, R.V0 = 500, R.R3MIX = 1e3, R.STANDARD = 1001, R.EXTREME = 1002, R.INSANE = 1003, R.STANDARD_FAST = 1004, R.EXTREME_FAST = 1005, R.MEDIUM = 1006, R.MEDIUM_FAST = 1007;\n var e = 16384 + d;\n R.LAME_MAXMP3BUFFER = e;\n var l, M, p, H, B, I = new g(), v0, b, a;\n this.enc = new U(), this.setModules = function(t, _, S0, E0, V0, H0, y0, T0, F0) {\n l = t, M = _, p = S0, H = E0, B = V0, v0 = H0, b = T0, a = F0, this.enc.setModules(M, I, H, v0);\n };\n function S() {\n this.mask_adjust = 0, this.mask_adjust_short = 0, this.bo_l_weight = u0(U.SBMAX_l), this.bo_s_weight = u0(U.SBMAX_s);\n }\n function L() {\n this.lowerlimit = 0;\n }\n function V(t, _) {\n this.lowpass = _;\n }\n var N = 4294479419;\n function P(t) {\n var _;\n return t.class_id = N, _ = t.internal_flags = new A(), t.mode = o.NOT_SET, t.original = 1, t.in_samplerate = 44100, t.num_channels = 2, t.num_samples = -1, t.bWriteVbrTag = !0, t.quality = -1, t.short_blocks = null, _.subblock_gain = -1, t.lowpassfreq = 0, t.highpassfreq = 0, t.lowpasswidth = -1, t.highpasswidth = -1, t.VBR = X.vbr_off, t.VBR_q = 4, t.ATHcurve = -1, t.VBR_mean_bitrate_kbps = 128, t.VBR_min_bitrate_kbps = 0, t.VBR_max_bitrate_kbps = 0, t.VBR_hard_min = 0, _.VBR_min_bitrate = 1, _.VBR_max_bitrate = 13, t.quant_comp = -1, t.quant_comp_short = -1, t.msfix = -1, _.resample_ratio = 1, _.OldValue[0] = 180, _.OldValue[1] = 180, _.CurrentStep[0] = 4, _.CurrentStep[1] = 4, _.masking_lower = 1, _.nsPsy.attackthre = -1, _.nsPsy.attackthre_s = -1, t.scale = -1, t.athaa_type = -1, t.ATHtype = -1, t.athaa_loudapprox = -1, t.athaa_sensitivity = 0, t.useTemporal = null, t.interChRatio = -1, _.mf_samples_to_encode = U.ENCDELAY + U.POSTDELAY, t.encoder_padding = 0, _.mf_size = U.ENCDELAY - U.MDCTDELAY, t.findReplayGain = !1, t.decode_on_the_fly = !1, _.decode_on_the_fly = !1, _.findReplayGain = !1, _.findPeakSample = !1, _.RadioGain = 0, _.AudiophileGain = 0, _.noclipGainChange = 0, _.noclipScale = -1, t.preset = 0, t.write_id3tag_automatic = !0, 0;\n }\n this.lame_init = function() {\n var t = new f0();\n return P(t), t.lame_allocated_gfp = 1, t;\n };\n function E(t) {\n return t > 1 ? 0 : t <= 0 ? 1 : Math.cos(Math.PI / 2 * t);\n }\n this.nearestBitrateFullIndex = function(t) {\n var _ = [\n 8,\n 16,\n 24,\n 32,\n 40,\n 48,\n 56,\n 64,\n 80,\n 96,\n 112,\n 128,\n 160,\n 192,\n 224,\n 256,\n 320\n ], S0 = 0, E0 = 0, V0 = 0, H0 = 0;\n H0 = _[16], V0 = 16, E0 = _[16], S0 = 16;\n for (var y0 = 0; y0 < 16; y0++)\n if (Math.max(t, _[y0 + 1]) != t) {\n H0 = _[y0 + 1], V0 = y0 + 1, E0 = _[y0], S0 = y0;\n break;\n }\n return H0 - t > t - E0 ? S0 : V0;\n };\n function i(t, _) {\n var S0 = 44100;\n return _ >= 48e3 ? S0 = 48e3 : _ >= 44100 ? S0 = 44100 : _ >= 32e3 ? S0 = 32e3 : _ >= 24e3 ? S0 = 24e3 : _ >= 22050 ? S0 = 22050 : _ >= 16e3 ? S0 = 16e3 : _ >= 12e3 ? S0 = 12e3 : _ >= 11025 ? S0 = 11025 : _ >= 8e3 && (S0 = 8e3), t == -1 ? S0 : (t <= 15960 && (S0 = 44100), t <= 15250 && (S0 = 32e3), t <= 11220 && (S0 = 24e3), t <= 9970 && (S0 = 22050), t <= 7230 && (S0 = 16e3), t <= 5420 && (S0 = 12e3), t <= 4510 && (S0 = 11025), t <= 3970 && (S0 = 8e3), _ < S0 ? _ > 44100 ? 48e3 : _ > 32e3 ? 44100 : _ > 24e3 ? 32e3 : _ > 22050 ? 24e3 : _ > 16e3 ? 22050 : _ > 12e3 ? 16e3 : _ > 11025 ? 12e3 : _ > 8e3 ? 11025 : 8e3 : S0);\n }\n function s(t, _) {\n switch (t) {\n case 44100:\n return _.version = 1, 0;\n case 48e3:\n return _.version = 1, 1;\n case 32e3:\n return _.version = 1, 2;\n case 22050:\n return _.version = 0, 0;\n case 24e3:\n return _.version = 0, 1;\n case 16e3:\n return _.version = 0, 2;\n case 11025:\n return _.version = 0, 0;\n case 12e3:\n return _.version = 0, 1;\n case 8e3:\n return _.version = 0, 2;\n default:\n return _.version = 0, -1;\n }\n }\n function r(t, _, S0) {\n S0 < 16e3 && (_ = 2);\n for (var E0 = t0.bitrate_table[_][1], V0 = 2; V0 <= 14; V0++)\n t0.bitrate_table[_][V0] > 0 && Math.abs(t0.bitrate_table[_][V0] - t) < Math.abs(E0 - t) && (E0 = t0.bitrate_table[_][V0]);\n return E0;\n }\n function n(t, _, S0) {\n S0 < 16e3 && (_ = 2);\n for (var E0 = 0; E0 <= 14; E0++)\n if (t0.bitrate_table[_][E0] > 0 && t0.bitrate_table[_][E0] == t)\n return E0;\n return -1;\n }\n function f(t, _) {\n var S0 = [\n new V(8, 2e3),\n new V(16, 3700),\n new V(24, 3900),\n new V(32, 5500),\n new V(40, 7e3),\n new V(48, 7500),\n new V(56, 1e4),\n new V(64, 11e3),\n new V(80, 13500),\n new V(96, 15100),\n new V(112, 15600),\n new V(128, 17e3),\n new V(160, 17500),\n new V(192, 18600),\n new V(224, 19400),\n new V(256, 19700),\n new V(320, 20500)\n ], E0 = u.nearestBitrateFullIndex(_);\n t.lowerlimit = S0[E0].lowpass;\n }\n function Y(t) {\n var _ = t.internal_flags, S0 = 32, E0 = -1;\n if (_.lowpass1 > 0) {\n for (var V0 = 999, H0 = 0; H0 <= 31; H0++) {\n var y0 = H0 / 31;\n y0 >= _.lowpass2 && (S0 = Math.min(S0, H0)), _.lowpass1 < y0 && y0 < _.lowpass2 && (V0 = Math.min(V0, H0));\n }\n V0 == 999 ? _.lowpass1 = (S0 - 0.75) / 31 : _.lowpass1 = (V0 - 0.75) / 31, _.lowpass2 = S0 / 31;\n }\n if (_.highpass2 > 0 && _.highpass2 < 0.9 * (0.75 / 31) && (_.highpass1 = 0, _.highpass2 = 0, Z.err.println(`Warning: highpass filter disabled. highpass frequency too small\n`)), _.highpass2 > 0) {\n for (var T0 = -1, H0 = 0; H0 <= 31; H0++) {\n var y0 = H0 / 31;\n y0 <= _.highpass1 && (E0 = Math.max(E0, H0)), _.highpass1 < y0 && y0 < _.highpass2 && (T0 = Math.max(T0, H0));\n }\n _.highpass1 = E0 / 31, T0 == -1 ? _.highpass2 = (E0 + 0.75) / 31 : _.highpass2 = (T0 + 0.75) / 31;\n }\n for (var H0 = 0; H0 < 32; H0++) {\n var F0, I0, y0 = H0 / 31;\n _.highpass2 > _.highpass1 ? F0 = E((_.highpass2 - y0) / (_.highpass2 - _.highpass1 + 1e-20)) : F0 = 1, _.lowpass2 > _.lowpass1 ? I0 = E((y0 - _.lowpass1) / (_.lowpass2 - _.lowpass1 + 1e-20)) : I0 = 1, _.amp_filter[H0] = F0 * I0;\n }\n }\n function J(t) {\n var _ = t.internal_flags;\n switch (t.quality) {\n default:\n case 9:\n _.psymodel = 0, _.noise_shaping = 0, _.noise_shaping_amp = 0, _.noise_shaping_stop = 0, _.use_best_huffman = 0, _.full_outer_loop = 0;\n break;\n case 8:\n t.quality = 7;\n case 7:\n _.psymodel = 1, _.noise_shaping = 0, _.noise_shaping_amp = 0, _.noise_shaping_stop = 0, _.use_best_huffman = 0, _.full_outer_loop = 0;\n break;\n case 6:\n _.psymodel = 1, _.noise_shaping == 0 && (_.noise_shaping = 1), _.noise_shaping_amp = 0, _.noise_shaping_stop = 0, _.subblock_gain == -1 && (_.subblock_gain = 1), _.use_best_huffman = 0, _.full_outer_loop = 0;\n break;\n case 5:\n _.psymodel = 1, _.noise_shaping == 0 && (_.noise_shaping = 1), _.noise_shaping_amp = 0, _.noise_shaping_stop = 0, _.subblock_gain == -1 && (_.subblock_gain = 1), _.use_best_huffman = 0, _.full_outer_loop = 0;\n break;\n case 4:\n _.psymodel = 1, _.noise_shaping == 0 && (_.noise_shaping = 1), _.noise_shaping_amp = 0, _.noise_shaping_stop = 0, _.subblock_gain == -1 && (_.subblock_gain = 1), _.use_best_huffman = 1, _.full_outer_loop = 0;\n break;\n case 3:\n _.psymodel = 1, _.noise_shaping == 0 && (_.noise_shaping = 1), _.noise_shaping_amp = 1, _.noise_shaping_stop = 1, _.subblock_gain == -1 && (_.subblock_gain = 1), _.use_best_huffman = 1, _.full_outer_loop = 0;\n break;\n case 2:\n _.psymodel = 1, _.noise_shaping == 0 && (_.noise_shaping = 1), _.substep_shaping == 0 && (_.substep_shaping = 2), _.noise_shaping_amp = 1, _.noise_shaping_stop = 1, _.subblock_gain == -1 && (_.subblock_gain = 1), _.use_best_huffman = 1, _.full_outer_loop = 0;\n break;\n case 1:\n _.psymodel = 1, _.noise_shaping == 0 && (_.noise_shaping = 1), _.substep_shaping == 0 && (_.substep_shaping = 2), _.noise_shaping_amp = 2, _.noise_shaping_stop = 1, _.subblock_gain == -1 && (_.subblock_gain = 1), _.use_best_huffman = 1, _.full_outer_loop = 0;\n break;\n case 0:\n _.psymodel = 1, _.noise_shaping == 0 && (_.noise_shaping = 1), _.substep_shaping == 0 && (_.substep_shaping = 2), _.noise_shaping_amp = 2, _.noise_shaping_stop = 1, _.subblock_gain == -1 && (_.subblock_gain = 1), _.use_best_huffman = 1, _.full_outer_loop = 0;\n break;\n }\n }\n function T(t) {\n var _ = t.internal_flags;\n t.frameNum = 0, t.write_id3tag_automatic && b.id3tag_write_v2(t), _.bitrate_stereoMode_Hist = W([16, 4 + 1]), _.bitrate_blockType_Hist = W([16, 4 + 1 + 1]), _.PeakSample = 0, t.bWriteVbrTag && v0.InitVbrTag(t);\n }\n this.lame_init_params = function(t) {\n var _ = t.internal_flags;\n if (_.Class_ID = 0, _.ATH == null && (_.ATH = new m()), _.PSY == null && (_.PSY = new S()), _.rgdata == null && (_.rgdata = new O()), _.channels_in = t.num_channels, _.channels_in == 1 && (t.mode = o.MONO), _.channels_out = t.mode == o.MONO ? 1 : 2, _.mode_ext = U.MPG_MD_MS_LR, t.mode == o.MONO && (t.force_ms = !1), t.VBR == X.vbr_off && t.VBR_mean_bitrate_kbps != 128 && t.brate == 0 && (t.brate = t.VBR_mean_bitrate_kbps), t.VBR == X.vbr_off || t.VBR == X.vbr_mtrh || t.VBR == X.vbr_mt || (t.free_format = !1), t.VBR == X.vbr_off && t.brate == 0 && K.EQ(t.compression_ratio, 0) && (t.compression_ratio = 11.025), t.VBR == X.vbr_off && t.compression_ratio > 0 && (t.out_samplerate == 0 && (t.out_samplerate = map2MP3Frequency(int(0.97 * t.in_samplerate))), t.brate = 0 | t.out_samplerate * 16 * _.channels_out / (1e3 * t.compression_ratio), _.samplerate_index = s(t.out_samplerate, t), t.free_format || (t.brate = r(\n t.brate,\n t.version,\n t.out_samplerate\n ))), t.out_samplerate != 0 && (t.out_samplerate < 16e3 ? (t.VBR_mean_bitrate_kbps = Math.max(\n t.VBR_mean_bitrate_kbps,\n 8\n ), t.VBR_mean_bitrate_kbps = Math.min(\n t.VBR_mean_bitrate_kbps,\n 64\n )) : t.out_samplerate < 32e3 ? (t.VBR_mean_bitrate_kbps = Math.max(\n t.VBR_mean_bitrate_kbps,\n 8\n ), t.VBR_mean_bitrate_kbps = Math.min(\n t.VBR_mean_bitrate_kbps,\n 160\n )) : (t.VBR_mean_bitrate_kbps = Math.max(\n t.VBR_mean_bitrate_kbps,\n 32\n ), t.VBR_mean_bitrate_kbps = Math.min(\n t.VBR_mean_bitrate_kbps,\n 320\n ))), t.lowpassfreq == 0) {\n var S0 = 16e3;\n switch (t.VBR) {\n case X.vbr_off: {\n var E0 = new L();\n f(E0, t.brate), S0 = E0.lowerlimit;\n break;\n }\n case X.vbr_abr: {\n var E0 = new L();\n f(E0, t.VBR_mean_bitrate_kbps), S0 = E0.lowerlimit;\n break;\n }\n case X.vbr_rh: {\n var V0 = [\n 19500,\n 19e3,\n 18600,\n 18e3,\n 17500,\n 16e3,\n 15600,\n 14900,\n 12500,\n 1e4,\n 3950\n ];\n if (0 <= t.VBR_q && t.VBR_q <= 9) {\n var H0 = V0[t.VBR_q], y0 = V0[t.VBR_q + 1], T0 = t.VBR_q_frac;\n S0 = linear_int(H0, y0, T0);\n } else\n S0 = 19500;\n break;\n }\n default: {\n var V0 = [\n 19500,\n 19e3,\n 18500,\n 18e3,\n 17500,\n 16500,\n 15500,\n 14500,\n 12500,\n 9500,\n 3950\n ];\n if (0 <= t.VBR_q && t.VBR_q <= 9) {\n var H0 = V0[t.VBR_q], y0 = V0[t.VBR_q + 1], T0 = t.VBR_q_frac;\n S0 = linear_int(H0, y0, T0);\n } else\n S0 = 19500;\n }\n }\n t.mode == o.MONO && (t.VBR == X.vbr_off || t.VBR == X.vbr_abr) && (S0 *= 1.5), t.lowpassfreq = S0 | 0;\n }\n if (t.out_samplerate == 0 && (2 * t.lowpassfreq > t.in_samplerate && (t.lowpassfreq = t.in_samplerate / 2), t.out_samplerate = i(\n t.lowpassfreq | 0,\n t.in_samplerate\n )), t.lowpassfreq = Math.min(20500, t.lowpassfreq), t.lowpassfreq = Math.min(t.out_samplerate / 2, t.lowpassfreq), t.VBR == X.vbr_off && (t.compression_ratio = t.out_samplerate * 16 * _.channels_out / (1e3 * t.brate)), t.VBR == X.vbr_abr && (t.compression_ratio = t.out_samplerate * 16 * _.channels_out / (1e3 * t.VBR_mean_bitrate_kbps)), t.bWriteVbrTag || (t.findReplayGain = !1, t.decode_on_the_fly = !1, _.findPeakSample = !1), _.findReplayGain = t.findReplayGain, _.decode_on_the_fly = t.decode_on_the_fly, _.decode_on_the_fly && (_.findPeakSample = !0), _.findReplayGain && l.InitGainAnalysis(_.rgdata, t.out_samplerate) == GainAnalysis.INIT_GAIN_ANALYSIS_ERROR)\n return t.internal_flags = null, -6;\n switch (_.decode_on_the_fly && !t.decode_only && (_.hip != null && a.hip_decode_exit(_.hip), _.hip = a.hip_decode_init()), _.mode_gr = t.out_samplerate <= 24e3 ? 1 : 2, t.framesize = 576 * _.mode_gr, t.encoder_delay = U.ENCDELAY, _.resample_ratio = t.in_samplerate / t.out_samplerate, t.VBR) {\n case X.vbr_mt:\n case X.vbr_rh:\n case X.vbr_mtrh:\n {\n var F0 = [\n 5.7,\n 6.5,\n 7.3,\n 8.2,\n 10,\n 11.9,\n 13,\n 14,\n 15,\n 16.5\n ];\n t.compression_ratio = F0[t.VBR_q];\n }\n break;\n case X.vbr_abr:\n t.compression_ratio = t.out_samplerate * 16 * _.channels_out / (1e3 * t.VBR_mean_bitrate_kbps);\n break;\n default:\n t.compression_ratio = t.out_samplerate * 16 * _.channels_out / (1e3 * t.brate);\n break;\n }\n if (t.mode == o.NOT_SET && (t.mode = o.JOINT_STEREO), t.highpassfreq > 0 ? (_.highpass1 = 2 * t.highpassfreq, t.highpasswidth >= 0 ? _.highpass2 = 2 * (t.highpassfreq + t.highpasswidth) : _.highpass2 = (1 + 0) * 2 * t.highpassfreq, _.highpass1 /= t.out_samplerate, _.highpass2 /= t.out_samplerate) : (_.highpass1 = 0, _.highpass2 = 0), t.lowpassfreq > 0 ? (_.lowpass2 = 2 * t.lowpassfreq, t.lowpasswidth >= 0 ? (_.lowpass1 = 2 * (t.lowpassfreq - t.lowpasswidth), _.lowpass1 < 0 && (_.lowpass1 = 0)) : _.lowpass1 = (1 - 0) * 2 * t.lowpassfreq, _.lowpass1 /= t.out_samplerate, _.lowpass2 /= t.out_samplerate) : (_.lowpass1 = 0, _.lowpass2 = 0), Y(t), _.samplerate_index = s(t.out_samplerate, t), _.samplerate_index < 0)\n return t.internal_flags = null, -1;\n if (t.VBR == X.vbr_off) {\n if (t.free_format)\n _.bitrate_index = 0;\n else if (t.brate = r(\n t.brate,\n t.version,\n t.out_samplerate\n ), _.bitrate_index = n(\n t.brate,\n t.version,\n t.out_samplerate\n ), _.bitrate_index <= 0)\n return t.internal_flags = null, -1;\n } else\n _.bitrate_index = 1;\n t.analysis && (t.bWriteVbrTag = !1), _.pinfo != null && (t.bWriteVbrTag = !1), M.init_bit_stream_w(_);\n for (var I0 = _.samplerate_index + 3 * t.version + 6 * (t.out_samplerate < 16e3 ? 1 : 0), b0 = 0; b0 < U.SBMAX_l + 1; b0++)\n _.scalefac_band.l[b0] = H.sfBandIndex[I0].l[b0];\n for (var b0 = 0; b0 < U.PSFB21 + 1; b0++) {\n var G0 = (_.scalefac_band.l[22] - _.scalefac_band.l[21]) / U.PSFB21, e1 = _.scalefac_band.l[21] + b0 * G0;\n _.scalefac_band.psfb21[b0] = e1;\n }\n _.scalefac_band.psfb21[U.PSFB21] = 576;\n for (var b0 = 0; b0 < U.SBMAX_s + 1; b0++)\n _.scalefac_band.s[b0] = H.sfBandIndex[I0].s[b0];\n for (var b0 = 0; b0 < U.PSFB12 + 1; b0++) {\n var G0 = (_.scalefac_band.s[13] - _.scalefac_band.s[12]) / U.PSFB12, e1 = _.scalefac_band.s[12] + b0 * G0;\n _.scalefac_band.psfb12[b0] = e1;\n }\n _.scalefac_band.psfb12[U.PSFB12] = 192, t.version == 1 ? _.sideinfo_len = _.channels_out == 1 ? 4 + 17 : 4 + 32 : _.sideinfo_len = _.channels_out == 1 ? 4 + 9 : 4 + 17, t.error_protection && (_.sideinfo_len += 2), T(t), _.Class_ID = N;\n {\n var Y0;\n for (Y0 = 0; Y0 < 19; Y0++)\n _.nsPsy.pefirbuf[Y0] = 700 * _.mode_gr * _.channels_out;\n t.ATHtype == -1 && (t.ATHtype = 4);\n }\n switch (D(t.VBR_q <= 9), D(t.VBR_q >= 0), t.VBR) {\n case X.vbr_mt:\n t.VBR = X.vbr_mtrh;\n case X.vbr_mtrh: {\n t.useTemporal == null && (t.useTemporal = !1), p.apply_preset(t, 500 - t.VBR_q * 10, 0), t.quality < 0 && (t.quality = LAME_DEFAULT_QUALITY), t.quality < 5 && (t.quality = 0), t.quality > 5 && (t.quality = 5), _.PSY.mask_adjust = t.maskingadjust, _.PSY.mask_adjust_short = t.maskingadjust_short, t.experimentalY ? _.sfb21_extra = !1 : _.sfb21_extra = t.out_samplerate > 44e3, _.iteration_loop = new VBRNewIterationLoop(B);\n break;\n }\n case X.vbr_rh: {\n p.apply_preset(t, 500 - t.VBR_q * 10, 0), _.PSY.mask_adjust = t.maskingadjust, _.PSY.mask_adjust_short = t.maskingadjust_short, t.experimentalY ? _.sfb21_extra = !1 : _.sfb21_extra = t.out_samplerate > 44e3, t.quality > 6 && (t.quality = 6), t.quality < 0 && (t.quality = LAME_DEFAULT_QUALITY), _.iteration_loop = new VBROldIterationLoop(B);\n break;\n }\n default: {\n var v;\n _.sfb21_extra = !1, t.quality < 0 && (t.quality = LAME_DEFAULT_QUALITY), v = t.VBR, v == X.vbr_off && (t.VBR_mean_bitrate_kbps = t.brate), p.apply_preset(t, t.VBR_mean_bitrate_kbps, 0), t.VBR = v, _.PSY.mask_adjust = t.maskingadjust, _.PSY.mask_adjust_short = t.maskingadjust_short, v == X.vbr_off ? _.iteration_loop = new s0(B) : _.iteration_loop = new ABRIterationLoop(B);\n break;\n }\n }\n if (D(t.scale >= 0), t.VBR != X.vbr_off) {\n if (_.VBR_min_bitrate = 1, _.VBR_max_bitrate = 14, t.out_samplerate < 16e3 && (_.VBR_max_bitrate = 8), t.VBR_min_bitrate_kbps != 0 && (t.VBR_min_bitrate_kbps = r(\n t.VBR_min_bitrate_kbps,\n t.version,\n t.out_samplerate\n ), _.VBR_min_bitrate = n(\n t.VBR_min_bitrate_kbps,\n t.version,\n t.out_samplerate\n ), _.VBR_min_bitrate < 0) || t.VBR_max_bitrate_kbps != 0 && (t.VBR_max_bitrate_kbps = r(\n t.VBR_max_bitrate_kbps,\n t.version,\n t.out_samplerate\n ), _.VBR_max_bitrate = n(\n t.VBR_max_bitrate_kbps,\n t.version,\n t.out_samplerate\n ), _.VBR_max_bitrate < 0))\n return -1;\n t.VBR_min_bitrate_kbps = t0.bitrate_table[t.version][_.VBR_min_bitrate], t.VBR_max_bitrate_kbps = t0.bitrate_table[t.version][_.VBR_max_bitrate], t.VBR_mean_bitrate_kbps = Math.min(\n t0.bitrate_table[t.version][_.VBR_max_bitrate],\n t.VBR_mean_bitrate_kbps\n ), t.VBR_mean_bitrate_kbps = Math.max(\n t0.bitrate_table[t.version][_.VBR_min_bitrate],\n t.VBR_mean_bitrate_kbps\n );\n }\n return t.tune && (_.PSY.mask_adjust += t.tune_value_a, _.PSY.mask_adjust_short += t.tune_value_a), J(t), D(t.scale >= 0), t.athaa_type < 0 ? _.ATH.useAdjust = 3 : _.ATH.useAdjust = t.athaa_type, _.ATH.aaSensitivityP = Math.pow(10, t.athaa_sensitivity / -10), t.short_blocks == null && (t.short_blocks = z.short_block_allowed), t.short_blocks == z.short_block_allowed && (t.mode == o.JOINT_STEREO || t.mode == o.STEREO) && (t.short_blocks = z.short_block_coupled), t.quant_comp < 0 && (t.quant_comp = 1), t.quant_comp_short < 0 && (t.quant_comp_short = 0), t.msfix < 0 && (t.msfix = 0), t.exp_nspsytune = t.exp_nspsytune | 1, t.internal_flags.nsPsy.attackthre < 0 && (t.internal_flags.nsPsy.attackthre = g.NSATTACKTHRE), t.internal_flags.nsPsy.attackthre_s < 0 && (t.internal_flags.nsPsy.attackthre_s = g.NSATTACKTHRE_S), D(t.scale >= 0), t.scale < 0 && (t.scale = 1), t.ATHtype < 0 && (t.ATHtype = 4), t.ATHcurve < 0 && (t.ATHcurve = 4), t.athaa_loudapprox < 0 && (t.athaa_loudapprox = 2), t.interChRatio < 0 && (t.interChRatio = 0), t.useTemporal == null && (t.useTemporal = !0), _.slot_lag = _.frac_SpF = 0, t.VBR == X.vbr_off && (_.slot_lag = _.frac_SpF = (t.version + 1) * 72e3 * t.brate % t.out_samplerate | 0), H.iteration_init(t), I.psymodel_init(t), D(t.scale >= 0), 0;\n };\n function q(t, _) {\n (t.in_buffer_0 == null || t.in_buffer_nsamples < _) && (t.in_buffer_0 = u0(_), t.in_buffer_1 = u0(_), t.in_buffer_nsamples = _);\n }\n this.lame_encode_flush = function(t, _, S0, E0) {\n var V0 = t.internal_flags, H0 = Q([2, 1152]), y0 = 0, T0, F0, I0, b0, G0 = V0.mf_samples_to_encode - U.POSTDELAY, e1 = i0(t);\n if (V0.mf_samples_to_encode < 1)\n return 0;\n for (T0 = 0, t.in_samplerate != t.out_samplerate && (G0 += 16 * t.out_samplerate / t.in_samplerate), I0 = t.framesize - G0 % t.framesize, I0 < 576 && (I0 += t.framesize), t.encoder_padding = I0, b0 = (G0 + I0) / t.framesize; b0 > 0 && y0 >= 0; ) {\n var Y0 = e1 - V0.mf_size, v = t.frameNum;\n Y0 *= t.in_samplerate, Y0 /= t.out_samplerate, Y0 > 1152 && (Y0 = 1152), Y0 < 1 && (Y0 = 1), F0 = E0 - T0, E0 == 0 && (F0 = 0), y0 = this.lame_encode_buffer(\n t,\n H0[0],\n H0[1],\n Y0,\n _,\n S0,\n F0\n ), S0 += y0, T0 += y0, b0 -= v != t.frameNum ? 1 : 0;\n }\n if (V0.mf_samples_to_encode = 0, y0 < 0 || (F0 = E0 - T0, E0 == 0 && (F0 = 0), M.flush_bitstream(t), y0 = M.copy_buffer(\n V0,\n _,\n S0,\n F0,\n 1\n ), y0 < 0))\n return y0;\n if (S0 += y0, T0 += y0, F0 = E0 - T0, E0 == 0 && (F0 = 0), t.write_id3tag_automatic) {\n if (b.id3tag_write_v1(t), y0 = M.copy_buffer(\n V0,\n _,\n S0,\n F0,\n 0\n ), y0 < 0)\n return y0;\n T0 += y0;\n }\n return T0;\n }, this.lame_encode_buffer = function(t, _, S0, E0, V0, H0, y0) {\n var T0 = t.internal_flags, F0 = [null, null];\n if (T0.Class_ID != N)\n return -3;\n if (E0 == 0)\n return 0;\n q(T0, E0), F0[0] = T0.in_buffer_0, F0[1] = T0.in_buffer_1;\n for (var I0 = 0; I0 < E0; I0++)\n F0[0][I0] = _[I0], T0.channels_in > 1 && (F0[1][I0] = S0[I0]);\n return h0(\n t,\n F0[0],\n F0[1],\n E0,\n V0,\n H0,\n y0\n );\n };\n function i0(t) {\n var _ = U.BLKSIZE + t.framesize - U.FFTOFFSET;\n return _ = Math.max(_, 512 + t.framesize - 32), _;\n }\n function h0(t, _, S0, E0, V0, H0, y0) {\n var T0 = t.internal_flags, F0 = 0, I0, b0, G0, e1, Y0, v = [null, null], h = [null, null];\n if (T0.Class_ID != N)\n return -3;\n if (E0 == 0)\n return 0;\n if (Y0 = M.copy_buffer(T0, V0, H0, y0, 0), Y0 < 0)\n return Y0;\n if (H0 += Y0, F0 += Y0, h[0] = _, h[1] = S0, K.NEQ(t.scale, 0) && K.NEQ(t.scale, 1))\n for (b0 = 0; b0 < E0; ++b0)\n h[0][b0] *= t.scale, T0.channels_out == 2 && (h[1][b0] *= t.scale);\n if (K.NEQ(t.scale_left, 0) && K.NEQ(t.scale_left, 1))\n for (b0 = 0; b0 < E0; ++b0)\n h[0][b0] *= t.scale_left;\n if (K.NEQ(t.scale_right, 0) && K.NEQ(t.scale_right, 1))\n for (b0 = 0; b0 < E0; ++b0)\n h[1][b0] *= t.scale_right;\n if (t.num_channels == 2 && T0.channels_out == 1)\n for (b0 = 0; b0 < E0; ++b0)\n h[0][b0] = 0.5 * (h[0][b0] + h[1][b0]), h[1][b0] = 0;\n e1 = i0(t), v[0] = T0.mfbuf[0], v[1] = T0.mfbuf[1];\n for (var x = 0; E0 > 0; ) {\n var y = [null, null], k = 0, c = 0;\n y[0] = h[0], y[1] = h[1];\n var C = new M0();\n if (f1(\n t,\n v,\n y,\n x,\n E0,\n C\n ), k = C.n_in, c = C.n_out, T0.findReplayGain && !T0.decode_on_the_fly && l.AnalyzeSamples(\n T0.rgdata,\n v[0],\n T0.mf_size,\n v[1],\n T0.mf_size,\n c,\n T0.channels_out\n ) == GainAnalysis.GAIN_ANALYSIS_ERROR)\n return -6;\n if (E0 -= k, x += k, T0.channels_out == 2, T0.mf_size += c, D(T0.mf_size <= A.MFSIZE), T0.mf_samples_to_encode < 1 && (T0.mf_samples_to_encode = U.ENCDELAY + U.POSTDELAY), T0.mf_samples_to_encode += c, T0.mf_size >= e1) {\n var G = y0 - F0;\n if (y0 == 0 && (G = 0), I0 = d0(\n t,\n v[0],\n v[1],\n V0,\n H0,\n G\n ), I0 < 0)\n return I0;\n for (H0 += I0, F0 += I0, T0.mf_size -= t.framesize, T0.mf_samples_to_encode -= t.framesize, G0 = 0; G0 < T0.channels_out; G0++)\n for (b0 = 0; b0 < T0.mf_size; b0++)\n v[G0][b0] = v[G0][b0 + t.framesize];\n }\n }\n return F0;\n }\n function d0(t, _, S0, E0, V0, H0) {\n var y0 = u.enc.lame_encode_mp3_frame(\n t,\n _,\n S0,\n E0,\n V0,\n H0\n );\n return t.frameNum++, y0;\n }\n function M0() {\n this.n_in = 0, this.n_out = 0;\n }\n function R0() {\n this.num_used = 0;\n }\n function A0(t, _) {\n return _ != 0 ? A0(_, t % _) : t;\n }\n function w0(t, _, S0) {\n var E0 = Math.PI * _;\n t /= S0, t < 0 && (t = 0), t > 1 && (t = 1);\n var V0 = t - 0.5, H0 = 0.42 - 0.5 * Math.cos(2 * t * Math.PI) + 0.08 * Math.cos(4 * t * Math.PI);\n return Math.abs(V0) < 1e-9 ? E0 / Math.PI : H0 * Math.sin(S0 * E0 * V0) / (Math.PI * S0 * V0);\n }\n function $0(t, _, S0, E0, V0, H0, y0, T0, F0) {\n var I0 = t.internal_flags, b0, G0 = 0, e1, Y0 = t.out_samplerate / A0(t.out_samplerate, t.in_samplerate);\n Y0 > A.BPC && (Y0 = A.BPC);\n var v = Math.abs(I0.resample_ratio - Math.floor(0.5 + I0.resample_ratio)) < 1e-4 ? 1 : 0, h = 1 / I0.resample_ratio;\n h > 1 && (h = 1);\n var x = 31;\n x % 2 == 0 && --x, x += v;\n var y = x + 1;\n if (I0.fill_buffer_resample_init == 0) {\n for (I0.inbuf_old[0] = u0(y), I0.inbuf_old[1] = u0(y), b0 = 0; b0 <= 2 * Y0; ++b0)\n I0.blackfilt[b0] = u0(y);\n for (I0.itime[0] = 0, I0.itime[1] = 0, G0 = 0; G0 <= 2 * Y0; G0++) {\n var k = 0, c = (G0 - Y0) / (2 * Y0);\n for (b0 = 0; b0 <= x; b0++)\n k += I0.blackfilt[G0][b0] = w0(\n b0 - c,\n h,\n x\n );\n for (b0 = 0; b0 <= x; b0++)\n I0.blackfilt[G0][b0] /= k;\n }\n I0.fill_buffer_resample_init = 1;\n }\n var C = I0.inbuf_old[F0];\n for (e1 = 0; e1 < E0; e1++) {\n var G, F;\n if (G = e1 * I0.resample_ratio, G0 = 0 | Math.floor(G - I0.itime[F0]), x + G0 - x / 2 >= y0)\n break;\n var c = G - I0.itime[F0] - (G0 + 0.5 * (x % 2));\n F = 0 | Math.floor(c * 2 * Y0 + Y0 + 0.5);\n var e0 = 0;\n for (b0 = 0; b0 <= x; ++b0) {\n var $ = 0 | b0 + G0 - x / 2, a0;\n a0 = $ < 0 ? C[y + $] : V0[H0 + $], e0 += a0 * I0.blackfilt[F][b0];\n }\n _[S0 + e1] = e0;\n }\n if (T0.num_used = Math.min(y0, x + G0 - x / 2), I0.itime[F0] += T0.num_used - e1 * I0.resample_ratio, T0.num_used >= y)\n for (b0 = 0; b0 < y; b0++)\n C[b0] = V0[H0 + T0.num_used + b0 - y];\n else {\n var m0 = y - T0.num_used;\n for (b0 = 0; b0 < m0; ++b0)\n C[b0] = C[b0 + T0.num_used];\n for (G0 = 0; b0 < y; ++b0, ++G0)\n C[b0] = V0[H0 + G0];\n D(G0 == T0.num_used);\n }\n return e1;\n }\n function f1(t, _, S0, E0, V0, H0) {\n var y0 = t.internal_flags;\n if (y0.resample_ratio < 0.9999 || y0.resample_ratio > 1.0001)\n for (var T0 = 0; T0 < y0.channels_out; T0++) {\n var F0 = new R0();\n H0.n_out = $0(\n t,\n _[T0],\n y0.mf_size,\n t.framesize,\n S0[T0],\n E0,\n V0,\n F0,\n T0\n ), H0.n_in = F0.num_used;\n }\n else {\n H0.n_out = Math.min(t.framesize, V0), H0.n_in = H0.n_out;\n for (var I0 = 0; I0 < H0.n_out; ++I0)\n _[0][y0.mf_size + I0] = S0[0][E0 + I0], y0.channels_out == 2 && (_[1][y0.mf_size + I0] = S0[1][E0 + I0]);\n }\n }\n }\n return Te = R, Te;\n}\nvar p2 = Q0, M1 = p2.VbrMode;\nfunction H2() {\n var w = Oe();\n function Z(A, m, O, s0, K, t0, U, R, o, u, d, e, l, M, p) {\n this.vbr_q = A, this.quant_comp = m, this.quant_comp_s = O, this.expY = s0, this.st_lrm = K, this.st_s = t0, this.masking_adj = U, this.masking_adj_short = R, this.ath_lower = o, this.ath_curve = u, this.ath_sensitivity = d, this.interch = e, this.safejoint = l, this.sfb21mod = M, this.msfix = p;\n }\n function X(A, m, O, s0, K, t0, U, R, o, u, d, e, l, M) {\n this.quant_comp = m, this.quant_comp_s = O, this.safejoint = s0, this.nsmsfix = K, this.st_lrm = t0, this.st_s = U, this.nsbass = R, this.scale = o, this.masking_adj = u, this.ath_lower = d, this.ath_curve = e, this.interch = l, this.sfscale = M;\n }\n var z;\n this.setModules = function(A) {\n z = A;\n };\n var u0 = [\n new Z(0, 9, 9, 0, 5.2, 125, -4.2, -6.3, 4.8, 1, 0, 0, 2, 21, 0.97),\n new Z(1, 9, 9, 0, 5.3, 125, -3.6, -5.6, 4.5, 1.5, 0, 0, 2, 21, 1.35),\n new Z(2, 9, 9, 0, 5.6, 125, -2.2, -3.5, 2.8, 2, 0, 0, 2, 21, 1.49),\n new Z(3, 9, 9, 1, 5.8, 130, -1.8, -2.8, 2.6, 3, -4, 0, 2, 20, 1.64),\n new Z(4, 9, 9, 1, 6, 135, -0.7, -1.1, 1.1, 3.5, -8, 0, 2, 0, 1.79),\n new Z(5, 9, 9, 1, 6.4, 140, 0.5, 0.4, -7.5, 4, -12, 2e-4, 0, 0, 1.95),\n new Z(6, 9, 9, 1, 6.6, 145, 0.67, 0.65, -14.7, 6.5, -19, 4e-4, 0, 0, 2.3),\n new Z(7, 9, 9, 1, 6.6, 145, 0.8, 0.75, -19.7, 8, -22, 6e-4, 0, 0, 2.7),\n new Z(8, 9, 9, 1, 6.6, 145, 1.2, 1.15, -27.5, 10, -23, 7e-4, 0, 0, 0),\n new Z(9, 9, 9, 1, 6.6, 145, 1.6, 1.6, -36, 11, -25, 8e-4, 0, 0, 0),\n new Z(10, 9, 9, 1, 6.6, 145, 2, 2, -36, 12, -25, 8e-4, 0, 0, 0)\n ], W = [\n new Z(0, 9, 9, 0, 4.2, 25, -7, -4, 7.5, 1, 0, 0, 2, 26, 0.97),\n new Z(1, 9, 9, 0, 4.2, 25, -5.6, -3.6, 4.5, 1.5, 0, 0, 2, 21, 1.35),\n new Z(2, 9, 9, 0, 4.2, 25, -4.4, -1.8, 2, 2, 0, 0, 2, 18, 1.49),\n new Z(3, 9, 9, 1, 4.2, 25, -3.4, -1.25, 1.1, 3, -4, 0, 2, 15, 1.64),\n new Z(4, 9, 9, 1, 4.2, 25, -2.2, 0.1, 0, 3.5, -8, 0, 2, 0, 1.79),\n new Z(5, 9, 9, 1, 4.2, 25, -1, 1.65, -7.7, 4, -12, 2e-4, 0, 0, 1.95),\n new Z(6, 9, 9, 1, 4.2, 25, -0, 2.47, -7.7, 6.5, -19, 4e-4, 0, 0, 2),\n new Z(7, 9, 9, 1, 4.2, 25, 0.5, 2, -14.5, 8, -22, 6e-4, 0, 0, 2),\n new Z(8, 9, 9, 1, 4.2, 25, 1, 2.4, -22, 10, -23, 7e-4, 0, 0, 2),\n new Z(9, 9, 9, 1, 4.2, 25, 1.5, 2.95, -30, 11, -25, 8e-4, 0, 0, 2),\n new Z(10, 9, 9, 1, 4.2, 25, 2, 2.95, -36, 12, -30, 8e-4, 0, 0, 2)\n ];\n function Q(A, m, O) {\n var s0 = A.VBR == M1.vbr_rh ? u0 : W, K = A.VBR_q_frac, t0 = s0[m], U = s0[m + 1], R = t0;\n t0.st_lrm = t0.st_lrm + K * (U.st_lrm - t0.st_lrm), t0.st_s = t0.st_s + K * (U.st_s - t0.st_s), t0.masking_adj = t0.masking_adj + K * (U.masking_adj - t0.masking_adj), t0.masking_adj_short = t0.masking_adj_short + K * (U.masking_adj_short - t0.masking_adj_short), t0.ath_lower = t0.ath_lower + K * (U.ath_lower - t0.ath_lower), t0.ath_curve = t0.ath_curve + K * (U.ath_curve - t0.ath_curve), t0.ath_sensitivity = t0.ath_sensitivity + K * (U.ath_sensitivity - t0.ath_sensitivity), t0.interch = t0.interch + K * (U.interch - t0.interch), t0.msfix = t0.msfix + K * (U.msfix - t0.msfix), f0(A, R.vbr_q), O != 0 ? A.quant_comp = R.quant_comp : Math.abs(A.quant_comp - -1) > 0 || (A.quant_comp = R.quant_comp), O != 0 ? A.quant_comp_short = R.quant_comp_s : Math.abs(A.quant_comp_short - -1) > 0 || (A.quant_comp_short = R.quant_comp_s), R.expY != 0 && (A.experimentalY = R.expY != 0), O != 0 ? A.internal_flags.nsPsy.attackthre = R.st_lrm : Math.abs(A.internal_flags.nsPsy.attackthre - -1) > 0 || (A.internal_flags.nsPsy.attackthre = R.st_lrm), O != 0 ? A.internal_flags.nsPsy.attackthre_s = R.st_s : Math.abs(A.internal_flags.nsPsy.attackthre_s - -1) > 0 || (A.internal_flags.nsPsy.attackthre_s = R.st_s), O != 0 ? A.maskingadjust = R.masking_adj : Math.abs(A.maskingadjust - 0) > 0 || (A.maskingadjust = R.masking_adj), O != 0 ? A.maskingadjust_short = R.masking_adj_short : Math.abs(A.maskingadjust_short - 0) > 0 || (A.maskingadjust_short = R.masking_adj_short), O != 0 ? A.ATHlower = -R.ath_lower / 10 : Math.abs(-A.ATHlower * 10 - 0) > 0 || (A.ATHlower = -R.ath_lower / 10), O != 0 ? A.ATHcurve = R.ath_curve : Math.abs(A.ATHcurve - -1) > 0 || (A.ATHcurve = R.ath_curve), O != 0 ? A.athaa_sensitivity = R.ath_sensitivity : Math.abs(A.athaa_sensitivity - -1) > 0 || (A.athaa_sensitivity = R.ath_sensitivity), R.interch > 0 && (O != 0 ? A.interChRatio = R.interch : Math.abs(A.interChRatio - -1) > 0 || (A.interChRatio = R.interch)), R.safejoint > 0 && (A.exp_nspsytune = A.exp_nspsytune | R.safejoint), R.sfb21mod > 0 && (A.exp_nspsytune = A.exp_nspsytune | R.sfb21mod << 20), O != 0 ? A.msfix = R.msfix : Math.abs(A.msfix - -1) > 0 || (A.msfix = R.msfix), O == 0 && (A.VBR_q = m, A.VBR_q_frac = K);\n }\n var D = [\n new X(8, 9, 9, 0, 0, 6.6, 145, 0, 0.95, 0, -30, 11, 12e-4, 1),\n /* 8, impossible to use in stereo */\n new X(16, 9, 9, 0, 0, 6.6, 145, 0, 0.95, 0, -25, 11, 1e-3, 1),\n /* 16 */\n new X(24, 9, 9, 0, 0, 6.6, 145, 0, 0.95, 0, -20, 11, 1e-3, 1),\n /* 24 */\n new X(32, 9, 9, 0, 0, 6.6, 145, 0, 0.95, 0, -15, 11, 1e-3, 1),\n /* 32 */\n new X(40, 9, 9, 0, 0, 6.6, 145, 0, 0.95, 0, -10, 11, 9e-4, 1),\n /* 40 */\n new X(48, 9, 9, 0, 0, 6.6, 145, 0, 0.95, 0, -10, 11, 9e-4, 1),\n /* 48 */\n new X(56, 9, 9, 0, 0, 6.6, 145, 0, 0.95, 0, -6, 11, 8e-4, 1),\n /* 56 */\n new X(64, 9, 9, 0, 0, 6.6, 145, 0, 0.95, 0, -2, 11, 8e-4, 1),\n /* 64 */\n new X(80, 9, 9, 0, 0, 6.6, 145, 0, 0.95, 0, 0, 8, 7e-4, 1),\n /* 80 */\n new X(96, 9, 9, 0, 2.5, 6.6, 145, 0, 0.95, 0, 1, 5.5, 6e-4, 1),\n /* 96 */\n new X(112, 9, 9, 0, 2.25, 6.6, 145, 0, 0.95, 0, 2, 4.5, 5e-4, 1),\n /* 112 */\n new X(128, 9, 9, 0, 1.95, 6.4, 140, 0, 0.95, 0, 3, 4, 2e-4, 1),\n /* 128 */\n new X(160, 9, 9, 1, 1.79, 6, 135, 0, 0.95, -2, 5, 3.5, 0, 1),\n /* 160 */\n new X(192, 9, 9, 1, 1.49, 5.6, 125, 0, 0.97, -4, 7, 3, 0, 0),\n /* 192 */\n new X(224, 9, 9, 1, 1.25, 5.2, 125, 0, 0.98, -6, 9, 2, 0, 0),\n /* 224 */\n new X(256, 9, 9, 1, 0.97, 5.2, 125, 0, 1, -8, 10, 1, 0, 0),\n /* 256 */\n new X(320, 9, 9, 1, 0.9, 5.2, 125, 0, 1, -10, 12, 0, 0, 0)\n /* 320 */\n ];\n function g(A, m, O) {\n var s0 = m, K = z.nearestBitrateFullIndex(m);\n if (A.VBR = M1.vbr_abr, A.VBR_mean_bitrate_kbps = s0, A.VBR_mean_bitrate_kbps = Math.min(A.VBR_mean_bitrate_kbps, 320), A.VBR_mean_bitrate_kbps = Math.max(A.VBR_mean_bitrate_kbps, 8), A.brate = A.VBR_mean_bitrate_kbps, A.VBR_mean_bitrate_kbps > 320 && (A.disable_reservoir = !0), D[K].safejoint > 0 && (A.exp_nspsytune = A.exp_nspsytune | 2), D[K].sfscale > 0 && (A.internal_flags.noise_shaping = 2), Math.abs(D[K].nsbass) > 0) {\n var t0 = int(D[K].nsbass * 4);\n t0 < 0 && (t0 += 64), A.exp_nspsytune = A.exp_nspsytune | t0 << 2;\n }\n return O != 0 ? A.quant_comp = D[K].quant_comp : Math.abs(A.quant_comp - -1) > 0 || (A.quant_comp = D[K].quant_comp), O != 0 ? A.quant_comp_short = D[K].quant_comp_s : Math.abs(A.quant_comp_short - -1) > 0 || (A.quant_comp_short = D[K].quant_comp_s), O != 0 ? A.msfix = D[K].nsmsfix : Math.abs(A.msfix - -1) > 0 || (A.msfix = D[K].nsmsfix), O != 0 ? A.internal_flags.nsPsy.attackthre = D[K].st_lrm : Math.abs(A.internal_flags.nsPsy.attackthre - -1) > 0 || (A.internal_flags.nsPsy.attackthre = D[K].st_lrm), O != 0 ? A.internal_flags.nsPsy.attackthre_s = D[K].st_s : Math.abs(A.internal_flags.nsPsy.attackthre_s - -1) > 0 || (A.internal_flags.nsPsy.attackthre_s = D[K].st_s), O != 0 ? A.scale = D[K].scale : Math.abs(A.scale - -1) > 0 || (A.scale = D[K].scale), O != 0 ? A.maskingadjust = D[K].masking_adj : Math.abs(A.maskingadjust - 0) > 0 || (A.maskingadjust = D[K].masking_adj), D[K].masking_adj > 0 ? O != 0 ? A.maskingadjust_short = D[K].masking_adj * 0.9 : Math.abs(A.maskingadjust_short - 0) > 0 || (A.maskingadjust_short = D[K].masking_adj * 0.9) : O != 0 ? A.maskingadjust_short = D[K].masking_adj * 1.1 : Math.abs(A.maskingadjust_short - 0) > 0 || (A.maskingadjust_short = D[K].masking_adj * 1.1), O != 0 ? A.ATHlower = -D[K].ath_lower / 10 : Math.abs(-A.ATHlower * 10 - 0) > 0 || (A.ATHlower = -D[K].ath_lower / 10), O != 0 ? A.ATHcurve = D[K].ath_curve : Math.abs(A.ATHcurve - -1) > 0 || (A.ATHcurve = D[K].ath_curve), O != 0 ? A.interChRatio = D[K].interch : Math.abs(A.interChRatio - -1) > 0 || (A.interChRatio = D[K].interch), m;\n }\n this.apply_preset = function(A, m, O) {\n switch (m) {\n case w.R3MIX: {\n m = w.V3, A.VBR = M1.vbr_mtrh;\n break;\n }\n case w.MEDIUM: {\n m = w.V4, A.VBR = M1.vbr_rh;\n break;\n }\n case w.MEDIUM_FAST: {\n m = w.V4, A.VBR = M1.vbr_mtrh;\n break;\n }\n case w.STANDARD: {\n m = w.V2, A.VBR = M1.vbr_rh;\n break;\n }\n case w.STANDARD_FAST: {\n m = w.V2, A.VBR = M1.vbr_mtrh;\n break;\n }\n case w.EXTREME: {\n m = w.V0, A.VBR = M1.vbr_rh;\n break;\n }\n case w.EXTREME_FAST: {\n m = w.V0, A.VBR = M1.vbr_mtrh;\n break;\n }\n case w.INSANE:\n return m = 320, A.preset = m, g(A, m, O), A.VBR = M1.vbr_off, m;\n }\n switch (A.preset = m, m) {\n case w.V9:\n return Q(A, 9, O), m;\n case w.V8:\n return Q(A, 8, O), m;\n case w.V7:\n return Q(A, 7, O), m;\n case w.V6:\n return Q(A, 6, O), m;\n case w.V5:\n return Q(A, 5, O), m;\n case w.V4:\n return Q(A, 4, O), m;\n case w.V3:\n return Q(A, 3, O), m;\n case w.V2:\n return Q(A, 2, O), m;\n case w.V1:\n return Q(A, 1, O), m;\n case w.V0:\n return Q(A, 0, O), m;\n }\n return 8 <= m && m <= 320 ? g(A, m, O) : (A.preset = 0, m);\n };\n function f0(A, m) {\n var O = 0;\n return 0 > m && (O = -1, m = 0), 9 < m && (O = -1, m = 9), A.VBR_q = m, A.VBR_q_frac = 0, O;\n }\n}\nvar V2 = H2;\nfunction O2() {\n this.setModules = function(w, Z) {\n };\n}\nvar C2 = O2;\nfunction F2() {\n this.over_noise = 0, this.tot_noise = 0, this.max_noise = 0, this.over_count = 0, this.over_SSD = 0, this.bits = 0;\n}\nvar k2 = F2, Ca = Q0, na = Ca.new_float, X2 = Ca.new_int;\nfunction Y2() {\n this.global_gain = 0, this.sfb_count1 = 0, this.step = X2(39), this.noise = na(39), this.noise_log = na(39);\n}\nvar q2 = Y2, q1 = Q0, y1 = q1.System, _a = q1.VbrMode, ye = q1.Util, X1 = q1.Arrays, K1 = q1.new_float, U1 = q1.assert, D2 = C2, we = k2, G2 = q2, D0 = t1(), la = Le, va = ie;\nfunction $2() {\n var w;\n this.rv = null;\n var Z;\n this.qupvt = null;\n var X, z = new D2(), u0;\n this.setModules = function(R, o, u, d) {\n w = R, Z = o, this.rv = o, X = u, this.qupvt = u, u0 = d, z.setModules(X, u0);\n }, this.ms_convert = function(R, o) {\n for (var u = 0; u < 576; ++u) {\n var d = R.tt[o][0].xr[u], e = R.tt[o][1].xr[u];\n R.tt[o][0].xr[u] = (d + e) * (ye.SQRT2 * 0.5), R.tt[o][1].xr[u] = (d - e) * (ye.SQRT2 * 0.5);\n }\n };\n function W(R, o, u, d) {\n d = 0;\n for (var e = 0; e <= u; ++e) {\n var l = Math.abs(R.xr[e]);\n d += l, o[e] = Math.sqrt(l * Math.sqrt(l)), o[e] > R.xrpow_max && (R.xrpow_max = o[e]);\n }\n return d;\n }\n this.init_xrpow = function(R, o, u) {\n var d = 0, e = 0 | o.max_nonzero_coeff;\n if (o.xrpow_max = 0, X1.fill(u, e, 576, 0), d = W(o, u, e, d), d > 1e-20) {\n var l = 0;\n R.substep_shaping & 2 && (l = 1);\n for (var M = 0; M < o.psymax; M++)\n R.pseudohalf[M] = l;\n return !0;\n }\n return X1.fill(o.l3_enc, 0, 576, 0), !1;\n };\n function Q(R, o) {\n var u = R.ATH, d = o.xr;\n if (o.block_type != D0.SHORT_TYPE)\n for (var e = !1, l = D0.PSFB21 - 1; l >= 0 && !e; l--) {\n var M = R.scalefac_band.psfb21[l], p = R.scalefac_band.psfb21[l + 1], H = X.athAdjust(\n u.adjust,\n u.psfb21[l],\n u.floor\n );\n R.nsPsy.longfact[21] > 1e-12 && (H *= R.nsPsy.longfact[21]);\n for (var B = p - 1; B >= M; B--)\n if (Math.abs(d[B]) < H)\n d[B] = 0;\n else {\n e = !0;\n break;\n }\n }\n else\n for (var I = 0; I < 3; I++)\n for (var e = !1, l = D0.PSFB12 - 1; l >= 0 && !e; l--) {\n var M = R.scalefac_band.s[12] * 3 + (R.scalefac_band.s[13] - R.scalefac_band.s[12]) * I + (R.scalefac_band.psfb12[l] - R.scalefac_band.psfb12[0]), p = M + (R.scalefac_band.psfb12[l + 1] - R.scalefac_band.psfb12[l]), v0 = X.athAdjust(\n u.adjust,\n u.psfb12[l],\n u.floor\n );\n R.nsPsy.shortfact[12] > 1e-12 && (v0 *= R.nsPsy.shortfact[12]);\n for (var B = p - 1; B >= M; B--)\n if (Math.abs(d[B]) < v0)\n d[B] = 0;\n else {\n e = !0;\n break;\n }\n }\n }\n this.init_outer_loop = function(R, o) {\n o.part2_3_length = 0, o.big_values = 0, o.count1 = 0, o.global_gain = 210, o.scalefac_compress = 0, o.table_select[0] = 0, o.table_select[1] = 0, o.table_select[2] = 0, o.subblock_gain[0] = 0, o.subblock_gain[1] = 0, o.subblock_gain[2] = 0, o.subblock_gain[3] = 0, o.region0_count = 0, o.region1_count = 0, o.preflag = 0, o.scalefac_scale = 0, o.count1table_select = 0, o.part2_length = 0, o.sfb_lmax = D0.SBPSY_l, o.sfb_smin = D0.SBPSY_s, o.psy_lmax = R.sfb21_extra ? D0.SBMAX_l : D0.SBPSY_l, o.psymax = o.psy_lmax, o.sfbmax = o.sfb_lmax, o.sfbdivide = 11;\n for (var u = 0; u < D0.SBMAX_l; u++)\n o.width[u] = R.scalefac_band.l[u + 1] - R.scalefac_band.l[u], o.window[u] = 3;\n if (o.block_type == D0.SHORT_TYPE) {\n var d = K1(576);\n o.sfb_smin = 0, o.sfb_lmax = 0, o.mixed_block_flag != 0 && (o.sfb_smin = 3, o.sfb_lmax = R.mode_gr * 2 + 4), o.psymax = o.sfb_lmax + 3 * ((R.sfb21_extra ? D0.SBMAX_s : D0.SBPSY_s) - o.sfb_smin), o.sfbmax = o.sfb_lmax + 3 * (D0.SBPSY_s - o.sfb_smin), o.sfbdivide = o.sfbmax - 18, o.psy_lmax = o.sfb_lmax;\n var e = R.scalefac_band.l[o.sfb_lmax];\n y1.arraycopy(o.xr, 0, d, 0, 576);\n for (var u = o.sfb_smin; u < D0.SBMAX_s; u++)\n for (var l = R.scalefac_band.s[u], M = R.scalefac_band.s[u + 1], p = 0; p < 3; p++)\n for (var H = l; H < M; H++)\n o.xr[e++] = d[3 * H + p];\n for (var B = o.sfb_lmax, u = o.sfb_smin; u < D0.SBMAX_s; u++)\n o.width[B] = o.width[B + 1] = o.width[B + 2] = R.scalefac_band.s[u + 1] - R.scalefac_band.s[u], o.window[B] = 0, o.window[B + 1] = 1, o.window[B + 2] = 2, B += 3;\n }\n o.count1bits = 0, o.sfb_partition_table = X.nr_of_sfb_block[0][0], o.slen[0] = 0, o.slen[1] = 0, o.slen[2] = 0, o.slen[3] = 0, o.max_nonzero_coeff = 575, X1.fill(o.scalefac, 0), Q(R, o);\n };\n function D(R) {\n this.ordinal = R;\n }\n D.BINSEARCH_NONE = new D(0), D.BINSEARCH_UP = new D(1), D.BINSEARCH_DOWN = new D(2);\n function g(R, o, u, d, e) {\n var l, M = R.CurrentStep[d], p = !1, H = R.OldValue[d], B = D.BINSEARCH_NONE;\n for (o.global_gain = H, u -= o.part2_length; ; ) {\n var I;\n if (l = u0.count_bits(R, e, o, null), M == 1 || l == u)\n break;\n l > u ? (B == D.BINSEARCH_DOWN && (p = !0), p && (M /= 2), B = D.BINSEARCH_UP, I = M) : (B == D.BINSEARCH_UP && (p = !0), p && (M /= 2), B = D.BINSEARCH_DOWN, I = -M), o.global_gain += I, o.global_gain < 0 && (o.global_gain = 0, p = !0), o.global_gain > 255 && (o.global_gain = 255, p = !0);\n }\n for (U1(o.global_gain >= 0), U1(o.global_gain < 256); l > u && o.global_gain < 255; )\n o.global_gain++, l = u0.count_bits(R, e, o, null);\n return R.CurrentStep[d] = H - o.global_gain >= 4 ? 4 : 2, R.OldValue[d] = o.global_gain, o.part2_3_length = l, l;\n }\n this.trancate_smallspectrums = function(R, o, u, d) {\n var e = K1(va.SFBMAX);\n if (!(!(R.substep_shaping & 4) && o.block_type == D0.SHORT_TYPE || R.substep_shaping & 128)) {\n X.calc_noise(o, u, e, new we(), null);\n for (var M = 0; M < 576; M++) {\n var l = 0;\n o.l3_enc[M] != 0 && (l = Math.abs(o.xr[M])), d[M] = l;\n }\n var M = 0, p = 8;\n o.block_type == D0.SHORT_TYPE && (p = 6);\n do {\n var H, B, I, v0, b = o.width[p];\n if (M += b, !(e[p] >= 1) && (X1.sort(d, M - b, b), !BitStream.EQ(d[M - 1], 0))) {\n H = (1 - e[p]) * u[p], B = 0, v0 = 0;\n do {\n var a;\n for (I = 1; v0 + I < b && !BitStream.NEQ(d[v0 + M - b], d[v0 + M + I - b]); I++)\n ;\n if (a = d[v0 + M - b] * d[v0 + M - b] * I, H < a) {\n v0 != 0 && (B = d[v0 + M - b - 1]);\n break;\n }\n H -= a, v0 += I;\n } while (v0 < b);\n if (!BitStream.EQ(B, 0))\n do\n Math.abs(o.xr[M - b]) <= B && (o.l3_enc[M - b] = 0);\n while (--b > 0);\n }\n } while (++p < o.psymax);\n o.part2_3_length = u0.noquant_count_bits(R, o, null);\n }\n };\n function f0(R) {\n for (var o = 0; o < R.sfbmax; o++)\n if (R.scalefac[o] + R.subblock_gain[R.window[o]] == 0)\n return !1;\n return !0;\n }\n function A(R) {\n return ye.FAST_LOG10(0.368 + 0.632 * R * R * R);\n }\n function m(R, o) {\n for (var u = 1e-37, d = 0; d < o.psymax; d++)\n u += A(R[d]);\n return Math.max(1e-20, u);\n }\n function O(R, o, u, d, e) {\n var l;\n switch (R) {\n default:\n case 9: {\n o.over_count > 0 ? (l = u.over_SSD <= o.over_SSD, u.over_SSD == o.over_SSD && (l = u.bits < o.bits)) : l = u.max_noise < 0 && u.max_noise * 10 + u.bits <= o.max_noise * 10 + o.bits;\n break;\n }\n case 0:\n l = u.over_count < o.over_count || u.over_count == o.over_count && u.over_noise < o.over_noise || u.over_count == o.over_count && BitStream.EQ(u.over_noise, o.over_noise) && u.tot_noise < o.tot_noise;\n break;\n case 8:\n u.max_noise = m(e, d);\n case 1:\n l = u.max_noise < o.max_noise;\n break;\n case 2:\n l = u.tot_noise < o.tot_noise;\n break;\n case 3:\n l = u.tot_noise < o.tot_noise && u.max_noise < o.max_noise;\n break;\n case 4:\n l = u.max_noise <= 0 && o.max_noise > 0.2 || u.max_noise <= 0 && o.max_noise < 0 && o.max_noise > u.max_noise - 0.2 && u.tot_noise < o.tot_noise || u.max_noise <= 0 && o.max_noise > 0 && o.max_noise > u.max_noise - 0.2 && u.tot_noise < o.tot_noise + o.over_noise || u.max_noise > 0 && o.max_noise > -0.05 && o.max_noise > u.max_noise - 0.1 && u.tot_noise + u.over_noise < o.tot_noise + o.over_noise || u.max_noise > 0 && o.max_noise > -0.1 && o.max_noise > u.max_noise - 0.15 && u.tot_noise + u.over_noise + u.over_noise < o.tot_noise + o.over_noise + o.over_noise;\n break;\n case 5:\n l = u.over_noise < o.over_noise || BitStream.EQ(u.over_noise, o.over_noise) && u.tot_noise < o.tot_noise;\n break;\n case 6:\n l = u.over_noise < o.over_noise || BitStream.EQ(u.over_noise, o.over_noise) && (u.max_noise < o.max_noise || BitStream.EQ(u.max_noise, o.max_noise) && u.tot_noise <= o.tot_noise);\n break;\n case 7:\n l = u.over_count < o.over_count || u.over_noise < o.over_noise;\n break;\n }\n return o.over_count == 0 && (l = l && u.bits < o.bits), l;\n }\n function s0(R, o, u, d, e) {\n var l = R.internal_flags, M;\n o.scalefac_scale == 0 ? M = 1.2968395546510096 : M = 1.6817928305074292;\n for (var p = 0, H = 0; H < o.sfbmax; H++)\n p < u[H] && (p = u[H]);\n var B = l.noise_shaping_amp;\n switch (B == 3 && (e ? B = 2 : B = 1), B) {\n case 2:\n break;\n case 1:\n p > 1 ? p = Math.pow(p, 0.5) : p *= 0.95;\n break;\n case 0:\n default:\n p > 1 ? p = 1 : p *= 0.95;\n break;\n }\n for (var I = 0, H = 0; H < o.sfbmax; H++) {\n var v0 = o.width[H], b;\n if (I += v0, !(u[H] < p)) {\n if (l.substep_shaping & 2 && (l.pseudohalf[H] = l.pseudohalf[H] == 0 ? 1 : 0, l.pseudohalf[H] == 0 && l.noise_shaping_amp == 2))\n return;\n for (o.scalefac[H]++, b = -v0; b < 0; b++)\n d[I + b] *= M, d[I + b] > o.xrpow_max && (o.xrpow_max = d[I + b]);\n if (l.noise_shaping_amp == 2)\n return;\n }\n }\n }\n function K(R, o) {\n for (var u = 1.2968395546510096, d = 0, e = 0; e < R.sfbmax; e++) {\n var l = R.width[e], M = R.scalefac[e];\n if (R.preflag != 0 && (M += X.pretab[e]), d += l, M & 1) {\n M++;\n for (var p = -l; p < 0; p++)\n o[d + p] *= u, o[d + p] > R.xrpow_max && (R.xrpow_max = o[d + p]);\n }\n R.scalefac[e] = M >> 1;\n }\n R.preflag = 0, R.scalefac_scale = 1;\n }\n function t0(R, o, u) {\n var d, e = o.scalefac;\n for (d = 0; d < o.sfb_lmax; d++)\n if (e[d] >= 16)\n return !0;\n for (var l = 0; l < 3; l++) {\n var M = 0, p = 0;\n for (d = o.sfb_lmax + l; d < o.sfbdivide; d += 3)\n M < e[d] && (M = e[d]);\n for (; d < o.sfbmax; d += 3)\n p < e[d] && (p = e[d]);\n if (!(M < 16 && p < 8)) {\n if (o.subblock_gain[l] >= 7)\n return !0;\n o.subblock_gain[l]++;\n var H = R.scalefac_band.l[o.sfb_lmax];\n for (d = o.sfb_lmax + l; d < o.sfbmax; d += 3) {\n var B, I = o.width[d], v0 = e[d];\n if (v0 = v0 - (4 >> o.scalefac_scale), v0 >= 0) {\n e[d] = v0, H += I * 3;\n continue;\n }\n e[d] = 0;\n {\n var b = 210 + (v0 << o.scalefac_scale + 1);\n B = X.IPOW20(b);\n }\n H += I * (l + 1);\n for (var a = -I; a < 0; a++)\n u[H + a] *= B, u[H + a] > o.xrpow_max && (o.xrpow_max = u[H + a]);\n H += I * (3 - l - 1);\n }\n {\n var B = X.IPOW20(202);\n H += o.width[d] * (l + 1);\n for (var a = -o.width[d]; a < 0; a++)\n u[H + a] *= B, u[H + a] > o.xrpow_max && (o.xrpow_max = u[H + a]);\n }\n }\n }\n return !1;\n }\n function U(R, o, u, d, e) {\n var l = R.internal_flags;\n s0(R, o, u, d, e);\n var M = f0(o);\n return M ? !1 : (l.mode_gr == 2 ? M = u0.scale_bitcount(o) : M = u0.scale_bitcount_lsf(l, o), M ? (l.noise_shaping > 1 && (X1.fill(l.pseudohalf, 0), o.scalefac_scale == 0 ? (K(o, d), M = !1) : o.block_type == D0.SHORT_TYPE && l.subblock_gain > 0 && (M = t0(l, o, d) || f0(o))), M || (l.mode_gr == 2 ? M = u0.scale_bitcount(o) : M = u0.scale_bitcount_lsf(l, o)), !M) : !0);\n }\n this.outer_loop = function(R, o, u, d, e, l) {\n var M = R.internal_flags, p = new la(), H = K1(576), B = K1(va.SFBMAX), I = new we(), v0, b = new G2(), a = 9999999, S = !1, L = !1, V = 0;\n if (g(M, o, l, e, d), M.noise_shaping == 0)\n return 100;\n X.calc_noise(\n o,\n u,\n B,\n I,\n b\n ), I.bits = o.part2_3_length, p.assign(o);\n var N = 0;\n for (y1.arraycopy(d, 0, H, 0, 576); !S; ) {\n do {\n var P = new we(), E, i = 255;\n if (M.substep_shaping & 2 ? E = 20 : E = 3, M.sfb21_extra && (B[p.sfbmax] > 1 || p.block_type == D0.SHORT_TYPE && (B[p.sfbmax + 1] > 1 || B[p.sfbmax + 2] > 1)) || !U(R, p, B, d, L))\n break;\n p.scalefac_scale != 0 && (i = 254);\n var s = l - p.part2_length;\n if (s <= 0)\n break;\n for (; (p.part2_3_length = u0.count_bits(\n M,\n d,\n p,\n b\n )) > s && p.global_gain <= i; )\n p.global_gain++;\n if (p.global_gain > i)\n break;\n if (I.over_count == 0) {\n for (; (p.part2_3_length = u0.count_bits(\n M,\n d,\n p,\n b\n )) > a && p.global_gain <= i; )\n p.global_gain++;\n if (p.global_gain > i)\n break;\n }\n if (X.calc_noise(\n p,\n u,\n B,\n P,\n b\n ), P.bits = p.part2_3_length, o.block_type != D0.SHORT_TYPE ? v0 = R.quant_comp : v0 = R.quant_comp_short, v0 = O(\n v0,\n I,\n P,\n p,\n B\n ) ? 1 : 0, v0 != 0)\n a = o.part2_3_length, I = P, o.assign(p), N = 0, y1.arraycopy(d, 0, H, 0, 576);\n else if (M.full_outer_loop == 0 && (++N > E && I.over_count == 0 || M.noise_shaping_amp == 3 && L && N > 30 || M.noise_shaping_amp == 3 && L && p.global_gain - V > 15))\n break;\n } while (p.global_gain + p.scalefac_scale < 255);\n M.noise_shaping_amp == 3 ? L ? S = !0 : (p.assign(o), y1.arraycopy(H, 0, d, 0, 576), N = 0, V = p.global_gain, L = !0) : S = !0;\n }\n return U1(o.global_gain + o.scalefac_scale <= 255), R.VBR == _a.vbr_rh || R.VBR == _a.vbr_mtrh ? y1.arraycopy(H, 0, d, 0, 576) : M.substep_shaping & 1 && trancate_smallspectrums(M, o, u, d), I.over_count;\n }, this.iteration_finish_one = function(R, o, u) {\n var d = R.l3_side, e = d.tt[o][u];\n u0.best_scalefac_store(R, o, u, d), R.use_best_huffman == 1 && u0.best_huffman_divide(R, e), Z.ResvAdjust(R, e);\n }, this.VBR_encode_granule = function(R, o, u, d, e, l, M) {\n var p = R.internal_flags, H = new la(), B = K1(576), I = M, v0 = M + 1, b = (M + l) / 2, a, S, L = 0, V = p.sfb21_extra;\n U1(I <= LameInternalFlags.MAX_BITS_PER_CHANNEL), X1.fill(H.l3_enc, 0);\n do\n b > I - 42 ? p.sfb21_extra = !1 : p.sfb21_extra = V, S = outer_loop(R, o, u, d, e, b), S <= 0 ? (L = 1, v0 = o.part2_3_length, H.assign(o), y1.arraycopy(d, 0, B, 0, 576), M = v0 - 32, a = M - l, b = (M + l) / 2) : (l = b + 32, a = M - l, b = (M + l) / 2, L != 0 && (L = 2, o.assign(H), y1.arraycopy(B, 0, d, 0, 576)));\n while (a > 12);\n p.sfb21_extra = V, L == 2 && y1.arraycopy(H.l3_enc, 0, o.l3_enc, 0, 576), U1(o.part2_3_length <= I);\n }, this.get_framebits = function(R, o) {\n var u = R.internal_flags;\n u.bitrate_index = u.VBR_min_bitrate;\n var d = w.getframebits(R);\n u.bitrate_index = 1, d = w.getframebits(R);\n for (var e = 1; e <= u.VBR_max_bitrate; e++) {\n u.bitrate_index = e;\n var l = new MeanBits(d);\n o[e] = Z.ResvFrameBegin(R, l), d = l.bits;\n }\n }, this.VBR_old_prepare = function(R, o, u, d, e, l, M, p, H) {\n var B = R.internal_flags, I, v0 = 0, b = 1, a = 0;\n B.bitrate_index = B.VBR_max_bitrate;\n var S = Z.ResvFrameBegin(R, new MeanBits(0)) / B.mode_gr;\n get_framebits(R, l);\n for (var L = 0; L < B.mode_gr; L++) {\n var V = X.on_pe(R, o, p[L], S, L, 0);\n B.mode_ext == D0.MPG_MD_MS_LR && (ms_convert(B.l3_side, L), X.reduce_side(p[L], u[L], S, V));\n for (var N = 0; N < B.channels_out; ++N) {\n var P = B.l3_side.tt[L][N];\n P.block_type != D0.SHORT_TYPE ? (v0 = 1.28 / (1 + Math.exp(3.5 - o[L][N] / 300)) - 0.05, I = B.PSY.mask_adjust - v0) : (v0 = 2.56 / (1 + Math.exp(3.5 - o[L][N] / 300)) - 0.14, I = B.PSY.mask_adjust_short - v0), B.masking_lower = Math.pow(\n 10,\n I * 0.1\n ), init_outer_loop(B, P), H[L][N] = X.calc_xmin(\n R,\n d[L][N],\n P,\n e[L][N]\n ), H[L][N] != 0 && (b = 0), M[L][N] = 126, a += p[L][N];\n }\n }\n for (var L = 0; L < B.mode_gr; L++)\n for (var N = 0; N < B.channels_out; N++)\n a > l[B.VBR_max_bitrate] && (p[L][N] *= l[B.VBR_max_bitrate], p[L][N] /= a), M[L][N] > p[L][N] && (M[L][N] = p[L][N]);\n return b;\n }, this.bitpressure_strategy = function(R, o, u, d) {\n for (var e = 0; e < R.mode_gr; e++)\n for (var l = 0; l < R.channels_out; l++) {\n for (var M = R.l3_side.tt[e][l], p = o[e][l], H = 0, B = 0; B < M.psy_lmax; B++)\n p[H++] *= 1 + 0.029 * B * B / D0.SBMAX_l / D0.SBMAX_l;\n if (M.block_type == D0.SHORT_TYPE)\n for (var B = M.sfb_smin; B < D0.SBMAX_s; B++)\n p[H++] *= 1 + 0.029 * B * B / D0.SBMAX_s / D0.SBMAX_s, p[H++] *= 1 + 0.029 * B * B / D0.SBMAX_s / D0.SBMAX_s, p[H++] *= 1 + 0.029 * B * B / D0.SBMAX_s / D0.SBMAX_s;\n d[e][l] = 0 | Math.max(\n u[e][l],\n 0.9 * d[e][l]\n );\n }\n }, this.VBR_new_prepare = function(R, o, u, d, e, l) {\n var M = R.internal_flags, p = 1, H = 0, B = 0, I;\n if (R.free_format) {\n M.bitrate_index = 0;\n var v0 = new MeanBits(H);\n I = Z.ResvFrameBegin(R, v0), H = v0.bits, e[0] = I;\n } else {\n M.bitrate_index = M.VBR_max_bitrate;\n var v0 = new MeanBits(H);\n Z.ResvFrameBegin(R, v0), H = v0.bits, get_framebits(R, e), I = e[M.VBR_max_bitrate];\n }\n for (var b = 0; b < M.mode_gr; b++) {\n X.on_pe(R, o, l[b], H, b, 0), M.mode_ext == D0.MPG_MD_MS_LR && ms_convert(M.l3_side, b);\n for (var a = 0; a < M.channels_out; ++a) {\n var S = M.l3_side.tt[b][a];\n M.masking_lower = Math.pow(\n 10,\n M.PSY.mask_adjust * 0.1\n ), init_outer_loop(M, S), X.calc_xmin(\n R,\n u[b][a],\n S,\n d[b][a]\n ) != 0 && (p = 0), B += l[b][a];\n }\n }\n for (var b = 0; b < M.mode_gr; b++)\n for (var a = 0; a < M.channels_out; a++)\n B > I && (l[b][a] *= I, l[b][a] /= B);\n return p;\n }, this.calc_target_bits = function(R, o, u, d, e, l) {\n var M = R.internal_flags, p = M.l3_side, H, B, I, v0, b = 0;\n M.bitrate_index = M.VBR_max_bitrate;\n var a = new MeanBits(b);\n for (l[0] = Z.ResvFrameBegin(R, a), b = a.bits, M.bitrate_index = 1, b = w.getframebits(R) - M.sideinfo_len * 8, e[0] = b / (M.mode_gr * M.channels_out), b = R.VBR_mean_bitrate_kbps * R.framesize * 1e3, M.substep_shaping & 1 && (b *= 1.09), b /= R.out_samplerate, b -= M.sideinfo_len * 8, b /= M.mode_gr * M.channels_out, H = 0.93 + 0.07 * (11 - R.compression_ratio) / (11 - 5.5), H < 0.9 && (H = 0.9), H > 1 && (H = 1), B = 0; B < M.mode_gr; B++) {\n var S = 0;\n for (I = 0; I < M.channels_out; I++) {\n if (d[B][I] = int(H * b), o[B][I] > 700) {\n var L = int((o[B][I] - 700) / 1.4), V = p.tt[B][I];\n d[B][I] = int(H * b), V.block_type == D0.SHORT_TYPE && L < b / 2 && (L = b / 2), L > b * 3 / 2 ? L = b * 3 / 2 : L < 0 && (L = 0), d[B][I] += L;\n }\n d[B][I] > LameInternalFlags.MAX_BITS_PER_CHANNEL && (d[B][I] = LameInternalFlags.MAX_BITS_PER_CHANNEL), S += d[B][I];\n }\n if (S > LameInternalFlags.MAX_BITS_PER_GRANULE)\n for (I = 0; I < M.channels_out; ++I)\n d[B][I] *= LameInternalFlags.MAX_BITS_PER_GRANULE, d[B][I] /= S;\n }\n if (M.mode_ext == D0.MPG_MD_MS_LR)\n for (B = 0; B < M.mode_gr; B++)\n X.reduce_side(\n d[B],\n u[B],\n b * M.channels_out,\n LameInternalFlags.MAX_BITS_PER_GRANULE\n );\n for (v0 = 0, B = 0; B < M.mode_gr; B++)\n for (I = 0; I < M.channels_out; I++)\n d[B][I] > LameInternalFlags.MAX_BITS_PER_CHANNEL && (d[B][I] = LameInternalFlags.MAX_BITS_PER_CHANNEL), v0 += d[B][I];\n if (v0 > l[0])\n for (B = 0; B < M.mode_gr; B++)\n for (I = 0; I < M.channels_out; I++)\n d[B][I] *= l[0], d[B][I] /= v0;\n };\n}\nvar P2 = $2, Z2 = Q0, oa = Z2.assert;\nfunction K2() {\n var w;\n this.setModules = function(Z) {\n w = Z;\n }, this.ResvFrameBegin = function(Z, X) {\n var z = Z.internal_flags, u0, W = z.l3_side, Q = w.getframebits(Z);\n X.bits = (Q - z.sideinfo_len * 8) / z.mode_gr;\n var D = 8 * 256 * z.mode_gr - 8;\n Z.brate > 320 ? u0 = 8 * int(Z.brate * 1e3 / (Z.out_samplerate / 1152) / 8 + 0.5) : (u0 = 8 * 1440, Z.strict_ISO && (u0 = 8 * int(32e4 / (Z.out_samplerate / 1152) / 8 + 0.5))), z.ResvMax = u0 - Q, z.ResvMax > D && (z.ResvMax = D), (z.ResvMax < 0 || Z.disable_reservoir) && (z.ResvMax = 0);\n var g = X.bits * z.mode_gr + Math.min(z.ResvSize, z.ResvMax);\n return g > u0 && (g = u0), oa(z.ResvMax % 8 == 0), oa(z.ResvMax >= 0), W.resvDrain_pre = 0, z.pinfo != null && (z.pinfo.mean_bits = X.bits / 2, z.pinfo.resvsize = z.ResvSize), g;\n }, this.ResvMaxBits = function(Z, X, z, u0) {\n var W = Z.internal_flags, Q, D = W.ResvSize, g = W.ResvMax;\n u0 != 0 && (D += X), W.substep_shaping & 1 && (g *= 0.9), z.bits = X, D * 10 > g * 9 ? (Q = D - g * 9 / 10, z.bits += Q, W.substep_shaping |= 128) : (Q = 0, W.substep_shaping &= 127, !Z.disable_reservoir && !(W.substep_shaping & 1) && (z.bits -= 0.1 * X));\n var f0 = D < W.ResvMax * 6 / 10 ? D : W.ResvMax * 6 / 10;\n return f0 -= Q, f0 < 0 && (f0 = 0), f0;\n }, this.ResvAdjust = function(Z, X) {\n Z.ResvSize -= X.part2_3_length + X.part2_length;\n }, this.ResvFrameEnd = function(Z, X) {\n var z, u0 = Z.l3_side;\n Z.ResvSize += X * Z.mode_gr;\n var W = 0;\n u0.resvDrain_post = 0, u0.resvDrain_pre = 0, (z = Z.ResvSize % 8) != 0 && (W += z), z = Z.ResvSize - W - Z.ResvMax, z > 0 && (W += z);\n {\n var Q = Math.min(u0.main_data_begin * 8, W) / 8;\n u0.resvDrain_pre += 8 * Q, W -= 8 * Q, Z.ResvSize -= 8 * Q, u0.main_data_begin -= Q;\n }\n u0.resvDrain_post += W, Z.ResvSize -= W;\n };\n}\nvar U2 = K2;\nfunction Q2() {\n var w = \"http://www.mp3dev.org/\", Z = 3, X = 98, z = 4, u0 = 0, W = 93;\n this.getLameVersion = function() {\n return Z + \".\" + X + \".\" + z;\n }, this.getLameShortVersion = function() {\n return Z + \".\" + X + \".\" + z;\n }, this.getLameVeryShortVersion = function() {\n return \"LAME\" + Z + \".\" + X + \"r\";\n }, this.getPsyVersion = function() {\n return u0 + \".\" + W;\n }, this.getLameUrl = function() {\n return w;\n }, this.getLameOsBitness = function() {\n return \"32bits\";\n };\n}\nvar W2 = Q2, D1 = Q0, j2 = D1.System, Ie = D1.VbrMode, ha = D1.ShortBlock, z2 = D1.Arrays, te = D1.new_byte, J2 = D1.assert;\nQ1.NUMTOCENTRIES = 100;\nQ1.MAXFRAMESIZE = 2880;\nfunction Q1() {\n var w, Z, X;\n this.setModules = function(b, a, S) {\n w = b, Z = a, X = S;\n };\n var z = 1, u0 = 2, W = 4, Q = 8, D = Q1.NUMTOCENTRIES, g = Q1.MAXFRAMESIZE, f0 = D + 4 + 4 + 4 + 4 + 4, A = f0 + 9 + 1 + 1 + 8 + 1 + 1 + 3 + 1 + 1 + 2 + 4 + 2 + 2, m = 128, O = 64, s0 = 32, K = null, t0 = \"Xing\", U = \"Info\", R = [\n 0,\n 49345,\n 49537,\n 320,\n 49921,\n 960,\n 640,\n 49729,\n 50689,\n 1728,\n 1920,\n 51009,\n 1280,\n 50625,\n 50305,\n 1088,\n 52225,\n 3264,\n 3456,\n 52545,\n 3840,\n 53185,\n 52865,\n 3648,\n 2560,\n 51905,\n 52097,\n 2880,\n 51457,\n 2496,\n 2176,\n 51265,\n 55297,\n 6336,\n 6528,\n 55617,\n 6912,\n 56257,\n 55937,\n 6720,\n 7680,\n 57025,\n 57217,\n 8e3,\n 56577,\n 7616,\n 7296,\n 56385,\n 5120,\n 54465,\n 54657,\n 5440,\n 55041,\n 6080,\n 5760,\n 54849,\n 53761,\n 4800,\n 4992,\n 54081,\n 4352,\n 53697,\n 53377,\n 4160,\n 61441,\n 12480,\n 12672,\n 61761,\n 13056,\n 62401,\n 62081,\n 12864,\n 13824,\n 63169,\n 63361,\n 14144,\n 62721,\n 13760,\n 13440,\n 62529,\n 15360,\n 64705,\n 64897,\n 15680,\n 65281,\n 16320,\n 16e3,\n 65089,\n 64001,\n 15040,\n 15232,\n 64321,\n 14592,\n 63937,\n 63617,\n 14400,\n 10240,\n 59585,\n 59777,\n 10560,\n 60161,\n 11200,\n 10880,\n 59969,\n 60929,\n 11968,\n 12160,\n 61249,\n 11520,\n 60865,\n 60545,\n 11328,\n 58369,\n 9408,\n 9600,\n 58689,\n 9984,\n 59329,\n 59009,\n 9792,\n 8704,\n 58049,\n 58241,\n 9024,\n 57601,\n 8640,\n 8320,\n 57409,\n 40961,\n 24768,\n 24960,\n 41281,\n 25344,\n 41921,\n 41601,\n 25152,\n 26112,\n 42689,\n 42881,\n 26432,\n 42241,\n 26048,\n 25728,\n 42049,\n 27648,\n 44225,\n 44417,\n 27968,\n 44801,\n 28608,\n 28288,\n 44609,\n 43521,\n 27328,\n 27520,\n 43841,\n 26880,\n 43457,\n 43137,\n 26688,\n 30720,\n 47297,\n 47489,\n 31040,\n 47873,\n 31680,\n 31360,\n 47681,\n 48641,\n 32448,\n 32640,\n 48961,\n 32e3,\n 48577,\n 48257,\n 31808,\n 46081,\n 29888,\n 30080,\n 46401,\n 30464,\n 47041,\n 46721,\n 30272,\n 29184,\n 45761,\n 45953,\n 29504,\n 45313,\n 29120,\n 28800,\n 45121,\n 20480,\n 37057,\n 37249,\n 20800,\n 37633,\n 21440,\n 21120,\n 37441,\n 38401,\n 22208,\n 22400,\n 38721,\n 21760,\n 38337,\n 38017,\n 21568,\n 39937,\n 23744,\n 23936,\n 40257,\n 24320,\n 40897,\n 40577,\n 24128,\n 23040,\n 39617,\n 39809,\n 23360,\n 39169,\n 22976,\n 22656,\n 38977,\n 34817,\n 18624,\n 18816,\n 35137,\n 19200,\n 35777,\n 35457,\n 19008,\n 19968,\n 36545,\n 36737,\n 20288,\n 36097,\n 19904,\n 19584,\n 35905,\n 17408,\n 33985,\n 34177,\n 17728,\n 34561,\n 18368,\n 18048,\n 34369,\n 33281,\n 17088,\n 17280,\n 33601,\n 16640,\n 33217,\n 32897,\n 16448\n ];\n function o(b, a) {\n if (b.nVbrNumFrames++, b.sum += a, b.seen++, !(b.seen < b.want) && (b.pos < b.size && (b.bag[b.pos] = b.sum, b.pos++, b.seen = 0), b.pos == b.size)) {\n for (var S = 1; S < b.size; S += 2)\n b.bag[S / 2] = b.bag[S];\n b.want *= 2, b.pos /= 2;\n }\n }\n function u(b, a) {\n if (!(b.pos <= 0))\n for (var S = 1; S < D; ++S) {\n var L = S / D, V, N, P = 0 | Math.floor(L * b.pos);\n P > b.pos - 1 && (P = b.pos - 1), V = b.bag[P], N = b.sum;\n var E = 0 | 256 * V / N;\n E > 255 && (E = 255), a[S] = 255 & E;\n }\n }\n this.addVbrFrame = function(b) {\n var a = b.internal_flags, S = Tables.bitrate_table[b.version][a.bitrate_index];\n J2(a.VBR_seek_table.bag != null), o(a.VBR_seek_table, S);\n };\n function d(b, a) {\n var S = b[a + 0] & 255;\n return S <<= 8, S |= b[a + 1] & 255, S <<= 8, S |= b[a + 2] & 255, S <<= 8, S |= b[a + 3] & 255, S;\n }\n function e(b, a, S) {\n b[a + 0] = 255 & (S >> 24 & 255), b[a + 1] = 255 & (S >> 16 & 255), b[a + 2] = 255 & (S >> 8 & 255), b[a + 3] = 255 & (S & 255);\n }\n function l(b, a, S) {\n b[a + 0] = 255 & (S >> 8 & 255), b[a + 1] = 255 & (S & 255);\n }\n function M(b, a) {\n return new String(b, a, t0.length(), K).equals(t0) || new String(b, a, U.length(), K).equals(U);\n }\n function p(b, a, S) {\n return 255 & (b << a | S & ~(-1 << a));\n }\n function H(b, a) {\n var S = b.internal_flags;\n a[0] = p(a[0], 8, 255), a[1] = p(a[1], 3, 7), a[1] = p(\n a[1],\n 1,\n b.out_samplerate < 16e3 ? 0 : 1\n ), a[1] = p(a[1], 1, b.version), a[1] = p(a[1], 2, 4 - 3), a[1] = p(a[1], 1, b.error_protection ? 0 : 1), a[2] = p(a[2], 4, S.bitrate_index), a[2] = p(a[2], 2, S.samplerate_index), a[2] = p(a[2], 1, 0), a[2] = p(a[2], 1, b.extension), a[3] = p(a[3], 2, b.mode.ordinal()), a[3] = p(a[3], 2, S.mode_ext), a[3] = p(a[3], 1, b.copyright), a[3] = p(a[3], 1, b.original), a[3] = p(a[3], 2, b.emphasis), a[0] = 255;\n var L = 255 & (a[1] & 241), V;\n b.version == 1 ? V = m : b.out_samplerate < 16e3 ? V = s0 : V = O, b.VBR == Ie.vbr_off && (V = b.brate);\n var N;\n b.free_format ? N = 0 : N = 255 & 16 * w.BitrateIndex(\n V,\n b.version,\n b.out_samplerate\n ), b.version == 1 ? (a[1] = 255 & (L | 10), L = 255 & (a[2] & 13), a[2] = 255 & (N | L)) : (a[1] = 255 & (L | 2), L = 255 & (a[2] & 13), a[2] = 255 & (N | L));\n }\n this.getVbrTag = function(b) {\n var a = new VBRTagData(), S = 0;\n a.flags = 0;\n var L = b[S + 1] >> 3 & 1, V = b[S + 2] >> 2 & 3, N = b[S + 3] >> 6 & 3, P = b[S + 2] >> 4 & 15;\n if (P = Tables.bitrate_table[L][P], b[S + 1] >> 4 == 14 ? a.samprate = Tables.samplerate_table[2][V] : a.samprate = Tables.samplerate_table[L][V], L != 0 ? N != 3 ? S += 32 + 4 : S += 17 + 4 : N != 3 ? S += 17 + 4 : S += 9 + 4, !M(b, S))\n return null;\n S += 4, a.hId = L;\n var E = a.flags = d(b, S);\n if (S += 4, E & z && (a.frames = d(b, S), S += 4), E & u0 && (a.bytes = d(b, S), S += 4), E & W) {\n if (a.toc != null)\n for (var i = 0; i < D; i++)\n a.toc[i] = b[S + i];\n S += D;\n }\n a.vbrScale = -1, E & Q && (a.vbrScale = d(b, S), S += 4), a.headersize = (L + 1) * 72e3 * P / a.samprate, S += 21;\n var s = b[S + 0] << 4;\n s += b[S + 1] >> 4;\n var r = (b[S + 1] & 15) << 8;\n return r += b[S + 2] & 255, (s < 0 || s > 3e3) && (s = -1), (r < 0 || r > 3e3) && (r = -1), a.encDelay = s, a.encPadding = r, a;\n }, this.InitVbrTag = function(b) {\n var a = b.internal_flags, S;\n b.version == 1 ? S = m : b.out_samplerate < 16e3 ? S = s0 : S = O, b.VBR == Ie.vbr_off && (S = b.brate);\n var L = (b.version + 1) * 72e3 * S / b.out_samplerate, V = a.sideinfo_len + A;\n if (a.VBR_seek_table.TotalFrameSize = L, L < V || L > g) {\n b.bWriteVbrTag = !1;\n return;\n }\n a.VBR_seek_table.nVbrNumFrames = 0, a.VBR_seek_table.nBytesWritten = 0, a.VBR_seek_table.sum = 0, a.VBR_seek_table.seen = 0, a.VBR_seek_table.want = 1, a.VBR_seek_table.pos = 0, a.VBR_seek_table.bag == null && (a.VBR_seek_table.bag = new int[400](), a.VBR_seek_table.size = 400);\n var N = te(g);\n H(b, N);\n for (var P = a.VBR_seek_table.TotalFrameSize, E = 0; E < P; ++E)\n Z.add_dummy_byte(b, N[E] & 255, 1);\n };\n function B(b, a) {\n var S = a ^ b;\n return a = a >> 8 ^ R[S & 255], a;\n }\n this.updateMusicCRC = function(b, a, S, L) {\n for (var V = 0; V < L; ++V)\n b[0] = B(a[S + V], b[0]);\n };\n function I(b, a, S, L, V) {\n var N = b.internal_flags, P = 0, E = b.encoder_delay, i = b.encoder_padding, s = 100 - 10 * b.VBR_q - b.quality, r = X.getLameVeryShortVersion(), n, f = 0, Y, J = [1, 5, 3, 2, 4, 0, 3], T = 0 | (b.lowpassfreq / 100 + 0.5 > 255 ? 255 : b.lowpassfreq / 100 + 0.5), q = 0, i0 = 0, h0 = 0, d0 = b.internal_flags.noise_shaping, M0 = 0, R0 = 0, A0 = 0, w0 = 0, $0 = 0, f1 = (b.exp_nspsytune & 1) != 0, t = (b.exp_nspsytune & 2) != 0, _ = !1, S0 = !1, E0 = b.internal_flags.nogap_total, V0 = b.internal_flags.nogap_current, H0 = b.ATHtype, y0 = 0, T0;\n switch (b.VBR) {\n case vbr_abr:\n T0 = b.VBR_mean_bitrate_kbps;\n break;\n case vbr_off:\n T0 = b.brate;\n break;\n default:\n T0 = b.VBR_min_bitrate_kbps;\n }\n switch (b.VBR.ordinal() < J.length ? n = J[b.VBR.ordinal()] : n = 0, Y = 16 * f + n, N.findReplayGain && (N.RadioGain > 510 && (N.RadioGain = 510), N.RadioGain < -510 && (N.RadioGain = -510), i0 = 8192, i0 |= 3072, N.RadioGain >= 0 ? i0 |= N.RadioGain : (i0 |= 512, i0 |= -N.RadioGain)), N.findPeakSample && (q = Math.abs(0 | N.PeakSample / 32767 * Math.pow(2, 23) + 0.5)), E0 != -1 && (V0 > 0 && (S0 = !0), V0 < E0 - 1 && (_ = !0)), y0 = H0 + ((f1 ? 1 : 0) << 4) + ((t ? 1 : 0) << 5) + ((_ ? 1 : 0) << 6) + ((S0 ? 1 : 0) << 7), s < 0 && (s = 0), b.mode) {\n case MONO:\n M0 = 0;\n break;\n case STEREO:\n M0 = 1;\n break;\n case DUAL_CHANNEL:\n M0 = 2;\n break;\n case JOINT_STEREO:\n b.force_ms ? M0 = 4 : M0 = 3;\n break;\n case NOT_SET:\n default:\n M0 = 7;\n break;\n }\n b.in_samplerate <= 32e3 ? A0 = 0 : b.in_samplerate == 48e3 ? A0 = 2 : b.in_samplerate > 48e3 ? A0 = 3 : A0 = 1, (b.short_blocks == ha.short_block_forced || b.short_blocks == ha.short_block_dispensed || b.lowpassfreq == -1 && b.highpassfreq == -1 || /* \"-k\" */\n b.scale_left < b.scale_right || b.scale_left > b.scale_right || b.disable_reservoir && b.brate < 320 || b.noATH || b.ATHonly || H0 == 0 || b.in_samplerate <= 32e3) && (R0 = 1), w0 = d0 + (M0 << 2) + (R0 << 5) + (A0 << 6), $0 = N.nMusicCRC, e(S, L + P, s), P += 4;\n for (var F0 = 0; F0 < 9; F0++)\n S[L + P + F0] = 255 & r.charAt(F0);\n P += 9, S[L + P] = 255 & Y, P++, S[L + P] = 255 & T, P++, e(\n S,\n L + P,\n q\n ), P += 4, l(\n S,\n L + P,\n i0\n ), P += 2, l(\n S,\n L + P,\n h0\n ), P += 2, S[L + P] = 255 & y0, P++, T0 >= 255 ? S[L + P] = 255 : S[L + P] = 255 & T0, P++, S[L + P] = 255 & E >> 4, S[L + P + 1] = 255 & (E << 4) + (i >> 8), S[L + P + 2] = 255 & i, P += 3, S[L + P] = 255 & w0, P++, S[L + P++] = 0, l(S, L + P, b.preset), P += 2, e(S, L + P, a), P += 4, l(S, L + P, $0), P += 2;\n for (var I0 = 0; I0 < P; I0++)\n V = B(S[L + I0], V);\n return l(S, L + P, V), P += 2, P;\n }\n function v0(b) {\n b.seek(0);\n var a = te(10);\n b.readFully(a);\n var S;\n return new String(a, \"ISO-8859-1\").startsWith(\"ID3\") ? S = 0 : S = ((a[6] & 127) << 21 | (a[7] & 127) << 14 | (a[8] & 127) << 7 | a[9] & 127) + a.length, S;\n }\n this.getLameTagFrame = function(b, a) {\n var S = b.internal_flags;\n if (!b.bWriteVbrTag || S.Class_ID != Lame.LAME_ID || S.VBR_seek_table.pos <= 0)\n return 0;\n if (a.length < S.VBR_seek_table.TotalFrameSize)\n return S.VBR_seek_table.TotalFrameSize;\n z2.fill(a, 0, S.VBR_seek_table.TotalFrameSize, 0), H(b, a);\n var L = te(D);\n if (b.free_format)\n for (var V = 1; V < D; ++V)\n L[V] = 255 & 255 * V / 100;\n else\n u(S.VBR_seek_table, L);\n var N = S.sideinfo_len;\n b.error_protection && (N -= 2), b.VBR == Ie.vbr_off ? (a[N++] = 255 & U.charAt(0), a[N++] = 255 & U.charAt(1), a[N++] = 255 & U.charAt(2), a[N++] = 255 & U.charAt(3)) : (a[N++] = 255 & t0.charAt(0), a[N++] = 255 & t0.charAt(1), a[N++] = 255 & t0.charAt(2), a[N++] = 255 & t0.charAt(3)), e(a, N, z + u0 + W + Q), N += 4, e(a, N, S.VBR_seek_table.nVbrNumFrames), N += 4;\n var P = S.VBR_seek_table.nBytesWritten + S.VBR_seek_table.TotalFrameSize;\n e(a, N, 0 | P), N += 4, j2.arraycopy(L, 0, a, N, L.length), N += L.length, b.error_protection && Z.CRC_writeheader(S, a);\n for (var E = 0, V = 0; V < N; V++)\n E = B(a[V], E);\n return N += I(b, P, a, N, E), S.VBR_seek_table.TotalFrameSize;\n }, this.putVbrTag = function(b, a) {\n var S = b.internal_flags;\n if (S.VBR_seek_table.pos <= 0 || (a.seek(a.length()), a.length() == 0))\n return -1;\n var L = v0(a);\n a.seek(L);\n var V = te(g), N = getLameTagFrame(b, V);\n return N > V.length ? -1 : (N < 1 || a.write(V, 0, N), 0);\n };\n}\nvar g2 = Q1, Fa = Q0, ua = Fa.new_byte, er = Fa.assert, ar = Oe(), rr = V2, tr = Na, sr = Va(), ir = P2, nr = Oa(), _r = U2, lr = j1, vr = Ve();\nt1();\nvar or = W2, hr = g2;\nfunction ur() {\n this.setModules = function(w, Z) {\n };\n}\nfunction fr() {\n this.setModules = function(w, Z, X) {\n };\n}\nfunction mr() {\n}\nfunction br() {\n this.setModules = function(w, Z) {\n };\n}\nfunction cr(w, Z, X) {\n arguments.length != 3 && (console.error(\"WARN: Mp3Encoder(channels, samplerate, kbps) not specified\"), w = 1, Z = 44100, X = 128);\n var z = new ar(), u0 = new ur(), W = new tr(), Q = new vr(), D = new rr(), g = new sr(), f0 = new ir(), A = new hr(), m = new or(), O = new br(), s0 = new _r(), K = new nr(), t0 = new fr(), U = new mr();\n z.setModules(W, Q, D, g, f0, A, m, O, U), Q.setModules(W, U, m, A), O.setModules(Q, m), D.setModules(z), f0.setModules(Q, s0, g, K), g.setModules(K, s0, z.enc.psy), s0.setModules(Q), K.setModules(g), A.setModules(z, Q, m), u0.setModules(t0, U), t0.setModules(m, O, D);\n var R = z.lame_init();\n R.num_channels = w, R.in_samplerate = Z, R.brate = X, R.mode = lr.STEREO, R.quality = 3, R.bWriteVbrTag = !1, R.disable_reservoir = !0, R.write_id3tag_automatic = !1, z.lame_init_params(R);\n var o = 1152, u = 0 | 1.25 * o + 7200, d = ua(u);\n this.encodeBuffer = function(e, l) {\n w == 1 && (l = e), er(e.length == l.length), e.length > o && (o = e.length, u = 0 | 1.25 * o + 7200, d = ua(u));\n var M = z.lame_encode_buffer(R, e, l, e.length, d, 0, u);\n return new Int8Array(d.subarray(0, M));\n }, this.flush = function() {\n var e = z.lame_encode_flush(R, d, 0, u);\n return new Int8Array(d.subarray(0, e));\n };\n}\nfunction A1() {\n this.dataOffset = 0, this.dataLen = 0, this.channels = 0, this.sampleRate = 0;\n}\nfunction _e(w) {\n return w.charCodeAt(0) << 24 | w.charCodeAt(1) << 16 | w.charCodeAt(2) << 8 | w.charCodeAt(3);\n}\nA1.RIFF = _e(\"RIFF\");\nA1.WAVE = _e(\"WAVE\");\nA1.fmt_ = _e(\"fmt \");\nA1.data = _e(\"data\");\nA1.readHeader = function(w) {\n var Z = new A1(), X = w.getUint32(0, !1);\n if (A1.RIFF == X && (w.getUint32(4, !0), A1.WAVE == w.getUint32(8, !1) && A1.fmt_ == w.getUint32(12, !1))) {\n var z = w.getUint32(16, !0), u0 = 16 + 4;\n switch (z) {\n case 16:\n case 18:\n Z.channels = w.getUint16(u0 + 2, !0), Z.sampleRate = w.getUint32(u0 + 4, !0);\n break;\n default:\n throw \"extended fmt chunk not implemented\";\n }\n u0 += z;\n for (var W = A1.data, Q = 0; W != X && (X = w.getUint32(u0, !1), Q = w.getUint32(u0 + 4, !0), W != X); )\n u0 += Q + 8;\n return Z.dataLen = Q, Z.dataOffset = u0 + 8, Z;\n }\n};\nvar Sr = fa.Mp3Encoder = cr, dr = fa.WavHeader = A1;\nexport {\n Sr as Mp3Encoder,\n dr as WavHeader,\n fa as default\n};\n","import lamejs from '@breezystack/lamejs';\n\nconst writeString = (view, offset, string) => {\n // eslint-disable-next-line no-plusplus\n for (let i = 0; i < string.length; i++) {\n view.setUint8(offset + i, string.charCodeAt(i));\n }\n};\n\nconst bufferToWav = async (buffer, numChannels, sampleRate) => {\n const length = buffer.length * numChannels * 2;\n const wav = new ArrayBuffer(44 + length);\n const view = new DataView(wav);\n\n // WAV Header\n writeString(view, 0, 'RIFF');\n view.setUint32(4, 36 + length, true);\n writeString(view, 8, 'WAVE');\n writeString(view, 12, 'fmt ');\n view.setUint32(16, 16, true);\n view.setUint16(20, 1, true);\n view.setUint16(22, numChannels, true);\n view.setUint32(24, sampleRate, true);\n view.setUint32(28, sampleRate * numChannels * 2, true);\n view.setUint16(32, numChannels * 2, true);\n view.setUint16(34, 16, true);\n writeString(view, 36, 'data');\n view.setUint32(40, length, true);\n\n // WAV Data\n const offset = 44;\n // eslint-disable-next-line no-plusplus\n for (let i = 0; i < buffer.length; i++) {\n // eslint-disable-next-line no-plusplus\n for (let channel = 0; channel < numChannels; channel++) {\n const sample = Math.max(\n -1,\n Math.min(1, buffer.getChannelData(channel)[i])\n );\n view.setInt16(\n offset + (i * numChannels + channel) * 2,\n sample * 0x7fff,\n true\n );\n }\n }\n\n return new Blob([wav], { type: 'audio/wav' });\n};\n\nconst decodeAudioData = async audioBlob => {\n const audioContext = new (window.AudioContext || window.webkitAudioContext)();\n const arrayBuffer = await audioBlob.arrayBuffer();\n const audioData = await audioContext.decodeAudioData(arrayBuffer);\n return audioData;\n};\n\nexport const convertToWav = async audioBlob => {\n const audioBuffer = await decodeAudioData(audioBlob);\n return bufferToWav(\n audioBuffer,\n audioBuffer.numberOfChannels,\n audioBuffer.sampleRate\n );\n};\n\n/**\n * Encodes audio samples to MP3 format.\n * @param {number} channels - Number of audio channels.\n * @param {number} sampleRate - Sample rate in Hz.\n * @param {Int16Array} samples - Audio samples to be encoded.\n * @param {number} bitrate - MP3 bitrate (default: 128)\n * @returns {Blob} - The MP3 encoded audio as a Blob.\n */\nexport const encodeToMP3 = (channels, sampleRate, samples, bitrate = 128) => {\n const outputBuffer = [];\n const encoder = new lamejs.Mp3Encoder(channels, sampleRate, bitrate);\n const maxSamplesPerFrame = 1152;\n\n for (let offset = 0; offset < samples.length; offset += maxSamplesPerFrame) {\n const sliceEnd = Math.min(offset + maxSamplesPerFrame, samples.length);\n const sampleSlice = samples.subarray(offset, sliceEnd);\n const mp3Buffer = encoder.encodeBuffer(sampleSlice);\n\n if (mp3Buffer.length > 0) {\n outputBuffer.push(new Int8Array(mp3Buffer));\n }\n }\n\n const remainingData = encoder.flush();\n if (remainingData.length > 0) {\n outputBuffer.push(new Int8Array(remainingData));\n }\n\n return new Blob(outputBuffer, { type: 'audio/mp3' });\n};\n\n/**\n * Converts an audio Blob to an MP3 format Blob.\n * @param {Blob} audioBlob - The audio data as a Blob.\n * @param {number} bitrate - MP3 bitrate (default: 128)\n * @returns {Promise<Blob>} - A Blob containing the MP3 encoded audio.\n */\nexport const convertToMp3 = async (audioBlob, bitrate = 128) => {\n try {\n const audioBuffer = await decodeAudioData(audioBlob);\n const samples = new Int16Array(\n audioBuffer.length * audioBuffer.numberOfChannels\n );\n let offset = 0;\n for (let i = 0; i < audioBuffer.length; i += 1) {\n for (\n let channel = 0;\n channel < audioBuffer.numberOfChannels;\n channel += 1\n ) {\n const sample = Math.max(\n -1,\n Math.min(1, audioBuffer.getChannelData(channel)[i])\n );\n samples[offset] = sample < 0 ? sample * 0x8000 : sample * 0x7fff;\n offset += 1;\n }\n }\n return encodeToMP3(\n audioBuffer.numberOfChannels,\n audioBuffer.sampleRate,\n samples,\n bitrate\n );\n } catch (error) {\n throw new Error('Conversion to MP3 failed.');\n }\n};\n\nexport const convertAudio = async (inputBlob, outputFormat, bitrate = 128) => {\n let audio;\n if (outputFormat === 'audio/wav') {\n audio = await convertToWav(inputBlob);\n } else if (outputFormat === 'audio/mp3') {\n audio = await convertToMp3(inputBlob, bitrate);\n } else {\n throw new Error('Unsupported output format');\n }\n return audio;\n};\n","<script setup>\nimport getUuid from 'widget/helpers/uuid';\nimport { ref, onMounted, onUnmounted, defineEmits, defineExpose } from 'vue';\nimport WaveSurfer from 'wavesurfer.js';\nimport RecordPlugin from 'wavesurfer.js/dist/plugins/record.js';\nimport { format, intervalToDuration } from 'date-fns';\nimport { convertAudio } from './utils/mp3ConversionUtils';\n\nconst props = defineProps({\n audioRecordFormat: {\n type: String,\n required: true,\n },\n});\n\nconst emit = defineEmits([\n 'recorderProgressChanged',\n 'finishRecord',\n 'pause',\n 'play',\n]);\n\nconst waveformContainer = ref(null);\nconst wavesurfer = ref(null);\nconst record = ref(null);\nconst isRecording = ref(false);\nconst isPlaying = ref(false);\nconst hasRecording = ref(false);\n\nconst formatTimeProgress = time => {\n const duration = intervalToDuration({ start: 0, end: time });\n return format(\n new Date(0, 0, 0, 0, duration.minutes, duration.seconds),\n 'mm:ss'\n );\n};\n\nconst initWaveSurfer = () => {\n wavesurfer.value = WaveSurfer.create({\n container: waveformContainer.value,\n waveColor: '#1F93FF',\n progressColor: '#6E6F73',\n height: 100,\n barWidth: 2,\n barGap: 1,\n barRadius: 2,\n plugins: [\n RecordPlugin.create({\n scrollingWaveform: true,\n renderRecordedAudio: false,\n }),\n ],\n });\n\n wavesurfer.value.on('pause', () => emit('pause'));\n wavesurfer.value.on('play', () => emit('play'));\n\n record.value = wavesurfer.value.plugins[0];\n\n wavesurfer.value.on('finish', () => {\n isPlaying.value = false;\n });\n\n record.value.on('record-end', async blob => {\n const audioUrl = URL.createObjectURL(blob);\n const audioBlob = await convertAudio(blob, props.audioRecordFormat);\n const fileName = `${getUuid()}.mp3`;\n const file = new File([audioBlob], fileName, {\n type: props.audioRecordFormat,\n });\n wavesurfer.value.load(audioUrl);\n emit('finishRecord', {\n name: file.name,\n type: file.type,\n size: file.size,\n file,\n });\n hasRecording.value = true;\n isRecording.value = false;\n });\n\n record.value.on('record-progress', time => {\n emit('recorderProgressChanged', formatTimeProgress(time));\n });\n};\n\nconst stopRecording = () => {\n if (isRecording.value) {\n record.value.stopRecording();\n isRecording.value = false;\n }\n};\n\nconst startRecording = () => {\n record.value.startRecording();\n isRecording.value = true;\n};\n\nconst playPause = () => {\n if (hasRecording.value) {\n wavesurfer.value.playPause();\n isPlaying.value = !isPlaying.value;\n }\n};\n\nonMounted(() => {\n initWaveSurfer();\n startRecording();\n});\n\nonUnmounted(() => {\n if (wavesurfer.value) {\n wavesurfer.value.destroy();\n }\n});\n\ndefineExpose({ playPause, stopRecording, record });\n</script>\n\n<template>\n <div ref=\"waveformContainer\" class=\"w-full p-1\" />\n</template>\n","<script>\n// TODO: Remove this when we support all formats\nconst formatsToRemove = ['DOCUMENT', 'IMAGE', 'VIDEO'];\n\nexport default {\n props: {\n inboxId: {\n type: Number,\n default: undefined,\n },\n },\n emits: ['onSelect'],\n data() {\n return {\n query: '',\n };\n },\n computed: {\n whatsAppTemplateMessages() {\n // TODO: Remove the last filter when we support all formats\n return this.$store.getters['inboxes/getWhatsAppTemplates'](this.inboxId)\n .filter(template => template.status.toLowerCase() === 'approved')\n .filter(template => {\n return template.components.every(component => {\n return !formatsToRemove.includes(component.format);\n });\n });\n },\n filteredTemplateMessages() {\n return this.whatsAppTemplateMessages.filter(template =>\n template.name.toLowerCase().includes(this.query.toLowerCase())\n );\n },\n },\n methods: {\n getTemplatebody(template) {\n return template.components.find(component => component.type === 'BODY')\n .text;\n },\n },\n};\n</script>\n\n<template>\n <div class=\"w-full\">\n <div\n class=\"gap-1 bg-n-alpha-black2 items-center flex mb-2.5 py-0 px-2.5 rounded-lg outline outline-1 outline-n-weak hover:outline-n-slate-6 dark:hover:outline-n-slate-6 focus-within:outline-n-brand dark:focus-within:outline-n-brand\"\n >\n <fluent-icon icon=\"search\" class=\"text-n-slate-12\" size=\"16\" />\n <input\n v-model=\"query\"\n type=\"search\"\n :placeholder=\"$t('WHATSAPP_TEMPLATES.PICKER.SEARCH_PLACEHOLDER')\"\n class=\"reset-base w-full h-9 bg-transparent text-n-slate-12 !text-sm !outline-0\"\n />\n </div>\n <div\n class=\"bg-n-background outline-n-container outline outline-1 rounded-lg max-h-[18.75rem] overflow-y-auto p-2.5\"\n >\n <div v-for=\"(template, i) in filteredTemplateMessages\" :key=\"template.id\">\n <button\n class=\"rounded-lg cursor-pointer block p-2.5 text-left w-full hover:bg-n-alpha-2 dark:hover:bg-n-solid-2\"\n @click=\"$emit('onSelect', template)\"\n >\n <div>\n <div class=\"flex items-center justify-between mb-2.5\">\n <p class=\"text-sm\">\n {{ template.name }}\n </p>\n <span\n class=\"inline-block px-2 py-1 text-xs leading-none bg-n-slate-3 rounded-lg cursor-default text-n-slate-12\"\n >\n {{ $t('WHATSAPP_TEMPLATES.PICKER.LABELS.LANGUAGE') }} :\n {{ template.language }}\n </span>\n </div>\n <div>\n <p class=\"font-medium\">\n {{ $t('WHATSAPP_TEMPLATES.PICKER.LABELS.TEMPLATE_BODY') }}\n </p>\n <p class=\"label-body\">{{ getTemplatebody(template) }}</p>\n </div>\n <div class=\"mt-5\">\n <p class=\"font-medium\">\n {{ $t('WHATSAPP_TEMPLATES.PICKER.LABELS.CATEGORY') }}\n </p>\n <p>{{ template.category }}</p>\n </div>\n </div>\n </button>\n <hr\n v-if=\"i != filteredTemplateMessages.length - 1\"\n :key=\"`hr-${i}`\"\n class=\"border-b border-solid border-n-weak my-2.5 mx-auto max-w-[95%]\"\n />\n </div>\n <div v-if=\"!filteredTemplateMessages.length\">\n <p>\n {{ $t('WHATSAPP_TEMPLATES.PICKER.NO_TEMPLATES_FOUND') }}\n <strong>{{ query }}</strong>\n </p>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.label-body {\n font-family: monospace;\n}\n</style>\n","<script>\n/**\n * This component handles parsing and sending WhatsApp message templates.\n * It works as follows:\n * 1. Displays the template text with variable placeholders.\n * 2. Generates input fields for each variable in the template.\n * 3. Validates that all variables are filled before sending.\n * 4. Replaces placeholders with user-provided values.\n * 5. Emits events to send the processed message or reset the template.\n */\nimport { ref, computed, onMounted } from 'vue';\nimport { useVuelidate } from '@vuelidate/core';\nimport { requiredIf } from '@vuelidate/validators';\n\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n NextButton,\n },\n props: {\n template: {\n type: Object,\n default: () => ({}),\n },\n },\n emits: ['sendMessage', 'resetTemplate'],\n setup(props, { emit }) {\n const processVariable = str => {\n return str.replace(/{{|}}/g, '');\n };\n\n const allKeysRequired = value => {\n const keys = Object.keys(value);\n return keys.every(key => value[key]);\n };\n\n const processedParams = ref({});\n\n const templateString = computed(() => {\n return props.template.components.find(\n component => component.type === 'BODY'\n ).text;\n });\n\n const variables = computed(() => {\n return templateString.value.match(/{{([^}]+)}}/g);\n });\n\n const processedString = computed(() => {\n return templateString.value.replace(/{{([^}]+)}}/g, (match, variable) => {\n const variableKey = processVariable(variable);\n return processedParams.value[variableKey] || `{{${variable}}}`;\n });\n });\n\n const v$ = useVuelidate(\n {\n processedParams: {\n requiredIfKeysPresent: requiredIf(variables),\n allKeysRequired,\n },\n },\n { processedParams }\n );\n\n const generateVariables = () => {\n const matchedVariables = templateString.value.match(/{{([^}]+)}}/g);\n if (!matchedVariables) return;\n\n const finalVars = matchedVariables.map(i => processVariable(i));\n processedParams.value = finalVars.reduce((acc, variable) => {\n acc[variable] = '';\n return acc;\n }, {});\n };\n\n const resetTemplate = () => {\n emit('resetTemplate');\n };\n\n const sendMessage = () => {\n v$.value.$touch();\n if (v$.value.$invalid) return;\n\n const payload = {\n message: processedString.value,\n templateParams: {\n name: props.template.name,\n category: props.template.category,\n language: props.template.language,\n namespace: props.template.namespace,\n processed_params: processedParams.value,\n },\n };\n emit('sendMessage', payload);\n };\n\n onMounted(generateVariables);\n\n return {\n processedParams,\n variables,\n templateString,\n processedString,\n v$,\n resetTemplate,\n sendMessage,\n };\n },\n};\n</script>\n\n<template>\n <div class=\"w-full\">\n <textarea\n v-model=\"processedString\"\n rows=\"4\"\n readonly\n class=\"template-input\"\n />\n <div v-if=\"variables\" class=\"p-2.5\">\n <p class=\"text-sm font-semibold mb-2.5\">\n {{ $t('WHATSAPP_TEMPLATES.PARSER.VARIABLES_LABEL') }}\n </p>\n <div\n v-for=\"(variable, key) in processedParams\"\n :key=\"key\"\n class=\"items-center flex mb-2.5\"\n >\n <span\n class=\"bg-n-alpha-black2 text-n-slate-12 inline-block rounded-md text-xs py-2.5 px-6\"\n >\n {{ key }}\n </span>\n <woot-input\n v-model=\"processedParams[key]\"\n type=\"text\"\n class=\"flex-1 text-sm ml-2.5\"\n :styles=\"{ marginBottom: 0 }\"\n />\n </div>\n <p\n v-if=\"v$.$dirty && v$.$invalid\"\n class=\"bg-n-ruby-9/20 rounded-md text-n-ruby-9 p-2.5 text-center\"\n >\n {{ $t('WHATSAPP_TEMPLATES.PARSER.FORM_ERROR_MESSAGE') }}\n </p>\n </div>\n <footer class=\"flex justify-end gap-2\">\n <NextButton\n faded\n slate\n type=\"reset\"\n :label=\"$t('WHATSAPP_TEMPLATES.PARSER.GO_BACK_LABEL')\"\n @click=\"resetTemplate\"\n />\n <NextButton\n type=\"button\"\n :label=\"$t('WHATSAPP_TEMPLATES.PARSER.SEND_MESSAGE_LABEL')\"\n @click=\"sendMessage\"\n />\n </footer>\n </div>\n</template>\n","<script>\nimport TemplatesPicker from './TemplatesPicker.vue';\nimport TemplateParser from './TemplateParser.vue';\nexport default {\n components: {\n TemplatesPicker,\n TemplateParser,\n },\n props: {\n show: {\n type: Boolean,\n default: false,\n },\n inboxId: {\n type: Number,\n default: undefined,\n },\n },\n emits: ['onSend', 'cancel', 'update:show'],\n data() {\n return {\n selectedWaTemplate: null,\n };\n },\n computed: {\n localShow: {\n get() {\n return this.show;\n },\n set(value) {\n this.$emit('update:show', value);\n },\n },\n modalHeaderContent() {\n return this.selectedWaTemplate\n ? this.$t('WHATSAPP_TEMPLATES.MODAL.TEMPLATE_SELECTED_SUBTITLE', {\n templateName: this.selectedWaTemplate.name,\n })\n : this.$t('WHATSAPP_TEMPLATES.MODAL.SUBTITLE');\n },\n },\n methods: {\n pickTemplate(template) {\n this.selectedWaTemplate = template;\n },\n onResetTemplate() {\n this.selectedWaTemplate = null;\n },\n onSendMessage(message) {\n this.$emit('onSend', message);\n },\n onClose() {\n this.$emit('cancel');\n },\n },\n};\n</script>\n\n<template>\n <woot-modal v-model:show=\"localShow\" :on-close=\"onClose\" size=\"modal-big\">\n <woot-modal-header\n :header-title=\"$t('WHATSAPP_TEMPLATES.MODAL.TITLE')\"\n :header-content=\"modalHeaderContent\"\n />\n <div class=\"row modal-content\">\n <TemplatesPicker\n v-if=\"!selectedWaTemplate\"\n :inbox-id=\"inboxId\"\n @on-select=\"pickTemplate\"\n />\n <TemplateParser\n v-else\n :template=\"selectedWaTemplate\"\n @reset-template=\"onResetTemplate\"\n @send-message=\"onSendMessage\"\n />\n </div>\n </woot-modal>\n</template>\n\n<style scoped>\n.modal-content {\n padding: 1.5625rem 2rem;\n}\n</style>\n","import { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\nimport {\n MAXIMUM_FILE_UPLOAD_SIZE,\n MAXIMUM_FILE_UPLOAD_SIZE_TWILIO_SMS_CHANNEL,\n} from 'shared/constants/messages';\nimport { checkFileSizeLimit } from 'shared/helpers/FileHelper';\nimport { DirectUpload } from 'activestorage';\n\nexport default {\n computed: {\n ...mapGetters({\n accountId: 'getCurrentAccountId',\n }),\n },\n methods: {\n onFileUpload(file) {\n if (this.globalConfig.directUploadsEnabled) {\n this.onDirectFileUpload(file);\n } else {\n this.onIndirectFileUpload(file);\n }\n },\n onDirectFileUpload(file) {\n const MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE = this.isATwilioSMSChannel\n ? MAXIMUM_FILE_UPLOAD_SIZE_TWILIO_SMS_CHANNEL\n : MAXIMUM_FILE_UPLOAD_SIZE;\n\n if (!file) {\n return;\n }\n if (checkFileSizeLimit(file, MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE)) {\n const upload = new DirectUpload(\n file.file,\n `/api/v1/accounts/${this.accountId}/conversations/${this.currentChat.id}/direct_uploads`,\n {\n directUploadWillCreateBlobWithXHR: xhr => {\n xhr.setRequestHeader(\n 'api_access_token',\n this.currentUser.access_token\n );\n },\n }\n );\n\n upload.create((error, blob) => {\n if (error) {\n useAlert(error);\n } else {\n this.attachFile({ file, blob });\n }\n });\n } else {\n useAlert(\n this.$t('CONVERSATION.FILE_SIZE_LIMIT', {\n MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE,\n })\n );\n }\n },\n onIndirectFileUpload(file) {\n const MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE = this.isATwilioSMSChannel\n ? MAXIMUM_FILE_UPLOAD_SIZE_TWILIO_SMS_CHANNEL\n : MAXIMUM_FILE_UPLOAD_SIZE;\n if (!file) {\n return;\n }\n if (checkFileSizeLimit(file, MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE)) {\n this.attachFile({ file });\n } else {\n useAlert(\n this.$t('CONVERSATION.FILE_SIZE_LIMIT', {\n MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE,\n })\n );\n }\n },\n },\n};\n","<script>\n// [TODO] The popout events are needlessly complex and should be simplified\nimport { defineAsyncComponent, defineModel, useTemplateRef } from 'vue';\nimport { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\nimport { useUISettings } from 'dashboard/composables/useUISettings';\nimport { useTrack } from 'dashboard/composables';\nimport keyboardEventListenerMixins from 'shared/mixins/keyboardEventListenerMixins';\n\nimport CannedResponse from './CannedResponse.vue';\nimport ReplyToMessage from './ReplyToMessage.vue';\nimport ResizableTextArea from 'shared/components/ResizableTextArea.vue';\nimport AttachmentPreview from 'dashboard/components/widgets/AttachmentsPreview.vue';\nimport ReplyTopPanel from 'dashboard/components/widgets/WootWriter/ReplyTopPanel.vue';\nimport ReplyEmailHead from './ReplyEmailHead.vue';\nimport ReplyBottomPanel from 'dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue';\nimport ArticleSearchPopover from 'dashboard/routes/dashboard/helpcenter/components/ArticleSearch/SearchPopover.vue';\nimport MessageSignatureMissingAlert from './MessageSignatureMissingAlert.vue';\nimport Banner from 'dashboard/components/ui/Banner.vue';\nimport { REPLY_EDITOR_MODES } from 'dashboard/components/widgets/WootWriter/constants';\nimport WootMessageEditor from 'dashboard/components/widgets/WootWriter/Editor.vue';\nimport AudioRecorder from 'dashboard/components/widgets/WootWriter/AudioRecorder.vue';\nimport { AUDIO_FORMATS } from 'shared/constants/messages';\nimport { BUS_EVENTS } from 'shared/constants/busEvents';\nimport {\n getMessageVariables,\n getUndefinedVariablesInMessage,\n replaceVariablesInMessage,\n} from '@chatwoot/utils';\nimport WhatsappTemplates from './WhatsappTemplates/Modal.vue';\nimport { MESSAGE_MAX_LENGTH } from 'shared/helpers/MessageTypeHelper';\nimport inboxMixin, { INBOX_FEATURES } from 'shared/mixins/inboxMixin';\nimport { trimContent, debounce, getRecipients } from '@chatwoot/utils';\nimport wootConstants from 'dashboard/constants/globals';\nimport { CONVERSATION_EVENTS } from '../../../helper/AnalyticsHelper/events';\nimport fileUploadMixin from 'dashboard/mixins/fileUploadMixin';\nimport {\n appendSignature,\n removeSignature,\n replaceSignature,\n extractTextFromMarkdown,\n} from 'dashboard/helper/editorHelper';\n\nimport { LOCAL_STORAGE_KEYS } from 'dashboard/constants/localStorage';\nimport { LocalStorage } from 'shared/helpers/localStorage';\nimport { emitter } from 'shared/helpers/mitt';\nconst EmojiInput = defineAsyncComponent(\n () => import('shared/components/emoji/EmojiInput.vue')\n);\n\nexport default {\n components: {\n ArticleSearchPopover,\n AttachmentPreview,\n AudioRecorder,\n Banner,\n CannedResponse,\n EmojiInput,\n MessageSignatureMissingAlert,\n ReplyBottomPanel,\n ReplyEmailHead,\n ReplyToMessage,\n ReplyTopPanel,\n ResizableTextArea,\n WhatsappTemplates,\n WootMessageEditor,\n },\n mixins: [inboxMixin, fileUploadMixin, keyboardEventListenerMixins],\n emits: ['update:popoutReplyBox', 'togglePopout'],\n setup() {\n const {\n uiSettings,\n updateUISettings,\n isEditorHotKeyEnabled,\n fetchSignatureFlagFromUISettings,\n } = useUISettings();\n\n const popoutReplyBox = defineModel('popoutReplyBox', {\n type: Boolean,\n default: false,\n });\n\n const replyEditor = useTemplateRef('replyEditor');\n\n return {\n uiSettings,\n popoutReplyBox,\n updateUISettings,\n isEditorHotKeyEnabled,\n fetchSignatureFlagFromUISettings,\n replyEditor,\n };\n },\n data() {\n return {\n message: '',\n inReplyTo: {},\n isFocused: false,\n showEmojiPicker: false,\n attachedFiles: [],\n isRecordingAudio: false,\n recordingAudioState: '',\n recordingAudioDurationText: '',\n isUploading: false,\n replyType: REPLY_EDITOR_MODES.REPLY,\n mentionSearchKey: '',\n hasSlashCommand: false,\n bccEmails: '',\n ccEmails: '',\n toEmails: '',\n doAutoSaveDraft: () => {},\n showWhatsAppTemplatesModal: false,\n updateEditorSelectionWith: '',\n undefinedVariableMessage: '',\n showMentions: false,\n showUserMentions: false,\n showCannedMenu: false,\n showVariablesMenu: false,\n newConversationModalActive: false,\n showArticleSearchPopover: false,\n hasRecordedAudio: false,\n };\n },\n computed: {\n ...mapGetters({\n isRTL: 'accounts/isRTL',\n currentChat: 'getSelectedChat',\n messageSignature: 'getMessageSignature',\n currentUser: 'getCurrentUser',\n lastEmail: 'getLastEmailInSelectedChat',\n globalConfig: 'globalConfig/get',\n }),\n currentContact() {\n return this.$store.getters['contacts/getContact'](\n this.currentChat.meta.sender.id\n );\n },\n shouldShowReplyToMessage() {\n return (\n this.inReplyTo?.id &&\n !this.isPrivate &&\n this.inboxHasFeature(INBOX_FEATURES.REPLY_TO) &&\n !this.is360DialogWhatsAppChannel\n );\n },\n showRichContentEditor() {\n if (this.isOnPrivateNote || this.isRichEditorEnabled) {\n return true;\n }\n\n if (this.isAPIInbox) {\n const {\n display_rich_content_editor: displayRichContentEditor = false,\n } = this.uiSettings;\n return displayRichContentEditor;\n }\n\n return false;\n },\n assignedAgent: {\n get() {\n return this.currentChat.meta.assignee;\n },\n set(agent) {\n const agentId = agent ? agent.id : 0;\n this.$store.dispatch('setCurrentChatAssignee', agent);\n this.$store\n .dispatch('assignAgent', {\n conversationId: this.currentChat.id,\n agentId,\n })\n .then(() => {\n useAlert(this.$t('CONVERSATION.CHANGE_AGENT'));\n });\n },\n },\n showSelfAssignBanner() {\n if (this.message !== '' && !this.isOnPrivateNote) {\n if (!this.assignedAgent) {\n return true;\n }\n if (this.assignedAgent.id !== this.currentUser.id) {\n return true;\n }\n }\n\n return false;\n },\n hasWhatsappTemplates() {\n return !!this.$store.getters['inboxes/getWhatsAppTemplates'](this.inboxId)\n .length;\n },\n isPrivate() {\n if (this.currentChat.can_reply || this.isAWhatsAppChannel) {\n return this.isOnPrivateNote;\n }\n return true;\n },\n inboxId() {\n return this.currentChat.inbox_id;\n },\n inbox() {\n return this.$store.getters['inboxes/getInbox'](this.inboxId);\n },\n messagePlaceHolder() {\n return this.isPrivate\n ? this.$t('CONVERSATION.FOOTER.PRIVATE_MSG_INPUT')\n : this.$t('CONVERSATION.FOOTER.MSG_INPUT');\n },\n isMessageLengthReachingThreshold() {\n return this.message.length > this.maxLength - 50;\n },\n charactersRemaining() {\n return this.maxLength - this.message.length;\n },\n isReplyButtonDisabled() {\n if (this.isATwitterInbox) return true;\n if (this.hasAttachments || this.hasRecordedAudio) return false;\n\n return (\n this.isMessageEmpty ||\n this.message.length === 0 ||\n this.message.length > this.maxLength\n );\n },\n sender() {\n return {\n name: this.currentUser.name,\n thumbnail: this.currentUser.avatar_url,\n };\n },\n conversationType() {\n const { additional_attributes: additionalAttributes } = this.currentChat;\n const type = additionalAttributes ? additionalAttributes.type : '';\n return type || '';\n },\n maxLength() {\n if (this.isPrivate) {\n return MESSAGE_MAX_LENGTH.GENERAL;\n }\n if (this.isAFacebookInbox) {\n return MESSAGE_MAX_LENGTH.FACEBOOK;\n }\n if (this.isAWhatsAppChannel) {\n return MESSAGE_MAX_LENGTH.TWILIO_WHATSAPP;\n }\n if (this.isASmsInbox) {\n return MESSAGE_MAX_LENGTH.TWILIO_SMS;\n }\n if (this.isAnEmailChannel) {\n return MESSAGE_MAX_LENGTH.EMAIL;\n }\n return MESSAGE_MAX_LENGTH.GENERAL;\n },\n showFileUpload() {\n return (\n this.isAWebWidgetInbox ||\n this.isAFacebookInbox ||\n this.isAWhatsAppChannel ||\n this.isAPIInbox ||\n this.isAnEmailChannel ||\n this.isASmsInbox ||\n this.isATelegramChannel ||\n this.isALineChannel\n );\n },\n replyButtonLabel() {\n let sendMessageText = this.$t('CONVERSATION.REPLYBOX.SEND');\n if (this.isPrivate) {\n sendMessageText = this.$t('CONVERSATION.REPLYBOX.CREATE');\n }\n const keyLabel = this.isEditorHotKeyEnabled('cmd_enter')\n ? '(⌘ + ↵)'\n : '(↵)';\n return `${sendMessageText} ${keyLabel}`;\n },\n replyBoxClass() {\n return {\n 'is-private': this.isPrivate,\n 'is-focused': this.isFocused || this.hasAttachments,\n };\n },\n hasAttachments() {\n return this.attachedFiles.length;\n },\n isRichEditorEnabled() {\n return this.isAWebWidgetInbox || this.isAnEmailChannel;\n },\n showAudioRecorder() {\n return !this.isOnPrivateNote && this.showFileUpload;\n },\n showAudioRecorderEditor() {\n return this.showAudioRecorder && this.isRecordingAudio;\n },\n isOnPrivateNote() {\n return this.replyType === REPLY_EDITOR_MODES.NOTE;\n },\n isOnExpandedLayout() {\n const {\n LAYOUT_TYPES: { CONDENSED },\n } = wootConstants;\n const { conversation_display_type: conversationDisplayType = CONDENSED } =\n this.uiSettings;\n return conversationDisplayType !== CONDENSED;\n },\n emojiDialogClassOnExpandedLayoutAndRTLView() {\n if (this.isOnExpandedLayout || this.popoutReplyBox) {\n return 'emoji-dialog--expanded';\n }\n if (this.isRTL) {\n return 'emoji-dialog--rtl';\n }\n return '';\n },\n isMessageEmpty() {\n if (!this.message) {\n return true;\n }\n return !this.message.trim().replace(/\\n/g, '').length;\n },\n showReplyHead() {\n return !this.isOnPrivateNote && this.isAnEmailChannel;\n },\n enableMultipleFileUpload() {\n return (\n this.isAnEmailChannel ||\n this.isAWebWidgetInbox ||\n this.isAPIInbox ||\n this.isAWhatsAppChannel ||\n this.isATelegramChannel\n );\n },\n isSignatureEnabledForInbox() {\n return !this.isPrivate && this.sendWithSignature;\n },\n isSignatureAvailable() {\n return !!this.signatureToApply;\n },\n sendWithSignature() {\n return this.fetchSignatureFlagFromUISettings(this.channelType);\n },\n editorMessageKey() {\n const { editor_message_key: isEnabled } = this.uiSettings;\n return isEnabled;\n },\n commandPlusEnterToSendEnabled() {\n return this.editorMessageKey === 'cmd_enter';\n },\n enterToSendEnabled() {\n return this.editorMessageKey === 'enter';\n },\n conversationId() {\n return this.currentChat.id;\n },\n conversationIdByRoute() {\n return this.conversationId;\n },\n editorStateId() {\n return `draft-${this.conversationIdByRoute}-${this.replyType}`;\n },\n audioRecordFormat() {\n if (this.isAWhatsAppChannel || this.isATelegramChannel) {\n return AUDIO_FORMATS.MP3;\n }\n if (this.isAPIInbox) {\n return AUDIO_FORMATS.MP3;\n }\n return AUDIO_FORMATS.WAV;\n },\n messageVariables() {\n const variables = getMessageVariables({\n conversation: this.currentChat,\n contact: this.currentContact,\n });\n return variables;\n },\n // ensure that the signature is plain text depending on `showRichContentEditor`\n signatureToApply() {\n return this.showRichContentEditor\n ? this.messageSignature\n : extractTextFromMarkdown(this.messageSignature);\n },\n connectedPortalSlug() {\n const { help_center: portal = {} } = this.inbox;\n const { slug = '' } = portal;\n return slug;\n },\n },\n watch: {\n currentChat(conversation) {\n const { can_reply: canReply } = conversation;\n this.setCCAndToEmailsFromLastChat();\n\n if (this.isOnPrivateNote) {\n return;\n }\n\n if (canReply || this.isAWhatsAppChannel) {\n this.replyType = REPLY_EDITOR_MODES.REPLY;\n } else {\n this.replyType = REPLY_EDITOR_MODES.NOTE;\n }\n\n this.fetchAndSetReplyTo();\n },\n // When moving from one conversation to another, the store may not have the\n // list of all the messages. A fetch is subsequently made to get the messages.\n // However, this update does not trigger the `currentChat` watcher.\n // We can add a deep watcher to it, but then, that would be too broad of a net to cast\n // And would impact performance too. So we watch the messages directly.\n // The watcher here is `deep` too, because the messages array is mutated and\n // not replaced. So, a shallow watcher would not catch the change.\n 'currentChat.messages': {\n handler() {\n this.setCCAndToEmailsFromLastChat();\n },\n deep: true,\n },\n conversationIdByRoute(conversationId, oldConversationId) {\n if (conversationId !== oldConversationId) {\n this.setToDraft(oldConversationId, this.replyType);\n this.getFromDraft();\n }\n },\n message(updatedMessage) {\n // Check if the message starts with a slash.\n const bodyWithoutSignature = removeSignature(\n updatedMessage,\n this.signatureToApply\n );\n const startsWithSlash = bodyWithoutSignature.startsWith('/');\n\n // Determine if the user is potentially typing a slash command.\n // This is true if the message starts with a slash and the rich content editor is not active.\n this.hasSlashCommand = startsWithSlash && !this.showRichContentEditor;\n this.showMentions = this.hasSlashCommand;\n\n // If a slash command is active, extract the command text after the slash.\n // If not, reset the mentionSearchKey.\n this.mentionSearchKey = this.hasSlashCommand\n ? bodyWithoutSignature.substring(1)\n : '';\n\n // Autosave the current message draft.\n this.doAutoSaveDraft();\n },\n replyType(updatedReplyType, oldReplyType) {\n this.setToDraft(this.conversationIdByRoute, oldReplyType);\n this.getFromDraft();\n },\n },\n\n mounted() {\n this.getFromDraft();\n // Don't use the keyboard listener mixin here as the events here are supposed to be\n // working even if input/textarea is focussed.\n document.addEventListener('paste', this.onPaste);\n document.addEventListener('keydown', this.handleKeyEvents);\n this.setCCAndToEmailsFromLastChat();\n this.doAutoSaveDraft = debounce(\n () => {\n this.saveDraft(this.conversationIdByRoute, this.replyType);\n },\n 500,\n true\n );\n\n this.fetchAndSetReplyTo();\n emitter.on(BUS_EVENTS.TOGGLE_REPLY_TO_MESSAGE, this.fetchAndSetReplyTo);\n\n // A hacky fix to solve the drag and drop\n // Is showing on top of new conversation modal drag and drop\n // TODO need to find a better solution\n emitter.on(\n BUS_EVENTS.NEW_CONVERSATION_MODAL,\n this.onNewConversationModalActive\n );\n emitter.on(BUS_EVENTS.INSERT_INTO_NORMAL_EDITOR, this.addIntoEditor);\n },\n unmounted() {\n document.removeEventListener('paste', this.onPaste);\n document.removeEventListener('keydown', this.handleKeyEvents);\n emitter.off(BUS_EVENTS.TOGGLE_REPLY_TO_MESSAGE, this.fetchAndSetReplyTo);\n emitter.off(BUS_EVENTS.INSERT_INTO_NORMAL_EDITOR, this.addIntoEditor);\n emitter.off(\n BUS_EVENTS.NEW_CONVERSATION_MODAL,\n this.onNewConversationModalActive\n );\n },\n methods: {\n handleInsert(article) {\n const { url, title } = article;\n if (this.isRichEditorEnabled) {\n // Removing empty lines from the title\n const lines = title.split('\\n');\n const nonEmptyLines = lines.filter(line => line.trim() !== '');\n const filteredMarkdown = nonEmptyLines.join(' ');\n emitter.emit(\n BUS_EVENTS.INSERT_INTO_RICH_EDITOR,\n `[${filteredMarkdown}](${url})`\n );\n } else {\n this.addIntoEditor(\n `${this.$t('CONVERSATION.REPLYBOX.INSERT_READ_MORE')} ${url}`\n );\n }\n\n useTrack(CONVERSATION_EVENTS.INSERT_ARTICLE_LINK);\n },\n toggleRichContentEditor() {\n this.updateUISettings({\n display_rich_content_editor: !this.showRichContentEditor,\n });\n\n const plainTextSignature = extractTextFromMarkdown(this.messageSignature);\n\n if (!this.showRichContentEditor && this.messageSignature) {\n // remove the old signature -> extract text from markdown -> attach new signature\n let message = removeSignature(this.message, this.messageSignature);\n message = extractTextFromMarkdown(message);\n message = appendSignature(message, plainTextSignature);\n\n this.message = message;\n } else {\n this.message = replaceSignature(\n this.message,\n plainTextSignature,\n this.messageSignature\n );\n }\n },\n saveDraft(conversationId, replyType) {\n if (this.message || this.message === '') {\n const key = `draft-${conversationId}-${replyType}`;\n const draftToSave = trimContent(this.message || '');\n\n this.$store.dispatch('draftMessages/set', {\n key,\n message: draftToSave,\n });\n }\n },\n setToDraft(conversationId, replyType) {\n this.saveDraft(conversationId, replyType);\n this.message = '';\n },\n getFromDraft() {\n if (this.conversationIdByRoute) {\n const key = `draft-${this.conversationIdByRoute}-${this.replyType}`;\n const messageFromStore =\n this.$store.getters['draftMessages/get'](key) || '';\n\n // ensure that the message has signature set based on the ui setting\n this.message = this.toggleSignatureForDraft(messageFromStore);\n }\n },\n toggleSignatureForDraft(message) {\n if (this.isPrivate) {\n return message;\n }\n\n return this.sendWithSignature\n ? appendSignature(message, this.signatureToApply)\n : removeSignature(message, this.signatureToApply);\n },\n removeFromDraft() {\n if (this.conversationIdByRoute) {\n const key = `draft-${this.conversationIdByRoute}-${this.replyType}`;\n this.$store.dispatch('draftMessages/delete', { key });\n }\n },\n getElementToBind() {\n return this.replyEditor;\n },\n getKeyboardEvents() {\n return {\n Escape: {\n action: () => {\n this.hideEmojiPicker();\n this.hideMentions();\n },\n allowOnFocusedInput: true,\n },\n '$mod+KeyK': {\n action: e => {\n e.preventDefault();\n const ninja = document.querySelector('ninja-keys');\n ninja.open();\n },\n allowOnFocusedInput: true,\n },\n Enter: {\n action: e => {\n if (this.isAValidEvent('enter')) {\n this.onSendReply();\n e.preventDefault();\n }\n },\n allowOnFocusedInput: true,\n },\n '$mod+Enter': {\n action: () => {\n if (this.isAValidEvent('cmd_enter')) {\n this.onSendReply();\n }\n },\n allowOnFocusedInput: true,\n },\n };\n },\n isAValidEvent(selectedKey) {\n return (\n !this.showUserMentions &&\n !this.showMentions &&\n !this.showCannedMenu &&\n !this.showVariablesMenu &&\n this.isFocused &&\n this.isEditorHotKeyEnabled(selectedKey)\n );\n },\n onPaste(e) {\n const data = e.clipboardData.files;\n if (!this.showRichContentEditor && data.length !== 0) {\n this.$refs.messageInput.$el.blur();\n }\n if (!data.length || !data[0]) {\n return;\n }\n data.forEach(file => {\n const { name, type, size } = file;\n this.onFileUpload({ name, type, size, file: file });\n });\n },\n toggleUserMention(currentMentionState) {\n this.showUserMentions = currentMentionState;\n },\n toggleCannedMenu(value) {\n this.showCannedMenu = value;\n },\n toggleVariablesMenu(value) {\n this.showVariablesMenu = value;\n },\n openWhatsappTemplateModal() {\n this.showWhatsAppTemplatesModal = true;\n },\n hideWhatsappTemplatesModal() {\n this.showWhatsAppTemplatesModal = false;\n },\n onClickSelfAssign() {\n const {\n account_id,\n availability_status,\n available_name,\n email,\n id,\n name,\n role,\n avatar_url,\n } = this.currentUser;\n const selfAssign = {\n account_id,\n availability_status,\n available_name,\n email,\n id,\n name,\n role,\n thumbnail: avatar_url,\n };\n this.assignedAgent = selfAssign;\n },\n confirmOnSendReply() {\n if (this.isReplyButtonDisabled) {\n return;\n }\n if (!this.showMentions) {\n const isOnWhatsApp =\n this.isATwilioWhatsAppChannel ||\n this.isAWhatsAppCloudChannel ||\n this.is360DialogWhatsAppChannel;\n if (isOnWhatsApp && !this.isPrivate) {\n this.sendMessageAsMultipleMessages(this.message);\n } else {\n const messagePayload = this.getMessagePayload(this.message);\n this.sendMessage(messagePayload);\n }\n\n if (!this.isPrivate) {\n this.clearEmailField();\n }\n\n this.clearMessage();\n this.hideEmojiPicker();\n this.$emit('update:popoutReplyBox', false);\n }\n },\n sendMessageAsMultipleMessages(message) {\n const messages = this.getMessagePayloadForWhatsapp(message);\n messages.forEach(messagePayload => {\n this.sendMessage(messagePayload);\n });\n },\n sendMessageAnalyticsData(isPrivate) {\n // Analytics data for message signature is enabled or not in channels\n return isPrivate\n ? useTrack(CONVERSATION_EVENTS.SENT_PRIVATE_NOTE)\n : useTrack(CONVERSATION_EVENTS.SENT_MESSAGE, {\n channelType: this.channelType,\n signatureEnabled: this.sendWithSignature,\n hasReplyTo: !!this.inReplyTo?.id,\n });\n },\n async onSendReply() {\n const undefinedVariables = getUndefinedVariablesInMessage({\n message: this.message,\n variables: this.messageVariables,\n });\n if (undefinedVariables.length > 0) {\n const undefinedVariablesCount =\n undefinedVariables.length > 1 ? undefinedVariables.length : 1;\n this.undefinedVariableMessage = this.$t(\n 'CONVERSATION.REPLYBOX.UNDEFINED_VARIABLES.MESSAGE',\n {\n undefinedVariablesCount,\n undefinedVariables: undefinedVariables.join(', '),\n }\n );\n\n const ok = await this.$refs.confirmDialog.showConfirmation();\n if (ok) {\n this.confirmOnSendReply();\n }\n } else {\n this.confirmOnSendReply();\n }\n },\n async sendMessage(messagePayload) {\n try {\n await this.$store.dispatch(\n 'createPendingMessageAndSend',\n messagePayload\n );\n emitter.emit(BUS_EVENTS.SCROLL_TO_MESSAGE);\n emitter.emit(BUS_EVENTS.MESSAGE_SENT);\n this.removeFromDraft();\n this.sendMessageAnalyticsData(messagePayload.private);\n } catch (error) {\n const errorMessage =\n error?.response?.data?.error || this.$t('CONVERSATION.MESSAGE_ERROR');\n useAlert(errorMessage);\n }\n },\n async onSendWhatsAppReply(messagePayload) {\n this.sendMessage({\n conversationId: this.currentChat.id,\n ...messagePayload,\n });\n this.hideWhatsappTemplatesModal();\n },\n replaceText(message) {\n if (this.sendWithSignature && !this.private) {\n // if signature is enabled, append it to the message\n // appendSignature ensures that the signature is not duplicated\n // so we don't need to check if the signature is already present\n message = appendSignature(message, this.signatureToApply);\n }\n\n const updatedMessage = replaceVariablesInMessage({\n message,\n variables: this.messageVariables,\n });\n\n setTimeout(() => {\n useTrack(CONVERSATION_EVENTS.INSERTED_A_CANNED_RESPONSE);\n this.message = updatedMessage;\n }, 100);\n },\n setReplyMode(mode = REPLY_EDITOR_MODES.REPLY) {\n const { can_reply: canReply } = this.currentChat;\n this.$store.dispatch('draftMessages/setReplyEditorMode', {\n mode,\n });\n if (canReply || this.isAWhatsAppChannel) this.replyType = mode;\n if (this.showRichContentEditor) {\n if (this.isRecordingAudio) {\n this.toggleAudioRecorder();\n }\n return;\n }\n this.$nextTick(() => this.$refs.messageInput.focus());\n },\n clearEditorSelection() {\n this.updateEditorSelectionWith = '';\n },\n insertIntoTextEditor(text, selectionStart, selectionEnd) {\n const { message } = this;\n const newMessage =\n message.slice(0, selectionStart) +\n text +\n message.slice(selectionEnd, message.length);\n this.message = newMessage;\n },\n addIntoEditor(content) {\n if (this.showRichContentEditor) {\n this.updateEditorSelectionWith = content;\n this.onFocus();\n }\n if (!this.showRichContentEditor) {\n const { selectionStart, selectionEnd } = this.$refs.messageInput.$el;\n this.insertIntoTextEditor(content, selectionStart, selectionEnd);\n }\n },\n clearMessage() {\n this.message = '';\n if (this.sendWithSignature && !this.isPrivate) {\n // if signature is enabled, append it to the message\n this.message = appendSignature(this.message, this.signatureToApply);\n }\n this.attachedFiles = [];\n this.isRecordingAudio = false;\n this.resetReplyToMessage();\n this.resetAudioRecorderInput();\n },\n clearEmailField() {\n this.ccEmails = '';\n this.bccEmails = '';\n this.toEmails = '';\n },\n\n toggleEmojiPicker() {\n this.showEmojiPicker = !this.showEmojiPicker;\n },\n toggleAudioRecorder() {\n this.isRecordingAudio = !this.isRecordingAudio;\n this.isRecorderAudioStopped = !this.isRecordingAudio;\n if (!this.isRecordingAudio) {\n this.resetAudioRecorderInput();\n }\n },\n toggleAudioRecorderPlayPause() {\n if (!this.isRecordingAudio) {\n return;\n }\n if (!this.isRecorderAudioStopped) {\n this.isRecorderAudioStopped = true;\n this.$refs.audioRecorderInput.stopRecording();\n } else if (this.isRecorderAudioStopped) {\n this.$refs.audioRecorderInput.playPause();\n }\n },\n hideEmojiPicker() {\n if (this.showEmojiPicker) {\n this.toggleEmojiPicker();\n }\n },\n hideMentions() {\n this.showMentions = false;\n },\n onTypingOn() {\n this.toggleTyping('on');\n },\n onTypingOff() {\n this.toggleTyping('off');\n },\n onBlur() {\n this.isFocused = false;\n this.saveDraft(this.conversationIdByRoute, this.replyType);\n },\n onFocus() {\n this.isFocused = true;\n },\n onRecordProgressChanged(duration) {\n this.recordingAudioDurationText = duration;\n },\n onFinishRecorder(file) {\n this.recordingAudioState = 'stopped';\n this.hasRecordedAudio = true;\n // Added a new key isRecordedAudio to the file to find it's and recorded audio\n // Because to filter and show only non recorded audio and other attachments\n const autoRecordedFile = {\n ...file,\n isRecordedAudio: true,\n };\n return file && this.onFileUpload(autoRecordedFile);\n },\n toggleTyping(status) {\n const conversationId = this.currentChat.id;\n const isPrivate = this.isPrivate;\n\n if (!conversationId) {\n return;\n }\n\n this.$store.dispatch('conversationTypingStatus/toggleTyping', {\n status,\n conversationId,\n isPrivate,\n });\n },\n attachFile({ blob, file }) {\n const reader = new FileReader();\n reader.readAsDataURL(file.file);\n reader.onloadend = () => {\n this.attachedFiles.push({\n currentChatId: this.currentChat.id,\n resource: blob || file,\n isPrivate: this.isPrivate,\n thumb: reader.result,\n blobSignedId: blob ? blob.signed_id : undefined,\n isRecordedAudio: file?.isRecordedAudio || false,\n });\n };\n },\n removeAttachment(attachments) {\n this.attachedFiles = attachments;\n },\n setReplyToInPayload(payload) {\n if (this.inReplyTo?.id) {\n return {\n ...payload,\n contentAttributes: {\n ...payload.contentAttributes,\n in_reply_to: this.inReplyTo.id,\n },\n };\n }\n\n return payload;\n },\n getMessagePayloadForWhatsapp(message) {\n const multipleMessagePayload = [];\n\n if (this.attachedFiles && this.attachedFiles.length) {\n let caption = message;\n this.attachedFiles.forEach(attachment => {\n const attachedFile = this.globalConfig.directUploadsEnabled\n ? attachment.blobSignedId\n : attachment.resource.file;\n let attachmentPayload = {\n conversationId: this.currentChat.id,\n files: [attachedFile],\n private: false,\n message: caption,\n sender: this.sender,\n };\n\n attachmentPayload = this.setReplyToInPayload(attachmentPayload);\n multipleMessagePayload.push(attachmentPayload);\n caption = '';\n });\n } else {\n let messagePayload = {\n conversationId: this.currentChat.id,\n message,\n private: false,\n sender: this.sender,\n };\n\n messagePayload = this.setReplyToInPayload(messagePayload);\n\n multipleMessagePayload.push(messagePayload);\n }\n\n return multipleMessagePayload;\n },\n getMessagePayload(message) {\n let messagePayload = {\n conversationId: this.currentChat.id,\n message,\n private: this.isPrivate,\n sender: this.sender,\n };\n messagePayload = this.setReplyToInPayload(messagePayload);\n\n if (this.attachedFiles && this.attachedFiles.length) {\n messagePayload.files = [];\n this.attachedFiles.forEach(attachment => {\n if (this.globalConfig.directUploadsEnabled) {\n messagePayload.files.push(attachment.blobSignedId);\n } else {\n messagePayload.files.push(attachment.resource.file);\n }\n });\n }\n\n if (this.ccEmails && !this.isOnPrivateNote) {\n messagePayload.ccEmails = this.ccEmails;\n }\n\n if (this.bccEmails && !this.isOnPrivateNote) {\n messagePayload.bccEmails = this.bccEmails;\n }\n\n if (this.toEmails && !this.isOnPrivateNote) {\n messagePayload.toEmails = this.toEmails;\n }\n\n return messagePayload;\n },\n setCcEmails(value) {\n this.bccEmails = value.bccEmails;\n this.ccEmails = value.ccEmails;\n },\n setCCAndToEmailsFromLastChat() {\n const conversationContact = this.currentChat?.meta?.sender?.email || '';\n const { email: inboxEmail, forward_to_email: forwardToEmail } =\n this.inbox;\n\n const { cc, bcc, to } = getRecipients(\n this.lastEmail,\n conversationContact,\n inboxEmail,\n forwardToEmail\n );\n\n this.toEmails = to.join(', ');\n this.ccEmails = cc.join(', ');\n this.bccEmails = bcc.join(', ');\n },\n fetchAndSetReplyTo() {\n const replyStorageKey = LOCAL_STORAGE_KEYS.MESSAGE_REPLY_TO;\n const replyToMessageId = LocalStorage.getFromJsonStore(\n replyStorageKey,\n this.conversationId\n );\n\n this.inReplyTo = this.currentChat?.messages?.find(message => {\n if (message.id === replyToMessageId) {\n return true;\n }\n return false;\n });\n },\n resetReplyToMessage() {\n const replyStorageKey = LOCAL_STORAGE_KEYS.MESSAGE_REPLY_TO;\n LocalStorage.deleteFromJsonStore(replyStorageKey, this.conversationId);\n emitter.emit(BUS_EVENTS.TOGGLE_REPLY_TO_MESSAGE);\n },\n onNewConversationModalActive(isActive) {\n // Issue is if the new conversation modal is open and we drag and drop the file\n // then the file is not getting attached to the new conversation modal\n // and it is getting attached to the current conversation reply box\n // so to fix this we are removing the drag and drop event listener from the current conversation reply box\n // When new conversation modal is open\n this.newConversationModalActive = isActive;\n },\n onSearchPopoverClose() {\n this.showArticleSearchPopover = false;\n },\n toggleInsertArticle() {\n this.showArticleSearchPopover = !this.showArticleSearchPopover;\n },\n resetAudioRecorderInput() {\n this.recordingAudioDurationText = '00:00';\n this.isRecordingAudio = false;\n this.recordingAudioState = '';\n this.hasRecordedAudio = false;\n // Only clear the recorded audio when we click toggle button.\n this.attachedFiles = this.attachedFiles.filter(\n file => !file?.isRecordedAudio\n );\n },\n },\n};\n</script>\n\n<template>\n <Banner\n v-if=\"showSelfAssignBanner\"\n action-button-variant=\"clear\"\n color-scheme=\"secondary\"\n class=\"banner--self-assign mx-2 mb-2 rounded-lg\"\n :banner-message=\"$t('CONVERSATION.NOT_ASSIGNED_TO_YOU')\"\n has-action-button\n :action-button-label=\"$t('CONVERSATION.ASSIGN_TO_ME')\"\n @primary-action=\"onClickSelfAssign\"\n />\n <div ref=\"replyEditor\" class=\"reply-box\" :class=\"replyBoxClass\">\n <ReplyTopPanel\n :mode=\"replyType\"\n :is-message-length-reaching-threshold=\"isMessageLengthReachingThreshold\"\n :characters-remaining=\"charactersRemaining\"\n :popout-reply-box=\"popoutReplyBox\"\n @set-reply-mode=\"setReplyMode\"\n @toggle-popout=\"$emit('togglePopout')\"\n />\n <ArticleSearchPopover\n v-if=\"showArticleSearchPopover && connectedPortalSlug\"\n :selected-portal-slug=\"connectedPortalSlug\"\n @insert=\"handleInsert\"\n @close=\"onSearchPopoverClose\"\n />\n <div class=\"reply-box__top\">\n <ReplyToMessage\n v-if=\"shouldShowReplyToMessage\"\n :message=\"inReplyTo\"\n @dismiss=\"resetReplyToMessage\"\n />\n <CannedResponse\n v-if=\"showMentions && hasSlashCommand\"\n v-on-clickaway=\"hideMentions\"\n class=\"normal-editor__canned-box\"\n :search-key=\"mentionSearchKey\"\n @replace=\"replaceText\"\n />\n <EmojiInput\n v-if=\"showEmojiPicker\"\n v-on-clickaway=\"hideEmojiPicker\"\n :class=\"emojiDialogClassOnExpandedLayoutAndRTLView\"\n :on-click=\"addIntoEditor\"\n />\n <ReplyEmailHead\n v-if=\"showReplyHead\"\n v-model:cc-emails=\"ccEmails\"\n v-model:bcc-emails=\"bccEmails\"\n v-model:to-emails=\"toEmails\"\n />\n <AudioRecorder\n v-if=\"showAudioRecorderEditor\"\n ref=\"audioRecorderInput\"\n :audio-record-format=\"audioRecordFormat\"\n @recorder-progress-changed=\"onRecordProgressChanged\"\n @finish-record=\"onFinishRecorder\"\n @play=\"recordingAudioState = 'playing'\"\n @pause=\"recordingAudioState = 'paused'\"\n />\n <ResizableTextArea\n v-else-if=\"!showRichContentEditor\"\n ref=\"messageInput\"\n v-model=\"message\"\n class=\"input\"\n :placeholder=\"messagePlaceHolder\"\n :min-height=\"4\"\n :signature=\"signatureToApply\"\n allow-signature\n :send-with-signature=\"sendWithSignature\"\n @typing-off=\"onTypingOff\"\n @typing-on=\"onTypingOn\"\n @focus=\"onFocus\"\n @blur=\"onBlur\"\n />\n <WootMessageEditor\n v-else\n v-model=\"message\"\n :editor-id=\"editorStateId\"\n class=\"input\"\n :is-private=\"isOnPrivateNote\"\n :placeholder=\"messagePlaceHolder\"\n :update-selection-with=\"updateEditorSelectionWith\"\n :min-height=\"4\"\n enable-variables\n :variables=\"messageVariables\"\n :signature=\"signatureToApply\"\n allow-signature\n :channel-type=\"channelType\"\n @typing-off=\"onTypingOff\"\n @typing-on=\"onTypingOn\"\n @focus=\"onFocus\"\n @blur=\"onBlur\"\n @toggle-user-mention=\"toggleUserMention\"\n @toggle-canned-menu=\"toggleCannedMenu\"\n @toggle-variables-menu=\"toggleVariablesMenu\"\n @clear-selection=\"clearEditorSelection\"\n />\n </div>\n <div\n v-if=\"hasAttachments && !showAudioRecorderEditor\"\n class=\"attachment-preview-box\"\n @paste=\"onPaste\"\n >\n <AttachmentPreview\n class=\"flex-col mt-4\"\n :attachments=\"attachedFiles\"\n @remove-attachment=\"removeAttachment\"\n />\n </div>\n <MessageSignatureMissingAlert\n v-if=\"isSignatureEnabledForInbox && !isSignatureAvailable\"\n />\n <ReplyBottomPanel\n :conversation-id=\"conversationId\"\n :enable-multiple-file-upload=\"enableMultipleFileUpload\"\n :has-whatsapp-templates=\"hasWhatsappTemplates\"\n :inbox=\"inbox\"\n :is-on-private-note=\"isOnPrivateNote\"\n :is-recording-audio=\"isRecordingAudio\"\n :is-send-disabled=\"isReplyButtonDisabled\"\n :mode=\"replyType\"\n :on-file-upload=\"onFileUpload\"\n :on-send=\"onSendReply\"\n :recording-audio-duration-text=\"recordingAudioDurationText\"\n :recording-audio-state=\"recordingAudioState\"\n :send-button-text=\"replyButtonLabel\"\n :show-audio-recorder=\"showAudioRecorder\"\n :show-editor-toggle=\"isAPIInbox && !isOnPrivateNote\"\n :show-emoji-picker=\"showEmojiPicker\"\n :show-file-upload=\"showFileUpload\"\n :toggle-audio-recorder-play-pause=\"toggleAudioRecorderPlayPause\"\n :toggle-audio-recorder=\"toggleAudioRecorder\"\n :toggle-emoji-picker=\"toggleEmojiPicker\"\n :message=\"message\"\n :portal-slug=\"connectedPortalSlug\"\n :new-conversation-modal-active=\"newConversationModalActive\"\n @select-whatsapp-template=\"openWhatsappTemplateModal\"\n @toggle-editor=\"toggleRichContentEditor\"\n @replace-text=\"replaceText\"\n @toggle-insert-article=\"toggleInsertArticle\"\n />\n <WhatsappTemplates\n :inbox-id=\"inbox.id\"\n :show=\"showWhatsAppTemplatesModal\"\n @close=\"hideWhatsappTemplatesModal\"\n @on-send=\"onSendWhatsAppReply\"\n @cancel=\"hideWhatsappTemplatesModal\"\n />\n\n <woot-confirm-modal\n ref=\"confirmDialog\"\n :title=\"$t('CONVERSATION.REPLYBOX.UNDEFINED_VARIABLES.TITLE')\"\n :description=\"undefinedVariableMessage\"\n />\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.send-button {\n @apply mb-0;\n}\n\n.banner--self-assign {\n @apply py-2;\n}\n\n.attachment-preview-box {\n @apply bg-transparent py-0 px-4;\n}\n\n.reply-box {\n transition: height 2s cubic-bezier(0.37, 0, 0.63, 1);\n\n @apply relative mb-2 mx-2 border border-n-weak rounded-xl bg-n-solid-1;\n\n &.is-private {\n @apply bg-n-solid-amber dark:border-n-amber-3/10 border-n-amber-12/5;\n }\n}\n\n.send-button {\n @apply mb-0;\n}\n\n.reply-box__top {\n @apply relative py-0 px-4 -mt-px;\n\n textarea {\n @apply shadow-none outline-none border-transparent bg-transparent m-0 max-h-60 min-h-[3rem] pt-4 pb-0 px-0 resize-none;\n }\n}\n\n.emoji-dialog {\n @apply top-[unset] -bottom-10 -left-80 right-[unset];\n\n &::before {\n transform: rotate(270deg);\n filter: drop-shadow(0px 4px 4px rgba(0, 0, 0, 0.08));\n @apply -right-4 bottom-2 rtl:right-0 rtl:-left-4;\n }\n}\n\n.emoji-dialog--rtl {\n @apply left-[unset] -right-80;\n\n &::before {\n transform: rotate(90deg);\n filter: drop-shadow(0px 4px 4px rgba(0, 0, 0, 0.08));\n }\n}\n\n.emoji-dialog--expanded {\n @apply left-[unset] bottom-0 absolute z-[100];\n\n &::before {\n transform: rotate(0deg);\n @apply left-1 -bottom-2;\n }\n}\n\n.normal-editor__canned-box {\n width: calc(100% - 2 * var(--space-normal));\n left: var(--space-normal);\n}\n</style>\n","<script>\nimport { MESSAGE_TYPE, MESSAGE_STATUS } from 'shared/constants/messages';\nimport inboxMixin from 'shared/mixins/inboxMixin';\nimport { messageTimestamp } from 'shared/helpers/timeHelper';\n\nexport default {\n mixins: [inboxMixin],\n props: {\n sender: {\n type: Object,\n default: () => ({}),\n },\n createdAt: {\n type: Number,\n default: 0,\n },\n storySender: {\n type: String,\n default: '',\n },\n externalError: {\n type: String,\n default: '',\n },\n storyId: {\n type: String,\n default: '',\n },\n isEmail: {\n type: Boolean,\n default: true,\n },\n isPrivate: {\n type: Boolean,\n default: true,\n },\n isATweet: {\n type: Boolean,\n default: true,\n },\n messageType: {\n type: Number,\n default: 1,\n },\n messageStatus: {\n type: String,\n default: '',\n },\n sourceId: {\n type: String,\n default: '',\n },\n inboxId: {\n type: [String, Number],\n default: 0,\n },\n },\n computed: {\n inbox() {\n return this.$store.getters['inboxes/getInbox'](this.inboxId);\n },\n isIncoming() {\n return MESSAGE_TYPE.INCOMING === this.messageType;\n },\n isOutgoing() {\n return MESSAGE_TYPE.OUTGOING === this.messageType;\n },\n isTemplate() {\n return MESSAGE_TYPE.TEMPLATE === this.messageType;\n },\n isDelivered() {\n return MESSAGE_STATUS.DELIVERED === this.messageStatus;\n },\n isRead() {\n return MESSAGE_STATUS.READ === this.messageStatus;\n },\n isSent() {\n return MESSAGE_STATUS.SENT === this.messageStatus;\n },\n readableTime() {\n return messageTimestamp(this.createdAt, 'LLL d, h:mm a');\n },\n screenName() {\n const { additional_attributes: additionalAttributes = {} } =\n this.sender || {};\n return additionalAttributes?.screen_name || '';\n },\n linkToTweet() {\n if (!this.sourceId || !this.inbox.name) {\n return '';\n }\n const { screenName, sourceId } = this;\n return `https://twitter.com/${\n screenName || this.inbox.name\n }/status/${sourceId}`;\n },\n linkToStory() {\n if (!this.storyId || !this.storySender) {\n return '';\n }\n const { storySender, storyId } = this;\n return `https://www.instagram.com/stories/direct/${storySender}_${storyId}`;\n },\n showStatusIndicators() {\n if ((this.isOutgoing || this.isTemplate) && !this.isPrivate) {\n return true;\n }\n return false;\n },\n showSentIndicator() {\n if (!this.showStatusIndicators) {\n return false;\n }\n // Messages will be marked as sent for the Email channel if they have a source ID.\n if (this.isAnEmailChannel) {\n return !!this.sourceId;\n }\n\n if (\n this.isAWhatsAppChannel ||\n this.isATwilioChannel ||\n this.isAFacebookInbox ||\n this.isASmsInbox ||\n this.isATelegramChannel\n ) {\n return this.sourceId && this.isSent;\n }\n // All messages will be mark as sent for the Line channel, as there is no source ID.\n if (this.isALineChannel) {\n return true;\n }\n\n return false;\n },\n showDeliveredIndicator() {\n if (!this.showStatusIndicators) {\n return false;\n }\n if (\n this.isAWhatsAppChannel ||\n this.isATwilioChannel ||\n this.isASmsInbox ||\n this.isAFacebookInbox\n ) {\n return this.sourceId && this.isDelivered;\n }\n // All messages marked as delivered for the web widget inbox and API inbox once they are sent.\n if (this.isAWebWidgetInbox || this.isAPIInbox) {\n return this.isSent;\n }\n if (this.isALineChannel) {\n return this.isDelivered;\n }\n\n return false;\n },\n showReadIndicator() {\n if (!this.showStatusIndicators) {\n return false;\n }\n if (\n this.isAWhatsAppChannel ||\n this.isATwilioChannel ||\n this.isAFacebookInbox\n ) {\n return this.sourceId && this.isRead;\n }\n\n if (this.isAWebWidgetInbox || this.isAPIInbox) {\n return this.isRead;\n }\n\n return false;\n },\n },\n};\n</script>\n\n<template>\n <div class=\"message-text--metadata\">\n <span\n class=\"time\"\n :class=\"{\n 'has-status-icon':\n showSentIndicator || showDeliveredIndicator || showReadIndicator,\n }\"\n >\n {{ readableTime }}\n </span>\n <span v-if=\"externalError\" class=\"read-indicator-wrap\">\n <fluent-icon\n v-tooltip.top-start=\"externalError\"\n icon=\"error-circle\"\n class=\"action--icon\"\n size=\"14\"\n />\n </span>\n <span v-if=\"showReadIndicator\" class=\"read-indicator-wrap\">\n <fluent-icon\n v-tooltip.top-start=\"$t('CHAT_LIST.MESSAGE_READ')\"\n icon=\"checkmark-double\"\n class=\"action--icon read-tick read-indicator\"\n size=\"14\"\n />\n </span>\n <span v-else-if=\"showDeliveredIndicator\" class=\"read-indicator-wrap\">\n <fluent-icon\n v-tooltip.top-start=\"$t('CHAT_LIST.DELIVERED')\"\n icon=\"checkmark-double\"\n class=\"action--icon read-tick\"\n size=\"14\"\n />\n </span>\n <span v-else-if=\"showSentIndicator\" class=\"read-indicator-wrap\">\n <fluent-icon\n v-tooltip.top-start=\"$t('CHAT_LIST.SENT')\"\n icon=\"checkmark\"\n class=\"action--icon read-tick\"\n size=\"14\"\n />\n </span>\n <fluent-icon\n v-if=\"isEmail\"\n v-tooltip.top-start=\"$t('CHAT_LIST.RECEIVED_VIA_EMAIL')\"\n icon=\"mail\"\n class=\"action--icon\"\n size=\"16\"\n />\n <fluent-icon\n v-if=\"isPrivate\"\n v-tooltip.top-start=\"$t('CONVERSATION.VISIBLE_TO_AGENTS')\"\n icon=\"lock-closed\"\n class=\"action--icon lock--icon--private\"\n size=\"16\"\n @mouseenter=\"isHovered = true\"\n @mouseleave=\"isHovered = false\"\n />\n <a\n v-if=\"isATweet && (isOutgoing || isIncoming) && linkToTweet\"\n :href=\"linkToTweet\"\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n >\n <fluent-icon\n v-tooltip.top-start=\"$t('CHAT_LIST.VIEW_TWEET_IN_TWITTER')\"\n icon=\"open\"\n class=\"cursor-pointer action--icon\"\n size=\"16\"\n />\n </a>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.right {\n .message-text--metadata {\n @apply items-center;\n .time {\n @apply text-woot-100 dark:text-woot-100;\n }\n\n .action--icon {\n @apply text-white dark:text-white;\n\n &.read-tick {\n @apply text-violet-100 dark:text-violet-100;\n }\n\n &.read-indicator {\n @apply text-green-200 dark:text-green-200;\n }\n }\n\n .lock--icon--private {\n @apply text-slate-400 dark:text-slate-400;\n }\n }\n}\n\n.left {\n .message-text--metadata {\n .time {\n @apply text-slate-400 dark:text-slate-200;\n }\n }\n}\n\n.message-text--metadata {\n @apply items-start flex;\n\n .time {\n @apply mr-2 block text-xxs leading-[1.8];\n }\n\n .action--icon {\n @apply mr-2 ml-2 text-slate-900 dark:text-slate-100;\n }\n\n a {\n @apply text-slate-900 dark:text-slate-100;\n }\n}\n\n.activity-wrap {\n .message-text--metadata {\n .time {\n @apply ml-2 rtl:mr-2 rtl:ml-0 flex text-center text-xxs text-slate-300 dark:text-slate-200;\n }\n }\n}\n\n.is-image,\n.is-video {\n .message-text--metadata {\n .time {\n @apply bottom-1 text-white dark:text-slate-50 absolute right-2 whitespace-nowrap;\n\n &.has-status-icon {\n @apply right-8 leading-loose;\n }\n }\n .read-tick {\n @apply absolute bottom-2 right-2;\n }\n }\n}\n\n.is-private {\n .message-text--metadata {\n @apply items-center;\n\n .time {\n @apply text-slate-400 dark:text-slate-400;\n }\n\n .icon {\n @apply text-slate-400 dark:text-slate-400;\n }\n }\n\n &.is-image,\n &.is-video {\n .time {\n position: inherit;\n @apply pl-2.5;\n }\n }\n}\n\n.delivered-icon {\n @apply ml-4;\n}\n\n.read-indicator-wrap {\n @apply leading-none flex items-center;\n}\n</style>\n","<script>\nimport { useAlert } from 'dashboard/composables';\nimport {\n DuplicateContactException,\n ExceptionWithMessage,\n} from 'shared/helpers/CustomErrors';\n\nexport default {\n props: {\n name: {\n type: String,\n default: '',\n },\n phoneNumber: {\n type: String,\n default: '',\n },\n },\n computed: {\n formattedPhoneNumber() {\n return this.phoneNumber.replace(/\\s|-|[A-Za-z]/g, '');\n },\n rawPhoneNumber() {\n return this.phoneNumber.replace(/\\D/g, '');\n },\n },\n methods: {\n async addContact() {\n try {\n let contact = await this.filterContactByNumber(this.rawPhoneNumber);\n if (!contact) {\n contact = await this.$store.dispatch(\n 'contacts/create',\n this.getContactObject()\n );\n useAlert(this.$t('CONTACT_FORM.SUCCESS_MESSAGE'));\n }\n this.openContactNewTab(contact.id);\n } catch (error) {\n if (error instanceof DuplicateContactException) {\n if (error.data.includes('phone_number')) {\n useAlert(this.$t('CONTACT_FORM.FORM.PHONE_NUMBER.DUPLICATE'));\n }\n } else if (error instanceof ExceptionWithMessage) {\n useAlert(error.data);\n } else {\n useAlert(this.$t('CONTACT_FORM.ERROR_MESSAGE'));\n }\n }\n },\n getContactObject() {\n const contactItem = {\n name: this.name,\n phone_number: `+${this.rawPhoneNumber}`,\n };\n return contactItem;\n },\n async filterContactByNumber(phoneNumber) {\n const query = {\n attribute_key: 'phone_number',\n filter_operator: 'equal_to',\n values: [phoneNumber],\n attribute_model: 'standard',\n custom_attribute_type: '',\n };\n\n const queryPayload = { payload: [query] };\n const contacts = await this.$store.dispatch('contacts/filter', {\n queryPayload,\n resetState: false,\n });\n return contacts.shift();\n },\n openContactNewTab(contactId) {\n const accountId = window.location.pathname.split('/')[3];\n const url = `/app/accounts/${accountId}/contacts/${contactId}`;\n window.open(url, '_blank');\n },\n },\n};\n</script>\n\n<template>\n <div class=\"contact--group\">\n <fluent-icon icon=\"call\" class=\"file--icon\" size=\"18\" />\n <div class=\"meta\">\n <p\n class=\"overflow-hidden whitespace-nowrap text-ellipsis margin-bottom-0\"\n >\n {{ phoneNumber }}\n </p>\n </div>\n <div v-if=\"formattedPhoneNumber\" class=\"link-wrap\">\n <woot-button variant=\"clear\" size=\"small\" @click.prevent=\"addContact\">\n {{ $t('CONVERSATION.SAVE_CONTACT') }}\n </woot-button>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.contact--group {\n align-items: center;\n display: flex;\n margin-top: var(--space-smaller);\n\n .meta {\n flex: 1;\n margin-left: var(--space-small);\n }\n\n .link-wrap {\n margin-left: var(--space-small);\n }\n}\n</style>\n","<script>\nexport default {\n props: {\n url: {\n type: String,\n required: true,\n },\n },\n computed: {\n fileName() {\n if (this.url) {\n const filename = this.url.substring(this.url.lastIndexOf('/') + 1);\n return filename || this.$t('CONVERSATION.UNKNOWN_FILE_TYPE');\n }\n return this.$t('CONVERSATION.UNKNOWN_FILE_TYPE');\n },\n },\n methods: {\n openLink() {\n const win = window.open(this.url, '_blank', 'noopener');\n if (win) win.focus();\n },\n },\n};\n</script>\n\n<template>\n <div class=\"file message-text__wrap\">\n <div class=\"icon-wrap\">\n <fluent-icon icon=\"document\" class=\"file--icon\" size=\"32\" />\n </div>\n <div class=\"meta\">\n <h5 class=\"attachment-name text-slate-700 dark:text-slate-400\">\n {{ decodeURI(fileName) }}\n </h5>\n <a\n class=\"download clear link button small\"\n rel=\"noreferrer noopener nofollow\"\n target=\"_blank\"\n :href=\"url\"\n >\n {{ $t('CONVERSATION.DOWNLOAD') }}\n </a>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@import 'dashboard/assets/scss/variables';\n\n.file {\n display: flex;\n flex-direction: row;\n padding: $space-smaller 0;\n cursor: pointer;\n\n .icon-wrap {\n font-size: $font-size-giga;\n color: $color-white;\n line-height: 1;\n margin-left: $space-smaller;\n margin-right: $space-slab;\n }\n\n .attachment-name {\n margin: 0;\n color: $color-white;\n font-weight: $font-weight-bold;\n word-break: break-word;\n }\n\n .button {\n padding: 0;\n margin: 0;\n color: $color-primary-light;\n }\n\n .meta {\n padding-right: $space-two;\n }\n\n .time {\n min-width: $space-larger;\n }\n}\n</style>\n","import { ref, computed } from 'vue';\nimport {\n debounce,\n calculateCenterOffset,\n applyRotationTransform,\n normalizeToPercentage,\n} from '@chatwoot/utils';\n\n// Composable for images in gallery view\nexport const useImageZoom = imageRef => {\n const MAX_ZOOM_LEVEL = 3;\n const MIN_ZOOM_LEVEL = 1;\n const ZOOM_INCREMENT = 0.2;\n const MOUSE_MOVE_DEBOUNCE_MS = 100;\n const MOUSE_LEAVE_DEBOUNCE_MS = 110;\n const DEFAULT_IMG_TRANSFORM_ORIGIN = 'center center';\n\n const zoomScale = ref(1);\n const imgTransformOriginPoint = ref(DEFAULT_IMG_TRANSFORM_ORIGIN);\n const activeImageRotation = ref(0);\n\n const imageWrapperStyle = computed(() => ({\n transform: `rotate(${activeImageRotation.value}deg)`,\n }));\n\n const imageStyle = computed(() => ({\n transform: `scale(${zoomScale.value})`,\n cursor: zoomScale.value < MAX_ZOOM_LEVEL ? 'zoom-in' : 'zoom-out',\n transformOrigin: `${imgTransformOriginPoint.value}`,\n }));\n\n // Resets the transform origin to center\n const resetTransformOrigin = () => {\n if (imageRef.value) {\n imgTransformOriginPoint.value = DEFAULT_IMG_TRANSFORM_ORIGIN;\n }\n };\n\n // Rotates the current image\n const onRotate = type => {\n if (!imageRef.value) return;\n resetTransformOrigin();\n\n const rotation = type === 'clockwise' ? 90 : -90;\n\n // ensure that the value of the rotation is within the range of -360 to 360 degrees\n activeImageRotation.value = (activeImageRotation.value + rotation) % 360;\n\n // Reset zoom when rotating\n zoomScale.value = 1;\n resetTransformOrigin();\n };\n\n /**\n * Calculates the appropriate transform origin point based on mouse position and image rotation\n * Used to create a natural zoom behavior where the image zooms toward/from the cursor position\n *\n * @param {number} x - The client X coordinate of the mouse pointer\n * @param {number} y - The client Y coordinate of the mouse pointer\n * @returns {{x: number, y: number}} Object containing the transform origin coordinates as percentages\n */\n const getZoomOrigin = (x, y) => {\n // Default to center\n if (!imageRef.value) return { x: 50, y: 50 };\n\n const rect = imageRef.value.getBoundingClientRect();\n\n // Step 1: Calculate offset from center\n const { relativeX, relativeY } = calculateCenterOffset(x, y, rect);\n\n // Step 2: Apply rotation transformation\n const { rotatedX, rotatedY } = applyRotationTransform(\n relativeX,\n relativeY,\n activeImageRotation.value\n );\n\n // Step 3: Convert to percentage coordinates\n return normalizeToPercentage(rotatedX, rotatedY, rect.width, rect.height);\n };\n\n // Handles zooming the image\n const onZoom = (scale, x, y) => {\n if (!imageRef.value) return;\n\n // Calculate new scale within bounds\n const newScale = Math.max(\n MIN_ZOOM_LEVEL,\n Math.min(MAX_ZOOM_LEVEL, zoomScale.value + scale)\n );\n\n // Skip if no change\n if (newScale === zoomScale.value) return;\n\n // Update transform origin based on mouse position and zoom scale is minimum\n if (x != null && y != null && zoomScale.value === MIN_ZOOM_LEVEL) {\n const { x: originX, y: originY } = getZoomOrigin(x, y);\n imgTransformOriginPoint.value = `${originX}% ${originY}%`;\n }\n\n // Apply the new scale\n zoomScale.value = newScale;\n };\n\n // Handles double-click zoom toggling\n const onDoubleClickZoomImage = e => {\n if (!imageRef.value) return;\n e.preventDefault();\n\n // Toggle between max zoom and min zoom\n const newScale =\n zoomScale.value >= MAX_ZOOM_LEVEL ? MIN_ZOOM_LEVEL : MAX_ZOOM_LEVEL;\n\n // Update transform origin based on mouse position\n const { x: originX, y: originY } = getZoomOrigin(e.clientX, e.clientY);\n imgTransformOriginPoint.value = `${originX}% ${originY}%`;\n\n // Apply the new scale\n zoomScale.value = newScale;\n };\n\n // Handles mouse wheel zooming for images\n const onWheelImageZoom = e => {\n if (!imageRef.value) return;\n e.preventDefault();\n\n const scale = e.deltaY > 0 ? -ZOOM_INCREMENT : ZOOM_INCREMENT;\n onZoom(scale, e.clientX, e.clientY);\n };\n\n /**\n * Sets transform origin to mouse position during hover.\n * Enables precise scroll/double-click zoom targeting by updating the\n * transform origin to cursor position. Only active at minimum zoom level.\n * Debounced (100ms) to improve performance during rapid mouse movement.\n */\n const onMouseMove = debounce(\n e => {\n if (!imageRef.value) return;\n if (zoomScale.value !== MIN_ZOOM_LEVEL) return;\n\n const { x: originX, y: originY } = getZoomOrigin(e.clientX, e.clientY);\n imgTransformOriginPoint.value = `${originX}% ${originY}%`;\n },\n MOUSE_MOVE_DEBOUNCE_MS,\n false\n );\n\n /**\n * Resets transform origin to center when mouse leaves image.\n * Ensures button-based zooming works predictably after hover ends.\n * Uses slightly longer debounce (110ms) to avoid conflicts with onMouseMove.\n */\n const onMouseLeave = debounce(\n () => {\n if (!imageRef.value) return;\n if (zoomScale.value !== MIN_ZOOM_LEVEL) return;\n imgTransformOriginPoint.value = DEFAULT_IMG_TRANSFORM_ORIGIN;\n },\n MOUSE_LEAVE_DEBOUNCE_MS,\n false\n );\n\n const resetZoomAndRotation = () => {\n activeImageRotation.value = 0;\n zoomScale.value = 1;\n resetTransformOrigin();\n };\n\n return {\n zoomScale,\n imgTransformOriginPoint,\n activeImageRotation,\n imageWrapperStyle,\n imageStyle,\n getZoomOrigin,\n resetTransformOrigin,\n onRotate,\n onZoom,\n onDoubleClickZoomImage,\n onWheelImageZoom,\n onMouseMove,\n onMouseLeave,\n resetZoomAndRotation,\n };\n};\n","<script setup>\nimport { ref, computed, onMounted, useTemplateRef } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useAlert } from 'dashboard/composables';\n\nimport { useStoreGetters } from 'dashboard/composables/store';\nimport { useKeyboardEvents } from 'dashboard/composables/useKeyboardEvents';\nimport { useImageZoom } from 'dashboard/composables/useImageZoom';\nimport { messageTimestamp } from 'shared/helpers/timeHelper';\nimport { downloadFile } from '@chatwoot/utils';\n\nimport NextButton from 'dashboard/components-next/button/Button.vue';\nimport Thumbnail from 'dashboard/components/widgets/Thumbnail.vue';\n\nconst props = defineProps({\n attachment: {\n type: Object,\n required: true,\n },\n allAttachments: {\n type: Array,\n required: true,\n },\n});\n\nconst emit = defineEmits(['close']);\nconst show = defineModel('show', { type: Boolean, default: false });\n\nconst { t } = useI18n();\nconst getters = useStoreGetters();\n\nconst ALLOWED_FILE_TYPES = {\n IMAGE: 'image',\n VIDEO: 'video',\n IG_REEL: 'ig_reel',\n AUDIO: 'audio',\n};\n\nconst isDownloading = ref(false);\nconst activeAttachment = ref({});\nconst activeFileType = ref('');\nconst activeImageIndex = ref(\n props.allAttachments.findIndex(\n attachment => attachment.message_id === props.attachment.message_id\n ) || 0\n);\n\nconst imageRef = useTemplateRef('imageRef');\n\nconst {\n imageWrapperStyle,\n imageStyle,\n onRotate,\n activeImageRotation,\n onZoom,\n onDoubleClickZoomImage,\n onWheelImageZoom,\n onMouseMove,\n onMouseLeave,\n resetZoomAndRotation,\n} = useImageZoom(imageRef);\n\nconst currentUser = computed(() => getters.getCurrentUser.value);\nconst hasMoreThanOneAttachment = computed(\n () => props.allAttachments.length > 1\n);\n\nconst readableTime = computed(() => {\n const { created_at: createdAt } = activeAttachment.value;\n if (!createdAt) return '';\n return messageTimestamp(createdAt, 'LLL d yyyy, h:mm a') || '';\n});\n\nconst isImage = computed(\n () => activeFileType.value === ALLOWED_FILE_TYPES.IMAGE\n);\nconst isVideo = computed(() =>\n [ALLOWED_FILE_TYPES.VIDEO, ALLOWED_FILE_TYPES.IG_REEL].includes(\n activeFileType.value\n )\n);\nconst isAudio = computed(\n () => activeFileType.value === ALLOWED_FILE_TYPES.AUDIO\n);\n\nconst senderDetails = computed(() => {\n const {\n name,\n available_name: availableName,\n avatar_url,\n thumbnail,\n id,\n } = activeAttachment.value?.sender || props.attachment?.sender || {};\n\n return {\n name: currentUser.value?.id === id ? 'You' : name || availableName || '',\n avatar: thumbnail || avatar_url || '',\n };\n});\n\nconst fileNameFromDataUrl = computed(() => {\n const { data_url: dataUrl } = activeAttachment.value;\n if (!dataUrl) return '';\n\n const fileName = dataUrl.split('/').pop();\n return fileName ? decodeURIComponent(fileName) : '';\n});\n\nconst onClose = () => emit('close');\n\nconst setImageAndVideoSrc = attachment => {\n const { file_type: type } = attachment;\n if (!Object.values(ALLOWED_FILE_TYPES).includes(type)) return;\n\n activeAttachment.value = attachment;\n activeFileType.value = type;\n};\n\nconst onClickChangeAttachment = (attachment, index) => {\n if (!attachment) return;\n\n activeImageIndex.value = index;\n setImageAndVideoSrc(attachment);\n resetZoomAndRotation();\n};\n\nconst onClickDownload = async () => {\n const { file_type: type, data_url: url, extension } = activeAttachment.value;\n if (!Object.values(ALLOWED_FILE_TYPES).includes(type)) return;\n\n try {\n isDownloading.value = true;\n await downloadFile({ url, type, extension });\n } catch (error) {\n useAlert(t('GALLERY_VIEW.ERROR_DOWNLOADING'));\n } finally {\n isDownloading.value = false;\n }\n};\n\nconst keyboardEvents = {\n Escape: { action: onClose },\n ArrowLeft: {\n action: () => {\n onClickChangeAttachment(\n props.allAttachments[activeImageIndex.value - 1],\n activeImageIndex.value - 1\n );\n },\n },\n ArrowRight: {\n action: () => {\n onClickChangeAttachment(\n props.allAttachments[activeImageIndex.value + 1],\n activeImageIndex.value + 1\n );\n },\n },\n};\n\nuseKeyboardEvents(keyboardEvents);\n\nonMounted(() => {\n setImageAndVideoSrc(props.attachment);\n});\n</script>\n\n<template>\n <Teleport to=\"body\">\n <woot-modal\n v-model:show=\"show\"\n full-width\n :show-close-button=\"false\"\n :on-close=\"onClose\"\n >\n <div\n class=\"bg-n-background flex flex-col h-[inherit] w-[inherit] overflow-hidden select-none\"\n @click=\"onClose\"\n >\n <header\n class=\"z-10 flex items-center justify-between w-full h-16 px-6 py-2 bg-n-background border-b border-n-weak\"\n @click.stop\n >\n <div\n v-if=\"senderDetails\"\n class=\"flex items-center min-w-[15rem] shrink-0\"\n >\n <Thumbnail\n v-if=\"senderDetails.avatar\"\n :username=\"senderDetails.name\"\n :src=\"senderDetails.avatar\"\n class=\"flex-shrink-0\"\n />\n <div class=\"flex flex-col ml-2 rtl:ml-0 rtl:mr-2 overflow-hidden\">\n <h3 class=\"text-base leading-5 m-0 font-medium\">\n <span\n class=\"overflow-hidden text-n-slate-12 whitespace-nowrap text-ellipsis\"\n >\n {{ senderDetails.name }}\n </span>\n </h3>\n <span\n class=\"text-xs text-n-slate-11 whitespace-nowrap text-ellipsis\"\n >\n {{ readableTime }}\n </span>\n </div>\n </div>\n\n <div\n class=\"flex-1 mx-2 px-2 truncate text-sm font-medium text-center text-n-slate-12\"\n >\n <span v-dompurify-html=\"fileNameFromDataUrl\" class=\"truncate\" />\n </div>\n\n <div class=\"flex items-center gap-2 ml-2 shrink-0\">\n <NextButton\n v-if=\"isImage\"\n icon=\"i-lucide-zoom-in\"\n slate\n ghost\n @click=\"onZoom(0.1)\"\n />\n <NextButton\n v-if=\"isImage\"\n icon=\"i-lucide-zoom-out\"\n slate\n ghost\n @click=\"onZoom(-0.1)\"\n />\n <NextButton\n v-if=\"isImage\"\n icon=\"i-lucide-rotate-ccw\"\n slate\n ghost\n @click=\"onRotate('counter-clockwise')\"\n />\n <NextButton\n v-if=\"isImage\"\n icon=\"i-lucide-rotate-cw\"\n slate\n ghost\n @click=\"onRotate('clockwise')\"\n />\n <NextButton\n icon=\"i-lucide-download\"\n slate\n ghost\n :is-loading=\"isDownloading\"\n :disabled=\"isDownloading\"\n @click=\"onClickDownload\"\n />\n <NextButton icon=\"i-lucide-x\" slate ghost @click=\"onClose\" />\n </div>\n </header>\n\n <main class=\"flex items-stretch flex-1 h-full overflow-hidden\">\n <div class=\"flex items-center justify-center w-16 shrink-0\">\n <NextButton\n v-if=\"hasMoreThanOneAttachment\"\n icon=\"i-lucide-chevron-left\"\n class=\"z-10\"\n blue\n faded\n lg\n :disabled=\"activeImageIndex === 0\"\n @click.stop=\"\n onClickChangeAttachment(\n allAttachments[activeImageIndex - 1],\n activeImageIndex - 1\n )\n \"\n />\n </div>\n\n <div class=\"flex-1 flex items-center justify-center overflow-hidden\">\n <div\n v-if=\"isImage\"\n :style=\"imageWrapperStyle\"\n class=\"flex items-center justify-center origin-center\"\n :class=\"{\n // Adjust dimensions when rotated 90/270 degrees to maintain visibility\n // and prevent image from overflowing container in different aspect ratios\n 'w-[calc(100dvh-8rem)] h-[calc(100dvw-7rem)]':\n activeImageRotation % 180 !== 0,\n 'size-full': activeImageRotation % 180 === 0,\n }\"\n >\n <img\n ref=\"imageRef\"\n :key=\"activeAttachment.message_id\"\n :src=\"activeAttachment.data_url\"\n :style=\"imageStyle\"\n class=\"max-h-full max-w-full object-contain duration-100 ease-in-out transform select-none\"\n @click.stop\n @dblclick.stop=\"onDoubleClickZoomImage\"\n @wheel.prevent.stop=\"onWheelImageZoom\"\n @mousemove=\"onMouseMove\"\n @mouseleave=\"onMouseLeave\"\n />\n </div>\n\n <video\n v-if=\"isVideo\"\n :key=\"activeAttachment.message_id\"\n :src=\"activeAttachment.data_url\"\n controls\n playsInline\n class=\"max-h-full max-w-full object-contain\"\n @click.stop\n />\n\n <audio\n v-if=\"isAudio\"\n :key=\"activeAttachment.message_id\"\n controls\n class=\"w-full max-w-md\"\n @click.stop\n >\n <source :src=\"`${activeAttachment.data_url}?t=${Date.now()}`\" />\n </audio>\n </div>\n\n <div class=\"flex items-center justify-center w-16 shrink-0\">\n <NextButton\n v-if=\"hasMoreThanOneAttachment\"\n icon=\"i-lucide-chevron-right\"\n class=\"z-10\"\n blue\n faded\n lg\n :disabled=\"activeImageIndex === allAttachments.length - 1\"\n @click.stop=\"\n onClickChangeAttachment(\n allAttachments[activeImageIndex + 1],\n activeImageIndex + 1\n )\n \"\n />\n </div>\n </main>\n\n <footer\n class=\"z-10 flex items-center justify-center h-12 border-t border-n-weak\"\n >\n <div\n class=\"rounded-md flex items-center justify-center px-3 py-1 bg-n-slate-3 text-n-slate-12 text-sm font-medium\"\n >\n {{ `${activeImageIndex + 1} / ${allAttachments.length}` }}\n </div>\n </footer>\n </div>\n </woot-modal>\n </Teleport>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { hasPressedCommand } from 'shared/helpers/KeyboardHelpers';\nimport GalleryView from '../components/GalleryView.vue';\nimport { timeStampAppendedURL } from 'dashboard/helper/URLHelper';\n\nconst ALLOWED_FILE_TYPES = {\n IMAGE: 'image',\n VIDEO: 'video',\n AUDIO: 'audio',\n IG_REEL: 'ig_reel',\n};\n\nexport default {\n components: {\n GalleryView,\n },\n props: {\n attachment: {\n type: Object,\n required: true,\n },\n },\n emits: ['error'],\n data() {\n return {\n show: false,\n isImageError: false,\n };\n },\n computed: {\n ...mapGetters({\n currentChatAttachments: 'getSelectedChatAttachments',\n }),\n isImage() {\n return this.attachment.file_type === ALLOWED_FILE_TYPES.IMAGE;\n },\n isVideo() {\n return (\n this.attachment.file_type === ALLOWED_FILE_TYPES.VIDEO ||\n this.attachment.file_type === ALLOWED_FILE_TYPES.IG_REEL\n );\n },\n isAudio() {\n return this.attachment.file_type === ALLOWED_FILE_TYPES.AUDIO;\n },\n timeStampURL() {\n return timeStampAppendedURL(this.dataUrl);\n },\n attachmentTypeClasses() {\n return {\n image: this.isImage,\n video: this.isVideo,\n };\n },\n filteredCurrentChatAttachments() {\n const attachments = this.currentChatAttachments.filter(attachment =>\n ['image', 'video', 'audio'].includes(attachment.file_type)\n );\n return attachments;\n },\n dataUrl() {\n return this.attachment.data_url;\n },\n imageWidth() {\n return this.attachment.width ? `${this.attachment.width}px` : 'auto';\n },\n imageHeight() {\n return this.attachment.height ? `${this.attachment.height}px` : 'auto';\n },\n },\n watch: {\n attachment() {\n this.isImageError = false;\n },\n },\n methods: {\n onClose() {\n this.show = false;\n },\n onClick(e) {\n if (hasPressedCommand(e)) {\n window.open(this.attachment.data_url, '_blank');\n return;\n }\n this.show = true;\n },\n onImgError() {\n this.isImageError = true;\n this.$emit('error');\n },\n },\n};\n</script>\n\n<template>\n <div class=\"message-text__wrap\" :class=\"attachmentTypeClasses\">\n <img\n v-if=\"isImage && !isImageError\"\n class=\"bg-woot-200 dark:bg-woot-900\"\n :src=\"dataUrl\"\n :width=\"imageWidth\"\n :height=\"imageHeight\"\n @click=\"onClick\"\n @error=\"onImgError\"\n />\n <video\n v-if=\"isVideo\"\n :src=\"dataUrl\"\n muted\n playsInline\n @error=\"onImgError\"\n @click=\"onClick\"\n />\n <audio v-else-if=\"isAudio\" controls class=\"skip-context-menu mb-0.5\">\n <source :src=\"timeStampURL\" />\n </audio>\n <GalleryView\n v-if=\"show\"\n v-model:show=\"show\"\n :attachment=\"attachment\"\n :all-attachments=\"filteredCurrentChatAttachments\"\n @error=\"onImgError\"\n @close=\"onClose\"\n />\n </div>\n</template>\n","<script>\nimport DyteAPI from 'dashboard/api/integrations/dyte';\nimport { buildDyteURL } from 'shared/helpers/IntegrationHelper';\nimport { useAlert } from 'dashboard/composables';\n\nexport default {\n props: {\n messageId: {\n type: Number,\n required: true,\n },\n },\n data() {\n return { isLoading: false, dyteAuthToken: '', isSDKMounted: false };\n },\n computed: {\n meetingLink() {\n return buildDyteURL(this.dyteAuthToken);\n },\n },\n methods: {\n async joinTheCall() {\n this.isLoading = true;\n try {\n const { data: { token } = {} } = await DyteAPI.addParticipantToMeeting(\n this.messageId\n );\n this.dyteAuthToken = token;\n } catch (err) {\n useAlert(this.$t('INTEGRATION_SETTINGS.DYTE.JOIN_ERROR'));\n } finally {\n this.isLoading = false;\n }\n },\n leaveTheRoom() {\n this.dyteAuthToken = '';\n },\n },\n};\n</script>\n\n<template>\n <div>\n <woot-button\n size=\"small\"\n variant=\"smooth\"\n color-scheme=\"secondary\"\n icon=\"video-add\"\n class=\"join-call-button\"\n :is-loading=\"isLoading\"\n @click=\"joinTheCall\"\n >\n {{ $t('INTEGRATION_SETTINGS.DYTE.CLICK_HERE_TO_JOIN') }}\n </woot-button>\n <div v-if=\"dyteAuthToken\" class=\"video-call--container\">\n <iframe\n :src=\"meetingLink\"\n allow=\"camera;microphone;fullscreen;display-capture;picture-in-picture;clipboard-write;\"\n />\n <woot-button\n size=\"small\"\n variant=\"smooth\"\n color-scheme=\"secondary\"\n class=\"join-call-button\"\n @click=\"leaveTheRoom\"\n >\n {{ $t('INTEGRATION_SETTINGS.DYTE.LEAVE_THE_ROOM') }}\n </woot-button>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n.join-call-button {\n margin: var(--space-small) 0;\n}\n\n.video-call--container {\n position: fixed;\n bottom: 0;\n right: 0;\n width: 100%;\n height: 100%;\n z-index: var(--z-index-high);\n padding: var(--space-smaller);\n background: var(--b-800);\n\n iframe {\n width: 100%;\n height: 100%;\n border: 0;\n }\n\n button {\n position: absolute;\n top: var(--space-smaller);\n right: 10rem;\n }\n}\n</style>\n","<script>\nimport DyteVideoCall from './integrations/Dyte.vue';\nimport inboxMixin from 'shared/mixins/inboxMixin';\n\nexport default {\n components: { DyteVideoCall },\n mixins: [inboxMixin],\n props: {\n messageId: {\n type: [String, Number],\n default: 0,\n },\n contentAttributes: {\n type: Object,\n default: () => ({}),\n },\n inboxId: {\n type: [String, Number],\n default: 0,\n },\n },\n computed: {\n showDyteIntegration() {\n const isEnabledOnTheInbox = this.isAPIInbox || this.isAWebWidgetInbox;\n return isEnabledOnTheInbox && this.contentAttributes.type === 'dyte';\n },\n inbox() {\n return this.$store.getters['inboxes/getInbox'](this.inboxId);\n },\n },\n};\n</script>\n\n<!-- eslint-disable-next-line vue/no-root-v-if -->\n<template>\n <DyteVideoCall\n v-if=\"showDyteIntegration\"\n :message-id=\"messageId\"\n :meeting-data=\"contentAttributes.data\"\n />\n</template>\n","<script setup>\nimport { computed } from 'vue';\n\nconst props = defineProps({\n latitude: {\n type: Number,\n default: undefined,\n },\n longitude: {\n type: Number,\n default: undefined,\n },\n name: {\n type: String,\n default: '',\n },\n});\n\nconst mapUrl = computed(\n () => `https://maps.google.com/?q=${props.latitude},${props.longitude}`\n);\n</script>\n\n<template>\n <div\n class=\"flex flex-row items-center justify-start gap-1 w-full py-1 px-0 cursor-pointer overflow-hidden\"\n >\n <fluent-icon\n icon=\"location\"\n class=\"text-slate-600 dark:text-slate-200 leading-none my-0 flex items-center flex-shrink-0\"\n size=\"32\"\n />\n <div class=\"flex flex-col items-start flex-1 min-w-0\">\n <h5\n class=\"text-sm text-slate-800 dark:text-slate-100 truncate m-0 w-full\"\n :title=\"name\"\n >\n {{ name }}\n </h5>\n <div class=\"flex items-center\">\n <a\n class=\"text-woot-600 dark:text-woot-600 text-xs underline\"\n rel=\"noreferrer noopener nofollow\"\n target=\"_blank\"\n :href=\"mapUrl\"\n >\n {{ $t('COMPONENTS.LOCATION_BUBBLE.SEE_ON_MAP') }}\n </a>\n </div>\n </div>\n </div>\n</template>\n","<script>\nexport default {\n props: {\n emailAttributes: {\n type: Object,\n default: () => ({}),\n },\n isIncoming: {\n type: Boolean,\n default: true,\n },\n cc: {\n type: Array,\n default: () => [],\n },\n bcc: {\n type: Array,\n default: () => [],\n },\n },\n computed: {\n fromMail() {\n const from = this.emailAttributes.from || [];\n return from.join(', ');\n },\n toMails() {\n const to = this.emailAttributes.to || [];\n return to.join(', ');\n },\n ccMails() {\n const cc = this.emailAttributes.cc || this.cc || [];\n return cc.join(', ');\n },\n bccMails() {\n const bcc = this.emailAttributes.bcc || this.bcc || [];\n return bcc.join(', ');\n },\n subject() {\n return this.emailAttributes.subject || '';\n },\n showHead() {\n return this.toMails || this.ccMails || this.bccMails || this.fromMail;\n },\n },\n};\n</script>\n\n<!-- eslint-disable-next-line vue/no-root-v-if -->\n<template>\n <div\n v-if=\"showHead\"\n class=\"message__mail-head\"\n :class=\"{ 'is-incoming': isIncoming }\"\n >\n <div v-if=\"fromMail\" class=\"meta-wrap\">\n <span class=\"message__content--type\">{{ $t('EMAIL_HEADER.FROM') }}:</span>\n <span>{{ fromMail }}</span>\n </div>\n <div v-if=\"toMails\" class=\"meta-wrap\">\n <span class=\"message__content--type\">{{ $t('EMAIL_HEADER.TO') }}:</span>\n <span>{{ toMails }}</span>\n </div>\n <div v-if=\"ccMails\" class=\"meta-wrap\">\n <span class=\"message__content--type\">{{ $t('EMAIL_HEADER.CC') }}:</span>\n <span>{{ ccMails }}</span>\n </div>\n <div v-if=\"bccMails\" class=\"meta-wrap\">\n <span class=\"message__content--type\">{{ $t('EMAIL_HEADER.BCC') }}:</span>\n <span>{{ bccMails }}</span>\n </div>\n <div v-if=\"subject\" class=\"meta-wrap\">\n <span class=\"message__content--type\">\n {{ $t('EMAIL_HEADER.SUBJECT') }}:\n </span>\n <span>{{ subject }}</span>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.message__mail-head {\n padding-bottom: var(--space-small);\n margin-bottom: var(--space-small);\n border-bottom: 1px solid var(--w-300);\n\n &.is-incoming {\n border-bottom: 1px solid var(--color-border-light);\n }\n}\n\n.meta-wrap {\n .message__content--type {\n font-weight: var(--font-weight-bold);\n font-size: var(--font-size-mini);\n }\n span {\n font-size: var(--font-size-mini);\n }\n}\n</style>\n","<script>\nimport MessagePreview from 'dashboard/components/widgets/conversation/MessagePreview.vue';\nimport { MESSAGE_TYPE } from 'shared/constants/messages';\nimport { BUS_EVENTS } from 'shared/constants/busEvents';\nimport { emitter } from 'shared/helpers/mitt';\n\nexport default {\n name: 'ReplyTo',\n components: {\n MessagePreview,\n },\n props: {\n message: {\n type: Object,\n required: true,\n },\n messageType: {\n type: Number,\n required: true,\n },\n parentHasAttachments: {\n type: Boolean,\n required: true,\n },\n },\n data() {\n return { MESSAGE_TYPE };\n },\n methods: {\n scrollToMessage() {\n emitter.emit(BUS_EVENTS.SCROLL_TO_MESSAGE, {\n messageId: this.message.id,\n });\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"px-2 py-1.5 rounded-sm min-w-[10rem] mb-2\"\n :class=\"{\n 'bg-slate-50 dark:bg-slate-600 dark:text-slate-50':\n messageType === MESSAGE_TYPE.INCOMING,\n 'bg-woot-600 text-woot-50': messageType === MESSAGE_TYPE.OUTGOING,\n '-mx-2': !parentHasAttachments,\n }\"\n @click=\"scrollToMessage\"\n >\n <MessagePreview\n class=\"cursor-pointer\"\n :message=\"message\"\n :show-message-type=\"false\"\n :default-empty-message=\"$t('CONVERSATION.REPLY_MESSAGE_NOT_FOUND')\"\n />\n </div>\n</template>\n","import { defineComponent as F, reactive as B, unref as b, openBlock as H, createElementBlock as I, normalizeClass as j, createElementVNode as U, createCommentVNode as V } from \"vue\";\nconst S = {\n a: [\"class\", \"href\", \"id\", \"style\", \"target\"],\n address: [\"class\", \"id\", \"style\"],\n b: [\"class\", \"id\", \"style\"],\n blockquote: [\"class\", \"id\", \"style\"],\n br: [\"class\", \"id\", \"style\"],\n caption: [\"class\", \"id\", \"style\"],\n cite: [\"class\", \"id\", \"style\"],\n code: [\"class\", \"id\", \"style\"],\n col: [\n \"align\",\n \"bgcolor\",\n \"char\",\n \"charoff\",\n \"class\",\n \"id\",\n \"style\",\n \"valign\",\n \"width\"\n ],\n colgroup: [\n \"align\",\n \"bgcolor\",\n \"char\",\n \"charoff\",\n \"class\",\n \"id\",\n \"style\",\n \"valign\",\n \"width\"\n ],\n center: [\"class\", \"id\", \"style\"],\n dd: [\"class\", \"id\", \"style\"],\n div: [\"align\", \"class\", \"dir\", \"id\", \"style\"],\n dt: [\"class\", \"id\", \"style\"],\n em: [\"class\", \"id\", \"style\"],\n font: [\"class\", \"color\", \"face\", \"id\", \"size\", \"style\"],\n h1: [\"align\", \"class\", \"dir\", \"id\", \"style\"],\n h2: [\"align\", \"class\", \"dir\", \"id\", \"style\"],\n h3: [\"align\", \"class\", \"dir\", \"id\", \"style\"],\n h4: [\"align\", \"class\", \"dir\", \"id\", \"style\"],\n h5: [\"align\", \"class\", \"dir\", \"id\", \"style\"],\n h6: [\"align\", \"class\", \"dir\", \"id\", \"style\"],\n hr: [\"align\", \"size\", \"width\"],\n i: [\"class\", \"id\", \"style\"],\n img: [\n \"align\",\n \"alt\",\n \"border\",\n \"class\",\n \"height\",\n \"hspace\",\n \"id\",\n \"src\",\n \"style\",\n \"title\",\n \"usemap\",\n \"vspace\",\n \"width\"\n ],\n label: [\"class\", \"id\", \"style\"],\n legend: [\"class\", \"id\", \"style\"],\n li: [\"class\", \"dir\", \"id\", \"style\", \"type\"],\n ol: [\"class\", \"dir\", \"id\", \"style\", \"type\", \"start\", \"reversed\"],\n p: [\"align\", \"class\", \"dir\", \"id\", \"style\"],\n pre: [\"class\", \"id\", \"style\"],\n span: [\"class\", \"id\", \"style\"],\n strong: [\"class\", \"id\", \"style\"],\n style: [],\n sub: [\"class\", \"id\", \"style\"],\n sup: [\"class\", \"id\", \"style\"],\n table: [\n \"align\",\n \"bgcolor\",\n \"border\",\n \"cellpadding\",\n \"cellspacing\",\n \"class\",\n \"dir\",\n \"frame\",\n \"id\",\n \"rules\",\n \"style\",\n \"width\"\n ],\n tbody: [\"class\", \"id\", \"style\"],\n td: [\n \"abbr\",\n \"align\",\n \"bgcolor\",\n \"class\",\n \"colspan\",\n \"dir\",\n \"height\",\n \"id\",\n \"lang\",\n \"rowspan\",\n \"scope\",\n \"style\",\n \"valign\",\n \"width\"\n ],\n tfoot: [\n \"align\",\n \"bgcolor\",\n \"char\",\n \"charoff\",\n \"class\",\n \"id\",\n \"style\",\n \"valign\"\n ],\n th: [\n \"abbr\",\n \"align\",\n \"bgcolor\",\n \"class\",\n \"colspan\",\n \"dir\",\n \"height\",\n \"id\",\n \"lang\",\n \"rowspan\",\n \"scope\",\n \"style\",\n \"valign\",\n \"width\"\n ],\n thead: [\n \"align\",\n \"bgcolol\",\n \"char\",\n \"charoff\",\n \"class\",\n \"id\",\n \"style\",\n \"valign\"\n ],\n tr: [\n \"align\",\n \"bgcolor\",\n \"char\",\n \"charoff\",\n \"class\",\n \"dir\",\n \"id\",\n \"style\",\n \"valign\"\n ],\n u: [\"class\", \"id\", \"style\"],\n ul: [\"class\", \"dir\", \"id\", \"style\"]\n}, D = [\n \"script\",\n \"iframe\",\n \"textarea\",\n \"title\",\n \"noscript\",\n \"noembed\",\n \"svg\"\n], W = [\n \"azimuth\",\n \"background\",\n \"background-blend-mode\",\n \"background-clip\",\n \"background-color\",\n \"background-image\",\n \"background-origin\",\n \"background-position\",\n \"background-position-x\",\n \"background-position-y\",\n \"background-repeat\",\n \"background-repeat-x\",\n \"background-repeat-y\",\n \"background-size\",\n \"border\",\n \"border-bottom\",\n \"border-bottom-color\",\n \"border-bottom-left-radius\",\n \"border-bottom-right-radius\",\n \"border-bottom-style\",\n \"border-bottom-width\",\n \"border-collapse\",\n \"border-color\",\n \"border-left\",\n \"border-left-color\",\n \"border-left-style\",\n \"border-left-width\",\n \"border-radius\",\n \"border-right\",\n \"border-right-color\",\n \"border-right-style\",\n \"border-right-width\",\n \"border-spacing\",\n \"border-style\",\n \"border-top\",\n \"border-top-color\",\n \"border-top-left-radius\",\n \"border-top-right-radius\",\n \"border-top-style\",\n \"border-top-width\",\n \"border-width\",\n \"box-sizing\",\n \"break-after\",\n \"break-before\",\n \"break-inside\",\n \"caption-side\",\n \"clear\",\n \"color\",\n \"column-count\",\n \"column-fill\",\n \"column-gap\",\n \"column-rule\",\n \"column-rule-color\",\n \"column-rule-style\",\n \"column-rule-width\",\n \"column-span\",\n \"column-width\",\n \"columns\",\n \"direction\",\n \"display\",\n \"elevation\",\n \"empty-cells\",\n \"float\",\n \"font\",\n \"font-family\",\n \"font-feature-settings\",\n \"font-kerning\",\n \"font-size\",\n \"font-size-adjust\",\n \"font-stretch\",\n \"font-style\",\n \"font-synthesis\",\n \"font-variant\",\n \"font-variant-alternates\",\n \"font-variant-caps\",\n \"font-variant-east-asian\",\n \"font-variant-ligatures\",\n \"font-variant-numeric\",\n \"font-weight\",\n \"height\",\n \"image-orientation\",\n \"image-resolution\",\n \"ime-mode\",\n \"isolation\",\n \"layout-flow\",\n \"layout-grid\",\n \"layout-grid-char\",\n \"layout-grid-char-spacing\",\n \"layout-grid-line\",\n \"layout-grid-mode\",\n \"layout-grid-type\",\n \"letter-spacing\",\n \"line-break\",\n \"line-height\",\n \"list-style\",\n \"list-style-position\",\n \"list-style-type\",\n \"margin\",\n \"margin-bottom\",\n \"margin-left\",\n \"margin-right\",\n \"margin-top\",\n \"marker-offset\",\n \"max-height\",\n \"max-width\",\n \"min-height\",\n \"min-width\",\n \"mix-blend-mode\",\n \"object-fit\",\n \"object-position\",\n \"opacity\",\n \"outline\",\n \"outline-color\",\n \"outline-style\",\n \"outline-width\",\n \"overflow\",\n \"overflow-x\",\n \"overflow-y\",\n \"padding\",\n \"padding-bottom\",\n \"padding-left\",\n \"padding-right\",\n \"padding-top\",\n \"page-break-after\",\n \"page-break-before\",\n \"page-break-inside\",\n \"pause\",\n \"pause-after\",\n \"pause-before\",\n \"pitch\",\n \"pitch-range\",\n \"quotes\",\n \"richness\",\n \"speak\",\n \"speak-header\",\n \"speak-numeral\",\n \"speak-punctuation\",\n \"speech-rate\",\n \"stress\",\n \"table-layout\",\n \"text-align\",\n \"text-align-last\",\n \"text-autospace\",\n \"text-combine-upright\",\n \"text-decoration\",\n \"text-decoration-color\",\n \"text-decoration-line\",\n \"text-decoration-skip\",\n \"text-decoration-style\",\n \"text-emphasis\",\n \"text-emphasis-color\",\n \"text-emphasis-style\",\n \"text-indent\",\n \"text-justify\",\n \"text-kashida-space\",\n \"text-orientation\",\n \"text-overflow\",\n \"text-transform\",\n \"text-underline-position\",\n \"text-wrap\",\n \"text-wrap-mode\",\n \"text-wrap-style\",\n \"unicode-bidi\",\n \"vertical-align\",\n \"voice-family\",\n \"white-space\",\n \"white-space-collapse\",\n \"width\",\n \"word-break\",\n \"word-spacing\",\n \"word-wrap\",\n \"writing-mode\",\n \"zoom\"\n];\nfunction Y(t, o) {\n return o ? t.split(\",\").map((i) => i.trim()).map((i) => {\n const s = i.replace(/\\./g, \".\" + o + \"_\").replace(/#/g, \"#\" + o + \"_\");\n return s.toLowerCase().startsWith(\"body\") ? \"#\" + o + \" \" + s.substring(4) : \"#\" + o + \" \" + s;\n }).join(\",\") : t;\n}\nfunction G(t, o, i) {\n return t.trim().replace(/expression\\((.*?)\\)/g, \"\").replace(/url\\([\"']?(.*?)[\"']?\\)/g, (s, l) => i ? `url(\"${encodeURI(i(decodeURI(l)))}\")` : o.includes(l.toLowerCase().split(\":\")[0]) ? s : \"\");\n}\nfunction q(t, o, i, s, l) {\n if (!t)\n return;\n const n = [];\n for (let a = 0; a < t.length; a++) {\n const p = t[a];\n n.push(p);\n }\n for (const a of n)\n if (i.includes(a)) {\n const p = t.getPropertyValue(a);\n t.setProperty(a, G(p, o, l), s ? t.getPropertyPriority(a) : void 0);\n } else\n t.removeProperty(a);\n}\nfunction P(t, o, i, s, l, n) {\n t.selectorText = Y(t.selectorText, o), q(t.style, i, s, l, n);\n}\nconst O = [\"http\", \"https\", \"mailto\"];\nfunction J(t, { dropAllHtmlTags: o = !1, rewriteExternalLinks: i, rewriteExternalResources: s, id: l = \"msg_\" + String.fromCharCode(...new Array(24).fill(void 0).map(() => Math.random() * 25 % 25 + 65)), allowedSchemas: n = O, allowedCssProperties: a = W, preserveCssPriority: p = !0, noWrapper: h = !1 }) {\n var A, _, z, R, M;\n h && (l = \"\");\n const c = new DOMParser().parseFromString(t, \"text/html\");\n n = Array.isArray(n) ? n.map((e) => e.toLowerCase()) : O;\n const v = c.createNodeIterator(c.documentElement, NodeFilter.SHOW_COMMENT);\n let d;\n for (; d = v.nextNode(); )\n (A = d.parentNode) == null || A.removeChild(d);\n const k = [...D];\n o && k.push(\"style\"), c.querySelectorAll(k.join(\", \")).forEach((e) => e.remove()), c.querySelectorAll(\"head > style\").forEach((e) => {\n c.body.appendChild(e);\n });\n const L = [], N = c.createNodeIterator(c.body, NodeFilter.SHOW_ELEMENT, {\n acceptNode: () => NodeFilter.FILTER_ACCEPT\n });\n for (; d = N.nextNode(); ) {\n const e = d, g = e.tagName.toLowerCase();\n if (!(g === \"body\" || g === \"html\")) {\n if (o) {\n if (d.textContent) {\n const f = c.createTextNode(d.textContent);\n (_ = d.parentNode) == null || _.replaceChild(f, d);\n } else\n (z = d.parentNode) == null || z.removeChild(d);\n continue;\n }\n if (g in S) {\n const f = S[g];\n for (const r of e.getAttributeNames())\n if (!f.includes(r))\n e.removeAttribute(r);\n else if (r === \"class\" && !h)\n e.setAttribute(r, ((R = e.getAttribute(r)) == null ? void 0 : R.split(\" \").map((u) => l + \"_\" + u).join(\" \")) ?? \"\");\n else if (r === \"id\" && !h)\n e.setAttribute(r, l + \"_\" + (e.getAttribute(r) ?? \"\"));\n else if (r === \"href\" || r === \"src\") {\n const u = e.getAttribute(r) ?? \"\";\n r === \"href\" && i ? e.setAttribute(r, i(u)) : r === \"src\" && s ? e.setAttribute(r, s(u)) : n.includes(u.toLowerCase().split(\":\")[0]) || e.removeAttribute(r);\n }\n q(e.style, n, a, p, s), g === \"a\" && (e.setAttribute(\"rel\", \"noopener noreferrer\"), e.setAttribute(\"target\", \"_blank\"));\n } else\n e.insertAdjacentHTML(\"afterend\", e.innerHTML), L.push(e);\n }\n }\n for (const e of L)\n try {\n try {\n (M = e.parentNode) == null || M.removeChild(e);\n } catch {\n e.outerHTML = \"\";\n }\n } catch {\n try {\n e.remove();\n } catch {\n }\n }\n if (c.querySelectorAll(\"body style\").forEach((e) => {\n const g = e, f = g.sheet, r = [];\n if (!f.cssRules) {\n g.textContent = \"\";\n return;\n }\n for (let u = 0; u < f.cssRules.length; u++) {\n const y = f.cssRules[u];\n if (\"selectorText\" in y)\n P(y, l, n, a, p, s), r.push(y);\n else if (\"cssRules\" in y && \"media\" in y) {\n const m = y, E = [];\n for (let w = 0; w < m.cssRules.length; w++) {\n const x = m.cssRules[w];\n x.type === x.STYLE_RULE && (P(x, l, n, a, p, s), E.push(x));\n }\n for (; m.cssRules.length > 0; )\n m.deleteRule(0);\n for (const w of E)\n m.insertRule(w.cssText, m.cssRules.length);\n r.push(m);\n }\n }\n g.textContent = r.map((u) => u.cssText).join(`\n`);\n }), h)\n return c.body.innerHTML;\n {\n const e = c.createElement(\"div\");\n return e.id = l, e.innerHTML = c.body.innerHTML, e.outerHTML;\n }\n}\nfunction K(t) {\n const o = document.createElement(\"div\");\n return o.textContent = t, o.innerHTML;\n}\nfunction Q(t, o, i) {\n let s = t ?? \"\";\n return (s == null ? void 0 : s.length) === 0 && o && (s = K(o).split(`\n`).map((l) => \"<p>\" + l + \"</p>\").join(`\n`)), J(s, i ?? {});\n}\nconst X = [\"innerHTML\"], Z = [\"title\"], $ = /* @__PURE__ */ F({\n __name: \"Letter\",\n props: {\n className: {},\n html: {},\n text: {},\n useIframe: { type: Boolean },\n iframeTitle: {},\n rewriteExternalLinks: {},\n rewriteExternalResources: {},\n allowedCssProperties: {},\n allowedSchemas: {},\n preserveCssPriority: { type: Boolean }\n },\n setup(t) {\n const o = t, {\n className: i,\n html: s,\n text: l,\n useIframe: n,\n iframeTitle: a,\n rewriteExternalLinks: p,\n rewriteExternalResources: h,\n allowedSchemas: c,\n allowedCssProperties: v,\n preserveCssPriority: d\n } = B(o), C = Q(s, l, {\n rewriteExternalResources: h,\n rewriteExternalLinks: p,\n allowedSchemas: c,\n preserveCssPriority: d,\n allowedCssProperties: v\n }), T = \"data:text/html;charset=utf-8,\" + encodeURIComponent(C);\n return (L, N) => b(n) ? b(n) ? (H(), I(\"div\", {\n key: 1,\n class: j([b(i)])\n }, [\n U(\"iframe\", {\n src: T,\n title: b(a)\n }, null, 8, Z)\n ], 2)) : V(\"\", !0) : (H(), I(\"div\", {\n key: 0,\n class: j([b(i)]),\n innerHTML: b(C)\n }, null, 10, X));\n }\n}), se = {\n install: (t) => {\n t.component(\"Letter\", $);\n }\n};\nexport {\n $ as Letter,\n se as default\n};\n","<script>\nimport { Letter } from 'vue-letter';\nimport GalleryView from '../components/GalleryView.vue';\n\nexport default {\n components: { Letter, GalleryView },\n props: {\n message: {\n type: String,\n default: '',\n },\n isEmail: {\n type: Boolean,\n default: true,\n },\n displayQuotedButton: {\n type: Boolean,\n default: false,\n },\n },\n data() {\n return {\n showQuotedContent: false,\n showGalleryViewer: false,\n attachment: {},\n availableAttachments: [],\n };\n },\n computed: {\n isQuotedContentPresent() {\n if (!this.isEmail) {\n return this.message.includes('<blockquote');\n }\n return this.showQuotedContent;\n },\n showQuoteToggle() {\n if (!this.isEmail) {\n return false;\n }\n return this.displayQuotedButton;\n },\n },\n methods: {\n toggleQuotedContent() {\n this.showQuotedContent = !this.showQuotedContent;\n },\n handleClickOnContent(event) {\n // if event target is IMG and not close in A tag\n // then open image preview\n const isImageElement = event.target.tagName === 'IMG';\n const isWrappedInLink = event.target.closest('A');\n\n if (isImageElement && !isWrappedInLink) {\n this.openImagePreview(event.target.src);\n }\n },\n openImagePreview(src) {\n this.showGalleryViewer = true;\n this.attachment = {\n file_type: 'image',\n data_url: src,\n message_id: Math.floor(Math.random() * 100),\n };\n this.availableAttachments = [{ ...this.attachment }];\n },\n onClose() {\n this.showGalleryViewer = false;\n this.resetAttachmentData();\n },\n resetAttachmentData() {\n this.attachment = {};\n this.availableAttachments = [];\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"message-text__wrap\"\n :class=\"{\n 'show--quoted': isQuotedContentPresent,\n 'hide--quoted': !isQuotedContentPresent,\n }\"\n >\n <div v-if=\"!isEmail\" v-dompurify-html=\"message\" class=\"text-content\" />\n <div v-else @click=\"handleClickOnContent\">\n <Letter\n class=\"text-content bg-white dark:bg-white text-slate-900 dark:text-slate-900 p-2 rounded-[4px]\"\n :html=\"message\"\n />\n </div>\n <button\n v-if=\"showQuoteToggle\"\n class=\"py-1 text-xs cursor-pointer text-slate-300 dark:text-slate-300\"\n @click=\"toggleQuotedContent\"\n >\n <span v-if=\"showQuotedContent\" class=\"flex items-center gap-0.5\">\n <fluent-icon icon=\"chevron-up\" size=\"16\" />\n {{ $t('CHAT_LIST.HIDE_QUOTED_TEXT') }}\n </span>\n <span v-else class=\"flex items-center gap-0.5\">\n <fluent-icon icon=\"chevron-down\" size=\"16\" />\n {{ $t('CHAT_LIST.SHOW_QUOTED_TEXT') }}\n </span>\n </button>\n <GalleryView\n v-if=\"showGalleryViewer\"\n v-model:show=\"showGalleryViewer\"\n :attachment=\"attachment\"\n :all-attachments=\"availableAttachments\"\n @error=\"onClose\"\n @close=\"onClose\"\n />\n </div>\n</template>\n\n<style lang=\"scss\">\n.text-content {\n overflow: auto;\n\n ul,\n ol {\n padding-left: var(--space-two);\n }\n\n table {\n margin: 0;\n border: 0;\n\n td {\n margin: 0;\n border: 0;\n }\n\n tr {\n border-bottom: 0 !important;\n }\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n font-size: var(--font-size-normal);\n }\n}\n\n.show--quoted {\n blockquote {\n @apply block;\n }\n}\n\n.hide--quoted {\n blockquote {\n @apply hidden;\n }\n}\n</style>\n","<script>\nimport { useAlert } from 'dashboard/composables';\nimport { mapGetters } from 'vuex';\nimport { useMessageFormatter } from 'shared/composables/useMessageFormatter';\nimport ContextMenu from 'dashboard/components/ui/ContextMenu.vue';\nimport AddCannedModal from 'dashboard/routes/dashboard/settings/canned/AddCanned.vue';\nimport { useSnakeCase } from 'dashboard/composables/useTransformKeys';\nimport { copyTextToClipboard } from 'shared/helpers/clipboard';\nimport { conversationUrl, frontendURL } from '../../../helper/URLHelper';\nimport {\n ACCOUNT_EVENTS,\n CONVERSATION_EVENTS,\n} from '../../../helper/AnalyticsHelper/events';\nimport MenuItem from '../../../components/widgets/conversation/contextMenu/menuItem.vue';\nimport { useTrack } from 'dashboard/composables';\n\nexport default {\n components: {\n AddCannedModal,\n MenuItem,\n ContextMenu,\n },\n props: {\n message: {\n type: Object,\n required: true,\n },\n isOpen: {\n type: Boolean,\n default: false,\n },\n enabledOptions: {\n type: Object,\n default: () => ({}),\n },\n contextMenuPosition: {\n type: Object,\n default: () => ({}),\n },\n hideButton: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['open', 'close', 'replyTo'],\n setup() {\n const { getPlainText } = useMessageFormatter();\n return {\n getPlainText,\n };\n },\n data() {\n return {\n isCannedResponseModalOpen: false,\n showDeleteModal: false,\n };\n },\n computed: {\n ...mapGetters({\n getAccount: 'accounts/getAccount',\n currentAccountId: 'getCurrentAccountId',\n }),\n plainTextContent() {\n return this.getPlainText(this.messageContent);\n },\n conversationId() {\n return this.message.conversation_id ?? this.message.conversationId;\n },\n messageId() {\n return this.message.id;\n },\n messageContent() {\n return this.message.content;\n },\n contentAttributes() {\n return useSnakeCase(\n this.message.content_attributes ?? this.message.contentAttributes\n );\n },\n },\n methods: {\n async copyLinkToMessage() {\n const fullConversationURL =\n window.chatwootConfig.hostURL +\n frontendURL(\n conversationUrl({\n id: this.conversationId,\n accountId: this.currentAccountId,\n })\n );\n await copyTextToClipboard(\n `${fullConversationURL}?messageId=${this.messageId}`\n );\n useAlert(this.$t('CONVERSATION.CONTEXT_MENU.LINK_COPIED'));\n this.handleClose();\n },\n async handleCopy() {\n await copyTextToClipboard(this.plainTextContent);\n useAlert(this.$t('CONTACT_PANEL.COPY_SUCCESSFUL'));\n this.handleClose();\n },\n showCannedResponseModal() {\n useTrack(ACCOUNT_EVENTS.ADDED_TO_CANNED_RESPONSE);\n this.isCannedResponseModalOpen = true;\n },\n hideCannedResponseModal() {\n this.isCannedResponseModalOpen = false;\n this.handleClose();\n },\n handleOpen(e) {\n this.$emit('open', e);\n },\n handleClose(e) {\n this.$emit('close', e);\n },\n handleTranslate() {\n const { locale } = this.getAccount(this.currentAccountId);\n this.$store.dispatch('translateMessage', {\n conversationId: this.conversationId,\n messageId: this.messageId,\n targetLanguage: locale || 'en',\n });\n useTrack(CONVERSATION_EVENTS.TRANSLATE_A_MESSAGE);\n this.handleClose();\n },\n handleReplyTo() {\n this.$emit('replyTo', this.message);\n this.handleClose();\n },\n openDeleteModal() {\n this.handleClose();\n this.showDeleteModal = true;\n },\n async confirmDeletion() {\n try {\n await this.$store.dispatch('deleteMessage', {\n conversationId: this.conversationId,\n messageId: this.messageId,\n });\n useAlert(this.$t('CONVERSATION.SUCCESS_DELETE_MESSAGE'));\n this.handleClose();\n } catch (error) {\n useAlert(this.$t('CONVERSATION.FAIL_DELETE_MESSSAGE'));\n }\n },\n closeDeleteModal() {\n this.showDeleteModal = false;\n },\n },\n};\n</script>\n\n<template>\n <div class=\"context-menu\">\n <!-- Add To Canned Responses -->\n <woot-modal\n v-if=\"isCannedResponseModalOpen && enabledOptions['cannedResponse']\"\n v-model:show=\"isCannedResponseModalOpen\"\n :on-close=\"hideCannedResponseModal\"\n >\n <AddCannedModal\n :response-content=\"plainTextContent\"\n :on-close=\"hideCannedResponseModal\"\n />\n </woot-modal>\n <!-- Confirm Deletion -->\n <woot-delete-modal\n v-if=\"showDeleteModal\"\n v-model:show=\"showDeleteModal\"\n class=\"context-menu--delete-modal\"\n :on-close=\"closeDeleteModal\"\n :on-confirm=\"confirmDeletion\"\n :title=\"$t('CONVERSATION.CONTEXT_MENU.DELETE_CONFIRMATION.TITLE')\"\n :message=\"$t('CONVERSATION.CONTEXT_MENU.DELETE_CONFIRMATION.MESSAGE')\"\n :confirm-text=\"$t('CONVERSATION.CONTEXT_MENU.DELETE_CONFIRMATION.DELETE')\"\n :reject-text=\"$t('CONVERSATION.CONTEXT_MENU.DELETE_CONFIRMATION.CANCEL')\"\n />\n <woot-button\n v-if=\"!hideButton\"\n icon=\"more-vertical\"\n color-scheme=\"secondary\"\n variant=\"clear\"\n size=\"small\"\n class=\"invisible group-hover/context-menu:visible\"\n @click=\"handleOpen\"\n />\n <ContextMenu\n v-if=\"isOpen && !isCannedResponseModalOpen\"\n :x=\"contextMenuPosition.x\"\n :y=\"contextMenuPosition.y\"\n @close=\"handleClose\"\n >\n <div class=\"menu-container\">\n <MenuItem\n v-if=\"enabledOptions['replyTo']\"\n :option=\"{\n icon: 'arrow-reply',\n label: $t('CONVERSATION.CONTEXT_MENU.REPLY_TO'),\n }\"\n variant=\"icon\"\n @click.stop=\"handleReplyTo\"\n />\n <MenuItem\n v-if=\"enabledOptions['copy']\"\n :option=\"{\n icon: 'clipboard',\n label: $t('CONVERSATION.CONTEXT_MENU.COPY'),\n }\"\n variant=\"icon\"\n @click.stop=\"handleCopy\"\n />\n <MenuItem\n v-if=\"enabledOptions['copy']\"\n :option=\"{\n icon: 'translate',\n label: $t('CONVERSATION.CONTEXT_MENU.TRANSLATE'),\n }\"\n variant=\"icon\"\n @click.stop=\"handleTranslate\"\n />\n <hr />\n <MenuItem\n :option=\"{\n icon: 'link',\n label: $t('CONVERSATION.CONTEXT_MENU.COPY_PERMALINK'),\n }\"\n variant=\"icon\"\n @click.stop=\"copyLinkToMessage\"\n />\n <MenuItem\n v-if=\"enabledOptions['cannedResponse']\"\n :option=\"{\n icon: 'comment-add',\n label: $t('CONVERSATION.CONTEXT_MENU.CREATE_A_CANNED_RESPONSE'),\n }\"\n variant=\"icon\"\n @click.stop=\"showCannedResponseModal\"\n />\n <hr v-if=\"enabledOptions['delete']\" />\n <MenuItem\n v-if=\"enabledOptions['delete']\"\n :option=\"{\n icon: 'delete',\n label: $t('CONVERSATION.CONTEXT_MENU.DELETE'),\n }\"\n variant=\"icon\"\n @click.stop=\"openDeleteModal\"\n />\n </div>\n </ContextMenu>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.menu-container {\n @apply p-1 bg-white dark:bg-slate-900 shadow-xl rounded-md;\n\n hr:first-child {\n @apply hidden;\n }\n\n hr {\n @apply m-1 border-b border-solid border-n-strong;\n }\n}\n\n.context-menu--delete-modal {\n ::v-deep {\n .modal-container {\n @apply max-w-[30rem];\n\n h2 {\n @apply font-medium text-base;\n }\n }\n\n .modal-footer {\n @apply pt-4 pb-8 px-8;\n }\n }\n}\n</style>\n","<script>\nexport default {\n components: {},\n props: {\n url: {\n type: String,\n required: true,\n },\n },\n emits: ['error'],\n data() {\n return {\n show: false,\n };\n },\n methods: {\n onClose() {\n this.show = false;\n },\n onClick() {\n this.show = true;\n },\n },\n};\n</script>\n\n<template>\n <div class=\"image message-text__wrap\">\n <img :src=\"url\" @click=\"onClick\" @error=\"$emit('error')\" />\n <woot-modal v-model:show=\"show\" full-width :on-close=\"onClose\">\n <img :src=\"url\" class=\"modal-image skip-context-menu\" />\n </woot-modal>\n </div>\n</template>\n","<script>\nexport default {\n props: {\n url: {\n type: String,\n required: true,\n },\n },\n emits: ['error'],\n data() {\n return {\n show: false,\n };\n },\n mounted() {\n this.$refs.videoElement.onerror = () => {\n this.$emit('error');\n };\n },\n methods: {\n onClose() {\n this.show = false;\n },\n onClick() {\n this.show = true;\n },\n },\n};\n</script>\n\n<template>\n <div class=\"video message-text__wrap\">\n <video ref=\"videoElement\" :src=\"url\" muted playsInline @click=\"onClick\" />\n <woot-modal v-model:show=\"show\" :on-close=\"onClose\">\n <video\n :src=\"url\"\n controls\n playsInline\n class=\"modal-video skip-context-menu mx-auto\"\n />\n </woot-modal>\n </div>\n</template>\n","<script>\nexport default {};\n</script>\n\n<template>\n <div\n class=\"flex items-center justify-center px-8 h-28 w-full bg-slate-100 text-slate-700 dark:bg-slate-500 dark:text-slate-75\"\n >\n <fluent-icon icon=\"document-error\" size=\"32\" />\n <p class=\"mb-0 text-slate-700 dark:text-slate-75\">\n {{ $t('COMPONENTS.FILE_BUBBLE.INSTAGRAM_STORY_UNAVAILABLE') }}\n </p>\n </div>\n</template>\n","<script>\nimport BubbleImage from './Image.vue';\nimport BubbleVideo from './Video.vue';\nimport InstagramStoryErrorPlaceHolder from './InstagramStoryErrorPlaceHolder.vue';\n\nexport default {\n components: {\n BubbleImage,\n BubbleVideo,\n InstagramStoryErrorPlaceHolder,\n },\n props: {\n storyUrl: {\n type: String,\n default: '',\n },\n },\n emits: ['error'],\n data() {\n return {\n hasImgStoryError: false,\n hasVideoStoryError: false,\n };\n },\n methods: {\n onImageLoadError() {\n this.hasImgStoryError = true;\n this.emitError();\n },\n onVideoLoadError() {\n this.hasVideoStoryError = true;\n this.emitError();\n },\n emitError() {\n this.$emit('error');\n },\n },\n};\n</script>\n\n<template>\n <BubbleImage\n v-if=\"!hasImgStoryError\"\n :url=\"storyUrl\"\n @error=\"onImageLoadError\"\n />\n <BubbleVideo\n v-else-if=\"!hasVideoStoryError\"\n :url=\"storyUrl\"\n @error=\"onVideoLoadError\"\n />\n <InstagramStoryErrorPlaceHolder v-else />\n</template>\n","<script>\nimport InstagramStory from './InstagramStory.vue';\n\nexport default {\n components: { InstagramStory },\n props: {\n storyUrl: {\n type: String,\n default: '',\n },\n },\n data() {\n return {\n hasImgStoryError: false,\n hasVideoStoryError: false,\n };\n },\n methods: {\n onImageLoadError() {\n this.hasImgStoryError = true;\n },\n onVideoLoadError() {\n this.hasVideoStoryError = true;\n },\n },\n};\n</script>\n\n<template>\n <blockquote\n class=\"my-0 px-2 pb-0 pt-0 border-l-4 border-solid border-slate-75 dark:border-slate-600 text-slate-600 dark:text-slate-200\"\n >\n <span>{{ $t('CONVERSATION.REPLIED_TO_STORY') }}</span>\n <InstagramStory :story-url=\"storyUrl\" class=\"mt-3 rounded-md\" />\n </blockquote>\n</template>\n","export const CONTENT_TYPES = {\n INCOMING_EMAIL: 'incoming_email',\n};\n","import { CSAT_RATINGS } from '../../../../../shared/constants/messages';\n\nconst generateInputSelectContent = contentAttributes => {\n const { submitted_values: submittedValues = [] } = contentAttributes;\n const [selectedOption] = submittedValues;\n\n if (selectedOption && selectedOption.title) {\n return `<strong>${selectedOption.title}</strong>`;\n }\n return '';\n};\n\nconst generateInputEmailContent = contentAttributes => {\n const { submitted_email: submittedEmail = '' } = contentAttributes;\n if (submittedEmail) {\n return `<strong>${submittedEmail}</strong>`;\n }\n return '';\n};\n\nconst generateFormContent = (contentAttributes, { noResponseText }) => {\n const { items, submitted_values: submittedValues = [] } = contentAttributes;\n if (submittedValues.length) {\n const submittedObject = submittedValues.reduce((acc, keyValuePair) => {\n acc[keyValuePair.name] = keyValuePair.value;\n return acc;\n }, {});\n let formMessageContent = '';\n items.forEach(item => {\n formMessageContent += `<div>${item.label}</div>`;\n const response = submittedObject[item.name] || noResponseText;\n formMessageContent += `<strong>${response}</strong><br/><br/>`;\n });\n return formMessageContent;\n }\n return '';\n};\n\nconst generateCSATContent = (\n contentAttributes,\n { ratingTitle, feedbackTitle }\n) => {\n const {\n submitted_values: { csat_survey_response: surveyResponse = {} } = {},\n } = contentAttributes;\n const { rating, feedback_message } = surveyResponse || {};\n\n let messageContent = '';\n if (rating) {\n const [ratingObject = {}] = CSAT_RATINGS.filter(\n csatRating => csatRating.value === rating\n );\n messageContent += `<div><strong>${ratingTitle}</strong></div>`;\n messageContent += `<p>${ratingObject.emoji}</p>`;\n }\n if (feedback_message) {\n messageContent += `<div><strong>${feedbackTitle}</strong></div>`;\n messageContent += `<p>${feedback_message}</p>`;\n }\n return messageContent;\n};\n\nexport const generateBotMessageContent = (\n contentType,\n contentAttributes,\n {\n noResponseText = 'No response',\n csat: { ratingTitle = 'Rating', feedbackTitle = 'Feedback' } = {},\n } = {}\n) => {\n const contentTypeMethods = {\n input_select: generateInputSelectContent,\n input_email: generateInputEmailContent,\n form: generateFormContent,\n input_csat: generateCSATContent,\n };\n\n const contentTypeMethod = contentTypeMethods[contentType];\n if (contentTypeMethod && typeof contentTypeMethod === 'function') {\n return contentTypeMethod(contentAttributes, {\n noResponseText,\n ratingTitle,\n feedbackTitle,\n });\n }\n return '';\n};\n","<script>\nimport { useMessageFormatter } from 'shared/composables/useMessageFormatter';\nimport BubbleActions from './bubble/Actions.vue';\nimport BubbleContact from './bubble/Contact.vue';\nimport BubbleFile from './bubble/File.vue';\nimport BubbleImageAudioVideo from './bubble/ImageAudioVideo.vue';\nimport BubbleIntegration from './bubble/Integration.vue';\nimport BubbleLocation from './bubble/Location.vue';\nimport BubbleMailHead from './bubble/MailHead.vue';\nimport BubbleReplyTo from './bubble/ReplyTo.vue';\nimport BubbleText from './bubble/Text.vue';\nimport ContextMenu from 'dashboard/modules/conversations/components/MessageContextMenu.vue';\nimport InstagramStory from './bubble/InstagramStory.vue';\nimport InstagramStoryReply from './bubble/InstagramStoryReply.vue';\nimport Spinner from 'shared/components/Spinner.vue';\nimport { CONTENT_TYPES } from 'shared/constants/contentType';\nimport { MESSAGE_TYPE, MESSAGE_STATUS } from 'shared/constants/messages';\nimport { generateBotMessageContent } from './helpers/botMessageContentHelper';\nimport { BUS_EVENTS } from 'shared/constants/busEvents';\nimport { ACCOUNT_EVENTS } from 'dashboard/helper/AnalyticsHelper/events';\nimport { LOCAL_STORAGE_KEYS } from 'dashboard/constants/localStorage';\nimport { LocalStorage } from 'shared/helpers/localStorage';\nimport { getDayDifferenceFromNow } from 'shared/helpers/DateHelper';\nimport * as Sentry from '@sentry/vue';\nimport { useTrack } from 'dashboard/composables';\nimport { emitter } from 'shared/helpers/mitt';\n\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n BubbleActions,\n BubbleContact,\n BubbleFile,\n BubbleImageAudioVideo,\n BubbleIntegration,\n BubbleLocation,\n BubbleMailHead,\n BubbleReplyTo,\n BubbleText,\n ContextMenu,\n InstagramStory,\n InstagramStoryReply,\n Spinner,\n NextButton,\n },\n props: {\n data: {\n type: Object,\n required: true,\n },\n isATweet: {\n type: Boolean,\n default: false,\n },\n isAFacebookInbox: {\n type: Boolean,\n default: false,\n },\n isInstagram: {\n type: Boolean,\n default: false,\n },\n isAWhatsAppChannel: {\n type: Boolean,\n default: false,\n },\n isAnEmailInbox: {\n type: Boolean,\n default: false,\n },\n inboxSupportsReplyTo: {\n type: Object,\n default: () => ({}),\n },\n inReplyTo: {\n type: Object,\n default: () => ({}),\n },\n },\n setup() {\n const { formatMessage } = useMessageFormatter();\n return {\n formatMessage,\n };\n },\n data() {\n return {\n showContextMenu: false,\n hasMediaLoadError: false,\n contextMenuPosition: {},\n showBackgroundHighlight: false,\n };\n },\n computed: {\n attachments() {\n // Here it is used to get sender and created_at for each attachment\n return this.data?.attachments.map(attachment => ({\n ...attachment,\n sender: this.data.sender || {},\n created_at: this.data.created_at || '',\n }));\n },\n hasOneDayPassed() {\n // Disable retry button if the message is failed and the message is older than 24 hours\n return getDayDifferenceFromNow(new Date(), this.data?.created_at) >= 1;\n },\n shouldRenderMessage() {\n return (\n this.hasAttachments ||\n this.data.content ||\n this.isEmailContentType ||\n this.isUnsupported ||\n this.isAnIntegrationMessage\n );\n },\n emailMessageContent() {\n const {\n html_content: { full: fullHTMLContent } = {},\n text_content: { full: fullTextContent } = {},\n } = this.contentAttributes.email || {};\n\n if (fullHTMLContent) {\n return fullHTMLContent;\n }\n\n if (fullTextContent) {\n return fullTextContent.replace(/\\n/g, '<br>');\n }\n\n return '';\n },\n displayQuotedButton() {\n if (this.emailMessageContent.includes('<blockquote')) {\n return true;\n }\n\n if (!this.isIncoming) {\n return false;\n }\n\n return false;\n },\n message() {\n // If the message is an email, emailMessageContent would be present\n // In that case, we would use letter package to render the email\n if (this.emailMessageContent && this.isIncoming) {\n return this.emailMessageContent;\n }\n\n const botMessageContent = generateBotMessageContent(\n this.contentType,\n this.contentAttributes,\n {\n noResponseText: this.$t('CONVERSATION.NO_RESPONSE'),\n csat: {\n ratingTitle: this.$t('CONVERSATION.RATING_TITLE'),\n feedbackTitle: this.$t('CONVERSATION.FEEDBACK_TITLE'),\n },\n }\n );\n\n if (this.contentType === 'input_csat') {\n return this.$t('CONVERSATION.CSAT_REPLY_MESSAGE') + botMessageContent;\n }\n\n return (\n this.formatMessage(\n this.data.content,\n this.isATweet,\n this.data.private\n ) + botMessageContent\n );\n },\n inReplyToMessageId() {\n // Why not use the inReplyTo object directly?\n // Glad you asked! The inReplyTo object may or may not be available\n // depending on the current scroll position of the message list\n // since old messages are only loaded when the user scrolls up\n return this.data.content_attributes?.in_reply_to;\n },\n isAnInstagramStory() {\n return this.contentAttributes.image_type === 'story_mention';\n },\n contextMenuEnabledOptions() {\n return {\n copy: this.hasText,\n delete: this.hasText || this.hasAttachments,\n cannedResponse: this.isOutgoing && this.hasText,\n replyTo: !this.data.private && this.inboxSupportsReplyTo.outgoing,\n };\n },\n contentAttributes() {\n return this.data.content_attributes || {};\n },\n externalError() {\n return this.contentAttributes.external_error || '';\n },\n sender() {\n return this.data.sender || {};\n },\n status() {\n return this.data.status;\n },\n storySender() {\n return this.contentAttributes.story_sender || null;\n },\n storyId() {\n return this.contentAttributes.story_id || null;\n },\n storyUrl() {\n return this.contentAttributes.story_url || null;\n },\n contentType() {\n const {\n data: { content_type: contentType },\n } = this;\n return contentType;\n },\n twitterProfileLink() {\n const additionalAttributes = this.sender.additional_attributes || {};\n const { screen_name: screenName } = additionalAttributes;\n return `https://twitter.com/${screenName}`;\n },\n alignBubble() {\n const { message_type: messageType } = this.data;\n const isCentered = messageType === MESSAGE_TYPE.ACTIVITY;\n const isLeftAligned = messageType === MESSAGE_TYPE.INCOMING;\n const isRightAligned =\n messageType === MESSAGE_TYPE.OUTGOING ||\n messageType === MESSAGE_TYPE.TEMPLATE;\n return {\n center: isCentered,\n left: isLeftAligned,\n right: isRightAligned,\n 'has-context-menu': this.showContextMenu,\n // this handles the offset required to align the context menu button\n // extra alignment is required since a tweet message has a the user name and avatar below it\n 'has-tweet-menu': this.isATweet,\n 'has-bg': this.showBackgroundHighlight,\n };\n },\n createdAt() {\n return this.contentAttributes.external_created_at || this.data.created_at;\n },\n isBubble() {\n return [0, 1, 3].includes(this.data.message_type);\n },\n isIncoming() {\n return this.data.message_type === MESSAGE_TYPE.INCOMING;\n },\n isOutgoing() {\n return this.data.message_type === MESSAGE_TYPE.OUTGOING;\n },\n isTemplate() {\n return this.data.message_type === MESSAGE_TYPE.TEMPLATE;\n },\n isAnIntegrationMessage() {\n return this.contentType === 'integrations';\n },\n emailHeadAttributes() {\n return {\n email: this.contentAttributes.email,\n cc: this.contentAttributes.cc_emails,\n bcc: this.contentAttributes.bcc_emails,\n };\n },\n hasAttachments() {\n return !!(this.data.attachments && this.data.attachments.length > 0);\n },\n isMessageDeleted() {\n return this.contentAttributes.deleted;\n },\n hasText() {\n return !!this.data.content;\n },\n tooltipForSender() {\n const name = this.senderNameForAvatar;\n const { message_type: messageType } = this.data;\n const showTooltip =\n messageType === MESSAGE_TYPE.OUTGOING ||\n messageType === MESSAGE_TYPE.TEMPLATE;\n return showTooltip\n ? {\n content: `${this.$t('CONVERSATION.SENT_BY')} ${name}`,\n }\n : false;\n },\n errorMessageTooltip() {\n if (this.isFailed) {\n return this.externalError || this.$t(`CONVERSATION.SEND_FAILED`);\n }\n return '';\n },\n wrapClass() {\n return {\n wrap: this.isBubble,\n 'activity-wrap': !this.isBubble,\n 'is-pending': this.isPending,\n 'is-failed': this.isFailed,\n 'is-email': this.isEmailContentType,\n };\n },\n bubbleClass() {\n return {\n bubble: this.isBubble,\n 'is-private': this.data.private,\n 'is-unsupported': this.isUnsupported,\n 'is-image': this.hasMediaAttachment('image'),\n 'is-video': this.hasMediaAttachment('video'),\n 'is-text': this.hasText,\n 'is-from-bot': this.isSentByBot,\n 'is-failed': this.isFailed,\n 'is-email': this.isEmailContentType,\n };\n },\n isUnsupported() {\n return this.contentAttributes.is_unsupported ?? false;\n },\n isPending() {\n return this.data.status === MESSAGE_STATUS.PROGRESS;\n },\n isFailed() {\n return this.data.status === MESSAGE_STATUS.FAILED;\n },\n isSentByBot() {\n if (this.isPending || this.isFailed) return false;\n return !this.sender.type || this.sender.type === 'agent_bot';\n },\n shouldShowContextMenu() {\n return !(this.isFailed || this.isPending || this.isUnsupported);\n },\n showAvatar() {\n if (this.isOutgoing || this.isTemplate) {\n return true;\n }\n return this.isATweet && this.isIncoming && this.sender;\n },\n senderNameForAvatar() {\n if (this.isOutgoing || this.isTemplate) {\n const { name = this.$t('CONVERSATION.BOT') } = this.sender || {};\n return name;\n }\n return '';\n },\n isEmailContentType() {\n return this.contentType === CONTENT_TYPES.INCOMING_EMAIL;\n },\n },\n watch: {\n data() {\n this.hasMediaLoadError = false;\n },\n },\n mounted() {\n this.hasMediaLoadError = false;\n emitter.on(BUS_EVENTS.ON_MESSAGE_LIST_SCROLL, this.closeContextMenu);\n this.setupHighlightTimer();\n },\n unmounted() {\n emitter.off(BUS_EVENTS.ON_MESSAGE_LIST_SCROLL, this.closeContextMenu);\n clearTimeout(this.higlightTimeout);\n },\n methods: {\n isAttachmentImageVideoAudio(fileType) {\n return ['image', 'audio', 'video', 'story_mention', 'ig_reel'].includes(\n fileType\n );\n },\n hasMediaAttachment(type) {\n if (this.hasAttachments && this.data.attachments.length > 0) {\n return this.compareMessageFileType(this.data, type);\n }\n return false;\n },\n compareMessageFileType(messageData, type) {\n try {\n const { attachments = [{}] } = messageData;\n const { file_type: fileType } = attachments[0];\n return fileType === type && !this.hasMediaLoadError;\n } catch (err) {\n Sentry.setContext('attachment-parsing-error', {\n messageData,\n type,\n hasMediaLoadError: this.hasMediaLoadError,\n });\n\n Sentry.captureException(err);\n return false;\n }\n },\n handleContextMenuClick() {\n this.showContextMenu = !this.showContextMenu;\n },\n async retrySendMessage() {\n await this.$store.dispatch('sendMessageWithData', this.data);\n },\n onMediaLoadError() {\n this.hasMediaLoadError = true;\n },\n openContextMenu(e) {\n const shouldSkipContextMenu =\n e.target?.classList.contains('skip-context-menu') ||\n e.target?.tagName.toLowerCase() === 'a';\n if (shouldSkipContextMenu || getSelection().toString()) {\n return;\n }\n\n e.preventDefault();\n if (e.type === 'contextmenu') {\n useTrack(ACCOUNT_EVENTS.OPEN_MESSAGE_CONTEXT_MENU);\n }\n this.contextMenuPosition = {\n x: e.pageX || e.clientX,\n y: e.pageY || e.clientY,\n };\n this.showContextMenu = true;\n },\n closeContextMenu() {\n this.showContextMenu = false;\n this.contextMenuPosition = { x: null, y: null };\n },\n handleReplyTo() {\n const replyStorageKey = LOCAL_STORAGE_KEYS.MESSAGE_REPLY_TO;\n const { conversation_id: conversationId, id: replyTo } = this.data;\n\n LocalStorage.updateJsonStore(replyStorageKey, conversationId, replyTo);\n emitter.emit(BUS_EVENTS.TOGGLE_REPLY_TO_MESSAGE, this.data);\n },\n setupHighlightTimer() {\n if (Number(this.$route.query.messageId) !== Number(this.data.id)) {\n return;\n }\n\n this.showBackgroundHighlight = true;\n const HIGHLIGHT_TIMER = 1000;\n this.higlightTimeout = setTimeout(() => {\n this.showBackgroundHighlight = false;\n }, HIGHLIGHT_TIMER);\n },\n },\n};\n</script>\n\n<!-- eslint-disable-next-line vue/no-root-v-if -->\n<template>\n <li\n v-if=\"shouldRenderMessage\"\n :id=\"`message${data.id}`\"\n class=\"group/context-menu\"\n :class=\"[alignBubble]\"\n >\n <div :class=\"wrapClass\">\n <div\n v-if=\"isFailed && !hasOneDayPassed && !isAnEmailInbox\"\n class=\"message-failed--alert\"\n >\n <NextButton\n v-tooltip.top-end=\"$t('CONVERSATION.TRY_AGAIN')\"\n ghost\n xs\n ruby\n icon=\"i-lucide-refresh-ccw\"\n @click=\"retrySendMessage\"\n />\n </div>\n <div :class=\"bubbleClass\" @contextmenu=\"openContextMenu($event)\">\n <BubbleMailHead\n :email-attributes=\"contentAttributes.email\"\n :cc=\"emailHeadAttributes.cc\"\n :bcc=\"emailHeadAttributes.bcc\"\n :is-incoming=\"isIncoming\"\n />\n <InstagramStoryReply v-if=\"storyUrl\" :story-url=\"storyUrl\" />\n <BubbleReplyTo\n v-if=\"inReplyToMessageId && inboxSupportsReplyTo.incoming\"\n :message=\"inReplyTo\"\n :message-type=\"data.message_type\"\n :parent-has-attachments=\"hasAttachments\"\n />\n <div v-if=\"isUnsupported\">\n <template v-if=\"isAFacebookInbox && isInstagram\">\n {{ $t('CONVERSATION.UNSUPPORTED_MESSAGE_INSTAGRAM') }}\n </template>\n <template v-else-if=\"isAFacebookInbox\">\n {{ $t('CONVERSATION.UNSUPPORTED_MESSAGE_FACEBOOK') }}\n </template>\n <template v-else>\n {{ $t('CONVERSATION.UNSUPPORTED_MESSAGE') }}\n </template>\n </div>\n <BubbleText\n v-else-if=\"data.content\"\n :message=\"message\"\n :is-email=\"isEmailContentType\"\n :display-quoted-button=\"displayQuotedButton\"\n />\n <BubbleIntegration\n :message-id=\"data.id\"\n :content-attributes=\"contentAttributes\"\n :inbox-id=\"data.inbox_id\"\n />\n <span\n v-if=\"isPending && hasAttachments\"\n class=\"chat-bubble has-attachment agent\"\n >\n {{ $t('CONVERSATION.UPLOADING_ATTACHMENTS') }}\n </span>\n <div v-if=\"!isPending && hasAttachments\">\n <div v-for=\"attachment in attachments\" :key=\"attachment.id\">\n <InstagramStory\n v-if=\"isAnInstagramStory\"\n :story-url=\"attachment.data_url\"\n @error=\"onMediaLoadError\"\n />\n <BubbleImageAudioVideo\n v-else-if=\"isAttachmentImageVideoAudio(attachment.file_type)\"\n :attachment=\"attachment\"\n @error=\"onMediaLoadError\"\n />\n <BubbleLocation\n v-else-if=\"attachment.file_type === 'location'\"\n :latitude=\"attachment.coordinates_lat\"\n :longitude=\"attachment.coordinates_long\"\n :name=\"attachment.fallback_title\"\n />\n <BubbleContact\n v-else-if=\"attachment.file_type === 'contact'\"\n :name=\"data.content\"\n :phone-number=\"attachment.fallback_title\"\n />\n <BubbleFile v-else :url=\"attachment.data_url\" />\n </div>\n </div>\n <BubbleActions\n :id=\"data.id\"\n :sender=\"data.sender\"\n :story-sender=\"storySender\"\n :external-error=\"errorMessageTooltip\"\n :story-id=\"`${storyId}`\"\n :is-a-tweet=\"isATweet\"\n :is-a-whatsapp-channel=\"isAWhatsAppChannel\"\n :is-email=\"isEmailContentType\"\n :is-private=\"data.private\"\n :message-type=\"data.message_type\"\n :message-status=\"status\"\n :source-id=\"data.source_id\"\n :inbox-id=\"data.inbox_id\"\n :created-at=\"createdAt\"\n />\n </div>\n <Spinner v-if=\"isPending\" size=\"tiny\" />\n <div\n v-if=\"showAvatar\"\n v-tooltip.left=\"tooltipForSender\"\n class=\"sender--info\"\n >\n <woot-thumbnail\n :src=\"sender.thumbnail\"\n :username=\"senderNameForAvatar\"\n size=\"16px\"\n />\n <a\n v-if=\"isATweet && isIncoming\"\n class=\"sender--available-name\"\n :href=\"twitterProfileLink\"\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n >\n {{ sender.name }}\n </a>\n </div>\n </div>\n <div v-if=\"shouldShowContextMenu\" class=\"context-menu-wrap\">\n <ContextMenu\n v-if=\"isBubble && !isMessageDeleted\"\n :context-menu-position=\"contextMenuPosition\"\n :is-open=\"showContextMenu\"\n :enabled-options=\"contextMenuEnabledOptions\"\n :message=\"data\"\n @open=\"openContextMenu\"\n @close=\"closeContextMenu\"\n @reply-to=\"handleReplyTo\"\n />\n </div>\n </li>\n</template>\n\n<style lang=\"scss\">\n.wrap {\n > .bubble {\n @apply min-w-[128px];\n\n &.is-unsupported {\n @apply text-xs max-w-[300px] border-dashed border border-slate-200 text-slate-600 dark:text-slate-200 bg-slate-50 dark:bg-slate-700 dark:border-slate-500;\n\n .message-text--metadata .time {\n @apply text-slate-400 dark:text-slate-300;\n }\n }\n\n &.is-image,\n &.is-video {\n @apply p-0 overflow-hidden;\n\n .image,\n .video {\n @apply max-w-[20rem] p-0.5;\n\n > img,\n > video {\n /** ensure that the bubble radius and image radius match*/\n @apply rounded-[0.4rem];\n }\n\n > video {\n @apply h-full w-full object-cover;\n }\n }\n\n .video {\n @apply h-[11.25rem];\n }\n }\n\n &.is-image.is-text > .message-text__wrap,\n &.is-video.is-text > .message-text__wrap {\n @apply max-w-[20rem] py-2 px-4;\n }\n\n &.is-private .file.message-text__wrap {\n .file--icon {\n @apply text-woot-400 dark:text-woot-400;\n }\n\n .attachment-name {\n @apply text-slate-700 dark:text-slate-200;\n }\n\n .download.button {\n @apply text-woot-400 dark:text-woot-400;\n }\n }\n\n &.is-private.is-text > .message-text__wrap .link {\n @apply text-woot-600 dark:text-woot-200;\n }\n\n &.is-private.is-text > .message-text__wrap .prosemirror-mention-node {\n @apply font-bold bg-none rounded-sm p-0 bg-yellow-100 dark:bg-yellow-700 text-slate-700 dark:text-slate-25 underline;\n }\n\n &.is-from-bot {\n @apply bg-violet-400 dark:bg-violet-400;\n\n .message-text--metadata .time {\n @apply text-violet-50 dark:text-violet-50;\n }\n\n &.is-private .message-text--metadata .time {\n @apply text-slate-400 dark:text-slate-400;\n }\n }\n\n &.is-failed {\n @apply bg-n-ruby-4 dark:bg-n-ruby-4 text-n-slate-12;\n\n .message-text--metadata .time {\n @apply text-n-ruby-12 dark:text-n-ruby-12;\n }\n }\n }\n\n &.is-pending {\n @apply relative opacity-80;\n\n .spinner {\n @apply absolute bottom-1 right-1;\n }\n\n > .is-image.is-text.bubble > .message-text__wrap {\n @apply p-0;\n }\n }\n}\n\n.wrap.is-email {\n --bubble-max-width: 84% !important;\n}\n\n.sender--info {\n @apply items-center text-black-700 dark:text-black-100 inline-flex py-1 px-0;\n\n .sender--available-name {\n @apply text-xs ml-1;\n }\n}\n\n.message-failed--alert {\n @apply text-red-900 dark:text-red-900 flex-grow text-right mt-1 mr-1 mb-0 ml-0;\n}\n\nli.left,\nli.right {\n @apply flex items-end;\n}\n\nli.left.has-tweet-menu .context-menu {\n // this handles the offset required to align the context menu button\n // extra alignment is required since a tweet message has a the user name and avatar below it\n @apply mb-6;\n}\n\nli.has-bg {\n @apply bg-woot-75 dark:bg-woot-600;\n}\n\nli.right .context-menu-wrap {\n @apply ml-auto;\n}\n\nli.right {\n @apply flex-row-reverse justify-end;\n\n .wrap.is-pending {\n @apply ml-auto;\n }\n\n .wrap.is-failed {\n @apply flex items-end ltr:ml-auto rtl:mr-auto;\n }\n}\n\n.has-context-menu {\n @apply bg-slate-50 dark:bg-slate-700;\n}\n\n.context-menu {\n @apply relative;\n}\n\n/* Markdown styling */\n\n.bubble .text-content {\n p code {\n @apply bg-slate-75 dark:bg-slate-700 inline-block leading-none rounded-sm p-1;\n }\n\n ol li {\n @apply list-item list-decimal;\n }\n\n pre {\n @apply bg-slate-75 dark:bg-slate-700 block border-slate-75 dark:border-slate-700 text-slate-800 dark:text-slate-100 rounded-md p-2 mt-1 mb-2 leading-relaxed whitespace-pre-wrap;\n\n code {\n @apply bg-transparent text-slate-800 dark:text-slate-100 p-0;\n }\n }\n\n blockquote {\n @apply border-l-4 mx-0 my-1 pt-2 pr-2 pb-0 pl-4 border-slate-75 border-solid dark:border-slate-600 text-slate-800 dark:text-slate-100;\n\n p {\n @apply text-slate-800 dark:text-slate-300;\n }\n }\n}\n\n.right .bubble .text-content {\n p code {\n @apply bg-woot-600 dark:bg-woot-600 text-white dark:text-white;\n }\n\n pre {\n @apply bg-woot-800 dark:bg-woot-800 border-woot-700 dark:border-woot-700 text-white dark:text-white;\n\n code {\n @apply bg-transparent text-white dark:text-white;\n }\n }\n\n blockquote {\n @apply border-l-4 border-solid border-woot-400 dark:border-woot-400 text-white dark:text-white;\n\n p {\n @apply text-woot-75 dark:text-woot-75;\n }\n }\n}\n</style>\n","export const MESSAGE_TYPES = {\n INCOMING: 0,\n OUTGOING: 1,\n ACTIVITY: 2,\n TEMPLATE: 3,\n};\n\nexport const MESSAGE_VARIANTS = {\n USER: 'user',\n AGENT: 'agent',\n ACTIVITY: 'activity',\n PRIVATE: 'private',\n BOT: 'bot',\n ERROR: 'error',\n TEMPLATE: 'template',\n EMAIL: 'email',\n UNSUPPORTED: 'unsupported',\n};\n\nexport const SENDER_TYPES = {\n CONTACT: 'Contact',\n USER: 'User',\n AGENT_BOT: 'agent_bot',\n};\n\nexport const ORIENTATION = {\n LEFT: 'left',\n RIGHT: 'right',\n CENTER: 'center',\n};\n\nexport const MESSAGE_STATUS = {\n SENT: 'sent',\n DELIVERED: 'delivered',\n READ: 'read',\n FAILED: 'failed',\n PROGRESS: 'progress',\n};\n\nexport const ATTACHMENT_TYPES = {\n IMAGE: 'image',\n AUDIO: 'audio',\n VIDEO: 'video',\n FILE: 'file',\n LOCATION: 'location',\n FALLBACK: 'fallback',\n SHARE: 'share',\n STORY_MENTION: 'story_mention',\n CONTACT: 'contact',\n IG_REEL: 'ig_reel',\n};\n\nexport const CONTENT_TYPES = {\n TEXT: 'text',\n INPUT_TEXT: 'input_text',\n INPUT_TEXTAREA: 'input_textarea',\n INPUT_EMAIL: 'input_email',\n INPUT_SELECT: 'input_select',\n CARDS: 'cards',\n FORM: 'form',\n ARTICLE: 'article',\n INCOMING_EMAIL: 'incoming_email',\n INPUT_CSAT: 'input_csat',\n INTEGRATIONS: 'integrations',\n STICKER: 'sticker',\n};\n\nexport const MEDIA_TYPES = [\n ATTACHMENT_TYPES.IMAGE,\n ATTACHMENT_TYPES.VIDEO,\n ATTACHMENT_TYPES.AUDIO,\n ATTACHMENT_TYPES.IG_REEL,\n];\n","import { inject, provide, computed } from 'vue';\nimport { useMapGetter } from 'dashboard/composables/store';\nimport { useSnakeCase } from 'dashboard/composables/useTransformKeys';\nimport { ATTACHMENT_TYPES } from './constants';\n\nconst MessageControl = Symbol('MessageControl');\n\n/**\n * @typedef {Object} Attachment\n * @property {number} id - Unique identifier for the attachment\n * @property {number} messageId - ID of the associated message\n * @property {'image'|'audio'|'video'|'file'|'location'|'fallback'|'share'|'story_mention'|'contact'|'ig_reel'} fileType - Type of the attachment (file or image)\n * @property {number} accountId - ID of the associated account\n * @property {string|null} extension - File extension\n * @property {string} dataUrl - URL to access the full attachment data\n * @property {string} thumbUrl - URL to access the thumbnail version\n * @property {number} fileSize - Size of the file in bytes\n * @property {number|null} width - Width of the image if applicable\n * @property {number|null} height - Height of the image if applicable\n */\n\n/**\n * @typedef {Object} Sender\n * @property {Object} additional_attributes - Additional attributes of the sender\n * @property {Object} custom_attributes - Custom attributes of the sender\n * @property {string} email - Email of the sender\n * @property {number} id - ID of the sender\n * @property {string|null} identifier - Identifier of the sender\n * @property {string} name - Name of the sender\n * @property {string|null} phone_number - Phone number of the sender\n * @property {string} thumbnail - Thumbnail URL of the sender\n * @property {string} type - Type of sender\n */\n\n/**\n * @typedef {Object} EmailContent\n * @property {string[]|null} bcc - BCC recipients\n * @property {string[]|null} cc - CC recipients\n * @property {string} contentType - Content type of the email\n * @property {string} date - Date the email was sent\n * @property {string[]} from - From email address\n * @property {Object} htmlContent - HTML content of the email\n * @property {string} htmlContent.full - Full HTML content\n * @property {string} htmlContent.reply - Reply HTML content\n * @property {string} htmlContent.quoted - Quoted HTML content\n * @property {string|null} inReplyTo - Message ID being replied to\n * @property {string} messageId - Unique message identifier\n * @property {boolean} multipart - Whether the email is multipart\n * @property {number} numberOfAttachments - Number of attachments\n * @property {string} subject - Email subject line\n * @property {Object} textContent - Text content of the email\n * @property {string} textContent.full - Full text content\n * @property {string} textContent.reply - Reply text content\n * @property {string} textContent.quoted - Quoted text content\n * @property {string[]} to - To email addresses\n */\n\n/**\n * @typedef {Object} ContentAttributes\n * @property {string} externalError - an error message to be shown if the message failed to send\n * @property {Object} [data] - Optional data object containing roomName and messageId\n * @property {string} data.roomName - Name of the room\n * @property {string} data.messageId - ID of the message\n * @property {'story_mention'} [imageType] - Flag to indicate this is a story mention\n * @property {'dyte'} [type] - Flag to indicate this is a dyte call\n * @property {EmailContent} [email] - Email content and metadata\n * @property {string|null} [ccEmail] - CC email addresses\n * @property {string|null} [bccEmail] - BCC email addresses\n */\n\n/**\n * @typedef {'sent'|'delivered'|'read'|'failed'|'progress'} MessageStatus\n * @typedef {'text'|'input_text'|'input_textarea'|'input_email'|'input_select'|'cards'|'form'|'article'|'incoming_email'|'input_csat'|'integrations'|'sticker'} MessageContentType\n * @typedef {0|1|2|3} MessageType\n * @typedef {'contact'|'user'|'Contact'|'User'} SenderType\n * @typedef {'user'|'agent'|'activity'|'private'|'bot'|'error'|'template'|'email'|'unsupported'} MessageVariant\n * @typedef {'left'|'center'|'right'} MessageOrientation\n\n * @typedef {Object} MessageContext\n * @property {import('vue').Ref<string>} content - The message content\n * @property {import('vue').Ref<number>} conversationId - The ID of the conversation to which the message belongs\n * @property {import('vue').Ref<number>} createdAt - Timestamp when the message was created\n * @property {import('vue').Ref<number>} currentUserId - The ID of the current user\n * @property {import('vue').Ref<number>} id - The unique identifier for the message\n * @property {import('vue').Ref<number>} inboxId - The ID of the inbox to which the message belongs\n * @property {import('vue').Ref<boolean>} [groupWithNext=false] - Whether the message should be grouped with the next message\n * @property {import('vue').Ref<boolean>} [isEmailInbox=false] - Whether the message is from an email inbox\n * @property {import('vue').Ref<boolean>} [private=false] - Whether the message is private\n * @property {import('vue').Ref<number|null>} [senderId=null] - The ID of the sender\n * @property {import('vue').Ref<string|null>} [error=null] - Error message if the message failed to send\n * @property {import('vue').Ref<Attachment[]>} [attachments=[]] - The attachments associated with the message\n * @property {import('vue').Ref<ContentAttributes>} [contentAttributes={}] - Additional attributes of the message content\n * @property {import('vue').Ref<MessageContentType>} contentType - Content type of the message\n * @property {import('vue').Ref<MessageStatus>} status - The delivery status of the message\n * @property {import('vue').Ref<MessageType>} messageType - The type of message (must be one of MESSAGE_TYPES)\n * @property {import('vue').Ref<Object|null>} [inReplyTo=null] - The message to which this message is a reply\n * @property {import('vue').Ref<SenderType>} [senderType=null] - The type of the sender\n * @property {import('vue').Ref<Sender|null>} [sender=null] - The sender information\n * @property {import('vue').ComputedRef<MessageOrientation>} orientation - The visual variant of the message\n * @property {import('vue').ComputedRef<MessageVariant>} variant - The visual variant of the message\n * @property {import('vue').ComputedRef<boolean>} isMyMessage - Does the message belong to the current user\n * @property {import('vue').ComputedRef<boolean>} isPrivate - Proxy computed value for private\n * @property {import('vue').ComputedRef<boolean>} shouldGroupWithNext - Should group with the next message or not, it is differnt from groupWithNext, this has a bypass for a failed message\n */\n\n/**\n * Retrieves the message context from the parent Message component.\n * Must be used within a component that is a child of a Message component.\n *\n * @returns {MessageContext & { filteredCurrentChatAttachments: import('vue').ComputedRef<Attachment[]> }}\n * Message context object containing message properties and computed values\n * @throws {Error} If used outside of a Message component context\n */\nexport function useMessageContext() {\n const context = inject(MessageControl, null);\n if (context === null) {\n throw new Error(`Component is missing a parent <Message /> component.`);\n }\n\n const currentChatAttachments = useMapGetter('getSelectedChatAttachments');\n const filteredCurrentChatAttachments = computed(() => {\n const attachments = currentChatAttachments.value.filter(attachment =>\n [\n ATTACHMENT_TYPES.IMAGE,\n ATTACHMENT_TYPES.VIDEO,\n ATTACHMENT_TYPES.IG_REEL,\n ATTACHMENT_TYPES.AUDIO,\n ].includes(attachment.file_type)\n );\n\n return useSnakeCase(attachments);\n });\n\n return { ...context, filteredCurrentChatAttachments };\n}\n\nexport function provideMessageContext(context) {\n provide(MessageControl, context);\n}\n","<script setup>\nimport { computed, ref } from 'vue';\nimport { useIntervalFn } from '@vueuse/core';\nimport { useI18n } from 'vue-i18n';\nimport { MESSAGE_STATUS } from './constants';\n\nimport Icon from 'next/icon/Icon.vue';\n\nconst { status } = defineProps({\n status: {\n type: String,\n required: true,\n validator: value => Object.values(MESSAGE_STATUS).includes(value),\n },\n});\n\nconst { t } = useI18n();\n\nconst progresIconSequence = [\n 'i-lucide-clock-1',\n 'i-lucide-clock-2',\n 'i-lucide-clock-3',\n 'i-lucide-clock-4',\n 'i-lucide-clock-5',\n 'i-lucide-clock-6',\n 'i-lucide-clock-7',\n 'i-lucide-clock-8',\n 'i-lucide-clock-9',\n 'i-lucide-clock-10',\n 'i-lucide-clock-11',\n 'i-lucide-clock-12',\n];\n\nconst progessIcon = ref(progresIconSequence[0]);\n\nconst rotateIcon = () => {\n const currentIndex = progresIconSequence.indexOf(progessIcon.value);\n const nextIndex = (currentIndex + 1) % progresIconSequence.length;\n progessIcon.value = progresIconSequence[nextIndex];\n};\n\nuseIntervalFn(rotateIcon, 500, {\n immediate: status === MESSAGE_STATUS.PROGRESS,\n immediateCallback: false,\n});\n\nconst statusIcon = computed(() => {\n const statusIconMap = {\n [MESSAGE_STATUS.SENT]: 'i-lucide-check',\n [MESSAGE_STATUS.DELIVERED]: 'i-lucide-check-check',\n [MESSAGE_STATUS.READ]: 'i-lucide-check-check',\n };\n\n return statusIconMap[status];\n});\n\nconst statusColor = computed(() => {\n const statusIconMap = {\n [MESSAGE_STATUS.SENT]: 'text-n-slate-10',\n [MESSAGE_STATUS.DELIVERED]: 'text-n-slate-10',\n [MESSAGE_STATUS.READ]: 'text-[#7EB6FF]',\n };\n\n return statusIconMap[status];\n});\n\nconst tooltipText = computed(() => {\n const statusTextMap = {\n [MESSAGE_STATUS.SENT]: t('CHAT_LIST.SENT'),\n [MESSAGE_STATUS.DELIVERED]: t('CHAT_LIST.DELIVERED'),\n [MESSAGE_STATUS.READ]: t('CHAT_LIST.MESSAGE_READ'),\n [MESSAGE_STATUS.PROGRESS]: t('CHAT_LIST.SENDING'),\n };\n\n return statusTextMap[status];\n});\n</script>\n\n<template>\n <Icon\n v-if=\"status === MESSAGE_STATUS.PROGRESS\"\n v-tooltip.top-start=\"tooltipText\"\n :icon=\"progessIcon\"\n class=\"text-n-slate-10\"\n />\n <Icon\n v-else\n v-tooltip.top-start=\"tooltipText\"\n :icon=\"statusIcon\"\n :class=\"statusColor\"\n class=\"size-[14px]\"\n />\n</template>\n","import { computed } from 'vue';\nimport { useMapGetter } from 'dashboard/composables/store';\nimport { useCamelCase } from 'dashboard/composables/useTransformKeys';\nimport { INBOX_TYPES } from 'dashboard/helper/inbox';\n\nexport const INBOX_FEATURES = {\n REPLY_TO: 'replyTo',\n REPLY_TO_OUTGOING: 'replyToOutgoing',\n};\n\n// This is a single source of truth for inbox features\n// This is used to check if a feature is available for a particular inbox or not\nexport const INBOX_FEATURE_MAP = {\n [INBOX_FEATURES.REPLY_TO]: [\n INBOX_TYPES.FB,\n INBOX_TYPES.WEB,\n INBOX_TYPES.TWITTER,\n INBOX_TYPES.WHATSAPP,\n INBOX_TYPES.TELEGRAM,\n INBOX_TYPES.API,\n ],\n [INBOX_FEATURES.REPLY_TO_OUTGOING]: [\n INBOX_TYPES.WEB,\n INBOX_TYPES.TWITTER,\n INBOX_TYPES.WHATSAPP,\n INBOX_TYPES.TELEGRAM,\n INBOX_TYPES.API,\n ],\n};\n\n/**\n * Composable for handling macro-related functionality\n * @returns {Object} An object containing the getMacroDropdownValues function\n */\nexport const useInbox = () => {\n const currentChat = useMapGetter('getSelectedChat');\n const inboxGetter = useMapGetter('inboxes/getInboxById');\n\n const inbox = computed(() => {\n const inboxId = currentChat.value.inbox_id;\n\n return useCamelCase(inboxGetter.value(inboxId), { deep: true });\n });\n\n const channelType = computed(() => {\n return inbox.value.channelType;\n });\n\n const isAPIInbox = computed(() => {\n return channelType.value === INBOX_TYPES.API;\n });\n\n const isAFacebookInbox = computed(() => {\n return channelType.value === INBOX_TYPES.FB;\n });\n\n const isAWebWidgetInbox = computed(() => {\n return channelType.value === INBOX_TYPES.WEB;\n });\n\n const isATwilioChannel = computed(() => {\n return channelType.value === INBOX_TYPES.TWILIO;\n });\n\n const isALineChannel = computed(() => {\n return channelType.value === INBOX_TYPES.LINE;\n });\n\n const isAnEmailChannel = computed(() => {\n return channelType.value === INBOX_TYPES.EMAIL;\n });\n\n const isATelegramChannel = computed(() => {\n return channelType.value === INBOX_TYPES.TELEGRAM;\n });\n\n const whatsAppAPIProvider = computed(() => {\n return inbox.value.provider || '';\n });\n\n const isAMicrosoftInbox = computed(() => {\n return isAnEmailChannel.value && inbox.value.provider === 'microsoft';\n });\n\n const isAGoogleInbox = computed(() => {\n return isAnEmailChannel.value && inbox.value.provider === 'google';\n });\n\n const isATwilioSMSChannel = computed(() => {\n const { medium: medium = '' } = inbox.value;\n return isATwilioChannel.value && medium === 'sms';\n });\n\n const isASmsInbox = computed(() => {\n return channelType.value === INBOX_TYPES.SMS || isATwilioSMSChannel.value;\n });\n\n const isATwilioWhatsAppChannel = computed(() => {\n const { medium: medium = '' } = inbox.value;\n return isATwilioChannel.value && medium === 'whatsapp';\n });\n\n const isAWhatsAppCloudChannel = computed(() => {\n return (\n channelType.value === INBOX_TYPES.WHATSAPP &&\n whatsAppAPIProvider.value === 'whatsapp_cloud'\n );\n });\n\n const is360DialogWhatsAppChannel = computed(() => {\n return (\n channelType.value === INBOX_TYPES.WHATSAPP &&\n whatsAppAPIProvider.value === 'default'\n );\n });\n\n const isAWhatsAppChannel = computed(() => {\n return (\n channelType.value === INBOX_TYPES.WHATSAPP ||\n isATwilioWhatsAppChannel.value\n );\n });\n\n return {\n inbox,\n isAFacebookInbox,\n isALineChannel,\n isAPIInbox,\n isASmsInbox,\n isATelegramChannel,\n isATwilioChannel,\n isAWebWidgetInbox,\n isAWhatsAppChannel,\n isAMicrosoftInbox,\n isAGoogleInbox,\n isATwilioWhatsAppChannel,\n isAWhatsAppCloudChannel,\n is360DialogWhatsAppChannel,\n isAnEmailChannel,\n };\n};\n","<script setup>\nimport { computed } from 'vue';\nimport { messageTimestamp } from 'shared/helpers/timeHelper';\n\nimport MessageStatus from './MessageStatus.vue';\nimport Icon from 'next/icon/Icon.vue';\nimport { useInbox } from 'dashboard/composables/useInbox';\nimport { useMessageContext } from './provider.js';\n\nimport { MESSAGE_STATUS, MESSAGE_TYPES } from './constants';\n\nconst {\n isAFacebookInbox,\n isALineChannel,\n isAPIInbox,\n isASmsInbox,\n isATelegramChannel,\n isATwilioChannel,\n isAWebWidgetInbox,\n isAWhatsAppChannel,\n isAnEmailChannel,\n} = useInbox();\n\nconst { status, isPrivate, createdAt, sourceId, messageType } =\n useMessageContext();\n\nconst readableTime = computed(() =>\n messageTimestamp(createdAt.value, 'LLL d, h:mm a')\n);\n\nconst showStatusIndicator = computed(() => {\n if (isPrivate.value) return false;\n if (messageType.value === MESSAGE_TYPES.OUTGOING) return true;\n if (messageType.value === MESSAGE_TYPES.TEMPLATE) return true;\n\n return false;\n});\n\nconst isSent = computed(() => {\n if (!showStatusIndicator.value) return false;\n\n // Messages will be marked as sent for the Email channel if they have a source ID.\n if (isAnEmailChannel.value) return !!sourceId.value;\n\n if (\n isAWhatsAppChannel.value ||\n isATwilioChannel.value ||\n isAFacebookInbox.value ||\n isASmsInbox.value ||\n isATelegramChannel.value\n ) {\n return sourceId.value && status.value === MESSAGE_STATUS.SENT;\n }\n\n // All messages will be mark as sent for the Line channel, as there is no source ID.\n if (isALineChannel.value) return true;\n\n return false;\n});\n\nconst isDelivered = computed(() => {\n if (!showStatusIndicator.value) return false;\n\n if (\n isAWhatsAppChannel.value ||\n isATwilioChannel.value ||\n isASmsInbox.value ||\n isAFacebookInbox.value\n ) {\n return sourceId.value && status.value === MESSAGE_STATUS.DELIVERED;\n }\n // All messages marked as delivered for the web widget inbox and API inbox once they are sent.\n if (isAWebWidgetInbox.value || isAPIInbox.value) {\n return status.value === MESSAGE_STATUS.SENT;\n }\n if (isALineChannel.value) {\n return status.value === MESSAGE_STATUS.DELIVERED;\n }\n\n return false;\n});\n\nconst isRead = computed(() => {\n if (!showStatusIndicator.value) return false;\n\n if (\n isAWhatsAppChannel.value ||\n isATwilioChannel.value ||\n isAFacebookInbox.value\n ) {\n return sourceId.value && status.value === MESSAGE_STATUS.READ;\n }\n\n if (isAWebWidgetInbox.value || isAPIInbox.value) {\n return status.value === MESSAGE_STATUS.READ;\n }\n\n return false;\n});\n\nconst statusToShow = computed(() => {\n if (isRead.value) return MESSAGE_STATUS.READ;\n if (isDelivered.value) return MESSAGE_STATUS.DELIVERED;\n if (isSent.value) return MESSAGE_STATUS.SENT;\n if (status.value === MESSAGE_STATUS.FAILED) return MESSAGE_STATUS.FAILED;\n\n return MESSAGE_STATUS.PROGRESS;\n});\n</script>\n\n<template>\n <div class=\"text-xs flex items-center gap-1.5\">\n <div class=\"inline\">\n <time class=\"inline\">{{ readableTime }}</time>\n </div>\n <Icon v-if=\"isPrivate\" icon=\"i-lucide-lock-keyhole\" class=\"size-3\" />\n <MessageStatus v-if=\"showStatusIndicator\" :status=\"statusToShow\" />\n </div>\n</template>\n`\n","<script setup>\nimport { computed } from 'vue';\n\nimport MessageMeta from '../MessageMeta.vue';\n\nimport { emitter } from 'shared/helpers/mitt';\nimport { useMessageContext } from '../provider.js';\nimport { useI18n } from 'vue-i18n';\n\nimport { BUS_EVENTS } from 'shared/constants/busEvents';\nimport { MESSAGE_VARIANTS, ORIENTATION } from '../constants';\n\nconst { variant, orientation, inReplyTo, shouldGroupWithNext } =\n useMessageContext();\nconst { t } = useI18n();\n\nconst varaintBaseMap = {\n [MESSAGE_VARIANTS.AGENT]: 'bg-n-solid-blue text-n-slate-12',\n [MESSAGE_VARIANTS.PRIVATE]:\n 'bg-n-solid-amber text-n-amber-12 [&_.prosemirror-mention-node]:font-semibold',\n [MESSAGE_VARIANTS.USER]: 'bg-n-slate-4 text-n-slate-12',\n [MESSAGE_VARIANTS.ACTIVITY]: 'bg-n-alpha-1 text-n-slate-11 text-sm',\n [MESSAGE_VARIANTS.BOT]: 'bg-n-solid-iris text-n-slate-12',\n [MESSAGE_VARIANTS.TEMPLATE]: 'bg-n-solid-iris text-n-slate-12',\n [MESSAGE_VARIANTS.ERROR]: 'bg-n-ruby-4 text-n-ruby-12',\n [MESSAGE_VARIANTS.EMAIL]: 'w-full',\n [MESSAGE_VARIANTS.UNSUPPORTED]:\n 'bg-n-solid-amber/70 border border-dashed border-n-amber-12 text-n-amber-12',\n};\n\nconst orientationMap = {\n [ORIENTATION.LEFT]:\n 'left-bubble rounded-xl ltr:rounded-bl-sm rtl:rounded-br-sm',\n [ORIENTATION.RIGHT]:\n 'right-bubble rounded-xl ltr:rounded-br-sm rtl:rounded-bl-sm',\n [ORIENTATION.CENTER]: 'rounded-md',\n};\n\nconst flexOrientationClass = computed(() => {\n const map = {\n [ORIENTATION.LEFT]: 'justify-start',\n [ORIENTATION.RIGHT]: 'justify-end',\n [ORIENTATION.CENTER]: 'justify-center',\n };\n\n return map[orientation.value];\n});\n\nconst messageClass = computed(() => {\n const classToApply = [varaintBaseMap[variant.value]];\n\n if (variant.value !== MESSAGE_VARIANTS.ACTIVITY) {\n classToApply.push(orientationMap[orientation.value]);\n } else {\n classToApply.push('rounded-lg');\n }\n\n return classToApply;\n});\n\nconst scrollToMessage = () => {\n emitter.emit(BUS_EVENTS.SCROLL_TO_MESSAGE, {\n messageId: inReplyTo.value.id,\n });\n};\n\nconst replyToPreview = computed(() => {\n if (!inReplyTo) return '';\n\n const { content, attachments } = inReplyTo.value;\n\n if (content) return content;\n if (attachments?.length) {\n const firstAttachment = attachments[0];\n const fileType = firstAttachment.fileType ?? firstAttachment.file_type;\n\n return t(`CHAT_LIST.ATTACHMENTS.${fileType}.CONTENT`);\n }\n\n return t('CONVERSATION.REPLY_MESSAGE_NOT_FOUND');\n});\n</script>\n\n<template>\n <div\n class=\"text-sm\"\n :class=\"[\n messageClass,\n {\n 'max-w-lg': variant !== MESSAGE_VARIANTS.EMAIL,\n },\n ]\"\n >\n <div\n v-if=\"inReplyTo\"\n class=\"bg-n-alpha-black1 rounded-lg p-2 -mx-1 mb-2 cursor-pointer\"\n @click=\"scrollToMessage\"\n >\n <span class=\"line-clamp-2 break-all\">\n {{ replyToPreview }}\n </span>\n </div>\n <slot />\n <MessageMeta\n v-if=\"!shouldGroupWithNext && variant !== MESSAGE_VARIANTS.ACTIVITY\"\n :class=\"[\n flexOrientationClass,\n variant === MESSAGE_VARIANTS.EMAIL ? 'px-3 pb-3' : '',\n variant === MESSAGE_VARIANTS.PRIVATE\n ? 'text-n-amber-12/50'\n : 'text-n-slate-11',\n ]\"\n class=\"mt-2\"\n />\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useMessageContext } from '../../provider.js';\n\nimport MessageFormatter from 'shared/helpers/MessageFormatter.js';\nimport { MESSAGE_VARIANTS } from '../../constants';\n\nconst props = defineProps({\n content: {\n type: String,\n required: true,\n },\n});\n\nconst { variant } = useMessageContext();\n\nconst formattedContent = computed(() => {\n if (variant.value === MESSAGE_VARIANTS.ACTIVITY) {\n return props.content;\n }\n\n return new MessageFormatter(props.content).formattedMessage;\n});\n</script>\n\n<template>\n <span v-dompurify-html=\"formattedContent\" class=\"prose prose-bubble\" />\n</template>\n","<script setup>\nimport { ref } from 'vue';\nimport Icon from 'next/icon/Icon.vue';\nimport { useSnakeCase } from 'dashboard/composables/useTransformKeys';\nimport { useMessageContext } from '../provider.js';\n\nimport GalleryView from 'dashboard/components/widgets/conversation/components/GalleryView.vue';\n\ndefineProps({\n attachment: {\n type: Object,\n required: true,\n },\n});\nconst hasError = ref(false);\nconst showGallery = ref(false);\n\nconst { filteredCurrentChatAttachments } = useMessageContext();\n\nconst handleError = () => {\n hasError.value = true;\n};\n</script>\n\n<template>\n <div\n class=\"size-[72px] overflow-hidden contain-content rounded-xl cursor-pointer\"\n @click=\"showGallery = true\"\n >\n <div\n v-if=\"hasError\"\n class=\"flex flex-col items-center justify-center gap-1 text-xs text-center rounded-lg size-full bg-n-alpha-1 text-n-slate-11\"\n >\n <Icon icon=\"i-lucide-circle-off\" class=\"text-n-slate-11\" />\n {{ $t('COMPONENTS.MEDIA.LOADING_FAILED') }}\n </div>\n <img\n v-else\n class=\"object-cover w-full h-full skip-context-menu\"\n :src=\"attachment.dataUrl\"\n @error=\"handleError\"\n />\n </div>\n <GalleryView\n v-if=\"showGallery\"\n v-model:show=\"showGallery\"\n :attachment=\"useSnakeCase(attachment)\"\n :all-attachments=\"filteredCurrentChatAttachments\"\n @error=\"handleError\"\n @close=\"() => (showGallery = false)\"\n />\n</template>\n","<script setup>\nimport { ref } from 'vue';\nimport Icon from 'next/icon/Icon.vue';\nimport { useSnakeCase } from 'dashboard/composables/useTransformKeys';\nimport { useMessageContext } from '../provider.js';\nimport GalleryView from 'dashboard/components/widgets/conversation/components/GalleryView.vue';\n\ndefineProps({\n attachment: {\n type: Object,\n required: true,\n },\n});\n\nconst showGallery = ref(false);\n\nconst { filteredCurrentChatAttachments } = useMessageContext();\n</script>\n\n<template>\n <div\n class=\"size-[72px] overflow-hidden contain-content rounded-xl cursor-pointer relative group\"\n @click=\"showGallery = true\"\n >\n <video\n :src=\"attachment.dataUrl\"\n class=\"w-full h-full object-cover\"\n muted\n playsInline\n />\n <div\n class=\"absolute w-full h-full inset-0 p-1 flex items-center justify-center\"\n >\n <div\n class=\"size-7 bg-n-slate-1/60 backdrop-blur-sm rounded-full overflow-hidden shadow-[0_5px_15px_rgba(0,0,0,0.4)]\"\n >\n <Icon\n icon=\"i-teenyicons-play-small-solid\"\n class=\"size-7 text-n-slate-12/80 backdrop-blur\"\n />\n </div>\n </div>\n </div>\n <GalleryView\n v-if=\"showGallery\"\n v-model:show=\"showGallery\"\n :attachment=\"useSnakeCase(attachment)\"\n :all-attachments=\"filteredCurrentChatAttachments\"\n @error=\"onError\"\n @close=\"() => (showGallery = false)\"\n />\n</template>\n","<script setup>\nimport { computed, onMounted, useTemplateRef, ref } from 'vue';\nimport Icon from 'next/icon/Icon.vue';\nimport { timeStampAppendedURL } from 'dashboard/helper/URLHelper';\nimport { downloadFile } from '@chatwoot/utils';\n\nconst { attachment } = defineProps({\n attachment: {\n type: Object,\n required: true,\n },\n});\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst timeStampURL = computed(() => {\n return timeStampAppendedURL(attachment.dataUrl);\n});\n\nconst audioPlayer = useTemplateRef('audioPlayer');\n\nconst isPlaying = ref(false);\nconst isMuted = ref(false);\nconst currentTime = ref(0);\nconst duration = ref(0);\nconst playbackSpeed = ref(1);\n\nconst onLoadedMetadata = () => {\n duration.value = audioPlayer.value?.duration;\n};\n\nconst playbackSpeedLabel = computed(() => {\n return `${playbackSpeed.value}x`;\n});\n\n// There maybe a chance that the audioPlayer ref is not available\n// When the onLoadMetadata is called, so we need to set the duration\n// value when the component is mounted\nonMounted(() => {\n duration.value = audioPlayer.value?.duration;\n audioPlayer.value.playbackRate = playbackSpeed.value;\n});\n\nconst formatTime = time => {\n if (!time || Number.isNaN(time)) return '00:00';\n const minutes = Math.floor(time / 60);\n const seconds = Math.floor(time % 60);\n return `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n};\n\nconst toggleMute = () => {\n audioPlayer.value.muted = !audioPlayer.value.muted;\n isMuted.value = audioPlayer.value.muted;\n};\n\nconst onTimeUpdate = () => {\n currentTime.value = audioPlayer.value?.currentTime;\n};\n\nconst seek = event => {\n const time = Number(event.target.value);\n audioPlayer.value.currentTime = time;\n currentTime.value = time;\n};\n\nconst playOrPause = () => {\n if (isPlaying.value) {\n audioPlayer.value.pause();\n isPlaying.value = false;\n } else {\n audioPlayer.value.play();\n isPlaying.value = true;\n }\n};\n\nconst onEnd = () => {\n isPlaying.value = false;\n currentTime.value = 0;\n playbackSpeed.value = 1;\n audioPlayer.value.playbackRate = 1;\n};\n\nconst changePlaybackSpeed = () => {\n const speeds = [1, 1.5, 2];\n const currentIndex = speeds.indexOf(playbackSpeed.value);\n const nextIndex = (currentIndex + 1) % speeds.length;\n playbackSpeed.value = speeds[nextIndex];\n audioPlayer.value.playbackRate = playbackSpeed.value;\n};\n\nconst downloadAudio = async () => {\n const { fileType, dataUrl, extension } = attachment;\n downloadFile({ url: dataUrl, type: fileType, extension });\n};\n</script>\n\n<template>\n <audio\n ref=\"audioPlayer\"\n controls\n class=\"hidden\"\n @loadedmetadata=\"onLoadedMetadata\"\n @timeupdate=\"onTimeUpdate\"\n @ended=\"onEnd\"\n >\n <source :src=\"timeStampURL\" />\n </audio>\n <div\n v-bind=\"$attrs\"\n class=\"rounded-xl w-full gap-1 p-1.5 bg-n-alpha-white flex items-center border border-n-container shadow-[0px_2px_8px_0px_rgba(94,94,94,0.06)]\"\n >\n <button class=\"p-0 border-0 size-8\" @click=\"playOrPause\">\n <Icon\n v-if=\"isPlaying\"\n class=\"size-8\"\n icon=\"i-teenyicons-pause-small-solid\"\n />\n <Icon v-else class=\"size-8\" icon=\"i-teenyicons-play-small-solid\" />\n </button>\n <div class=\"tabular-nums text-xs\">\n {{ formatTime(currentTime) }} / {{ formatTime(duration) }}\n </div>\n <div class=\"flex-1 items-center flex px-2\">\n <input\n type=\"range\"\n min=\"0\"\n :max=\"duration\"\n :value=\"currentTime\"\n class=\"w-full h-1 bg-n-slate-12/40 rounded-lg appearance-none cursor-pointer accent-current\"\n @input=\"seek\"\n />\n </div>\n <button\n class=\"border-0 w-10 h-6 grid place-content-center bg-n-alpha-2 hover:bg-alpha-3 rounded-2xl\"\n @click=\"changePlaybackSpeed\"\n >\n <span class=\"text-xs text-n-slate-11 font-medium\">\n {{ playbackSpeedLabel }}\n </span>\n </button>\n <button\n class=\"p-0 border-0 size-8 grid place-content-center\"\n @click=\"toggleMute\"\n >\n <Icon v-if=\"isMuted\" class=\"size-4\" icon=\"i-lucide-volume-off\" />\n <Icon v-else class=\"size-4\" icon=\"i-lucide-volume-2\" />\n </button>\n <button\n class=\"p-0 border-0 size-8 grid place-content-center\"\n @click=\"downloadAudio\"\n >\n <Icon class=\"size-4\" icon=\"i-lucide-download\" />\n </button>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport Icon from 'next/icon/Icon.vue';\n\nconst { fileType } = defineProps({\n fileType: {\n type: String,\n required: true,\n },\n});\n\nconst fileTypeIcon = computed(() => {\n const fileIconMap = {\n '7z': 'i-woot-file-zip',\n csv: 'i-woot-file-csv',\n doc: 'i-woot-file-doc',\n docx: 'i-woot-file-doc',\n json: 'i-woot-file-txt',\n odt: 'i-woot-file-doc',\n pdf: 'i-woot-file-pdf',\n ppt: 'i-woot-file-ppt',\n pptx: 'i-woot-file-ppt',\n rar: 'i-woot-file-zip',\n rtf: 'i-woot-file-doc',\n tar: 'i-woot-file-zip',\n txt: 'i-woot-file-txt',\n xls: 'i-woot-file-xls',\n xlsx: 'i-woot-file-xls',\n zip: 'i-woot-file-zip',\n };\n\n return fileIconMap[fileType] || 'i-teenyicons-text-document-solid';\n});\n</script>\n\n<template>\n <Icon :icon=\"fileTypeIcon\" />\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { getFileInfo } from '@chatwoot/utils';\n\nimport FileIcon from 'next/icon/FileIcon.vue';\nimport Icon from 'next/icon/Icon.vue';\n\nconst { attachment } = defineProps({\n attachment: {\n type: Object,\n required: true,\n },\n});\n\nconst { t } = useI18n();\n\nconst fileDetails = computed(() => {\n return getFileInfo(attachment?.dataUrl || '');\n});\n\nconst displayFileName = computed(() => {\n const { base, type } = fileDetails.value;\n const truncatedName = (str, maxLength, hasExt) =>\n str.length > maxLength\n ? `${str.substring(0, maxLength).trimEnd()}${hasExt ? '..' : '...'}`\n : str;\n\n return type\n ? `${truncatedName(base, 12, true)}.${type}`\n : truncatedName(base, 14, false);\n});\n\nconst textColorClass = computed(() => {\n const colorMap = {\n '7z': 'dark:text-[#EDEEF0] text-[#2F265F]',\n csv: 'text-amber-12',\n doc: 'dark:text-[#D6E1FF] text-[#1F2D5C]', // indigo-12\n docx: 'dark:text-[#D6E1FF] text-[#1F2D5C]', // indigo-12\n json: 'text-n-slate-12',\n odt: 'dark:text-[#D6E1FF] text-[#1F2D5C]', // indigo-12\n pdf: 'text-n-ruby-12',\n ppt: 'dark:text-[#FFE0C2] text-[#582D1D]',\n pptx: 'dark:text-[#FFE0C2] text-[#582D1D]',\n rar: 'dark:text-[#EDEEF0] text-[#2F265F]',\n rtf: 'dark:text-[#D6E1FF] text-[#1F2D5C]', // indigo-12\n tar: 'dark:text-[#EDEEF0] text-[#2F265F]',\n txt: 'text-n-slate-12',\n xls: 'text-n-teal-12',\n xlsx: 'text-n-teal-12',\n zip: 'dark:text-[#EDEEF0] text-[#2F265F]',\n };\n\n return colorMap[fileDetails.value.type] || 'text-n-slate-12';\n});\n</script>\n\n<template>\n <div\n class=\"h-9 bg-n-alpha-white gap-2 overflow-hidden items-center flex px-2 rounded-lg border border-n-container\"\n >\n <FileIcon class=\"flex-shrink-0\" :file-type=\"fileDetails.type\" />\n <span\n class=\"flex-1 min-w-0 text-sm max-w-36\"\n :title=\"fileDetails.name\"\n :class=\"textColorClass\"\n >\n {{ displayFileName }}\n </span>\n <a\n v-tooltip=\"t('CONVERSATION.DOWNLOAD')\"\n class=\"flex-shrink-0 size-9 grid place-content-center cursor-pointer text-n-slate-11 hover:text-n-slate-12 transition-colors\"\n :href=\"attachment.dataUrl\"\n rel=\"noreferrer noopener nofollow\"\n target=\"_blank\"\n >\n <Icon icon=\"i-lucide-download\" />\n </a>\n </div>\n</template>\n","<script setup>\nimport { computed, defineOptions, useAttrs } from 'vue';\n\nimport ImageChip from 'next/message/chips/Image.vue';\nimport VideoChip from 'next/message/chips/Video.vue';\nimport AudioChip from 'next/message/chips/Audio.vue';\nimport FileChip from 'next/message/chips/File.vue';\nimport { useMessageContext } from '../provider.js';\n\nimport { ATTACHMENT_TYPES } from '../constants';\n\n/**\n * @typedef {Object} Attachment\n * @property {number} id - Unique identifier for the attachment\n * @property {number} messageId - ID of the associated message\n * @property {'image'|'audio'|'video'|'file'|'location'|'fallback'|'share'|'story_mention'|'contact'|'ig_reel'} fileType - Type of the attachment (file or image)\n * @property {number} accountId - ID of the associated account\n * @property {string|null} extension - File extension\n * @property {string} dataUrl - URL to access the full attachment data\n * @property {string} thumbUrl - URL to access the thumbnail version\n * @property {number} fileSize - Size of the file in bytes\n * @property {number|null} width - Width of the image if applicable\n * @property {number|null} height - Height of the image if applicable\n */\nconst props = defineProps({\n attachments: {\n type: Array,\n default: () => [],\n },\n});\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst attrs = useAttrs();\nconst { orientation } = useMessageContext();\n\nconst classToApply = computed(() => {\n const baseClasses = [attrs.class, 'flex', 'flex-wrap'];\n\n if (orientation.value === 'right') {\n baseClasses.push('justify-end');\n }\n\n return baseClasses;\n});\n\nconst allAttachments = computed(() => {\n return Array.isArray(props.attachments) ? props.attachments : [];\n});\n\nconst mediaAttachments = computed(() => {\n const allowedTypes = [ATTACHMENT_TYPES.IMAGE, ATTACHMENT_TYPES.VIDEO];\n const mediaTypes = allAttachments.value.filter(attachment =>\n allowedTypes.includes(attachment.fileType)\n );\n\n return mediaTypes.sort(\n (a, b) =>\n allowedTypes.indexOf(a.fileType) - allowedTypes.indexOf(b.fileType)\n );\n});\n\nconst recordings = computed(() => {\n return allAttachments.value.filter(\n attachment => attachment.fileType === ATTACHMENT_TYPES.AUDIO\n );\n});\n\nconst files = computed(() => {\n return allAttachments.value.filter(\n attachment => attachment.fileType === ATTACHMENT_TYPES.FILE\n );\n});\n</script>\n\n<template>\n <div v-if=\"mediaAttachments.length\" :class=\"classToApply\">\n <template v-for=\"attachment in mediaAttachments\" :key=\"attachment.id\">\n <ImageChip\n v-if=\"attachment.fileType === ATTACHMENT_TYPES.IMAGE\"\n :attachment=\"attachment\"\n />\n <VideoChip\n v-else-if=\"attachment.fileType === ATTACHMENT_TYPES.VIDEO\"\n :attachment=\"attachment\"\n />\n </template>\n </div>\n <div v-if=\"recordings.length\" :class=\"classToApply\">\n <div v-for=\"attachment in recordings\" :key=\"attachment.id\">\n <AudioChip\n class=\"bg-n-alpha-3 dark:bg-n-alpha-2 text-n-slate-12\"\n :attachment=\"attachment\"\n />\n </div>\n </div>\n <div v-if=\"files.length\" :class=\"classToApply\">\n <FileChip\n v-for=\"attachment in files\"\n :key=\"attachment.id\"\n :attachment=\"attachment\"\n />\n </div>\n</template>\n","<script setup>\nimport { computed, ref } from 'vue';\nimport BaseBubble from 'next/message/bubbles/Base.vue';\nimport FormattedContent from './FormattedContent.vue';\nimport AttachmentChips from 'next/message/chips/AttachmentChips.vue';\nimport { MESSAGE_TYPES } from '../../constants';\nimport { useMessageContext } from '../../provider.js';\n\nconst { content, attachments, contentAttributes, messageType } =\n useMessageContext();\n\nconst hasTranslations = computed(() => {\n const { translations = {} } = contentAttributes.value;\n return Object.keys(translations || {}).length > 0;\n});\n\nconst renderOriginal = ref(false);\n\nconst renderContent = computed(() => {\n if (renderOriginal.value) {\n return content.value;\n }\n\n if (hasTranslations.value) {\n const translations = contentAttributes.value.translations;\n return translations[Object.keys(translations)[0]];\n }\n\n return content.value;\n});\n\nconst isTemplate = computed(() => {\n return messageType.value === MESSAGE_TYPES.TEMPLATE;\n});\n\nconst isEmpty = computed(() => {\n return !content.value && !attachments.value?.length;\n});\n\nconst viewToggleKey = computed(() => {\n return renderOriginal.value\n ? 'CONVERSATION.VIEW_TRANSLATED'\n : 'CONVERSATION.VIEW_ORIGINAL';\n});\n\nconst handleSeeOriginal = () => {\n renderOriginal.value = !renderOriginal.value;\n};\n</script>\n\n<template>\n <BaseBubble class=\"px-4 py-3\" data-bubble-name=\"text\">\n <div class=\"gap-3 flex flex-col\">\n <span v-if=\"isEmpty\" class=\"text-n-slate-11\">\n {{ $t('CONVERSATION.NO_CONTENT') }}\n </span>\n <FormattedContent v-if=\"renderContent\" :content=\"renderContent\" />\n <span class=\"-mt-3\">\n <span\n v-if=\"hasTranslations\"\n class=\"text-xs text-n-slate-11 cursor-pointer hover:underline\"\n @click=\"handleSeeOriginal\"\n >\n {{ $t(viewToggleKey) }}\n </span>\n </span>\n <AttachmentChips :attachments=\"attachments\" class=\"gap-2\" />\n <template v-if=\"isTemplate\">\n <div\n v-if=\"contentAttributes.submittedEmail\"\n class=\"px-2 py-1 rounded-lg bg-n-alpha-3\"\n >\n {{ contentAttributes.submittedEmail }}\n </div>\n </template>\n </div>\n </BaseBubble>\n</template>\n\n<style>\np:last-child {\n margin-bottom: 0;\n}\n</style>\n","<script setup>\nimport { computed } from 'vue';\nimport { messageTimestamp } from 'shared/helpers/timeHelper';\nimport BaseBubble from './Base.vue';\nimport { useMessageContext } from '../provider.js';\n\nconst { content, createdAt } = useMessageContext();\n\nconst readableTime = computed(() =>\n messageTimestamp(createdAt.value, 'LLL d, h:mm a')\n);\n</script>\n\n<template>\n <BaseBubble\n v-tooltip.top=\"readableTime\"\n class=\"px-2 py-0.5 !rounded-full flex min-w-0 items-center gap-2\"\n data-bubble-name=\"activity\"\n >\n <span v-dompurify-html=\"content\" :title=\"content\" />\n </BaseBubble>\n</template>\n","<script setup>\nimport { ref, computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useAlert } from 'dashboard/composables';\nimport BaseBubble from './Base.vue';\nimport Button from 'next/button/Button.vue';\nimport Icon from 'next/icon/Icon.vue';\nimport { useSnakeCase } from 'dashboard/composables/useTransformKeys';\nimport { useMessageContext } from '../provider.js';\nimport { downloadFile } from '@chatwoot/utils';\n\nimport GalleryView from 'dashboard/components/widgets/conversation/components/GalleryView.vue';\n\nconst emit = defineEmits(['error']);\nconst { t } = useI18n();\n\nconst { filteredCurrentChatAttachments, attachments } = useMessageContext();\n\nconst attachment = computed(() => {\n return attachments.value[0];\n});\n\nconst hasError = ref(false);\nconst showGallery = ref(false);\nconst isDownloading = ref(false);\n\nconst handleError = () => {\n hasError.value = true;\n emit('error');\n};\n\nconst downloadAttachment = async () => {\n const { fileType, dataUrl, extension } = attachment.value;\n try {\n isDownloading.value = true;\n await downloadFile({ url: dataUrl, type: fileType, extension });\n } catch (error) {\n useAlert(t('GALLERY_VIEW.ERROR_DOWNLOADING'));\n } finally {\n isDownloading.value = false;\n }\n};\n</script>\n\n<template>\n <BaseBubble\n class=\"overflow-hidden p-3\"\n data-bubble-name=\"image\"\n @click=\"showGallery = true\"\n >\n <div v-if=\"hasError\" class=\"flex items-center gap-1 text-center rounded-lg\">\n <Icon icon=\"i-lucide-circle-off\" class=\"text-n-slate-11\" />\n <p class=\"mb-0 text-n-slate-11\">\n {{ $t('COMPONENTS.MEDIA.IMAGE_UNAVAILABLE') }}\n </p>\n </div>\n <div v-else class=\"relative group rounded-lg overflow-hidden\">\n <img\n class=\"skip-context-menu\"\n :src=\"attachment.dataUrl\"\n :width=\"attachment.width\"\n :height=\"attachment.height\"\n @click=\"onClick\"\n @error=\"handleError\"\n />\n <div\n class=\"inset-0 p-2 pointer-events-none absolute bg-gradient-to-tl from-n-slate-12/30 dark:from-n-slate-1/50 via-transparent to-transparent hidden group-hover:flex\"\n />\n <div class=\"absolute right-2 bottom-2 hidden group-hover:flex gap-2\">\n <Button xs solid slate icon=\"i-lucide-expand\" class=\"opacity-60\" />\n <Button\n xs\n solid\n slate\n icon=\"i-lucide-download\"\n class=\"opacity-60\"\n :is-loading=\"isDownloading\"\n :disabled=\"isDownloading\"\n @click.stop=\"downloadAttachment\"\n />\n </div>\n </div>\n </BaseBubble>\n <GalleryView\n v-if=\"showGallery\"\n v-model:show=\"showGallery\"\n :attachment=\"useSnakeCase(attachment)\"\n :all-attachments=\"filteredCurrentChatAttachments\"\n @error=\"handleError\"\n @close=\"() => (showGallery = false)\"\n />\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport BaseBubble from './Base.vue';\nimport Icon from 'next/icon/Icon.vue';\nimport { useMessageContext } from '../provider.js';\n\ndefineProps({\n icon: { type: [String, Object], required: true },\n iconBgColor: { type: String, default: 'bg-n-alpha-3' },\n senderTranslationKey: { type: String, required: true },\n content: { type: String, required: true },\n title: { type: String, default: '' }, // Title can be any name, description, etc\n action: {\n type: Object,\n required: true,\n validator: action => {\n return action.label && (action.href || action.onClick);\n },\n },\n});\n\nconst { sender } = useMessageContext();\nconst { t } = useI18n();\n\nconst senderName = computed(() => {\n return sender?.value?.name || '';\n});\n</script>\n\n<template>\n <BaseBubble class=\"overflow-hidden p-3\" data-bubble-name=\"attachment\">\n <div class=\"grid gap-4 min-w-64\">\n <div class=\"grid gap-3\">\n <div\n class=\"size-8 rounded-lg grid place-content-center\"\n :class=\"iconBgColor\"\n >\n <slot name=\"icon\">\n <Icon :icon=\"icon\" class=\"text-white size-4\" />\n </slot>\n </div>\n <div class=\"space-y-1\">\n <div v-if=\"senderName\" class=\"text-n-slate-12 text-sm truncate\">\n {{\n t(senderTranslationKey, {\n sender: senderName,\n })\n }}\n </div>\n <slot>\n <div v-if=\"title\" class=\"truncate text-sm text-n-slate-12\">\n {{ title }}\n </div>\n <div v-if=\"content\" class=\"truncate text-sm text-n-slate-11\">\n {{ content }}\n </div>\n </slot>\n </div>\n </div>\n <div v-if=\"action\" class=\"mb-2\">\n <a\n v-if=\"action.href\"\n :href=\"action.href\"\n rel=\"noreferrer noopener nofollow\"\n target=\"_blank\"\n class=\"w-full block bg-n-solid-3 px-4 py-2 rounded-lg text-sm text-center border border-n-container\"\n >\n {{ action.label }}\n </a>\n <button\n v-else\n class=\"w-full bg-n-solid-3 px-4 py-2 rounded-lg text-sm text-center border border-n-container\"\n @click=\"action.onClick\"\n >\n {{ action.label }}\n </button>\n </div>\n </div>\n </BaseBubble>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nimport { useMessageContext } from '../provider.js';\nimport BaseAttachmentBubble from './BaseAttachment.vue';\nimport FileIcon from 'next/icon/FileIcon.vue';\n\nconst { attachments } = useMessageContext();\n\nconst { t } = useI18n();\n\nconst url = computed(() => {\n return attachments.value[0].dataUrl;\n});\n\nconst fileName = computed(() => {\n if (url.value) {\n const filename = url.value.substring(url.value.lastIndexOf('/') + 1);\n return filename || t('CONVERSATION.UNKNOWN_FILE_TYPE');\n }\n return t('CONVERSATION.UNKNOWN_FILE_TYPE');\n});\n\nconst fileType = computed(() => {\n return fileName.value.split('.').pop();\n});\n</script>\n\n<template>\n <BaseAttachmentBubble\n icon=\"i-teenyicons-user-circle-solid\"\n icon-bg-color=\"bg-n-alpha-3 dark:bg-n-alpha-white\"\n sender-translation-key=\"CONVERSATION.SHARED_ATTACHMENT.FILE\"\n :content=\"decodeURI(fileName)\"\n :action=\"{\n href: url,\n label: $t('CONVERSATION.DOWNLOAD'),\n }\"\n >\n <template #icon>\n <FileIcon :file-type=\"fileType\" class=\"size-4\" />\n </template>\n </BaseAttachmentBubble>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport BaseBubble from './Base.vue';\nimport AudioChip from 'next/message/chips/Audio.vue';\nimport { useMessageContext } from '../provider.js';\n\nconst { attachments } = useMessageContext();\n\nconst attachment = computed(() => {\n return attachments.value[0];\n});\n</script>\n\n<template>\n <BaseBubble class=\"bg-transparent\" data-bubble-name=\"audio\">\n <AudioChip\n :attachment=\"attachment\"\n class=\"p-2 text-n-slate-12 skip-context-menu\"\n />\n </BaseBubble>\n</template>\n","<script setup>\nimport { ref, computed } from 'vue';\nimport BaseBubble from './Base.vue';\nimport Icon from 'next/icon/Icon.vue';\nimport { useSnakeCase } from 'dashboard/composables/useTransformKeys';\nimport { useMessageContext } from '../provider.js';\nimport GalleryView from 'dashboard/components/widgets/conversation/components/GalleryView.vue';\nimport { ATTACHMENT_TYPES } from '../constants';\n\nconst emit = defineEmits(['error']);\nconst hasError = ref(false);\nconst showGallery = ref(false);\nconst { filteredCurrentChatAttachments, attachments } = useMessageContext();\n\nconst handleError = () => {\n hasError.value = true;\n emit('error');\n};\n\nconst attachment = computed(() => {\n return attachments.value[0];\n});\n\nconst isReel = computed(() => {\n return attachment.value.fileType === ATTACHMENT_TYPES.IG_REEL;\n});\n</script>\n\n<template>\n <BaseBubble\n class=\"overflow-hidden p-3\"\n data-bubble-name=\"video\"\n @click=\"showGallery = true\"\n >\n <div class=\"relative group rounded-lg overflow-hidden\">\n <div\n v-if=\"isReel\"\n class=\"absolute p-2 flex items-start justify-end right-0 pointer-events-none\"\n >\n <Icon icon=\"i-lucide-instagram\" class=\"text-white shadow-lg\" />\n </div>\n <video\n controls\n class=\"rounded-lg skip-context-menu\"\n :src=\"attachment.dataUrl\"\n :class=\"{\n 'max-w-48': isReel,\n 'max-w-full': !isReel,\n }\"\n @error=\"handleError\"\n />\n </div>\n </BaseBubble>\n <GalleryView\n v-if=\"showGallery\"\n v-model:show=\"showGallery\"\n :attachment=\"useSnakeCase(attachment)\"\n :all-attachments=\"filteredCurrentChatAttachments\"\n @error=\"onError\"\n @close=\"() => (showGallery = false)\"\n />\n</template>\n","<script setup>\nimport { ref, computed } from 'vue';\nimport { useMessageContext } from '../provider.js';\nimport Icon from 'next/icon/Icon.vue';\nimport BaseBubble from 'next/message/bubbles/Base.vue';\n\nimport MessageFormatter from 'shared/helpers/MessageFormatter.js';\nimport { MESSAGE_VARIANTS } from '../constants';\n\nconst emit = defineEmits(['error']);\nconst { variant, content, attachments } = useMessageContext();\n\nconst attachment = computed(() => {\n return attachments.value[0];\n});\n\nconst hasImgStoryError = ref(false);\nconst hasVideoStoryError = ref(false);\n\nconst formattedContent = computed(() => {\n if (variant.value === MESSAGE_VARIANTS.ACTIVITY) {\n return content.value;\n }\n\n return new MessageFormatter(content.value).formattedMessage;\n});\n\nconst onImageLoadError = () => {\n hasImgStoryError.value = true;\n emit('error');\n};\n\nconst onVideoLoadError = () => {\n hasVideoStoryError.value = true;\n emit('error');\n};\n</script>\n\n<template>\n <BaseBubble class=\"p-3 overflow-hidden\" data-bubble-name=\"ig-story\">\n <div v-if=\"content\" v-dompurify-html=\"formattedContent\" class=\"mb-2\" />\n <img\n v-if=\"!hasImgStoryError\"\n class=\"rounded-lg max-w-80 skip-context-menu\"\n :src=\"attachment.dataUrl\"\n @error=\"onImageLoadError\"\n />\n <video\n v-else-if=\"!hasVideoStoryError\"\n class=\"rounded-lg max-w-80 skip-context-menu\"\n controls\n :src=\"attachment.dataUrl\"\n @error=\"onVideoLoadError\"\n />\n <div\n v-else\n class=\"flex items-center gap-1 px-5 py-4 text-center rounded-lg bg-n-alpha-1\"\n >\n <Icon icon=\"i-lucide-circle-off\" class=\"text-n-slate-11\" />\n <p class=\"mb-0 text-n-slate-11\">\n {{ $t('COMPONENTS.FILE_BUBBLE.INSTAGRAM_STORY_UNAVAILABLE') }}\n </p>\n </div>\n </BaseBubble>\n</template>\n","export const allowedTags = {\n a: ['class', 'href', 'id', 'style', 'target'],\n address: ['class', 'id', 'style'],\n b: ['class', 'id', 'style'],\n blockquote: ['class', 'id', 'style'],\n br: ['class', 'id', 'style'],\n caption: ['class', 'id', 'style'],\n cite: ['class', 'id', 'style'],\n code: ['class', 'id', 'style'],\n col: [\n 'align',\n 'bgcolor',\n 'char',\n 'charoff',\n 'class',\n 'id',\n 'style',\n 'valign',\n 'width',\n ],\n colgroup: [\n 'align',\n 'bgcolor',\n 'char',\n 'charoff',\n 'class',\n 'id',\n 'style',\n 'valign',\n 'width',\n ],\n center: ['class', 'id', 'style'],\n dd: ['class', 'id', 'style'],\n div: ['align', 'class', 'dir', 'id', 'style'],\n dt: ['class', 'id', 'style'],\n em: ['class', 'id', 'style'],\n font: ['class', 'color', 'face', 'id', 'size', 'style'],\n h1: ['align', 'class', 'dir', 'id', 'style'],\n h2: ['align', 'class', 'dir', 'id', 'style'],\n h3: ['align', 'class', 'dir', 'id', 'style'],\n h4: ['align', 'class', 'dir', 'id', 'style'],\n h5: ['align', 'class', 'dir', 'id', 'style'],\n h6: ['align', 'class', 'dir', 'id', 'style'],\n hr: ['align', 'size', 'width'],\n i: ['class', 'id', 'style'],\n img: [\n 'align',\n 'alt',\n 'border',\n 'class',\n 'height',\n 'hspace',\n 'id',\n 'src',\n 'style',\n 'title',\n 'usemap',\n 'vspace',\n 'width',\n ],\n label: ['class', 'id', 'style'],\n legend: ['class', 'id', 'style'],\n li: ['class', 'dir', 'id', 'style', 'type'],\n ol: ['class', 'dir', 'id', 'style', 'type', 'start', 'reversed'],\n p: ['align', 'class', 'dir', 'id', 'style'],\n pre: ['class', 'id', 'style'],\n span: ['class', 'id', 'style'],\n strong: ['class', 'id', 'style'],\n style: [],\n sub: ['class', 'id', 'style'],\n sup: ['class', 'id', 'style'],\n table: [\n 'align',\n 'bgcolor',\n 'border',\n 'cellpadding',\n 'cellspacing',\n 'class',\n 'dir',\n 'frame',\n 'id',\n 'rules',\n 'style',\n 'width',\n ],\n tbody: ['class', 'id', 'style'],\n td: [\n 'abbr',\n 'align',\n 'bgcolor',\n 'class',\n 'colspan',\n 'dir',\n 'height',\n 'id',\n 'lang',\n 'rowspan',\n 'scope',\n 'style',\n 'valign',\n 'width',\n ],\n tfoot: [\n 'align',\n 'bgcolor',\n 'char',\n 'charoff',\n 'class',\n 'id',\n 'style',\n 'valign',\n ],\n th: [\n 'abbr',\n 'align',\n 'bgcolor',\n 'class',\n 'colspan',\n 'dir',\n 'height',\n 'id',\n 'lang',\n 'rowspan',\n 'scope',\n 'style',\n 'valign',\n 'width',\n ],\n thead: [\n 'align',\n 'bgcolol',\n 'char',\n 'charoff',\n 'class',\n 'id',\n 'style',\n 'valign',\n ],\n tr: [\n 'align',\n 'bgcolor',\n 'char',\n 'charoff',\n 'class',\n 'dir',\n 'id',\n 'style',\n 'valign',\n ],\n u: ['class', 'id', 'style'],\n ul: ['class', 'dir', 'id', 'style'],\n};\nexport const removeWithContents = [\n 'script',\n 'iframe',\n 'textarea',\n 'title',\n 'noscript',\n 'noembed',\n 'svg',\n];\nexport const allowedCssProperties = [\n 'azimuth',\n 'background',\n 'background-blend-mode',\n 'background-clip',\n 'background-color',\n 'background-image',\n 'background-origin',\n 'background-position',\n 'background-position-x',\n 'background-position-y',\n 'background-repeat',\n 'background-repeat-x',\n 'background-repeat-y',\n 'background-size',\n 'border',\n 'border-bottom',\n 'border-bottom-color',\n 'border-bottom-left-radius',\n 'border-bottom-right-radius',\n 'border-bottom-style',\n 'border-bottom-width',\n 'border-collapse',\n 'border-color',\n 'border-left',\n 'border-left-color',\n 'border-left-style',\n 'border-left-width',\n 'border-radius',\n 'border-right',\n 'border-right-color',\n 'border-right-style',\n 'border-right-width',\n 'border-spacing',\n 'border-style',\n 'border-top',\n 'border-top-color',\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-top-style',\n 'border-top-width',\n 'border-width',\n 'box-sizing',\n 'break-after',\n 'break-before',\n 'break-inside',\n 'caption-side',\n 'clear',\n 'color',\n 'column-count',\n 'column-fill',\n 'column-gap',\n 'column-rule',\n 'column-rule-color',\n 'column-rule-style',\n 'column-rule-width',\n 'column-span',\n 'column-width',\n 'columns',\n 'direction',\n 'display',\n 'elevation',\n 'empty-cells',\n 'float',\n 'font',\n 'font-family',\n 'font-feature-settings',\n 'font-kerning',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-style',\n 'font-synthesis',\n 'font-variant',\n 'font-variant-alternates',\n 'font-variant-caps',\n 'font-variant-east-asian',\n 'font-variant-ligatures',\n 'font-variant-numeric',\n 'font-weight',\n 'height',\n 'image-orientation',\n 'image-resolution',\n 'ime-mode',\n 'isolation',\n 'layout-flow',\n 'layout-grid',\n 'layout-grid-char',\n 'layout-grid-char-spacing',\n 'layout-grid-line',\n 'layout-grid-mode',\n 'layout-grid-type',\n 'letter-spacing',\n 'line-break',\n 'line-height',\n 'list-style',\n 'list-style-position',\n 'list-style-type',\n 'margin',\n 'margin-bottom',\n 'margin-left',\n 'margin-right',\n 'margin-top',\n 'marker-offset',\n 'max-height',\n 'max-width',\n 'min-height',\n 'min-width',\n 'mix-blend-mode',\n 'object-fit',\n 'object-position',\n 'opacity',\n 'outline',\n 'outline-color',\n 'outline-style',\n 'outline-width',\n 'overflow',\n 'overflow-x',\n 'overflow-y',\n 'padding',\n 'padding-bottom',\n 'padding-left',\n 'padding-right',\n 'padding-top',\n 'page-break-after',\n 'page-break-before',\n 'page-break-inside',\n 'pause',\n 'pause-after',\n 'pause-before',\n 'pitch',\n 'pitch-range',\n 'quotes',\n 'richness',\n 'speak',\n 'speak-header',\n 'speak-numeral',\n 'speak-punctuation',\n 'speech-rate',\n 'stress',\n 'table-layout',\n 'text-align',\n 'text-align-last',\n 'text-autospace',\n 'text-combine-upright',\n 'text-decoration',\n 'text-decoration-color',\n 'text-decoration-line',\n 'text-decoration-skip',\n 'text-decoration-style',\n 'text-emphasis',\n 'text-emphasis-color',\n 'text-emphasis-style',\n 'text-indent',\n 'text-justify',\n 'text-kashida-space',\n 'text-orientation',\n 'text-overflow',\n 'text-transform',\n 'text-underline-position',\n 'text-wrap',\n 'text-wrap-mode',\n 'text-wrap-style',\n 'unicode-bidi',\n 'vertical-align',\n 'voice-family',\n 'white-space',\n 'white-space-collapse',\n 'width',\n 'word-break',\n 'word-spacing',\n 'word-wrap',\n 'writing-mode',\n 'zoom',\n];\n","import { allowedTags, allowedCssProperties as defaultAllowedCssProperties, removeWithContents, } from './constants.js';\nfunction prependIdToSelectorText(selectorText, id) {\n if (!id)\n return selectorText;\n return selectorText\n .split(',')\n .map(selector => selector.trim())\n .map(selector => {\n const s = selector\n .replace(/\\./g, '.' + id + '_')\n .replace(/#/g, '#' + id + '_');\n if (s.toLowerCase().startsWith('body')) {\n return '#' + id + ' ' + s.substring(4);\n }\n else {\n return '#' + id + ' ' + s;\n }\n })\n .join(',');\n}\nfunction sanitizeCssValue(cssValue, allowedSchemas, rewriteExternalResources) {\n return cssValue\n .trim()\n .replace(/expression\\((.*?)\\)/g, '')\n .replace(/url\\([\"']?(.*?)[\"']?\\)/g, (match, url) => {\n if (rewriteExternalResources) {\n return `url(\"${encodeURI(rewriteExternalResources(decodeURI(url)))}\")`;\n }\n else if (allowedSchemas.includes(url.toLowerCase().split(':')[0])) {\n return match;\n }\n else {\n return '';\n }\n });\n}\nfunction sanitizeCssStyle(style, allowedSchemas, allowedCssProperties, preserveCssPriority, rewriteExternalResources) {\n if (!style) {\n return;\n }\n const properties = [];\n for (let i = 0; i < style.length; i++) {\n const name = style[i];\n properties.push(name);\n }\n for (const name of properties) {\n if (allowedCssProperties.includes(name)) {\n const value = style.getPropertyValue(name);\n style.setProperty(name, sanitizeCssValue(value, allowedSchemas, rewriteExternalResources), preserveCssPriority ? style.getPropertyPriority(name) : undefined);\n }\n else {\n style.removeProperty(name);\n }\n }\n}\nfunction sanitizeCssRule(rule, id, allowedSchemas, allowedCssProperties, preserveCssPriority, rewriteExternalResources) {\n rule.selectorText = prependIdToSelectorText(rule.selectorText, id);\n sanitizeCssStyle(rule.style, allowedSchemas, allowedCssProperties, preserveCssPriority, rewriteExternalResources);\n}\nconst defaultAllowedSchemas = ['http', 'https', 'mailto'];\nfunction sanitizeHtml(input, { dropAllHtmlTags = false, rewriteExternalLinks, rewriteExternalResources, id = 'msg_' +\n String.fromCharCode(...new Array(24)\n .fill(undefined)\n .map(() => ((Math.random() * 25) % 25) + 65)), allowedSchemas = defaultAllowedSchemas, allowedCssProperties = defaultAllowedCssProperties, preserveCssPriority = true, noWrapper = false, }) {\n if (noWrapper)\n id = '';\n const doc = new DOMParser().parseFromString(input, 'text/html');\n // Ensure allowed schemas are lower case.\n allowedSchemas = Array.isArray(allowedSchemas)\n ? allowedSchemas.map(schema => schema.toLowerCase())\n : defaultAllowedSchemas;\n // Remove comments.\n const commentIter = doc.createNodeIterator(doc.documentElement, NodeFilter.SHOW_COMMENT);\n let node;\n while ((node = commentIter.nextNode())) {\n node.parentNode?.removeChild(node);\n }\n const removeTags = [...removeWithContents];\n if (dropAllHtmlTags) {\n removeTags.push('style');\n }\n // Remove disallowed tags.\n const disallowedList = doc.querySelectorAll(removeTags.join(', '));\n disallowedList.forEach(element => element.remove());\n // Move styles from head to body.\n const styleList = doc.querySelectorAll('head > style');\n styleList.forEach(element => {\n doc.body.appendChild(element);\n });\n // Filter other tags.\n const toRemove = [];\n const elementIter = doc.createNodeIterator(doc.body, NodeFilter.SHOW_ELEMENT, {\n acceptNode: () => {\n return NodeFilter.FILTER_ACCEPT;\n },\n });\n while ((node = elementIter.nextNode())) {\n const element = node;\n const tagName = element.tagName.toLowerCase();\n if (tagName === 'body' || tagName === 'html') {\n continue;\n }\n if (dropAllHtmlTags) {\n if (node.textContent) {\n const textNode = doc.createTextNode(node.textContent);\n node.parentNode?.replaceChild(textNode, node);\n }\n else {\n node.parentNode?.removeChild(node);\n }\n continue;\n }\n if (tagName in allowedTags) {\n const allowedAttributes = allowedTags[tagName];\n for (const attribute of element.getAttributeNames()) {\n if (!allowedAttributes.includes(attribute)) {\n element.removeAttribute(attribute);\n }\n else if (attribute === 'class' && !noWrapper) {\n element.setAttribute(attribute, element\n .getAttribute(attribute)\n ?.split(' ')\n .map(className => id + '_' + className)\n .join(' ') ?? '');\n }\n else if (attribute === 'id' && !noWrapper) {\n element.setAttribute(attribute, id + '_' + (element.getAttribute(attribute) ?? ''));\n }\n else if (attribute === 'href' || attribute === 'src') {\n const value = element.getAttribute(attribute) ?? '';\n if (attribute === 'href' && rewriteExternalLinks) {\n element.setAttribute(attribute, rewriteExternalLinks(value));\n }\n else if (attribute === 'src' && rewriteExternalResources) {\n element.setAttribute(attribute, rewriteExternalResources(value));\n }\n else if (!allowedSchemas.includes(value.toLowerCase().split(':')[0])) {\n element.removeAttribute(attribute);\n }\n }\n }\n // Sanitize CSS.\n sanitizeCssStyle(element.style, allowedSchemas, allowedCssProperties, preserveCssPriority, rewriteExternalResources);\n if (tagName === 'a') {\n // Add rel=\"noopener noreferrer\" to <a>\n element.setAttribute('rel', 'noopener noreferrer');\n // Add target=\"_blank\" to <a>\n element.setAttribute('target', '_blank');\n }\n }\n else {\n element.insertAdjacentHTML('afterend', element.innerHTML);\n toRemove.push(element);\n }\n }\n for (const element of toRemove) {\n try {\n try {\n element.parentNode?.removeChild(element);\n }\n catch {\n element.outerHTML = '';\n }\n }\n catch {\n try {\n element.remove();\n }\n catch { }\n }\n }\n // Prepend wrapper ID.\n const bodyStyleList = doc.querySelectorAll('body style');\n bodyStyleList.forEach(element => {\n const styleElement = element;\n const stylesheet = styleElement.sheet;\n const newRules = [];\n if (!stylesheet.cssRules) {\n styleElement.textContent = '';\n return;\n }\n for (let i = 0; i < stylesheet.cssRules.length; i++) {\n const rule = stylesheet.cssRules[i];\n if ('selectorText' in rule) {\n sanitizeCssRule(rule, id, allowedSchemas, allowedCssProperties, preserveCssPriority, rewriteExternalResources);\n newRules.push(rule);\n }\n else if ('cssRules' in rule && 'media' in rule) {\n // According to https://www.caniemail.com/,\n // out of all at-rules, Gmail only supports @media.\n const mediaRule = rule;\n const newRulesMedia = [];\n for (let i = 0; i < mediaRule.cssRules.length; i++) {\n const rule = mediaRule.cssRules[i];\n if (rule.type === rule.STYLE_RULE) {\n sanitizeCssRule(rule, id, allowedSchemas, allowedCssProperties, preserveCssPriority, rewriteExternalResources);\n newRulesMedia.push(rule);\n }\n }\n while (mediaRule.cssRules.length > 0) {\n mediaRule.deleteRule(0);\n }\n for (const rule of newRulesMedia) {\n mediaRule.insertRule(rule.cssText, mediaRule.cssRules.length);\n }\n newRules.push(mediaRule);\n }\n }\n styleElement.textContent = newRules.map(rule => rule.cssText).join('\\n');\n });\n // Wrap body inside of a div with the generated ID.\n if (noWrapper) {\n return doc.body.innerHTML;\n }\n else {\n const div = doc.createElement('div');\n div.id = id;\n div.innerHTML = doc.body.innerHTML;\n return div.outerHTML;\n }\n}\nfunction sanitizeText(text) {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n}\nexport function sanitize(html, text, options) {\n let contents = html ?? '';\n if (contents?.length === 0 && text) {\n contents = sanitizeText(text)\n .split('\\n')\n .map(line => '<p>' + line + '</p>')\n .join('\\n');\n }\n return sanitizeHtml(contents, options ?? {});\n}\nexport const allowedCssProperties = defaultAllowedCssProperties;\n","// Quote detection strategies\nconst QUOTE_INDICATORS = [\n '.gmail_quote_container',\n '.gmail_quote',\n '.OutlookQuote',\n '.email-quote',\n '.quoted-text',\n '.quote',\n '[class*=\"quote\"]',\n '[class*=\"Quote\"]',\n];\n\n// Regex patterns for quote identification\nconst QUOTE_PATTERNS = [\n /On .* wrote:/i,\n /-----Original Message-----/i,\n /Sent: /i,\n /From: /i,\n];\n\nexport class EmailQuoteExtractor {\n /**\n * Remove quotes from email HTML and return cleaned HTML\n * @param {string} htmlContent - Full HTML content of the email\n * @returns {string} HTML content with quotes removed\n */\n static extractQuotes(htmlContent) {\n // Create a temporary DOM element to parse HTML\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = htmlContent;\n\n // Remove elements matching class selectors\n QUOTE_INDICATORS.forEach(selector => {\n tempDiv.querySelectorAll(selector).forEach(el => {\n el.remove();\n });\n });\n\n // Remove text-based quotes\n const textNodeQuotes = this.findTextNodeQuotes(tempDiv);\n textNodeQuotes.forEach(el => {\n el.remove();\n });\n\n return tempDiv.innerHTML;\n }\n\n /**\n * Check if HTML content contains any quotes\n * @param {string} htmlContent - Full HTML content of the email\n * @returns {boolean} True if quotes are detected, false otherwise\n */\n static hasQuotes(htmlContent) {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = htmlContent;\n\n // Check for class-based quotes\n // eslint-disable-next-line no-restricted-syntax\n for (const selector of QUOTE_INDICATORS) {\n if (tempDiv.querySelector(selector)) {\n return true;\n }\n }\n\n // Check for text-based quotes\n const textNodeQuotes = this.findTextNodeQuotes(tempDiv);\n return textNodeQuotes.length > 0;\n }\n\n /**\n * Find text nodes that match quote patterns\n * @param {Element} rootElement - Root element to search\n * @returns {Element[]} Array of parent block elements containing quote-like text\n */\n static findTextNodeQuotes(rootElement) {\n const quoteBlocks = [];\n const treeWalker = document.createTreeWalker(\n rootElement,\n NodeFilter.SHOW_TEXT,\n null,\n false\n );\n\n for (\n let currentNode = treeWalker.nextNode();\n currentNode !== null;\n currentNode = treeWalker.nextNode()\n ) {\n const isQuoteLike = QUOTE_PATTERNS.some(pattern =>\n pattern.test(currentNode.textContent)\n );\n\n if (isQuoteLike) {\n const parentBlock = this.findParentBlock(currentNode);\n if (parentBlock && !quoteBlocks.includes(parentBlock)) {\n quoteBlocks.push(parentBlock);\n }\n }\n }\n\n return quoteBlocks;\n }\n\n /**\n * Find the closest block-level parent element by recursively traversing up the DOM tree.\n * This method searches for common block-level elements like DIV, P, BLOCKQUOTE, and SECTION\n * that contain the text node. It's used to identify and remove entire block-level elements\n * that contain quote-like text, rather than just removing the text node itself. This ensures\n * proper structural removal of quoted content while maintaining HTML integrity.\n * @param {Node} node - Starting node to find parent\n * @returns {Element|null} Block-level parent element\n */\n static findParentBlock(node) {\n const blockElements = ['DIV', 'P', 'BLOCKQUOTE', 'SECTION'];\n let current = node.parentElement;\n\n while (current) {\n if (blockElements.includes(current.tagName)) {\n return current;\n }\n current = current.parentElement;\n }\n\n return null;\n }\n}\n","<script setup>\nimport { computed } from 'vue';\nimport { MESSAGE_STATUS } from '../../constants';\nimport { useMessageContext } from '../../provider.js';\n\nconst { contentAttributes, status, sender } = useMessageContext();\n\nconst hasError = computed(() => {\n return status.value === MESSAGE_STATUS.FAILED;\n});\n\nconst fromEmail = computed(() => {\n return contentAttributes.value?.email?.from ?? [];\n});\n\nconst toEmail = computed(() => {\n return contentAttributes.value?.email?.to ?? [];\n});\n\nconst ccEmail = computed(() => {\n return (\n contentAttributes.value?.ccEmails ??\n contentAttributes.value?.email?.cc ??\n []\n );\n});\n\nconst senderName = computed(() => {\n const fromEmailAddress = fromEmail.value[0] ?? '';\n const senderEmail = sender.value.email ?? '';\n\n if (!fromEmailAddress && !senderEmail) return null;\n\n // if the sender of the conversation and the sender of this particular\n // email are the same, only then we return the sender name\n if (fromEmailAddress === senderEmail) {\n return sender.value.name;\n }\n\n return null;\n});\n\nconst bccEmail = computed(() => {\n return (\n contentAttributes.value?.bccEmails ??\n contentAttributes.value?.email?.bcc ??\n []\n );\n});\n\nconst subject = computed(() => {\n return contentAttributes.value?.email?.subject ?? '';\n});\n\nconst showMeta = computed(() => {\n return (\n fromEmail.value[0] ||\n toEmail.value.length ||\n ccEmail.value.length ||\n bccEmail.value.length ||\n subject.value\n );\n});\n</script>\n\n<template>\n <section\n v-show=\"showMeta\"\n class=\"space-y-1 rtl:pl-9 ltr:pr-9 text-sm break-words\"\n :class=\"hasError ? 'text-n-ruby-11' : 'text-n-slate-11'\"\n >\n <template v-if=\"showMeta\">\n <div\n v-if=\"fromEmail[0]\"\n :class=\"hasError ? 'text-n-ruby-11' : 'text-n-slate-12'\"\n >\n <template v-if=\"senderName\">\n <span>\n {{ senderName }}\n </span>\n <{{ fromEmail[0] }}>\n </template>\n <template v-else>\n {{ fromEmail[0] }}\n </template>\n </div>\n <div v-if=\"toEmail.length\">\n {{ $t('EMAIL_HEADER.TO') }}: {{ toEmail.join(', ') }}\n </div>\n <div v-if=\"ccEmail.length\">\n {{ $t('EMAIL_HEADER.CC') }}:\n {{ ccEmail.join(', ') }}\n </div>\n <div v-if=\"bccEmail.length\">\n {{ $t('EMAIL_HEADER.BCC') }}:\n {{ bccEmail.join(', ') }}\n </div>\n <div v-if=\"subject\">\n {{ $t('EMAIL_HEADER.SUBJECT') }}:\n {{ subject }}\n </div>\n </template>\n </section>\n</template>\n","<script setup>\nimport { computed, useTemplateRef, ref, onMounted } from 'vue';\nimport { Letter } from 'vue-letter';\nimport { allowedCssProperties } from 'lettersanitizer';\n\nimport Icon from 'next/icon/Icon.vue';\nimport { EmailQuoteExtractor } from './removeReply.js';\nimport BaseBubble from 'next/message/bubbles/Base.vue';\nimport FormattedContent from 'next/message/bubbles/Text/FormattedContent.vue';\nimport AttachmentChips from 'next/message/chips/AttachmentChips.vue';\nimport EmailMeta from './EmailMeta.vue';\n\nimport { useMessageContext } from '../../provider.js';\nimport { MESSAGE_TYPES } from 'next/message/constants.js';\n\nconst { content, contentAttributes, attachments, messageType } =\n useMessageContext();\n\nconst isExpandable = ref(false);\nconst isExpanded = ref(false);\nconst showQuotedMessage = ref(false);\nconst contentContainer = useTemplateRef('contentContainer');\n\nonMounted(() => {\n isExpandable.value = contentContainer.value?.scrollHeight > 400;\n});\n\nconst isOutgoing = computed(() => {\n return messageType.value === MESSAGE_TYPES.OUTGOING;\n});\nconst isIncoming = computed(() => !isOutgoing.value);\n\nconst textToShow = computed(() => {\n const text =\n contentAttributes?.value?.email?.textContent?.full ?? content.value;\n return text?.replace(/\\n/g, '<br>');\n});\n\n// Use TextContent as the default to fullHTML\nconst fullHTML = computed(() => {\n return contentAttributes?.value?.email?.htmlContent?.full ?? textToShow.value;\n});\n\nconst unquotedHTML = computed(() => {\n return EmailQuoteExtractor.extractQuotes(fullHTML.value);\n});\n\nconst hasQuotedMessage = computed(() => {\n return EmailQuoteExtractor.hasQuotes(fullHTML.value);\n});\n</script>\n\n<template>\n <BaseBubble\n class=\"w-full\"\n :class=\"{\n 'bg-n-slate-4': isIncoming,\n 'bg-n-solid-blue': isOutgoing,\n }\"\n data-bubble-name=\"email\"\n >\n <EmailMeta\n class=\"p-3\"\n :class=\"{\n 'border-b border-n-strong': isIncoming,\n 'border-b border-n-slate-8/20': isOutgoing,\n }\"\n />\n <section ref=\"contentContainer\" class=\"p-3\">\n <div\n :class=\"{\n 'max-h-[400px] overflow-hidden relative': !isExpanded && isExpandable,\n 'overflow-y-scroll relative': isExpanded,\n }\"\n >\n <div\n v-if=\"isExpandable && !isExpanded\"\n class=\"absolute left-0 right-0 bottom-0 h-40 px-8 flex items-end bg-gradient-to-t from-n-gray-3 via-n-gray-3 via-20% to-transparent\"\n >\n <button\n class=\"text-n-slate-12 py-2 px-8 mx-auto text-center flex items-center gap-2\"\n @click=\"isExpanded = true\"\n >\n <Icon icon=\"i-lucide-maximize-2\" />\n {{ $t('EMAIL_HEADER.EXPAND') }}\n </button>\n </div>\n <FormattedContent\n v-if=\"isOutgoing && content\"\n class=\"text-n-slate-12\"\n :content=\"content\"\n />\n <template v-else>\n <Letter\n v-if=\"showQuotedMessage\"\n class-name=\"prose prose-bubble !max-w-none letter-render\"\n :allowed-css-properties=\"[\n ...allowedCssProperties,\n 'transform',\n 'transform-origin',\n ]\"\n :html=\"fullHTML\"\n :text=\"textToShow\"\n />\n <Letter\n v-else\n class-name=\"prose prose-bubble !max-w-none letter-render\"\n :html=\"unquotedHTML\"\n :allowed-css-properties=\"[\n ...allowedCssProperties,\n 'transform',\n 'transform-origin',\n ]\"\n :text=\"textToShow\"\n />\n </template>\n <button\n v-if=\"hasQuotedMessage\"\n class=\"text-n-slate-11 px-1 leading-none text-sm bg-n-alpha-black2 text-center flex items-center gap-1 mt-2\"\n @click=\"showQuotedMessage = !showQuotedMessage\"\n >\n <template v-if=\"showQuotedMessage\">\n {{ $t('CHAT_LIST.HIDE_QUOTED_TEXT') }}\n </template>\n <template v-else>\n {{ $t('CHAT_LIST.SHOW_QUOTED_TEXT') }}\n </template>\n <Icon\n :icon=\"\n showQuotedMessage\n ? 'i-lucide-chevron-up'\n : 'i-lucide-chevron-down'\n \"\n />\n </button>\n </div>\n </section>\n <section\n v-if=\"Array.isArray(attachments) && attachments.length\"\n class=\"px-4 pb-4 space-y-2\"\n >\n <AttachmentChips :attachments=\"attachments\" class=\"gap-1\" />\n </section>\n </BaseBubble>\n</template>\n\n<style lang=\"scss\">\n// Tailwind resets break the rendering of google drive link in Gmail messages\n// This fixes it using https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors\n\n.letter-render [class*='gmail_drive_chip'] {\n box-sizing: initial;\n @apply bg-n-slate-4 border-n-slate-6 rounded-md !important;\n\n a {\n @apply text-n-slate-12 !important;\n\n img {\n display: inline-block;\n }\n }\n}\n</style>\n","<script setup>\nimport { computed } from 'vue';\nimport { useAlert } from 'dashboard/composables';\nimport { useStore } from 'dashboard/composables/store';\nimport { useI18n } from 'vue-i18n';\nimport { useMessageContext } from '../provider.js';\nimport BaseAttachmentBubble from './BaseAttachment.vue';\n\nimport {\n DuplicateContactException,\n ExceptionWithMessage,\n} from 'shared/helpers/CustomErrors';\n\nconst { attachments } = useMessageContext();\n\nconst $store = useStore();\nconst { t } = useI18n();\n\nconst attachment = computed(() => {\n return attachments.value[0];\n});\n\nconst phoneNumber = computed(() => {\n return attachment.value.fallbackTitle;\n});\n\nconst contactName = computed(() => {\n const { meta } = attachment.value ?? {};\n const { firstName, lastName } = meta ?? {};\n return `${firstName ?? ''} ${lastName ?? ''}`.trim();\n});\n\nconst formattedPhoneNumber = computed(() => {\n return phoneNumber.value.replace(/\\s|-|[A-Za-z]/g, '');\n});\n\nconst rawPhoneNumber = computed(() => {\n return phoneNumber.value.replace(/\\D/g, '');\n});\n\nfunction getContactObject() {\n const contactItem = {\n name: contactName.value,\n phone_number: `+${rawPhoneNumber.value}`,\n };\n return contactItem;\n}\n\nasync function filterContactByNumber(searchCandidate) {\n const query = {\n attribute_key: 'phone_number',\n filter_operator: 'equal_to',\n values: [searchCandidate],\n attribute_model: 'standard',\n custom_attribute_type: '',\n };\n\n const queryPayload = { payload: [query] };\n const contacts = await $store.dispatch('contacts/filter', {\n queryPayload,\n resetState: false,\n });\n return contacts.shift();\n}\n\nfunction openContactNewTab(contactId) {\n const accountId = window.location.pathname.split('/')[3];\n const url = `/app/accounts/${accountId}/contacts/${contactId}`;\n window.open(url, '_blank');\n}\n\nasync function addContact() {\n try {\n let contact = await filterContactByNumber(rawPhoneNumber);\n if (!contact) {\n contact = await $store.dispatch('contacts/create', getContactObject());\n useAlert(t('CONTACT_FORM.SUCCESS_MESSAGE'));\n }\n openContactNewTab(contact.id);\n } catch (error) {\n if (error instanceof DuplicateContactException) {\n if (error.data.includes('phone_number')) {\n useAlert(t('CONTACT_FORM.FORM.PHONE_NUMBER.DUPLICATE'));\n }\n } else if (error instanceof ExceptionWithMessage) {\n useAlert(error.data);\n } else {\n useAlert(t('CONTACT_FORM.ERROR_MESSAGE'));\n }\n }\n}\n\nconst action = computed(() => ({\n label: t('CONVERSATION.SAVE_CONTACT'),\n onClick: addContact,\n}));\n</script>\n\n<template>\n <BaseAttachmentBubble\n icon=\"i-teenyicons-user-circle-solid\"\n icon-bg-color=\"bg-[#D6409F]\"\n sender-translation-key=\"CONVERSATION.SHARED_ATTACHMENT.CONTACT\"\n :title=\"contactName\"\n :content=\"phoneNumber\"\n :action=\"formattedPhoneNumber ? action : null\"\n />\n</template>\n","<script setup>\nimport { computed, ref } from 'vue';\nimport DyteAPI from 'dashboard/api/integrations/dyte';\nimport { buildDyteURL } from 'shared/helpers/IntegrationHelper';\nimport { useAlert } from 'dashboard/composables';\nimport { useI18n } from 'vue-i18n';\n\nimport { useMessageContext } from '../provider.js';\nimport BaseAttachmentBubble from './BaseAttachment.vue';\n\nconst { content, sender, id } = useMessageContext();\n\nconst { t } = useI18n();\n\nconst isLoading = ref(false);\nconst dyteAuthToken = ref('');\n\nconst meetingLink = computed(() => {\n return buildDyteURL(dyteAuthToken.value);\n});\n\nconst joinTheCall = async () => {\n isLoading.value = true;\n try {\n const { data: { token } = {} } = await DyteAPI.addParticipantToMeeting(\n id.value\n );\n dyteAuthToken.value = token;\n } catch (err) {\n useAlert(t('INTEGRATION_SETTINGS.DYTE.JOIN_ERROR'));\n } finally {\n isLoading.value = false;\n }\n};\n\nconst leaveTheRoom = () => {\n dyteAuthToken.value = '';\n};\nconst action = computed(() => ({\n label: t('INTEGRATION_SETTINGS.DYTE.CLICK_HERE_TO_JOIN'),\n onClick: joinTheCall,\n}));\n</script>\n\n<template>\n <BaseAttachmentBubble\n icon=\"i-ph-video-camera-fill\"\n icon-bg-color=\"bg-[#2781F6]\"\n sender-translation-key=\"CONVERSATION.SHARED_ATTACHMENT.MEETING\"\n :action=\"action\"\n >\n <div v-if=\"!sender\" class=\"text-sm truncate text-n-slate-12\">\n <!-- Added as a fallback, where the sender is not available (Deleted) -->\n <!-- Will show the content, if senderName in BaseAttachment.vue is empty -->\n {{ content }}\n </div>\n <div v-if=\"dyteAuthToken\" class=\"video-call--container\">\n <iframe\n :src=\"meetingLink\"\n allow=\"camera;microphone;fullscreen;display-capture;picture-in-picture;clipboard-write;\"\n />\n <button\n class=\"px-4 py-2 text-sm rounded-lg bg-n-solid-3 mt-3\"\n @click=\"leaveTheRoom\"\n >\n {{ $t('INTEGRATION_SETTINGS.DYTE.LEAVE_THE_ROOM') }}\n </button>\n </div>\n <div v-else>\n {{ '' }}\n </div>\n </BaseAttachmentBubble>\n</template>\n\n<style lang=\"scss\">\n.join-call-button {\n margin: var(--space-small) 0;\n}\n\n.video-call--container {\n position: fixed;\n bottom: 0;\n right: 0;\n width: 100%;\n height: 100%;\n z-index: var(--z-index-high);\n padding: var(--space-smaller);\n background: var(--b-800);\n\n iframe {\n width: 100%;\n height: 100%;\n border: 0;\n }\n\n button {\n position: absolute;\n top: var(--space-smaller);\n right: 10rem;\n }\n}\n</style>\n","<script setup>\nimport { computed } from 'vue';\nimport BaseAttachmentBubble from './BaseAttachment.vue';\nimport { useI18n } from 'vue-i18n';\nimport { useMessageContext } from '../provider.js';\n\nconst { attachments } = useMessageContext();\nconst { t } = useI18n();\n\nconst attachment = computed(() => {\n return attachments.value[0];\n});\n\nconst lat = computed(() => {\n return attachment.value.coordinatesLat;\n});\nconst long = computed(() => {\n return attachment.value.coordinatesLong;\n});\n\nconst title = computed(() => {\n return attachment.value.fallbackTitle ?? attachment.value.fallback_title;\n});\n\nconst mapUrl = computed(\n () => `https://maps.google.com/?q=${lat.value},${long.value}`\n);\n</script>\n\n<template>\n <BaseAttachmentBubble\n icon=\"i-ph-navigation-arrow-fill\"\n icon-bg-color=\"bg-[#0D9B8A]\"\n sender-translation-key=\"CONVERSATION.SHARED_ATTACHMENT.LOCATION\"\n :content=\"title\"\n :action=\"{\n label: t('COMPONENTS.LOCATION_BUBBLE.SEE_ON_MAP'),\n href: mapUrl,\n }\"\n />\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport BaseBubble from './Base.vue';\nimport { useI18n } from 'vue-i18n';\nimport { CSAT_RATINGS } from 'shared/constants/messages';\nimport { useMessageContext } from '../provider.js';\n\nconst { contentAttributes } = useMessageContext();\nconst { t } = useI18n();\n\nconst response = computed(() => {\n return contentAttributes.value?.submittedValues?.csatSurveyResponse ?? {};\n});\n\nconst isRatingSubmitted = computed(() => {\n return !!response.value.rating;\n});\n\nconst rating = computed(() => {\n if (isRatingSubmitted.value) {\n return CSAT_RATINGS.find(\n csatOption => csatOption.value === response.value.rating\n );\n }\n\n return null;\n});\n</script>\n\n<template>\n <BaseBubble class=\"px-4 py-3\" data-bubble-name=\"csat\">\n <h4>{{ t('CONVERSATION.CSAT_REPLY_MESSAGE') }}</h4>\n <dl v-if=\"isRatingSubmitted\" class=\"mt-4\">\n <dt class=\"text-n-slate-11 italic\">\n {{ t('CONVERSATION.RATING_TITLE') }}\n </dt>\n <dd>{{ t(rating.translationKey) }}</dd>\n\n <dt v-if=\"response.feedbackMessage\" class=\"text-n-slate-11 italic mt-2\">\n {{ t('CONVERSATION.FEEDBACK_TITLE') }}\n </dt>\n <dd>{{ response.feedbackMessage }}</dd>\n </dl>\n </BaseBubble>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport BaseBubble from './Base.vue';\nimport { useI18n } from 'vue-i18n';\nimport { CONTENT_TYPES } from '../constants.js';\nimport { useMessageContext } from '../provider.js';\n\nconst { content, contentAttributes, contentType } = useMessageContext();\nconst { t } = useI18n();\n\nconst formValues = computed(() => {\n if (contentType.value === CONTENT_TYPES.FORM) {\n const { items, submittedValues = [] } = contentAttributes.value;\n\n if (submittedValues.length) {\n return submittedValues.map(submittedValue => {\n const item = items.find(\n formItem => formItem.name === submittedValue.name\n );\n return {\n title: submittedValue.value,\n value: submittedValue.value,\n label: item?.label,\n };\n });\n }\n\n return [];\n }\n\n if (contentType.value === CONTENT_TYPES.INPUT_SELECT) {\n const [item] = contentAttributes.value?.submittedValues ?? [];\n if (!item) return [];\n\n return [\n {\n title: item.title,\n value: item.value,\n label: '',\n },\n ];\n }\n\n return [];\n});\n</script>\n\n<template>\n <BaseBubble class=\"px-4 py-3\" data-bubble-name=\"csat\">\n <span v-dompurify-html=\"content\" :title=\"content\" />\n <dl v-if=\"formValues.length\" class=\"mt-4\">\n <template v-for=\"item in formValues\" :key=\"item.title\">\n <dt class=\"text-n-slate-11 italic mt-2\">\n {{ item.label || t('CONVERSATION.RESPONSE') }}\n </dt>\n <dd>{{ item.title }}</dd>\n </template>\n </dl>\n <div v-else class=\"my-2 font-medium\">\n {{ t('CONVERSATION.NO_RESPONSE') }}\n </div>\n </BaseBubble>\n</template>\n","<script setup>\nimport Icon from 'next/icon/Icon.vue';\nimport { useI18n } from 'vue-i18n';\nimport { useMessageContext } from './provider.js';\nimport { ORIENTATION } from './constants';\n\ndefineProps({\n error: { type: String, required: true },\n});\n\nconst { orientation } = useMessageContext();\n\nconst { t } = useI18n();\n</script>\n\n<template>\n <div class=\"text-xs text-n-ruby-11 flex items-center gap-1.5\">\n <span>{{ t('CHAT_LIST.FAILED_TO_SEND') }}</span>\n <div class=\"relative group\">\n <div\n class=\"bg-n-alpha-2 rounded-md size-5 grid place-content-center cursor-pointer\"\n >\n <Icon\n icon=\"i-lucide-alert-triangle\"\n class=\"text-n-ruby-11 size-[14px]\"\n />\n </div>\n <div\n class=\"absolute bg-n-alpha-3 px-4 py-3 border rounded-xl border-n-strong text-n-slate-12 bottom-6 w-52 text-xs backdrop-blur-[100px] shadow-[0px_0px_24px_0px_rgba(0,0,0,0.12)] opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all break-all\"\n :class=\"{\n 'ltr:left-0 rtl:right-0': orientation === ORIENTATION.LEFT,\n 'ltr:right-0 rtl:left-0': orientation === ORIENTATION.RIGHT,\n }\"\n >\n {{ error }}\n </div>\n </div>\n </div>\n</template>\n","<script setup>\nimport { onMounted, computed, ref, toRefs } from 'vue';\nimport { useTimeoutFn } from '@vueuse/core';\nimport { provideMessageContext } from './provider.js';\nimport { useTrack } from 'dashboard/composables';\nimport { emitter } from 'shared/helpers/mitt';\nimport { useI18n } from 'vue-i18n';\nimport { useRoute } from 'vue-router';\nimport { LocalStorage } from 'shared/helpers/localStorage';\nimport { ACCOUNT_EVENTS } from 'dashboard/helper/AnalyticsHelper/events';\nimport { LOCAL_STORAGE_KEYS } from 'dashboard/constants/localStorage';\nimport { BUS_EVENTS } from 'shared/constants/busEvents';\nimport {\n MESSAGE_TYPES,\n ATTACHMENT_TYPES,\n MESSAGE_VARIANTS,\n SENDER_TYPES,\n ORIENTATION,\n MESSAGE_STATUS,\n CONTENT_TYPES,\n} from './constants';\n\nimport Avatar from 'next/avatar/Avatar.vue';\n\nimport TextBubble from './bubbles/Text/Index.vue';\nimport ActivityBubble from './bubbles/Activity.vue';\nimport ImageBubble from './bubbles/Image.vue';\nimport FileBubble from './bubbles/File.vue';\nimport AudioBubble from './bubbles/Audio.vue';\nimport VideoBubble from './bubbles/Video.vue';\nimport InstagramStoryBubble from './bubbles/InstagramStory.vue';\nimport EmailBubble from './bubbles/Email/Index.vue';\nimport UnsupportedBubble from './bubbles/Unsupported.vue';\nimport ContactBubble from './bubbles/Contact.vue';\nimport DyteBubble from './bubbles/Dyte.vue';\nimport LocationBubble from './bubbles/Location.vue';\nimport CSATBubble from './bubbles/CSAT.vue';\nimport FormBubble from './bubbles/Form.vue';\n\nimport MessageError from './MessageError.vue';\nimport ContextMenu from 'dashboard/modules/conversations/components/MessageContextMenu.vue';\n\n/**\n * @typedef {Object} Attachment\n * @property {number} id - Unique identifier for the attachment\n * @property {number} messageId - ID of the associated message\n * @property {'image'|'audio'|'video'|'file'|'location'|'fallback'|'share'|'story_mention'|'contact'|'ig_reel'} fileType - Type of the attachment (file or image)\n * @property {number} accountId - ID of the associated account\n * @property {string|null} extension - File extension\n * @property {string} dataUrl - URL to access the full attachment data\n * @property {string} thumbUrl - URL to access the thumbnail version\n * @property {number} fileSize - Size of the file in bytes\n * @property {number|null} width - Width of the image if applicable\n * @property {number|null} height - Height of the image if applicable\n */\n\n/**\n * @typedef {Object} Sender\n * @property {Object} additional_attributes - Additional attributes of the sender\n * @property {Object} custom_attributes - Custom attributes of the sender\n * @property {string} email - Email of the sender\n * @property {number} id - ID of the sender\n * @property {string|null} identifier - Identifier of the sender\n * @property {string} name - Name of the sender\n * @property {string|null} phone_number - Phone number of the sender\n * @property {string} thumbnail - Thumbnail URL of the sender\n * @property {string} type - Type of sender\n */\n\n/**\n * @typedef {Object} ContentAttributes\n * @property {string} externalError - an error message to be shown if the message failed to send\n */\n\n/**\n * @typedef {Object} Props\n * @property {('sent'|'delivered'|'read'|'failed'|'progress')} status - The delivery status of the message\n * @property {ContentAttributes} [contentAttributes={}] - Additional attributes of the message content\n * @property {Attachment[]} [attachments=[]] - The attachments associated with the message\n * @property {Sender|null} [sender=null] - The sender information\n * @property {boolean} [private=false] - Whether the message is private\n * @property {number|null} [senderId=null] - The ID of the sender\n * @property {number} createdAt - Timestamp when the message was created\n * @property {number} currentUserId - The ID of the current user\n * @property {number} id - The unique identifier for the message\n * @property {number} messageType - The type of message (must be one of MESSAGE_TYPES)\n * @property {string|null} [error=null] - Error message if the message failed to send\n * @property {string|null} [senderType=null] - The type of the sender\n * @property {string} content - The message content\n * @property {boolean} [groupWithNext=false] - Whether the message should be grouped with the next message\n * @property {Object|null} [inReplyTo=null] - The message to which this message is a reply\n * @property {boolean} [isEmailInbox=false] - Whether the message is from an email inbox\n * @property {number} conversationId - The ID of the conversation to which the message belongs\n * @property {number} inboxId - The ID of the inbox to which the message belongs\n */\n\n// eslint-disable-next-line vue/define-macros-order\nconst props = defineProps({\n id: { type: Number, required: true },\n messageType: {\n type: Number,\n required: true,\n validator: value => Object.values(MESSAGE_TYPES).includes(value),\n },\n status: {\n type: String,\n required: true,\n validator: value => Object.values(MESSAGE_STATUS).includes(value),\n },\n attachments: { type: Array, default: () => [] },\n content: { type: String, default: null },\n contentAttributes: { type: Object, default: () => ({}) },\n contentType: {\n type: String,\n default: 'text',\n validator: value => Object.values(CONTENT_TYPES).includes(value),\n },\n conversationId: { type: Number, required: true },\n createdAt: { type: Number, required: true }, // eslint-disable-line vue/no-unused-properties\n currentUserId: { type: Number, required: true },\n groupWithNext: { type: Boolean, default: false },\n inboxId: { type: Number, default: null }, // eslint-disable-line vue/no-unused-properties\n inboxSupportsReplyTo: { type: Object, default: () => ({}) },\n inReplyTo: { type: Object, default: null }, // eslint-disable-line vue/no-unused-properties\n isEmailInbox: { type: Boolean, default: false },\n private: { type: Boolean, default: false },\n sender: { type: Object, default: null },\n senderId: { type: Number, default: null },\n senderType: { type: String, default: null },\n sourceId: { type: String, default: '' }, // eslint-disable-line vue/no-unused-properties\n});\n\nconst contextMenuPosition = ref({});\nconst showBackgroundHighlight = ref(false);\nconst showContextMenu = ref(false);\nconst { t } = useI18n();\nconst route = useRoute();\n\n/**\n * Computes the message variant based on props\n * @type {import('vue').ComputedRef<'user'|'agent'|'activity'|'private'|'bot'|'template'>}\n */\nconst variant = computed(() => {\n if (props.private) return MESSAGE_VARIANTS.PRIVATE;\n\n if (props.isEmailInbox) {\n const emailInboxTypes = [MESSAGE_TYPES.INCOMING, MESSAGE_TYPES.OUTGOING];\n if (emailInboxTypes.includes(props.messageType)) {\n return MESSAGE_VARIANTS.EMAIL;\n }\n }\n\n if (props.contentType === CONTENT_TYPES.INCOMING_EMAIL) {\n return MESSAGE_VARIANTS.EMAIL;\n }\n\n if (props.status === MESSAGE_STATUS.FAILED) return MESSAGE_VARIANTS.ERROR;\n if (props.contentAttributes?.isUnsupported)\n return MESSAGE_VARIANTS.UNSUPPORTED;\n\n const isBot = !props.sender || props.sender.type === SENDER_TYPES.AGENT_BOT;\n if (isBot && props.messageType === MESSAGE_TYPES.OUTGOING) {\n return MESSAGE_VARIANTS.BOT;\n }\n\n const variants = {\n [MESSAGE_TYPES.INCOMING]: MESSAGE_VARIANTS.USER,\n [MESSAGE_TYPES.ACTIVITY]: MESSAGE_VARIANTS.ACTIVITY,\n [MESSAGE_TYPES.OUTGOING]: MESSAGE_VARIANTS.AGENT,\n [MESSAGE_TYPES.TEMPLATE]: MESSAGE_VARIANTS.TEMPLATE,\n };\n\n return variants[props.messageType] || MESSAGE_VARIANTS.USER;\n});\n\nconst isMyMessage = computed(() => {\n // if an outgoing message is still processing, then it's definitely a\n // message sent by the current user\n if (\n props.status === MESSAGE_STATUS.PROGRESS &&\n props.messageType === MESSAGE_TYPES.OUTGOING\n ) {\n return true;\n }\n const senderId = props.senderId ?? props.sender?.id;\n const senderType = props.senderType ?? props.sender?.type;\n\n if (!senderType || !senderId) {\n return false;\n }\n\n return (\n senderType.toLowerCase() === SENDER_TYPES.USER.toLowerCase() &&\n props.currentUserId === senderId\n );\n});\n\n/**\n * Computes the message orientation based on sender type and message type\n * @returns {import('vue').ComputedRef<'left'|'right'|'center'>} The computed orientation\n */\nconst orientation = computed(() => {\n if (isMyMessage.value) {\n return ORIENTATION.RIGHT;\n }\n\n if (props.messageType === MESSAGE_TYPES.ACTIVITY) return ORIENTATION.CENTER;\n\n return ORIENTATION.LEFT;\n});\n\nconst flexOrientationClass = computed(() => {\n const map = {\n [ORIENTATION.LEFT]: 'justify-start',\n [ORIENTATION.RIGHT]: 'justify-end',\n [ORIENTATION.CENTER]: 'justify-center',\n };\n\n return map[orientation.value];\n});\n\nconst gridClass = computed(() => {\n const map = {\n [ORIENTATION.LEFT]: 'grid grid-cols-[24px_1fr]',\n [ORIENTATION.RIGHT]: 'grid grid-cols-1fr',\n };\n\n return map[orientation.value];\n});\n\nconst gridTemplate = computed(() => {\n const map = {\n [ORIENTATION.LEFT]: `\n \"avatar bubble\"\n \"spacer meta\"\n `,\n [ORIENTATION.RIGHT]: `\n \"bubble\"\n \"meta\"\n `,\n };\n\n return map[orientation.value];\n});\n\nconst shouldGroupWithNext = computed(() => {\n if (props.status === MESSAGE_STATUS.FAILED) return false;\n\n return props.groupWithNext;\n});\n\nconst shouldShowAvatar = computed(() => {\n if (props.messageType === MESSAGE_TYPES.ACTIVITY) return false;\n if (orientation.value === ORIENTATION.RIGHT) return false;\n\n return true;\n});\n\nconst componentToRender = computed(() => {\n if (props.isEmailInbox && !props.private) {\n const emailInboxTypes = [MESSAGE_TYPES.INCOMING, MESSAGE_TYPES.OUTGOING];\n if (emailInboxTypes.includes(props.messageType)) return EmailBubble;\n }\n\n if (props.contentType === CONTENT_TYPES.INPUT_CSAT) {\n return CSATBubble;\n }\n\n if (\n [CONTENT_TYPES.INPUT_SELECT, CONTENT_TYPES.FORM].includes(props.contentType)\n ) {\n return FormBubble;\n }\n\n if (props.contentType === CONTENT_TYPES.INCOMING_EMAIL) {\n return EmailBubble;\n }\n\n if (props.contentAttributes?.isUnsupported) {\n return UnsupportedBubble;\n }\n\n if (props.contentAttributes.type === 'dyte') {\n return DyteBubble;\n }\n\n if (props.contentAttributes.imageType === 'story_mention') {\n return InstagramStoryBubble;\n }\n\n if (Array.isArray(props.attachments) && props.attachments.length === 1) {\n const fileType = props.attachments[0].fileType;\n\n if (!props.content) {\n if (fileType === ATTACHMENT_TYPES.IMAGE) return ImageBubble;\n if (fileType === ATTACHMENT_TYPES.FILE) return FileBubble;\n if (fileType === ATTACHMENT_TYPES.AUDIO) return AudioBubble;\n if (fileType === ATTACHMENT_TYPES.VIDEO) return VideoBubble;\n if (fileType === ATTACHMENT_TYPES.IG_REEL) return VideoBubble;\n if (fileType === ATTACHMENT_TYPES.LOCATION) return LocationBubble;\n }\n // Attachment content is the name of the contact\n if (fileType === ATTACHMENT_TYPES.CONTACT) return ContactBubble;\n }\n\n return TextBubble;\n});\n\nconst shouldShowContextMenu = computed(() => {\n return !(\n props.status === MESSAGE_STATUS.FAILED ||\n props.status === MESSAGE_STATUS.PROGRESS ||\n props.contentAttributes?.isUnsupported\n );\n});\n\nconst isBubble = computed(() => {\n return props.messageType !== MESSAGE_TYPES.ACTIVITY;\n});\n\nconst isMessageDeleted = computed(() => {\n return props.contentAttributes?.deleted;\n});\n\nconst payloadForContextMenu = computed(() => {\n return {\n id: props.id,\n content_attributes: props.contentAttributes,\n content: props.content,\n conversation_id: props.conversationId,\n };\n});\n\nconst contextMenuEnabledOptions = computed(() => {\n const hasText = !!props.content;\n const hasAttachments = !!(props.attachments && props.attachments.length > 0);\n\n const isOutgoing = props.messageType === MESSAGE_TYPES.OUTGOING;\n\n return {\n copy: hasText,\n delete: hasText || hasAttachments,\n cannedResponse: isOutgoing && hasText,\n replyTo: !props.private && props.inboxSupportsReplyTo.outgoing,\n };\n});\n\nconst shouldRenderMessage = computed(() => {\n const hasAttachments = !!(props.attachments && props.attachments.length > 0);\n const isEmailContentType = props.contentType === CONTENT_TYPES.INCOMING_EMAIL;\n const isUnsupported = props.contentAttributes?.isUnsupported;\n const isAnIntegrationMessage =\n props.contentType === CONTENT_TYPES.INTEGRATIONS;\n\n return (\n hasAttachments ||\n props.content ||\n isEmailContentType ||\n isUnsupported ||\n isAnIntegrationMessage\n );\n});\n\nfunction openContextMenu(e) {\n const shouldSkipContextMenu =\n e.target?.classList.contains('skip-context-menu') ||\n e.target?.tagName.toLowerCase() === 'a';\n if (shouldSkipContextMenu || getSelection().toString()) {\n return;\n }\n\n e.preventDefault();\n if (e.type === 'contextmenu') {\n useTrack(ACCOUNT_EVENTS.OPEN_MESSAGE_CONTEXT_MENU);\n }\n contextMenuPosition.value = {\n x: e.pageX || e.clientX,\n y: e.pageY || e.clientY,\n };\n showContextMenu.value = true;\n}\n\nfunction closeContextMenu() {\n showContextMenu.value = false;\n contextMenuPosition.value = { x: null, y: null };\n}\n\nfunction handleReplyTo() {\n const replyStorageKey = LOCAL_STORAGE_KEYS.MESSAGE_REPLY_TO;\n const { conversationId, id: replyTo } = props;\n\n LocalStorage.updateJsonStore(replyStorageKey, conversationId, replyTo);\n emitter.emit(BUS_EVENTS.TOGGLE_REPLY_TO_MESSAGE, props);\n}\n\nconst avatarInfo = computed(() => {\n if (!props.sender || props.sender.type === SENDER_TYPES.AGENT_BOT) {\n return {\n name: t('CONVERSATION.BOT'),\n src: '',\n };\n }\n\n if (props.sender) {\n return {\n name: props.sender.name,\n src: props.sender?.thumbnail,\n };\n }\n\n return {\n name: '',\n src: '',\n };\n});\n\nconst avatarTooltip = computed(() => {\n if (avatarInfo.value.name === '') return '';\n return `${t('CONVERSATION.SENT_BY')} ${avatarInfo.value.name}`;\n});\n\nconst setupHighlightTimer = () => {\n if (Number(route.query.messageId) !== Number(props.id)) {\n return;\n }\n\n showBackgroundHighlight.value = true;\n const HIGHLIGHT_TIMER = 1000;\n useTimeoutFn(() => {\n showBackgroundHighlight.value = false;\n }, HIGHLIGHT_TIMER);\n};\n\nonMounted(setupHighlightTimer);\n\nprovideMessageContext({\n ...toRefs(props),\n isPrivate: computed(() => props.private),\n variant,\n orientation,\n isMyMessage,\n shouldGroupWithNext,\n});\n</script>\n\n<!-- eslint-disable-next-line vue/no-root-v-if -->\n<template>\n <div\n v-if=\"shouldRenderMessage\"\n :id=\"`message${props.id}`\"\n class=\"flex w-full message-bubble-container mb-2\"\n :data-message-id=\"props.id\"\n :class=\"[\n flexOrientationClass,\n {\n 'group-with-next': shouldGroupWithNext,\n 'bg-n-alpha-1': showBackgroundHighlight,\n },\n ]\"\n >\n <div v-if=\"variant === MESSAGE_VARIANTS.ACTIVITY\">\n <ActivityBubble :content=\"content\" />\n </div>\n <div\n v-else\n :class=\"[\n gridClass,\n {\n 'gap-y-2': contentAttributes.externalError,\n 'w-full': variant === MESSAGE_VARIANTS.EMAIL,\n },\n ]\"\n class=\"gap-x-3\"\n :style=\"{\n gridTemplateAreas: gridTemplate,\n }\"\n >\n <div\n v-if=\"!shouldGroupWithNext && shouldShowAvatar\"\n v-tooltip.right-end=\"avatarTooltip\"\n class=\"[grid-area:avatar] flex items-end\"\n >\n <Avatar v-bind=\"avatarInfo\" :size=\"24\" />\n </div>\n <div\n class=\"[grid-area:bubble] flex\"\n :class=\"{\n 'ltr:pl-9 rtl:pl-0 justify-end': orientation === ORIENTATION.RIGHT,\n 'min-w-0': variant === MESSAGE_VARIANTS.EMAIL,\n }\"\n @contextmenu=\"openContextMenu($event)\"\n >\n <Component :is=\"componentToRender\" />\n </div>\n <MessageError\n v-if=\"contentAttributes.externalError\"\n class=\"[grid-area:meta]\"\n :class=\"flexOrientationClass\"\n :error=\"contentAttributes.externalError\"\n />\n </div>\n <div v-if=\"shouldShowContextMenu\" class=\"context-menu-wrap\">\n <ContextMenu\n v-if=\"isBubble && !isMessageDeleted\"\n :context-menu-position=\"contextMenuPosition\"\n :is-open=\"showContextMenu\"\n :enabled-options=\"contextMenuEnabledOptions\"\n :message=\"payloadForContextMenu\"\n hide-button\n @open=\"openContextMenu\"\n @close=\"closeContextMenu\"\n @reply-to=\"handleReplyTo\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n.group-with-next + .message-bubble-container {\n .left-bubble {\n @apply ltr:rounded-tl-sm rtl:rounded-tr-sm;\n }\n\n .right-bubble {\n @apply ltr:rounded-tr-sm rtl:rounded-tl-sm;\n }\n}\n</style>\n","<script setup>\nimport { defineProps, computed } from 'vue';\nimport Message from './Message.vue';\nimport { MESSAGE_TYPES } from './constants.js';\nimport { useCamelCase } from 'dashboard/composables/useTransformKeys';\n\n/**\n * Props definition for the component\n * @typedef {Object} Props\n * @property {Array} readMessages - Array of read messages\n * @property {Array} unReadMessages - Array of unread messages\n * @property {Number} currentUserId - ID of the current user\n * @property {Boolean} isAnEmailChannel - Whether this is an email channel\n * @property {Object} inboxSupportsReplyTo - Inbox reply support configuration\n * @property {Array} messages - Array of all messages [These are not in camelcase]\n */\nconst props = defineProps({\n currentUserId: {\n type: Number,\n required: true,\n },\n firstUnreadId: {\n type: Number,\n default: null,\n },\n isAnEmailChannel: {\n type: Boolean,\n default: false,\n },\n inboxSupportsReplyTo: {\n type: Object,\n default: () => ({ incoming: false, outgoing: false }),\n },\n messages: {\n type: Array,\n default: () => [],\n },\n});\n\nconst allMessages = computed(() => {\n return useCamelCase(props.messages, { deep: true });\n});\n\n/**\n * Determines if a message should be grouped with the next message\n * @param {Number} index - Index of the current message\n * @param {Array} searchList - Array of messages to check\n * @returns {Boolean} - Whether the message should be grouped with next\n */\nconst shouldGroupWithNext = (index, searchList) => {\n if (index === searchList.length - 1) return false;\n\n const current = searchList[index];\n const next = searchList[index + 1];\n\n if (next.status === 'failed') return false;\n\n const nextSenderId = next.senderId ?? next.sender?.id;\n const currentSenderId = current.senderId ?? current.sender?.id;\n const hasSameSender = nextSenderId === currentSenderId;\n\n const nextMessageType = next.messageType;\n const currentMessageType = current.messageType;\n\n const areBothTemplates =\n nextMessageType === MESSAGE_TYPES.TEMPLATE &&\n currentMessageType === MESSAGE_TYPES.TEMPLATE;\n\n if (!hasSameSender || areBothTemplates) return false;\n\n if (currentMessageType !== nextMessageType) return false;\n\n // Check if messages are in the same minute by rounding down to nearest minute\n return Math.floor(next.createdAt / 60) === Math.floor(current.createdAt / 60);\n};\n\n/**\n * Gets the message that was replied to\n * @param {Object} parentMessage - The message containing the reply reference\n * @returns {Object|null} - The message being replied to, or null if not found\n */\nconst getInReplyToMessage = parentMessage => {\n if (!parentMessage) return null;\n\n const inReplyToMessageId =\n parentMessage.contentAttributes?.inReplyTo ??\n parentMessage.content_attributes?.in_reply_to;\n\n if (!inReplyToMessageId) return null;\n\n // Find in-reply-to message in the messages prop\n const replyMessage = props.messages?.find(\n message => message.id === inReplyToMessageId\n );\n\n return replyMessage ? useCamelCase(replyMessage) : null;\n};\n</script>\n\n<template>\n <ul class=\"px-4 bg-n-background\">\n <slot name=\"beforeAll\" />\n <template v-for=\"(message, index) in allMessages\" :key=\"message.id\">\n <slot\n v-if=\"firstUnreadId && message.id === firstUnreadId\"\n name=\"unreadBadge\"\n />\n <Message\n v-bind=\"message\"\n :is-email-inbox=\"isAnEmailChannel\"\n :in-reply-to=\"getInReplyToMessage(message)\"\n :group-with-next=\"shouldGroupWithNext(index, allMessages)\"\n :inbox-supports-reply-to=\"inboxSupportsReplyTo\"\n :current-user-id=\"currentUserId\"\n data-clarity-mask=\"True\"\n />\n </template>\n <slot name=\"after\" />\n </ul>\n</template>\n","<script>\n// components\nimport WootButton from '../../../ui/WootButton.vue';\nimport Avatar from '../../Avatar.vue';\n\n// composables\nimport { useAI } from 'dashboard/composables/useAI';\nimport { useTrack } from 'dashboard/composables';\n\n// store & api\nimport { mapGetters } from 'vuex';\n\n// utils & constants\nimport { LocalStorage } from 'shared/helpers/localStorage';\nimport { LOCAL_STORAGE_KEYS } from 'dashboard/constants/localStorage';\nimport { OPEN_AI_EVENTS } from '../../../../helper/AnalyticsHelper/events';\n\nexport default {\n name: 'LabelSuggestion',\n components: {\n Avatar,\n WootButton,\n },\n props: {\n suggestedLabels: {\n type: Array,\n required: true,\n },\n chatLabels: {\n type: Array,\n required: false,\n default: () => [],\n },\n },\n setup() {\n const { isAIIntegrationEnabled } = useAI();\n\n return { isAIIntegrationEnabled };\n },\n data() {\n return {\n isDismissed: false,\n isHovered: false,\n selectedLabels: [],\n };\n },\n computed: {\n ...mapGetters({\n allLabels: 'labels/getLabels',\n currentAccountId: 'getCurrentAccountId',\n currentChat: 'getSelectedChat',\n }),\n conversationId() {\n return this.currentChat?.id;\n },\n labelTooltip() {\n if (this.preparedLabels.length > 1) {\n return this.$t('LABEL_MGMT.SUGGESTIONS.TOOLTIP.MULTIPLE_SUGGESTION');\n }\n\n return this.$t('LABEL_MGMT.SUGGESTIONS.TOOLTIP.SINGLE_SUGGESTION');\n },\n addButtonText() {\n if (this.selectedLabels.length === 1) {\n return this.$t('LABEL_MGMT.SUGGESTIONS.ADD_SELECTED_LABEL');\n }\n\n if (this.selectedLabels.length > 1) {\n return this.$t('LABEL_MGMT.SUGGESTIONS.ADD_SELECTED_LABELS');\n }\n\n return this.$t('LABEL_MGMT.SUGGESTIONS.ADD_ALL_LABELS');\n },\n preparedLabels() {\n return this.allLabels.filter(label =>\n this.suggestedLabels.includes(label.title)\n );\n },\n shouldShowSuggestions() {\n if (this.isDismissed) return false;\n if (!this.isAIIntegrationEnabled) return false;\n\n return this.preparedLabels.length && this.chatLabels.length === 0;\n },\n },\n watch: {\n conversationId: {\n immediate: true,\n handler() {\n this.selectedLabels = [];\n this.isDismissed = this.isConversationDismissed();\n },\n },\n },\n methods: {\n pushOrAddLabel(label) {\n if (this.preparedLabels.length === 1) {\n this.addAllLabels();\n return;\n }\n\n if (!this.selectedLabels.includes(label)) {\n this.selectedLabels.push(label);\n } else {\n this.selectedLabels = this.selectedLabels.filter(l => l !== label);\n }\n },\n dismissSuggestions() {\n LocalStorage.setFlag(\n LOCAL_STORAGE_KEYS.DISMISSED_LABEL_SUGGESTIONS,\n this.currentAccountId,\n this.conversationId\n );\n\n // dismiss this once the values are set\n this.isDismissed = true;\n this.trackLabelEvent(OPEN_AI_EVENTS.DISMISS_LABEL_SUGGESTION);\n },\n isConversationDismissed() {\n return LocalStorage.getFlag(\n LOCAL_STORAGE_KEYS.DISMISSED_LABEL_SUGGESTIONS,\n this.currentAccountId,\n this.conversationId\n );\n },\n addAllLabels() {\n let labelsToAdd = this.selectedLabels;\n if (!labelsToAdd.length) {\n labelsToAdd = this.preparedLabels.map(label => label.title);\n }\n this.$store.dispatch('conversationLabels/update', {\n conversationId: this.conversationId,\n labels: labelsToAdd,\n });\n this.trackLabelEvent(OPEN_AI_EVENTS.APPLY_LABEL_SUGGESTION);\n },\n trackLabelEvent(event) {\n const payload = {\n conversationId: this.conversationId,\n account: this.currentAccountId,\n suggestions: this.suggestedLabels,\n labelsApplied: this.selectedLabels.length\n ? this.selectedLabels\n : this.suggestedLabels,\n };\n\n useTrack(event, payload);\n },\n },\n};\n</script>\n\n<!-- eslint-disable-next-line vue/no-root-v-if -->\n<template>\n <li\n v-if=\"shouldShowSuggestions\"\n class=\"label-suggestion right\"\n @mouseover=\"isHovered = true\"\n @mouseleave=\"isHovered = false\"\n >\n <div class=\"wrap\">\n <div class=\"label-suggestion--container\">\n <h6 class=\"label-suggestion--title\">\n {{ $t('LABEL_MGMT.SUGGESTIONS.SUGGESTED_LABELS') }}\n </h6>\n <div class=\"label-suggestion--options\">\n <button\n v-for=\"label in preparedLabels\"\n :key=\"label.title\"\n v-tooltip.top=\"{\n content: selectedLabels.includes(label.title)\n ? $t('LABEL_MGMT.SUGGESTIONS.TOOLTIP.DESELECT')\n : labelTooltip,\n delay: { show: 600, hide: 0 },\n hideOnClick: true,\n }\"\n class=\"label-suggestion--option !px-0\"\n @click=\"pushOrAddLabel(label.title)\"\n >\n <woot-label\n variant=\"dashed\"\n v-bind=\"label\"\n :bg-color=\"\n selectedLabels.includes(label.title) ? 'var(--w-100)' : ''\n \"\n />\n </button>\n <WootButton\n v-if=\"preparedLabels.length === 1\"\n v-tooltip.top=\"{\n content: $t('LABEL_MGMT.SUGGESTIONS.TOOLTIP.DISMISS'),\n delay: { show: 600, hide: 0 },\n hideOnClick: true,\n }\"\n variant=\"smooth\"\n :color-scheme=\"isHovered ? 'alert' : 'primary'\"\n class=\"label--add\"\n icon=\"dismiss\"\n size=\"tiny\"\n @click=\"dismissSuggestions\"\n />\n </div>\n <div v-if=\"preparedLabels.length > 1\">\n <WootButton\n :variant=\"selectedLabels.length === 0 ? 'smooth' : ''\"\n class=\"label--add\"\n icon=\"add\"\n size=\"tiny\"\n @click=\"addAllLabels\"\n >\n {{ addButtonText }}\n </WootButton>\n <WootButton\n v-tooltip.top=\"{\n content: $t('LABEL_MGMT.SUGGESTIONS.TOOLTIP.DISMISS'),\n delay: { show: 600, hide: 0 },\n hideOnClick: true,\n }\"\n :color-scheme=\"isHovered ? 'alert' : 'primary'\"\n variant=\"smooth\"\n class=\"label--add\"\n icon=\"dismiss\"\n size=\"tiny\"\n @click=\"dismissSuggestions\"\n />\n </div>\n </div>\n <div class=\"sender--info has-tooltip\" data-original-title=\"null\">\n <woot-thumbnail\n v-tooltip.top=\"{\n content: $t('LABEL_MGMT.SUGGESTIONS.POWERED_BY'),\n delay: { show: 600, hide: 0 },\n hideOnClick: true,\n }\"\n size=\"16px\"\n >\n <Avatar class=\"user-thumbnail thumbnail-rounded\">\n <fluent-icon class=\"chatwoot-ai-icon\" icon=\"chatwoot-ai\" />\n </Avatar>\n </woot-thumbnail>\n </div>\n </div>\n </li>\n</template>\n\n<style scoped lang=\"scss\">\n.wrap {\n display: flex;\n}\n\n.label-suggestion {\n flex-direction: row;\n justify-content: flex-end;\n margin-top: var(--space-normal);\n\n .label-suggestion--container {\n max-width: 300px;\n }\n\n .label-suggestion--options {\n text-align: right;\n display: flex;\n align-items: center;\n gap: var(--space-micro);\n\n button.label-suggestion--option {\n .label {\n cursor: pointer;\n margin-bottom: 0;\n }\n }\n }\n\n .chatwoot-ai-icon {\n height: var(--font-size-mini);\n width: var(--font-size-mini);\n }\n\n .label-suggestion--title {\n color: var(--b-600);\n margin-top: var(--space-micro);\n font-size: var(--font-size-micro);\n }\n}\n</style>\n","const totalMessageHeight = (total, element) => {\n return total + element.scrollHeight;\n};\n\nexport const calculateScrollTop = (\n conversationPanelHeight,\n parentHeight,\n relevantMessages\n) => {\n // add up scrollHeight of a `relevantMessages`\n let combinedMessageScrollHeight = [...relevantMessages].reduce(\n totalMessageHeight,\n 0\n );\n return (\n conversationPanelHeight - combinedMessageScrollHeight - parentHeight / 2\n );\n};\n","export const REPLY_POLICY = {\n FACEBOOK:\n 'https://developers.facebook.com/docs/messenger-platform/policy/policy-overview/',\n TWILIO_WHATSAPP:\n 'https://www.twilio.com/docs/whatsapp/tutorial/send-whatsapp-notification-messages-templates#sending-non-template-messages-within-a-24-hour-session',\n};\n","<script>\nimport { ref } from 'vue';\n// composable\nimport { useConfig } from 'dashboard/composables/useConfig';\nimport { useKeyboardEvents } from 'dashboard/composables/useKeyboardEvents';\nimport { useAI } from 'dashboard/composables/useAI';\nimport { useMapGetter } from 'dashboard/composables/store';\n\n// components\nimport ReplyBox from './ReplyBox.vue';\nimport Message from './Message.vue';\nimport NextMessageList from 'next/message/MessageList.vue';\nimport ConversationLabelSuggestion from './conversation/LabelSuggestion.vue';\nimport Banner from 'dashboard/components/ui/Banner.vue';\n\n// stores and apis\nimport { mapGetters } from 'vuex';\n\n// mixins\nimport inboxMixin, { INBOX_FEATURES } from 'shared/mixins/inboxMixin';\n\n// utils\nimport { emitter } from 'shared/helpers/mitt';\nimport { getTypingUsersText } from '../../../helper/commons';\nimport { calculateScrollTop } from './helpers/scrollTopCalculationHelper';\nimport { LocalStorage } from 'shared/helpers/localStorage';\nimport {\n filterDuplicateSourceMessages,\n getReadMessages,\n getUnreadMessages,\n} from 'dashboard/helper/conversationHelper';\n\n// constants\nimport { BUS_EVENTS } from 'shared/constants/busEvents';\nimport { REPLY_POLICY } from 'shared/constants/links';\nimport wootConstants from 'dashboard/constants/globals';\nimport { LOCAL_STORAGE_KEYS } from 'dashboard/constants/localStorage';\nimport { FEATURE_FLAGS } from '../../../featureFlags';\n\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n Message,\n NextMessageList,\n ReplyBox,\n Banner,\n ConversationLabelSuggestion,\n NextButton,\n },\n mixins: [inboxMixin],\n props: {\n isContactPanelOpen: {\n type: Boolean,\n default: false,\n },\n isInboxView: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['contactPanelToggle'],\n setup() {\n const isPopOutReplyBox = ref(false);\n const { isEnterprise } = useConfig();\n\n const closePopOutReplyBox = () => {\n isPopOutReplyBox.value = false;\n };\n\n const showPopOutReplyBox = () => {\n isPopOutReplyBox.value = !isPopOutReplyBox.value;\n };\n\n const keyboardEvents = {\n Escape: {\n action: closePopOutReplyBox,\n },\n };\n\n useKeyboardEvents(keyboardEvents);\n\n const {\n isAIIntegrationEnabled,\n isLabelSuggestionFeatureEnabled,\n fetchIntegrationsIfRequired,\n fetchLabelSuggestions,\n } = useAI();\n\n const currentAccountId = useMapGetter('getCurrentAccountId');\n const isFeatureEnabledonAccount = useMapGetter(\n 'accounts/isFeatureEnabledonAccount'\n );\n\n const showNextBubbles = isFeatureEnabledonAccount.value(\n currentAccountId.value,\n FEATURE_FLAGS.CHATWOOT_V4\n );\n\n return {\n isEnterprise,\n isPopOutReplyBox,\n closePopOutReplyBox,\n showPopOutReplyBox,\n isAIIntegrationEnabled,\n isLabelSuggestionFeatureEnabled,\n fetchIntegrationsIfRequired,\n fetchLabelSuggestions,\n showNextBubbles,\n };\n },\n data() {\n return {\n isLoadingPrevious: true,\n heightBeforeLoad: null,\n conversationPanel: null,\n hasUserScrolled: false,\n isProgrammaticScroll: false,\n messageSentSinceOpened: false,\n labelSuggestions: [],\n };\n },\n\n computed: {\n ...mapGetters({\n currentChat: 'getSelectedChat',\n currentUserId: 'getCurrentUserID',\n listLoadingStatus: 'getAllMessagesLoaded',\n currentAccountId: 'getCurrentAccountId',\n }),\n isOpen() {\n return this.currentChat?.status === wootConstants.STATUS_TYPE.OPEN;\n },\n shouldShowLabelSuggestions() {\n return (\n this.isOpen &&\n this.isEnterprise &&\n this.isAIIntegrationEnabled &&\n !this.messageSentSinceOpened\n );\n },\n inboxId() {\n return this.currentChat.inbox_id;\n },\n inbox() {\n return this.$store.getters['inboxes/getInbox'](this.inboxId);\n },\n typingUsersList() {\n const userList = this.$store.getters[\n 'conversationTypingStatus/getUserList'\n ](this.currentChat.id);\n return userList;\n },\n isAnyoneTyping() {\n const userList = this.typingUsersList;\n return userList.length !== 0;\n },\n typingUserNames() {\n const userList = this.typingUsersList;\n if (this.isAnyoneTyping) {\n const [i18nKey, params] = getTypingUsersText(userList);\n return this.$t(i18nKey, params);\n }\n\n return '';\n },\n getMessages() {\n const messages = this.currentChat.messages || [];\n if (this.isAWhatsAppChannel) {\n return filterDuplicateSourceMessages(messages);\n }\n return messages;\n },\n readMessages() {\n return getReadMessages(\n this.getMessages,\n this.currentChat.agent_last_seen_at\n );\n },\n unReadMessages() {\n return getUnreadMessages(\n this.getMessages,\n this.currentChat.agent_last_seen_at\n );\n },\n shouldShowSpinner() {\n return (\n (this.currentChat && this.currentChat.dataFetched === undefined) ||\n (!this.listLoadingStatus && this.isLoadingPrevious)\n );\n },\n conversationType() {\n const { additional_attributes: additionalAttributes } = this.currentChat;\n const type = additionalAttributes ? additionalAttributes.type : '';\n return type || '';\n },\n\n isATweet() {\n return this.conversationType === 'tweet';\n },\n isRightOrLeftIcon() {\n if (this.isContactPanelOpen) {\n return 'arrow-chevron-right';\n }\n return 'arrow-chevron-left';\n },\n getLastSeenAt() {\n const { contact_last_seen_at: contactLastSeenAt } = this.currentChat;\n return contactLastSeenAt;\n },\n\n replyWindowBannerMessage() {\n if (this.isAWhatsAppChannel) {\n return this.$t('CONVERSATION.TWILIO_WHATSAPP_CAN_REPLY');\n }\n if (this.isAPIInbox) {\n const { additional_attributes: additionalAttributes = {} } = this.inbox;\n if (additionalAttributes) {\n const {\n agent_reply_time_window_message: agentReplyTimeWindowMessage,\n } = additionalAttributes;\n return agentReplyTimeWindowMessage;\n }\n return '';\n }\n return this.$t('CONVERSATION.CANNOT_REPLY');\n },\n replyWindowLink() {\n if (this.isAWhatsAppChannel) {\n return REPLY_POLICY.FACEBOOK;\n }\n if (!this.isAPIInbox) {\n return REPLY_POLICY.TWILIO_WHATSAPP;\n }\n return '';\n },\n replyWindowLinkText() {\n if (this.isAWhatsAppChannel) {\n return this.$t('CONVERSATION.24_HOURS_WINDOW');\n }\n if (!this.isAPIInbox) {\n return this.$t('CONVERSATION.TWILIO_WHATSAPP_24_HOURS_WINDOW');\n }\n return '';\n },\n unreadMessageCount() {\n return this.currentChat.unread_count || 0;\n },\n unreadMessageLabel() {\n const count =\n this.unreadMessageCount > 9 ? '9+' : this.unreadMessageCount;\n const label =\n this.unreadMessageCount > 1\n ? 'CONVERSATION.UNREAD_MESSAGES'\n : 'CONVERSATION.UNREAD_MESSAGE';\n return `${count} ${this.$t(label)}`;\n },\n isInstagramDM() {\n return this.conversationType === 'instagram_direct_message';\n },\n inboxSupportsReplyTo() {\n const incoming = this.inboxHasFeature(INBOX_FEATURES.REPLY_TO);\n const outgoing =\n this.inboxHasFeature(INBOX_FEATURES.REPLY_TO_OUTGOING) &&\n !this.is360DialogWhatsAppChannel;\n\n return { incoming, outgoing };\n },\n },\n\n watch: {\n currentChat(newChat, oldChat) {\n if (newChat.id === oldChat.id) {\n return;\n }\n this.fetchAllAttachmentsFromCurrentChat();\n this.fetchSuggestions();\n this.messageSentSinceOpened = false;\n },\n },\n\n created() {\n emitter.on(BUS_EVENTS.SCROLL_TO_MESSAGE, this.onScrollToMessage);\n // when a new message comes in, we refetch the label suggestions\n emitter.on(BUS_EVENTS.FETCH_LABEL_SUGGESTIONS, this.fetchSuggestions);\n // when a message is sent we set the flag to true this hides the label suggestions,\n // until the chat is changed and the flag is reset in the watch for currentChat\n emitter.on(BUS_EVENTS.MESSAGE_SENT, () => {\n this.messageSentSinceOpened = true;\n });\n },\n\n mounted() {\n this.addScrollListener();\n this.fetchAllAttachmentsFromCurrentChat();\n this.fetchSuggestions();\n },\n\n unmounted() {\n this.removeBusListeners();\n this.removeScrollListener();\n },\n\n methods: {\n async fetchSuggestions() {\n // start empty, this ensures that the label suggestions are not shown\n this.labelSuggestions = [];\n\n if (this.isLabelSuggestionDismissed()) {\n return;\n }\n\n if (!this.isEnterprise) {\n return;\n }\n\n // method available in mixin, need to ensure that integrations are present\n await this.fetchIntegrationsIfRequired();\n\n if (!this.isLabelSuggestionFeatureEnabled) {\n return;\n }\n\n this.labelSuggestions = await this.fetchLabelSuggestions({\n conversationId: this.currentChat.id,\n });\n\n // once the labels are fetched, we need to scroll to bottom\n // but we need to wait for the DOM to be updated\n // so we use the nextTick method\n this.$nextTick(() => {\n // this param is added to route, telling the UI to navigate to the message\n // it is triggered by the SCROLL_TO_MESSAGE method\n // see setActiveChat on ConversationView.vue for more info\n const { messageId } = this.$route.query;\n\n // only trigger the scroll to bottom if the user has not scrolled\n // and there's no active messageId that is selected in view\n if (!messageId && !this.hasUserScrolled) {\n this.scrollToBottom();\n }\n });\n },\n isLabelSuggestionDismissed() {\n return LocalStorage.getFlag(\n LOCAL_STORAGE_KEYS.DISMISSED_LABEL_SUGGESTIONS,\n this.currentAccountId,\n this.currentChat.id\n );\n },\n fetchAllAttachmentsFromCurrentChat() {\n this.$store.dispatch('fetchAllAttachments', this.currentChat.id);\n },\n removeBusListeners() {\n emitter.off(BUS_EVENTS.SCROLL_TO_MESSAGE, this.onScrollToMessage);\n },\n onScrollToMessage({ messageId = '' } = {}) {\n this.$nextTick(() => {\n const messageElement = document.getElementById('message' + messageId);\n if (messageElement) {\n this.isProgrammaticScroll = true;\n messageElement.scrollIntoView({ behavior: 'smooth' });\n this.fetchPreviousMessages();\n } else {\n this.scrollToBottom();\n }\n });\n this.makeMessagesRead();\n },\n addScrollListener() {\n this.conversationPanel = this.$el.querySelector('.conversation-panel');\n this.setScrollParams();\n this.conversationPanel.addEventListener('scroll', this.handleScroll);\n this.$nextTick(() => this.scrollToBottom());\n this.isLoadingPrevious = false;\n },\n removeScrollListener() {\n this.conversationPanel.removeEventListener('scroll', this.handleScroll);\n },\n scrollToBottom() {\n this.isProgrammaticScroll = true;\n let relevantMessages = [];\n\n // label suggestions are not part of the messages list\n // so we need to handle them separately\n let labelSuggestions =\n this.conversationPanel.querySelector('.label-suggestion');\n\n // if there are unread messages, scroll to the first unread message\n if (this.unreadMessageCount > 0) {\n // capturing only the unread messages\n relevantMessages =\n this.conversationPanel.querySelectorAll('.message--unread');\n } else if (labelSuggestions) {\n // when scrolling to the bottom, the label suggestions is below the last message\n // so we scroll there if there are no unread messages\n // Unread messages always take the highest priority\n relevantMessages = [labelSuggestions];\n } else {\n // if there are no unread messages or label suggestion, scroll to the last message\n // capturing last message from the messages list\n relevantMessages = Array.from(\n this.conversationPanel.querySelectorAll('.message--read')\n ).slice(-1);\n }\n\n this.conversationPanel.scrollTop = calculateScrollTop(\n this.conversationPanel.scrollHeight,\n this.$el.scrollHeight,\n relevantMessages\n );\n },\n onToggleContactPanel() {\n this.$emit('contactPanelToggle');\n },\n setScrollParams() {\n this.heightBeforeLoad = this.conversationPanel.scrollHeight;\n this.scrollTopBeforeLoad = this.conversationPanel.scrollTop;\n },\n\n async fetchPreviousMessages(scrollTop = 0) {\n this.setScrollParams();\n const shouldLoadMoreMessages =\n this.currentChat.dataFetched === true &&\n !this.listLoadingStatus &&\n !this.isLoadingPrevious;\n\n if (\n scrollTop < 100 &&\n !this.isLoadingPrevious &&\n shouldLoadMoreMessages\n ) {\n this.isLoadingPrevious = true;\n try {\n await this.$store.dispatch('fetchPreviousMessages', {\n conversationId: this.currentChat.id,\n before: this.currentChat.messages[0].id,\n });\n const heightDifference =\n this.conversationPanel.scrollHeight - this.heightBeforeLoad;\n this.conversationPanel.scrollTop =\n this.scrollTopBeforeLoad + heightDifference;\n this.setScrollParams();\n } catch (error) {\n // Ignore Error\n } finally {\n this.isLoadingPrevious = false;\n }\n }\n },\n\n handleScroll(e) {\n if (this.isProgrammaticScroll) {\n // Reset the flag\n this.isProgrammaticScroll = false;\n this.hasUserScrolled = false;\n } else {\n this.hasUserScrolled = true;\n }\n emitter.emit(BUS_EVENTS.ON_MESSAGE_LIST_SCROLL);\n this.fetchPreviousMessages(e.target.scrollTop);\n },\n\n makeMessagesRead() {\n this.$store.dispatch('markMessagesRead', { id: this.currentChat.id });\n },\n getInReplyToMessage(parentMessage) {\n if (!parentMessage) return {};\n const inReplyToMessageId = parentMessage.content_attributes?.in_reply_to;\n if (!inReplyToMessageId) return {};\n\n return this.currentChat?.messages.find(message => {\n if (message.id === inReplyToMessageId) {\n return true;\n }\n return false;\n });\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex flex-col justify-between flex-grow h-full min-w-0 m-0\">\n <Banner\n v-if=\"!currentChat.can_reply\"\n color-scheme=\"alert\"\n class=\"mt-2 mx-2 rounded-lg overflow-hidden\"\n :banner-message=\"replyWindowBannerMessage\"\n :href-link=\"replyWindowLink\"\n :href-link-text=\"replyWindowLinkText\"\n />\n <div class=\"flex justify-end\">\n <NextButton\n faded\n xs\n slate\n class=\"!rounded-r-none rtl:rotate-180 !rounded-2xl !fixed z-10\"\n :icon=\"\n isContactPanelOpen ? 'i-ph-caret-right-fill' : 'i-ph-caret-left-fill'\n \"\n :class=\"isInboxView ? 'top-52 md:top-40' : 'top-32'\"\n @click=\"onToggleContactPanel\"\n />\n </div>\n <NextMessageList\n v-if=\"showNextBubbles\"\n class=\"conversation-panel\"\n :current-user-id=\"currentUserId\"\n :first-unread-id=\"unReadMessages[0]?.id\"\n :is-an-email-channel=\"isAnEmailChannel\"\n :inbox-supports-reply-to=\"inboxSupportsReplyTo\"\n :messages=\"getMessages\"\n >\n <template #beforeAll>\n <transition name=\"slide-up\">\n <!-- eslint-disable-next-line vue/require-toggle-inside-transition -->\n <li class=\"min-h-[4rem]\">\n <span v-if=\"shouldShowSpinner\" class=\"spinner message\" />\n </li>\n </transition>\n </template>\n <template #unreadBadge>\n <li v-show=\"unreadMessageCount != 0\" class=\"unread--toast\">\n <span>\n {{ unreadMessageLabel }}\n </span>\n </li>\n </template>\n <template #after>\n <ConversationLabelSuggestion\n v-if=\"shouldShowLabelSuggestions\"\n :suggested-labels=\"labelSuggestions\"\n :chat-labels=\"currentChat.labels\"\n :conversation-id=\"currentChat.id\"\n />\n </template>\n </NextMessageList>\n <ul v-else class=\"conversation-panel\">\n <transition name=\"slide-up\">\n <!-- eslint-disable-next-line vue/require-toggle-inside-transition -->\n <li class=\"min-h-[4rem]\">\n <span v-if=\"shouldShowSpinner\" class=\"spinner message\" />\n </li>\n </transition>\n <Message\n v-for=\"message in readMessages\"\n :key=\"message.id\"\n class=\"message--read ph-no-capture\"\n data-clarity-mask=\"True\"\n :data=\"message\"\n :is-a-tweet=\"isATweet\"\n :is-a-whatsapp-channel=\"isAWhatsAppChannel\"\n :is-web-widget-inbox=\"isAWebWidgetInbox\"\n :is-a-facebook-inbox=\"isAFacebookInbox\"\n :is-an-email-inbox=\"isAnEmailChannel\"\n :is-instagram=\"isInstagramDM\"\n :inbox-supports-reply-to=\"inboxSupportsReplyTo\"\n :in-reply-to=\"getInReplyToMessage(message)\"\n />\n <li v-show=\"unreadMessageCount != 0\" class=\"unread--toast\">\n <span>\n {{ unreadMessageCount > 9 ? '9+' : unreadMessageCount }}\n {{\n unreadMessageCount > 1\n ? $t('CONVERSATION.UNREAD_MESSAGES')\n : $t('CONVERSATION.UNREAD_MESSAGE')\n }}\n </span>\n </li>\n <Message\n v-for=\"message in unReadMessages\"\n :key=\"message.id\"\n class=\"message--unread ph-no-capture\"\n data-clarity-mask=\"True\"\n :data=\"message\"\n :is-a-tweet=\"isATweet\"\n :is-a-whatsapp-channel=\"isAWhatsAppChannel\"\n :is-web-widget-inbox=\"isAWebWidgetInbox\"\n :is-a-facebook-inbox=\"isAFacebookInbox\"\n :is-instagram-dm=\"isInstagramDM\"\n :inbox-supports-reply-to=\"inboxSupportsReplyTo\"\n :in-reply-to=\"getInReplyToMessage(message)\"\n />\n <ConversationLabelSuggestion\n v-if=\"shouldShowLabelSuggestions\"\n :suggested-labels=\"labelSuggestions\"\n :chat-labels=\"currentChat.labels\"\n :conversation-id=\"currentChat.id\"\n />\n </ul>\n <div\n class=\"conversation-footer\"\n :class=\"{\n 'modal-mask': isPopOutReplyBox,\n 'bg-n-background': showNextBubbles && !isPopOutReplyBox,\n }\"\n >\n <div\n v-if=\"isAnyoneTyping\"\n class=\"absolute flex items-center w-full h-0 -top-7\"\n >\n <div\n class=\"flex py-2 pr-4 pl-5 shadow-md rounded-full bg-white dark:bg-slate-700 text-n-slate-11 text-xs font-semibold my-2.5 mx-auto\"\n >\n {{ typingUserNames }}\n <img\n class=\"w-6 ltr:ml-2 rtl:mr-2\"\n src=\"assets/images/typing.gif\"\n alt=\"Someone is typing\"\n />\n </div>\n </div>\n <ReplyBox\n v-model:popout-reply-box=\"isPopOutReplyBox\"\n @toggle-popout=\"showPopOutReplyBox\"\n />\n </div>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.modal-mask {\n @apply absolute;\n\n &::v-deep {\n .ProseMirror-woot-style {\n @apply max-h-[25rem];\n }\n\n .reply-box {\n @apply border border-n-weak max-w-[75rem] w-[70%];\n\n &.is-private {\n @apply dark:border-n-amber-3/30 border-n-amber-12/5;\n }\n }\n\n .reply-box .reply-box__top {\n @apply relative min-h-[27.5rem];\n }\n\n .reply-box__top .input {\n @apply min-h-[27.5rem];\n }\n\n .emoji-dialog {\n @apply absolute left-auto bottom-1;\n }\n }\n}\n</style>\n","<script setup>\nimport { ref } from 'vue';\n\nconst emit = defineEmits(['send']);\nconst message = ref('');\n\nconst sendMessage = () => {\n if (message.value.trim()) {\n emit('send', message.value);\n message.value = '';\n }\n};\n</script>\n\n<template>\n <form\n class=\"border border-n-weak bg-n-alpha-3 rounded-lg h-12 flex\"\n @submit.prevent=\"sendMessage\"\n >\n <input\n v-model=\"message\"\n type=\"text\"\n :placeholder=\"$t('CAPTAIN.COPILOT.SEND_MESSAGE')\"\n class=\"w-full reset-base bg-transparent px-4 py-3 text-n-slate-11 text-sm\"\n @keyup.enter=\"sendMessage\"\n />\n <button\n class=\"h-auto w-12 flex items-center justify-center text-n-slate-11\"\n type=\"submit\"\n >\n <i class=\"i-ph-arrow-up\" />\n </button>\n </form>\n</template>\n","<script>\n// Copilot Loader Component\n</script>\n\n<template>\n <div class=\"flex justify-start\">\n <div class=\"flex items-center space-x-2\">\n <span class=\"text-n-iris-11 font-medium\">\n {{ $t('CAPTAIN.COPILOT.LOADER') }}\n </span>\n <div class=\"flex space-x-1\">\n <div\n class=\"w-2 h-2 rounded-full bg-n-iris-9 animate-bounce [animation-delay:-0.3s]\"\n />\n <div\n class=\"w-2 h-2 rounded-full bg-n-iris-9 animate-bounce [animation-delay:-0.15s]\"\n />\n <div class=\"w-2 h-2 rounded-full bg-n-iris-9 animate-bounce\" />\n </div>\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { emitter } from 'shared/helpers/mitt';\nimport { useTrack } from 'dashboard/composables';\n\nimport { BUS_EVENTS } from 'shared/constants/busEvents';\nimport { INBOX_TYPES } from 'dashboard/helper/inbox';\nimport { COPILOT_EVENTS } from 'dashboard/helper/AnalyticsHelper/events';\nimport MessageFormatter from 'shared/helpers/MessageFormatter.js';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport Avatar from '../avatar/Avatar.vue';\n\nconst props = defineProps({\n message: {\n type: Object,\n required: true,\n },\n conversationInboxType: {\n type: String,\n required: true,\n },\n});\n\nconst messageContent = computed(() => {\n const formatter = new MessageFormatter(props.message.content);\n return formatter.formattedMessage;\n});\n\nconst insertIntoRichEditor = computed(() => {\n return [INBOX_TYPES.WEB, INBOX_TYPES.EMAIL].includes(\n props.conversationInboxType\n );\n});\n\nconst useCopilotResponse = () => {\n if (insertIntoRichEditor.value) {\n emitter.emit(BUS_EVENTS.INSERT_INTO_RICH_EDITOR, props.message?.content);\n } else {\n emitter.emit(BUS_EVENTS.INSERT_INTO_NORMAL_EDITOR, props.message?.content);\n }\n useTrack(COPILOT_EVENTS.USE_CAPTAIN_RESPONSE);\n};\n</script>\n\n<template>\n <div class=\"flex flex-row gap-2\">\n <Avatar\n name=\"Captain Copilot\"\n icon-name=\"i-woot-captain\"\n :size=\"24\"\n rounded-full\n />\n <div class=\"flex flex-col gap-1 text-n-slate-12\">\n <div class=\"font-medium\">{{ $t('CAPTAIN.NAME') }}</div>\n <div v-dompurify-html=\"messageContent\" class=\"prose-sm break-words\" />\n <div class=\"flex flex-row mt-1\">\n <Button\n :label=\"$t('CAPTAIN.COPILOT.USE')\"\n faded\n sm\n slate\n @click=\"useCopilotResponse\"\n />\n </div>\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport DropdownContainer from 'next/dropdown-menu/base/DropdownContainer.vue';\nimport DropdownSection from 'next/dropdown-menu/base/DropdownSection.vue';\nimport DropdownBody from 'next/dropdown-menu/base/DropdownBody.vue';\nimport DropdownItem from 'next/dropdown-menu/base/DropdownItem.vue';\n\nconst props = defineProps({\n assistants: {\n type: Array,\n required: true,\n },\n activeAssistant: {\n type: Object,\n required: true,\n },\n});\n\nconst emit = defineEmits(['setAssistant']);\n\nconst { t } = useI18n();\n\nconst activeAssistantLabel = computed(() => {\n return props.activeAssistant\n ? props.activeAssistant.name\n : t('CAPTAIN.COPILOT.SELECT_ASSISTANT');\n});\n</script>\n\n<template>\n <div>\n <DropdownContainer>\n <template #trigger=\"{ toggle, isOpen }\">\n <Button\n :label=\"activeAssistantLabel\"\n icon=\"i-woot-captain\"\n ghost\n slate\n xs\n :class=\"{ 'bg-n-alpha-2': isOpen }\"\n @click=\"toggle\"\n />\n </template>\n <DropdownBody class=\"bottom-9 min-w-64 z-50\" strong>\n <DropdownSection class=\"max-h-80 overflow-scroll\">\n <DropdownItem\n v-for=\"assistant in assistants\"\n :key=\"assistant.id\"\n class=\"!items-start !gap-1 flex-col cursor-pointer\"\n @click=\"() => emit('setAssistant', assistant)\"\n >\n <template #label>\n <div class=\"flex gap-1 justify-between w-full\">\n <div class=\"items-start flex gap-1 flex-col\">\n <span class=\"text-n-slate-12 text-sm\">\n {{ assistant.name }}\n </span>\n <span class=\"line-clamp-2 text-n-slate-11 text-xs\">\n {{ assistant.description }}\n </span>\n </div>\n\n <div\n v-if=\"assistant.id === activeAssistant?.id\"\n class=\"flex items-center justify-center flex-shrink-0 w-4 h-4 rounded-full bg-n-slate-12 dark:bg-n-slate-11\"\n >\n <i\n class=\"i-lucide-check text-white dark:text-n-slate-1 size-3\"\n />\n </div>\n </div>\n </template>\n </DropdownItem>\n </DropdownSection>\n </DropdownBody>\n </DropdownContainer>\n </div>\n</template>\n","<script setup>\nimport { nextTick, ref, watch } from 'vue';\nimport { useTrack } from 'dashboard/composables';\nimport { COPILOT_EVENTS } from 'dashboard/helper/AnalyticsHelper/events';\n\nimport CopilotInput from './CopilotInput.vue';\nimport CopilotLoader from './CopilotLoader.vue';\nimport CopilotAgentMessage from './CopilotAgentMessage.vue';\nimport CopilotAssistantMessage from './CopilotAssistantMessage.vue';\nimport ToggleCopilotAssistant from './ToggleCopilotAssistant.vue';\nimport Icon from '../icon/Icon.vue';\n\nconst props = defineProps({\n supportAgent: {\n type: Object,\n default: () => ({}),\n },\n messages: {\n type: Array,\n default: () => [],\n },\n isCaptainTyping: {\n type: Boolean,\n default: false,\n },\n conversationInboxType: {\n type: String,\n required: true,\n },\n assistants: {\n type: Array,\n default: () => [],\n },\n activeAssistant: {\n type: Object,\n default: () => ({}),\n },\n});\n\nconst emit = defineEmits(['sendMessage', 'reset', 'setAssistant']);\n\nconst COPILOT_USER_ROLES = ['assistant', 'system'];\n\nconst sendMessage = message => {\n emit('sendMessage', message);\n useTrack(COPILOT_EVENTS.SEND_MESSAGE);\n};\n\nconst useSuggestion = opt => {\n emit('sendMessage', opt.prompt);\n useTrack(COPILOT_EVENTS.SEND_SUGGESTED);\n};\n\nconst handleReset = () => {\n emit('reset');\n};\n\nconst chatContainer = ref(null);\n\nconst scrollToBottom = async () => {\n await nextTick();\n if (chatContainer.value) {\n chatContainer.value.scrollTop = chatContainer.value.scrollHeight;\n }\n};\n\nconst promptOptions = [\n {\n label: 'Summarize this conversation',\n prompt: `Summarize the key points discussed between the customer and the support agent, including the customer's concerns, questions, and the solutions or responses provided by the support agent`,\n },\n {\n label: 'Suggest an answer',\n prompt: `Analyze the customer’s inquiry, and draft a response that effectively addresses their concerns or questions. Ensure the reply is clear, concise, and provides helpful information.`,\n },\n {\n label: 'Rate this conversation',\n prompt: `Review the conversation to see how well it meets the customer’s needs. Share a rating out of 5 based on tone, clarity, and effectiveness.`,\n },\n];\n\nwatch(\n [() => props.messages, () => props.isCaptainTyping],\n () => {\n scrollToBottom();\n },\n { deep: true }\n);\n</script>\n\n<template>\n <div class=\"flex flex-col h-full text-sm leading-6 tracking-tight\">\n <div ref=\"chatContainer\" class=\"flex-1 px-4 py-4 space-y-6 overflow-y-auto\">\n <template v-for=\"message in messages\" :key=\"message.id\">\n <CopilotAgentMessage\n v-if=\"message.role === 'user'\"\n :support-agent=\"supportAgent\"\n :message=\"message\"\n />\n <CopilotAssistantMessage\n v-else-if=\"COPILOT_USER_ROLES.includes(message.role)\"\n :message=\"message\"\n :conversation-inbox-type=\"conversationInboxType\"\n />\n </template>\n\n <CopilotLoader v-if=\"isCaptainTyping\" />\n </div>\n\n <div\n v-if=\"!messages.length\"\n class=\"h-full w-full flex items-center justify-center\"\n >\n <div class=\"h-fit px-3 py-3 space-y-1\">\n <span class=\"text-xs text-n-slate-10\">\n {{ $t('COPILOT.TRY_THESE_PROMPTS') }}\n </span>\n <button\n v-for=\"prompt in promptOptions\"\n :key=\"prompt.label\"\n class=\"px-2 py-1 rounded-md border border-n-weak bg-n-slate-2 text-n-slate-11 flex items-center gap-1\"\n @click=\"() => useSuggestion(prompt)\"\n >\n <span>{{ prompt.label }}</span>\n <Icon icon=\"i-lucide-chevron-right\" />\n </button>\n </div>\n </div>\n\n <div class=\"mx-3 mt-px mb-2\">\n <div class=\"flex items-center gap-2 justify-between w-full mb-1\">\n <ToggleCopilotAssistant\n v-if=\"assistants.length\"\n :assistants=\"assistants\"\n :active-assistant=\"activeAssistant\"\n @set-assistant=\"$event => emit('setAssistant', $event)\"\n />\n <div v-else />\n <button\n v-if=\"messages.length\"\n class=\"text-xs flex items-center gap-1 hover:underline\"\n @click=\"handleReset\"\n >\n <i class=\"i-lucide-refresh-ccw\" />\n <span>{{ $t('CAPTAIN.COPILOT.RESET') }}</span>\n </button>\n </div>\n <CopilotInput class=\"mb-1 w-full\" @send=\"sendMessage\" />\n </div>\n </div>\n</template>\n","<script setup>\nimport { ref, computed, onMounted, watchEffect } from 'vue';\nimport { useStore } from 'dashboard/composables/store';\nimport Copilot from 'dashboard/components-next/copilot/Copilot.vue';\nimport ConversationAPI from 'dashboard/api/inbox/conversation';\nimport { useMapGetter } from 'dashboard/composables/store';\nimport { useUISettings } from 'dashboard/composables/useUISettings';\n\nconst props = defineProps({\n conversationId: {\n type: [Number, String],\n required: true,\n },\n conversationInboxType: {\n type: String,\n required: true,\n },\n});\n\nconst store = useStore();\nconst currentUser = useMapGetter('getCurrentUser');\nconst assistants = useMapGetter('captainAssistants/getRecords');\nconst inboxAssistant = useMapGetter('getCopilotAssistant');\nconst { uiSettings, updateUISettings } = useUISettings();\n\nconst messages = ref([]);\nconst isCaptainTyping = ref(false);\nconst selectedAssistantId = ref(null);\n\nconst activeAssistant = computed(() => {\n const preferredId = uiSettings.value.preferred_captain_assistant_id;\n\n // If the user has selected a specific assistant, it takes first preference for Copilot.\n if (preferredId) {\n const preferredAssistant = assistants.value.find(a => a.id === preferredId);\n // Return the preferred assistant if found, otherwise continue to next cases\n if (preferredAssistant) return preferredAssistant;\n }\n\n // If the above is not available, the assistant connected to the inbox takes preference.\n if (inboxAssistant.value) {\n const inboxMatchedAssistant = assistants.value.find(\n a => a.id === inboxAssistant.value.id\n );\n if (inboxMatchedAssistant) return inboxMatchedAssistant;\n }\n // If neither of the above is available, the first assistant in the account takes preference.\n return assistants.value[0];\n});\n\nconst setAssistant = async assistant => {\n selectedAssistantId.value = assistant.id;\n await updateUISettings({\n preferred_captain_assistant_id: assistant.id,\n });\n};\n\nconst handleReset = () => {\n messages.value = [];\n};\n\nconst sendMessage = async message => {\n // Add user message\n messages.value.push({\n id: messages.value.length + 1,\n role: 'user',\n content: message,\n });\n isCaptainTyping.value = true;\n\n try {\n const { data } = await ConversationAPI.requestCopilot(\n props.conversationId,\n {\n previous_history: messages.value\n .map(m => ({\n role: m.role,\n content: m.content,\n }))\n .slice(0, -1),\n message,\n assistant_id: selectedAssistantId.value,\n }\n );\n messages.value.push({\n id: new Date().getTime(),\n role: 'assistant',\n content: data.message,\n });\n } catch (error) {\n // eslint-disable-next-line\n console.log(error);\n } finally {\n isCaptainTyping.value = false;\n }\n};\n\nonMounted(() => {\n store.dispatch('captainAssistants/get');\n});\n\nwatchEffect(() => {\n if (props.conversationId) {\n store.dispatch('getInboxCaptainAssistantById', props.conversationId);\n selectedAssistantId.value = activeAssistant.value?.id;\n }\n});\n</script>\n\n<template>\n <Copilot\n :messages=\"messages\"\n :support-agent=\"currentUser\"\n :is-captain-typing=\"isCaptainTyping\"\n :conversation-inbox-type=\"conversationInboxType\"\n :assistants=\"assistants\"\n :active-assistant=\"activeAssistant\"\n @set-assistant=\"setAssistant\"\n @send-message=\"sendMessage\"\n @reset=\"handleReset\"\n />\n</template>\n","<script setup>\nimport EmojiOrIcon from 'shared/components/EmojiOrIcon.vue';\nimport { defineEmits } from 'vue';\n\ndefineProps({\n title: {\n type: String,\n required: true,\n },\n compact: {\n type: Boolean,\n default: false,\n },\n icon: {\n type: String,\n default: '',\n },\n emoji: {\n type: String,\n default: '',\n },\n isOpen: {\n type: Boolean,\n default: true,\n },\n});\n\nconst emit = defineEmits(['toggle']);\n\nconst onToggle = () => {\n emit('toggle');\n};\n</script>\n\n<template>\n <div class=\"text-sm\">\n <button\n class=\"flex items-center select-none w-full rounded-lg bg-n-slate-2 border border-n-weak m-0 cursor-grab justify-between py-2 px-4 drag-handle\"\n :class=\"{ 'rounded-bl-none rounded-br-none': isOpen }\"\n @click.stop=\"onToggle\"\n >\n <div class=\"flex justify-between\">\n <EmojiOrIcon class=\"inline-block w-5\" :icon=\"icon\" :emoji=\"emoji\" />\n <h5 class=\"text-n-slate-12 text-sm mb-0 py-0 pr-2 pl-0\">\n {{ title }}\n </h5>\n </div>\n <div class=\"flex flex-row\">\n <slot name=\"button\" />\n <div class=\"flex justify-end w-3 text-n-blue-text cursor-pointer\">\n <fluent-icon v-if=\"isOpen\" size=\"24\" icon=\"subtract\" type=\"solid\" />\n <fluent-icon v-else size=\"24\" icon=\"add\" type=\"solid\" />\n </div>\n </div>\n </button>\n <div\n v-if=\"isOpen\"\n class=\"bg-n-background border border-n-weak dark:border-n-slate-2 border-t-0 rounded-br-lg rounded-bl-lg\"\n :class=\"compact ? 'p-0' : 'px-2 py-4'\"\n >\n <slot />\n </div>\n </div>\n</template>\n","<script>\nimport ConversationCard from 'dashboard/components/widgets/conversation/ConversationCard.vue';\nimport { mapGetters } from 'vuex';\nimport Spinner from 'shared/components/Spinner.vue';\n\nexport default {\n components: {\n ConversationCard,\n Spinner,\n },\n props: {\n contactId: {\n type: [String, Number],\n required: true,\n },\n conversationId: {\n type: [String, Number],\n required: true,\n },\n },\n computed: {\n conversations() {\n return this.$store.getters['contactConversations/getContactConversation'](\n this.contactId\n );\n },\n previousConversations() {\n return this.conversations.filter(\n conversation => conversation.id !== Number(this.conversationId)\n );\n },\n ...mapGetters({\n uiFlags: 'contactConversations/getUIFlags',\n }),\n },\n watch: {\n contactId(newContactId, prevContactId) {\n if (newContactId && newContactId !== prevContactId) {\n this.$store.dispatch('contactConversations/get', newContactId);\n }\n },\n },\n mounted() {\n this.$store.dispatch('contactConversations/get', this.contactId);\n },\n};\n</script>\n\n<template>\n <div class=\"contact-conversation--panel\">\n <div v-if=\"!uiFlags.isFetching\" class=\"contact-conversation__wrap\">\n <div\n v-if=\"!previousConversations.length\"\n class=\"no-label-message px-4 p-3\"\n >\n <span>\n {{ $t('CONTACT_PANEL.CONVERSATIONS.NO_RECORDS_FOUND') }}\n </span>\n </div>\n <div v-else class=\"contact-conversation--list\">\n <ConversationCard\n v-for=\"conversation in previousConversations\"\n :key=\"conversation.id\"\n :chat=\"conversation\"\n :hide-inbox-name=\"false\"\n hide-thumbnail\n class=\"compact\"\n />\n </div>\n </div>\n <Spinner v-else />\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.no-label-message {\n @apply text-slate-500 dark:text-slate-400 mb-4;\n}\n\n::v-deep .conversation {\n @apply pr-0;\n .conversation--details {\n @apply pl-2;\n }\n}\n</style>\n","import { computed } from 'vue';\nimport { useMapGetter } from 'dashboard/composables/store';\nimport { useI18n } from 'vue-i18n';\nimport {\n getAgentsByUpdatedPresence,\n getSortedAgentsByAvailability,\n} from 'dashboard/helper/agentHelper';\n\n/**\n * A composable function that provides a list of agents for assignment.\n *\n * @param {boolean} [includeNoneAgent=true] - Whether to include a 'None' agent option.\n * @returns {Object} An object containing the agents list and assignable agents.\n */\nexport function useAgentsList(includeNoneAgent = true) {\n const { t } = useI18n();\n const currentUser = useMapGetter('getCurrentUser');\n const currentChat = useMapGetter('getSelectedChat');\n const currentAccountId = useMapGetter('getCurrentAccountId');\n const assignable = useMapGetter('inboxAssignableAgents/getAssignableAgents');\n\n const inboxId = computed(() => currentChat.value?.inbox_id);\n const isAgentSelected = computed(() => currentChat.value?.meta?.assignee);\n\n /**\n * Creates a 'None' agent object\n * @returns {Object} None agent object\n */\n const createNoneAgent = () => ({\n confirmed: true,\n name: t('AGENT_MGMT.MULTI_SELECTOR.LIST.NONE') || 'None',\n id: 0,\n role: 'agent',\n account_id: 0,\n email: 'None',\n });\n\n /**\n * @type {import('vue').ComputedRef<Array>}\n */\n const assignableAgents = computed(() => {\n return inboxId.value ? assignable.value(inboxId.value) : [];\n });\n\n /**\n * @type {import('vue').ComputedRef<Array>}\n */\n const agentsList = computed(() => {\n const agents = assignableAgents.value || [];\n const agentsByUpdatedPresence = getAgentsByUpdatedPresence(\n agents,\n currentUser.value,\n currentAccountId.value\n );\n\n const filteredAgentsByAvailability = getSortedAgentsByAvailability(\n agentsByUpdatedPresence\n );\n\n return [\n ...(includeNoneAgent && isAgentSelected.value ? [createNoneAgent()] : []),\n ...filteredAgentsByAvailability,\n ];\n });\n\n return {\n agentsList,\n assignableAgents,\n };\n}\n","<script>\nexport default {\n props: {\n title: { type: String, required: true },\n value: { type: [String, Number], default: '' },\n compact: { type: Boolean, default: false },\n },\n};\n</script>\n\n<template>\n <div class=\"overflow-auto\" :class=\"compact ? 'py-0 px-0' : 'py-3 px-4'\">\n <div class=\"items-center flex justify-between mb-1.5\">\n <span class=\"text-sm font-medium text-slate-800 dark:text-slate-100\">\n {{ title }}\n </span>\n <slot name=\"button\" />\n </div>\n <div v-if=\"value\" class=\"break-words\">\n <slot>\n {{ value }}\n </slot>\n </div>\n </div>\n</template>\n","<script>\nimport WootDropdownItem from 'shared/components/ui/dropdown/DropdownItem.vue';\nimport WootDropdownMenu from 'shared/components/ui/dropdown/DropdownMenu.vue';\nimport Thumbnail from 'dashboard/components/widgets/Thumbnail.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n WootDropdownItem,\n WootDropdownMenu,\n Thumbnail,\n NextButton,\n },\n\n props: {\n options: {\n type: Array,\n default: () => [],\n },\n selectedItems: {\n type: Array,\n default: () => [],\n },\n hasThumbnail: {\n type: Boolean,\n default: true,\n },\n inputPlaceholder: {\n type: String,\n default: 'Search',\n },\n noSearchResult: {\n type: String,\n default: 'No results found',\n },\n },\n emits: ['select'],\n\n data() {\n return {\n search: '',\n };\n },\n\n computed: {\n filteredOptions() {\n return this.options.filter(option => {\n return option.name.toLowerCase().includes(this.search.toLowerCase());\n });\n },\n noResult() {\n return this.filteredOptions.length === 0 && this.search !== '';\n },\n },\n\n mounted() {\n this.focusInput();\n },\n\n methods: {\n onclick(option) {\n this.$emit('select', option);\n },\n focusInput() {\n this.$refs.searchbar.focus();\n },\n isActive(option) {\n return this.selectedItems.some(item => item && option.id === item.id);\n },\n },\n};\n</script>\n\n<template>\n <div class=\"dropdown-wrap\">\n <div class=\"flex-auto flex-grow-0 flex-shrink-0 mb-2 max-h-8\">\n <input\n ref=\"searchbar\"\n v-model=\"search\"\n type=\"text\"\n class=\"search-input\"\n autofocus=\"true\"\n :placeholder=\"inputPlaceholder\"\n />\n </div>\n <div class=\"flex items-start justify-start flex-auto overflow-auto mt-2\">\n <div class=\"w-full max-h-[10rem]\">\n <WootDropdownMenu>\n <WootDropdownItem v-for=\"option in filteredOptions\" :key=\"option.id\">\n <NextButton\n slate\n :variant=\"isActive(option) ? 'faded' : 'ghost'\"\n trailing-icon\n :icon=\"isActive(option) ? 'i-lucide-check' : ''\"\n class=\"w-full !px-2.5\"\n @click=\"() => onclick(option)\"\n >\n <div\n class=\"flex items-center justify-between w-full min-w-0 gap-2\"\n >\n <span\n class=\"my-0 overflow-hidden text-sm leading-4 whitespace-nowrap text-ellipsis\"\n :title=\"option.name\"\n >\n {{ option.name }}\n </span>\n </div>\n <Thumbnail\n v-if=\"hasThumbnail\"\n :src=\"option.thumbnail\"\n size=\"24px\"\n :username=\"option.name\"\n :status=\"option.availability_status\"\n has-border\n />\n </NextButton>\n </WootDropdownItem>\n </WootDropdownMenu>\n <h4\n v-if=\"noResult\"\n class=\"w-full justify-center items-center flex text-n-slate-10 py-2 px-2.5 overflow-hidden whitespace-nowrap text-ellipsis text-sm\"\n >\n {{ noSearchResult }}\n </h4>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.dropdown-wrap {\n @apply w-full flex flex-col max-h-[12.5rem];\n}\n\n.search-input {\n @apply m-0 w-full border border-solid border-transparent h-8 text-sm text-slate-700 dark:text-slate-100 rounded-md focus:border-woot-500 bg-slate-50 dark:bg-slate-900;\n}\n\n.multiselect-dropdown--item {\n @apply justify-between w-full;\n\n &.active {\n @apply bg-n-slate-2 dark:bg-n-solid-3 border-n-weak/50 dark:border-n-weak font-medium;\n }\n\n &:hover {\n @apply bg-n-slate-2 dark:bg-n-solid-3 text-slate-800 dark:text-slate-100;\n }\n}\n</style>\n","<script setup>\nimport { computed, defineEmits } from 'vue';\nimport { OnClickOutside } from '@vueuse/components';\nimport { useToggle } from '@vueuse/core';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport Thumbnail from 'dashboard/components/widgets/Thumbnail.vue';\nimport MultiselectDropdownItems from 'shared/components/ui/MultiselectDropdownItems.vue';\n\nconst props = defineProps({\n options: {\n type: Array,\n default: () => [],\n },\n selectedItem: {\n type: Object,\n default: () => ({}),\n },\n hasThumbnail: {\n type: Boolean,\n default: true,\n },\n multiselectorTitle: {\n type: String,\n default: '',\n },\n multiselectorPlaceholder: {\n type: String,\n default: 'None',\n },\n noSearchResult: {\n type: String,\n default: 'No results found',\n },\n inputPlaceholder: {\n type: String,\n default: 'Search',\n },\n});\n\nconst emit = defineEmits(['select']);\nconst [showSearchDropdown, toggleDropdown] = useToggle(false);\n\nconst onCloseDropdown = () => toggleDropdown(false);\nconst onClickSelectItem = value => {\n emit('select', value);\n onCloseDropdown();\n};\n\nconst hasValue = computed(() => {\n if (props.selectedItem && props.selectedItem.id) {\n return true;\n }\n return false;\n});\n</script>\n\n<template>\n <OnClickOutside @trigger=\"onCloseDropdown\">\n <div class=\"relative w-full mb-2\" @keyup.esc=\"onCloseDropdown\">\n <Button\n slate\n outline\n trailing-icon\n :icon=\"\n showSearchDropdown ? 'i-lucide-chevron-up' : 'i-lucide-chevron-down'\n \"\n class=\"w-full !px-2\"\n @click=\"\n () => toggleDropdown() // ensure that the event is not passed to the button\n \"\n >\n <div class=\"flex items-center justify-between w-full min-w-0\">\n <h4 v-if=\"!hasValue\" class=\"text-sm text-ellipsis text-n-slate-12\">\n {{ multiselectorPlaceholder }}\n </h4>\n <h4\n v-else\n class=\"items-center overflow-hidden text-sm leading-tight whitespace-nowrap text-ellipsis text-n-slate-12\"\n :title=\"selectedItem.name\"\n >\n {{ selectedItem.name }}\n </h4>\n </div>\n <Thumbnail\n v-if=\"hasValue && hasThumbnail\"\n :src=\"selectedItem.thumbnail\"\n size=\"24px\"\n :status=\"selectedItem.availability_status\"\n :username=\"selectedItem.name\"\n />\n </Button>\n <div\n :class=\"{ 'dropdown-pane--open': showSearchDropdown }\"\n class=\"dropdown-pane\"\n >\n <div class=\"flex items-center justify-between mb-1\">\n <h4\n class=\"m-0 overflow-hidden text-sm text-n-slate-11 whitespace-nowrap text-ellipsis\"\n >\n {{ multiselectorTitle }}\n </h4>\n <Button ghost slate xs icon=\"i-lucide-x\" @click=\"onCloseDropdown\" />\n </div>\n <MultiselectDropdownItems\n v-if=\"showSearchDropdown\"\n :options=\"options\"\n :selected-items=\"[selectedItem]\"\n :has-thumbnail=\"hasThumbnail\"\n :input-placeholder=\"inputPlaceholder\"\n :no-search-result=\"noSearchResult\"\n @select=\"onClickSelectItem\"\n />\n </div>\n </div>\n </OnClickOutside>\n</template>\n\n<style lang=\"scss\" scoped>\n.dropdown-pane {\n @apply box-border top-[2.625rem] w-full;\n}\n</style>\n","import { computed } from 'vue';\nimport { useStore, useStoreGetters } from 'dashboard/composables/store';\n\n/**\n * Composable for managing conversation labels\n * @returns {Object} An object containing methods and computed properties for conversation labels\n */\nexport function useConversationLabels() {\n const store = useStore();\n const getters = useStoreGetters();\n\n /**\n * The currently selected chat\n * @type {import('vue').ComputedRef<Object>}\n */\n const currentChat = computed(() => getters.getSelectedChat.value);\n\n /**\n * The ID of the current conversation\n * @type {import('vue').ComputedRef<number|null>}\n */\n const conversationId = computed(() => currentChat.value?.id);\n\n /**\n * All labels available for the account\n * @type {import('vue').ComputedRef<Array>}\n */\n const accountLabels = computed(() => getters['labels/getLabels'].value);\n\n /**\n * Labels currently saved to the conversation\n * @type {import('vue').ComputedRef<Array>}\n */\n const savedLabels = computed(() => {\n return store.getters['conversationLabels/getConversationLabels'](\n conversationId.value\n );\n });\n\n /**\n * Labels currently active on the conversation\n * @type {import('vue').ComputedRef<Array>}\n */\n const activeLabels = computed(() =>\n accountLabels.value.filter(({ title }) => savedLabels.value.includes(title))\n );\n\n /**\n * Labels available but not active on the conversation\n * @type {import('vue').ComputedRef<Array>}\n */\n const inactiveLabels = computed(() =>\n accountLabels.value.filter(\n ({ title }) => !savedLabels.value.includes(title)\n )\n );\n\n /**\n * Updates the labels for the current conversation\n * @param {string[]} selectedLabels - Array of label titles to be set for the conversation\n * @returns {Promise<void>}\n */\n const onUpdateLabels = async selectedLabels => {\n await store.dispatch('conversationLabels/update', {\n conversationId: conversationId.value,\n labels: selectedLabels,\n });\n };\n\n /**\n * Adds a label to the current conversation\n * @param {Object} value - The label object to be added\n * @param {string} value.title - The title of the label to be added\n */\n const addLabelToConversation = value => {\n const result = activeLabels.value.map(item => item.title);\n result.push(value.title);\n onUpdateLabels(result);\n };\n\n /**\n * Removes a label from the current conversation\n * @param {string} value - The title of the label to be removed\n */\n const removeLabelFromConversation = value => {\n const result = activeLabels.value\n .map(label => label.title)\n .filter(label => label !== value);\n onUpdateLabels(result);\n };\n\n return {\n accountLabels,\n savedLabels,\n activeLabels,\n inactiveLabels,\n addLabelToConversation,\n removeLabelFromConversation,\n onUpdateLabels,\n };\n}\n","<script>\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n NextButton,\n },\n props: {\n title: {\n type: String,\n default: '',\n },\n color: {\n type: String,\n default: '',\n },\n selected: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['selectLabel'],\n\n methods: {\n onClick() {\n this.$emit('selectLabel', this.title);\n },\n },\n};\n</script>\n\n<template>\n <woot-dropdown-item>\n <NextButton\n slate\n ghost\n blue\n trailing-icon\n :icon=\"selected ? 'i-lucide-circle-check' : ''\"\n class=\"w-full !px-2.5 justify-between\"\n :class=\"{ '!flex-row': !selected }\"\n @click=\"onClick\"\n >\n <div class=\"flex items-center min-w-0 gap-2\">\n <div\n v-if=\"color\"\n class=\"size-3 flex-shrink-0 rounded-full outline outline-1 outline-n-weak\"\n :style=\"{ backgroundColor: color }\"\n />\n <span\n class=\"overflow-hidden text-ellipsis whitespace-nowrap leading-[1.1]\"\n :title=\"title\"\n >\n {{ title }}\n </span>\n </div>\n </NextButton>\n </woot-dropdown-item>\n</template>\n","export const labelSanitizePattern = /[^a-zA-Z0-9_-]/g;\nexport const spacesPattern = /\\s+/g;\n\n/**\n * Sanitizes a label by removing unwanted characters and replacing spaces with hyphens.\n *\n * @param {string | undefined | null} label - The label to sanitize.\n * @returns {string} The sanitized label.\n *\n * @example\n * const label = 'My Label 123';\n * const sanitizedLabel = sanitizeLabel(label); // 'my-label-123'\n */\nexport const sanitizeLabel = (label = '') => {\n if (!label) return '';\n\n return label\n .trim()\n .toLowerCase()\n .replace(spacesPattern, '-')\n .replace(labelSanitizePattern, '');\n};\n","<script>\nimport LabelDropdownItem from './LabelDropdownItem.vue';\nimport Hotkey from 'dashboard/components/base/Hotkey.vue';\nimport AddLabelModal from 'dashboard/routes/dashboard/settings/labels/AddLabel.vue';\nimport { picoSearch } from '@scmmishra/pico-search';\nimport { sanitizeLabel } from 'shared/helpers/sanitizeData';\n\nexport default {\n components: {\n LabelDropdownItem,\n AddLabelModal,\n Hotkey,\n },\n\n props: {\n accountLabels: {\n type: Array,\n default: () => [],\n },\n selectedLabels: {\n type: Array,\n default: () => [],\n },\n allowCreation: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['update', 'add', 'remove'],\n\n data() {\n return {\n search: '',\n createModalVisible: false,\n };\n },\n\n computed: {\n createLabelPlaceholder() {\n const label = this.$t('CONTACT_PANEL.LABELS.LABEL_SELECT.CREATE_LABEL');\n return this.search ? `${label}:` : label;\n },\n\n filteredActiveLabels() {\n if (!this.search) return this.accountLabels;\n\n return picoSearch(this.accountLabels, this.search, ['title'], {\n threshold: 0.9,\n });\n },\n\n noResult() {\n return this.filteredActiveLabels.length === 0;\n },\n\n hasExactMatchInResults() {\n return this.filteredActiveLabels.some(\n label => label.title === this.search\n );\n },\n\n shouldShowCreate() {\n return this.allowCreation && this.filteredActiveLabels.length < 3;\n },\n\n parsedSearch() {\n return sanitizeLabel(this.search);\n },\n },\n\n mounted() {\n this.focusInput();\n },\n\n methods: {\n focusInput() {\n this.$refs.searchbar.focus();\n },\n\n updateLabels(label) {\n this.$emit('update', label);\n },\n\n onAdd(label) {\n this.$emit('add', label);\n },\n\n onRemove(label) {\n this.$emit('remove', label);\n },\n\n onAddRemove(label) {\n if (this.selectedLabels.includes(label.title)) {\n this.onRemove(label.title);\n } else {\n this.onAdd(label);\n }\n },\n\n showCreateModal() {\n this.createModalVisible = true;\n },\n\n hideCreateModal() {\n this.createModalVisible = false;\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex flex-col w-full max-h-[12.5rem]\">\n <div class=\"flex items-center justify-center mb-1\">\n <h4\n class=\"flex-grow m-0 overflow-hidden text-sm text-slate-800 dark:text-slate-100 whitespace-nowrap text-ellipsis\"\n >\n {{ $t('CONTACT_PANEL.LABELS.LABEL_SELECT.TITLE') }}\n </h4>\n <Hotkey\n custom-class=\"border border-solid text-slate-800 dark:text-slate-100 bg-slate-50 dark:bg-slate-600 text-xxs border-slate-75 dark:border-slate-600\"\n >\n {{ 'L' }}\n </Hotkey>\n </div>\n <div class=\"flex-auto flex-grow-0 flex-shrink-0 mb-2 max-h-8\">\n <input\n ref=\"searchbar\"\n v-model=\"search\"\n type=\"text\"\n class=\"search-input\"\n autofocus=\"true\"\n :placeholder=\"$t('CONTACT_PANEL.LABELS.LABEL_SELECT.PLACEHOLDER')\"\n />\n </div>\n <div\n class=\"flex items-start justify-start flex-auto flex-grow flex-shrink overflow-auto\"\n >\n <div class=\"w-full my-1\">\n <woot-dropdown-menu>\n <LabelDropdownItem\n v-for=\"label in filteredActiveLabels\"\n :key=\"label.title\"\n :title=\"label.title\"\n :color=\"label.color\"\n :selected=\"selectedLabels.includes(label.title)\"\n @select-label=\"onAddRemove(label)\"\n />\n </woot-dropdown-menu>\n <div\n v-if=\"noResult\"\n class=\"flex justify-center py-4 px-2.5 font-medium text-xs text-slate-700 dark:text-slate-200\"\n >\n {{ $t('CONTACT_PANEL.LABELS.LABEL_SELECT.NO_RESULT') }}\n </div>\n <div\n v-if=\"allowCreation && shouldShowCreate\"\n class=\"flex pt-1 border-t border-solid border-slate-100 dark:border-slate-900\"\n >\n <woot-button\n size=\"small\"\n variant=\"clear\"\n color-scheme=\"secondary\"\n icon=\"add\"\n is-expanded\n class=\"button-new-label\"\n :is-disabled=\"hasExactMatchInResults\"\n @click=\"showCreateModal\"\n >\n {{ createLabelPlaceholder }}\n {{ parsedSearch }}\n </woot-button>\n\n <woot-modal\n v-model:show=\"createModalVisible\"\n :on-close=\"hideCreateModal\"\n >\n <AddLabelModal\n :prefill-title=\"parsedSearch\"\n @close=\"hideCreateModal\"\n />\n </woot-modal>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.hotkey {\n @apply flex-shrink-0;\n}\n\n.search-input {\n @apply m-0 w-full border border-solid border-transparent h-8 text-sm text-slate-700 dark:text-slate-100 rounded-md focus:border-woot-500 bg-slate-50 dark:bg-slate-900;\n}\n\n.button-new-label {\n @apply whitespace-nowrap text-ellipsis overflow-hidden items-center;\n\n .icon {\n @apply min-w-0;\n }\n}\n</style>\n","<script setup>\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst emit = defineEmits(['add']);\n\nconst addLabel = () => {\n emit('add');\n};\n</script>\n\n<template>\n <Button\n faded\n xs\n icon=\"i-lucide-plus\"\n class=\"mb-0.5 ltr:mr-0.5 rtl:ml-0.5 !rounded-[4px]\"\n :label=\"$t('CONTACT_PANEL.LABELS.CONVERSATION.ADD_BUTTON')\"\n @click=\"addLabel\"\n />\n</template>\n","<script>\nimport { ref } from 'vue';\nimport { mapGetters } from 'vuex';\nimport { useAdmin } from 'dashboard/composables/useAdmin';\nimport { useConversationLabels } from 'dashboard/composables/useConversationLabels';\nimport { useKeyboardEvents } from 'dashboard/composables/useKeyboardEvents';\nimport Spinner from 'shared/components/Spinner.vue';\nimport LabelDropdown from 'shared/components/ui/label/LabelDropdown.vue';\nimport AddLabel from 'shared/components/ui/dropdown/AddLabel.vue';\n\nexport default {\n components: {\n Spinner,\n LabelDropdown,\n AddLabel,\n },\n setup() {\n const { isAdmin } = useAdmin();\n\n const {\n savedLabels,\n activeLabels,\n accountLabels,\n addLabelToConversation,\n removeLabelFromConversation,\n } = useConversationLabels();\n\n const showSearchDropdownLabel = ref(false);\n\n const toggleLabels = () => {\n showSearchDropdownLabel.value = !showSearchDropdownLabel.value;\n };\n\n const closeDropdownLabel = () => {\n showSearchDropdownLabel.value = false;\n };\n\n const keyboardEvents = {\n KeyL: {\n action: e => {\n e.preventDefault();\n toggleLabels();\n },\n },\n Escape: {\n action: () => {\n if (showSearchDropdownLabel.value) {\n toggleLabels();\n }\n },\n allowOnFocusedInput: true,\n },\n };\n useKeyboardEvents(keyboardEvents);\n return {\n isAdmin,\n savedLabels,\n activeLabels,\n accountLabels,\n addLabelToConversation,\n removeLabelFromConversation,\n showSearchDropdownLabel,\n closeDropdownLabel,\n toggleLabels,\n };\n },\n data() {\n return {\n selectedLabels: [],\n };\n },\n\n computed: {\n ...mapGetters({\n conversationUiFlags: 'conversationLabels/getUIFlags',\n }),\n },\n};\n</script>\n\n<template>\n <div class=\"sidebar-labels-wrap\">\n <div\n v-if=\"!conversationUiFlags.isFetching\"\n class=\"contact-conversation--list\"\n >\n <div\n v-on-clickaway=\"closeDropdownLabel\"\n class=\"label-wrap flex flex-wrap\"\n @keyup.esc=\"closeDropdownLabel\"\n >\n <AddLabel @add=\"toggleLabels\" />\n <woot-label\n v-for=\"label in activeLabels\"\n :key=\"label.id\"\n :title=\"label.title\"\n :description=\"label.description\"\n show-close\n :color=\"label.color\"\n variant=\"smooth\"\n class=\"max-w-[calc(100%-0.5rem)]\"\n @remove=\"removeLabelFromConversation\"\n />\n\n <div class=\"dropdown-wrap\">\n <div\n :class=\"{ 'dropdown-pane--open': showSearchDropdownLabel }\"\n class=\"dropdown-pane\"\n >\n <LabelDropdown\n v-if=\"showSearchDropdownLabel\"\n :account-labels=\"accountLabels\"\n :selected-labels=\"savedLabels\"\n :allow-creation=\"isAdmin\"\n @add=\"addLabelToConversation\"\n @remove=\"removeLabelFromConversation\"\n />\n </div>\n </div>\n </div>\n </div>\n <Spinner v-else />\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.sidebar-labels-wrap {\n margin-bottom: 0;\n}\n.contact-conversation--list {\n width: 100%;\n\n .label-wrap {\n line-height: var(--space-medium);\n position: relative;\n\n .dropdown-wrap {\n display: flex;\n left: -1px;\n margin-right: var(--space-medium);\n position: absolute;\n top: var(--space-medium);\n width: 100%;\n\n .dropdown-pane {\n width: 100%;\n box-sizing: border-box;\n }\n }\n }\n}\n\n.error {\n color: var(--r-500);\n font-size: var(--font-size-mini);\n font-weight: var(--font-weight-medium);\n}\n</style>\n","<!-- eslint-disable vue/v-slot-style -->\n<script>\nimport { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\nimport { useAgentsList } from 'dashboard/composables/useAgentsList';\nimport ContactDetailsItem from './ContactDetailsItem.vue';\nimport MultiselectDropdown from 'shared/components/ui/MultiselectDropdown.vue';\nimport ConversationLabels from './labels/LabelBox.vue';\nimport { CONVERSATION_PRIORITY } from '../../../../shared/constants/messages';\nimport { CONVERSATION_EVENTS } from '../../../helper/AnalyticsHelper/events';\nimport { useTrack } from 'dashboard/composables';\n\nexport default {\n components: {\n ContactDetailsItem,\n MultiselectDropdown,\n ConversationLabels,\n },\n props: {\n conversationId: {\n type: [Number, String],\n required: true,\n },\n },\n setup() {\n const { agentsList } = useAgentsList();\n return {\n agentsList,\n };\n },\n data() {\n return {\n priorityOptions: [\n {\n id: null,\n name: this.$t('CONVERSATION.PRIORITY.OPTIONS.NONE'),\n thumbnail: `/assets/images/dashboard/priority/none.svg`,\n },\n {\n id: CONVERSATION_PRIORITY.URGENT,\n name: this.$t('CONVERSATION.PRIORITY.OPTIONS.URGENT'),\n thumbnail: `/assets/images/dashboard/priority/${CONVERSATION_PRIORITY.URGENT}.svg`,\n },\n {\n id: CONVERSATION_PRIORITY.HIGH,\n name: this.$t('CONVERSATION.PRIORITY.OPTIONS.HIGH'),\n thumbnail: `/assets/images/dashboard/priority/${CONVERSATION_PRIORITY.HIGH}.svg`,\n },\n {\n id: CONVERSATION_PRIORITY.MEDIUM,\n name: this.$t('CONVERSATION.PRIORITY.OPTIONS.MEDIUM'),\n thumbnail: `/assets/images/dashboard/priority/${CONVERSATION_PRIORITY.MEDIUM}.svg`,\n },\n {\n id: CONVERSATION_PRIORITY.LOW,\n name: this.$t('CONVERSATION.PRIORITY.OPTIONS.LOW'),\n thumbnail: `/assets/images/dashboard/priority/${CONVERSATION_PRIORITY.LOW}.svg`,\n },\n ],\n };\n },\n computed: {\n ...mapGetters({\n currentChat: 'getSelectedChat',\n currentUser: 'getCurrentUser',\n teams: 'teams/getTeams',\n }),\n hasAnAssignedTeam() {\n return !!this.currentChat?.meta?.team;\n },\n teamsList() {\n if (this.hasAnAssignedTeam) {\n return [\n { id: 0, name: this.$t('TEAMS_SETTINGS.LIST.NONE') },\n ...this.teams,\n ];\n }\n return this.teams;\n },\n assignedAgent: {\n get() {\n return this.currentChat.meta.assignee;\n },\n set(agent) {\n const agentId = agent ? agent.id : 0;\n this.$store.dispatch('setCurrentChatAssignee', agent);\n this.$store\n .dispatch('assignAgent', {\n conversationId: this.currentChat.id,\n agentId,\n })\n .then(() => {\n useAlert(this.$t('CONVERSATION.CHANGE_AGENT'));\n });\n },\n },\n assignedTeam: {\n get() {\n return this.currentChat.meta.team;\n },\n set(team) {\n const conversationId = this.currentChat.id;\n const teamId = team ? team.id : 0;\n this.$store.dispatch('setCurrentChatTeam', { team, conversationId });\n this.$store\n .dispatch('assignTeam', { conversationId, teamId })\n .then(() => {\n useAlert(this.$t('CONVERSATION.CHANGE_TEAM'));\n });\n },\n },\n assignedPriority: {\n get() {\n const selectedOption = this.priorityOptions.find(\n opt => opt.id === this.currentChat.priority\n );\n\n return selectedOption || this.priorityOptions[0];\n },\n set(priorityItem) {\n const conversationId = this.currentChat.id;\n const oldValue = this.currentChat?.priority;\n const priority = priorityItem ? priorityItem.id : null;\n\n this.$store.dispatch('setCurrentChatPriority', {\n priority,\n conversationId,\n });\n this.$store\n .dispatch('assignPriority', { conversationId, priority })\n .then(() => {\n useTrack(CONVERSATION_EVENTS.CHANGE_PRIORITY, {\n oldValue,\n newValue: priority,\n from: 'Conversation Sidebar',\n });\n useAlert(\n this.$t('CONVERSATION.PRIORITY.CHANGE_PRIORITY.SUCCESSFUL', {\n priority: priorityItem.name,\n conversationId,\n })\n );\n });\n },\n },\n showSelfAssign() {\n if (!this.assignedAgent) {\n return true;\n }\n if (this.assignedAgent.id !== this.currentUser.id) {\n return true;\n }\n return false;\n },\n },\n methods: {\n onSelfAssign() {\n const {\n account_id,\n availability_status,\n available_name,\n email,\n id,\n name,\n role,\n avatar_url,\n } = this.currentUser;\n const selfAssign = {\n account_id,\n availability_status,\n available_name,\n email,\n id,\n name,\n role,\n thumbnail: avatar_url,\n };\n this.assignedAgent = selfAssign;\n },\n onClickAssignAgent(selectedItem) {\n if (this.assignedAgent && this.assignedAgent.id === selectedItem.id) {\n this.assignedAgent = null;\n } else {\n this.assignedAgent = selectedItem;\n }\n },\n\n onClickAssignTeam(selectedItemTeam) {\n if (this.assignedTeam && this.assignedTeam.id === selectedItemTeam.id) {\n this.assignedTeam = null;\n } else {\n this.assignedTeam = selectedItemTeam;\n }\n },\n\n onClickAssignPriority(selectedPriorityItem) {\n const isSamePriority =\n this.assignedPriority &&\n this.assignedPriority.id === selectedPriorityItem.id;\n\n this.assignedPriority = isSamePriority ? null : selectedPriorityItem;\n },\n },\n};\n</script>\n\n<template>\n <div class=\"bg-white dark:bg-slate-900\">\n <div class=\"multiselect-wrap--small\">\n <ContactDetailsItem\n compact\n :title=\"$t('CONVERSATION_SIDEBAR.ASSIGNEE_LABEL')\"\n >\n <template #button>\n <woot-button\n v-if=\"showSelfAssign\"\n icon=\"arrow-right\"\n variant=\"link\"\n size=\"small\"\n @click=\"onSelfAssign\"\n >\n {{ $t('CONVERSATION_SIDEBAR.SELF_ASSIGN') }}\n </woot-button>\n </template>\n </ContactDetailsItem>\n <MultiselectDropdown\n :options=\"agentsList\"\n :selected-item=\"assignedAgent\"\n :multiselector-title=\"$t('AGENT_MGMT.MULTI_SELECTOR.TITLE.AGENT')\"\n :multiselector-placeholder=\"$t('AGENT_MGMT.MULTI_SELECTOR.PLACEHOLDER')\"\n :no-search-result=\"\n $t('AGENT_MGMT.MULTI_SELECTOR.SEARCH.NO_RESULTS.AGENT')\n \"\n :input-placeholder=\"\n $t('AGENT_MGMT.MULTI_SELECTOR.SEARCH.PLACEHOLDER.AGENT')\n \"\n @select=\"onClickAssignAgent\"\n />\n </div>\n <div class=\"multiselect-wrap--small\">\n <ContactDetailsItem\n compact\n :title=\"$t('CONVERSATION_SIDEBAR.TEAM_LABEL')\"\n />\n <MultiselectDropdown\n :options=\"teamsList\"\n :selected-item=\"assignedTeam\"\n :multiselector-title=\"$t('AGENT_MGMT.MULTI_SELECTOR.TITLE.TEAM')\"\n :multiselector-placeholder=\"$t('AGENT_MGMT.MULTI_SELECTOR.PLACEHOLDER')\"\n :no-search-result=\"\n $t('AGENT_MGMT.MULTI_SELECTOR.SEARCH.NO_RESULTS.TEAM')\n \"\n :input-placeholder=\"\n $t('AGENT_MGMT.MULTI_SELECTOR.SEARCH.PLACEHOLDER.TEAM')\n \"\n @select=\"onClickAssignTeam\"\n />\n </div>\n <div class=\"multiselect-wrap--small\">\n <ContactDetailsItem compact :title=\"$t('CONVERSATION.PRIORITY.TITLE')\" />\n <MultiselectDropdown\n :options=\"priorityOptions\"\n :selected-item=\"assignedPriority\"\n :multiselector-title=\"$t('CONVERSATION.PRIORITY.TITLE')\"\n :multiselector-placeholder=\"\n $t('CONVERSATION.PRIORITY.CHANGE_PRIORITY.SELECT_PLACEHOLDER')\n \"\n :no-search-result=\"\n $t('CONVERSATION.PRIORITY.CHANGE_PRIORITY.NO_RESULTS')\n \"\n :input-placeholder=\"\n $t('CONVERSATION.PRIORITY.CHANGE_PRIORITY.INPUT_PLACEHOLDER')\n \"\n @select=\"onClickAssignPriority\"\n />\n </div>\n <ContactDetailsItem\n compact\n :title=\"$t('CONVERSATION_SIDEBAR.ACCORDION.CONVERSATION_LABELS')\"\n />\n <ConversationLabels :conversation-id=\"conversationId\" />\n </div>\n</template>\n","<script>\nimport Thumbnail from './Thumbnail.vue';\n\nexport default {\n components: {\n Thumbnail,\n },\n props: {\n usersList: {\n type: Array,\n default: () => [],\n },\n size: {\n type: String,\n default: '24px',\n },\n showMoreThumbnailsCount: {\n type: Boolean,\n default: false,\n },\n moreThumbnailsText: {\n type: String,\n default: '',\n },\n gap: {\n type: String,\n default: 'normal',\n validator(value) {\n // The value must match one of these strings\n return ['normal', '', 'tight'].includes(value);\n },\n },\n },\n};\n</script>\n\n<template>\n <div class=\"overlapping-thumbnails\">\n <Thumbnail\n v-for=\"user in usersList\"\n :key=\"user.id\"\n v-tooltip=\"user.name\"\n :title=\"user.name\"\n :src=\"user.thumbnail\"\n :username=\"user.name\"\n has-border\n :size=\"size\"\n :class=\"`overlapping-thumbnail gap-${gap}`\"\n />\n <span v-if=\"showMoreThumbnailsCount\" class=\"thumbnail-more-text\">\n {{ moreThumbnailsText }}\n </span>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.overlapping-thumbnails {\n display: flex;\n}\n\n.overlapping-thumbnail {\n position: relative;\n box-shadow: var(--shadow-small);\n\n &:not(:first-child) {\n margin-left: var(--space-minus-smaller);\n }\n\n .gap-tight {\n margin-left: var(--space-minus-small);\n }\n}\n\n.thumbnail-more-text {\n display: inline-flex;\n align-items: center;\n position: relative;\n\n margin-left: var(--space-minus-small);\n padding: 0 var(--space-small);\n box-shadow: var(--shadow-small);\n background: var(--color-background);\n border-radius: var(--space-giga);\n border: 1px solid var(--white);\n\n color: var(--s-600);\n font-size: var(--font-size-mini);\n font-weight: var(--font-weight-medium);\n}\n</style>\n","<script>\nimport Spinner from 'shared/components/Spinner.vue';\nimport { useAlert } from 'dashboard/composables';\nimport { mapGetters } from 'vuex';\nimport { useAgentsList } from 'dashboard/composables/useAgentsList';\n\nimport ThumbnailGroup from 'dashboard/components/widgets/ThumbnailGroup.vue';\nimport MultiselectDropdownItems from 'shared/components/ui/MultiselectDropdownItems.vue';\n\nexport default {\n components: {\n Spinner,\n ThumbnailGroup,\n MultiselectDropdownItems,\n },\n props: {\n conversationId: {\n type: [Number, String],\n required: true,\n },\n },\n setup() {\n const { agentsList } = useAgentsList(false);\n return {\n agentsList,\n };\n },\n data() {\n return {\n selectedWatchers: [],\n showDropDown: false,\n };\n },\n computed: {\n ...mapGetters({\n watchersUiFlas: 'conversationWatchers/getUIFlags',\n currentUser: 'getCurrentUser',\n }),\n watchersFromStore() {\n return this.$store.getters['conversationWatchers/getByConversationId'](\n this.conversationId\n );\n },\n watchersList: {\n get() {\n return this.selectedWatchers;\n },\n set(participants) {\n this.selectedWatchers = [...participants];\n const userIds = participants.map(el => el.id);\n this.updateParticipant(userIds);\n },\n },\n isUserWatching() {\n return this.selectedWatchers.some(\n watcher => watcher.id === this.currentUser.id\n );\n },\n thumbnailList() {\n return this.selectedWatchers.slice(0, 4);\n },\n moreAgentCount() {\n const maxThumbnailCount = 4;\n return this.watchersList.length - maxThumbnailCount;\n },\n moreThumbnailsText() {\n if (this.moreAgentCount > 1) {\n return this.$t('CONVERSATION_PARTICIPANTS.REMANING_PARTICIPANTS_TEXT', {\n count: this.moreAgentCount,\n });\n }\n return this.$t('CONVERSATION_PARTICIPANTS.REMANING_PARTICIPANT_TEXT', {\n count: 1,\n });\n },\n showMoreThumbs() {\n return this.moreAgentCount > 0;\n },\n totalWatchersText() {\n if (this.selectedWatchers.length > 1) {\n return this.$t('CONVERSATION_PARTICIPANTS.TOTAL_PARTICIPANTS_TEXT', {\n count: this.selectedWatchers.length,\n });\n }\n return this.$t('CONVERSATION_PARTICIPANTS.TOTAL_PARTICIPANT_TEXT', {\n count: 1,\n });\n },\n },\n watch: {\n conversationId() {\n this.fetchParticipants();\n },\n watchersFromStore(participants = []) {\n this.selectedWatchers = [...participants];\n },\n },\n mounted() {\n this.fetchParticipants();\n this.$store.dispatch('agents/get');\n },\n methods: {\n fetchParticipants() {\n const conversationId = this.conversationId;\n this.$store.dispatch('conversationWatchers/show', { conversationId });\n },\n async updateParticipant(userIds) {\n const conversationId = this.conversationId;\n let alertMessage = this.$t(\n 'CONVERSATION_PARTICIPANTS.API.SUCCESS_MESSAGE'\n );\n\n try {\n await this.$store.dispatch('conversationWatchers/update', {\n conversationId,\n userIds,\n });\n } catch (error) {\n alertMessage =\n error?.message ||\n this.$t('CONVERSATION_PARTICIPANTS.API.ERROR_MESSAGE');\n } finally {\n useAlert(alertMessage);\n }\n this.fetchParticipants();\n },\n onOpenDropdown() {\n this.showDropDown = true;\n },\n onCloseDropdown() {\n this.showDropDown = false;\n },\n onClickItem(agent) {\n const isAgentSelected = this.watchersList.some(\n participant => participant.id === agent.id\n );\n\n if (isAgentSelected) {\n const updatedList = this.watchersList.filter(\n participant => participant.id !== agent.id\n );\n\n this.watchersList = [...updatedList];\n } else {\n this.watchersList = [...this.watchersList, agent];\n }\n },\n onSelfAssign() {\n this.watchersList = [...this.selectedWatchers, this.currentUser];\n },\n },\n};\n</script>\n\n<template>\n <div class=\"relative bg-white dark:bg-slate-900\">\n <div class=\"flex justify-between\">\n <div class=\"flex justify-between w-full mb-1\">\n <div>\n <p v-if=\"watchersList.length\" class=\"m-0 text-sm total-watchers\">\n <Spinner v-if=\"watchersUiFlas.isFetching\" size=\"tiny\" />\n {{ totalWatchersText }}\n </p>\n <p v-else class=\"m-0 text-sm text-slate-400 dark:text-slate-700\">\n {{ $t('CONVERSATION_PARTICIPANTS.NO_PARTICIPANTS_TEXT') }}\n </p>\n </div>\n <woot-button\n v-tooltip.left=\"$t('CONVERSATION_PARTICIPANTS.ADD_PARTICIPANTS')\"\n :title=\"$t('CONVERSATION_PARTICIPANTS.ADD_PARTICIPANTS')\"\n icon=\"settings\"\n size=\"tiny\"\n variant=\"smooth\"\n color-scheme=\"secondary\"\n @click=\"onOpenDropdown\"\n />\n </div>\n </div>\n <div class=\"flex items-center justify-between\">\n <ThumbnailGroup\n :more-thumbnails-text=\"moreThumbnailsText\"\n :show-more-thumbnails-count=\"showMoreThumbs\"\n :users-list=\"thumbnailList\"\n />\n <p\n v-if=\"isUserWatching\"\n class=\"m-0 text-sm text-slate-300 dark:text-slate-300\"\n >\n {{ $t('CONVERSATION_PARTICIPANTS.YOU_ARE_WATCHING') }}\n </p>\n <woot-button\n v-else\n icon=\"arrow-right\"\n variant=\"link\"\n size=\"small\"\n @click=\"onSelfAssign\"\n >\n {{ $t('CONVERSATION_PARTICIPANTS.WATCH_CONVERSATION') }}\n </woot-button>\n </div>\n <div\n v-on-clickaway=\"\n () => {\n onCloseDropdown();\n }\n \"\n :class=\"{ 'dropdown-pane--open': showDropDown }\"\n class=\"dropdown-pane\"\n >\n <div class=\"flex items-center justify-between mb-1\">\n <h4\n class=\"m-0 overflow-hidden text-sm whitespace-nowrap text-ellipsis text-slate-800 dark:text-slate-100\"\n >\n {{ $t('CONVERSATION_PARTICIPANTS.ADD_PARTICIPANTS') }}\n </h4>\n <woot-button\n icon=\"dismiss\"\n size=\"tiny\"\n color-scheme=\"secondary\"\n variant=\"clear\"\n @click=\"onCloseDropdown\"\n />\n </div>\n <MultiselectDropdownItems\n :options=\"agentsList\"\n :selected-items=\"selectedWatchers\"\n has-thumbnail\n @select=\"onClickItem\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.dropdown-pane {\n @apply box-border top-8 w-full;\n}\n</style>\n","<script>\nimport { useAlert } from 'dashboard/composables';\nimport EmojiOrIcon from 'shared/components/EmojiOrIcon.vue';\nimport { copyTextToClipboard } from 'shared/helpers/clipboard';\n\nexport default {\n components: {\n EmojiOrIcon,\n },\n props: {\n href: {\n type: String,\n default: '',\n },\n icon: {\n type: String,\n required: true,\n },\n emoji: {\n type: String,\n required: true,\n },\n value: {\n type: String,\n default: '',\n },\n showCopy: {\n type: Boolean,\n default: false,\n },\n },\n methods: {\n async onCopy(e) {\n e.preventDefault();\n await copyTextToClipboard(this.value);\n useAlert(this.$t('CONTACT_PANEL.COPY_SUCCESSFUL'));\n },\n },\n};\n</script>\n\n<template>\n <div class=\"w-full h-5 ltr:-ml-1 rtl:-mr-1\">\n <a\n v-if=\"href\"\n :href=\"href\"\n class=\"flex items-center gap-2 text-n-slate-11 hover:underline\"\n >\n <EmojiOrIcon\n :icon=\"icon\"\n :emoji=\"emoji\"\n icon-size=\"14\"\n class=\"flex-shrink-0 ltr:ml-1 rtl:mr-1\"\n />\n <span\n v-if=\"value\"\n class=\"overflow-hidden text-sm whitespace-nowrap text-ellipsis\"\n :title=\"value\"\n >\n {{ value }}\n </span>\n <span v-else class=\"text-sm text-n-slate-11\">\n {{ $t('CONTACT_PANEL.NOT_AVAILABLE') }}\n </span>\n\n <woot-button\n v-if=\"showCopy\"\n type=\"submit\"\n variant=\"clear\"\n size=\"tiny\"\n color-scheme=\"secondary\"\n icon=\"clipboard\"\n class-names=\"p-0\"\n @click=\"onCopy\"\n />\n </a>\n\n <div v-else class=\"flex items-center gap-2 text-n-slate-11\">\n <EmojiOrIcon\n :icon=\"icon\"\n :emoji=\"emoji\"\n icon-size=\"14\"\n class=\"flex-shrink-0 ltr:ml-1 rtl:mr-1\"\n />\n <span\n v-if=\"value\"\n v-dompurify-html=\"value\"\n class=\"overflow-hidden text-sm whitespace-nowrap text-ellipsis\"\n />\n <span v-else class=\"text-sm text-n-slate-11\">\n {{ $t('CONTACT_PANEL.NOT_AVAILABLE') }}\n </span>\n </div>\n </div>\n</template>\n","<script>\nexport default {\n props: {\n socialProfiles: {\n type: Object,\n default: () => ({}),\n },\n },\n data() {\n return {\n socialMediaLinks: [\n { key: 'facebook', icon: 'facebook', link: 'https://facebook.com/' },\n { key: 'twitter', icon: 'twitter', link: 'https://twitter.com/' },\n { key: 'linkedin', icon: 'linkedin', link: 'https://linkedin.com/' },\n { key: 'github', icon: 'github', link: 'https://github.com/' },\n { key: 'instagram', icon: 'instagram', link: 'https://instagram.com/' },\n { key: 'telegram', icon: 'telegram', link: 'https://t.me/' },\n ],\n };\n },\n computed: {\n availableProfiles() {\n return this.socialMediaLinks.filter(\n mediaLink => !!this.socialProfiles[mediaLink.key]\n );\n },\n },\n};\n</script>\n\n<!-- eslint-disable-next-line vue/no-root-v-if -->\n<template>\n <div v-if=\"availableProfiles.length\" class=\"flex items-end gap-3 mx-0 my-2\">\n <a\n v-for=\"profile in availableProfiles\"\n :key=\"profile.key\"\n :href=\"`${profile.link}${socialProfiles[profile.key]}`\"\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n >\n <fluent-icon\n :icon=\"`brand-${profile.key}`\"\n size=\"16\"\n class=\"text-slate-500 dark:text-slate-400 hover:text-slate-700 dark:hover:text-slate-200\"\n />\n </a>\n </div>\n</template>\n","<script>\nimport { useAlert } from 'dashboard/composables';\nimport {\n DuplicateContactException,\n ExceptionWithMessage,\n} from 'shared/helpers/CustomErrors';\nimport { required, email } from '@vuelidate/validators';\nimport { useVuelidate } from '@vuelidate/core';\nimport countries from 'shared/constants/countries.js';\nimport { isPhoneNumberValid } from 'shared/helpers/Validators';\nimport parsePhoneNumber from 'libphonenumber-js';\n\nexport default {\n props: {\n contact: {\n type: Object,\n default: () => ({}),\n },\n inProgress: {\n type: Boolean,\n default: false,\n },\n onSubmit: {\n type: Function,\n default: () => {},\n },\n },\n emits: ['cancel', 'success'],\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n countries: countries,\n companyName: '',\n description: '',\n email: '',\n name: '',\n phoneNumber: '',\n activeDialCode: '',\n avatarFile: null,\n avatarUrl: '',\n country: {\n id: '',\n name: '',\n },\n city: '',\n socialProfileUserNames: {\n facebook: '',\n twitter: '',\n linkedin: '',\n github: '',\n },\n socialProfileKeys: [\n { key: 'facebook', prefixURL: 'https://facebook.com/' },\n { key: 'twitter', prefixURL: 'https://twitter.com/' },\n { key: 'linkedin', prefixURL: 'https://linkedin.com/' },\n { key: 'github', prefixURL: 'https://github.com/' },\n ],\n };\n },\n validations: {\n name: {\n required,\n },\n description: {},\n email: {\n email,\n },\n companyName: {},\n phoneNumber: {},\n bio: {},\n },\n computed: {\n parsePhoneNumber() {\n return parsePhoneNumber(this.phoneNumber);\n },\n isPhoneNumberNotValid() {\n if (this.phoneNumber !== '') {\n return (\n !isPhoneNumberValid(this.phoneNumber, this.activeDialCode) ||\n (this.phoneNumber !== '' ? this.activeDialCode === '' : false)\n );\n }\n return false;\n },\n phoneNumberError() {\n if (this.activeDialCode === '') {\n return this.$t('CONTACT_FORM.FORM.PHONE_NUMBER.DIAL_CODE_ERROR');\n }\n if (!isPhoneNumberValid(this.phoneNumber, this.activeDialCode)) {\n return this.$t('CONTACT_FORM.FORM.PHONE_NUMBER.ERROR');\n }\n return '';\n },\n setPhoneNumber() {\n if (this.parsePhoneNumber && this.parsePhoneNumber.countryCallingCode) {\n return this.phoneNumber;\n }\n if (this.phoneNumber === '' && this.activeDialCode !== '') {\n return '';\n }\n return this.activeDialCode\n ? `${this.activeDialCode}${this.phoneNumber}`\n : '';\n },\n },\n watch: {\n contact() {\n this.setContactObject();\n },\n },\n mounted() {\n this.setContactObject();\n this.setDialCode();\n },\n methods: {\n onCancel() {\n this.$emit('cancel');\n },\n onSuccess() {\n this.$emit('success');\n },\n countryNameWithCode({ name, id }) {\n if (!id) return name;\n if (!name && !id) return '';\n return `${name} (${id})`;\n },\n setDialCode() {\n if (\n this.phoneNumber !== '' &&\n this.parsePhoneNumber &&\n this.parsePhoneNumber.countryCallingCode\n ) {\n const dialCode = this.parsePhoneNumber.countryCallingCode;\n this.activeDialCode = `+${dialCode}`;\n }\n },\n setContactObject() {\n const {\n email: emailAddress,\n phone_number: phoneNumber,\n name,\n } = this.contact;\n const additionalAttributes = this.contact.additional_attributes || {};\n\n this.name = name || '';\n this.email = emailAddress || '';\n this.phoneNumber = phoneNumber || '';\n this.companyName = additionalAttributes.company_name || '';\n this.country = {\n id: additionalAttributes.country_code || '',\n name:\n additionalAttributes.country ||\n this.$t('CONTACT_FORM.FORM.COUNTRY.SELECT_COUNTRY'),\n };\n this.city = additionalAttributes.city || '';\n this.description = additionalAttributes.description || '';\n this.avatarUrl = this.contact.thumbnail || '';\n const {\n social_profiles: socialProfiles = {},\n screen_name: twitterScreenName,\n } = additionalAttributes;\n this.socialProfileUserNames = {\n twitter: socialProfiles.twitter || twitterScreenName || '',\n facebook: socialProfiles.facebook || '',\n linkedin: socialProfiles.linkedin || '',\n github: socialProfiles.github || '',\n instagram: socialProfiles.instagram || '',\n };\n },\n getContactObject() {\n if (this.country === null) {\n this.country = {\n id: '',\n name: '',\n };\n }\n const contactObject = {\n id: this.contact.id,\n name: this.name,\n email: this.email,\n phone_number: this.setPhoneNumber,\n additional_attributes: {\n ...this.contact.additional_attributes,\n description: this.description,\n company_name: this.companyName,\n country_code: this.country.id,\n country:\n this.country.name ===\n this.$t('CONTACT_FORM.FORM.COUNTRY.SELECT_COUNTRY')\n ? ''\n : this.country.name,\n city: this.city,\n social_profiles: this.socialProfileUserNames,\n },\n };\n if (this.avatarFile) {\n contactObject.avatar = this.avatarFile;\n contactObject.isFormData = true;\n }\n return contactObject;\n },\n setPhoneCode(code) {\n if (this.phoneNumber !== '' && this.parsePhoneNumber) {\n const dialCode = this.parsePhoneNumber.countryCallingCode;\n if (dialCode === code) {\n return;\n }\n this.activeDialCode = `+${dialCode}`;\n const newPhoneNumber = this.phoneNumber.replace(\n `+${dialCode}`,\n `${code}`\n );\n this.phoneNumber = newPhoneNumber;\n } else {\n this.activeDialCode = code;\n }\n },\n async handleSubmit() {\n this.v$.$touch();\n if (this.v$.$invalid || this.isPhoneNumberNotValid) {\n return;\n }\n try {\n await this.onSubmit(this.getContactObject());\n this.onSuccess();\n useAlert(this.$t('CONTACT_FORM.SUCCESS_MESSAGE'));\n } catch (error) {\n if (error instanceof DuplicateContactException) {\n if (error.data.includes('email')) {\n useAlert(this.$t('CONTACT_FORM.FORM.EMAIL_ADDRESS.DUPLICATE'));\n } else if (error.data.includes('phone_number')) {\n useAlert(this.$t('CONTACT_FORM.FORM.PHONE_NUMBER.DUPLICATE'));\n }\n } else if (error instanceof ExceptionWithMessage) {\n useAlert(error.data);\n } else {\n useAlert(this.$t('CONTACT_FORM.ERROR_MESSAGE'));\n }\n }\n },\n handleImageUpload({ file, url }) {\n this.avatarFile = file;\n this.avatarUrl = url;\n },\n async handleAvatarDelete() {\n try {\n if (this.contact && this.contact.id) {\n await this.$store.dispatch('contacts/deleteAvatar', this.contact.id);\n useAlert(this.$t('CONTACT_FORM.DELETE_AVATAR.API.SUCCESS_MESSAGE'));\n }\n this.avatarFile = null;\n this.avatarUrl = '';\n this.activeDialCode = '';\n } catch (error) {\n useAlert(\n error.message\n ? error.message\n : this.$t('CONTACT_FORM.DELETE_AVATAR.API.ERROR_MESSAGE')\n );\n }\n },\n },\n};\n</script>\n\n<template>\n <form\n class=\"w-full px-8 pt-6 pb-8 contact--form\"\n @submit.prevent=\"handleSubmit\"\n >\n <div>\n <div class=\"w-full\">\n <woot-avatar-uploader\n :label=\"$t('CONTACT_FORM.FORM.AVATAR.LABEL')\"\n :src=\"avatarUrl\"\n :username-avatar=\"name\"\n :delete-avatar=\"!!avatarUrl\"\n class=\"settings-item\"\n @on-avatar-select=\"handleImageUpload\"\n @on-avatar-delete=\"handleAvatarDelete\"\n />\n </div>\n </div>\n <div>\n <div class=\"w-full\">\n <label :class=\"{ error: v$.name.$error }\">\n {{ $t('CONTACT_FORM.FORM.NAME.LABEL') }}\n <input\n v-model=\"name\"\n type=\"text\"\n :placeholder=\"$t('CONTACT_FORM.FORM.NAME.PLACEHOLDER')\"\n @input=\"v$.name.$touch\"\n />\n </label>\n\n <label :class=\"{ error: v$.email.$error }\">\n {{ $t('CONTACT_FORM.FORM.EMAIL_ADDRESS.LABEL') }}\n <input\n v-model=\"email\"\n type=\"text\"\n :placeholder=\"$t('CONTACT_FORM.FORM.EMAIL_ADDRESS.PLACEHOLDER')\"\n @input=\"v$.email.$touch\"\n />\n <span v-if=\"v$.email.$error\" class=\"message\">\n {{ $t('CONTACT_FORM.FORM.EMAIL_ADDRESS.ERROR') }}\n </span>\n </label>\n </div>\n </div>\n <div class=\"w-full\">\n <label :class=\"{ error: v$.description.$error }\">\n {{ $t('CONTACT_FORM.FORM.BIO.LABEL') }}\n <textarea\n v-model=\"description\"\n type=\"text\"\n :placeholder=\"$t('CONTACT_FORM.FORM.BIO.PLACEHOLDER')\"\n @input=\"v$.description.$touch\"\n />\n </label>\n </div>\n <div>\n <div class=\"w-full\">\n <label\n :class=\"{\n error: isPhoneNumberNotValid,\n }\"\n >\n {{ $t('CONTACT_FORM.FORM.PHONE_NUMBER.LABEL') }}\n <woot-phone-input\n v-model=\"phoneNumber\"\n :value=\"phoneNumber\"\n :error=\"isPhoneNumberNotValid\"\n :placeholder=\"$t('CONTACT_FORM.FORM.PHONE_NUMBER.PLACEHOLDER')\"\n @blur=\"v$.phoneNumber.$touch\"\n @set-code=\"setPhoneCode\"\n />\n <span v-if=\"isPhoneNumberNotValid\" class=\"message\">\n {{ phoneNumberError }}\n </span>\n </label>\n <div\n v-if=\"isPhoneNumberNotValid || !phoneNumber\"\n class=\"relative mx-0 mt-0 mb-2.5 p-2 rounded-md text-sm border border-solid border-yellow-500 text-yellow-700 dark:border-yellow-700 bg-yellow-200/60 dark:bg-yellow-200/20 dark:text-yellow-400\"\n >\n {{ $t('CONTACT_FORM.FORM.PHONE_NUMBER.HELP') }}\n </div>\n </div>\n </div>\n <woot-input\n v-model=\"companyName\"\n class=\"w-full\"\n :label=\"$t('CONTACT_FORM.FORM.COMPANY_NAME.LABEL')\"\n :placeholder=\"$t('CONTACT_FORM.FORM.COMPANY_NAME.PLACEHOLDER')\"\n />\n <div>\n <div class=\"w-full\">\n <label>\n {{ $t('CONTACT_FORM.FORM.COUNTRY.LABEL') }}\n </label>\n <multiselect\n v-model=\"country\"\n track-by=\"id\"\n label=\"name\"\n :placeholder=\"$t('CONTACT_FORM.FORM.COUNTRY.PLACEHOLDER')\"\n selected-label\n :select-label=\"$t('CONTACT_FORM.FORM.COUNTRY.SELECT_PLACEHOLDER')\"\n :deselect-label=\"$t('CONTACT_FORM.FORM.COUNTRY.REMOVE')\"\n :custom-label=\"countryNameWithCode\"\n :max-height=\"160\"\n :options=\"countries\"\n allow-empty\n :option-height=\"104\"\n />\n </div>\n </div>\n <woot-input\n v-model=\"city\"\n class=\"w-full\"\n :label=\"$t('CONTACT_FORM.FORM.CITY.LABEL')\"\n :placeholder=\"$t('CONTACT_FORM.FORM.CITY.PLACEHOLDER')\"\n />\n\n <div class=\"w-full\">\n <label>{{ $t('CONTACTS_PAGE.LIST.TABLE_HEADER.SOCIAL_PROFILES') }}</label>\n <div\n v-for=\"socialProfile in socialProfileKeys\"\n :key=\"socialProfile.key\"\n class=\"flex items-stretch w-full mb-4\"\n >\n <span\n class=\"flex items-center h-10 px-2 text-sm border-solid bg-slate-50 border-y ltr:border-l rtl:border-r ltr:rounded-l-md rtl:rounded-r-md dark:bg-slate-700 text-slate-800 dark:text-slate-100 border-slate-200 dark:border-slate-600\"\n >\n {{ socialProfile.prefixURL }}\n </span>\n <input\n v-model=\"socialProfileUserNames[socialProfile.key]\"\n class=\"input-group-field ltr:!rounded-l-none rtl:rounded-r-none !mb-0\"\n type=\"text\"\n />\n </div>\n </div>\n <div class=\"flex flex-row justify-end w-full gap-2 px-0 py-2\">\n <div class=\"w-full\">\n <woot-submit-button\n :loading=\"inProgress\"\n :button-text=\"$t('CONTACT_FORM.FORM.SUBMIT')\"\n />\n <button class=\"button clear\" @click.prevent=\"onCancel\">\n {{ $t('CONTACT_FORM.FORM.CANCEL') }}\n </button>\n </div>\n </div>\n </form>\n</template>\n\n<style scoped lang=\"scss\">\n::v-deep {\n .multiselect .multiselect__tags .multiselect__single {\n @apply pl-0;\n }\n}\n</style>\n","<script>\nimport { mapGetters } from 'vuex';\nimport ContactForm from './ContactForm.vue';\n\nexport default {\n components: {\n ContactForm,\n },\n props: {\n show: {\n type: Boolean,\n default: false,\n },\n contact: {\n type: Object,\n default: () => ({}),\n },\n },\n emits: ['cancel', 'update:show'],\n computed: {\n ...mapGetters({\n uiFlags: 'contacts/getUIFlags',\n }),\n localShow: {\n get() {\n return this.show;\n },\n set(value) {\n this.$emit('update:show', value);\n },\n },\n },\n\n methods: {\n onCancel() {\n this.$emit('cancel');\n },\n onSuccess() {\n this.$emit('cancel');\n },\n async onSubmit(contactItem) {\n await this.$store.dispatch('contacts/update', contactItem);\n await this.$store.dispatch(\n 'contacts/fetchContactableInbox',\n this.contact.id\n );\n },\n },\n};\n</script>\n\n<template>\n <woot-modal\n v-model:show=\"localShow\"\n :on-close=\"onCancel\"\n modal-type=\"right-aligned\"\n >\n <div class=\"flex flex-col h-auto overflow-auto\">\n <woot-modal-header\n :header-title=\"`${$t('EDIT_CONTACT.TITLE')} - ${\n contact.name || contact.email\n }`\"\n :header-content=\"$t('EDIT_CONTACT.DESC')\"\n />\n <ContactForm\n :contact=\"contact\"\n :in-progress=\"uiFlags.isUpdating\"\n :on-submit=\"onSubmit\"\n @success=\"onSuccess\"\n @cancel=\"onCancel\"\n />\n </div>\n </woot-modal>\n</template>\n","<script>\nexport default {\n props: {\n primaryContactName: {\n type: String,\n default: '',\n },\n parentContactName: {\n type: String,\n default: '',\n },\n },\n};\n</script>\n\n<!-- eslint-disable-next-line vue/no-root-v-if -->\n<template>\n <div\n v-if=\"parentContactName\"\n class=\"my-4 relative p-2.5 border rounded-[4px] text-slate-800 dark:text-slate-100 border-slate-100 dark:border-slate-700 bg-white dark:bg-slate-800\"\n >\n <h5 class=\"text-base font-medium text-slate-900 dark:text-white\">\n {{ $t('MERGE_CONTACTS.SUMMARY.TITLE') }}\n </h5>\n <ul class=\"ml-0 list-none\">\n <li>\n <span class=\"inline-block mr-1\">âŒ</span>\n <span\n v-dompurify-html=\"\n $t('MERGE_CONTACTS.SUMMARY.DELETE_WARNING', {\n primaryContactName,\n })\n \"\n />\n </li>\n <li>\n <span class=\"inline-block mr-1\">✅</span>\n <span\n v-dompurify-html=\"\n $t('MERGE_CONTACTS.SUMMARY.ATTRIBUTE_WARNING', {\n primaryContactName,\n parentContactName,\n })\n \"\n />\n </li>\n </ul>\n </div>\n</template>\n","<script>\nimport Thumbnail from '../../../components/widgets/Thumbnail.vue';\n\nexport default {\n components: {\n Thumbnail,\n },\n props: {\n name: {\n type: String,\n default: '',\n },\n thumbnail: {\n type: String,\n default: '',\n },\n email: {\n type: String,\n default: '',\n },\n phoneNumber: {\n type: String,\n default: '',\n },\n identifier: {\n type: [String, Number],\n required: true,\n },\n },\n};\n</script>\n\n<template>\n <div class=\"option-item--user\">\n <Thumbnail :src=\"thumbnail\" size=\"28px\" :username=\"name\" />\n <div class=\"option__user-data\">\n <h5 class=\"option__title\">\n {{ name }}\n <span v-if=\"identifier\" class=\"user-identifier\">\n {{ $t('MERGE_CONTACTS.DROPDOWN_ITEM.ID', { identifier }) }}\n </span>\n </h5>\n <p class=\"option__body\">\n <span v-if=\"email\" class=\"email-icon-wrap\">\n <fluent-icon class=\"merge-contact--icon\" icon=\"mail\" size=\"12\" />\n {{ email }}\n </span>\n <span v-if=\"phoneNumber\" class=\"phone-icon-wrap\">\n <fluent-icon class=\"merge-contact--icon\" icon=\"call\" size=\"12\" />\n {{ phoneNumber }}\n </span>\n <span v-if=\"!phoneNumber && !email\">{{ '---' }}</span>\n </p>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.option-item--user {\n @apply flex items-center;\n}\n.user-identifier {\n @apply text-xs ml-0.5 text-slate-700 dark:text-slate-100;\n}\n.option__user-data {\n @apply flex flex-col flex-grow ml-2 mr-2;\n}\n.option__body,\n.option__title {\n @apply flex items-center justify-start leading-[1.2] text-sm;\n}\n.option__body .icon {\n @apply relative top-px mr-0.5 rtl:mr-0 rtl:ml-0.5;\n}\n.option__title {\n @apply text-slate-800 dark:text-slate-100 font-medium mb-0.5;\n}\n.option__body {\n @apply text-xs text-slate-700 dark:text-slate-100 mt-1;\n}\n\n.option__user-data .option__body {\n > .phone-icon-wrap,\n > .email-icon-wrap {\n @apply w-auto flex items-center;\n }\n}\n\n.merge-contact--icon {\n @apply -mb-0.5 mr-0.5;\n}\n</style>\n","<script>\nimport { required } from '@vuelidate/validators';\nimport { useVuelidate } from '@vuelidate/core';\n\nimport MergeContactSummary from 'dashboard/modules/contact/components/MergeContactSummary.vue';\nimport ContactDropdownItem from './ContactDropdownItem.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: { MergeContactSummary, ContactDropdownItem, NextButton },\n props: {\n primaryContact: {\n type: Object,\n required: true,\n },\n isSearching: {\n type: Boolean,\n default: false,\n },\n isMerging: {\n type: Boolean,\n default: false,\n },\n searchResults: {\n type: Array,\n default: () => [],\n },\n },\n emits: ['search', 'submit', 'cancel'],\n setup() {\n return { v$: useVuelidate() };\n },\n validations: {\n primaryContact: {\n required,\n },\n parentContact: {\n required,\n },\n },\n data() {\n return {\n parentContact: undefined,\n };\n },\n\n computed: {\n parentContactName() {\n return this.parentContact ? this.parentContact.name : '';\n },\n },\n methods: {\n searchChange(query) {\n this.$emit('search', query);\n },\n onSubmit() {\n this.v$.$touch();\n if (this.v$.$invalid) {\n return;\n }\n this.$emit('submit', this.parentContact.id);\n },\n onCancel() {\n this.$emit('cancel');\n },\n },\n};\n</script>\n\n<template>\n <form @submit.prevent=\"onSubmit\">\n <div>\n <div>\n <div\n class=\"mt-1 multiselect-wrap--medium\"\n :class=\"{ error: v$.parentContact.$error }\"\n >\n <label class=\"multiselect__label\">\n {{ $t('MERGE_CONTACTS.PARENT.TITLE') }}\n <woot-label\n :title=\"$t('MERGE_CONTACTS.PARENT.HELP_LABEL')\"\n color-scheme=\"success\"\n small\n class=\"ml-2\"\n />\n </label>\n <multiselect\n v-model=\"parentContact\"\n :options=\"searchResults\"\n label=\"name\"\n track-by=\"id\"\n :internal-search=\"false\"\n :clear-on-select=\"false\"\n :show-labels=\"false\"\n :placeholder=\"$t('MERGE_CONTACTS.PARENT.PLACEHOLDER')\"\n allow-empty\n :loading=\"isSearching\"\n :max-height=\"150\"\n open-direction=\"top\"\n @search-change=\"searchChange\"\n >\n <template #singleLabel=\"props\">\n <ContactDropdownItem\n :thumbnail=\"props.option.thumbnail\"\n :identifier=\"props.option.id\"\n :name=\"props.option.name\"\n :email=\"props.option.email\"\n :phone-number=\"props.option.phone_number\"\n />\n </template>\n <template #option=\"props\">\n <ContactDropdownItem\n :thumbnail=\"props.option.thumbnail\"\n :identifier=\"props.option.id\"\n :name=\"props.option.name\"\n :email=\"props.option.email\"\n :phone-number=\"props.option.phone_number\"\n />\n </template>\n <template #noResult>\n <span>\n {{ $t('AGENT_MGMT.SEARCH.NO_RESULTS') }}\n </span>\n </template>\n </multiselect>\n <span v-if=\"v$.parentContact.$error\" class=\"message\">\n {{ $t('MERGE_CONTACTS.FORM.CHILD_CONTACT.ERROR') }}\n </span>\n </div>\n </div>\n <div class=\"flex multiselect-wrap--medium\">\n <div\n class=\"w-8 relative text-base text-slate-100 dark:text-slate-600 after:content-[''] after:h-12 after:w-0 after:left-4 after:absolute after:border-l after:border-solid after:border-slate-100 after:dark:border-slate-600 before:content-[''] before:h-0 before:w-4 before:left-4 before:top-12 before:absolute before:border-b before:border-solid before:border-slate-100 before:dark:border-slate-600\"\n >\n <fluent-icon\n icon=\"arrow-up\"\n class=\"absolute -top-1 left-2\"\n size=\"17\"\n />\n </div>\n <div class=\"flex flex-col w-full\">\n <label class=\"multiselect__label\">\n {{ $t('MERGE_CONTACTS.PRIMARY.TITLE') }}\n <woot-label\n :title=\"$t('MERGE_CONTACTS.PRIMARY.HELP_LABEL')\"\n color-scheme=\"alert\"\n small\n class=\"ml-2\"\n />\n </label>\n <multiselect\n :model-value=\"primaryContact\"\n disabled\n :options=\"[]\"\n :show-labels=\"false\"\n label=\"name\"\n track-by=\"id\"\n >\n <template #singleLabel=\"props\">\n <ContactDropdownItem\n :thumbnail=\"props.option.thumbnail\"\n :name=\"props.option.name\"\n :identifier=\"props.option.id\"\n :email=\"props.option.email\"\n :phone-number=\"props.option.phoneNumber\"\n />\n </template>\n </multiselect>\n </div>\n </div>\n </div>\n <MergeContactSummary\n :primary-contact-name=\"primaryContact.name\"\n :parent-contact-name=\"parentContactName\"\n />\n <div class=\"flex justify-end gap-2 mt-6\">\n <NextButton\n faded\n slate\n type=\"reset\"\n :label=\"$t('MERGE_CONTACTS.FORM.CANCEL')\"\n @click.prevent=\"onCancel\"\n />\n <NextButton\n type=\"submit\"\n :is-loading=\"isMerging\"\n :label=\"$t('MERGE_CONTACTS.FORM.SUBMIT')\"\n />\n </div>\n </form>\n</template>\n\n<style lang=\"scss\" scoped>\n/* TDOD: Clean errors in forms style */\n.error .message {\n @apply mt-0;\n}\n\n::v-deep {\n .multiselect {\n @apply rounded-md;\n }\n\n .multiselect--disabled {\n @apply border-0;\n\n .multiselect__tags {\n @apply border;\n }\n }\n\n .multiselect__tags {\n @apply h-auto;\n }\n\n .multiselect__select {\n @apply mt-px mr-1;\n }\n}\n</style>\n","<script>\nimport { useAlert, useTrack } from 'dashboard/composables';\nimport MergeContact from 'dashboard/modules/contact/components/MergeContact.vue';\n\nimport ContactAPI from 'dashboard/api/contacts';\n\nimport { mapGetters } from 'vuex';\nimport { CONTACTS_EVENTS } from '../../helper/AnalyticsHelper/events';\n\nexport default {\n components: { MergeContact },\n props: {\n show: {\n type: Boolean,\n default: false,\n },\n primaryContact: {\n type: Object,\n required: true,\n },\n },\n emits: ['close', 'update:show'],\n data() {\n return {\n isSearching: false,\n searchResults: [],\n };\n },\n computed: {\n ...mapGetters({\n uiFlags: 'contacts/getUIFlags',\n }),\n localShow: {\n get() {\n return this.show;\n },\n set(value) {\n this.$emit('update:show', value);\n },\n },\n },\n\n methods: {\n onClose() {\n this.$emit('close');\n },\n async onContactSearch(query) {\n this.isSearching = true;\n this.searchResults = [];\n\n try {\n const {\n data: { payload },\n } = await ContactAPI.search(query);\n this.searchResults = payload.filter(\n contact => contact.id !== this.primaryContact.id\n );\n } catch (error) {\n useAlert(this.$t('MERGE_CONTACTS.SEARCH.ERROR_MESSAGE'));\n } finally {\n this.isSearching = false;\n }\n },\n async onMergeContacts(parentContactId) {\n useTrack(CONTACTS_EVENTS.MERGED_CONTACTS);\n try {\n await this.$store.dispatch('contacts/merge', {\n childId: this.primaryContact.id,\n parentId: parentContactId,\n });\n useAlert(this.$t('MERGE_CONTACTS.FORM.SUCCESS_MESSAGE'));\n this.onClose();\n } catch (error) {\n useAlert(this.$t('MERGE_CONTACTS.FORM.ERROR_MESSAGE'));\n }\n },\n },\n};\n</script>\n\n<template>\n <woot-modal v-model:show=\"localShow\" :on-close=\"onClose\">\n <woot-modal-header\n :header-title=\"$t('MERGE_CONTACTS.TITLE')\"\n :header-content=\"$t('MERGE_CONTACTS.DESCRIPTION')\"\n />\n\n <MergeContact\n :primary-contact=\"primaryContact\"\n :is-searching=\"isSearching\"\n :is-merging=\"uiFlags.isMerging\"\n :search-results=\"searchResults\"\n @search=\"onContactSearch\"\n @cancel=\"onClose\"\n @submit=\"onMergeContacts\"\n />\n </woot-modal>\n</template>\n","import { INBOX_TYPES } from 'dashboard/helper/inbox';\nimport { getInboxIconByType } from 'dashboard/helper/inbox';\nimport camelcaseKeys from 'camelcase-keys';\nimport ContactAPI from 'dashboard/api/contacts';\n\nconst CHANNEL_PRIORITY = {\n 'Channel::Email': 1,\n 'Channel::Whatsapp': 2,\n 'Channel::Sms': 3,\n 'Channel::TwilioSms': 4,\n 'Channel::WebWidget': 5,\n 'Channel::Api': 6,\n};\n\nexport const generateLabelForContactableInboxesList = ({\n name,\n email,\n channelType,\n phoneNumber,\n}) => {\n if (channelType === INBOX_TYPES.EMAIL) {\n return `${name} (${email})`;\n }\n if (\n channelType === INBOX_TYPES.TWILIO ||\n channelType === INBOX_TYPES.WHATSAPP\n ) {\n // Handled separately for Twilio Inbox where phone number is not mandatory.\n // You can send message to a contact with Messaging Service Id.\n if (!phoneNumber) {\n return name;\n }\n return `${name} (${phoneNumber})`;\n }\n return name;\n};\n\nconst transformInbox = ({\n name,\n id,\n email,\n channelType,\n phoneNumber,\n ...rest\n}) => ({\n id,\n icon: getInboxIconByType(channelType, phoneNumber, 'line'),\n label: generateLabelForContactableInboxesList({\n name,\n email,\n channelType,\n phoneNumber,\n }),\n action: 'inbox',\n value: id,\n name,\n email,\n phoneNumber,\n channelType,\n ...rest,\n});\n\nexport const compareInboxes = (a, b) => {\n // Channels that have no priority defined should come at the end.\n const priorityA = CHANNEL_PRIORITY[a.channelType] || 999;\n const priorityB = CHANNEL_PRIORITY[b.channelType] || 999;\n\n if (priorityA !== priorityB) {\n return priorityA - priorityB;\n }\n\n const nameA = a.name || '';\n const nameB = b.name || '';\n return nameA.localeCompare(nameB);\n};\n\nexport const buildContactableInboxesList = contactInboxes => {\n if (!contactInboxes) return [];\n\n return contactInboxes.map(transformInbox).sort(compareInboxes);\n};\n\nexport const getCapitalizedNameFromEmail = email => {\n const name = email.match(/^([^@]*)@/)?.[1] || email.split('@')[0];\n return name.charAt(0).toUpperCase() + name.slice(1);\n};\n\nexport const processContactableInboxes = inboxes => {\n return inboxes.map(inbox => ({\n ...inbox.inbox,\n sourceId: inbox.sourceId,\n }));\n};\n\nexport const mergeInboxDetails = (inboxesData, inboxesList = []) => {\n if (!inboxesData || !inboxesData.length) {\n return [];\n }\n\n return inboxesData.map(inboxData => {\n const matchingInbox =\n inboxesList.find(inbox => inbox.id === inboxData.id) || {};\n return {\n ...camelcaseKeys(matchingInbox, { deep: true }),\n ...inboxData,\n };\n });\n};\n\nexport const prepareAttachmentPayload = (\n attachedFiles,\n directUploadsEnabled\n) => {\n const files = [];\n attachedFiles.forEach(attachment => {\n if (directUploadsEnabled) {\n files.push(attachment.blobSignedId);\n } else {\n files.push(attachment.resource.file);\n }\n });\n return files;\n};\n\nexport const prepareNewMessagePayload = ({\n targetInbox,\n selectedContact,\n message,\n subject,\n ccEmails,\n bccEmails,\n currentUser,\n attachedFiles = [],\n directUploadsEnabled = false,\n}) => {\n const payload = {\n inboxId: targetInbox.id,\n sourceId: targetInbox.sourceId,\n contactId: Number(selectedContact.id),\n message: { content: message },\n assigneeId: currentUser.id,\n };\n\n if (attachedFiles?.length) {\n payload.files = prepareAttachmentPayload(\n attachedFiles,\n directUploadsEnabled\n );\n }\n\n if (subject) {\n payload.mailSubject = subject;\n }\n\n if (ccEmails) {\n payload.message.cc_emails = ccEmails;\n }\n\n if (bccEmails) {\n payload.message.bcc_emails = bccEmails;\n }\n\n return payload;\n};\n\nexport const prepareWhatsAppMessagePayload = ({\n targetInbox,\n selectedContact,\n message,\n templateParams,\n currentUser,\n}) => {\n return {\n inboxId: targetInbox.id,\n sourceId: targetInbox.sourceId,\n contactId: selectedContact.id,\n message: { content: message, template_params: templateParams },\n assigneeId: currentUser.id,\n };\n};\n\nexport const generateContactQuery = ({ keys = ['email'], query }) => {\n return {\n payload: keys.map(key => {\n const filterPayload = {\n attribute_key: key,\n filter_operator: 'contains',\n values: [query],\n attribute_model: 'standard',\n };\n if (keys.findIndex(k => k === key) !== keys.length - 1) {\n filterPayload.query_operator = 'or';\n }\n return filterPayload;\n }),\n };\n};\n\n// API Calls\nexport const searchContacts = async ({ keys, query }) => {\n const {\n data: { payload },\n } = await ContactAPI.filter(\n undefined,\n 'name',\n generateContactQuery({ keys, query })\n );\n const camelCasedPayload = camelcaseKeys(payload, { deep: true });\n // Filter contacts that have either phone_number or email\n const filteredPayload = camelCasedPayload?.filter(\n contact => contact.phoneNumber || contact.email\n );\n return filteredPayload || [];\n};\n\nexport const createNewContact = async input => {\n const payload = {\n name: input.startsWith('+')\n ? input.slice(1) // Remove the '+' prefix if it exists\n : getCapitalizedNameFromEmail(input),\n ...(input.startsWith('+') ? { phone_number: input } : { email: input }),\n };\n\n const {\n data: {\n payload: { contact: newContact },\n },\n } = await ContactAPI.create(payload);\n\n return camelcaseKeys(newContact, { deep: true });\n};\n\nexport const fetchContactableInboxes = async contactId => {\n const {\n data: { payload: inboxes = [] },\n } = await ContactAPI.getContactableInboxes(contactId);\n\n const convertInboxesToCamelKeys = camelcaseKeys(inboxes, { deep: true });\n\n return processContactableInboxes(convertInboxesToCamelKeys);\n};\n","import { parsePhoneNumber, isValidPhoneNumber } from 'libphonenumber-js';\nimport { email } from '@vuelidate/validators';\n\nexport const MODE = {\n SINGLE: 'single',\n MULTIPLE: 'multiple',\n};\n\nexport const INPUT_TYPES = {\n EMAIL: 'email',\n TEL: 'tel',\n TEXT: 'text',\n};\n\nexport const validatePhoneNumber = value => {\n if (!value) return true;\n try {\n return isValidPhoneNumber(value);\n } catch (error) {\n return false;\n }\n};\n\nexport const formatPhoneNumber = value => {\n try {\n const phoneNumber = parsePhoneNumber(value);\n return {\n isValid: phoneNumber?.isValid() || false,\n formattedValue: phoneNumber?.formatInternational() || value,\n };\n } catch (error) {\n return { isValid: false, formattedValue: value };\n }\n};\n\nexport const getValidationRules = type => ({\n newTag: {\n ...(type === INPUT_TYPES.EMAIL ? { email } : {}),\n ...(type === INPUT_TYPES.TEL ? { isValidPhone: validatePhoneNumber } : {}),\n },\n});\n\nexport const checkTagTypeValidity = (type, value, v$) => {\n if (type === INPUT_TYPES.TEL) {\n return !validatePhoneNumber(value);\n }\n return v$.$invalid;\n};\n\nexport const validateAndFormatNewTag = (\n trimmedNewTag,\n type,\n isNewTagInValidType\n) => {\n let isValid = true;\n let formattedValue = trimmedNewTag;\n\n if (type === INPUT_TYPES.EMAIL) {\n isValid = !isNewTagInValidType;\n } else if (type === INPUT_TYPES.TEL) {\n const { isValid: phoneValid, formattedValue: phoneFormatted } =\n formatPhoneNumber(trimmedNewTag);\n isValid = phoneValid;\n formattedValue = phoneFormatted;\n }\n\n return { isValid, formattedValue };\n};\n\nexport const createNewTagMenuItem = (formattedValue, trimmedNewTag, type) => ({\n label: formattedValue,\n value: trimmedNewTag,\n ...(type === INPUT_TYPES.EMAIL ? { email: trimmedNewTag } : {}),\n ...(type === INPUT_TYPES.TEL ? { phoneNumber: trimmedNewTag } : {}),\n thumbnail: { name: formattedValue, src: '' },\n action: 'create',\n});\n\nexport const buildTagMenuItems = ({\n mode,\n tags,\n menuItems,\n newTag,\n isLoading,\n type,\n isNewTagInValidType,\n}) => {\n if (mode === MODE.SINGLE && tags.length >= 1) return [];\n\n const availableMenuItems = menuItems.filter(\n item => !tags.includes(item.label)\n );\n\n // Show typed value as suggestion only if:\n // 1. There's a value being typed\n // 2. The value isn't already in the tags\n // 3. Validation passes (email/phone) and There are no menu items available\n const trimmedNewTag = newTag?.trim();\n const shouldShowTypedValue =\n trimmedNewTag &&\n !tags.includes(trimmedNewTag) &&\n !isLoading &&\n !availableMenuItems.length;\n\n if (shouldShowTypedValue) {\n const { isValid, formattedValue } = validateAndFormatNewTag(\n trimmedNewTag,\n type,\n isNewTagInValidType\n );\n\n if (isValid) {\n return [createNewTagMenuItem(formattedValue, trimmedNewTag, type)];\n }\n }\n\n return availableMenuItems;\n};\n\nexport const canAddTag = (mode, tagsLength) =>\n !(mode === MODE.SINGLE && tagsLength >= 1);\n\nexport const findMatchingMenuItem = (menuItems, value) =>\n menuItems.find(item => item.email === value);\n","<script setup>\nimport { ref, onMounted, nextTick } from 'vue';\n\nconst props = defineProps({\n type: {\n type: String,\n default: 'text',\n },\n customInputClass: {\n type: [String, Object, Array],\n default: '',\n },\n customLabelClass: {\n type: [String, Object, Array],\n default: '',\n },\n placeholder: {\n type: String,\n default: '',\n },\n label: {\n type: String,\n default: '',\n },\n id: {\n type: String,\n default: '',\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n focusOnMount: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits(['enterPress', 'input', 'blur', 'focus']);\n\nconst modelValue = defineModel({\n type: [String, Number],\n default: '',\n});\n\nconst inlineInputRef = ref(null);\n\nconst onEnterPress = () => {\n emit('enterPress');\n};\n\nconst handleInput = event => {\n emit('input', event.target.value);\n modelValue.value = event.target.value;\n};\n\nconst handleBlur = event => {\n emit('blur', event.target.value);\n};\n\nconst handleFocus = event => {\n emit('focus', event.target.value);\n};\n\nonMounted(() => {\n nextTick(() => {\n if (props.focusOnMount) {\n inlineInputRef.value?.focus();\n }\n });\n});\n\ndefineExpose({\n focus: () => inlineInputRef.value?.focus(),\n});\n</script>\n\n<template>\n <div\n class=\"relative flex items-center justify-between w-full gap-3 whitespace-nowrap\"\n >\n <label\n v-if=\"label\"\n :for=\"id\"\n :class=\"customLabelClass\"\n class=\"mb-0.5 text-sm font-medium text-n-slate-12\"\n >\n {{ label }}\n </label>\n <!-- Added prefix slot to allow adding custom labels to the input -->\n <slot name=\"prefix\" />\n <input\n :id=\"id\"\n ref=\"inlineInputRef\"\n v-model=\"modelValue\"\n :type=\"type\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :class=\"customInputClass\"\n class=\"flex w-full reset-base text-sm h-6 !mb-0 border-0 rounded-none outline-none outline-0 bg-transparent dark:bg-transparent placeholder:text-n-slate-10 dark:placeholder:text-n-slate-10 disabled:cursor-not-allowed disabled:opacity-50 text-n-slate-12 dark:text-n-slate-12 transition-all duration-500 ease-in-out\"\n @input=\"handleInput\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @keydown.enter.prevent=\"onEnterPress\"\n />\n </div>\n</template>\n","<script setup>\nimport { ref, computed, watch } from 'vue';\nimport { vOnClickOutside } from '@vueuse/components';\nimport { useVuelidate } from '@vuelidate/core';\n\nimport InlineInput from 'dashboard/components-next/inline-input/InlineInput.vue';\nimport DropdownMenu from 'dashboard/components-next/dropdown-menu/DropdownMenu.vue';\nimport {\n MODE,\n INPUT_TYPES,\n getValidationRules,\n checkTagTypeValidity,\n buildTagMenuItems,\n canAddTag,\n findMatchingMenuItem,\n} from './helper/tagInputHelper';\n\nconst props = defineProps({\n placeholder: { type: String, default: '' },\n disabled: { type: Boolean, default: false },\n type: { type: String, default: INPUT_TYPES.TEXT },\n isLoading: { type: Boolean, default: false },\n menuItems: {\n type: Array,\n default: () => [],\n validator: value =>\n value.every(\n ({ action, value: tagValue, label }) => action && tagValue && label\n ),\n },\n showDropdown: { type: Boolean, default: false },\n mode: {\n type: String,\n default: MODE.MULTIPLE,\n validator: value => [MODE.SINGLE, MODE.MULTIPLE].includes(value),\n },\n focusOnMount: { type: Boolean, default: false },\n allowCreate: { type: Boolean, default: false },\n});\n\nconst emit = defineEmits([\n 'update:modelValue',\n 'input',\n 'blur',\n 'focus',\n 'onClickOutside',\n 'add',\n 'remove',\n]);\n\nconst modelValue = defineModel({\n type: Array,\n default: () => [],\n});\n\nconst tagInputRef = ref(null);\nconst tags = ref(props.modelValue);\nconst newTag = ref('');\nconst isFocused = ref(true);\n\nconst rules = computed(() => getValidationRules(props.type));\nconst v$ = useVuelidate(rules, { newTag });\n\nconst isNewTagInValidType = computed(() =>\n checkTagTypeValidity(props.type, newTag.value, v$.value)\n);\n\nconst showInput = computed(() =>\n props.mode === MODE.SINGLE\n ? isFocused.value && !tags.value.length\n : isFocused.value || !tags.value.length\n);\n\nconst showDropdownMenu = computed(() =>\n props.mode === MODE.SINGLE && tags.value.length >= 1\n ? false\n : props.showDropdown\n);\n\nconst filteredMenuItems = computed(() =>\n buildTagMenuItems({\n mode: props.mode,\n tags: tags.value,\n menuItems: props.menuItems,\n newTag: newTag.value,\n isLoading: props.isLoading,\n type: props.type,\n isNewTagInValidType: isNewTagInValidType.value,\n })\n);\n\nconst emitDataOnAdd = value => {\n const matchingMenuItem = findMatchingMenuItem(props.menuItems, value);\n return matchingMenuItem\n ? emit('add', { value: value, ...matchingMenuItem })\n : emit('add', { value: value, action: 'create' });\n};\n\nconst updateValueAndFocus = value => {\n tags.value.push(value);\n newTag.value = '';\n modelValue.value = tags.value;\n tagInputRef.value?.focus();\n};\n\nconst addTag = async () => {\n const trimmedTag = newTag.value?.trim();\n if (!trimmedTag) return;\n\n if (!canAddTag(props.mode, tags.value.length)) {\n newTag.value = '';\n return;\n }\n\n if (\n [INPUT_TYPES.EMAIL, INPUT_TYPES.TEL].includes(props.type) ||\n props.allowCreate\n ) {\n if (!(await v$.value.$validate())) return;\n emitDataOnAdd(trimmedTag);\n }\n updateValueAndFocus(trimmedTag);\n};\n\nconst removeTag = index => {\n tags.value.splice(index, 1);\n modelValue.value = tags.value;\n emit('remove');\n};\n\nconst handleDropdownAction = async ({\n email: emailAddress,\n phoneNumber,\n ...rest\n}) => {\n if (props.mode === MODE.SINGLE && tags.value.length >= 1) return;\n if (!props.showDropdown) return;\n\n const isEmail = props.type === 'email';\n newTag.value = isEmail ? emailAddress : phoneNumber;\n\n if (!(await v$.value.$validate())) return;\n\n const payload = isEmail\n ? { email: emailAddress, ...rest }\n : { phoneNumber, ...rest };\n\n emit('add', payload);\n updateValueAndFocus(emailAddress);\n};\n\nconst handleFocus = () => {\n emit('focus');\n tagInputRef.value?.focus();\n isFocused.value = true;\n};\n\nconst handleKeydown = event => {\n if (event.key === ',') {\n event.preventDefault();\n addTag();\n }\n};\n\nconst handleClickOutside = () => {\n if (tags.value.length) isFocused.value = false;\n emit('onClickOutside');\n};\n\nwatch(\n () => props.modelValue,\n newValue => {\n tags.value = newValue;\n }\n);\n\nwatch(\n () => newTag.value,\n async newValue => {\n if (props.type === 'email' && newValue?.trim()?.length > 2) {\n await v$.value.$validate();\n }\n }\n);\n\nconst handleInput = e => emit('input', e);\nconst handleBlur = e => emit('blur', e);\n</script>\n\n<template>\n <div\n v-on-click-outside=\"() => handleClickOutside()\"\n class=\"flex flex-wrap w-full gap-2 border border-transparent focus:outline-none\"\n tabindex=\"0\"\n @focus=\"handleFocus\"\n @click=\"handleFocus\"\n >\n <div\n v-for=\"(tag, index) in tags\"\n :key=\"index\"\n class=\"flex items-center justify-center max-w-full gap-1 px-3 py-1 rounded-lg h-7 bg-n-alpha-2\"\n >\n <span class=\"flex-grow min-w-0 text-sm truncate text-n-slate-12\">{{\n tag\n }}</span>\n <span\n class=\"flex-shrink-0 cursor-pointer i-lucide-x size-3.5 text-n-slate-11\"\n @click.stop=\"removeTag(index)\"\n />\n </div>\n <div\n v-if=\"showInput || showDropdownMenu\"\n class=\"relative flex items-center gap-2 flex-1 min-w-[200px] w-full\"\n >\n <InlineInput\n ref=\"tagInputRef\"\n v-model=\"newTag\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n class=\"w-full\"\n :focus-on-mount=\"focusOnMount\"\n :custom-input-class=\"`w-full ${isNewTagInValidType ? '!text-n-ruby-9 dark:!text-n-ruby-9' : ''}`\"\n @enter-press=\"addTag\"\n @focus=\"handleFocus\"\n @input=\"handleInput\"\n @blur=\"handleBlur\"\n @keydown=\"handleKeydown\"\n />\n <DropdownMenu\n v-if=\"showDropdownMenu\"\n :menu-items=\"filteredMenuItems\"\n :is-searching=\"isLoading\"\n class=\"left-0 z-[100] top-8 overflow-y-auto max-h-60 w-[inherit] max-w-md dark:!outline-n-slate-5\"\n @action=\"handleDropdownAction\"\n />\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { INPUT_TYPES } from 'dashboard/components-next/taginput/helper/tagInputHelper.js';\n\nimport TagInput from 'dashboard/components-next/taginput/TagInput.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n contacts: {\n type: Array,\n required: true,\n },\n selectedContact: {\n type: Object,\n default: null,\n },\n showContactsDropdown: {\n type: Boolean,\n required: true,\n },\n isLoading: {\n type: Boolean,\n required: true,\n },\n isCreatingContact: {\n type: Boolean,\n required: true,\n },\n contactId: {\n type: String,\n default: null,\n },\n contactableInboxesList: {\n type: Array,\n default: () => [],\n },\n showInboxesDropdown: {\n type: Boolean,\n required: true,\n },\n hasErrors: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits([\n 'searchContacts',\n 'setSelectedContact',\n 'clearSelectedContact',\n 'updateDropdown',\n]);\n\nconst i18nPrefix = 'COMPOSE_NEW_CONVERSATION.FORM.CONTACT_SELECTOR';\nconst { t } = useI18n();\n\nconst inputType = ref(INPUT_TYPES.EMAIL);\n\nconst contactsList = computed(() => {\n return props.contacts?.map(({ name, id, thumbnail, email, ...rest }) => ({\n id,\n label: email ? `${name} (${email})` : name,\n value: id,\n thumbnail: { name, src: thumbnail },\n ...rest,\n name,\n email,\n action: 'contact',\n }));\n});\n\nconst selectedContactLabel = computed(() => {\n const { name, email = '', phoneNumber = '' } = props.selectedContact || {};\n if (email) {\n return `${name} (${email})`;\n }\n if (phoneNumber) {\n return `${name} (${phoneNumber})`;\n }\n return name || '';\n});\n\nconst errorClass = computed(() => {\n return props.hasErrors\n ? '[&_input]:placeholder:!text-n-ruby-9 [&_input]:dark:placeholder:!text-n-ruby-9'\n : '';\n});\n\nconst handleInput = value => {\n // Update input type based on whether input starts with '+'\n // If it does, set input type to 'tel'\n // Otherwise, set input type to 'email'\n inputType.value = value.startsWith('+') ? INPUT_TYPES.TEL : INPUT_TYPES.EMAIL;\n emit('searchContacts', value);\n};\n</script>\n\n<template>\n <div class=\"relative flex-1 px-4 py-3 overflow-y-visible\">\n <div class=\"flex items-baseline w-full gap-3 min-h-7\">\n <label class=\"text-sm font-medium text-n-slate-11 whitespace-nowrap\">\n {{ t(`${i18nPrefix}.LABEL`) }}\n </label>\n\n <div\n v-if=\"isCreatingContact\"\n class=\"flex items-center gap-1.5 rounded-md bg-n-alpha-2 px-3 min-h-7 min-w-0\"\n >\n <span class=\"text-sm truncate text-n-slate-12\">\n {{ t(`${i18nPrefix}.CONTACT_CREATING`) }}\n </span>\n </div>\n <div\n v-else-if=\"selectedContact\"\n class=\"flex items-center gap-1.5 rounded-md bg-n-alpha-2 min-h-7 min-w-0\"\n :class=\"!contactId ? 'ltr:pl-3 rtl:pr-3 ltr:pr-1 rtl:pl-1' : 'px-3'\"\n >\n <span class=\"text-sm truncate text-n-slate-12\">\n {{\n isCreatingContact\n ? t(`${i18nPrefix}.CONTACT_CREATING`)\n : selectedContactLabel\n }}\n </span>\n <Button\n v-if=\"!contactId\"\n variant=\"ghost\"\n icon=\"i-lucide-x\"\n color=\"slate\"\n :disabled=\"contactId\"\n size=\"xs\"\n @click=\"emit('clearSelectedContact')\"\n />\n </div>\n <TagInput\n v-else\n :placeholder=\"t(`${i18nPrefix}.TAG_INPUT_PLACEHOLDER`)\"\n mode=\"single\"\n :menu-items=\"contactsList\"\n :show-dropdown=\"showContactsDropdown\"\n :is-loading=\"isLoading\"\n :disabled=\"contactableInboxesList?.length > 0 && showInboxesDropdown\"\n allow-create\n :type=\"inputType\"\n class=\"flex-1 min-h-7\"\n :class=\"errorClass\"\n focus-on-mount\n @input=\"handleInput\"\n @on-click-outside=\"emit('updateDropdown', 'contacts', false)\"\n @add=\"emit('setSelectedContact', $event)\"\n @remove=\"emit('clearSelectedContact')\"\n />\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { vOnClickOutside } from '@vueuse/components';\nimport { generateLabelForContactableInboxesList } from 'dashboard/components-next/NewConversation/helpers/composeConversationHelper.js';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport DropdownMenu from 'dashboard/components-next/dropdown-menu/DropdownMenu.vue';\n\nconst props = defineProps({\n targetInbox: {\n type: Object,\n default: null,\n },\n selectedContact: {\n type: Object,\n default: null,\n },\n showInboxesDropdown: {\n type: Boolean,\n required: true,\n },\n contactableInboxesList: {\n type: Array,\n default: () => [],\n },\n hasErrors: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits([\n 'updateInbox',\n 'toggleDropdown',\n 'handleInboxAction',\n]);\n\nconst { t } = useI18n();\n\nconst targetInboxLabel = computed(() => {\n return generateLabelForContactableInboxesList(props.targetInbox);\n});\n</script>\n\n<template>\n <div\n class=\"flex items-center flex-1 w-full gap-3 px-4 py-3 overflow-y-visible\"\n >\n <label class=\"mb-0.5 text-sm font-medium text-n-slate-11 whitespace-nowrap\">\n {{ t('COMPOSE_NEW_CONVERSATION.FORM.INBOX_SELECTOR.LABEL') }}\n </label>\n <div\n v-if=\"targetInbox\"\n class=\"flex items-center gap-1.5 rounded-md bg-n-alpha-2 truncate ltr:pl-3 rtl:pr-3 ltr:pr-1 rtl:pl-1 h-7 min-w-0\"\n >\n <span class=\"text-sm truncate text-n-slate-12\">\n {{ targetInboxLabel }}\n </span>\n <Button\n variant=\"ghost\"\n icon=\"i-lucide-x\"\n color=\"slate\"\n size=\"xs\"\n class=\"flex-shrink-0\"\n @click=\"emit('updateInbox', null)\"\n />\n </div>\n <div\n v-else\n v-on-click-outside=\"() => emit('toggleDropdown', false)\"\n class=\"relative flex items-center h-7\"\n >\n <Button\n :label=\"t('COMPOSE_NEW_CONVERSATION.FORM.INBOX_SELECTOR.BUTTON')\"\n variant=\"link\"\n size=\"sm\"\n :color=\"hasErrors ? 'ruby' : 'slate'\"\n :disabled=\"!selectedContact\"\n class=\"hover:!no-underline\"\n @click=\"emit('toggleDropdown', !showInboxesDropdown)\"\n />\n <DropdownMenu\n v-if=\"contactableInboxesList?.length > 0 && showInboxesDropdown\"\n :menu-items=\"contactableInboxesList\"\n class=\"left-0 z-[100] top-8 overflow-y-auto max-h-60 w-fit max-w-sm dark:!outline-n-slate-5\"\n @action=\"emit('handleInboxAction', $event)\"\n />\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nimport TagInput from 'dashboard/components-next/taginput/TagInput.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport InlineInput from 'dashboard/components-next/inline-input/InlineInput.vue';\n\nconst props = defineProps({\n contacts: { type: Array, required: true },\n showCcEmailsDropdown: { type: Boolean, required: false },\n showBccEmailsDropdown: { type: Boolean, required: false },\n isLoading: { type: Boolean, default: false },\n hasErrors: { type: Boolean, default: false },\n});\n\nconst emit = defineEmits([\n 'searchCcEmails',\n 'searchBccEmails',\n 'updateDropdown',\n]);\n\nconst i18nPrefix = `COMPOSE_NEW_CONVERSATION.FORM.EMAIL_OPTIONS`;\n\nconst showBccInput = ref(false);\n\nconst toggleBccInput = () => {\n showBccInput.value = !showBccInput.value;\n};\n\nconst subject = defineModel('subject', { type: String, default: '' });\nconst ccEmails = defineModel('ccEmails', { type: String, default: '' });\nconst bccEmails = defineModel('bccEmails', { type: String, default: '' });\n\nconst { t } = useI18n();\n\n// Convert string to array for TagInput\nconst ccEmailsArray = computed(() =>\n props.ccEmails ? props.ccEmails.split(',').map(email => email.trim()) : []\n);\n\nconst bccEmailsArray = computed(() =>\n props.bccEmails ? props.bccEmails.split(',').map(email => email.trim()) : []\n);\n\nconst contactEmailsList = computed(() => {\n return props.contacts?.map(({ name, id, email }) => ({\n id,\n label: email,\n email,\n thumbnail: { name: name, src: '' },\n value: id,\n action: 'email',\n }));\n});\n\n// Handle updates from TagInput and convert array back to string\nconst handleCcUpdate = value => {\n ccEmails.value = value.join(',');\n};\n\nconst handleBccUpdate = value => {\n bccEmails.value = value.join(',');\n};\n\nconst inputClass = computed(() => {\n return props.hasErrors\n ? 'placeholder:!text-n-ruby-9 dark:placeholder:!text-n-ruby-9'\n : '';\n});\n</script>\n\n<template>\n <div class=\"flex flex-col divide-y divide-n-strong\">\n <div class=\"flex items-baseline flex-1 w-full h-8 gap-3 px-4 py-3\">\n <InlineInput\n v-model=\"subject\"\n :placeholder=\"t(`${i18nPrefix}.SUBJECT_PLACEHOLDER`)\"\n :label=\"t(`${i18nPrefix}.SUBJECT_LABEL`)\"\n focus-on-mount\n :custom-input-class=\"inputClass\"\n />\n </div>\n <div class=\"flex items-baseline flex-1 w-full gap-3 px-4 py-3 min-h-8\">\n <label\n class=\"mb-0.5 text-sm font-medium whitespace-nowrap text-n-slate-11\"\n >\n {{ t(`${i18nPrefix}.CC_LABEL`) }}\n </label>\n <div class=\"flex items-center w-full gap-3 min-h-7\">\n <TagInput\n :model-value=\"ccEmailsArray\"\n :placeholder=\"t(`${i18nPrefix}.CC_PLACEHOLDER`)\"\n :menu-items=\"contactEmailsList\"\n :show-dropdown=\"showCcEmailsDropdown\"\n :is-loading=\"isLoading\"\n type=\"email\"\n class=\"flex-1 min-h-7\"\n @focus=\"emit('updateDropdown', 'cc', true)\"\n @input=\"emit('searchCcEmails', $event)\"\n @on-click-outside=\"emit('updateDropdown', 'cc', false)\"\n @update:model-value=\"handleCcUpdate\"\n />\n <Button\n :label=\"t(`${i18nPrefix}.BCC_BUTTON`)\"\n variant=\"ghost\"\n size=\"sm\"\n color=\"slate\"\n class=\"flex-shrink-0\"\n @click=\"toggleBccInput\"\n />\n </div>\n </div>\n <div\n v-if=\"showBccInput\"\n class=\"flex items-baseline flex-1 w-full gap-3 px-4 py-3 min-h-8\"\n >\n <label\n class=\"mb-0.5 text-sm font-medium whitespace-nowrap text-n-slate-11\"\n >\n {{ t(`${i18nPrefix}.BCC_LABEL`) }}\n </label>\n <TagInput\n :model-value=\"bccEmailsArray\"\n :placeholder=\"t(`${i18nPrefix}.BCC_PLACEHOLDER`)\"\n :menu-items=\"contactEmailsList\"\n :show-dropdown=\"showBccEmailsDropdown\"\n :is-loading=\"isLoading\"\n type=\"email\"\n class=\"flex-1 min-h-7\"\n focus-on-mount\n @focus=\"emit('updateDropdown', 'bcc', true)\"\n @input=\"emit('searchBccEmails', $event)\"\n @on-click-outside=\"emit('updateDropdown', 'bcc', false)\"\n @update:model-value=\"handleBccUpdate\"\n />\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed, ref, watch, useSlots } from 'vue';\n\nimport WootEditor from 'dashboard/components/widgets/WootWriter/Editor.vue';\n\nconst props = defineProps({\n modelValue: {\n type: String,\n default: '',\n },\n label: {\n type: String,\n default: '',\n },\n placeholder: {\n type: String,\n default: '',\n },\n focusOnMount: {\n type: Boolean,\n default: false,\n },\n maxLength: {\n type: Number,\n default: 200,\n },\n showCharacterCount: {\n type: Boolean,\n default: true,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n message: {\n type: String,\n default: '',\n },\n messageType: {\n type: String,\n default: 'info',\n validator: value => ['info', 'error', 'success'].includes(value),\n },\n enableVariables: { type: Boolean, default: false },\n enableCannedResponses: { type: Boolean, default: true },\n});\n\nconst emit = defineEmits(['update:modelValue']);\n\nconst slots = useSlots();\n\nconst isFocused = ref(false);\n\nconst characterCount = computed(() => props.modelValue.length);\n\nconst messageClass = computed(() => {\n switch (props.messageType) {\n case 'error':\n return 'text-n-ruby-9 dark:text-n-ruby-9';\n case 'success':\n return 'text-green-500 dark:text-green-400';\n default:\n return 'text-n-slate-11 dark:text-n-slate-11';\n }\n});\n\nconst handleInput = value => {\n if (!props.disabled) {\n emit('update:modelValue', value);\n }\n};\n\nconst handleFocus = () => {\n if (!props.disabled) {\n isFocused.value = true;\n }\n};\n\nconst handleBlur = () => {\n if (!props.disabled) {\n isFocused.value = false;\n }\n};\n\nwatch(\n () => props.modelValue,\n newValue => {\n if (props.maxLength && props.showCharacterCount && !slots.actions) {\n if (characterCount.value >= props.maxLength) {\n emit('update:modelValue', newValue.slice(0, props.maxLength));\n }\n }\n }\n);\n</script>\n\n<template>\n <div class=\"flex flex-col min-w-0 gap-1\">\n <label v-if=\"label\" class=\"mb-0.5 text-sm font-medium text-n-slate-12\">\n {{ label }}\n </label>\n <div\n class=\"flex flex-col w-full gap-2 px-3 py-3 transition-all duration-500 ease-in-out border rounded-lg editor-wrapper bg-n-alpha-black2\"\n :class=\"[\n {\n 'cursor-not-allowed opacity-50 pointer-events-none !bg-n-alpha-black2 disabled:border-n-weak dark:disabled:border-n-weak':\n disabled,\n 'border-n-brand dark:border-n-brand': isFocused,\n 'hover:border-n-slate-6 dark:hover:border-n-slate-6 border-n-weak dark:border-n-weak':\n !isFocused && messageType !== 'error',\n 'border-n-ruby-8 dark:border-n-ruby-8 hover:border-n-ruby-9 dark:hover:border-n-ruby-9':\n messageType === 'error' && !isFocused,\n },\n ]\"\n >\n <WootEditor\n :model-value=\"modelValue\"\n :placeholder=\"placeholder\"\n :focus-on-mount=\"focusOnMount\"\n :disabled=\"disabled\"\n :enable-variables=\"enableVariables\"\n :enable-canned-responses=\"enableCannedResponses\"\n @input=\"handleInput\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n />\n <div\n v-if=\"showCharacterCount || slots.actions\"\n class=\"flex items-center justify-end h-4 ltr:right-3 rtl:left-3\"\n >\n <span\n v-if=\"showCharacterCount && !slots.actions\"\n class=\"text-xs tabular-nums text-n-slate-10\"\n >\n {{ characterCount }} / {{ maxLength }}\n </span>\n <slot v-else name=\"actions\" />\n </div>\n </div>\n <p\n v-if=\"message\"\n class=\"min-w-0 mt-1 mb-0 text-xs truncate transition-all duration-500 ease-in-out\"\n :class=\"messageClass\"\n >\n {{ message }}\n </p>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.editor-wrapper {\n ::v-deep {\n .ProseMirror-menubar-wrapper {\n @apply gap-2 !important;\n\n .ProseMirror-menubar {\n @apply bg-transparent dark:bg-transparent w-fit left-1 pt-0 h-5 !top-0 !relative !important;\n\n .ProseMirror-menuitem {\n @apply h-5 !important;\n }\n\n .ProseMirror-icon {\n @apply p-1 w-3 h-3 text-n-slate-12 dark:text-n-slate-12 !important;\n }\n }\n .ProseMirror.ProseMirror-woot-style {\n p {\n @apply first:mt-0 !important;\n }\n\n .empty-node {\n @apply m-0 !important;\n\n &::before {\n @apply text-n-slate-11 dark:text-n-slate-11;\n }\n }\n }\n }\n }\n}\n</style>\n","<script setup>\nimport { computed, ref, onMounted, nextTick, watch } from 'vue';\nimport {\n appendSignature,\n removeSignature,\n extractTextFromMarkdown,\n} from 'dashboard/helper/editorHelper';\n\nconst props = defineProps({\n modelValue: { type: String, default: '' },\n label: { type: String, default: '' },\n placeholder: { type: String, default: '' },\n maxLength: { type: Number, default: 200 },\n id: { type: String, default: '' },\n disabled: { type: Boolean, default: false },\n customTextAreaClass: { type: String, default: '' },\n customTextAreaWrapperClass: { type: String, default: '' },\n showCharacterCount: { type: Boolean, default: false },\n autoHeight: { type: Boolean, default: false },\n resize: { type: Boolean, default: false },\n minHeight: { type: String, default: '4rem' },\n maxHeight: { type: String, default: '12rem' },\n autofocus: { type: Boolean, default: false },\n message: { type: String, default: '' },\n messageType: {\n type: String,\n default: 'info',\n validator: value => ['info', 'error', 'success'].includes(value),\n },\n signature: { type: String, default: '' },\n sendWithSignature: { type: Boolean, default: false }, // add this as a prop, so that we won't have to add useUISettings\n allowSignature: { type: Boolean, default: false }, // allowSignature is a kill switch, ensuring no signature methods are triggered except when this flag is true\n});\n\nconst emit = defineEmits(['update:modelValue']);\n\nconst textareaRef = ref(null);\nconst isFocused = ref(false);\n\nconst characterCount = computed(() => props.modelValue.length);\nconst cleanedSignature = computed(() =>\n extractTextFromMarkdown(props.signature)\n);\n\nconst messageClass = computed(() => {\n switch (props.messageType) {\n case 'error':\n return 'text-n-ruby-9 dark:text-n-ruby-9';\n case 'success':\n return 'text-green-500 dark:text-green-400';\n default:\n return 'text-n-slate-11 dark:text-n-slate-11';\n }\n});\n\n// TODO - use \"field-sizing: content\" and \"height: auto\" in future for auto height, when available.\nconst adjustHeight = () => {\n if (!props.autoHeight || !textareaRef.value) return;\n\n // Reset height to auto to get the correct scrollHeight\n textareaRef.value.style.height = 'auto';\n // Set the height to the scrollHeight\n textareaRef.value.style.height = `${textareaRef.value.scrollHeight}px`;\n};\n\nconst setCursor = () => {\n if (!textareaRef.value) return;\n\n const bodyWithoutSignature = removeSignature(\n props.modelValue,\n cleanedSignature.value\n );\n const bodyEndsAt = bodyWithoutSignature.trimEnd().length;\n\n textareaRef.value.focus();\n textareaRef.value.setSelectionRange(bodyEndsAt, bodyEndsAt);\n};\n\nconst toggleSignatureInEditor = signatureEnabled => {\n if (!props.allowSignature) return;\n const valueWithSignature = signatureEnabled\n ? appendSignature(props.modelValue, cleanedSignature.value)\n : removeSignature(props.modelValue, cleanedSignature.value);\n emit('update:modelValue', valueWithSignature);\n\n nextTick(() => {\n adjustHeight();\n setCursor();\n });\n};\n\nconst handleInput = event => {\n emit('update:modelValue', event.target.value);\n if (props.autoHeight) {\n nextTick(adjustHeight);\n }\n};\n\nconst handleFocus = () => {\n if (!props.disabled) {\n isFocused.value = true;\n }\n};\n\nconst handleBlur = () => {\n if (!props.disabled) {\n isFocused.value = false;\n }\n};\n\n// Watch for changes in modelValue to adjust height\nwatch(\n () => props.modelValue,\n () => {\n if (props.autoHeight) {\n nextTick(adjustHeight);\n }\n }\n);\n\nwatch(\n () => props.sendWithSignature,\n newValue => {\n if (props.allowSignature) toggleSignatureInEditor(newValue);\n }\n);\n\nonMounted(() => {\n if (props.autoHeight) {\n nextTick(adjustHeight);\n }\n\n if (props.autofocus) {\n textareaRef.value?.focus();\n }\n});\n</script>\n\n<template>\n <div class=\"relative flex flex-col gap-1\">\n <label\n v-if=\"label\"\n :for=\"id\"\n class=\"mb-0.5 text-sm font-medium text-n-slate-12\"\n >\n {{ label }}\n </label>\n <div\n class=\"flex flex-col gap-2 px-3 pt-3 pb-3 transition-all duration-500 ease-in-out border rounded-lg bg-n-alpha-black2\"\n :class=\"[\n customTextAreaWrapperClass,\n {\n 'cursor-not-allowed opacity-50 !bg-n-alpha-black2 disabled:border-n-weak dark:disabled:border-n-weak':\n disabled,\n 'border-n-brand dark:border-n-brand': isFocused,\n 'hover:border-n-slate-6 dark:hover:border-n-slate-6 border-n-weak dark:border-n-weak':\n !isFocused && messageType !== 'error',\n 'border-n-ruby-8 dark:border-n-ruby-8 hover:border-n-ruby-9 dark:hover:border-n-ruby-9':\n messageType === 'error' && !isFocused,\n },\n ]\"\n >\n <slot /><!-- Slot for adding popover -->\n <textarea\n :id=\"id\"\n ref=\"textareaRef\"\n :value=\"modelValue\"\n :placeholder=\"placeholder\"\n :maxlength=\"showCharacterCount ? maxLength : undefined\"\n :class=\"[\n customTextAreaClass,\n {\n 'resize-none': !resize,\n },\n ]\"\n :style=\"{\n minHeight: autoHeight ? minHeight : undefined,\n maxHeight: autoHeight ? maxHeight : undefined,\n }\"\n :disabled=\"disabled\"\n rows=\"1\"\n class=\"flex w-full reset-base text-sm p-0 !rounded-none !bg-transparent dark:!bg-transparent !border-0 !outline-0 !mb-0 placeholder:text-n-slate-10 dark:placeholder:text-n-slate-10 text-n-slate-12 dark:text-n-slate-12 disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-slate-25 dark:disabled:bg-slate-900\"\n @input=\"handleInput\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n />\n <div\n v-if=\"showCharacterCount\"\n class=\"flex items-center justify-end h-4 mt-1 bottom-3 ltr:right-3 rtl:left-3\"\n >\n <span class=\"text-xs tabular-nums text-n-slate-10\">\n {{ characterCount }} / {{ maxLength }}\n </span>\n </div>\n </div>\n <p\n v-if=\"message\"\n class=\"min-w-0 mt-1 mb-0 text-xs truncate transition-all duration-500 ease-in-out\"\n :class=\"messageClass\"\n >\n {{ message }}\n </p>\n </div>\n</template>\n","<script setup>\nimport { ref, watch, computed, nextTick } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport {\n appendSignature,\n extractTextFromMarkdown,\n removeSignature,\n} from 'dashboard/helper/editorHelper';\n\nimport Editor from 'dashboard/components-next/Editor/Editor.vue';\nimport TextArea from 'dashboard/components-next/textarea/TextArea.vue';\nimport CannedResponse from 'dashboard/components/widgets/conversation/CannedResponse.vue';\n\nconst props = defineProps({\n isEmailOrWebWidgetInbox: { type: Boolean, required: true },\n hasErrors: { type: Boolean, default: false },\n hasAttachments: { type: Boolean, default: false },\n sendWithSignature: { type: Boolean, default: false },\n messageSignature: { type: String, default: '' },\n});\n\nconst { t } = useI18n();\n\nconst modelValue = defineModel({\n type: String,\n default: '',\n});\n\nconst state = ref({\n hasSlashCommand: false,\n showMentions: false,\n mentionSearchKey: '',\n});\n\nconst plainTextSignature = computed(() =>\n extractTextFromMarkdown(props.messageSignature)\n);\n\nwatch(\n modelValue,\n newValue => {\n if (props.isEmailOrWebWidgetInbox) return;\n\n const bodyWithoutSignature = newValue\n ? removeSignature(newValue, plainTextSignature.value)\n : '';\n\n // Check if message starts with slash\n const startsWithSlash = bodyWithoutSignature.startsWith('/');\n\n // Update slash command and mentions state\n state.value = {\n ...state.value,\n hasSlashCommand: startsWithSlash,\n showMentions: startsWithSlash,\n mentionSearchKey: startsWithSlash ? bodyWithoutSignature.slice(1) : '',\n };\n },\n { immediate: true }\n);\n\nconst hideMention = () => {\n state.value.showMentions = false;\n};\n\nconst replaceText = async message => {\n // Only append signature on replace if sendWithSignature is true\n const finalMessage = props.sendWithSignature\n ? appendSignature(message, plainTextSignature.value)\n : message;\n\n await nextTick();\n modelValue.value = finalMessage;\n};\n</script>\n\n<template>\n <div class=\"flex-1 h-full\" :class=\"[!hasAttachments && 'min-h-[200px]']\">\n <template v-if=\"isEmailOrWebWidgetInbox\">\n <Editor\n v-model=\"modelValue\"\n :placeholder=\"\n t('COMPOSE_NEW_CONVERSATION.FORM.MESSAGE_EDITOR.PLACEHOLDER')\n \"\n class=\"[&>div]:!border-transparent [&>div]:px-4 [&>div]:py-4 [&>div]:!bg-transparent h-full [&_.ProseMirror-woot-style]:!max-h-[200px]\"\n :class=\"\n hasErrors\n ? '[&_.empty-node]:before:!text-n-ruby-9 [&_.empty-node]:dark:before:!text-n-ruby-9'\n : ''\n \"\n enable-variables\n :show-character-count=\"false\"\n />\n </template>\n <template v-else>\n <TextArea\n v-model=\"modelValue\"\n :placeholder=\"\n t('COMPOSE_NEW_CONVERSATION.FORM.MESSAGE_EDITOR.PLACEHOLDER')\n \"\n class=\"!px-0 [&>div]:!px-4 [&>div]:!border-transparent [&>div]:!bg-transparent\"\n :custom-text-area-class=\"\n hasErrors\n ? 'placeholder:!text-n-ruby-9 dark:placeholder:!text-n-ruby-9'\n : ''\n \"\n auto-height\n allow-signature\n :signature=\"messageSignature\"\n :send-with-signature=\"sendWithSignature\"\n >\n <CannedResponse\n v-if=\"state.showMentions && state.hasSlashCommand\"\n v-on-clickaway=\"hideMention\"\n class=\"normal-editor__canned-box\"\n :search-key=\"state.mentionSearchKey\"\n @replace=\"replaceText\"\n />\n </TextArea>\n </template>\n </div>\n</template>\n","import { computed } from 'vue';\nimport { useMapGetter } from 'dashboard/composables/store';\nimport { useAlert } from 'dashboard/composables';\nimport { useI18n } from 'vue-i18n';\nimport { DirectUpload } from 'activestorage';\nimport {\n MAXIMUM_FILE_UPLOAD_SIZE,\n MAXIMUM_FILE_UPLOAD_SIZE_TWILIO_SMS_CHANNEL,\n} from 'shared/constants/messages';\nimport { checkFileSizeLimit } from 'shared/helpers/FileHelper';\n\n/**\n * Composable for handling file uploads in conversations\n * @param {Object} options - Configuration options\n * @param {boolean} options.isATwilioSMSChannel - Whether the current channel is Twilio SMS\n * @param {Function} options.attachFile - Callback function to handle file attachment\n * @returns {Object} File upload methods and utilities\n */\nexport const useFileUpload = ({ isATwilioSMSChannel, attachFile }) => {\n const { t } = useI18n();\n\n const accountId = useMapGetter('getCurrentAccountId');\n const currentUser = useMapGetter('getCurrentUser');\n const currentChat = useMapGetter('getSelectedChat');\n const globalConfig = useMapGetter('globalConfig/get');\n\n const maxFileSize = computed(() =>\n isATwilioSMSChannel\n ? MAXIMUM_FILE_UPLOAD_SIZE_TWILIO_SMS_CHANNEL\n : MAXIMUM_FILE_UPLOAD_SIZE\n );\n\n const handleDirectFileUpload = file => {\n if (!file) return;\n\n if (checkFileSizeLimit(file, maxFileSize.value)) {\n const upload = new DirectUpload(\n file.file,\n `/api/v1/accounts/${accountId.value}/conversations/${currentChat.value.id}/direct_uploads`,\n {\n directUploadWillCreateBlobWithXHR: xhr => {\n xhr.setRequestHeader(\n 'api_access_token',\n currentUser.value.access_token\n );\n },\n }\n );\n\n upload.create((error, blob) => {\n if (error) {\n useAlert(error);\n } else {\n attachFile({ file, blob });\n }\n });\n } else {\n useAlert(\n t('CONVERSATION.FILE_SIZE_LIMIT', {\n MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE: maxFileSize.value,\n })\n );\n }\n };\n\n const handleIndirectFileUpload = file => {\n if (!file) return;\n\n if (checkFileSizeLimit(file, maxFileSize.value)) {\n attachFile({ file });\n } else {\n useAlert(\n t('CONVERSATION.FILE_SIZE_LIMIT', {\n MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE: maxFileSize.value,\n })\n );\n }\n };\n\n const onFileUpload = file => {\n if (globalConfig.value.directUploadsEnabled) {\n handleDirectFileUpload(file);\n } else {\n handleIndirectFileUpload(file);\n }\n };\n\n return {\n onFileUpload,\n };\n};\n","<script setup>\nimport { computed, ref, onMounted } from 'vue';\nimport { useVuelidate } from '@vuelidate/core';\nimport { requiredIf } from '@vuelidate/validators';\nimport { useI18n } from 'vue-i18n';\n\nimport Input from 'dashboard/components-next/input/Input.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n template: {\n type: Object,\n required: true,\n },\n});\n\nconst emit = defineEmits(['sendMessage', 'back']);\n\nconst { t } = useI18n();\n\nconst processedParams = ref({});\n\nconst templateName = computed(() => {\n return props.template?.name || '';\n});\n\nconst templateString = computed(() => {\n return props.template?.components?.find(\n component => component.type === 'BODY'\n ).text;\n});\n\nconst processVariable = str => {\n return str.replace(/{{|}}/g, '');\n};\n\nconst processedString = computed(() => {\n return templateString.value.replace(/{{([^}]+)}}/g, (match, variable) => {\n const variableKey = processVariable(variable);\n return processedParams.value[variableKey] || `{{${variable}}}`;\n });\n});\n\nconst processedStringWithVariableHighlight = computed(() => {\n const variables = templateString.value.match(/{{([^}]+)}}/g) || [];\n\n return variables.reduce((result, variable) => {\n const variableKey = processVariable(variable);\n const value = processedParams.value[variableKey] || variable;\n return result.replace(\n variable,\n `<span class=\"break-all text-n-slate-12\">${value}</span>`\n );\n }, templateString.value);\n});\n\nconst rules = computed(() => {\n const paramRules = {};\n Object.keys(processedParams.value).forEach(key => {\n paramRules[key] = { required: requiredIf(true) };\n });\n return {\n processedParams: paramRules,\n };\n});\n\nconst v$ = useVuelidate(rules, { processedParams });\n\nconst getFieldErrorType = key => {\n if (!v$.value.processedParams[key]?.$error) return 'info';\n return 'error';\n};\n\nconst generateVariables = () => {\n const matchedVariables = templateString.value.match(/{{([^}]+)}}/g);\n if (!matchedVariables) return;\n\n const finalVars = matchedVariables.map(i => processVariable(i));\n processedParams.value = finalVars.reduce((acc, variable) => {\n acc[variable] = '';\n return acc;\n }, {});\n};\n\nconst sendMessage = async () => {\n const isValid = await v$.value.$validate();\n if (!isValid) return;\n\n const payload = {\n message: processedString.value,\n templateParams: {\n name: props.template.name,\n category: props.template.category,\n language: props.template.language,\n namespace: props.template.namespace,\n processed_params: processedParams.value,\n },\n };\n emit('sendMessage', payload);\n};\n\nonMounted(() => {\n generateVariables();\n});\n</script>\n\n<template>\n <div\n class=\"absolute top-full mt-1.5 max-h-[30rem] overflow-y-auto left-0 flex flex-col gap-4 px-4 pt-6 pb-5 items-start w-[28.75rem] h-auto bg-n-solid-2 border border-n-strong shadow-sm rounded-lg\"\n >\n <span class=\"text-sm text-n-slate-12\">\n {{\n t(\n 'COMPOSE_NEW_CONVERSATION.FORM.WHATSAPP_OPTIONS.TEMPLATE_PARSER.TEMPLATE_NAME',\n { templateName: templateName }\n )\n }}\n </span>\n <p\n class=\"mb-0 text-sm text-n-slate-11\"\n v-html=\"processedStringWithVariableHighlight\"\n />\n\n <span\n v-if=\"Object.keys(processedParams).length\"\n class=\"text-sm font-medium text-n-slate-12\"\n >\n {{\n t(\n 'COMPOSE_NEW_CONVERSATION.FORM.WHATSAPP_OPTIONS.TEMPLATE_PARSER.VARIABLES'\n )\n }}\n </span>\n\n <div\n v-for=\"(variable, key) in processedParams\"\n :key=\"key\"\n class=\"flex items-center w-full gap-2\"\n >\n <span\n class=\"flex items-center h-8 text-sm min-w-6 ltr:text-left rtl:text-right text-n-slate-10\"\n >\n {{ key }}\n </span>\n <Input\n v-model=\"processedParams[key]\"\n custom-input-class=\"!h-8 w-full !bg-transparent\"\n class=\"w-full\"\n :message-type=\"getFieldErrorType(key)\"\n />\n </div>\n\n <div class=\"flex items-end justify-between w-full gap-3 h-14\">\n <Button\n :label=\"\n t(\n 'COMPOSE_NEW_CONVERSATION.FORM.WHATSAPP_OPTIONS.TEMPLATE_PARSER.BACK'\n )\n \"\n color=\"slate\"\n variant=\"faded\"\n class=\"w-full font-medium\"\n @click=\"emit('back')\"\n />\n <Button\n :label=\"\n t(\n 'COMPOSE_NEW_CONVERSATION.FORM.WHATSAPP_OPTIONS.TEMPLATE_PARSER.SEND_MESSAGE'\n )\n \"\n class=\"w-full font-medium\"\n @click=\"sendMessage\"\n />\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport WhatsappTemplateParser from './WhatsappTemplateParser.vue';\n\nconst props = defineProps({\n messageTemplates: {\n type: Array,\n default: () => [],\n },\n});\n\nconst emit = defineEmits(['sendMessage']);\n\nconst { t } = useI18n();\n\n// TODO: Remove this when we support all formats\nconst formatsToRemove = ['DOCUMENT', 'IMAGE', 'VIDEO'];\n\nconst searchQuery = ref('');\nconst selectedTemplate = ref(null);\n\nconst showTemplatesMenu = ref(false);\n\nconst whatsAppTemplateMessages = computed(() => {\n // Add null check and ensure it's an array\n const templates = Array.isArray(props.messageTemplates)\n ? props.messageTemplates\n : [];\n\n // TODO: Remove the last filter when we support all formats\n return templates\n .filter(template => template?.status?.toLowerCase() === 'approved')\n .filter(template => {\n return template?.components?.every(component => {\n return !formatsToRemove.includes(component.format);\n });\n });\n});\n\nconst filteredTemplates = computed(() => {\n return whatsAppTemplateMessages.value.filter(template =>\n template.name.toLowerCase().includes(searchQuery.value.toLowerCase())\n );\n});\n\nconst getTemplateBody = template => {\n return template.components.find(component => component.type === 'BODY').text;\n};\n\nconst handleTriggerClick = () => {\n searchQuery.value = '';\n showTemplatesMenu.value = !showTemplatesMenu.value;\n};\n\nconst handleTemplateClick = template => {\n selectedTemplate.value = template;\n showTemplatesMenu.value = false;\n};\n\nconst handleBack = () => {\n selectedTemplate.value = null;\n showTemplatesMenu.value = true;\n};\n\nconst handleSendMessage = template => {\n emit('sendMessage', template);\n selectedTemplate.value = null;\n};\n</script>\n\n<template>\n <div class=\"relative\">\n <Button\n icon=\"i-ri-whatsapp-line\"\n :label=\"t('COMPOSE_NEW_CONVERSATION.FORM.WHATSAPP_OPTIONS.LABEL')\"\n color=\"slate\"\n size=\"sm\"\n :disabled=\"selectedTemplate\"\n class=\"!text-xs font-medium\"\n @click=\"handleTriggerClick\"\n />\n <div\n v-if=\"showTemplatesMenu\"\n class=\"absolute top-full mt-1.5 max-h-96 overflow-y-auto left-0 flex flex-col gap-2 p-4 items-center w-[21.875rem] h-auto bg-n-solid-2 border border-n-strong shadow-sm rounded-lg\"\n >\n <div class=\"relative w-full\">\n <span class=\"absolute i-lucide-search size-3.5 top-2 left-3\" />\n <input\n v-model=\"searchQuery\"\n type=\"search\"\n :placeholder=\"\n t(\n 'COMPOSE_NEW_CONVERSATION.FORM.WHATSAPP_OPTIONS.SEARCH_PLACEHOLDER'\n )\n \"\n class=\"w-full h-8 py-2 pl-10 pr-2 text-sm reset-base outline-none border-none rounded-lg bg-n-alpha-black2 dark:bg-n-solid-1 text-n-slate-12\"\n />\n </div>\n <div\n v-for=\"template in filteredTemplates\"\n :key=\"template.id\"\n class=\"flex flex-col w-full gap-2 p-2 rounded-lg cursor-pointer dark:hover:bg-n-alpha-3 hover:bg-n-alpha-1\"\n @click=\"handleTemplateClick(template)\"\n >\n <span class=\"text-sm text-n-slate-12\">{{ template.name }}</span>\n <p class=\"mb-0 text-xs leading-5 text-n-slate-11 line-clamp-2\">\n {{ getTemplateBody(template) }}\n </p>\n </div>\n <template v-if=\"filteredTemplates.length === 0\">\n <p class=\"w-full pt-2 text-sm text-n-slate-11\">\n {{ t('COMPOSE_NEW_CONVERSATION.FORM.WHATSAPP_OPTIONS.EMPTY_STATE') }}\n </p>\n </template>\n </div>\n <WhatsappTemplateParser\n v-if=\"selectedTemplate\"\n :template=\"selectedTemplate\"\n @send-message=\"handleSendMessage\"\n @back=\"handleBack\"\n />\n </div>\n</template>\n","<script setup>\nimport { defineAsyncComponent, ref, computed, watch, nextTick } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useUISettings } from 'dashboard/composables/useUISettings';\nimport { useFileUpload } from 'dashboard/composables/useFileUpload';\nimport { vOnClickOutside } from '@vueuse/components';\nimport { ALLOWED_FILE_TYPES } from 'shared/constants/messages';\nimport { useKeyboardEvents } from 'dashboard/composables/useKeyboardEvents';\nimport FileUpload from 'vue-upload-component';\nimport { extractTextFromMarkdown } from 'dashboard/helper/editorHelper';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport WhatsAppOptions from './WhatsAppOptions.vue';\n\nconst props = defineProps({\n attachedFiles: { type: Array, default: () => [] },\n isWhatsappInbox: { type: Boolean, default: false },\n isEmailOrWebWidgetInbox: { type: Boolean, default: false },\n isTwilioSmsInbox: { type: Boolean, default: false },\n messageTemplates: { type: Array, default: () => [] },\n channelType: { type: String, default: '' },\n isLoading: { type: Boolean, default: false },\n disableSendButton: { type: Boolean, default: false },\n hasSelectedInbox: { type: Boolean, default: false },\n hasNoInbox: { type: Boolean, default: false },\n isDropdownActive: { type: Boolean, default: false },\n messageSignature: { type: String, default: '' },\n});\n\nconst emit = defineEmits([\n 'discard',\n 'sendMessage',\n 'sendWhatsappMessage',\n 'insertEmoji',\n 'addSignature',\n 'removeSignature',\n 'attachFile',\n]);\n\nconst { t } = useI18n();\n\nconst uploadAttachment = ref(null);\nconst isEmojiPickerOpen = ref(false);\n\nconst EmojiInput = defineAsyncComponent(\n () => import('shared/components/emoji/EmojiInput.vue')\n);\n\nconst signatureToApply = computed(() =>\n props.isEmailOrWebWidgetInbox\n ? props.messageSignature\n : extractTextFromMarkdown(props.messageSignature)\n);\n\nconst {\n fetchSignatureFlagFromUISettings,\n setSignatureFlagForInbox,\n isEditorHotKeyEnabled,\n} = useUISettings();\n\nconst sendWithSignature = computed(() => {\n return fetchSignatureFlagFromUISettings(props.channelType);\n});\n\nconst setSignature = () => {\n if (signatureToApply.value) {\n if (sendWithSignature.value) {\n emit('addSignature', signatureToApply.value);\n } else {\n emit('removeSignature', signatureToApply.value);\n }\n }\n};\n\nconst toggleMessageSignature = () => {\n setSignatureFlagForInbox(props.channelType, !sendWithSignature.value);\n setSignature();\n};\n\n// Added this watch to dynamically set signature on target inbox change.\n// Only targetInbox has value and is Advance Editor(used by isEmailOrWebWidgetInbox)\n// Set the signature only if the inbox based flag is true\nwatch(\n () => props.hasSelectedInbox,\n newValue => {\n nextTick(() => {\n if (newValue && props.isEmailOrWebWidgetInbox) setSignature();\n });\n },\n { immediate: true }\n);\n\nconst onClickInsertEmoji = emoji => {\n emit('insertEmoji', emoji);\n};\n\nconst { onFileUpload } = useFileUpload({\n isATwilioSMSChannel: props.isTwilioSmsInbox,\n attachFile: ({ blob, file }) => {\n if (!file) return;\n const reader = new FileReader();\n reader.readAsDataURL(file.file);\n reader.onloadend = () => {\n const newFile = {\n resource: blob || file,\n isPrivate: false,\n thumb: reader.result,\n blobSignedId: blob?.signed_id,\n };\n emit('attachFile', [...props.attachedFiles, newFile]);\n };\n },\n});\n\nconst sendButtonLabel = computed(() => {\n const keyCode = isEditorHotKeyEnabled('cmd_enter') ? '⌘ + ↵' : '↵';\n return t('COMPOSE_NEW_CONVERSATION.FORM.ACTION_BUTTONS.SEND', {\n keyCode,\n });\n});\n\nconst keyboardEvents = {\n Enter: {\n action: () => {\n if (\n isEditorHotKeyEnabled('enter') &&\n !props.isWhatsappInbox &&\n !props.isDropdownActive\n ) {\n emit('sendMessage');\n }\n },\n },\n '$mod+Enter': {\n action: () => {\n if (\n isEditorHotKeyEnabled('cmd_enter') &&\n !props.isWhatsappInbox &&\n !props.isDropdownActive\n ) {\n emit('sendMessage');\n }\n },\n },\n};\nuseKeyboardEvents(keyboardEvents);\n</script>\n\n<template>\n <div\n class=\"flex items-center justify-between w-full h-[3.25rem] gap-2 px-4 py-3\"\n >\n <div class=\"flex items-center gap-2\">\n <WhatsAppOptions\n v-if=\"isWhatsappInbox\"\n :message-templates=\"messageTemplates\"\n @send-message=\"emit('sendWhatsappMessage', $event)\"\n />\n <div\n v-if=\"!isWhatsappInbox && !hasNoInbox\"\n v-on-click-outside=\"() => (isEmojiPickerOpen = false)\"\n class=\"relative\"\n >\n <Button\n icon=\"i-lucide-smile-plus\"\n color=\"slate\"\n size=\"sm\"\n class=\"!w-10\"\n @click=\"isEmojiPickerOpen = !isEmojiPickerOpen\"\n />\n <EmojiInput\n v-if=\"isEmojiPickerOpen\"\n class=\"left-0 top-full mt-1.5\"\n :on-click=\"onClickInsertEmoji\"\n />\n </div>\n <FileUpload\n v-if=\"isEmailOrWebWidgetInbox\"\n ref=\"uploadAttachment\"\n input-id=\"composeNewConversationAttachment\"\n :size=\"4096 * 4096\"\n :accept=\"ALLOWED_FILE_TYPES\"\n multiple\n :drop-directory=\"false\"\n :data=\"{\n direct_upload_url: '/rails/active_storage/direct_uploads',\n direct_upload: true,\n }\"\n class=\"p-px\"\n @input-file=\"onFileUpload\"\n >\n <Button\n icon=\"i-lucide-plus\"\n color=\"slate\"\n size=\"sm\"\n class=\"!w-10 relative\"\n />\n </FileUpload>\n <Button\n v-if=\"hasSelectedInbox && !isWhatsappInbox\"\n icon=\"i-lucide-signature\"\n color=\"slate\"\n size=\"sm\"\n class=\"!w-10\"\n @click=\"toggleMessageSignature\"\n />\n </div>\n\n <div class=\"flex items-center gap-2\">\n <Button\n :label=\"t('COMPOSE_NEW_CONVERSATION.FORM.ACTION_BUTTONS.DISCARD')\"\n variant=\"faded\"\n color=\"slate\"\n size=\"sm\"\n class=\"!text-xs font-medium\"\n @click=\"emit('discard')\"\n />\n <Button\n v-if=\"!isWhatsappInbox\"\n :label=\"sendButtonLabel\"\n size=\"sm\"\n class=\"!text-xs font-medium\"\n :disabled=\"isLoading || disableSendButton\"\n :is-loading=\"isLoading\"\n @click=\"emit('sendMessage')\"\n />\n </div>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.emoji-dialog::before {\n @apply hidden;\n}\n\n// The <label> tag inside the file-upload component overlaps the button due to its position.\n// This causes the button's hover state to not work, as it's positioned below the label (z-index).\n// Increasing the button's z-index would break the file upload functionality.\n// This style ensures the label remains clickable while preserving the button's hover effect.\n:deep() {\n .file-uploads.file-uploads-html5 {\n label {\n @apply hover:cursor-pointer;\n }\n\n &:hover button {\n @apply dark:bg-n-solid-2 bg-n-alpha-2;\n }\n }\n}\n</style>\n","<template>\n <div\n class=\"flex items-center w-full px-4 py-3 dark:bg-n-amber-11/15 bg-n-amber-3\"\n >\n <span class=\"text-sm dark:text-n-amber-11 text-n-amber-11\">\n {{ $t('COMPOSE_NEW_CONVERSATION.FORM.NO_INBOX_ALERT') }}\n </span>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { fileNameWithEllipsis } from '@chatwoot/utils';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n attachments: {\n type: Array,\n required: true,\n },\n});\n\nconst emit = defineEmits(['update:attachments']);\n\nconst isTypeImage = file => {\n const type = file.content_type || file.type;\n return type.includes('image');\n};\n\nconst filteredImageAttachments = computed(() => {\n return props.attachments.filter(attachment =>\n isTypeImage(attachment.resource)\n );\n});\n\nconst filteredNonImageAttachments = computed(() => {\n return props.attachments.filter(\n attachment => !isTypeImage(attachment.resource)\n );\n});\n\nconst removeAttachment = id => {\n const updatedAttachments = props.attachments.filter(\n attachment => attachment.resource.id !== id\n );\n emit('update:attachments', updatedAttachments);\n};\n</script>\n\n<template>\n <div class=\"flex flex-col gap-4 p-4\">\n <div\n v-if=\"filteredImageAttachments.length > 0\"\n class=\"flex flex-wrap gap-3\"\n >\n <div\n v-for=\"attachment in filteredImageAttachments\"\n :key=\"attachment.id\"\n class=\"relative group/image w-[4.5rem] h-[4.5rem]\"\n >\n <img\n class=\"object-cover w-[4.5rem] h-[4.5rem] rounded-lg\"\n :src=\"attachment.thumb\"\n />\n <Button\n variant=\"ghost\"\n icon=\"i-lucide-trash\"\n color=\"slate\"\n class=\"absolute top-1 right-1 !w-5 !h-5 transition-opacity duration-150 ease-in-out opacity-0 group-hover/image:opacity-100\"\n @click=\"removeAttachment(attachment.resource.id)\"\n />\n </div>\n </div>\n <div\n v-if=\"filteredNonImageAttachments.length > 0\"\n class=\"flex flex-wrap gap-3\"\n >\n <div\n v-for=\"attachment in filteredNonImageAttachments\"\n :key=\"attachment.id\"\n class=\"max-w-[18.75rem] inline-flex items-center h-8 min-w-0 bg-n-alpha-2 dark:bg-n-solid-3 rounded-lg gap-3 ltr:pl-3 rtl:pr-3 ltr:pr-2 rtl:pl-2\"\n >\n <span class=\"text-sm font-medium text-n-slate-11\">\n {{ fileNameWithEllipsis(attachment.resource) }}\n </span>\n <Button\n variant=\"ghost\"\n icon=\"i-lucide-x\"\n color=\"slate\"\n size=\"xs\"\n class=\"shrink-0 !h-5 !w-5\"\n @click=\"removeAttachment(attachment.resource.id)\"\n />\n </div>\n </div>\n </div>\n</template>\n","<script setup>\nimport { reactive, ref, computed } from 'vue';\nimport { useVuelidate } from '@vuelidate/core';\nimport { required, requiredIf } from '@vuelidate/validators';\nimport { INBOX_TYPES } from 'dashboard/helper/inbox';\nimport {\n appendSignature,\n removeSignature,\n extractTextFromMarkdown,\n} from 'dashboard/helper/editorHelper';\nimport {\n buildContactableInboxesList,\n prepareNewMessagePayload,\n prepareWhatsAppMessagePayload,\n} from 'dashboard/components-next/NewConversation/helpers/composeConversationHelper.js';\n\nimport ContactSelector from './ContactSelector.vue';\nimport InboxSelector from './InboxSelector.vue';\nimport EmailOptions from './EmailOptions.vue';\nimport MessageEditor from './MessageEditor.vue';\nimport ActionButtons from './ActionButtons.vue';\nimport InboxEmptyState from './InboxEmptyState.vue';\nimport AttachmentPreviews from './AttachmentPreviews.vue';\n\nconst props = defineProps({\n contacts: { type: Array, default: () => [] },\n contactId: { type: String, default: null },\n selectedContact: { type: Object, default: null },\n targetInbox: { type: Object, default: null },\n currentUser: { type: Object, default: null },\n isCreatingContact: { type: Boolean, default: false },\n isFetchingInboxes: { type: Boolean, default: false },\n isLoading: { type: Boolean, default: false },\n isDirectUploadsEnabled: { type: Boolean, default: false },\n contactConversationsUiFlags: { type: Object, default: null },\n contactsUiFlags: { type: Object, default: null },\n messageSignature: { type: String, default: '' },\n sendWithSignature: { type: Boolean, default: false },\n});\n\nconst emit = defineEmits([\n 'searchContacts',\n 'discard',\n 'updateSelectedContact',\n 'updateTargetInbox',\n 'clearSelectedContact',\n 'createConversation',\n]);\n\nconst showContactsDropdown = ref(false);\nconst showInboxesDropdown = ref(false);\nconst showCcEmailsDropdown = ref(false);\nconst showBccEmailsDropdown = ref(false);\n\nconst isCreating = computed(() => props.contactConversationsUiFlags.isCreating);\n\nconst state = reactive({\n message: '',\n subject: '',\n ccEmails: '',\n bccEmails: '',\n attachedFiles: [],\n});\n\nconst inboxTypes = computed(() => ({\n isEmail: props.targetInbox?.channelType === INBOX_TYPES.EMAIL,\n isTwilio: props.targetInbox?.channelType === INBOX_TYPES.TWILIO,\n isWhatsapp: props.targetInbox?.channelType === INBOX_TYPES.WHATSAPP,\n isWebWidget: props.targetInbox?.channelType === INBOX_TYPES.WEB,\n isApi: props.targetInbox?.channelType === INBOX_TYPES.API,\n isEmailOrWebWidget:\n props.targetInbox?.channelType === INBOX_TYPES.EMAIL ||\n props.targetInbox?.channelType === INBOX_TYPES.WEB,\n isTwilioSMS:\n props.targetInbox?.channelType === INBOX_TYPES.TWILIO &&\n props.targetInbox?.medium === 'sms',\n}));\n\nconst whatsappMessageTemplates = computed(() =>\n Object.keys(props.targetInbox?.messageTemplates || {}).length\n ? props.targetInbox.messageTemplates\n : []\n);\n\nconst inboxChannelType = computed(() => props.targetInbox?.channelType || '');\n\nconst validationRules = computed(() => ({\n selectedContact: { required },\n targetInbox: { required },\n message: { required: requiredIf(!inboxTypes.value.isWhatsapp) },\n subject: { required: requiredIf(inboxTypes.value.isEmail) },\n}));\n\nconst v$ = useVuelidate(validationRules, {\n selectedContact: computed(() => props.selectedContact),\n targetInbox: computed(() => props.targetInbox),\n message: computed(() => state.message),\n subject: computed(() => state.subject),\n});\n\nconst validationStates = computed(() => ({\n isContactInvalid:\n v$.value.selectedContact.$dirty && v$.value.selectedContact.$invalid,\n isInboxInvalid: v$.value.targetInbox.$dirty && v$.value.targetInbox.$invalid,\n isSubjectInvalid: v$.value.subject.$dirty && v$.value.subject.$invalid,\n isMessageInvalid: v$.value.message.$dirty && v$.value.message.$invalid,\n}));\n\nconst newMessagePayload = () => {\n const { message, subject, ccEmails, bccEmails, attachedFiles } = state;\n return prepareNewMessagePayload({\n targetInbox: props.targetInbox,\n selectedContact: props.selectedContact,\n message,\n subject,\n ccEmails,\n bccEmails,\n currentUser: props.currentUser,\n attachedFiles,\n directUploadsEnabled: props.isDirectUploadsEnabled,\n });\n};\n\nconst contactableInboxesList = computed(() => {\n return buildContactableInboxesList(props.selectedContact?.contactInboxes);\n});\n\nconst showNoInboxAlert = computed(() => {\n return (\n props.selectedContact &&\n contactableInboxesList.value.length === 0 &&\n !props.contactsUiFlags.isFetchingInboxes &&\n !props.isFetchingInboxes\n );\n});\n\nconst isAnyDropdownActive = computed(() => {\n return (\n showContactsDropdown.value ||\n showInboxesDropdown.value ||\n showCcEmailsDropdown.value ||\n showBccEmailsDropdown.value\n );\n});\n\nconst handleContactSearch = value => {\n showContactsDropdown.value = true;\n emit('searchContacts', {\n keys: ['email', 'phone_number', 'name'],\n query: value,\n });\n};\n\nconst handleDropdownUpdate = (type, value) => {\n if (type === 'cc') {\n showCcEmailsDropdown.value = value;\n } else if (type === 'bcc') {\n showBccEmailsDropdown.value = value;\n } else {\n showContactsDropdown.value = value;\n }\n};\n\nconst searchCcEmails = value => {\n showCcEmailsDropdown.value = true;\n emit('searchContacts', { keys: ['email'], query: value });\n};\n\nconst searchBccEmails = value => {\n showBccEmailsDropdown.value = true;\n emit('searchContacts', { keys: ['email'], query: value });\n};\n\nconst setSelectedContact = async ({ value, action, ...rest }) => {\n v$.value.$reset();\n emit('updateSelectedContact', { value, action, ...rest });\n showContactsDropdown.value = false;\n showInboxesDropdown.value = true;\n};\n\nconst handleInboxAction = ({ value, action, ...rest }) => {\n v$.value.$reset();\n emit('updateTargetInbox', { ...rest });\n showInboxesDropdown.value = false;\n state.attachedFiles = [];\n};\n\nconst removeTargetInbox = value => {\n v$.value.$reset();\n // Remove the signature from message content\n // Based on the Advance Editor (used in isEmailOrWebWidget) and Plain editor(all other inboxes except WhatsApp)\n if (props.sendWithSignature) {\n const signatureToRemove = inboxTypes.value.isEmailOrWebWidget\n ? props.messageSignature\n : extractTextFromMarkdown(props.messageSignature);\n state.message = removeSignature(state.message, signatureToRemove);\n }\n emit('updateTargetInbox', value);\n state.attachedFiles = [];\n};\n\nconst clearSelectedContact = () => {\n emit('clearSelectedContact');\n state.attachedFiles = [];\n};\n\nconst onClickInsertEmoji = emoji => {\n state.message += emoji;\n};\n\nconst handleAddSignature = signature => {\n state.message = appendSignature(state.message, signature);\n};\n\nconst handleRemoveSignature = signature => {\n state.message = removeSignature(state.message, signature);\n};\n\nconst handleAttachFile = files => {\n state.attachedFiles = files;\n};\n\nconst clearForm = () => {\n Object.assign(state, {\n message: '',\n subject: '',\n ccEmails: '',\n bccEmails: '',\n attachedFiles: [],\n });\n v$.value.$reset();\n};\n\nconst handleSendMessage = async () => {\n const isValid = await v$.value.$validate();\n if (!isValid) return;\n\n try {\n const success = await emit('createConversation', {\n payload: newMessagePayload(),\n isFromWhatsApp: false,\n });\n if (success) {\n clearForm();\n }\n } catch (error) {\n // Form will not be cleared if conversation creation fails\n }\n};\n\nconst handleSendWhatsappMessage = async ({ message, templateParams }) => {\n const whatsappMessagePayload = prepareWhatsAppMessagePayload({\n targetInbox: props.targetInbox,\n selectedContact: props.selectedContact,\n message,\n templateParams,\n currentUser: props.currentUser,\n });\n await emit('createConversation', {\n payload: whatsappMessagePayload,\n isFromWhatsApp: true,\n });\n};\n</script>\n\n<template>\n <div\n class=\"w-[42rem] divide-y divide-n-strong overflow-visible transition-all duration-300 ease-in-out top-full justify-between flex flex-col bg-n-alpha-3 border border-n-strong shadow-sm backdrop-blur-[100px] rounded-xl\"\n >\n <ContactSelector\n :contacts=\"contacts\"\n :selected-contact=\"selectedContact\"\n :show-contacts-dropdown=\"showContactsDropdown\"\n :is-loading=\"isLoading\"\n :is-creating-contact=\"isCreatingContact\"\n :contact-id=\"contactId\"\n :contactable-inboxes-list=\"contactableInboxesList\"\n :show-inboxes-dropdown=\"showInboxesDropdown\"\n :has-errors=\"validationStates.isContactInvalid\"\n @search-contacts=\"handleContactSearch\"\n @set-selected-contact=\"setSelectedContact\"\n @clear-selected-contact=\"clearSelectedContact\"\n @update-dropdown=\"handleDropdownUpdate\"\n />\n <InboxEmptyState v-if=\"showNoInboxAlert\" />\n <InboxSelector\n v-else\n :target-inbox=\"targetInbox\"\n :selected-contact=\"selectedContact\"\n :show-inboxes-dropdown=\"showInboxesDropdown\"\n :contactable-inboxes-list=\"contactableInboxesList\"\n :has-errors=\"validationStates.isInboxInvalid\"\n @update-inbox=\"removeTargetInbox\"\n @toggle-dropdown=\"showInboxesDropdown = $event\"\n @handle-inbox-action=\"handleInboxAction\"\n />\n\n <EmailOptions\n v-if=\"inboxTypes.isEmail\"\n v-model:cc-emails=\"state.ccEmails\"\n v-model:bcc-emails=\"state.bccEmails\"\n v-model:subject=\"state.subject\"\n :contacts=\"contacts\"\n :show-cc-emails-dropdown=\"showCcEmailsDropdown\"\n :show-bcc-emails-dropdown=\"showBccEmailsDropdown\"\n :is-loading=\"isLoading\"\n :has-errors=\"validationStates.isSubjectInvalid\"\n @search-cc-emails=\"searchCcEmails\"\n @search-bcc-emails=\"searchBccEmails\"\n @update-dropdown=\"handleDropdownUpdate\"\n />\n\n <MessageEditor\n v-if=\"!inboxTypes.isWhatsapp && !showNoInboxAlert\"\n v-model=\"state.message\"\n :message-signature=\"messageSignature\"\n :send-with-signature=\"sendWithSignature\"\n :is-email-or-web-widget-inbox=\"inboxTypes.isEmailOrWebWidget\"\n :has-errors=\"validationStates.isMessageInvalid\"\n :has-attachments=\"state.attachedFiles.length > 0\"\n />\n\n <AttachmentPreviews\n v-if=\"state.attachedFiles.length > 0\"\n :attachments=\"state.attachedFiles\"\n @update:attachments=\"state.attachedFiles = $event\"\n />\n\n <ActionButtons\n :attached-files=\"state.attachedFiles\"\n :is-whatsapp-inbox=\"inboxTypes.isWhatsapp\"\n :is-email-or-web-widget-inbox=\"inboxTypes.isEmailOrWebWidget\"\n :is-twilio-sms-inbox=\"inboxTypes.isTwilioSMS\"\n :message-templates=\"whatsappMessageTemplates\"\n :channel-type=\"inboxChannelType\"\n :is-loading=\"isCreating\"\n :disable-send-button=\"isCreating\"\n :has-selected-inbox=\"!!targetInbox\"\n :has-no-inbox=\"showNoInboxAlert\"\n :is-dropdown-active=\"isAnyDropdownActive\"\n :message-signature=\"messageSignature\"\n @insert-emoji=\"onClickInsertEmoji\"\n @add-signature=\"handleAddSignature\"\n @remove-signature=\"handleRemoveSignature\"\n @attach-file=\"handleAttachFile\"\n @discard=\"$emit('discard')\"\n @send-message=\"handleSendMessage\"\n @send-whatsapp-message=\"handleSendWhatsappMessage\"\n />\n </div>\n</template>\n","<script setup>\nimport { ref, computed, onMounted, watch } from 'vue';\nimport { useStore, useMapGetter } from 'dashboard/composables/store';\nimport { useI18n } from 'vue-i18n';\nimport { useUISettings } from 'dashboard/composables/useUISettings';\nimport { vOnClickOutside } from '@vueuse/components';\nimport { useAlert } from 'dashboard/composables';\nimport { ExceptionWithMessage } from 'shared/helpers/CustomErrors';\nimport { debounce } from '@chatwoot/utils';\nimport { useKeyboardEvents } from 'dashboard/composables/useKeyboardEvents';\nimport {\n searchContacts,\n createNewContact,\n fetchContactableInboxes,\n processContactableInboxes,\n mergeInboxDetails,\n} from 'dashboard/components-next/NewConversation/helpers/composeConversationHelper';\n\nimport ComposeNewConversationForm from 'dashboard/components-next/NewConversation/components/ComposeNewConversationForm.vue';\n\nconst props = defineProps({\n alignPosition: {\n type: String,\n default: 'left',\n },\n contactId: {\n type: String,\n default: null,\n },\n isModal: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits(['close']);\n\nconst store = useStore();\nconst { t } = useI18n();\n\nconst { fetchSignatureFlagFromUISettings } = useUISettings();\n\nconst contacts = ref([]);\nconst selectedContact = ref(null);\nconst targetInbox = ref(null);\nconst isCreatingContact = ref(false);\nconst isFetchingInboxes = ref(false);\nconst isSearching = ref(false);\nconst showComposeNewConversation = ref(false);\n\nconst contactById = useMapGetter('contacts/getContactById');\nconst contactsUiFlags = useMapGetter('contacts/getUIFlags');\nconst currentUser = useMapGetter('getCurrentUser');\nconst globalConfig = useMapGetter('globalConfig/get');\nconst uiFlags = useMapGetter('contactConversations/getUIFlags');\nconst messageSignature = useMapGetter('getMessageSignature');\nconst inboxesList = useMapGetter('inboxes/getInboxes');\n\nconst sendWithSignature = computed(() =>\n fetchSignatureFlagFromUISettings(targetInbox.value?.channelType)\n);\n\nconst directUploadsEnabled = computed(\n () => globalConfig.value.directUploadsEnabled\n);\n\nconst activeContact = computed(() => contactById.value(props.contactId));\n\nconst composePopoverClass = computed(() => {\n if (props.isModal) return '';\n\n return props.alignPosition === 'right'\n ? 'absolute ltr:left-0 ltr:right-[unset] rtl:right-0 rtl:left-[unset]'\n : 'absolute rtl:left-0 rtl:right-[unset] ltr:right-0 ltr:left-[unset]';\n});\n\nconst onContactSearch = debounce(\n async query => {\n isSearching.value = true;\n contacts.value = [];\n try {\n contacts.value = await searchContacts(query);\n isSearching.value = false;\n } catch (error) {\n useAlert(t('COMPOSE_NEW_CONVERSATION.CONTACT_SEARCH.ERROR_MESSAGE'));\n } finally {\n isSearching.value = false;\n }\n },\n 300,\n false\n);\n\nconst resetContacts = () => {\n contacts.value = [];\n};\n\nconst handleSelectedContact = async ({ value, action, ...rest }) => {\n let contact;\n if (action === 'create') {\n isCreatingContact.value = true;\n try {\n contact = await createNewContact(value);\n isCreatingContact.value = false;\n } catch (error) {\n isCreatingContact.value = false;\n return;\n }\n } else {\n contact = rest;\n }\n selectedContact.value = contact;\n if (contact?.id) {\n isFetchingInboxes.value = true;\n try {\n const contactableInboxes = await fetchContactableInboxes(contact.id);\n // Merge the processed contactableInboxes with the inboxesList\n selectedContact.value.contactInboxes = mergeInboxDetails(\n contactableInboxes,\n inboxesList.value\n );\n\n isFetchingInboxes.value = false;\n } catch (error) {\n isFetchingInboxes.value = false;\n }\n }\n};\n\nconst handleTargetInbox = inbox => {\n targetInbox.value = inbox;\n resetContacts();\n};\n\nconst clearSelectedContact = () => {\n selectedContact.value = null;\n targetInbox.value = null;\n};\n\nconst closeCompose = () => {\n showComposeNewConversation.value = false;\n if (!props.contactId) {\n // If contactId is passed as prop\n // Then don't allow to remove the selected contact\n selectedContact.value = null;\n }\n targetInbox.value = null;\n resetContacts();\n emit('close');\n};\n\nconst createConversation = async ({ payload, isFromWhatsApp }) => {\n try {\n const data = await store.dispatch('contactConversations/create', {\n params: payload,\n isFromWhatsApp,\n });\n const action = {\n type: 'link',\n to: `/app/accounts/${data.account_id}/conversations/${data.id}`,\n message: t('COMPOSE_NEW_CONVERSATION.FORM.GO_TO_CONVERSATION'),\n };\n closeCompose();\n useAlert(t('COMPOSE_NEW_CONVERSATION.FORM.SUCCESS_MESSAGE'), action);\n return true; // Return success\n } catch (error) {\n useAlert(\n error instanceof ExceptionWithMessage\n ? error.data\n : t('COMPOSE_NEW_CONVERSATION.FORM.ERROR_MESSAGE')\n );\n return false; // Return failure\n }\n};\n\nconst toggle = () => {\n showComposeNewConversation.value = !showComposeNewConversation.value;\n};\n\nwatch(\n activeContact,\n () => {\n if (activeContact.value && props.contactId) {\n const contactInboxes = activeContact.value?.contactInboxes || [];\n // First process the contactable inboxes to get the right structure\n const processedInboxes = processContactableInboxes(contactInboxes);\n // Then Merge processedInboxes with the inboxes list\n selectedContact.value = {\n ...activeContact.value,\n contactInboxes: mergeInboxDetails(processedInboxes, inboxesList.value),\n };\n }\n },\n { immediate: true, deep: true }\n);\n\nconst handleClickOutside = () => {\n if (!showComposeNewConversation.value) return;\n\n showComposeNewConversation.value = false;\n emit('close');\n};\n\nconst onModalBackdropClick = () => {\n if (!props.isModal) return;\n handleClickOutside();\n};\n\nonMounted(() => resetContacts());\n\nconst keyboardEvents = {\n Escape: {\n action: () => {\n if (showComposeNewConversation.value) {\n showComposeNewConversation.value = false;\n }\n },\n },\n};\n\nuseKeyboardEvents(keyboardEvents);\n</script>\n\n<template>\n <div\n v-on-click-outside=\"[\n handleClickOutside,\n // Fixed and edge case https://github.com/chatwoot/chatwoot/issues/10785\n // This will prevent closing the compose conversation modal when the editor Create link popup is open\n { ignore: ['div.ProseMirror-prompt'] },\n ]\"\n class=\"relative\"\n :class=\"{\n 'z-40': showComposeNewConversation,\n }\"\n >\n <slot\n name=\"trigger\"\n :is-open=\"showComposeNewConversation\"\n :toggle=\"toggle\"\n />\n <div\n v-if=\"showComposeNewConversation\"\n :class=\"{\n 'fixed z-50 bg-n-alpha-black1 backdrop-blur-[4px] flex items-start pt-[clamp(3rem,15vh,12rem)] justify-center inset-0':\n isModal,\n }\"\n @click.self=\"onModalBackdropClick\"\n >\n <ComposeNewConversationForm\n :class=\"[{ 'mt-2': !isModal }, composePopoverClass]\"\n :contacts=\"contacts\"\n :contact-id=\"contactId\"\n :is-loading=\"isSearching\"\n :current-user=\"currentUser\"\n :selected-contact=\"selectedContact\"\n :target-inbox=\"targetInbox\"\n :is-creating-contact=\"isCreatingContact\"\n :is-fetching-inboxes=\"isFetchingInboxes\"\n :is-direct-uploads-enabled=\"directUploadsEnabled\"\n :contact-conversations-ui-flags=\"uiFlags\"\n :contacts-ui-flags=\"contactsUiFlags\"\n :message-signature=\"messageSignature\"\n :send-with-signature=\"sendWithSignature\"\n @search-contacts=\"onContactSearch\"\n @reset-contact-search=\"resetContacts\"\n @update-selected-contact=\"handleSelectedContact\"\n @update-target-inbox=\"handleTargetInbox\"\n @clear-selected-contact=\"clearSelectedContact\"\n @create-conversation=\"createConversation\"\n @discard=\"closeCompose\"\n />\n </div>\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useAlert } from 'dashboard/composables';\nimport { dynamicTime } from 'shared/helpers/timeHelper';\nimport { useAdmin } from 'dashboard/composables/useAdmin';\nimport ContactInfoRow from './ContactInfoRow.vue';\nimport Thumbnail from 'dashboard/components/widgets/Thumbnail.vue';\nimport SocialIcons from './SocialIcons.vue';\nimport EditContact from './EditContact.vue';\nimport ContactMergeModal from 'dashboard/modules/contact/ContactMergeModal.vue';\nimport ComposeConversation from 'dashboard/components-next/NewConversation/ComposeConversation.vue';\nimport { BUS_EVENTS } from 'shared/constants/busEvents';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nimport {\n isAConversationRoute,\n isAInboxViewRoute,\n getConversationDashboardRoute,\n} from '../../../../helper/routeHelpers';\nimport { emitter } from 'shared/helpers/mitt';\n\nexport default {\n components: {\n NextButton,\n ContactInfoRow,\n EditContact,\n Thumbnail,\n ComposeConversation,\n SocialIcons,\n ContactMergeModal,\n },\n props: {\n contact: {\n type: Object,\n default: () => ({}),\n },\n showAvatar: {\n type: Boolean,\n default: true,\n },\n },\n emits: ['panelClose'],\n setup() {\n const { isAdmin } = useAdmin();\n return {\n isAdmin,\n };\n },\n data() {\n return {\n showEditModal: false,\n showMergeModal: false,\n showDeleteModal: false,\n };\n },\n computed: {\n ...mapGetters({ uiFlags: 'contacts/getUIFlags' }),\n contactProfileLink() {\n return `/app/accounts/${this.$route.params.accountId}/contacts/${this.contact.id}`;\n },\n additionalAttributes() {\n return this.contact.additional_attributes || {};\n },\n location() {\n const {\n country = '',\n city = '',\n country_code: countryCode,\n } = this.additionalAttributes;\n const cityAndCountry = [city, country].filter(item => !!item).join(', ');\n\n if (!cityAndCountry) {\n return '';\n }\n return this.findCountryFlag(countryCode, cityAndCountry);\n },\n socialProfiles() {\n const {\n social_profiles: socialProfiles,\n screen_name: twitterScreenName,\n social_telegram_user_name: telegramUsername,\n } = this.additionalAttributes;\n return {\n twitter: twitterScreenName,\n telegram: telegramUsername,\n ...(socialProfiles || {}),\n };\n },\n // Delete Modal\n confirmDeleteMessage() {\n return ` ${this.contact.name}?`;\n },\n },\n watch: {\n 'contact.id': {\n handler(id) {\n this.$store.dispatch('contacts/fetchContactableInbox', id);\n },\n immediate: true,\n },\n },\n methods: {\n dynamicTime,\n toggleEditModal() {\n this.showEditModal = !this.showEditModal;\n },\n openComposeConversationModal(toggleFn) {\n toggleFn();\n // Flag to prevent triggering drag n drop,\n // When compose modal is active\n emitter.emit(BUS_EVENTS.NEW_CONVERSATION_MODAL, true);\n },\n closeComposeConversationModal() {\n // Flag to enable drag n drop,\n // When compose modal is closed\n emitter.emit(BUS_EVENTS.NEW_CONVERSATION_MODAL, false);\n },\n toggleDeleteModal() {\n this.showDeleteModal = !this.showDeleteModal;\n },\n confirmDeletion() {\n this.deleteContact(this.contact);\n this.closeDelete();\n },\n closeDelete() {\n this.showDeleteModal = false;\n this.showEditModal = false;\n },\n findCountryFlag(countryCode, cityAndCountry) {\n try {\n if (!countryCode) {\n return `${cityAndCountry} 🌎`;\n }\n\n const code = countryCode?.toLowerCase();\n return `${cityAndCountry} <span class=\"fi fi-${code} size-3.5\"></span>`;\n } catch (error) {\n return '';\n }\n },\n async deleteContact({ id }) {\n try {\n await this.$store.dispatch('contacts/delete', id);\n this.$emit('panelClose');\n useAlert(this.$t('DELETE_CONTACT.API.SUCCESS_MESSAGE'));\n\n if (isAConversationRoute(this.$route.name)) {\n this.$router.push({\n name: getConversationDashboardRoute(this.$route.name),\n });\n } else if (isAInboxViewRoute(this.$route.name)) {\n this.$router.push({\n name: 'inbox_view',\n });\n } else if (this.$route.name !== 'contacts_dashboard') {\n this.$router.push({\n name: 'contacts_dashboard',\n });\n }\n } catch (error) {\n useAlert(\n error.message\n ? error.message\n : this.$t('DELETE_CONTACT.API.ERROR_MESSAGE')\n );\n }\n },\n closeMergeModal() {\n this.showMergeModal = false;\n },\n openMergeModal() {\n this.showMergeModal = true;\n },\n },\n};\n</script>\n\n<template>\n <div class=\"relative items-center w-full p-4\">\n <div class=\"flex flex-col w-full gap-2 text-left rtl:text-right\">\n <div class=\"flex flex-row justify-between\">\n <Thumbnail\n v-if=\"showAvatar\"\n :src=\"contact.thumbnail\"\n size=\"48px\"\n :username=\"contact.name\"\n :status=\"contact.availability_status\"\n />\n </div>\n\n <div class=\"flex flex-col items-start gap-1.5 min-w-0 w-full\">\n <div v-if=\"showAvatar\" class=\"flex items-center w-full min-w-0 gap-3\">\n <h3\n class=\"flex-shrink max-w-full min-w-0 my-0 text-base capitalize break-words text-n-slate-12\"\n >\n {{ contact.name }}\n </h3>\n <div class=\"flex flex-row items-center gap-2\">\n <span\n v-if=\"contact.created_at\"\n v-tooltip.left=\"\n `${$t('CONTACT_PANEL.CREATED_AT_LABEL')} ${dynamicTime(\n contact.created_at\n )}`\n \"\n class=\"i-lucide-info text-sm text-n-slate-10\"\n />\n <a\n :href=\"contactProfileLink\"\n target=\"_blank\"\n rel=\"noopener nofollow noreferrer\"\n class=\"leading-3\"\n >\n <span class=\"i-lucide-external-link text-sm text-n-slate-10\" />\n </a>\n </div>\n </div>\n\n <p v-if=\"additionalAttributes.description\" class=\"break-words mb-0.5\">\n {{ additionalAttributes.description }}\n </p>\n <div class=\"flex flex-col items-start w-full gap-2\">\n <ContactInfoRow\n :href=\"contact.email ? `mailto:${contact.email}` : ''\"\n :value=\"contact.email\"\n icon=\"mail\"\n emoji=\"✉ï¸\"\n :title=\"$t('CONTACT_PANEL.EMAIL_ADDRESS')\"\n show-copy\n />\n <ContactInfoRow\n :href=\"contact.phone_number ? `tel:${contact.phone_number}` : ''\"\n :value=\"contact.phone_number\"\n icon=\"call\"\n emoji=\"📞\"\n :title=\"$t('CONTACT_PANEL.PHONE_NUMBER')\"\n show-copy\n />\n <ContactInfoRow\n v-if=\"contact.identifier\"\n :value=\"contact.identifier\"\n icon=\"contact-identify\"\n emoji=\"🪪\"\n :title=\"$t('CONTACT_PANEL.IDENTIFIER')\"\n />\n <ContactInfoRow\n :value=\"additionalAttributes.company_name\"\n icon=\"building-bank\"\n emoji=\"ðŸ¢\"\n :title=\"$t('CONTACT_PANEL.COMPANY')\"\n />\n <ContactInfoRow\n v-if=\"location || additionalAttributes.location\"\n :value=\"location || additionalAttributes.location\"\n icon=\"map\"\n emoji=\"ðŸŒ\"\n :title=\"$t('CONTACT_PANEL.LOCATION')\"\n />\n <SocialIcons :social-profiles=\"socialProfiles\" />\n </div>\n </div>\n <div class=\"flex items-center w-full mt-0.5 gap-2\">\n <ComposeConversation\n :contact-id=\"String(contact.id)\"\n is-modal\n @close=\"closeComposeConversationModal\"\n >\n <template #trigger=\"{ toggle }\">\n <NextButton\n v-tooltip.top-end=\"$t('CONTACT_PANEL.NEW_MESSAGE')\"\n icon=\"i-ph-chat-circle-dots\"\n slate\n faded\n sm\n @click=\"openComposeConversationModal(toggle)\"\n />\n </template>\n </ComposeConversation>\n <NextButton\n v-tooltip.top-end=\"$t('EDIT_CONTACT.BUTTON_LABEL')\"\n icon=\"i-ph-pencil-simple\"\n slate\n faded\n sm\n @click=\"toggleEditModal\"\n />\n <NextButton\n v-tooltip.top-end=\"$t('CONTACT_PANEL.MERGE_CONTACT')\"\n icon=\"i-ph-arrows-merge\"\n slate\n faded\n sm\n :disabled=\"uiFlags.isMerging\"\n @click=\"openMergeModal\"\n />\n <NextButton\n v-if=\"isAdmin\"\n v-tooltip.top-end=\"$t('DELETE_CONTACT.BUTTON_LABEL')\"\n icon=\"i-ph-trash\"\n slate\n faded\n sm\n ruby\n :disabled=\"uiFlags.isDeleting\"\n @click=\"toggleDeleteModal\"\n />\n </div>\n <EditContact\n v-if=\"showEditModal\"\n :show=\"showEditModal\"\n :contact=\"contact\"\n @cancel=\"toggleEditModal\"\n />\n <ContactMergeModal\n v-if=\"showMergeModal\"\n :primary-contact=\"contact\"\n :show=\"showMergeModal\"\n @close=\"closeMergeModal\"\n />\n </div>\n <woot-delete-modal\n v-if=\"showDeleteModal\"\n v-model:show=\"showDeleteModal\"\n :on-close=\"closeDelete\"\n :on-confirm=\"confirmDeletion\"\n :title=\"$t('DELETE_CONTACT.CONFIRM.TITLE')\"\n :message=\"$t('DELETE_CONTACT.CONFIRM.MESSAGE')\"\n :message-value=\"confirmDeleteMessage\"\n :confirm-text=\"$t('DELETE_CONTACT.CONFIRM.YES')\"\n :reject-text=\"$t('DELETE_CONTACT.CONFIRM.NO')\"\n />\n </div>\n</template>\n","<script>\nimport { format, parseISO } from 'date-fns';\nimport { required, url } from '@vuelidate/validators';\nimport { BUS_EVENTS } from 'shared/constants/busEvents';\nimport MultiselectDropdown from 'shared/components/ui/MultiselectDropdown.vue';\nimport HelperTextPopup from 'dashboard/components/ui/HelperTextPopup.vue';\nimport { isValidURL } from '../helper/URLHelper';\nimport { getRegexp } from 'shared/helpers/Validators';\nimport { useVuelidate } from '@vuelidate/core';\nimport { emitter } from 'shared/helpers/mitt';\n\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nconst DATE_FORMAT = 'yyyy-MM-dd';\n\nexport default {\n components: {\n MultiselectDropdown,\n HelperTextPopup,\n NextButton,\n },\n props: {\n label: { type: String, required: true },\n description: { type: String, default: '' },\n values: { type: Array, default: () => [] },\n value: { type: [String, Number, Boolean], default: '' },\n showActions: { type: Boolean, default: false },\n attributeType: { type: String, default: 'text' },\n attributeRegex: {\n type: String,\n default: null,\n },\n regexCue: { type: String, default: null },\n attributeKey: { type: String, required: true },\n contactId: { type: Number, default: null },\n },\n emits: ['update', 'delete', 'copy'],\n setup() {\n return { v$: useVuelidate() };\n },\n data() {\n return {\n isEditing: false,\n editedValue: null,\n };\n },\n computed: {\n displayValue() {\n if (this.isAttributeTypeDate) {\n return this.value\n ? new Date(this.value || new Date()).toLocaleDateString()\n : '';\n }\n if (this.isAttributeTypeCheckbox) {\n return this.value === 'false' ? false : this.value;\n }\n return this.value;\n },\n formattedValue() {\n return this.isAttributeTypeDate\n ? format(this.value ? new Date(this.value) : new Date(), DATE_FORMAT)\n : this.value;\n },\n listOptions() {\n return this.values.map((value, index) => ({\n id: index + 1,\n name: value,\n }));\n },\n selectedItem() {\n const id = this.values.indexOf(this.editedValue) + 1;\n return { id, name: this.editedValue };\n },\n isAttributeTypeCheckbox() {\n return this.attributeType === 'checkbox';\n },\n isAttributeTypeList() {\n return this.attributeType === 'list';\n },\n isAttributeTypeLink() {\n return this.attributeType === 'link';\n },\n isAttributeTypeDate() {\n return this.attributeType === 'date';\n },\n urlValue() {\n return isValidURL(this.value) ? this.value : '---';\n },\n hrefURL() {\n return isValidURL(this.value) ? this.value : '';\n },\n notAttributeTypeCheckboxAndList() {\n return !this.isAttributeTypeCheckbox && !this.isAttributeTypeList;\n },\n inputType() {\n return this.isAttributeTypeLink ? 'url' : this.attributeType;\n },\n shouldShowErrorMessage() {\n return this.v$.editedValue.$error;\n },\n errorMessage() {\n if (this.v$.editedValue.url) {\n return this.$t('CUSTOM_ATTRIBUTES.VALIDATIONS.INVALID_URL');\n }\n if (!this.v$.editedValue.regexValidation) {\n return this.regexCue\n ? this.regexCue\n : this.$t('CUSTOM_ATTRIBUTES.VALIDATIONS.INVALID_INPUT');\n }\n return this.$t('CUSTOM_ATTRIBUTES.VALIDATIONS.REQUIRED');\n },\n },\n watch: {\n value() {\n this.isEditing = false;\n this.editedValue = this.formattedValue;\n },\n contactId() {\n // Fix to solve validation not resetting when contactId changes in contact page\n this.v$.$reset();\n },\n },\n\n validations() {\n if (this.isAttributeTypeLink) {\n return {\n editedValue: { required, url },\n };\n }\n return {\n editedValue: {\n required,\n regexValidation: value => {\n return !(\n this.attributeRegex && !getRegexp(this.attributeRegex).test(value)\n );\n },\n },\n };\n },\n mounted() {\n this.editedValue = this.formattedValue;\n emitter.on(BUS_EVENTS.FOCUS_CUSTOM_ATTRIBUTE, this.onFocusAttribute);\n },\n unmounted() {\n emitter.off(BUS_EVENTS.FOCUS_CUSTOM_ATTRIBUTE, this.onFocusAttribute);\n },\n methods: {\n onFocusAttribute(focusAttributeKey) {\n if (this.attributeKey === focusAttributeKey) {\n this.onEdit();\n }\n },\n focusInput() {\n if (this.$refs.inputfield) {\n this.$refs.inputfield.focus();\n }\n },\n onClickAway() {\n this.v$.$reset();\n this.isEditing = false;\n },\n onEdit() {\n this.isEditing = true;\n this.$nextTick(() => {\n this.focusInput();\n });\n },\n onUpdateListValue(value) {\n if (value) {\n this.editedValue = value.name;\n this.onUpdate();\n }\n },\n onUpdate() {\n const updatedValue =\n this.attributeType === 'date'\n ? parseISO(this.editedValue)\n : this.editedValue;\n this.v$.$touch();\n if (this.v$.$invalid) {\n return;\n }\n this.isEditing = false;\n this.$emit('update', this.attributeKey, updatedValue);\n },\n onDelete() {\n this.isEditing = false;\n this.v$.$reset();\n this.$emit('delete', this.attributeKey);\n },\n onCopy() {\n this.$emit('copy', this.value);\n },\n },\n};\n</script>\n\n<template>\n <div class=\"px-4 py-3\">\n <div class=\"flex items-center mb-1\">\n <h4 class=\"flex items-center w-full m-0 text-sm error\">\n <div v-if=\"isAttributeTypeCheckbox\" class=\"flex items-center\">\n <input\n v-model=\"editedValue\"\n class=\"!my-0 ltr:mr-2 ltr:ml-0 rtl:mr-0 rtl:ml-2\"\n type=\"checkbox\"\n @change=\"onUpdate\"\n />\n </div>\n <div class=\"flex items-center justify-between w-full\">\n <span\n class=\"w-full inline-flex gap-1.5 items-start font-medium whitespace-nowrap text-sm mb-0\"\n :class=\"\n v$.editedValue.$error ? 'text-n-ruby-11' : 'text-n-slate-12'\n \"\n >\n {{ label }}\n <HelperTextPopup\n v-if=\"description\"\n :message=\"description\"\n class=\"mt-0.5\"\n />\n </span>\n <NextButton\n v-if=\"showActions && value\"\n v-tooltip.left=\"$t('CUSTOM_ATTRIBUTES.ACTIONS.DELETE')\"\n slate\n sm\n link\n icon=\"i-lucide-trash-2\"\n @click=\"onDelete\"\n />\n </div>\n </h4>\n </div>\n <div v-if=\"notAttributeTypeCheckboxAndList\">\n <div v-if=\"isEditing\" v-on-clickaway=\"onClickAway\">\n <div class=\"flex items-center w-full mb-2\">\n <input\n ref=\"inputfield\"\n v-model=\"editedValue\"\n :type=\"inputType\"\n class=\"!h-8 ltr:!rounded-r-none rtl:!rounded-l-none !mb-0 !text-sm\"\n autofocus=\"true\"\n :class=\"{ error: v$.editedValue.$error }\"\n @blur=\"v$.editedValue.$touch\"\n @keyup.enter=\"onUpdate\"\n />\n <div>\n <NextButton\n sm\n icon=\"i-lucide-check\"\n class=\"ltr:rounded-l-none rtl:rounded-r-none h-[34px]\"\n @click=\"onUpdate\"\n />\n </div>\n </div>\n <span\n v-if=\"shouldShowErrorMessage\"\n class=\"block w-full -mt-px text-sm font-normal text-n-ruby-11\"\n >\n {{ errorMessage }}\n </span>\n </div>\n <div\n v-show=\"!isEditing\"\n class=\"flex group\"\n :class=\"{ 'is-editable': showActions }\"\n >\n <a\n v-if=\"isAttributeTypeLink\"\n :href=\"hrefURL\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"group-hover:bg-n-slate-3 group-hover:dark:bg-n-solid-3 inline-block rounded-sm mb-0 break-all py-0.5 px-1\"\n >\n {{ urlValue }}\n </a>\n <p\n v-else\n class=\"group-hover:bg-n-slate-3 group-hover:dark:bg-n-solid-3 inline-block rounded-sm mb-0 break-all py-0.5 px-1\"\n >\n {{ displayValue || '---' }}\n </p>\n <div\n class=\"flex items-center max-w-[2rem] gap-1 ml-1 rtl:mr-1 rtl:ml-0\"\n >\n <NextButton\n v-if=\"showActions && value\"\n v-tooltip=\"$t('CUSTOM_ATTRIBUTES.ACTIONS.COPY')\"\n xs\n slate\n ghost\n icon=\"i-lucide-clipboard\"\n class=\"hidden group-hover:flex flex-shrink-0\"\n @click=\"onCopy\"\n />\n <NextButton\n v-if=\"showActions\"\n v-tooltip.right=\"$t('CUSTOM_ATTRIBUTES.ACTIONS.EDIT')\"\n xs\n slate\n ghost\n icon=\"i-lucide-pen\"\n class=\"hidden group-hover:flex flex-shrink-0\"\n @click=\"onEdit\"\n />\n </div>\n </div>\n </div>\n <div v-if=\"isAttributeTypeList\">\n <MultiselectDropdown\n :options=\"listOptions\"\n :selected-item=\"selectedItem\"\n :has-thumbnail=\"false\"\n :multiselector-placeholder=\"\n $t('CUSTOM_ATTRIBUTES.FORM.ATTRIBUTE_TYPE.LIST.PLACEHOLDER')\n \"\n :no-search-result=\"\n $t('CUSTOM_ATTRIBUTES.FORM.ATTRIBUTE_TYPE.LIST.NO_RESULT')\n \"\n :input-placeholder=\"\n $t(\n 'CUSTOM_ATTRIBUTES.FORM.ATTRIBUTE_TYPE.LIST.SEARCH_INPUT_PLACEHOLDER'\n )\n \"\n @select=\"onUpdateListValue\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n::v-deep {\n .selector-wrap {\n @apply m-0 top-1;\n\n .selector-name {\n @apply ml-0;\n }\n }\n\n .name {\n @apply ml-0;\n }\n}\n</style>\n","<script setup>\nimport { computed, onMounted, ref } from 'vue';\nimport Draggable from 'vuedraggable';\nimport { useToggle } from '@vueuse/core';\nimport { useRoute } from 'vue-router';\nimport { useStore, useStoreGetters } from 'dashboard/composables/store';\nimport { useAlert } from 'dashboard/composables';\nimport { useI18n } from 'vue-i18n';\nimport { useUISettings } from 'dashboard/composables/useUISettings';\nimport { copyTextToClipboard } from 'shared/helpers/clipboard';\nimport CustomAttribute from 'dashboard/components/CustomAttribute.vue';\n\nconst props = defineProps({\n attributeType: {\n type: String,\n default: 'conversation_attribute',\n },\n contactId: { type: Number, default: null },\n attributeFrom: {\n type: String,\n required: true,\n },\n emptyStateMessage: {\n type: String,\n default: '',\n },\n // Combine static elements with custom attributes components\n // To allow for custom ordering\n staticElements: {\n type: Array,\n default: () => [],\n },\n});\n\nconst store = useStore();\nconst getters = useStoreGetters();\nconst route = useRoute();\nconst { t } = useI18n();\nconst { uiSettings, updateUISettings } = useUISettings();\n\nconst dragging = ref(false);\n\nconst [showAllAttributes, toggleShowAllAttributes] = useToggle(false);\n\nconst currentChat = computed(() => getters.getSelectedChat.value);\nconst attributes = computed(() =>\n getters['attributes/getAttributesByModel'].value(props.attributeType)\n);\n\nconst contactIdentifier = computed(\n () =>\n currentChat.value.meta?.sender?.id ||\n route.params.contactId ||\n props.contactId\n);\n\nconst contact = computed(() =>\n getters['contacts/getContact'].value(contactIdentifier.value)\n);\n\nconst customAttributes = computed(() => {\n if (props.attributeType === 'conversation_attribute')\n return currentChat.value.custom_attributes || {};\n return contact.value.custom_attributes || {};\n});\n\nconst conversationId = computed(() => currentChat.value.id);\n\nconst toggleButtonText = computed(() =>\n !showAllAttributes.value\n ? t('CUSTOM_ATTRIBUTES.SHOW_MORE')\n : t('CUSTOM_ATTRIBUTES.SHOW_LESS')\n);\n\nconst filteredCustomAttributes = computed(() =>\n attributes.value.map(attribute => {\n // Check if the attribute key exists in customAttributes\n const hasValue = Object.hasOwnProperty.call(\n customAttributes.value,\n attribute.attribute_key\n );\n const isCheckbox = attribute.attribute_display_type === 'checkbox';\n const defaultValue = isCheckbox ? false : '';\n\n return {\n ...attribute,\n type: 'custom_attribute',\n key: attribute.attribute_key,\n // Set value from customAttributes if it exists, otherwise use default value\n value: hasValue\n ? customAttributes.value[attribute.attribute_key]\n : defaultValue,\n };\n })\n);\n\n// Order key name for UI settings\nconst orderKey = computed(\n () => `conversation_elements_order_${props.attributeFrom}`\n);\n\nconst combinedElements = computed(() => {\n // Get saved order from UI settings\n const savedOrder = uiSettings.value[orderKey.value] ?? [];\n const allElements = [\n ...props.staticElements,\n ...filteredCustomAttributes.value,\n ];\n\n // If no saved order exists, return in default order\n if (!savedOrder.length) return allElements;\n\n return allElements.sort((a, b) => {\n // Find positions of elements in saved order\n const aPosition = savedOrder.indexOf(a.key);\n const bPosition = savedOrder.indexOf(b.key);\n\n // Handle cases where elements are not in saved order:\n // - New elements (not in saved order) go to the end\n // - If both elements are new, maintain their relative order\n if (aPosition === -1 && bPosition === -1) return 0;\n if (aPosition === -1) return 1;\n if (bPosition === -1) return -1;\n\n return aPosition - bPosition;\n });\n});\n\nconst displayedElements = computed(() => {\n if (showAllAttributes.value || combinedElements.value.length <= 5) {\n return combinedElements.value;\n }\n\n // Show first 5 elements in the order they appear\n return combinedElements.value.slice(0, 5);\n});\n\n// Reorder elements with static elements position preserved\n// There is case where all the static elements will not be available (API, Email channels, etc).\n// In that case, we need to preserve the order of the static elements and\n// insert them in the correct position.\nconst reorderElementsWithStaticPreservation = (\n savedOrder = [],\n currentOrder = []\n) => {\n const finalOrder = [...currentOrder];\n const visibleKeys = new Set(currentOrder);\n\n // Process hidden static elements from saved order\n savedOrder\n // Find static elements that aren't currently visible\n .filter(key => key.startsWith('static-') && !visibleKeys.has(key))\n .forEach(staticKey => {\n // Find next visible element after this static element in saved order\n const nextVisible = savedOrder\n .slice(savedOrder.indexOf(staticKey))\n .find(key => visibleKeys.has(key));\n\n // If next visible element found, insert before it; otherwise add to end\n if (nextVisible) {\n finalOrder.splice(finalOrder.indexOf(nextVisible), 0, staticKey);\n } else {\n finalOrder.push(staticKey);\n }\n });\n\n return finalOrder;\n};\n\nconst onDragEnd = () => {\n dragging.value = false;\n // Get the saved and current saved order\n const savedOrder = uiSettings.value[orderKey.value] ?? [];\n const currentOrder = combinedElements.value.map(({ key }) => key);\n\n const finalOrder = reorderElementsWithStaticPreservation(\n savedOrder,\n currentOrder\n );\n\n updateUISettings({\n [orderKey.value]: finalOrder,\n });\n};\n\nconst initializeSettings = () => {\n const currentOrder = uiSettings.value[orderKey.value];\n if (!currentOrder) {\n const initialOrder = combinedElements.value.map(element => element.key);\n updateUISettings({\n [orderKey.value]: initialOrder,\n });\n }\n\n showAllAttributes.value =\n uiSettings.value[`show_all_attributes_${props.attributeFrom}`] || false;\n};\n\nconst onClickToggle = () => {\n toggleShowAllAttributes();\n updateUISettings({\n [`show_all_attributes_${props.attributeFrom}`]: showAllAttributes.value,\n });\n};\n\nconst onUpdate = async (key, value) => {\n const updatedAttributes = { ...customAttributes.value, [key]: value };\n try {\n if (props.attributeType === 'conversation_attribute') {\n await store.dispatch('updateCustomAttributes', {\n conversationId: conversationId.value,\n customAttributes: updatedAttributes,\n });\n } else {\n store.dispatch('contacts/update', {\n id: props.contactId,\n custom_attributes: updatedAttributes,\n });\n }\n useAlert(t('CUSTOM_ATTRIBUTES.FORM.UPDATE.SUCCESS'));\n } catch (error) {\n const errorMessage =\n error?.response?.message || t('CUSTOM_ATTRIBUTES.FORM.UPDATE.ERROR');\n useAlert(errorMessage);\n }\n};\n\nconst onDelete = async key => {\n try {\n const { [key]: remove, ...updatedAttributes } = customAttributes.value;\n if (props.attributeType === 'conversation_attribute') {\n await store.dispatch('updateCustomAttributes', {\n conversationId: conversationId.value,\n customAttributes: updatedAttributes,\n });\n } else {\n store.dispatch('contacts/deleteCustomAttributes', {\n id: props.contactId,\n customAttributes: [key],\n });\n }\n useAlert(t('CUSTOM_ATTRIBUTES.FORM.DELETE.SUCCESS'));\n } catch (error) {\n const errorMessage =\n error?.response?.message || t('CUSTOM_ATTRIBUTES.FORM.DELETE.ERROR');\n useAlert(errorMessage);\n }\n};\n\nconst onCopy = async attributeValue => {\n await copyTextToClipboard(attributeValue);\n useAlert(t('CUSTOM_ATTRIBUTES.COPY_SUCCESSFUL'));\n};\n\nonMounted(() => {\n initializeSettings();\n});\n\nconst evenClass = [\n '[&>*:nth-child(odd)]:!bg-n-background [&>*:nth-child(even)]:!bg-n-slate-2',\n 'dark:[&>*:nth-child(odd)]:!bg-n-background dark:[&>*:nth-child(even)]:!bg-n-solid-1',\n];\n</script>\n\n<template>\n <div class=\"conversation--details\">\n <Draggable\n :list=\"displayedElements\"\n :disabled=\"!showAllAttributes\"\n animation=\"200\"\n ghost-class=\"ghost\"\n handle=\".drag-handle\"\n item-key=\"key\"\n class=\"last:rounded-b-lg\"\n :class=\"evenClass\"\n @start=\"dragging = true\"\n @end=\"onDragEnd\"\n >\n <template #item=\"{ element }\">\n <div\n class=\"drag-handle relative border-b border-n-weak/50 dark:border-n-weak/90\"\n :class=\"{\n 'cursor-grab': showAllAttributes,\n 'last:border-transparent dark:last:border-transparent':\n combinedElements.length <= 5,\n }\"\n >\n <template v-if=\"element.type === 'static_attribute'\">\n <slot name=\"staticItem\" :element=\"element\" />\n </template>\n\n <template v-else>\n <CustomAttribute\n :key=\"element.id\"\n :attribute-key=\"element.attribute_key\"\n :attribute-type=\"element.attribute_display_type\"\n :values=\"element.attribute_values\"\n :label=\"element.attribute_display_name\"\n :description=\"element.attribute_description\"\n :value=\"element.value\"\n show-actions\n :attribute-regex=\"element.regex_pattern\"\n :regex-cue=\"element.regex_cue\"\n :contact-id=\"contactId\"\n @update=\"onUpdate\"\n @delete=\"onDelete\"\n @copy=\"onCopy\"\n />\n </template>\n </div>\n </template>\n </Draggable>\n\n <p\n v-if=\"!displayedElements.length && emptyStateMessage\"\n class=\"p-3 text-center\"\n >\n {{ emptyStateMessage }}\n </p>\n <!-- Show more and show less buttons show it if the combinedElements length is greater than 5 -->\n <div v-if=\"combinedElements.length > 5\" class=\"flex px-2 py-2\">\n <woot-button\n size=\"small\"\n :icon=\"showAllAttributes ? 'chevron-up' : 'chevron-down'\"\n variant=\"clear\"\n color-scheme=\"primary\"\n class=\"!px-2 hover:!bg-transparent dark:hover:!bg-transparent\"\n @click=\"onClickToggle\"\n >\n {{ toggleButtonText }}\n </woot-button>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.ghost {\n @apply opacity-50 bg-n-slate-3 dark:bg-n-slate-9;\n}\n</style>\n","<script setup>\nimport { computed } from 'vue';\nimport { getLanguageName } from 'dashboard/components/widgets/conversation/advancedFilterItems/languages';\nimport ContactDetailsItem from './ContactDetailsItem.vue';\nimport CustomAttributes from './customAttributes/CustomAttributes.vue';\n\nconst props = defineProps({\n conversationAttributes: {\n type: Object,\n default: () => ({}),\n },\n contactAttributes: {\n type: Object,\n default: () => ({}),\n },\n});\n\nconst referer = computed(() => props.conversationAttributes.referer);\nconst initiatedAt = computed(\n () => props.conversationAttributes.initiated_at?.timestamp\n);\n\nconst browserInfo = computed(() => props.conversationAttributes.browser);\n\nconst browserName = computed(() => {\n if (!browserInfo.value) return '';\n const { browser_name: name = '', browser_version: version = '' } =\n browserInfo.value;\n return `${name} ${version}`;\n});\n\nconst browserLanguage = computed(() =>\n getLanguageName(props.conversationAttributes.browser_language)\n);\n\nconst platformName = computed(() => {\n if (!browserInfo.value) return '';\n const { platform_name: name = '', platform_version: version = '' } =\n browserInfo.value;\n return `${name} ${version}`;\n});\n\nconst createdAtIp = computed(() => props.contactAttributes.created_at_ip);\n\nconst staticElements = computed(() =>\n [\n {\n content: initiatedAt,\n title: 'CONTACT_PANEL.INITIATED_AT',\n key: 'static-initiated-at',\n type: 'static_attribute',\n },\n {\n content: browserLanguage,\n title: 'CONTACT_PANEL.BROWSER_LANGUAGE',\n key: 'static-browser-language',\n type: 'static_attribute',\n },\n {\n content: referer,\n title: 'CONTACT_PANEL.INITIATED_FROM',\n key: 'static-referer',\n type: 'static_attribute',\n },\n {\n content: browserName,\n title: 'CONTACT_PANEL.BROWSER',\n key: 'static-browser',\n type: 'static_attribute',\n },\n {\n content: platformName,\n title: 'CONTACT_PANEL.OS',\n key: 'static-platform',\n type: 'static_attribute',\n },\n {\n content: createdAtIp,\n title: 'CONTACT_PANEL.IP_ADDRESS',\n key: 'static-ip-address',\n type: 'static_attribute',\n },\n ].filter(attribute => !!attribute.content.value)\n);\n</script>\n\n<template>\n <div class=\"conversation--details\">\n <CustomAttributes\n :static-elements=\"staticElements\"\n attribute-class=\"conversation--attribute\"\n attribute-from=\"conversation_panel\"\n attribute-type=\"conversation_attribute\"\n >\n <template #staticItem=\"{ element }\">\n <ContactDetailsItem\n :key=\"element.title\"\n :title=\"$t(element.title)\"\n :value=\"element.content.value\"\n >\n <a\n v-if=\"element.key === 'static-referer'\"\n :href=\"element.content.value\"\n rel=\"noopener noreferrer nofollow\"\n target=\"_blank\"\n class=\"text-n-brand\"\n >\n {{ element.content.value }}\n </a>\n </ContactDetailsItem>\n </template>\n </CustomAttributes>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useMapGetter } from 'dashboard/composables/store.js';\nimport {\n resolveActionName,\n resolveTeamIds,\n resolveLabels,\n resolveAgents,\n} from 'dashboard/routes/dashboard/settings/macros/macroHelper';\n\nconst props = defineProps({\n macro: {\n type: Object,\n required: true,\n },\n});\n\nconst labels = useMapGetter('labels/getLabels');\nconst teams = useMapGetter('teams/getTeams');\nconst agents = useMapGetter('agents/getAgents');\n\nconst getActionValue = (key, params) => {\n const actionsMap = {\n assign_team: resolveTeamIds(teams.value, params),\n add_label: resolveLabels(labels.value, params),\n remove_label: resolveLabels(labels.value, params),\n assign_agent: resolveAgents(agents.value, params),\n mute_conversation: null,\n snooze_conversation: null,\n resolve_conversation: null,\n remove_assigned_team: null,\n send_webhook_event: params[0],\n send_message: params[0],\n send_email_transcript: params[0],\n add_private_note: params[0],\n };\n return actionsMap[key] || '';\n};\n\nconst resolvedMacro = computed(() => {\n return props.macro.actions.map(action => ({\n actionName: resolveActionName(action.action_name),\n actionValue: getActionValue(action.action_name, action.action_params),\n }));\n});\n</script>\n\n<template>\n <div\n class=\"macro-preview absolute border border-n-weak max-h-[22.5rem] z-50 w-64 rounded-md bg-n-alpha-3 backdrop-blur-[100px] shadow-lg bottom-8 right-8 overflow-y-auto p-4 text-left rtl:text-right\"\n >\n <h6 class=\"mb-4 text-sm text-n-slate-12\">\n {{ macro.name }}\n </h6>\n <div\n v-for=\"(action, i) in resolvedMacro\"\n :key=\"i\"\n class=\"relative pl-4 macro-block\"\n >\n <div\n v-if=\"i !== macro.actions.length - 1\"\n class=\"top-[0.390625rem] absolute -bottom-1 left-0 w-px bg-slate-75 dark:bg-slate-600\"\n />\n <div\n class=\"absolute -left-[0.21875rem] top-[0.2734375rem] w-2 h-2 rounded-full bg-n-solid-1 border-2 border-solid border-n-weak dark:border-slate-600\"\n />\n <p class=\"mb-1 text-xs text-n-slate-11\">\n {{ action.actionName }}\n </p>\n <p class=\"text-n-slate-12 text-sm\">{{ action.actionValue }}</p>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.macro-preview {\n .macro-block {\n &:not(:last-child) {\n @apply pb-2;\n }\n }\n}\n</style>\n","<script setup>\nimport { ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useAlert } from 'dashboard/composables';\nimport { useStore } from 'dashboard/composables/store';\nimport { CONVERSATION_EVENTS } from '../../../../helper/AnalyticsHelper/events';\nimport { useTrack } from 'dashboard/composables';\n\nimport NextButton from 'dashboard/components-next/button/Button.vue';\nimport MacroPreview from './MacroPreview.vue';\n\nconst props = defineProps({\n macro: {\n type: Object,\n required: true,\n },\n conversationId: {\n type: [Number, String],\n required: true,\n },\n});\n\nconst store = useStore();\nconst { t } = useI18n();\n\nconst isExecuting = ref(false);\nconst showPreview = ref(false);\n\nconst executeMacro = async macro => {\n try {\n isExecuting.value = true;\n await store.dispatch('macros/execute', {\n macroId: macro.id,\n conversationIds: [props.conversationId],\n });\n useTrack(CONVERSATION_EVENTS.EXECUTED_A_MACRO);\n useAlert(t('MACROS.EXECUTE.EXECUTED_SUCCESSFULLY'));\n } catch (error) {\n useAlert(t('MACROS.ERROR'));\n } finally {\n isExecuting.value = false;\n }\n};\n\nconst toggleMacroPreview = () => {\n showPreview.value = !showPreview.value;\n};\n\nconst closeMacroPreview = () => {\n showPreview.value = false;\n};\n</script>\n\n<template>\n <div\n class=\"relative flex items-center justify-between leading-4 rounded-md button secondary clear\"\n >\n <span class=\"overflow-hidden whitespace-nowrap text-ellipsis\">\n {{ macro.name }}\n </span>\n <div class=\"flex items-center gap-1 justify-end\">\n <NextButton\n v-tooltip.left-start=\"$t('MACROS.EXECUTE.PREVIEW')\"\n icon=\"i-lucide-info\"\n slate\n faded\n xs\n @click=\"toggleMacroPreview\"\n />\n <NextButton\n v-tooltip.left-start=\"$t('MACROS.EXECUTE.BUTTON_TOOLTIP')\"\n icon=\"i-lucide-play\"\n slate\n faded\n xs\n :is-loading=\"isExecuting\"\n @click=\"executeMacro(macro)\"\n />\n </div>\n <transition name=\"menu-slide\">\n <MacroPreview\n v-if=\"showPreview\"\n v-on-clickaway=\"closeMacroPreview\"\n :macro=\"macro\"\n />\n </transition>\n </div>\n</template>\n","<script setup>\nimport { computed, onMounted, ref } from 'vue';\nimport { useStore, useMapGetter } from 'dashboard/composables/store';\nimport { useAccount } from 'dashboard/composables/useAccount';\nimport { useUISettings } from 'dashboard/composables/useUISettings';\n\nimport Draggable from 'vuedraggable';\nimport Spinner from 'dashboard/components-next/spinner/Spinner.vue';\nimport MacroItem from './MacroItem.vue';\n\ndefineProps({\n conversationId: {\n type: [Number, String],\n required: true,\n },\n});\n\nconst store = useStore();\nconst { accountScopedUrl } = useAccount();\nconst { uiSettings, updateUISettings } = useUISettings();\n\nconst dragging = ref(false);\n\nconst macros = useMapGetter('macros/getMacros');\nconst uiFlags = useMapGetter('macros/getUIFlags');\n\nconst MACROS_ORDER_KEY = 'macros_display_order';\n\nconst orderedMacros = computed({\n get: () => {\n // Get saved order array and current macros\n const savedOrder = uiSettings.value?.[MACROS_ORDER_KEY] ?? [];\n const currentMacros = macros.value ?? [];\n\n // Return unmodified macros if not present or macro is not available\n if (!savedOrder.length || !currentMacros.length) {\n return currentMacros;\n }\n\n // Create a Map of id -> position for faster lookups\n const orderMap = new Map(savedOrder.map((id, index) => [id, index]));\n\n return [...currentMacros].sort((a, b) => {\n // Use Infinity for items not in saved order (pushes them to end)\n const aPos = orderMap.get(a.id) ?? Infinity;\n const bPos = orderMap.get(b.id) ?? Infinity;\n return aPos - bPos;\n });\n },\n set: newOrder => {\n // Update settings with array of ids from new order\n updateUISettings({\n [MACROS_ORDER_KEY]: newOrder.map(({ id }) => id),\n });\n },\n});\n\nconst onDragEnd = () => {\n dragging.value = false;\n};\n\nonMounted(() => {\n store.dispatch('macros/get');\n});\n</script>\n\n<template>\n <div>\n <div v-if=\"!uiFlags.isFetching && !macros.length\" class=\"p-3\">\n <p class=\"flex flex-col items-center justify-center h-full\">\n {{ $t('MACROS.LIST.404') }}\n </p>\n <router-link :to=\"accountScopedUrl('settings/macros')\">\n <woot-button variant=\"smooth\" icon=\"add\" size=\"tiny\" class=\"mt-1\">\n {{ $t('MACROS.HEADER_BTN_TXT') }}\n </woot-button>\n </router-link>\n </div>\n <div\n v-if=\"uiFlags.isFetching\"\n class=\"flex items-center gap-2 justify-center p-6 text-n-slate-12\"\n >\n <span class=\"text-sm\">{{ $t('MACROS.LOADING') }}</span>\n <Spinner class=\"size-5\" />\n </div>\n <Draggable\n v-if=\"!uiFlags.isFetching && macros.length\"\n v-model=\"orderedMacros\"\n class=\"p-1\"\n animation=\"200\"\n ghost-class=\"ghost\"\n handle=\".drag-handle\"\n item-key=\"id\"\n @start=\"dragging = true\"\n @end=\"onDragEnd\"\n >\n <template #item=\"{ element }\">\n <MacroItem\n :key=\"element.id\"\n :macro=\"element\"\n :conversation-id=\"conversationId\"\n class=\"drag-handle cursor-grab\"\n />\n </template>\n </Draggable>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.ghost {\n @apply opacity-50 bg-n-slate-3 dark:bg-n-slate-9;\n}\n</style>\n","/* global axios */\n\nimport ApiClient from '../ApiClient';\n\nclass ShopifyAPI extends ApiClient {\n constructor() {\n super('integrations/shopify', { accountScoped: true });\n }\n\n getOrders(contactId) {\n return axios.get(`${this.url}/orders`, {\n params: { contact_id: contactId },\n });\n }\n}\n\nexport default new ShopifyAPI();\n","<script setup>\nimport { computed } from 'vue';\nimport { format } from 'date-fns';\nimport { useI18n } from 'vue-i18n';\n\nconst props = defineProps({\n order: {\n type: Object,\n required: true,\n },\n});\n\nconst { t } = useI18n();\n\nconst formatDate = dateString => {\n return format(new Date(dateString), 'MMM d, yyyy');\n};\n\nconst formatCurrency = (amount, currency) => {\n return new Intl.NumberFormat('en', {\n style: 'currency',\n currency: currency || 'USD',\n }).format(amount);\n};\n\nconst getStatusClass = status => {\n const classes = {\n paid: 'bg-n-teal-5 text-n-teal-12',\n };\n return classes[status] || 'bg-slate-50 text-slate-700';\n};\n\nconst getStatusI18nKey = (type, status = '') => {\n return `CONVERSATION_SIDEBAR.SHOPIFY.${type.toUpperCase()}_STATUS.${status.toUpperCase()}`;\n};\n\nconst fulfillmentStatus = computed(() => {\n const { fulfillment_status: status } = props.order;\n if (!status) {\n return '';\n }\n return t(getStatusI18nKey('FULFILLMENT', status));\n});\n\nconst financialStatus = computed(() => {\n const { financial_status: status } = props.order;\n if (!status) {\n return '';\n }\n return t(getStatusI18nKey('FINANCIAL', status));\n});\n\nconst getFulfillmentClass = status => {\n const classes = {\n fulfilled: 'text-green-600',\n partial: 'text-yellow-600',\n unfulfilled: 'text-red-600',\n };\n return classes[status] || 'text-slate-600';\n};\n</script>\n\n<template>\n <div\n class=\"py-3 border-b border-n-weak last:border-b-0 flex flex-col gap-1.5\"\n >\n <div class=\"flex justify-between items-center\">\n <div class=\"font-medium flex\">\n <a\n :href=\"order.admin_url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"hover:underline text-n-slate-12 cursor-pointer truncate\"\n >\n {{ $t('CONVERSATION_SIDEBAR.SHOPIFY.ORDER_ID', { id: order.id }) }}\n <i class=\"i-lucide-external-link pl-5\" />\n </a>\n </div>\n <div\n :class=\"getStatusClass(order.financial_status)\"\n class=\"text-xs px-2 py-1 rounded capitalize truncate\"\n :title=\"financialStatus\"\n >\n {{ financialStatus }}\n </div>\n </div>\n <div class=\"text-sm text-n-slate-12\">\n <span class=\"text-n-slate-11 border-r border-n-weak pr-2\">\n {{ formatDate(order.created_at) }}\n </span>\n <span class=\"text-n-slate-11 pl-2\">\n {{ formatCurrency(order.total_price, order.currency) }}\n </span>\n </div>\n <div v-if=\"fulfillmentStatus\">\n <span\n :class=\"getFulfillmentClass(order.fulfillment_status)\"\n class=\"capitalize font-medium\"\n :title=\"fulfillmentStatus\"\n >\n {{ fulfillmentStatus }}\n </span>\n </div>\n </div>\n</template>\n","<script setup>\nimport { ref, watch, computed } from 'vue';\nimport { useFunctionGetter } from 'dashboard/composables/store';\nimport Spinner from 'dashboard/components-next/spinner/Spinner.vue';\nimport ShopifyAPI from '../../../api/integrations/shopify';\nimport ShopifyOrderItem from './ShopifyOrderItem.vue';\n\nconst props = defineProps({\n contactId: {\n type: [Number, String],\n required: true,\n },\n});\n\nconst contact = useFunctionGetter('contacts/getContact', props.contactId);\n\nconst hasSearchableInfo = computed(\n () => !!contact.value?.email || !!contact.value?.phone_number\n);\n\nconst orders = ref([]);\nconst loading = ref(true);\nconst error = ref('');\n\nconst fetchOrders = async () => {\n try {\n loading.value = true;\n const response = await ShopifyAPI.getOrders(props.contactId);\n orders.value = response.data.orders;\n } catch (e) {\n error.value =\n e.response?.data?.error || 'CONVERSATION_SIDEBAR.SHOPIFY.ERROR';\n } finally {\n loading.value = false;\n }\n};\n\nwatch(\n () => props.contactId,\n () => {\n if (hasSearchableInfo.value) {\n fetchOrders();\n }\n },\n { immediate: true }\n);\n</script>\n\n<template>\n <div class=\"px-4 py-2 text-n-slate-12\">\n <div v-if=\"!hasSearchableInfo\" class=\"text-center text-n-slate-12\">\n {{ $t('CONVERSATION_SIDEBAR.SHOPIFY.NO_SHOPIFY_ORDERS') }}\n </div>\n <div v-else-if=\"loading\" class=\"flex justify-center items-center p-4\">\n <Spinner size=\"32\" class=\"text-n-brand\" />\n </div>\n <div v-else-if=\"error\" class=\"text-center text-n-ruby-12\">\n {{ error }}\n </div>\n <div v-else-if=\"!orders.length\" class=\"text-center text-n-slate-12\">\n {{ $t('CONVERSATION_SIDEBAR.SHOPIFY.NO_SHOPIFY_ORDERS') }}\n </div>\n <div v-else>\n <ShopifyOrderItem\n v-for=\"order in orders\"\n :key=\"order.id\"\n :order=\"order\"\n />\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed, watch, onMounted, ref } from 'vue';\nimport {\n useMapGetter,\n useFunctionGetter,\n useStore,\n} from 'dashboard/composables/store';\nimport { useUISettings } from 'dashboard/composables/useUISettings';\n\nimport AccordionItem from 'dashboard/components/Accordion/AccordionItem.vue';\nimport ContactConversations from './ContactConversations.vue';\nimport ConversationAction from './ConversationAction.vue';\nimport ConversationParticipant from './ConversationParticipant.vue';\n\nimport ContactInfo from './contact/ContactInfo.vue';\nimport ConversationInfo from './ConversationInfo.vue';\nimport CustomAttributes from './customAttributes/CustomAttributes.vue';\nimport Draggable from 'vuedraggable';\nimport MacrosList from './Macros/List.vue';\nimport ShopifyOrdersList from '../../../components/widgets/conversation/ShopifyOrdersList.vue';\n\nconst props = defineProps({\n conversationId: {\n type: [Number, String],\n required: true,\n },\n inboxId: {\n type: Number,\n default: undefined,\n },\n onToggle: {\n type: Function,\n default: () => {},\n },\n});\n\nconst {\n updateUISettings,\n isContactSidebarItemOpen,\n conversationSidebarItemsOrder,\n toggleSidebarUIState,\n} = useUISettings();\n\nconst dragging = ref(false);\nconst conversationSidebarItems = ref([]);\nconst shopifyIntegration = useFunctionGetter(\n 'integrations/getIntegration',\n 'shopify'\n);\n\nconst isShopifyFeatureEnabled = computed(\n () => shopifyIntegration.value.enabled\n);\n\nconst store = useStore();\nconst currentChat = useMapGetter('getSelectedChat');\nconst conversationId = computed(() => props.conversationId);\nconst conversationMetadataGetter = useMapGetter(\n 'conversationMetadata/getConversationMetadata'\n);\nconst currentConversationMetaData = computed(() =>\n conversationMetadataGetter.value(conversationId.value)\n);\nconst conversationAdditionalAttributes = computed(\n () => currentConversationMetaData.value.additional_attributes || {}\n);\n\nconst channelType = computed(() => currentChat.value.meta?.channel);\n\nconst contactGetter = useMapGetter('contacts/getContact');\nconst contactId = computed(() => currentChat.value.meta?.sender?.id);\nconst contact = computed(() => contactGetter.value(contactId.value));\nconst contactAdditionalAttributes = computed(\n () => contact.value.additional_attributes || {}\n);\n\nconst getContactDetails = () => {\n if (contactId.value) {\n store.dispatch('contacts/show', { id: contactId.value });\n }\n};\n\nwatch(conversationId, (newConversationId, prevConversationId) => {\n if (newConversationId && newConversationId !== prevConversationId) {\n getContactDetails();\n }\n});\n\nwatch(contactId, getContactDetails);\n\nconst onPanelToggle = props.onToggle;\n\nconst onDragEnd = () => {\n dragging.value = false;\n updateUISettings({\n conversation_sidebar_items_order: conversationSidebarItems.value,\n });\n};\n\nonMounted(() => {\n conversationSidebarItems.value = conversationSidebarItemsOrder.value;\n getContactDetails();\n store.dispatch('attributes/get', 0);\n});\n</script>\n\n<template>\n <div class=\"w-full\">\n <ContactInfo\n :contact=\"contact\"\n :channel-type=\"channelType\"\n @toggle-panel=\"onPanelToggle\"\n />\n <div class=\"list-group pb-8\">\n <Draggable\n :list=\"conversationSidebarItems\"\n animation=\"200\"\n ghost-class=\"ghost\"\n handle=\".drag-handle\"\n item-key=\"name\"\n class=\"flex flex-col gap-3\"\n @start=\"dragging = true\"\n @end=\"onDragEnd\"\n >\n <template #item=\"{ element }\">\n <div :key=\"element.name\" class=\"px-2\">\n <div\n v-if=\"element.name === 'conversation_actions'\"\n class=\"conversation--actions\"\n >\n <AccordionItem\n :title=\"\n $t('CONVERSATION_SIDEBAR.ACCORDION.CONVERSATION_ACTIONS')\n \"\n :is-open=\"isContactSidebarItemOpen('is_conv_actions_open')\"\n @toggle=\"\n value => toggleSidebarUIState('is_conv_actions_open', value)\n \"\n >\n <ConversationAction\n :conversation-id=\"conversationId\"\n :inbox-id=\"inboxId\"\n />\n </AccordionItem>\n </div>\n <div\n v-else-if=\"element.name === 'conversation_participants'\"\n class=\"conversation--actions\"\n >\n <AccordionItem\n :title=\"$t('CONVERSATION_PARTICIPANTS.SIDEBAR_TITLE')\"\n :is-open=\"isContactSidebarItemOpen('is_conv_participants_open')\"\n @toggle=\"\n value =>\n toggleSidebarUIState('is_conv_participants_open', value)\n \"\n >\n <ConversationParticipant\n :conversation-id=\"conversationId\"\n :inbox-id=\"inboxId\"\n />\n </AccordionItem>\n </div>\n <div v-else-if=\"element.name === 'conversation_info'\">\n <AccordionItem\n :title=\"$t('CONVERSATION_SIDEBAR.ACCORDION.CONVERSATION_INFO')\"\n :is-open=\"isContactSidebarItemOpen('is_conv_details_open')\"\n compact\n @toggle=\"\n value => toggleSidebarUIState('is_conv_details_open', value)\n \"\n >\n <ConversationInfo\n :conversation-attributes=\"conversationAdditionalAttributes\"\n :contact-attributes=\"contactAdditionalAttributes\"\n />\n </AccordionItem>\n </div>\n <div v-else-if=\"element.name === 'contact_attributes'\">\n <AccordionItem\n :title=\"$t('CONVERSATION_SIDEBAR.ACCORDION.CONTACT_ATTRIBUTES')\"\n :is-open=\"\n isContactSidebarItemOpen('is_contact_attributes_open')\n \"\n compact\n @toggle=\"\n value =>\n toggleSidebarUIState('is_contact_attributes_open', value)\n \"\n >\n <CustomAttributes\n attribute-type=\"contact_attribute\"\n attribute-from=\"conversation_contact_panel\"\n :contact-id=\"contact.id\"\n :empty-state-message=\"\n $t('CONVERSATION_CUSTOM_ATTRIBUTES.NO_RECORDS_FOUND')\n \"\n />\n </AccordionItem>\n </div>\n <div v-else-if=\"element.name === 'previous_conversation'\">\n <AccordionItem\n v-if=\"contact.id\"\n :title=\"\n $t('CONVERSATION_SIDEBAR.ACCORDION.PREVIOUS_CONVERSATION')\n \"\n :is-open=\"isContactSidebarItemOpen('is_previous_conv_open')\"\n compact\n @toggle=\"\n value => toggleSidebarUIState('is_previous_conv_open', value)\n \"\n >\n <ContactConversations\n :contact-id=\"contact.id\"\n :conversation-id=\"conversationId\"\n />\n </AccordionItem>\n </div>\n <woot-feature-toggle\n v-else-if=\"element.name === 'macros'\"\n feature-key=\"macros\"\n >\n <AccordionItem\n :title=\"$t('CONVERSATION_SIDEBAR.ACCORDION.MACROS')\"\n :is-open=\"isContactSidebarItemOpen('is_macro_open')\"\n compact\n @toggle=\"value => toggleSidebarUIState('is_macro_open', value)\"\n >\n <MacrosList :conversation-id=\"conversationId\" />\n </AccordionItem>\n </woot-feature-toggle>\n <div\n v-else-if=\"\n element.name === 'shopify_orders' && isShopifyFeatureEnabled\n \"\n >\n <AccordionItem\n :title=\"$t('CONVERSATION_SIDEBAR.ACCORDION.SHOPIFY_ORDERS')\"\n :is-open=\"isContactSidebarItemOpen('is_shopify_orders_open')\"\n compact\n @toggle=\"\n value => toggleSidebarUIState('is_shopify_orders_open', value)\n \"\n >\n <ShopifyOrdersList :contact-id=\"contactId\" />\n </AccordionItem>\n </div>\n </div>\n </template>\n </Draggable>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n::v-deep {\n .contact--profile {\n @apply pb-3 border-b border-solid border-slate-75 dark:border-slate-700;\n }\n\n .conversation--actions .multiselect-wrap--small {\n .multiselect {\n @apply box-border pl-6;\n }\n\n .multiselect__element {\n span {\n @apply w-full;\n }\n }\n }\n}\n</style>\n","<script setup>\nimport { computed } from 'vue';\nconst props = defineProps({\n initialActiveTab: {\n type: Number,\n default: 0,\n },\n tabs: {\n type: Array,\n required: true,\n validator: value => {\n return value.every(\n tab =>\n typeof tab.label === 'string' &&\n (tab.count ? typeof tab.count === 'number' : true)\n );\n },\n },\n});\n\nconst emit = defineEmits(['tabChanged']);\n\nconst activeTab = computed(() => props.initialActiveTab);\n\nconst selectTab = index => {\n emit('tabChanged', props.tabs[index]);\n};\n\nconst showDivider = index => {\n return (\n // Show dividers after the active tab, but not after the last tab\n (index > activeTab.value && index < props.tabs.length - 1) ||\n // Show dividers before the active tab, but not immediately before it and not before the first tab\n (index < activeTab.value - 1 && index > -1)\n );\n};\n</script>\n\n<template>\n <div class=\"flex items-center h-8 rounded-lg bg-n-alpha-1 w-fit\">\n <template v-for=\"(tab, index) in tabs\" :key=\"index\">\n <button\n class=\"relative px-4 truncate py-1.5 text-sm border-0 outline-1 outline rounded-lg transition-colors duration-300 ease-in-out hover:text-n-brand\"\n :class=\"[\n activeTab === index\n ? 'text-n-blue-text bg-n-solid-active outline-n-container dark:outline-transparent'\n : 'text-n-slate-10 outline-transparent h-8',\n ]\"\n @click=\"selectTab(index)\"\n >\n {{ tab.label }} {{ tab.count ? `(${tab.count})` : '' }}\n </button>\n <div\n class=\"w-px h-3.5 rounded my-auto transition-colors duration-300 ease-in-out\"\n :class=\"\n showDivider(index)\n ? 'bg-n-strong'\n : 'bg-transparent dark:bg-transparent'\n \"\n />\n </template>\n </div>\n</template>\n","<script setup>\nimport { computed, ref } from 'vue';\nimport CopilotContainer from '../../copilot/CopilotContainer.vue';\nimport ContactPanel from 'dashboard/routes/dashboard/conversation/ContactPanel.vue';\nimport TabBar from 'dashboard/components-next/tabbar/TabBar.vue';\nimport { useI18n } from 'vue-i18n';\nimport { useMapGetter } from 'dashboard/composables/store';\nimport { FEATURE_FLAGS } from '../../../featureFlags';\n\nconst props = defineProps({\n currentChat: {\n required: true,\n type: Object,\n },\n});\n\nconst emit = defineEmits(['toggleContactPanel']);\n\nconst { t } = useI18n();\n\nconst channelType = computed(() => props.currentChat?.meta?.channel || '');\n\nconst CONTACT_TABS_OPTIONS = [\n { key: 'CONTACT', value: 'contact' },\n { key: 'COPILOT', value: 'copilot' },\n];\n\nconst tabs = computed(() => {\n return CONTACT_TABS_OPTIONS.map(tab => ({\n label: t(`CONVERSATION.SIDEBAR.${tab.key}`),\n value: tab.value,\n }));\n});\nconst activeTab = ref(0);\nconst toggleContactPanel = () => {\n emit('toggleContactPanel');\n};\n\nconst handleTabChange = selectedTab => {\n activeTab.value = tabs.value.findIndex(\n tabItem => tabItem.value === selectedTab.value\n );\n};\nconst currentAccountId = useMapGetter('getCurrentAccountId');\nconst isFeatureEnabledonAccount = useMapGetter(\n 'accounts/isFeatureEnabledonAccount'\n);\n\nconst showCopilotTab = computed(() =>\n isFeatureEnabledonAccount.value(currentAccountId.value, FEATURE_FLAGS.CAPTAIN)\n);\n</script>\n\n<template>\n <div\n class=\"ltr:border-l rtl:border-r border-n-weak h-full overflow-hidden z-10 w-80 min-w-80 2xl:min-w-96 2xl:w-96 flex flex-col bg-n-background\"\n >\n <div v-if=\"showCopilotTab\" class=\"p-2\">\n <TabBar\n :tabs=\"tabs\"\n :initial-active-tab=\"activeTab\"\n class=\"w-full [&>button]:w-full\"\n @tab-changed=\"handleTabChange\"\n />\n </div>\n <div class=\"flex flex-1 overflow-auto\">\n <ContactPanel\n v-if=\"!activeTab\"\n :conversation-id=\"currentChat.id\"\n :inbox-id=\"currentChat.inbox_id\"\n :on-toggle=\"toggleContactPanel\"\n />\n <CopilotContainer\n v-else-if=\"activeTab === 1 && showCopilotTab\"\n :key=\"currentChat.id\"\n :conversation-inbox-type=\"channelType\"\n :conversation-id=\"currentChat.id\"\n class=\"flex-1\"\n />\n </div>\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport ConversationHeader from './ConversationHeader.vue';\nimport DashboardAppFrame from '../DashboardApp/Frame.vue';\nimport EmptyState from './EmptyState/EmptyState.vue';\nimport MessagesView from './MessagesView.vue';\nimport ConversationSidebar from './ConversationSidebar.vue';\n\nexport default {\n components: {\n ConversationSidebar,\n ConversationHeader,\n DashboardAppFrame,\n EmptyState,\n MessagesView,\n },\n\n props: {\n inboxId: {\n type: [Number, String],\n default: '',\n required: false,\n },\n isInboxView: {\n type: Boolean,\n default: false,\n },\n isContactPanelOpen: {\n type: Boolean,\n default: true,\n },\n isOnExpandedLayout: {\n type: Boolean,\n default: true,\n },\n },\n emits: ['contactPanelToggle'],\n data() {\n return { activeIndex: 0 };\n },\n computed: {\n ...mapGetters({\n currentChat: 'getSelectedChat',\n dashboardApps: 'dashboardApps/getRecords',\n }),\n dashboardAppTabs() {\n return [\n {\n key: 'messages',\n index: 0,\n name: this.$t('CONVERSATION.DASHBOARD_APP_TAB_MESSAGES'),\n },\n ...this.dashboardApps.map((dashboardApp, index) => ({\n key: `dashboard-${dashboardApp.id}`,\n index: index + 1,\n name: dashboardApp.title,\n })),\n ];\n },\n showContactPanel() {\n return this.isContactPanelOpen && this.currentChat.id;\n },\n },\n watch: {\n 'currentChat.inbox_id': {\n immediate: true,\n handler(inboxId) {\n if (inboxId) {\n this.$store.dispatch('inboxAssignableAgents/fetch', [inboxId]);\n }\n },\n },\n 'currentChat.id'() {\n this.fetchLabels();\n this.activeIndex = 0;\n },\n },\n mounted() {\n this.fetchLabels();\n this.$store.dispatch('dashboardApps/get');\n },\n methods: {\n fetchLabels() {\n if (!this.currentChat.id) {\n return;\n }\n this.$store.dispatch('conversationLabels/get', this.currentChat.id);\n },\n onToggleContactPanel() {\n this.$emit('contactPanelToggle');\n },\n onDashboardAppTabChange(index) {\n this.activeIndex = index;\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"conversation-details-wrap bg-n-background\"\n :class=\"{\n 'border-l rtl:border-l-0 rtl:border-r border-n-weak': !isOnExpandedLayout,\n }\"\n >\n <ConversationHeader\n v-if=\"currentChat.id\"\n :chat=\"currentChat\"\n :is-inbox-view=\"isInboxView\"\n :is-contact-panel-open=\"isContactPanelOpen\"\n :show-back-button=\"isOnExpandedLayout && !isInboxView\"\n @contact-panel-toggle=\"onToggleContactPanel\"\n />\n <woot-tabs\n v-if=\"dashboardApps.length && currentChat.id\"\n :index=\"activeIndex\"\n class=\"-mt-px bg-white dashboard-app--tabs dark:bg-slate-900\"\n @change=\"onDashboardAppTabChange\"\n >\n <woot-tabs-item\n v-for=\"tab in dashboardAppTabs\"\n :key=\"tab.key\"\n :index=\"tab.index\"\n :name=\"tab.name\"\n :show-badge=\"false\"\n />\n </woot-tabs>\n <div v-show=\"!activeIndex\" class=\"flex h-full min-h-0 m-0\">\n <MessagesView\n v-if=\"currentChat.id\"\n :inbox-id=\"inboxId\"\n :is-inbox-view=\"isInboxView\"\n :is-contact-panel-open=\"isContactPanelOpen\"\n @contact-panel-toggle=\"onToggleContactPanel\"\n />\n <EmptyState\n v-if=\"!currentChat.id && !isInboxView\"\n :is-on-expanded-layout=\"isOnExpandedLayout\"\n />\n <ConversationSidebar\n v-if=\"showContactPanel\"\n :current-chat=\"currentChat\"\n @toggle-contact-panel=\"onToggleContactPanel\"\n />\n </div>\n <DashboardAppFrame\n v-for=\"(dashboardApp, index) in dashboardApps\"\n v-show=\"activeIndex - 1 === index\"\n :key=\"currentChat.id + '-' + dashboardApp.id\"\n :is-visible=\"activeIndex - 1 === index\"\n :config=\"dashboardApps[index].content\"\n :position=\"index\"\n :current-chat=\"currentChat\"\n />\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.conversation-details-wrap {\n @apply flex flex-col min-w-0 w-full;\n}\n\n.dashboard-app--tabs {\n ::v-deep {\n .tabs-title {\n a {\n @apply pb-2 pt-1;\n }\n }\n }\n}\n</style>\n","<script>\nimport { mapGetters } from 'vuex';\nimport SwitchLayout from './SwitchLayout.vue';\nimport { frontendURL } from 'dashboard/helper/URLHelper';\nexport default {\n components: {\n SwitchLayout,\n },\n directives: {\n focus: {\n inserted(el) {\n el.focus();\n },\n },\n },\n props: {\n isOnExpandedLayout: {\n type: Boolean,\n required: true,\n },\n },\n emits: ['toggleConversationLayout'],\n computed: {\n ...mapGetters({\n accountId: 'getCurrentAccountId',\n }),\n searchUrl() {\n return frontendURL(`accounts/${this.accountId}/search`);\n },\n },\n};\n</script>\n\n<template>\n <div class=\"relative\">\n <div\n class=\"flex px-4 pb-1 justify-between items-center flex-row gap-1 pt-2.5 border-b border-transparent\"\n >\n <woot-sidemenu-icon\n size=\"tiny\"\n class=\"relative top-0 ltr:-ml-1.5 rtl:-mr-1.5 flex-shrink-0 focus:!bg-n-solid-3 dark:!hover:bg-n-solid-2 hover:!bg-n-alpha-2\"\n />\n <router-link\n :to=\"searchUrl\"\n class=\"inline-flex items-center flex-1 h-6 min-w-0 gap-1 px-2 py-0 text-left rounded-md rtl:mr-2.5 search-link rtl:text-right bg-n-slate-9/10 hover:bg-n-slate-3\"\n >\n <div class=\"flex flex-shrink-0\">\n <fluent-icon\n icon=\"search\"\n class=\"search--icon text-n-slate-11\"\n size=\"16\"\n />\n </div>\n <p\n class=\"mb-0 overflow-hidden text-sm search--label whitespace-nowrap text-ellipsis text-n-slate-11\"\n >\n {{ $t('CONVERSATION.SEARCH_MESSAGES') }}\n </p>\n </router-link>\n <SwitchLayout\n :is-on-expanded-layout=\"isOnExpandedLayout\"\n @toggle=\"$emit('toggleConversationLayout')\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.search-link {\n &:hover {\n .search--icon,\n .search--label {\n @apply hover:text-woot-500 dark:hover:text-woot-500;\n }\n }\n}\n</style>\n","<script setup>\nimport { ref, computed } from 'vue';\nimport { useStore, useStoreGetters } from 'dashboard/composables/store';\nimport { useAlert } from 'dashboard/composables';\nimport { useI18n } from 'vue-i18n';\nimport { useEmitter } from 'dashboard/composables/emitter';\nimport { getUnixTime } from 'date-fns';\nimport { findSnoozeTime } from 'dashboard/helper/snoozeHelpers';\nimport { CMD_SNOOZE_CONVERSATION } from 'dashboard/helper/commandbar/events';\nimport wootConstants from 'dashboard/constants/globals';\nimport CustomSnoozeModal from 'dashboard/components/CustomSnoozeModal.vue';\n\nconst store = useStore();\nconst getters = useStoreGetters();\nconst { t } = useI18n();\nconst showCustomSnoozeModal = ref(false);\n\nconst selectedChat = computed(() => getters.getSelectedChat.value);\nconst contextMenuChatId = computed(() => getters.getContextMenuChatId.value);\n\nconst toggleStatus = async (status, snoozedUntil) => {\n await store.dispatch('toggleStatus', {\n conversationId: selectedChat.value?.id || contextMenuChatId.value,\n status,\n snoozedUntil,\n });\n store.dispatch('setContextMenuChatId', null);\n useAlert(t('CONVERSATION.CHANGE_STATUS'));\n};\n\nconst onCmdSnoozeConversation = snoozeType => {\n if (snoozeType === wootConstants.SNOOZE_OPTIONS.UNTIL_CUSTOM_TIME) {\n showCustomSnoozeModal.value = true;\n } else {\n toggleStatus(\n wootConstants.STATUS_TYPE.SNOOZED,\n findSnoozeTime(snoozeType) || null\n );\n }\n};\n\nconst chooseSnoozeTime = customSnoozeTime => {\n showCustomSnoozeModal.value = false;\n if (customSnoozeTime) {\n toggleStatus(\n wootConstants.STATUS_TYPE.SNOOZED,\n getUnixTime(customSnoozeTime)\n );\n }\n};\n\nconst hideCustomSnoozeModal = () => {\n // if we select custom snooze and the custom snooze modal is open\n // Then if the custom snooze modal is closed then set the context menu chat id to null\n store.dispatch('setContextMenuChatId', null);\n showCustomSnoozeModal.value = false;\n};\n\nuseEmitter(CMD_SNOOZE_CONVERSATION, onCmdSnoozeConversation);\n</script>\n\n<template>\n <woot-modal\n v-model:show=\"showCustomSnoozeModal\"\n :on-close=\"hideCustomSnoozeModal\"\n >\n <CustomSnoozeModal\n @close=\"hideCustomSnoozeModal\"\n @choose-time=\"chooseSnoozeTime\"\n />\n </woot-modal>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useUISettings } from 'dashboard/composables/useUISettings';\nimport { useAccount } from 'dashboard/composables/useAccount';\nimport ChatList from '../../../components/ChatList.vue';\nimport ConversationBox from '../../../components/widgets/conversation/ConversationBox.vue';\nimport PopOverSearch from './search/PopOverSearch.vue';\nimport wootConstants from 'dashboard/constants/globals';\nimport { BUS_EVENTS } from 'shared/constants/busEvents';\nimport CmdBarConversationSnooze from 'dashboard/routes/dashboard/commands/CmdBarConversationSnooze.vue';\nimport { emitter } from 'shared/helpers/mitt';\nimport { FEATURE_FLAGS } from 'dashboard/featureFlags';\n\nexport default {\n components: {\n ChatList,\n ConversationBox,\n PopOverSearch,\n CmdBarConversationSnooze,\n },\n beforeRouteLeave(to, from, next) {\n // Clear selected state if navigating away from a conversation to a route without a conversationId to prevent stale data issues\n // and resolves timing issues during navigation with conversation view and other screens\n if (this.conversationId) {\n this.$store.dispatch('clearSelectedState');\n }\n next(); // Continue with navigation\n },\n props: {\n inboxId: {\n type: [String, Number],\n default: 0,\n },\n conversationId: {\n type: [String, Number],\n default: 0,\n },\n label: {\n type: String,\n default: '',\n },\n teamId: {\n type: String,\n default: '',\n },\n conversationType: {\n type: String,\n default: '',\n },\n foldersId: {\n type: [String, Number],\n default: 0,\n },\n },\n setup() {\n const { uiSettings, updateUISettings } = useUISettings();\n const { accountId } = useAccount();\n\n return {\n uiSettings,\n updateUISettings,\n accountId,\n };\n },\n data() {\n return {\n showSearchModal: false,\n };\n },\n computed: {\n ...mapGetters({\n chatList: 'getAllConversations',\n currentChat: 'getSelectedChat',\n isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount',\n }),\n showConversationList() {\n return this.isOnExpandedLayout ? !this.conversationId : true;\n },\n showMessageView() {\n return this.conversationId ? true : !this.isOnExpandedLayout;\n },\n isOnExpandedLayout() {\n const {\n LAYOUT_TYPES: { CONDENSED },\n } = wootConstants;\n const { conversation_display_type: conversationDisplayType = CONDENSED } =\n this.uiSettings;\n return conversationDisplayType !== CONDENSED;\n },\n isContactPanelOpen() {\n if (this.currentChat.id) {\n const { is_contact_sidebar_open: isContactSidebarOpen } =\n this.uiSettings;\n return isContactSidebarOpen;\n }\n return false;\n },\n showPopOverSearch() {\n return !this.isFeatureEnabledonAccount(\n this.accountId,\n FEATURE_FLAGS.CHATWOOT_V4\n );\n },\n },\n watch: {\n conversationId() {\n this.fetchConversationIfUnavailable();\n },\n },\n\n created() {\n // Clear selected state early if no conversation is selected\n // This prevents child components from accessing stale data\n // and resolves timing issues during navigation\n // with conversation view and other screens\n if (!this.conversationId) {\n this.$store.dispatch('clearSelectedState');\n }\n },\n\n mounted() {\n this.$store.dispatch('agents/get');\n this.initialize();\n this.$watch('$store.state.route', () => this.initialize());\n this.$watch('chatList.length', () => {\n this.setActiveChat();\n });\n },\n\n methods: {\n onConversationLoad() {\n this.fetchConversationIfUnavailable();\n },\n initialize() {\n this.$store.dispatch('setActiveInbox', this.inboxId);\n this.setActiveChat();\n },\n toggleConversationLayout() {\n const { LAYOUT_TYPES } = wootConstants;\n const {\n conversation_display_type:\n conversationDisplayType = LAYOUT_TYPES.CONDENSED,\n } = this.uiSettings;\n const newViewType =\n conversationDisplayType === LAYOUT_TYPES.CONDENSED\n ? LAYOUT_TYPES.EXPANDED\n : LAYOUT_TYPES.CONDENSED;\n this.updateUISettings({\n conversation_display_type: newViewType,\n previously_used_conversation_display_type: newViewType,\n });\n },\n fetchConversationIfUnavailable() {\n if (!this.conversationId) {\n return;\n }\n const chat = this.findConversation();\n if (!chat) {\n this.$store.dispatch('getConversation', this.conversationId);\n }\n },\n findConversation() {\n const conversationId = parseInt(this.conversationId, 10);\n const [chat] = this.chatList.filter(c => c.id === conversationId);\n return chat;\n },\n setActiveChat() {\n if (this.conversationId) {\n const selectedConversation = this.findConversation();\n // If conversation doesn't exist or selected conversation is same as the active\n // conversation, don't set active conversation.\n if (\n !selectedConversation ||\n selectedConversation.id === this.currentChat.id\n ) {\n return;\n }\n const { messageId } = this.$route.query;\n this.$store\n .dispatch('setActiveChat', {\n data: selectedConversation,\n after: messageId,\n })\n .then(() => {\n emitter.emit(BUS_EVENTS.SCROLL_TO_MESSAGE, { messageId });\n });\n } else {\n this.$store.dispatch('clearSelectedState');\n }\n },\n onToggleContactPanel() {\n this.updateUISettings({\n is_contact_sidebar_open: !this.isContactPanelOpen,\n });\n },\n onSearch() {\n this.showSearchModal = true;\n },\n closeSearch() {\n this.showSearchModal = false;\n },\n },\n};\n</script>\n\n<template>\n <section class=\"flex w-full h-full\">\n <ChatList\n :show-conversation-list=\"showConversationList\"\n :conversation-inbox=\"inboxId\"\n :label=\"label\"\n :team-id=\"teamId\"\n :conversation-type=\"conversationType\"\n :folders-id=\"foldersId\"\n :is-on-expanded-layout=\"isOnExpandedLayout\"\n @conversation-load=\"onConversationLoad\"\n >\n <PopOverSearch\n v-if=\"showPopOverSearch\"\n :is-on-expanded-layout=\"isOnExpandedLayout\"\n @toggle-conversation-layout=\"toggleConversationLayout\"\n />\n </ChatList>\n <ConversationBox\n v-if=\"showMessageView\"\n :inbox-id=\"inboxId\"\n :is-contact-panel-open=\"isContactPanelOpen\"\n :is-on-expanded-layout=\"isOnExpandedLayout\"\n @contact-panel-toggle=\"onToggleContactPanel\"\n />\n <CmdBarConversationSnooze />\n </section>\n</template>\n","/* eslint arrow-body-style: 0 */\nimport { frontendURL } from '../../../helper/URLHelper';\nimport ConversationView from './ConversationView.vue';\n\nconst CONVERSATION_PERMISSIONS = [\n 'administrator',\n 'agent',\n 'conversation_manage',\n 'conversation_unassigned_manage',\n 'conversation_participating_manage',\n];\n\nexport default {\n routes: [\n {\n path: frontendURL('accounts/:accountId/dashboard'),\n name: 'home',\n meta: {\n permissions: CONVERSATION_PERMISSIONS,\n },\n component: ConversationView,\n props: () => {\n return { inboxId: 0 };\n },\n },\n {\n path: frontendURL('accounts/:accountId/conversations/:conversation_id'),\n name: 'inbox_conversation',\n meta: {\n permissions: CONVERSATION_PERMISSIONS,\n },\n component: ConversationView,\n props: route => {\n return { inboxId: 0, conversationId: route.params.conversation_id };\n },\n },\n {\n path: frontendURL('accounts/:accountId/inbox/:inbox_id'),\n name: 'inbox_dashboard',\n meta: {\n permissions: CONVERSATION_PERMISSIONS,\n },\n component: ConversationView,\n props: route => {\n return { inboxId: route.params.inbox_id };\n },\n },\n {\n path: frontendURL(\n 'accounts/:accountId/inbox/:inbox_id/conversations/:conversation_id'\n ),\n name: 'conversation_through_inbox',\n meta: {\n permissions: CONVERSATION_PERMISSIONS,\n },\n component: ConversationView,\n props: route => {\n return {\n conversationId: route.params.conversation_id,\n inboxId: route.params.inbox_id,\n };\n },\n },\n {\n path: frontendURL('accounts/:accountId/label/:label'),\n name: 'label_conversations',\n meta: {\n permissions: CONVERSATION_PERMISSIONS,\n },\n component: ConversationView,\n props: route => ({ label: route.params.label }),\n },\n {\n path: frontendURL(\n 'accounts/:accountId/label/:label/conversations/:conversation_id'\n ),\n name: 'conversations_through_label',\n meta: {\n permissions: CONVERSATION_PERMISSIONS,\n },\n component: ConversationView,\n props: route => ({\n conversationId: route.params.conversation_id,\n label: route.params.label,\n }),\n },\n {\n path: frontendURL('accounts/:accountId/team/:teamId'),\n name: 'team_conversations',\n meta: {\n permissions: CONVERSATION_PERMISSIONS,\n },\n component: ConversationView,\n props: route => ({ teamId: route.params.teamId }),\n },\n {\n path: frontendURL(\n 'accounts/:accountId/team/:teamId/conversations/:conversationId'\n ),\n name: 'conversations_through_team',\n meta: {\n permissions: CONVERSATION_PERMISSIONS,\n },\n component: ConversationView,\n props: route => ({\n conversationId: route.params.conversationId,\n teamId: route.params.teamId,\n }),\n },\n {\n path: frontendURL('accounts/:accountId/custom_view/:id'),\n name: 'folder_conversations',\n meta: {\n permissions: CONVERSATION_PERMISSIONS,\n },\n component: ConversationView,\n props: route => ({ foldersId: route.params.id }),\n },\n {\n path: frontendURL(\n 'accounts/:accountId/custom_view/:id/conversations/:conversation_id'\n ),\n name: 'conversations_through_folders',\n meta: {\n permissions: CONVERSATION_PERMISSIONS,\n },\n component: ConversationView,\n props: route => ({\n conversationId: route.params.conversation_id,\n foldersId: route.params.id,\n }),\n },\n {\n path: frontendURL('accounts/:accountId/mentions/conversations'),\n name: 'conversation_mentions',\n meta: {\n permissions: CONVERSATION_PERMISSIONS,\n },\n component: ConversationView,\n props: () => ({ conversationType: 'mention' }),\n },\n {\n path: frontendURL(\n 'accounts/:accountId/mentions/conversations/:conversationId'\n ),\n name: 'conversation_through_mentions',\n meta: {\n permissions: CONVERSATION_PERMISSIONS,\n },\n component: ConversationView,\n props: route => ({\n conversationId: route.params.conversationId,\n conversationType: 'mention',\n }),\n },\n {\n path: frontendURL('accounts/:accountId/unattended/conversations'),\n name: 'conversation_unattended',\n meta: {\n permissions: CONVERSATION_PERMISSIONS,\n },\n component: ConversationView,\n props: () => ({ conversationType: 'unattended' }),\n },\n {\n path: frontendURL(\n 'accounts/:accountId/unattended/conversations/:conversationId'\n ),\n name: 'conversation_through_unattended',\n meta: {\n permissions: CONVERSATION_PERMISSIONS,\n },\n component: ConversationView,\n props: route => ({\n conversationId: route.params.conversationId,\n conversationType: 'unattended',\n }),\n },\n {\n path: frontendURL('accounts/:accountId/participating/conversations'),\n name: 'conversation_participating',\n meta: {\n permissions: CONVERSATION_PERMISSIONS,\n },\n component: ConversationView,\n props: () => ({ conversationType: 'participating' }),\n },\n {\n path: frontendURL(\n 'accounts/:accountId/participating/conversations/:conversationId'\n ),\n name: 'conversation_through_participating',\n meta: {\n permissions: CONVERSATION_PERMISSIONS,\n },\n component: ConversationView,\n props: route => ({\n conversationId: route.params.conversationId,\n conversationType: 'participating',\n }),\n },\n ],\n};\n","<script setup>\nimport { ref, useTemplateRef, onMounted, onUnmounted } from 'vue';\nimport { debounce } from '@chatwoot/utils';\n\nconst emit = defineEmits(['search']);\n\nconst searchQuery = ref('');\nconst isInputFocused = ref(false);\n\nconst searchInput = useTemplateRef('searchInput');\n\nconst handler = e => {\n if (e.key === '/' && document.activeElement.tagName !== 'INPUT') {\n e.preventDefault();\n searchInput.value.focus();\n } else if (e.key === 'Escape' && document.activeElement.tagName === 'INPUT') {\n e.preventDefault();\n searchInput.value.blur();\n }\n};\n\nconst debouncedEmit = debounce(\n value =>\n emit('search', value.length > 1 || value.match(/^[0-9]+$/) ? value : ''),\n 500\n);\n\nconst onInput = e => {\n searchQuery.value = e.target.value;\n debouncedEmit(searchQuery.value);\n};\n\nconst onFocus = () => {\n isInputFocused.value = true;\n};\n\nconst onBlur = () => {\n isInputFocused.value = false;\n};\n\nonMounted(() => {\n searchInput.value.focus();\n document.addEventListener('keydown', handler);\n});\n\nonUnmounted(() => {\n document.removeEventListener('keydown', handler);\n});\n</script>\n\n<template>\n <div\n class=\"input-container rounded-xl transition-[border-bottom] duration-[0.2s] ease-[ease-in-out] relative flex items-center py-2 px-4 h-14 gap-2 border border-solid bg-n-alpha-black2\"\n :class=\"{\n 'border-n-brand': isInputFocused,\n 'border-n-weak': !isInputFocused,\n }\"\n >\n <div class=\"flex items-center\">\n <fluent-icon\n icon=\"search\"\n class=\"icon\"\n aria-hidden=\"true\"\n :class=\"{\n 'text-n-blue-text': isInputFocused,\n 'text-n-slate-10': !isInputFocused,\n }\"\n />\n </div>\n <input\n ref=\"searchInput\"\n type=\"search\"\n class=\"reset-base outline-none w-full m-0 bg-transparent border-transparent shadow-none text-n-slate-12 dark:text-n-slate-12 active:border-transparent active:shadow-none hover:border-transparent hover:shadow-none focus:border-transparent focus:shadow-none\"\n :placeholder=\"$t('SEARCH.INPUT_PLACEHOLDER')\"\n :value=\"searchQuery\"\n @focus=\"onFocus\"\n @blur=\"onBlur\"\n @input=\"onInput\"\n />\n <woot-label\n :title=\"$t('SEARCH.PLACEHOLDER_KEYBINDING')\"\n :show-close=\"false\"\n small\n class=\"!m-0 whitespace-nowrap !bg-n-slate-3 dark:!bg-n-solid-3 !border-n-weak dark:!border-n-strong\"\n />\n </div>\n</template>\n","<script setup>\nimport { ref, watch } from 'vue';\n\nconst props = defineProps({\n tabs: {\n type: Array,\n default: () => [],\n },\n selectedTab: {\n type: Number,\n default: 0,\n },\n});\n\nconst emit = defineEmits(['tabChange']);\n\nconst activeTab = ref(props.selectedTab);\n\nwatch(\n () => props.selectedTab,\n (value, oldValue) => {\n if (value !== oldValue) {\n activeTab.value = props.selectedTab;\n }\n }\n);\n\nconst onTabChange = index => {\n activeTab.value = index;\n emit('tabChange', props.tabs[index].key);\n};\n</script>\n\n<template>\n <div class=\"mt-1 border-b border-n-weak\">\n <woot-tabs :index=\"activeTab\" :border=\"false\" @change=\"onTabChange\">\n <woot-tabs-item\n v-for=\"(item, index) in tabs\"\n :key=\"item.key\"\n :index=\"index\"\n :name=\"item.name\"\n :count=\"item.count\"\n :show-badge=\"item.showBadge\"\n />\n </woot-tabs>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\n\nconst props = defineProps({\n title: {\n type: String,\n default: '',\n },\n empty: {\n type: Boolean,\n default: false,\n },\n query: {\n type: String,\n default: '',\n },\n showTitle: {\n type: Boolean,\n default: true,\n },\n isFetching: {\n type: Boolean,\n default: true,\n },\n});\n\nconst titleCase = computed(() => props.title.toLowerCase());\n</script>\n\n<template>\n <section class=\"mx-0 my-2\">\n <div v-if=\"showTitle\" class=\"sticky top-0 p-2 z-50 mb-0.5 bg-n-background\">\n <h3 class=\"text-sm text-n-slate-12\">{{ title }}</h3>\n </div>\n <slot />\n <woot-loading-state\n v-if=\"isFetching\"\n :message=\"empty ? $t('SEARCH.SEARCHING_DATA') : $t('SEARCH.LOADING_DATA')\"\n />\n <div\n v-if=\"empty && !isFetching\"\n class=\"flex items-center justify-center px-4 py-6 m-2 rounded-xl bg-n-slate-2 dark:bg-n-solid-1\"\n >\n <fluent-icon icon=\"info\" size=\"16px\" class=\"text-n-slate-11\" />\n <p class=\"mx-2 my-0 text-center text-n-slate-11\">\n {{ $t('SEARCH.EMPTY_STATE', { item: titleCase, query }) }}\n </p>\n </div>\n </section>\n</template>\n","<script setup>\nimport { computed } from 'vue';\n\nimport { frontendURL } from 'dashboard/helper/URLHelper.js';\nimport { dynamicTime } from 'shared/helpers/timeHelper';\nimport InboxName from 'dashboard/components/widgets/InboxName.vue';\nimport Avatar from 'dashboard/components-next/avatar/Avatar.vue';\n\nconst props = defineProps({\n id: {\n type: Number,\n default: 0,\n },\n inbox: {\n type: Object,\n default: () => ({}),\n },\n name: {\n type: String,\n default: '',\n },\n email: {\n type: String,\n default: '',\n },\n accountId: {\n type: [String, Number],\n default: '',\n },\n createdAt: {\n type: [String, Date, Number],\n default: '',\n },\n messageId: {\n type: Number,\n default: 0,\n },\n emailSubject: {\n type: String,\n default: '',\n },\n});\n\nconst navigateTo = computed(() => {\n const params = {};\n if (props.messageId) {\n params.messageId = props.messageId;\n }\n return frontendURL(\n `accounts/${props.accountId}/conversations/${props.id}`,\n params\n );\n});\n\nconst createdAtTime = dynamicTime(props.createdAt);\n\nconst infoItems = computed(() => [\n {\n label: 'SEARCH.FROM',\n value: props.name,\n show: !!props.name,\n },\n {\n label: 'SEARCH.EMAIL',\n value: props.email,\n show: !!props.email,\n },\n {\n label: 'SEARCH.EMAIL_SUBJECT',\n value: props.emailSubject,\n show: !!props.emailSubject,\n },\n]);\n\nconst visibleInfoItems = computed(() =>\n infoItems.value.filter(item => item.show)\n);\n</script>\n\n<template>\n <router-link\n :to=\"navigateTo\"\n class=\"flex p-2 rounded-xl cursor-pointer hover:bg-n-slate-2\"\n >\n <Avatar\n name=\"chats\"\n :size=\"24\"\n icon-name=\"i-lucide-messages-square\"\n class=\"[&>span]:rounded\"\n />\n <div class=\"flex-grow min-w-0 ml-2\">\n <div class=\"flex items-center min-w-0 justify-between gap-1 mb-1\">\n <div class=\"flex\">\n <woot-label\n class=\"!bg-n-slate-3 dark:!bg-n-solid-3 !border-n-weak dark:!border-n-strong m-0\"\n :title=\"`#${id}`\"\n :show-close=\"false\"\n small\n />\n <div\n class=\"flex items-center justify-center h-5 ml-1 rounded bg-n-slate-3 dark:bg-n-solid-3 w-fit rtl:ml-0 rtl:mr-1\"\n >\n <InboxName\n :inbox=\"inbox\"\n class=\"mr-2 rtl:mr-0 rtl:ml-2 bg-n-slate-3 dark:bg-n-solid-3 text-n-slate-11 dark:text-n-slate-11\"\n />\n </div>\n </div>\n <span\n class=\"text-xs font-normal min-w-0 truncate text-n-slate-11 dark:text-n-slate-11\"\n >\n {{ createdAtTime }}\n </span>\n </div>\n <div class=\"flex flex-wrap gap-x-2 gap-y-1.5\">\n <h5\n v-for=\"item in visibleInfoItems\"\n :key=\"item.label\"\n class=\"m-0 text-sm min-w-0 text-n-slate-12 dark:text-n-slate-12 truncate\"\n >\n <span\n class=\"text-xs font-normal text-n-slate-11 dark:text-n-slate-11\"\n >\n {{ $t(item.label) }}:\n </span>\n {{ item.value }}\n </h5>\n </div>\n <slot />\n </div>\n </router-link>\n</template>\n","<script setup>\nimport { defineProps, computed } from 'vue';\nimport { useMapGetter } from 'dashboard/composables/store.js';\nimport SearchResultSection from './SearchResultSection.vue';\nimport SearchResultConversationItem from './SearchResultConversationItem.vue';\n\nconst props = defineProps({\n conversations: {\n type: Array,\n default: () => [],\n },\n query: {\n type: String,\n default: '',\n },\n isFetching: {\n type: Boolean,\n default: false,\n },\n showTitle: {\n type: Boolean,\n default: true,\n },\n});\n\nconst accountId = useMapGetter('getCurrentAccountId');\n\nconst conversationsWithSubject = computed(() => {\n return props.conversations.map(conversation => ({\n ...conversation,\n mail_subject: conversation.additional_attributes?.mail_subject || '',\n }));\n});\n</script>\n\n<template>\n <SearchResultSection\n :title=\"$t('SEARCH.SECTION.CONVERSATIONS')\"\n :empty=\"!conversations.length\"\n :query=\"query\"\n :show-title=\"showTitle\"\n :is-fetching=\"isFetching\"\n >\n <ul v-if=\"conversations.length\" class=\"space-y-1.5 list-none\">\n <li\n v-for=\"conversation in conversationsWithSubject\"\n :key=\"conversation.id\"\n >\n <SearchResultConversationItem\n :id=\"conversation.id\"\n :name=\"conversation.contact.name\"\n :email=\"conversation.contact.email\"\n :account-id=\"accountId\"\n :inbox=\"conversation.inbox\"\n :created-at=\"conversation.created_at\"\n :email-subject=\"conversation.mail_subject\"\n />\n </li>\n </ul>\n </SearchResultSection>\n</template>\n","<script setup>\nimport { ref, useTemplateRef, onMounted, watch, nextTick } from 'vue';\nimport { useMessageFormatter } from 'shared/composables/useMessageFormatter';\nimport ReadMore from './ReadMore.vue';\n\nconst props = defineProps({\n author: {\n type: String,\n default: '',\n },\n content: {\n type: String,\n default: '',\n },\n searchTerm: {\n type: String,\n default: '',\n },\n});\n\nconst { highlightContent } = useMessageFormatter();\n\nconst messageContainer = useTemplateRef('messageContainer');\nconst isOverflowing = ref(false);\n\nconst setOverflow = () => {\n const wrap = messageContainer.value;\n if (wrap) {\n const message = wrap.querySelector('.message-content');\n isOverflowing.value = message.offsetHeight > 150;\n }\n};\n\nconst escapeHtml = html => {\n var text = document.createTextNode(html);\n var p = document.createElement('p');\n p.appendChild(text);\n return p.innerText;\n};\n\nconst prepareContent = (content = '') => {\n const escapedText = escapeHtml(content);\n return highlightContent(\n escapedText,\n props.searchTerm,\n 'searchkey--highlight'\n );\n};\n\nonMounted(() => {\n watch(() => {\n return messageContainer.value;\n }, setOverflow);\n\n nextTick(setOverflow);\n});\n</script>\n\n<template>\n <blockquote ref=\"messageContainer\" class=\"message border-l-2 border-n-weak\">\n <p class=\"header\">\n <strong class=\"text-n-slate-11\">\n {{ author }}\n </strong>\n {{ $t('SEARCH.WROTE') }}\n </p>\n <ReadMore :shrink=\"isOverflowing\" @expand=\"isOverflowing = false\">\n <div v-dompurify-html=\"prepareContent(content)\" class=\"message-content\" />\n </ReadMore>\n </blockquote>\n</template>\n\n<style scoped lang=\"scss\">\n.message {\n @apply py-0 px-2 mt-2;\n}\n.message-content::v-deep p,\n.message-content::v-deep li::marker {\n @apply text-n-slate-11 mb-1;\n}\n\n.header {\n @apply text-n-slate-11 mb-1;\n}\n\n.message-content {\n @apply break-words text-n-slate-11;\n}\n\n.message-content::v-deep .searchkey--highlight {\n @apply text-n-slate-12 text-sm font-semibold;\n}\n</style>\n","<script setup>\nimport { useI18n } from 'vue-i18n';\nimport { useMapGetter } from 'dashboard/composables/store.js';\n\nimport SearchResultConversationItem from './SearchResultConversationItem.vue';\nimport SearchResultSection from './SearchResultSection.vue';\nimport MessageContent from './MessageContent.vue';\n\ndefineProps({\n messages: {\n type: Array,\n default: () => [],\n },\n query: {\n type: String,\n default: '',\n },\n isFetching: {\n type: Boolean,\n default: false,\n },\n showTitle: {\n type: Boolean,\n default: true,\n },\n});\nconst { t } = useI18n();\n\nconst accountId = useMapGetter('getCurrentAccountId');\n\nconst getName = message => {\n return message && message.sender && message.sender.name\n ? message.sender.name\n : t('SEARCH.BOT_LABEL');\n};\n</script>\n\n<template>\n <SearchResultSection\n :title=\"$t('SEARCH.SECTION.MESSAGES')\"\n :empty=\"!messages.length\"\n :query=\"query\"\n :show-title=\"showTitle\"\n :is-fetching=\"isFetching\"\n >\n <ul v-if=\"messages.length\" class=\"space-y-1.5 list-none\">\n <li v-for=\"message in messages\" :key=\"message.id\">\n <SearchResultConversationItem\n :id=\"message.conversation_id\"\n :account-id=\"accountId\"\n :inbox=\"message.inbox\"\n :created-at=\"message.created_at\"\n :message-id=\"message.id\"\n >\n <MessageContent\n :author=\"getName(message)\"\n :content=\"message.content\"\n :search-term=\"query\"\n />\n </SearchResultConversationItem>\n </li>\n </ul>\n </SearchResultSection>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { frontendURL } from 'dashboard/helper/URLHelper';\n\nimport Avatar from 'dashboard/components-next/avatar/Avatar.vue';\n\nconst props = defineProps({\n id: {\n type: [String, Number],\n default: 0,\n },\n email: {\n type: String,\n default: '',\n },\n phone: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: '',\n },\n thumbnail: {\n type: String,\n default: '',\n },\n accountId: {\n type: [String, Number],\n default: 0,\n },\n});\n\nconst navigateTo = computed(() => {\n return frontendURL(`accounts/${props.accountId}/contacts/${props.id}`);\n});\n</script>\n\n<template>\n <router-link\n :to=\"navigateTo\"\n class=\"flex items-start p-2 rounded-xl cursor-pointer hover:bg-n-slate-2\"\n >\n <Avatar\n :name=\"name\"\n :src=\"thumbnail\"\n :size=\"24\"\n rounded-full\n class=\"mt-0.5\"\n />\n <div class=\"ml-2 rtl:mr-2 min-w-0 rtl:ml-0\">\n <h5 class=\"text-sm name truncate min-w-0 text-n-slate-12\">\n {{ name }}\n </h5>\n <p\n class=\"grid items-center m-0 gap-1 text-sm grid-cols-[minmax(0,1fr)_auto_auto]\"\n >\n <span v-if=\"email\" class=\"truncate text-n-slate-12\" :title=\"email\">\n {{ email }}\n </span>\n <span v-if=\"phone\" class=\"text-n-slate-10\">•</span>\n <span v-if=\"phone\" class=\"text-n-slate-12\">{{ phone }}</span>\n </p>\n </div>\n </router-link>\n</template>\n","<script setup>\nimport { useMapGetter } from 'dashboard/composables/store.js';\n\nimport SearchResultSection from './SearchResultSection.vue';\nimport SearchResultContactItem from './SearchResultContactItem.vue';\n\ndefineProps({\n contacts: {\n type: Array,\n default: () => [],\n },\n query: {\n type: String,\n default: '',\n },\n isFetching: {\n type: Boolean,\n default: false,\n },\n showTitle: {\n type: Boolean,\n default: true,\n },\n});\n\nconst accountId = useMapGetter('getCurrentAccountId');\n</script>\n\n<template>\n <SearchResultSection\n :title=\"$t('SEARCH.SECTION.CONTACTS')\"\n :empty=\"!contacts.length\"\n :query=\"query\"\n :show-title=\"showTitle\"\n :is-fetching=\"isFetching\"\n >\n <ul v-if=\"contacts.length\" class=\"space-y-1.5 list-none\">\n <li v-for=\"contact in contacts\" :key=\"contact.id\">\n <SearchResultContactItem\n :id=\"contact.id\"\n :name=\"contact.name\"\n :email=\"contact.email\"\n :phone=\"contact.phone_number\"\n :account-id=\"accountId\"\n :thumbnail=\"contact.thumbnail\"\n />\n </li>\n </ul>\n </SearchResultSection>\n</template>\n","<script setup>\nimport { ref, computed, onMounted, onUnmounted } from 'vue';\nimport { useMapGetter, useStore } from 'dashboard/composables/store.js';\nimport { useRouter } from 'vue-router';\nimport { useTrack } from 'dashboard/composables';\nimport { useI18n } from 'vue-i18n';\nimport {\n ROLES,\n CONVERSATION_PERMISSIONS,\n CONTACT_PERMISSIONS,\n} from 'dashboard/constants/permissions.js';\nimport {\n getUserPermissions,\n filterItemsByPermission,\n} from 'dashboard/helper/permissionsHelper.js';\nimport { CONVERSATION_EVENTS } from '../../../helper/AnalyticsHelper/events';\n\nimport Policy from 'dashboard/components/policy.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\nimport SearchHeader from './SearchHeader.vue';\nimport SearchTabs from './SearchTabs.vue';\nimport SearchResultConversationsList from './SearchResultConversationsList.vue';\nimport SearchResultMessagesList from './SearchResultMessagesList.vue';\nimport SearchResultContactsList from './SearchResultContactsList.vue';\n\nconst router = useRouter();\nconst store = useStore();\nconst { t } = useI18n();\n\nconst PER_PAGE = 15; // Results per page\nconst selectedTab = ref('all');\nconst query = ref('');\nconst pages = ref({\n contacts: 1,\n conversations: 1,\n messages: 1,\n});\n\nconst currentUser = useMapGetter('getCurrentUser');\nconst currentAccountId = useMapGetter('getCurrentAccountId');\nconst contactRecords = useMapGetter('conversationSearch/getContactRecords');\nconst conversationRecords = useMapGetter(\n 'conversationSearch/getConversationRecords'\n);\nconst messageRecords = useMapGetter('conversationSearch/getMessageRecords');\nconst uiFlags = useMapGetter('conversationSearch/getUIFlags');\n\nconst addTypeToRecords = (records, type) =>\n records.value.map(item => ({ ...item, type }));\n\nconst mappedContacts = computed(() =>\n addTypeToRecords(contactRecords, 'contact')\n);\nconst mappedConversations = computed(() =>\n addTypeToRecords(conversationRecords, 'conversation')\n);\nconst mappedMessages = computed(() =>\n addTypeToRecords(messageRecords, 'message')\n);\n\nconst isSelectedTabAll = computed(() => selectedTab.value === 'all');\n\nconst sliceRecordsIfAllTab = items =>\n isSelectedTabAll.value ? items.value.slice(0, 5) : items.value;\n\nconst contacts = computed(() => sliceRecordsIfAllTab(mappedContacts));\nconst conversations = computed(() => sliceRecordsIfAllTab(mappedConversations));\nconst messages = computed(() => sliceRecordsIfAllTab(mappedMessages));\n\nconst filterByTab = tab =>\n computed(() => selectedTab.value === tab || isSelectedTabAll.value);\n\nconst filterContacts = filterByTab('contacts');\nconst filterConversations = filterByTab('conversations');\nconst filterMessages = filterByTab('messages');\n\nconst userPermissions = computed(() =>\n getUserPermissions(currentUser.value, currentAccountId.value)\n);\n\nconst TABS_CONFIG = {\n all: {\n permissions: [CONTACT_PERMISSIONS, ...ROLES, ...CONVERSATION_PERMISSIONS],\n count: () => null, // No count for all tab\n },\n contacts: {\n permissions: [...ROLES, CONTACT_PERMISSIONS],\n count: () => mappedContacts.value.length,\n },\n conversations: {\n permissions: [...ROLES, ...CONVERSATION_PERMISSIONS],\n count: () => mappedConversations.value.length,\n },\n messages: {\n permissions: [...ROLES, ...CONVERSATION_PERMISSIONS],\n count: () => mappedMessages.value.length,\n },\n};\n\nconst tabs = computed(() => {\n const configs = Object.entries(TABS_CONFIG).map(([key, config]) => ({\n key,\n name: t(`SEARCH.TABS.${key.toUpperCase()}`),\n count: config.count(),\n showBadge: key !== 'all',\n permissions: config.permissions,\n }));\n\n return filterItemsByPermission(\n configs,\n userPermissions.value,\n item => item.permissions\n );\n});\n\nconst totalSearchResultsCount = computed(() => {\n const permissionCounts = {\n contacts: {\n permissions: [...ROLES, CONTACT_PERMISSIONS],\n count: () => contacts.value.length,\n },\n conversations: {\n permissions: [...ROLES, ...CONVERSATION_PERMISSIONS],\n count: () => conversations.value.length + messages.value.length,\n },\n };\n return filterItemsByPermission(\n permissionCounts,\n userPermissions.value,\n item => item.permissions,\n (_, item) => item.count\n ).reduce((total, count) => total + count(), 0);\n});\n\nconst activeTabIndex = computed(() => {\n const index = tabs.value.findIndex(tab => tab.key === selectedTab.value);\n return index >= 0 ? index : 0;\n});\n\nconst isFetchingAny = computed(() => {\n const { contact, message, conversation, isFetching } = uiFlags.value;\n return (\n isFetching ||\n contact.isFetching ||\n message.isFetching ||\n conversation.isFetching\n );\n});\n\nconst showEmptySearchResults = computed(\n () =>\n totalSearchResultsCount.value === 0 &&\n uiFlags.value.isSearchCompleted &&\n isSelectedTabAll.value &&\n !isFetchingAny.value &&\n query.value\n);\n\nconst showResultsSection = computed(\n () =>\n (uiFlags.value.isSearchCompleted && totalSearchResultsCount.value !== 0) ||\n isFetchingAny.value ||\n (!isSelectedTabAll.value && query.value && !isFetchingAny.value)\n);\n\nconst showLoadMore = computed(() => {\n if (!query.value || isFetchingAny.value || selectedTab.value === 'all')\n return false;\n\n const records = {\n contacts: mappedContacts.value,\n conversations: mappedConversations.value,\n messages: mappedMessages.value,\n }[selectedTab.value];\n\n return (\n records?.length > 0 &&\n records.length === pages.value[selectedTab.value] * PER_PAGE\n );\n});\n\nconst showViewMore = computed(() => ({\n // Hide view more button if the number of records is less than 5\n contacts: mappedContacts.value?.length > 5 && isSelectedTabAll.value,\n conversations:\n mappedConversations.value?.length > 5 && isSelectedTabAll.value,\n messages: mappedMessages.value?.length > 5 && isSelectedTabAll.value,\n}));\n\nconst clearSearchResult = () => {\n pages.value = { contacts: 1, conversations: 1, messages: 1 };\n store.dispatch('conversationSearch/clearSearchResults');\n};\n\nconst onSearch = q => {\n query.value = q;\n clearSearchResult();\n if (!q) return;\n useTrack(CONVERSATION_EVENTS.SEARCH_CONVERSATION);\n store.dispatch('conversationSearch/fullSearch', { q, page: 1 });\n};\n\nconst onBack = () => {\n if (window.history.length > 2) {\n router.go(-1);\n } else {\n router.push({ name: 'home' });\n }\n clearSearchResult();\n};\n\nconst loadMore = () => {\n const SEARCH_ACTIONS = {\n contacts: 'conversationSearch/contactSearch',\n conversations: 'conversationSearch/conversationSearch',\n messages: 'conversationSearch/messageSearch',\n };\n\n if (uiFlags.value.isFetching || selectedTab.value === 'all') return;\n const tab = selectedTab.value;\n pages.value[tab] += 1;\n store.dispatch(SEARCH_ACTIONS[tab], {\n q: query.value,\n page: pages.value[tab],\n });\n};\n\nonMounted(() => {\n store.dispatch('conversationSearch/clearSearchResults');\n});\n\nonUnmounted(() => {\n query.value = '';\n store.dispatch('conversationSearch/clearSearchResults');\n});\n</script>\n\n<template>\n <div class=\"flex flex-col w-full h-full bg-n-background\">\n <div class=\"flex w-full p-4\">\n <NextButton\n :label=\"t('GENERAL_SETTINGS.BACK')\"\n icon=\"i-lucide-chevron-left\"\n faded\n primary\n sm\n @click=\"onBack\"\n />\n </div>\n <section class=\"flex flex-col flex-grow w-full h-full overflow-hidden\">\n <div class=\"w-full max-w-4xl mx-auto\">\n <div class=\"flex flex-col w-full px-4\">\n <SearchHeader @search=\"onSearch\" />\n <SearchTabs\n v-if=\"query\"\n :tabs=\"tabs\"\n :selected-tab=\"activeTabIndex\"\n @tab-change=\"tab => (selectedTab = tab)\"\n />\n </div>\n </div>\n <div class=\"flex-grow w-full h-full overflow-y-auto\">\n <div class=\"w-full max-w-4xl mx-auto px-4 pb-6\">\n <div v-if=\"showResultsSection\">\n <Policy\n :permissions=\"[...ROLES, CONTACT_PERMISSIONS]\"\n class=\"flex flex-col justify-center\"\n >\n <SearchResultContactsList\n v-if=\"filterContacts\"\n :is-fetching=\"uiFlags.contact.isFetching\"\n :contacts=\"contacts\"\n :query=\"query\"\n :show-title=\"isSelectedTabAll\"\n />\n <NextButton\n v-if=\"showViewMore.contacts\"\n :label=\"t(`SEARCH.VIEW_MORE`)\"\n icon=\"i-lucide-eye\"\n slate\n sm\n outline\n @click=\"selectedTab = 'contacts'\"\n />\n </Policy>\n\n <Policy\n :permissions=\"[...ROLES, ...CONVERSATION_PERMISSIONS]\"\n class=\"flex flex-col justify-center\"\n >\n <SearchResultMessagesList\n v-if=\"filterMessages\"\n :is-fetching=\"uiFlags.message.isFetching\"\n :messages=\"messages\"\n :query=\"query\"\n :show-title=\"isSelectedTabAll\"\n />\n <NextButton\n v-if=\"showViewMore.messages\"\n :label=\"t(`SEARCH.VIEW_MORE`)\"\n icon=\"i-lucide-eye\"\n slate\n sm\n outline\n @click=\"selectedTab = 'messages'\"\n />\n </Policy>\n\n <Policy\n :permissions=\"[...ROLES, ...CONVERSATION_PERMISSIONS]\"\n class=\"flex flex-col justify-center\"\n >\n <SearchResultConversationsList\n v-if=\"filterConversations\"\n :is-fetching=\"uiFlags.conversation.isFetching\"\n :conversations=\"conversations\"\n :query=\"query\"\n :show-title=\"isSelectedTabAll\"\n />\n <NextButton\n v-if=\"showViewMore.conversations\"\n :label=\"t(`SEARCH.VIEW_MORE`)\"\n icon=\"i-lucide-eye\"\n slate\n sm\n outline\n @click=\"selectedTab = 'conversations'\"\n />\n </Policy>\n\n <div v-if=\"showLoadMore\" class=\"flex justify-center mt-4 mb-6\">\n <NextButton\n v-if=\"!isSelectedTabAll\"\n :label=\"t(`SEARCH.LOAD_MORE`)\"\n icon=\"i-lucide-cloud-download\"\n slate\n sm\n faded\n @click=\"loadMore\"\n />\n </div>\n </div>\n <div\n v-else-if=\"showEmptySearchResults\"\n class=\"flex flex-col items-center justify-center px-4 py-6 mt-8 rounded-md\"\n >\n <fluent-icon icon=\"info\" size=\"16px\" class=\"text-n-slate-11\" />\n <p class=\"m-2 text-center text-n-slate-11\">\n {{ t('SEARCH.EMPTY_STATE_FULL', { query }) }}\n </p>\n </div>\n <div\n v-else-if=\"!query\"\n class=\"flex flex-col items-center justify-center px-4 py-6 mt-8 text-center rounded-md\"\n >\n <p class=\"text-center margin-bottom-0\">\n <fluent-icon icon=\"search\" size=\"24px\" class=\"text-n-slate-11\" />\n </p>\n <p class=\"m-2 text-center text-n-slate-11\">\n {{ t('SEARCH.EMPTY_STATE_DEFAULT') }}\n </p>\n </div>\n </div>\n </div>\n </section>\n </div>\n</template>\n","import { frontendURL } from '../../helper/URLHelper';\nimport {\n ROLES,\n CONVERSATION_PERMISSIONS,\n CONTACT_PERMISSIONS,\n} from 'dashboard/constants/permissions.js';\n\nimport SearchView from './components/SearchView.vue';\n\nexport const routes = [\n {\n path: frontendURL('accounts/:accountId/search'),\n name: 'search',\n meta: {\n permissions: [...ROLES, ...CONVERSATION_PERMISSIONS, CONTACT_PERMISSIONS],\n },\n component: SearchView,\n },\n];\n","<script setup>\nimport { ref, computed } from 'vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n options: {\n type: Array,\n required: true,\n },\n modelValue: {\n type: String,\n required: true,\n },\n label: {\n type: String,\n required: true,\n },\n});\n\nconst emit = defineEmits(['update:modelValue']);\n\nconst isOpen = ref(false);\n\nconst labelValue = computed(() => props.label);\n\nconst toggleMenu = () => {\n isOpen.value = !isOpen.value;\n};\n\nconst handleSelect = value => {\n emit('update:modelValue', value);\n isOpen.value = false;\n};\n</script>\n\n<template>\n <div\n v-on-clickaway=\"() => (isOpen = false)\"\n class=\"relative flex flex-col gap-1 w-fit\"\n >\n <Button\n icon=\"i-lucide-chevron-down\"\n size=\"sm\"\n trailing-icon\n color=\"slate\"\n variant=\"faded\"\n class=\"!w-fit\"\n :class=\"{ 'dark:!bg-n-alpha-2 !bg-n-slate-9/20': isOpen }\"\n :label=\"labelValue\"\n @click=\"toggleMenu\"\n />\n <div\n v-if=\"isOpen\"\n class=\"absolute ltr:left-full rtl:right-full select-none max-w-48 ltr:ml-1 rtl:mr-1 flex flex-col gap-1 bg-n-alpha-3 backdrop-blur-[100px] p-1 top-0 shadow-lg rounded-lg border border-n-weak\"\n >\n <Button\n v-for=\"option in options\"\n :key=\"option.value\"\n :label=\"option.label\"\n :icon=\"option.value === modelValue ? 'i-lucide-check' : ''\"\n size=\"sm\"\n variant=\"ghost\"\n color=\"slate\"\n trailing-icon\n class=\"!justify-end !px-2.5 !h-7\"\n :class=\"{ '!bg-n-alpha-2': option.value === modelValue }\"\n @click=\"handleSelect(option.value)\"\n />\n </div>\n </div>\n</template>\n","<script setup>\nimport { ref, computed, toRef } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport SelectMenu from 'dashboard/components-next/selectmenu/SelectMenu.vue';\n\nconst props = defineProps({\n activeSort: {\n type: String,\n default: 'last_activity_at',\n },\n activeOrdering: {\n type: String,\n default: '',\n },\n});\n\nconst emit = defineEmits(['update:sort']);\n\nconst { t } = useI18n();\n\nconst isMenuOpen = ref(false);\n\nconst sortMenus = [\n {\n label: t('CONTACTS_LAYOUT.HEADER.ACTIONS.SORT_BY.OPTIONS.NAME'),\n value: 'name',\n },\n {\n label: t('CONTACTS_LAYOUT.HEADER.ACTIONS.SORT_BY.OPTIONS.EMAIL'),\n value: 'email',\n },\n {\n label: t('CONTACTS_LAYOUT.HEADER.ACTIONS.SORT_BY.OPTIONS.PHONE_NUMBER'),\n value: 'phone_number',\n },\n {\n label: t('CONTACTS_LAYOUT.HEADER.ACTIONS.SORT_BY.OPTIONS.COMPANY'),\n value: 'company_name',\n },\n {\n label: t('CONTACTS_LAYOUT.HEADER.ACTIONS.SORT_BY.OPTIONS.COUNTRY'),\n value: 'country',\n },\n {\n label: t('CONTACTS_LAYOUT.HEADER.ACTIONS.SORT_BY.OPTIONS.CITY'),\n value: 'city',\n },\n {\n label: t('CONTACTS_LAYOUT.HEADER.ACTIONS.SORT_BY.OPTIONS.LAST_ACTIVITY'),\n value: 'last_activity_at',\n },\n {\n label: t('CONTACTS_LAYOUT.HEADER.ACTIONS.SORT_BY.OPTIONS.CREATED_AT'),\n value: 'created_at',\n },\n];\n\nconst orderingMenus = [\n {\n label: t('CONTACTS_LAYOUT.HEADER.ACTIONS.ORDER.OPTIONS.ASCENDING'),\n value: '',\n },\n {\n label: t('CONTACTS_LAYOUT.HEADER.ACTIONS.ORDER.OPTIONS.DESCENDING'),\n value: '-',\n },\n];\n\n// Converted the props to refs for better reactivity\nconst activeSort = toRef(props, 'activeSort');\n\nconst activeOrdering = toRef(props, 'activeOrdering');\n\nconst activeSortLabel = computed(() => {\n const selectedMenu = sortMenus.find(menu => menu.value === activeSort.value);\n return (\n selectedMenu?.label || t('CONTACTS_LAYOUT.HEADER.ACTIONS.SORT_BY.LABEL')\n );\n});\n\nconst activeOrderingLabel = computed(() => {\n const selectedMenu = orderingMenus.find(\n menu => menu.value === activeOrdering.value\n );\n return selectedMenu?.label || t('CONTACTS_LAYOUT.HEADER.ACTIONS.ORDER.LABEL');\n});\n\nconst handleSortChange = value => {\n emit('update:sort', { sort: value, order: props.activeOrdering });\n};\n\nconst handleOrderChange = value => {\n emit('update:sort', { sort: props.activeSort, order: value });\n};\n</script>\n\n<template>\n <div class=\"relative\">\n <Button\n icon=\"i-lucide-arrow-down-up\"\n color=\"slate\"\n size=\"sm\"\n variant=\"ghost\"\n :class=\"isMenuOpen ? 'bg-n-alpha-2' : ''\"\n @click=\"isMenuOpen = !isMenuOpen\"\n />\n <div\n v-if=\"isMenuOpen\"\n v-on-clickaway=\"() => (isMenuOpen = false)\"\n class=\"absolute top-full mt-1 ltr:right-0 rtl:left-0 flex flex-col gap-4 bg-n-alpha-3 backdrop-blur-[100px] border border-n-weak w-72 rounded-xl p-4\"\n >\n <div class=\"flex items-center justify-between gap-2\">\n <span class=\"text-sm text-n-slate-12\">\n {{ t('CONTACTS_LAYOUT.HEADER.ACTIONS.SORT_BY.LABEL') }}\n </span>\n <SelectMenu\n :model-value=\"activeSort\"\n :options=\"sortMenus\"\n :label=\"activeSortLabel\"\n @update:model-value=\"handleSortChange\"\n />\n </div>\n <div class=\"flex items-center justify-between gap-2\">\n <span class=\"text-sm text-n-slate-12\">\n {{ t('CONTACTS_LAYOUT.HEADER.ACTIONS.ORDER.LABEL') }}\n </span>\n <SelectMenu\n :model-value=\"activeOrdering\"\n :options=\"orderingMenus\"\n :label=\"activeOrderingLabel\"\n @update:model-value=\"handleOrderChange\"\n />\n </div>\n </div>\n </div>\n</template>\n","<script setup>\nimport { ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport DropdownMenu from 'dashboard/components-next/dropdown-menu/DropdownMenu.vue';\n\nconst emit = defineEmits(['add', 'import', 'export']);\n\nconst { t } = useI18n();\n\nconst contactMenuItems = [\n {\n label: t('CONTACTS_LAYOUT.HEADER.ACTIONS.CONTACT_CREATION.ADD_CONTACT'),\n action: 'add',\n value: 'add',\n icon: 'i-lucide-plus',\n },\n {\n label: t('CONTACTS_LAYOUT.HEADER.ACTIONS.CONTACT_CREATION.EXPORT_CONTACT'),\n action: 'export',\n value: 'export',\n icon: 'i-lucide-upload',\n },\n {\n label: t('CONTACTS_LAYOUT.HEADER.ACTIONS.CONTACT_CREATION.IMPORT_CONTACT'),\n action: 'import',\n value: 'import',\n icon: 'i-lucide-download',\n },\n];\nconst showActionsDropdown = ref(false);\n\nconst handleContactAction = ({ action }) => {\n if (action === 'add') {\n emit('add');\n } else if (action === 'import') {\n emit('import');\n } else if (action === 'export') {\n emit('export');\n }\n};\n</script>\n\n<template>\n <div v-on-clickaway=\"() => (showActionsDropdown = false)\" class=\"relative\">\n <Button\n icon=\"i-lucide-ellipsis-vertical\"\n color=\"slate\"\n variant=\"ghost\"\n size=\"sm\"\n :class=\"showActionsDropdown ? 'bg-n-alpha-2' : ''\"\n @click=\"showActionsDropdown = !showActionsDropdown\"\n />\n <DropdownMenu\n v-if=\"showActionsDropdown\"\n :menu-items=\"contactMenuItems\"\n class=\"ltr:right-0 rtl:left-0 mt-1 w-52 top-full\"\n @action=\"handleContactAction($event)\"\n />\n </div>\n</template>\n","<script setup>\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport Input from 'dashboard/components-next/input/Input.vue';\nimport Icon from 'dashboard/components-next/icon/Icon.vue';\nimport ContactSortMenu from './components/ContactSortMenu.vue';\nimport ContactMoreActions from './components/ContactMoreActions.vue';\nimport ComposeConversation from 'dashboard/components-next/NewConversation/ComposeConversation.vue';\n\ndefineProps({\n showSearch: {\n type: Boolean,\n default: true,\n },\n searchValue: {\n type: String,\n default: '',\n },\n headerTitle: {\n type: String,\n required: true,\n },\n buttonLabel: {\n type: String,\n default: '',\n },\n activeSort: {\n type: String,\n default: 'last_activity_at',\n },\n activeOrdering: {\n type: String,\n default: '',\n },\n isSegmentsView: {\n type: Boolean,\n default: false,\n },\n hasActiveFilters: {\n type: Boolean,\n default: false,\n },\n isLabelView: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits([\n 'search',\n 'filter',\n 'update:sort',\n 'add',\n 'import',\n 'export',\n 'createSegment',\n 'deleteSegment',\n]);\n</script>\n\n<template>\n <header class=\"sticky top-0 z-10\">\n <div\n class=\"flex items-center justify-between w-full h-20 px-6 gap-2 mx-auto max-w-[60rem]\"\n >\n <span class=\"text-xl font-medium truncate text-n-slate-12\">\n {{ headerTitle }}\n </span>\n <div class=\"flex items-center flex-shrink-0 gap-4\">\n <div v-if=\"showSearch\" class=\"flex items-center gap-2\">\n <Input\n :model-value=\"searchValue\"\n type=\"search\"\n :placeholder=\"$t('CONTACTS_LAYOUT.HEADER.SEARCH_PLACEHOLDER')\"\n :custom-input-class=\"[\n 'h-8 [&:not(.focus)]:!border-transparent bg-n-alpha-2 dark:bg-n-solid-1 ltr:!pl-8 !py-1 rtl:!pr-8',\n ]\"\n @input=\"emit('search', $event.target.value)\"\n >\n <template #prefix>\n <Icon\n icon=\"i-lucide-search\"\n class=\"absolute -translate-y-1/2 text-n-slate-11 size-4 top-1/2 ltr:left-2 rtl:right-2\"\n />\n </template>\n </Input>\n </div>\n <div class=\"flex items-center gap-2\">\n <div v-if=\"!isLabelView\" class=\"relative\">\n <Button\n id=\"toggleContactsFilterButton\"\n :icon=\"\n isSegmentsView ? 'i-lucide-pen-line' : 'i-lucide-list-filter'\n \"\n color=\"slate\"\n size=\"sm\"\n class=\"relative w-8\"\n variant=\"ghost\"\n @click=\"emit('filter')\"\n >\n <div\n v-if=\"hasActiveFilters && !isSegmentsView\"\n class=\"absolute top-0 right-0 w-2 h-2 rounded-full bg-n-brand\"\n />\n </Button>\n <slot name=\"filter\" />\n </div>\n <Button\n v-if=\"hasActiveFilters && !isSegmentsView && !isLabelView\"\n icon=\"i-lucide-save\"\n color=\"slate\"\n size=\"sm\"\n variant=\"ghost\"\n @click=\"emit('createSegment')\"\n />\n <Button\n v-if=\"isSegmentsView && !isLabelView\"\n icon=\"i-lucide-trash\"\n color=\"slate\"\n size=\"sm\"\n variant=\"ghost\"\n @click=\"emit('deleteSegment')\"\n />\n <ContactSortMenu\n :active-sort=\"activeSort\"\n :active-ordering=\"activeOrdering\"\n @update:sort=\"emit('update:sort', $event)\"\n />\n <ContactMoreActions\n @add=\"emit('add')\"\n @import=\"emit('import')\"\n @export=\"emit('export')\"\n />\n </div>\n <div class=\"w-px h-4 bg-n-strong\" />\n <ComposeConversation>\n <template #trigger=\"{ toggle }\">\n <Button :label=\"buttonLabel\" size=\"sm\" @click=\"toggle\" />\n </template>\n </ComposeConversation>\n </div>\n </div>\n </header>\n</template>\n","<script setup>\nimport { ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nconst props = defineProps({\n open: {\n type: Boolean,\n required: true,\n },\n options: {\n type: Array,\n required: true,\n },\n searchPlaceholder: {\n type: String,\n default: '',\n },\n emptyState: {\n type: String,\n default: '',\n },\n multiple: {\n type: Boolean,\n default: false,\n },\n selectedValues: {\n type: [String, Number, Array],\n default: () => [],\n },\n});\n\nconst emit = defineEmits(['select', 'search']);\n\nconst { t } = useI18n();\n\nconst searchValue = defineModel('searchValue', {\n type: String,\n default: '',\n});\n\nconst searchInput = ref(null);\n\nconst isSelected = option => {\n if (Array.isArray(props.selectedValues)) {\n return props.selectedValues.includes(option.value);\n }\n return option.value === props.selectedValues;\n};\n\nconst onInputSearch = event => {\n searchValue.value = event.target.value;\n emit('search', event.target.value);\n};\n\ndefineExpose({\n focus: () => searchInput.value?.focus(),\n});\n</script>\n\n<template>\n <div\n v-show=\"open\"\n class=\"absolute z-50 w-full mt-1 transition-opacity duration-200 border rounded-md shadow-lg bg-n-solid-1 border-n-strong\"\n >\n <div class=\"relative border-b border-n-strong\">\n <span class=\"absolute i-lucide-search top-2.5 size-4 left-3\" />\n <input\n ref=\"searchInput\"\n :value=\"searchValue\"\n type=\"search\"\n :placeholder=\"searchPlaceholder || t('COMBOBOX.SEARCH_PLACEHOLDER')\"\n class=\"reset-base w-full py-2 pl-10 pr-2 text-sm focus:outline-none border-none rounded-t-md bg-n-solid-1 text-slate-900 dark:text-slate-50\"\n @input=\"onInputSearch\"\n />\n </div>\n <ul\n class=\"py-1 mb-0 overflow-auto max-h-60\"\n role=\"listbox\"\n :aria-multiselectable=\"multiple\"\n >\n <li\n v-for=\"option in options\"\n :key=\"option.value\"\n class=\"flex items-center justify-between w-full gap-2 px-3 py-2 text-sm transition-colors duration-150 cursor-pointer hover:bg-n-alpha-2\"\n :class=\"{\n 'bg-n-alpha-2': isSelected(option),\n }\"\n role=\"option\"\n :aria-selected=\"isSelected(option)\"\n @click=\"emit('select', option)\"\n >\n <span\n :class=\"{\n 'font-medium': isSelected(option),\n }\"\n class=\"text-n-slate-12\"\n >\n {{ option.label }}\n </span>\n <span\n v-if=\"isSelected(option)\"\n class=\"flex-shrink-0 i-lucide-check size-4 text-n-slate-11\"\n />\n </li>\n <li\n v-if=\"options.length === 0\"\n class=\"px-3 py-2 text-sm text-slate-600 dark:text-slate-300\"\n >\n {{ emptyState || t('COMBOBOX.EMPTY_STATE') }}\n </li>\n </ul>\n </div>\n</template>\n","<script setup>\nimport { ref, computed, watch, nextTick } from 'vue';\nimport { OnClickOutside } from '@vueuse/components';\nimport { useI18n } from 'vue-i18n';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport ComboBoxDropdown from 'dashboard/components-next/combobox/ComboBoxDropdown.vue';\n\nconst props = defineProps({\n options: {\n type: Array,\n required: true,\n validator: value =>\n value.every(option => 'value' in option && 'label' in option),\n },\n placeholder: { type: String, default: '' },\n modelValue: { type: [String, Number], default: '' },\n disabled: { type: Boolean, default: false },\n searchPlaceholder: { type: String, default: '' },\n emptyState: { type: String, default: '' },\n message: { type: String, default: '' },\n hasError: { type: Boolean, default: false },\n useApiResults: { type: Boolean, default: false }, // useApiResults prop to determine if search is handled by API\n});\n\nconst emit = defineEmits(['update:modelValue', 'search']);\n\nconst { t } = useI18n();\n\nconst selectedValue = ref(props.modelValue);\nconst open = ref(false);\nconst search = ref('');\nconst dropdownRef = ref(null);\nconst comboboxRef = ref(null);\n\nconst filteredOptions = computed(() => {\n // For API search, don't filter options locally\n if (props.useApiResults && search.value) {\n return props.options;\n }\n\n // For local search, filter options based on search term\n const searchTerm = search.value.toLowerCase();\n return props.options.filter(option =>\n option.label.toLowerCase().includes(searchTerm)\n );\n});\nconst selectPlaceholder = computed(() => {\n return props.placeholder || t('COMBOBOX.PLACEHOLDER');\n});\nconst selectedLabel = computed(() => {\n const selected = props.options.find(\n option => option.value === selectedValue.value\n );\n return selected?.label ?? selectPlaceholder.value;\n});\n\nconst selectOption = option => {\n selectedValue.value = option.value;\n emit('update:modelValue', option.value);\n open.value = false;\n search.value = '';\n};\n\nconst toggleDropdown = () => {\n if (props.disabled) return;\n open.value = !open.value;\n if (open.value) {\n search.value = '';\n nextTick(() => dropdownRef.value?.focus());\n }\n};\n\nwatch(\n () => props.modelValue,\n newValue => {\n selectedValue.value = newValue;\n }\n);\n</script>\n\n<template>\n <div\n ref=\"comboboxRef\"\n class=\"relative w-full min-w-0\"\n :class=\"{\n 'cursor-not-allowed': disabled,\n 'group/combobox': !disabled,\n }\"\n @click.prevent\n >\n <OnClickOutside @trigger=\"open = false\">\n <Button\n variant=\"outline\"\n :color=\"hasError && !open ? 'ruby' : open ? 'blue' : 'slate'\"\n :label=\"selectedLabel\"\n trailing-icon\n :disabled=\"disabled\"\n class=\"justify-between w-full !px-3 !py-2.5 text-n-slate-12 font-normal group-hover/combobox:border-n-slate-6 [&:not(.focused)]:hover:enabled:outline-n-slate-6 [&:not(.focused)]:dark:hover:enabled:outline-n-slate-6 [&:not(.focused)]:dark:outline-n-weak focus:outline-n-brand\"\n :class=\"{ focused: open }\"\n :icon=\"open ? 'i-lucide-chevron-up' : 'i-lucide-chevron-down'\"\n @click=\"toggleDropdown\"\n />\n\n <ComboBoxDropdown\n ref=\"dropdownRef\"\n v-model:search-value=\"search\"\n :open=\"open\"\n :options=\"filteredOptions\"\n :search-placeholder=\"searchPlaceholder\"\n :empty-state=\"emptyState\"\n :selected-values=\"selectedValue\"\n @search=\"emit('search', $event)\"\n @select=\"selectOption\"\n />\n\n <p\n v-if=\"message\"\n class=\"mt-2 mb-0 text-xs truncate transition-all duration-500 ease-in-out\"\n :class=\"{\n 'text-n-ruby-9': hasError,\n 'text-n-slate-11': !hasError,\n }\"\n >\n {{ message }}\n </p>\n </OnClickOutside>\n </div>\n</template>\n","<script setup>\nimport { ref, computed, watch } from 'vue';\nimport parsePhoneNumber from 'libphonenumber-js';\nimport { useI18n } from 'vue-i18n';\nimport countries from 'shared/constants/countries.js';\nimport { useVuelidate } from '@vuelidate/core';\nimport { required, minLength, numeric } from '@vuelidate/validators';\nimport {\n getActiveCountryCode,\n getActiveDialCode,\n} from 'shared/components/PhoneInput/helper';\n\nimport Input from 'dashboard/components-next/input/Input.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport DropdownMenu from 'dashboard/components-next/dropdown-menu/DropdownMenu.vue';\n\nconst props = defineProps({\n placeholder: {\n type: String,\n default: '',\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n showBorder: {\n type: Boolean,\n default: true,\n },\n});\n\nconst modelValue = defineModel({\n type: [String, Number],\n default: '',\n});\n\nconst { t } = useI18n();\n\nconst showDropdown = ref(false);\nconst searchQuery = ref('');\nconst activeCountryCode = ref(getActiveCountryCode());\nconst activeDialCode = ref(getActiveDialCode());\nconst phoneNumber = ref('');\n\nconst rules = {\n phoneNumber: {\n minLength: minLength(2),\n numeric,\n },\n activeDialCode: {\n required,\n validDialCode: value => {\n return countries.some(country => country.dial_code === value);\n },\n },\n};\n\nconst v$ = useVuelidate(rules, {\n phoneNumber,\n activeDialCode,\n});\n\nconst hasError = computed(() => v$.value.$invalid);\n\nconst countryList = computed(() => {\n return countries.map(country => ({\n value: country.id,\n label: country.name,\n dialCode: country.dial_code,\n emoji: country.emoji,\n isSelected: String(activeCountryCode.value) === String(country.id),\n action: 'phoneNumberInput',\n }));\n});\n\nconst filteredCountries = computed(() => {\n const query = searchQuery.value.toLowerCase();\n return countryList.value.filter(({ label, dialCode, value }) =>\n [label, dialCode, value].some(field => field.toLowerCase().includes(query))\n );\n});\n\nconst activeCountry = computed(() =>\n activeCountryCode.value\n ? countryList.value.find(\n country => country.value === activeCountryCode.value\n )\n : ''\n);\n\nconst inputBorderClass = computed(() => {\n const errorClass =\n 'outline-n-ruby-8 dark:outline-n-ruby-8 hover:outline-n-ruby-9 dark:hover:outline-n-ruby-9 disabled:outline-n-ruby-8 dark:disabled:outline-n-ruby-8';\n const focusClass =\n 'has-[:focus]:outline-n-brand dark:has-[:focus]:outline-n-brand';\n\n if (!props.showBorder) {\n if (hasError.value) return errorClass;\n return `outline-transparent ${focusClass}`;\n }\n\n if (hasError.value) {\n return errorClass;\n }\n return `${focusClass} outline-n-weak dark:outline-n-weak hover:outline-n-slate-6 dark:hover:outline-n-slate-6 disabled:outline-n-weak dark:disabled:outline-n-weak`;\n});\n\nconst phoneNumberError = computed(() => {\n if (!v$.value.$dirty) return '';\n return v$.value.activeDialCode.$invalid\n ? t('PHONE_INPUT.DIAL_CODE_ERROR')\n : v$.value.phoneNumber.$invalid && t('PHONE_INPUT.ERROR');\n});\n\nconst emitPhoneNumber = value => {\n const newValue = value ? `${activeDialCode.value}${value}` : '';\n modelValue.value = newValue;\n};\n\nconst onSelectCountry = async ({ value, dialCode }) => {\n if (!value || !showDropdown.value) return;\n\n activeCountryCode.value = value;\n activeDialCode.value = dialCode;\n searchQuery.value = '';\n showDropdown.value = false;\n if (!v$.value.$invalid && phoneNumber.value) {\n emitPhoneNumber(phoneNumber.value);\n }\n};\n\nconst toggleCountryDropdown = () => {\n showDropdown.value = !showDropdown.value;\n};\n\nconst closeCountryDropdown = () => {\n showDropdown.value = false;\n};\n\nwatch(phoneNumber, async value => {\n await v$.value.$touch();\n if (!v$.value.$invalid) {\n emitPhoneNumber(value);\n }\n});\n\nwatch(\n modelValue,\n newValue => {\n const number = parsePhoneNumber(newValue);\n if (number) {\n if (number?.country) activeCountryCode.value = number.country;\n if (number?.countryCallingCode)\n activeDialCode.value = `+${number.countryCallingCode}`;\n phoneNumber.value = newValue.replace(`+${number.countryCallingCode}`, '');\n }\n },\n { immediate: true }\n);\n</script>\n\n<template>\n <div>\n <div\n v-on-clickaway=\"() => closeCountryDropdown()\"\n class=\"relative flex items-center h-8 transition-all duration-500 ease-in-out outline outline-1 outline-offset-[-1px] rounded-lg bg-n-alpha-black2\"\n :class=\"[inputBorderClass, { 'cursor-not-allowed opacity-50': disabled }]\"\n >\n <Input\n v-model=\"phoneNumber\"\n type=\"tel\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n custom-input-class=\"!border-0 !outline-none h-8 !py-0.5 !bg-transparent ltr:!pl-1 rtl:!pr-1\"\n class=\"w-full !flex-row\"\n >\n <template #prefix>\n <div class=\"flex items-center flex-shrink-0\">\n <Button\n :label=\"activeCountry?.emoji || ''\"\n color=\"slate\"\n size=\"sm\"\n :icon=\"\n !activeCountry ? 'i-lucide-globe' : 'i-lucide-chevron-down'\n \"\n trailing-icon\n :disabled=\"disabled\"\n class=\"!h-[1.875rem] top-1 ltr:ml-px rtl:mr-px !px-2 outline-0 !outline-none !rounded-lg border-0 ltr:!rounded-r-none rtl:!rounded-l-none\"\n @click=\"toggleCountryDropdown\"\n >\n <span\n v-if=\"activeCountry\"\n class=\"inline-flex justify-center text-sm whitespace-nowrap\"\n >\n {{ activeCountry?.emoji }}\n </span>\n </Button>\n <span\n v-if=\"activeCountry\"\n class=\"text-sm left-[38px] top-2.5 text-n-slate-11 ltr:!pl-1 rtl:!pr-1\"\n >\n {{ activeDialCode }}\n </span>\n </div>\n </template>\n </Input>\n <DropdownMenu\n v-if=\"showDropdown\"\n :menu-items=\"filteredCountries\"\n show-search\n class=\"z-[100] w-48 mt-2 overflow-y-auto ltr:left-0 rtl:right-0 top-full max-h-52\"\n @action=\"onSelectCountry\"\n />\n </div>\n <template v-if=\"phoneNumberError\">\n <p\n v-if=\"phoneNumberError\"\n class=\"min-w-0 mt-1 mb-0 text-xs truncate transition-all duration-500 ease-in-out text-n-ruby-9 dark:text-n-ruby-9\"\n >\n {{ phoneNumberError }}\n </p>\n </template>\n </div>\n</template>\n","<script setup>\nimport { computed, reactive, watch } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { required, email } from '@vuelidate/validators';\nimport { useVuelidate } from '@vuelidate/core';\nimport { splitName } from '@chatwoot/utils';\nimport countries from 'shared/constants/countries.js';\nimport Input from 'dashboard/components-next/input/Input.vue';\nimport ComboBox from 'dashboard/components-next/combobox/ComboBox.vue';\nimport Icon from 'dashboard/components-next/icon/Icon.vue';\nimport PhoneNumberInput from 'dashboard/components-next/phonenumberinput/PhoneNumberInput.vue';\n\nconst props = defineProps({\n contactData: {\n type: Object,\n default: null,\n },\n isDetailsView: {\n type: Boolean,\n default: false,\n },\n isNewContact: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits(['update']);\n\nconst { t } = useI18n();\n\nconst FORM_CONFIG = {\n FIRST_NAME: { field: 'firstName' },\n LAST_NAME: { field: 'lastName' },\n EMAIL_ADDRESS: { field: 'email' },\n PHONE_NUMBER: { field: 'phoneNumber' },\n CITY: { field: 'additionalAttributes.city' },\n COUNTRY: { field: 'additionalAttributes.countryCode' },\n BIO: { field: 'additionalAttributes.description' },\n COMPANY_NAME: { field: 'additionalAttributes.companyName' },\n};\n\nconst SOCIAL_CONFIG = {\n LINKEDIN: 'i-ri-linkedin-box-fill',\n FACEBOOK: 'i-ri-facebook-circle-fill',\n INSTAGRAM: 'i-ri-instagram-line',\n TWITTER: 'i-ri-twitter-x-fill',\n GITHUB: 'i-ri-github-fill',\n};\n\nconst defaultState = {\n id: 0,\n name: '',\n email: '',\n firstName: '',\n lastName: '',\n phoneNumber: '',\n additionalAttributes: {\n description: '',\n companyName: '',\n countryCode: '',\n country: '',\n city: '',\n socialProfiles: {\n facebook: '',\n github: '',\n instagram: '',\n linkedin: '',\n twitter: '',\n },\n },\n};\n\nconst state = reactive({ ...defaultState });\n\nconst validationRules = {\n firstName: { required },\n email: { email },\n};\n\nconst v$ = useVuelidate(validationRules, state);\n\nconst isFormInvalid = computed(() => v$.value.$invalid);\n\nconst prepareStateBasedOnProps = () => {\n if (props.isNewContact) {\n return; // Added to prevent state update for new contact form\n }\n\n const {\n id,\n name = '',\n email: emailAddress,\n phoneNumber,\n additionalAttributes = {},\n } = props.contactData || {};\n const { firstName, lastName } = splitName(name || '');\n const {\n description = '',\n companyName = '',\n countryCode = '',\n country = '',\n city = '',\n socialProfiles = {},\n } = additionalAttributes || {};\n\n Object.assign(state, {\n id,\n name,\n firstName,\n lastName,\n email: emailAddress,\n phoneNumber,\n additionalAttributes: {\n description,\n companyName,\n countryCode,\n country,\n city,\n socialProfiles,\n },\n });\n};\n\nconst countryOptions = computed(() =>\n countries.map(({ name, id }) => ({ label: name, value: id }))\n);\n\nconst editDetailsForm = computed(() =>\n Object.keys(FORM_CONFIG).map(key => ({\n key,\n placeholder: t(\n `CONTACTS_LAYOUT.CARD.EDIT_DETAILS_FORM.FORM.${key}.PLACEHOLDER`\n ),\n }))\n);\n\nconst socialProfilesForm = computed(() =>\n Object.entries(SOCIAL_CONFIG).map(([key, icon]) => ({\n key,\n placeholder: t(`CONTACTS_LAYOUT.CARD.SOCIAL_MEDIA.FORM.${key}.PLACEHOLDER`),\n icon,\n }))\n);\n\nconst isValidationField = key => {\n const field = FORM_CONFIG[key]?.field;\n return ['firstName', 'email'].includes(field);\n};\n\nconst getValidationKey = key => {\n return FORM_CONFIG[key]?.field;\n};\n\n// Creates a computed property for two-way form field binding\nconst getFormBinding = key => {\n const field = FORM_CONFIG[key]?.field;\n if (!field) return null;\n\n return computed({\n get: () => {\n // Handle firstName/lastName fields\n if (field === 'firstName' || field === 'lastName') {\n return state[field]?.toString() || '';\n }\n\n // Handle nested vs non-nested fields\n const [base, nested] = field.split('.');\n // Example: 'email' → state.email\n // Example: 'additionalAttributes.city' → state.additionalAttributes.city\n return (nested ? state[base][nested] : state[base])?.toString() || '';\n },\n\n set: async value => {\n // Handle name fields specially to maintain the combined 'name' field\n if (field === 'firstName' || field === 'lastName') {\n state[field] = value;\n // Example: firstName=\"John\", lastName=\"Doe\" → name=\"John Doe\"\n state.name = `${state.firstName} ${state.lastName}`.trim();\n } else {\n // Handle nested vs non-nested fields\n const [base, nested] = field.split('.');\n if (nested) {\n // Example: additionalAttributes.city = \"New York\"\n state[base][nested] = value;\n } else {\n // Example: email = \"test@example.com\"\n state[base] = value;\n }\n }\n\n const isFormValid = await v$.value.$validate();\n if (isFormValid) {\n const { firstName, lastName, ...stateWithoutNames } = state;\n emit('update', stateWithoutNames);\n }\n },\n });\n};\n\nconst getMessageType = key => {\n return isValidationField(key) && v$.value[getValidationKey(key)]?.$error\n ? 'error'\n : 'info';\n};\n\nconst handleCountrySelection = value => {\n const selectedCountry = countries.find(option => option.id === value);\n state.additionalAttributes.country = selectedCountry?.name || '';\n emit('update', state);\n};\n\nconst resetValidation = () => {\n v$.value.$reset();\n};\n\nconst resetForm = () => {\n Object.assign(state, defaultState);\n};\n\nwatch(() => props.contactData, prepareStateBasedOnProps, {\n immediate: true,\n deep: true,\n});\n\n// Expose state to parent component for avatar upload\ndefineExpose({\n state,\n resetValidation,\n isFormInvalid,\n resetForm,\n});\n</script>\n\n<template>\n <div class=\"flex flex-col gap-6\">\n <div class=\"flex flex-col items-start gap-2\">\n <span class=\"py-1 text-sm font-medium text-n-slate-12\">\n {{ t('CONTACTS_LAYOUT.CARD.EDIT_DETAILS_FORM.TITLE') }}\n </span>\n <div class=\"grid w-full grid-cols-1 gap-4 sm:grid-cols-2\">\n <template v-for=\"item in editDetailsForm\" :key=\"item.key\">\n <ComboBox\n v-if=\"item.key === 'COUNTRY'\"\n v-model=\"state.additionalAttributes.countryCode\"\n :options=\"countryOptions\"\n :placeholder=\"item.placeholder\"\n class=\"[&>div>button]:h-8\"\n :class=\"{\n '[&>div>button]:bg-n-alpha-black2 [&>div>button:not(.focused)]:!outline-transparent':\n !isDetailsView,\n '[&>div>button]:!bg-n-alpha-black2': isDetailsView,\n }\"\n @update:model-value=\"handleCountrySelection\"\n />\n <PhoneNumberInput\n v-else-if=\"item.key === 'PHONE_NUMBER'\"\n v-model=\"getFormBinding(item.key).value\"\n :placeholder=\"item.placeholder\"\n :show-border=\"isDetailsView\"\n />\n <Input\n v-else\n v-model=\"getFormBinding(item.key).value\"\n :placeholder=\"item.placeholder\"\n :message-type=\"getMessageType(item.key)\"\n :custom-input-class=\"`h-8 !pt-1 !pb-1 ${\n !isDetailsView\n ? '[&:not(.error,.focus)]:!outline-transparent'\n : ''\n }`\"\n class=\"w-full\"\n @input=\"\n isValidationField(item.key) &&\n v$[getValidationKey(item.key)].$touch()\n \"\n @blur=\"\n isValidationField(item.key) &&\n v$[getValidationKey(item.key)].$touch()\n \"\n />\n </template>\n </div>\n </div>\n <div class=\"flex flex-col items-start gap-2\">\n <span class=\"py-1 text-sm font-medium text-n-slate-12\">\n {{ t('CONTACTS_LAYOUT.CARD.SOCIAL_MEDIA.TITLE') }}\n </span>\n <div class=\"flex flex-wrap gap-2\">\n <div\n v-for=\"item in socialProfilesForm\"\n :key=\"item.key\"\n class=\"flex items-center h-8 gap-2 px-2 rounded-lg\"\n :class=\"{\n 'bg-n-alpha-2 dark:bg-n-solid-2': isDetailsView,\n 'bg-n-alpha-2 dark:bg-n-solid-3': !isDetailsView,\n }\"\n >\n <Icon\n :icon=\"item.icon\"\n class=\"flex-shrink-0 text-n-slate-11 size-4\"\n />\n <input\n v-model=\"\n state.additionalAttributes.socialProfiles[item.key.toLowerCase()]\n \"\n class=\"w-auto min-w-[100px] text-sm bg-transparent outline-none reset-base text-n-slate-12 dark:text-n-slate-12 placeholder:text-n-slate-10 dark:placeholder:text-n-slate-10\"\n :placeholder=\"item.placeholder\"\n :size=\"item.placeholder.length\"\n @input=\"emit('update', state)\"\n />\n </div>\n </div>\n </div>\n </div>\n</template>\n","<script setup>\nimport { ref, computed } from 'vue';\nimport { useMapGetter } from 'dashboard/composables/store';\nimport { useI18n } from 'vue-i18n';\n\nimport Dialog from 'dashboard/components-next/dialog/Dialog.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport ContactsForm from 'dashboard/components-next/Contacts/ContactsForm/ContactsForm.vue';\n\nconst emit = defineEmits(['create']);\n\nconst { t } = useI18n();\n\nconst dialogRef = ref(null);\nconst contactsFormRef = ref(null);\nconst contact = ref(null);\n\nconst uiFlags = useMapGetter('contacts/getUIFlags');\nconst isCreatingContact = computed(() => uiFlags.value.isCreating);\n\nconst createNewContact = contactItem => {\n contact.value = contactItem;\n};\n\nconst handleDialogConfirm = async () => {\n if (!contact.value) return;\n emit('create', contact.value);\n};\n\nconst onSuccess = () => {\n contactsFormRef.value?.resetForm();\n dialogRef.value.close();\n};\n\nconst closeDialog = () => {\n dialogRef.value.close();\n};\n\ndefineExpose({ dialogRef, contactsFormRef, onSuccess });\n</script>\n\n<template>\n <Dialog ref=\"dialogRef\" width=\"3xl\" @confirm=\"handleDialogConfirm\">\n <ContactsForm\n ref=\"contactsFormRef\"\n is-new-contact\n @update=\"createNewContact\"\n />\n <template #footer>\n <div class=\"flex items-center justify-between w-full gap-3\">\n <Button\n :label=\"t('DIALOG.BUTTONS.CANCEL')\"\n variant=\"link\"\n class=\"h-10 hover:!no-underline hover:text-n-brand\"\n @click=\"closeDialog\"\n />\n <Button\n type=\"submit\"\n :label=\"\n t('CONTACTS_LAYOUT.HEADER.ACTIONS.CONTACT_CREATION.SAVE_CONTACT')\n \"\n color=\"blue\"\n :disabled=\"contactsFormRef?.isFormInvalid\"\n :is-loading=\"isCreatingContact\"\n />\n </div>\n </template>\n </Dialog>\n</template>\n","<script setup>\nimport { ref, computed } from 'vue';\nimport { useMapGetter } from 'dashboard/composables/store';\nimport { useRoute } from 'vue-router';\nimport { useI18n } from 'vue-i18n';\nimport filterQueryGenerator from 'dashboard/helper/filterQueryGenerator';\n\nimport Dialog from 'dashboard/components-next/dialog/Dialog.vue';\n\nconst emit = defineEmits(['export']);\n\nconst { t } = useI18n();\nconst route = useRoute();\n\nconst dialogRef = ref(null);\n\nconst segments = useMapGetter('customViews/getContactCustomViews');\nconst appliedFilters = useMapGetter('contacts/getAppliedContactFilters');\nconst uiFlags = useMapGetter('contacts/getUIFlags');\nconst isExportingContact = computed(() => uiFlags.value.isExporting);\n\nconst activeSegmentId = computed(() => route.params.segmentId);\nconst activeSegment = computed(() =>\n activeSegmentId.value\n ? segments.value.find(view => view.id === Number(activeSegmentId.value))\n : undefined\n);\n\nconst exportContacts = async () => {\n let query = { payload: [] };\n\n if (activeSegmentId.value && activeSegment.value) {\n query = activeSegment.value.query;\n } else if (Object.keys(appliedFilters.value).length > 0) {\n query = filterQueryGenerator(appliedFilters.value);\n }\n\n emit('export', {\n ...query,\n label: route.params.label || '',\n });\n};\n\nconst handleDialogConfirm = async () => {\n await exportContacts();\n dialogRef.value?.close();\n};\n\ndefineExpose({ dialogRef });\n</script>\n\n<template>\n <Dialog\n ref=\"dialogRef\"\n :title=\"t('CONTACTS_LAYOUT.HEADER.ACTIONS.EXPORT_CONTACT.TITLE')\"\n :description=\"\n t('CONTACTS_LAYOUT.HEADER.ACTIONS.EXPORT_CONTACT.DESCRIPTION')\n \"\n :confirm-button-label=\"\n t('CONTACTS_LAYOUT.HEADER.ACTIONS.EXPORT_CONTACT.CONFIRM')\n \"\n :is-loading=\"isExportingContact\"\n :disable-confirm-button=\"isExportingContact\"\n @confirm=\"handleDialogConfirm\"\n />\n</template>\n","<script setup>\nimport { ref, computed } from 'vue';\nimport { useMapGetter } from 'dashboard/composables/store';\nimport { useI18n } from 'vue-i18n';\n\nimport Dialog from 'dashboard/components-next/dialog/Dialog.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst emit = defineEmits(['import']);\nconst { t } = useI18n();\n\nconst uiFlags = useMapGetter('contacts/getUIFlags');\nconst isImportingContact = computed(() => uiFlags.value.isImporting);\n\nconst dialogRef = ref(null);\nconst fileInput = ref(null);\n\nconst hasSelectedFile = ref(null);\nconst selectedFileName = ref('');\n\nconst csvUrl = '/downloads/import-contacts-sample.csv';\n\nconst handleFileClick = () => fileInput.value?.click();\n\nconst processFileName = fileName => {\n const lastDotIndex = fileName.lastIndexOf('.');\n const extension = fileName.slice(lastDotIndex);\n const baseName = fileName.slice(0, lastDotIndex);\n\n return baseName.length > 20\n ? `${baseName.slice(0, 20)}...${extension}`\n : fileName;\n};\n\nconst handleFileChange = () => {\n const file = fileInput.value?.files[0];\n hasSelectedFile.value = file;\n selectedFileName.value = file ? processFileName(file.name) : '';\n};\n\nconst handleRemoveFile = () => {\n hasSelectedFile.value = null;\n if (fileInput.value) {\n fileInput.value.value = null;\n }\n selectedFileName.value = '';\n};\n\nconst uploadFile = async () => {\n if (!hasSelectedFile.value) return;\n emit('import', hasSelectedFile.value);\n};\n\ndefineExpose({ dialogRef });\n</script>\n\n<template>\n <Dialog\n ref=\"dialogRef\"\n :title=\"t('CONTACTS_LAYOUT.HEADER.ACTIONS.IMPORT_CONTACT.TITLE')\"\n :confirm-button-label=\"\n t('CONTACTS_LAYOUT.HEADER.ACTIONS.IMPORT_CONTACT.IMPORT')\n \"\n :is-loading=\"isImportingContact\"\n :disable-confirm-button=\"isImportingContact\"\n @confirm=\"uploadFile\"\n >\n <template #description>\n <p class=\"mb-0 text-sm text-n-slate-11\">\n {{ t('CONTACTS_LAYOUT.HEADER.ACTIONS.IMPORT_CONTACT.DESCRIPTION') }}\n <a\n :href=\"csvUrl\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n download=\"import-contacts-sample.csv\"\n class=\"text-n-blue-text\"\n >\n {{\n t('CONTACTS_LAYOUT.HEADER.ACTIONS.IMPORT_CONTACT.DOWNLOAD_LABEL')\n }}\n </a>\n </p>\n </template>\n\n <div class=\"flex flex-col gap-2\">\n <div class=\"flex items-center gap-2\">\n <label class=\"text-sm text-n-slate-12 whitespace-nowrap\">\n {{ t('CONTACTS_LAYOUT.HEADER.ACTIONS.IMPORT_CONTACT.LABEL') }}\n </label>\n <div class=\"flex items-center justify-between w-full gap-2\">\n <span v-if=\"hasSelectedFile\" class=\"text-sm text-n-slate-12\">\n {{ selectedFileName }}\n </span>\n <Button\n v-if=\"!hasSelectedFile\"\n :label=\"\n t('CONTACTS_LAYOUT.HEADER.ACTIONS.IMPORT_CONTACT.CHOOSE_FILE')\n \"\n icon=\"i-lucide-upload\"\n color=\"slate\"\n variant=\"ghost\"\n size=\"sm\"\n class=\"!w-fit\"\n @click=\"handleFileClick\"\n />\n <div v-else class=\"flex items-center gap-1\">\n <Button\n :label=\"t('CONTACTS_LAYOUT.HEADER.ACTIONS.IMPORT_CONTACT.CHANGE')\"\n color=\"slate\"\n variant=\"ghost\"\n size=\"sm\"\n @click=\"handleFileClick\"\n />\n <div class=\"w-px h-3 bg-n-strong\" />\n <Button\n icon=\"i-lucide-trash\"\n color=\"slate\"\n variant=\"ghost\"\n size=\"sm\"\n @click=\"handleRemoveFile\"\n />\n </div>\n </div>\n </div>\n </div>\n <input\n ref=\"fileInput\"\n type=\"file\"\n accept=\"text/csv\"\n class=\"hidden\"\n @change=\"handleFileChange\"\n />\n </Dialog>\n</template>\n","<script setup>\nimport { ref, reactive, computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useMapGetter } from 'dashboard/composables/store';\nimport { useVuelidate } from '@vuelidate/core';\nimport { required } from '@vuelidate/validators';\n\nimport Dialog from 'dashboard/components-next/dialog/Dialog.vue';\nimport Input from 'dashboard/components-next/input/Input.vue';\n\nconst emit = defineEmits(['create']);\n\nconst FILTER_TYPE_CONTACT = 1;\n\nconst { t } = useI18n();\n\nconst uiFlags = useMapGetter('customViews/getUIFlags');\nconst isCreating = computed(() => uiFlags.value.isCreating);\n\nconst dialogRef = ref(null);\n\nconst state = reactive({\n name: '',\n});\n\nconst validationRules = {\n name: { required },\n};\n\nconst v$ = useVuelidate(validationRules, state);\n\nconst handleDialogConfirm = async () => {\n const isNameValid = await v$.value.$validate();\n if (!isNameValid) return;\n emit('create', {\n name: state.name,\n filter_type: FILTER_TYPE_CONTACT,\n });\n state.name = '';\n v$.value.$reset();\n};\n\ndefineExpose({ dialogRef });\n</script>\n\n<template>\n <Dialog\n ref=\"dialogRef\"\n :title=\"t('CONTACTS_LAYOUT.HEADER.ACTIONS.FILTERS.CREATE_SEGMENT.TITLE')\"\n :confirm-button-label=\"\n t('CONTACTS_LAYOUT.HEADER.ACTIONS.FILTERS.CREATE_SEGMENT.CONFIRM')\n \"\n :is-loading=\"isCreating\"\n :disable-confirm-button=\"isCreating\"\n @confirm=\"handleDialogConfirm\"\n >\n <Input\n v-model=\"state.name\"\n :label=\"t('CONTACTS_LAYOUT.HEADER.ACTIONS.FILTERS.CREATE_SEGMENT.LABEL')\"\n :placeholder=\"\n t('CONTACTS_LAYOUT.HEADER.ACTIONS.FILTERS.CREATE_SEGMENT.PLACEHOLDER')\n \"\n :message=\"\n v$.name.$error\n ? t('CONTACTS_LAYOUT.HEADER.ACTIONS.FILTERS.CREATE_SEGMENT.ERROR')\n : ''\n \"\n :message-type=\"v$.name.$error ? 'error' : 'info'\"\n />\n </Dialog>\n</template>\n","<script setup>\nimport { ref, computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useMapGetter } from 'dashboard/composables/store';\n\nimport Dialog from 'dashboard/components-next/dialog/Dialog.vue';\n\nconst emit = defineEmits(['delete']);\n\nconst FILTER_TYPE_CONTACT = 'contact';\n\nconst { t } = useI18n();\n\nconst uiFlags = useMapGetter('customViews/getUIFlags');\nconst isDeleting = computed(() => uiFlags.value.isDeleting);\n\nconst dialogRef = ref(null);\n\nconst handleDialogConfirm = async () => {\n emit('delete', {\n filterType: FILTER_TYPE_CONTACT,\n });\n};\n\ndefineExpose({ dialogRef });\n</script>\n\n<template>\n <Dialog\n ref=\"dialogRef\"\n type=\"alert\"\n :title=\"t('CONTACTS_LAYOUT.HEADER.ACTIONS.FILTERS.DELETE_SEGMENT.TITLE')\"\n :description=\"\n t('CONTACTS_LAYOUT.HEADER.ACTIONS.FILTERS.DELETE_SEGMENT.DESCRIPTION')\n \"\n :confirm-button-label=\"\n t('CONTACTS_LAYOUT.HEADER.ACTIONS.FILTERS.DELETE_SEGMENT.CONFIRM')\n \"\n :is-loading=\"isDeleting\"\n :disable-confirm-button=\"isDeleting\"\n @confirm=\"handleDialogConfirm\"\n />\n</template>\n","import { computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useOperators } from './operators';\nimport { useMapGetter } from 'dashboard/composables/store.js';\nimport {\n buildAttributesFilterTypes,\n CONTACT_ATTRIBUTES,\n} from './helper/filterHelper.js';\nimport countries from 'shared/constants/countries.js';\n\n/**\n * @typedef {Object} FilterOption\n * @property {string|number} id\n * @property {string} name\n * @property {import('vue').VNode} [icon]\n */\n\n/**\n * @typedef {Object} FilterOperator\n * @property {string} value\n * @property {string} label\n * @property {string} icon\n * @property {boolean} hasInput\n */\n\n/**\n * @typedef {Object} FilterType\n * @property {string} attributeKey - The attribute key\n * @property {string} value - This is a proxy for the attribute key used in FilterSelect\n * @property {string} attributeName - The attribute name used to display on the UI\n * @property {string} label - This is a proxy for the attribute name used in FilterSelect\n * @property {'multiSelect'|'searchSelect'|'plainText'|'date'|'booleanSelect'} inputType - The input type for the attribute\n * @property {FilterOption[]} [options] - The options available for the attribute if it is a multiSelect or singleSelect type\n * @property {'text'|'number'} dataType\n * @property {FilterOperator[]} filterOperators - The operators available for the attribute\n * @property {'standard'|'additional'|'customAttributes'} attributeModel\n */\n\n/**\n * @typedef {Object} FilterGroup\n * @property {string} name\n * @property {FilterType[]} attributes\n */\n\n/**\n * Composable that provides conversation filtering context\n * @returns {{ filterTypes: import('vue').ComputedRef<FilterType[]>, filterGroups: import('vue').ComputedRef<FilterGroup[]> }}\n */\nexport function useContactFilterContext() {\n const { t } = useI18n();\n\n const contactAttributes = useMapGetter('attributes/getContactAttributes');\n\n const {\n equalityOperators,\n containmentOperators,\n dateOperators,\n getOperatorTypes,\n } = useOperators();\n\n /**\n * @type {import('vue').ComputedRef<FilterType[]>}\n */\n const customFilterTypes = computed(() =>\n buildAttributesFilterTypes(\n contactAttributes.value,\n getOperatorTypes,\n 'contact'\n )\n );\n\n /**\n * @type {import('vue').ComputedRef<FilterType[]>}\n */\n const filterTypes = computed(() => [\n {\n attributeKey: CONTACT_ATTRIBUTES.NAME,\n value: CONTACT_ATTRIBUTES.NAME,\n attributeName: t('CONTACTS_LAYOUT.FILTER.NAME'),\n label: t('CONTACTS_LAYOUT.FILTER.NAME'),\n inputType: 'plainText',\n dataType: 'text',\n filterOperators: equalityOperators.value,\n attributeModel: 'standard',\n },\n {\n attributeKey: CONTACT_ATTRIBUTES.EMAIL,\n value: CONTACT_ATTRIBUTES.EMAIL,\n attributeName: t('CONTACTS_LAYOUT.FILTER.EMAIL'),\n label: t('CONTACTS_LAYOUT.FILTER.EMAIL'),\n inputType: 'plainText',\n dataType: 'text',\n filterOperators: containmentOperators.value,\n attributeModel: 'standard',\n },\n {\n attributeKey: CONTACT_ATTRIBUTES.PHONE_NUMBER,\n value: CONTACT_ATTRIBUTES.PHONE_NUMBER,\n attributeName: t('CONTACTS_LAYOUT.FILTER.PHONE_NUMBER'),\n label: t('CONTACTS_LAYOUT.FILTER.PHONE_NUMBER'),\n inputType: 'plainText',\n dataType: 'text',\n filterOperators: containmentOperators.value,\n attributeModel: 'standard',\n },\n {\n attributeKey: CONTACT_ATTRIBUTES.IDENTIFIER,\n value: CONTACT_ATTRIBUTES.IDENTIFIER,\n attributeName: t('CONTACTS_LAYOUT.FILTER.IDENTIFIER'),\n label: t('CONTACTS_LAYOUT.FILTER.IDENTIFIER'),\n inputType: 'plainText',\n dataType: 'number',\n filterOperators: equalityOperators.value,\n attributeModel: 'standard',\n },\n {\n attributeKey: CONTACT_ATTRIBUTES.COUNTRY_CODE,\n value: CONTACT_ATTRIBUTES.COUNTRY_CODE,\n attributeName: t('FILTER.ATTRIBUTES.COUNTRY_NAME'),\n label: t('FILTER.ATTRIBUTES.COUNTRY_NAME'),\n inputType: 'searchSelect',\n options: countries,\n dataType: 'number',\n filterOperators: equalityOperators.value,\n attributeModel: 'additional',\n },\n {\n attributeKey: CONTACT_ATTRIBUTES.CITY,\n value: CONTACT_ATTRIBUTES.CITY,\n attributeName: t('CONTACTS_LAYOUT.FILTER.CITY'),\n label: t('CONTACTS_LAYOUT.FILTER.CITY'),\n inputType: 'plainText',\n dataType: 'text',\n filterOperators: containmentOperators.value,\n attributeModel: 'standard',\n },\n {\n attributeKey: CONTACT_ATTRIBUTES.CREATED_AT,\n value: CONTACT_ATTRIBUTES.CREATED_AT,\n attributeName: t('CONTACTS_LAYOUT.FILTER.CREATED_AT'),\n label: t('CONTACTS_LAYOUT.FILTER.CREATED_AT'),\n inputType: 'date',\n dataType: 'text',\n filterOperators: dateOperators.value,\n attributeModel: 'standard',\n },\n {\n attributeKey: CONTACT_ATTRIBUTES.LAST_ACTIVITY_AT,\n value: CONTACT_ATTRIBUTES.LAST_ACTIVITY_AT,\n attributeName: t('CONTACTS_LAYOUT.FILTER.LAST_ACTIVITY'),\n label: t('CONTACTS_LAYOUT.FILTER.LAST_ACTIVITY'),\n inputType: 'date',\n dataType: 'text',\n filterOperators: dateOperators.value,\n attributeModel: 'standard',\n },\n {\n attributeKey: CONTACT_ATTRIBUTES.REFERER,\n value: CONTACT_ATTRIBUTES.REFERER,\n attributeName: t('CONTACTS_LAYOUT.FILTER.REFERER_LINK'),\n label: t('CONTACTS_LAYOUT.FILTER.REFERER_LINK'),\n inputType: 'plainText',\n dataType: 'text',\n filterOperators: containmentOperators.value,\n attributeModel: 'standard',\n },\n {\n attributeKey: CONTACT_ATTRIBUTES.BLOCKED,\n value: CONTACT_ATTRIBUTES.BLOCKED,\n attributeName: t('CONTACTS_LAYOUT.FILTER.BLOCKED'),\n label: t('CONTACTS_LAYOUT.FILTER.BLOCKED'),\n inputType: 'searchSelect',\n options: [\n {\n id: 'true',\n name: t('CONTACTS_LAYOUT.FILTER.BLOCKED_TRUE'),\n },\n {\n id: 'false',\n name: t('CONTACTS_LAYOUT.FILTER.BLOCKED_FALSE'),\n },\n ],\n dataType: 'text',\n filterOperators: equalityOperators.value,\n attributeModel: 'standard',\n },\n ...customFilterTypes.value,\n ]);\n\n return { filterTypes };\n}\n","<script setup>\nimport { useTemplateRef, onBeforeUnmount, computed, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useTrack } from 'dashboard/composables';\nimport { useStore } from 'dashboard/composables/store';\nimport { vOnClickOutside } from '@vueuse/components';\nimport { CONTACTS_EVENTS } from 'dashboard/helper/AnalyticsHelper/events';\nimport { useContactFilterContext } from './contactProvider.js';\nimport { useSnakeCase } from 'dashboard/composables/useTransformKeys';\n\nimport Button from 'next/button/Button.vue';\nimport ConditionRow from './ConditionRow.vue';\n\nconst props = defineProps({\n isSegmentView: { type: Boolean, default: false },\n segmentName: { type: String, default: '' },\n});\n\nconst emit = defineEmits([\n 'applyFilter',\n 'updateSegment',\n 'close',\n 'clearFilters',\n]);\nconst { filterTypes } = useContactFilterContext();\n\nconst filters = defineModel({\n type: Array,\n default: [],\n});\nconst segmentNameLocal = ref(props.segmentName);\n\nconst DEFAULT_FILTER = {\n attributeKey: 'name',\n filterOperator: 'equal_to',\n values: '',\n queryOperator: 'and',\n attributeModel: 'standard',\n};\n\nconst { t } = useI18n();\nconst store = useStore();\n\nconst resetFilter = () => {\n emit('clearFilters');\n filters.value = [{ ...DEFAULT_FILTER }];\n};\n\nconst removeFilter = index => {\n if (filters.value.length === 1) {\n resetFilter();\n } else {\n filters.value.splice(index, 1);\n }\n};\n\nconst addFilter = () => {\n filters.value.push({ ...DEFAULT_FILTER });\n};\n\nconst conditionsRef = useTemplateRef('conditionsRef');\n\nconst isConditionsValid = () => {\n return conditionsRef.value.every(condition => condition.validate());\n};\n\nconst updateSavedSegment = () => {\n if (isConditionsValid()) {\n emit('updateSegment', filters.value, segmentNameLocal.value);\n }\n};\n\nfunction validateAndSubmit() {\n if (!isConditionsValid()) return;\n\n store.dispatch(\n 'contacts/setContactFilters',\n useSnakeCase(JSON.parse(JSON.stringify(filters.value)))\n );\n emit('applyFilter', filters.value);\n useTrack(CONTACTS_EVENTS.APPLY_FILTER, {\n appliedFilters: filters.value.map(filter => ({\n key: filter.attributeKey,\n operator: filter.filterOperator,\n queryOperator: filter.queryOperator,\n })),\n });\n}\n\nconst filterModalHeaderTitle = computed(() => {\n return !props.isSegmentView\n ? t('CONTACTS_LAYOUT.FILTER.TITLE')\n : t('CONTACTS_LAYOUT.FILTER.EDIT_SEGMENT');\n});\n\nonBeforeUnmount(() => emit('close'));\nconst outsideClickHandler = [\n () => emit('close'),\n { ignore: ['#toggleContactsFilterButton'] },\n];\n</script>\n\n<template>\n <div\n v-on-click-outside=\"outsideClickHandler\"\n class=\"z-40 max-w-3xl lg:w-[750px] overflow-visible w-full border border-n-weak bg-n-alpha-3 backdrop-blur-[100px] shadow-lg rounded-xl p-6 grid gap-6\"\n >\n <h3 class=\"text-base font-medium leading-6 text-n-slate-12\">\n {{ filterModalHeaderTitle }}\n </h3>\n <div v-if=\"props.isSegmentView\">\n <label class=\"pb-6 border-b border-n-weak\">\n <div class=\"mb-2 text-sm text-n-slate-11\">\n {{ $t('CONTACTS_LAYOUT.FILTER.SEGMENT.LABEL') }}\n </div>\n <input\n v-model=\"segmentNameLocal\"\n class=\"py-1.5 px-3 text-n-slate-12 bg-n-alpha-1 text-sm rounded-lg reset-base w-full\"\n :placeholder=\"t('CONTACTS_LAYOUT.FILTER.SEGMENT.INPUT_PLACEHOLDER')\"\n />\n </label>\n </div>\n <ul class=\"grid gap-4 list-none\">\n <template v-for=\"(filter, index) in filters\" :key=\"filter.id\">\n <ConditionRow\n v-if=\"index === 0\"\n ref=\"conditionsRef\"\n :key=\"`filter-${filter.attributeKey}-0`\"\n v-model:attribute-key=\"filter.attributeKey\"\n v-model:filter-operator=\"filter.filterOperator\"\n v-model:values=\"filter.values\"\n :filter-types=\"filterTypes\"\n :show-query-operator=\"false\"\n @remove=\"removeFilter(index)\"\n />\n <ConditionRow\n v-else\n :key=\"`filter-${filter.attributeKey}-${index}`\"\n ref=\"conditionsRef\"\n v-model:attribute-key=\"filter.attributeKey\"\n v-model:filter-operator=\"filter.filterOperator\"\n v-model:query-operator=\"filters[index - 1].queryOperator\"\n v-model:values=\"filter.values\"\n show-query-operator\n :filter-types=\"filterTypes\"\n @remove=\"removeFilter(index)\"\n />\n </template>\n </ul>\n <div class=\"flex justify-between gap-2\">\n <Button sm ghost blue @click=\"addFilter\">\n {{ $t('CONTACTS_LAYOUT.FILTER.BUTTONS.ADD_FILTER') }}\n </Button>\n <div class=\"flex gap-2\">\n <Button sm faded slate @click=\"resetFilter\">\n {{ $t('CONTACTS_LAYOUT.FILTER.BUTTONS.CLEAR_FILTERS') }}\n </Button>\n <Button\n v-if=\"isSegmentView\"\n sm\n solid\n blue\n :disabled=\"!segmentNameLocal\"\n @click=\"updateSavedSegment\"\n >\n {{ $t('CONTACTS_LAYOUT.FILTER.BUTTONS.UPDATE_SEGMENT') }}\n </Button>\n <Button v-else sm solid blue @click=\"validateAndSubmit\">\n {{ $t('CONTACTS_LAYOUT.FILTER.BUTTONS.APPLY_FILTERS') }}\n </Button>\n </div>\n </div>\n </div>\n</template>\n","<script setup>\nimport { ref, computed, unref } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useStore, useMapGetter } from 'dashboard/composables/store';\nimport { useRouter } from 'vue-router';\nimport { useAlert, useTrack } from 'dashboard/composables';\nimport { CONTACTS_EVENTS } from 'dashboard/helper/AnalyticsHelper/events';\nimport filterQueryGenerator from 'dashboard/helper/filterQueryGenerator';\nimport contactFilterItems from 'dashboard/routes/dashboard/contacts/contactFilterItems';\nimport {\n DuplicateContactException,\n ExceptionWithMessage,\n} from 'shared/helpers/CustomErrors';\nimport { generateValuesForEditCustomViews } from 'dashboard/helper/customViewsHelper';\nimport countries from 'shared/constants/countries';\nimport {\n useCamelCase,\n useSnakeCase,\n} from 'dashboard/composables/useTransformKeys';\n\nimport ContactsHeader from 'dashboard/components-next/Contacts/ContactsHeader/ContactHeader.vue';\nimport CreateNewContactDialog from 'dashboard/components-next/Contacts/ContactsForm/CreateNewContactDialog.vue';\nimport ContactExportDialog from 'dashboard/components-next/Contacts/ContactsForm/ContactExportDialog.vue';\nimport ContactImportDialog from 'dashboard/components-next/Contacts/ContactsForm/ContactImportDialog.vue';\nimport CreateSegmentDialog from 'dashboard/components-next/Contacts/ContactsForm/CreateSegmentDialog.vue';\nimport DeleteSegmentDialog from 'dashboard/components-next/Contacts/ContactsForm/DeleteSegmentDialog.vue';\nimport ContactsFilter from 'dashboard/components-next/filter/ContactsFilter.vue';\n\nconst props = defineProps({\n showSearch: { type: Boolean, default: true },\n searchValue: { type: String, default: '' },\n activeSort: { type: String, default: 'last_activity_at' },\n activeOrdering: { type: String, default: '' },\n headerTitle: { type: String, default: '' },\n segmentsId: { type: [String, Number], default: 0 },\n activeSegment: { type: Object, default: null },\n hasAppliedFilters: { type: Boolean, default: false },\n isLabelView: { type: Boolean, default: false },\n});\n\nconst emit = defineEmits([\n 'update:sort',\n 'search',\n 'applyFilter',\n 'clearFilters',\n]);\n\nconst { t } = useI18n();\nconst store = useStore();\nconst router = useRouter();\n\nconst createNewContactDialogRef = ref(null);\nconst contactExportDialogRef = ref(null);\nconst contactImportDialogRef = ref(null);\nconst createSegmentDialogRef = ref(null);\nconst deleteSegmentDialogRef = ref(null);\n\nconst showFiltersModal = ref(false);\nconst appliedFilter = ref([]);\nconst segmentsQuery = ref({});\n\nconst appliedFilters = useMapGetter('contacts/getAppliedContactFiltersV4');\nconst contactAttributes = useMapGetter('attributes/getContactAttributes');\nconst hasActiveSegments = computed(\n () => props.activeSegment && props.segmentsId !== 0\n);\nconst activeSegmentName = computed(() => props.activeSegment?.name);\n\nconst openCreateNewContactDialog = async () => {\n await createNewContactDialogRef.value?.contactsFormRef.resetValidation();\n createNewContactDialogRef.value?.dialogRef.open();\n};\nconst openContactImportDialog = () =>\n contactImportDialogRef.value?.dialogRef.open();\nconst openContactExportDialog = () =>\n contactExportDialogRef.value?.dialogRef.open();\nconst openCreateSegmentDialog = () =>\n createSegmentDialogRef.value?.dialogRef.open();\nconst openDeleteSegmentDialog = () =>\n deleteSegmentDialogRef.value?.dialogRef.open();\n\nconst onCreate = async contact => {\n try {\n await store.dispatch('contacts/create', contact);\n createNewContactDialogRef.value?.onSuccess();\n useAlert(\n t('CONTACTS_LAYOUT.HEADER.ACTIONS.CONTACT_CREATION.SUCCESS_MESSAGE')\n );\n } catch (error) {\n const i18nPrefix = 'CONTACTS_LAYOUT.HEADER.ACTIONS.CONTACT_CREATION';\n if (error instanceof DuplicateContactException) {\n if (error.data.includes('email')) {\n useAlert(t(`${i18nPrefix}.EMAIL_ADDRESS_DUPLICATE`));\n } else if (error.data.includes('phone_number')) {\n useAlert(t(`${i18nPrefix}.PHONE_NUMBER_DUPLICATE`));\n }\n } else if (error instanceof ExceptionWithMessage) {\n useAlert(error.data);\n } else {\n useAlert(t(`${i18nPrefix}.ERROR_MESSAGE`));\n }\n }\n};\n\nconst onImport = async file => {\n try {\n await store.dispatch('contacts/import', file);\n contactImportDialogRef.value?.dialogRef.close();\n useAlert(\n t('CONTACTS_LAYOUT.HEADER.ACTIONS.IMPORT_CONTACT.SUCCESS_MESSAGE')\n );\n useTrack(CONTACTS_EVENTS.IMPORT_SUCCESS);\n } catch (error) {\n useAlert(\n error.message ??\n t('CONTACTS_LAYOUT.HEADER.ACTIONS.IMPORT_CONTACT.ERROR_MESSAGE')\n );\n useTrack(CONTACTS_EVENTS.IMPORT_FAILURE);\n }\n};\n\nconst onExport = async query => {\n try {\n await store.dispatch('contacts/export', query);\n useAlert(\n t('CONTACTS_LAYOUT.HEADER.ACTIONS.EXPORT_CONTACT.SUCCESS_MESSAGE')\n );\n } catch (error) {\n useAlert(\n error.message ||\n t('CONTACTS_LAYOUT.HEADER.ACTIONS.EXPORT_CONTACT.ERROR_MESSAGE')\n );\n }\n};\n\nconst onCreateSegment = async payload => {\n try {\n const payloadData = {\n ...payload,\n query: segmentsQuery.value,\n };\n const response = await store.dispatch('customViews/create', payloadData);\n createSegmentDialogRef.value?.dialogRef.close();\n useAlert(\n t('CONTACTS_LAYOUT.HEADER.ACTIONS.FILTERS.CREATE_SEGMENT.SUCCESS_MESSAGE')\n );\n const segmentId = response?.data?.id;\n if (!segmentId) return;\n // Navigate to the created segment\n router.push({\n name: 'contacts_dashboard_segments_index',\n params: { segmentId },\n query: { page: 1 },\n });\n } catch {\n useAlert(\n t('CONTACTS_LAYOUT.HEADER.ACTIONS.FILTERS.CREATE_SEGMENT.ERROR_MESSAGE')\n );\n }\n};\n\nconst onDeleteSegment = async payload => {\n try {\n await store.dispatch('customViews/delete', {\n id: Number(props.segmentsId),\n ...payload,\n });\n router.push({\n name: 'contacts_dashboard_index',\n query: {\n page: 1,\n },\n });\n deleteSegmentDialogRef.value?.dialogRef.close();\n useAlert(\n t('CONTACTS_LAYOUT.HEADER.ACTIONS.FILTERS.DELETE_SEGMENT.SUCCESS_MESSAGE')\n );\n } catch (error) {\n useAlert(\n t('CONTACTS_LAYOUT.HEADER.ACTIONS.FILTERS.DELETE_SEGMENT.ERROR_MESSAGE')\n );\n }\n};\n\nconst closeAdvanceFiltersModal = () => {\n showFiltersModal.value = false;\n appliedFilter.value = [];\n};\n\nconst clearFilters = async () => {\n emit('clearFilters');\n};\n\nconst onApplyFilter = async payload => {\n payload = useSnakeCase(payload);\n segmentsQuery.value = filterQueryGenerator(payload);\n emit('applyFilter', filterQueryGenerator(payload));\n showFiltersModal.value = false;\n};\n\nconst onUpdateSegment = async (payload, segmentName) => {\n payload = useSnakeCase(payload);\n const payloadData = {\n ...props.activeSegment,\n name: segmentName,\n query: filterQueryGenerator(payload),\n };\n await store.dispatch('customViews/update', payloadData);\n closeAdvanceFiltersModal();\n};\n\nconst setParamsForEditSegmentModal = () => {\n return {\n countries,\n filterTypes: contactFilterItems,\n allCustomAttributes: useSnakeCase(contactAttributes.value),\n };\n};\n\nconst initializeSegmentToFilterModal = segment => {\n const query = unref(segment)?.query?.payload;\n if (!Array.isArray(query)) return;\n\n const newFilters = query.map(filter => {\n const transformed = useCamelCase(filter);\n const values = Array.isArray(transformed.values)\n ? generateValuesForEditCustomViews(\n useSnakeCase(filter),\n setParamsForEditSegmentModal()\n )\n : [];\n\n return {\n attributeKey: transformed.attributeKey,\n attributeModel: transformed.attributeModel,\n customAttributeType: transformed.customAttributeType,\n filterOperator: transformed.filterOperator,\n queryOperator: transformed.queryOperator ?? 'and',\n values,\n };\n });\n\n appliedFilter.value = [...appliedFilter.value, ...newFilters];\n};\n\nconst onToggleFilters = () => {\n appliedFilter.value = [];\n if (hasActiveSegments.value) {\n initializeSegmentToFilterModal(props.activeSegment);\n } else {\n appliedFilter.value = props.hasAppliedFilters\n ? [...appliedFilters.value]\n : [\n {\n attributeKey: 'name',\n filterOperator: 'equal_to',\n values: '',\n queryOperator: 'and',\n attributeModel: 'standard',\n },\n ];\n }\n showFiltersModal.value = true;\n};\n\ndefineExpose({\n onToggleFilters,\n});\n</script>\n\n<template>\n <ContactsHeader\n :show-search=\"showSearch\"\n :search-value=\"searchValue\"\n :active-sort=\"activeSort\"\n :active-ordering=\"activeOrdering\"\n :header-title=\"headerTitle\"\n :is-segments-view=\"hasActiveSegments\"\n :is-label-view=\"isLabelView\"\n :has-active-filters=\"hasAppliedFilters\"\n :button-label=\"t('CONTACTS_LAYOUT.HEADER.MESSAGE_BUTTON')\"\n @search=\"emit('search', $event)\"\n @update:sort=\"emit('update:sort', $event)\"\n @add=\"openCreateNewContactDialog\"\n @import=\"openContactImportDialog\"\n @export=\"openContactExportDialog\"\n @filter=\"onToggleFilters\"\n @create-segment=\"openCreateSegmentDialog\"\n @delete-segment=\"openDeleteSegmentDialog\"\n >\n <template #filter>\n <ContactsFilter\n v-if=\"showFiltersModal\"\n v-model=\"appliedFilter\"\n :segment-name=\"activeSegmentName\"\n :is-segment-view=\"hasActiveSegments\"\n class=\"absolute mt-1 ltr:right-0 rtl:left-0 top-full\"\n @apply-filter=\"onApplyFilter\"\n @update-segment=\"onUpdateSegment\"\n @close=\"closeAdvanceFiltersModal\"\n @clear-filters=\"clearFilters\"\n />\n </template>\n </ContactsHeader>\n\n <CreateNewContactDialog ref=\"createNewContactDialogRef\" @create=\"onCreate\" />\n <ContactExportDialog ref=\"contactExportDialogRef\" @export=\"onExport\" />\n <ContactImportDialog ref=\"contactImportDialogRef\" @import=\"onImport\" />\n <CreateSegmentDialog ref=\"createSegmentDialogRef\" @create=\"onCreateSegment\" />\n <DeleteSegmentDialog ref=\"deleteSegmentDialogRef\" @delete=\"onDeleteSegment\" />\n</template>\n","<script setup>\nimport { replaceUnderscoreWithSpace } from './helper/filterHelper.js';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\n\ndefineProps({\n appliedFilters: { type: Array, default: () => [] },\n maxVisibleFilters: { type: Number, default: 2 },\n clearButtonLabel: { type: String, default: '' },\n moreFiltersLabel: { type: String, default: '' },\n showClearButton: { type: Boolean, default: true },\n});\n\nconst emit = defineEmits(['clearFilters', 'openFilter']);\n\nconst shouldCapitalizeFirstLetter = key => {\n const lowercaseKeys = ['email'];\n return !lowercaseKeys.includes(key);\n};\n\nconst formatOperatorLabel = operator => {\n const operators = {\n equal_to: 'is',\n not_equal_to: 'is not',\n contains: 'contains',\n does_not_contain: 'does not contain',\n is_present: 'is present',\n is_not_present: 'is not present',\n is_greater_than: 'is greater than',\n is_less_than: 'is less than',\n days_before: 'days before',\n };\n return operators[operator] || replaceUnderscoreWithSpace(operator);\n};\n\nconst formatFilterValue = value => {\n if (!value) return '';\n if (Array.isArray(value)) {\n return value.join(', ');\n }\n if (typeof value === 'object' && value.name) {\n return value.name;\n }\n return value;\n};\n</script>\n\n<template>\n <div class=\"flex flex-wrap items-center w-full gap-2 mx-auto\">\n <template v-for=\"(filter, index) in appliedFilters\" :key=\"index\">\n <div\n v-if=\"index < maxVisibleFilters\"\n class=\"inline-flex items-center gap-2 h-7\"\n >\n <div\n class=\"flex items-center h-full min-w-0 gap-1 px-2 py-1 text-xs border rounded-lg hover:bg-n-solid-2 max-w-72 border-n-weak hover:cursor-pointer\"\n @click=\"emit('openFilter')\"\n >\n <span\n class=\"lowercase whitespace-nowrap first-letter:capitalize text-n-slate-12\"\n >\n {{ replaceUnderscoreWithSpace(filter.attributeKey) }}\n </span>\n <span class=\"px-1 text-xs text-n-slate-10 whitespace-nowrap\">\n {{ formatOperatorLabel(filter.filterOperator) }}\n </span>\n <span\n v-if=\"filter.values\"\n class=\"lowercase truncate text-n-slate-12\"\n :class=\"{\n 'first-letter:capitalize': shouldCapitalizeFirstLetter(\n filter.attributeKey\n ),\n }\"\n >\n {{ formatFilterValue(filter.values) }}\n </span>\n </div>\n <template\n v-if=\"\n index < maxVisibleFilters - 1 && index < appliedFilters.length - 1\n \"\n >\n <span\n class=\"content-center h-full px-1 text-xs font-medium uppercase rounded-lg text-n-slate-10\"\n >\n {{ filter.queryOperator }}\n </span>\n </template>\n </div>\n </template>\n <div\n v-if=\"appliedFilters.length > maxVisibleFilters\"\n class=\"inline-flex items-center content-center px-1 text-xs rounded-lg text-n-slate-10 hover:text-n-slate-11 h-7 hover:cursor-pointer\"\n @click=\"emit('openFilter')\"\n >\n {{ moreFiltersLabel }}\n </div>\n <div v-if=\"showClearButton\" class=\"w-px h-3 rounded-lg bg-n-strong\" />\n <Button\n v-if=\"showClearButton\"\n :label=\"clearButtonLabel\"\n size=\"xs\"\n class=\"!px-1\"\n variant=\"ghost\"\n @click=\"emit('clearFilters')\"\n />\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useRoute } from 'vue-router';\nimport { useMapGetter } from 'dashboard/composables/store';\nimport { useCamelCase } from 'dashboard/composables/useTransformKeys';\n\nimport ActiveFilterPreview from 'dashboard/components-next/filter/ActiveFilterPreview.vue';\n\nconst props = defineProps({\n activeSegment: { type: Object, default: null },\n});\n\nconst emit = defineEmits(['clearFilters', 'openFilter']);\n\nconst { t } = useI18n();\nconst route = useRoute();\n\nconst appliedFilters = useMapGetter('contacts/getAppliedContactFiltersV4');\nconst activeSegmentId = computed(() => route.params.segmentId);\n\nconst activeSegmentQuery = computed(() => {\n const query = props.activeSegment?.query?.payload;\n if (!Array.isArray(query)) return [];\n\n const newFilters = query.map(filter => {\n const transformed = useCamelCase(filter);\n return {\n attributeKey: transformed.attributeKey,\n attributeModel: transformed.attributeModel,\n customAttributeType: transformed.customAttributeType,\n filterOperator: transformed.filterOperator,\n queryOperator: transformed.queryOperator ?? 'and',\n values: transformed.values,\n };\n });\n\n return newFilters;\n});\n\nconst hasActiveSegments = computed(\n () => props.activeSegment && activeSegmentId.value !== 0\n);\n\nconst activeFilterQueryData = computed(() => {\n return hasActiveSegments.value\n ? activeSegmentQuery.value\n : appliedFilters.value;\n});\n</script>\n\n<template>\n <ActiveFilterPreview\n :applied-filters=\"activeFilterQueryData\"\n :max-visible-filters=\"2\"\n :more-filters-label=\"\n t('CONTACTS_LAYOUT.FILTER.ACTIVE_FILTERS.MORE_FILTERS', {\n count: activeFilterQueryData.length - 2,\n })\n \"\n :clear-button-label=\"\n t('CONTACTS_LAYOUT.FILTER.ACTIVE_FILTERS.CLEAR_FILTERS')\n \"\n :show-clear-button=\"!hasActiveSegments\"\n class=\"max-w-[60rem] px-6\"\n @open-filter=\"emit('openFilter')\"\n @clear-filters=\"emit('clearFilters')\"\n />\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n currentPage: {\n type: Number,\n required: true,\n },\n totalItems: {\n type: Number,\n required: true,\n },\n itemsPerPage: {\n type: Number,\n default: 16,\n },\n currentPageInfo: {\n type: String,\n default: '',\n },\n});\nconst emit = defineEmits(['update:currentPage']);\nconst { t } = useI18n();\n\nconst totalPages = computed(() =>\n Math.ceil(props.totalItems / props.itemsPerPage)\n);\nconst startItem = computed(\n () => (props.currentPage - 1) * props.itemsPerPage + 1\n);\nconst endItem = computed(() =>\n Math.min(startItem.value + props.itemsPerPage - 1, props.totalItems)\n);\nconst isFirstPage = computed(() => props.currentPage === 1);\nconst isLastPage = computed(() => props.currentPage === totalPages.value);\nconst changePage = newPage => {\n if (newPage >= 1 && newPage <= totalPages.value) {\n emit('update:currentPage', newPage);\n }\n};\n\nconst currentPageInformation = computed(() => {\n return t(\n props.currentPageInfo ? props.currentPageInfo : 'PAGINATION_FOOTER.SHOWING',\n {\n startItem: startItem.value,\n endItem: endItem.value,\n totalItems: props.totalItems,\n }\n );\n});\n\nconst pageInfo = computed(() => {\n return t('PAGINATION_FOOTER.CURRENT_PAGE_INFO', {\n currentPage: '',\n totalPages: totalPages.value,\n });\n});\n</script>\n\n<template>\n <div\n class=\"flex justify-between h-12 w-full max-w-[calc(60rem-3px)] outline outline-n-container outline-1 -outline-offset-1 mx-auto bg-n-solid-2 rounded-xl py-2 ltr:pl-4 rtl:pr-4 ltr:pr-3 rtl:pl-3 items-center before:absolute before:inset-x-0 before:-top-4 before:bg-gradient-to-t before:from-n-background before:from-10% before:dark:from-0% before:to-transparent before:h-4 before:pointer-events-none\"\n >\n <div class=\"flex items-center gap-3\">\n <span class=\"min-w-0 text-sm font-normal line-clamp-1 text-n-slate-11\">\n {{ currentPageInformation }}\n </span>\n </div>\n <div class=\"flex items-center gap-2\">\n <Button\n icon=\"i-lucide-chevrons-left\"\n variant=\"ghost\"\n size=\"sm\"\n color=\"slate\"\n class=\"!w-8 !h-6\"\n :disabled=\"isFirstPage\"\n @click=\"changePage(1)\"\n />\n <Button\n icon=\"i-lucide-chevron-left\"\n variant=\"ghost\"\n color=\"slate\"\n size=\"sm\"\n class=\"!w-8 !h-6\"\n :disabled=\"isFirstPage\"\n @click=\"changePage(currentPage - 1)\"\n />\n <div class=\"inline-flex items-center gap-2 text-sm text-n-slate-11\">\n <span class=\"px-3 tabular-nums py-0.5 bg-n-alpha-black2 rounded-md\">\n {{ currentPage }}\n </span>\n <span class=\"truncate\">{{ pageInfo }}</span>\n </div>\n <Button\n icon=\"i-lucide-chevron-right\"\n variant=\"ghost\"\n color=\"slate\"\n size=\"sm\"\n class=\"!w-8 !h-6\"\n :disabled=\"isLastPage\"\n @click=\"changePage(currentPage + 1)\"\n />\n <Button\n icon=\"i-lucide-chevrons-right\"\n variant=\"ghost\"\n color=\"slate\"\n size=\"sm\"\n class=\"!w-8 !h-6\"\n :disabled=\"isLastPage\"\n @click=\"changePage(totalPages)\"\n />\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed, ref } from 'vue';\nimport { useRoute } from 'vue-router';\n\nimport ContactListHeaderWrapper from 'dashboard/components-next/Contacts/ContactsHeader/ContactListHeaderWrapper.vue';\nimport ContactsActiveFiltersPreview from 'dashboard/components-next/Contacts/ContactsHeader/components/ContactsActiveFiltersPreview.vue';\nimport PaginationFooter from 'dashboard/components-next/pagination/PaginationFooter.vue';\n\ndefineProps({\n searchValue: { type: String, default: '' },\n headerTitle: { type: String, default: '' },\n showPaginationFooter: { type: Boolean, default: true },\n currentPage: { type: Number, default: 1 },\n totalItems: { type: Number, default: 100 },\n itemsPerPage: { type: Number, default: 15 },\n activeSort: { type: String, default: '' },\n activeOrdering: { type: String, default: '' },\n activeSegment: { type: Object, default: null },\n segmentsId: { type: [String, Number], default: 0 },\n hasAppliedFilters: { type: Boolean, default: false },\n isFetchingList: { type: Boolean, default: false },\n});\n\nconst emit = defineEmits([\n 'update:currentPage',\n 'update:sort',\n 'search',\n 'applyFilter',\n 'clearFilters',\n]);\n\nconst route = useRoute();\n\nconst contactListHeaderWrapper = ref(null);\n\nconst isNotSegmentView = computed(() => {\n return route.name !== 'contacts_dashboard_segments_index';\n});\n\nconst isLabelView = computed(\n () => route.name === 'contacts_dashboard_labels_index'\n);\n\nconst updateCurrentPage = page => {\n emit('update:currentPage', page);\n};\n\nconst openFilter = () => {\n contactListHeaderWrapper.value?.onToggleFilters();\n};\n</script>\n\n<template>\n <section\n class=\"flex w-full h-full gap-4 overflow-hidden justify-evenly bg-n-background\"\n >\n <div class=\"flex flex-col w-full h-full transition-all duration-300\">\n <ContactListHeaderWrapper\n ref=\"contactListHeaderWrapper\"\n :show-search=\"isNotSegmentView\"\n :search-value=\"searchValue\"\n :active-sort=\"activeSort\"\n :active-ordering=\"activeOrdering\"\n :header-title=\"headerTitle\"\n :active-segment=\"activeSegment\"\n :segments-id=\"segmentsId\"\n :has-applied-filters=\"hasAppliedFilters\"\n :is-label-view=\"isLabelView\"\n @update:sort=\"emit('update:sort', $event)\"\n @search=\"emit('search', $event)\"\n @apply-filter=\"emit('applyFilter', $event)\"\n @clear-filters=\"emit('clearFilters')\"\n />\n <main class=\"flex-1 overflow-y-auto\">\n <div class=\"w-full mx-auto max-w-[60rem]\">\n <ContactsActiveFiltersPreview\n v-if=\"\n (hasAppliedFilters || !isNotSegmentView) &&\n !isFetchingList &&\n !isLabelView\n \"\n :active-segment=\"activeSegment\"\n @clear-filters=\"emit('clearFilters')\"\n @open-filter=\"openFilter\"\n />\n <slot name=\"default\" />\n </div>\n </main>\n <footer\n v-if=\"showPaginationFooter\"\n class=\"sticky bottom-0 z-10 px-4 pb-4\"\n >\n <PaginationFooter\n current-page-info=\"CONTACTS_LAYOUT.PAGINATION_FOOTER.SHOWING\"\n :current-page=\"currentPage\"\n :total-items=\"totalItems\"\n :items-per-page=\"itemsPerPage\"\n @update:current-page=\"updateCurrentPage\"\n />\n </footer>\n </div>\n </section>\n</template>\n","<script setup>\ndefineProps({\n layout: {\n type: String,\n default: 'col',\n },\n selectable: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits(['click']);\n\nconst handleClick = () => {\n emit('click');\n};\n</script>\n\n<template>\n <div\n class=\"flex flex-col w-full shadow outline-1 outline outline-n-container group/cardLayout rounded-2xl bg-n-solid-2\"\n >\n <div\n class=\"flex w-full gap-3 py-5\"\n :class=\"[\n layout === 'col' ? 'flex-col' : 'flex-row justify-between items-center',\n selectable ? 'px-10 py-6' : 'px-6',\n ]\"\n @click=\"handleClick\"\n >\n <slot />\n </div>\n\n <slot name=\"after\" />\n </div>\n</template>\n","<script setup>\nimport { h, defineProps } from 'vue';\n\nconst props = defineProps({\n country: { type: String, required: true },\n squared: { type: Boolean, default: false },\n});\n\nconst renderFlag = () => {\n const classes = ['fi', `fi-${props.country.toLowerCase()}`, 'flex-shrink-0'];\n if (props.squared) {\n classes.push('fis');\n }\n return h('span', { class: classes });\n};\n</script>\n\n<template>\n <component :is=\"renderFlag\" />\n</template>\n\n<style>\n@import 'flag-icons/css/flag-icons.min.css';\n</style>\n","<script setup>\nimport { ref, computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nimport CardLayout from 'dashboard/components-next/CardLayout.vue';\nimport ContactsForm from 'dashboard/components-next/Contacts/ContactsForm/ContactsForm.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport Avatar from 'dashboard/components-next/avatar/Avatar.vue';\nimport Flag from 'dashboard/components-next/flag/Flag.vue';\nimport countries from 'shared/constants/countries';\n\nconst props = defineProps({\n id: { type: Number, required: true },\n name: { type: String, default: '' },\n email: { type: String, default: '' },\n additionalAttributes: { type: Object, default: () => ({}) },\n phoneNumber: { type: String, default: '' },\n thumbnail: { type: String, default: '' },\n isExpanded: { type: Boolean, default: false },\n isUpdating: { type: Boolean, default: false },\n});\n\nconst emit = defineEmits(['toggle', 'updateContact', 'showContact']);\n\nconst { t } = useI18n();\n\nconst contactsFormRef = ref(null);\n\nconst getInitialContactData = () => ({\n id: props.id,\n name: props.name,\n email: props.email,\n phoneNumber: props.phoneNumber,\n additionalAttributes: props.additionalAttributes,\n});\n\nconst contactData = ref(getInitialContactData());\n\nconst isFormInvalid = computed(() => contactsFormRef.value?.isFormInvalid);\n\nconst countriesMap = computed(() => {\n return countries.reduce((acc, country) => {\n acc[country.code] = country;\n acc[country.id] = country;\n return acc;\n }, {});\n});\n\nconst countryDetails = computed(() => {\n const attributes = props.additionalAttributes || {};\n const { country, countryCode, city } = attributes;\n\n if (!country && !countryCode) return null;\n\n const activeCountry =\n countriesMap.value[country] || countriesMap.value[countryCode];\n\n if (!activeCountry) return null;\n\n return {\n countryCode: activeCountry.id,\n city: city ? `${city},` : null,\n name: activeCountry.name,\n };\n});\n\nconst formattedLocation = computed(() => {\n if (!countryDetails.value) return '';\n\n return [countryDetails.value.city, countryDetails.value.name]\n .filter(Boolean)\n .join(' ');\n});\n\nconst handleFormUpdate = updatedData => {\n Object.assign(contactData.value, updatedData);\n};\n\nconst handleUpdateContact = () => {\n emit('updateContact', contactData.value);\n};\n\nconst onClickExpand = () => {\n emit('toggle');\n contactData.value = getInitialContactData();\n};\n\nconst onClickViewDetails = () => emit('showContact', props.id);\n</script>\n\n<template>\n <CardLayout :key=\"id\" layout=\"row\">\n <div class=\"flex items-center justify-start flex-1 gap-4\">\n <Avatar :name=\"name\" :src=\"thumbnail\" :size=\"48\" rounded-full />\n <div class=\"flex flex-col gap-0.5 flex-1\">\n <div class=\"flex flex-wrap items-center gap-x-4 gap-y-1\">\n <span class=\"text-base font-medium truncate text-n-slate-12\">\n {{ name }}\n </span>\n <span class=\"inline-flex items-center gap-1\">\n <span\n v-if=\"additionalAttributes?.companyName\"\n class=\"i-ph-building-light size-4 text-n-slate-10 mb-0.5\"\n />\n <span\n v-if=\"additionalAttributes?.companyName\"\n class=\"text-sm truncate text-n-slate-11\"\n >\n {{ additionalAttributes.companyName }}\n </span>\n </span>\n </div>\n <div class=\"flex flex-wrap items-center justify-start gap-x-3 gap-y-1\">\n <div v-if=\"email\" class=\"truncate max-w-72\" :title=\"email\">\n <span class=\"text-sm text-n-slate-11\">\n {{ email }}\n </span>\n </div>\n <div v-if=\"email\" class=\"w-px h-3 truncate bg-n-slate-6\" />\n <span v-if=\"phoneNumber\" class=\"text-sm truncate text-n-slate-11\">\n {{ phoneNumber }}\n </span>\n <div v-if=\"phoneNumber\" class=\"w-px h-3 truncate bg-n-slate-6\" />\n <span\n v-if=\"countryDetails\"\n class=\"inline-flex items-center gap-2 text-sm truncate text-n-slate-11\"\n >\n <Flag :country=\"countryDetails.countryCode\" class=\"size-3.5\" />\n {{ formattedLocation }}\n </span>\n <div v-if=\"countryDetails\" class=\"w-px h-3 truncate bg-n-slate-6\" />\n <Button\n :label=\"t('CONTACTS_LAYOUT.CARD.VIEW_DETAILS')\"\n variant=\"link\"\n size=\"xs\"\n @click=\"onClickViewDetails\"\n />\n </div>\n </div>\n </div>\n\n <Button\n icon=\"i-lucide-chevron-down\"\n variant=\"ghost\"\n color=\"slate\"\n size=\"xs\"\n :class=\"{ 'rotate-180': isExpanded }\"\n @click=\"onClickExpand\"\n />\n\n <template #after>\n <transition\n enter-active-class=\"overflow-hidden transition-all duration-300 ease-out\"\n leave-active-class=\"overflow-hidden transition-all duration-300 ease-in\"\n enter-from-class=\"overflow-hidden opacity-0 max-h-0\"\n enter-to-class=\"opacity-100 max-h-[690px] sm:max-h-[470px] md:max-h-[410px]\"\n leave-from-class=\"opacity-100 max-h-[690px] sm:max-h-[470px] md:max-h-[410px]\"\n leave-to-class=\"overflow-hidden opacity-0 max-h-0\"\n >\n <div v-show=\"isExpanded\" class=\"w-full\">\n <div class=\"flex flex-col gap-6 p-6 border-t border-n-strong\">\n <ContactsForm\n ref=\"contactsFormRef\"\n :contact-data=\"contactData\"\n @update=\"handleFormUpdate\"\n />\n <div>\n <Button\n :label=\"\n t('CONTACTS_LAYOUT.CARD.EDIT_DETAILS_FORM.UPDATE_BUTTON')\n \"\n size=\"sm\"\n :is-loading=\"isUpdating\"\n :disabled=\"isUpdating || isFormInvalid\"\n @click=\"handleUpdateContact\"\n />\n </div>\n </div>\n </div>\n </transition>\n </template>\n </CardLayout>\n</template>\n","<script setup>\nimport { ref, computed } from 'vue';\nimport { useStore, useMapGetter } from 'dashboard/composables/store';\nimport { useAlert } from 'dashboard/composables';\nimport { useI18n } from 'vue-i18n';\nimport { useRouter, useRoute } from 'vue-router';\nimport {\n DuplicateContactException,\n ExceptionWithMessage,\n} from 'shared/helpers/CustomErrors';\nimport ContactsCard from 'dashboard/components-next/Contacts/ContactsCard/ContactsCard.vue';\n\ndefineProps({ contacts: { type: Array, required: true } });\n\nconst { t } = useI18n();\nconst store = useStore();\nconst router = useRouter();\nconst route = useRoute();\n\nconst uiFlags = useMapGetter('contacts/getUIFlags');\nconst isUpdating = computed(() => uiFlags.value.isUpdating);\nconst expandedCardId = ref(null);\n\nconst updateContact = async updatedData => {\n try {\n await store.dispatch('contacts/update', updatedData);\n useAlert(t('CONTACTS_LAYOUT.CARD.EDIT_DETAILS_FORM.SUCCESS_MESSAGE'));\n } catch (error) {\n const i18nPrefix = 'CONTACTS_LAYOUT.CARD.EDIT_DETAILS_FORM.FORM';\n if (error instanceof DuplicateContactException) {\n if (error.data.includes('email')) {\n useAlert(t(`${i18nPrefix}.EMAIL_ADDRESS.DUPLICATE`));\n } else if (error.data.includes('phone_number')) {\n useAlert(t(`${i18nPrefix}.PHONE_NUMBER.DUPLICATE`));\n }\n } else if (error instanceof ExceptionWithMessage) {\n useAlert(error.data);\n } else {\n useAlert(t(`${i18nPrefix}.ERROR_MESSAGE`));\n }\n }\n};\n\nconst onClickViewDetails = async id => {\n const routeTypes = {\n contacts_dashboard_segments_index: ['contacts_edit_segment', 'segmentId'],\n contacts_dashboard_labels_index: ['contacts_edit_label', 'label'],\n };\n const [name, paramKey] = routeTypes[route.name] || ['contacts_edit'];\n const params = {\n contactId: id,\n ...(paramKey && { [paramKey]: route.params[paramKey] }),\n };\n\n await router.push({ name, params, query: route.query });\n};\n\nconst toggleExpanded = id => {\n expandedCardId.value = expandedCardId.value === id ? null : id;\n};\n</script>\n\n<template>\n <div class=\"flex flex-col gap-4 px-6 pt-4 pb-6\">\n <ContactsCard\n v-for=\"contact in contacts\"\n :id=\"contact.id\"\n :key=\"contact.id\"\n :name=\"contact.name\"\n :email=\"contact.email\"\n :thumbnail=\"contact.thumbnail\"\n :phone-number=\"contact.phoneNumber\"\n :additional-attributes=\"contact.additionalAttributes\"\n :is-expanded=\"expandedCardId === contact.id\"\n :is-updating=\"isUpdating\"\n @toggle=\"toggleExpanded(contact.id)\"\n @update-contact=\"updateContact\"\n @show-contact=\"onClickViewDetails\"\n />\n </div>\n</template>\n","export default [\n {\n additionalAttributes: {\n city: 'Los Angeles',\n country: 'United States',\n description:\n \"I'm Candice, a developer focusing on building web solutions. Currently, I’m working as a Product Developer at Chatwoot.\",\n companyName: 'Chatwoot',\n countryCode: 'US',\n socialProfiles: {\n github: 'candice-dev',\n twitter: 'candice_w_dev',\n facebook: 'candice.dev',\n linkedin: 'candice-matherson',\n instagram: 'candice.codes',\n },\n },\n availabilityStatus: 'offline',\n email: 'candice.matherson@chatwoot.com',\n id: 22,\n name: 'Candice Matherson',\n phoneNumber: '+14155552671',\n identifier: null,\n thumbnail: '',\n customAttributes: {\n dateContact: '2024-11-11T11:53:09.299Z',\n linkContact: 'https://example.com',\n listContact: 'Follow-Up',\n textContact: 'Hi there!',\n numberContact: '42',\n checkboxContact: false,\n },\n lastActivityAt: 1712123233,\n createdAt: 1712123233,\n },\n {\n additionalAttributes: {\n city: 'San Francisco',\n country: 'United States',\n description: 'Passionate about design and user experience.',\n companyName: 'Designify',\n countryCode: 'US',\n socialProfiles: {\n github: 'ophelia-folkard',\n twitter: 'oph_designs',\n facebook: 'ophelia.folkard',\n linkedin: 'ophelia-folkard',\n instagram: 'ophelia.design',\n },\n },\n availabilityStatus: 'offline',\n email: 'ophelia.folkard@designify.com',\n id: 21,\n name: 'Ophelia Folkard',\n phoneNumber: '+14155552672',\n identifier: null,\n thumbnail: '',\n customAttributes: {\n dateContact: '2024-10-05T10:12:34.567Z',\n linkContact: 'https://designify.com',\n listContact: 'Prospects',\n textContact: 'Looking forward to connecting!',\n },\n lastActivityAt: 1712123233,\n createdAt: 1712123233,\n },\n {\n additionalAttributes: {\n city: 'Austin',\n country: 'United States',\n description: 'Avid coder and tech enthusiast.',\n companyName: 'CodeHub',\n countryCode: 'US',\n socialProfiles: {\n github: 'willy_castelot',\n twitter: 'willy_code',\n facebook: 'willy.castelot',\n linkedin: 'willy-castelot',\n instagram: 'willy.coder',\n },\n },\n availabilityStatus: 'offline',\n email: 'willy.castelot@codehub.io',\n id: 20,\n name: 'Willy Castelot',\n phoneNumber: '+14155552673',\n identifier: null,\n thumbnail: '',\n customAttributes: {\n textContact: 'Let’s collaborate!',\n checkboxContact: true,\n },\n lastActivityAt: 1712123233,\n createdAt: 1712123233,\n },\n {\n additionalAttributes: {\n city: 'Seattle',\n country: 'United States',\n description: 'Product manager with a love for innovation.',\n companyName: 'InnovaTech',\n countryCode: 'US',\n socialProfiles: {\n github: 'elisabeth-d',\n twitter: 'elisabeth_innova',\n facebook: 'elisabeth.derington',\n linkedin: 'elisabeth-derington',\n instagram: 'elisabeth.innovates',\n },\n },\n availabilityStatus: 'offline',\n email: 'elisabeth.derington@innova.com',\n id: 19,\n name: 'Elisabeth Derington',\n phoneNumber: '+14155552674',\n identifier: null,\n thumbnail: '',\n customAttributes: {\n textContact: 'Let’s schedule a call.',\n },\n lastActivityAt: 1712123232,\n createdAt: 1712123232,\n },\n {\n additionalAttributes: {\n city: 'Chicago',\n country: 'United States',\n description: 'Marketing specialist and content creator.',\n companyName: 'Contently',\n countryCode: 'US',\n socialProfiles: {\n github: 'olia-olenchenko',\n twitter: 'olia_content',\n facebook: 'olia.olenchenko',\n linkedin: 'olia-olenchenko',\n instagram: 'olia.creates',\n },\n },\n availabilityStatus: 'offline',\n email: 'olia.olenchenko@contently.com',\n id: 18,\n name: 'Olia Olenchenko',\n phoneNumber: '+14155552675',\n identifier: null,\n thumbnail: '',\n customAttributes: {},\n lastActivityAt: 1712123232,\n createdAt: 1712123232,\n },\n {\n additionalAttributes: {\n city: 'Boston',\n country: 'United States',\n description: 'SEO expert and analytics enthusiast.',\n companyName: 'OptiSearch',\n countryCode: 'US',\n socialProfiles: {\n github: 'nate-vannuchi',\n twitter: 'nate_seo',\n facebook: 'nathaniel.vannuchi',\n linkedin: 'nathaniel-vannuchi',\n instagram: 'nate.optimizes',\n },\n },\n availabilityStatus: 'offline',\n email: 'nathaniel.vannuchi@optisearch.com',\n id: 17,\n name: 'Nathaniel Vannuchi',\n phoneNumber: '+14155552676',\n identifier: null,\n thumbnail: '',\n customAttributes: {},\n lastActivityAt: 1712123232,\n createdAt: 1712123232,\n },\n {\n additionalAttributes: {\n city: 'Denver',\n country: 'United States',\n description: 'UI/UX designer with a flair for minimalist designs.',\n companyName: 'Minimal Designs',\n countryCode: 'US',\n socialProfiles: {\n github: 'merrile-petruk',\n twitter: 'merrile_ux',\n facebook: 'merrile.petruk',\n linkedin: 'merrile-petruk',\n instagram: 'merrile.designs',\n },\n },\n availabilityStatus: 'offline',\n email: 'merrile.petruk@minimal.com',\n id: 16,\n name: 'Merrile Petruk',\n phoneNumber: '+14155552677',\n identifier: null,\n thumbnail: '',\n customAttributes: {},\n lastActivityAt: 1712123232,\n createdAt: 1712123232,\n },\n {\n additionalAttributes: {\n city: 'Miami',\n country: 'United States',\n description: 'Entrepreneur with a background in e-commerce.',\n companyName: 'Ecom Solutions',\n countryCode: 'US',\n socialProfiles: {\n github: 'cordell-d',\n twitter: 'cordell_entrepreneur',\n facebook: 'cordell.dalinder',\n linkedin: 'cordell-dalinder',\n instagram: 'cordell.ecom',\n },\n },\n availabilityStatus: 'offline',\n email: 'cordell.dalinder@ecomsolutions.com',\n id: 15,\n name: 'Cordell Dalinder',\n phoneNumber: '+14155552678',\n identifier: null,\n thumbnail: '',\n customAttributes: {},\n lastActivityAt: 1712123232,\n createdAt: 1712123232,\n },\n];\n","<script setup>\nimport { ref } from 'vue';\n\nimport EmptyStateLayout from 'dashboard/components-next/EmptyStateLayout.vue';\nimport CreateNewContactDialog from 'dashboard/components-next/Contacts/ContactsForm/CreateNewContactDialog.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport ContactsCard from 'dashboard/components-next/Contacts/ContactsCard/ContactsCard.vue';\nimport contactContent from 'dashboard/components-next/Contacts/EmptyState/contactEmptyStateContent';\n\ndefineProps({\n title: {\n type: String,\n default: '',\n },\n subtitle: {\n type: String,\n default: '',\n },\n showButton: {\n type: Boolean,\n default: true,\n },\n buttonLabel: {\n type: String,\n default: '',\n },\n});\n\nconst emit = defineEmits(['create']);\n\nconst createNewContactDialogRef = ref(null);\n\nconst onClick = () => {\n createNewContactDialogRef.value?.dialogRef.open();\n};\n</script>\n\n<template>\n <EmptyStateLayout :title=\"title\" :subtitle=\"subtitle\">\n <template #empty-state-item>\n <div class=\"grid grid-cols-1 gap-4 p-px overflow-hidden\">\n <ContactsCard\n v-for=\"contact in contactContent.slice(0, 5)\"\n :id=\"contact.id\"\n :key=\"contact.id\"\n :name=\"contact.name\"\n :email=\"contact.email\"\n :thumbnail=\"contact.thumbnail\"\n :phone-number=\"contact.phoneNumber\"\n :additional-attributes=\"contact.additionalAttributes\"\n :is-expanded=\"0 === contact.id\"\n @toggle=\"toggleExpanded(contact.id)\"\n />\n </div>\n </template>\n <template #actions>\n <div v-if=\"showButton\">\n <Button :label=\"buttonLabel\" icon=\"i-lucide-plus\" @click=\"onClick\" />\n <CreateNewContactDialog\n ref=\"createNewContactDialogRef\"\n @create=\"emit('create', $event)\"\n />\n </div>\n </template>\n </EmptyStateLayout>\n</template>\n","<script setup>\nimport { onMounted, computed, ref, reactive, watch } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { useI18n } from 'vue-i18n';\nimport { useStore, useMapGetter } from 'dashboard/composables/store';\nimport { debounce } from '@chatwoot/utils';\nimport { useUISettings } from 'dashboard/composables/useUISettings';\nimport filterQueryGenerator from 'dashboard/helper/filterQueryGenerator';\n\nimport ContactsListLayout from 'dashboard/components-next/Contacts/ContactsListLayout.vue';\nimport ContactsList from 'dashboard/components-next/Contacts/Pages/ContactsList.vue';\nimport ContactEmptyState from 'dashboard/components-next/Contacts/EmptyState/ContactEmptyState.vue';\nimport Spinner from 'dashboard/components-next/spinner/Spinner.vue';\n\nconst DEFAULT_SORT_FIELD = 'last_activity_at';\nconst DEBOUNCE_DELAY = 300;\n\nconst store = useStore();\nconst route = useRoute();\nconst router = useRouter();\nconst { t } = useI18n();\n\nconst { updateUISettings, uiSettings } = useUISettings();\n\nconst contacts = useMapGetter('contacts/getContactsList');\nconst uiFlags = useMapGetter('contacts/getUIFlags');\nconst customViewsUiFlags = useMapGetter('customViews/getUIFlags');\nconst segments = useMapGetter('customViews/getContactCustomViews');\nconst appliedFilters = useMapGetter('contacts/getAppliedContactFilters');\nconst meta = useMapGetter('contacts/getMeta');\n\nconst searchQuery = computed(() => route.query?.search);\nconst searchValue = ref(searchQuery.value || '');\nconst pageNumber = computed(() => Number(route.query?.page) || 1);\n\nconst parseSortSettings = (sortString = '') => {\n const hasDescending = sortString.startsWith('-');\n const sortField = hasDescending ? sortString.slice(1) : sortString;\n return {\n sort: sortField || DEFAULT_SORT_FIELD,\n order: hasDescending ? '-' : '',\n };\n};\n\nconst { contacts_sort_by: contactSortBy = '' } = uiSettings.value ?? {};\nconst { sort: initialSort, order: initialOrder } =\n parseSortSettings(contactSortBy);\n\nconst sortState = reactive({\n activeSort: initialSort,\n activeOrdering: initialOrder,\n});\n\nconst activeLabel = computed(() => route.params.label);\nconst activeSegmentId = computed(() => route.params.segmentId);\nconst isFetchingList = computed(\n () => uiFlags.value.isFetching || customViewsUiFlags.value.isFetching\n);\nconst currentPage = computed(() => Number(meta.value?.currentPage));\nconst totalItems = computed(() => meta.value?.count);\nconst activeSegment = computed(() => {\n if (!activeSegmentId.value) return undefined;\n return segments.value.find(view => view.id === Number(activeSegmentId.value));\n});\n\nconst hasContacts = computed(() => contacts.value.length > 0);\nconst isContactIndexView = computed(\n () => route.name === 'contacts_dashboard_index' && pageNumber.value === 1\n);\nconst hasAppliedFilters = computed(() => {\n return appliedFilters.value.length > 0;\n});\nconst showEmptyStateLayout = computed(() => {\n return (\n !searchQuery.value &&\n !hasContacts.value &&\n isContactIndexView.value &&\n !hasAppliedFilters.value\n );\n});\nconst showEmptyText = computed(() => {\n return (\n (searchQuery.value ||\n hasAppliedFilters.value ||\n !isContactIndexView.value) &&\n !hasContacts.value\n );\n});\n\nconst headerTitle = computed(() => {\n if (searchQuery.value) return t('CONTACTS_LAYOUT.HEADER.SEARCH_TITLE');\n if (activeSegmentId.value) return activeSegment.value?.name;\n if (activeLabel.value) return `#${activeLabel.value}`;\n return t('CONTACTS_LAYOUT.HEADER.TITLE');\n});\n\nconst updatePageParam = (page, search = '') => {\n const query = {\n ...route.query,\n page: page.toString(),\n ...(search ? { search } : {}),\n };\n\n if (!search) {\n delete query.search;\n }\n\n router.replace({ query });\n};\n\nconst buildSortAttr = () =>\n `${sortState.activeOrdering}${sortState.activeSort}`;\n\nconst getCommonFetchParams = (page = 1) => ({\n page,\n sortAttr: buildSortAttr(),\n label: activeLabel.value,\n});\n\nconst fetchContacts = async (page = 1) => {\n await store.dispatch('contacts/clearContactFilters');\n await store.dispatch('contacts/get', getCommonFetchParams(page));\n updatePageParam(page);\n};\n\nconst fetchSavedOrAppliedFilteredContact = async (payload, page = 1) => {\n if (!activeSegmentId.value && !hasAppliedFilters.value) return;\n await store.dispatch('contacts/filter', {\n ...getCommonFetchParams(page),\n queryPayload: payload,\n });\n updatePageParam(page);\n};\n\nconst searchContacts = debounce(async (value, page = 1) => {\n await store.dispatch('contacts/clearContactFilters');\n searchValue.value = value;\n\n if (!value) {\n updatePageParam(page);\n await fetchContacts(page);\n return;\n }\n\n updatePageParam(page, value);\n await store.dispatch('contacts/search', {\n ...getCommonFetchParams(page),\n search: encodeURIComponent(value),\n });\n}, DEBOUNCE_DELAY);\n\nconst fetchContactsBasedOnContext = async page => {\n updatePageParam(page, searchValue.value);\n if (isFetchingList.value) return;\n if (searchQuery.value) {\n await searchContacts(searchQuery.value, page);\n return;\n }\n // Reset the search value when we change the view\n searchValue.value = '';\n // If there are applied filters or active segment with query\n if (\n (hasAppliedFilters.value || activeSegment.value?.query) &&\n !activeLabel.value\n ) {\n const queryPayload =\n activeSegment.value?.query || filterQueryGenerator(appliedFilters.value);\n await fetchSavedOrAppliedFilteredContact(queryPayload, page);\n return;\n }\n // Default case: fetch regular contacts + label\n await fetchContacts(page);\n};\n\nconst handleSort = async ({ sort, order }) => {\n Object.assign(sortState, { activeSort: sort, activeOrdering: order });\n\n await updateUISettings({\n contacts_sort_by: buildSortAttr(),\n });\n\n if (searchQuery.value) {\n await searchContacts(searchValue.value);\n return;\n }\n\n await (activeSegmentId.value || hasAppliedFilters.value\n ? fetchSavedOrAppliedFilteredContact(\n activeSegmentId.value\n ? activeSegment.value?.query\n : filterQueryGenerator(appliedFilters.value)\n )\n : fetchContacts());\n};\n\nconst createContact = async contact => {\n await store.dispatch('contacts/create', contact);\n};\n\nwatch(\n () => uiSettings.value?.contacts_sort_by,\n newSortBy => {\n if (newSortBy) {\n const { sort, order } = parseSortSettings(newSortBy);\n sortState.activeSort = sort;\n sortState.activeOrdering = order;\n }\n },\n { immediate: true }\n);\n\nwatch(\n [activeLabel, activeSegment],\n () => {\n fetchContactsBasedOnContext(pageNumber.value);\n },\n { deep: true }\n);\n\nwatch(searchQuery, value => {\n if (isFetchingList.value) return;\n searchValue.value = value || '';\n // Reset the view if there is search query when we click on the sidebar group\n if (value === undefined) {\n fetchContacts();\n }\n});\n\nonMounted(async () => {\n if (!activeSegmentId.value) {\n if (searchQuery.value) {\n await searchContacts(searchQuery.value, pageNumber.value);\n return;\n }\n await fetchContacts(pageNumber.value);\n } else if (activeSegment.value && activeSegmentId.value) {\n await fetchSavedOrAppliedFilteredContact(\n activeSegment.value.query,\n pageNumber.value\n );\n }\n});\n</script>\n\n<template>\n <div\n class=\"flex flex-col justify-between flex-1 h-full m-0 overflow-auto bg-n-background\"\n >\n <ContactsListLayout\n :search-value=\"searchValue\"\n :header-title=\"headerTitle\"\n :current-page=\"currentPage\"\n :total-items=\"totalItems\"\n :show-pagination-footer=\"!isFetchingList && hasContacts\"\n :active-sort=\"sortState.activeSort\"\n :active-ordering=\"sortState.activeOrdering\"\n :active-segment=\"activeSegment\"\n :segments-id=\"activeSegmentId\"\n :is-fetching-list=\"isFetchingList\"\n :has-applied-filters=\"hasAppliedFilters\"\n @update:current-page=\"fetchContactsBasedOnContext\"\n @search=\"searchContacts\"\n @update:sort=\"handleSort\"\n @apply-filter=\"fetchSavedOrAppliedFilteredContact\"\n @clear-filters=\"fetchContacts\"\n >\n <div\n v-if=\"isFetchingList\"\n class=\"flex items-center justify-center py-10 text-n-slate-11\"\n >\n <Spinner />\n </div>\n\n <template v-else>\n <ContactEmptyState\n v-if=\"showEmptyStateLayout\"\n class=\"pt-14\"\n :title=\"t('CONTACTS_LAYOUT.EMPTY_STATE.TITLE')\"\n :subtitle=\"t('CONTACTS_LAYOUT.EMPTY_STATE.SUBTITLE')\"\n :button-label=\"t('CONTACTS_LAYOUT.EMPTY_STATE.BUTTON_LABEL')\"\n @create=\"createContact\"\n />\n\n <div\n v-else-if=\"showEmptyText\"\n class=\"flex items-center justify-center py-10\"\n >\n <span class=\"text-base text-n-slate-11\">\n {{\n searchQuery || !hasAppliedFilters\n ? t('CONTACTS_LAYOUT.EMPTY_STATE.SEARCH_EMPTY_STATE_TITLE')\n : t('CONTACTS_LAYOUT.EMPTY_STATE.LIST_EMPTY_STATE_TITLE')\n }}\n </span>\n </div>\n\n <ContactsList v-else :contacts=\"contacts\" />\n </template>\n </ContactsListLayout>\n </div>\n</template>\n","<script setup>\nimport { defineProps } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nimport Icon from 'dashboard/components-next/icon/Icon.vue';\n\ndefineProps({\n items: {\n type: Array,\n required: true,\n },\n});\n\nconst emit = defineEmits(['click']);\n\nconst { t } = useI18n();\n\nconst onClick = event => {\n emit('click', event);\n};\n</script>\n\n<template>\n <nav :aria-label=\"t('BREADCRUMB.ARIA_LABEL')\" class=\"flex items-center h-8\">\n <ol class=\"flex items-center mb-0\">\n <li v-for=\"(item, index) in items\" :key=\"index\" class=\"flex items-center\">\n <button\n v-if=\"index === 0\"\n class=\"inline-flex items-center justify-center min-w-0 gap-2 p-0 text-sm font-medium transition-all duration-200 ease-in-out border-0 rounded-lg text-n-slate-11 hover:text-n-slate-12 outline-transparent max-w-56\"\n @click=\"onClick\"\n >\n <span class=\"min-w-0 truncate\">{{ item.label }}</span>\n </button>\n <template v-else>\n <Icon\n icon=\"i-lucide-chevron-right\"\n class=\"flex-shrink-0 mx-2 size-4 text-n-slate-11 dark:text-n-slate-11\"\n />\n <span\n class=\"text-sm truncate text-slate-900 dark:text-slate-50 max-w-56\"\n >\n {{ item.emoji ? item.emoji : '' }} {{ item.label }}\n </span>\n </template>\n </li>\n </ol>\n </nav>\n</template>\n","<script setup>\nimport { computed, useSlots } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useRoute } from 'vue-router';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport Breadcrumb from 'dashboard/components-next/breadcrumb/Breadcrumb.vue';\nimport ComposeConversation from 'dashboard/components-next/NewConversation/ComposeConversation.vue';\n\nconst props = defineProps({\n selectedContact: {\n type: Object,\n default: () => ({}),\n },\n isUpdating: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits(['goToContactsList', 'toggleBlock']);\n\nconst { t } = useI18n();\nconst slots = useSlots();\nconst route = useRoute();\n\nconst contactId = computed(() => route.params.contactId);\n\nconst selectedContactName = computed(() => {\n return props.selectedContact?.name;\n});\n\nconst breadcrumbItems = computed(() => {\n const items = [\n {\n label: t('CONTACTS_LAYOUT.HEADER.BREADCRUMB.CONTACTS'),\n link: '#',\n },\n ];\n if (props.selectedContact) {\n items.push({\n label: selectedContactName.value,\n });\n }\n return items;\n});\n\nconst isContactBlocked = computed(() => {\n return props.selectedContact?.blocked;\n});\n\nconst handleBreadcrumbClick = () => {\n emit('goToContactsList');\n};\n\nconst toggleBlock = () => {\n emit('toggleBlock', isContactBlocked.value);\n};\n</script>\n\n<template>\n <section\n class=\"flex w-full h-full overflow-hidden justify-evenly bg-n-background\"\n >\n <div\n class=\"flex flex-col w-full h-full transition-all duration-300 ltr:2xl:ml-56 rtl:2xl:mr-56\"\n >\n <header class=\"sticky top-0 z-10 px-6 3xl:px-0\">\n <div class=\"w-full mx-auto max-w-[40.625rem]\">\n <div class=\"flex items-center justify-between w-full h-20 gap-2\">\n <Breadcrumb\n :items=\"breadcrumbItems\"\n @click=\"handleBreadcrumbClick\"\n />\n <div class=\"flex items-center gap-2\">\n <Button\n :label=\"\n !isContactBlocked\n ? $t('CONTACTS_LAYOUT.HEADER.BLOCK_CONTACT')\n : $t('CONTACTS_LAYOUT.HEADER.UNBLOCK_CONTACT')\n \"\n size=\"sm\"\n slate\n :is-loading=\"isUpdating\"\n :disabled=\"isUpdating\"\n @click=\"toggleBlock\"\n />\n <ComposeConversation :contact-id=\"contactId\">\n <template #trigger=\"{ toggle }\">\n <Button\n :label=\"$t('CONTACTS_LAYOUT.HEADER.SEND_MESSAGE')\"\n size=\"sm\"\n @click=\"toggle\"\n />\n </template>\n </ComposeConversation>\n </div>\n </div>\n </div>\n </header>\n <main class=\"flex-1 px-6 overflow-y-auto 3xl:px-px\">\n <div class=\"w-full py-4 mx-auto max-w-[40.625rem]\">\n <slot name=\"default\" />\n </div>\n </main>\n </div>\n\n <div\n v-if=\"slots.sidebar\"\n class=\"overflow-y-auto justify-end min-w-52 w-full py-6 max-w-md border-l border-n-weak bg-n-solid-2\"\n >\n <slot name=\"sidebar\" />\n </div>\n </section>\n</template>\n","<script setup>\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n label: {\n type: Object,\n default: null,\n },\n isHovered: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits(['remove', 'hover']);\n\nconst handleRemoveLabel = () => {\n emit('remove', props.label?.id);\n};\n\nconst handleMouseEnter = () => {\n // Notify parent component when this label is hovered\n // Added this to show the remove button with transition when hovering over the label\n // This will solve the flickering issue when hovering over the last label item\n emit('hover', props.label?.id);\n};\n</script>\n\n<template>\n <div\n class=\"flex items-center px-1 py-1 overflow-hidden transition-all duration-300 ease-out rounded-md bg-n-alpha-2 h-7\"\n @mouseenter=\"handleMouseEnter\"\n >\n <div\n class=\"w-2 h-2 m-1 rounded-sm\"\n :style=\"{ backgroundColor: label.color }\"\n />\n <span class=\"text-sm text-n-slate-12 ltr:mr-px rtl:ml-px\">\n {{ label.title }}\n </span>\n <div\n class=\"w-0 flex relative ltr:left-1 rtl:right-1 flex-shrink-0 overflow-hidden transition-[width] duration-300 ease-out\"\n :class=\"{ 'w-6': isHovered }\"\n >\n <Button\n class=\"transition-opacity duration-200 !h-7 ltr:rounded-r-md rtl:rounded-l-md ltr:rounded-l-none rtl:rounded-r-none w-6 bg-transparent\"\n :class=\"{ 'opacity-0': !isHovered, 'opacity-100': isHovered }\"\n slate\n xs\n faded\n icon=\"i-lucide-x\"\n @click=\"handleRemoveLabel\"\n />\n </div>\n </div>\n</template>\n","<script setup>\nimport { ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nimport DropdownMenu from 'dashboard/components-next/dropdown-menu/DropdownMenu.vue';\n\ndefineProps({\n labelMenuItems: {\n type: Array,\n default: () => [],\n },\n});\n\nconst emit = defineEmits(['updateLabel']);\n\nconst { t } = useI18n();\n\nconst showDropdown = ref(false);\n</script>\n\n<template>\n <div class=\"relative\">\n <button\n class=\"flex items-center gap-1 px-2 py-1 rounded-md outline-dashed h-6 outline-1 outline-n-slate-6 hover:bg-n-alpha-2\"\n :class=\"{ 'bg-n-alpha-2': showDropdown }\"\n @click=\"showDropdown = !showDropdown\"\n >\n <span class=\"i-lucide-plus\" />\n <span class=\"text-sm text-n-slate-11\">\n {{ t('LABEL.TAG_BUTTON') }}\n </span>\n </button>\n <DropdownMenu\n v-if=\"showDropdown\"\n v-on-clickaway=\"() => (showDropdown = false)\"\n :menu-items=\"labelMenuItems\"\n show-search\n class=\"z-[100] w-48 mt-2 overflow-y-auto ltr:left-0 rtl:right-0 top-full max-h-52\"\n @action=\"emit('updateLabel', $event)\"\n >\n <template #thumbnail=\"{ item }\">\n <div\n class=\"rounded-sm size-2\"\n :style=\"{ backgroundColor: item.thumbnail.color }\"\n />\n </template>\n </DropdownMenu>\n </div>\n</template>\n","<script setup>\nimport { computed, watch, onMounted, ref } from 'vue';\nimport { useRoute } from 'vue-router';\nimport { useMapGetter, useStore } from 'dashboard/composables/store';\n\nimport LabelItem from 'dashboard/components-next/Label/LabelItem.vue';\nimport AddLabel from 'dashboard/components-next/Label/AddLabel.vue';\n\nconst props = defineProps({\n contactId: {\n type: [String, Number],\n default: null,\n },\n});\n\nconst store = useStore();\nconst route = useRoute();\n\nconst showDropdown = ref(false);\n\n// Store the currently hovered label's ID\n// Using JS state management instead of CSS :hover / group hover\n// This will solve the flickering issue when hovering over the last label item\nconst hoveredLabel = ref(null);\n\nconst allLabels = useMapGetter('labels/getLabels');\nconst contactLabels = useMapGetter('contactLabels/getContactLabels');\n\nconst savedLabels = computed(() => {\n const availableContactLabels = contactLabels.value(props.contactId);\n return allLabels.value.filter(({ title }) =>\n availableContactLabels.includes(title)\n );\n});\n\nconst labelMenuItems = computed(() => {\n return allLabels.value\n ?.map(label => ({\n label: label.title,\n value: label.id,\n thumbnail: { name: label.title, color: label.color },\n isSelected: savedLabels.value.some(\n savedLabel => savedLabel.id === label.id\n ),\n action: 'contactLabel',\n }))\n .toSorted((a, b) => Number(a.isSelected) - Number(b.isSelected));\n});\n\nconst fetchLabels = async contactId => {\n if (!contactId) {\n return;\n }\n store.dispatch('contactLabels/get', contactId);\n};\n\nconst handleLabelAction = async ({ value }) => {\n try {\n // Get current label titles\n const currentLabels = savedLabels.value.map(label => label.title);\n\n // Find the label title for the ID (value)\n const selectedLabel = allLabels.value.find(label => label.id === value);\n if (!selectedLabel) return;\n\n let updatedLabels;\n\n // If label is already selected, remove it (toggle behavior)\n if (currentLabels.includes(selectedLabel.title)) {\n updatedLabels = currentLabels.filter(\n labelTitle => labelTitle !== selectedLabel.title\n );\n } else {\n // Add the new label\n updatedLabels = [...currentLabels, selectedLabel.title];\n }\n\n await store.dispatch('contactLabels/update', {\n contactId: props.contactId,\n labels: updatedLabels,\n });\n\n showDropdown.value = false;\n } catch (error) {\n // error\n }\n};\n\nconst handleRemoveLabel = labelId => {\n return handleLabelAction({ value: labelId });\n};\n\nwatch(\n () => props.contactId,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n fetchLabels(newVal);\n }\n }\n);\nonMounted(() => {\n if (route.params.contactId) {\n fetchLabels(route.params.contactId);\n }\n});\n\nconst handleMouseLeave = () => {\n // Reset hover state when mouse leaves the container\n // This ensures all labels return to their default state\n hoveredLabel.value = null;\n};\n\nconst handleLabelHover = labelId => {\n // Added this to prevent flickering on when showing remove button on hover\n // If the label item is at end of the line, it will show the remove button\n // when hovering over the last label item\n hoveredLabel.value = labelId;\n};\n</script>\n\n<template>\n <div class=\"flex flex-wrap items-center gap-2\" @mouseleave=\"handleMouseLeave\">\n <LabelItem\n v-for=\"label in savedLabels\"\n :key=\"label.id\"\n :label=\"label\"\n :is-hovered=\"hoveredLabel === label.id\"\n @remove=\"handleRemoveLabel\"\n @hover=\"handleLabelHover(label.id)\"\n />\n <AddLabel\n :label-menu-items=\"labelMenuItems\"\n @update-label=\"handleLabelAction\"\n />\n </div>\n</template>\n","<script setup>\nimport { ref } from 'vue';\nimport { useStore } from 'dashboard/composables/store';\nimport { useRoute } from 'vue-router';\nimport { useI18n } from 'vue-i18n';\nimport { useAlert } from 'dashboard/composables';\n\nimport Dialog from 'dashboard/components-next/dialog/Dialog.vue';\n\nconst props = defineProps({\n selectedContact: {\n type: Object,\n default: null,\n },\n});\n\nconst emit = defineEmits(['goToContactsList']);\n\nconst { t } = useI18n();\nconst store = useStore();\nconst route = useRoute();\n\nconst dialogRef = ref(null);\n\nconst deleteContact = async id => {\n if (!id) return;\n\n try {\n await store.dispatch('contacts/delete', id);\n useAlert(t('CONTACTS_LAYOUT.DETAILS.DELETE_DIALOG.API.SUCCESS_MESSAGE'));\n } catch (error) {\n useAlert(t('CONTACTS_LAYOUT.DETAILS.DELETE_DIALOG.API.ERROR_MESSAGE'));\n }\n};\n\nconst handleDialogConfirm = async () => {\n emit('goToContactsList');\n await deleteContact(route.params.contactId || props.selectedContact.id);\n dialogRef.value?.close();\n};\n\ndefineExpose({ dialogRef });\n</script>\n\n<template>\n <Dialog\n ref=\"dialogRef\"\n type=\"alert\"\n :title=\"t('CONTACTS_LAYOUT.DETAILS.DELETE_DIALOG.TITLE')\"\n :description=\"\n t('CONTACTS_LAYOUT.DETAILS.DELETE_DIALOG.DESCRIPTION', {\n contactName: props.selectedContact.name,\n })\n \"\n :confirm-button-label=\"t('CONTACTS_LAYOUT.DETAILS.DELETE_DIALOG.CONFIRM')\"\n @confirm=\"handleDialogConfirm\"\n />\n</template>\n","<script setup>\nimport { computed, ref, onMounted } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useStore, useMapGetter } from 'dashboard/composables/store';\nimport { useAlert } from 'dashboard/composables';\nimport { dynamicTime } from 'shared/helpers/timeHelper';\n\nimport Avatar from 'dashboard/components-next/avatar/Avatar.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport ContactLabels from 'dashboard/components-next/Contacts/ContactLabels/ContactLabels.vue';\nimport ContactsForm from 'dashboard/components-next/Contacts/ContactsForm/ContactsForm.vue';\nimport ConfirmContactDeleteDialog from 'dashboard/components-next/Contacts/ContactsForm/ConfirmContactDeleteDialog.vue';\n\nconst props = defineProps({\n selectedContact: {\n type: Object,\n required: true,\n },\n});\n\nconst emit = defineEmits(['goToContactsList']);\n\nconst { t } = useI18n();\nconst store = useStore();\n\nconst confirmDeleteContactDialogRef = ref(null);\n\nconst avatarFile = ref(null);\nconst avatarUrl = ref('');\n\nconst contactsFormRef = ref(null);\n\nconst uiFlags = useMapGetter('contacts/getUIFlags');\nconst isUpdating = computed(() => uiFlags.value.isUpdating);\n\nconst isFormInvalid = computed(() => contactsFormRef.value?.isFormInvalid);\n\nconst contactData = ref({});\n\nconst getInitialContactData = () => {\n if (!props.selectedContact) return {};\n return { ...props.selectedContact };\n};\n\nonMounted(() => {\n Object.assign(contactData.value, getInitialContactData());\n});\n\nconst createdAt = computed(() => {\n return contactData.value?.createdAt\n ? dynamicTime(contactData.value.createdAt)\n : '';\n});\n\nconst lastActivityAt = computed(() => {\n return contactData.value?.lastActivityAt\n ? dynamicTime(contactData.value.lastActivityAt)\n : '';\n});\n\nconst avatarSrc = computed(() => {\n return avatarUrl.value ? avatarUrl.value : contactData.value?.thumbnail;\n});\n\nconst handleFormUpdate = updatedData => {\n Object.assign(contactData.value, updatedData);\n};\n\nconst updateContact = async () => {\n try {\n const { customAttributes, ...basicContactData } = contactData.value;\n await store.dispatch('contacts/update', basicContactData);\n await store.dispatch(\n 'contacts/fetchContactableInbox',\n props.selectedContact.id\n );\n useAlert(t('CONTACTS_LAYOUT.CARD.EDIT_DETAILS_FORM.SUCCESS_MESSAGE'));\n } catch (error) {\n useAlert(t('CONTACTS_LAYOUT.CARD.EDIT_DETAILS_FORM.ERROR_MESSAGE'));\n }\n};\n\nconst openConfirmDeleteContactDialog = () => {\n confirmDeleteContactDialogRef.value?.dialogRef.open();\n};\n\nconst handleAvatarUpload = async ({ file, url }) => {\n avatarFile.value = file;\n avatarUrl.value = url;\n\n try {\n await store.dispatch('contacts/update', {\n ...contactsFormRef.value?.state,\n avatar: file,\n isFormData: true,\n });\n useAlert(t('CONTACTS_LAYOUT.DETAILS.AVATAR.UPLOAD.SUCCESS_MESSAGE'));\n } catch {\n useAlert(t('CONTACTS_LAYOUT.DETAILS.AVATAR.UPLOAD.ERROR_MESSAGE'));\n }\n};\n\nconst handleAvatarDelete = async () => {\n try {\n if (props.selectedContact && props.selectedContact.id) {\n await store.dispatch('contacts/deleteAvatar', props.selectedContact.id);\n useAlert(t('CONTACTS_LAYOUT.DETAILS.AVATAR.DELETE.SUCCESS_MESSAGE'));\n }\n avatarFile.value = null;\n avatarUrl.value = '';\n contactData.value.thumbnail = null;\n } catch (error) {\n useAlert(\n error.message\n ? error.message\n : t('CONTACTS_LAYOUT.DETAILS.AVATAR.DELETE.ERROR_MESSAGE')\n );\n }\n};\n</script>\n\n<template>\n <div class=\"flex flex-col items-start gap-8 pb-6\">\n <div class=\"flex flex-col items-start gap-3\">\n <Avatar\n :src=\"avatarSrc || ''\"\n :name=\"selectedContact?.name || ''\"\n :size=\"72\"\n allow-upload\n @upload=\"handleAvatarUpload\"\n @delete=\"handleAvatarDelete\"\n />\n <div class=\"flex flex-col gap-1\">\n <h3 class=\"text-base font-medium text-n-slate-12\">\n {{ selectedContact?.name }}\n </h3>\n <div class=\"flex flex-col gap-1.5\">\n <span\n v-if=\"selectedContact?.identifier\"\n class=\"inline-flex items-center gap-1 text-sm text-n-slate-11\"\n >\n <span class=\"i-ph-user-gear text-n-slate-10 size-4\" />\n {{ selectedContact?.identifier }}\n </span>\n <span class=\"inline-flex items-center gap-1 text-sm text-n-slate-11\">\n <span\n v-if=\"selectedContact?.identifier\"\n class=\"i-ph-activity text-n-slate-10 size-4\"\n />\n {{ $t('CONTACTS_LAYOUT.DETAILS.CREATED_AT', { date: createdAt }) }}\n •\n {{\n $t('CONTACTS_LAYOUT.DETAILS.LAST_ACTIVITY', {\n date: lastActivityAt,\n })\n }}\n </span>\n </div>\n </div>\n <ContactLabels :contact-id=\"selectedContact?.id\" />\n </div>\n <div class=\"flex flex-col items-start gap-6\">\n <ContactsForm\n ref=\"contactsFormRef\"\n :contact-data=\"contactData\"\n is-details-view\n @update=\"handleFormUpdate\"\n />\n <Button\n :label=\"t('CONTACTS_LAYOUT.CARD.EDIT_DETAILS_FORM.UPDATE_BUTTON')\"\n size=\"sm\"\n :is-loading=\"isUpdating\"\n :disabled=\"isUpdating || isFormInvalid\"\n @click=\"updateContact\"\n />\n </div>\n <div\n class=\"flex flex-col items-start w-full gap-4 pt-6 border-t border-n-strong\"\n >\n <div class=\"flex flex-col gap-2\">\n <h6 class=\"text-base font-medium text-n-slate-12\">\n {{ t('CONTACTS_LAYOUT.DETAILS.DELETE_CONTACT') }}\n </h6>\n <span class=\"text-sm text-n-slate-11\">\n {{ t('CONTACTS_LAYOUT.DETAILS.DELETE_CONTACT_DESCRIPTION') }}\n </span>\n </div>\n <Button\n :label=\"t('CONTACTS_LAYOUT.DETAILS.DELETE_CONTACT')\"\n color=\"ruby\"\n @click=\"openConfirmDeleteContactDialog\"\n />\n </div>\n <ConfirmContactDeleteDialog\n ref=\"confirmDeleteContactDialogRef\"\n :selected-contact=\"selectedContact\"\n @go-to-contacts-list=\"emit('goToContactsList')\"\n />\n </div>\n</template>\n","<script setup>\nimport { useI18n } from 'vue-i18n';\nimport { dynamicTime } from 'shared/helpers/timeHelper';\nimport { useMessageFormatter } from 'shared/composables/useMessageFormatter';\nimport Avatar from 'dashboard/components-next/avatar/Avatar.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n note: {\n type: Object,\n required: true,\n },\n writtenBy: {\n type: String,\n required: true,\n },\n});\n\nconst emit = defineEmits(['delete']);\n\nconst { t } = useI18n();\nconst { formatMessage } = useMessageFormatter();\n\nconst handleDelete = () => {\n emit('delete', props.note.id);\n};\n</script>\n\n<template>\n <div\n class=\"flex flex-col gap-2 py-2 mx-6 border-b border-n-strong group/note\"\n >\n <div class=\"flex items-center justify-between\">\n <div class=\"flex items-center gap-1.5 py-2.5 min-w-0\">\n <Avatar\n :name=\"note?.user?.name || 'Bot'\"\n :src=\"note?.user?.thumbnail || '/assets/images/chatwoot_bot.png'\"\n :size=\"16\"\n rounded-full\n />\n <div class=\"min-w-0 truncate\">\n <span class=\"inline-flex items-center gap-1 text-sm text-n-slate-11\">\n <span class=\"font-medium\">{{ writtenBy }}</span>\n {{ t('CONTACTS_LAYOUT.SIDEBAR.NOTES.WROTE') }}\n <span class=\"font-medium\">{{ dynamicTime(note.createdAt) }}</span>\n </span>\n </div>\n </div>\n <Button\n variant=\"faded\"\n color=\"ruby\"\n size=\"xs\"\n icon=\"i-lucide-trash\"\n class=\"opacity-0 group-hover/note:opacity-100\"\n @click=\"handleDelete\"\n />\n </div>\n <p\n v-dompurify-html=\"formatMessage(note.content || '')\"\n class=\"mb-0 prose-sm prose-p:mb-1 prose-p:mt-0 prose-ul:mb-1 prose-ul:mt-0 text-n-slate-12\"\n />\n </div>\n</template>\n","<script setup>\nimport { reactive, computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useStore, useMapGetter } from 'dashboard/composables/store';\nimport { useRoute } from 'vue-router';\nimport { useKeyboardEvents } from 'dashboard/composables/useKeyboardEvents';\n\nimport Editor from 'dashboard/components-next/Editor/Editor.vue';\nimport Spinner from 'dashboard/components-next/spinner/Spinner.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport ContactNoteItem from './components/ContactNoteItem.vue';\n\nconst { t } = useI18n();\nconst store = useStore();\nconst route = useRoute();\n\nconst state = reactive({\n message: '',\n});\n\nconst currentUser = useMapGetter('getCurrentUser');\nconst notesByContact = useMapGetter('contactNotes/getAllNotesByContactId');\nconst uiFlags = useMapGetter('contactNotes/getUIFlags');\nconst isFetchingNotes = computed(() => uiFlags.value.isFetching);\nconst isCreatingNote = computed(() => uiFlags.value.isCreating);\nconst notes = computed(() => notesByContact.value(route.params.contactId));\n\nconst getWrittenBy = note => {\n const isCurrentUser = note?.user?.id === currentUser.value.id;\n return isCurrentUser\n ? t('CONTACTS_LAYOUT.SIDEBAR.NOTES.YOU')\n : note?.user?.name || 'Bot';\n};\n\nconst onAdd = content => {\n if (!content) return;\n const { contactId } = route.params;\n store.dispatch('contactNotes/create', { content, contactId });\n state.message = '';\n};\n\nconst onDelete = noteId => {\n if (!noteId) return;\n const { contactId } = route.params;\n store.dispatch('contactNotes/delete', { noteId, contactId });\n};\n\nconst keyboardEvents = {\n '$mod+Enter': {\n action: () => onAdd(state.message),\n allowOnFocusedInput: true,\n },\n};\nuseKeyboardEvents(keyboardEvents);\n</script>\n\n<template>\n <div class=\"flex flex-col gap-6 py-6\">\n <Editor\n v-model=\"state.message\"\n :placeholder=\"t('CONTACTS_LAYOUT.SIDEBAR.NOTES.PLACEHOLDER')\"\n focus-on-mount\n class=\"[&>div]:!border-transparent [&>div]:px-4 [&>div]:py-4 px-6\"\n >\n <template #actions>\n <div class=\"flex items-center gap-3\">\n <Button\n variant=\"link\"\n color=\"blue\"\n size=\"sm\"\n :label=\"t('CONTACTS_LAYOUT.SIDEBAR.NOTES.SAVE')\"\n class=\"hover:no-underline\"\n :is-loading=\"isCreatingNote\"\n :disabled=\"!state.message || isCreatingNote\"\n @click=\"onAdd(state.message)\"\n />\n </div>\n </template>\n </Editor>\n <div\n v-if=\"isFetchingNotes\"\n class=\"flex items-center justify-center py-10 text-n-slate-11\"\n >\n <Spinner />\n </div>\n <div v-else-if=\"notes.length > 0\">\n <ContactNoteItem\n v-for=\"note in notes\"\n :key=\"note.id\"\n :note=\"note\"\n :written-by=\"getWrittenBy(note)\"\n @delete=\"onDelete\"\n />\n </div>\n <p v-else class=\"px-6 py-6 text-sm leading-6 text-center text-n-slate-11\">\n {{ t('CONTACTS_LAYOUT.SIDEBAR.NOTES.EMPTY_STATE') }}\n </p>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useMessageFormatter } from 'shared/composables/useMessageFormatter';\n\nimport Avatar from 'dashboard/components-next/avatar/Avatar.vue';\n\nconst props = defineProps({\n conversation: {\n type: Object,\n required: true,\n },\n});\n\nconst { t } = useI18n();\n\nconst { getPlainText } = useMessageFormatter();\n\nconst lastNonActivityMessageContent = computed(() => {\n const { lastNonActivityMessage = {}, customAttributes = {} } =\n props.conversation;\n const { email: { subject } = {} } = customAttributes;\n return getPlainText(\n subject || lastNonActivityMessage?.content || t('CHAT_LIST.NO_CONTENT')\n );\n});\n\nconst assignee = computed(() => {\n const { meta: { assignee: agent = {} } = {} } = props.conversation;\n return {\n name: agent.name ?? agent.availableName,\n thumbnail: agent.thumbnail,\n status: agent.availabilityStatus,\n };\n});\n\nconst unreadMessagesCount = computed(() => {\n const { unreadCount } = props.conversation;\n return unreadCount;\n});\n</script>\n\n<template>\n <div class=\"flex items-end w-full gap-2 pb-1\">\n <p class=\"w-full mb-0 text-sm leading-7 text-n-slate-12 line-clamp-2\">\n {{ lastNonActivityMessageContent }}\n </p>\n <div class=\"flex items-center flex-shrink-0 gap-2 pb-2\">\n <Avatar\n :name=\"assignee.name\"\n :src=\"assignee.thumbnail\"\n :size=\"20\"\n :status=\"assignee.status\"\n rounded-full\n />\n <div\n v-if=\"unreadMessagesCount > 0\"\n class=\"inline-flex items-center justify-center rounded-full size-5 bg-n-brand\"\n >\n <span class=\"text-xs font-semibold text-white\">\n {{ unreadMessagesCount }}\n </span>\n </div>\n </div>\n </div>\n</template>\n","<script setup>\nimport { ref, computed } from 'vue';\n\nconst props = defineProps({\n conversationLabels: {\n type: Array,\n required: true,\n },\n accountLabels: {\n type: Array,\n required: true,\n },\n});\n\nconst WIDTH_CONFIG = Object.freeze({\n DEFAULT_WIDTH: 80,\n CHAR_WIDTH: {\n SHORT: 8, // For labels <= 5 chars\n LONG: 6, // For labels > 5 chars\n },\n BASE_WIDTH: 12, // dot + gap\n THRESHOLD: 5, // character length threshold\n});\n\nconst containerRef = ref(null);\nconst maxLabels = ref(1);\n\nconst activeLabels = computed(() => {\n const labelSet = new Set(props.conversationLabels);\n return props.accountLabels?.filter(({ title }) => labelSet.has(title));\n});\n\nconst calculateLabelWidth = ({ title = '' }) => {\n const charWidth =\n title.length > WIDTH_CONFIG.THRESHOLD\n ? WIDTH_CONFIG.CHAR_WIDTH.LONG\n : WIDTH_CONFIG.CHAR_WIDTH.SHORT;\n\n return title.length * charWidth + WIDTH_CONFIG.BASE_WIDTH;\n};\n\nconst getAverageWidth = labels => {\n if (!labels.length) return WIDTH_CONFIG.DEFAULT_WIDTH;\n\n const totalWidth = labels.reduce(\n (sum, label) => sum + calculateLabelWidth(label),\n 0\n );\n\n return totalWidth / labels.length;\n};\n\nconst visibleLabels = computed(() =>\n activeLabels.value?.slice(0, maxLabels.value)\n);\n\nconst updateVisibleLabels = () => {\n if (!containerRef.value) return;\n\n const containerWidth = containerRef.value.offsetWidth;\n const avgWidth = getAverageWidth(activeLabels.value);\n\n maxLabels.value = Math.max(1, Math.floor(containerWidth / avgWidth));\n};\n</script>\n\n<template>\n <div\n ref=\"containerRef\"\n v-resize=\"updateVisibleLabels\"\n class=\"flex items-center gap-2.5 w-full min-w-0 h-6 overflow-hidden\"\n >\n <template v-for=\"(label, index) in visibleLabels\" :key=\"label.id\">\n <div\n class=\"flex items-center gap-1.5 min-w-0\"\n :class=\"[\n index !== visibleLabels.length - 1\n ? 'flex-shrink-0 text-ellipsis'\n : 'flex-shrink',\n ]\"\n >\n <div\n :style=\"{ backgroundColor: label.color }\"\n class=\"size-1.5 rounded-full flex-shrink-0\"\n />\n <span\n class=\"text-sm text-n-slate-10 whitespace-nowrap\"\n :class=\"{ truncate: index === visibleLabels.length - 1 }\"\n >\n {{ label.title }}\n </span>\n </div>\n </template>\n </div>\n</template>\n","<script setup>\nimport { ref, computed, onMounted, onUnmounted, watch } from 'vue';\nimport { evaluateSLAStatus } from '@chatwoot/utils';\n\nconst props = defineProps({\n conversation: {\n type: Object,\n required: true,\n },\n});\n\nconst REFRESH_INTERVAL = 60000;\n\nconst timer = ref(null);\nconst slaStatus = ref({\n threshold: null,\n isSlaMissed: false,\n type: null,\n icon: null,\n});\n\n// TODO: Remove this once we update the helper from utils\n// https://github.com/chatwoot/utils/blob/main/src/sla.ts#L73\nconst convertObjectCamelCaseToSnakeCase = object => {\n return Object.keys(object).reduce((acc, key) => {\n acc[key.replace(/([A-Z])/g, '_$1').toLowerCase()] = object[key];\n return acc;\n }, {});\n};\n\nconst appliedSLA = computed(() => props.conversation?.appliedSla);\nconst isSlaMissed = computed(() => slaStatus.value?.isSlaMissed);\n\nconst hasSlaThreshold = computed(() => {\n return slaStatus.value?.threshold && appliedSLA.value?.id;\n});\n\nconst slaStatusText = computed(() => {\n return slaStatus.value?.type?.toUpperCase();\n});\n\nconst updateSlaStatus = () => {\n slaStatus.value = evaluateSLAStatus({\n appliedSla: convertObjectCamelCaseToSnakeCase(appliedSLA.value || {}),\n chat: props.conversation,\n });\n};\n\nconst createTimer = () => {\n timer.value = setTimeout(() => {\n updateSlaStatus();\n createTimer();\n }, REFRESH_INTERVAL);\n};\n\nonMounted(() => {\n updateSlaStatus();\n createTimer();\n});\n\nonUnmounted(() => {\n if (timer.value) {\n clearTimeout(timer.value);\n }\n});\n\nwatch(() => props.conversation, updateSlaStatus);\n\n// This expose is to provide context to the parent component, so that it can decided weather\n// a new row has to be added to the conversation card or not\n// SLACardLabel > CardMessagePreviewWithMeta > ConversationCard\n//\n// We need to do this becuase each SLA card has it's own SLA timer\n// and it's just convenient to have this logic in the SLACardLabel component\n// However this is a bit hacky, and we should change this in the future\n//\n// TODO: A better implementation would be to have the timer as a shared composable, just like the provider pattern\n// we use across the next components. Have the calculation be done on the top ConversationCard component\n// and then the value be injected to the SLACardLabel component\ndefineExpose({\n hasSlaThreshold,\n});\n</script>\n\n<template>\n <div class=\"flex items-center min-w-fit gap-0.5 h-6\">\n <div class=\"flex items-center justify-center size-4\">\n <svg\n width=\"10\"\n height=\"13\"\n viewBox=\"0 0 10 13\"\n fill=\"none\"\n :class=\"isSlaMissed ? 'fill-n-ruby-10' : 'fill-n-slate-9'\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4.55091 12.412C7.44524 12.412 9.37939 10.4571 9.37939 7.51446C9.37939 2.63072 5.21405 0.599854 2.36808 0.599854C1.81546 0.599854 1.45626 0.800176 1.45626 1.1801C1.45626 1.32516 1.52534 1.48404 1.64277 1.62219C2.27828 2.38204 2.92069 3.27314 2.93451 4.36455C2.93451 4.5925 2.9276 4.78592 2.76181 5.08295L3.05194 5.03459C2.81017 4.21949 2.18848 3.63234 1.5806 3.63234C1.32501 3.63234 1.15232 3.81884 1.15232 4.09514C1.15232 4.23331 1.19377 4.56488 1.19377 4.79974C1.19377 5.95332 0.26123 6.69935 0.26123 8.67495C0.26123 10.92 1.97434 12.412 4.55091 12.412ZM4.68906 10.8923C3.65982 10.8923 2.96905 10.2637 2.96905 9.33119C2.96905 8.3572 3.66672 8.01181 3.75652 7.38322C3.76344 7.32796 3.79107 7.31414 3.83251 7.34867C4.08809 7.57663 4.24697 7.85293 4.37822 8.1776C4.67525 7.77696 4.81341 6.9204 4.73051 6.0293C4.72361 5.97404 4.75814 5.94642 4.80649 5.96713C6.02916 6.53357 6.65085 7.74241 6.65085 8.82693C6.65085 9.92527 6.00844 10.8923 4.68906 10.8923Z\"\n />\n </svg>\n </div>\n\n <span\n class=\"text-sm truncate\"\n :class=\"isSlaMissed ? 'text-n-ruby-11' : 'text-n-slate-11'\"\n >\n {{ `${slaStatusText}: ${slaStatus.threshold}` }}\n </span>\n </div>\n</template>\n","<script setup>\nimport { computed, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useMessageFormatter } from 'shared/composables/useMessageFormatter';\n\nimport Avatar from 'dashboard/components-next/avatar/Avatar.vue';\nimport CardLabels from 'dashboard/components-next/Conversation/ConversationCard/CardLabels.vue';\nimport SLACardLabel from 'dashboard/components-next/Conversation/ConversationCard/SLACardLabel.vue';\n\nconst props = defineProps({\n conversation: {\n type: Object,\n required: true,\n },\n accountLabels: {\n type: Array,\n required: true,\n },\n});\n\nconst { t } = useI18n();\n\nconst slaCardLabelRef = ref(null);\n\nconst { getPlainText } = useMessageFormatter();\n\nconst lastNonActivityMessageContent = computed(() => {\n const { lastNonActivityMessage = {}, customAttributes = {} } =\n props.conversation;\n const { email: { subject } = {} } = customAttributes;\n return getPlainText(\n subject || lastNonActivityMessage?.content || t('CHAT_LIST.NO_CONTENT')\n );\n});\n\nconst assignee = computed(() => {\n const { meta: { assignee: agent = {} } = {} } = props.conversation;\n return {\n name: agent.name ?? agent.availableName,\n thumbnail: agent.thumbnail,\n status: agent.availabilityStatus,\n };\n});\n\nconst unreadMessagesCount = computed(() => {\n const { unreadCount } = props.conversation;\n return unreadCount;\n});\n\nconst hasSlaThreshold = computed(() => {\n return (\n slaCardLabelRef.value?.hasSlaThreshold && props.conversation?.slaPolicyId\n );\n});\n\ndefineExpose({\n hasSlaThreshold,\n});\n</script>\n\n<template>\n <div class=\"flex flex-col w-full gap-1\">\n <div class=\"flex items-center justify-between w-full gap-2 py-1 h-7\">\n <p class=\"mb-0 text-sm leading-7 text-n-slate-12 line-clamp-1\">\n {{ lastNonActivityMessageContent }}\n </p>\n\n <div\n v-if=\"unreadMessagesCount > 0\"\n class=\"inline-flex items-center justify-center flex-shrink-0 rounded-full size-5 bg-n-brand\"\n >\n <span class=\"text-xs font-semibold text-white\">\n {{ unreadMessagesCount }}\n </span>\n </div>\n </div>\n\n <div\n class=\"grid items-center gap-2.5 h-7\"\n :class=\"\n hasSlaThreshold\n ? 'grid-cols-[auto_auto_1fr_20px]'\n : 'grid-cols-[1fr_20px]'\n \"\n >\n <SLACardLabel\n v-show=\"hasSlaThreshold\"\n ref=\"slaCardLabelRef\"\n :conversation=\"conversation\"\n />\n <div v-if=\"hasSlaThreshold\" class=\"w-px h-3 bg-n-slate-4\" />\n <div class=\"overflow-hidden\">\n <CardLabels\n :conversation-labels=\"conversation.labels\"\n :account-labels=\"accountLabels\"\n />\n </div>\n <Avatar\n :name=\"assignee.name\"\n :src=\"assignee.thumbnail\"\n :size=\"20\"\n :status=\"assignee.status\"\n rounded-full\n />\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed, ref } from 'vue';\nimport { getInboxIconByType } from 'dashboard/helper/inbox';\nimport { useRouter, useRoute } from 'vue-router';\nimport { frontendURL, conversationUrl } from 'dashboard/helper/URLHelper.js';\nimport { dynamicTime, shortTimestamp } from 'shared/helpers/timeHelper';\n\nimport Icon from 'dashboard/components-next/icon/Icon.vue';\nimport Avatar from 'dashboard/components-next/avatar/Avatar.vue';\nimport CardMessagePreview from './CardMessagePreview.vue';\nimport CardMessagePreviewWithMeta from './CardMessagePreviewWithMeta.vue';\nimport CardPriorityIcon from './CardPriorityIcon.vue';\n\nconst props = defineProps({\n conversation: {\n type: Object,\n required: true,\n },\n contact: {\n type: Object,\n required: true,\n },\n stateInbox: {\n type: Object,\n required: true,\n },\n accountLabels: {\n type: Array,\n required: true,\n },\n});\n\nconst router = useRouter();\nconst route = useRoute();\n\nconst cardMessagePreviewWithMetaRef = ref(null);\n\nconst currentContact = computed(() => props.contact);\n\nconst currentContactName = computed(() => currentContact.value?.name);\nconst currentContactThumbnail = computed(() => currentContact.value?.thumbnail);\nconst currentContactStatus = computed(\n () => currentContact.value?.availabilityStatus\n);\n\nconst inbox = computed(() => props.stateInbox);\n\nconst inboxName = computed(() => inbox.value?.name);\n\nconst inboxIcon = computed(() => {\n const { phoneNumber, channelType } = inbox.value;\n return getInboxIconByType(channelType, phoneNumber);\n});\n\nconst lastActivityAt = computed(() => {\n const timestamp = props.conversation?.timestamp;\n return timestamp ? shortTimestamp(dynamicTime(timestamp)) : '';\n});\n\nconst showMessagePreviewWithoutMeta = computed(() => {\n const { labels = [] } = props.conversation;\n return (\n !cardMessagePreviewWithMetaRef.value?.hasSlaThreshold && labels.length === 0\n );\n});\n\nconst onCardClick = e => {\n const path = frontendURL(\n conversationUrl({\n accountId: route.params.accountId,\n id: props.conversation.id,\n })\n );\n\n if (e.metaKey || e.ctrlKey) {\n window.open(\n window.chatwootConfig.hostURL + path,\n '_blank',\n 'noopener noreferrer nofollow'\n );\n return;\n }\n router.push({ path });\n};\n</script>\n\n<template>\n <div\n role=\"button\"\n class=\"flex w-full gap-3 px-3 py-4 transition-all duration-300 ease-in-out cursor-pointer\"\n @click=\"onCardClick\"\n >\n <Avatar\n :name=\"currentContactName\"\n :src=\"currentContactThumbnail\"\n :size=\"24\"\n :status=\"currentContactStatus\"\n rounded-full\n />\n <div class=\"flex flex-col w-full gap-1 min-w-0\">\n <div class=\"flex items-center justify-between h-6 gap-2\">\n <h4 class=\"text-base font-medium truncate text-n-slate-12\">\n {{ currentContactName }}\n </h4>\n <div class=\"flex items-center gap-2\">\n <CardPriorityIcon :priority=\"conversation.priority || null\" />\n <div\n v-tooltip.left=\"inboxName\"\n class=\"flex items-center justify-center flex-shrink-0 rounded-full bg-n-alpha-2 size-5\"\n >\n <Icon\n :icon=\"inboxIcon\"\n class=\"flex-shrink-0 text-n-slate-11 size-3\"\n />\n </div>\n <span class=\"text-sm text-n-slate-10\">\n {{ lastActivityAt }}\n </span>\n </div>\n </div>\n <CardMessagePreview\n v-show=\"showMessagePreviewWithoutMeta\"\n :conversation=\"conversation\"\n />\n <CardMessagePreviewWithMeta\n v-show=\"!showMessagePreviewWithoutMeta\"\n ref=\"cardMessagePreviewWithMetaRef\"\n :conversation=\"conversation\"\n :account-labels=\"accountLabels\"\n />\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useMapGetter } from 'dashboard/composables/store';\nimport { useRoute } from 'vue-router';\nimport { useI18n } from 'vue-i18n';\n\nimport Spinner from 'dashboard/components-next/spinner/Spinner.vue';\nimport ConversationCard from 'dashboard/components-next/Conversation/ConversationCard/ConversationCard.vue';\n\nconst { t } = useI18n();\nconst route = useRoute();\n\nconst conversations = useMapGetter(\n 'contactConversations/getAllConversationsByContactId'\n);\nconst contactsById = useMapGetter('contacts/getContactById');\nconst stateInbox = useMapGetter('inboxes/getInboxById');\nconst accountLabels = useMapGetter('labels/getLabels');\n\nconst accountLabelsValue = computed(() => accountLabels.value);\n\nconst uiFlags = useMapGetter('contactConversations/getUIFlags');\nconst isFetching = computed(() => uiFlags.value.isFetching);\n\nconst contactConversations = computed(() =>\n conversations.value(route.params.contactId)\n);\n</script>\n\n<template>\n <div\n v-if=\"isFetching\"\n class=\"flex items-center justify-center py-10 text-n-slate-11\"\n >\n <Spinner />\n </div>\n <div\n v-else-if=\"contactConversations.length > 0\"\n class=\"px-6 py-4 divide-y divide-n-strong [&>*:hover]:!border-y-transparent [&>*:hover+*]:!border-t-transparent\"\n >\n <ConversationCard\n v-for=\"conversation in contactConversations\"\n :key=\"conversation.id\"\n :conversation=\"conversation\"\n :contact=\"contactsById(conversation.meta.sender.id)\"\n :state-inbox=\"stateInbox(conversation.inboxId)\"\n :account-labels=\"accountLabelsValue\"\n class=\"rounded-none hover:rounded-xl hover:bg-n-alpha-1 dark:hover:bg-n-alpha-3\"\n />\n </div>\n <p v-else class=\"px-6 py-10 text-sm leading-6 text-center text-n-slate-11\">\n {{ t('CONTACTS_LAYOUT.SIDEBAR.HISTORY.EMPTY_STATE') }}\n </p>\n</template>\n","<script setup>\nimport Avatar from 'dashboard/components-next/avatar/Avatar.vue';\nimport ComboBox from 'dashboard/components-next/combobox/ComboBox.vue';\nimport { useI18n } from 'vue-i18n';\n\ndefineProps({\n selectedContact: {\n type: Object,\n required: true,\n },\n primaryContactId: {\n type: [Number, null],\n default: null,\n },\n primaryContactList: {\n type: Array,\n default: () => [],\n },\n isSearching: {\n type: Boolean,\n default: false,\n },\n hasError: {\n type: Boolean,\n default: false,\n },\n errorMessage: {\n type: String,\n default: '',\n },\n});\n\nconst emit = defineEmits(['update:primaryContactId', 'search']);\n\nconst { t } = useI18n();\n</script>\n\n<template>\n <div class=\"flex flex-col\">\n <div class=\"flex flex-col gap-2\">\n <div class=\"flex items-center justify-between h-5 gap-2\">\n <label class=\"text-sm text-n-slate-12\">\n {{ t('CONTACTS_LAYOUT.SIDEBAR.MERGE.PRIMARY') }}\n </label>\n <span\n class=\"flex items-center justify-center w-24 h-5 text-xs rounded-md text-n-teal-11 bg-n-alpha-2\"\n >\n {{ t('CONTACTS_LAYOUT.SIDEBAR.MERGE.PRIMARY_HELP_LABEL') }}\n </span>\n </div>\n <ComboBox\n id=\"inbox\"\n use-api-results\n :model-value=\"primaryContactId\"\n :options=\"primaryContactList\"\n :empty-state=\"\n isSearching\n ? t('CONTACTS_LAYOUT.SIDEBAR.MERGE.IS_SEARCHING')\n : t('CONTACTS_LAYOUT.SIDEBAR.MERGE.EMPTY_STATE')\n \"\n :search-placeholder=\"\n t('CONTACTS_LAYOUT.SIDEBAR.MERGE.SEARCH_PLACEHOLDER')\n \"\n :placeholder=\"t('CONTACTS_LAYOUT.SIDEBAR.MERGE.PLACEHOLDER')\"\n :has-error=\"hasError\"\n :message=\"errorMessage\"\n class=\"[&>div>button]:bg-n-alpha-black2\"\n @update:model-value=\"value => emit('update:primaryContactId', value)\"\n @search=\"query => emit('search', query)\"\n />\n </div>\n <div class=\"relative flex justify-center gap-2 top-4\">\n <div v-for=\"i in 3\" :key=\"i\" class=\"relative w-4 h-8\">\n <div\n class=\"absolute w-0 h-0 border-l-[4px] border-r-[4px] border-b-[6px] border-l-transparent border-r-transparent border-n-strong ltr:translate-x-[4px] rtl:-translate-x-[4px] -translate-y-[4px]\"\n />\n <div\n class=\"absolute w-[1px] h-full bg-n-strong left-1/2 transform -translate-x-1/2\"\n />\n </div>\n </div>\n <div class=\"flex flex-col gap-2\">\n <div class=\"flex items-center justify-between h-5 gap-2\">\n <label class=\"text-sm text-n-slate-12\">\n {{ t('CONTACTS_LAYOUT.SIDEBAR.MERGE.PARENT') }}\n </label>\n <span\n class=\"flex items-center justify-center w-24 h-5 text-xs rounded-md text-n-ruby-11 bg-n-alpha-2\"\n >\n {{ t('CONTACTS_LAYOUT.SIDEBAR.MERGE.PARENT_HELP_LABEL') }}\n </span>\n </div>\n <div\n class=\"border border-n-strong h-[60px] gap-2 flex items-center rounded-xl p-3\"\n >\n <Avatar\n :name=\"selectedContact.name || ''\"\n :src=\"selectedContact.thumbnail || ''\"\n :size=\"32\"\n rounded-full\n />\n <div class=\"flex flex-col w-full min-w-0 gap-1\">\n <span class=\"text-sm leading-4 truncate text-n-slate-11\">\n {{ selectedContact.name }}\n </span>\n <span class=\"text-sm leading-4 truncate text-n-slate-11\">\n {{ selectedContact.email }}\n </span>\n </div>\n </div>\n </div>\n </div>\n</template>\n","<script setup>\nimport { reactive, computed, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useStore, useMapGetter } from 'dashboard/composables/store';\nimport { required } from '@vuelidate/validators';\nimport { useVuelidate } from '@vuelidate/core';\nimport { useRoute } from 'vue-router';\nimport { useAlert, useTrack } from 'dashboard/composables';\nimport ContactAPI from 'dashboard/api/contacts';\nimport { debounce } from '@chatwoot/utils';\nimport { CONTACTS_EVENTS } from 'dashboard/helper/AnalyticsHelper/events';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport ContactMergeForm from 'dashboard/components-next/Contacts/ContactsForm/ContactMergeForm.vue';\n\nconst props = defineProps({\n selectedContact: {\n type: Object,\n required: true,\n },\n});\n\nconst emit = defineEmits(['goToContactsList', 'resetTab']);\n\nconst { t } = useI18n();\nconst store = useStore();\nconst route = useRoute();\n\nconst state = reactive({\n primaryContactId: null,\n});\n\nconst uiFlags = useMapGetter('contacts/getUIFlags');\n\nconst searchResults = ref([]);\nconst isSearching = ref(false);\n\nconst validationRules = {\n primaryContactId: { required },\n};\n\nconst v$ = useVuelidate(validationRules, state);\n\nconst isMergingContact = computed(() => uiFlags.value.isMerging);\n\nconst primaryContactList = computed(\n () =>\n searchResults.value?.map(item => ({\n value: item.id,\n label: `(ID: ${item.id}) ${item.name}`,\n })) ?? []\n);\n\nconst onContactSearch = debounce(\n async query => {\n isSearching.value = true;\n searchResults.value = [];\n try {\n const {\n data: { payload },\n } = await ContactAPI.search(query);\n searchResults.value = payload.filter(\n contact => contact.id !== props.selectedContact.id\n );\n isSearching.value = false;\n } catch (error) {\n useAlert(t('CONTACTS_LAYOUT.SIDEBAR.MERGE.SEARCH_ERROR_MESSAGE'));\n } finally {\n isSearching.value = false;\n }\n },\n 300,\n false\n);\n\nconst resetState = () => {\n if (state.primaryContactId === null) {\n emit('resetTab');\n }\n state.primaryContactId = null;\n searchResults.value = [];\n isSearching.value = false;\n};\n\nconst onMergeContacts = async () => {\n const isFormValid = await v$.value.$validate();\n if (!isFormValid) return;\n\n useTrack(CONTACTS_EVENTS.MERGED_CONTACTS);\n\n try {\n await store.dispatch('contacts/merge', {\n childId: props.selectedContact.id || route.params.contactId,\n parentId: state.primaryContactId,\n });\n emit('goToContactsList');\n useAlert(t('CONTACTS_LAYOUT.SIDEBAR.MERGE.SUCCESS_MESSAGE'));\n resetState();\n } catch (error) {\n useAlert(t('CONTACTS_LAYOUT.SIDEBAR.MERGE.ERROR_MESSAGE'));\n }\n};\n</script>\n\n<template>\n <div class=\"flex flex-col gap-8 px-6 py-6\">\n <div class=\"flex flex-col gap-2\">\n <h4 class=\"text-base text-n-slate-12\">\n {{ t('CONTACTS_LAYOUT.SIDEBAR.MERGE.TITLE') }}\n </h4>\n <p class=\"text-sm text-n-slate-11\">\n {{ t('CONTACTS_LAYOUT.SIDEBAR.MERGE.DESCRIPTION') }}\n </p>\n </div>\n <ContactMergeForm\n v-model:primary-contact-id=\"state.primaryContactId\"\n :selected-contact=\"selectedContact\"\n :primary-contact-list=\"primaryContactList\"\n :is-searching=\"isSearching\"\n :has-error=\"!!v$.primaryContactId.$error\"\n :error-message=\"\n v$.primaryContactId.$error\n ? t('CONTACTS_LAYOUT.SIDEBAR.MERGE.PRIMARY_REQUIRED_ERROR')\n : ''\n \"\n @search=\"onContactSearch\"\n />\n <div class=\"flex items-center justify-between gap-3\">\n <Button\n variant=\"faded\"\n color=\"slate\"\n :label=\"t('CONTACTS_LAYOUT.SIDEBAR.MERGE.BUTTONS.CANCEL')\"\n class=\"w-full bg-n-alpha-2 n-blue-text hover:bg-n-alpha-3\"\n @click=\"resetState\"\n />\n <Button\n :label=\"t('CONTACTS_LAYOUT.SIDEBAR.MERGE.BUTTONS.CONFIRM')\"\n class=\"w-full\"\n :is-loading=\"isMergingContact\"\n :disabled=\"isMergingContact\"\n @click=\"onMergeContacts\"\n />\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useToggle } from '@vueuse/core';\nimport DropdownMenu from 'dashboard/components-next/dropdown-menu/DropdownMenu.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n attribute: {\n type: Object,\n required: true,\n },\n isEditingView: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits(['update', 'delete']);\n\nconst { t } = useI18n();\n\nconst [showAttributeListDropdown, toggleAttributeListDropdown] = useToggle();\n\nconst attributeListMenuItems = computed(() => {\n return (\n props.attribute.attributeValues?.map(value => ({\n label: value,\n value,\n action: 'select',\n isSelected: value === props.attribute.value,\n })) || []\n );\n});\n\nconst handleAttributeAction = async action => {\n emit('update', action.value);\n toggleAttributeListDropdown(false);\n};\n</script>\n\n<template>\n <div\n class=\"flex items-center w-full min-w-0 gap-2\"\n :class=\"{\n 'justify-start': isEditingView,\n 'justify-end': !isEditingView,\n }\"\n >\n <div\n v-on-clickaway=\"() => toggleAttributeListDropdown(false)\"\n class=\"relative flex items-center\"\n >\n <span\n class=\"min-w-0 text-sm\"\n :class=\"{\n 'cursor-pointer text-n-slate-11 hover:text-n-slate-12 py-2 select-none font-medium':\n !isEditingView,\n 'text-n-slate-12 truncate flex-1': isEditingView,\n }\"\n @click=\"toggleAttributeListDropdown(!props.isEditingView)\"\n >\n {{\n attribute.value ||\n t('CONTACTS_LAYOUT.SIDEBAR.ATTRIBUTES.TRIGGER.SELECT')\n }}\n </span>\n <DropdownMenu\n v-if=\"showAttributeListDropdown\"\n :menu-items=\"attributeListMenuItems\"\n show-search\n class=\"w-48 mt-2 top-full\"\n :class=\"{\n 'ltr:right-0 rtl:left-0': !isEditingView,\n 'ltr:left-0 rtl:right-0': isEditingView,\n }\"\n @action=\"handleAttributeAction($event)\"\n />\n </div>\n\n <div v-if=\"isEditingView\" class=\"flex items-center gap-1\">\n <Button\n variant=\"faded\"\n color=\"slate\"\n icon=\"i-lucide-pencil\"\n size=\"xs\"\n class=\"flex-shrink-0 opacity-0 group-hover/attribute:opacity-100 hover:no-underline\"\n @click=\"toggleAttributeListDropdown()\"\n />\n <Button\n variant=\"faded\"\n color=\"ruby\"\n icon=\"i-lucide-trash\"\n size=\"xs\"\n class=\"flex-shrink-0 opacity-0 group-hover/attribute:opacity-100 hover:no-underline\"\n @click=\"emit('delete')\"\n />\n </div>\n </div>\n</template>\n","<script setup>\nimport { useI18n } from 'vue-i18n';\n\nconst emit = defineEmits(['change']);\n\nconst { t } = useI18n();\n\nconst modelValue = defineModel({\n type: Boolean,\n default: false,\n});\n\nconst updateValue = () => {\n modelValue.value = !modelValue.value;\n emit('change', !modelValue.value);\n};\n</script>\n\n<template>\n <button\n type=\"button\"\n class=\"relative h-4 transition-colors duration-200 ease-in-out rounded-full w-7 focus:outline-none focus:ring-1 focus:ring-primary-500 focus:ring-offset-n-slate-2 focus:ring-offset-2\"\n :class=\"modelValue ? 'bg-n-brand' : 'bg-n-alpha-1 dark:bg-n-alpha-2'\"\n role=\"switch\"\n :aria-checked=\"modelValue\"\n @click=\"updateValue\"\n >\n <span class=\"sr-only\">{{ t('SWITCH.TOGGLE') }}</span>\n <span\n class=\"absolute top-[0.07rem] left-0.5 h-3 w-3 transform rounded-full shadow-sm transition-transform duration-200 ease-in-out\"\n :class=\"\n modelValue\n ? 'translate-x-2.5 bg-white'\n : 'translate-x-0 bg-white dark:bg-n-black'\n \"\n />\n </button>\n</template>\n","<script setup>\nimport { ref } from 'vue';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport Switch from 'dashboard/components-next/switch/Switch.vue';\n\nconst props = defineProps({\n attribute: {\n type: Object,\n required: true,\n },\n isEditingView: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits(['update', 'delete']);\n\nconst attributeValue = ref(Boolean(props.attribute.value));\n\nconst handleChange = value => {\n emit('update', value);\n};\n</script>\n\n<template>\n <div\n class=\"flex items-center w-full gap-2\"\n :class=\"{\n 'justify-start': isEditingView,\n 'justify-end': !isEditingView,\n }\"\n >\n <Switch v-model=\"attributeValue\" @change=\"handleChange\" />\n <Button\n v-if=\"isEditingView\"\n variant=\"faded\"\n color=\"ruby\"\n icon=\"i-lucide-trash\"\n size=\"xs\"\n class=\"flex-shrink-0 opacity-0 group-hover/attribute:opacity-100 hover:no-underline\"\n @click=\"emit('delete')\"\n />\n </div>\n</template>\n","<script setup>\nimport { ref, computed } from 'vue';\nimport { parseISO } from 'date-fns';\nimport { useI18n } from 'vue-i18n';\nimport { useVuelidate } from '@vuelidate/core';\nimport { required } from '@vuelidate/validators';\nimport Input from 'dashboard/components-next/input/Input.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n attribute: {\n type: Object,\n required: true,\n },\n isEditingView: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits(['update', 'delete']);\n\nconst { t } = useI18n();\n\nconst isEditingValue = ref(false);\nconst editedValue = ref(props.attribute.value || '');\n\nconst rules = {\n editedValue: {\n required,\n isDate: value => new Date(value).toISOString(),\n },\n};\n\nconst v$ = useVuelidate(rules, { editedValue });\n\nconst formattedDate = computed(() => {\n return props.attribute.value\n ? new Date(props.attribute.value).toLocaleDateString()\n : t('CONTACTS_LAYOUT.SIDEBAR.ATTRIBUTES.TRIGGER.INPUT');\n});\n\nconst hasError = computed(() => v$.value.$errors.length > 0);\n\nconst defaultDateValue = computed({\n get() {\n const existingDate = editedValue.value ?? props.attribute.value;\n if (existingDate) return new Date(existingDate).toISOString().slice(0, 10);\n return isEditingValue.value && !hasError.value\n ? new Date().toISOString().slice(0, 10)\n : '';\n },\n set(value) {\n editedValue.value = value ? new Date(value).toISOString() : value;\n },\n});\n\nconst toggleEditValue = value => {\n isEditingValue.value =\n typeof value === 'boolean' ? value : !isEditingValue.value;\n\n if (isEditingValue.value && !editedValue.value) {\n v$.value.$reset();\n editedValue.value = new Date().toISOString();\n }\n};\n\nconst handleInputUpdate = async () => {\n const isValid = await v$.value.$validate();\n if (!isValid) return;\n\n emit('update', parseISO(editedValue.value));\n isEditingValue.value = false;\n};\n</script>\n\n<template>\n <div\n class=\"flex items-center w-full min-w-0 gap-2\"\n :class=\"{\n 'justify-start': isEditingView,\n 'justify-end': !isEditingView,\n }\"\n >\n <span\n v-if=\"!isEditingValue\"\n class=\"min-w-0 text-sm\"\n :class=\"{\n 'cursor-pointer text-n-slate-11 hover:text-n-slate-12 py-2 select-none font-medium':\n !isEditingView,\n 'text-n-slate-12 truncate': isEditingView,\n }\"\n @click=\"toggleEditValue(!isEditingView)\"\n >\n {{ formattedDate }}\n </span>\n\n <div\n v-if=\"isEditingView && !isEditingValue\"\n class=\"flex items-center gap-1\"\n >\n <Button\n variant=\"faded\"\n color=\"slate\"\n icon=\"i-lucide-pencil\"\n size=\"xs\"\n class=\"flex-shrink-0 opacity-0 group-hover/attribute:opacity-100 hover:no-underline\"\n @click=\"toggleEditValue(true)\"\n />\n <Button\n variant=\"faded\"\n color=\"ruby\"\n icon=\"i-lucide-trash\"\n size=\"xs\"\n class=\"flex-shrink-0 opacity-0 group-hover/attribute:opacity-100 hover:no-underline\"\n @click=\"emit('delete')\"\n />\n </div>\n\n <div\n v-if=\"isEditingValue\"\n v-on-clickaway=\"() => toggleEditValue(false)\"\n class=\"flex items-center w-full\"\n >\n <Input\n v-model=\"defaultDateValue\"\n type=\"date\"\n class=\"w-full [&>p]:absolute [&>p]:mt-0.5 [&>p]:top-8 ltr:[&>p]:left-0 rtl:[&>p]:right-0\"\n :message=\"\n hasError\n ? t('CONTACTS_LAYOUT.SIDEBAR.ATTRIBUTES.VALIDATIONS.INVALID_DATE')\n : ''\n \"\n :message-type=\"hasError ? 'error' : 'info'\"\n autofocus\n custom-input-class=\"h-8 ltr:rounded-r-none rtl:rounded-l-none\"\n @keyup.enter=\"handleInputUpdate\"\n />\n <Button\n icon=\"i-lucide-check\"\n :color=\"hasError ? 'ruby' : 'blue'\"\n size=\"sm\"\n class=\"flex-shrink-0 ltr:rounded-l-none rtl:rounded-r-none\"\n @click=\"handleInputUpdate\"\n />\n </div>\n </div>\n</template>\n","<!-- Attribute type \"Text, URL, Number\" -->\n<script setup>\nimport { ref, computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useVuelidate } from '@vuelidate/core';\nimport { required } from '@vuelidate/validators';\nimport { isValidURL } from 'dashboard/helper/URLHelper.js';\nimport { getRegexp } from 'shared/helpers/Validators';\n\nimport Input from 'dashboard/components-next/input/Input.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n attribute: {\n type: Object,\n required: true,\n },\n isEditingView: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits(['update', 'delete']);\n\nconst { t } = useI18n();\nconst isEditingValue = ref(false);\nconst editedValue = ref(props.attribute.value || '');\n\nconst isAttributeTypeLink = computed(\n () => props.attribute.attributeDisplayType === 'link'\n);\n\nconst isAttributeTypeText = computed(\n () => props.attribute.attributeDisplayType === 'text'\n);\n\nconst isAttributeTypeNumber = computed(\n () => props.attribute.attributeDisplayType === 'number'\n);\n\nconst rules = computed(() => ({\n editedValue: {\n required,\n ...(isAttributeTypeLink.value && {\n url: value => !value || isValidURL(value),\n }),\n ...(isAttributeTypeText.value &&\n props.attribute.regexPattern && {\n regexValidation: value => {\n if (!value) return true;\n return getRegexp(props.attribute.regexPattern).test(value);\n },\n }),\n },\n}));\n\nconst v$ = useVuelidate(rules, { editedValue });\n\nconst hasError = computed(() => v$.value.$error);\n\nconst attributeErrorMessage = computed(() => {\n if (!hasError.value) return '';\n\n if (isAttributeTypeLink.value && v$.value.editedValue.url?.$invalid) {\n return t('CONTACTS_LAYOUT.SIDEBAR.ATTRIBUTES.VALIDATIONS.INVALID_URL');\n }\n\n if (\n isAttributeTypeText.value &&\n props.attribute.regexPattern &&\n v$.value.editedValue.regexValidation?.$invalid\n ) {\n return (\n props.attribute.regexCue ||\n t('CONTACTS_LAYOUT.SIDEBAR.ATTRIBUTES.VALIDATIONS.INVALID_INPUT')\n );\n }\n\n if (isAttributeTypeNumber.value && v$.value.editedValue.required?.$invalid) {\n return t('CONTACTS_LAYOUT.SIDEBAR.ATTRIBUTES.VALIDATIONS.INVALID_NUMBER');\n }\n\n return t('CONTACTS_LAYOUT.SIDEBAR.ATTRIBUTES.VALIDATIONS.REQUIRED');\n});\n\nconst getInputType = computed(() => {\n switch (props.attribute.attributeDisplayType) {\n case 'link':\n return 'url';\n case 'number':\n return 'number';\n default:\n return 'text';\n }\n});\n\nconst toggleEditValue = value => {\n isEditingValue.value =\n typeof value === 'boolean' ? value : !isEditingValue.value;\n if (isEditingValue.value) {\n v$.value.$reset();\n editedValue.value = props.attribute.value || '';\n }\n};\n\nconst handleInputUpdate = async () => {\n const isValid = await v$.value.$validate();\n if (!isValid) return;\n\n emit('update', editedValue.value);\n toggleEditValue(false);\n};\n</script>\n\n<template>\n <div\n class=\"flex items-center w-full min-w-0 gap-2\"\n :class=\"{\n 'justify-start': isEditingView,\n 'justify-end': !isEditingView,\n }\"\n >\n <span\n v-if=\"!isEditingValue\"\n class=\"min-w-0 text-sm\"\n :class=\"{\n 'cursor-pointer text-n-slate-11 hover:text-n-slate-12 py-2 select-none font-medium':\n !isEditingView,\n 'text-n-slate-12 truncate': isEditingView && !isAttributeTypeLink,\n 'truncate hover:text-n-brand text-n-blue-text':\n isEditingView && isAttributeTypeLink,\n }\"\n @click=\"toggleEditValue(!isEditingView)\"\n >\n <a\n v-if=\"isAttributeTypeLink && attribute.value && isEditingView\"\n :href=\"attribute.value\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"hover:underline\"\n @click.stop\n >\n {{ attribute.value }}\n </a>\n <template v-else>\n {{\n attribute.value ||\n t('CONTACTS_LAYOUT.SIDEBAR.ATTRIBUTES.TRIGGER.INPUT')\n }}\n </template>\n </span>\n\n <div\n v-if=\"isEditingView && !isEditingValue\"\n class=\"flex items-center gap-1\"\n >\n <Button\n variant=\"faded\"\n color=\"slate\"\n icon=\"i-lucide-pencil\"\n size=\"xs\"\n class=\"flex-shrink-0 opacity-0 group-hover/attribute:opacity-100 hover:no-underline\"\n @click=\"toggleEditValue(true)\"\n />\n <Button\n variant=\"faded\"\n color=\"ruby\"\n icon=\"i-lucide-trash\"\n size=\"xs\"\n class=\"flex-shrink-0 opacity-0 group-hover/attribute:opacity-100 hover:no-underline\"\n @click=\"emit('delete')\"\n />\n </div>\n\n <div\n v-if=\"isEditingValue\"\n v-on-clickaway=\"() => toggleEditValue(false)\"\n class=\"flex items-center w-full\"\n >\n <Input\n v-model=\"editedValue\"\n :placeholder=\"t('CONTACTS_LAYOUT.SIDEBAR.ATTRIBUTES.TRIGGER.INPUT')\"\n :type=\"getInputType\"\n class=\"w-full [&>p]:absolute [&>p]:mt-0.5 [&>p]:top-8 ltr:[&>p]:left-0 rtl:[&>p]:right-0\"\n autofocus\n :message=\"attributeErrorMessage\"\n :message-type=\"hasError ? 'error' : 'info'\"\n custom-input-class=\"h-8 ltr:rounded-r-none rtl:rounded-l-none\"\n @keyup.enter=\"handleInputUpdate\"\n />\n <Button\n icon=\"i-lucide-check\"\n :color=\"hasError ? 'ruby' : 'blue'\"\n size=\"sm\"\n class=\"flex-shrink-0 ltr:rounded-l-none rtl:rounded-r-none\"\n @click=\"handleInputUpdate\"\n />\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useRoute } from 'vue-router';\nimport { useStore } from 'dashboard/composables/store';\nimport { useAlert } from 'dashboard/composables';\n\nimport ListAttribute from 'dashboard/components-next/CustomAttributes/ListAttribute.vue';\nimport CheckboxAttribute from 'dashboard/components-next/CustomAttributes/CheckboxAttribute.vue';\nimport DateAttribute from 'dashboard/components-next/CustomAttributes/DateAttribute.vue';\nimport OtherAttribute from 'dashboard/components-next/CustomAttributes/OtherAttribute.vue';\n\nconst props = defineProps({\n attribute: {\n type: Object,\n required: true,\n },\n isEditingView: {\n type: Boolean,\n default: false,\n },\n});\n\nconst store = useStore();\nconst { t } = useI18n();\nconst route = useRoute();\n\nconst handleDelete = async () => {\n try {\n await store.dispatch('contacts/deleteCustomAttributes', {\n id: route.params.contactId,\n customAttributes: [props.attribute.attributeKey],\n });\n useAlert(\n t('CONTACTS_LAYOUT.SIDEBAR.ATTRIBUTES.API.DELETE_SUCCESS_MESSAGE')\n );\n } catch (error) {\n useAlert(\n error?.response?.message ||\n t('CONTACTS_LAYOUT.SIDEBAR.ATTRIBUTES.API.DELETE_ERROR')\n );\n }\n};\n\nconst handleUpdate = async value => {\n try {\n await store.dispatch('contacts/update', {\n id: route.params.contactId,\n customAttributes: {\n [props.attribute.attributeKey]: value,\n },\n });\n useAlert(t('CONTACTS_LAYOUT.SIDEBAR.ATTRIBUTES.API.SUCCESS_MESSAGE'));\n } catch (error) {\n useAlert(\n error?.response?.message ||\n t('CONTACTS_LAYOUT.SIDEBAR.ATTRIBUTES.API.UPDATE_ERROR')\n );\n }\n};\n\nconst componentMap = {\n list: ListAttribute,\n checkbox: CheckboxAttribute,\n date: DateAttribute,\n default: OtherAttribute,\n};\n\nconst CurrentAttributeComponent = computed(() => {\n return (\n componentMap[props.attribute.attributeDisplayType] || componentMap.default\n );\n});\n</script>\n\n<template>\n <div\n class=\"grid grid-cols-[140px,1fr] group/attribute items-center w-full gap-2\"\n :class=\"isEditingView ? 'min-h-10' : 'min-h-11'\"\n >\n <div class=\"flex items-center justify-between truncate\">\n <span class=\"text-sm font-medium truncate text-n-slate-12\">\n {{ attribute.attributeDisplayName }}\n </span>\n </div>\n\n <component\n :is=\"CurrentAttributeComponent\"\n :attribute=\"attribute\"\n :is-editing-view=\"isEditingView\"\n @update=\"handleUpdate\"\n @delete=\"handleDelete\"\n />\n </div>\n</template>\n","<script setup>\nimport { ref, computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useMapGetter } from 'dashboard/composables/store';\nimport { useUISettings } from 'dashboard/composables/useUISettings';\n\nimport ContactCustomAttributeItem from 'dashboard/components-next/Contacts/ContactsSidebar/ContactCustomAttributeItem.vue';\n\nconst props = defineProps({\n selectedContact: {\n type: Object,\n default: null,\n },\n});\n\nconst { t } = useI18n();\n\nconst { uiSettings } = useUISettings();\n\nconst searchQuery = ref('');\n\nconst contactAttributes = useMapGetter('attributes/getContactAttributes') || [];\n\nconst hasContactAttributes = computed(\n () => contactAttributes.value?.length > 0\n);\n\nconst processContactAttributes = (\n attributes,\n customAttributes,\n filterCondition\n) => {\n if (!attributes.length || !customAttributes) {\n return [];\n }\n\n return attributes.reduce((result, attribute) => {\n const { attributeKey } = attribute;\n const meetsCondition = filterCondition(attributeKey, customAttributes);\n\n if (meetsCondition) {\n result.push({\n ...attribute,\n value: customAttributes[attributeKey] ?? '',\n });\n }\n\n return result;\n }, []);\n};\n\nconst sortAttributesOrder = computed(\n () =>\n uiSettings.value.conversation_elements_order_conversation_contact_panel ??\n []\n);\n\nconst sortByUISettings = attributes => {\n // Get saved order from UI settings\n // Same as conversation panel contact attribute order\n const order = sortAttributesOrder.value;\n\n // If no order defined, return original array\n if (!order?.length) return attributes;\n\n const orderMap = new Map(order.map((key, index) => [key, index]));\n\n // Sort attributes based on their position in saved order\n return [...attributes].sort((a, b) => {\n // Get positions, use Infinity if not found in order (pushes to end)\n const aPos = orderMap.get(a.attributeKey) ?? Infinity;\n const bPos = orderMap.get(b.attributeKey) ?? Infinity;\n return aPos - bPos;\n });\n};\n\nconst usedAttributes = computed(() => {\n const attributes = processContactAttributes(\n contactAttributes.value,\n props.selectedContact?.customAttributes,\n (key, custom) => key in custom\n );\n\n return sortByUISettings(attributes);\n});\n\nconst unusedAttributes = computed(() => {\n const attributes = processContactAttributes(\n contactAttributes.value,\n props.selectedContact?.customAttributes,\n (key, custom) => !(key in custom)\n );\n\n return sortByUISettings(attributes);\n});\n\nconst filteredUnusedAttributes = computed(() => {\n return unusedAttributes.value?.filter(attribute =>\n attribute.attributeDisplayName\n .toLowerCase()\n .includes(searchQuery.value.toLowerCase())\n );\n});\n\nconst unusedAttributesCount = computed(() => unusedAttributes.value?.length);\nconst hasNoUnusedAttributes = computed(() => unusedAttributesCount.value === 0);\nconst hasNoUsedAttributes = computed(() => usedAttributes.value.length === 0);\n</script>\n\n<template>\n <div v-if=\"hasContactAttributes\" class=\"flex flex-col gap-6 px-6 py-6\">\n <div v-if=\"!hasNoUsedAttributes\" class=\"flex flex-col gap-2\">\n <ContactCustomAttributeItem\n v-for=\"attribute in usedAttributes\"\n :key=\"attribute.id\"\n is-editing-view\n :attribute=\"attribute\"\n />\n </div>\n <div v-if=\"!hasNoUnusedAttributes\" class=\"flex items-center gap-3\">\n <div class=\"flex-1 h-[1px] bg-n-slate-5\" />\n <span class=\"text-sm font-medium text-n-slate-10\">{{\n t('CONTACTS_LAYOUT.SIDEBAR.ATTRIBUTES.UNUSED_ATTRIBUTES', {\n count: unusedAttributesCount,\n })\n }}</span>\n <div class=\"flex-1 h-[1px] bg-n-slate-5\" />\n </div>\n <div class=\"flex flex-col gap-3\">\n <div v-if=\"!hasNoUnusedAttributes\" class=\"relative\">\n <span class=\"absolute i-lucide-search size-3.5 top-2 left-3\" />\n <input\n v-model=\"searchQuery\"\n type=\"search\"\n :placeholder=\"\n t('CONTACTS_LAYOUT.SIDEBAR.ATTRIBUTES.SEARCH_PLACEHOLDER')\n \"\n class=\"w-full h-8 py-2 pl-10 pr-2 text-sm reset-base outline-none border-none rounded-lg bg-n-alpha-black2 dark:bg-n-solid-1 text-n-slate-12\"\n />\n </div>\n <div\n v-if=\"filteredUnusedAttributes.length === 0 && !hasNoUnusedAttributes\"\n class=\"flex items-center justify-start h-11\"\n >\n <p class=\"text-sm text-n-slate-11\">\n {{ t('CONTACTS_LAYOUT.SIDEBAR.ATTRIBUTES.NO_ATTRIBUTES') }}\n </p>\n </div>\n <div v-if=\"!hasNoUnusedAttributes\" class=\"flex flex-col gap-2\">\n <ContactCustomAttributeItem\n v-for=\"attribute in filteredUnusedAttributes\"\n :key=\"attribute.id\"\n :attribute=\"attribute\"\n />\n </div>\n </div>\n </div>\n <p v-else class=\"px-6 py-10 text-sm leading-6 text-center text-n-slate-11\">\n {{ t('CONTACTS_LAYOUT.SIDEBAR.ATTRIBUTES.EMPTY_STATE') }}\n </p>\n</template>\n","<script setup>\nimport { onMounted, computed, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useAlert } from 'dashboard/composables';\nimport { useStore, useMapGetter } from 'dashboard/composables/store';\nimport { useRoute, useRouter } from 'vue-router';\n\nimport ContactsDetailsLayout from 'dashboard/components-next/Contacts/ContactsDetailsLayout.vue';\nimport Spinner from 'dashboard/components-next/spinner/Spinner.vue';\nimport ContactDetails from 'dashboard/components-next/Contacts/Pages/ContactDetails.vue';\nimport TabBar from 'dashboard/components-next/tabbar/TabBar.vue';\nimport ContactNotes from 'dashboard/components-next/Contacts/ContactsSidebar/ContactNotes.vue';\nimport ContactHistory from 'dashboard/components-next/Contacts/ContactsSidebar/ContactHistory.vue';\nimport ContactMerge from 'dashboard/components-next/Contacts/ContactsSidebar/ContactMerge.vue';\nimport ContactCustomAttributes from 'dashboard/components-next/Contacts/ContactsSidebar/ContactCustomAttributes.vue';\n\nconst store = useStore();\nconst route = useRoute();\nconst router = useRouter();\n\nconst contact = useMapGetter('contacts/getContactById');\nconst uiFlags = useMapGetter('contacts/getUIFlags');\n\nconst activeTab = ref('attributes');\nconst contactMergeRef = ref(null);\n\nconst isFetchingItem = computed(() => uiFlags.value.isFetchingItem);\nconst isMergingContact = computed(() => uiFlags.value.isMerging);\nconst isUpdatingContact = computed(() => uiFlags.value.isUpdating);\n\nconst selectedContact = computed(() => contact.value(route.params.contactId));\n\nconst showSpinner = computed(\n () => isFetchingItem.value || isMergingContact.value\n);\n\nconst { t } = useI18n();\n\nconst CONTACT_TABS_OPTIONS = [\n { key: 'ATTRIBUTES', value: 'attributes' },\n { key: 'HISTORY', value: 'history' },\n { key: 'NOTES', value: 'notes' },\n { key: 'MERGE', value: 'merge' },\n];\n\nconst tabs = computed(() => {\n return CONTACT_TABS_OPTIONS.map(tab => ({\n label: t(`CONTACTS_LAYOUT.SIDEBAR.TABS.${tab.key}`),\n value: tab.value,\n }));\n});\n\nconst activeTabIndex = computed(() => {\n return CONTACT_TABS_OPTIONS.findIndex(v => v.value === activeTab.value);\n});\n\nconst goToContactsList = () => {\n if (window.history.state?.back || window.history.length > 1) {\n router.back();\n } else {\n router.push(`/app/accounts/${route.params.accountId}/contacts?page=1`);\n }\n};\n\nconst fetchActiveContact = async () => {\n if (route.params.contactId) {\n await store.dispatch('contacts/show', { id: route.params.contactId });\n await store.dispatch(\n 'contacts/fetchContactableInbox',\n route.params.contactId\n );\n }\n};\n\nconst handleTabChange = tab => {\n activeTab.value = tab.value;\n};\n\nconst fetchContactNotes = () => {\n const { contactId } = route.params;\n if (contactId) store.dispatch('contactNotes/get', { contactId });\n};\n\nconst fetchContactConversations = () => {\n const { contactId } = route.params;\n if (contactId) store.dispatch('contactConversations/get', contactId);\n};\n\nconst fetchAttributes = () => {\n store.dispatch('attributes/get');\n};\n\nconst toggleContactBlock = async isBlocked => {\n const ALERT_MESSAGES = {\n success: {\n block: t('CONTACTS_LAYOUT.HEADER.ACTIONS.BLOCK_SUCCESS_MESSAGE'),\n unblock: t('CONTACTS_LAYOUT.HEADER.ACTIONS.UNBLOCK_SUCCESS_MESSAGE'),\n },\n error: {\n block: t('CONTACTS_LAYOUT.HEADER.ACTIONS.BLOCK_ERROR_MESSAGE'),\n unblock: t('CONTACTS_LAYOUT.HEADER.ACTIONS.UNBLOCK_ERROR_MESSAGE'),\n },\n };\n\n try {\n await store.dispatch(`contacts/update`, {\n ...selectedContact.value,\n blocked: !isBlocked,\n });\n useAlert(\n isBlocked ? ALERT_MESSAGES.success.unblock : ALERT_MESSAGES.success.block\n );\n } catch (error) {\n useAlert(\n isBlocked ? ALERT_MESSAGES.error.unblock : ALERT_MESSAGES.error.block\n );\n }\n};\n\nonMounted(() => {\n fetchActiveContact();\n fetchContactNotes();\n fetchContactConversations();\n fetchAttributes();\n});\n</script>\n\n<template>\n <div\n class=\"flex flex-col justify-between flex-1 h-full m-0 overflow-auto bg-n-background\"\n >\n <ContactsDetailsLayout\n :button-label=\"$t('CONTACTS_LAYOUT.HEADER.SEND_MESSAGE')\"\n :selected-contact=\"selectedContact\"\n is-detail-view\n :show-pagination-footer=\"false\"\n :is-updating=\"isUpdatingContact\"\n @go-to-contacts-list=\"goToContactsList\"\n @toggle-block=\"toggleContactBlock\"\n >\n <div\n v-if=\"showSpinner\"\n class=\"flex items-center justify-center py-10 text-n-slate-11\"\n >\n <Spinner />\n </div>\n <ContactDetails\n v-else-if=\"selectedContact\"\n :selected-contact=\"selectedContact\"\n @go-to-contacts-list=\"goToContactsList\"\n />\n <template #sidebar>\n <div class=\"px-6\">\n <TabBar\n :tabs=\"tabs\"\n :initial-active-tab=\"activeTabIndex\"\n class=\"w-full [&>button]:w-full bg-n-alpha-black2\"\n @tab-changed=\"handleTabChange\"\n />\n </div>\n <div\n v-if=\"isFetchingItem\"\n class=\"flex items-center justify-center py-10 text-n-slate-11\"\n >\n <Spinner />\n </div>\n <template v-else>\n <ContactCustomAttributes\n v-if=\"activeTab === 'attributes'\"\n :selected-contact=\"selectedContact\"\n />\n <ContactNotes v-if=\"activeTab === 'notes'\" />\n <ContactHistory v-if=\"activeTab === 'history'\" />\n <ContactMerge\n v-if=\"activeTab === 'merge'\"\n ref=\"contactMergeRef\"\n :selected-contact=\"selectedContact\"\n @go-to-contacts-list=\"goToContactsList\"\n @reset-tab=\"handleTabChange(CONTACT_TABS_OPTIONS[0])\"\n />\n </template>\n </template>\n </ContactsDetailsLayout>\n </div>\n</template>\n","import { frontendURL } from '../../../helper/URLHelper';\nimport ContactsIndex from './pages/ContactsIndex.vue';\nimport ContactManageView from './pages/ContactManageView.vue';\nimport { FEATURE_FLAGS } from '../../../featureFlags';\n\nconst commonMeta = {\n featureFlag: FEATURE_FLAGS.CRM,\n permissions: ['administrator', 'agent', 'contact_manage'],\n};\n\nexport const routes = [\n {\n path: frontendURL('accounts/:accountId/contacts'),\n component: ContactsIndex,\n meta: commonMeta,\n children: [\n {\n path: '',\n name: 'contacts_dashboard_index',\n component: ContactsIndex,\n meta: commonMeta,\n },\n {\n path: 'segments/:segmentId',\n name: 'contacts_dashboard_segments_index',\n component: ContactsIndex,\n meta: commonMeta,\n },\n {\n path: 'labels/:label',\n name: 'contacts_dashboard_labels_index',\n component: ContactsIndex,\n meta: commonMeta,\n },\n ],\n },\n {\n path: frontendURL('accounts/:accountId/contacts/:contactId'),\n component: ContactManageView,\n meta: commonMeta,\n children: [\n {\n path: '',\n name: 'contacts_edit',\n component: ContactManageView,\n meta: commonMeta,\n },\n {\n path: 'segments/:segmentId',\n name: 'contacts_edit_segment',\n component: ContactManageView,\n meta: commonMeta,\n },\n {\n path: 'labels/:label',\n name: 'contacts_edit_label',\n component: ContactManageView,\n meta: commonMeta,\n },\n ],\n },\n];\n","<script>\nimport Thumbnail from 'dashboard/components/widgets/Thumbnail.vue';\nimport Spinner from 'shared/components/Spinner.vue';\nimport EmptyState from 'dashboard/components/widgets/EmptyState.vue';\nimport { dynamicTime } from 'shared/helpers/timeHelper';\nimport { mapGetters } from 'vuex';\n\nexport default {\n components: {\n Thumbnail,\n Spinner,\n EmptyState,\n },\n props: {\n notifications: {\n type: Array,\n default: () => [],\n },\n isLoading: {\n type: Boolean,\n default: false,\n },\n isUpdating: {\n type: Boolean,\n default: false,\n },\n onClickNotification: {\n type: Function,\n default: () => {},\n },\n onMarkAllDoneClick: {\n type: Function,\n default: () => {},\n },\n },\n computed: {\n ...mapGetters({\n notificationMetadata: 'notifications/getMeta',\n }),\n showEmptyResult() {\n return !this.isLoading && this.notifications.length === 0;\n },\n },\n methods: {\n dynamicTime,\n },\n};\n</script>\n\n<template>\n <section\n class=\"flex-grow flex-shrink h-full px-4 py-8 overflow-hidden bg-white dark:bg-slate-900\"\n >\n <woot-submit-button\n v-if=\"notificationMetadata.unreadCount\"\n class=\"button nice success button--fixed-top\"\n :button-text=\"$t('NOTIFICATIONS_PAGE.MARK_ALL_DONE')\"\n :loading=\"isUpdating\"\n @click=\"onMarkAllDoneClick\"\n />\n\n <table class=\"woot-table notifications-table\">\n <tbody v-show=\"!isLoading\">\n <tr\n v-for=\"notificationItem in notifications\"\n :key=\"notificationItem.id\"\n :class=\"{\n 'is-unread': notificationItem.read_at === null,\n }\"\n @click=\"() => onClickNotification(notificationItem)\"\n >\n <td>\n <div\n class=\"overflow-hidden flex-view notification-contant--wrap whitespace-nowrap text-ellipsis\"\n >\n <h5 class=\"notification--title\">\n {{\n `#${\n notificationItem.primary_actor\n ? notificationItem.primary_actor.id\n : $t(`NOTIFICATIONS_PAGE.DELETE_TITLE`)\n }`\n }}\n </h5>\n <span\n class=\"overflow-hidden notification--message-title whitespace-nowrap text-ellipsis\"\n >\n {{ notificationItem.push_message_title }}\n </span>\n </div>\n </td>\n <td class=\"text-right\">\n <span class=\"notification--type\">\n {{\n $t(\n `NOTIFICATIONS_PAGE.TYPE_LABEL.${notificationItem.notification_type}`\n )\n }}\n </span>\n </td>\n <td class=\"thumbnail--column\">\n <Thumbnail\n v-if=\"notificationItem.primary_actor.meta.assignee\"\n :src=\"notificationItem.primary_actor.meta.assignee.thumbnail\"\n size=\"36px\"\n :username=\"notificationItem.primary_actor.meta.assignee.name\"\n />\n </td>\n <td>\n <div class=\"text-right timestamp--column\">\n <span class=\"notification--created-at\">\n {{ dynamicTime(notificationItem.last_activity_at) }}\n </span>\n </div>\n </td>\n <td>\n <div\n v-if=\"!notificationItem.read_at\"\n class=\"notification--unread-indicator\"\n />\n </td>\n </tr>\n </tbody>\n </table>\n <EmptyState\n v-if=\"showEmptyResult\"\n :title=\"$t('NOTIFICATIONS_PAGE.LIST.404')\"\n />\n <div v-if=\"isLoading\" class=\"notifications--loader\">\n <Spinner />\n <span>{{ $t('NOTIFICATIONS_PAGE.LIST.LOADING_MESSAGE') }}</span>\n </div>\n </section>\n</template>\n\n<style lang=\"scss\" scoped>\n@import 'dashboard/assets/scss/mixins';\n\n.notification--title {\n @apply text-sm m-0 text-slate-800 dark:text-slate-100;\n}\n\n.notifications-table {\n > tbody {\n > tr {\n @apply cursor-pointer;\n\n &:hover {\n @apply bg-slate-50 dark:bg-slate-800;\n }\n\n &.is-active {\n @apply bg-slate-100 dark:bg-slate-700;\n }\n\n > td {\n &.conversation-count-item {\n @apply pl-6 rtl:pl-0 rtl:pr-6;\n }\n }\n\n &:last-child {\n @apply border-b-0;\n }\n }\n }\n}\n\n.is-unread {\n @apply font-semibold;\n}\n\n.notifications--loader {\n @apply text-base flex items-center justify-center p-10;\n}\n\n.notification--unread-indicator {\n @apply w-2.5 h-2.5 rounded-full bg-woot-500 dark:bg-woot-500;\n}\n\n.notification--created-at {\n @apply text-slate-700 dark:text-slate-200 text-xs;\n}\n\n.notification--type {\n @apply text-xs;\n}\n\n.thumbnail--column {\n @apply w-[3.25rem];\n}\n\n.timestamp--column {\n @apply min-w-[9.125rem] text-right;\n}\n\n.notification-contant--wrap {\n @apply flex-col max-w-[31.25rem];\n}\n\n.notification--message-title {\n @apply text-slate-700 dark:text-slate-100;\n}\n</style>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useTrack } from 'dashboard/composables';\nimport TableFooter from 'dashboard/components/widgets/TableFooter.vue';\n\nimport NotificationTable from './NotificationTable.vue';\n\nimport { ACCOUNT_EVENTS } from '../../../../helper/AnalyticsHelper/events';\nexport default {\n components: {\n NotificationTable,\n TableFooter,\n },\n computed: {\n ...mapGetters({\n accountId: 'getCurrentAccountId',\n meta: 'notifications/getMeta',\n records: 'notifications/getNotifications',\n uiFlags: 'notifications/getUIFlags',\n }),\n },\n mounted() {\n this.$store.dispatch('notifications/get', { page: 1 });\n },\n methods: {\n onPageChange(page) {\n window.history.pushState({}, null, `${this.$route.path}?page=${page}`);\n this.$store.dispatch('notifications/get', { page });\n },\n openConversation(notification) {\n const {\n primary_actor_id: primaryActorId,\n primary_actor_type: primaryActorType,\n primary_actor: { id: conversationId },\n notification_type: notificationType,\n } = notification;\n\n useTrack(ACCOUNT_EVENTS.OPEN_CONVERSATION_VIA_NOTIFICATION, {\n notificationType,\n });\n this.$store.dispatch('notifications/read', {\n id: notification.id,\n primaryActorId,\n primaryActorType,\n unreadCount: this.meta.unreadCount,\n });\n\n this.$router.push(\n `/app/accounts/${this.accountId}/conversations/${conversationId}`\n );\n },\n onMarkAllDoneClick() {\n useTrack(ACCOUNT_EVENTS.MARK_AS_READ_NOTIFICATIONS);\n this.$store.dispatch('notifications/readAll');\n },\n },\n};\n</script>\n\n<template>\n <div class=\"h-full overflow-y-auto\">\n <div class=\"flex flex-col h-full\">\n <NotificationTable\n :notifications=\"records\"\n :is-loading=\"uiFlags.isFetching\"\n :is-updating=\"uiFlags.isUpdating\"\n :on-click-notification=\"openConversation\"\n :on-mark-all-done-click=\"onMarkAllDoneClick\"\n />\n <TableFooter\n class=\"border-t border-slate-75 dark:border-slate-700/50\"\n :current-page=\"Number(meta.currentPage)\"\n :total-count=\"meta.count\"\n :page-size=\"15\"\n @page-change=\"onPageChange\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.notification--page {\n background: var(--white);\n overflow-y: auto;\n width: 100%;\n}\n\n.notification--content {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n</style>\n","/* eslint arrow-body-style: 0 */\nimport { frontendURL } from '../../../helper/URLHelper';\nimport SettingsWrapper from '../settings/Wrapper.vue';\nimport NotificationsView from './components/NotificationsView.vue';\n\nexport const routes = [\n {\n path: frontendURL('accounts/:accountId/notifications'),\n component: SettingsWrapper,\n props: {\n headerTitle: 'NOTIFICATIONS_PAGE.HEADER',\n icon: 'alert',\n showNewButton: false,\n showSidemenuIcon: false,\n },\n children: [\n {\n path: '',\n name: 'notifications_index',\n component: NotificationsView,\n meta: {\n permissions: ['administrator', 'agent', 'custom_role'],\n },\n },\n ],\n },\n];\n","export const NOTIFICATION_TYPES_MAPPING = {\n CONVERSATION_MENTION: ['i-lucide-at-sign', 'text-n-blue-text'],\n CONVERSATION_ASSIGNMENT: ['i-lucide-chevrons-right', 'text-n-blue-text'],\n CONVERSATION_CREATION: ['i-lucide-mail-plus', 'text-n-blue-text'],\n PARTICIPATING_CONVERSATION_NEW_MESSAGE: [\n 'i-lucide-message-square-plus',\n 'text-n-blue-text',\n ],\n ASSIGNED_CONVERSATION_NEW_MESSAGE: [\n 'i-lucide-message-square-plus',\n 'text-n-blue-text',\n ],\n SLA_MISSED_FIRST_RESPONSE: ['i-lucide-heart-crack', 'text-n-ruby-11'],\n SLA_MISSED_NEXT_RESPONSE: ['i-lucide-heart-crack', 'text-n-ruby-11'],\n SLA_MISSED_RESOLUTION: ['i-lucide-heart-crack', 'text-n-ruby-11'],\n};\n","<script>\nimport ContextMenu from 'dashboard/components/ui/ContextMenu.vue';\nimport MenuItem from './MenuItem.vue';\n\nexport default {\n components: {\n MenuItem,\n ContextMenu,\n },\n props: {\n contextMenuPosition: {\n type: Object,\n default: () => ({}),\n },\n menuItems: {\n type: Array,\n default: () => [],\n },\n },\n emits: ['close', 'selectAction'],\n methods: {\n handleClose() {\n this.$emit('close');\n },\n onMenuItemClick(key) {\n this.$emit('selectAction', key);\n this.handleClose();\n },\n },\n};\n</script>\n\n<template>\n <ContextMenu\n :x=\"contextMenuPosition.x\"\n :y=\"contextMenuPosition.y\"\n @close=\"handleClose\"\n >\n <div\n class=\"bg-n-alpha-3 backdrop-blur-[100px] w-40 py-2 px-2 outline outline-1 outline-n-container shadow-lg rounded-xl\"\n >\n <MenuItem\n v-for=\"item in menuItems\"\n :key=\"item.key\"\n :label=\"item.label\"\n @click.stop=\"onMenuItemClick(item.key)\"\n />\n </div>\n </ContextMenu>\n</template>\n","<script setup>\nimport { computed, ref, onBeforeMount } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { getInboxIconByType } from 'dashboard/helper/inbox';\nimport { dynamicTime, shortTimestamp } from 'shared/helpers/timeHelper';\nimport {\n snoozedReopenTimeToTimestamp,\n shortenSnoozeTime,\n} from 'dashboard/helper/snoozeHelpers';\nimport { NOTIFICATION_TYPES_MAPPING } from 'dashboard/routes/dashboard/inbox/helpers/InboxViewHelpers';\n\nimport Icon from 'dashboard/components-next/icon/Icon.vue';\nimport Avatar from 'dashboard/components-next/avatar/Avatar.vue';\nimport CardPriorityIcon from 'dashboard/components-next/Conversation/ConversationCard/CardPriorityIcon.vue';\nimport SLACardLabel from 'dashboard/components-next/Conversation/ConversationCard/SLACardLabel.vue';\nimport InboxContextMenu from 'dashboard/routes/dashboard/inbox/components/InboxContextMenu.vue';\n\nconst props = defineProps({\n inboxItem: { type: Object, default: () => ({}) },\n stateInbox: { type: Object, default: () => ({}) },\n});\n\nconst emit = defineEmits([\n 'click',\n 'contextMenuOpen',\n 'contextMenuClose',\n 'markNotificationAsRead',\n 'markNotificationAsUnRead',\n 'deleteNotification',\n]);\n\nconst { t } = useI18n();\n\nconst isContextMenuOpen = ref(false);\nconst contextMenuPosition = ref({ x: null, y: null });\nconst slaCardLabel = ref(null);\n\nconst getMessageClasses = {\n emphasis: 'text-sm font-medium text-n-slate-11',\n emphasisUnread: 'text-sm font-medium text-n-slate-12',\n normal: 'text-sm font-normal text-n-slate-11',\n normalUnread: 'text-sm text-n-slate-12',\n};\n\nconst primaryActor = computed(() => props.inboxItem?.primaryActor);\nconst meta = computed(() => primaryActor.value?.meta);\nconst assigneeMeta = computed(() => meta.value?.sender);\nconst isUnread = computed(() => !props.inboxItem?.readAt);\nconst inbox = computed(() => props.stateInbox);\n\nconst inboxIcon = computed(() => {\n const { phoneNumber, channelType } = inbox.value;\n return getInboxIconByType(channelType, phoneNumber);\n});\n\nconst hasSlaThreshold = computed(() => {\n return slaCardLabel.value?.hasSlaThreshold && primaryActor.value?.slaPolicyId;\n});\n\nconst lastActivityAt = computed(() => {\n const timestamp = props.inboxItem?.lastActivityAt;\n return timestamp ? shortTimestamp(dynamicTime(timestamp)) : '';\n});\n\nconst menuItems = computed(() => [\n { key: 'delete', label: t('INBOX.MENU_ITEM.DELETE') },\n {\n key: isUnread.value ? 'mark_as_read' : 'mark_as_unread',\n label: t(`INBOX.MENU_ITEM.MARK_AS_${isUnread.value ? 'READ' : 'UNREAD'}`),\n },\n]);\n\nconst messageClasses = computed(() => ({\n emphasis: isUnread.value\n ? getMessageClasses.emphasisUnread\n : getMessageClasses.emphasis,\n normal: isUnread.value\n ? getMessageClasses.normalUnread\n : getMessageClasses.normal,\n}));\n\nconst formatPushMessage = message => {\n if (message.startsWith(': ')) {\n return message.slice(2);\n }\n\n return message.replace(/^([^:]+):/g, (match, name) => {\n return `<span class=\"${messageClasses.value.emphasis}\">${name}:</span>`;\n });\n};\n\nconst formattedMessage = computed(() => {\n const messageContent = `<span class=\"${messageClasses.value.normal}\">${formatPushMessage(props.inboxItem?.pushMessageBody || '')}</span>`;\n\n return isUnread.value\n ? `<span class=\"inline-flex flex-shrink-0 w-2 h-2 mb-px rounded-full bg-n-iris-10 ltr:mr-1 rtl:ml-1\"></span> ${messageContent}`\n : messageContent;\n});\n\nconst notificationDetails = computed(() => {\n const type = props.inboxItem?.notificationType?.toUpperCase() || '';\n const [icon = '', color = 'text-n-blue-text'] =\n NOTIFICATION_TYPES_MAPPING[type] || [];\n return { text: type ? t(`INBOX.TYPES_NEXT.${type}`) : '', icon, color };\n});\n\nconst snoozedUntilTime = computed(() => {\n const { snoozedUntil } = props.inboxItem;\n if (!snoozedUntil) return null;\n return shortenSnoozeTime(\n dynamicTime(snoozedReopenTimeToTimestamp(snoozedUntil))\n );\n});\n\nconst hasLastSnoozed = computed(() => props.inboxItem?.meta?.lastSnoozedAt);\n\nconst snoozedText = computed(() => {\n return !hasLastSnoozed.value\n ? t('INBOX.TYPES_NEXT.SNOOZED_UNTIL', {\n time: shortTimestamp(snoozedUntilTime.value),\n })\n : t('INBOX.TYPES_NEXT.SNOOZED_ENDS');\n});\n\nconst contextMenuActions = {\n close: () => {\n isContextMenuOpen.value = false;\n contextMenuPosition.value = { x: null, y: null };\n emit('contextMenuClose');\n },\n open: e => {\n e.preventDefault();\n contextMenuPosition.value = {\n x: e.pageX || e.clientX,\n y: e.pageY || e.clientY,\n };\n isContextMenuOpen.value = true;\n emit('contextMenuOpen');\n },\n handle: key => {\n const actions = {\n mark_as_read: () => emit('markNotificationAsRead', props.inboxItem),\n mark_as_unread: () => emit('markNotificationAsUnRead', props.inboxItem),\n delete: () => emit('deleteNotification', props.inboxItem),\n };\n actions[key]?.();\n },\n};\n\nonBeforeMount(contextMenuActions.close);\n</script>\n\n<template>\n <div\n role=\"button\"\n class=\"flex flex-col w-full gap-2 p-3 transition-all duration-300 ease-in-out cursor-pointer\"\n @contextmenu=\"contextMenuActions.open($event)\"\n @click=\"emit('click')\"\n >\n <div class=\"flex items-start gap-2\">\n <Avatar\n :name=\"assigneeMeta.name\"\n :src=\"assigneeMeta.thumbnail\"\n :size=\"20\"\n rounded-full\n class=\"mt-1\"\n />\n <p v-dompurify-html=\"formattedMessage\" class=\"mb-0 line-clamp-2\" />\n </div>\n <div class=\"flex items-center justify-between h-6 gap-2\">\n <div class=\"flex items-center flex-1 min-w-0 gap-1\">\n <div\n v-if=\"snoozedUntilTime || hasLastSnoozed\"\n class=\"flex items-center w-full min-w-0 gap-2 ltr:pl-1 rtl:pr-1\"\n >\n <Icon\n :icon=\"\n !hasLastSnoozed\n ? 'i-lucide-alarm-clock-plus'\n : 'i-lucide-alarm-clock-off'\n \"\n class=\"flex-shrink-0 size-4\"\n :class=\"!isUnread ? 'text-n-slate-11' : 'text-n-blue-text'\"\n />\n <span\n class=\"text-xs font-medium truncate\"\n :class=\"!isUnread ? 'text-n-slate-11' : 'text-n-blue-text'\"\n >\n {{ snoozedText }}\n </span>\n </div>\n <div\n v-else-if=\"notificationDetails.text\"\n class=\"flex items-center w-full min-w-0 gap-2 ltr:pl-1 rtl:pr-1\"\n >\n <Icon\n :icon=\"notificationDetails.icon\"\n :class=\"isUnread ? notificationDetails.color : 'text-n-slate-11'\"\n class=\"flex-shrink-0 size-4\"\n />\n <span\n class=\"text-xs font-medium truncate\"\n :class=\"isUnread ? notificationDetails.color : 'text-n-slate-11'\"\n >\n {{ notificationDetails.text }}\n </span>\n </div>\n </div>\n <div class=\"flex items-center flex-shrink-0 gap-2\">\n <SLACardLabel\n v-show=\"hasSlaThreshold\"\n ref=\"slaCardLabel\"\n :conversation=\"primaryActor\"\n class=\"[&>span]:text-xs\"\n :class=\"\n !isUnread && '[&>span]:text-n-slate-11 [&>div>svg]:fill-n-slate-11'\n \"\n />\n <div v-if=\"hasSlaThreshold\" class=\"w-px h-3 rounded-sm bg-n-slate-4\" />\n <CardPriorityIcon\n v-if=\"primaryActor?.priority\"\n :priority=\"primaryActor?.priority\"\n class=\"[&>svg]:size-4\"\n />\n <div\n v-if=\"inboxIcon\"\n v-tooltip.left=\"inbox?.name\"\n class=\"flex items-center justify-center flex-shrink-0 rounded-full bg-n-alpha-2 size-4\"\n >\n <Icon\n :icon=\"inboxIcon\"\n class=\"flex-shrink-0 text-n-slate-11 size-2.5\"\n />\n </div>\n <span class=\"text-sm text-n-slate-10\">\n {{ lastActivityAt }}\n </span>\n </div>\n </div>\n <InboxContextMenu\n v-if=\"isContextMenuOpen\"\n :context-menu-position=\"contextMenuPosition\"\n :menu-items=\"menuItems\"\n @close=\"contextMenuActions.close\"\n @select-action=\"contextMenuActions.handle\"\n />\n </div>\n</template>\n","<script>\nimport MenuItem from './MenuItem.vue';\nexport default {\n components: {\n MenuItem,\n },\n emits: ['optionClick'],\n data() {\n return {\n menuItems: [\n {\n key: 'mark_all_read',\n label: this.$t('INBOX.MENU_ITEM.MARK_ALL_READ'),\n },\n {\n key: 'delete_all',\n label: this.$t('INBOX.MENU_ITEM.DELETE_ALL'),\n },\n {\n key: 'delete_all_read',\n label: this.$t('INBOX.MENU_ITEM.DELETE_ALL_READ'),\n },\n ],\n };\n },\n methods: {\n onClick(key) {\n this.$emit('optionClick', key);\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"z-50 flex flex-col max-w-64 min-w-40 gap-1 bg-n-alpha-3 backdrop-blur-[100px] divide-y py-2 px-2 outline outline-1 outline-n-container shadow-lg rounded-xl divide-n-weak dark:divide-n-strong\"\n >\n <div class=\"flex flex-col\">\n <MenuItem\n v-for=\"item in menuItems\"\n :key=\"item.key\"\n :label=\"item.label\"\n @click.stop=\"onClick(item.key)\"\n />\n </div>\n </div>\n</template>\n","<script>\nimport wootConstants from 'dashboard/constants/globals';\nimport { useUISettings } from 'dashboard/composables/useUISettings';\n\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n NextButton,\n },\n emits: ['filter'],\n\n setup() {\n const { uiSettings, updateUISettings } = useUISettings();\n\n return {\n uiSettings,\n updateUISettings,\n };\n },\n data() {\n return {\n showSortMenu: false,\n displayOptions: [\n {\n name: this.$t('INBOX.DISPLAY_MENU.DISPLAY_OPTIONS.SNOOZED'),\n key: wootConstants.INBOX_DISPLAY_BY.SNOOZED,\n selected: false,\n type: wootConstants.INBOX_FILTER_TYPE.STATUS,\n },\n {\n name: this.$t('INBOX.DISPLAY_MENU.DISPLAY_OPTIONS.READ'),\n key: wootConstants.INBOX_DISPLAY_BY.READ,\n selected: false,\n type: wootConstants.INBOX_FILTER_TYPE.TYPE,\n },\n ],\n sortOptions: [\n {\n name: this.$t('INBOX.DISPLAY_MENU.SORT_OPTIONS.NEWEST'),\n key: wootConstants.INBOX_SORT_BY.NEWEST,\n type: wootConstants.INBOX_FILTER_TYPE.SORT_ORDER,\n },\n {\n name: this.$t('INBOX.DISPLAY_MENU.SORT_OPTIONS.OLDEST'),\n key: wootConstants.INBOX_SORT_BY.OLDEST,\n type: wootConstants.INBOX_FILTER_TYPE.SORT_ORDER,\n },\n ],\n activeSort: wootConstants.INBOX_SORT_BY.NEWEST,\n activeDisplayFilter: {\n status: '',\n type: '',\n },\n };\n },\n computed: {\n activeSortOption() {\n return (\n this.sortOptions.find(option => option.key === this.activeSort)?.name ||\n ''\n );\n },\n },\n mounted() {\n this.setSavedFilter();\n },\n methods: {\n updateDisplayOption(option) {\n this.displayOptions.forEach(displayOption => {\n if (displayOption.key === option.key) {\n displayOption.selected = !option.selected;\n this.activeDisplayFilter[displayOption.type] = displayOption.selected\n ? displayOption.key\n : '';\n this.saveSelectedDisplayFilter();\n this.$emit('filter', option);\n }\n });\n },\n openSortMenu() {\n this.showSortMenu = !this.showSortMenu;\n },\n onSortOptionClick(option) {\n this.activeSort = option.key;\n this.showSortMenu = false;\n this.saveSelectedDisplayFilter();\n this.$emit('filter', option);\n },\n saveSelectedDisplayFilter() {\n this.updateUISettings({\n inbox_filter_by: {\n ...this.activeDisplayFilter,\n sort_by: this.activeSort || wootConstants.INBOX_SORT_BY.NEWEST,\n },\n });\n },\n setSavedFilter() {\n const { inbox_filter_by: filterBy = {} } = this.uiSettings;\n const { status, type, sort_by: sortBy } = filterBy;\n this.activeSort = sortBy || wootConstants.INBOX_SORT_BY.NEWEST;\n this.displayOptions.forEach(option => {\n option.selected =\n option.type === wootConstants.INBOX_FILTER_TYPE.STATUS\n ? option.key === status\n : option.key === type;\n this.activeDisplayFilter[option.type] = option.selected\n ? option.key\n : '';\n });\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"flex flex-col bg-n-alpha-3 backdrop-blur-[100px] border-0 outline outline-1 outline-n-container shadow-lg z-50 max-w-64 min-w-[170px] w-fit rounded-xl divide-y divide-n-weak dark:divide-n-strong\"\n >\n <div class=\"flex items-center gap-2 justify-between p-3 rounded-t-lg h-11\">\n <div class=\"flex gap-1.5 min-w-0\">\n <span class=\"i-lucide-arrow-down-up size-3.5 text-n-slate-12\" />\n <span class=\"text-xs font-medium text-n-slate-12 truncate min-w-0\">\n {{ $t('INBOX.DISPLAY_MENU.SORT') }}\n </span>\n </div>\n <div v-on-clickaway=\"() => (showSortMenu = false)\" class=\"relative\">\n <NextButton\n :label=\"activeSortOption\"\n icon=\"i-lucide-chevron-down\"\n slate\n trailing-icon\n xs\n outline\n class=\"w-fit min-w-20 max-w-32\"\n @click=\"openSortMenu\"\n />\n <div\n v-if=\"showSortMenu\"\n class=\"absolute flex flex-col gap-0.5 bg-n-alpha-3 backdrop-blur-[100px] z-60 rounded-lg p-0.5 w-fit min-w-20 max-w-32 top-px outline outline-1 outline-n-container dark:outline-n-strong\"\n >\n <div\n v-for=\"option in sortOptions\"\n :key=\"option.key\"\n role=\"button\"\n class=\"flex rounded-md h-5 w-full items-center justify-between px-1.5 py-0.5 gap-2 whitespace-nowrap\"\n :class=\"{\n 'bg-n-brand/10 dark:bg-n-brand/10': activeSort === option.key,\n }\"\n @click.stop=\"onSortOptionClick(option)\"\n >\n <span\n class=\"text-xs font-medium hover:text-n-brand truncate min-w-0 dark:hover:text-n-brand\"\n :class=\"{\n 'text-n-blue-text dark:text-n-blue-text':\n activeSort === option.key,\n 'text-n-slate-11': activeSort !== option.key,\n }\"\n >\n {{ option.name }}\n </span>\n <span\n v-if=\"activeSort === option.key\"\n class=\"i-lucide-check size-2.5 flex-shrink-0 text-n-blue-text\"\n />\n </div>\n </div>\n </div>\n </div>\n <div>\n <span class=\"px-3 py-4 text-xs font-medium text-n-slate-11\">\n {{ $t('INBOX.DISPLAY_MENU.DISPLAY') }}\n </span>\n <div class=\"flex flex-col divide-y divide-n-weak dark:divide-n-strong\">\n <div\n v-for=\"option in displayOptions\"\n :key=\"option.key\"\n class=\"flex items-center px-3 py-2 gap-1.5 h-9\"\n >\n <input\n :id=\"option.key\"\n type=\"checkbox\"\n :name=\"option.key\"\n :checked=\"option.selected\"\n class=\"m-0 border-[1.5px] shadow border-slate-200 dark:border-slate-600 appearance-none rounded-[4px] w-4 h-4 dark:bg-slate-800 focus:ring-1 focus:ring-slate-100 dark:focus:ring-slate-700 checked:bg-n-brand dark:checked:bg-n-brand after:content-[''] after:text-white checked:after:content-['✓'] after:flex after:items-center after:justify-center checked:border-t checked:border-woot-700 dark:checked:border-woot-300 checked:border-b-0 checked:border-r-0 checked:border-l-0 after:text-center after:text-xs after:font-bold after:relative after:-top-[1.5px]\"\n @change=\"updateDisplayOption(option)\"\n />\n <label\n :for=\"option.key\"\n class=\"text-xs font-medium text-slate-800 !ml-0 !mr-0 dark:text-slate-100\"\n >\n {{ option.name }}\n </label>\n </div>\n </div>\n </div>\n </div>\n</template>\n","<script>\nimport { useAlert, useTrack } from 'dashboard/composables';\nimport { INBOX_EVENTS } from 'dashboard/helper/AnalyticsHelper/events';\n\nimport NextButton from 'dashboard/components-next/button/Button.vue';\nimport InboxOptionMenu from './InboxOptionMenu.vue';\nimport InboxDisplayMenu from './InboxDisplayMenu.vue';\n\nexport default {\n components: {\n NextButton,\n InboxOptionMenu,\n InboxDisplayMenu,\n },\n props: {\n isContextMenuOpen: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['redirect', 'filter'],\n data() {\n return {\n showInboxDisplayMenu: false,\n showInboxOptionMenu: false,\n };\n },\n watch: {\n isContextMenuOpen: {\n handler(val) {\n if (val) {\n this.showInboxDisplayMenu = false;\n this.showInboxOptionMenu = false;\n }\n },\n immediate: true,\n },\n },\n methods: {\n markAllRead() {\n useTrack(INBOX_EVENTS.MARK_ALL_NOTIFICATIONS_AS_READ);\n this.$store.dispatch('notifications/readAll').then(() => {\n useAlert(this.$t('INBOX.ALERTS.MARK_ALL_READ'));\n });\n },\n deleteAll() {\n this.$store.dispatch('notifications/deleteAll').then(() => {\n useAlert(this.$t('INBOX.ALERTS.DELETE_ALL'));\n });\n },\n deleteAllRead() {\n this.$store.dispatch('notifications/deleteAllRead').then(() => {\n useAlert(this.$t('INBOX.ALERTS.DELETE_ALL_READ'));\n });\n },\n openInboxDisplayMenu() {\n this.showInboxDisplayMenu = !this.showInboxDisplayMenu;\n },\n openInboxOptionsMenu() {\n this.showInboxOptionMenu = !this.showInboxOptionMenu;\n },\n onInboxOptionMenuClick(key) {\n const actions = {\n mark_all_read: () => this.markAllRead(),\n delete_all: () => this.deleteAll(),\n delete_all_read: () => this.deleteAllRead(),\n };\n const action = actions[key];\n if (action) action();\n this.$emit('redirect');\n },\n onFilterChange(option) {\n this.$emit('filter', option);\n this.showInboxDisplayMenu = false;\n this.$emit('redirect');\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex items-center justify-between w-full gap-1 h-14 px-4 mb-2\">\n <div class=\"flex items-center gap-2 min-w-0 flex-1\">\n <h1 class=\"min-w-0 text-lg font-medium truncate text-n-slate-12\">\n {{ $t('INBOX.LIST.TITLE') }}\n </h1>\n <div class=\"relative\">\n <NextButton\n :label=\"$t('INBOX.LIST.DISPLAY_DROPDOWN')\"\n icon=\"i-lucide-chevron-down\"\n trailing-icon\n slate\n xs\n faded\n @click=\"openInboxDisplayMenu\"\n />\n <InboxDisplayMenu\n v-if=\"showInboxDisplayMenu\"\n v-on-clickaway=\"openInboxDisplayMenu\"\n class=\"absolute mt-1 top-full ltr:left-0 rtl:right-0\"\n @filter=\"onFilterChange\"\n />\n </div>\n </div>\n <div class=\"relative flex items-center gap-1\">\n <NextButton\n icon=\"i-lucide-sliders-vertical\"\n slate\n xs\n faded\n @click=\"openInboxOptionsMenu\"\n />\n <InboxOptionMenu\n v-if=\"showInboxOptionMenu\"\n v-on-clickaway=\"openInboxOptionsMenu\"\n class=\"absolute top-full mt-1 ltr:right-0 ltr:lg:right-[unset] rtl:left-0 rtl:lg:left-[unset]\"\n @option-click=\"onInboxOptionMenuClick\"\n />\n </div>\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useAlert, useTrack } from 'dashboard/composables';\nimport { useUISettings } from 'dashboard/composables/useUISettings';\nimport wootConstants from 'dashboard/constants/globals';\n\nimport InboxCard from 'dashboard/components-next/Inbox/InboxCard.vue';\nimport InboxListHeader from './components/InboxListHeader.vue';\nimport { INBOX_EVENTS } from 'dashboard/helper/AnalyticsHelper/events';\nimport IntersectionObserver from 'dashboard/components/IntersectionObserver.vue';\nimport CmdBarConversationSnooze from 'dashboard/routes/dashboard/commands/CmdBarConversationSnooze.vue';\n\nexport default {\n components: {\n InboxCard,\n InboxListHeader,\n IntersectionObserver,\n CmdBarConversationSnooze,\n },\n setup() {\n const { uiSettings } = useUISettings();\n\n return {\n uiSettings,\n };\n },\n data() {\n return {\n infiniteLoaderOptions: {\n root: this.$refs.notificationList,\n rootMargin: '100px 0px 100px 0px',\n },\n page: 1,\n status: '',\n type: '',\n sortOrder: wootConstants.INBOX_SORT_BY.NEWEST,\n isInboxContextMenuOpen: false,\n notificationIdToSnooze: null,\n };\n },\n computed: {\n ...mapGetters({\n meta: 'notifications/getMeta',\n uiFlags: 'notifications/getUIFlags',\n notification: 'notifications/getFilteredNotifications',\n notificationV4: 'notifications/getFilteredNotificationsV4',\n inboxById: 'inboxes/getInboxById',\n }),\n currentNotificationId() {\n return Number(this.$route.params.notification_id);\n },\n inboxFilters() {\n return {\n page: this.page,\n status: this.status,\n type: this.type,\n sortOrder: this.sortOrder,\n };\n },\n notifications() {\n return this.notification(this.inboxFilters);\n },\n notificationsV4() {\n return this.notificationV4(this.inboxFilters);\n },\n showEndOfList() {\n return this.uiFlags.isAllNotificationsLoaded && !this.uiFlags.isFetching;\n },\n showEmptyState() {\n return !this.uiFlags.isFetching && !this.notifications.length;\n },\n },\n watch: {\n inboxFilters(newVal, oldVal) {\n if (newVal !== oldVal) {\n this.$store.dispatch('notifications/updateNotificationFilters', newVal);\n }\n },\n },\n mounted() {\n this.setSavedFilter();\n this.fetchNotifications();\n },\n methods: {\n stateInbox(inboxId) {\n return this.inboxById(inboxId);\n },\n fetchNotifications() {\n this.page = 1;\n this.$store.dispatch('notifications/clear');\n const filter = this.inboxFilters;\n this.$store.dispatch('notifications/index', filter);\n },\n redirectToInbox() {\n if (this.$route.name === 'inbox_view') return;\n this.$router.replace({ name: 'inbox_view' });\n },\n loadMoreNotifications() {\n if (this.uiFlags.isAllNotificationsLoaded) return;\n this.$store.dispatch('notifications/index', {\n page: this.page + 1,\n status: this.status,\n type: this.type,\n sortOrder: this.sortOrder,\n });\n this.page += 1;\n },\n markNotificationAsRead(notification) {\n useTrack(INBOX_EVENTS.MARK_NOTIFICATION_AS_READ);\n const {\n id,\n primary_actor_id: primaryActorId,\n primary_actor_type: primaryActorType,\n } = notification;\n this.$store\n .dispatch('notifications/read', {\n id,\n primaryActorId,\n primaryActorType,\n unreadCount: this.meta.unreadCount,\n })\n .then(() => {\n useAlert(this.$t('INBOX.ALERTS.MARK_AS_READ'));\n this.$store.dispatch('notifications/unReadCount'); // to update the unread count in the store real time\n });\n },\n markNotificationAsUnRead(notification) {\n useTrack(INBOX_EVENTS.MARK_NOTIFICATION_AS_UNREAD);\n this.redirectToInbox();\n const { id } = notification;\n this.$store\n .dispatch('notifications/unread', {\n id,\n })\n .then(() => {\n useAlert(this.$t('INBOX.ALERTS.MARK_AS_UNREAD'));\n this.$store.dispatch('notifications/unReadCount'); // to update the unread count in the store real time\n });\n },\n deleteNotification(notification) {\n useTrack(INBOX_EVENTS.DELETE_NOTIFICATION);\n this.redirectToInbox();\n this.$store\n .dispatch('notifications/delete', {\n notification,\n unread_count: this.meta.unreadCount,\n count: this.meta.count,\n })\n .then(() => {\n useAlert(this.$t('INBOX.ALERTS.DELETE'));\n });\n },\n onFilterChange(option) {\n const { STATUS, TYPE, SORT_ORDER } = wootConstants.INBOX_FILTER_TYPE;\n if (option.type === STATUS) {\n this.status = option.selected ? option.key : '';\n }\n if (option.type === TYPE) {\n this.type = option.selected ? option.key : '';\n }\n if (option.type === SORT_ORDER) {\n this.sortOrder = option.key;\n }\n this.fetchNotifications();\n },\n setSavedFilter() {\n const { inbox_filter_by: filterBy = {} } = this.uiSettings;\n const { status, type, sort_by: sortBy } = filterBy;\n this.status = status;\n this.type = type;\n this.sortOrder = sortBy || wootConstants.INBOX_SORT_BY.NEWEST;\n this.$store.dispatch(\n 'notifications/setNotificationFilters',\n this.inboxFilters\n );\n },\n openConversation(notification) {\n const {\n id,\n primaryActorId,\n primaryActorType,\n primaryActor: { inboxId },\n notificationType,\n } = notification;\n\n if (this.$route.params.notification_id !== id) {\n useTrack(INBOX_EVENTS.OPEN_CONVERSATION_VIA_INBOX, {\n notificationType,\n });\n\n this.$store\n .dispatch('notifications/read', {\n id,\n primaryActorId,\n primaryActorType,\n unreadCount: this.meta.unreadCount,\n })\n .then(() => {\n this.$store.dispatch('notifications/unReadCount'); // to update the unread count in the store real time\n });\n\n this.$router.push({\n name: 'inbox_view_conversation',\n params: { inboxId, notification_id: id },\n });\n }\n },\n },\n};\n</script>\n\n<template>\n <section class=\"flex w-full h-full bg-n-solid-1\">\n <div\n class=\"flex flex-col h-full w-full lg:min-w-[400px] lg:max-w-[400px] ltr:border-r rtl:border-l border-n-weak\"\n :class=\"!currentNotificationId ? 'flex' : 'hidden xl:flex'\"\n >\n <InboxListHeader\n :is-context-menu-open=\"isInboxContextMenuOpen\"\n @filter=\"onFilterChange\"\n @redirect=\"redirectToInbox\"\n />\n <div\n ref=\"notificationList\"\n class=\"flex flex-col gap-px w-full h-[calc(100%-56px)] pb-3 overflow-x-hidden px-3 overflow-y-auto divide-y divide-n-weak [&>*:hover]:!border-y-transparent [&>*.active]:!border-y-transparent [&>*:hover+*]:!border-t-transparent [&>*.active+*]:!border-t-transparent\"\n >\n <InboxCard\n v-for=\"notificationItem in notificationsV4\"\n :key=\"notificationItem.id\"\n :inbox-item=\"notificationItem\"\n :state-inbox=\"stateInbox(notificationItem.primaryActor?.inboxId)\"\n class=\"rounded-none hover:rounded-xl hover:bg-n-alpha-1 dark:hover:bg-n-alpha-3\"\n :class=\"\n currentNotificationId === notificationItem.id\n ? 'bg-n-alpha-1 dark:bg-n-alpha-3 click-animation rounded-xl active'\n : ''\n \"\n @mark-notification-as-read=\"markNotificationAsRead\"\n @mark-notification-as-un-read=\"markNotificationAsUnRead\"\n @delete-notification=\"deleteNotification\"\n @context-menu-open=\"isInboxContextMenuOpen = true\"\n @context-menu-close=\"isInboxContextMenuOpen = false\"\n @click=\"openConversation(notificationItem)\"\n />\n <div v-if=\"uiFlags.isFetching\" class=\"text-center\">\n <span class=\"mt-4 mb-4 spinner\" />\n </div>\n <p\n v-if=\"showEmptyState\"\n class=\"p-4 text-sm font-medium text-center text-slate-400 dark:text-slate-400\"\n >\n {{ $t('INBOX.LIST.NO_NOTIFICATIONS') }}\n </p>\n <IntersectionObserver\n v-if=\"!showEndOfList && !uiFlags.isFetching\"\n :options=\"infiniteLoaderOptions\"\n @observed=\"loadMoreNotifications\"\n />\n </div>\n </div>\n <router-view />\n <CmdBarConversationSnooze />\n </section>\n</template>\n\n<style scoped>\n.click-animation {\n animation: click-animation 0.2s ease-in-out;\n}\n\n@keyframes click-animation {\n 0% {\n transform: scale(1);\n }\n\n 50% {\n transform: scale(0.99);\n }\n\n 100% {\n transform: scale(1);\n }\n}\n</style>\n","<script>\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n NextButton,\n },\n props: {\n totalLength: {\n type: Number,\n default: 0,\n },\n currentIndex: {\n type: Number,\n default: 0,\n },\n },\n emits: ['prev', 'next'],\n computed: {\n isUpDisabled() {\n return this.currentIndex === 1;\n },\n isDownDisabled() {\n return this.currentIndex === this.totalLength || this.totalLength <= 1;\n },\n },\n methods: {\n handleUpClick() {\n if (this.currentIndex > 1) {\n this.$emit('prev');\n }\n },\n handleDownClick() {\n if (this.currentIndex < this.totalLength) {\n this.$emit('next');\n }\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex gap-2 items-center\">\n <div class=\"flex gap-1 items-center\">\n <NextButton\n icon=\"i-lucide-chevron-up\"\n xs\n slate\n faded\n :disabled=\"isUpDisabled\"\n @click=\"handleUpClick\"\n />\n <NextButton\n icon=\"i-lucide-chevron-down\"\n xs\n slate\n faded\n :disabled=\"isDownDisabled\"\n @click=\"handleDownClick\"\n />\n </div>\n <div class=\"flex items-center gap-1 whitespace-nowrap\">\n <span class=\"text-sm font-medium text-n-slate-12 tabular-nums\">\n {{ totalLength <= 1 ? '1' : currentIndex }}\n </span>\n <span\n v-if=\"totalLength > 1\"\n class=\"text-sm text-n-slate-9 relative -top-px\"\n >\n /\n </span>\n <span v-if=\"totalLength > 1\" class=\"text-sm text-n-slate-9 tabular-nums\">\n {{ totalLength }}\n </span>\n </div>\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useAlert, useTrack } from 'dashboard/composables';\nimport { getUnixTime } from 'date-fns';\nimport { CMD_SNOOZE_NOTIFICATION } from 'dashboard/helper/commandbar/events';\nimport wootConstants from 'dashboard/constants/globals';\nimport { findSnoozeTime } from 'dashboard/helper/snoozeHelpers';\nimport { INBOX_EVENTS } from 'dashboard/helper/AnalyticsHelper/events';\nimport PaginationButton from './PaginationButton.vue';\nimport CustomSnoozeModal from 'dashboard/components/CustomSnoozeModal.vue';\nimport { emitter } from 'shared/helpers/mitt';\nimport BackButton from 'dashboard/components/widgets/BackButton.vue';\nimport NextButton from 'dashboard/components-next/button/Button.vue';\n\nexport default {\n components: {\n PaginationButton,\n NextButton,\n BackButton,\n CustomSnoozeModal,\n },\n props: {\n totalLength: {\n type: Number,\n default: 0,\n },\n currentIndex: {\n type: Number,\n default: 0,\n },\n activeNotification: {\n type: Object,\n default: null,\n },\n },\n emits: ['next', 'prev'],\n data() {\n return { showCustomSnoozeModal: false };\n },\n computed: {\n ...mapGetters({ meta: 'notifications/getMeta' }),\n },\n mounted() {\n emitter.on(CMD_SNOOZE_NOTIFICATION, this.onCmdSnoozeNotification);\n },\n unmounted() {\n emitter.off(CMD_SNOOZE_NOTIFICATION, this.onCmdSnoozeNotification);\n },\n methods: {\n openSnoozeNotificationModal() {\n const ninja = document.querySelector('ninja-keys');\n ninja.open({ parent: 'snooze_notification' });\n },\n hideCustomSnoozeModal() {\n this.showCustomSnoozeModal = false;\n },\n async snoozeNotification(snoozedUntil) {\n try {\n await this.$store.dispatch('notifications/snooze', {\n id: this.activeNotification?.id,\n snoozedUntil,\n });\n\n useAlert(this.$t('INBOX.ALERTS.SNOOZE'));\n } catch (error) {\n // Silently fail without any change in the UI\n }\n },\n onCmdSnoozeNotification(snoozeType) {\n if (snoozeType === wootConstants.SNOOZE_OPTIONS.UNTIL_CUSTOM_TIME) {\n this.showCustomSnoozeModal = true;\n } else {\n const snoozedUntil = findSnoozeTime(snoozeType) || null;\n this.snoozeNotification(snoozedUntil);\n }\n },\n scheduleCustomSnooze(customSnoozeTime) {\n this.showCustomSnoozeModal = false;\n if (customSnoozeTime) {\n const snoozedUntil = getUnixTime(customSnoozeTime) || null;\n this.snoozeNotification(snoozedUntil);\n }\n },\n deleteNotification() {\n useTrack(INBOX_EVENTS.DELETE_NOTIFICATION);\n this.$store\n .dispatch('notifications/delete', {\n notification: this.activeNotification,\n unread_count: this.meta.unreadCount,\n count: this.meta.count,\n })\n .then(() => {\n useAlert(this.$t('INBOX.ALERTS.DELETE'));\n });\n this.$router.replace({ name: 'inbox_view' });\n },\n onClickNext() {\n this.$emit('next');\n },\n onClickPrev() {\n this.$emit('prev');\n },\n onClickGoToInboxList() {\n this.$router.replace({ name: 'inbox_view' });\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"flex items-center justify-between w-full gap-2 py-2 border-b ltr:pl-4 rtl:pl-2 h-14 ltr:pr-2 rtl:pr-4 rtl:border-r border-n-weak\"\n >\n <div class=\"flex items-center gap-4\">\n <BackButton\n compact\n :button-label=\"$t('INBOX.ACTION_HEADER.BACK')\"\n class=\"xl:hidden flex\"\n />\n <PaginationButton\n v-if=\"totalLength > 1\"\n :total-length=\"totalLength\"\n :current-index=\"currentIndex + 1\"\n @next=\"onClickNext\"\n @prev=\"onClickPrev\"\n />\n </div>\n <div class=\"flex items-center gap-2\">\n <NextButton\n :label=\"$t('INBOX.ACTION_HEADER.SNOOZE')\"\n icon=\"i-lucide-bell-minus\"\n slate\n xs\n faded\n class=\"[&>.truncate]:hidden md:[&>.truncate]:block\"\n @click=\"openSnoozeNotificationModal\"\n />\n <NextButton\n :label=\"$t('INBOX.ACTION_HEADER.DELETE')\"\n icon=\"i-lucide-trash-2\"\n slate\n xs\n faded\n class=\"[&>.truncate]:hidden md:[&>.truncate]:block\"\n @click=\"deleteNotification\"\n />\n </div>\n <woot-modal\n v-model:show=\"showCustomSnoozeModal\"\n :on-close=\"hideCustomSnoozeModal\"\n >\n <CustomSnoozeModal\n @close=\"hideCustomSnoozeModal\"\n @choose-time=\"scheduleCustomSnooze\"\n />\n </woot-modal>\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nexport default {\n props: {\n emptyStateMessage: {\n type: String,\n default: '',\n },\n },\n computed: {\n ...mapGetters({\n uiFlags: 'notifications/getUIFlags',\n }),\n emptyMessage() {\n if (this.emptyStateMessage) {\n return this.emptyStateMessage;\n }\n return this.$t('INBOX.LIST.NOTE');\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"items-center justify-center hidden w-full h-full text-center bg-n-background lg:flex\"\n >\n <span v-if=\"uiFlags.isFetching\" class=\"my-4 spinner\" />\n <div v-else class=\"flex flex-col items-center gap-2\">\n <fluent-icon\n icon=\"mail-inbox\"\n size=\"40\"\n class=\"text-slate-600 dark:text-slate-400\"\n />\n <span class=\"text-sm font-medium text-slate-500 dark:text-slate-300\">\n {{ emptyMessage }}\n </span>\n </div>\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { useTrack } from 'dashboard/composables';\nimport InboxItemHeader from './components/InboxItemHeader.vue';\nimport ConversationBox from 'dashboard/components/widgets/conversation/ConversationBox.vue';\nimport InboxEmptyState from './InboxEmptyState.vue';\nimport { useUISettings } from 'dashboard/composables/useUISettings';\nimport { BUS_EVENTS } from 'shared/constants/busEvents';\nimport { INBOX_EVENTS } from 'dashboard/helper/AnalyticsHelper/events';\nimport { emitter } from 'shared/helpers/mitt';\n\nexport default {\n components: {\n InboxItemHeader,\n InboxEmptyState,\n ConversationBox,\n },\n setup() {\n const { uiSettings, updateUISettings } = useUISettings();\n\n return {\n uiSettings,\n updateUISettings,\n };\n },\n data() {\n return {\n isConversationLoading: false,\n };\n },\n computed: {\n ...mapGetters({\n notification: 'notifications/getFilteredNotifications',\n currentChat: 'getSelectedChat',\n activeNotificationById: 'notifications/getNotificationById',\n conversationById: 'getConversationById',\n uiFlags: 'notifications/getUIFlags',\n meta: 'notifications/getMeta',\n }),\n notifications() {\n return this.notification({\n sortOrder: this.activeSortOrder,\n });\n },\n inboxId() {\n return Number(this.$route.params.inboxId);\n },\n notificationId() {\n return Number(this.$route.params.notification_id);\n },\n activeNotification() {\n return this.activeNotificationById(this.notificationId);\n },\n conversationId() {\n return this.activeNotification?.primary_actor?.id;\n },\n totalNotificationCount() {\n return this.meta.count;\n },\n showEmptyState() {\n return (\n !this.conversationId ||\n (!this.notifications?.length && this.uiFlags.isFetching)\n );\n },\n activeNotificationIndex() {\n return this.notifications?.findIndex(n => n.id === this.notificationId);\n },\n activeSortOrder() {\n const { inbox_filter_by: filterBy = {} } = this.uiSettings;\n const { sort_by: sortBy } = filterBy;\n return sortBy || 'desc';\n },\n isContactPanelOpen() {\n if (this.currentChat.id) {\n const { is_contact_sidebar_open: isContactSidebarOpen } =\n this.uiSettings;\n return isContactSidebarOpen;\n }\n return false;\n },\n },\n watch: {\n conversationId: {\n immediate: true,\n handler(newVal, oldVal) {\n if (newVal !== oldVal) {\n this.fetchConversationById();\n }\n },\n },\n },\n mounted() {\n this.$store.dispatch('agents/get');\n },\n methods: {\n async fetchConversationById() {\n if (!this.notificationId || !this.conversationId) return;\n this.$store.dispatch('clearSelectedState');\n const existingChat = this.findConversation();\n if (existingChat) {\n this.setActiveChat(existingChat);\n return;\n }\n this.isConversationLoading = true;\n await this.$store.dispatch('getConversation', this.conversationId);\n this.setActiveChat();\n this.isConversationLoading = false;\n },\n setActiveChat() {\n const selectedConversation = this.findConversation();\n if (!selectedConversation) return;\n this.$store\n .dispatch('setActiveChat', { data: selectedConversation })\n .then(() => {\n emitter.emit(BUS_EVENTS.SCROLL_TO_MESSAGE);\n });\n },\n findConversation() {\n return this.conversationById(this.conversationId);\n },\n navigateToConversation(activeIndex, direction) {\n let updatedIndex;\n if (direction === 'prev' && activeIndex) {\n updatedIndex = activeIndex - 1;\n } else if (\n direction === 'next' &&\n activeIndex < this.totalNotificationCount\n ) {\n updatedIndex = activeIndex + 1;\n }\n const targetNotification = this.notifications[updatedIndex];\n if (targetNotification) {\n this.openNotification(targetNotification);\n }\n },\n openNotification(notification) {\n const {\n id,\n primary_actor_id: primaryActorId,\n primary_actor_type: primaryActorType,\n primary_actor: { meta: { unreadCount } = {} },\n notification_type: notificationType,\n } = notification;\n\n useTrack(INBOX_EVENTS.OPEN_CONVERSATION_VIA_INBOX, {\n notificationType,\n });\n\n this.$store.dispatch('notifications/read', {\n id,\n primaryActorId,\n primaryActorType,\n unreadCount,\n });\n\n this.$router.push({\n name: 'inbox_view_conversation',\n params: { notification_id: id },\n });\n },\n onClickNext() {\n this.navigateToConversation(this.activeNotificationIndex, 'next');\n },\n onClickPrev() {\n this.navigateToConversation(this.activeNotificationIndex, 'prev');\n },\n onToggleContactPanel() {\n this.updateUISettings({\n is_contact_sidebar_open: !this.isContactPanelOpen,\n });\n },\n },\n};\n</script>\n\n<template>\n <div class=\"h-full w-full xl:w-[calc(100%-400px)]\">\n <div v-if=\"showEmptyState\" class=\"flex w-full h-full\">\n <InboxEmptyState\n :empty-state-message=\"$t('INBOX.LIST.NO_MESSAGES_AVAILABLE')\"\n />\n </div>\n <div v-else class=\"flex flex-col w-full h-full\">\n <InboxItemHeader\n class=\"flex-1\"\n :total-length=\"totalNotificationCount\"\n :current-index=\"activeNotificationIndex\"\n :active-notification=\"activeNotification\"\n @next=\"onClickNext\"\n @prev=\"onClickPrev\"\n />\n <div\n v-if=\"isConversationLoading\"\n class=\"flex items-center h-[calc(100%-56px)] justify-center bg-slate-25 dark:bg-slate-800\"\n >\n <span class=\"my-4 spinner\" />\n </div>\n <ConversationBox\n v-else\n class=\"h-[calc(100%-56px)] [&.conversation-details-wrap]:!border-0\"\n is-inbox-view\n :inbox-id=\"inboxId\"\n :is-contact-panel-open=\"isContactPanelOpen\"\n :is-on-expanded-layout=\"false\"\n @contact-panel-toggle=\"onToggleContactPanel\"\n />\n </div>\n </div>\n</template>\n","import { frontendURL } from 'dashboard/helper/URLHelper';\nimport InboxListView from './InboxList.vue';\nimport InboxDetailView from './InboxView.vue';\nimport InboxEmptyStateView from './InboxEmptyState.vue';\nimport {\n ROLES,\n CONVERSATION_PERMISSIONS,\n} from 'dashboard/constants/permissions.js';\n\nimport { FEATURE_FLAGS } from 'dashboard/featureFlags';\n\nexport const routes = [\n {\n path: frontendURL('accounts/:accountId/inbox-view'),\n component: InboxListView,\n children: [\n {\n path: '',\n name: 'inbox_view',\n component: InboxEmptyStateView,\n meta: {\n permissions: [...ROLES, ...CONVERSATION_PERMISSIONS],\n featureFlag: FEATURE_FLAGS.CHATWOOT_V4,\n },\n },\n {\n path: ':notification_id',\n name: 'inbox_view_conversation',\n component: InboxDetailView,\n meta: {\n permissions: [...ROLES, ...CONVERSATION_PERMISSIONS],\n featureFlag: FEATURE_FLAGS.CHATWOOT_V4,\n },\n },\n ],\n },\n];\n","import { frontendURL } from 'dashboard/helper/URLHelper';\n\nexport const getPortalRoute = (path = '') => {\n const slugToBeAdded = path ? `/${path}` : '';\n return frontendURL(`accounts/:accountId/portals${slugToBeAdded}`);\n};\n","<script>\nimport { mapGetters } from 'vuex';\nimport wootConstants from 'dashboard/constants/globals';\nexport default {\n data() {\n return {\n helpCenterDocsURL: wootConstants.HELP_CENTER_DOCS_URL,\n upgradeFeature: [\n {\n key: 1,\n title: this.$t('HELP_CENTER.UPGRADE_PAGE.FEATURES.PORTALS.TITLE'),\n icon: 'book-copy',\n description: this.$t(\n 'HELP_CENTER.UPGRADE_PAGE.FEATURES.PORTALS.DESCRIPTION'\n ),\n },\n {\n key: 2,\n title: this.$t('HELP_CENTER.UPGRADE_PAGE.FEATURES.LOCALES.TITLE'),\n icon: 'globe-line',\n description: this.$t(\n 'HELP_CENTER.UPGRADE_PAGE.FEATURES.LOCALES.DESCRIPTION'\n ),\n },\n {\n key: 3,\n title: this.$t('HELP_CENTER.UPGRADE_PAGE.FEATURES.SEO.TITLE'),\n icon: 'heart-handshake',\n description: this.$t(\n 'HELP_CENTER.UPGRADE_PAGE.FEATURES.SEO.DESCRIPTION'\n ),\n },\n {\n key: 4,\n title: this.$t('HELP_CENTER.UPGRADE_PAGE.FEATURES.API.TITLE'),\n icon: 'search-check',\n description: this.$t(\n 'HELP_CENTER.UPGRADE_PAGE.FEATURES.API.DESCRIPTION'\n ),\n },\n ],\n };\n },\n computed: {\n ...mapGetters({\n accountId: 'getCurrentAccountId',\n isOnChatwootCloud: 'globalConfig/isOnChatwootCloud', // Pending change text\n }),\n },\n methods: {\n openBillingPage() {\n this.$router.push({\n name: 'billing_settings_index',\n params: { accountId: this.accountId },\n });\n },\n openHelpCenterDocs() {\n window.open(this.helpCenterDocsURL, '_blank');\n },\n },\n};\n</script>\n\n<template>\n <div\n class=\"flex flex-col gap-12 sm:gap-16 items-center justify-center py-0 px-4 md:px-0 w-full min-h-screen max-w-full overflow-auto bg-white dark:bg-slate-900\"\n >\n <div class=\"flex flex-col justify-start sm:justify-center gap-6\">\n <div class=\"flex flex-col gap-1.5 items-start sm:items-center\">\n <h1\n class=\"text-slate-900 dark:text-white text-left sm:text-center text-4xl sm:text-5xl mb-6 font-semibold\"\n >\n {{ $t('HELP_CENTER.UPGRADE_PAGE.TITLE') }}\n </h1>\n <p\n class=\"max-w-2xl text-base font-normal leading-6 text-left sm:text-center text-slate-700 dark:text-slate-200\"\n >\n {{\n isOnChatwootCloud\n ? $t('HELP_CENTER.UPGRADE_PAGE.DESCRIPTION')\n : $t('HELP_CENTER.UPGRADE_PAGE.SELF_HOSTED_DESCRIPTION')\n }}\n </p>\n </div>\n <div\n v-if=\"isOnChatwootCloud\"\n class=\"flex flex-row gap-3 justify-start items-center sm:justify-center\"\n >\n <woot-button\n size=\"medium\"\n variant=\"hollow\"\n color-scheme=\"primary\"\n @click=\"openHelpCenterDocs\"\n >\n {{ $t('HELP_CENTER.UPGRADE_PAGE.BUTTON.LEARN_MORE') }}\n </woot-button>\n <woot-button\n size=\"medium\"\n color-scheme=\"primary\"\n @click=\"openBillingPage\"\n >\n {{ $t('HELP_CENTER.UPGRADE_PAGE.BUTTON.UPGRADE') }}\n </woot-button>\n </div>\n </div>\n <div\n class=\"grid grid-cols-1 sm:grid-cols-2 gap-6 sm:gap-16 w-full max-w-2xl overflow-auto\"\n >\n <div\n v-for=\"feature in upgradeFeature\"\n :key=\"feature.key\"\n class=\"w-64 min-w-full\"\n >\n <div class=\"flex gap-2 flex-row\">\n <div>\n <fluent-icon\n :icon=\"feature.icon\"\n icon-lib=\"lucide\"\n :size=\"26\"\n class=\"mt-px text-slate-800 dark:text-slate-25\"\n />\n </div>\n <div>\n <h5 class=\"font-semibold text-lg text-slate-800 dark:text-slate-25\">\n {{ feature.title }}\n </h5>\n <p class=\"text-sm leading-6 text-slate-700 dark:text-slate-100\">\n {{ feature.description }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n","<script setup>\nimport { computed, onMounted, watch } from 'vue';\nimport { useRoute } from 'vue-router';\nimport { useStore } from 'vuex';\nimport UpgradePage from '../components/UpgradePage.vue';\nimport { useUISettings } from 'dashboard/composables/useUISettings';\nimport { FEATURE_FLAGS } from 'dashboard/featureFlags';\n\nconst route = useRoute();\nconst store = useStore();\nconst { uiSettings, updateUISettings } = useUISettings();\n\nconst accountId = computed(() => store.getters.getCurrentAccountId);\nconst portals = computed(() => store.getters['portals/allPortals']);\nconst isFeatureEnabledonAccount = (id, flag) =>\n store.getters['accounts/isFeatureEnabledonAccount'](id, flag);\n\nconst isHelpCenterEnabled = computed(() =>\n isFeatureEnabledonAccount(accountId.value, FEATURE_FLAGS.HELP_CENTER)\n);\n\nconst selectedPortal = computed(() => {\n const slug =\n route.params.portalSlug || uiSettings.value.last_active_portal_slug;\n if (slug) return store.getters['portals/portalBySlug'](slug);\n return portals.value[0];\n});\n\nconst defaultPortalLocale = computed(() =>\n selectedPortal.value ? selectedPortal.value.meta?.default_locale : ''\n);\nconst selectedLocaleInPortal = computed(\n () => route.params.locale || defaultPortalLocale.value\n);\n\nconst selectedPortalSlug = computed(() =>\n selectedPortal.value ? selectedPortal.value.slug : ''\n);\n\nconst fetchPortalAndItsCategories = async () => {\n await store.dispatch('portals/index');\n const selectedPortalParam = {\n portalSlug: selectedPortalSlug.value,\n locale: selectedLocaleInPortal.value,\n };\n store.dispatch('portals/show', selectedPortalParam);\n store.dispatch('categories/index', selectedPortalParam);\n store.dispatch('agents/get');\n};\n\nonMounted(() => fetchPortalAndItsCategories());\n\nwatch(\n () => route.params.portalSlug,\n newSlug => {\n if (newSlug && newSlug !== uiSettings.value.last_active_portal_slug) {\n updateUISettings({\n last_active_portal_slug: newSlug,\n last_active_locale_code: selectedLocaleInPortal.value,\n });\n }\n }\n);\n</script>\n\n<template>\n <div class=\"flex flex-grow-0 w-full h-full min-h-0 app-wrapper\">\n <section\n v-if=\"isHelpCenterEnabled\"\n class=\"flex flex-1 h-full px-0 overflow-hidden bg-white dark:bg-slate-900\"\n >\n <router-view />\n </section>\n <UpgradePage v-else />\n </div>\n</template>\n","<script setup>\nimport { computed, nextTick, onMounted } from 'vue';\nimport { useStore } from 'vuex';\nimport { useRoute, useRouter } from 'vue-router';\nimport { useUISettings } from 'dashboard/composables/useUISettings';\n\nimport Spinner from 'dashboard/components-next/spinner/Spinner.vue';\n\nconst store = useStore();\nconst router = useRouter();\nconst { uiSettings } = useUISettings();\nconst route = useRoute();\n\nconst portals = computed(() => store.getters['portals/allPortals']);\n\nconst isPortalPresent = portalSlug => {\n return !!portals.value.find(portal => portal.slug === portalSlug);\n};\n\nconst routeToView = (name, params) => {\n router.replace({ name, params, replace: true });\n};\n\nconst generateRouterParams = () => {\n const {\n last_active_portal_slug: lastActivePortalSlug,\n last_active_locale_code: lastActiveLocaleCode,\n } = uiSettings.value || {};\n if (isPortalPresent(lastActivePortalSlug)) {\n return {\n portalSlug: lastActivePortalSlug,\n locale: lastActiveLocaleCode,\n };\n }\n\n if (portals.value.length > 0) {\n const { slug: portalSlug, meta: { default_locale: locale } = {} } =\n portals.value[0];\n return { portalSlug, locale };\n }\n\n return null;\n};\n\nconst routeToLastActivePortal = () => {\n const params = generateRouterParams();\n const { navigationPath } = route.params;\n const isAValidRoute = [\n 'portals_articles_index',\n 'portals_categories_index',\n 'portals_locales_index',\n 'portals_settings_index',\n ].includes(navigationPath);\n\n const navigateTo = isAValidRoute ? navigationPath : 'portals_articles_index';\n if (params) {\n return routeToView(navigateTo, params);\n }\n return routeToView('portals_new', {});\n};\n\nconst performRouting = async () => {\n await store.dispatch('portals/index');\n nextTick(() => routeToLastActivePortal());\n};\n\nonMounted(() => performRouting());\n</script>\n\n<template>\n <div\n class=\"flex items-center justify-center w-full bg-n-background text-slate-600 dark:text-slate-200\"\n >\n <Spinner />\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useToggle } from '@vueuse/core';\nimport { useI18n } from 'vue-i18n';\nimport { dynamicTime } from 'shared/helpers/timeHelper';\nimport {\n ARTICLE_MENU_ITEMS,\n ARTICLE_MENU_OPTIONS,\n ARTICLE_STATUSES,\n} from 'dashboard/helper/portalHelper';\n\nimport Icon from 'dashboard/components-next/icon/Icon.vue';\nimport CardLayout from 'dashboard/components-next/CardLayout.vue';\nimport DropdownMenu from 'dashboard/components-next/dropdown-menu/DropdownMenu.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport Avatar from 'dashboard/components-next/avatar/Avatar.vue';\n\nconst props = defineProps({\n id: {\n type: Number,\n required: true,\n },\n title: {\n type: String,\n required: true,\n },\n status: {\n type: String,\n required: true,\n },\n author: {\n type: Object,\n default: null,\n },\n category: {\n type: Object,\n required: true,\n },\n views: {\n type: Number,\n required: true,\n },\n updatedAt: {\n type: Number,\n required: true,\n },\n});\n\nconst emit = defineEmits(['openArticle', 'articleAction']);\n\nconst { t } = useI18n();\n\nconst [showActionsDropdown, toggleDropdown] = useToggle();\n\nconst articleMenuItems = computed(() => {\n const commonItems = Object.entries(ARTICLE_MENU_ITEMS).reduce(\n (acc, [key, item]) => {\n acc[key] = { ...item, label: t(item.label) };\n return acc;\n },\n {}\n );\n\n const statusItems = (\n ARTICLE_MENU_OPTIONS[props.status] ||\n ARTICLE_MENU_OPTIONS[ARTICLE_STATUSES.PUBLISHED]\n ).map(key => commonItems[key]);\n\n return [...statusItems, commonItems.delete];\n});\n\nconst statusTextColor = computed(() => {\n switch (props.status) {\n case 'archived':\n return 'text-n-slate-12';\n case 'draft':\n return 'text-n-amber-11';\n default:\n return 'text-n-teal-11';\n }\n});\n\nconst statusText = computed(() => {\n switch (props.status) {\n case 'archived':\n return t('HELP_CENTER.ARTICLES_PAGE.ARTICLE_CARD.CARD.STATUS.ARCHIVED');\n case 'draft':\n return t('HELP_CENTER.ARTICLES_PAGE.ARTICLE_CARD.CARD.STATUS.DRAFT');\n default:\n return t('HELP_CENTER.ARTICLES_PAGE.ARTICLE_CARD.CARD.STATUS.PUBLISHED');\n }\n});\n\nconst categoryName = computed(() => {\n if (props.category?.slug) {\n return `${props.category.icon} ${props.category.name}`;\n }\n return t(\n 'HELP_CENTER.ARTICLES_PAGE.ARTICLE_CARD.CARD.CATEGORY.UNCATEGORISED'\n );\n});\n\nconst authorName = computed(() => {\n return props.author?.name || props.author?.availableName || '';\n});\n\nconst authorThumbnailSrc = computed(() => {\n return props.author?.thumbnail;\n});\n\nconst lastUpdatedAt = computed(() => {\n return dynamicTime(props.updatedAt);\n});\n\nconst handleArticleAction = ({ action, value }) => {\n toggleDropdown(false);\n emit('articleAction', { action, value, id: props.id });\n};\n\nconst handleClick = id => {\n emit('openArticle', id);\n};\n</script>\n\n<template>\n <CardLayout>\n <div class=\"flex justify-between w-full gap-1\">\n <span\n class=\"text-base cursor-pointer hover:underline underline-offset-2 hover:text-n-blue-text text-n-slate-12 line-clamp-1\"\n @click=\"handleClick(id)\"\n >\n {{ title }}\n </span>\n <div class=\"flex items-center gap-2\">\n <span\n class=\"text-xs font-medium inline-flex items-center h-6 px-2 py-0.5 rounded-md bg-n-alpha-2\"\n :class=\"statusTextColor\"\n >\n {{ statusText }}\n </span>\n <div\n v-on-clickaway=\"() => toggleDropdown(false)\"\n class=\"relative flex items-center group\"\n >\n <Button\n icon=\"i-lucide-ellipsis-vertical\"\n color=\"slate\"\n size=\"xs\"\n class=\"rounded-md group-hover:bg-n-alpha-2\"\n @click=\"toggleDropdown()\"\n />\n <DropdownMenu\n v-if=\"showActionsDropdown\"\n :menu-items=\"articleMenuItems\"\n class=\"mt-1 ltr:right-0 rtl:left-0 xl:ltr:left-0 xl:rtl:right-0 top-full\"\n @action=\"handleArticleAction($event)\"\n />\n </div>\n </div>\n </div>\n <div class=\"flex items-center justify-between w-full gap-4\">\n <div class=\"flex items-center gap-4\">\n <div class=\"flex items-center gap-1\">\n <Avatar\n :name=\"authorName\"\n :src=\"authorThumbnailSrc\"\n :size=\"16\"\n rounded-full\n />\n <span class=\"text-sm truncate text-n-slate-11\">\n {{ authorName || '-' }}\n </span>\n </div>\n <span class=\"block text-sm whitespace-nowrap text-n-slate-11\">\n {{ categoryName }}\n </span>\n <div\n class=\"inline-flex items-center gap-1 text-n-slate-11 whitespace-nowrap\"\n >\n <Icon icon=\"i-lucide-eye\" class=\"size-4\" />\n <span class=\"text-sm\">\n {{\n t('HELP_CENTER.ARTICLES_PAGE.ARTICLE_CARD.CARD.VIEWS', {\n count: views,\n })\n }}\n </span>\n </div>\n </div>\n <span class=\"text-sm text-n-slate-11 line-clamp-1\">\n {{ lastUpdatedAt }}\n </span>\n </div>\n </CardLayout>\n</template>\n","export default [\n {\n id: 1,\n title: \"How to get an SSL certificate for your Help Center's custom domain\",\n status: 'draft',\n updatedAt: 1729205669,\n author: { availableName: 'Michael' },\n category: {\n slug: 'configuration',\n icon: '📦',\n name: 'Setup & Configuration',\n },\n views: 3400,\n },\n {\n id: 2,\n title: 'Setting up your first Help Center portal',\n status: 'published',\n updatedAt: 1729205669,\n author: { availableName: 'John' },\n category: { slug: 'onboarding', icon: '🧑â€ðŸ³', name: 'Onboarding' },\n views: 400,\n },\n {\n id: 3,\n title: 'Best practices for organizing your Help Center content',\n status: 'archived',\n updatedAt: 1729205669,\n author: { availableName: 'Fernando' },\n category: { slug: 'best-practices', icon: '⛺ï¸', name: 'Best Practices' },\n views: 400,\n },\n {\n id: 4,\n title: 'Customizing the appearance of your Help Center',\n status: 'draft',\n updatedAt: 1729205669,\n author: { availableName: 'Jane' },\n category: { slug: 'design', icon: '🎨', name: 'Design' },\n views: 400,\n },\n {\n id: 5,\n title: 'Integrating your Help Center with third-party tools',\n status: 'published',\n updatedAt: 1729205669,\n author: { availableName: 'Sarah' },\n category: {\n slug: 'integrations',\n icon: '🔗',\n name: 'Integrations',\n },\n views: 2800,\n },\n {\n id: 6,\n title: 'Managing user permissions in your Help Center',\n status: 'draft',\n updatedAt: 1729205669,\n author: { availableName: 'Alex' },\n category: {\n slug: 'administration',\n icon: 'ðŸ”',\n name: 'Administration',\n },\n views: 1200,\n },\n {\n id: 7,\n title: 'Creating and managing FAQ sections',\n status: 'published',\n updatedAt: 1729205669,\n author: { availableName: 'Emily' },\n category: {\n slug: 'content-management',\n icon: 'ðŸ“',\n name: 'Content Management',\n },\n views: 5600,\n },\n {\n id: 8,\n title: 'Implementing search functionality in your Help Center',\n status: 'archived',\n updatedAt: 1729205669,\n author: { availableName: 'David' },\n category: {\n slug: 'features',\n icon: 'ðŸ”',\n name: 'Features',\n },\n views: 1800,\n },\n {\n id: 9,\n title: 'Analyzing Help Center usage metrics',\n status: 'published',\n updatedAt: 1729205669,\n author: { availableName: 'Rachel' },\n category: {\n slug: 'analytics',\n icon: '📊',\n name: 'Analytics',\n },\n views: 3200,\n },\n {\n id: 10,\n title: 'Setting up multilingual support in your Help Center',\n status: 'draft',\n updatedAt: 1729205669,\n author: { availableName: 'Carlos' },\n category: {\n slug: 'localization',\n icon: 'ðŸŒ',\n name: 'Localization',\n },\n views: 900,\n },\n {\n id: 11,\n title: 'Creating interactive tutorials for your products',\n status: 'published',\n updatedAt: 1729205669,\n author: { availableName: 'Olivia' },\n category: {\n slug: 'education',\n icon: '🎓',\n name: 'Education',\n },\n views: 4100,\n },\n {\n id: 12,\n title: 'Implementing a feedback system in your Help Center',\n status: 'draft',\n updatedAt: 1729205669,\n author: { availableName: 'Nathan' },\n category: {\n slug: 'user-engagement',\n icon: '💬',\n name: 'User Engagement',\n },\n views: 750,\n },\n {\n id: 13,\n title: 'Optimizing Help Center content for SEO',\n status: 'published',\n updatedAt: 1729205669,\n author: { availableName: 'Sophia' },\n category: {\n slug: 'seo',\n icon: '🚀',\n name: 'SEO',\n },\n views: 2900,\n },\n {\n id: 14,\n title: 'Creating a knowledge base for internal teams',\n status: 'archived',\n updatedAt: 1729205669,\n author: { availableName: 'Daniel' },\n category: {\n slug: 'internal-resources',\n icon: 'ðŸ¢',\n name: 'Internal Resources',\n },\n views: 1500,\n },\n];\n","<script setup>\nimport { ref, reactive, watch, computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useStore, useMapGetter } from 'dashboard/composables/store';\nimport { useAlert, useTrack } from 'dashboard/composables';\nimport { PORTALS_EVENTS } from 'dashboard/helper/AnalyticsHelper/events';\nimport { convertToCategorySlug } from 'dashboard/helper/commons.js';\nimport { useVuelidate } from '@vuelidate/core';\nimport { required, minLength } from '@vuelidate/validators';\nimport { buildPortalURL } from 'dashboard/helper/portalHelper';\n\nimport Dialog from 'dashboard/components-next/dialog/Dialog.vue';\nimport Input from 'dashboard/components-next/input/Input.vue';\n\nconst emit = defineEmits(['create']);\n\nconst { t } = useI18n();\nconst store = useStore();\n\nconst dialogRef = ref(null);\n\nconst isCreatingPortal = useMapGetter('portals/isCreatingPortal');\n\nconst state = reactive({\n name: '',\n slug: '',\n domain: '',\n logoUrl: '',\n avatarBlobId: '',\n});\n\nconst rules = {\n name: { required, minLength: minLength(2) },\n slug: { required },\n};\n\nconst v$ = useVuelidate(rules, state);\n\nconst nameError = computed(() =>\n v$.value.name.$error ? t('HELP_CENTER.CREATE_PORTAL_DIALOG.NAME.ERROR') : ''\n);\n\nconst slugError = computed(() =>\n v$.value.slug.$error ? t('HELP_CENTER.CREATE_PORTAL_DIALOG.SLUG.ERROR') : ''\n);\n\nconst isSubmitDisabled = computed(() => v$.value.$invalid);\n\nwatch(\n () => state.name,\n () => {\n state.slug = convertToCategorySlug(state.name);\n }\n);\n\nconst redirectToPortal = portal => {\n emit('create', { slug: portal.slug, locale: 'en' });\n};\n\nconst resetForm = () => {\n Object.keys(state).forEach(key => {\n state[key] = '';\n });\n v$.value.$reset();\n};\nconst createPortal = async portal => {\n try {\n await store.dispatch('portals/create', portal);\n dialogRef.value.close();\n\n const analyticsPayload = {\n has_custom_domain: Boolean(portal.custom_domain),\n };\n useTrack(PORTALS_EVENTS.ONBOARD_BASIC_INFORMATION, analyticsPayload);\n useTrack(PORTALS_EVENTS.CREATE_PORTAL, analyticsPayload);\n\n useAlert(\n t('HELP_CENTER.PORTAL_SETTINGS.API.CREATE_PORTAL.SUCCESS_MESSAGE')\n );\n\n resetForm();\n redirectToPortal(portal);\n } catch (error) {\n dialogRef.value.close();\n\n useAlert(\n error?.message ||\n t('HELP_CENTER.PORTAL_SETTINGS.API.CREATE_PORTAL.ERROR_MESSAGE')\n );\n }\n};\n\nconst handleDialogConfirm = async () => {\n const isFormCorrect = await v$.value.$validate();\n if (!isFormCorrect) return;\n\n const portal = {\n name: state.name,\n slug: state.slug,\n custom_domain: state.domain,\n blob_id: state.avatarBlobId || null,\n color: '#2781F6', // The default color is set to Chatwoot brand color\n };\n await createPortal(portal);\n};\n\ndefineExpose({ dialogRef });\n</script>\n\n<template>\n <Dialog\n ref=\"dialogRef\"\n type=\"edit\"\n :title=\"t('HELP_CENTER.CREATE_PORTAL_DIALOG.TITLE')\"\n :confirm-button-label=\"\n t('HELP_CENTER.CREATE_PORTAL_DIALOG.CONFIRM_BUTTON_LABEL')\n \"\n :description=\"t('HELP_CENTER.CREATE_PORTAL_DIALOG.DESCRIPTION')\"\n :disable-confirm-button=\"isSubmitDisabled || isCreatingPortal\"\n :is-loading=\"isCreatingPortal\"\n @confirm=\"handleDialogConfirm\"\n >\n <div class=\"flex flex-col gap-6\">\n <Input\n id=\"portal-name\"\n v-model=\"state.name\"\n type=\"text\"\n :placeholder=\"t('HELP_CENTER.CREATE_PORTAL_DIALOG.NAME.PLACEHOLDER')\"\n :label=\"t('HELP_CENTER.CREATE_PORTAL_DIALOG.NAME.LABEL')\"\n :message-type=\"nameError ? 'error' : 'info'\"\n :message=\"\n nameError || t('HELP_CENTER.CREATE_PORTAL_DIALOG.NAME.MESSAGE')\n \"\n />\n <Input\n id=\"portal-slug\"\n v-model=\"state.slug\"\n type=\"text\"\n :placeholder=\"t('HELP_CENTER.CREATE_PORTAL_DIALOG.SLUG.PLACEHOLDER')\"\n :label=\"t('HELP_CENTER.CREATE_PORTAL_DIALOG.SLUG.LABEL')\"\n :message-type=\"slugError ? 'error' : 'info'\"\n :message=\"slugError || buildPortalURL(state.slug)\"\n />\n </div>\n </Dialog>\n</template>\n","<script setup>\nimport { ref } from 'vue';\nimport { useRouter } from 'vue-router';\nimport EmptyStateLayout from 'dashboard/components-next/EmptyStateLayout.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport ArticleCard from 'dashboard/components-next/HelpCenter/ArticleCard/ArticleCard.vue';\nimport articleContent from './portalEmptyStateContent';\nimport CreatePortalDialog from 'dashboard/components-next/HelpCenter/PortalSwitcher/CreatePortalDialog.vue';\n\nconst createPortalDialogRef = ref(null);\nconst openDialog = () => {\n createPortalDialogRef.value.dialogRef.open();\n};\n\nconst router = useRouter();\n\nconst onPortalCreate = ({ slug: portalSlug, locale }) => {\n router.push({\n name: 'portals_articles_index',\n params: { portalSlug, locale },\n });\n};\n</script>\n\n<template>\n <EmptyStateLayout\n :title=\"$t('HELP_CENTER.TITLE')\"\n :subtitle=\"$t('HELP_CENTER.NEW_PAGE.DESCRIPTION')\"\n >\n <template #empty-state-item>\n <div class=\"grid grid-cols-2 gap-4 p-px\">\n <div class=\"space-y-4\">\n <ArticleCard\n v-for=\"(article, index) in articleContent\"\n :id=\"article.id\"\n :key=\"`article-${index}`\"\n :title=\"article.title\"\n :status=\"article.status\"\n :updated-at=\"article.updatedAt\"\n :author=\"article.author\"\n :category=\"article.category\"\n :views=\"article.views\"\n />\n </div>\n <div class=\"space-y-4\">\n <ArticleCard\n v-for=\"(article, index) in articleContent.reverse()\"\n :id=\"article.id\"\n :key=\"`article-${index}`\"\n :title=\"article.title\"\n :status=\"article.status\"\n :updated-at=\"article.updatedAt\"\n :author=\"article.author\"\n :category=\"article.category\"\n :views=\"article.views\"\n />\n </div>\n </div>\n </template>\n <template #actions>\n <Button\n :label=\"$t('HELP_CENTER.NEW_PAGE.CREATE_PORTAL_BUTTON')\"\n icon=\"i-lucide-plus\"\n @click=\"openDialog\"\n />\n <CreatePortalDialog\n ref=\"createPortalDialogRef\"\n @create=\"onPortalCreate\"\n />\n </template>\n </EmptyStateLayout>\n</template>\n","import { FEATURE_FLAGS } from '../../../featureFlags';\nimport { getPortalRoute } from './helpers/routeHelper';\n\nimport HelpCenterPageRouteView from './pages/HelpCenterPageRouteView.vue';\n\nimport PortalsIndex from './pages/PortalsIndexPage.vue';\nimport PortalsNew from './pages/PortalsNewPage.vue';\n\nconst PortalsArticlesIndexPage = () =>\n import('./pages/PortalsArticlesIndexPage.vue');\nconst PortalsArticlesNewPage = () =>\n import('./pages/PortalsArticlesNewPage.vue');\nconst PortalsArticlesEditPage = () =>\n import('./pages/PortalsArticlesEditPage.vue');\n\nconst PortalsCategoriesIndexPage = () =>\n import('./pages/PortalsCategoriesIndexPage.vue');\n\nconst PortalsLocalesIndexPage = () =>\n import('./pages/PortalsLocalesIndexPage.vue');\n\nconst PortalsSettingsIndexPage = () =>\n import('./pages/PortalsSettingsIndexPage.vue');\n\nconst meta = {\n featureFlag: FEATURE_FLAGS.HELP_CENTER,\n permissions: ['administrator', 'agent', 'knowledge_base_manage'],\n};\nconst portalRoutes = [\n {\n path: getPortalRoute(':portalSlug/:locale/:categorySlug?/articles/:tab?'),\n name: 'portals_articles_index',\n meta,\n component: PortalsArticlesIndexPage,\n },\n {\n path: getPortalRoute(':portalSlug/:locale/:categorySlug?/articles/new'),\n name: 'portals_articles_new',\n meta,\n component: PortalsArticlesNewPage,\n },\n {\n path: getPortalRoute(\n ':portalSlug/:locale/:categorySlug?/articles/:tab?/edit/:articleSlug'\n ),\n name: 'portals_articles_edit',\n meta,\n component: PortalsArticlesEditPage,\n },\n\n {\n path: getPortalRoute(':portalSlug/:locale/categories'),\n name: 'portals_categories_index',\n meta,\n component: PortalsCategoriesIndexPage,\n },\n {\n path: getPortalRoute(\n ':portalSlug/:locale/categories/:categorySlug/articles'\n ),\n name: 'portals_categories_articles_index',\n meta,\n component: PortalsArticlesIndexPage,\n },\n {\n path: getPortalRoute(\n ':portalSlug/:locale/categories/:categorySlug/articles/:articleSlug'\n ),\n name: 'portals_categories_articles_edit',\n meta,\n component: PortalsArticlesEditPage,\n },\n {\n path: getPortalRoute(':portalSlug/locales'),\n name: 'portals_locales_index',\n meta,\n component: PortalsLocalesIndexPage,\n },\n {\n path: getPortalRoute(':portalSlug/settings'),\n name: 'portals_settings_index',\n meta,\n component: PortalsSettingsIndexPage,\n },\n {\n path: getPortalRoute('new'),\n name: 'portals_new',\n meta: {\n featureFlag: FEATURE_FLAGS.HELP_CENTER,\n permissions: ['administrator', 'knowledge_base_manage'],\n },\n component: PortalsNew,\n },\n {\n path: getPortalRoute(':navigationPath'),\n name: 'portals_index',\n meta: {\n featureFlag: FEATURE_FLAGS.HELP_CENTER,\n permissions: ['administrator', 'knowledge_base_manage'],\n },\n component: PortalsIndex,\n },\n];\n\nexport default {\n routes: [\n {\n path: getPortalRoute(),\n component: HelpCenterPageRouteView,\n redirect: to => {\n return {\n name: 'portals_index',\n params: {\n navigationPath: 'portals_articles_index',\n ...to.params,\n },\n };\n },\n children: [...portalRoutes],\n },\n ],\n};\n","<script setup>\nimport { onMounted } from 'vue';\nimport { useStore } from 'dashboard/composables/store';\n\ndefineProps({\n keepAlive: { type: Boolean, default: true },\n});\n\nconst store = useStore();\n\nonMounted(() => {\n store.dispatch('campaigns/get');\n store.dispatch('labels/get');\n});\n</script>\n\n<template>\n <div\n class=\"flex flex-col justify-between flex-1 h-full m-0 overflow-auto bg-n-background\"\n >\n <router-view v-slot=\"{ Component }\">\n <keep-alive v-if=\"keepAlive\">\n <component :is=\"Component\" />\n </keep-alive>\n <component :is=\"Component\" v-else />\n </router-view>\n </div>\n</template>\n","export const CAMPAIGN_TYPES = {\n ONGOING: 'ongoing',\n ONE_OFF: 'one_off',\n};\n","<script setup>\nimport Button from 'dashboard/components-next/button/Button.vue';\n\ndefineProps({\n headerTitle: {\n type: String,\n default: '',\n },\n buttonLabel: {\n type: String,\n default: '',\n },\n});\n\nconst emit = defineEmits(['click', 'close']);\n\nconst handleButtonClick = () => {\n emit('click');\n};\n</script>\n\n<template>\n <section class=\"flex flex-col w-full h-full overflow-hidden bg-n-background\">\n <header class=\"sticky top-0 z-10 px-6 lg:px-0\">\n <div class=\"w-full max-w-[60rem] mx-auto\">\n <div class=\"flex items-center justify-between w-full h-20 gap-2\">\n <span class=\"text-xl font-medium text-n-slate-12\">\n {{ headerTitle }}\n </span>\n <div\n v-on-clickaway=\"() => emit('close')\"\n class=\"relative group/campaign-button\"\n >\n <Button\n :label=\"buttonLabel\"\n icon=\"i-lucide-plus\"\n size=\"sm\"\n class=\"group-hover/campaign-button:brightness-110\"\n @click=\"handleButtonClick\"\n />\n <slot name=\"action\" />\n </div>\n </div>\n </div>\n </header>\n <main class=\"flex-1 px-6 overflow-y-auto lg:px-0\">\n <div class=\"w-full max-w-[60rem] mx-auto py-4\">\n <slot name=\"default\" />\n </div>\n </main>\n </section>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nimport Avatar from 'dashboard/components-next/avatar/Avatar.vue';\nimport Icon from 'dashboard/components-next/icon/Icon.vue';\n\nconst props = defineProps({\n sender: {\n type: Object,\n default: null,\n },\n inboxName: {\n type: String,\n default: '',\n },\n inboxIcon: {\n type: String,\n default: '',\n },\n});\n\nconst { t } = useI18n();\n\nconst senderName = computed(\n () => props.sender?.name || t('CAMPAIGN.LIVE_CHAT.CARD.CAMPAIGN_DETAILS.BOT')\n);\n\nconst senderThumbnailSrc = computed(() => props.sender?.thumbnail);\n</script>\n\n<template>\n <span class=\"flex-shrink-0 text-sm text-n-slate-11 whitespace-nowrap\">\n {{ t('CAMPAIGN.LIVE_CHAT.CARD.CAMPAIGN_DETAILS.SENT_BY') }}\n </span>\n <div class=\"flex items-center gap-1.5 flex-shrink-0\">\n <Avatar\n :name=\"senderName\"\n :src=\"senderThumbnailSrc\"\n :size=\"16\"\n rounded-full\n />\n <span class=\"text-sm font-medium text-n-slate-12\">\n {{ senderName }}\n </span>\n </div>\n <span class=\"flex-shrink-0 text-sm text-n-slate-11 whitespace-nowrap\">\n {{ t('CAMPAIGN.LIVE_CHAT.CARD.CAMPAIGN_DETAILS.FROM') }}\n </span>\n <div class=\"flex items-center gap-1.5 flex-shrink-0\">\n <Icon :icon=\"inboxIcon\" class=\"flex-shrink-0 text-n-slate-12 size-3\" />\n <span class=\"text-sm font-medium text-n-slate-12\">\n {{ inboxName }}\n </span>\n </div>\n</template>\n","<script setup>\nimport Icon from 'dashboard/components-next/icon/Icon.vue';\nimport { messageStamp } from 'shared/helpers/timeHelper';\n\nimport { useI18n } from 'vue-i18n';\ndefineProps({\n inboxName: {\n type: String,\n default: '',\n },\n inboxIcon: {\n type: String,\n default: '',\n },\n scheduledAt: {\n type: Number,\n default: 0,\n },\n});\n\nconst { t } = useI18n();\n</script>\n\n<template>\n <span class=\"flex-shrink-0 text-sm text-n-slate-11 whitespace-nowrap\">\n {{ t('CAMPAIGN.SMS.CARD.CAMPAIGN_DETAILS.SENT_FROM') }}\n </span>\n <div class=\"flex items-center gap-1.5 flex-shrink-0\">\n <Icon :icon=\"inboxIcon\" class=\"flex-shrink-0 text-n-slate-12 size-3\" />\n <span class=\"text-sm font-medium text-n-slate-12\">\n {{ inboxName }}\n </span>\n </div>\n\n <span class=\"flex-shrink-0 text-sm text-n-slate-11 whitespace-nowrap\">\n {{ t('CAMPAIGN.SMS.CARD.CAMPAIGN_DETAILS.ON') }}\n </span>\n <span class=\"flex-1 text-sm font-medium truncate text-n-slate-12\">\n {{ messageStamp(new Date(scheduledAt), 'LLL d, h:mm a') }}\n </span>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useMessageFormatter } from 'shared/composables/useMessageFormatter';\nimport { getInboxIconByType } from 'dashboard/helper/inbox';\n\nimport CardLayout from 'dashboard/components-next/CardLayout.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport LiveChatCampaignDetails from './LiveChatCampaignDetails.vue';\nimport SMSCampaignDetails from './SMSCampaignDetails.vue';\n\nconst props = defineProps({\n title: {\n type: String,\n default: '',\n },\n message: {\n type: String,\n default: '',\n },\n isLiveChatType: {\n type: Boolean,\n default: false,\n },\n isEnabled: {\n type: Boolean,\n default: false,\n },\n status: {\n type: String,\n default: '',\n },\n sender: {\n type: Object,\n default: null,\n },\n inbox: {\n type: Object,\n default: null,\n },\n scheduledAt: {\n type: Number,\n default: 0,\n },\n});\n\nconst emit = defineEmits(['edit', 'delete']);\n\nconst { t } = useI18n();\n\nconst STATUS_COMPLETED = 'completed';\n\nconst { formatMessage } = useMessageFormatter();\n\nconst isActive = computed(() =>\n props.isLiveChatType ? props.isEnabled : props.status !== STATUS_COMPLETED\n);\n\nconst statusTextColor = computed(() => ({\n 'text-n-teal-11': isActive.value,\n 'text-n-slate-12': !isActive.value,\n}));\n\nconst campaignStatus = computed(() => {\n if (props.isLiveChatType) {\n return props.isEnabled\n ? t('CAMPAIGN.LIVE_CHAT.CARD.STATUS.ENABLED')\n : t('CAMPAIGN.LIVE_CHAT.CARD.STATUS.DISABLED');\n }\n\n return props.status === STATUS_COMPLETED\n ? t('CAMPAIGN.SMS.CARD.STATUS.COMPLETED')\n : t('CAMPAIGN.SMS.CARD.STATUS.SCHEDULED');\n});\n\nconst inboxName = computed(() => props.inbox?.name || '');\n\nconst inboxIcon = computed(() => {\n const { phone_number: phoneNumber, channel_type: type } = props.inbox;\n return getInboxIconByType(type, phoneNumber);\n});\n</script>\n\n<template>\n <CardLayout layout=\"row\">\n <div class=\"flex flex-col items-start justify-between flex-1 min-w-0 gap-2\">\n <div class=\"flex justify-between gap-3 w-fit\">\n <span\n class=\"text-base font-medium capitalize text-n-slate-12 line-clamp-1\"\n >\n {{ title }}\n </span>\n <span\n class=\"text-xs font-medium inline-flex items-center h-6 px-2 py-0.5 rounded-md bg-n-alpha-2\"\n :class=\"statusTextColor\"\n >\n {{ campaignStatus }}\n </span>\n </div>\n <div\n v-dompurify-html=\"formatMessage(message, false, false, false)\"\n class=\"text-sm text-n-slate-11 line-clamp-1 [&>p]:mb-0 h-6\"\n />\n <div class=\"flex items-center w-full h-6 gap-2 overflow-hidden\">\n <LiveChatCampaignDetails\n v-if=\"isLiveChatType\"\n :sender=\"sender\"\n :inbox-name=\"inboxName\"\n :inbox-icon=\"inboxIcon\"\n />\n <SMSCampaignDetails\n v-else\n :inbox-name=\"inboxName\"\n :inbox-icon=\"inboxIcon\"\n :scheduled-at=\"scheduledAt\"\n />\n </div>\n </div>\n <div class=\"flex items-center justify-end w-20 gap-2\">\n <Button\n v-if=\"isLiveChatType\"\n variant=\"faded\"\n size=\"sm\"\n color=\"slate\"\n icon=\"i-lucide-sliders-vertical\"\n @click=\"emit('edit')\"\n />\n <Button\n variant=\"faded\"\n color=\"ruby\"\n size=\"sm\"\n icon=\"i-lucide-trash\"\n @click=\"emit('delete')\"\n />\n </div>\n </CardLayout>\n</template>\n","<script setup>\nimport CampaignCard from 'dashboard/components-next/Campaigns/CampaignCard/CampaignCard.vue';\n\ndefineProps({\n campaigns: {\n type: Array,\n required: true,\n },\n isLiveChatType: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits(['edit', 'delete']);\n\nconst handleEdit = campaign => emit('edit', campaign);\nconst handleDelete = campaign => emit('delete', campaign);\n</script>\n\n<template>\n <div class=\"flex flex-col gap-4\">\n <CampaignCard\n v-for=\"campaign in campaigns\"\n :key=\"campaign.id\"\n :title=\"campaign.title\"\n :message=\"campaign.message\"\n :is-enabled=\"campaign.enabled\"\n :status=\"campaign.campaign_status\"\n :sender=\"campaign.sender\"\n :inbox=\"campaign.inbox\"\n :scheduled-at=\"campaign.scheduled_at\"\n :is-live-chat-type=\"isLiveChatType\"\n @edit=\"handleEdit(campaign)\"\n @delete=\"handleDelete(campaign)\"\n />\n </div>\n</template>\n","<script setup>\nimport { reactive, computed, ref, watch } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useVuelidate } from '@vuelidate/core';\nimport { required, minLength } from '@vuelidate/validators';\nimport { useMapGetter, useStore } from 'dashboard/composables/store';\nimport { useAlert } from 'dashboard/composables';\nimport { URLPattern } from 'urlpattern-polyfill';\n\nimport Input from 'dashboard/components-next/input/Input.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport ComboBox from 'dashboard/components-next/combobox/ComboBox.vue';\nimport Editor from 'dashboard/components-next/Editor/Editor.vue';\n\nconst props = defineProps({\n mode: {\n type: String,\n required: true,\n validator: value => ['edit', 'create'].includes(value),\n },\n selectedCampaign: {\n type: Object,\n default: () => ({}),\n },\n showActionButtons: {\n type: Boolean,\n default: true,\n },\n});\n\nconst emit = defineEmits(['submit', 'cancel']);\n\nconst { t } = useI18n();\nconst store = useStore();\n\nconst formState = {\n uiFlags: useMapGetter('campaigns/getUIFlags'),\n inboxes: useMapGetter('inboxes/getWebsiteInboxes'),\n};\n\nconst senderList = ref([]);\n\nconst initialState = {\n title: '',\n message: '',\n inboxId: null,\n senderId: 0,\n enabled: true,\n triggerOnlyDuringBusinessHours: false,\n endPoint: '',\n timeOnPage: 10,\n};\n\nconst state = reactive({ ...initialState });\n\nconst urlValidators = {\n shouldBeAValidURLPattern: value => {\n try {\n // eslint-disable-next-line\n new URLPattern(value);\n return true;\n } catch {\n return false;\n }\n },\n shouldStartWithHTTP: value =>\n value ? value.startsWith('https://') || value.startsWith('http://') : false,\n};\n\nconst validationRules = {\n title: { required, minLength: minLength(1) },\n message: { required, minLength: minLength(1) },\n inboxId: { required },\n senderId: { required },\n endPoint: { required, ...urlValidators },\n timeOnPage: { required },\n};\n\nconst v$ = useVuelidate(validationRules, state);\n\nconst isCreating = computed(() => formState.uiFlags.value.isCreating);\nconst isSubmitDisabled = computed(() => v$.value.$invalid);\n\nconst mapToOptions = (items, valueKey, labelKey) =>\n items?.map(item => ({\n value: item[valueKey],\n label: item[labelKey],\n })) ?? [];\n\nconst inboxOptions = computed(() =>\n mapToOptions(formState.inboxes.value, 'id', 'name')\n);\n\nconst sendersAndBotList = computed(() => [\n { value: 0, label: 'Bot' },\n ...mapToOptions(senderList.value, 'id', 'name'),\n]);\n\nconst getErrorMessage = (field, errorKey) => {\n const baseKey = 'CAMPAIGN.LIVE_CHAT.CREATE.FORM';\n return v$.value[field].$error ? t(`${baseKey}.${errorKey}.ERROR`) : '';\n};\n\nconst formErrors = computed(() => ({\n title: getErrorMessage('title', 'TITLE'),\n message: getErrorMessage('message', 'MESSAGE'),\n inbox: getErrorMessage('inboxId', 'INBOX'),\n endPoint: getErrorMessage('endPoint', 'END_POINT'),\n timeOnPage: getErrorMessage('timeOnPage', 'TIME_ON_PAGE'),\n sender: getErrorMessage('senderId', 'SENT_BY'),\n}));\n\nconst resetState = () => Object.assign(state, initialState);\n\nconst handleCancel = () => emit('cancel');\n\nconst handleInboxChange = async inboxId => {\n if (!inboxId) {\n senderList.value = [];\n return;\n }\n\n try {\n const response = await store.dispatch('inboxMembers/get', { inboxId });\n senderList.value = response?.data?.payload ?? [];\n } catch (error) {\n senderList.value = [];\n useAlert(\n error?.response?.message ??\n t('CAMPAIGN.LIVE_CHAT.CREATE.FORM.API.ERROR_MESSAGE')\n );\n }\n};\n\nconst prepareCampaignDetails = () => ({\n title: state.title,\n message: state.message,\n inbox_id: state.inboxId,\n sender_id: state.senderId || null,\n enabled: state.enabled,\n trigger_only_during_business_hours: state.triggerOnlyDuringBusinessHours,\n trigger_rules: {\n url: state.endPoint,\n time_on_page: state.timeOnPage,\n },\n});\n\nconst handleSubmit = async () => {\n const isFormValid = await v$.value.$validate();\n if (!isFormValid) return;\n\n emit('submit', prepareCampaignDetails());\n if (props.mode === 'create') {\n resetState();\n handleCancel();\n }\n};\n\nconst updateStateFromCampaign = campaign => {\n if (!campaign) return;\n\n const {\n title,\n message,\n inbox: { id: inboxId },\n sender,\n enabled,\n trigger_only_during_business_hours: triggerOnlyDuringBusinessHours,\n trigger_rules: { url: endPoint, time_on_page: timeOnPage },\n } = campaign;\n\n Object.assign(state, {\n title,\n message,\n inboxId,\n senderId: sender?.id ?? 0,\n enabled,\n triggerOnlyDuringBusinessHours,\n endPoint,\n timeOnPage,\n });\n};\n\nwatch(\n () => state.inboxId,\n newInboxId => {\n if (newInboxId) {\n handleInboxChange(newInboxId);\n }\n },\n { immediate: true }\n);\n\nwatch(\n () => props.selectedCampaign,\n newCampaign => {\n if (props.mode === 'edit' && newCampaign) {\n updateStateFromCampaign(newCampaign);\n }\n },\n { immediate: true }\n);\n\ndefineExpose({ prepareCampaignDetails, isSubmitDisabled });\n</script>\n\n<template>\n <form class=\"flex flex-col gap-4\" @submit.prevent=\"handleSubmit\">\n <Input\n v-model=\"state.title\"\n :label=\"t('CAMPAIGN.LIVE_CHAT.CREATE.FORM.TITLE.LABEL')\"\n :placeholder=\"t('CAMPAIGN.LIVE_CHAT.CREATE.FORM.TITLE.PLACEHOLDER')\"\n :message=\"formErrors.title\"\n :message-type=\"formErrors.title ? 'error' : 'info'\"\n />\n\n <Editor\n v-model=\"state.message\"\n :label=\"t('CAMPAIGN.LIVE_CHAT.CREATE.FORM.MESSAGE.LABEL')\"\n :placeholder=\"t('CAMPAIGN.LIVE_CHAT.CREATE.FORM.MESSAGE.PLACEHOLDER')\"\n :message=\"formErrors.message\"\n :message-type=\"formErrors.message ? 'error' : 'info'\"\n />\n\n <div class=\"flex flex-col gap-1\">\n <label for=\"inbox\" class=\"mb-0.5 text-sm font-medium text-n-slate-12\">\n {{ t('CAMPAIGN.LIVE_CHAT.CREATE.FORM.INBOX.LABEL') }}\n </label>\n <ComboBox\n id=\"inbox\"\n v-model=\"state.inboxId\"\n :options=\"inboxOptions\"\n :has-error=\"!!formErrors.inbox\"\n :placeholder=\"t('CAMPAIGN.LIVE_CHAT.CREATE.FORM.INBOX.PLACEHOLDER')\"\n :message=\"formErrors.inbox\"\n class=\"[&>div>button]:bg-n-alpha-black2 [&>div>button:not(.focused)]:dark:outline-n-weak [&>div>button:not(.focused)]:hover:!outline-n-slate-6\"\n />\n </div>\n\n <div class=\"flex flex-col gap-1\">\n <label for=\"sentBy\" class=\"mb-0.5 text-sm font-medium text-n-slate-12\">\n {{ t('CAMPAIGN.LIVE_CHAT.CREATE.FORM.SENT_BY.LABEL') }}\n </label>\n <ComboBox\n id=\"sentBy\"\n v-model=\"state.senderId\"\n :options=\"sendersAndBotList\"\n :has-error=\"!!formErrors.sender\"\n :disabled=\"!state.inboxId\"\n :placeholder=\"t('CAMPAIGN.LIVE_CHAT.CREATE.FORM.SENT_BY.PLACEHOLDER')\"\n class=\"[&>div>button]:bg-n-alpha-black2 [&>div>button:not(.focused)]:dark:outline-n-weak [&>div>button:not(.focused)]:hover:!outline-n-slate-6\"\n :message=\"formErrors.sender\"\n />\n </div>\n\n <Input\n v-model=\"state.endPoint\"\n type=\"url\"\n :label=\"t('CAMPAIGN.LIVE_CHAT.CREATE.FORM.END_POINT.LABEL')\"\n :placeholder=\"t('CAMPAIGN.LIVE_CHAT.CREATE.FORM.END_POINT.PLACEHOLDER')\"\n :message=\"formErrors.endPoint\"\n :message-type=\"formErrors.endPoint ? 'error' : 'info'\"\n />\n\n <Input\n v-model=\"state.timeOnPage\"\n type=\"number\"\n :label=\"t('CAMPAIGN.LIVE_CHAT.CREATE.FORM.TIME_ON_PAGE.LABEL')\"\n :placeholder=\"\n t('CAMPAIGN.LIVE_CHAT.CREATE.FORM.TIME_ON_PAGE.PLACEHOLDER')\n \"\n :message=\"formErrors.timeOnPage\"\n :message-type=\"formErrors.timeOnPage ? 'error' : 'info'\"\n />\n\n <fieldset class=\"flex flex-col gap-2.5\">\n <legend class=\"mb-2.5 text-sm font-medium text-n-slate-12\">\n {{ t('CAMPAIGN.LIVE_CHAT.CREATE.FORM.OTHER_PREFERENCES.TITLE') }}\n </legend>\n\n <label class=\"flex items-center gap-2\">\n <input v-model=\"state.enabled\" type=\"checkbox\" />\n <span class=\"text-sm font-medium text-n-slate-12\">\n {{ t('CAMPAIGN.LIVE_CHAT.CREATE.FORM.OTHER_PREFERENCES.ENABLED') }}\n </span>\n </label>\n\n <label class=\"flex items-center gap-2\">\n <input v-model=\"state.triggerOnlyDuringBusinessHours\" type=\"checkbox\" />\n <span class=\"text-sm font-medium text-n-slate-12\">\n {{\n t(\n 'CAMPAIGN.LIVE_CHAT.CREATE.FORM.OTHER_PREFERENCES.TRIGGER_ONLY_BUSINESS_HOURS'\n )\n }}\n </span>\n </label>\n </fieldset>\n\n <div\n v-if=\"showActionButtons\"\n class=\"flex items-center justify-between w-full gap-3\"\n >\n <Button\n type=\"button\"\n variant=\"faded\"\n color=\"slate\"\n :label=\"t('CAMPAIGN.LIVE_CHAT.CREATE.FORM.BUTTONS.CANCEL')\"\n class=\"w-full bg-n-alpha-2 n-blue-text hover:bg-n-alpha-3\"\n @click=\"handleCancel\"\n />\n <Button\n type=\"submit\"\n :label=\"\n t(`CAMPAIGN.LIVE_CHAT.CREATE.FORM.BUTTONS.${mode.toUpperCase()}`)\n \"\n class=\"w-full\"\n :is-loading=\"isCreating\"\n :disabled=\"isCreating || isSubmitDisabled\"\n />\n </div>\n </form>\n</template>\n","<script setup>\nimport { useI18n } from 'vue-i18n';\nimport { useStore } from 'dashboard/composables/store';\nimport { useAlert, useTrack } from 'dashboard/composables';\nimport { CAMPAIGN_TYPES } from 'shared/constants/campaign.js';\nimport { CAMPAIGNS_EVENTS } from 'dashboard/helper/AnalyticsHelper/events.js';\n\nimport LiveChatCampaignForm from 'dashboard/components-next/Campaigns/Pages/CampaignPage/LiveChatCampaign/LiveChatCampaignForm.vue';\n\nconst emit = defineEmits(['close']);\n\nconst store = useStore();\nconst { t } = useI18n();\n\nconst addCampaign = async campaignDetails => {\n try {\n await store.dispatch('campaigns/create', campaignDetails);\n\n // tracking this here instead of the store to track the type of campaign\n useTrack(CAMPAIGNS_EVENTS.CREATE_CAMPAIGN, {\n type: CAMPAIGN_TYPES.ONGOING,\n });\n\n useAlert(t('CAMPAIGN.LIVE_CHAT.CREATE.FORM.API.SUCCESS_MESSAGE'));\n } catch (error) {\n const errorMessage =\n error?.response?.message ||\n t('CAMPAIGN.LIVE_CHAT.CREATE.FORM.API.ERROR_MESSAGE');\n useAlert(errorMessage);\n }\n};\n\nconst handleClose = () => emit('close');\n\nconst handleSubmit = campaignDetails => {\n addCampaign(campaignDetails);\n handleClose();\n};\n</script>\n\n<template>\n <div\n class=\"w-[25rem] z-50 min-w-0 absolute top-10 ltr:right-0 rtl:left-0 bg-n-alpha-3 backdrop-blur-[100px] p-6 rounded-xl border border-slate-50 dark:border-slate-900 shadow-md flex flex-col gap-6 max-h-[85vh] overflow-y-auto\"\n >\n <h3 class=\"text-base font-medium text-slate-900 dark:text-slate-50\">\n {{ t(`CAMPAIGN.LIVE_CHAT.CREATE.TITLE`) }}\n </h3>\n <LiveChatCampaignForm\n mode=\"create\"\n @submit=\"handleSubmit\"\n @cancel=\"handleClose\"\n />\n </div>\n</template>\n","<script setup>\nimport { ref, computed } from 'vue';\nimport { useMapGetter, useStore } from 'dashboard/composables/store';\nimport { useAlert } from 'dashboard/composables';\nimport { useI18n } from 'vue-i18n';\n\nimport Dialog from 'dashboard/components-next/dialog/Dialog.vue';\nimport LiveChatCampaignForm from 'dashboard/components-next/Campaigns/Pages/CampaignPage/LiveChatCampaign/LiveChatCampaignForm.vue';\n\nconst props = defineProps({\n selectedCampaign: {\n type: Object,\n default: null,\n },\n});\n\nconst { t } = useI18n();\nconst store = useStore();\n\nconst dialogRef = ref(null);\nconst liveChatCampaignFormRef = ref(null);\n\nconst uiFlags = useMapGetter('campaigns/getUIFlags');\nconst isUpdatingCampaign = computed(() => uiFlags.value.isUpdating);\n\nconst isInvalidForm = computed(\n () => liveChatCampaignFormRef.value?.isSubmitDisabled\n);\n\nconst selectedCampaignId = computed(() => props.selectedCampaign.id);\n\nconst updateCampaign = async campaignDetails => {\n try {\n await store.dispatch('campaigns/update', {\n id: selectedCampaignId.value,\n ...campaignDetails,\n });\n\n useAlert(t('CAMPAIGN.LIVE_CHAT.EDIT.FORM.API.SUCCESS_MESSAGE'));\n dialogRef.value.close();\n } catch (error) {\n const errorMessage =\n error?.response?.message ||\n t('CAMPAIGN.LIVE_CHAT.EDIT.FORM.API.ERROR_MESSAGE');\n useAlert(errorMessage);\n }\n};\n\nconst handleSubmit = () => {\n updateCampaign(liveChatCampaignFormRef.value.prepareCampaignDetails());\n};\n\ndefineExpose({ dialogRef });\n</script>\n\n<template>\n <Dialog\n ref=\"dialogRef\"\n type=\"edit\"\n :title=\"t('CAMPAIGN.LIVE_CHAT.EDIT.TITLE')\"\n :is-loading=\"isUpdatingCampaign\"\n :disable-confirm-button=\"isUpdatingCampaign || isInvalidForm\"\n overflow-y-auto\n @confirm=\"handleSubmit\"\n >\n <LiveChatCampaignForm\n ref=\"liveChatCampaignFormRef\"\n mode=\"edit\"\n :selected-campaign=\"selectedCampaign\"\n :show-action-buttons=\"false\"\n @submit=\"handleSubmit\"\n />\n </Dialog>\n</template>\n","<script setup>\nimport { ref } from 'vue';\nimport { useStore } from 'dashboard/composables/store';\nimport { useI18n } from 'vue-i18n';\nimport { useAlert } from 'dashboard/composables';\n\nimport Dialog from 'dashboard/components-next/dialog/Dialog.vue';\n\nconst props = defineProps({\n selectedCampaign: {\n type: Object,\n default: null,\n },\n});\n\nconst { t } = useI18n();\nconst store = useStore();\n\nconst dialogRef = ref(null);\n\nconst deleteCampaign = async id => {\n if (!id) return;\n\n try {\n await store.dispatch('campaigns/delete', id);\n useAlert(t('CAMPAIGN.CONFIRM_DELETE.API.SUCCESS_MESSAGE'));\n } catch (error) {\n useAlert(t('CAMPAIGN.CONFIRM_DELETE.API.ERROR_MESSAGE'));\n }\n};\n\nconst handleDialogConfirm = async () => {\n await deleteCampaign(props.selectedCampaign.id);\n dialogRef.value?.close();\n};\n\ndefineExpose({ dialogRef });\n</script>\n\n<template>\n <Dialog\n ref=\"dialogRef\"\n type=\"alert\"\n :title=\"t('CAMPAIGN.CONFIRM_DELETE.TITLE')\"\n :description=\"t('CAMPAIGN.CONFIRM_DELETE.DESCRIPTION')\"\n :confirm-button-label=\"t('CAMPAIGN.CONFIRM_DELETE.CONFIRM')\"\n @confirm=\"handleDialogConfirm\"\n />\n</template>\n","export const ONGOING_CAMPAIGN_EMPTY_STATE_CONTENT = [\n {\n id: 1,\n title: 'Chatbot Assistance',\n inbox: {\n id: 2,\n name: 'PaperLayer Website',\n channel_type: 'Channel::WebWidget',\n phone_number: '',\n },\n sender: {\n id: 1,\n name: 'Alexa Rivera',\n },\n message: 'Hello! 👋 Need help with our chatbot features? Feel free to ask!',\n campaign_status: 'active',\n enabled: true,\n campaign_type: 'ongoing',\n trigger_rules: {\n url: 'https://www.chatwoot.com/features/chatbot/',\n time_on_page: 10,\n },\n trigger_only_during_business_hours: true,\n created_at: '2024-10-24T13:10:26.636Z',\n updated_at: '2024-10-24T13:10:26.636Z',\n },\n {\n id: 2,\n title: 'Pricing Information Support',\n inbox: {\n id: 2,\n name: 'PaperLayer Website',\n channel_type: 'Channel::WebWidget',\n phone_number: '',\n },\n sender: {\n id: 1,\n name: 'Jamie Lee',\n },\n message: 'Hello! 👋 Any questions on pricing? I’m here to help!',\n campaign_status: 'active',\n enabled: false,\n campaign_type: 'ongoing',\n trigger_rules: {\n url: 'https://www.chatwoot.com/pricings',\n time_on_page: 10,\n },\n trigger_only_during_business_hours: false,\n created_at: '2024-10-24T13:11:08.763Z',\n updated_at: '2024-10-24T13:11:08.763Z',\n },\n {\n id: 3,\n title: 'Product Setup Assistance',\n inbox: {\n id: 2,\n name: 'PaperLayer Website',\n channel_type: 'Channel::WebWidget',\n phone_number: '',\n },\n sender: {\n id: 1,\n name: 'Chatwoot',\n },\n message: 'Hi! Chatwoot here. Need help setting up? Let me know!',\n campaign_status: 'active',\n enabled: false,\n campaign_type: 'ongoing',\n trigger_rules: {\n url: 'https://{*.}?chatwoot.com/apps/account/*/settings/inboxes/new/',\n time_on_page: 10,\n },\n trigger_only_during_business_hours: false,\n created_at: '2024-10-24T13:11:44.285Z',\n updated_at: '2024-10-24T13:11:44.285Z',\n },\n {\n id: 4,\n title: 'General Assistance Campaign',\n inbox: {\n id: 2,\n name: 'PaperLayer Website',\n channel_type: 'Channel::WebWidget',\n phone_number: '',\n },\n sender: {\n id: 1,\n name: 'Chris Barlow',\n },\n message:\n 'Hi there! 👋 I’m here for any questions you may have. Let’s chat!',\n campaign_status: 'active',\n enabled: true,\n campaign_type: 'ongoing',\n trigger_rules: {\n url: 'https://siv.com',\n time_on_page: 200,\n },\n trigger_only_during_business_hours: false,\n created_at: '2024-10-29T19:54:33.741Z',\n updated_at: '2024-10-29T19:56:26.296Z',\n },\n];\n\nexport const ONE_OFF_CAMPAIGN_EMPTY_STATE_CONTENT = [\n {\n id: 1,\n title: 'Customer Feedback Request',\n inbox: {\n id: 6,\n name: 'PaperLayer Mobile',\n channel_type: 'Channel::Sms',\n phone_number: '+29818373149903',\n provider: 'default',\n },\n message:\n 'Hello! Enjoying our product? Share your feedback on G2 and earn a $25 Amazon coupon: https://chwt.app/g2-review',\n campaign_status: 'active',\n enabled: true,\n campaign_type: 'one_off',\n scheduled_at: 1729775588,\n audience: [\n { id: 4, type: 'Label' },\n { id: 5, type: 'Label' },\n { id: 6, type: 'Label' },\n ],\n trigger_rules: {},\n trigger_only_during_business_hours: false,\n created_at: '2024-10-24T13:13:08.496Z',\n updated_at: '2024-10-24T13:15:38.698Z',\n },\n {\n id: 2,\n title: 'Welcome New Customer',\n inbox: {\n id: 6,\n name: 'PaperLayer Mobile',\n channel_type: 'Channel::Sms',\n phone_number: '+29818373149903',\n provider: 'default',\n },\n message: 'Welcome aboard! 🎉 Let us know if you have any questions.',\n campaign_status: 'completed',\n enabled: true,\n campaign_type: 'one_off',\n scheduled_at: 1729732500,\n audience: [\n { id: 1, type: 'Label' },\n { id: 6, type: 'Label' },\n { id: 5, type: 'Label' },\n { id: 2, type: 'Label' },\n { id: 4, type: 'Label' },\n ],\n trigger_rules: {},\n trigger_only_during_business_hours: false,\n created_at: '2024-10-24T13:14:00.168Z',\n updated_at: '2024-10-24T13:15:38.707Z',\n },\n {\n id: 3,\n title: 'New Business Welcome',\n inbox: {\n id: 6,\n name: 'PaperLayer Mobile',\n channel_type: 'Channel::Sms',\n phone_number: '+29818373149903',\n provider: 'default',\n },\n message: 'Hello! We’re excited to have your business with us!',\n campaign_status: 'active',\n enabled: true,\n campaign_type: 'one_off',\n scheduled_at: 1730368440,\n audience: [\n { id: 1, type: 'Label' },\n { id: 3, type: 'Label' },\n { id: 6, type: 'Label' },\n { id: 4, type: 'Label' },\n { id: 2, type: 'Label' },\n { id: 5, type: 'Label' },\n ],\n trigger_rules: {},\n trigger_only_during_business_hours: false,\n created_at: '2024-10-30T07:54:49.915Z',\n updated_at: '2024-10-30T07:54:49.915Z',\n },\n {\n id: 4,\n title: 'New Member Onboarding',\n inbox: {\n id: 6,\n name: 'PaperLayer Mobile',\n channel_type: 'Channel::Sms',\n phone_number: '+29818373149903',\n provider: 'default',\n },\n message: 'Welcome to the team! Reach out if you have questions.',\n campaign_status: 'completed',\n enabled: true,\n campaign_type: 'one_off',\n scheduled_at: 1730304840,\n audience: [\n { id: 1, type: 'Label' },\n { id: 3, type: 'Label' },\n { id: 6, type: 'Label' },\n ],\n trigger_rules: {},\n trigger_only_during_business_hours: false,\n created_at: '2024-10-29T16:14:10.374Z',\n updated_at: '2024-10-30T16:15:03.157Z',\n },\n];\n","<script setup>\nimport { computed, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useToggle } from '@vueuse/core';\nimport { useStoreGetters, useMapGetter } from 'dashboard/composables/store';\nimport { CAMPAIGN_TYPES } from 'shared/constants/campaign.js';\n\nimport Spinner from 'dashboard/components-next/spinner/Spinner.vue';\nimport CampaignLayout from 'dashboard/components-next/Campaigns/CampaignLayout.vue';\nimport CampaignList from 'dashboard/components-next/Campaigns/Pages/CampaignPage/CampaignList.vue';\nimport LiveChatCampaignDialog from 'dashboard/components-next/Campaigns/Pages/CampaignPage/LiveChatCampaign/LiveChatCampaignDialog.vue';\nimport EditLiveChatCampaignDialog from 'dashboard/components-next/Campaigns/Pages/CampaignPage/LiveChatCampaign/EditLiveChatCampaignDialog.vue';\nimport ConfirmDeleteCampaignDialog from 'dashboard/components-next/Campaigns/Pages/CampaignPage/ConfirmDeleteCampaignDialog.vue';\nimport LiveChatCampaignEmptyState from 'dashboard/components-next/Campaigns/EmptyState/LiveChatCampaignEmptyState.vue';\n\nconst { t } = useI18n();\nconst getters = useStoreGetters();\n\nconst editLiveChatCampaignDialogRef = ref(null);\nconst confirmDeleteCampaignDialogRef = ref(null);\nconst selectedCampaign = ref(null);\n\nconst uiFlags = useMapGetter('campaigns/getUIFlags');\nconst isFetchingCampaigns = computed(() => uiFlags.value.isFetching);\n\nconst [showLiveChatCampaignDialog, toggleLiveChatCampaignDialog] = useToggle();\n\nconst liveChatCampaigns = computed(() =>\n getters['campaigns/getCampaigns'].value(CAMPAIGN_TYPES.ONGOING)\n);\n\nconst hasNoLiveChatCampaigns = computed(\n () => liveChatCampaigns.value?.length === 0 && !isFetchingCampaigns.value\n);\n\nconst handleEdit = campaign => {\n selectedCampaign.value = campaign;\n editLiveChatCampaignDialogRef.value.dialogRef.open();\n};\nconst handleDelete = campaign => {\n selectedCampaign.value = campaign;\n confirmDeleteCampaignDialogRef.value.dialogRef.open();\n};\n</script>\n\n<template>\n <CampaignLayout\n :header-title=\"t('CAMPAIGN.LIVE_CHAT.HEADER_TITLE')\"\n :button-label=\"t('CAMPAIGN.LIVE_CHAT.NEW_CAMPAIGN')\"\n @click=\"toggleLiveChatCampaignDialog()\"\n @close=\"toggleLiveChatCampaignDialog(false)\"\n >\n <template #action>\n <LiveChatCampaignDialog\n v-if=\"showLiveChatCampaignDialog\"\n @close=\"toggleLiveChatCampaignDialog(false)\"\n />\n </template>\n\n <div\n v-if=\"isFetchingCampaigns\"\n class=\"flex items-center justify-center py-10 text-n-slate-11\"\n >\n <Spinner />\n </div>\n <CampaignList\n v-else-if=\"!hasNoLiveChatCampaigns\"\n :campaigns=\"liveChatCampaigns\"\n is-live-chat-type\n @edit=\"handleEdit\"\n @delete=\"handleDelete\"\n />\n <LiveChatCampaignEmptyState\n v-else\n :title=\"t('CAMPAIGN.LIVE_CHAT.EMPTY_STATE.TITLE')\"\n :subtitle=\"t('CAMPAIGN.LIVE_CHAT.EMPTY_STATE.SUBTITLE')\"\n class=\"pt-14\"\n />\n <EditLiveChatCampaignDialog\n ref=\"editLiveChatCampaignDialogRef\"\n :selected-campaign=\"selectedCampaign\"\n />\n <ConfirmDeleteCampaignDialog\n ref=\"confirmDeleteCampaignDialogRef\"\n :selected-campaign=\"selectedCampaign\"\n />\n </CampaignLayout>\n</template>\n","<script setup>\nimport { ref, computed, watch, nextTick } from 'vue';\nimport { OnClickOutside } from '@vueuse/components';\nimport { useI18n } from 'vue-i18n';\n\nimport ComboBoxDropdown from 'dashboard/components-next/combobox/ComboBoxDropdown.vue';\n\nconst props = defineProps({\n options: {\n type: Array,\n required: true,\n validator: value =>\n value.every(option => 'value' in option && 'label' in option),\n },\n placeholder: {\n type: String,\n default: '',\n },\n modelValue: {\n type: Array,\n default: () => [],\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n searchPlaceholder: {\n type: String,\n default: '',\n },\n emptyState: {\n type: String,\n default: '',\n },\n message: {\n type: String,\n default: '',\n },\n hasError: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits(['update:modelValue']);\n\nconst { t } = useI18n();\n\nconst selectedValues = ref(props.modelValue);\nconst open = ref(false);\nconst search = ref('');\nconst dropdownRef = ref(null);\nconst comboboxRef = ref(null);\n\nconst filteredOptions = computed(() => {\n const searchTerm = search.value.toLowerCase();\n return props.options.filter(option =>\n option.label?.toLowerCase().includes(searchTerm)\n );\n});\n\nconst selectPlaceholder = computed(() => {\n return props.placeholder || t('COMBOBOX.PLACEHOLDER');\n});\n\nconst selectedTags = computed(() => {\n return selectedValues.value.map(value => {\n const option = props.options.find(opt => opt.value === value);\n return option || { value, label: value };\n });\n});\n\nconst toggleOption = option => {\n const index = selectedValues.value.indexOf(option.value);\n if (index === -1) {\n selectedValues.value.push(option.value);\n } else {\n selectedValues.value.splice(index, 1);\n }\n emit('update:modelValue', selectedValues.value);\n};\n\nconst removeTag = value => {\n const index = selectedValues.value.indexOf(value);\n if (index !== -1) {\n selectedValues.value.splice(index, 1);\n emit('update:modelValue', selectedValues.value);\n }\n};\n\nconst toggleDropdown = () => {\n if (props.disabled) return;\n open.value = !open.value;\n if (open.value) {\n search.value = '';\n nextTick(() => dropdownRef.value?.focus());\n }\n};\n\nwatch(\n () => props.modelValue,\n newValue => {\n selectedValues.value = newValue;\n }\n);\n\ndefineExpose({\n toggleDropdown,\n open,\n disabled: props.disabled,\n});\n</script>\n\n<template>\n <div\n ref=\"comboboxRef\"\n class=\"relative w-full min-w-0\"\n :class=\"{\n 'cursor-not-allowed': disabled,\n 'group/combobox': !disabled,\n }\"\n @click.prevent\n >\n <OnClickOutside @trigger=\"open = false\">\n <div\n class=\"flex flex-wrap w-full gap-2 px-3 py-2.5 border rounded-lg cursor-pointer bg-n-alpha-black2 min-h-[42px] transition-all duration-500 ease-in-out\"\n :class=\"{\n 'border-n-ruby-8': hasError,\n 'border-n-weak dark:border-n-weak hover:border-n-slate-6 dark:hover:border-n-slate-6':\n !hasError && !open,\n 'border-n-brand': open,\n 'cursor-not-allowed pointer-events-none opacity-50': disabled,\n }\"\n @click=\"toggleDropdown\"\n >\n <div\n v-for=\"tag in selectedTags\"\n :key=\"tag.value\"\n class=\"flex items-center justify-center max-w-full gap-1 px-2 py-0.5 rounded-lg bg-n-alpha-black1\"\n @click.stop\n >\n <span class=\"flex-grow min-w-0 text-sm truncate text-n-slate-12\">\n {{ tag.label }}\n </span>\n <span\n class=\"flex-shrink-0 cursor-pointer i-lucide-x size-3 text-n-slate-11\"\n @click=\"removeTag(tag.value)\"\n />\n </div>\n <span\n v-if=\"selectedTags.length === 0\"\n class=\"flex items-center text-sm text-n-slate-11\"\n >\n {{ selectPlaceholder }}\n </span>\n </div>\n\n <ComboBoxDropdown\n ref=\"dropdownRef\"\n :open=\"open\"\n :options=\"filteredOptions\"\n :search-value=\"search\"\n :search-placeholder=\"searchPlaceholder\"\n :empty-state=\"emptyState\"\n multiple\n :selected-values=\"selectedValues\"\n @update:search-value=\"search = $event\"\n @select=\"toggleOption\"\n />\n\n <p\n v-if=\"message\"\n class=\"mt-2 mb-0 text-xs truncate transition-all duration-500 ease-in-out\"\n :class=\"{\n 'text-n-ruby-9': hasError,\n 'text-n-slate-11': !hasError,\n }\"\n >\n {{ message }}\n </p>\n </OnClickOutside>\n </div>\n</template>\n","<script setup>\nimport { reactive, computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useVuelidate } from '@vuelidate/core';\nimport { required, minLength } from '@vuelidate/validators';\nimport { useMapGetter } from 'dashboard/composables/store';\n\nimport Input from 'dashboard/components-next/input/Input.vue';\nimport TextArea from 'dashboard/components-next/textarea/TextArea.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport ComboBox from 'dashboard/components-next/combobox/ComboBox.vue';\nimport TagMultiSelectComboBox from 'dashboard/components-next/combobox/TagMultiSelectComboBox.vue';\n\nconst emit = defineEmits(['submit', 'cancel']);\n\nconst { t } = useI18n();\n\nconst formState = {\n uiFlags: useMapGetter('campaigns/getUIFlags'),\n labels: useMapGetter('labels/getLabels'),\n inboxes: useMapGetter('inboxes/getSMSInboxes'),\n};\n\nconst initialState = {\n title: '',\n message: '',\n inboxId: null,\n scheduledAt: null,\n selectedAudience: [],\n};\n\nconst state = reactive({ ...initialState });\n\nconst rules = {\n title: { required, minLength: minLength(1) },\n message: { required, minLength: minLength(1) },\n inboxId: { required },\n scheduledAt: { required },\n selectedAudience: { required },\n};\n\nconst v$ = useVuelidate(rules, state);\n\nconst isCreating = computed(() => formState.uiFlags.value.isCreating);\n\nconst currentDateTime = computed(() => {\n // Added to disable the scheduled at field from being set to the current time\n const now = new Date();\n const localTime = new Date(now.getTime() - now.getTimezoneOffset() * 60000);\n return localTime.toISOString().slice(0, 16);\n});\n\nconst mapToOptions = (items, valueKey, labelKey) =>\n items?.map(item => ({\n value: item[valueKey],\n label: item[labelKey],\n })) ?? [];\n\nconst audienceList = computed(() =>\n mapToOptions(formState.labels.value, 'id', 'title')\n);\n\nconst inboxOptions = computed(() =>\n mapToOptions(formState.inboxes.value, 'id', 'name')\n);\n\nconst getErrorMessage = (field, errorKey) => {\n const baseKey = 'CAMPAIGN.SMS.CREATE.FORM';\n return v$.value[field].$error ? t(`${baseKey}.${errorKey}.ERROR`) : '';\n};\n\nconst formErrors = computed(() => ({\n title: getErrorMessage('title', 'TITLE'),\n message: getErrorMessage('message', 'MESSAGE'),\n inbox: getErrorMessage('inboxId', 'INBOX'),\n scheduledAt: getErrorMessage('scheduledAt', 'SCHEDULED_AT'),\n audience: getErrorMessage('selectedAudience', 'AUDIENCE'),\n}));\n\nconst isSubmitDisabled = computed(() => v$.value.$invalid);\n\nconst formatToUTCString = localDateTime =>\n localDateTime ? new Date(localDateTime).toISOString() : null;\n\nconst resetState = () => {\n Object.assign(state, initialState);\n};\n\nconst handleCancel = () => emit('cancel');\n\nconst prepareCampaignDetails = () => ({\n title: state.title,\n message: state.message,\n inbox_id: state.inboxId,\n scheduled_at: formatToUTCString(state.scheduledAt),\n audience: state.selectedAudience?.map(id => ({\n id,\n type: 'Label',\n })),\n});\n\nconst handleSubmit = async () => {\n const isFormValid = await v$.value.$validate();\n if (!isFormValid) return;\n\n emit('submit', prepareCampaignDetails());\n resetState();\n handleCancel();\n};\n</script>\n\n<template>\n <form class=\"flex flex-col gap-4\" @submit.prevent=\"handleSubmit\">\n <Input\n v-model=\"state.title\"\n :label=\"t('CAMPAIGN.SMS.CREATE.FORM.TITLE.LABEL')\"\n :placeholder=\"t('CAMPAIGN.SMS.CREATE.FORM.TITLE.PLACEHOLDER')\"\n :message=\"formErrors.title\"\n :message-type=\"formErrors.title ? 'error' : 'info'\"\n />\n\n <TextArea\n v-model=\"state.message\"\n :label=\"t('CAMPAIGN.SMS.CREATE.FORM.MESSAGE.LABEL')\"\n :placeholder=\"t('CAMPAIGN.SMS.CREATE.FORM.MESSAGE.PLACEHOLDER')\"\n show-character-count\n :message=\"formErrors.message\"\n :message-type=\"formErrors.message ? 'error' : 'info'\"\n />\n\n <div class=\"flex flex-col gap-1\">\n <label for=\"inbox\" class=\"mb-0.5 text-sm font-medium text-n-slate-12\">\n {{ t('CAMPAIGN.SMS.CREATE.FORM.INBOX.LABEL') }}\n </label>\n <ComboBox\n id=\"inbox\"\n v-model=\"state.inboxId\"\n :options=\"inboxOptions\"\n :has-error=\"!!formErrors.inbox\"\n :placeholder=\"t('CAMPAIGN.SMS.CREATE.FORM.INBOX.PLACEHOLDER')\"\n :message=\"formErrors.inbox\"\n class=\"[&>div>button]:bg-n-alpha-black2 [&>div>button:not(.focused)]:dark:outline-n-weak [&>div>button:not(.focused)]:hover:!outline-n-slate-6\"\n />\n </div>\n\n <div class=\"flex flex-col gap-1\">\n <label for=\"audience\" class=\"mb-0.5 text-sm font-medium text-n-slate-12\">\n {{ t('CAMPAIGN.SMS.CREATE.FORM.AUDIENCE.LABEL') }}\n </label>\n <TagMultiSelectComboBox\n v-model=\"state.selectedAudience\"\n :options=\"audienceList\"\n :label=\"t('CAMPAIGN.SMS.CREATE.FORM.AUDIENCE.LABEL')\"\n :placeholder=\"t('CAMPAIGN.SMS.CREATE.FORM.AUDIENCE.PLACEHOLDER')\"\n :has-error=\"!!formErrors.audience\"\n :message=\"formErrors.audience\"\n class=\"[&>div>button]:bg-n-alpha-black2\"\n />\n </div>\n\n <Input\n v-model=\"state.scheduledAt\"\n :label=\"t('CAMPAIGN.SMS.CREATE.FORM.SCHEDULED_AT.LABEL')\"\n type=\"datetime-local\"\n :min=\"currentDateTime\"\n :placeholder=\"t('CAMPAIGN.SMS.CREATE.FORM.SCHEDULED_AT.PLACEHOLDER')\"\n :message=\"formErrors.scheduledAt\"\n :message-type=\"formErrors.scheduledAt ? 'error' : 'info'\"\n />\n\n <div class=\"flex items-center justify-between w-full gap-3\">\n <Button\n variant=\"faded\"\n color=\"slate\"\n type=\"button\"\n :label=\"t('CAMPAIGN.SMS.CREATE.FORM.BUTTONS.CANCEL')\"\n class=\"w-full bg-n-alpha-2 n-blue-text hover:bg-n-alpha-3\"\n @click=\"handleCancel\"\n />\n <Button\n :label=\"t('CAMPAIGN.SMS.CREATE.FORM.BUTTONS.CREATE')\"\n class=\"w-full\"\n type=\"submit\"\n :is-loading=\"isCreating\"\n :disabled=\"isCreating || isSubmitDisabled\"\n />\n </div>\n </form>\n</template>\n","<script setup>\nimport { useI18n } from 'vue-i18n';\nimport { useStore } from 'dashboard/composables/store';\nimport { useAlert, useTrack } from 'dashboard/composables';\nimport { CAMPAIGN_TYPES } from 'shared/constants/campaign.js';\nimport { CAMPAIGNS_EVENTS } from 'dashboard/helper/AnalyticsHelper/events.js';\n\nimport SMSCampaignForm from 'dashboard/components-next/Campaigns/Pages/CampaignPage/SMSCampaign/SMSCampaignForm.vue';\n\nconst emit = defineEmits(['close']);\n\nconst store = useStore();\nconst { t } = useI18n();\n\nconst addCampaign = async campaignDetails => {\n try {\n await store.dispatch('campaigns/create', campaignDetails);\n\n // tracking this here instead of the store to track the type of campaign\n useTrack(CAMPAIGNS_EVENTS.CREATE_CAMPAIGN, {\n type: CAMPAIGN_TYPES.ONE_OFF,\n });\n\n useAlert(t('CAMPAIGN.SMS.CREATE.FORM.API.SUCCESS_MESSAGE'));\n } catch (error) {\n const errorMessage =\n error?.response?.message ||\n t('CAMPAIGN.SMS.CREATE.FORM.API.ERROR_MESSAGE');\n useAlert(errorMessage);\n }\n};\n\nconst handleSubmit = campaignDetails => {\n addCampaign(campaignDetails);\n};\n\nconst handleClose = () => emit('close');\n</script>\n\n<template>\n <div\n class=\"w-[25rem] z-50 min-w-0 absolute top-10 ltr:right-0 rtl:left-0 bg-n-alpha-3 backdrop-blur-[100px] p-6 rounded-xl border border-slate-50 dark:border-slate-900 shadow-md flex flex-col gap-6\"\n >\n <h3 class=\"text-base font-medium text-slate-900 dark:text-slate-50\">\n {{ t(`CAMPAIGN.SMS.CREATE.TITLE`) }}\n </h3>\n <SMSCampaignForm @submit=\"handleSubmit\" @cancel=\"handleClose\" />\n </div>\n</template>\n","<script setup>\nimport { computed, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useToggle } from '@vueuse/core';\nimport { useStoreGetters, useMapGetter } from 'dashboard/composables/store';\nimport { CAMPAIGN_TYPES } from 'shared/constants/campaign.js';\n\nimport Spinner from 'dashboard/components-next/spinner/Spinner.vue';\nimport CampaignLayout from 'dashboard/components-next/Campaigns/CampaignLayout.vue';\nimport CampaignList from 'dashboard/components-next/Campaigns/Pages/CampaignPage/CampaignList.vue';\nimport SMSCampaignDialog from 'dashboard/components-next/Campaigns/Pages/CampaignPage/SMSCampaign/SMSCampaignDialog.vue';\nimport ConfirmDeleteCampaignDialog from 'dashboard/components-next/Campaigns/Pages/CampaignPage/ConfirmDeleteCampaignDialog.vue';\nimport SMSCampaignEmptyState from 'dashboard/components-next/Campaigns/EmptyState/SMSCampaignEmptyState.vue';\n\nconst { t } = useI18n();\nconst getters = useStoreGetters();\n\nconst selectedCampaign = ref(null);\nconst [showSMSCampaignDialog, toggleSMSCampaignDialog] = useToggle();\n\nconst uiFlags = useMapGetter('campaigns/getUIFlags');\nconst isFetchingCampaigns = computed(() => uiFlags.value.isFetching);\n\nconst confirmDeleteCampaignDialogRef = ref(null);\n\nconst SMSCampaigns = computed(() =>\n getters['campaigns/getCampaigns'].value(CAMPAIGN_TYPES.ONE_OFF)\n);\n\nconst hasNoSMSCampaigns = computed(\n () => SMSCampaigns.value?.length === 0 && !isFetchingCampaigns.value\n);\n\nconst handleDelete = campaign => {\n selectedCampaign.value = campaign;\n confirmDeleteCampaignDialogRef.value.dialogRef.open();\n};\n</script>\n\n<template>\n <CampaignLayout\n :header-title=\"t('CAMPAIGN.SMS.HEADER_TITLE')\"\n :button-label=\"t('CAMPAIGN.SMS.NEW_CAMPAIGN')\"\n @click=\"toggleSMSCampaignDialog()\"\n @close=\"toggleSMSCampaignDialog(false)\"\n >\n <template #action>\n <SMSCampaignDialog\n v-if=\"showSMSCampaignDialog\"\n @close=\"toggleSMSCampaignDialog(false)\"\n />\n </template>\n <div\n v-if=\"isFetchingCampaigns\"\n class=\"flex items-center justify-center py-10 text-n-slate-11\"\n >\n <Spinner />\n </div>\n <CampaignList\n v-else-if=\"!hasNoSMSCampaigns\"\n :campaigns=\"SMSCampaigns\"\n @delete=\"handleDelete\"\n />\n <SMSCampaignEmptyState\n v-else\n :title=\"t('CAMPAIGN.SMS.EMPTY_STATE.TITLE')\"\n :subtitle=\"t('CAMPAIGN.SMS.EMPTY_STATE.SUBTITLE')\"\n class=\"pt-14\"\n />\n <ConfirmDeleteCampaignDialog\n ref=\"confirmDeleteCampaignDialogRef\"\n :selected-campaign=\"selectedCampaign\"\n />\n </CampaignLayout>\n</template>\n","import { frontendURL } from 'dashboard/helper/URLHelper.js';\n\nimport CampaignsPageRouteView from './pages/CampaignsPageRouteView.vue';\nimport LiveChatCampaignsPage from './pages/LiveChatCampaignsPage.vue';\nimport SMSCampaignsPage from './pages/SMSCampaignsPage.vue';\nimport { FEATURE_FLAGS } from 'dashboard/featureFlags';\n\nconst meta = {\n featureFlag: FEATURE_FLAGS.CAMPAIGNS,\n permissions: ['administrator'],\n};\n\nconst campaignsRoutes = {\n routes: [\n {\n path: frontendURL('accounts/:accountId/campaigns'),\n component: CampaignsPageRouteView,\n children: [\n {\n path: '',\n redirect: to => {\n return { name: 'campaigns_ongoing_index', params: to.params };\n },\n },\n {\n path: 'ongoing',\n name: 'campaigns_ongoing_index',\n meta,\n redirect: to => {\n return { name: 'campaigns_livechat_index', params: to.params };\n },\n },\n {\n path: 'one_off',\n name: 'campaigns_one_off_index',\n meta,\n redirect: to => {\n return { name: 'campaigns_sms_index', params: to.params };\n },\n },\n {\n path: 'live_chat',\n name: 'campaigns_livechat_index',\n meta,\n component: LiveChatCampaignsPage,\n },\n {\n path: 'sms',\n name: 'campaigns_sms_index',\n meta,\n component: SMSCampaignsPage,\n },\n ],\n },\n ],\n};\n\nexport default campaignsRoutes;\n","<script setup>\nimport { computed } from 'vue';\nimport { useToggle } from '@vueuse/core';\nimport { useI18n } from 'vue-i18n';\nimport { dynamicTime } from 'shared/helpers/timeHelper';\nimport { usePolicy } from 'dashboard/composables/usePolicy';\n\nimport CardLayout from 'dashboard/components-next/CardLayout.vue';\nimport DropdownMenu from 'dashboard/components-next/dropdown-menu/DropdownMenu.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n id: {\n type: Number,\n required: true,\n },\n name: {\n type: String,\n required: true,\n },\n description: {\n type: String,\n required: true,\n },\n updatedAt: {\n type: Number,\n required: true,\n },\n});\n\nconst emit = defineEmits(['action']);\nconst { checkPermissions } = usePolicy();\n\nconst { t } = useI18n();\n\nconst [showActionsDropdown, toggleDropdown] = useToggle();\n\nconst menuItems = computed(() => {\n const allOptions = [\n {\n label: t('CAPTAIN.ASSISTANTS.OPTIONS.VIEW_CONNECTED_INBOXES'),\n value: 'viewConnectedInboxes',\n action: 'viewConnectedInboxes',\n icon: 'i-lucide-link',\n },\n ];\n\n if (checkPermissions(['administrator'])) {\n allOptions.push(\n {\n label: t('CAPTAIN.ASSISTANTS.OPTIONS.EDIT_ASSISTANT'),\n value: 'edit',\n action: 'edit',\n icon: 'i-lucide-pencil-line',\n },\n {\n label: t('CAPTAIN.ASSISTANTS.OPTIONS.DELETE_ASSISTANT'),\n value: 'delete',\n action: 'delete',\n icon: 'i-lucide-trash',\n }\n );\n }\n\n return allOptions;\n});\n\nconst lastUpdatedAt = computed(() => dynamicTime(props.updatedAt));\n\nconst handleAction = ({ action, value }) => {\n toggleDropdown(false);\n emit('action', { action, value, id: props.id });\n};\n</script>\n\n<template>\n <CardLayout>\n <div class=\"flex justify-between w-full gap-1\">\n <span class=\"text-base text-n-slate-12 line-clamp-1\">\n {{ name }}\n </span>\n <div class=\"flex items-center gap-2\">\n <div\n v-on-clickaway=\"() => toggleDropdown(false)\"\n class=\"relative flex items-center group\"\n >\n <Button\n icon=\"i-lucide-ellipsis-vertical\"\n color=\"slate\"\n size=\"xs\"\n class=\"rounded-md group-hover:bg-n-alpha-2\"\n @click=\"toggleDropdown()\"\n />\n <DropdownMenu\n v-if=\"showActionsDropdown\"\n :menu-items=\"menuItems\"\n class=\"mt-1 ltr:right-0 rtl:left-0 top-full\"\n @action=\"handleAction($event)\"\n />\n </div>\n </div>\n </div>\n <div class=\"flex items-center justify-between w-full gap-4\">\n <span class=\"text-sm truncate text-n-slate-11\">\n {{ description || 'Description not available' }}\n </span>\n <span class=\"text-sm text-n-slate-11 line-clamp-1 shrink-0\">\n {{ lastUpdatedAt }}\n </span>\n </div>\n </CardLayout>\n</template>\n","<script setup>\nimport { ref, computed } from 'vue';\nimport { useStore } from 'dashboard/composables/store';\nimport { useI18n } from 'vue-i18n';\nimport { useAlert } from 'dashboard/composables';\nimport Dialog from 'dashboard/components-next/dialog/Dialog.vue';\n\nconst props = defineProps({\n type: {\n type: String,\n required: true,\n },\n entity: {\n type: Object,\n required: true,\n },\n deletePayload: {\n type: Object,\n default: null,\n },\n});\n\nconst emit = defineEmits(['deleteSuccess']);\n\nconst { t } = useI18n();\nconst store = useStore();\nconst deleteDialogRef = ref(null);\nconst i18nKey = computed(() => props.type.toUpperCase());\n\nconst deleteEntity = async payload => {\n if (!payload) return;\n\n try {\n await store.dispatch(`captain${props.type}/delete`, payload);\n emit('deleteSuccess');\n useAlert(t(`CAPTAIN.${i18nKey.value}.DELETE.SUCCESS_MESSAGE`));\n } catch (error) {\n useAlert(t(`CAPTAIN.${i18nKey.value}.DELETE.ERROR_MESSAGE`));\n }\n};\n\nconst handleDialogConfirm = async () => {\n await deleteEntity(props.deletePayload || props.entity.id);\n deleteDialogRef.value?.close();\n};\n\ndefineExpose({ dialogRef: deleteDialogRef });\n</script>\n\n<template>\n <Dialog\n ref=\"deleteDialogRef\"\n type=\"alert\"\n :title=\"t(`CAPTAIN.${i18nKey}.DELETE.TITLE`)\"\n :description=\"t(`CAPTAIN.${i18nKey}.DELETE.DESCRIPTION`)\"\n :confirm-button-label=\"t(`CAPTAIN.${i18nKey}.DELETE.CONFIRM`)\"\n @confirm=\"handleDialogConfirm\"\n />\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { usePolicy } from 'dashboard/composables/usePolicy';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport PaginationFooter from 'dashboard/components-next/pagination/PaginationFooter.vue';\nimport Spinner from 'dashboard/components-next/spinner/Spinner.vue';\nimport Policy from 'dashboard/components/policy.vue';\n\nconst props = defineProps({\n currentPage: {\n type: Number,\n default: 1,\n },\n totalCount: {\n type: Number,\n default: 100,\n },\n itemsPerPage: {\n type: Number,\n default: 25,\n },\n headerTitle: {\n type: String,\n default: '',\n },\n buttonPolicy: {\n type: Array,\n default: () => [],\n },\n buttonLabel: {\n type: String,\n default: '',\n },\n featureFlag: {\n type: String,\n default: '',\n },\n isFetching: {\n type: Boolean,\n default: false,\n },\n isEmpty: {\n type: Boolean,\n default: false,\n },\n showPaginationFooter: {\n type: Boolean,\n default: true,\n },\n});\n\nconst emit = defineEmits(['click', 'close', 'update:currentPage']);\nconst { shouldShowPaywall } = usePolicy();\n\nconst showPaywall = computed(() => {\n return shouldShowPaywall(props.featureFlag);\n});\n\nconst handleButtonClick = () => {\n emit('click');\n};\n\nconst handlePageChange = event => {\n emit('update:currentPage', event);\n};\n</script>\n\n<template>\n <section class=\"flex flex-col w-full h-full overflow-hidden bg-n-background\">\n <header class=\"sticky top-0 z-10 px-6 xl:px-0\">\n <div class=\"w-full max-w-[60rem] mx-auto\">\n <div\n class=\"flex items-start lg:items-center justify-between w-full py-6 lg:py-0 lg:h-20 gap-4 lg:gap-2 flex-col lg:flex-row\"\n >\n <div class=\"flex gap-4 items-center\">\n <slot name=\"headerTitle\">\n <span class=\"text-xl font-medium text-n-slate-12\">\n {{ headerTitle }}\n </span>\n </slot>\n <div v-if=\"!isEmpty\" class=\"flex items-center gap-2\">\n <div class=\"w-0.5 h-4 rounded-2xl bg-n-weak\" />\n <slot name=\"knowMore\" />\n </div>\n </div>\n\n <div\n v-if=\"!showPaywall\"\n v-on-clickaway=\"() => emit('close')\"\n class=\"relative group/campaign-button\"\n >\n <Policy :permissions=\"buttonPolicy\">\n <Button\n :label=\"buttonLabel\"\n icon=\"i-lucide-plus\"\n size=\"sm\"\n class=\"group-hover/campaign-button:brightness-110\"\n @click=\"handleButtonClick\"\n />\n </Policy>\n <slot name=\"action\" />\n </div>\n </div>\n </div>\n </header>\n <main class=\"flex-1 px-6 overflow-y-auto xl:px-0\">\n <div class=\"w-full max-w-[60rem] mx-auto py-4\">\n <slot v-if=\"!showPaywall\" name=\"controls\" />\n <div\n v-if=\"isFetching\"\n class=\"flex items-center justify-center py-10 text-n-slate-11\"\n >\n <Spinner />\n </div>\n <div v-else-if=\"showPaywall\">\n <slot name=\"paywall\" />\n </div>\n <div v-else-if=\"isEmpty\">\n <slot name=\"emptyState\" />\n </div>\n <slot v-else name=\"body\" />\n <slot />\n </div>\n </main>\n <footer v-if=\"showPaginationFooter\" class=\"sticky bottom-0 z-10 px-4 pb-4\">\n <PaginationFooter\n :current-page=\"currentPage\"\n :total-items=\"totalCount\"\n :items-per-page=\"itemsPerPage\"\n @update:current-page=\"handlePageChange\"\n />\n </footer>\n </section>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useRouter } from 'vue-router';\nimport { useMapGetter } from 'dashboard/composables/store';\nimport { useAccount } from 'dashboard/composables/useAccount';\n\nimport BasePaywallModal from 'dashboard/routes/dashboard/settings/components/BasePaywallModal.vue';\n\nconst router = useRouter();\nconst currentUser = useMapGetter('getCurrentUser');\n\nconst isSuperAdmin = computed(() => {\n return currentUser.value.type === 'SuperAdmin';\n});\nconst { accountId, isOnChatwootCloud } = useAccount();\n\nconst i18nKey = computed(() =>\n isOnChatwootCloud.value ? 'PAYWALL' : 'ENTERPRISE_PAYWALL'\n);\nconst openBilling = () => {\n router.push({\n name: 'billing_settings_index',\n params: { accountId: accountId.value },\n });\n};\n</script>\n\n<template>\n <div\n class=\"w-full max-w-[60rem] mx-auto h-full max-h-[448px] grid place-content-center\"\n >\n <BasePaywallModal\n class=\"mx-auto\"\n feature-prefix=\"CAPTAIN\"\n :i18n-key=\"i18nKey\"\n :is-super-admin=\"isSuperAdmin\"\n :is-on-chatwoot-cloud=\"isOnChatwootCloud\"\n @upgrade=\"openBilling\"\n />\n </div>\n</template>\n","<script setup>\nimport { reactive, computed, watch } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useVuelidate } from '@vuelidate/core';\nimport { required, minLength } from '@vuelidate/validators';\nimport { useMapGetter } from 'dashboard/composables/store';\n\nimport Input from 'dashboard/components-next/input/Input.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport Editor from 'dashboard/components-next/Editor/Editor.vue';\n\nconst props = defineProps({\n mode: {\n type: String,\n required: true,\n validator: value => ['edit', 'create'].includes(value),\n },\n assistant: {\n type: Object,\n default: () => ({}),\n },\n});\n\nconst emit = defineEmits(['submit', 'cancel']);\n\nconst { t } = useI18n();\n\nconst formState = {\n uiFlags: useMapGetter('captainAssistants/getUIFlags'),\n};\n\nconst initialState = {\n name: '',\n description: '',\n productName: '',\n featureFaq: false,\n featureMemory: false,\n};\n\nconst state = reactive({ ...initialState });\n\nconst validationRules = {\n name: { required, minLength: minLength(1) },\n description: { required, minLength: minLength(1) },\n productName: { required, minLength: minLength(1) },\n};\n\nconst v$ = useVuelidate(validationRules, state);\n\nconst isLoading = computed(() => formState.uiFlags.value.creatingItem);\n\nconst getErrorMessage = (field, errorKey) => {\n return v$.value[field].$error\n ? t(`CAPTAIN.ASSISTANTS.FORM.${errorKey}.ERROR`)\n : '';\n};\n\nconst formErrors = computed(() => ({\n name: getErrorMessage('name', 'NAME'),\n description: getErrorMessage('description', 'DESCRIPTION'),\n productName: getErrorMessage('productName', 'PRODUCT_NAME'),\n}));\n\nconst handleCancel = () => emit('cancel');\n\nconst prepareAssistantDetails = () => ({\n name: state.name,\n description: state.description,\n config: {\n product_name: state.productName,\n feature_faq: state.featureFaq,\n feature_memory: state.featureMemory,\n },\n});\n\nconst handleSubmit = async () => {\n const isFormValid = await v$.value.$validate();\n if (!isFormValid) {\n return;\n }\n\n emit('submit', prepareAssistantDetails());\n};\n\nconst updateStateFromAssistant = assistant => {\n if (!assistant) return;\n\n const { name, description, config } = assistant;\n\n Object.assign(state, {\n name,\n description,\n productName: config.product_name,\n featureFaq: config.feature_faq || false,\n featureMemory: config.feature_memory || false,\n });\n};\n\nwatch(\n () => props.assistant,\n newAssistant => {\n if (props.mode === 'edit' && newAssistant) {\n updateStateFromAssistant(newAssistant);\n }\n },\n { immediate: true }\n);\n</script>\n\n<template>\n <form class=\"flex flex-col gap-4\" @submit.prevent=\"handleSubmit\">\n <Input\n v-model=\"state.name\"\n :label=\"t('CAPTAIN.ASSISTANTS.FORM.NAME.LABEL')\"\n :placeholder=\"t('CAPTAIN.ASSISTANTS.FORM.NAME.PLACEHOLDER')\"\n :message=\"formErrors.name\"\n :message-type=\"formErrors.name ? 'error' : 'info'\"\n />\n\n <Editor\n v-model=\"state.description\"\n :label=\"t('CAPTAIN.ASSISTANTS.FORM.DESCRIPTION.LABEL')\"\n :placeholder=\"t('CAPTAIN.ASSISTANTS.FORM.DESCRIPTION.PLACEHOLDER')\"\n :message=\"formErrors.description\"\n :message-type=\"formErrors.description ? 'error' : 'info'\"\n />\n\n <Input\n v-model=\"state.productName\"\n :label=\"t('CAPTAIN.ASSISTANTS.FORM.PRODUCT_NAME.LABEL')\"\n :placeholder=\"t('CAPTAIN.ASSISTANTS.FORM.PRODUCT_NAME.PLACEHOLDER')\"\n :message=\"formErrors.productName\"\n :message-type=\"formErrors.productName ? 'error' : 'info'\"\n />\n\n <fieldset class=\"flex flex-col gap-2.5\">\n <legend class=\"mb-3 text-sm font-medium text-n-slate-12\">\n {{ t('CAPTAIN.ASSISTANTS.FORM.FEATURES.TITLE') }}\n </legend>\n\n <label class=\"flex items-center gap-2\">\n <input v-model=\"state.featureFaq\" type=\"checkbox\" />\n <span class=\"text-sm font-medium text-n-slate-12\">\n {{ t('CAPTAIN.ASSISTANTS.FORM.FEATURES.ALLOW_CONVERSATION_FAQS') }}\n </span>\n </label>\n\n <label class=\"flex items-center gap-2\">\n <input v-model=\"state.featureMemory\" type=\"checkbox\" />\n <span class=\"text-sm font-medium text-n-slate-12\">\n {{ t('CAPTAIN.ASSISTANTS.FORM.FEATURES.ALLOW_MEMORIES') }}\n </span>\n </label>\n </fieldset>\n\n <div class=\"flex items-center justify-between w-full gap-3\">\n <Button\n type=\"button\"\n variant=\"faded\"\n color=\"slate\"\n :label=\"t('CAPTAIN.FORM.CANCEL')\"\n class=\"w-full bg-n-alpha-2 n-blue-text hover:bg-n-alpha-3\"\n @click=\"handleCancel\"\n />\n <Button\n type=\"submit\"\n :label=\"t(`CAPTAIN.FORM.${mode.toUpperCase()}`)\"\n class=\"w-full\"\n :is-loading=\"isLoading\"\n :disabled=\"isLoading\"\n />\n </div>\n </form>\n</template>\n","<script setup>\nimport { ref, computed } from 'vue';\nimport { useStore } from 'dashboard/composables/store';\nimport { useAlert } from 'dashboard/composables';\nimport { useI18n } from 'vue-i18n';\n\nimport Dialog from 'dashboard/components-next/dialog/Dialog.vue';\nimport AssistantForm from './AssistantForm.vue';\n\nconst props = defineProps({\n selectedAssistant: {\n type: Object,\n default: () => ({}),\n },\n type: {\n type: String,\n default: 'create',\n validator: value => ['create', 'edit'].includes(value),\n },\n});\nconst emit = defineEmits(['close']);\nconst { t } = useI18n();\nconst store = useStore();\n\nconst dialogRef = ref(null);\nconst assistantForm = ref(null);\n\nconst updateAssistant = assistantDetails =>\n store.dispatch('captainAssistants/update', {\n id: props.selectedAssistant.id,\n ...assistantDetails,\n });\n\nconst i18nKey = computed(\n () => `CAPTAIN.ASSISTANTS.${props.type.toUpperCase()}`\n);\n\nconst createAssistant = assistantDetails =>\n store.dispatch('captainAssistants/create', assistantDetails);\n\nconst handleSubmit = async updatedAssistant => {\n try {\n if (props.type === 'edit') {\n await updateAssistant(updatedAssistant);\n } else {\n await createAssistant(updatedAssistant);\n }\n useAlert(t(`${i18nKey.value}.SUCCESS_MESSAGE`));\n dialogRef.value.close();\n } catch (error) {\n const errorMessage = error?.message || t(`${i18nKey.value}.ERROR_MESSAGE`);\n useAlert(errorMessage);\n }\n};\n\nconst handleClose = () => {\n emit('close');\n};\n\nconst handleCancel = () => {\n dialogRef.value.close();\n};\n\ndefineExpose({ dialogRef });\n</script>\n\n<template>\n <Dialog\n ref=\"dialogRef\"\n type=\"edit\"\n :title=\"t(`${i18nKey}.TITLE`)\"\n :description=\"t('CAPTAIN.ASSISTANTS.FORM_DESCRIPTION')\"\n :show-cancel-button=\"false\"\n :show-confirm-button=\"false\"\n overflow-y-auto\n @close=\"handleClose\"\n >\n <AssistantForm\n ref=\"assistantForm\"\n :mode=\"type\"\n :assistant=\"selectedAssistant\"\n @submit=\"handleSubmit\"\n @cancel=\"handleCancel\"\n />\n <template #footer />\n </Dialog>\n</template>\n","<script setup>\nimport { ref } from 'vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\ndefineProps({\n title: { type: String, default: '' },\n note: { type: String, default: '' },\n videoUrl: { type: String, default: '' },\n thumbnail: { type: String, default: '' },\n fallbackThumbnail: { type: String, default: '' },\n fallbackThumbnailDark: { type: String, default: '' },\n learnMoreUrl: { type: String, default: '' },\n});\n\nconst imageError = ref(false);\n\nconst handleImageError = () => {\n imageError.value = true;\n};\n\nconst openLink = link => {\n if (link) {\n window.open(link, '_blank');\n }\n};\n</script>\n\n<template>\n <section class=\"custom-dashed-border rounded-2xl py-5 px-6\">\n <div class=\"flex flex-col md:flex-row items-start md:items-center gap-6\">\n <div\n class=\"flex-shrink-0 bg-gray-800 w-[7.5rem] h-[6.5rem] rounded-lg flex items-center justify-center overflow-hidden\"\n >\n <img\n v-if=\"!imageError && thumbnail\"\n :src=\"thumbnail\"\n :alt=\"title\"\n draggable=\"false\"\n class=\"w-full h-full object-cover rounded-lg\"\n loading=\"lazy\"\n @error=\"handleImageError\"\n />\n\n <template v-else>\n <img\n v-if=\"fallbackThumbnailDark\"\n :src=\"fallbackThumbnailDark\"\n :alt=\"title\"\n draggable=\"false\"\n class=\"w-full h-full object-cover hidden dark:block rounded-lg\"\n loading=\"lazy\"\n />\n\n <img\n v-if=\"fallbackThumbnail\"\n :src=\"fallbackThumbnail\"\n :alt=\"title\"\n draggable=\"false\"\n class=\"w-full h-full object-cover block dark:hidden rounded-lg\"\n loading=\"lazy\"\n />\n </template>\n </div>\n\n <div class=\"flex flex-col flex-1 gap-3 ltr:pr-8 rtl:pl-8\">\n <p v-if=\"note\" class=\"text-n-slate-12 text-sm mb-0\">{{ note }}</p>\n\n <div class=\"flex gap-3\">\n <slot name=\"actions\">\n <Button\n v-if=\"videoUrl\"\n :label=\"$t('FEATURE_SPOTLIGHT.WATCH_VIDEO')\"\n sm\n faded\n slate\n icon=\"i-lucide-circle-play\"\n @click=\"openLink(videoUrl)\"\n />\n\n <Button\n v-if=\"learnMoreUrl\"\n :label=\"$t('FEATURE_SPOTLIGHT.LEARN_MORE')\"\n sm\n faded\n slate\n trailing-icon\n icon=\"i-lucide-arrow-up-right\"\n @click=\"openLink(learnMoreUrl)\"\n />\n </slot>\n </div>\n </div>\n </div>\n </section>\n</template>\n","import { INBOX_TYPES } from 'dashboard/helper/inbox';\n\nexport const assistantsList = [\n {\n account_id: 2,\n config: { product_name: 'HelpDesk Pro' },\n created_at: 1736033561,\n description:\n 'An advanced AI assistant designed to enhance customer support solutions by automating workflows and providing instant responses.',\n id: 4,\n name: 'Support Genie',\n },\n {\n account_id: 3,\n config: { product_name: 'CRM Tools' },\n created_at: 1736033562,\n description:\n 'Helps streamline customer relationship management by organizing contacts, automating follow-ups, and providing insights.',\n id: 5,\n name: 'CRM Assistant',\n },\n {\n account_id: 4,\n config: { product_name: 'SalesFlow' },\n created_at: 1736033563,\n description:\n 'Optimizes your sales pipeline by tracking prospects, forecasting sales, and automating administrative tasks.',\n id: 6,\n name: 'SalesBot',\n },\n {\n account_id: 5,\n config: { product_name: 'TicketMaster AI' },\n created_at: 1736033564,\n description:\n 'Automates ticket assignment, categorization, and customer query responses to enhance support efficiency.',\n id: 7,\n name: 'TicketBot',\n },\n {\n account_id: 6,\n config: { product_name: 'FinanceAssist' },\n created_at: 1736033565,\n description:\n 'Provides financial analytics, reporting, and insights, helping teams make data-driven financial decisions.',\n id: 8,\n name: 'Finance Wizard',\n },\n {\n account_id: 8,\n config: { product_name: 'HR Assistant' },\n created_at: 1736033567,\n description:\n 'Streamlines HR operations including employee management, payroll, and recruitment processes.',\n id: 10,\n name: 'HR Helper',\n },\n];\n\nexport const documentsList = [\n {\n account_id: 1,\n assistant: { id: 1, name: 'Helper Pro' },\n content:\n 'Comprehensive guide on using conversation filters to manage chats effectively.',\n created_at: 1736143272,\n external_link:\n 'https://www.chatwoot.com/hc/user-guide/articles/1677688192-how-to-use-conversation-filters',\n id: 3059,\n name: 'How to use Conversation Filters? | User Guide | Chatwoot',\n status: 'available',\n },\n {\n account_id: 2,\n assistant: { id: 2, name: 'Support Genie' },\n content:\n 'Step-by-step guide for automating ticket assignments and improving support workflow in Chatwoot.',\n created_at: 1736143273,\n external_link:\n 'https://www.chatwoot.com/hc/user-guide/articles/1677688200-automating-ticket-assignments',\n id: 3060,\n name: 'Automating Ticket Assignments | User Guide | Chatwoot',\n status: 'available',\n },\n {\n account_id: 3,\n assistant: { id: 3, name: 'CRM Assistant' },\n content:\n 'A detailed guide on managing and organizing customer profiles for better relationship management.',\n created_at: 1736143274,\n external_link:\n 'https://www.chatwoot.com/hc/user-guide/articles/1677688210-managing-customer-profiles',\n id: 3061,\n name: 'Managing Customer Profiles | User Guide | Chatwoot',\n status: 'available',\n },\n {\n account_id: 4,\n assistant: { id: 4, name: 'SalesBot' },\n content:\n 'Learn how to optimize sales tracking and improve your sales forecasting using advanced features.',\n created_at: 1736143275,\n external_link:\n 'https://www.chatwoot.com/hc/user-guide/articles/1677688220-sales-tracking-guide',\n id: 3062,\n name: 'Sales Tracking Guide | User Guide | Chatwoot',\n status: 'available',\n },\n {\n account_id: 5,\n assistant: { id: 5, name: 'TicketBot' },\n content:\n 'How to efficiently create, manage, and resolve tickets in Chatwoot.',\n created_at: 1736143276,\n external_link:\n 'https://www.chatwoot.com/hc/user-guide/articles/1677688230-managing-tickets',\n id: 3063,\n name: 'Managing Tickets | User Guide | Chatwoot',\n status: 'available',\n },\n {\n account_id: 6,\n assistant: { id: 6, name: 'Finance Wizard' },\n content:\n 'Detailed guide on how to use financial reporting tools and generate insightful analytics.',\n created_at: 1736143277,\n external_link:\n 'https://www.chatwoot.com/hc/user-guide/articles/1677688240-financial-reporting',\n id: 3064,\n name: 'Financial Reporting | User Guide | Chatwoot',\n status: 'available',\n },\n];\n\nexport const responsesList = [\n {\n account_id: 1,\n answer:\n 'Messenger may be deactivated because you are on a free plan or the limit for inboxes might have been reached.',\n created_at: 1736283330,\n id: 87,\n question: 'Why is my Messenger in Chatwoot deactivated?',\n status: 'pending',\n assistant: {\n account_id: 1,\n config: { product_name: 'Chatwoot' },\n created_at: 1736033280,\n description: 'Assists with general queries and system-wide issues.',\n id: 1,\n name: 'Assistant 2',\n },\n },\n {\n account_id: 2,\n answer:\n 'You can integrate your WhatsApp account by navigating to the Integrations section and selecting the WhatsApp integration option.',\n created_at: 1736283340,\n id: 88,\n question: 'How do I integrate WhatsApp with Chatwoot?',\n assistant: {\n account_id: 2,\n config: { product_name: 'Chatwoot' },\n created_at: 1736033281,\n description: 'Helps with integration and setup-related inquiries.',\n id: 2,\n name: 'Assistant 3',\n },\n },\n {\n account_id: 3,\n answer:\n \"To reset your password, go to the login page and click on 'Forgot Password', then follow the instructions sent to your email.\",\n created_at: 1736283350,\n id: 89,\n question: 'How can I reset my password in Chatwoot?',\n assistant: {\n account_id: 3,\n config: { product_name: 'Chatwoot' },\n created_at: 1736033282,\n description: 'Handles account management and recovery support.',\n id: 3,\n name: 'Assistant 4',\n },\n },\n {\n account_id: 4,\n answer:\n \"You can enable the dark mode in settings by navigating to 'Appearance' and selecting 'Dark Mode'.\",\n created_at: 1736283360,\n id: 90,\n question: 'How do I enable dark mode in Chatwoot?',\n assistant: {\n account_id: 4,\n config: { product_name: 'Chatwoot' },\n created_at: 1736033283,\n description: 'Helps with UI and theme-related inquiries.',\n id: 4,\n name: 'Assistant 5',\n },\n },\n {\n account_id: 5,\n answer:\n \"To add a new team member, navigate to 'Settings', then 'Team', and click on 'Add Team Member'.\",\n created_at: 1736283370,\n id: 91,\n question: 'How do I add a new team member in Chatwoot?',\n assistant: {\n account_id: 5,\n config: { product_name: 'Chatwoot' },\n created_at: 1736033284,\n description: 'Supports team management and user access-related queries.',\n id: 5,\n name: 'Assistant 6',\n },\n },\n {\n account_id: 6,\n answer:\n \"Campaigns in Chatwoot allow you to send targeted messages to specific user segments. You can create them in the 'Campaigns' section.\",\n created_at: 1736283380,\n id: 92,\n question: 'What are campaigns in Chatwoot?',\n assistant: {\n account_id: 6,\n config: { product_name: 'Chatwoot' },\n created_at: 1736033285,\n description:\n 'Specialized in marketing, campaign management, and messaging strategies.',\n id: 6,\n name: 'Assistant 7',\n },\n },\n];\n\nexport const inboxes = [\n {\n id: 7,\n name: 'Email Support',\n channel_type: INBOX_TYPES.EMAIL,\n email: 'support@company.com',\n },\n {\n id: 1,\n name: 'Website Chat',\n channel_type: INBOX_TYPES.WEB,\n },\n {\n id: 2,\n name: 'Facebook Support',\n channel_type: INBOX_TYPES.FB,\n },\n {\n id: 5,\n name: 'SMS Service',\n channel_type: INBOX_TYPES.TWILIO,\n messaging_service_sid: 'MGxxxxxx',\n },\n {\n id: 6,\n name: 'WhatsApp Support',\n channel_type: INBOX_TYPES.WHATSAPP,\n phone_number: '+1987654321',\n },\n {\n id: 8,\n name: 'Telegram Support',\n channel_type: INBOX_TYPES.TELEGRAM,\n },\n {\n id: 9,\n name: 'LINE Support',\n channel_type: INBOX_TYPES.LINE,\n },\n {\n id: 10,\n name: 'API Channel',\n channel_type: INBOX_TYPES.API,\n },\n {\n id: 11,\n name: 'SMS Basic',\n channel_type: INBOX_TYPES.SMS,\n phone_number: '+1555555555',\n },\n];\n","<script setup>\nimport EmptyStateLayout from 'dashboard/components-next/EmptyStateLayout.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport AssistantCard from 'dashboard/components-next/captain/assistant/AssistantCard.vue';\nimport FeatureSpotlight from 'dashboard/components-next/feature-spotlight/FeatureSpotlight.vue';\nimport { assistantsList } from 'dashboard/components-next/captain/pageComponents/emptyStates/captainEmptyStateContent.js';\n\nconst emit = defineEmits(['click']);\n\nconst onClick = () => {\n emit('click');\n};\n</script>\n\n<template>\n <FeatureSpotlight\n :title=\"$t('CAPTAIN.ASSISTANTS.EMPTY_STATE.FEATURE_SPOTLIGHT.TITLE')\"\n :note=\"$t('CAPTAIN.ASSISTANTS.EMPTY_STATE.FEATURE_SPOTLIGHT.NOTE')\"\n fallback-thumbnail=\"/assets/images/dashboard/captain/assistant-light.svg\"\n fallback-thumbnail-dark=\"/assets/images/dashboard/captain/assistant-dark.svg\"\n learn-more-url=\"https://chwt.app/captain-assistant\"\n class=\"mb-8\"\n />\n <EmptyStateLayout\n :title=\"$t('CAPTAIN.ASSISTANTS.EMPTY_STATE.TITLE')\"\n :subtitle=\"$t('CAPTAIN.ASSISTANTS.EMPTY_STATE.SUBTITLE')\"\n :action-perms=\"['administrator']\"\n >\n <template #empty-state-item>\n <div class=\"grid grid-cols-1 gap-4 p-px overflow-hidden\">\n <AssistantCard\n v-for=\"(assistant, index) in assistantsList.slice(0, 5)\"\n :id=\"assistant.id\"\n :key=\"`assistant-${index}`\"\n :name=\"assistant.name\"\n :description=\"assistant.description\"\n :updated-at=\"assistant.created_at\"\n />\n </div>\n </template>\n <template #actions>\n <Button\n :label=\"$t('CAPTAIN.ASSISTANTS.ADD_NEW')\"\n icon=\"i-lucide-plus\"\n @click=\"onClick\"\n />\n </template>\n </EmptyStateLayout>\n</template>\n","<script setup>\nimport { ref } from 'vue';\nimport { useToggle } from '@vueuse/core';\nimport { vOnClickOutside } from '@vueuse/components';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\ndefineProps({\n buttonLabel: { type: String, default: '' },\n title: { type: String, default: '' },\n note: { type: String, default: '' },\n videoUrl: { type: String, default: '' },\n thumbnail: { type: String, default: '' },\n fallbackThumbnail: { type: String, default: '' },\n fallbackThumbnailDark: { type: String, default: '' },\n learnMoreUrl: { type: String, default: '' },\n});\n\nconst imageError = ref(false);\nconst [isPopupVisible, togglePopup] = useToggle();\n\nconst handleImageError = () => {\n imageError.value = true;\n};\n\nconst openLink = link => {\n if (link) {\n window.open(link, '_blank');\n }\n};\n</script>\n\n<template>\n <div class=\"relative\">\n <Button\n id=\"togglePopup\"\n :label=\"buttonLabel\"\n slate\n ghost\n sm\n :class=\"{ 'bg-n-alpha-2': isPopupVisible }\"\n @click=\"togglePopup(!isPopupVisible)\"\n />\n\n <div\n v-if=\"isPopupVisible\"\n v-on-click-outside=\"[\n () => isPopupVisible && (isPopupVisible = false),\n { ignore: ['#togglePopup'] },\n ]\"\n >\n <section\n class=\"absolute top-full mt-6 ltr:left-0 rtl:right-0 outline outline-1 outline-n-weak bg-n-alpha-3 backdrop-blur-[100px] rounded-xl p-4 w-80\"\n >\n <div\n class=\"absolute -top-[0.77rem] ltr:left-12 rtl:right-12 w-6 h-6 ltr:rotate-45 rtl:-rotate-45 rtl:rounded-tr ltr:rounded-tl rtl:border-r ltr:border-l border-t border-n-weak bg-n-alpha-3 z-10\"\n />\n\n <div class=\"relative flex flex-col items-start gap-4 z-20\">\n <div class=\"flex-shrink-0 bg-gray-800 w-full h-[7.5rem] rounded-lg\">\n <img\n v-if=\"!imageError && thumbnail\"\n :src=\"thumbnail\"\n :alt=\"title\"\n draggable=\"false\"\n loading=\"lazy\"\n class=\"w-full h-full object-cover rounded-lg\"\n @error=\"handleImageError\"\n />\n\n <template v-else>\n <img\n v-if=\"fallbackThumbnailDark\"\n :src=\"fallbackThumbnailDark\"\n :alt=\"title\"\n draggable=\"false\"\n loading=\"lazy\"\n class=\"w-full h-full object-cover hidden dark:block\"\n />\n\n <img\n v-if=\"fallbackThumbnail\"\n :src=\"fallbackThumbnail\"\n :alt=\"title\"\n draggable=\"false\"\n loading=\"lazy\"\n class=\"w-full h-full object-cover block dark:hidden\"\n />\n </template>\n </div>\n\n <p v-if=\"note\" class=\"text-n-slate-12 text-start text-sm mb-0\">\n {{ note }}\n </p>\n\n <div class=\"flex gap-3 justify-between w-full\">\n <slot name=\"actions\">\n <Button\n v-if=\"videoUrl\"\n :label=\"$t('FEATURE_SPOTLIGHT.WATCH_VIDEO')\"\n sm\n faded\n slate\n icon=\"i-lucide-circle-play\"\n class=\"w-full\"\n @click=\"openLink(videoUrl)\"\n />\n\n <Button\n v-if=\"learnMoreUrl\"\n :label=\"$t('FEATURE_SPOTLIGHT.LEARN_MORE')\"\n sm\n faded\n slate\n trailing-icon\n class=\"w-full\"\n icon=\"i-lucide-arrow-up-right\"\n @click=\"openLink(learnMoreUrl)\"\n />\n </slot>\n </div>\n </div>\n </section>\n </div>\n </div>\n</template>\n","<script setup>\nimport { onMounted, computed } from 'vue';\nimport { useAccount } from 'dashboard/composables/useAccount';\nimport { useCaptain } from 'dashboard/composables/useCaptain';\nimport { useRouter } from 'vue-router';\n\nimport Banner from 'dashboard/components-next/banner/Banner.vue';\n\nconst router = useRouter();\nconst { accountId } = useAccount();\n\nconst { responseLimits, fetchLimits } = useCaptain();\n\nconst openBilling = () => {\n router.push({\n name: 'billing_settings_index',\n params: { accountId: accountId.value },\n });\n};\n\nconst showBanner = computed(() => {\n if (!responseLimits.value) return false;\n\n const { consumed, totalCount } = responseLimits.value;\n if (!consumed || !totalCount) return false;\n\n return consumed / totalCount > 0.8;\n});\n\nonMounted(fetchLimits);\n</script>\n\n<template>\n <Banner\n v-show=\"showBanner\"\n color=\"amber\"\n :action-label=\"$t('CAPTAIN.PAYWALL.UPGRADE_NOW')\"\n @action=\"openBilling\"\n >\n {{ $t('CAPTAIN.BANNER.RESPONSES') }}\n </Banner>\n</template>\n","<script setup>\nimport { computed, onMounted, ref, nextTick } from 'vue';\nimport { useMapGetter, useStore } from 'dashboard/composables/store';\nimport { FEATURE_FLAGS } from 'dashboard/featureFlags';\n\nimport AssistantCard from 'dashboard/components-next/captain/assistant/AssistantCard.vue';\nimport DeleteDialog from 'dashboard/components-next/captain/pageComponents/DeleteDialog.vue';\nimport PageLayout from 'dashboard/components-next/captain/PageLayout.vue';\nimport CaptainPaywall from 'dashboard/components-next/captain/pageComponents/Paywall.vue';\nimport CreateAssistantDialog from 'dashboard/components-next/captain/pageComponents/assistant/CreateAssistantDialog.vue';\nimport AssistantPageEmptyState from 'dashboard/components-next/captain/pageComponents/emptyStates/AssistantPageEmptyState.vue';\nimport FeatureSpotlightPopover from 'dashboard/components-next/feature-spotlight/FeatureSpotlightPopover.vue';\nimport LimitBanner from 'dashboard/components-next/captain/pageComponents/response/LimitBanner.vue';\nimport { useRouter } from 'vue-router';\n\nconst router = useRouter();\n\nconst store = useStore();\nconst dialogType = ref('');\nconst uiFlags = useMapGetter('captainAssistants/getUIFlags');\nconst assistants = useMapGetter('captainAssistants/getRecords');\nconst isFetching = computed(() => uiFlags.value.fetchingList);\n\nconst selectedAssistant = ref(null);\nconst deleteAssistantDialog = ref(null);\n\nconst handleDelete = () => {\n deleteAssistantDialog.value.dialogRef.open();\n};\n\nconst createAssistantDialog = ref(null);\n\nconst handleCreate = () => {\n dialogType.value = 'create';\n nextTick(() => createAssistantDialog.value.dialogRef.open());\n};\n\nconst handleEdit = () => {\n dialogType.value = 'edit';\n nextTick(() => createAssistantDialog.value.dialogRef.open());\n};\n\nconst handleViewConnectedInboxes = () => {\n router.push({\n name: 'captain_assistants_inboxes_index',\n params: { assistantId: selectedAssistant.value.id },\n });\n};\n\nconst handleAction = ({ action, id }) => {\n selectedAssistant.value = assistants.value.find(\n assistant => id === assistant.id\n );\n nextTick(() => {\n if (action === 'delete') {\n handleDelete();\n }\n if (action === 'edit') {\n handleEdit();\n }\n if (action === 'viewConnectedInboxes') {\n handleViewConnectedInboxes();\n }\n });\n};\n\nconst handleCreateClose = () => {\n dialogType.value = '';\n selectedAssistant.value = null;\n};\n\nonMounted(() => store.dispatch('captainAssistants/get'));\n</script>\n\n<template>\n <PageLayout\n :header-title=\"$t('CAPTAIN.ASSISTANTS.HEADER')\"\n :button-label=\"$t('CAPTAIN.ASSISTANTS.ADD_NEW')\"\n :button-policy=\"['administrator']\"\n :show-pagination-footer=\"false\"\n :is-fetching=\"isFetching\"\n :is-empty=\"!assistants.length\"\n :feature-flag=\"FEATURE_FLAGS.CAPTAIN\"\n @click=\"handleCreate\"\n >\n <template #knowMore>\n <FeatureSpotlightPopover\n :button-label=\"$t('CAPTAIN.HEADER_KNOW_MORE')\"\n :title=\"$t('CAPTAIN.ASSISTANTS.EMPTY_STATE.FEATURE_SPOTLIGHT.TITLE')\"\n :note=\"$t('CAPTAIN.ASSISTANTS.EMPTY_STATE.FEATURE_SPOTLIGHT.NOTE')\"\n fallback-thumbnail=\"/assets/images/dashboard/captain/assistant-popover-light.svg\"\n fallback-thumbnail-dark=\"/assets/images/dashboard/captain/assistant-popover-dark.svg\"\n learn-more-url=\"https://chwt.app/captain-assistant\"\n />\n </template>\n <template #emptyState>\n <AssistantPageEmptyState @click=\"handleCreate\" />\n </template>\n\n <template #paywall>\n <CaptainPaywall />\n </template>\n\n <template #body>\n <LimitBanner class=\"mb-5\" />\n\n <div class=\"flex flex-col gap-4\">\n <AssistantCard\n v-for=\"assistant in assistants\"\n :id=\"assistant.id\"\n :key=\"assistant.id\"\n :name=\"assistant.name\"\n :description=\"assistant.description\"\n :updated-at=\"assistant.updated_at || assistant.created_at\"\n :created-at=\"assistant.created_at\"\n @action=\"handleAction\"\n />\n </div>\n </template>\n\n <DeleteDialog\n v-if=\"selectedAssistant\"\n ref=\"deleteAssistantDialog\"\n :entity=\"selectedAssistant\"\n type=\"Assistants\"\n />\n\n <CreateAssistantDialog\n v-if=\"dialogType\"\n ref=\"createAssistantDialog\"\n :type=\"dialogType\"\n :selected-assistant=\"selectedAssistant\"\n @close=\"handleCreateClose\"\n />\n </PageLayout>\n</template>\n","<script setup>\nimport { reactive, computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useVuelidate } from '@vuelidate/core';\nimport { required } from '@vuelidate/validators';\nimport { useMapGetter } from 'dashboard/composables/store';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport ComboBox from 'dashboard/components-next/combobox/ComboBox.vue';\n\nconst props = defineProps({\n assistantId: {\n type: Number,\n required: true,\n },\n});\n\nconst emit = defineEmits(['submit', 'cancel']);\n\nconst { t } = useI18n();\n\nconst formState = {\n uiFlags: useMapGetter('captainInboxes/getUIFlags'),\n inboxes: useMapGetter('inboxes/getInboxes'),\n captainInboxes: useMapGetter('captainInboxes/getRecords'),\n};\n\nconst initialState = {\n inboxId: null,\n};\n\nconst state = reactive({ ...initialState });\n\nconst validationRules = {\n inboxId: { required },\n};\n\nconst inboxList = computed(() => {\n const captainInboxIds = formState.captainInboxes.value.map(inbox => inbox.id);\n\n return formState.inboxes.value\n .filter(inbox => !captainInboxIds.includes(inbox.id))\n .map(inbox => ({\n value: inbox.id,\n label: inbox.name,\n }));\n});\n\nconst v$ = useVuelidate(validationRules, state);\n\nconst isLoading = computed(() => formState.uiFlags.value.creatingItem);\n\nconst getErrorMessage = (field, errorKey) => {\n return v$.value[field].$error\n ? t(`CAPTAIN.INBOXES.FORM.${errorKey}.ERROR`)\n : '';\n};\n\nconst formErrors = computed(() => ({\n inboxId: getErrorMessage('inboxId', 'INBOX'),\n}));\n\nconst handleCancel = () => emit('cancel');\n\nconst prepareInboxPayload = () => ({\n inboxId: state.inboxId,\n assistantId: props.assistantId,\n});\n\nconst handleSubmit = async () => {\n const isFormValid = await v$.value.$validate();\n if (!isFormValid) {\n return;\n }\n\n emit('submit', prepareInboxPayload());\n};\n</script>\n\n<template>\n <form class=\"flex flex-col gap-4\" @submit.prevent=\"handleSubmit\">\n <div class=\"flex flex-col gap-1\">\n <label for=\"inbox\" class=\"mb-0.5 text-sm font-medium text-n-slate-12\">\n {{ t('CAPTAIN.INBOXES.FORM.INBOX.LABEL') }}\n </label>\n <ComboBox\n id=\"inbox\"\n v-model=\"state.inboxId\"\n :options=\"inboxList\"\n :has-error=\"!!formErrors.inboxId\"\n :placeholder=\"t('CAPTAIN.INBOXES.FORM.INBOX.PLACEHOLDER')\"\n class=\"[&>div>button]:bg-n-alpha-black2 [&>div>button:not(.focused)]:dark:outline-n-weak [&>div>button:not(.focused)]:hover:!outline-n-slate-6\"\n :message=\"formErrors.inboxId\"\n />\n </div>\n\n <div class=\"flex items-center justify-between w-full gap-3\">\n <Button\n type=\"button\"\n variant=\"faded\"\n color=\"slate\"\n :label=\"t('CAPTAIN.FORM.CANCEL')\"\n class=\"w-full bg-n-alpha-2 n-blue-text hover:bg-n-alpha-3\"\n @click=\"handleCancel\"\n />\n <Button\n type=\"submit\"\n :label=\"t('CAPTAIN.FORM.CREATE')\"\n class=\"w-full\"\n :is-loading=\"isLoading\"\n :disabled=\"isLoading\"\n />\n </div>\n </form>\n</template>\n","<script setup>\nimport { ref } from 'vue';\nimport { useStore } from 'dashboard/composables/store';\nimport { useAlert } from 'dashboard/composables';\nimport { useI18n } from 'vue-i18n';\n\nimport Dialog from 'dashboard/components-next/dialog/Dialog.vue';\nimport ConnectInboxForm from './ConnectInboxForm.vue';\n\ndefineProps({\n assistantId: {\n type: Number,\n required: true,\n },\n});\nconst emit = defineEmits(['close']);\nconst { t } = useI18n();\nconst store = useStore();\n\nconst dialogRef = ref(null);\nconst connectForm = ref(null);\n\nconst i18nKey = 'CAPTAIN.INBOXES.CREATE';\n\nconst handleSubmit = async payload => {\n try {\n await store.dispatch('captainInboxes/create', payload);\n useAlert(t(`${i18nKey}.SUCCESS_MESSAGE`));\n dialogRef.value.close();\n } catch (error) {\n const errorMessage = error?.message || t(`${i18nKey}.ERROR_MESSAGE`);\n useAlert(errorMessage);\n }\n};\n\nconst handleClose = () => {\n emit('close');\n};\n\nconst handleCancel = () => {\n dialogRef.value.close();\n};\n\ndefineExpose({ dialogRef });\n</script>\n\n<template>\n <Dialog\n ref=\"dialogRef\"\n type=\"create\"\n :title=\"$t(`${i18nKey}.TITLE`)\"\n :description=\"$t('CAPTAIN.INBOXES.FORM_DESCRIPTION')\"\n :show-cancel-button=\"false\"\n :show-confirm-button=\"false\"\n @close=\"handleClose\"\n >\n <ConnectInboxForm\n ref=\"connectForm\"\n :assistant-id=\"assistantId\"\n @submit=\"handleSubmit\"\n @cancel=\"handleCancel\"\n />\n <template #footer />\n </Dialog>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useToggle } from '@vueuse/core';\nimport { useI18n } from 'vue-i18n';\n\nimport CardLayout from 'dashboard/components-next/CardLayout.vue';\nimport DropdownMenu from 'dashboard/components-next/dropdown-menu/DropdownMenu.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport Policy from 'dashboard/components/policy.vue';\nimport { INBOX_TYPES, getInboxIconByType } from 'dashboard/helper/inbox';\n\nconst props = defineProps({\n id: {\n type: Number,\n required: true,\n },\n inbox: {\n type: Object,\n required: true,\n },\n});\n\nconst emit = defineEmits(['action']);\n\nconst { t } = useI18n();\n\nconst [showActionsDropdown, toggleDropdown] = useToggle();\n\nconst inboxName = computed(() => {\n const inbox = props.inbox;\n if (!inbox?.name) {\n return '';\n }\n\n const isTwilioChannel = inbox.channel_type === INBOX_TYPES.TWILIO;\n const isWhatsAppChannel = inbox.channel_type === INBOX_TYPES.WHATSAPP;\n const isEmailChannel = inbox.channel_type === INBOX_TYPES.EMAIL;\n\n if (isTwilioChannel || isWhatsAppChannel) {\n const identifier = inbox.messaging_service_sid || inbox.phone_number;\n return identifier ? `${inbox.name} (${identifier})` : inbox.name;\n }\n\n if (isEmailChannel && inbox.email) {\n return `${inbox.name} (${inbox.email})`;\n }\n\n return inbox.name;\n});\n\nconst menuItems = computed(() => [\n {\n label: t('CAPTAIN.INBOXES.OPTIONS.DISCONNECT'),\n value: 'delete',\n action: 'delete',\n icon: 'i-lucide-trash',\n },\n]);\n\nconst icon = computed(() =>\n getInboxIconByType(props.inbox.channel_type, '', 'outline')\n);\n\nconst handleAction = ({ action, value }) => {\n toggleDropdown(false);\n emit('action', { action, value, id: props.id });\n};\n</script>\n\n<template>\n <CardLayout>\n <div class=\"flex justify-between w-full gap-1\">\n <span\n class=\"text-base text-n-slate-12 line-clamp-1 flex items-center gap-2\"\n >\n <span :class=\"icon\" />\n {{ inboxName }}\n </span>\n <div class=\"flex items-center gap-2\">\n <Policy\n v-on-clickaway=\"() => toggleDropdown(false)\"\n :permissions=\"['administrator']\"\n class=\"relative flex items-center group\"\n >\n <Button\n icon=\"i-lucide-ellipsis-vertical\"\n color=\"slate\"\n size=\"xs\"\n class=\"rounded-md group-hover:bg-n-alpha-2\"\n @click=\"toggleDropdown()\"\n />\n <DropdownMenu\n v-if=\"showActionsDropdown\"\n :menu-items=\"menuItems\"\n class=\"mt-1 ltr:right-0 rtl:left-0 top-full\"\n @action=\"handleAction($event)\"\n />\n </Policy>\n </div>\n </div>\n </CardLayout>\n</template>\n","<script setup>\nimport EmptyStateLayout from 'dashboard/components-next/EmptyStateLayout.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport InboxCard from 'dashboard/components-next/captain/assistant/InboxCard.vue';\nimport { inboxes } from 'dashboard/components-next/captain/pageComponents/emptyStates/captainEmptyStateContent.js';\n\nconst emit = defineEmits(['click']);\n\nconst onClick = () => {\n emit('click');\n};\n</script>\n\n<template>\n <EmptyStateLayout\n :title=\"$t('CAPTAIN.INBOXES.EMPTY_STATE.TITLE')\"\n :subtitle=\"$t('CAPTAIN.INBOXES.EMPTY_STATE.SUBTITLE')\"\n :action-perms=\"['administrator']\"\n >\n <template #empty-state-item>\n <div class=\"grid grid-cols-1 gap-4 p-px overflow-hidden\">\n <InboxCard\n v-for=\"(inbox, index) in inboxes.slice(0, 5)\"\n :id=\"inbox.id\"\n :key=\"`inbox-${index}`\"\n :inbox=\"inbox\"\n />\n </div>\n </template>\n <template #actions>\n <Button\n :label=\"$t('CAPTAIN.INBOXES.ADD_NEW')\"\n icon=\"i-lucide-plus\"\n @click=\"onClick\"\n />\n </template>\n </EmptyStateLayout>\n</template>\n","<script setup>\nimport { computed, onBeforeMount, onMounted, ref, nextTick } from 'vue';\nimport {\n useMapGetter,\n useStore,\n useStoreGetters,\n} from 'dashboard/composables/store';\nimport { useRoute } from 'vue-router';\nimport { FEATURE_FLAGS } from 'dashboard/featureFlags';\n\nimport BackButton from 'dashboard/components/widgets/BackButton.vue';\nimport DeleteDialog from 'dashboard/components-next/captain/pageComponents/DeleteDialog.vue';\nimport PageLayout from 'dashboard/components-next/captain/PageLayout.vue';\nimport ConnectInboxDialog from 'dashboard/components-next/captain/pageComponents/inbox/ConnectInboxDialog.vue';\nimport InboxCard from 'dashboard/components-next/captain/assistant/InboxCard.vue';\nimport InboxPageEmptyState from 'dashboard/components-next/captain/pageComponents/emptyStates/InboxPageEmptyState.vue';\n\nconst store = useStore();\nconst dialogType = ref('');\nconst route = useRoute();\nconst assistantUiFlags = useMapGetter('captainAssistants/getUIFlags');\nconst uiFlags = useMapGetter('captainInboxes/getUIFlags');\nconst isFetchingAssistant = computed(() => assistantUiFlags.value.fetchingItem);\nconst isFetching = computed(() => uiFlags.value.fetchingList);\n\nconst captainInboxes = useMapGetter('captainInboxes/getRecords');\n\nconst selectedInbox = ref(null);\nconst disconnectInboxDialog = ref(null);\n\nconst handleDelete = () => {\n disconnectInboxDialog.value.dialogRef.open();\n};\n\nconst connectInboxDialog = ref(null);\n\nconst handleCreate = () => {\n dialogType.value = 'create';\n nextTick(() => connectInboxDialog.value.dialogRef.open());\n};\nconst handleAction = ({ action, id }) => {\n selectedInbox.value = captainInboxes.value.find(inbox => id === inbox.id);\n nextTick(() => {\n if (action === 'delete') {\n handleDelete();\n }\n });\n};\n\nconst handleCreateClose = () => {\n dialogType.value = '';\n selectedInbox.value = null;\n};\n\nconst getters = useStoreGetters();\nconst assistantId = Number(route.params.assistantId);\nconst assistant = computed(() =>\n getters['captainAssistants/getRecord'].value(assistantId)\n);\nonBeforeMount(() => store.dispatch('captainAssistants/show', assistantId));\n\nonMounted(() =>\n store.dispatch('captainInboxes/get', {\n assistantId: assistantId,\n })\n);\n</script>\n\n<template>\n <PageLayout\n :button-label=\"$t('CAPTAIN.INBOXES.ADD_NEW')\"\n :button-policy=\"['administrator']\"\n :is-fetching=\"isFetchingAssistant || isFetching\"\n :is-empty=\"!captainInboxes.length\"\n :show-pagination-footer=\"false\"\n :feature-flag=\"FEATURE_FLAGS.CAPTAIN\"\n @click=\"handleCreate\"\n >\n <template v-if=\"!isFetchingAssistant\" #headerTitle>\n <div class=\"flex flex-row items-center gap-4\">\n <BackButton compact />\n <span\n class=\"flex items-center gap-1 text-lg font-medium text-n-slate-12\"\n >\n {{ assistant.name }}\n <span class=\"i-lucide-chevron-right text-xl text-n-slate-10\" />\n {{ $t('CAPTAIN.INBOXES.HEADER') }}\n </span>\n </div>\n </template>\n\n <template #emptyState>\n <InboxPageEmptyState @click=\"handleCreate\" />\n </template>\n\n <template #body>\n <div class=\"flex flex-col gap-4\">\n <InboxCard\n v-for=\"captainInbox in captainInboxes\"\n :id=\"captainInbox.id\"\n :key=\"captainInbox.id\"\n :inbox=\"captainInbox\"\n @action=\"handleAction\"\n />\n </div>\n </template>\n\n <DeleteDialog\n v-if=\"selectedInbox\"\n ref=\"disconnectInboxDialog\"\n :entity=\"selectedInbox\"\n :delete-payload=\"{\n assistantId: assistantId,\n inboxId: selectedInbox.id,\n }\"\n type=\"Inboxes\"\n />\n\n <ConnectInboxDialog\n v-if=\"dialogType\"\n ref=\"connectInboxDialog\"\n :assistant-id=\"assistantId\"\n :type=\"dialogType\"\n @close=\"handleCreateClose\"\n />\n </PageLayout>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useToggle } from '@vueuse/core';\nimport { useI18n } from 'vue-i18n';\nimport { dynamicTime } from 'shared/helpers/timeHelper';\nimport { usePolicy } from 'dashboard/composables/usePolicy';\n\nimport CardLayout from 'dashboard/components-next/CardLayout.vue';\nimport DropdownMenu from 'dashboard/components-next/dropdown-menu/DropdownMenu.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\n\nconst props = defineProps({\n id: {\n type: Number,\n required: true,\n },\n name: {\n type: String,\n default: '',\n },\n assistant: {\n type: Object,\n default: () => ({}),\n },\n externalLink: {\n type: String,\n required: true,\n },\n createdAt: {\n type: Number,\n required: true,\n },\n});\n\nconst emit = defineEmits(['action']);\nconst { checkPermissions } = usePolicy();\n\nconst { t } = useI18n();\n\nconst [showActionsDropdown, toggleDropdown] = useToggle();\n\nconst menuItems = computed(() => {\n const allOptions = [\n {\n label: t('CAPTAIN.DOCUMENTS.OPTIONS.VIEW_RELATED_RESPONSES'),\n value: 'viewRelatedQuestions',\n action: 'viewRelatedQuestions',\n icon: 'i-ph-tree-view-duotone',\n },\n ];\n\n if (checkPermissions(['administrator'])) {\n allOptions.push({\n label: t('CAPTAIN.DOCUMENTS.OPTIONS.DELETE_DOCUMENT'),\n value: 'delete',\n action: 'delete',\n icon: 'i-lucide-trash',\n });\n }\n\n return allOptions;\n});\n\nconst createdAt = computed(() => dynamicTime(props.createdAt));\n\nconst handleAction = ({ action, value }) => {\n toggleDropdown(false);\n emit('action', { action, value, id: props.id });\n};\n</script>\n\n<template>\n <CardLayout>\n <div class=\"flex justify-between w-full gap-1\">\n <span class=\"text-base text-n-slate-12 line-clamp-1\">\n {{ name }}\n </span>\n <div class=\"flex items-center gap-2\">\n <div\n v-on-clickaway=\"() => toggleDropdown(false)\"\n class=\"relative flex items-center group\"\n >\n <Button\n icon=\"i-lucide-ellipsis-vertical\"\n color=\"slate\"\n size=\"xs\"\n class=\"rounded-md group-hover:bg-n-alpha-2\"\n @click=\"toggleDropdown()\"\n />\n <DropdownMenu\n v-if=\"showActionsDropdown\"\n :menu-items=\"menuItems\"\n class=\"mt-1 ltr:right-0 rtl:left-0 xl:ltr:right-0 xl:rtl:left-0 top-full\"\n @action=\"handleAction($event)\"\n />\n </div>\n </div>\n </div>\n <div class=\"flex items-center justify-between w-full gap-4\">\n <span\n class=\"text-sm shrink-0 truncate text-n-slate-11 flex items-center gap-1\"\n >\n <i class=\"i-woot-captain\" />\n {{ assistant?.name || '' }}\n </span>\n <span\n class=\"text-n-slate-11 text-sm truncate flex justify-start flex-1 items-center gap-1\"\n >\n <i class=\"i-ph-link-simple shrink-0\" />\n <span class=\"truncate\">{{ externalLink }}</span>\n </span>\n <div class=\"shrink-0 text-sm text-n-slate-11 line-clamp-1\">\n {{ createdAt }}\n </div>\n </div>\n </CardLayout>\n</template>\n","<script setup>\ndefineProps({\n indeterminate: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits(['change']);\n\nconst modelValue = defineModel('modelValue', {\n type: Boolean,\n default: false,\n});\n\nconst handleChange = event => {\n modelValue.value = event.target.checked;\n emit('change', event);\n};\n</script>\n\n<template>\n <div class=\"relative w-4 h-4\">\n <input\n :checked=\"modelValue\"\n :indeterminate=\"indeterminate\"\n type=\"checkbox\"\n :disabled=\"disabled\"\n class=\"peer absolute inset-0 z-10 h-4 w-4 disabled:opacity-50 appearance-none rounded border border-n-slate-6 ring-transparent transition-all duration-200 checked:border-n-brand checked:bg-n-brand dark:border-gray-600 dark:checked:border-n-brand indeterminate:border-n-brand indeterminate:bg-n-brand hover:enabled:bg-n-blue-border cursor-pointer\"\n @change=\"handleChange\"\n />\n <!-- Checkmark SVG -->\n <svg\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n class=\"pointer-events-none absolute w-3.5 h-3.5 z-20 stroke-white opacity-0 peer-checked:opacity-100 transition-opacity duration-200 left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2\"\n >\n <path\n d=\"M3 8L6 11L11 3.5\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n <!-- Minus/Indeterminate SVG -->\n <svg\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n class=\"pointer-events-none absolute w-3.5 h-3.5 z-20 stroke-white opacity-0 peer-indeterminate:opacity-100 transition-opacity duration-200 left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2\"\n >\n <path\n d=\"M3 7L11 7\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useToggle } from '@vueuse/core';\nimport { useI18n } from 'vue-i18n';\nimport { dynamicTime } from 'shared/helpers/timeHelper';\n\nimport CardLayout from 'dashboard/components-next/CardLayout.vue';\nimport DropdownMenu from 'dashboard/components-next/dropdown-menu/DropdownMenu.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport Checkbox from 'dashboard/components-next/checkbox/Checkbox.vue';\nimport Policy from 'dashboard/components/policy.vue';\n\nconst props = defineProps({\n id: {\n type: Number,\n required: true,\n },\n question: {\n type: String,\n required: true,\n },\n answer: {\n type: String,\n required: true,\n },\n compact: {\n type: Boolean,\n default: false,\n },\n status: {\n type: String,\n default: 'approved',\n },\n documentable: {\n type: Object,\n default: null,\n },\n assistant: {\n type: Object,\n default: () => ({}),\n },\n updatedAt: {\n type: Number,\n required: true,\n },\n createdAt: {\n type: Number,\n required: true,\n },\n isSelected: {\n type: Boolean,\n default: false,\n },\n selectable: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits(['action', 'navigate', 'select', 'hover']);\n\nconst { t } = useI18n();\n\nconst [showActionsDropdown, toggleDropdown] = useToggle();\n\nconst modelValue = computed({\n get: () => props.isSelected,\n set: () => emit('select', props.id),\n});\n\nconst statusAction = computed(() => {\n if (props.status === 'pending') {\n return [\n {\n label: t('CAPTAIN.RESPONSES.OPTIONS.APPROVE'),\n value: 'approve',\n action: 'approve',\n icon: 'i-lucide-circle-check-big',\n },\n ];\n }\n return [];\n});\n\nconst menuItems = computed(() => [\n ...statusAction.value,\n {\n label: t('CAPTAIN.RESPONSES.OPTIONS.EDIT_RESPONSE'),\n value: 'edit',\n action: 'edit',\n icon: 'i-lucide-pencil-line',\n },\n {\n label: t('CAPTAIN.RESPONSES.OPTIONS.DELETE_RESPONSE'),\n value: 'delete',\n action: 'delete',\n icon: 'i-lucide-trash',\n },\n]);\n\nconst timestamp = computed(() =>\n dynamicTime(props.updatedAt || props.createdAt)\n);\n\nconst handleAssistantAction = ({ action, value }) => {\n toggleDropdown(false);\n emit('action', { action, value, id: props.id });\n};\n\nconst handleDocumentableClick = () => {\n emit('navigate', {\n id: props.documentable.id,\n type: props.documentable.type,\n });\n};\n</script>\n\n<template>\n <CardLayout\n selectable\n class=\"relative\"\n :class=\"{ 'rounded-md': compact }\"\n @mouseenter=\"emit('hover', true)\"\n @mouseleave=\"emit('hover', false)\"\n >\n <div v-show=\"selectable\" class=\"absolute top-7 ltr:left-4 rtl:right-4\">\n <Checkbox v-model=\"modelValue\" />\n </div>\n <div class=\"flex relative justify-between w-full gap-1\">\n <span class=\"text-base text-n-slate-12 line-clamp-1\">\n {{ question }}\n </span>\n <div v-if=\"!compact\" class=\"flex items-center gap-2\">\n <Policy\n v-on-clickaway=\"() => toggleDropdown(false)\"\n :permissions=\"['administrator']\"\n class=\"relative flex items-center group\"\n >\n <Button\n icon=\"i-lucide-ellipsis-vertical\"\n color=\"slate\"\n size=\"xs\"\n class=\"rounded-md group-hover:bg-n-alpha-2\"\n @click=\"toggleDropdown()\"\n />\n <DropdownMenu\n v-if=\"showActionsDropdown\"\n :menu-items=\"menuItems\"\n class=\"mt-1 ltr:right-0 rtl:right-0 top-full\"\n @action=\"handleAssistantAction($event)\"\n />\n </Policy>\n </div>\n </div>\n <span class=\"text-n-slate-11 text-sm line-clamp-5\">\n {{ answer }}\n </span>\n <div v-if=\"!compact\" class=\"items-center justify-between hidden lg:flex\">\n <div class=\"inline-flex items-center\">\n <span\n class=\"text-sm shrink-0 truncate text-n-slate-11 inline-flex items-center gap-1\"\n >\n <i class=\"i-woot-captain\" />\n {{ assistant?.name || '' }}\n </span>\n <div\n v-if=\"documentable\"\n class=\"shrink-0 text-sm text-n-slate-11 inline-flex line-clamp-1 gap-1 ml-3\"\n >\n <span\n v-if=\"documentable.type === 'Captain::Document'\"\n class=\"inline-flex items-center gap-1 truncate over\"\n >\n <i class=\"i-ph-files-light text-base\" />\n <span class=\"max-w-96 truncate\" :title=\"documentable.name\">\n {{ documentable.name }}\n </span>\n </span>\n <span\n v-if=\"documentable.type === 'User'\"\n class=\"inline-flex items-center gap-1\"\n >\n <i class=\"i-ph-user-circle-plus text-base\" />\n <span\n class=\"max-w-96 truncate\"\n :title=\"documentable.available_name\"\n >\n {{ documentable.available_name }}\n </span>\n </span>\n <span\n v-else-if=\"documentable.type === 'Conversation'\"\n class=\"inline-flex items-center gap-1 group cursor-pointer\"\n role=\"button\"\n @click=\"handleDocumentableClick\"\n >\n <i class=\"i-ph-chat-circle-dots text-base\" />\n <span class=\"group-hover:underline\">\n {{\n t(`CAPTAIN.RESPONSES.DOCUMENTABLE.CONVERSATION`, {\n id: documentable.display_id,\n })\n }}\n </span>\n </span>\n <span v-else />\n </div>\n <div\n v-if=\"status !== 'approved'\"\n class=\"shrink-0 text-sm text-n-slate-11 line-clamp-1 inline-flex items-center gap-1 ml-3\"\n >\n <i\n class=\"i-ph-stack text-base\"\n :title=\"t('CAPTAIN.RESPONSES.STATUS.TITLE')\"\n />\n {{ t(`CAPTAIN.RESPONSES.STATUS.${status.toUpperCase()}`) }}\n </div>\n </div>\n <div\n class=\"shrink-0 text-sm text-n-slate-11 line-clamp-1 inline-flex items-center gap-1 ml-3\"\n >\n <i class=\"i-ph-calendar-dot\" />\n {{ timestamp }}\n </div>\n </div>\n </CardLayout>\n</template>\n","<script setup>\nimport { ref, computed, onMounted } from 'vue';\nimport { useStore, useMapGetter } from 'dashboard/composables/store';\nimport { useI18n } from 'vue-i18n';\nimport Spinner from 'dashboard/components-next/spinner/Spinner.vue';\nimport Dialog from 'dashboard/components-next/dialog/Dialog.vue';\nimport ResponseCard from '../../assistant/ResponseCard.vue';\nconst props = defineProps({\n captainDocument: {\n type: Object,\n required: true,\n },\n});\nconst emit = defineEmits(['close']);\nconst { t } = useI18n();\nconst store = useStore();\nconst dialogRef = ref(null);\n\nconst uiFlags = useMapGetter('captainResponses/getUIFlags');\nconst responses = useMapGetter('captainResponses/getRecords');\nconst isFetching = computed(() => uiFlags.value.fetchingList);\n\nconst handleClose = () => {\n emit('close');\n};\n\nonMounted(() => {\n store.dispatch('captainResponses/get', {\n assistantId: props.captainDocument.assistant.id,\n documentId: props.captainDocument.id,\n });\n});\ndefineExpose({ dialogRef });\n</script>\n\n<template>\n <Dialog\n ref=\"dialogRef\"\n type=\"edit\"\n :title=\"t('CAPTAIN.DOCUMENTS.RELATED_RESPONSES.TITLE')\"\n :description=\"t('CAPTAIN.DOCUMENTS.RELATED_RESPONSES.DESCRIPTION')\"\n :show-cancel-button=\"false\"\n :show-confirm-button=\"false\"\n overflow-y-auto\n width=\"3xl\"\n @close=\"handleClose\"\n >\n <div\n v-if=\"isFetching\"\n class=\"flex items-center justify-center py-10 text-n-slate-11\"\n >\n <Spinner />\n </div>\n <div v-else class=\"flex flex-col gap-3 min-h-48\">\n <ResponseCard\n v-for=\"response in responses\"\n :id=\"response.id\"\n :key=\"response.id\"\n :question=\"response.question\"\n :status=\"response.status\"\n :answer=\"response.answer\"\n :assistant=\"response.assistant\"\n :created-at=\"response.created_at\"\n :updated-at=\"response.updated_at\"\n compact\n />\n </div>\n </Dialog>\n</template>\n","<script setup>\nimport { reactive, computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useVuelidate } from '@vuelidate/core';\nimport { required, minLength, url } from '@vuelidate/validators';\nimport { useMapGetter } from 'dashboard/composables/store';\n\nimport Input from 'dashboard/components-next/input/Input.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport ComboBox from 'dashboard/components-next/combobox/ComboBox.vue';\n\nconst emit = defineEmits(['submit', 'cancel']);\n\nconst { t } = useI18n();\n\nconst formState = {\n uiFlags: useMapGetter('captainDocuments/getUIFlags'),\n assistants: useMapGetter('captainAssistants/getRecords'),\n};\n\nconst initialState = {\n name: '',\n assistantId: null,\n};\n\nconst state = reactive({ ...initialState });\n\nconst validationRules = {\n url: { required, url, minLength: minLength(1) },\n assistantId: { required },\n};\n\nconst assistantList = computed(() =>\n formState.assistants.value.map(assistant => ({\n value: assistant.id,\n label: assistant.name,\n }))\n);\n\nconst v$ = useVuelidate(validationRules, state);\n\nconst isLoading = computed(() => formState.uiFlags.value.creatingItem);\n\nconst getErrorMessage = (field, errorKey) => {\n return v$.value[field].$error\n ? t(`CAPTAIN.DOCUMENTS.FORM.${errorKey}.ERROR`)\n : '';\n};\n\nconst formErrors = computed(() => ({\n url: getErrorMessage('url', 'URL'),\n assistantId: getErrorMessage('assistantId', 'ASSISTANT'),\n}));\n\nconst handleCancel = () => emit('cancel');\n\nconst prepareDocumentDetails = () => ({\n external_link: state.url,\n assistant_id: state.assistantId,\n});\n\nconst handleSubmit = async () => {\n const isFormValid = await v$.value.$validate();\n if (!isFormValid) {\n return;\n }\n\n emit('submit', prepareDocumentDetails());\n};\n</script>\n\n<template>\n <form class=\"flex flex-col gap-4\" @submit.prevent=\"handleSubmit\">\n <Input\n v-model=\"state.url\"\n :label=\"t('CAPTAIN.DOCUMENTS.FORM.URL.LABEL')\"\n :placeholder=\"t('CAPTAIN.DOCUMENTS.FORM.URL.PLACEHOLDER')\"\n :message=\"formErrors.url\"\n :message-type=\"formErrors.url ? 'error' : 'info'\"\n />\n <div class=\"flex flex-col gap-1\">\n <label for=\"assistant\" class=\"mb-0.5 text-sm font-medium text-n-slate-12\">\n {{ t('CAPTAIN.DOCUMENTS.FORM.ASSISTANT.LABEL') }}\n </label>\n <ComboBox\n id=\"assistant\"\n v-model=\"state.assistantId\"\n :options=\"assistantList\"\n :has-error=\"!!formErrors.assistantId\"\n :placeholder=\"t('CAPTAIN.DOCUMENTS.FORM.ASSISTANT.PLACEHOLDER')\"\n class=\"[&>div>button]:bg-n-alpha-black2 [&>div>button:not(.focused)]:dark:outline-n-weak [&>div>button:not(.focused)]:hover:!outline-n-slate-6\"\n :message=\"formErrors.assistantId\"\n />\n </div>\n\n <div class=\"flex items-center justify-between w-full gap-3\">\n <Button\n type=\"button\"\n variant=\"faded\"\n color=\"slate\"\n :label=\"t('CAPTAIN.FORM.CANCEL')\"\n class=\"w-full bg-n-alpha-2 n-blue-text hover:bg-n-alpha-3\"\n @click=\"handleCancel\"\n />\n <Button\n type=\"submit\"\n :label=\"t('CAPTAIN.FORM.CREATE')\"\n class=\"w-full\"\n :is-loading=\"isLoading\"\n :disabled=\"isLoading\"\n />\n </div>\n </form>\n</template>\n","<script setup>\nimport { ref } from 'vue';\nimport { useStore } from 'dashboard/composables/store';\nimport { useAlert } from 'dashboard/composables';\nimport { useI18n } from 'vue-i18n';\n\nimport Dialog from 'dashboard/components-next/dialog/Dialog.vue';\nimport DocumentForm from './DocumentForm.vue';\n\nconst emit = defineEmits(['close']);\nconst { t } = useI18n();\nconst store = useStore();\n\nconst dialogRef = ref(null);\nconst documentForm = ref(null);\n\nconst i18nKey = 'CAPTAIN.DOCUMENTS.CREATE';\n\nconst handleSubmit = async newDocument => {\n try {\n await store.dispatch('captainDocuments/create', newDocument);\n useAlert(t(`${i18nKey}.SUCCESS_MESSAGE`));\n dialogRef.value.close();\n } catch (error) {\n const errorMessage =\n error?.response?.message || t(`${i18nKey}.ERROR_MESSAGE`);\n useAlert(errorMessage);\n }\n};\n\nconst handleClose = () => {\n emit('close');\n};\n\nconst handleCancel = () => {\n dialogRef.value.close();\n};\n\ndefineExpose({ dialogRef });\n</script>\n\n<template>\n <Dialog\n ref=\"dialogRef\"\n :title=\"$t(`${i18nKey}.TITLE`)\"\n :description=\"$t('CAPTAIN.DOCUMENTS.FORM_DESCRIPTION')\"\n :show-cancel-button=\"false\"\n :show-confirm-button=\"false\"\n @close=\"handleClose\"\n >\n <DocumentForm\n ref=\"documentForm\"\n @submit=\"handleSubmit\"\n @cancel=\"handleCancel\"\n />\n <template #footer />\n </Dialog>\n</template>\n","<script setup>\nimport { computed, ref } from 'vue';\nimport { useMapGetter } from 'dashboard/composables/store';\nimport { useI18n } from 'vue-i18n';\nimport { OnClickOutside } from '@vueuse/components';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport DropdownMenu from 'dashboard/components-next/dropdown-menu/DropdownMenu.vue';\n\nconst props = defineProps({\n assistantId: {\n type: [String, Number],\n required: true,\n },\n});\n\nconst emit = defineEmits(['update']);\nconst { t } = useI18n();\nconst isFilterOpen = ref(false);\n\nconst assistants = useMapGetter('captainAssistants/getRecords');\nconst assistantOptions = computed(() => [\n {\n label: t(`CAPTAIN.RESPONSES.FILTER.ALL_ASSISTANTS`),\n value: 'all',\n action: 'filter',\n },\n ...assistants.value.map(assistant => ({\n value: assistant.id,\n label: assistant.name,\n action: 'filter',\n })),\n]);\n\nconst selectedAssistantLabel = computed(() => {\n const assistant = assistantOptions.value.find(\n option => option.value === props.assistantId\n );\n return t('CAPTAIN.RESPONSES.FILTER.ASSISTANT', {\n selected: assistant ? assistant.label : '',\n });\n});\n\nconst handleAssistantFilterChange = ({ value }) => {\n isFilterOpen.value = false;\n emit('update', value);\n};\n</script>\n\n<template>\n <OnClickOutside @trigger=\"isFilterOpen = false\">\n <Button\n :label=\"selectedAssistantLabel\"\n icon=\"i-lucide-chevron-down\"\n size=\"sm\"\n color=\"slate\"\n trailing-icon\n class=\"max-w-48\"\n @click=\"isFilterOpen = !isFilterOpen\"\n />\n\n <DropdownMenu\n v-if=\"isFilterOpen\"\n :menu-items=\"assistantOptions\"\n class=\"mt-2\"\n @action=\"handleAssistantFilterChange\"\n />\n </OnClickOutside>\n</template>\n","<script setup>\nimport EmptyStateLayout from 'dashboard/components-next/EmptyStateLayout.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport DocumentCard from 'dashboard/components-next/captain/assistant/DocumentCard.vue';\nimport FeatureSpotlight from 'dashboard/components-next/feature-spotlight/FeatureSpotlight.vue';\nimport { documentsList } from 'dashboard/components-next/captain/pageComponents/emptyStates/captainEmptyStateContent.js';\n\nconst emit = defineEmits(['click']);\n\nconst onClick = () => {\n emit('click');\n};\n</script>\n\n<template>\n <FeatureSpotlight\n :title=\"$t('CAPTAIN.DOCUMENTS.EMPTY_STATE.FEATURE_SPOTLIGHT.TITLE')\"\n :note=\"$t('CAPTAIN.DOCUMENTS.EMPTY_STATE.FEATURE_SPOTLIGHT.NOTE')\"\n fallback-thumbnail=\"/assets/images/dashboard/captain/document-light.svg\"\n fallback-thumbnail-dark=\"/assets/images/dashboard/captain/document-dark.svg\"\n learn-more-url=\"https://chwt.app/captain-document\"\n class=\"mb-8\"\n />\n <EmptyStateLayout\n :title=\"$t('CAPTAIN.DOCUMENTS.EMPTY_STATE.TITLE')\"\n :subtitle=\"$t('CAPTAIN.DOCUMENTS.EMPTY_STATE.SUBTITLE')\"\n :action-perms=\"['administrator']\"\n >\n <template #empty-state-item>\n <div class=\"grid grid-cols-1 gap-4 p-px overflow-hidden\">\n <DocumentCard\n v-for=\"(document, index) in documentsList.slice(0, 5)\"\n :id=\"document.id\"\n :key=\"`document-${index}`\"\n :name=\"document.name\"\n :assistant=\"document.assistant\"\n :external-link=\"document.external_link\"\n :created-at=\"document.created_at\"\n />\n </div>\n </template>\n <template #actions>\n <Button\n :label=\"$t('CAPTAIN.DOCUMENTS.ADD_NEW')\"\n icon=\"i-lucide-plus\"\n @click=\"onClick\"\n />\n </template>\n </EmptyStateLayout>\n</template>\n","<script setup>\nimport { onMounted, computed } from 'vue';\nimport { useAccount } from 'dashboard/composables/useAccount';\nimport { useCaptain } from 'dashboard/composables/useCaptain';\nimport { useRouter } from 'vue-router';\n\nimport Banner from 'dashboard/components-next/banner/Banner.vue';\n\nconst router = useRouter();\nconst { accountId } = useAccount();\n\nconst { documentLimits, fetchLimits } = useCaptain();\n\nconst openBilling = () => {\n router.push({\n name: 'billing_settings_index',\n params: { accountId: accountId.value },\n });\n};\n\nconst showBanner = computed(() => {\n if (!documentLimits.value) return false;\n\n const { currentAvailable } = documentLimits.value;\n return currentAvailable === 0;\n});\n\nonMounted(fetchLimits);\n</script>\n\n<template>\n <Banner\n v-show=\"showBanner\"\n color=\"amber\"\n :action-label=\"$t('CAPTAIN.PAYWALL.UPGRADE_NOW')\"\n @action=\"openBilling\"\n >\n {{ $t('CAPTAIN.BANNER.DOCUMENTS') }}\n </Banner>\n</template>\n","<script setup>\nimport { computed, onMounted, ref, nextTick } from 'vue';\nimport { useMapGetter, useStore } from 'dashboard/composables/store';\nimport { FEATURE_FLAGS } from 'dashboard/featureFlags';\n\nimport DeleteDialog from 'dashboard/components-next/captain/pageComponents/DeleteDialog.vue';\nimport DocumentCard from 'dashboard/components-next/captain/assistant/DocumentCard.vue';\nimport PageLayout from 'dashboard/components-next/captain/PageLayout.vue';\nimport CaptainPaywall from 'dashboard/components-next/captain/pageComponents/Paywall.vue';\nimport RelatedResponses from 'dashboard/components-next/captain/pageComponents/document/RelatedResponses.vue';\nimport CreateDocumentDialog from 'dashboard/components-next/captain/pageComponents/document/CreateDocumentDialog.vue';\nimport AssistantSelector from 'dashboard/components-next/captain/pageComponents/AssistantSelector.vue';\nimport DocumentPageEmptyState from 'dashboard/components-next/captain/pageComponents/emptyStates/DocumentPageEmptyState.vue';\nimport FeatureSpotlightPopover from 'dashboard/components-next/feature-spotlight/FeatureSpotlightPopover.vue';\nimport LimitBanner from 'dashboard/components-next/captain/pageComponents/document/LimitBanner.vue';\n\nconst store = useStore();\n\nconst uiFlags = useMapGetter('captainDocuments/getUIFlags');\nconst documents = useMapGetter('captainDocuments/getRecords');\nconst assistants = useMapGetter('captainAssistants/getRecords');\nconst isFetching = computed(() => uiFlags.value.fetchingList);\nconst documentsMeta = useMapGetter('captainDocuments/getMeta');\nconst selectedAssistant = ref('all');\n\nconst selectedDocument = ref(null);\nconst deleteDocumentDialog = ref(null);\n\nconst handleDelete = () => {\n deleteDocumentDialog.value.dialogRef.open();\n};\n\nconst showRelatedResponses = ref(false);\nconst showCreateDialog = ref(false);\nconst createDocumentDialog = ref(null);\nconst relationQuestionDialog = ref(null);\n\nconst shouldShowAssistantSelector = computed(() => {\n if (assistants.value.length === 0) return false;\n\n return !isFetching.value;\n});\n\nconst handleShowRelatedDocument = () => {\n showRelatedResponses.value = true;\n nextTick(() => relationQuestionDialog.value.dialogRef.open());\n};\nconst handleCreateDocument = () => {\n showCreateDialog.value = true;\n nextTick(() => createDocumentDialog.value.dialogRef.open());\n};\n\nconst handleRelatedResponseClose = () => {\n showRelatedResponses.value = false;\n};\n\nconst handleCreateDialogClose = () => {\n showCreateDialog.value = false;\n};\n\nconst handleAction = ({ action, id }) => {\n selectedDocument.value = documents.value.find(\n captainDocument => id === captainDocument.id\n );\n\n nextTick(() => {\n if (action === 'delete') {\n handleDelete();\n } else if (action === 'viewRelatedQuestions') {\n handleShowRelatedDocument();\n }\n });\n};\n\nconst fetchDocuments = (page = 1) => {\n const filterParams = { page };\n\n if (selectedAssistant.value !== 'all') {\n filterParams.assistantId = selectedAssistant.value;\n }\n store.dispatch('captainDocuments/get', filterParams);\n};\n\nconst handleAssistantFilterChange = assistant => {\n selectedAssistant.value = assistant;\n fetchDocuments();\n};\n\nconst onPageChange = page => fetchDocuments(page);\n\nconst onDeleteSuccess = () => {\n if (documents.value?.length === 0 && documentsMeta.value?.page > 1) {\n onPageChange(documentsMeta.value.page - 1);\n }\n};\n\nonMounted(() => {\n if (!assistants.value.length) {\n store.dispatch('captainAssistants/get');\n }\n fetchDocuments();\n});\n</script>\n\n<template>\n <PageLayout\n :header-title=\"$t('CAPTAIN.DOCUMENTS.HEADER')\"\n :button-label=\"$t('CAPTAIN.DOCUMENTS.ADD_NEW')\"\n :button-policy=\"['administrator']\"\n :total-count=\"documentsMeta.totalCount\"\n :current-page=\"documentsMeta.page\"\n :show-pagination-footer=\"!isFetching && !!documents.length\"\n :is-fetching=\"isFetching\"\n :is-empty=\"!documents.length\"\n :feature-flag=\"FEATURE_FLAGS.CAPTAIN\"\n @update:current-page=\"onPageChange\"\n @click=\"handleCreateDocument\"\n >\n <template #knowMore>\n <FeatureSpotlightPopover\n :button-label=\"$t('CAPTAIN.HEADER_KNOW_MORE')\"\n :title=\"$t('CAPTAIN.DOCUMENTS.EMPTY_STATE.FEATURE_SPOTLIGHT.TITLE')\"\n :note=\"$t('CAPTAIN.DOCUMENTS.EMPTY_STATE.FEATURE_SPOTLIGHT.NOTE')\"\n fallback-thumbnail=\"/assets/images/dashboard/captain/document-popover-light.svg\"\n fallback-thumbnail-dark=\"/assets/images/dashboard/captain/document-popover-dark.svg\"\n learn-more-url=\"https://chwt.app/captain-document\"\n />\n </template>\n\n <template #emptyState>\n <DocumentPageEmptyState @click=\"handleCreateDocument\" />\n </template>\n\n <template #paywall>\n <CaptainPaywall />\n </template>\n\n <template #controls>\n <div v-if=\"shouldShowAssistantSelector\" class=\"mb-4 -mt-3 flex gap-3\">\n <AssistantSelector\n :assistant-id=\"selectedAssistant\"\n @update=\"handleAssistantFilterChange\"\n />\n </div>\n </template>\n\n <template #body>\n <LimitBanner class=\"mb-5\" />\n\n <div class=\"flex flex-col gap-4\">\n <DocumentCard\n v-for=\"doc in documents\"\n :id=\"doc.id\"\n :key=\"doc.id\"\n :name=\"doc.name || doc.external_link\"\n :external-link=\"doc.external_link\"\n :assistant=\"doc.assistant\"\n :created-at=\"doc.created_at\"\n @action=\"handleAction\"\n />\n </div>\n </template>\n\n <RelatedResponses\n v-if=\"showRelatedResponses\"\n ref=\"relationQuestionDialog\"\n :captain-document=\"selectedDocument\"\n @close=\"handleRelatedResponseClose\"\n />\n <CreateDocumentDialog\n v-if=\"showCreateDialog\"\n ref=\"createDocumentDialog\"\n @close=\"handleCreateDialogClose\"\n />\n <DeleteDialog\n v-if=\"selectedDocument\"\n ref=\"deleteDocumentDialog\"\n :entity=\"selectedDocument\"\n type=\"Documents\"\n @delete-success=\"onDeleteSuccess\"\n />\n </PageLayout>\n</template>\n","<script setup>\nimport { ref, computed } from 'vue';\nimport { useStore } from 'dashboard/composables/store';\nimport { useI18n } from 'vue-i18n';\nimport { useAlert } from 'dashboard/composables';\nimport Dialog from 'dashboard/components-next/dialog/Dialog.vue';\n\nconst props = defineProps({\n type: {\n type: String,\n required: true,\n },\n bulkIds: {\n type: Object,\n required: true,\n },\n});\n\nconst emit = defineEmits(['deleteSuccess']);\n\nconst { t } = useI18n();\nconst store = useStore();\nconst bulkDeleteDialogRef = ref(null);\nconst i18nKey = computed(() => props.type.toUpperCase());\n\nconst handleBulkDelete = async ids => {\n if (!ids) return;\n\n try {\n await store.dispatch(\n 'captainBulkActions/handleBulkDelete',\n Array.from(props.bulkIds)\n );\n\n emit('deleteSuccess');\n useAlert(t(`CAPTAIN.${i18nKey.value}.BULK_DELETE.SUCCESS_MESSAGE`));\n } catch (error) {\n useAlert(t(`CAPTAIN.${i18nKey.value}.BULK_DELETE.ERROR_MESSAGE`));\n }\n};\n\nconst handleDialogConfirm = async () => {\n await handleBulkDelete(Array.from(props.bulkIds));\n bulkDeleteDialogRef.value?.close();\n};\n\ndefineExpose({ dialogRef: bulkDeleteDialogRef });\n</script>\n\n<template>\n <Dialog\n ref=\"bulkDeleteDialogRef\"\n type=\"alert\"\n :title=\"t(`CAPTAIN.${i18nKey}.BULK_DELETE.TITLE`)\"\n :description=\"t(`CAPTAIN.${i18nKey}.BULK_DELETE.DESCRIPTION`)\"\n :confirm-button-label=\"t(`CAPTAIN.${i18nKey}.BULK_DELETE.CONFIRM`)\"\n @confirm=\"handleDialogConfirm\"\n />\n</template>\n","<script setup>\nimport { reactive, computed, watch } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useVuelidate } from '@vuelidate/core';\nimport { required, minLength } from '@vuelidate/validators';\nimport { useMapGetter } from 'dashboard/composables/store';\n\nimport Input from 'dashboard/components-next/input/Input.vue';\nimport Editor from 'dashboard/components-next/Editor/Editor.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport ComboBox from 'dashboard/components-next/combobox/ComboBox.vue';\n\nconst props = defineProps({\n mode: {\n type: String,\n required: true,\n validator: value => ['edit', 'create'].includes(value),\n },\n response: {\n type: Object,\n default: () => ({}),\n },\n});\nconst emit = defineEmits(['submit', 'cancel']);\nconst { t } = useI18n();\n\nconst formState = {\n uiFlags: useMapGetter('captainResponses/getUIFlags'),\n assistants: useMapGetter('captainAssistants/getRecords'),\n};\n\nconst initialState = {\n question: '',\n answer: '',\n assistantId: null,\n};\n\nconst state = reactive({ ...initialState });\n\nconst validationRules = {\n question: { required, minLength: minLength(1) },\n answer: { required, minLength: minLength(1) },\n assistantId: { required },\n};\n\nconst assistantList = computed(() =>\n formState.assistants.value.map(assistant => ({\n value: assistant.id,\n label: assistant.name,\n }))\n);\n\nconst v$ = useVuelidate(validationRules, state);\n\nconst isLoading = computed(() => formState.uiFlags.value.creatingItem);\n\nconst getErrorMessage = (field, errorKey) => {\n return v$.value[field].$error\n ? t(`CAPTAIN.RESPONSES.FORM.${errorKey}.ERROR`)\n : '';\n};\n\nconst formErrors = computed(() => ({\n question: getErrorMessage('question', 'QUESTION'),\n answer: getErrorMessage('answer', 'ANSWER'),\n assistantId: getErrorMessage('assistantId', 'ASSISTANT'),\n}));\n\nconst handleCancel = () => emit('cancel');\n\nconst prepareDocumentDetails = () => ({\n question: state.question,\n answer: state.answer,\n assistant_id: state.assistantId,\n});\n\nconst handleSubmit = async () => {\n const isFormValid = await v$.value.$validate();\n if (!isFormValid) {\n return;\n }\n\n emit('submit', prepareDocumentDetails());\n};\n\nconst updateStateFromResponse = response => {\n if (!response) return;\n\n const { question, answer, assistant } = response;\n\n Object.assign(state, {\n question,\n answer,\n assistantId: assistant.id,\n });\n};\n\nwatch(\n () => props.response,\n newResponse => {\n if (props.mode === 'edit' && newResponse) {\n updateStateFromResponse(newResponse);\n }\n },\n { immediate: true }\n);\n</script>\n\n<template>\n <form class=\"flex flex-col gap-4\" @submit.prevent=\"handleSubmit\">\n <Input\n v-model=\"state.question\"\n :label=\"t('CAPTAIN.RESPONSES.FORM.QUESTION.LABEL')\"\n :placeholder=\"t('CAPTAIN.RESPONSES.FORM.QUESTION.PLACEHOLDER')\"\n :message=\"formErrors.question\"\n :message-type=\"formErrors.question ? 'error' : 'info'\"\n />\n\n <Editor\n v-model=\"state.answer\"\n :label=\"t('CAPTAIN.RESPONSES.FORM.ANSWER.LABEL')\"\n :placeholder=\"t('CAPTAIN.RESPONSES.FORM.ANSWER.PLACEHOLDER')\"\n :message=\"formErrors.answer\"\n :max-length=\"10000\"\n :message-type=\"formErrors.answer ? 'error' : 'info'\"\n />\n\n <div class=\"flex flex-col gap-1\">\n <label for=\"assistant\" class=\"mb-0.5 text-sm font-medium text-n-slate-12\">\n {{ t('CAPTAIN.RESPONSES.FORM.ASSISTANT.LABEL') }}\n </label>\n <ComboBox\n id=\"assistant\"\n v-model=\"state.assistantId\"\n :options=\"assistantList\"\n :has-error=\"!!formErrors.assistantId\"\n :placeholder=\"t('CAPTAIN.RESPONSES.FORM.ASSISTANT.PLACEHOLDER')\"\n class=\"[&>div>button]:bg-n-alpha-black2 [&>div>button:not(.focused)]:dark:outline-n-weak [&>div>button:not(.focused)]:hover:!outline-n-slate-6\"\n :message=\"formErrors.assistantId\"\n />\n </div>\n\n <div class=\"flex items-center justify-between w-full gap-3\">\n <Button\n type=\"button\"\n variant=\"faded\"\n color=\"slate\"\n :label=\"t('CAPTAIN.FORM.CANCEL')\"\n class=\"w-full bg-n-alpha-2 n-blue-text hover:bg-n-alpha-3\"\n @click=\"handleCancel\"\n />\n <Button\n type=\"submit\"\n :label=\"t(`CAPTAIN.FORM.${mode.toUpperCase()}`)\"\n class=\"w-full\"\n :is-loading=\"isLoading\"\n :disabled=\"isLoading\"\n />\n </div>\n </form>\n</template>\n","<script setup>\nimport { ref, computed } from 'vue';\nimport { useStore } from 'dashboard/composables/store';\nimport { useAlert } from 'dashboard/composables';\nimport { useI18n } from 'vue-i18n';\n\nimport Dialog from 'dashboard/components-next/dialog/Dialog.vue';\nimport ResponseForm from './ResponseForm.vue';\n\nconst props = defineProps({\n selectedResponse: {\n type: Object,\n default: () => ({}),\n },\n type: {\n type: String,\n default: 'create',\n validator: value => ['create', 'edit'].includes(value),\n },\n});\nconst emit = defineEmits(['close']);\nconst { t } = useI18n();\nconst store = useStore();\n\nconst dialogRef = ref(null);\nconst responseForm = ref(null);\n\nconst updateResponse = responseDetails =>\n store.dispatch('captainResponses/update', {\n id: props.selectedResponse.id,\n ...responseDetails,\n });\n\nconst i18nKey = computed(() => `CAPTAIN.RESPONSES.${props.type.toUpperCase()}`);\n\nconst createResponse = responseDetails =>\n store.dispatch('captainResponses/create', responseDetails);\n\nconst handleSubmit = async updatedResponse => {\n try {\n if (props.type === 'edit') {\n await updateResponse(updatedResponse);\n } else {\n await createResponse(updatedResponse);\n }\n useAlert(t(`${i18nKey.value}.SUCCESS_MESSAGE`));\n dialogRef.value.close();\n } catch (error) {\n const errorMessage =\n error?.response?.message || t(`${i18nKey.value}.ERROR_MESSAGE`);\n useAlert(errorMessage);\n }\n};\n\nconst handleClose = () => {\n emit('close');\n};\n\nconst handleCancel = () => {\n dialogRef.value.close();\n};\n\ndefineExpose({ dialogRef });\n</script>\n\n<template>\n <Dialog\n ref=\"dialogRef\"\n :title=\"$t(`${i18nKey}.TITLE`)\"\n :description=\"$t('CAPTAIN.RESPONSES.FORM_DESCRIPTION')\"\n :show-cancel-button=\"false\"\n :show-confirm-button=\"false\"\n @close=\"handleClose\"\n >\n <ResponseForm\n ref=\"responseForm\"\n :mode=\"type\"\n :response=\"selectedResponse\"\n @submit=\"handleSubmit\"\n @cancel=\"handleCancel\"\n />\n <template #footer />\n </Dialog>\n</template>\n","<script setup>\nimport EmptyStateLayout from 'dashboard/components-next/EmptyStateLayout.vue';\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport ResponseCard from 'dashboard/components-next/captain/assistant/ResponseCard.vue';\nimport FeatureSpotlight from 'dashboard/components-next/feature-spotlight/FeatureSpotlight.vue';\nimport { responsesList } from 'dashboard/components-next/captain/pageComponents/emptyStates/captainEmptyStateContent.js';\n\nconst emit = defineEmits(['click']);\n\nconst onClick = () => {\n emit('click');\n};\n</script>\n\n<template>\n <FeatureSpotlight\n :title=\"$t('CAPTAIN.RESPONSES.EMPTY_STATE.FEATURE_SPOTLIGHT.TITLE')\"\n :note=\"$t('CAPTAIN.RESPONSES.EMPTY_STATE.FEATURE_SPOTLIGHT.NOTE')\"\n fallback-thumbnail=\"/assets/images/dashboard/captain/faqs-light.svg\"\n fallback-thumbnail-dark=\"/assets/images/dashboard/captain/faqs-dark.svg\"\n learn-more-url=\"https://chwt.app/captain-faq\"\n class=\"mb-8\"\n />\n <EmptyStateLayout\n :title=\"$t('CAPTAIN.RESPONSES.EMPTY_STATE.TITLE')\"\n :subtitle=\"$t('CAPTAIN.RESPONSES.EMPTY_STATE.SUBTITLE')\"\n :action-perms=\"['administrator']\"\n >\n <template #empty-state-item>\n <div class=\"grid grid-cols-1 gap-4 p-px overflow-hidden\">\n <ResponseCard\n v-for=\"(response, index) in responsesList.slice(0, 5)\"\n :id=\"response.id\"\n :key=\"`response-${index}`\"\n :question=\"response.question\"\n :answer=\"response.answer\"\n :status=\"response.status\"\n :assistant=\"response.assistant\"\n :created-at=\"response.created_at\"\n :updated-at=\"response.created_at\"\n />\n </div>\n </template>\n <template #actions>\n <Button\n :label=\"$t('CAPTAIN.RESPONSES.ADD_NEW')\"\n icon=\"i-lucide-plus\"\n @click=\"onClick\"\n />\n </template>\n </EmptyStateLayout>\n</template>\n","<script setup>\nimport { computed, onMounted, ref, nextTick } from 'vue';\nimport { useMapGetter, useStore } from 'dashboard/composables/store';\nimport { useAlert } from 'dashboard/composables';\nimport { useI18n } from 'vue-i18n';\nimport { OnClickOutside } from '@vueuse/components';\nimport { useRouter } from 'vue-router';\nimport { FEATURE_FLAGS } from 'dashboard/featureFlags';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport Checkbox from 'dashboard/components-next/checkbox/Checkbox.vue';\nimport DropdownMenu from 'dashboard/components-next/dropdown-menu/DropdownMenu.vue';\nimport DeleteDialog from 'dashboard/components-next/captain/pageComponents/DeleteDialog.vue';\nimport BulkDeleteDialog from 'dashboard/components-next/captain/pageComponents/BulkDeleteDialog.vue';\nimport PageLayout from 'dashboard/components-next/captain/PageLayout.vue';\nimport CaptainPaywall from 'dashboard/components-next/captain/pageComponents/Paywall.vue';\nimport AssistantSelector from 'dashboard/components-next/captain/pageComponents/AssistantSelector.vue';\nimport ResponseCard from 'dashboard/components-next/captain/assistant/ResponseCard.vue';\nimport CreateResponseDialog from 'dashboard/components-next/captain/pageComponents/response/CreateResponseDialog.vue';\nimport ResponsePageEmptyState from 'dashboard/components-next/captain/pageComponents/emptyStates/ResponsePageEmptyState.vue';\nimport FeatureSpotlightPopover from 'dashboard/components-next/feature-spotlight/FeatureSpotlightPopover.vue';\nimport LimitBanner from 'dashboard/components-next/captain/pageComponents/response/LimitBanner.vue';\n\nconst router = useRouter();\nconst store = useStore();\nconst uiFlags = useMapGetter('captainResponses/getUIFlags');\nconst assistants = useMapGetter('captainAssistants/getRecords');\nconst responseMeta = useMapGetter('captainResponses/getMeta');\nconst responses = useMapGetter('captainResponses/getRecords');\nconst isFetching = computed(() => uiFlags.value.fetchingList);\n\nconst selectedResponse = ref(null);\nconst deleteDialog = ref(null);\nconst bulkDeleteDialog = ref(null);\n\nconst selectedStatus = ref('all');\nconst selectedAssistant = ref('all');\nconst dialogType = ref('');\nconst { t } = useI18n();\n\nconst createDialog = ref(null);\n\nconst isStatusFilterOpen = ref(false);\nconst shouldShowDropdown = computed(() => {\n if (assistants.value.length === 0) return false;\n\n return !isFetching.value;\n});\n\nconst statusOptions = computed(() =>\n ['all', 'pending', 'approved'].map(key => ({\n label: t(`CAPTAIN.RESPONSES.STATUS.${key.toUpperCase()}`),\n value: key,\n action: 'filter',\n }))\n);\n\nconst selectedStatusLabel = computed(() => {\n const status = statusOptions.value.find(\n option => option.value === selectedStatus.value\n );\n return t('CAPTAIN.RESPONSES.FILTER.STATUS', {\n selected: status ? status.label : '',\n });\n});\n\nconst handleDelete = () => {\n deleteDialog.value.dialogRef.open();\n};\nconst handleAccept = async () => {\n try {\n await store.dispatch('captainResponses/update', {\n id: selectedResponse.value.id,\n status: 'approved',\n });\n useAlert(t(`CAPTAIN.RESPONSES.EDIT.APPROVE_SUCCESS_MESSAGE`));\n } catch (error) {\n const errorMessage =\n error?.message || t(`CAPTAIN.RESPONSES.EDIT.ERROR_MESSAGE`);\n useAlert(errorMessage);\n } finally {\n selectedResponse.value = null;\n }\n};\n\nconst handleCreate = () => {\n dialogType.value = 'create';\n nextTick(() => createDialog.value.dialogRef.open());\n};\n\nconst handleEdit = () => {\n dialogType.value = 'edit';\n nextTick(() => createDialog.value.dialogRef.open());\n};\n\nconst handleAction = ({ action, id }) => {\n selectedResponse.value = responses.value.find(response => id === response.id);\n nextTick(() => {\n if (action === 'delete') {\n handleDelete();\n }\n if (action === 'edit') {\n handleEdit();\n }\n if (action === 'approve') {\n handleAccept();\n }\n });\n};\n\nconst handleNavigationAction = ({ id, type }) => {\n if (type === 'Conversation') {\n router.push({\n name: 'inbox_conversation',\n params: { conversation_id: id },\n });\n }\n};\n\nconst handleCreateClose = () => {\n dialogType.value = '';\n selectedResponse.value = null;\n};\n\nconst fetchResponses = (page = 1) => {\n const filterParams = { page };\n if (selectedStatus.value !== 'all') {\n filterParams.status = selectedStatus.value;\n }\n if (selectedAssistant.value !== 'all') {\n filterParams.assistantId = selectedAssistant.value;\n }\n store.dispatch('captainResponses/get', filterParams);\n};\n\n// Bulk action\nconst bulkSelectedIds = ref(new Set());\nconst hoveredCard = ref(null);\n\nconst bulkSelectionState = computed(() => {\n const selectedCount = bulkSelectedIds.value.size;\n const totalCount = responses.value?.length || 0;\n\n return {\n hasSelected: selectedCount > 0,\n isIndeterminate: selectedCount > 0 && selectedCount < totalCount,\n allSelected: totalCount > 0 && selectedCount === totalCount,\n };\n});\n\nconst bulkCheckbox = computed({\n get: () => bulkSelectionState.value.allSelected,\n set: value => {\n bulkSelectedIds.value = value\n ? new Set(responses.value.map(r => r.id))\n : new Set();\n },\n});\n\nconst handleCardHover = (isHovered, id) => {\n hoveredCard.value = isHovered ? id : null;\n};\n\nconst handleCardSelect = id => {\n const selected = new Set(bulkSelectedIds.value);\n selected[selected.has(id) ? 'delete' : 'add'](id);\n bulkSelectedIds.value = selected;\n};\n\nconst handleBulkApprove = async () => {\n try {\n await store.dispatch(\n 'captainBulkActions/handleBulkApprove',\n Array.from(bulkSelectedIds.value)\n );\n\n // Clear selection\n bulkSelectedIds.value = new Set();\n useAlert(t('CAPTAIN.RESPONSES.BULK_APPROVE.SUCCESS_MESSAGE'));\n } catch (error) {\n useAlert(\n error?.message || t('CAPTAIN.RESPONSES.BULK_APPROVE.ERROR_MESSAGE')\n );\n }\n};\n\nconst onPageChange = page => {\n // Store current selection state before fetching new page\n const wasAllPageSelected = bulkSelectionState.value.allSelected;\n const hadPartialSelection = bulkSelectedIds.value.size > 0;\n\n fetchResponses(page);\n\n // Reset selection if we had any selections on page change\n if (wasAllPageSelected || hadPartialSelection) {\n bulkSelectedIds.value = new Set();\n }\n};\n\nconst onDeleteSuccess = () => {\n if (responses.value?.length === 0 && responseMeta.value?.page > 1) {\n onPageChange(responseMeta.value.page - 1);\n }\n};\n\nconst onBulkDeleteSuccess = () => {\n // Only fetch if no records left\n if (responses.value?.length === 0) {\n const page =\n responseMeta.value?.page > 1\n ? responseMeta.value.page - 1\n : responseMeta.value.page;\n fetchResponses(page);\n }\n\n // Clear selection\n bulkSelectedIds.value = new Set();\n};\n\nconst handleStatusFilterChange = ({ value }) => {\n selectedStatus.value = value;\n isStatusFilterOpen.value = false;\n fetchResponses();\n};\n\nconst handleAssistantFilterChange = assistant => {\n selectedAssistant.value = assistant;\n fetchResponses();\n};\n\nonMounted(() => {\n store.dispatch('captainAssistants/get');\n fetchResponses();\n});\n</script>\n\n<template>\n <PageLayout\n :total-count=\"responseMeta.totalCount\"\n :current-page=\"responseMeta.page\"\n :button-policy=\"['administrator']\"\n :header-title=\"$t('CAPTAIN.RESPONSES.HEADER')\"\n :button-label=\"$t('CAPTAIN.RESPONSES.ADD_NEW')\"\n :is-fetching=\"isFetching\"\n :is-empty=\"!responses.length\"\n :show-pagination-footer=\"!isFetching && !!responses.length\"\n :feature-flag=\"FEATURE_FLAGS.CAPTAIN\"\n @update:current-page=\"onPageChange\"\n @click=\"handleCreate\"\n >\n <template #knowMore>\n <FeatureSpotlightPopover\n :button-label=\"$t('CAPTAIN.HEADER_KNOW_MORE')\"\n :title=\"$t('CAPTAIN.RESPONSES.EMPTY_STATE.FEATURE_SPOTLIGHT.TITLE')\"\n :note=\"$t('CAPTAIN.RESPONSES.EMPTY_STATE.FEATURE_SPOTLIGHT.NOTE')\"\n fallback-thumbnail=\"/assets/images/dashboard/captain/faqs-popover-light.svg\"\n fallback-thumbnail-dark=\"/assets/images/dashboard/captain/faqs-popover-dark.svg\"\n learn-more-url=\"https://chwt.app/captain-faq\"\n />\n </template>\n\n <template #emptyState>\n <ResponsePageEmptyState @click=\"handleCreate\" />\n </template>\n\n <template #paywall>\n <CaptainPaywall />\n </template>\n\n <template #controls>\n <div\n v-if=\"shouldShowDropdown\"\n class=\"mb-4 -mt-3 flex justify-between items-center\"\n >\n <div v-if=\"!bulkSelectionState.hasSelected\" class=\"flex gap-3\">\n <OnClickOutside @trigger=\"isStatusFilterOpen = false\">\n <Button\n :label=\"selectedStatusLabel\"\n icon=\"i-lucide-chevron-down\"\n size=\"sm\"\n color=\"slate\"\n trailing-icon\n class=\"max-w-48\"\n @click=\"isStatusFilterOpen = !isStatusFilterOpen\"\n />\n\n <DropdownMenu\n v-if=\"isStatusFilterOpen\"\n :menu-items=\"statusOptions\"\n class=\"mt-2\"\n @action=\"handleStatusFilterChange\"\n />\n </OnClickOutside>\n <AssistantSelector\n :assistant-id=\"selectedAssistant\"\n @update=\"handleAssistantFilterChange\"\n />\n </div>\n\n <transition\n name=\"slide-fade\"\n enter-active-class=\"transition-all duration-300 ease-out\"\n enter-from-class=\"opacity-0 transform ltr:-translate-x-4 rtl:translate-x-4\"\n enter-to-class=\"opacity-100 transform translate-x-0\"\n leave-active-class=\"hidden opacity-0\"\n >\n <div\n v-if=\"bulkSelectionState.hasSelected\"\n class=\"flex items-center gap-3 ltr:pl-4 rtl:pr-4\"\n >\n <div class=\"flex items-center gap-1.5\">\n <Checkbox\n v-model=\"bulkCheckbox\"\n :indeterminate=\"bulkSelectionState.isIndeterminate\"\n />\n <span class=\"text-sm text-n-slate-10 tabular-nums\">\n {{\n $t('CAPTAIN.RESPONSES.SELECTED', {\n count: bulkSelectedIds.size,\n })\n }}\n </span>\n </div>\n <div class=\"h-4 w-px bg-n-strong\" />\n <div class=\"flex gap-2\">\n <Button\n :label=\"$t('CAPTAIN.RESPONSES.BULK_APPROVE_BUTTON')\"\n sm\n slate\n @click=\"handleBulkApprove\"\n />\n <Button\n :label=\"$t('CAPTAIN.RESPONSES.BULK_DELETE_BUTTON')\"\n sm\n slate\n @click=\"bulkDeleteDialog.dialogRef.open()\"\n />\n </div>\n </div>\n </transition>\n </div>\n </template>\n\n <template #body>\n <LimitBanner class=\"mb-5\" />\n\n <div class=\"flex flex-col gap-4\">\n <ResponseCard\n v-for=\"response in responses\"\n :id=\"response.id\"\n :key=\"response.id\"\n :question=\"response.question\"\n :answer=\"response.answer\"\n :assistant=\"response.assistant\"\n :documentable=\"response.documentable\"\n :status=\"response.status\"\n :created-at=\"response.created_at\"\n :updated-at=\"response.updated_at\"\n :is-selected=\"bulkSelectedIds.has(response.id)\"\n :selectable=\"hoveredCard === response.id || bulkSelectedIds.size > 0\"\n @action=\"handleAction\"\n @navigate=\"handleNavigationAction\"\n @select=\"handleCardSelect\"\n @hover=\"isHovered => handleCardHover(isHovered, response.id)\"\n />\n </div>\n </template>\n\n <DeleteDialog\n v-if=\"selectedResponse\"\n ref=\"deleteDialog\"\n :entity=\"selectedResponse\"\n type=\"Responses\"\n @delete-success=\"onDeleteSuccess\"\n />\n\n <BulkDeleteDialog\n v-if=\"bulkSelectedIds\"\n ref=\"bulkDeleteDialog\"\n :bulk-ids=\"bulkSelectedIds\"\n type=\"Responses\"\n @delete-success=\"onBulkDeleteSuccess\"\n />\n\n <CreateResponseDialog\n v-if=\"dialogType\"\n ref=\"createDialog\"\n :type=\"dialogType\"\n :selected-response=\"selectedResponse\"\n @close=\"handleCreateClose\"\n />\n </PageLayout>\n</template>\n","import { FEATURE_FLAGS } from 'dashboard/featureFlags';\nimport { INSTALLATION_TYPES } from 'dashboard/constants/installationTypes';\nimport { frontendURL } from '../../../helper/URLHelper';\nimport AssistantIndex from './assistants/Index.vue';\nimport AssistantInboxesIndex from './assistants/inboxes/Index.vue';\nimport DocumentsIndex from './documents/Index.vue';\nimport ResponsesIndex from './responses/Index.vue';\n\nexport const routes = [\n {\n path: frontendURL('accounts/:accountId/captain/assistants'),\n component: AssistantIndex,\n name: 'captain_assistants_index',\n meta: {\n permissions: ['administrator', 'agent'],\n featureFlag: FEATURE_FLAGS.CAPTAIN,\n installationTypes: [\n INSTALLATION_TYPES.CLOUD,\n INSTALLATION_TYPES.ENTERPRISE,\n ],\n },\n },\n {\n path: frontendURL(\n 'accounts/:accountId/captain/assistants/:assistantId/inboxes'\n ),\n component: AssistantInboxesIndex,\n name: 'captain_assistants_inboxes_index',\n meta: {\n permissions: ['administrator', 'agent'],\n featureFlag: FEATURE_FLAGS.CAPTAIN,\n installationTypes: [\n INSTALLATION_TYPES.CLOUD,\n INSTALLATION_TYPES.ENTERPRISE,\n ],\n },\n },\n {\n path: frontendURL('accounts/:accountId/captain/documents'),\n component: DocumentsIndex,\n name: 'captain_documents_index',\n meta: {\n permissions: ['administrator', 'agent'],\n featureFlag: FEATURE_FLAGS.CAPTAIN,\n installationTypes: [\n INSTALLATION_TYPES.CLOUD,\n INSTALLATION_TYPES.ENTERPRISE,\n ],\n },\n },\n {\n path: frontendURL('accounts/:accountId/captain/responses'),\n component: ResponsesIndex,\n name: 'captain_responses_index',\n meta: {\n permissions: ['administrator', 'agent'],\n featureFlag: FEATURE_FLAGS.CAPTAIN,\n installationTypes: [\n INSTALLATION_TYPES.CLOUD,\n INSTALLATION_TYPES.ENTERPRISE,\n ],\n },\n },\n];\n","import { inject, provide } from 'vue';\nimport { usePolicy } from 'dashboard/composables/usePolicy';\nimport { useRouter } from 'vue-router';\n\nconst SidebarControl = Symbol('SidebarControl');\n\nexport function useSidebarContext() {\n const context = inject(SidebarControl, null);\n if (context === null) {\n throw new Error(`Component is missing a parent <Sidebar /> component.`);\n }\n\n const router = useRouter();\n\n const { shouldShow } = usePolicy();\n\n const resolvePath = to => {\n if (to) return router.resolve(to)?.path || '/';\n return '/';\n };\n\n const resolvePermissions = to => {\n if (to) return router.resolve(to)?.meta?.permissions ?? [];\n return [];\n };\n\n const resolveFeatureFlag = to => {\n if (to) return router.resolve(to)?.meta?.featureFlag || '';\n return '';\n };\n\n const resolveInstallationType = to => {\n if (to) return router.resolve(to)?.meta?.installationTypes || [];\n return [];\n };\n\n const isAllowed = to => {\n const permissions = resolvePermissions(to);\n const featureFlag = resolveFeatureFlag(to);\n const installationType = resolveInstallationType(to);\n\n return shouldShow(featureFlag, permissions, installationType);\n };\n\n return {\n ...context,\n resolvePath,\n resolvePermissions,\n resolveFeatureFlag,\n isAllowed,\n };\n}\n\nexport function provideSidebarContext(context) {\n provide(SidebarControl, context);\n}\n","import { computed } from 'vue';\n\nexport function useKbd(keys) {\n const keySymbols = {\n $mod: navigator.platform.includes('Mac') ? '⌘' : 'Ctrl',\n shift: '⇧',\n alt: '⌥',\n ctrl: 'Ctrl',\n cmd: '⌘',\n option: '⌥',\n enter: '↩',\n tab: '⇥',\n esc: '⎋',\n };\n\n return computed(() => {\n return keys\n .map(key => keySymbols[key.toLowerCase()] || key)\n .join('')\n .toUpperCase();\n });\n}\n","import { useKeyboardEvents } from 'dashboard/composables/useKeyboardEvents';\nimport { useRoute, useRouter } from 'vue-router';\n\nexport function useSidebarKeyboardShortcuts(toggleShortcutModalFn) {\n const route = useRoute();\n const router = useRouter();\n\n const isCurrentRouteSameAsNavigation = routeName => {\n return route.name === routeName;\n };\n\n const navigateToRoute = routeName => {\n if (!isCurrentRouteSameAsNavigation(routeName)) {\n router.push({ name: routeName });\n }\n };\n const keyboardEvents = {\n '$mod+Slash': {\n action: () => toggleShortcutModalFn(true),\n },\n '$mod+Escape': {\n action: () => toggleShortcutModalFn(false),\n },\n 'Alt+KeyC': {\n action: () => navigateToRoute('home'),\n },\n 'Alt+KeyV': {\n action: () => navigateToRoute('contacts_dashboard'),\n },\n 'Alt+KeyR': {\n action: () => navigateToRoute('account_overview_reports'),\n },\n 'Alt+KeyS': {\n action: () => navigateToRoute('agent_list'),\n },\n };\n\n return useKeyboardEvents(keyboardEvents);\n}\n","<script setup>\nimport { useMapGetter } from 'dashboard/composables/store.js';\nimport Icon from 'next/icon/Icon.vue';\n\nconst props = defineProps({\n to: { type: [Object, String], default: '' },\n label: { type: String, default: '' },\n icon: { type: [String, Object], default: '' },\n expandable: { type: Boolean, default: false },\n isExpanded: { type: Boolean, default: false },\n isActive: { type: Boolean, default: false },\n hasActiveChild: { type: Boolean, default: false },\n getterKeys: { type: Object, default: () => ({}) },\n});\n\nconst emit = defineEmits(['toggle']);\n\nconst showBadge = useMapGetter(props.getterKeys.badge);\n</script>\n\n<template>\n <component\n :is=\"to ? 'router-link' : 'div'\"\n class=\"flex items-center gap-2 px-2 py-1.5 rounded-lg h-8\"\n role=\"button\"\n :to=\"to\"\n :title=\"label\"\n :class=\"{\n 'n-blue-text bg-n-alpha-2 font-medium': isActive && !hasActiveChild,\n 'text-n-slate-12 font-medium': hasActiveChild,\n 'text-n-slate-11 hover:bg-n-alpha-2': !isActive && !hasActiveChild,\n }\"\n @click.stop=\"emit('toggle')\"\n >\n <div v-if=\"icon\" class=\"relative flex items-center gap-2\">\n <Icon v-if=\"icon\" :icon=\"icon\" class=\"size-4\" />\n <span\n v-if=\"showBadge\"\n class=\"size-2 -top-px ltr:-right-px rtl:-left-px bg-n-brand absolute rounded-full border border-n-solid-2\"\n />\n </div>\n <span class=\"text-sm font-medium leading-5 flex-grow\">\n {{ label }}\n </span>\n <span\n v-if=\"expandable\"\n v-show=\"isExpanded\"\n class=\"i-lucide-chevron-up size-3\"\n @click.stop=\"emit('toggle')\"\n />\n </component>\n</template>\n","<script setup>\nimport { isVNode, computed } from 'vue';\nimport Icon from 'next/icon/Icon.vue';\nimport Policy from 'dashboard/components/policy.vue';\nimport { useSidebarContext } from './provider';\n\nconst props = defineProps({\n label: { type: String, required: true },\n to: { type: [String, Object], required: true },\n icon: { type: [String, Object], default: null },\n active: { type: Boolean, default: false },\n component: { type: Function, default: null },\n});\n\nconst { resolvePermissions, resolveFeatureFlag } = useSidebarContext();\n\nconst shouldRenderComponent = computed(() => {\n return typeof props.component === 'function' || isVNode(props.component);\n});\n</script>\n\n<!-- eslint-disable-next-line vue/no-root-v-if -->\n<template>\n <Policy\n :permissions=\"resolvePermissions(to)\"\n :feature-flag=\"resolveFeatureFlag(to)\"\n as=\"li\"\n class=\"py-0.5 ltr:pl-3 rtl:pr-3 rtl:mr-3 ltr:ml-3 relative text-n-slate-11 child-item before:bg-n-slate-4 after:bg-transparent after:border-n-slate-4 before:left-0 rtl:before:right-0\"\n >\n <component\n :is=\"to ? 'router-link' : 'div'\"\n :to=\"to\"\n :title=\"label\"\n class=\"flex h-8 items-center gap-2 px-2 py-1 rounded-lg max-w-[9.438rem] hover:bg-gradient-to-r from-transparent via-n-slate-3/70 to-n-slate-3/70 group\"\n :class=\"{\n 'n-blue-text bg-n-alpha-2 active': active,\n }\"\n >\n <component\n :is=\"component\"\n v-if=\"shouldRenderComponent\"\n :label\n :icon\n :active\n />\n <template v-else>\n <Icon v-if=\"icon\" :icon=\"icon\" class=\"size-4 inline-block\" />\n <div class=\"flex-1 truncate min-w-0\">{{ label }}</div>\n </template>\n </component>\n </Policy>\n</template>\n","<script setup>\nimport { computed, ref } from 'vue';\nimport SidebarGroupLeaf from './SidebarGroupLeaf.vue';\nimport SidebarGroupSeparator from './SidebarGroupSeparator.vue';\n\nimport { useSidebarContext } from './provider';\nimport { useEventListener } from '@vueuse/core';\n\nconst props = defineProps({\n isExpanded: { type: Boolean, default: false },\n label: { type: String, required: true },\n icon: { type: [Object, String], required: true },\n children: { type: Array, default: undefined },\n activeChild: { type: Object, default: undefined },\n});\n\nconst { isAllowed } = useSidebarContext();\nconst scrollableContainer = ref(null);\n\nconst accessibleItems = computed(() =>\n props.children.filter(child => {\n return child.to && isAllowed(child.to);\n })\n);\n\nconst hasAccessibleItems = computed(() => {\n return accessibleItems.value.length > 0;\n});\n\nconst isScrollable = computed(() => {\n return accessibleItems.value.length > 7;\n});\n\nconst scrollEnd = ref(false);\n\n// set scrollEnd to true when the scroll reaches the end\nuseEventListener(scrollableContainer, 'scroll', () => {\n const { scrollHeight, scrollTop, clientHeight } = scrollableContainer.value;\n scrollEnd.value = scrollHeight - scrollTop === clientHeight;\n});\n</script>\n\n<template>\n <SidebarGroupSeparator\n v-if=\"hasAccessibleItems\"\n v-show=\"isExpanded\"\n :label\n :icon\n class=\"my-1\"\n />\n <ul v-if=\"children.length\" class=\"m-0 list-none reset-base relative group\">\n <!-- Each element has h-8, which is 32px, we will show 7 items with one hidden at the end,\n which is 14rem. Then we add 16px so that we have some text visible from the next item -->\n <div\n ref=\"scrollableContainer\"\n :class=\"{\n 'max-h-[calc(14rem+16px)] overflow-y-scroll no-scrollbar': isScrollable,\n }\"\n >\n <SidebarGroupLeaf\n v-for=\"child in children\"\n v-show=\"isExpanded || activeChild?.name === child.name\"\n v-bind=\"child\"\n :key=\"child.name\"\n :active=\"activeChild?.name === child.name\"\n />\n </div>\n <div\n v-if=\"isScrollable && isExpanded\"\n v-show=\"!scrollEnd\"\n class=\"absolute bg-gradient-to-t from-n-solid-2 w-full h-12 to-transparent -bottom-1 pointer-events-none flex items-end justify-end px-2 animate-fade-in-up\"\n >\n <svg\n width=\"16\"\n height=\"24\"\n viewBox=\"0 0 16 24\"\n fill=\"none\"\n class=\"text-n-slate-9 opacity-50 group-hover:opacity-100\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4 4L8 8L12 4\"\n stroke=\"currentColor\"\n opacity=\"0.5\"\n stroke-width=\"1.33333\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M4 10L8 14L12 10\"\n stroke=\"currentColor\"\n opacity=\"0.75\"\n stroke-width=\"1.33333\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M4 16L8 20L12 16\"\n stroke=\"currentColor\"\n stroke-width=\"1.33333\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </ul>\n</template>\n","<script setup>\nimport { useI18n } from 'vue-i18n';\n\nconst { t } = useI18n();\n</script>\n\n<template>\n <li\n class=\"py-1 pl-3 text-n-slate-10 border rounded-lg border-dashed text-center border-n-alpha-2 text-xs h-8 grid place-content-center select-none pointer-events-none\"\n >\n <slot>{{ t('SIDEBAR.NO_ITEMS') }}</slot>\n </li>\n</template>\n","<script setup>\nimport { computed, onMounted, nextTick } from 'vue';\nimport { useSidebarContext } from './provider';\nimport { useRoute, useRouter } from 'vue-router';\nimport Policy from 'dashboard/components/policy.vue';\nimport SidebarGroupHeader from './SidebarGroupHeader.vue';\nimport SidebarGroupLeaf from './SidebarGroupLeaf.vue';\nimport SidebarSubGroup from './SidebarSubGroup.vue';\nimport SidebarGroupEmptyLeaf from './SidebarGroupEmptyLeaf.vue';\n\nconst props = defineProps({\n name: { type: String, required: true },\n label: { type: String, required: true },\n icon: { type: [String, Object, Function], default: null },\n to: { type: Object, default: null },\n activeOn: { type: Array, default: () => [] },\n children: { type: Array, default: undefined },\n getterKeys: { type: Object, default: () => ({}) },\n});\n\nconst {\n expandedItem,\n setExpandedItem,\n resolvePath,\n resolvePermissions,\n resolveFeatureFlag,\n isAllowed,\n} = useSidebarContext();\n\nconst navigableChildren = computed(() => {\n return props.children?.flatMap(child => child.children || child) || [];\n});\n\nconst route = useRoute();\nconst router = useRouter();\nconst isExpanded = computed(() => expandedItem.value === props.name);\nconst isExpandable = computed(() => props.children);\nconst hasChildren = computed(\n () => Array.isArray(props.children) && props.children.length > 0\n);\n\nconst accessibleItems = computed(() => {\n if (!hasChildren.value) return [];\n return props.children.filter(child => {\n // If a item has no link, it means it's just a subgroup header\n // So we don't need to check for permissions here, because there's nothing to\n // access here anyway\n return child.to && isAllowed(child.to);\n });\n});\n\nconst hasAccessibleChildren = computed(() => {\n return accessibleItems.value.length > 0;\n});\n\nconst isActive = computed(() => {\n if (props.to) {\n if (route.path === resolvePath(props.to)) return true;\n\n return props.activeOn.includes(route.name);\n }\n\n return false;\n});\n\n// We could use the RouterLink isActive too, but our routes are not always\n// nested correctly, so we need to check the active state ourselves\n// TODO: Audit the routes and fix the nesting and remove this\nconst activeChild = computed(() => {\n const pathSame = navigableChildren.value.find(\n child => child.to && route.path === resolvePath(child.to)\n );\n if (pathSame) return pathSame;\n\n // Rank the activeOn Prop higher than the path match\n // There will be cases where the path name is the same but the params are different\n // So we need to rank them based on the params\n // For example, contacts segment list in the sidebar effectively has the same name\n // But the params are different\n const activeOnPages = navigableChildren.value.filter(child =>\n child.activeOn?.includes(route.name)\n );\n\n if (activeOnPages.length > 0) {\n const rankedPage = activeOnPages.find(child => {\n return Object.keys(child.to.params)\n .map(key => {\n return String(child.to.params[key]) === String(route.params[key]);\n })\n .every(match => match);\n });\n\n // If there is no ranked page, return the first activeOn page anyway\n // Since this takes higher precedence over the path match\n // This is not perfect, ideally we should rank each route based on all the techniques\n // and then return the highest ranked one\n // But this is good enough for now\n return rankedPage ?? activeOnPages[0];\n }\n\n return navigableChildren.value.find(\n child => child.to && route.path.startsWith(resolvePath(child.to))\n );\n});\n\nconst hasActiveChild = computed(() => {\n return activeChild.value !== undefined;\n});\n\nconst toggleTrigger = () => {\n if (\n hasAccessibleChildren.value &&\n !isExpanded.value &&\n !hasActiveChild.value\n ) {\n // if not already expanded, navigate to the first child\n const firstItem = accessibleItems.value[0];\n router.push(firstItem.to);\n }\n setExpandedItem(props.name);\n};\n\nonMounted(async () => {\n await nextTick();\n if (hasActiveChild.value) {\n setExpandedItem(props.name);\n }\n});\n</script>\n\n<!-- eslint-disable-next-line vue/no-root-v-if -->\n<template>\n <Policy\n v-if=\"!hasChildren || hasAccessibleChildren\"\n :permissions=\"resolvePermissions(to)\"\n :feature-flag=\"resolveFeatureFlag(to)\"\n as=\"li\"\n class=\"grid gap-1 text-sm cursor-pointer select-none\"\n >\n <SidebarGroupHeader\n :icon\n :name\n :label\n :to\n :getter-keys=\"getterKeys\"\n :is-active=\"isActive\"\n :has-active-child=\"hasActiveChild\"\n :expandable=\"hasChildren\"\n :is-expanded=\"isExpanded\"\n @toggle=\"toggleTrigger\"\n />\n <ul\n v-if=\"hasChildren\"\n v-show=\"isExpanded || hasActiveChild\"\n class=\"grid m-0 list-none sidebar-group-children\"\n >\n <template v-for=\"child in children\" :key=\"child.name\">\n <SidebarSubGroup\n v-if=\"child.children\"\n :label=\"child.label\"\n :icon=\"child.icon\"\n :children=\"child.children\"\n :is-expanded=\"isExpanded\"\n :active-child=\"activeChild\"\n />\n <SidebarGroupLeaf\n v-else-if=\"isAllowed(child.to)\"\n v-show=\"isExpanded || activeChild?.name === child.name\"\n v-bind=\"child\"\n :active=\"activeChild?.name === child.name\"\n />\n </template>\n </ul>\n <ul v-else-if=\"isExpandable && isExpanded\">\n <SidebarGroupEmptyLeaf />\n </ul>\n </Policy>\n</template>\n\n<style>\n.sidebar-group-children .child-item::before {\n content: '';\n position: absolute;\n width: 0.125rem;\n /* 0.5px */\n height: 100%;\n}\n\n.sidebar-group-children .child-item:first-child::before {\n border-radius: 4px 4px 0 0;\n}\n\n/* This selects the last child in a group */\n/* https://codepen.io/scmmishra/pen/yLmKNLW */\n.sidebar-group-children > .child-item:last-child::before,\n.sidebar-group-children\n > *:last-child\n > *:last-child\n > .child-item:last-child::before {\n height: 20%;\n}\n\n.sidebar-group-children > .child-item:last-child::after,\n.sidebar-group-children\n > *:last-child\n > *:last-child\n > .child-item:last-child::after {\n content: '';\n position: absolute;\n width: 10px;\n height: 12px;\n bottom: calc(50% - 2px);\n border-bottom-width: 0.125rem;\n border-left-width: 0.125rem;\n border-right-width: 0px;\n border-top-width: 0px;\n border-radius: 0 0 0 4px;\n left: 0;\n}\n\n.app-rtl--wrapper .sidebar-group-children > .child-item:last-child::after,\n.app-rtl--wrapper\n .sidebar-group-children\n > *:last-child\n > *:last-child\n > .child-item:last-child::after {\n right: 0;\n border-bottom-width: 0.125rem;\n border-right-width: 0.125rem;\n border-left-width: 0px;\n border-top-width: 0px;\n border-radius: 0 0 4px 0px;\n}\n</style>\n","<template>\n <div class=\"h-0 border-b border-n-strong -mx-2\" />\n</template>\n","<script setup>\nimport { computed, h } from 'vue';\nimport { useMapGetter, useStore } from 'dashboard/composables/store';\nimport wootConstants from 'dashboard/constants/globals';\nimport { useAlert } from 'dashboard/composables';\nimport { useI18n } from 'vue-i18n';\n\nimport {\n DropdownContainer,\n DropdownBody,\n DropdownSection,\n DropdownItem,\n} from 'next/dropdown-menu/base';\nimport Icon from 'next/icon/Icon.vue';\nimport Button from 'next/button/Button.vue';\n\nconst { t } = useI18n();\nconst store = useStore();\nconst currentUserAvailability = useMapGetter('getCurrentUserAvailability');\nconst currentAccountId = useMapGetter('getCurrentAccountId');\nconst currentUserAutoOffline = useMapGetter('getCurrentUserAutoOffline');\n\nconst { AVAILABILITY_STATUS_KEYS } = wootConstants;\nconst statusList = computed(() => {\n return [\n t('PROFILE_SETTINGS.FORM.AVAILABILITY.STATUS.ONLINE'),\n t('PROFILE_SETTINGS.FORM.AVAILABILITY.STATUS.BUSY'),\n t('PROFILE_SETTINGS.FORM.AVAILABILITY.STATUS.OFFLINE'),\n ];\n});\n\nconst statusColors = ['bg-n-teal-9', 'bg-n-amber-9', 'bg-n-slate-9'];\n\nconst availabilityStatuses = computed(() => {\n return statusList.value.map((statusLabel, index) => ({\n label: statusLabel,\n value: AVAILABILITY_STATUS_KEYS[index],\n color: statusColors[index],\n icon: h('span', { class: [statusColors[index], 'size-[12px] rounded'] }),\n active: currentUserAvailability.value === AVAILABILITY_STATUS_KEYS[index],\n }));\n});\n\nconst activeStatus = computed(() => {\n return availabilityStatuses.value.find(status => status.active);\n});\n\nfunction changeAvailabilityStatus(availability) {\n try {\n store.dispatch('updateAvailability', {\n availability,\n account_id: currentAccountId.value,\n });\n } catch (error) {\n useAlert(t('PROFILE_SETTINGS.FORM.AVAILABILITY.SET_AVAILABILITY_ERROR'));\n }\n}\n\nfunction updateAutoOffline(autoOffline) {\n store.dispatch('updateAutoOffline', {\n accountId: currentAccountId.value,\n autoOffline,\n });\n}\n</script>\n\n<template>\n <DropdownSection>\n <div class=\"grid gap-0\">\n <DropdownItem preserve-open>\n <div class=\"flex-grow flex items-center gap-1\">\n {{ $t('SIDEBAR.SET_YOUR_AVAILABILITY') }}\n </div>\n <DropdownContainer>\n <template #trigger=\"{ toggle }\">\n <Button\n size=\"sm\"\n color=\"slate\"\n variant=\"faded\"\n class=\"min-w-[96px]\"\n icon=\"i-lucide-chevron-down\"\n trailing-icon\n @click=\"toggle\"\n >\n <div class=\"flex gap-1 items-center flex-grow text-sm\">\n <div class=\"p-1 flex-shrink-0\">\n <div class=\"size-2 rounded-sm\" :class=\"activeStatus.color\" />\n </div>\n <span>{{ activeStatus.label }}</span>\n </div>\n </Button>\n </template>\n <DropdownBody class=\"min-w-32 z-20\">\n <DropdownItem\n v-for=\"status in availabilityStatuses\"\n :key=\"status.value\"\n :label=\"status.label\"\n :icon=\"status.icon\"\n class=\"cursor-pointer\"\n @click=\"changeAvailabilityStatus(status.value)\"\n />\n </DropdownBody>\n </DropdownContainer>\n </DropdownItem>\n <DropdownItem>\n <div class=\"flex-grow flex items-center gap-1\">\n {{ $t('SIDEBAR.SET_AUTO_OFFLINE.TEXT') }}\n <Icon\n v-tooltip.top=\"$t('SIDEBAR.SET_AUTO_OFFLINE.INFO_SHORT')\"\n icon=\"i-lucide-info\"\n class=\"size-4 text-n-slate-10\"\n />\n </div>\n <woot-switch\n class=\"flex-shrink-0\"\n :model-value=\"currentUserAutoOffline\"\n @input=\"updateAutoOffline\"\n />\n </DropdownItem>\n </div>\n </DropdownSection>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport Auth from 'dashboard/api/auth';\nimport { useMapGetter } from 'dashboard/composables/store';\nimport { useI18n } from 'vue-i18n';\nimport Avatar from 'next/avatar/Avatar.vue';\nimport SidebarProfileMenuStatus from './SidebarProfileMenuStatus.vue';\nimport { FEATURE_FLAGS } from 'dashboard/featureFlags';\n\nimport {\n DropdownContainer,\n DropdownBody,\n DropdownSeparator,\n DropdownItem,\n} from 'next/dropdown-menu/base';\nimport CustomBrandPolicyWrapper from '../../components/CustomBrandPolicyWrapper.vue';\n\nconst emit = defineEmits(['close', 'openKeyShortcutModal']);\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst { t } = useI18n();\n\nconst currentUser = useMapGetter('getCurrentUser');\nconst currentUserAvailability = useMapGetter('getCurrentUserAvailability');\nconst accountId = useMapGetter('getCurrentAccountId');\nconst globalConfig = useMapGetter('globalConfig/get');\nconst isFeatureEnabledonAccount = useMapGetter(\n 'accounts/isFeatureEnabledonAccount'\n);\n\nconst showChatSupport = computed(() => {\n return (\n isFeatureEnabledonAccount.value(\n accountId.value,\n FEATURE_FLAGS.CONTACT_CHATWOOT_SUPPORT_TEAM\n ) && globalConfig.value.chatwootInboxToken\n );\n});\n\nconst menuItems = computed(() => {\n return [\n {\n show: showChatSupport.value,\n showOnCustomBrandedInstance: false,\n label: t('SIDEBAR_ITEMS.CONTACT_SUPPORT'),\n icon: 'i-lucide-life-buoy',\n click: () => {\n window.$chatwoot.toggle();\n },\n },\n {\n show: true,\n showOnCustomBrandedInstance: true,\n label: t('SIDEBAR_ITEMS.KEYBOARD_SHORTCUTS'),\n icon: 'i-lucide-keyboard',\n click: () => {\n emit('openKeyShortcutModal');\n },\n },\n {\n show: true,\n showOnCustomBrandedInstance: true,\n label: t('SIDEBAR_ITEMS.PROFILE_SETTINGS'),\n icon: 'i-lucide-user-pen',\n link: { name: 'profile_settings_index' },\n },\n {\n show: true,\n showOnCustomBrandedInstance: true,\n label: t('SIDEBAR_ITEMS.APPEARANCE'),\n icon: 'i-lucide-palette',\n click: () => {\n const ninja = document.querySelector('ninja-keys');\n ninja.open({ parent: 'appearance_settings' });\n },\n },\n {\n show: true,\n showOnCustomBrandedInstance: false,\n label: t('SIDEBAR_ITEMS.DOCS'),\n icon: 'i-lucide-book',\n link: 'https://www.chatwoot.com/hc/user-guide/en',\n nativeLink: true,\n target: '_blank',\n },\n {\n show: currentUser.value.type === 'SuperAdmin',\n showOnCustomBrandedInstance: true,\n label: t('SIDEBAR_ITEMS.SUPER_ADMIN_CONSOLE'),\n icon: 'i-lucide-castle',\n link: '/super_admin',\n nativeLink: true,\n target: '_blank',\n },\n {\n show: true,\n showOnCustomBrandedInstance: true,\n label: t('SIDEBAR_ITEMS.LOGOUT'),\n icon: 'i-lucide-power',\n click: Auth.logout,\n },\n ];\n});\n\nconst allowedMenuItems = computed(() => {\n return menuItems.value.filter(item => item.show);\n});\n</script>\n\n<template>\n <DropdownContainer\n class=\"relative w-full min-w-0\"\n :class=\"{ 'z-20': isOpen }\"\n @close=\"emit('close')\"\n >\n <template #trigger=\"{ toggle, isOpen }\">\n <button\n class=\"flex gap-2 items-center rounded-lg cursor-pointer text-left w-full hover:bg-n-alpha-1 p-1\"\n :class=\"{ 'bg-n-alpha-1': isOpen }\"\n @click=\"toggle\"\n >\n <Avatar\n :size=\"32\"\n :name=\"currentUser.available_name\"\n :src=\"currentUser.avatar_url\"\n :status=\"currentUserAvailability\"\n class=\"flex-shrink-0\"\n rounded-full\n />\n <div class=\"min-w-0\">\n <div class=\"text-n-slate-12 text-sm leading-4 font-medium truncate\">\n {{ currentUser.available_name }}\n </div>\n <div class=\"text-n-slate-11 text-xs truncate\">\n {{ currentUser.email }}\n </div>\n </div>\n </button>\n </template>\n <DropdownBody class=\"ltr:left-0 rtl:right-0 bottom-12 z-50 w-80 mb-2\">\n <SidebarProfileMenuStatus />\n <DropdownSeparator />\n <template v-for=\"item in allowedMenuItems\" :key=\"item.label\">\n <CustomBrandPolicyWrapper\n :show-on-custom-branded-instance=\"item.showOnCustomBrandedInstance\"\n >\n <DropdownItem v-if=\"item.show\" v-bind=\"item\" />\n </CustomBrandPolicyWrapper>\n </template>\n </DropdownBody>\n </DropdownContainer>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport Icon from 'next/icon/Icon.vue';\nimport ChannelIcon from 'next/icon/ChannelIcon.vue';\n\nconst props = defineProps({\n label: {\n type: String,\n required: true,\n },\n active: {\n type: Boolean,\n default: false,\n },\n inbox: {\n type: Object,\n required: true,\n },\n});\n\nconst reauthorizationRequired = computed(() => {\n return props.inbox.reauthorization_required;\n});\n</script>\n\n<template>\n <span\n class=\"size-4 grid place-content-center rounded-full bg-n-alpha-2\"\n :class=\"{ 'bg-n-solid-blue': active }\"\n >\n <ChannelIcon :inbox=\"inbox\" class=\"size-3\" />\n </span>\n <div class=\"flex-1 truncate min-w-0\">{{ label }}</div>\n <div\n v-if=\"reauthorizationRequired\"\n v-tooltip.top-end=\"$t('SIDEBAR.REAUTHORIZE')\"\n class=\"grid place-content-center size-5 bg-n-ruby-5/60 rounded-full\"\n >\n <Icon icon=\"i-woot-alert\" class=\"size-3 text-n-ruby-9\" />\n </div>\n</template>\n","<script setup>\nimport { computed } from 'vue';\nimport { useAccount } from 'dashboard/composables/useAccount';\nimport { useMapGetter } from 'dashboard/composables/store';\nimport { useI18n } from 'vue-i18n';\nimport ButtonNext from 'next/button/Button.vue';\nimport Icon from 'next/icon/Icon.vue';\n\nimport {\n DropdownContainer,\n DropdownBody,\n DropdownSection,\n DropdownItem,\n} from 'next/dropdown-menu/base';\n\nconst emit = defineEmits(['showCreateAccountModal']);\n\nconst { t } = useI18n();\nconst { accountId, currentAccount } = useAccount();\nconst currentUser = useMapGetter('getCurrentUser');\nconst globalConfig = useMapGetter('globalConfig/get');\n\nconst userAccounts = useMapGetter('getUserAccounts');\n\nconst showAccountSwitcher = computed(\n () => userAccounts.value.length > 1 && currentAccount.value.name\n);\n\nconst onChangeAccount = newId => {\n const accountUrl = `/app/accounts/${newId}/dashboard`;\n window.location.href = accountUrl;\n};\n\nconst emitNewAccount = () => {\n emit('showCreateAccountModal');\n};\n</script>\n\n<template>\n <DropdownContainer>\n <template #trigger=\"{ toggle, isOpen }\">\n <button\n id=\"sidebar-account-switcher\"\n :data-account-id=\"accountId\"\n aria-haspopup=\"listbox\"\n aria-controls=\"account-options\"\n class=\"flex items-center gap-2 justify-between w-full rounded-lg px-2\"\n :class=\"[\n isOpen && 'bg-n-alpha-1',\n showAccountSwitcher\n ? 'hover:bg-n-alpha-1 cursor-pointer'\n : 'cursor-default',\n ]\"\n @click=\"() => showAccountSwitcher && toggle()\"\n >\n <span\n class=\"text-sm font-medium leading-5 text-n-slate-12 truncate\"\n aria-live=\"polite\"\n >\n {{ currentAccount.name }}\n </span>\n\n <span\n v-if=\"showAccountSwitcher\"\n aria-hidden=\"true\"\n class=\"i-lucide-chevron-down size-4 text-n-slate-10 flex-shrink-0\"\n />\n </button>\n </template>\n <DropdownBody v-if=\"showAccountSwitcher\" class=\"min-w-80 z-50\">\n <DropdownSection :title=\"t('SIDEBAR_ITEMS.SWITCH_ACCOUNT')\">\n <DropdownItem\n v-for=\"account in currentUser.accounts\"\n :id=\"`account-${account.id}`\"\n :key=\"account.id\"\n class=\"cursor-pointer\"\n @click=\"onChangeAccount(account.id)\"\n >\n <template #label>\n <div\n :for=\"account.name\"\n class=\"text-left rtl:text-right flex gap-2 items-center\"\n >\n <span\n class=\"text-n-slate-12 max-w-36 truncate min-w-0\"\n :title=\"account.name\"\n >\n {{ account.name }}\n </span>\n <div class=\"flex-shrink-0 w-px h-3 bg-n-strong\" />\n <span\n class=\"text-n-slate-11 max-w-24 truncate capitalize\"\n :title=\"account.name\"\n >\n {{\n account.custom_role_id\n ? account.custom_role.name\n : account.role\n }}\n </span>\n </div>\n <Icon\n v-show=\"account.id === accountId\"\n icon=\"i-lucide-check\"\n class=\"text-n-teal-11 size-5\"\n />\n </template>\n </DropdownItem>\n </DropdownSection>\n <DropdownItem v-if=\"globalConfig.createNewAccountFromDashboard\">\n <ButtonNext\n color=\"slate\"\n variant=\"faded\"\n class=\"w-full\"\n size=\"sm\"\n @click=\"emitNewAccount\"\n >\n {{ t('CREATE_ACCOUNT.NEW_ACCOUNT') }}\n </ButtonNext>\n </DropdownItem>\n </DropdownBody>\n </DropdownContainer>\n</template>\n","<script setup>\nimport { useAttrs } from 'vue';\nimport { useMapGetter } from 'dashboard/composables/store';\n\nconst attrs = useAttrs();\nconst globalConfig = useMapGetter('globalConfig/get');\n</script>\n\n<template>\n <img\n v-if=\"globalConfig.logoThumbnail\"\n v-bind=\"attrs\"\n :src=\"globalConfig.logoThumbnail\"\n />\n <svg\n v-else\n v-once\n v-bind=\"attrs\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clip-path=\"url(#woot-logo-clip-2342424e23u32098)\">\n <path\n d=\"M8 16C12.4183 16 16 12.4183 16 8C16 3.58172 12.4183 0 8 0C3.58172 0 0 3.58172 0 8C0 12.4183 3.58172 16 8 16Z\"\n fill=\"#2781F6\"\n />\n <path\n d=\"M11.4172 11.4172H7.70831C5.66383 11.4172 4 9.75328 4 7.70828C4 5.66394 5.66383 4 7.70835 4C9.75339 4 11.4172 5.66394 11.4172 7.70828V11.4172Z\"\n fill=\"white\"\n stroke=\"white\"\n stroke-width=\"0.1875\"\n />\n </g>\n <defs>\n <clipPath id=\"woot-logo-clip-2342424e23u32098\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n</template>\n","<script setup>\nimport { h, computed, onMounted } from 'vue';\nimport { provideSidebarContext } from './provider';\nimport { useAccount } from 'dashboard/composables/useAccount';\nimport { useKbd } from 'dashboard/composables/utils/useKbd';\nimport { useMapGetter } from 'dashboard/composables/store';\nimport { useStore } from 'vuex';\nimport { useI18n } from 'vue-i18n';\nimport { useStorage } from '@vueuse/core';\nimport { useSidebarKeyboardShortcuts } from './useSidebarKeyboardShortcuts';\nimport { FEATURE_FLAGS } from 'dashboard/featureFlags';\n\nimport Button from 'dashboard/components-next/button/Button.vue';\nimport SidebarGroup from './SidebarGroup.vue';\nimport SidebarProfileMenu from './SidebarProfileMenu.vue';\nimport ChannelLeaf from './ChannelLeaf.vue';\nimport SidebarAccountSwitcher from './SidebarAccountSwitcher.vue';\nimport Logo from 'next/icon/Logo.vue';\nimport ComposeConversation from 'dashboard/components-next/NewConversation/ComposeConversation.vue';\n\nconst emit = defineEmits([\n 'closeKeyShortcutModal',\n 'openKeyShortcutModal',\n 'showCreateAccountModal',\n]);\n\nconst { accountScopedRoute } = useAccount();\nconst store = useStore();\nconst searchShortcut = useKbd([`$mod`, 'k']);\nconst { t } = useI18n();\n\nconst toggleShortcutModalFn = show => {\n if (show) {\n emit('openKeyShortcutModal');\n } else {\n emit('closeKeyShortcutModal');\n }\n};\n\nconst currentAccountId = useMapGetter('getCurrentAccountId');\nconst isFeatureEnabledonAccount = useMapGetter(\n 'accounts/isFeatureEnabledonAccount'\n);\n\nconst showV4Routes = computed(() => {\n return isFeatureEnabledonAccount.value(\n currentAccountId.value,\n FEATURE_FLAGS.REPORT_V4\n );\n});\n\nuseSidebarKeyboardShortcuts(toggleShortcutModalFn);\n\n// We're using localStorage to store the expanded item in the sidebar\n// This helps preserve context when navigating between portal and dashboard layouts\n// and also when the user refreshes the page\nconst expandedItem = useStorage(\n 'next-sidebar-expanded-item',\n null,\n sessionStorage\n);\n\nconst setExpandedItem = name => {\n expandedItem.value = expandedItem.value === name ? null : name;\n};\nprovideSidebarContext({\n expandedItem,\n setExpandedItem,\n});\n\nconst inboxes = useMapGetter('inboxes/getInboxes');\nconst labels = useMapGetter('labels/getLabelsOnSidebar');\nconst teams = useMapGetter('teams/getMyTeams');\nconst contactCustomViews = useMapGetter('customViews/getContactCustomViews');\nconst conversationCustomViews = useMapGetter(\n 'customViews/getConversationCustomViews'\n);\n\nonMounted(() => {\n store.dispatch('labels/get');\n store.dispatch('inboxes/get');\n store.dispatch('notifications/unReadCount');\n store.dispatch('teams/get');\n store.dispatch('attributes/get');\n store.dispatch('customViews/get', 'conversation');\n store.dispatch('customViews/get', 'contact');\n});\n\nconst sortedInboxes = computed(() =>\n inboxes.value.slice().sort((a, b) => a.name.localeCompare(b.name))\n);\n\nconst newReportRoutes = () => [\n {\n name: 'Reports Agent',\n label: t('SIDEBAR.REPORTS_AGENT'),\n to: accountScopedRoute('agent_reports_index'),\n activeOn: ['agent_reports_show'],\n },\n {\n name: 'Reports Label',\n label: t('SIDEBAR.REPORTS_LABEL'),\n to: accountScopedRoute('label_reports'),\n },\n {\n name: 'Reports Inbox',\n label: t('SIDEBAR.REPORTS_INBOX'),\n to: accountScopedRoute('inbox_reports_index'),\n activeOn: ['inbox_reports_show'],\n },\n {\n name: 'Reports Team',\n label: t('SIDEBAR.REPORTS_TEAM'),\n to: accountScopedRoute('team_reports_index'),\n activeOn: ['team_reports_show'],\n },\n];\n\nconst oldReportRoutes = () => [\n {\n name: 'Reports Agent',\n label: t('SIDEBAR.REPORTS_AGENT'),\n to: accountScopedRoute('agent_reports'),\n },\n {\n name: 'Reports Label',\n label: t('SIDEBAR.REPORTS_LABEL'),\n to: accountScopedRoute('label_reports'),\n },\n {\n name: 'Reports Inbox',\n label: t('SIDEBAR.REPORTS_INBOX'),\n to: accountScopedRoute('inbox_reports'),\n },\n {\n name: 'Reports Team',\n label: t('SIDEBAR.REPORTS_TEAM'),\n to: accountScopedRoute('team_reports'),\n },\n];\n\nconst reportRoutes = computed(() =>\n showV4Routes.value ? newReportRoutes() : oldReportRoutes()\n);\n\nconst menuItems = computed(() => {\n return [\n {\n name: 'Inbox',\n label: t('SIDEBAR.INBOX'),\n icon: 'i-lucide-inbox',\n to: accountScopedRoute('inbox_view'),\n activeOn: ['inbox_view', 'inbox_view_conversation'],\n getterKeys: {\n badge: 'notifications/getHasUnreadNotifications',\n },\n },\n {\n name: 'Conversation',\n label: t('SIDEBAR.CONVERSATIONS'),\n icon: 'i-lucide-message-circle',\n children: [\n {\n name: 'All',\n label: t('SIDEBAR.ALL_CONVERSATIONS'),\n activeOn: ['inbox_conversation'],\n to: accountScopedRoute('home'),\n },\n {\n name: 'Mentions',\n label: t('SIDEBAR.MENTIONED_CONVERSATIONS'),\n activeOn: ['conversation_through_mentions'],\n to: accountScopedRoute('conversation_mentions'),\n },\n {\n name: 'Unattended',\n activeOn: ['conversation_through_unattended'],\n label: t('SIDEBAR.UNATTENDED_CONVERSATIONS'),\n to: accountScopedRoute('conversation_unattended'),\n },\n {\n name: 'Folders',\n label: t('SIDEBAR.CUSTOM_VIEWS_FOLDER'),\n icon: 'i-lucide-folder',\n activeOn: ['conversations_through_folders'],\n children: conversationCustomViews.value.map(view => ({\n name: `${view.name}-${view.id}`,\n label: view.name,\n to: accountScopedRoute('folder_conversations', { id: view.id }),\n })),\n },\n {\n name: 'Teams',\n label: t('SIDEBAR.TEAMS'),\n icon: 'i-lucide-users',\n activeOn: ['conversations_through_team'],\n children: teams.value.map(team => ({\n name: `${team.name}-${team.id}`,\n label: team.name,\n to: accountScopedRoute('team_conversations', { teamId: team.id }),\n })),\n },\n {\n name: 'Channels',\n label: t('SIDEBAR.CHANNELS'),\n icon: 'i-lucide-mailbox',\n activeOn: ['conversation_through_inbox'],\n children: sortedInboxes.value.map(inbox => ({\n name: `${inbox.name}-${inbox.id}`,\n label: inbox.name,\n to: accountScopedRoute('inbox_dashboard', { inbox_id: inbox.id }),\n component: leafProps =>\n h(ChannelLeaf, {\n label: leafProps.label,\n active: leafProps.active,\n inbox,\n }),\n })),\n },\n {\n name: 'Labels',\n label: t('SIDEBAR.LABELS'),\n icon: 'i-lucide-tag',\n activeOn: ['conversations_through_label'],\n children: labels.value.map(label => ({\n name: `${label.title}-${label.id}`,\n label: label.title,\n icon: h('span', {\n class: `size-[12px] ring-1 ring-n-alpha-1 dark:ring-white/20 ring-inset rounded-sm`,\n style: { backgroundColor: label.color },\n }),\n to: accountScopedRoute('label_conversations', {\n label: label.title,\n }),\n })),\n },\n ],\n },\n {\n name: 'Captain',\n icon: 'i-woot-captain',\n label: t('SIDEBAR.CAPTAIN'),\n children: [\n {\n name: 'Assistants',\n label: t('SIDEBAR.CAPTAIN_ASSISTANTS'),\n to: accountScopedRoute('captain_assistants_index'),\n },\n {\n name: 'Documents',\n label: t('SIDEBAR.CAPTAIN_DOCUMENTS'),\n to: accountScopedRoute('captain_documents_index'),\n },\n {\n name: 'Responses',\n label: t('SIDEBAR.CAPTAIN_RESPONSES'),\n to: accountScopedRoute('captain_responses_index'),\n },\n ],\n },\n {\n name: 'Contacts',\n label: t('SIDEBAR.CONTACTS'),\n icon: 'i-lucide-contact',\n children: [\n {\n name: 'All Contacts',\n label: t('SIDEBAR.ALL_CONTACTS'),\n to: accountScopedRoute(\n 'contacts_dashboard_index',\n {},\n { page: 1, search: undefined }\n ),\n activeOn: ['contacts_dashboard_index', 'contacts_edit'],\n },\n {\n name: 'Segments',\n icon: 'i-lucide-group',\n label: t('SIDEBAR.CUSTOM_VIEWS_SEGMENTS'),\n children: contactCustomViews.value.map(view => ({\n name: `${view.name}-${view.id}`,\n label: view.name,\n to: accountScopedRoute(\n 'contacts_dashboard_segments_index',\n { segmentId: view.id },\n { page: 1 }\n ),\n activeOn: [\n 'contacts_dashboard_segments_index',\n 'contacts_edit_segment',\n ],\n })),\n },\n {\n name: 'Tagged With',\n icon: 'i-lucide-tag',\n label: t('SIDEBAR.TAGGED_WITH'),\n children: labels.value.map(label => ({\n name: `${label.title}-${label.id}`,\n label: label.title,\n icon: h('span', {\n class: `size-[12px] ring-1 ring-n-alpha-1 dark:ring-white/20 ring-inset rounded-sm`,\n style: { backgroundColor: label.color },\n }),\n to: accountScopedRoute(\n 'contacts_dashboard_labels_index',\n { label: label.title },\n { page: 1, search: undefined }\n ),\n activeOn: [\n 'contacts_dashboard_labels_index',\n 'contacts_edit_label',\n ],\n })),\n },\n ],\n },\n {\n name: 'Reports',\n label: t('SIDEBAR.REPORTS'),\n icon: 'i-lucide-chart-spline',\n children: [\n {\n name: 'Report Overview',\n label: t('SIDEBAR.REPORTS_OVERVIEW'),\n to: accountScopedRoute('account_overview_reports'),\n },\n {\n name: 'Report Conversation',\n label: t('SIDEBAR.REPORTS_CONVERSATION'),\n to: accountScopedRoute('conversation_reports'),\n },\n ...reportRoutes.value,\n {\n name: 'Reports CSAT',\n label: t('SIDEBAR.CSAT'),\n to: accountScopedRoute('csat_reports'),\n },\n {\n name: 'Reports SLA',\n label: t('SIDEBAR.REPORTS_SLA'),\n to: accountScopedRoute('sla_reports'),\n },\n {\n name: 'Reports Bot',\n label: t('SIDEBAR.REPORTS_BOT'),\n to: accountScopedRoute('bot_reports'),\n },\n ],\n },\n {\n name: 'Campaigns',\n label: t('SIDEBAR.CAMPAIGNS'),\n icon: 'i-lucide-megaphone',\n children: [\n {\n name: 'Live chat',\n label: t('SIDEBAR.LIVE_CHAT'),\n to: accountScopedRoute('campaigns_livechat_index'),\n },\n {\n name: 'SMS',\n label: t('SIDEBAR.SMS'),\n to: accountScopedRoute('campaigns_sms_index'),\n },\n ],\n },\n {\n name: 'Portals',\n label: t('SIDEBAR.HELP_CENTER.TITLE'),\n icon: 'i-lucide-library-big',\n children: [\n {\n name: 'Articles',\n label: t('SIDEBAR.HELP_CENTER.ARTICLES'),\n activeOn: [\n 'portals_articles_index',\n 'portals_articles_new',\n 'portals_articles_edit',\n ],\n to: accountScopedRoute('portals_index', {\n navigationPath: 'portals_articles_index',\n }),\n },\n {\n name: 'Categories',\n label: t('SIDEBAR.HELP_CENTER.CATEGORIES'),\n activeOn: [\n 'portals_categories_index',\n 'portals_categories_articles_index',\n 'portals_categories_articles_edit',\n ],\n to: accountScopedRoute('portals_index', {\n navigationPath: 'portals_categories_index',\n }),\n },\n {\n name: 'Locales',\n label: t('SIDEBAR.HELP_CENTER.LOCALES'),\n activeOn: ['portals_locales_index'],\n to: accountScopedRoute('portals_index', {\n navigationPath: 'portals_locales_index',\n }),\n },\n {\n name: 'Settings',\n label: t('SIDEBAR.HELP_CENTER.SETTINGS'),\n activeOn: ['portals_settings_index'],\n to: accountScopedRoute('portals_index', {\n navigationPath: 'portals_settings_index',\n }),\n },\n ],\n },\n {\n name: 'Settings',\n label: t('SIDEBAR.SETTINGS'),\n icon: 'i-lucide-bolt',\n children: [\n {\n name: 'Settings Account Settings',\n label: t('SIDEBAR.ACCOUNT_SETTINGS'),\n icon: 'i-lucide-briefcase',\n to: accountScopedRoute('general_settings_index'),\n },\n {\n name: 'Settings Agents',\n label: t('SIDEBAR.AGENTS'),\n icon: 'i-lucide-square-user',\n to: accountScopedRoute('agent_list'),\n },\n {\n name: 'Settings Teams',\n label: t('SIDEBAR.TEAMS'),\n icon: 'i-lucide-users',\n to: accountScopedRoute('settings_teams_list'),\n },\n {\n name: 'Settings Inboxes',\n label: t('SIDEBAR.INBOXES'),\n icon: 'i-lucide-inbox',\n to: accountScopedRoute('settings_inbox_list'),\n },\n {\n name: 'Settings Labels',\n label: t('SIDEBAR.LABELS'),\n icon: 'i-lucide-tags',\n to: accountScopedRoute('labels_list'),\n },\n {\n name: 'Settings Custom Attributes',\n label: t('SIDEBAR.CUSTOM_ATTRIBUTES'),\n icon: 'i-lucide-code',\n to: accountScopedRoute('attributes_list'),\n },\n {\n name: 'Settings Automation',\n label: t('SIDEBAR.AUTOMATION'),\n icon: 'i-lucide-workflow',\n to: accountScopedRoute('automation_list'),\n },\n {\n name: 'Settings Agent Bots',\n label: t('SIDEBAR.AGENT_BOTS'),\n icon: 'i-lucide-bot',\n to: accountScopedRoute('agent_bots'),\n },\n {\n name: 'Settings Macros',\n label: t('SIDEBAR.MACROS'),\n icon: 'i-lucide-toy-brick',\n to: accountScopedRoute('macros_wrapper'),\n },\n {\n name: 'Settings Canned Responses',\n label: t('SIDEBAR.CANNED_RESPONSES'),\n icon: 'i-lucide-message-square-quote',\n to: accountScopedRoute('canned_list'),\n },\n {\n name: 'Settings Integrations',\n label: t('SIDEBAR.INTEGRATIONS'),\n icon: 'i-lucide-blocks',\n to: accountScopedRoute('settings_applications'),\n },\n {\n name: 'Settings Audit Logs',\n label: t('SIDEBAR.AUDIT_LOGS'),\n icon: 'i-lucide-briefcase',\n to: accountScopedRoute('auditlogs_list'),\n },\n {\n name: 'Settings Custom Roles',\n label: t('SIDEBAR.CUSTOM_ROLES'),\n icon: 'i-lucide-shield-plus',\n to: accountScopedRoute('custom_roles_list'),\n },\n {\n name: 'Settings Sla',\n label: t('SIDEBAR.SLA'),\n icon: 'i-lucide-clock-alert',\n to: accountScopedRoute('sla_list'),\n },\n {\n name: 'Settings Billing',\n label: t('SIDEBAR.BILLING'),\n icon: 'i-lucide-credit-card',\n to: accountScopedRoute('billing_settings_index'),\n },\n ],\n },\n ];\n});\n</script>\n\n<template>\n <aside\n class=\"w-[12.5rem] bg-n-solid-2 rtl:border-l ltr:border-r border-n-weak h-screen flex flex-col text-sm pb-1\"\n >\n <section class=\"grid gap-2 mt-2 mb-4\">\n <div class=\"flex items-center min-w-0 gap-2 px-2\">\n <div class=\"grid flex-shrink-0 size-6 place-content-center\">\n <Logo class=\"size-4\" />\n </div>\n <div class=\"flex-shrink-0 w-px h-3 bg-n-strong\" />\n <SidebarAccountSwitcher\n class=\"flex-grow min-w-0 -mx-1\"\n @show-create-account-modal=\"emit('showCreateAccountModal')\"\n />\n </div>\n <div class=\"flex gap-2 px-2\">\n <RouterLink\n :to=\"{ name: 'search' }\"\n class=\"flex items-center w-full gap-2 px-2 py-1 rounded-lg h-7 outline outline-1 outline-n-weak bg-n-solid-3 dark:bg-n-black/30\"\n >\n <span class=\"flex-shrink-0 i-lucide-search size-4 text-n-slate-11\" />\n <span class=\"flex-grow text-left\">\n {{ t('COMBOBOX.SEARCH_PLACEHOLDER') }}\n </span>\n <span\n class=\"hidden tracking-wide pointer-events-none select-none text-n-slate-10\"\n >\n {{ searchShortcut }}\n </span>\n </RouterLink>\n <ComposeConversation align-position=\"right\">\n <template #trigger=\"{ toggle }\">\n <Button\n icon=\"i-lucide-pen-line\"\n color=\"slate\"\n size=\"sm\"\n class=\"!h-7 !bg-n-solid-3 dark:!bg-n-black/30 !outline-n-weak !text-n-slate-11\"\n @click=\"toggle\"\n />\n </template>\n </ComposeConversation>\n </div>\n </section>\n <nav class=\"grid flex-grow gap-2 px-2 pb-5 overflow-y-scroll no-scrollbar\">\n <ul class=\"flex flex-col gap-2 m-0 list-none\">\n <SidebarGroup\n v-for=\"item in menuItems\"\n :key=\"item.name\"\n v-bind=\"item\"\n />\n </ul>\n </nav>\n <section\n class=\"p-1 border-t border-n-weak shadow-[0px_-2px_4px_0px_rgba(27,28,29,0.02)] flex-shrink-0 flex justify-between gap-2 items-center\"\n >\n <SidebarProfileMenu\n @open-key-shortcut-modal=\"emit('openKeyShortcutModal')\"\n />\n </section>\n </aside>\n</template>\n","export const KEYS = {\n ALT: 'Alt / ⌥',\n WIN: 'Win / ⌘',\n SHIFT: 'Shift',\n SLASH: '/',\n UP: 'Up',\n DOWN: 'Down',\n};\n\nexport const SHORTCUT_KEYS = [\n {\n id: 1,\n label: 'OPEN_CONVERSATION',\n displayKeys: [KEYS.ALT, 'J', KEYS.SLASH, KEYS.ALT, 'K'],\n keySet: ['Alt+KeyJ', 'Alt+KeyK'],\n },\n {\n id: 2,\n label: 'RESOLVE_AND_NEXT',\n displayKeys: [KEYS.WIN, KEYS.ALT, 'E'],\n keySet: ['$mod+Alt+KeyE'],\n },\n {\n id: 3,\n label: 'NAVIGATE_DROPDOWN',\n displayKeys: [KEYS.UP, KEYS.DOWN],\n keySet: ['ArrowUp', 'ArrowDown'],\n },\n {\n id: 4,\n label: 'RESOLVE_CONVERSATION',\n displayKeys: [KEYS.ALT, 'E'],\n keySet: ['Alt+KeyE'],\n },\n {\n id: 5,\n label: 'GO_TO_CONVERSATION_DASHBOARD',\n displayKeys: [KEYS.ALT, 'C'],\n keySet: ['Alt+KeyC'],\n },\n {\n id: 6,\n label: 'ADD_ATTACHMENT',\n displayKeys: [KEYS.WIN, KEYS.ALT, 'A'],\n keySet: ['$mod+Alt+KeyA'],\n },\n {\n id: 7,\n label: 'GO_TO_CONTACTS_DASHBOARD',\n displayKeys: [KEYS.ALT, 'V'],\n keySet: ['Alt+KeyV'],\n },\n {\n id: 8,\n label: 'TOGGLE_SIDEBAR',\n displayKeys: [KEYS.ALT, 'O'],\n keySet: ['Alt+KeyO'],\n },\n {\n id: 9,\n label: 'GO_TO_REPORTS_SIDEBAR',\n displayKeys: [KEYS.ALT, 'R'],\n keySet: ['Alt+KeyR'],\n },\n {\n id: 10,\n label: 'MOVE_TO_NEXT_TAB',\n displayKeys: [KEYS.ALT, 'N'],\n keySet: ['Alt+KeyN'],\n },\n {\n id: 11,\n label: 'GO_TO_SETTINGS',\n displayKeys: [KEYS.ALT, 'S'],\n keySet: ['Alt+KeyS'],\n },\n {\n id: 12,\n label: 'SWITCH_TO_PRIVATE_NOTE',\n displayKeys: [KEYS.ALT, 'P'],\n keySet: ['Alt+KeyP'],\n },\n {\n id: 13,\n label: 'SWITCH_TO_REPLY',\n displayKeys: [KEYS.ALT, 'L'],\n keySet: ['Alt+KeyL'],\n },\n {\n id: 14,\n label: 'TOGGLE_SNOOZE_DROPDOWN',\n displayKeys: [KEYS.ALT, 'M'],\n keySet: ['Alt+KeyM'],\n },\n];\n","<script setup>\nimport { ref, computed, onMounted } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useDetectKeyboardLayout } from 'dashboard/composables/useDetectKeyboardLayout';\nimport { SHORTCUT_KEYS, KEYS } from './constants';\nimport {\n LAYOUT_QWERTZ,\n keysToModifyInQWERTZ,\n} from 'shared/helpers/KeyboardHelpers';\nimport Hotkey from 'dashboard/components/base/Hotkey.vue';\n\ndefineProps({ show: Boolean });\ndefineEmits(['close']);\n\nconst { t } = useI18n();\nconst currentLayout = ref(null);\n\nconst title = computed(\n () => item => t(`KEYBOARD_SHORTCUTS.TITLE.${item.label}`)\n);\n\n// Added this function to check if the keySet needs a shift key\n// This is used to display the shift key in the modal\n// If the current layout is QWERTZ and the keySet contains a key that needs a shift key\n// If layout is QWERTZ then we add the Shift+keysToModify to fix an known issue\n// https://github.com/chatwoot/chatwoot/issues/9492\nconst needsShiftKey = computed(\n () => keySet =>\n currentLayout.value === LAYOUT_QWERTZ &&\n keySet.some(key => keysToModifyInQWERTZ.has(key))\n);\n\nonMounted(async () => {\n currentLayout.value = await useDetectKeyboardLayout();\n});\n</script>\n\n<template>\n <woot-modal :show=\"show\" size=\"medium\" :on-close=\"() => $emit('close')\">\n <div class=\"flex flex-col h-auto overflow-auto\">\n <woot-modal-header\n :header-title=\"$t('SIDEBAR_ITEMS.KEYBOARD_SHORTCUTS')\"\n />\n <div class=\"grid grid-cols-2 px-8 pt-0 pb-4 mt-6 gap-x-5 gap-y-3\">\n <div class=\"flex justify-between items-center min-w-[25rem]\">\n <h5 class=\"text-sm text-slate-800 dark:text-slate-100\">\n {{ $t('KEYBOARD_SHORTCUTS.TOGGLE_MODAL') }}\n </h5>\n <div class=\"flex items-center gap-2 mb-1 ml-2\">\n <Hotkey custom-class=\"min-h-[28px] min-w-[60px] normal-case key\">\n {{ KEYS.WIN }}\n </Hotkey>\n <Hotkey custom-class=\"min-h-[28px] min-w-[36px] key\">\n {{ KEYS.SLASH }}\n </Hotkey>\n </div>\n </div>\n </div>\n\n <div class=\"grid grid-cols-2 px-8 pt-0 pb-8 gap-x-5 gap-y-3\">\n <div\n v-for=\"shortcut in SHORTCUT_KEYS\"\n :key=\"shortcut.id\"\n class=\"flex justify-between items-center min-w-[25rem]\"\n >\n <h5 class=\"text-sm text-slate-800 min-w-[36px] dark:text-slate-100\">\n {{ title(shortcut) }}\n </h5>\n <div class=\"flex items-center gap-2 mb-1 ml-2\">\n <template v-if=\"needsShiftKey(shortcut.keySet)\">\n <Hotkey custom-class=\"min-h-[28px] min-w-[36px] key\">\n {{ KEYS.SHIFT }}\n </Hotkey>\n </template>\n\n <template v-for=\"(key, index) in shortcut.displayKeys\" :key=\"index\">\n <template v-if=\"key !== KEYS.SLASH\">\n <Hotkey\n custom-class=\"min-h-[28px] min-w-[36px] key normal-case\"\n >\n {{ key }}\n </Hotkey>\n </template>\n <span\n v-else\n class=\"flex items-center text-sm font-semibold text-slate-800 dark:text-slate-100\"\n >\n {{ key }}\n </span>\n </template>\n </div>\n </div>\n </div>\n </div>\n </woot-modal>\n</template>\n\n<style scoped>\n.key {\n @apply py-2 px-2.5 font-semibold text-xs text-slate-700 dark:text-slate-100 bg-slate-75 dark:bg-slate-900 shadow border-b-2 rtl:border-l-2 ltr:border-r-2 border-slate-200 dark:border-slate-700;\n}\n</style>\n","<script>\nimport { mapGetters } from 'vuex';\nexport default {\n props: {\n showAccountModal: {\n type: Boolean,\n default: true,\n },\n },\n emits: ['closeAccountModal', 'showCreateAccountModal'],\n computed: {\n ...mapGetters({\n accountId: 'getCurrentAccountId',\n currentUser: 'getCurrentUser',\n globalConfig: 'globalConfig/get',\n }),\n },\n methods: {\n onChangeAccount(accountId) {\n const accountUrl = `/app/accounts/${accountId}/dashboard`;\n window.location.href = accountUrl;\n },\n },\n};\n</script>\n\n<template>\n <woot-modal\n :show=\"showAccountModal\"\n :on-close=\"() => $emit('closeAccountModal')\"\n >\n <woot-modal-header\n :header-title=\"$t('SIDEBAR_ITEMS.CHANGE_ACCOUNTS')\"\n :header-content=\"$t('SIDEBAR_ITEMS.SELECTOR_SUBTITLE')\"\n />\n <div class=\"px-8 py-4\">\n <div\n v-for=\"account in currentUser.accounts\"\n :id=\"`account-${account.id}`\"\n :key=\"account.id\"\n class=\"pt-0 pb-0\"\n >\n <button\n class=\"flex items-center justify-between w-full px-4 py-3 rounded-lg cursor-pointer expanded clear link hover:underline hover:bg-slate-25 dark:hover:bg-slate-900\"\n @click=\"onChangeAccount(account.id)\"\n >\n <span class=\"w-full\">\n <label :for=\"account.name\" class=\"text-left rtl:text-right\">\n <div\n class=\"text-lg font-medium leading-5 text-slate-700 dark:text-slate-100 hover:underline-offset-4\"\n >\n {{ account.name }}\n </div>\n <div\n class=\"text-xs font-medium lowercase text-slate-500 dark:text-slate-500 hover:underline-offset-4\"\n >\n {{\n account.custom_role_id\n ? account.custom_role.name\n : account.role\n }}\n </div>\n </label>\n </span>\n <fluent-icon\n v-show=\"account.id === accountId\"\n class=\"text-slate-800 dark:text-slate-100\"\n icon=\"checkmark-circle\"\n type=\"solid\"\n size=\"24\"\n />\n </button>\n </div>\n </div>\n\n <div\n v-if=\"globalConfig.createNewAccountFromDashboard\"\n class=\"flex items-center justify-end gap-2 px-8 pt-4 pb-8\"\n >\n <button\n class=\"w-full button success large expanded nice\"\n @click=\"$emit('showCreateAccountModal')\"\n >\n {{ $t('CREATE_ACCOUNT.NEW_ACCOUNT') }}\n </button>\n </div>\n </woot-modal>\n</template>\n","<script>\nimport Thumbnail from 'dashboard/components/widgets/Thumbnail.vue';\nimport { dynamicTime } from 'shared/helpers/timeHelper';\n\nexport default {\n components: {\n Thumbnail,\n },\n props: {\n notificationItem: {\n type: Object,\n default: () => {},\n },\n },\n emits: ['openNotification'],\n computed: {\n notificationAssignee() {\n const { primary_actor: primaryActor } = this.notificationItem;\n return primaryActor?.meta?.assignee;\n },\n hasNotificationAssignee() {\n return !!this.notificationAssignee;\n },\n notificationAssigneeName() {\n return this.notificationAssignee?.name || '';\n },\n notificationAssigneeThumbnail() {\n return this.notificationAssignee?.thumbnail || '';\n },\n },\n methods: {\n dynamicTime,\n onClickOpenNotification() {\n this.$emit('openNotification', this.notificationItem);\n },\n },\n};\n</script>\n\n<template>\n <div class=\"w-full\">\n <woot-button\n size=\"expanded\"\n color-scheme=\"secondary\"\n variant=\"link\"\n class=\"w-full\"\n @click=\"onClickOpenNotification()\"\n >\n <div\n class=\"flex-row items-center p-2.5 leading-[1.4] border-b border-solid border-slate-50 dark:border-slate-700 flex w-full hover:bg-slate-75 dark:hover:bg-slate-900 hover:rounded-md\"\n >\n <div\n v-if=\"!notificationItem.read_at\"\n class=\"w-2 h-2 rounded-full bg-woot-500\"\n />\n <div v-else class=\"flex w-2\" />\n <div\n class=\"flex-col ml-2.5 overflow-hidden w-full flex justify-between\"\n >\n <div class=\"flex justify-between\">\n <div class=\"flex items-center\">\n <span class=\"font-bold text-slate-800 dark:text-slate-100\">\n {{\n `#${\n notificationItem.primary_actor\n ? notificationItem.primary_actor.id\n : $t(`NOTIFICATIONS_PAGE.DELETE_TITLE`)\n }`\n }}\n </span>\n <span\n class=\"text-xxs p-0.5 px-1 my-0 mx-2 bg-slate-50 dark:bg-slate-700 rounded-md\"\n >\n {{\n $t(\n `NOTIFICATIONS_PAGE.TYPE_LABEL.${notificationItem.notification_type}`\n )\n }}\n </span>\n </div>\n <div v-if=\"hasNotificationAssignee\">\n <Thumbnail\n :src=\"notificationAssigneeThumbnail\"\n size=\"16px\"\n :username=\"notificationAssigneeName\"\n />\n </div>\n </div>\n <div class=\"flex w-full\">\n <span\n class=\"overflow-hidden font-normal text-slate-700 dark:text-slate-200 whitespace-nowrap text-ellipsis\"\n >\n {{ notificationItem.push_message_title }}\n </span>\n </div>\n <span\n class=\"flex mt-1 font-semibold text-slate-500 dark:text-slate-400 text-xxs\"\n >\n {{ dynamicTime(notificationItem.last_activity_at) }}\n </span>\n </div>\n </div>\n </woot-button>\n </div>\n</template>\n","<script>\nimport Spinner from 'shared/components/Spinner.vue';\nimport EmptyState from 'dashboard/components/widgets/EmptyState.vue';\nimport NotificationPanelItem from './NotificationPanelItem.vue';\n\nexport default {\n components: {\n NotificationPanelItem,\n Spinner,\n EmptyState,\n },\n props: {\n notifications: {\n type: Array,\n default: () => [],\n },\n isLoading: {\n type: Boolean,\n default: true,\n },\n onClickNotification: {\n type: Function,\n default: () => {},\n },\n inLastPage: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['close'],\n computed: {\n showEmptyResult() {\n return !this.isLoading && this.notifications.length === 0;\n },\n },\n methods: {\n openNotificationPage() {\n if (this.$route.name !== 'notifications_index') {\n this.$router.push({\n name: 'notifications_index',\n });\n }\n this.$emit('close');\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex-col py-2 px-2.5 overflow-auto h-full flex\">\n <NotificationPanelItem\n v-for=\"notificationItem in notifications\"\n v-show=\"!isLoading\"\n :key=\"notificationItem.id\"\n :notification-item=\"notificationItem\"\n @open-notification=\"onClickNotification\"\n />\n <EmptyState\n v-if=\"showEmptyResult\"\n :title=\"$t('NOTIFICATIONS_PAGE.UNREAD_NOTIFICATION.EMPTY_MESSAGE')\"\n />\n <woot-button\n v-if=\"!isLoading && inLastPage\"\n size=\"expanded\"\n variant=\"clear\"\n color-scheme=\"primary\"\n class-names=\"mt-3\"\n @click=\"openNotificationPage\"\n >\n {{ $t('NOTIFICATIONS_PAGE.UNREAD_NOTIFICATION.ALL_NOTIFICATIONS') }}\n </woot-button>\n <div\n v-if=\"isLoading\"\n class=\"flex items-center justify-center mx-2 my-12 text-sm font-medium\"\n >\n <Spinner />\n <span>{{\n $t('NOTIFICATIONS_PAGE.UNREAD_NOTIFICATION.LOADING_UNREAD_MESSAGE')\n }}</span>\n </div>\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport NotificationPanelList from './NotificationPanelList.vue';\nimport { useTrack } from 'dashboard/composables';\nimport { ACCOUNT_EVENTS } from '../../../../helper/AnalyticsHelper/events';\n\nexport default {\n components: {\n NotificationPanelList,\n },\n emits: ['close'],\n data() {\n return {\n pageSize: 15,\n };\n },\n computed: {\n ...mapGetters({\n meta: 'notifications/getMeta',\n records: 'notifications/getNotifications',\n uiFlags: 'notifications/getUIFlags',\n }),\n totalUnreadNotifications() {\n return this.meta.unreadCount;\n },\n noUnreadNotificationAvailable() {\n return this.meta.unreadCount === 0;\n },\n getUnreadNotifications() {\n return this.records.filter(notification => notification.read_at === null);\n },\n currentPage() {\n return Number(this.meta.currentPage);\n },\n lastPage() {\n if (this.totalUnreadNotifications > 15) {\n return Math.ceil(this.totalUnreadNotifications / this.pageSize);\n }\n return 1;\n },\n inFirstPage() {\n const page = Number(this.meta.currentPage);\n return page === 1;\n },\n inLastPage() {\n return this.currentPage === this.lastPage;\n },\n },\n mounted() {\n this.$store.dispatch('notifications/get', { page: 1 });\n },\n methods: {\n onPageChange(page) {\n this.$store.dispatch('notifications/get', { page });\n },\n openConversation(notification) {\n const {\n primary_actor_id: primaryActorId,\n primary_actor_type: primaryActorType,\n primary_actor: { id: conversationId },\n notification_type: notificationType,\n } = notification;\n\n useTrack(ACCOUNT_EVENTS.OPEN_CONVERSATION_VIA_NOTIFICATION, {\n notificationType,\n });\n this.$store.dispatch('notifications/read', {\n id: notification.id,\n primaryActorId,\n primaryActorType,\n unreadCount: this.meta.unreadCount,\n });\n this.$router.push({\n name: 'inbox_conversation',\n params: { conversation_id: conversationId },\n });\n this.$emit('close');\n },\n onClickNextPage() {\n if (!this.inLastPage) {\n const page = this.currentPage + 1;\n this.onPageChange(page);\n }\n },\n onClickPreviousPage() {\n if (!this.inFirstPage) {\n const page = this.currentPage - 1;\n this.onPageChange(page);\n }\n },\n onClickFirstPage() {\n if (!this.inFirstPage) {\n const page = 1;\n this.onPageChange(page);\n }\n },\n onClickLastPage() {\n if (!this.inLastPage) {\n const page = this.lastPage;\n this.onPageChange(page);\n }\n },\n onMarkAllDoneClick() {\n useTrack(ACCOUNT_EVENTS.MARK_AS_READ_NOTIFICATIONS);\n this.$store.dispatch('notifications/readAll');\n },\n openAudioNotificationSettings() {\n this.$router.push({ name: 'profile_settings_index' });\n this.closeNotificationPanel();\n this.$nextTick(() => {\n const audioSettings = document.getElementById(\n 'profile-settings-notifications'\n );\n if (audioSettings) {\n // TODO [ref](https://github.com/chatwoot/chatwoot/pull/6233#discussion_r1069636890)\n audioSettings.scrollIntoView(\n { behavior: 'smooth', block: 'start' },\n 150\n );\n }\n });\n },\n closeNotificationPanel() {\n this.$emit('close');\n },\n },\n};\n</script>\n\n<template>\n <div class=\"modal-mask\">\n <div\n v-on-clickaway=\"closeNotificationPanel\"\n class=\"flex-col h-[90vh] w-[32.5rem] flex justify-between z-10 rounded-md shadow-md absolute bg-white dark:bg-slate-800 left-14 rtl:left-auto rtl:right-14 m-4\"\n >\n <div\n class=\"flex flex-row items-center justify-between w-full px-6 pt-5 pb-3 border-b border-solid border-slate-50 dark:border-slate-700\"\n >\n <div class=\"flex items-center\">\n <span class=\"text-xl font-bold text-slate-800 dark:text-slate-100\">\n {{ $t('NOTIFICATIONS_PAGE.UNREAD_NOTIFICATION.TITLE') }}\n </span>\n <span\n v-if=\"totalUnreadNotifications\"\n class=\"px-2 py-1 ml-2 mr-2 font-semibold rounded-md text-slate-700 dark:text-slate-200 text-xxs bg-slate-50 dark:bg-slate-700\"\n >\n {{ totalUnreadNotifications }}\n </span>\n </div>\n <div class=\"flex gap-2\">\n <woot-button\n v-if=\"!noUnreadNotificationAvailable\"\n color-scheme=\"primary\"\n variant=\"smooth\"\n size=\"tiny\"\n :is-loading=\"uiFlags.isUpdating\"\n @click=\"onMarkAllDoneClick\"\n >\n {{ $t('NOTIFICATIONS_PAGE.MARK_ALL_DONE') }}\n </woot-button>\n <woot-button\n color-scheme=\"secondary\"\n variant=\"smooth\"\n size=\"tiny\"\n icon=\"settings\"\n @click=\"openAudioNotificationSettings\"\n />\n <woot-button\n color-scheme=\"secondary\"\n variant=\"link\"\n size=\"tiny\"\n icon=\"dismiss\"\n @click=\"closeNotificationPanel\"\n />\n </div>\n </div>\n <NotificationPanelList\n :notifications=\"getUnreadNotifications\"\n :is-loading=\"uiFlags.isFetching\"\n :on-click-notification=\"openConversation\"\n :in-last-page=\"inLastPage\"\n @close=\"closeNotificationPanel\"\n />\n <div\n v-if=\"records.length !== 0\"\n class=\"flex items-center justify-between px-5 py-1\"\n >\n <div class=\"flex\">\n <woot-button\n size=\"medium\"\n variant=\"clear\"\n color-scheme=\"secondary\"\n :is-disabled=\"inFirstPage\"\n @click=\"onClickFirstPage\"\n >\n <fluent-icon icon=\"chevron-left\" size=\"16\" />\n <fluent-icon\n icon=\"chevron-left\"\n size=\"16\"\n class=\"rtl:-mr-3 ltr:-ml-3\"\n />\n </woot-button>\n <woot-button\n color-scheme=\"secondary\"\n variant=\"clear\"\n size=\"medium\"\n icon=\"chevron-left\"\n :disabled=\"inFirstPage\"\n @click=\"onClickPreviousPage\"\n />\n </div>\n <span class=\"font-semibold text-xxs text-slate-500 dark:text-slate-400\">\n {{ currentPage }} - {{ lastPage }}\n </span>\n <div class=\"flex\">\n <woot-button\n color-scheme=\"secondary\"\n variant=\"clear\"\n size=\"medium\"\n icon=\"chevron-right\"\n :disabled=\"inLastPage\"\n @click=\"onClickNextPage\"\n />\n <woot-button\n size=\"medium\"\n variant=\"clear\"\n color-scheme=\"secondary\"\n :disabled=\"inLastPage\"\n @click=\"onClickLastPage\"\n >\n <fluent-icon icon=\"chevron-right\" size=\"16\" />\n <fluent-icon\n icon=\"chevron-right\"\n size=\"16\"\n class=\"rtl:-mr-3 ltr:-ml-3\"\n />\n </woot-button>\n </div>\n </div>\n <div v-else />\n </div>\n </div>\n</template>\n","<script>\nimport { mapGetters } from 'vuex';\nimport { defineAsyncComponent } from 'vue';\n\nimport NextSidebar from 'next/sidebar/Sidebar.vue';\nimport WootKeyShortcutModal from 'dashboard/components/widgets/modal/WootKeyShortcutModal.vue';\nimport AddAccountModal from 'dashboard/components/layout/sidebarComponents/AddAccountModal.vue';\nimport AccountSelector from 'dashboard/components/layout/sidebarComponents/AccountSelector.vue';\nimport AddLabelModal from 'dashboard/routes/dashboard/settings/labels/AddLabel.vue';\nimport NotificationPanel from 'dashboard/routes/dashboard/notifications/components/NotificationPanel.vue';\n\nimport { useUISettings } from 'dashboard/composables/useUISettings';\nimport { useAccount } from 'dashboard/composables/useAccount';\n\nimport wootConstants from 'dashboard/constants/globals';\nimport { BUS_EVENTS } from 'shared/constants/busEvents';\nimport { FEATURE_FLAGS } from 'dashboard/featureFlags';\n\nconst CommandBar = defineAsyncComponent(\n () => import('./commands/commandbar.vue')\n);\n\nconst Sidebar = defineAsyncComponent(\n () => import('../../components/layout/Sidebar.vue')\n);\nimport { emitter } from 'shared/helpers/mitt';\n\nexport default {\n components: {\n NextSidebar,\n Sidebar,\n CommandBar,\n WootKeyShortcutModal,\n AddAccountModal,\n AccountSelector,\n AddLabelModal,\n NotificationPanel,\n },\n setup() {\n const { uiSettings, updateUISettings } = useUISettings();\n const { accountId } = useAccount();\n\n return {\n uiSettings,\n updateUISettings,\n accountId,\n };\n },\n data() {\n return {\n showAccountModal: false,\n showCreateAccountModal: false,\n showAddLabelModal: false,\n showShortcutModal: false,\n isNotificationPanel: false,\n displayLayoutType: '',\n hasBanner: '',\n };\n },\n computed: {\n ...mapGetters({\n isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount',\n }),\n currentRoute() {\n return ' ';\n },\n isSidebarOpen() {\n const { show_secondary_sidebar: showSecondarySidebar } = this.uiSettings;\n return showSecondarySidebar;\n },\n previouslyUsedDisplayType() {\n const {\n previously_used_conversation_display_type: conversationDisplayType,\n } = this.uiSettings;\n return conversationDisplayType;\n },\n previouslyUsedSidebarView() {\n const { previously_used_sidebar_view: showSecondarySidebar } =\n this.uiSettings;\n return showSecondarySidebar;\n },\n showNextSidebar() {\n return this.isFeatureEnabledonAccount(\n this.accountId,\n FEATURE_FLAGS.CHATWOOT_V4\n );\n },\n },\n watch: {\n displayLayoutType() {\n const { LAYOUT_TYPES } = wootConstants;\n this.updateUISettings({\n conversation_display_type:\n this.displayLayoutType === LAYOUT_TYPES.EXPANDED\n ? LAYOUT_TYPES.EXPANDED\n : this.previouslyUsedDisplayType,\n show_secondary_sidebar:\n this.displayLayoutType === LAYOUT_TYPES.EXPANDED\n ? false\n : this.previouslyUsedSidebarView,\n });\n },\n },\n mounted() {\n this.handleResize();\n this.$nextTick(this.checkBanner);\n window.addEventListener('resize', this.handleResize);\n window.addEventListener('resize', this.checkBanner);\n emitter.on(BUS_EVENTS.TOGGLE_SIDEMENU, this.toggleSidebar);\n },\n unmounted() {\n window.removeEventListener('resize', this.handleResize);\n window.removeEventListener('resize', this.checkBanner);\n emitter.off(BUS_EVENTS.TOGGLE_SIDEMENU, this.toggleSidebar);\n },\n\n methods: {\n checkBanner() {\n this.hasBanner =\n document.getElementsByClassName('woot-banner').length > 0;\n },\n handleResize() {\n const { SMALL_SCREEN_BREAKPOINT, LAYOUT_TYPES } = wootConstants;\n let throttled = false;\n const delay = 150;\n\n if (throttled) {\n return;\n }\n throttled = true;\n\n setTimeout(() => {\n throttled = false;\n if (window.innerWidth <= SMALL_SCREEN_BREAKPOINT) {\n this.displayLayoutType = LAYOUT_TYPES.EXPANDED;\n } else {\n this.displayLayoutType = LAYOUT_TYPES.CONDENSED;\n }\n }, delay);\n },\n toggleSidebar() {\n this.updateUISettings({\n show_secondary_sidebar: !this.isSidebarOpen,\n previously_used_sidebar_view: !this.isSidebarOpen,\n });\n },\n openCreateAccountModal() {\n this.showAccountModal = false;\n this.showCreateAccountModal = true;\n },\n closeCreateAccountModal() {\n this.showCreateAccountModal = false;\n },\n toggleAccountModal() {\n this.showAccountModal = !this.showAccountModal;\n },\n toggleKeyShortcutModal() {\n this.showShortcutModal = true;\n },\n closeKeyShortcutModal() {\n this.showShortcutModal = false;\n },\n showAddLabelPopup() {\n this.showAddLabelModal = true;\n },\n hideAddLabelPopup() {\n this.showAddLabelModal = false;\n },\n openNotificationPanel() {\n this.isNotificationPanel = true;\n },\n closeNotificationPanel() {\n this.isNotificationPanel = false;\n },\n },\n};\n</script>\n\n<template>\n <div class=\"flex flex-wrap app-wrapper dark:text-slate-300\">\n <NextSidebar\n v-if=\"showNextSidebar\"\n @toggle-account-modal=\"toggleAccountModal\"\n @open-key-shortcut-modal=\"toggleKeyShortcutModal\"\n @close-key-shortcut-modal=\"closeKeyShortcutModal\"\n @show-create-account-modal=\"openCreateAccountModal\"\n />\n <Sidebar\n v-else\n :route=\"currentRoute\"\n :has-banner=\"hasBanner\"\n :show-secondary-sidebar=\"isSidebarOpen\"\n @open-notification-panel=\"openNotificationPanel\"\n @toggle-account-modal=\"toggleAccountModal\"\n @open-key-shortcut-modal=\"toggleKeyShortcutModal\"\n @close-key-shortcut-modal=\"closeKeyShortcutModal\"\n @show-add-label-popup=\"showAddLabelPopup\"\n />\n <main class=\"flex flex-1 h-full min-h-0 px-0 overflow-hidden\">\n <router-view />\n <CommandBar />\n <AccountSelector\n :show-account-modal=\"showAccountModal\"\n @close-account-modal=\"toggleAccountModal\"\n @show-create-account-modal=\"openCreateAccountModal\"\n />\n <AddAccountModal\n :show=\"showCreateAccountModal\"\n @close-account-create-modal=\"closeCreateAccountModal\"\n />\n <WootKeyShortcutModal\n v-model:show=\"showShortcutModal\"\n @close=\"closeKeyShortcutModal\"\n @clickaway=\"closeKeyShortcutModal\"\n />\n <NotificationPanel\n v-if=\"isNotificationPanel\"\n @close=\"closeNotificationPanel\"\n />\n <woot-modal\n v-model:show=\"showAddLabelModal\"\n :on-close=\"hideAddLabelPopup\"\n >\n <AddLabelModal @close=\"hideAddLabelPopup\" />\n </woot-modal>\n </main>\n </div>\n</template>\n","<script setup>\nimport EmptyState from 'dashboard/components/widgets/EmptyState.vue';\nimport { onMounted } from 'vue';\n\nconst toggleSupportWidgetVisibility = () => {\n if (window.$chatwoot) {\n window.$chatwoot.toggleBubbleVisibility('show');\n }\n};\n\nconst setupListenerForWidgetEvent = () => {\n window.addEventListener('chatwoot:on-message', () => {\n toggleSupportWidgetVisibility();\n });\n};\n\nonMounted(() => {\n toggleSupportWidgetVisibility();\n setupListenerForWidgetEvent();\n});\n</script>\n\n<template>\n <div class=\"items-center bg-slate-50 flex justify-center h-full w-full\">\n <EmptyState\n :title=\"$t('APP_GLOBAL.ACCOUNT_SUSPENDED.TITLE')\"\n :message=\"$t('APP_GLOBAL.ACCOUNT_SUSPENDED.MESSAGE')\"\n />\n </div>\n</template>\n","import settings from './settings/settings.routes';\nimport conversation from './conversation/conversation.routes';\nimport { routes as searchRoutes } from '../../modules/search/search.routes';\nimport { routes as contactRoutes } from './contacts/routes';\nimport { routes as notificationRoutes } from './notifications/routes';\nimport { routes as inboxRoutes } from './inbox/routes';\nimport { frontendURL } from '../../helper/URLHelper';\nimport helpcenterRoutes from './helpcenter/helpcenter.routes';\nimport campaignsRoutes from './campaigns/campaigns.routes';\nimport { routes as captainRoutes } from './captain/captain.routes';\nimport AppContainer from './Dashboard.vue';\nimport Suspended from './suspended/Index.vue';\n\nexport default {\n routes: [\n {\n path: frontendURL('accounts/:accountId'),\n component: AppContainer,\n children: [\n ...captainRoutes,\n ...inboxRoutes,\n ...conversation.routes,\n ...settings.routes,\n ...contactRoutes,\n ...searchRoutes,\n ...notificationRoutes,\n ...helpcenterRoutes.routes,\n ...campaignsRoutes.routes,\n ],\n },\n {\n path: frontendURL('accounts/:accountId/suspended'),\n name: 'account_suspended',\n meta: {\n permissions: ['administrator', 'agent', 'custom_role'],\n },\n component: Suspended,\n },\n ],\n};\n","import { createRouter, createWebHistory } from 'vue-router';\n\nimport { frontendURL } from '../helper/URLHelper';\nimport dashboard from './dashboard/dashboard.routes';\nimport store from 'dashboard/store';\nimport { validateLoggedInRoutes } from '../helper/routeHelpers';\nimport AnalyticsHelper from '../helper/AnalyticsHelper';\nimport { buildPermissionsFromRouter } from '../helper/permissionsHelper';\n\nconst routes = [...dashboard.routes];\n\nexport const router = createRouter({ history: createWebHistory(), routes });\nexport const routesWithPermissions = buildPermissionsFromRouter(routes);\n\nexport const validateAuthenticateRoutePermission = (to, next) => {\n const { isLoggedIn, getCurrentUser: user } = store.getters;\n\n if (!isLoggedIn) {\n window.location.assign('/app/login');\n return '';\n }\n\n if (!to.name) {\n return next(frontendURL(`accounts/${user.account_id}/dashboard`));\n }\n\n const nextRoute = validateLoggedInRoutes(to, store.getters.getCurrentUser);\n return nextRoute ? next(frontendURL(nextRoute)) : next();\n};\n\nexport const initalizeRouter = () => {\n const userAuthentication = store.dispatch('setUser');\n\n router.beforeEach((to, _from, next) => {\n AnalyticsHelper.page(to.name || '', {\n path: to.path,\n name: to.name,\n });\n\n userAuthentication.then(() => {\n return validateAuthenticateRoutePermission(to, next, store);\n });\n });\n};\n\nexport default router;\n","import { createApp } from 'vue';\nimport { createI18n } from 'vue-i18n';\n\nimport axios from 'axios';\n// Global Components\nimport hljsVuePlugin from '@highlightjs/vue-plugin';\n\nimport Multiselect from 'vue-multiselect';\nimport { plugin, defaultConfig } from '@formkit/vue';\nimport WootSwitch from 'components/ui/Switch.vue';\nimport WootWizard from 'components/ui/Wizard.vue';\nimport FloatingVue from 'floating-vue';\nimport WootUiKit from 'dashboard/components';\nimport App from 'dashboard/App.vue';\nimport i18nMessages from 'dashboard/i18n';\nimport createAxios from 'dashboard/helper/APIHelper';\n\nimport commonHelpers, { isJSONValid } from 'dashboard/helper/commons';\nimport { sync } from 'vuex-router-sync';\nimport router, { initalizeRouter } from 'dashboard/routes';\nimport store from 'dashboard/store';\nimport constants from 'dashboard/constants/globals';\nimport * as Sentry from '@sentry/vue';\nimport {\n initializeAnalyticsEvents,\n initializeChatwootEvents,\n} from 'dashboard/helper/scriptHelpers.js';\nimport FluentIcon from 'shared/components/FluentIcon/DashboardIcon.vue';\nimport VueDOMPurifyHTML from 'vue-dompurify-html';\nimport { domPurifyConfig } from 'shared/helpers/HTMLSanitizer.js';\n\nimport { vResizeObserver } from '@vueuse/components';\nimport { directive as onClickaway } from 'vue3-click-away';\n\nimport 'floating-vue/dist/style.css';\n\nconst i18n = createI18n({\n legacy: false, // https://github.com/intlify/vue-i18n/issues/1902\n locale: 'en',\n messages: i18nMessages,\n});\n\nsync(store, router);\n\nconst app = createApp(App);\napp.use(i18n);\napp.use(store);\napp.use(router);\n\n// [VITE] Disabled this, need to renable later\nif (window.errorLoggingConfig) {\n Sentry.init({\n app,\n dsn: window.errorLoggingConfig,\n denyUrls: [\n // Chrome extensions\n /^chrome:\\/\\//i,\n /chrome-extension:/i,\n /extensions\\//i,\n\n // Locally saved copies\n /file:\\/\\//i,\n\n // Safari extensions.\n /safari-web-extension:/i,\n /safari-extension:/i,\n ],\n integrations: [Sentry.browserTracingIntegration({ router })],\n ignoreErrors: [\n 'ResizeObserver loop completed with undelivered notifications',\n ],\n });\n}\n\napp.use(VueDOMPurifyHTML, domPurifyConfig);\napp.use(WootUiKit);\napp.use(\n plugin,\n defaultConfig({\n rules: {\n JSON: ({ value }) => isJSONValid(value),\n },\n })\n);\napp.use(FloatingVue, {\n instantMove: true,\n arrowOverflow: false,\n disposeTimeout: 5000000,\n});\napp.use(hljsVuePlugin);\n\napp.component('multiselect', Multiselect);\napp.component('woot-switch', WootSwitch);\napp.component('woot-wizard', WootWizard);\napp.component('fluent-icon', FluentIcon);\n\napp.directive('resize', vResizeObserver);\napp.directive('on-clickaway', onClickaway);\n\n// load common helpers into js\ncommonHelpers();\nwindow.WootConstants = constants;\nwindow.axios = createAxios(axios);\n// [VITE] Disabled this we don't need it, we can use `useEmitter` directly\n// app.prototype.$emitter = emitter;\n\ninitializeChatwootEvents();\ninitializeAnalyticsEvents();\ninitalizeRouter();\n\nwindow.onload = () => {\n app.mount('#app');\n};\n"],"file":"assets/dashboard-yIXXAFOt.js"}