{"version":3,"file":"js/store.js","mappings":"6BAAIA,E,+GCGJ,MAAMC,GAASC,EAAAA,EAAAA,KAAI,IAQnB,SAASC,EAAUC,EAAKC,EAAMC,EAAUC,GAEtCN,EAAOO,MAAMC,KAAK,CAAEL,MAAKC,OAAMC,WAAUC,aAE3BG,IAAE,QACVC,IAAI,CAAEC,SAAU,UACxB,CAEA,SAASC,EAAWC,GAClBb,EAAOO,MAAMO,OAAOD,EAAO,GACbJ,IAAE,QACVC,IAAI,CAAEC,SAAU,GAAI,gBAAiB,IAC7C,CAGA,MAeMI,EAfaC,MACjB,MAAMC,EAAI,CACVA,MAAU,CAACd,EAAKE,EAAUa,KACxBhB,EAAUC,EAAK,QAASE,EAAUa,EAAK,EAGzCD,QAAY,CAACd,EAAKE,EAAUa,KAC1BhB,EAAUC,EAAK,UAAWE,EAAUa,EAAK,EAG3CD,QAAY,CAACd,EAAKE,EAAUa,KAC1BhB,EAAUC,EAAK,UAAWE,EAAUa,EAAK,GAE3C,OAAOD,CAAC,EAEUD,GAMpB,MAJA,WACE,MAAO,CAAEhB,SAAQe,cAAab,YAAWU,aAC3C,E,mhCC7CA,MAAMO,EAAmBC,IAChB,CACLC,qBAAoBD,UAAAA,EAAUC,sBAAqBD,aAAQ,EAARA,EAAUC,oBAC7DC,YAAWF,UAAAA,EAAUE,aAAYF,aAAQ,EAARA,EAAUE,WAC3CC,YAAWH,UAAAA,EAAUG,aAAYH,aAAQ,EAARA,EAAUG,aAIzCC,EAAY,CAChBC,eAAgBA,CAACC,EAAUC,IAAYD,EAASE,IAAIC,mBAAkBF,GACtEG,gBAAiBA,CAACJ,EAAUK,EAAUX,KACpC,MAAMY,EAAUb,EAAgBC,GAChC,OAAOM,EAASO,KAAKJ,mBAAkBE,EAAU,CAAEC,WAAU,EAE/DE,kBAAmBA,CAACR,EAAUS,EAAYf,KACxC,MAAMY,EAAUb,EAAgBC,GAChC,OAAOM,EAASU,OAAOP,mBAAgBQ,EAAAA,EAAA,GAAOF,GAAU,IAAEH,YAAU,EAEtEM,gBAAiBA,CAACZ,EAAUC,IAAYD,EAASE,IAAIC,yBAAoBF,GACzEY,eAAiBb,GAAaA,EAASE,IAAIC,6BAC3CW,YAAaA,CAACd,EAAUe,IAAOf,EAASE,IAAI,wBAAoBa,KAChEC,eAAgBA,CAAChB,EAAUK,EAAUX,KACnC,MAAMY,EAAUb,EAAgBC,GAChC,OAAOM,EAASO,KAAKJ,0BAAoBE,EAAU,CAAEC,WAAU,GAgD7DW,EAAW,CACfC,aAAcA,CAAClB,EAAUK,EAAUX,KACjC,MAAMY,EAAUb,EAAgBC,GAChC,OAAOM,EAASO,KAAKJ,+BAAmBE,EAAU,CAAEC,WAAU,EAEhEa,gBAAiBA,CAACnB,EAAUC,IAAYD,EAASE,IAAIC,wBAAuBF,IAGxEmB,EAAW,CACfC,eAAgBA,CAACrB,EAAUS,IAAeT,EAASU,OAAOP,gBAAeM,GACzEa,mBAAoBA,CAACtB,EAAUC,EAASP,KACtC,MAAMY,EAAUb,EAAgBC,GAChC,OAAOM,EAASE,IAAIC,8BAAqBQ,EAAAA,EAAA,GAAOV,GAAO,IAAEK,YAAU,EAErEiB,YAAaA,CAACvB,EAAUC,IAAYD,EAASE,IAAIC,gBAAeF,GAChEuB,uBAAwBA,CAACxB,EAAUK,IAAaL,EAASO,KAAKJ,gCAA0BE,GACxFoB,mBAAoBA,CAACzB,EAAUC,IAAYD,EAASE,IAAIC,6BAAuBF,GAC/EyB,eAAgBA,CAAC1B,EAAUC,IAAYD,EAASE,IAAIC,oBAAmBF,GACvE0B,cAAeA,CAAC3B,EAAUK,IAAaL,EAASO,KAAKJ,wBAAoBE,IAGrEuB,EAAY,CAEhBC,kBAAmBA,CAAC7B,EAAUC,EAASP,KACrC,MAAMY,EAAUb,EAAgBC,GAChC,OAAOM,EAASE,IAAIC,cAAoBQ,EAAAA,EAAA,GAAOV,GAAO,IAAEK,YAAU,EAGpEwB,kBAAmBA,CAAC9B,EAAUC,IAAYD,EAASE,IAAIC,sBAAuBF,GAE9E8B,qBAAsBA,CAAC/B,EAAUK,EAAUX,KACzC,MAAMY,EAAUb,EAAgBC,GAChC,OAAOM,EAASO,KAAKJ,4BAAwBE,EAAU,CAAEC,WAAU,EAGrE0B,cAAeA,CAAChC,EAAUK,EAAUX,KAClC,MAAMY,EAAUb,EAAgBC,GAChC,OAAOM,EAASO,KAAKJ,6BAA6BE,EAAU,CAAEC,WAAU,EAG1E2B,uBAAwBA,CAACjC,EAAUK,EAAUX,KAC3C,MAAMY,EAAUb,EAAgBC,GAChC,OAAOM,EAASO,KAAKJ,iCAA2BE,EAAU,CAAEC,WAAU,EAExE4B,kBAAmBA,CAAClC,EAAUC,IAAYD,EAASE,IAAIC,kCAAsBF,IAGzEkC,EAAa,CACjBC,oBAAqBA,CAACpC,EAAUC,EAASP,KACvC,MAAMY,EAAUb,EAAgBC,GAChC,OAAOM,EAASE,IAAIC,cAAwBQ,EAAAA,EAAA,GAAOV,GAAO,IAAEK,YAAU,EAExE+B,cAAgBrC,GAAaA,EAASE,IAAIC,wBAC1CmC,qBAAuBtC,GAAaA,EAASO,KAAKJ,gCAG9CoC,EAAQ5B,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAA,GACTb,GArGc,CACjB0C,kBAAmBA,CAACxC,EAAUC,IAAYD,EAASE,IAAIC,oBAAsBF,GAC7EwC,qBAAsBA,CAACzC,EAAUe,EAAId,IACnCD,EAASE,IAAI,gBAA8Ba,IAAMd,GACnDyC,sBAAuBA,CAAC1C,EAAUe,EAAId,IAAYD,EAASE,IAAIC,wBAA0BF,KAG1E,CACf0C,gBAAiBA,CAAC3C,EAAUC,IAAYD,EAASE,IAAIC,kCAAoBF,GACzE2C,cAAeA,CAAC5C,EAAUC,IAAYD,EAASE,IAAIC,4BAAqBF,KAGzD,CACf4C,kBAAoB7C,GAAaA,EAASE,IAAIC,iBAC9C2C,mBAAoBA,CAAC9C,EAAUK,IAAaL,EAASO,KAAKJ,sBAAsBE,GAChF0C,qBAAsBA,CAAC/C,EAAUS,IAAeT,EAASU,OAAOP,sBAAsBM,KAGxE,CACduC,cAAeA,CAAChD,EAAUK,IAAaL,EAASO,KAAKJ,iBAAgBE,GACrE4C,eAAgBA,CAACjD,EAAUK,IAAaL,EAASO,KAAKJ,iBAAiBE,GACvE6C,mBAAoBA,CAAClD,EAAUC,IAAYD,EAASE,IAAIC,6BAAuBF,GAC/EkD,oBAAqBA,CAACnD,EAAUK,IAAaL,EAASO,KAAKJ,uBAAuBE,GAClF+C,mBAAoBA,CAACpD,EAAUC,IAAYD,EAASE,IAAIC,uBAAuBF,GAC/EoD,mBAAoBA,CAACrD,EAAUsD,IAAYtD,EAASuD,IAAIpD,uBAAuBmD,GAC/EE,kBAAmBA,CAACxD,EAAUC,IAAYD,EAASE,IAAIC,sBAAsBF,GAC7EwD,qBAAsBA,CAACzD,EAAUe,IAAOf,EAASU,OAAO,uBAA2BK,KACnF2C,mBAAoBA,CAAC1D,EAAUK,IAAaL,EAASO,KAAKJ,sBAAsBE,GAChFsD,kBAAmBA,CAAC3D,EAAUC,IAAYD,EAASE,IAAIC,mCAA8BF,GACrF2D,oBAAqBA,CAAC5D,EAAUC,IAAYD,EAASE,IAAIC,oCAA4BF,GACrF4D,wBAAyBA,CAAC7D,EAAUC,IAAYD,EAASE,IAAIC,4CAAwBF,KAGvE,CACd6D,sBAAuBA,CAAC9D,EAAUC,IAAYD,EAASE,IAAIC,qBAAoBF,GAC/E8D,oBAAsB/D,GAAaA,EAASE,IAAIC,kCAChD6D,WAAYA,CAAChE,EAAUC,IAAYD,EAASE,IAAIC,yBAAwBF,GACxEgE,iBAAkBA,CAACjE,EAAUC,IAAYD,EAASE,IAAIC,wBAA+BF,GACrFiE,yBAA0BA,CAAClE,EAAUC,IAAYD,EAASE,IAAIC,iBAA0BF,GACxFkE,oBAAqBA,CAACnE,EAAUC,IAAYD,EAASE,IAAIC,iBAA0BF,GACnFmE,0BAA2BA,CAACpE,EAAUC,IAAYD,EAASE,IAAIC,4CAAwBF,GACvFoE,cAAeA,CAACrE,EAAUK,IAAaL,EAASO,KAAKJ,2BAAwBE,KAkE1EY,GACAG,GACAQ,GACAO,GAWL,MARmBnC,IACjB,MAAMsE,EAAM,CAAC,EACb,IAAK,MAAOC,EAAKC,KAASC,OAAOC,QAAQnC,GACvC+B,EAAIC,GAAO,mBAAAI,EAAAC,UAAAC,OAAIC,EAAI,IAAAC,MAAAJ,GAAAK,EAAA,EAAAA,EAAAL,EAAAK,IAAJF,EAAIE,GAAAJ,UAAAI,GAAA,OAAKR,EAAKxE,KAAa8E,EAAK,EAEjD,OAAOR,CAAG,EC7IZ,MAAQjF,YAAWA,GAAK4F,IAwDlBjF,EAAWkF,EAAAA,EAAMC,OAAO,CAC5BC,QAAS,KAIXpF,EAASqF,aAAaC,QAAQC,KAC3BC,GACQA,IAERC,GACQC,QAAQC,OAAOF,KAK1BzF,EAASqF,aAAaO,SAASL,KAC5BM,IACC,MAAM,mBAAElG,GAAuBkG,EAAIL,OAAOlF,SACpC,UAAEV,GAAciG,EAAIL,OAAOlF,SAC3B,UAAET,GAAcgG,EAAIL,OAAOlF,QAGjC,MArEkBwF,EAACD,EAAKlG,EAAoBC,EAAWC,KACzD,OAAQgG,EAAIE,KAAKC,MACf,KAAK,IACL,KAAK,IACL,KAAK,IACH,MACF,KAAK,IACEpG,EAKHP,EAAY4G,MAAMJ,EAAIE,KAAKG,SAJ3B7G,EAAY8G,QAAQ,iBAAiB,KACnCC,OAAOC,SAASC,KAAO,GAAG,IAK9B,MACF,KAAK,IACEzG,EAGHR,EAAY4G,MAAM,WAAW,KAC3BG,OAAOC,SAASC,KAAO,sBAAsBzG,GAAW,IAH1DR,EAAY4G,MAAM,QAMpB,MACF,KAAK,IAGL,KAAK,IACH5G,EAAY4G,MAAMJ,EAAIE,KAAKG,SAC3B,MAEF,QACOvG,GACHN,EAAY8G,QAAQ,iBAAiB,KACnCC,OAAOC,SAASC,KAAO,GAAG,IAIlC,EA6BER,CAAcD,EAAKlG,EAAoBC,EAAWC,GAE3C6F,QAAQa,QAAQV,EAAI,IAE5BJ,IA7BDpG,EAAY8G,QAAQ,iBAAiB,KACnCC,OAAOC,SAASC,KAAO,GAAG,IA8BnBZ,QAAQC,OAAOF,MAK1B,MAAMnB,EAAMkC,EAAUxG,GAMtB,MAJA,WACE,OAAOsE,CACT,EC1FA,MAAM,gBAAE1D,EAAe,eAAEC,GAAmB4F,IAoH5C,OAlHyBC,EAAAA,EAAAA,IAAY,YAAY,KAC/C,MAAMC,GAAapI,EAAAA,EAAAA,MAAI,GACjBqI,GAAarI,EAAAA,EAAAA,KAAI,GACjBsI,GAAetI,EAAAA,EAAAA,KAAI,GACnBuI,GAAqBvI,EAAAA,EAAAA,KAAI,GACzBwI,GAAgBxI,EAAAA,EAAAA,KAAI,GACpByI,GAAwBzI,EAAAA,EAAAA,KAAI,GAC5B0I,GAA8B1I,EAAAA,EAAAA,KAAI,GAClC2I,GAAyB3I,EAAAA,EAAAA,KAAI,GAC7B4I,GAAwB5I,EAAAA,EAAAA,KAAI,IAC5B6I,GAA8B7I,EAAAA,EAAAA,KAAI,IAClC8I,GAAyB9I,EAAAA,EAAAA,KAAI,IAC7B+I,GAAmB/I,EAAAA,EAAAA,KAAI,IACvBgJ,GAAQhJ,EAAAA,EAAAA,KAAI,GACZiJ,GAAYjJ,EAAAA,EAAAA,KAAI,IAChBkJ,GAAUlJ,EAAAA,EAAAA,MAAI,GAEdmJ,GAAgBC,EAAAA,EAAAA,WAAS,KAC7B,IAAIC,EAAsB,EAU1B,OATIf,EAAahI,MAAQ,IACvB+I,GAAuB,GAErBd,EAAmBjI,MAAQ,IAC7B+I,GAAuB,GAErBb,EAAclI,MAAQ,IACxB+I,GAAuB,GAEM,IAAxBA,CAAyB,IAGlC,SAASC,EAAqBC,GAC5BlB,EAAW/H,MAAQiJ,EAAU/B,KAAKgC,SAASC,WAC3CT,EAAM1I,MAAQiJ,EAAU/B,KAAKgC,SAASC,WACtCV,EAAiBzI,MAAQiJ,EAAU/B,KAAKgC,SAASE,aAEjDH,EAAU/B,KAAKgC,SAASE,aAAaC,SAASC,IAC5B,IAAZA,EAAKC,IACPvB,EAAahI,MAAQsJ,EAAKE,MAC1BlB,EAAsBtI,MAAQsJ,EAAKG,QACnCtB,EAAsBnI,MAAQsJ,EAAKI,cACd,IAAZJ,EAAKC,IACdtB,EAAmBjI,MAAQsJ,EAAKE,MAChCjB,EAA4BvI,MAAQsJ,EAAKG,QACzCrB,EAA4BpI,MAAQsJ,EAAKI,eAEzCxB,EAAclI,MAAQsJ,EAAKE,MAC3BhB,EAAuBxI,MAAQsJ,EAAKG,QACpCpB,EAAuBrI,MAAQsJ,EAAKI,aACtC,IAEF5B,EAAW9H,OAAQ,CACrB,CAwCA,MAAO,CACL8H,aACAC,aACAC,eACAC,qBACAC,gBACAI,wBACAC,8BACAC,yBACAC,mBACAC,QACAC,YACAC,UAEAC,gBAEAG,uBACAW,YAvDF,WACE7B,EAAW9H,OAAQ,EACnBgC,IACG4H,MAAM5C,IACiB,MAAlBA,EAAIE,KAAKC,MACX6B,EAAqBhC,EACvB,IAED6C,OAAOjD,IACNkD,QAAQC,IAAInD,EAAM,GAExB,EA6CEoD,aA3CF,WACEpB,EAAQ5I,OAAQ,EAEhB+B,EAAgB,CACdkI,OAAQ,CACNC,OAAQ,QACRC,KAAM,QACNC,MAAO,MAGRR,MAAM5C,IACL,GAAsB,MAAlBA,EAAIE,KAAKC,KAAc,CACzB,MAAMkD,EAAW,GACjB,IAAK,IAAIC,EAAI,EAAGA,EAAItD,EAAIE,KAAKgC,SAASlD,OAAQsE,IAC5CD,EAASpK,KAAK+G,EAAIE,KAAKgC,SAASoB,IAElC3B,EAAU3I,MAAQqK,EAClBzB,EAAQ5I,OAAQ,CAClB,KAED6J,OAAOjD,IACNkD,QAAQC,IAAInD,EAAM,GAExB,EAqBC,ICpHH,MAAM2D,GAAW7K,EAAAA,EAAAA,MAAI,GACf8K,GAAe9K,EAAAA,EAAAA,KAAI,OAKzB+K,eAAeC,UACPC,EAAAA,EAAAA,YACN,MAAMC,EAASC,SAASC,cAAc,WAChCC,EAAcH,EAAOI,aAErBC,EAAmBC,SAASC,iBAAiBP,GAAQQ,WAAY,IAUvE,GARyB,eAArBP,SAASQ,KAAKnJ,IAAuBqF,OAAO+D,YAAc,MACxD/D,OAAOgE,QAAUR,EACnBR,EAASvK,OAAQ,EAEjBuK,EAASvK,OAAQ,GAIjBuH,OAAO+D,WAAa,KAAM,CACPT,SAASW,iBAAiB,iBAClCnC,SAASoC,IACpBA,EAAYC,MAAMC,IAASZ,EAAcE,EAAmB,GAApC,IAA0C,GAEtE,CACF,CAKAR,eAAemB,IAEb,SADMjB,EAAAA,EAAAA,YACFpD,OAAO+D,WAAa,KAAM,CAC5B,MAAMO,EAAUhB,SAASC,cAAc,aACjCgB,EAAcjB,SAASC,cAAc,iBAC3C,GAAIe,GAAWC,EAAa,CAC1B,MAAMC,EAAmBD,EAAYE,YACrCH,EAAQH,MAAMO,MAAQ,eAAeF,EAAmB,OAC1D,CACF,CACF,CAMAtB,eAAeyB,UACPvB,EAAAA,EAAAA,YACSE,SAASW,iBAAiB,UAC9BxF,OAAS,GAEpB6E,SAASW,iBAAiB,aAAanC,SAAS8C,IAE9CA,EAAQC,iBAAiB,cAAc,SAAUC,GAG/C,GAFAA,EAAEC,iBAEEC,KAAKf,iBAAiB,iBAAiBxF,OAAS,EAAG,CACrD,MAAMwG,EAAgBD,KAAKvB,aACrByB,EAAqBF,KAAKG,wBAAwBf,IAExDd,SAASW,iBAAiB,iBAAiBnC,SAASsD,IAClDA,EAAMjB,MAAMC,IAAM,GAAGa,EAAgBC,KAAsB,GAE/D,CAGA,MAAMhB,EAAcc,KAAKzB,cAAc,iBACvC,GAAIW,EAAa,CACf,MAAMmB,EAAeL,KAAKf,iBACxB,8DACAxF,OACsByF,EAAYiB,wBAAwBG,KAAOtF,OAAOuF,QAEtD,IAAMF,GAAgBrF,OAAO+D,WAAa,KAAO,IAAM,KAAO,IAChF/D,OAAO+D,aAEPG,EAAYC,MAAMqB,MAAQ,OAExBxF,OAAO+D,WAAa,OACtBG,EAAYC,MAAMqB,MAAQ,QAE9B,CACF,GAAE,GAEN,CAKA,SAASC,IACP,MAAMC,EAAWpC,SAASC,cAAc,gBACxCmC,EAASb,iBAAiB,SAAUC,IAClC,GAAIY,EAAU,CACZ,MAAMC,EAAiBD,EAASE,aAAa,gBACvCC,EAAgBvC,SAASC,cAAcoC,GACvCG,EAAmBJ,EAASE,aAAa,cACzCG,EAAkBzC,SAASC,cAAcuC,GACzCE,EAAsBN,EAASE,aAAa,aAC5CK,EAAqB3C,SAASC,cAAcyC,GAC5CE,EAAsBR,EAASE,aAAa,aAC5CO,EAAqB7C,SAASC,cAAc2C,GAG9CL,GACFA,EAAcO,UAAUC,OAAO,UAEjCX,EAASU,UAAUC,OAAO,UAEtBX,EAASU,UAAUE,SAAS,UAC9BhD,SAASC,cAAc,QAAQ6C,UAAUG,IAAI,aAE7CjD,SAASC,cAAc,QAAQ6C,UAAUI,OAAO,aAE9CT,IACFA,EAAgB5B,MAAMsC,QAAU,eAChCV,EAAgB5B,MAAMuC,YAAc,MACpCX,EAAgB5B,MAAMwC,WAAa,QAEjCV,GACFA,EAAmBG,UAAUG,IAAI,UAE/BJ,IACFA,EAAmBhC,MAAMsC,QAAU,eAEvC,IAEJ,CAEA,SAASG,IACPtD,SAASW,iBAAiB,sBAAsBnC,SAAS8C,IAEvDA,EAAQC,iBAAiB,SAAS,SAAUC,GAC1CA,EAAEC,iBAEF,MAAM8B,EAAS7B,KAAKY,aAAa,aAEjCtC,SAASW,iBAAiB,sBAAsBnC,SAASgF,IACvDA,EAAGV,UAAUI,OAAO,SAAS,IAG/BlD,SAASW,iBAAiB,gBAAgBnC,SAASgF,IACjDA,EAAG3C,MAAMsC,QAAU,MAAM,IAE3BzB,KAAKoB,UAAUC,OAAO,UAGtB,MAAMR,EAAgBvC,SAASC,cAAcsD,GACzChB,IACFA,EAAc1B,MAAMsC,QAAU,eAElC,GAAE,GAEN,CACA,SAASM,IACP,MAAMrB,EAAWpC,SAASC,cAAc,YACxCmC,EAASb,iBAAiB,SAAUC,IAClC,GAAIY,EAAU,CACZ,MAAMC,EAAiBD,EAASE,aAAa,gBACvCC,EAAgBvC,SAASC,cAAcoC,GACvCG,EAAmBJ,EAASE,aAAa,cACzCG,EAAkBzC,SAASC,cAAcuC,GACzCE,EAAsBN,EAASE,aAAa,aAC5CK,EAAqB3C,SAASC,cAAcyC,GAC5CE,EAAsBR,EAASE,aAAa,aAC5CO,EAAqB7C,SAASC,cAAc2C,GAG9CL,GACFA,EAAcO,UAAUC,OAAO,UAEjCX,EAASU,UAAUC,OAAO,UAEtBX,EAASU,UAAUE,SAAS,UAC9BhD,SAASC,cAAc,QAAQ6C,UAAUG,IAAI,aAE7CjD,SAASC,cAAc,QAAQ6C,UAAUI,OAAO,aAE9CT,IACFA,EAAgB5B,MAAMsC,QAAU,eAChCV,EAAgB5B,MAAMuC,YAAc,MACpCX,EAAgB5B,MAAMwC,WAAa,QAEjCV,GACFA,EAAmBG,UAAUG,IAAI,UAE/BJ,IACFA,EAAmBhC,MAAMsC,QAAU,eAEvC,IAEJ,CAIA,SAASO,IACP,MAAMC,EAAU3D,SAASC,cAAc,iBACvC0D,EAAQpC,iBAAiB,SAAUC,IACjC,MAAMoC,EAAkBD,EAAQrB,aAAa,gBACvCuB,EAAiB7D,SAASC,cAAc2D,GAC1CC,GACFA,EAAef,UAAUI,OAAO,UAGXlD,SAASW,iBAAiB,6BAElCnC,SAAS8C,IACtBA,EAAQwB,UAAUI,OAAO,SAAS,IAGhBlD,SAASW,iBAAiB,gBAClCnC,SAAS8C,IACW,iBAA1BA,EAAQT,MAAMsC,UAChB7B,EAAQT,MAAMsC,QAAU,GAC1B,IAEFnD,SAASQ,KAAKsC,UAAUI,OAAO,aAC/BS,EAAQ9C,MAAMsC,QAAU,MAAM,GAElC,CAgBA,MAdA,WACE,MAAO,CACLzD,WACAC,eACAE,kBACAkB,gBACAM,mBACAc,iBACAmB,mBACAI,oBACAD,YAEJ,E,QCrOA,SAASK,EAAwBC,EAAaC,GAAyB,IAAfC,EAAS/I,UAAAC,OAAA,QAAA+I,IAAAhJ,UAAA,GAAAA,UAAA,GAAG,EAClE,GACE8E,SAASW,iBAAiBoD,GAAa5I,OAAS,GAChD6E,SAASW,iBAAiBqD,GAAU7I,OAAS,EAC7C,EAKF,SAAuBgJ,EAAWC,EAAQC,GACxC,MAAMC,EAAiBH,EAAUhD,YAC3BoD,EAAaH,EACbI,EAAaD,EAAW1C,wBACxB4C,EAAqBD,EAAWxC,KACVwC,EAAWxC,KAAOuC,EAAWpD,YAC/BmD,IACxBH,EAAUO,WAAaD,EAAqBJ,EAASF,EAAUO,WAEnE,CAXEC,CAFyB3E,SAASC,cAAc8D,GAC1B/D,SAASC,cAAc+D,GACEC,EACjD,CAWF,CAQA,SAASW,EAAiBb,GACxB,MAAMc,EAAgBA,KACpB,GAAI,6BAA6BC,KAAKC,UAAUC,WAC9C,IAEE,OADAhF,SAASiF,YAAY,eACd,CACT,CAAE,MAAOzD,GACP,OAAO,CACT,CAEF,OAAO,CAAK,EAGd,GADAqD,IACIA,KACE7E,SAASW,iBAAiBoD,GAAa5I,OAAS,EAAG,CACrD,IAAI+J,EAEAlF,SAASW,iBAAiBoD,GAAa5I,OAAS,IAClD+J,EAAUlF,SAASC,cAAc8D,IAEnCmB,EAAQrE,MAAMsE,aAAe,QAC7BD,EAAQrE,MAAMuE,cAAgB,OAE9B,MAAMC,EAAcH,EAAQI,YAAcJ,EAAQK,YAElD,GAAoB,IAAhBF,EAAmB,CACrB,MAAMG,EACJ,kFACFN,EAAQO,mBAAmB,WAAYD,GAEvC,MAAME,EAAQ1F,SAASC,cAAc,UAC/B0F,EAAQ3F,SAASC,cAAc,UACrCyF,EAAM7E,MAAMO,MAAyB,IAAdiE,EAAH,IAEpB,MAAMO,EAAuBA,KAC3BlJ,OAAOmJ,uBAAsB,KAC3BH,EAAM7E,MAAMmB,KAAgC,IAArBkD,EAAQR,WAAoBQ,EAAQK,YAAxC,GAAsD,GACzE,EAGJL,EAAQ3D,iBAAiB,SAAUqE,GAEnC,IAAIE,EAAM,CAAE9D,KAAM,EAAG+D,EAAG,GAExB,MAAMC,EAAoBxE,IACxB,MAAMyE,EAAKzE,EAAE0E,QAAUJ,EAAIC,EAC3Bb,EAAQR,WAAWoB,EAAI9D,KAAOiE,EAAKZ,EAAY,EAG3Cc,EAAiBA,KACrBnG,SAASoG,oBAAoB,YAAaJ,GAC1ChG,SAASoG,oBAAoB,UAAWD,EAAe,EAGnDE,EAAyB7E,IAC7BsE,EAAM,CACJ9D,KAAMkD,EAAQR,WACdqB,EAAGvE,EAAE0E,SAGPlG,SAASuB,iBAAiB,YAAayE,GACvChG,SAASuB,iBAAiB,UAAW4E,EAAe,EAGtDT,EAAMnE,iBAAiB,YAAa8E,GAEpC,MAAMC,EAAqB9E,IACzB,MAAM+E,EAAQZ,EAAM9D,wBACd2E,GAAchF,EAAEiF,QAAUF,EAAMzF,KAAOyF,EAAMG,OACnDxB,EAAQyB,UAAYH,GAActB,EAAQ0B,aAAe1B,EAAQ2B,aAAa,EAGhFlB,EAAMpE,iBAAiB,QAAS+E,EAClC,CACF,CAEJ,CASA,MAPA,WACE,MAAO,CACL1B,mBACAd,0BAEJ,EChHA,SAASgD,EAAYzP,GAAoB,IAAhB0P,EAAQ7L,UAAAC,OAAA,QAAA+I,IAAAhJ,UAAA,GAAAA,UAAA,GAAG,IAClC,MAAMsI,EAAKxD,SAASC,cAAc5I,GAC9BmM,GACFA,EAAGjC,iBAAiB,SAAS,KAC3B,MAAMyF,EAAetK,OAAOgE,QAAU,EACtC,IAAIuG,EAAc,EACdC,EAAe,KAanBxK,OAAOmJ,uBAVP,SAASsB,EAAKC,GACZ,GAAqB,OAAjBF,EAAuB,CAGzB,GADAD,GAAgBI,KAAKC,IAAMF,EAAeF,GAAiBH,EACvDE,GAAeI,KAAKC,GAAI,OAAO5K,OAAO6K,SAAS,EAAG,GACtD7K,OAAO6K,SAAS,EAAGF,KAAKG,MAAMR,EAAeA,EAAeK,KAAKI,IAAIR,IACvE,CACAC,EAAeE,EACf1K,OAAOmJ,sBAAsBsB,EAC/B,GACkC,GAGxC,CAEA,SAASO,EAAgBC,GAAsB,IAAhBZ,EAAQ7L,UAAAC,OAAA,QAAA+I,IAAAhJ,UAAA,GAAAA,UAAA,GAAG,IACxC,MAAM0M,EAASlL,OAAOgE,QAChBmH,EAASF,EAAOC,EAChBE,EAAYC,YAAYC,MAe9BnC,uBAbA,SAASoC,EAAcC,GACrB,MACMC,GADcD,EAAcJ,GACHf,EAE/B,GAAIoB,EAAW,EAAG,CAChB,MAAMC,EAAOR,EAASC,EAASM,EAC/BzL,OAAO6K,SAAS,EAAGa,GACnBvC,sBAAsBoC,EACxB,MACEvL,OAAO6K,SAAS,EAAGI,EAEvB,GAGF,CAOA,SAASU,EAAkBhR,GAAe,IAAXyJ,EAAG5F,UAAAC,OAAA,QAAA+I,IAAAhJ,UAAA,GAAAA,UAAA,GAAG,IACnC,MAAMsI,EAAKxD,SAASC,cAAc5I,GAClC,GAAImM,EAAI,CACN,MAAM,QAAE9C,GAAYhE,OAChBgE,EAAUI,GACZ0C,EAAG3C,MAAMyH,QAAU,IACnB9E,EAAG3C,MAAM0H,WAAa,YAEtB/E,EAAG3C,MAAMyH,QAAU,IACnB9E,EAAG3C,MAAM0H,WAAa,SAE1B,CACF,CAUA,MARA,WACE,MAAO,CACLb,kBACAZ,cACAuB,oBAEJ,ECzEA,MAAMG,GAAW3T,EAAAA,EAAAA,KAAI,IAQrB,SAAS4T,EAAQ1T,EAAK2T,EAAKzT,GACzBuT,EAASrT,MAAMC,KAAK,CAAEL,MAAK2T,MAAKzT,aAEhC0T,YAAW,KACe,mBAAb1T,GACTA,IAEFuT,EAASrT,MAAMO,OAAO,EAAG,EAAE,GAC1B,IACL,CAGA,MAWMkT,EAXWC,MACf,MAAMhT,EAAI,CACVA,QAAY,CAACd,EAAKE,KAChBwT,EAAQ1T,EAAK,mBAAoBE,EAAS,EAG5CY,KAAS,CAACd,EAAKE,KACbwT,EAAQ1T,EAAK,qBAAsBE,EAAS,GAE9C,OAAOY,CAAC,EAESgT,GAOnB,MAJA,WACE,MAAO,CAAEL,WAAUI,aAAYH,UACjC,E,QCjCA,SAASK,EAAYC,EAAQC,GAC3B,GAAc,MAAVD,GAAoC,IAAlBA,EAAO5N,OAAc,OAAO,KAElD,MAAM8N,EAAUF,EAAOG,UAAUH,EAAOI,YAAY,KAAO,EAAGJ,EAAO5N,OAAS,GACxEiO,EAAeL,EAAOG,UAAUH,EAAO5N,OAAS,EAAG4N,EAAO5N,QAC1DkO,EAAWN,EAAOO,MAAM,KACxBC,EAAaF,EAAS,GACtBG,EAAmBH,EAAS,GAGlC,OAA+B,IAA3BN,EAAOU,QAAQ,OACV,WAAW/M,OAAOgN,mBAAmBF,KAAoBD,MAAeN,IAAUG,KAE3D,IAA5BL,EAAOU,QAAQ,SACe,IAA5BV,EAAOU,QAAQ,UAA6C,IAA3BV,EAAOU,QAAQ,OAC3CV,EAAOY,QAAQ,MAAO,QAExBZ,EAEF,WAAWrM,OAAOgN,mBAAmBF,KAAoBD,MAAeN,IAAUD,IAAUI,GACrG,CAMA,MAJA,WACE,MAAO,CAAEN,cACX,E,iMCrBA,MAAM,YAAEA,GAAgBc,IAElBC,EAAQC,EAmBRC,GAAY9L,EAAAA,EAAAA,WAAS,IAClB6K,EAAYe,EAAMG,IAAKH,EAAMI,Q,6JCzBtC,OAFoB,G,sGCkBpB,MAAM,OAAErV,GAAW2G,I,ojBChBnB,OAFoB,G,wKCyBpB,MAAM,WAAE/F,GAAe+F,IAEjBsO,EAAQC,E,yPAWGrU,E,QACfD,EAAWC,QACXoU,EAAMtN,MAAMtH,WAFd,IAAiBQ,C,oXCpCjB,OAFoB,G,2ICQpB,MAAM,WAAED,GAAe+F,IAEjBsO,EAAQC,E,uMAYwB,mBAAzBD,EAAMtN,MAAMtH,UACrB4U,EAAMtN,MAAMtH,gBAEdO,EAAWqU,EAAMpU,S,kFCvBnB,OAFoB,G,2GCMpB,MAAM,WAAED,GAAe+F,IAEjBsO,EAAQC,E,OAWdI,EAAAA,EAAAA,YAAU,KAER7U,IAAE,uCAAuC8U,GAAG,SAAU3I,IACpDhM,EAAWqU,EAAMpU,MAAM,IAGzBJ,IAAE,sBAAsB8U,GAAG,SAAU3I,IACC,mBAAzBqI,EAAMtN,MAAMtH,UACrB4U,EAAMtN,MAAMtH,WAEdO,EAAWqU,EAAMpU,MAAM,GACvB,I,6DC5BJ,OAFoB,GCEpB,O,8mBCUA,MAAM,SAAE+S,GAAa4B,I,geCVrB,OAFoB,G,6BCEpB,O,kLCUA,MAAM,mBAAEhR,EAAkB,qBAAEC,GAAyB0D,IAErD1H,IAAE,eACCgV,IAAI,SACJF,GAAG,QAAS,eAAe,WAC1B,MAAMG,EAAejV,IAAEqM,MAAM6I,QAAQ,cAAcC,SAAS,KAAKC,OAC7DpV,IAAEqM,MAAMgJ,IAAI,sBACdrV,IAAE,iBAAiBsV,MAAK,SAAUnJ,GACbnM,IAAEqM,MAAM+I,SACRH,GACjBjV,IAAEqM,MACC8I,SAAS,cACTI,SAAS,aACTA,SAAS,eACTC,YAAY,oBAEnB,GAEJ,IAEF,MAAMC,EAAOC,EAEPlB,EAAQC,EAed,SAASkB,EAAaC,GACpB,GAAIpB,EAAMqB,UACR,OAEiBD,EAAM1H,OAAOT,UAAUE,SAAS,qBAejD3J,EAAqB,CACnBgD,KAAM,CACJ8O,UAAWtB,EAAMuB,aAGlBrM,MAAM5C,IACiB,MAAlBA,EAAIE,KAAKC,OACX2O,EAAM1H,OAAOT,UAAUI,OAAO,qBAC9B4H,EAAK,UACP,IAED9L,OAAOjD,IACNkD,QAAQC,IAAInD,EAAM,IAzBtB3C,EAAmB,CACjB+R,UAAWtB,EAAMuB,YAEhBrM,MAAM5C,IACiB,MAAlBA,EAAIE,KAAKC,OACX2O,EAAM1H,OAAOT,UAAUG,IAAI,qBAC3B6H,EAAK,UACP,IAED9L,OAAOjD,IACNkD,QAAQC,IAAInD,EAAM,GAkB1B,C,oiBCjFA,O,2GCYA,MAAM+O,EAAOC,EAQPM,EAAaA,KACjBP,EAAK,SAAS,E,mgBCxBhB,MAAMQ,GAAS,CACbC,YAAWA,IAEP,iEAAiEzG,KAAKC,UAAUC,YAChFtI,OAAO+D,YAAc,KAIzB+K,YAAYC,GACH/O,OAAO+D,aAAegL,GAAc,KAG7CC,QAAOA,IACyD,SAAvDrW,IAAE,iCAAiCsW,KAAK,WAGjDC,SAAQA,IACC7G,UAAU8G,cAGnBC,SAAAA,GAGE,MAAMC,EAAU,OACVC,EAAUtP,OAAOuP,aACvB,IAGE,OAFAD,EAAQE,QAAQH,EAAS,KACzBC,EAAQG,WAAWJ,IACZ,CACT,CAAE,MAAOvK,GACP,OAAO,CACT,CACF,EAEA4K,gBAAeA,IAENC,QAAQhX,IAAE,wBAAwB8F,QAG3CmR,YAAAA,GACE,MAAMC,EAAoB7P,OAAO+D,WAAa,KAC9C,IAAI+L,EAEJnX,IAAEqH,QAAQ+P,QAAO,KACfD,EAAgB9P,OAAO+D,WAAa,KAEhC8L,IAAsBC,IACxBnX,IAAEqH,QAAQ2N,IAAI,UACd3N,OAAOC,SAAS+P,SAClB,GAEJ,GAOF,OAJA,WACE,MAAO,CAAEpB,UACX,ECvDA,MAAQA,OAAMA,IAAKqB,KACnBjQ,OAAOkQ,OAASlQ,OAAOkQ,QAAU,CAAC,EAClClQ,OAAOmQ,SAAW,CAAC,EAMnB,OAJA,WACEnQ,OAAOkQ,OAAOE,eAAiBxB,GAAOC,aACxC,ECeA,MAAMwB,IAAQC,EAAAA,EAAAA,OACNrX,YAAWA,IAAK4F,KAChBqN,WAAUA,IAAKwB,KACjB,kBAAEjR,IAAsB4D,IAE9BkQ,EAAAA,EAAO5X,EAAI6X,EAAQ,MAEnBD,EAAAA,EAAOE,OAASF,EAAAA,EAAO5X,EAEvB+X,MAMiBC,EAAAA,EAAAA,WAAU,CACzBC,WAAY,CACVC,YAAW,GACX/Q,QAAOA,MAGFgR,MAAM,eAOf,MAAMC,IAAWJ,EAAAA,EAAAA,WAAU,CACzBC,WAAY,CACVI,SAAQA,IAEVC,KAAAA,GACE,MAAM,SAAEjO,EAAQ,aAAEC,EAAY,gBAAEE,EAAe,cAAEkB,EAAa,iBAAEM,GAC9DuM,IAEIlC,GAAU7W,EAAAA,EAAAA,MAAI,GAEdgZ,EAAgBC,KAChB,WAAE5Q,IAAe6Q,EAAAA,EAAAA,IAAYF,IAC7B,YAAE/O,GAAgB+O,EAsBxB,OApBA/O,KAMAoL,EAAAA,EAAAA,YAAU,KACRwB,EAAQvW,MAA2B,SAAnBuH,OAAOsR,QAEvBtR,OAAO6E,iBAAiB,SAAU1B,GAClCnD,OAAO6E,iBAAiB,SAAU1B,EAAiBkB,GACnDlB,IACAkB,IACAM,GAAkB,KAGpB4M,EAAAA,EAAAA,cAAY,KACVvR,OAAO0J,oBAAoB,SAAUvG,GACrCnD,OAAO0J,oBAAoB,SAAUvG,EAAgB,IAEhD,CAAE6L,UAASxO,aAAYgR,mBAlB9B,WACEvY,GAAY4G,MAAM,WACpB,EAgBkDmD,WAAUC,eAC9D,IAEF8N,GAAS5R,IAAIkR,IAAOS,MAAM,kBAO1B,MAAMW,IAAYd,EAAAA,EAAAA,WAAU,CAC1BC,WAAY,CACVc,SAAQ,GACRC,UAASA,IAEXV,KAAAA,GACE,MAAM,iBAAErK,EAAgB,kBAAEI,GAAsBkK,IAE1CU,GAAYzZ,EAAAA,EAAAA,KAAI,IACtB,SAAS0Z,IACPpV,KACG4F,MAAM5C,IACL,GAAsB,MAAlBA,EAAIE,KAAKC,MACPH,EAAIE,KAAKgC,SACX,IAAK,IAAIoB,EAAI,EAAGA,EAAItD,EAAIE,KAAKgC,SAASlD,OAAQsE,IACxCtD,EAAIE,KAAKgC,SAASoB,GAAG+O,UACvBF,EAAUnZ,MAAMC,KAAK+G,EAAIE,KAAKgC,SAASoB,GAI/C,IAEDT,OAAOjD,IACNkD,QAAQC,IAAInD,EAAM,GAExB,CAaA,OAZAwS,KAOArE,EAAAA,EAAAA,YAAU,KACR5G,IACAI,GAAmB,IAGd,CACL4K,YACAG,gBAZF,WACEH,EAAUnZ,MAAQ,GAClBoZ,GACF,EAWF,IAEFJ,GAAUX,MAAM,aAGhB,MAAMkB,IAAcrB,EAAAA,EAAAA,WAAU,CAC5BM,KAAAA,GACE,MAAM,eAAExL,GAAmByL,IACrBlC,GAAU7W,EAAAA,EAAAA,MAAI,GAEdgZ,EAAgBC,KAChB,WAAE5Q,IAAe6Q,EAAAA,EAAAA,IAAYF,GAKnC,MAAMc,GAAW9Z,EAAAA,EAAAA,MAAI,GAUrB,OALAqV,EAAAA,EAAAA,YAAU,KACRwB,EAAQvW,MAA2B,SAAnBuH,OAAOsR,QACvB7L,GAAgB,IAGX,CAAEuJ,UAASxO,aAAYgR,mBAd9B,WACEvY,GAAY4G,MAAM,WACpB,EAYkDqS,WATlD,WACED,EAASxZ,OAASwZ,EAASxZ,KAC7B,EAO8DwZ,WAChE,IAEFD,GAAYlB,MAAM,eAKlBxN,SAASuB,iBAAiB,oBAAoB,KAC5C,MAAM,YAAEuF,EAAW,kBAAEuB,GAAsBwG,IAC3CnS,OAAO6E,iBAAiB,UAAU,IAAM8G,EAAkB,WAAY,OACtEvB,EAAY,WAAY,IAAI,IAM9B9G,SAASuB,iBAAiB,oBAAoB,KAC5C,MAAM,wBAAEuC,EAAuB,iBAAEc,GAAqBkK,IAEtDhL,EAAwB,wBAAyB,iCACjDc,EAAiB,yBAEjBd,EAAwB,oBAAqB,6BAC7Cc,EAAiB,oBAAoB,IAIvClI,OAAOkM,WAAaA,GACpBlM,OAAO6Q,YAAc5X,GAGrBN,IAAE,uBAAuB8U,GAAG,SAAS,SAAuB3I,GAC1D9E,OAAOuP,aAAaC,QAClB,YACA6C,KAAKC,UAAU,CACbC,UAAW,uBACXC,QAAS7Z,IAAEqM,MAAMkJ,SAAS,OAAOe,KAAK,SAG5C,G,GC3MIwD,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBnL,IAAjBoL,EACH,OAAOA,EAAaC,QAGrB,IAAIC,EAASL,EAAyBE,GAAY,CAGjDE,QAAS,CAAC,GAOX,OAHAE,EAAoBJ,GAAUK,KAAKF,EAAOD,QAASC,EAAQA,EAAOD,QAASH,GAGpEI,EAAOD,OACf,CAGAH,EAAoBO,EAAIF,E9BzBpB9a,EAAW,GACfya,EAAoBQ,EAAI,SAASC,EAAQC,EAAUC,EAAIC,GACtD,IAAGF,EAAH,CAMA,IAAIG,EAAeC,IACnB,IAASzQ,EAAI,EAAGA,EAAI9K,EAASwG,OAAQsE,IAAK,CACrCqQ,EAAWnb,EAAS8K,GAAG,GACvBsQ,EAAKpb,EAAS8K,GAAG,GACjBuQ,EAAWrb,EAAS8K,GAAG,GAE3B,IAJA,IAGI0Q,GAAY,EACPC,EAAI,EAAGA,EAAIN,EAAS3U,OAAQiV,MACpB,EAAXJ,GAAsBC,GAAgBD,IAAajV,OAAOsV,KAAKjB,EAAoBQ,GAAGU,OAAM,SAASzV,GAAO,OAAOuU,EAAoBQ,EAAE/U,GAAKiV,EAASM,GAAK,IAChKN,EAASpa,OAAO0a,IAAK,IAErBD,GAAY,EACTH,EAAWC,IAAcA,EAAeD,IAG7C,GAAGG,EAAW,CACbxb,EAASe,OAAO+J,IAAK,GACrB,IAAI8Q,EAAIR,SACE7L,IAANqM,IAAiBV,EAASU,EAC/B,CACD,CACA,OAAOV,CArBP,CAJCG,EAAWA,GAAY,EACvB,IAAI,IAAIvQ,EAAI9K,EAASwG,OAAQsE,EAAI,GAAK9K,EAAS8K,EAAI,GAAG,GAAKuQ,EAAUvQ,IAAK9K,EAAS8K,GAAK9K,EAAS8K,EAAI,GACrG9K,EAAS8K,GAAK,CAACqQ,EAAUC,EAAIC,EAwB/B,E+B5BAZ,EAAoBoB,EAAI,SAAShB,GAChC,IAAIiB,EAASjB,GAAUA,EAAOkB,WAC7B,WAAa,OAAOlB,EAAgB,OAAG,EACvC,WAAa,OAAOA,CAAQ,EAE7B,OADAJ,EAAoBuB,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CACR,ECNArB,EAAoBuB,EAAI,SAASpB,EAASsB,GACzC,IAAI,IAAIhW,KAAOgW,EACXzB,EAAoBvZ,EAAEgb,EAAYhW,KAASuU,EAAoBvZ,EAAE0Z,EAAS1U,IAC5EE,OAAO+V,eAAevB,EAAS1U,EAAK,CAAEkW,YAAY,EAAMva,IAAKqa,EAAWhW,IAG3E,ECPAuU,EAAoB4B,EAAI,WACvB,GAA0B,iBAAfC,WAAyB,OAAOA,WAC3C,IACC,OAAOvP,MAAQ,IAAIwP,SAAS,cAAb,EAChB,CAAE,MAAO1P,GACR,GAAsB,iBAAX9E,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxB0S,EAAoBvZ,EAAI,SAASsb,EAAKC,GAAQ,OAAOrW,OAAOsW,UAAUC,eAAe5B,KAAKyB,EAAKC,EAAO,ECCtGhC,EAAoBmB,EAAI,SAAShB,GACX,oBAAXgC,QAA0BA,OAAOC,aAC1CzW,OAAO+V,eAAevB,EAASgC,OAAOC,YAAa,CAAErc,MAAO,WAE7D4F,OAAO+V,eAAevB,EAAS,aAAc,CAAEpa,OAAO,GACvD,ECNAia,EAAoBgB,EAAI,K,WCKxB,IAAIqB,EAAkB,CACrB,KAAM,GAaPrC,EAAoBQ,EAAEQ,EAAI,SAASsB,GAAW,OAAoC,IAA7BD,EAAgBC,EAAgB,EAGrF,IAAIC,EAAuB,SAASC,EAA4BvV,GAC/D,IAKIgT,EAAUqC,EALV5B,EAAWzT,EAAK,GAChBwV,EAAcxV,EAAK,GACnByV,EAAUzV,EAAK,GAGIoD,EAAI,EAC3B,GAAGqQ,EAASiC,MAAK,SAAS1a,GAAM,OAA+B,IAAxBoa,EAAgBpa,EAAW,IAAI,CACrE,IAAIgY,KAAYwC,EACZzC,EAAoBvZ,EAAEgc,EAAaxC,KACrCD,EAAoBO,EAAEN,GAAYwC,EAAYxC,IAGhD,GAAGyC,EAAS,IAAIjC,EAASiC,EAAQ1C,EAClC,CAEA,IADGwC,GAA4BA,EAA2BvV,GACrDoD,EAAIqQ,EAAS3U,OAAQsE,IACzBiS,EAAU5B,EAASrQ,GAChB2P,EAAoBvZ,EAAE4b,EAAiBC,IAAYD,EAAgBC,IACrED,EAAgBC,GAAS,KAE1BD,EAAgBC,GAAW,EAE5B,OAAOtC,EAAoBQ,EAAEC,EAC9B,EAEImC,EAAqBC,KAA2B,qBAAIA,KAA2B,sBAAK,GACxFD,EAAmBxT,QAAQmT,EAAqBO,KAAK,KAAM,IAC3DF,EAAmB5c,KAAOuc,EAAqBO,KAAK,KAAMF,EAAmB5c,KAAK8c,KAAKF,G,IC/CvF,IAAIG,EAAsB/C,EAAoBQ,OAAE1L,EAAW,CAAC,OAAO,WAAa,OAAOkL,EAAoB,KAAO,IAClH+C,EAAsB/C,EAAoBQ,EAAEuC,E","sources":["webpack://urliving/webpack/runtime/chunk loaded","webpack://urliving/./f2e_lib/composable/useAlert.js","webpack://urliving/./f2e_lib/composable/api/apiCalls.js","webpack://urliving/./f2e_lib/composable/api/useAxiosAPI.js","webpack://urliving/./f2e_lib/stores/useMiniCartStore.js","webpack://urliving/./src/composable/useHeaderDiffer.js","webpack://urliving/./src/composable/useScrollBar.js","webpack://urliving/./f2e_lib/composable/useGoToTop.js","webpack://urliving/./f2e_lib/composable/useMessage.js","webpack://urliving/./f2e_lib/composable/useImage.js","webpack://urliving/./f2e_lib/components/common/Image/NewImage.vue","webpack://urliving/./f2e_lib/components/common/Image/NewImage.vue?08b8","webpack://urliving/./f2e_lib/components/common/alert/AlertLayout.vue","webpack://urliving/./f2e_lib/components/common/alert/AlertLayout.vue?a31e","webpack://urliving/./f2e_lib/components/common/alert/parts/AlertConfirm.vue","webpack://urliving/./f2e_lib/components/common/alert/parts/AlertConfirm.vue?4322","webpack://urliving/./f2e_lib/components/common/alert/parts/AlertInfo.vue","webpack://urliving/./f2e_lib/components/common/alert/parts/AlertInfo.vue?8358","webpack://urliving/./f2e_lib/components/common/alert/parts/AlertSpecial.vue","webpack://urliving/./f2e_lib/components/common/alert/parts/AlertSpecial.vue?2de5","webpack://urliving/./f2e_lib/components/common/alert/AlertDialog.vue","webpack://urliving/./f2e_lib/components/common/message/Message.vue","webpack://urliving/./f2e_lib/components/common/message/Message.vue?8c14","webpack://urliving/./src/components/BrandBtn.vue?ceca","webpack://urliving/./src/components/BrandBtn.vue","webpack://urliving/./src/pages/brand/components/BrandListMB.vue?6814","webpack://urliving/./src/pages/brand/components/BrandListMB.vue","webpack://urliving/./f2e_lib/composable/useSetEnv.js","webpack://urliving/./src/pages/common/js/globalCtrl.js","webpack://urliving/./src/pages/common/js/common.js","webpack://urliving/webpack/bootstrap","webpack://urliving/webpack/runtime/compat get default export","webpack://urliving/webpack/runtime/define property getters","webpack://urliving/webpack/runtime/global","webpack://urliving/webpack/runtime/hasOwnProperty shorthand","webpack://urliving/webpack/runtime/make namespace object","webpack://urliving/webpack/runtime/runtimeId","webpack://urliving/webpack/runtime/jsonp chunk loading","webpack://urliving/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","import { ref } from 'vue';\r\nimport $ from 'jquery';\r\n\r\nconst alerts = ref([]);\r\n/**\r\n * @description 警示跳窗\r\n * @param {String} msg 回傳訊息\r\n * @param {String} type 樣式 alert、confirm\r\n * @param {Function} callback\r\n * @param {String} dataName 抓取特定跳窗時\r\n */\r\nfunction showAlert(msg, type, callback, dataName) {\r\n // 有時有多個警示視窗\r\n alerts.value.push({ msg, type, callback, dataName });\r\n\r\n const $body = $('body');\r\n $body.css({ overflow: 'hidden' });\r\n}\r\n\r\nfunction closeAlert(index) {\r\n alerts.value.splice(index, 1);\r\n const $body = $('body');\r\n $body.css({ overflow: '', 'padding-right': '' });\r\n}\r\n\r\n// 這是為不改變太多的寫法給前、後端用的\r\nconst allAlertFn = () => {\r\n const o = {};\r\n o.alert = (msg, callback, name) => {\r\n showAlert(msg, 'alert', callback, name);\r\n };\r\n\r\n o.confirm = (msg, callback, name) => {\r\n showAlert(msg, 'confirm', callback, name);\r\n };\r\n\r\n o.special = (msg, callback, name) => {\r\n showAlert(msg, 'special', callback, name);\r\n };\r\n return o;\r\n};\r\nconst alertDialog = allAlertFn();\r\n\r\nfunction useAlert() {\r\n return { alerts, alertDialog, showAlert, closeAlert };\r\n}\r\n\r\nexport default useAlert;\r\n","const generateHeaders = (otherObj) => {\r\n return {\r\n handleDefaultError: otherObj?.handleDefaultError ? otherObj?.handleDefaultError : false,\r\n handle400: otherObj?.handle400 ? otherObj?.handle400 : false,\r\n handle401: otherObj?.handle401 ? otherObj?.handle401 : false,\r\n };\r\n};\r\n\r\nconst commonAPI = {\r\n getFavoriteAPI: (instance, getData) => instance.get(API_URL.FAVORITE, getData),\r\n postFavoriteAPI: (instance, postData, otherObj) => {\r\n const headers = generateHeaders(otherObj);\r\n return instance.post(API_URL.FAVORITE, postData, { headers });\r\n },\r\n deleteFavoriteAPI: (instance, deleteData, otherObj) => {\r\n const headers = generateHeaders(otherObj);\r\n return instance.delete(API_URL.FAVORITE, { ...deleteData, headers });\r\n },\r\n getHotSearchAPI: (instance, getData) => instance.get(API_URL.HOT_SEARCH, getData),\r\n getCartInfoAPI: (instance) => instance.get(API_URL.CART_INFO),\r\n getShareAPI: (instance, id) => instance.get(`${API_URL.SHARE}/${id}`),\r\n postNewsletter: (instance, postData, otherObj) => {\r\n const headers = generateHeaders(otherObj);\r\n return instance.post(API_URL.NEWSLETTER, postData, { headers });\r\n },\r\n};\r\n\r\nconst articleAPI = {\r\n getArticleListAPI: (instance, getData) => instance.get(API_URL.ARTICLE_LIST, getData),\r\n getArticleContentAPI: (instance, id, getData) =>\r\n instance.get(`${API_URL.ARTICLE_CONTENT}/${id}`, getData),\r\n getArticleCategoryAPI: (instance, id, getData) => instance.get(API_URL.ARTICLE_CATEGORY, getData),\r\n};\r\n\r\nconst addonAPI = {\r\n getAddonCartAPI: (instance, getData) => instance.get(API_URL.ADDON_CART, getData),\r\n getAddonEvent: (instance, getData) => instance.get(API_URL.ADDON_EVENT, getData),\r\n};\r\n\r\nconst brandAPI = {\r\n getBrandFollowAPI: (instance) => instance.get(API_URL.BRAND),\r\n postBrandFollowAPI: (instance, postData) => instance.post(API_URL.BRAND_FOLLOW, postData),\r\n deleteBrandFollowAPI: (instance, deleteData) => instance.delete(API_URL.BRAND_FOLLOW, deleteData),\r\n};\r\n\r\nconst cartAPI = {\r\n postCouponAPI: (instance, postData) => instance.post(API_URL.COUPON, postData),\r\n postCoupon2API: (instance, postData) => instance.post(API_URL.COUPON2, postData),\r\n getOrderAddressAPI: (instance, getData) => instance.get(API_URL.ORDER_ADDRESS, getData),\r\n postShoppingCartAPI: (instance, postData) => instance.post(API_URL.SHOPPING_CART, postData),\r\n getShoppingCartAPI: (instance, getData) => instance.get(API_URL.SHOPPING_CART, getData),\r\n putShoppingCartAPI: (instance, putData) => instance.put(API_URL.SHOPPING_CART, putData),\r\n getAddressBookAPI: (instance, getData) => instance.get(API_URL.ADDRESS_BOOK, getData),\r\n deleteAddressBookAPI: (instance, id) => instance.delete(`${API_URL.ADDRESS_BOOK}/${id}`),\r\n postAddressBookAPI: (instance, postData) => instance.post(API_URL.ADDRESS_BOOK, postData),\r\n getLastInvoiceAPI: (instance, getData) => instance.get(API_URL.LAST_INVOICE_SETTING, getData),\r\n getVerifyMobileCode: (instance, getData) => instance.get(API_URL.VERIFY_MOBILE_CODE, getData),\r\n getCartRecommendDataAPI: (instance, getData) => instance.get(API_URL.RECOMMEND_CART, getData),\r\n};\r\n\r\nconst shopAPI = {\r\n getSearchRecommendAPI: (instance, getData) => instance.get(API_URL.MARKET_NEW, getData),\r\n getSortConditionAPI: (instance) => instance.get(API_URL.SORT_POPUP),\r\n getDataAPI: (instance, getData) => instance.get(API_URL.MARKET_CONTENT, getData),\r\n getSeriesDataAPI: (instance, getData) => instance.get(API_URL.SERIES_MARKET_CONTENT, getData),\r\n getBrandRecommendDataAPI: (instance, getData) => instance.get(API_URL.MARKET_RECOMMEND, getData),\r\n getRecommendDataAPI: (instance, getData) => instance.get(API_URL.MARKET_RECOMMEND, getData),\r\n getMarketRecommendDataAPI: (instance, getData) => instance.get(API_URL.RECOMMEND_SHOP, getData),\r\n postNoticeAPI: (instance, postData) => instance.post(API_URL.IN_STOCK_EMAIL, postData),\r\n};\r\n\r\nconst loginAPI = {\r\n postForgetPS: (instance, postData, otherObj) => {\r\n const headers = generateHeaders(otherObj);\r\n return instance.post(API_URL.FORGET_PS, postData, { headers });\r\n },\r\n getAccountExist: (instance, getData) => instance.get(API_URL.ACCOUNT_EXIST, getData),\r\n};\r\n\r\nconst orderAPI = {\r\n deleteOrderAPI: (instance, deleteData) => instance.delete(API_URL.ORDER, deleteData),\r\n getRefundDetailAPI: (instance, getData, otherObj) => {\r\n const headers = generateHeaders(otherObj);\r\n return instance.get(API_URL.REFUND_DETAIL, { ...getData, headers });\r\n },\r\n getOrderAPI: (instance, getData) => instance.get(API_URL.ORDER, getData),\r\n postRefundCalculateAPI: (instance, postData) => instance.post(API_URL.REFUND_CALCULATE, postData),\r\n getShippingFlowAPI: (instance, getData) => instance.get(API_URL.SHIPPING_FLOW, getData),\r\n getOrderAtmAPI: (instance, getData) => instance.get(API_URL.ORDER_ATM, getData),\r\n postCashInAPI: (instance, postData) => instance.post(API_URL.VC_CASH_IN, postData),\r\n};\r\n\r\nconst memberAPI = {\r\n // urliving 5%驗證\r\n getVerifyPhoneAPI: (instance, getData, otherObj) => {\r\n const headers = generateHeaders(otherObj);\r\n return instance.get(API_URL.VERIFY_PHONE, { ...getData, headers });\r\n },\r\n // 取回饋金歷程\r\n getBonusRecordAPI: (instance, getData) => instance.get(API_URL.BONUS_RECORDS, getData),\r\n // 提領回饋金\r\n postBonusWithDrawAPI: (instance, postData, otherObj) => {\r\n const headers = generateHeaders(otherObj);\r\n return instance.post(API_URL.BONUS_WITHDRAW, postData, { headers });\r\n },\r\n // 上傳身分證\r\n postUserIdAPI: (instance, postData, otherObj) => {\r\n const headers = generateHeaders(otherObj);\r\n return instance.post(API_URL.USER_IDENTIFICATION, postData, { headers });\r\n },\r\n // 回饋金-綁定銀行帳號\r\n postUserBankAccountAPI: (instance, postData, otherObj) => {\r\n const headers = generateHeaders(otherObj);\r\n return instance.post(API_URL.USER_BANK_ACCOUNT, postData, { headers });\r\n },\r\n getDataAnalyzeAPI: (instance, getData) => instance.get(API_URL.DATA_ANALYZE, getData),\r\n};\r\n\r\nconst faPointAPI = {\r\n getVerifyFaPointAPI: (instance, getData, otherObj) => {\r\n const headers = generateHeaders(otherObj);\r\n return instance.get(API_URL.VERIFY_FA_POINTS, { ...getData, headers });\r\n },\r\n getFaPointAPI: (instance) => instance.get(API_URL.FA_POINTS),\r\n postUnbindFaPointAPI: (instance) => instance.post(API_URL.UNBIND_FA_POINTS),\r\n};\r\n\r\nconst apiCalls = {\r\n ...commonAPI,\r\n ...articleAPI,\r\n ...addonAPI,\r\n ...brandAPI,\r\n ...cartAPI,\r\n ...shopAPI,\r\n ...loginAPI,\r\n ...orderAPI,\r\n ...memberAPI,\r\n ...faPointAPI,\r\n};\r\n\r\nconst createApi = (instance) => {\r\n const api = {};\r\n for (const [key, func] of Object.entries(apiCalls)) {\r\n api[key] = (...args) => func(instance, ...args);\r\n }\r\n return api;\r\n};\r\n\r\nexport default createApi;\r\n","import axios from 'axios';\r\nimport useAlert from '@global/composable/useAlert';\r\nimport createApi from './apiCalls'; // 引入 createApi 函數\r\n\r\nconst { alertDialog } = useAlert();\r\n\r\n// 201 無剩餘的購物金,無法進行結清\r\n// 205 商品已售完 / 贈品被移除 (因贈品不能寄海外)\r\n// 400 失敗等其餘錯誤訊息 (格式錯誤、此帳號不存在、此Email已綁定第三方登入帳號...)\r\n// 403 faBind手機驗證超過發送次數\r\n// 401 尚未登入\r\n// 409 超過商品限購數量\r\n\r\nconst successHandle = (res, handleDefaultError, handle400, handle401) => {\r\n switch (res.data.Code) {\r\n case 200:\r\n case 201:\r\n case 205:\r\n break;\r\n case 400:\r\n if (!handle400) {\r\n alertDialog.confirm('系統忙線中,是否跳轉至首頁', () => {\r\n window.location.href = '/';\r\n });\r\n } else {\r\n alertDialog.alert(res.data.Message);\r\n }\r\n break;\r\n case 401:\r\n if (!handle401) {\r\n alertDialog.alert('請先登入');\r\n } else {\r\n alertDialog.alert('我要登入/註冊', () => {\r\n window.location.href = `/login?redirecturl=${handle401}`;\r\n });\r\n }\r\n break;\r\n case 403:\r\n alertDialog.alert(res.data.Message);\r\n break;\r\n case 409:\r\n alertDialog.alert(res.data.Message);\r\n break;\r\n\r\n default:\r\n if (!handleDefaultError) {\r\n alertDialog.confirm('系統忙線中,是否跳轉至首頁', () => {\r\n window.location.href = '/';\r\n });\r\n }\r\n break;\r\n }\r\n};\r\n\r\nconst errorHandle = () => {\r\n alertDialog.confirm('系統忙線中,是否跳轉至首頁', () => {\r\n window.location.href = '/';\r\n });\r\n};\r\n\r\nconst instance = axios.create({\r\n baseURL: '',\r\n});\r\n\r\n// request 攔截\r\ninstance.interceptors.request.use(\r\n (config) => {\r\n return config;\r\n },\r\n (error) => {\r\n return Promise.reject(error);\r\n },\r\n);\r\n\r\n// response 攔截\r\ninstance.interceptors.response.use(\r\n (res) => {\r\n const { handleDefaultError } = res.config.headers;\r\n const { handle400 } = res.config.headers;\r\n const { handle401 } = res.config.headers;\r\n successHandle(res, handleDefaultError, handle400, handle401);\r\n // 這邊可以對回來的資料先進行驗證處理,再來決定要不要把資料給吐出去\r\n return Promise.resolve(res);\r\n },\r\n (error) => {\r\n errorHandle();\r\n return Promise.reject(error);\r\n },\r\n);\r\n\r\n// 使用 createApi 函數生成 API 調用函數\r\nconst api = createApi(instance);\r\n\r\nfunction useAPIHandler() {\r\n return api;\r\n}\r\n\r\nexport default useAPIHandler;\r\n","import { computed, ref } from 'vue';\r\n\r\nimport { defineStore } from 'pinia';\r\nimport useAxiosAPI from '@global/composable/api/useAxiosAPI';\r\n\r\nconst { getHotSearchAPI, getCartInfoAPI } = useAxiosAPI();\r\n\r\nconst useMiniCartStore = defineStore('miniCart', () => {\r\n const dataIsLoad = ref(false);\r\n const totalCount = ref(0); // 所有溫藏商品總數\r\n const generalCount = ref(0); // 常溫總數量\r\n const refrigerationCount = ref(0); // 冷藏總數量\r\n const freezingCount = ref(0); // 冷凍總數量\r\n const generalSpotGoodsCount = ref(0); // 一般常溫現貨數量\r\n const refrigerationSpotGoodsCount = ref(0); // 冷藏現貨數量\r\n const freezingSpotGoodsCount = ref(0); // 冷凍現貨數量\r\n const generalMarketProducts = ref([]);\r\n const refrigerationMarketProducts = ref([]);\r\n const freezingMarketProducts = ref([]);\r\n const temperaturesData = ref([]);\r\n const count = ref(0); // 所有商品總數(for 一頁式)\r\n const hotSearch = ref([]);\r\n const hotLoad = ref(false);\r\n\r\n const isOnlyOneTemp = computed(() => {\r\n let hasProductTempCount = 0;\r\n if (generalCount.value > 0) {\r\n hasProductTempCount += 1;\r\n }\r\n if (refrigerationCount.value > 0) {\r\n hasProductTempCount += 1;\r\n }\r\n if (freezingCount.value > 0) {\r\n hasProductTempCount += 1;\r\n }\r\n return hasProductTempCount === 1;\r\n });\r\n\r\n function changeCartTotalCount(itemArray) {\r\n totalCount.value = itemArray.data.Response.TotalCount;\r\n count.value = itemArray.data.Response.TotalCount;\r\n temperaturesData.value = itemArray.data.Response.Temperatures;\r\n // 溫層ID (0: 常溫,1: 冷藏,2: 常溫)\r\n itemArray.data.Response.Temperatures.forEach((item) => {\r\n if (item.ID === 0) {\r\n generalCount.value = item.Count;\r\n generalMarketProducts.value = item.Markets;\r\n generalSpotGoodsCount.value = item.InstockCount;\r\n } else if (item.ID === 1) {\r\n refrigerationCount.value = item.Count;\r\n refrigerationMarketProducts.value = item.Markets;\r\n refrigerationSpotGoodsCount.value = item.InstockCount;\r\n } else {\r\n freezingCount.value = item.Count;\r\n freezingMarketProducts.value = item.Markets;\r\n freezingSpotGoodsCount.value = item.InstockCount;\r\n }\r\n });\r\n dataIsLoad.value = true;\r\n }\r\n\r\n function getCartInfo() {\r\n dataIsLoad.value = false;\r\n getCartInfoAPI()\r\n .then((res) => {\r\n if (res.data.Code === 200) {\r\n changeCartTotalCount(res);\r\n }\r\n })\r\n .catch((error) => {\r\n console.log(error);\r\n });\r\n }\r\n\r\n function getHotSearch() {\r\n hotLoad.value = false;\r\n\r\n getHotSearchAPI({\r\n params: {\r\n period: 'range',\r\n date: 'last3',\r\n limit: 10,\r\n },\r\n })\r\n .then((res) => {\r\n if (res.data.Code === 200) {\r\n const hotArray = [];\r\n for (let i = 0; i < res.data.Response.length; i++) {\r\n hotArray.push(res.data.Response[i]);\r\n }\r\n hotSearch.value = hotArray;\r\n hotLoad.value = true;\r\n }\r\n })\r\n .catch((error) => {\r\n console.log(error);\r\n });\r\n }\r\n\r\n return {\r\n dataIsLoad,\r\n totalCount,\r\n generalCount,\r\n refrigerationCount,\r\n freezingCount,\r\n generalMarketProducts,\r\n refrigerationMarketProducts,\r\n freezingMarketProducts,\r\n temperaturesData,\r\n count,\r\n hotSearch,\r\n hotLoad,\r\n\r\n isOnlyOneTemp,\r\n\r\n changeCartTotalCount,\r\n getCartInfo,\r\n getHotSearch,\r\n };\r\n});\r\n\r\nexport default useMiniCartStore;\r\n","import { ref, onMounted, onUnmounted, nextTick } from 'vue';\r\n\r\nconst isActive = ref(false);\r\nconst paddingStyle = ref('0px');\r\n\r\n/**\r\n * PC選單展開\r\n */\r\nasync function useHeaderExtend() {\r\n await nextTick(); // 因為 v-clock 確保 DOM 完全更新\r\n const header = document.querySelector('.header');\r\n const headerHight = header.offsetHeight;\r\n // eslint-disable-next-line radix\r\n const headerPaddingTop = parseInt(getComputedStyle(header).paddingTop, 10);\r\n\r\n if (document.body.id === 'page-index' && window.innerWidth >= 768) {\r\n if (window.scrollY > headerHight) {\r\n isActive.value = true;\r\n } else {\r\n isActive.value = false;\r\n }\r\n }\r\n\r\n if (window.innerWidth < 1200) {\r\n const detailBlocks = document.querySelectorAll('.detail-block');\r\n detailBlocks.forEach((detailBlock) => {\r\n detailBlock.style.top = `${headerHight + headerPaddingTop - 10}px`;\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * PC選單不同寬度下調整\r\n */\r\nasync function useResizeList() {\r\n await nextTick(); // 因為 v-clock 確保 DOM 完全更新\r\n if (window.innerWidth < 1200) {\r\n const navList = document.querySelector('.nav-list');\r\n const actionBlock = document.querySelector('.action-block');\r\n if (navList && actionBlock) {\r\n const actionBlockWidth = actionBlock.offsetWidth;\r\n navList.style.width = `calc(100% - ${actionBlockWidth + 24}px)`;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * PC選單展開動畫\r\n */\r\n\r\nasync function useControlHeader() {\r\n await nextTick(); // 因為 v-clock 確保 DOM 完全更新\r\n const header = document.querySelectorAll('header');\r\n if (header.length < 1) return;\r\n\r\n document.querySelectorAll('.nav-name').forEach((element) => {\r\n // eslint-disable-next-line func-names\r\n element.addEventListener('mouseenter', function (e) {\r\n e.preventDefault();\r\n\r\n if (this.querySelectorAll('.detail-block').length > 0) {\r\n const elementHeight = this.offsetHeight;\r\n const elementTopPosition = this.getBoundingClientRect().top;\r\n\r\n document.querySelectorAll('.detail-block').forEach((block) => {\r\n block.style.top = `${elementHeight + elementTopPosition}px`;\r\n });\r\n }\r\n\r\n // 判斷螢幕寬度 > 1200 因為 769-1200 分類選單文字會斷行破版\r\n const detailBlock = this.querySelector('.detail-block');\r\n if (detailBlock) {\r\n const subTypeCount = this.querySelectorAll(\r\n '.detail-block > .detail-inner > .list-block > .detail-list',\r\n ).length;\r\n const detailBlockLeft = detailBlock.getBoundingClientRect().left + window.scrollX;\r\n const isTablet =\r\n detailBlockLeft + 110 * subTypeCount + (window.innerWidth > 1200 ? 352 : 250) + 80 >=\r\n window.innerWidth;\r\n if (isTablet) {\r\n detailBlock.style.right = '0px';\r\n }\r\n if (window.innerWidth > 1200) {\r\n detailBlock.style.right = 'unset';\r\n }\r\n }\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * MB選單展開動畫\r\n */\r\nfunction useMbBottomBar() {\r\n const bottomEl = document.querySelector('#bottom-more');\r\n bottomEl.addEventListener('click', (e) => {\r\n if (bottomEl) {\r\n const targetSelector = bottomEl.getAttribute('data-sidebar');\r\n const targetElement = document.querySelector(targetSelector);\r\n const closeBtnSelector = bottomEl.getAttribute('data-close');\r\n const closeBtnElement = document.querySelector(closeBtnSelector);\r\n const defaultTypeSelector = bottomEl.getAttribute('data-type');\r\n const defaultTypeElement = document.querySelector(defaultTypeSelector);\r\n const defaultListSelector = bottomEl.getAttribute('data-list');\r\n const defaultListElement = document.querySelector(defaultListSelector);\r\n\r\n // Toggle 'active' class on the target element and the clicked element\r\n if (targetElement) {\r\n targetElement.classList.toggle('active');\r\n }\r\n bottomEl.classList.toggle('active');\r\n\r\n if (bottomEl.classList.contains('active')) {\r\n document.querySelector('body').classList.add('lock-page');\r\n } else {\r\n document.querySelector('body').classList.remove('lock-page');\r\n }\r\n if (closeBtnElement) {\r\n closeBtnElement.style.display = 'inline-block';\r\n closeBtnElement.style.marginRight = '0px';\r\n closeBtnElement.style.marginLeft = '15px';\r\n }\r\n if (defaultTypeElement) {\r\n defaultTypeElement.classList.add('active');\r\n }\r\n if (defaultListElement) {\r\n defaultListElement.style.display = 'inline-block';\r\n }\r\n }\r\n });\r\n}\r\n\r\nfunction useMbMainSideBar() {\r\n document.querySelectorAll('.sidebar-main-type').forEach((element) => {\r\n // eslint-disable-next-line func-names\r\n element.addEventListener('click', function (e) {\r\n e.preventDefault();\r\n\r\n const target = this.getAttribute('data-list');\r\n\r\n document.querySelectorAll('.sidebar-main-type').forEach((el) => {\r\n el.classList.remove('active');\r\n });\r\n\r\n document.querySelectorAll('.level2-list').forEach((el) => {\r\n el.style.display = 'none';\r\n });\r\n this.classList.toggle('active');\r\n\r\n // 設定顯示的display样式为'inline-block'\r\n const targetElement = document.querySelector(target);\r\n if (targetElement) {\r\n targetElement.style.display = 'inline-block';\r\n }\r\n });\r\n });\r\n}\r\nfunction useMbMore() {\r\n const bottomEl = document.querySelector('#mb-more');\r\n bottomEl.addEventListener('click', (e) => {\r\n if (bottomEl) {\r\n const targetSelector = bottomEl.getAttribute('data-sidebar');\r\n const targetElement = document.querySelector(targetSelector);\r\n const closeBtnSelector = bottomEl.getAttribute('data-close');\r\n const closeBtnElement = document.querySelector(closeBtnSelector);\r\n const defaultTypeSelector = bottomEl.getAttribute('data-type');\r\n const defaultTypeElement = document.querySelector(defaultTypeSelector);\r\n const defaultListSelector = bottomEl.getAttribute('data-list');\r\n const defaultListElement = document.querySelector(defaultListSelector);\r\n\r\n // Toggle 'active' class on the target element and the clicked element\r\n if (targetElement) {\r\n targetElement.classList.toggle('active');\r\n }\r\n bottomEl.classList.toggle('active');\r\n\r\n if (bottomEl.classList.contains('active')) {\r\n document.querySelector('body').classList.add('lock-page');\r\n } else {\r\n document.querySelector('body').classList.remove('lock-page');\r\n }\r\n if (closeBtnElement) {\r\n closeBtnElement.style.display = 'inline-block';\r\n closeBtnElement.style.marginRight = '0px';\r\n closeBtnElement.style.marginLeft = '15px';\r\n }\r\n if (defaultTypeElement) {\r\n defaultTypeElement.classList.add('active');\r\n }\r\n if (defaultListElement) {\r\n defaultListElement.style.display = 'inline-block';\r\n }\r\n }\r\n });\r\n}\r\n/**\r\n * MB選單關閉按鈕\r\n */\r\nfunction useMbSideBarClose() {\r\n const closeEl = document.querySelector('#header-close');\r\n closeEl.addEventListener('click', (e) => {\r\n const sidebarSelector = closeEl.getAttribute('data-sidebar');\r\n const sidebarElement = document.querySelector(sidebarSelector);\r\n if (sidebarElement) {\r\n sidebarElement.classList.remove('active');\r\n }\r\n // 重置初始狀態,確保選單在關閉時恢復\r\n const activeElements = document.querySelectorAll('.sidebar-main-type.active');\r\n\r\n activeElements.forEach((element) => {\r\n element.classList.remove('active');\r\n });\r\n\r\n const level2Lists = document.querySelectorAll('.level2-list');\r\n level2Lists.forEach((element) => {\r\n if (element.style.display === 'inline-block') {\r\n element.style.display = ''; // 清空 display 樣式,回到初始狀態\r\n }\r\n });\r\n document.body.classList.remove('lock-page');\r\n closeEl.style.display = 'none';\r\n });\r\n}\r\n\r\nfunction useHeaderDiffer() {\r\n return {\r\n isActive,\r\n paddingStyle,\r\n useHeaderExtend,\r\n useResizeList,\r\n useControlHeader,\r\n useMbBottomBar,\r\n useMbMainSideBar,\r\n useMbSideBarClose,\r\n useMbMore,\r\n };\r\n}\r\n\r\nexport default useHeaderDiffer;\r\n","/**\r\n * @description 手機板載入時上方Tab選單調整Scrollbar,以確保當前active的選項可見。\r\n * @param {*} scrollbar 頁籤本體X軸\r\n * @param {*} active 所在頁面\r\n * @param {*} adjust\r\n */\r\n\r\nfunction changeScrollbarPosition(scrollbarEl, activeEl, adjustNum = 0) {\r\n if (\r\n document.querySelectorAll(scrollbarEl).length > 0 &&\r\n document.querySelectorAll(activeEl).length > 0\r\n ) {\r\n const scrollbarElement = document.querySelector(scrollbarEl);\r\n const activeElement = document.querySelector(activeEl);\r\n moveScrollbar(scrollbarElement, activeElement, adjustNum);\r\n }\r\n function moveScrollbar(scrollbar, active, adjust) {\r\n const scrollBarWidth = scrollbar.offsetWidth;\r\n const activeItem = active;\r\n const activeRect = activeItem.getBoundingClientRect();\r\n const activePositionLeft = activeRect.left;\r\n const activePositionRight = activeRect.left + activeItem.offsetWidth;\r\n if (activePositionRight > scrollBarWidth) {\r\n scrollbar.scrollLeft = activePositionLeft + adjust - scrollbar.scrollLeft;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 手機板載入時上方Tab選單調整Scrollbar,iphone 客製化\r\n * @description 需參考以下判斷是否為 iphone\r\n * @link [https://mrcodingroom.freesite.host/js-%E5%81%B5%E6%B8%AC%E8%A3%9D%E7%BD%AE%E6%98%AF%E5%90%A6%E7%82%BAios%E6%88%96ipad/]\r\n */\r\n\r\nfunction customScrollbarX(scrollbarEl) {\r\n const detectBrowser = () => {\r\n if (/iPad|iPhone|iPod|Macintosh/.test(navigator.userAgent)) {\r\n try {\r\n document.createEvent('TouchEvent');\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n return false;\r\n };\r\n detectBrowser();\r\n if (detectBrowser()) {\r\n if (document.querySelectorAll(scrollbarEl).length > 0) {\r\n let content;\r\n\r\n if (document.querySelectorAll(scrollbarEl).length > 0) {\r\n content = document.querySelector(scrollbarEl);\r\n }\r\n content.style.marginBottom = '-10px';\r\n content.style.paddingBottom = '23px';\r\n\r\n const scrollRatio = content.clientWidth / content.scrollWidth;\r\n\r\n if (scrollRatio !== 1) {\r\n const scrollbarMarkup =\r\n '
';\r\n content.insertAdjacentHTML('afterend', scrollbarMarkup);\r\n\r\n const thumb = document.querySelector('.thumb');\r\n const track = document.querySelector('.track');\r\n thumb.style.width = `${scrollRatio * 100}%`;\r\n\r\n const scrollContentHandler = () => {\r\n window.requestAnimationFrame(() => {\r\n thumb.style.left = `${(content.scrollLeft * 100) / content.scrollWidth}%`;\r\n });\r\n };\r\n\r\n content.addEventListener('scroll', scrollContentHandler);\r\n\r\n let pos = { left: 0, x: 0 };\r\n\r\n const mouseMoveHandler = (e) => {\r\n const dy = e.clientX - pos.x;\r\n content.scrollLeft(pos.left + dy / scrollRatio);\r\n };\r\n\r\n const mouseUpHandler = () => {\r\n document.removeEventListener('mousemove', mouseMoveHandler);\r\n document.removeEventListener('mouseup', mouseUpHandler);\r\n };\r\n\r\n const mouseDownThumbHandler = (e) => {\r\n pos = {\r\n left: content.scrollLeft,\r\n x: e.clientX,\r\n };\r\n\r\n document.addEventListener('mousemove', mouseMoveHandler);\r\n document.addEventListener('mouseup', mouseUpHandler);\r\n };\r\n\r\n thumb.addEventListener('mousedown', mouseDownThumbHandler);\r\n\r\n const trackClickHandler = (e) => {\r\n const bound = track.getBoundingClientRect();\r\n const percentage = (e.clientY - bound.top) / bound.height;\r\n content.scrollTop = percentage * (content.scrollHeight - content.clientHeight);\r\n };\r\n\r\n track.addEventListener('click', trackClickHandler);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction useScrollBar() {\r\n return {\r\n customScrollbarX,\r\n changeScrollbarPosition,\r\n };\r\n}\r\n\r\nexport default useScrollBar;\r\n","/**\r\n * @description scrollTop 按鈕 id 與 時間\r\n * @param {string} id\r\n * @param {number} duration\r\n */\r\nfunction scrollToTop(id, duration = 300) {\r\n const el = document.querySelector(id);\r\n if (el) {\r\n el.addEventListener('click', () => {\r\n const cosParameter = window.scrollY / 2;\r\n let scrollCount = 0;\r\n let oldTimestamp = null;\r\n\r\n // eslint-disable-next-line consistent-return\r\n function step(newTimestamp) {\r\n if (oldTimestamp !== null) {\r\n // delta = 變化量\r\n scrollCount += (Math.PI * (newTimestamp - oldTimestamp)) / duration;\r\n if (scrollCount >= Math.PI) return window.scrollTo(0, 0);\r\n window.scrollTo(0, Math.round(cosParameter + cosParameter * Math.cos(scrollCount)));\r\n }\r\n oldTimestamp = newTimestamp;\r\n window.requestAnimationFrame(step);\r\n }\r\n window.requestAnimationFrame(step);\r\n });\r\n }\r\n}\r\n\r\nfunction scrollAnimation(endY, duration = 500) {\r\n const startY = window.scrollY;\r\n const change = endY - startY;\r\n const startTime = performance.now();\r\n\r\n function animateScroll(currentTime) {\r\n const elapsedTime = currentTime - startTime;\r\n const fraction = elapsedTime / duration;\r\n\r\n if (fraction < 1) {\r\n const newY = startY + change * fraction;\r\n window.scrollTo(0, newY);\r\n requestAnimationFrame(animateScroll);\r\n } else {\r\n window.scrollTo(0, endY);\r\n }\r\n }\r\n\r\n requestAnimationFrame(animateScroll);\r\n}\r\n\r\n/**\r\n * @description scrollTop 按鈕 id 與 顯示高度\r\n * @param {string} id\r\n * @param {number} top\r\n */\r\nfunction goToTopVisibility(id, top = 500) {\r\n const el = document.querySelector(id);\r\n if (el) {\r\n const { scrollY } = window;\r\n if (scrollY > top) {\r\n el.style.opacity = '1';\r\n el.style.visibility = 'visible';\r\n } else {\r\n el.style.opacity = '0';\r\n el.style.visibility = 'hidden';\r\n }\r\n }\r\n}\r\n\r\nfunction useGoToTop() {\r\n return {\r\n scrollAnimation,\r\n scrollToTop,\r\n goToTopVisibility,\r\n };\r\n}\r\n\r\nexport default useGoToTop;\r\n","import { ref } from 'vue';\r\n\r\nconst messages = ref([]);\r\n\r\n/**\r\n * @description 警示訊息\r\n * @param {String} msg 回傳訊息\r\n * @param {String} cls icon樣式 (只有服飾公版有用到)\r\n * @param {Function} callback\r\n */\r\nfunction showMsg(msg, cls, callback) {\r\n messages.value.push({ msg, cls, callback });\r\n\r\n setTimeout(() => {\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n messages.value.splice(0, 1);\r\n }, 2000);\r\n}\r\n\r\n// 這是為不改變太多的寫法給前、後端用的\r\nconst allMsgFn = () => {\r\n const o = {};\r\n o.success = (msg, callback) => {\r\n showMsg(msg, 'icon-reminder-ok', callback);\r\n };\r\n\r\n o.cart = (msg, callback) => {\r\n showMsg(msg, 'icon-reminder-cart', callback);\r\n };\r\n return o;\r\n};\r\nconst messageBox = allMsgFn();\r\n\r\n// eslint-disable-next-line import/prefer-default-export\r\nfunction useMsg() {\r\n return { messages, messageBox, showMsg };\r\n}\r\n\r\nexport default useMsg;\r\n","/**\r\n * @description 圖片轉換網址\r\n * @param {string} imgUrl 網址\r\n * @param {string} sizeStr 尺寸\r\n */\r\nfunction imgTransfer(imgUrl, sizeStr) {\r\n if (imgUrl == null || imgUrl.length === 0) return null;\r\n\r\n const imgName = imgUrl.substring(imgUrl.lastIndexOf('/') + 1, imgUrl.length - 4);\r\n const imgExtension = imgUrl.substring(imgUrl.length - 4, imgUrl.length);\r\n const splitArr = imgUrl.split('/');\r\n const folderName = splitArr[4];\r\n const pictureContainer = splitArr[3];\r\n\r\n // gif不近縮圖\r\n if (imgUrl.indexOf('gif') !== -1) {\r\n return `https://${window.StaticImgDomain}/${pictureContainer}/${folderName}s/${imgName}${imgExtension}`;\r\n }\r\n if (imgUrl.indexOf('.mp4') !== -1) {\r\n if (imgUrl.indexOf('pics') === -1 && imgUrl.indexOf('pic') !== -1) {\r\n return imgUrl.replace('pic', 'pics');\r\n }\r\n return imgUrl;\r\n }\r\n return `https://${window.StaticImgDomain}/${pictureContainer}/${folderName}s/${imgName}${sizeStr}${imgExtension}`;\r\n}\r\n\r\nfunction useImage() {\r\n return { imgTransfer };\r\n}\r\n\r\nexport default useImage;\r\n","\r\n\r\n\r\n","import script from \"./NewImage.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./NewImage.vue?vue&type=script&setup=true&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","\r\n\r\n\r\n","import script from \"./AlertLayout.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./AlertLayout.vue?vue&type=script&setup=true&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","\r\n\r\n\r\n","import script from \"./AlertConfirm.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./AlertConfirm.vue?vue&type=script&setup=true&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","\r\n\r\n\r\n","import script from \"./AlertInfo.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./AlertInfo.vue?vue&type=script&setup=true&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","\r\n\r\n\r\n","import script from \"./AlertSpecial.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./AlertSpecial.vue?vue&type=script&setup=true&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","import script from \"./AlertDialog.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./AlertDialog.vue?vue&type=script&setup=true&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","\r\n\r\n\r\n","import script from \"./Message.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./Message.vue?vue&type=script&setup=true&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","import script from \"./BrandBtn.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./BrandBtn.vue?vue&type=script&setup=true&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","\r\n\r\n\r\n","import script from \"./BrandListMB.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./BrandListMB.vue?vue&type=script&setup=true&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","\r\n\r\n\r\n","import $ from 'jquery';\r\n\r\nconst setEnv = {\r\n myEquipment() {\r\n return (\r\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ||\r\n window.innerWidth <= 1024\r\n );\r\n },\r\n\r\n smallScreen(breakpoint) {\r\n return window.innerWidth <= (breakpoint || 480);\r\n },\r\n\r\n isLogin() {\r\n return $('.secnav-right, .login-account').attr('islogin') === 'true';\r\n },\r\n\r\n myCookie() {\r\n return navigator.cookieEnabled;\r\n },\r\n\r\n myStorage() {\r\n // ios has bug in private mode\r\n // in private mode, set localStorage will cause error\r\n const testKey = 'test';\r\n const storage = window.localStorage;\r\n try {\r\n storage.setItem(testKey, '1');\r\n storage.removeItem(testKey);\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n },\r\n\r\n pageDependReact() {\r\n // 檢查頁面是否有script標籤調用React libary\r\n return Boolean($('script[src*=\"react\"]').length);\r\n },\r\n\r\n windowReload() {\r\n const windowSizeDefault = window.innerWidth > 1024;\r\n let windowSizeNew;\r\n\r\n $(window).resize(() => {\r\n windowSizeNew = window.innerWidth > 1024;\r\n\r\n if (windowSizeDefault !== windowSizeNew) {\r\n $(window).off('resize');\r\n window.location.reload();\r\n }\r\n });\r\n },\r\n};\r\n\r\nfunction useSetEnv() {\r\n return { setEnv };\r\n}\r\n\r\nexport default useSetEnv;\r\n","// helpers\r\nimport useSetEnv from '@global/composable/useSetEnv';\r\n\r\nconst { setEnv } = useSetEnv();\r\nwindow.nowEnv = window.nowEnv || {};\r\nwindow.nowBrand = {};\r\n\r\nfunction globalCtrl() {\r\n window.nowEnv.NowMyEquipment = setEnv.myEquipment(); // 得知現在的裝置類型\r\n}\r\n\r\nexport default globalCtrl;\r\n","import { createApp, ref, onMounted, onUnmounted } from 'vue';\r\nimport $ from 'jquery';\r\n\r\nimport { createPinia, storeToRefs } from 'pinia';\r\nimport useMiniCartStore from '@global/stores/useMiniCartStore';\r\n\r\nimport useHeaderDiffer from '@composable/useHeaderDiffer';\r\nimport useScrollBar from '@composable/useScrollBar';\r\nimport useGoToTop from '@global/composable/useGoToTop';\r\nimport useAlert from '@global/composable/useAlert';\r\nimport useMsg from '@global/composable/useMessage';\r\nimport useAxiosAPI from '@global/composable/api/useAxiosAPI';\r\n\r\nimport NewImage from '@global/components/common/Image/NewImage.vue';\r\nimport AlertDialog from '@global/components/common/alert/AlertDialog.vue';\r\nimport Message from '@global/components/common/message/Message.vue';\r\n\r\nimport BrandBtn from '@components/BrandBtn.vue';\r\n\r\nimport BrandList from '@page/brand/components/BrandListMB.vue';\r\nimport globalCtrl from '@page/common/js/globalCtrl';\r\n\r\nimport layout from '@/style/layout.scss';\r\n\r\nconst pinia = createPinia();\r\nconst { alertDialog } = useAlert();\r\nconst { messageBox } = useMsg();\r\nconst { getBrandFollowAPI } = useAxiosAPI();\r\n\r\nglobal.$ = require('jquery');\r\n\r\nglobal.jQuery = global.$;\r\n\r\nglobalCtrl();\r\n\r\n/**\r\n * popup、alert跳窗\r\n */\r\n// eslint-disable-next-line vue/one-component-per-file\r\nconst appAlert = createApp({\r\n components: {\r\n AlertDialog,\r\n Message,\r\n },\r\n});\r\nappAlert.mount('#app-common');\r\n\r\n/**\r\n * 桌機選單\r\n */\r\n\r\n// eslint-disable-next-line vue/one-component-per-file\r\nconst pcHeader = createApp({\r\n components: {\r\n NewImage,\r\n },\r\n setup() {\r\n const { isActive, paddingStyle, useHeaderExtend, useResizeList, useControlHeader } =\r\n useHeaderDiffer();\r\n\r\n const isLogin = ref(false);\r\n\r\n const miniCartStore = useMiniCartStore();\r\n const { totalCount } = storeToRefs(miniCartStore);\r\n const { getCartInfo } = miniCartStore;\r\n\r\n getCartInfo();\r\n\r\n function handleZeroQuantity() {\r\n alertDialog.alert('購物車目前無商品');\r\n }\r\n\r\n onMounted(() => {\r\n isLogin.value = window.IsLogin === 'True';\r\n\r\n window.addEventListener('scroll', useHeaderExtend);\r\n window.addEventListener('resize', useHeaderExtend, useResizeList);\r\n useHeaderExtend();\r\n useResizeList();\r\n useControlHeader();\r\n });\r\n\r\n onUnmounted(() => {\r\n window.removeEventListener('scroll', useHeaderExtend);\r\n window.removeEventListener('resize', useHeaderExtend);\r\n });\r\n return { isLogin, totalCount, handleZeroQuantity, isActive, paddingStyle };\r\n },\r\n});\r\npcHeader.use(pinia).mount('#app-mini-cart');\r\n\r\n/**\r\n * 手機選單\r\n */\r\n\r\n// eslint-disable-next-line vue/one-component-per-file\r\nconst mbSideBar = createApp({\r\n components: {\r\n BrandBtn,\r\n BrandList,\r\n },\r\n setup() {\r\n const { useMbMainSideBar, useMbSideBarClose } = useHeaderDiffer();\r\n\r\n const brandList = ref([]);\r\n function getBrandFollow() {\r\n getBrandFollowAPI()\r\n .then((res) => {\r\n if (res.data.Code === 200) {\r\n if (res.data.Response) {\r\n for (let i = 0; i < res.data.Response.length; i++) {\r\n if (res.data.Response[i].Followed) {\r\n brandList.value.push(res.data.Response[i]);\r\n }\r\n }\r\n }\r\n }\r\n })\r\n .catch((error) => {\r\n console.log(error);\r\n });\r\n }\r\n getBrandFollow();\r\n\r\n function updateBrandList() {\r\n brandList.value = [];\r\n getBrandFollow();\r\n }\r\n\r\n onMounted(() => {\r\n useMbMainSideBar();\r\n useMbSideBarClose();\r\n });\r\n\r\n return {\r\n brandList,\r\n updateBrandList,\r\n };\r\n },\r\n});\r\nmbSideBar.mount('#side-bar');\r\n\r\n// eslint-disable-next-line vue/one-component-per-file\r\nconst mbBottomBar = createApp({\r\n setup() {\r\n const { useMbBottomBar } = useHeaderDiffer();\r\n const isLogin = ref(false);\r\n\r\n const miniCartStore = useMiniCartStore();\r\n const { totalCount } = storeToRefs(miniCartStore);\r\n function handleZeroQuantity() {\r\n alertDialog.alert('購物車目前無商品');\r\n }\r\n\r\n const isExpend = ref(false);\r\n function expendMenu() {\r\n isExpend.value = !isExpend.value;\r\n }\r\n\r\n onMounted(() => {\r\n isLogin.value = window.IsLogin === 'True';\r\n useMbBottomBar();\r\n });\r\n\r\n return { isLogin, totalCount, handleZeroQuantity, expendMenu, isExpend };\r\n },\r\n});\r\nmbBottomBar.mount('#bottom-bar');\r\n\r\n/**\r\n * useGoToTop\r\n */\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n const { scrollToTop, goToTopVisibility } = useGoToTop();\r\n window.addEventListener('scroll', () => goToTopVisibility('#top-btn', 500));\r\n scrollToTop('#top-btn', 250);\r\n});\r\n\r\n/**\r\n * useScrollBar TODO: 待測試\r\n */\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n const { changeScrollbarPosition, customScrollbarX } = useScrollBar();\r\n // 所有文章頁 TabList X軸\r\n changeScrollbarPosition('.article-change-items', '.article-change-items .active');\r\n customScrollbarX('.article-change-items');\r\n // 所有會員頁 TabList X軸\r\n changeScrollbarPosition('.member-menu-list', '.member-menu-list .active');\r\n customScrollbarX('.member-menu-list');\r\n});\r\n\r\n// 全域方法前後端使用\r\nwindow.messageBox = messageBox;\r\nwindow.AlertDialog = alertDialog;\r\n\r\n// TODO: GTM\r\n$('.nav-name .banner a').on('click', function getBannerInfo(e) {\r\n window.localStorage.setItem(\r\n 'promotion',\r\n JSON.stringify({\r\n clickName: 'Promotion Nav Banner',\r\n imgLink: $(this).children('img').attr('src'),\r\n }),\r\n );\r\n});\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.j = 3962;","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t3962: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkurliving\"] = self[\"webpackChunkurliving\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [4461], function() { return __webpack_require__(4697); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","alerts","ref","showAlert","msg","type","callback","dataName","value","push","$","css","overflow","closeAlert","index","splice","alertDialog","allAlertFn","o","name","generateHeaders","otherObj","handleDefaultError","handle400","handle401","commonAPI","getFavoriteAPI","instance","getData","get","API_URL","postFavoriteAPI","postData","headers","post","deleteFavoriteAPI","deleteData","delete","_objectSpread","getHotSearchAPI","getCartInfoAPI","getShareAPI","id","postNewsletter","loginAPI","postForgetPS","getAccountExist","orderAPI","deleteOrderAPI","getRefundDetailAPI","getOrderAPI","postRefundCalculateAPI","getShippingFlowAPI","getOrderAtmAPI","postCashInAPI","memberAPI","getVerifyPhoneAPI","getBonusRecordAPI","postBonusWithDrawAPI","postUserIdAPI","postUserBankAccountAPI","getDataAnalyzeAPI","faPointAPI","getVerifyFaPointAPI","getFaPointAPI","postUnbindFaPointAPI","apiCalls","getArticleListAPI","getArticleContentAPI","getArticleCategoryAPI","getAddonCartAPI","getAddonEvent","getBrandFollowAPI","postBrandFollowAPI","deleteBrandFollowAPI","postCouponAPI","postCoupon2API","getOrderAddressAPI","postShoppingCartAPI","getShoppingCartAPI","putShoppingCartAPI","putData","put","getAddressBookAPI","deleteAddressBookAPI","postAddressBookAPI","getLastInvoiceAPI","getVerifyMobileCode","getCartRecommendDataAPI","getSearchRecommendAPI","getSortConditionAPI","getDataAPI","getSeriesDataAPI","getBrandRecommendDataAPI","getRecommendDataAPI","getMarketRecommendDataAPI","postNoticeAPI","api","key","func","Object","entries","_len","arguments","length","args","Array","_key","useAlert","axios","create","baseURL","interceptors","request","use","config","error","Promise","reject","response","res","successHandle","data","Code","alert","Message","confirm","window","location","href","resolve","createApi","useAxiosAPI","defineStore","dataIsLoad","totalCount","generalCount","refrigerationCount","freezingCount","generalSpotGoodsCount","refrigerationSpotGoodsCount","freezingSpotGoodsCount","generalMarketProducts","refrigerationMarketProducts","freezingMarketProducts","temperaturesData","count","hotSearch","hotLoad","isOnlyOneTemp","computed","hasProductTempCount","changeCartTotalCount","itemArray","Response","TotalCount","Temperatures","forEach","item","ID","Count","Markets","InstockCount","getCartInfo","then","catch","console","log","getHotSearch","params","period","date","limit","hotArray","i","isActive","paddingStyle","async","useHeaderExtend","nextTick","header","document","querySelector","headerHight","offsetHeight","headerPaddingTop","parseInt","getComputedStyle","paddingTop","body","innerWidth","scrollY","querySelectorAll","detailBlock","style","top","useResizeList","navList","actionBlock","actionBlockWidth","offsetWidth","width","useControlHeader","element","addEventListener","e","preventDefault","this","elementHeight","elementTopPosition","getBoundingClientRect","block","subTypeCount","left","scrollX","right","useMbBottomBar","bottomEl","targetSelector","getAttribute","targetElement","closeBtnSelector","closeBtnElement","defaultTypeSelector","defaultTypeElement","defaultListSelector","defaultListElement","classList","toggle","contains","add","remove","display","marginRight","marginLeft","useMbMainSideBar","target","el","useMbMore","useMbSideBarClose","closeEl","sidebarSelector","sidebarElement","changeScrollbarPosition","scrollbarEl","activeEl","adjustNum","undefined","scrollbar","active","adjust","scrollBarWidth","activeItem","activeRect","activePositionLeft","scrollLeft","moveScrollbar","customScrollbarX","detectBrowser","test","navigator","userAgent","createEvent","content","marginBottom","paddingBottom","scrollRatio","clientWidth","scrollWidth","scrollbarMarkup","insertAdjacentHTML","thumb","track","scrollContentHandler","requestAnimationFrame","pos","x","mouseMoveHandler","dy","clientX","mouseUpHandler","removeEventListener","mouseDownThumbHandler","trackClickHandler","bound","percentage","clientY","height","scrollTop","scrollHeight","clientHeight","scrollToTop","duration","cosParameter","scrollCount","oldTimestamp","step","newTimestamp","Math","PI","scrollTo","round","cos","scrollAnimation","endY","startY","change","startTime","performance","now","animateScroll","currentTime","fraction","newY","goToTopVisibility","opacity","visibility","messages","showMsg","cls","setTimeout","messageBox","allMsgFn","imgTransfer","imgUrl","sizeStr","imgName","substring","lastIndexOf","imgExtension","splitArr","split","folderName","pictureContainer","indexOf","StaticImgDomain","replace","useImage","props","__props","renderImg","url","size","onMounted","on","useMsg","off","currentBrand","parents","siblings","html","not","each","children","removeClass","emit","__emit","toggleFollow","event","notUpdate","BrandCode","brandCode","updateData","setEnv","myEquipment","smallScreen","breakpoint","isLogin","attr","myCookie","cookieEnabled","myStorage","testKey","storage","localStorage","setItem","removeItem","pageDependReact","Boolean","windowReload","windowSizeDefault","windowSizeNew","resize","reload","useSetEnv","nowEnv","nowBrand","NowMyEquipment","pinia","createPinia","global","require","jQuery","globalCtrl","createApp","components","AlertDialog","mount","pcHeader","NewImage","setup","useHeaderDiffer","miniCartStore","useMiniCartStore","storeToRefs","IsLogin","onUnmounted","handleZeroQuantity","mbSideBar","BrandBtn","BrandList","brandList","getBrandFollow","Followed","updateBrandList","mbBottomBar","isExpend","expendMenu","useGoToTop","useScrollBar","JSON","stringify","clickName","imgLink","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","call","m","O","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","keys","every","r","n","getter","__esModule","d","a","definition","defineProperty","enumerable","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","bind","__webpack_exports__"],"sourceRoot":""}