{"version":3,"file":"app_custom_core.js","mappings":"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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI,MAAMC,UAAU,SAASD,SAAS,CAAC;EAInC,OAAOC,UAAU;AACrB;AAMA,iEAAeF,sBAAsB;;;;;;;;;;;;;;;ACxErC;AACA;AACA;AACA;AACA,SAASG,uBAAuB,CAAClM,UAA0D,EAAE;EACzF;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI,MAAMmM,WAAW,SAASnM,UAAU,CAAC;IACjC7J,KAAK,GAAG;MACJ,OAAO;QACH,GAAG,KAAK,CAACA,KAAK,EAAE;QAChB2M,cAAc,EAAE;MACpB,CAAC;IACL;EACJ;EAEA,OAAOqJ,WAAW;AACtB;AAMA,iEAAeD,uBAAuB;;;;;;;;;;;;;;;AC/CtC;AACA;AACA;AACA;AACA;AACA,SAASE,yBAAyB,CAACpM,UAA0D,EAAE;EAC3F;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI,MAAMqM,aAAa,SAASrM,UAAU,CAAC;IAGnCsM,qBAAqB,GAAkB,IAAI;IAE3CnW,KAAK,GAAG;MACJ,OAAO;QACHoW,eAAe,EAAE,CAAC;QAClBC,eAAe,EAAE,CAAC;QAClBC,aAAa,EAAE,CAAC;QAChBC,kBAAkB,EAAE,CAAC;QACrBC,g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,MAAM,EAAE;QACb,KAAK,CAAC6D,MAAM,EAAE;QACd,IAAI,CAAChS,GAAG,CAAC,OAAO,CAAC,CAACC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC;MAC7C;IACJ;IAEAod,eAAe,GAAG,CAAC,CAAC,CAAC;;IAErB;AACR;AACA;AACA;AACA;AACA;IACQC,wBAAwB,CAACrI,CAAc,EAAEzR,KAAY,EAAE;MACnD,IAAIA,KAAK,EAAE;QAAEA,KAAK,CAAC8Z,wBAAwB,EAAE;MAAE;IACnD;EACJ;EAEA,OAAOvB,WAAW;AACtB;AAMA,iEAAeD,uBAAuB;;;;;;;;;;;;;;;AC1TtC;AACA;AACA;AACA;AACA;AACA,SAASyB,qBAAqB,CAACjS,UAA0D,EAAE;EACvF;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI,MAAMgM,SAAS,SAAShM,UAAU,CAAC;IAC/B;AACR;AACA;AACA;AACA;AACA;AACA;IACQ;IACAkS,OAAO,CAACtf,EAAuB,EAAEsF,KAAa,EAAE;MAC5C;AACZ;AACA;AACA;MACY,IAAI,CAACrC,IAAI,CAAC,OAAO,CAAC;IACtB;EACJ;EAEA,OAAOmW,SAAS;AACpB;AAMA,iEAAeiG,qBAAqB;;;;;;;;;;;;;;;AC9FpC;AACA;AACA;AACA;AACA;AACA,SAASE,yBAAyB,CAACnG,SAAuD,EAAE;EACxF;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A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ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAEI,MAAMC,SAAS,SAASD,iBAAiB,CAAC;IACtCvgB,KAAK,GAAG;MACJ,OAAO;QACHygB,WAAW,EAAE,KAAK;QAClBC,aAAa,EAAE,KAAK;QACpBC,SAAS,EAAE,KAAK;QAChB,GAAG,KAAK,CAAC3gB,KAAK;MAClB,CAAC;IACL;;IAEA;AACR;AACA;IACQU,IAAI,GAAG;MACH,KAAK,CAACA,IAAI,EAAE;MACZ,IAAI,CAACkgB,WAAW,EAAE;MAClB,IAAI,CAACne,SAAS,CAA0BtB,IAAI,IAAK;QAC7CA,IAAI,CAAC0f,eAAe,GAAG,IAAI,CAAC7gB,KAAK,EAAE,CAACygB,WAAW;QAC/Ctf,IAAI,CAAC2f,kBAAkB,GAAG,IAAI,CAAC9gB,KAAK,EAAE,CAAC0gB,aAAa;MACxD,CAAC,CAAC;MAEF,IAAI,IAAI,CAAC1gB,KAAK,EAAE,CAAC2gB,SAAS,EAAE;QACxB,IAAI,CAACI,aAAa,EAAE;MACxB;IACJ;;IAEA;AACR;AACA;IACQC,MAAM,GAAG;MACL,IAAI,CAACtgB,IAAI,EAAE;MACX,IAAI,CAACugB,oBAAoB,EAAE;IAC/B;;IAEA;AACR;AACA;IACQA,oBAAoB,GAAG;MACnB,IAAI,CAACxe,SAAS,CAA0BtB,IAAI,IAAK;QAC7CA,IAAI,CAAC+f,gBAAgB,CAAC/f,IAAI,CAACggB,WAAW,CAAC;QACvChgB,IAAI,CAACigB,WAAW,EAAE;M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AACnB;AAMA,iEAAeD,oBAAoB;;;;;;;;;;;;;;;ACvxBnC;AACA;AACA;AACA;AACA;AACA,SAASiH,yBAAyB,CAACC,KAAiE,EAAE;EAClG;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI,MAAMC,aAAa,SAASD,KAAK,CAAC;IAC9B;AACR;AACA;AACA;IACQE,OAAO,GAAG;MACN,IAAI,CAACC,UAAU,EAAE;MACjB;AACZ;AACA;AACA;MACY,IAAI,CAACvuB,IAAI,CAAC,SAAS,CAAC;IACxB;;IAEA;AACR;AACA;AACA;IACQwuB,kBAAkB,GAAG;MACjB,IAAI,CAACD,UAAU,EAAE;MACjB;AACZ;AACA;AACA;MACY,IAAI,CAACvuB,IAAI,CAAC,oBAAoB,CAAC;IACnC;EACJ;EAEA,OAAOquB,aAAa;AACxB;AAMA,iEAAeF,yBAAyB;;;;;;;;;;;;;;;AC7GxC;AACA;AACA;AACA;AACA,SAASM,6BAA6B,CAACzwB,MAAe,EAAE;EACpD;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI,MAAM0wB,iBAAiB,SAAS1wB,MAAM,CAAC;IAGnCsC,KAAK,GAAG;MACJ,OAAO;QACHquB,sBAAsB,EAAE,IAAI;QAC5B,GAAG,KAAK,CAACruB,KAAK;MAClB,CAAC;IACL;IAEAU,IAAI,GAAG;MACH,KAAK,CAACA,IAAI,EAAE;MAEZ,IAAI,CAACU,EAAE,CAAqB,SAAS,EAAE,IAAI,CAACktB,SAAS,EAAE/mB,MAAM,CAAC;MAC9D,IAAI,CAACnG,EAAE,CAAqB,QAAQ,EAAE,IAAI,CAACmtB,QAAQ,EAAEhnB,MAAM,CAAC;IAChE;;IAEA;AACR;AACA;IACQ+mB,SAAS,GAAG;MACR,IAAI,CAACE,SAAS,EAAE;IACpB;;IAEA;AACR;AACA;IACQD,QAAQ,GAAG;MACP7oB,UAAU,CAAC,MAAM;QACb,IAAI,CAAC+oB,SAAS,EAAE;MACpB,CAAC,EAAE,IAAI,CAACzuB,KAAK,EAAE,CAACquB,sBAAsB,CAAC;IAC3C;;IAEA;AACR;AACA;IACQG,SAAS,GAAG;MACR,IAAI,IAAI,CAACE,iBAAiB,EAAE;QACxB,IAAI,CAACnwB,GAAG,CAAC,WAAW,CAAC,CAACoE,IAAI,EAAE;MAChC,CAAC,MAAM;QACH,IAAI,CAACgsB,kBAAkB,EAAE;MAC7B;IACJ;;IAEA;AACR;AACA;IACQF,SAAS,GAAG;MACR,IAAI,CAAClwB,GAAG,CAAC,WAAW,CAAC,CAACmE,IAAI,EAAE;IAChC;;IAEA;AACR;AACA;AACA;IACQisB,kBAAkB,GAAG;MACjB,MAAMC,YAAY,GAAG,IAAI,CAACrwB,GAAG,CAAC,UAAU,CAAC,CAACjD,GAAG,CAAC,CAAC,CAAC;MAChD,MAAMuzB,SAAS,GAAG,IAAI,CAACtwB,GAAG,CAAC,WAAW,CAAC,CAACjD,GAAG,CAAC,CAAC,CAAC;MAE9C,IAAIszB,YAAY,IAAIC,SAAS,EAAE;QAC3BA,SAAS,CAACxrB,SAAS,GAAGurB,YAAY,CAACE,SAAS;QAC5C,IAAI,CAACJ,iBAAiB,GAAG,IAAI;QAC7BG,SAAS,CAACE,aAAa,CAAC,QAAQ,CAAC,EAAE9sB,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAACwsB,SAAS,CAAC;MAChF;IACJ;EACJ;EAEA,OAAOL,iBAAiB;AAC5B;AAMA,iEAAeD,6BAA6B;;;;;;;;;;;;;;;;;ACnHK;AACQ;AAEzD,SAASe,2BAA2B,CAACxxB,MAAe,EAAE;EAClD;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI,MAAMyxB,eAAe,SAASzxB,MAAM,CAAC;IACjCsC,KAAK,GAAG;MACJ,OAAO;QACHovB,SAAS,EAAE,EAAE;QACbC,SAAS,EAAE,EAAE;QACb,GAAG,KAAK,CAACrvB,KAAK;MAClB,CAAC;IACL;IAEAU,IAAI,GAAG;MACH,IAAI,CAAC6G,MAAM,CAAC+nB,gBAAgB,EAAEC,mBAAmB,EAAE;QAC/C;MACJ;MAEA,IAAIN,0DAAS,CAAC,kBAAkB,CAAC,KAAK,GAAG,EAAE;QACvC;MACJ;MAEA,IAAI,CAAC1wB,GAAG,CAAC,MAAM,CAAC,CACXoE,IAAI,EAAE,CACNnE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;IAC9B;;IAEA;AACR;AACA;AACA;IACQilB,WAAW,CAAC+L,SAAkB,EAAE;MAC5B,IAAI,CAACjxB,GAAG,CAAC,MAAM,CAAC,CAACqE,MAAM,CAAC4sB,SAAS,CAAC;IACtC;;IAEA;AACR;AACA;AACA;AACA;IACQC,MAAM,GAAqC;MACvC,OAAO5pB,6DAAc,CAAC,IAAI,CAAC7F,KAAK,EAAE,CAACovB,SAAS,EAAE3vB,SAAS,EAAE,MAAM,CAAC,CAAC0H,OAAO,CAAC,MAAM;QAC3E,IAAI,CAACsc,WAAW,CAAC,KAAK,CAAC;QACvBuL,0DAAS,CAAC,kBAAkB,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC;QAC7CA,0DAAS,CAAC,mBAAmB,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC;MAClD,CAAC,CAAC;IACN;;IAEA;AACR;AACA;AACA;AACA;IACQlrB,MAAM,GAAqC;MACvC,OAAO+B,6DAAc,CAAC,IAAI,CAAC7F,KAAK,EAAE,CAACqvB,SAAS,EAAE5vB,SAAS,EAAE,MAAM,CAAC,CAAC0H,OAAO,CAAC,MAAM;QAC3E,IAAI,CAACsc,WAAW,CAAC,KAAK,CAAC;QACvBuL,0DAAS,CAAC,kBAAkB,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC;MACjD,CAAC,CAAC;IACN;EACJ;EAEA,OAAOG,eAAe;AAC1B;AAMA,iEAAeD,2BAA2B;;;;;;;;;;;;;;;;ACrHa;;AAEvD;AACA;AACA;AACA,SAASS,yBAAyB,CAACjyB,MAAe,EAAE;EAChD;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI,MAAMkyB,aAAa,SAASlyB,MAAM,CAAC;IAC/BsC,KAAK,GAAG;MACJ,OAAO;QACH6vB,GAAG,EAAE,EAAE;QACP,GAAG,KAAK,CAAC7vB,KAAK;MAClB,CAAC;IACL;IAEAU,IAAI,GAAG;MACHgvB,qEAAe,CAAC,IAAI,CAAC1vB,KAAK,EAAE,CAAC6vB,GAAG,CAAC,CAC5BrsB,IAAI,CAACsD,QAAQ,IAAI;QACd,MAAM+nB,SAAS,GAAG,IAAI,CAACtwB,GAAG,CAAC,MAAM,CAAC,CAACjD,GAAG,CAAC,CAAC,CAAC;QAEzC,IAAIuzB,SAAS,EAAE;UACXA,SAAS,CAACxrB,SAAS,GAAGyD,QAAQ;QAClC;MACJ,CAAC,CAAC;IACV;EACJ;EAEA,OAAO8oB,aAAa;AACxB;AAMA,iEAAeD,yBAAyB;;;;;;;;;;;;;;;AC/CxC;AACA;AACA;AACA,SAASG,yBAAyB,CAACpyB,MAAe,EAAE;EAChD;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI,MAAMqyB,aAAa,SAASryB,MAAM,CAAC;IAC/BsyB,MAAM,GAAG,KAAK;IAIdhwB,KAAK,GAAG;MACJ,OAAO;QACHiwB,UAAU,EAAE,KAAK;QACjBC,cAAc,EAAE,KAAK;QACrBF,MAAM,EAAE,KAAK;QACbG,OAAO,EAAE,EAAE;QACX,GAAG,KAAK,CAACnwB,KAAK;MAClB,CAAC;IACL;IAEAU,IAAI,GAAG;MACH,IAAI,CAACsvB,MAAM,GAAG,IAAI,CAAChwB,KAAK,EAAE,CAACgwB,MAAM;MAEjC,IAAI,CAAC,IAAI,CAAChwB,KAAK,EAAE,CAACmwB,OAAO,EAAE;QACvB,MAAM,IAAI5zB,KAAK,CAAC,8BAA8B,CAAC;MACnD;MAEA,IAAI,IAAI,CAACyD,KAAK,EAAE,CAACiwB,UAAU,EAAE;QACzB,IAAI,CAACG,WAAW,EAAE;MACtB,CAAC,MAAM,IAAI,IAAI,CAACpwB,KAAK,EAAE,CAACkwB,cAAc,EAAE;QACpC,IAAI,CAACG,QAAQ,GAAG,IAAIC,oBAAoB,CAAC;UAAA,IAAC,CAACC,KAAK,CAAC;UAAA,OAAK,IAAI,CAACC,cAAc,CAACD,KAAK,CAAC;QAAA,GAAE;UAC9EE,SAAS,EAAE,GAAG;UAAE;UAChBC,UAAU,EAAE,OAAO,CAAC;QACxB,CAAC,CAAC;;QACF,MAAMC,aAAa,GAAG,IAAI,CAACpyB,GAAG,CAAC,MAAM,CAAC,CAACjD,GAAG,EAAE;QAE5C,IAAIq1B,aAAa,EAAE;UACf,IAAI,CAACN,QAAQ,CAACO,OAAO,CAACD,aAAa,CAAC,CAAC,CAAC;QAC1C;MACJ;IACJ;;IAEA;AACR;AACA;IACQH,cAAc,CAACD,KAAK,EAAE;MAClB,IAAIA,KAAK,IAAIA,KAAK,CAACM,cAAc,IAAI,IAAI,CAACR,QAAQ,EAAE;QAChD,IAAI,CAACA,QAAQ,CAACS,UAAU,EAAE;QAC1B,IAAI,CAACT,QAAQ,GAAG5wB,SAAS;QACzB,IAAI,CAAC2wB,WAAW,EAAE;MACtB;IACJ;IAEAA,WAAW,GAAG;MACV,IAAI,IAAI,CAACJ,MAAM,EAAE;QACb;MACJ;MAEA,IAAI,IAAI,CAAChwB,KAAK,EAAE,CAACmwB,OAAO,EAAE;QACtB,IAAI,CAACnwB,KAAK,EAAE,CAACmwB,OAAO,CAACrxB,KAAK,CAAC,GAAG,CAAC,CAACC,OAAO,CAAEoxB,OAAO,IAAK;UACjD,IAAI,CAACtwB,QAAQ,EAAE,CAACH,IAAI,CAAC,aAAa,EAAEywB,OAAO,CAAC;QAChD,CAAC,CAAC;QAEF,IAAI,CAACH,MAAM,GAAG,IAAI;MACtB;IACJ;EACJ;EAEA,OAAOD,aAAa;AACxB;AAMA,iEAAeD,yBAAyB;;;;;;;;;;;;;;;AC9FxC;AACA;AACA;AACA;AACA;AACA,SAASiB,sBAAsB,CAACrzB,MAAe,EAAE;EAC7C;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI,MAAMszB,UAAU,SAAStzB,MAAM,CAAC;IAC5BsC,KAAK,GAAG;MACJ,OAAO;QACHixB,gBAAgB,EAAE,kBAAkB;QACpCC,iBAAiB,EAAE,mBAAmB;QACtCC,UAAU,EAAE,KAAK;QACjBC,aAAa,EAAE,KAAK;QACpB,GAAG,KAAK,CAACpxB,KAAK;MAClB,CAAC;IACL;IAEAU,IAAI,GAAG;MACH,KAAK,CAACA,IAAI,EAAE;MAEZ,IAAI,CAAC2wB,WAAW,EAAE;MAElB,IAAI,IAAI,CAACrxB,KAAK,EAAE,CAACmxB,UAAU,EAAE;QACzB,IAAI,CAACG,WAAW,EAAE;MACtB;IACJ;;IAEA;AACR;AACA;IACQjvB,SAAS,GAAG;MACR,IAAI,CAAC,IAAI,CAACrC,KAAK,EAAE,CAACoxB,aAAa,GAAG,aAAa,GAAG,aAAa,CAAC,EAAE;IACtE;;IAEA;AACR;AACA;AACA;IACQG,aAAa,GAAG;MACZ,MAAMC,eAAe,GAAG,IAAI,CAACjzB,GAAG,CAAC,mBAAmB,CAAC,CAACI,OAAO,CAAC,QAAQ,CAAC;MAEvE,IAAI,CAAC6yB,eAAe,GAAG,aAAa,GAAG,aAAa,CAAC,EAAE;MAEvD,IAAIA,eAAe,EAAE;QACjB,IAAI,CAACjzB,GAAG,CAAC,kBAAkB,CAAC,CAAC+O,KAAK,EAAE;MACxC,CAAC,MAAM;QACH,IAAI,CAACmkB,YAAY,EAAE;MACvB;IACJ;;IAEA;AACR;AACA;IACQH,WAAW,GAAG;MACV,IAAI,CAAC/yB,GAAG,CAAC,mBAAmB,CAAC,CAACoE,IAAI,EAAE,CAACnE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC;MACjE,IAAI,CAACD,GAAG,CAAC,kBAAkB,CAAC,CAACC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC;IAC9D;;IAEA;AACR;AACA;IACQ6yB,WAAW,GAAG;MACV,IAAI,CAAC9yB,GAAG,CAAC,mBAAmB,CAAC,CAACmE,IAAI,EAAE,CAAClE,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;MAChE,IAAI,CAACD,GAAG,CAAC,kBAAkB,CAAC,CAACC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC;IAC/D;;IAEA;AACR;AACA;AACA;IACQizB,YAAY,GAAG;MACX,IAAI,CAAC,IAAI,CAAClzB,GAAG,CAAC,mBAAmB,CAAC,CAACI,OAAO,CAAC,QAAQ,CAAC,EAAE;QAClD;QACA,IAAI,CAACa,YAAY,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;MAC7D;IACJ;EACJ;EAEA,OAAOwxB,UAAU;AACrB;AAMA,iEAAeD,sBAAsB;;;;;;;;;;;;;;;AC3HrC;AACA;AACA;AACA;AACA,SAASW,wBAAwB,CAACh0B,MAAe,EAAE;EAC/C;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI,MAAMi0B,YAAY,SAASj0B,MAAM,CAAC;IAC9BsC,KAAK,GAAG;MACJ,OAAO;QACH4xB,cAAc,EAAE,WAAW;QAC3BzxB,GAAG,EAAE,2BAA2B;QAChC,GAAG,KAAK,CAACH,KAAK;MAClB,CAAC;IACL;;IAEA;AACR;AACA;IACQU,IAAI,GAAG;MACH,KAAK,CAACA,IAAI,EAAE;MAEZ,MAAMmxB,kBAAkB,GAAGtqB,MAAM,CAACuqB,cAAc,CAACC,OAAO,CAAC,IAAI,CAAC/xB,KAAK,EAAE,CAACG,GAAG,CAAC;MAE1E,IAAI,CAAC0xB,kBAAkB,IAAIA,kBAAkB,KAAK,GAAG,EAAE;QACnD,IAAI,CAACtzB,GAAG,CAAC,MAAM,CAAC,CAACkQ,QAAQ,CAAC,IAAI,CAACzO,KAAK,EAAE,CAAC4xB,cAAc,CAAC;MAC1D;IACJ;;IAEA;AACR;AACA;AACA;IACQI,OAAO,GAAG;MACN,IAAI,CAACzzB,GAAG,CAAC,MAAM,CAAC,CAACoC,WAAW,CAAC,IAAI,CAACX,KAAK,EAAE,CAAC4xB,cAAc,CAAC;MACzDrqB,MAAM,CAACuqB,cAAc,CAACG,OAAO,CAAC,IAAI,CAACjyB,KAAK,EAAE,CAACG,GAAG,EAAE,GAAG,CAAC;IACxD;EACJ;EAEA,OAAOwxB,YAAY;AACvB;AAMA,iEAAeD,wBAAwB;;;;;;;;;;;;;;;AChEvC;AACA;AACA;AACA;AACA,SAASQ,wBAAwB,CAACx0B,MAAe,EAAE;EAC/C;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI,MAAMy0B,YAAY,SAASz0B,MAAM,CAAC;IAC9BsC,KAAK,GAAG;MACJ,OAAO;QACHoyB,YAAY,EAAE,EAAE;QAChB,GAAG,KAAK,CAACpyB,KAAK;MAClB,CAAC;IACL;;IAEA;AACR;AACA;IACQqyB,YAAY,GAAG;MACX,IAAI,IAAI,CAACryB,KAAK,EAAE,CAACoyB,YAAY,EAAE;QAC3B,IAAI,CAACvyB,QAAQ,EAAE,CAACH,IAAI,CAAC,IAAI,CAACM,KAAK,EAAE,CAACoyB,YAAY,EAAE,IAAI,CAAC;MACzD;IACJ;EACJ;EAEA,OAAOD,YAAY;AACvB;AAMA,iEAAeD,wBAAwB;;;;;;;;;;;;;;;;;AC3DQ;AACK;AAKpD,MAAMtgB,OAAO,GAAG,CAAC;AAKjB;AACA;AACA;AACA;AACA;AACA,SAAS0gB,4BAA4B,CAAC50B,MAAe,EAAE;EACnD;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI,MAAM60B,gBAAgB,SAAS70B,MAAM,CAAC;IAelC80B,wBAAwB,GAAG,EAAE;IAE7BC,gBAAgB,GAAG,KAAK;IAExBC,oBAAoB,GAAG,KAAK;IAI5B1yB,KAAK,GAAG;MACJ,OAAO;QACH2yB,kBAAkB,EAAE,eAAe;QACnCjL,aAAa,EAAE,sBAAsB;QACrCkK,cAAc,EAAE,WAAW;QAC3BgB,YAAY,EAAE,SAAS;QACvBC,aAAa,EAAE,GAAG;QAAE;;QAEpB,GAAG,KAAK,CAAC7yB,KAAK;MAClB,CAAC;IACL;;IAEA;AACR;AACA;IACQU,IAAI,GAAS;MACT,IAAI,CAACnC,GAAG,CAAC,MAAM,CAAC,CAACkQ,QAAQ,CAAC,IAAI,CAACzO,KAAK,EAAE,CAAC0nB,aAAa,CAAC;MACrD,IAAI,CAACtmB,EAAE,CAAC,QAAQ,EAAE6iB,kEAAQ,CAAC,IAAI,CAAC6O,YAAY,CAAC5rB,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAEK,MAAM,CAAC;MACtE,IAAI,CAAC1H,QAAQ,EAAE,CAAC2kB,EAAE,CAAC,mBAAmB,EAAE,cAAc,CAAC;MACvD,IAAI,CAAC3kB,QAAQ,EAAE,CAAC2kB,EAAE,CAAC,oBAAoB,EAAE,mBAAmB,CAAC;;MAE7D;MACA,IAAI,CAAC6L,QAAQ,GAAG,IAAI0C,gBAAgB,CAAC9O,kEAAQ,CAAC,IAAI,CAAC+O,eAAe,CAAC9rB,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IACxF;;IAEA;AACR;AACA;AACA;IACQ+rB,gBAAgB,GAAW;MACvB,MAAMjI,WAAW,GAAG3mB,QAAQ,CAACmB,eAAe,CAACwlB,WAAW,IAAI3mB,QAAQ,CAACygB,IAAI,CAACkG,WAAW;MAErF,OAAOA,WAAW,KAAKzjB,MAAM,CAAC2rB,UAAU,GAAG3rB,MAAM,CAAC2rB,UAAU,GAAGlI,WAAW;IAC9E;;IAEA;AACR;AACA;AACA;AACA;IACQmI,WAAW,CAAC50B,GAAwB,EAAEwD,KAAoB,EAAQ;MAC9D,IAAIA,KAAK,CAAC2R,OAAO,KAAK9B,OAAO,EAAE;QAC3B,IAAI,CAACwhB,iBAAiB,EAAE;MAC5B;IACJ;;IAEA;AACR;AACA;AACA;AACA;IACQ3N,WAAW,CAAClnB,GAAwB,EAAEwD,KAAiB,EAAQ;MAC3D,IAAI,CAAC,IAAI,CAAC0wB,gBAAgB,EAAE;QACxB;MACJ;MAEA,MAAMY,MAAM,GAAGtxB,KAAK,CAACsxB,MAAM;;MAE3B;MACA;MACA,MAAMC,QAAQ,GAAGD,MAAM,YAAYE,iBAAiB;;MAEpD;MACA;MACA;MACA,MAAMC,QAAQ,GAAGH,MAAM,YAAYI,iBAAiB,IAC1BJ,MAAM,EAAGvZ,YAAY,CAAC,MAAM,CAAC,KAAK,QAAQ;;MAEpE;MACA;MACA,MAAM4Z,UAAU,GAAGL,MAAM,YAAYrlB,gBAAgB,IAC1BqlB,MAAM,EAAGvZ,YAAY,CAAC,MAAM,CAAC,KAAK,UAAU;MAEvE,MAAM6Z,aAAa,GAAGN,MAAM,YAAYrlB,gBAAgB,IAC7BqlB,MAAM,EAAGvZ,YAAY,CAAC,MAAM,CAAC,KAAK,OAAO;MAEpE,IAAIwZ,QAAQ,IAAIE,QAAQ,IAAIE,UAAU,IAAIC,aAAa,EAAE;QAAE;MAAQ;MAEnE,IAAI,IAAI,CAACjB,oBAAoB,EAAE;QAAE,IAAI,CAACkB,kBAAkB,EAAE;MAAE;IAChE;;IAEA;AACR;AACA;AACA;IACQd,YAAY,GAAS;MACjB,IAAI,IAAI,CAACJ,oBAAoB,IAAI,IAAI,CAACmB,kBAAkB,EAAE;QACtD,IAAI,CAACC,MAAM,CAAC,IAAI,CAACD,kBAAkB,CAAC;MACxC;IACJ;;IAEA;AACR;AACA;AACA;IACQE,iBAAiB,GAAS;MACtB,IAAI,IAAI,CAACrB,oBAAoB,IAAIruB,QAAQ,CAAC0b,aAAa,YAAYjjB,WAAW,EAAE;QAC5E,IAAI,CAACg3B,MAAM,CAACzvB,QAAQ,CAAC0b,aAAa,CAAC;MACvC;IACJ;;IAEA;AACR;AACA;AACA;IACQ1M,WAAW,GAAS;MAChB,IAAI,EAAEhP,QAAQ,CAAC0b,aAAa,YAAYjjB,WAAW,CAAC,EAAE;QAAE;MAAQ,CAAC,CAAC;;MAElE,MAAMk3B,cAAc,GAAG3vB,QAAQ,CAAC0b,aAAa;MAE7C,IACI,CAAC,IAAI,CAACkU,aAAa,CAACD,cAAc,CAAC,IAC/B,IAAI,CAACE,WAAW,CAACF,cAAc,CAAC,IACjC,CAAC,IAAI,CAACvB,gBAAiB,EAC5B;QACE;MACJ;MAEA,IAAI,CAAC0B,qBAAqB,EAAE;MAC5B,IAAI,CAACL,MAAM,CAACE,cAAc,CAAC;;MAE3B;MACA;;MAEA,IAAI,IAAI,CAACI,cAAc,EAAE;QAAE,IAAI,CAACA,cAAc,EAAE;MAAE;MAElD,IAAI,IAAI,CAACC,oBAAoB,EAAE;QAAE,IAAI,CAACA,oBAAoB,EAAE;MAAE;MAE9D,IAAI,CAACD,cAAc,GAAGnuB,6DAAO,CAAC,MAAM,IAAI,CAAC6tB,MAAM,CAACzvB,QAAQ,CAAC0b,aAAa,CAAgB,EAAE,GAAG,CAAC;MAE5F,IAAI,CAACsU,oBAAoB,GAAGpuB,6DAAO,CAAC,MAAM,IAAI,CAAC6tB,MAAM,CAACzvB,QAAQ,CAAC0b,aAAa,CAAgB,EAAE,GAAG,CAAC;IACtG;;IAEA;AACR;AACA;AACA;IACQiT,eAAe,CAACsB,SAAgC,EAAE;MAC9CA,SAAS,CAACC,IAAI,CAAEC,QAAQ,IAAK;QACzB,IAAI,CAAEA,QAAQ,CAACnB,MAAM,CAAiBhI,SAAS,CAAC8B,QAAQ,CAAC,IAAI,CAACntB,KAAK,EAAE,CAAC2yB,kBAAkB,CAAC,EAAE;UACvF,IAAI,CAACoB,iBAAiB,EAAE;UAExB,OAAO,IAAI;QACf;QAEA,OAAO,KAAK;MAChB,CAAC,CAAC;IACN;;IAEA;AACR;AACA;IACQX,iBAAiB,GAAS;MACtB,IAAI,IAAI,CAACX,gBAAgB,EAAE;QACvB;MACJ;MAEA,IAAI,CAACpC,QAAQ,EAAEO,OAAO,CAACvsB,QAAQ,CAACygB,IAAI,EAAE;QAClCznB,UAAU,EAAE,IAAI;QAChBo3B,SAAS,EAAE,IAAI;QACfC,OAAO,EAAE;MACb,CAAC,CAAC;MAEF,IAAI,CAACjC,gBAAgB,GAAG,IAAI;MAE5B,IAAI,CAACl0B,GAAG,CAAC,aAAa,CAAC,CAACkQ,QAAQ,CAAC,IAAI,CAACzO,KAAK,EAAE,CAAC4xB,cAAc,CAAC;MAE7D,IAAI,CAACc,oBAAoB,GAAG,IAAI;MAChC,IAAI,CAAC3yB,SAAS,CAAC,MAAM,IAAI,CAACxB,GAAG,CAAC,aAAa,CAAC,CAACoC,WAAW,CAAC,IAAI,CAACX,KAAK,EAAE,CAAC4xB,cAAc,CAAC,CAAC;MAEtF,IAAI,CAACve,WAAW,EAAE;MAElB,IAAI,CAACshB,eAAe,GAAG,IAAI,CAACvzB,EAAE,CAAC,SAAS,EAAE,IAAI,CAACiS,WAAW,EAAEhP,QAAQ,CAAC;MACrE;IACJ;;IAEA;AACR;AACA;IACQuvB,kBAAkB,GAAS;MACvB,IAAI,CAAC,IAAI,CAACnB,gBAAgB,EAAE;QACxB;MACJ;MAEA,IAAI,CAACpC,QAAQ,EAAES,UAAU,EAAE;MAE3B,IAAI,CAAC2B,gBAAgB,GAAG,KAAK;MAE7B,IAAI,CAACl0B,GAAG,CAAC,aAAa,CAAC,CAACoC,WAAW,CAAC,IAAI,CAACX,KAAK,EAAE,CAAC4xB,cAAc,CAAC;MAEhE,IAAI,CAACc,oBAAoB,GAAG,KAAK;MAEjC,IAAI,CAACkC,WAAW,GAAG3uB,6DAAO,CAAC,IAAI,CAACvD,IAAI,CAACwE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAClH,KAAK,EAAE,CAAC6yB,aAAa,CAAC;MAE5E,IAAI,IAAI,CAAC8B,eAAe,EAAE;QACtB,IAAI,CAACA,eAAe,CAAC51B,OAAO,CAAC+C,EAAE,IAAIA,EAAE,EAAE,CAAC;MAC5C;MAEA,IAAI,CAAC+xB,kBAAkB,GAAGp0B,SAAS;IACvC;;IAEA;AACR;AACA;AACA;IACQq0B,MAAM,CAACE,cAA2B,EAAE;MAChC,IAAI,EAAEA,cAAc,YAAYl3B,WAAW,CAAC,EAAE;QAAE;MAAQ;MAExD,MAAM+3B,eAAe,GAAG,IAAI,CAACt2B,GAAG,CAAC,aAAa,CAAC,CAACjD,GAAG,EAAE;MAErD,IAAI,CAACu5B,eAAe,EAAE;QAAE;MAAQ;MAEhC,MAAMC,eAAe,GAAGd,cAAc,CAACxG,qBAAqB,EAAE;MAC9D,MAAMuH,SAAS,GAAGD,eAAe,CAACtL,GAAG,GAAGjiB,MAAM,CAACytB,OAAO;MACtD,MAAMC,UAAU,GAAGH,eAAe,CAACrL,IAAI,GAAGliB,MAAM,CAAC2tB,OAAO;MACxD,MAAMC,WAAW,GAAGnB,cAAc,CAACrJ,WAAW;MAC9C,MAAMyK,YAAY,GAAGpB,cAAc,CAACjQ,YAAY;MAChD,MAAMsR,WAAW,GAAG,CAAC;MACrB,MAAMC,YAAY,GAAG,CAAC;MACtB,MAAMC,aAAa,GAAG,IAAI,CAACtC,gBAAgB,EAAE;MAC7C,MAAMuC,oBAAoB,GAAIP,UAAU,GAAGE,WAAW,GAAGE,WAAW,GAAGC,YAAY,GAAIC,aAAa;MAEpG,IACIvB,cAAc,KAAK,IAAI,CAACH,kBAAkB,IACvC,IAAI,CAACrB,wBAAwB,KAAK,EAAE,GAAGuC,SAAS,GAAGE,UAAU,GAAGE,WAAW,GAAGC,YAAY,EAC/F;QACE;QACA;MACJ;MAEA,MAAMK,gBAAgB,GAAGZ,eAAe,CAACpvB,KAAK;MAE9CgwB,gBAAgB,CAACjM,GAAG,GAAI,GAAEuL,SAAS,GAAG,CAAE,IAAG;MAC3CU,gBAAgB,CAAChM,IAAI,GAAI,GAAEwL,UAAU,GAAG,CAAE,IAAG;MAC7CQ,gBAAgB,CAAC/H,KAAK,GAAI,GAAEyH,WAAW,GAAG,CAAE,IAAG;MAC/CM,gBAAgB,CAAC3R,MAAM,GAAI,GAAEsR,YAAY,GAAG,CAAE,IAAG;MAEjD,IAAII,oBAAoB,EAAE;QACtBC,gBAAgB,CAAChM,IAAI,GAAI,GAAEwL,UAAU,GAAGI,WAAY,IAAG;QACvDI,gBAAgB,CAAC/H,KAAK,GAAI,GAAE6H,aAAa,GAAGN,UAAU,GAAG,CAACI,WAAW,GAAGC,YAAY,IAAI,CAAE,IAAG;MACjG;MAEA,IAAI,CAAC9C,wBAAwB,GAAG,EAAE,GAAGuC,SAAS,GAAGE,UAAU,GAAGE,WAAW,GAAGC,YAAY;MAExF,IAAI,CAACvB,kBAAkB,GAAGG,cAAc;IAC5C;;IAEA;AACR;AACA;IACQtxB,IAAI,GAAS;MACT,MAAMmyB,eAAe,GAAG,IAAI,CAACt2B,GAAG,CAAC,aAAa,CAAC,CAACjD,GAAG,EAAE;MAErD,IAAI,CAACu5B,eAAe,EAAE;QAClB,OAAO,IAAI;MACf;MAEA,MAAMY,gBAAgB,GAAGZ,eAAe,CAACpvB,KAAK;MAE9CgwB,gBAAgB,CAAC/H,KAAK,GAAG,GAAG;MAC5B+H,gBAAgB,CAAC3R,MAAM,GAAG,GAAG;MAE7B,IAAI,IAAI,CAAC8Q,WAAW,EAAE;QAClB,IAAI,CAACA,WAAW,EAAE;MACtB;MAEA,OAAO,IAAI;IACf;;IAEA;AACR;AACA;AACA;IACQT,qBAAqB,GAAS;MAC1B,MAAMuB,WAAW,GAAGC,IAAI,CAACC,GAAG,EAAE;MAE9B,MAAMC,iBAAiB,GAAIH,WAAW,IAAI,IAAI,CAACI,WAAW,IAAI,CAAC,CAAC,GAAI,GAAG;MAEvE,IAAI,CAACv3B,GAAG,CAAC,aAAa,CAAC,CAACyS,WAAW,CAAC,IAAI,CAAChR,KAAK,EAAE,CAAC4yB,YAAY,EAAEiD,iBAAiB,CAAC;MAEjF,IAAI,CAACA,iBAAiB,GAAGA,iBAAiB;MAE1C,IAAI,CAACC,WAAW,GAAGJ,WAAW;IAClC;;IAEA;AACR;AACA;IACQzB,aAAa,CAAC1V,OAAoB,EAAW;MACzC,OAAOA,OAAO,KAAK,IAAI,CAACsV,kBAAkB,IACnCtV,OAAO,CAACvhB,QAAQ,KAAK,MAAM,IAC3BuhB,OAAO,CAACvhB,QAAQ,KAAK,MAAM;IACtC;;IAEA;AACR;AACA;IACQk3B,WAAW,CAAC3V,OAAiB,EAAW;MACpC,OAASA,OAAO,YAAYwX,mBAAmB,IAAK,CAACxX,OAAO,CAACyX,QAAQ,IAC5DzX,OAAO,YAAYvQ,gBAAgB,IAAK,CAACuQ,OAAO,CAACyX,QAAS,IAC5D,CAAC,CAAEzX,OAAO,CAACzE,YAAY,CAAC,iBAAiB,CAAE;IACtD;EACJ;EAEA,OAAOyY,gBAAgB;AAC3B;AAMA,iEAAeD,4BAA4B;;;;;;;;;;;;;;;;ACzXG;AAE9C,SAAS2D,uBAAuB,CAACv4B,MAAe,EAAE;EAC9C;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI,MAAMw4B,WAAW,SAASx4B,MAAM,CAAC;IAC7BgD,IAAI,GAAG;MACH,IAAI6G,MAAM,CAAC+nB,gBAAgB,EAAE6G,iBAAiB,EAAE;QAC5CnH,0DAAS,CAACznB,MAAM,CAAC+nB,gBAAgB,CAAC6G,iBAAiB,CAACC,qBAAqB,EAAE,GAAG,EAAE,GAAG,CAAC;QACpF,IAAI,CAAC73B,GAAG,CAAC,aAAa,CAAC,CAACmK,OAAO,CAACnB,MAAM,CAAC+nB,gBAAgB,EAAE6G,iBAAiB,CAACE,cAAc,CAAC;QAC1F,IAAI,CAAC93B,GAAG,CAAC,wBAAwB,CAAC,CAACmK,OAAO,CAACnB,MAAM,CAAC+nB,gBAAgB,EAAE6G,iBAAiB,CAACG,eAAe,CAAC;QACtG,IAAI,CAAC/3B,GAAG,CAAC,MAAM,CAAC,CACXC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CACrBmE,IAAI,EAAE;MACf;IACJ;;IAEA;AACR;AACA;AACA;IACQ4zB,MAAM,GAAG;MACL,IAAI,CAACh4B,GAAG,CAAC,MAAM,CAAC,CAACmE,IAAI,EAAE;IAC3B;EACJ;EAEA,OAAOwzB,WAAW;AACtB;AAMA,iEAAeD,uBAAuB;;;;;;;;;;;;;;;;AC1C4B;AAOlE;AACA;AACA;AACA;AACA;AACA,SAASQ,wBAAwB,CAAC/4B,MAAe,EAAE;EAC/C;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI,MAAMg5B,YAAY,SAASh5B,MAAM,CAAC;IAG9BsC,KAAK,GAAG;MACJ,OAAO;QACHiG,OAAO,EAAE,IAAI;QACb0wB,cAAc,EAAE,SAAS;QACzBC,YAAY,EAAwB,CAAC,CAAC;QACtC,GAAG,KAAK,CAAC52B,KAAK;MAClB,CAAC;IACL;;IAEA;AACR;AACA;AACA;AACA;AACA;IACQU,IAAI,GAAG;MACH,KAAK,CAACA,IAAI,EAAE;MACZ,IAAI,CAACX,SAAS,CAAC,MAAM,IAAI,CAAC82B,sBAAsB,EAAE,CAAC;MACnD;AACZ;AACA;AACA;MACY,IAAI,CAACh3B,QAAQ,EAAE,CAAC2kB,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC;MAC7C;AACZ;AACA;AACA;MACY,IAAI,CAAC3kB,QAAQ,EAAE,CAAC2kB,EAAE,CAAC,aAAa,EAAE,WAAW,CAAC;IAClD;;IAEA;AACR;AACA;AACA;AACA;AACA;IACQsS,SAAS,CAAC13B,IAAoB,EAAE;MAC5B,IAAI,CAACA,IAAI,EAAE;QACP;MACJ;MAEA,IAAIiJ,OAAO,GAAG,EAAE;MAEhB,IAAIjJ,IAAI,CAAC6I,SAAS,EAAE;QAChBI,OAAO,GAAG,IAAI,CAACrI,KAAK,EAAE,CAAC42B,YAAY,CAAE,QAAOx3B,IAAI,CAAC6I,SAAU,EAAC,CAAC;MACjE,CAAC,MAAM,IAAI7I,IAAI,CAAC8d,kBAAkB,EAAE;QAChC7U,OAAO,GAAGjJ,IAAI,CAAC8d,kBAAkB;MACrC;MAEA,IAAI,CAACsR,SAAS,CAAC;QAAEtR,kBAAkB,EAAE7U;MAAQ,CAAC,EAAE,OAAO,CAAC;IAC5D;;IAEA;AACR;AACA;IACQwuB,sBAAsB,GAAG;MACrB,IAAI,IAAI,CAACE,eAAe,EAAE;QACtB,IAAI,CAACA,eAAe,CAAC/1B,OAAO,EAAE;QAE9B,IAAI,CAAC+1B,eAAe,GAAGt3B,SAAS;MACpC;IACJ;;IAEA;AACR;AACA;AACA;AACA;AACA;IACQ+uB,SAAS,CAACpvB,IAAmC,EAAEnC,IAAa,EAAE;MAC1D,IAAImC,IAAI,IAAIA,IAAI,CAAC8d,kBAAkB,EAAE;QACjC,IAAI,IAAI,CAACze,KAAK,EAAE;UACZ,IAAI,CAACgwB,SAAS,EAAE;QACpB;QAEA,IAAIxxB,IAAI,KAAK,OAAO,EAAE;UAClB,IAAI,CAACsB,GAAG,CAAC,MAAM,CAAC,CAACkQ,QAAQ,CAAC,IAAI,CAACzO,KAAK,EAAE,CAAC22B,cAAc,CAAC;QAC1D;QAEA,IAAI,CAACp4B,GAAG,CAAC,MAAM,CAAC,CACXmK,OAAO,CAACtJ,IAAI,CAAC8d,kBAAkB,CAAC,CAChCva,IAAI,EAAE;QACX,IAAI,CAAClE,KAAK,GAAG,IAAI;QAEjB,IAAI,CAACs4B,eAAe,GAAG,IAAIP,4EAAe,CAAC,MAAM,IAAI,CAAC/H,SAAS,EAAE,EAAE,IAAI,CAACzuB,KAAK,EAAE,CAACiG,OAAO,CAAC;MAC5F;IACJ;;IAEA;AACR;AACA;IACQwoB,SAAS,GAAG;MACR,IAAI,CAAClwB,GAAG,CAAC,MAAM,CAAC,CACXoC,WAAW,CAAC,IAAI,CAACX,KAAK,EAAE,CAAC22B,cAAc,CAAC,CACxCjuB,OAAO,CAAC,EAAE,CAAC,CACXhG,IAAI,EAAE;MACX,IAAI,CAACjE,KAAK,GAAG,KAAK;MAClB,IAAI,CAACo4B,sBAAsB,EAAE;IACjC;;IAEA;AACR;AACA;AACA;IACQG,UAAU,GAAG;MACT,IAAI,IAAI,CAACD,eAAe,EAAE;QACtB,IAAI,CAACA,eAAe,CAACE,KAAK,EAAE;MAChC;IACJ;;IAEA;AACR;AACA;AACA;IACQC,WAAW,GAAG;MACV,IAAI,IAAI,CAACH,eAAe,EAAE;QACtB,IAAI,CAACA,eAAe,CAACI,MAAM,EAAE;MACjC;IACJ;EACJ;EAEA,OAAOT,YAAY;AACvB;AAMA,iEAAeD,wBAAwB;;;;;;;;;;;;;;;;ACjL8B;AAIrE;AACA;AACA;AACA;AACA;AACA,SAASW,uBAAuB,CAACtJ,KAA4C,EAAE;EAC3E;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI,MAAMuJ,WAAW,SAASvJ,KAAK,CAAC;IAO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GAAG;MACH,KAAK,CAACA,IAAI,EAAE;MACZ,IAAI,CAACb,QAAQ,EAAE,CAAC2kB,EAAE,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;IAC/D;;IAEA;AACR;AACA;AACA;IACQuU,kBAAkB,CAACC,MAAe,EAAE;MAChC,IAAI,CAACz6B,GAAG,CAAC,MAAM,CAAC,CAACyS,WAAW,CAAC,IAAI,CAAChR,KAAK,EAAE,CAAC84B,oBAAoB,EAAEE,MAAM,CAAC;IAC3E;EACJ;EAEA,OAAOH,MAAM;AACjB;AAMA,iEAAeD,kBAAkB;;;;;;;;;;;;;;;;;AC1D2B;AACb;AAG/C;AACA;AACA;AACA;AACA,SAASK,wBAAwB,CAACv7B,MAAe,EAAE;EAC/C;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI,MAAMw7B,YAAY,SAASx7B,MAAM,CAAC;IAK9By7B,cAAc,GAA0B,IAAI;IAI5CC,WAAW,GAAyB,IAAI;IAIxCC,cAAc,GAAsC,IAAI;IAoBxDC,aAAa,GAAkB,IAAI;IAEnCC,iBAAiB,GAAG,CAAC;IAErBC,MAAM,GAAG,CAAC;IAEVC,MAAM,GAAG,CAAC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GAAGhiB,KAAK,CAACihB,gEAAgB,CAAC;QAEpD,IAAIe,oBAAoB,EAAE;UACtB,IAAI,IAAI,CAAC1jC,KAAK,CAACnB,QAAQ,CAAC6kC,oBAAoB,CAAC,EAAE;YAC3CD,WAAW,CAACp/B,IAAI,CAACq/B,oBAAoB,CAAC;UAC1C;QACJ,CAAC,MAAM;UACH,IAAI,CAACF,kBAAkB,CAAC9hB,KAAK,EAAE+hB,WAAW,CAAC;QAC/C;QAEA/hB,KAAK,GAAGA,KAAK,CAACiiB,kBAAiC;MACnD;IACJ;;IAEA;AACR;AACA;IACQZ,cAAc,GAAG;MACb,MAAMU,WAAW,GAAG,EAA4B;MAChD,MAAMtU,cAAc,GAAG,IAAI,CAAC3uB,GAAG,CAAC,MAAM,CAAC,CAACjD,GAAG,EAAE;MAE7C,IAAI4xB,cAAc,EAAE;QAChB,IAAI,CAACqU,kBAAkB,CAACrU,cAAc,EAAEsU,WAAW,CAAC;MACxD;MAEA,OAAOA,WAAW;IACtB;EACJ;EAEA,OAAOjhB,iBAAiB;AAC5B;AAMA,iEAAeogB,6BAA6B;;;;;;;;;;;;;;;;;ACpMU;AACP;AAE/C,MAAMiB,WAAW,GAAG,EAAE;;AAEtB;AACA;AACA;AACA;AACA;AACA,SAASC,iBAAiB,CACtBpjB,2BAA8G,EAChH;EACE;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI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,IAAI,CAACE,YAAY,CAAC,IAAI,CAAC;IAC3B;;IAEA;AACR;AACA;IACQD,UAAU,GAAG;MACT,IAAI,CAACC,YAAY,CAAC,KAAK,CAAC;IAC5B;;IAEA;AACR;AACA;IACQA,YAAY,CAAChjB,KAA4B,EAAE;MACvC,IAAI,CAACiO,QAAQ,GAAG,IAAI,CAACxS,GAAG,CAAC,MAAM,CAAC,CAC3ByS,WAAW,CAAC,IAAI,CAAChR,KAAK,EAAE,CAACulB,aAAa,EAAE,CAAC,CAACziB,KAAK,CAAC,CAChDijB,QAAQ,CAAC,IAAI,CAAC/lB,KAAK,EAAE,CAACulB,aAAa,CAAC;IAC7C;EACJ;EAEA,OAAOsgB,QAAQ;AACnB;AAMA,iEAAeD,oBAAoB;;;;;;;;;;;;;;;ACrGnC,MAAMlyB,OAAO,GAAG9V,MAAM,CAACqkB,MAAM,CAAC;EAC1BG,GAAG,EAAE,EAAE;EACPC,IAAI,EAAE,EAAE;EACRyjB,IAAI,EAAE,EAAE;EACRC,KAAK,EAAE;AACX,CAAC,CAAC;AAUF;AACA;AACA;AACA;AACA;AACA,SAASC,gBAAgB,CAACtoC,MAAe,EAAE;EACvC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI,MAAMuoC,IAAI,SAASvoC,MAAM,CAAC;IACtBwoC,UAAU,GAAkB,EAAE;IAE9BC,UAAU,GAAG,EAAE;IAEfC,WAAW,GAAG,EAAE;IAEhBpmC,KAAK,GAAG;MACJ,OAAO;Q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ACohB,kBAAkB,EAAE;QAC1B,KAAK,IAAIzjB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGykC,aAAa,CAACnuC,MAAM,EAAE0J,CAAC,EAAE,EAAE;UAC3C,IAAIilB,gBAAgB,IAAIwf,aAAa,CAACzkC,CAAC,CAAC,CAAC0kC,YAAY,EAAE;YACnD,IAAI,CAACrd,gBAAgB,GAAGod,aAAa,CAACzkC,CAAC,CAAC,CAAC,aAAa,CAAC;YACvD;UACJ;QACJ;MACJ;MAEA,KAAK,CAACskB,WAAW,EAAE;IACvB;;IAEA;AACR;AACA;AACA;AACA;AACA;IACQqgB,mBAAmB,CAAChgC,GAAG,EAAEnI,KAAK,EAAE;MAC5B;MACA;MACA;MACA;MACA,IAAIA,KAAK,CAACw7B,MAAM,EAAE;QACd;MACJ;MAEA,KAAK,CAACzU,gBAAgB,EAAE;IAC5B;;IAEA;AACR;AACA;AACA;AACA;AACA;IACQqhB,mBAAmB,CAACjgC,GAAG,EAAEnI,KAAK,EAAE;MAC5B;MACA;MACA;MACA;MACA,IAAIA,KAAK,CAACw7B,MAAM,EAAE;QACd;MACJ;MAEA,KAAK,CAACtU,gBAAgB,EAAE;IAC5B;EACJ;EAEA,OAAOsgB,WAAW;AACtB;AAMA,iEAAeD,uBAAuB;;;;;;;;;;;;;;;AC7PtC,SAASc,0BAA0B,CAACvjB,QAAuE,EAAE;EACzG;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI,MAAMwjB,cAAc,SAASxjB,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E,CAAC;IACpG;EACJ;EAEA,IAAIgjB,KAAK,GAAGhjB,EAAE,CAACyI,iBAAiB;EAEhC,OAAOua,KAAK,EAAE;IACVgrC,aAAa,CAAchrC,KAAK,CAAC;IACjCA,KAAK,GAAGA,KAAK,CAACiiB,kBAAkB;EACpC;AACJ;;AAEA;AACA;AACA;AACAn6B,MAAM,CAACsqD,WAAW,GAAG,MAAqB,yOAAkE,CACvGruD,IAAI,CAACsuD,cAAc,IAAIA,cAAc,CAACD,WAAW,CAAC/2D,UAAU,CAAC,CAAC;AAEnE,iEAAeA,UAAU;;;;;;;;;;;AC9tCZ;;AAEb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,GAAG;AACd,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,iBAAiB;AAC5B,WAAW,UAAU;AACrB,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,iBAAiB;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,0DAA0D,OAAO;AACjE;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0CAA0C,SAAS;AACnD;AACA;;AAEA;AACA,IAAI;AACJ;AACA;;AAEA,gBAAgB,YAAY;AAC5B;;AAEA;AACA,4DAA4D;AAC5D,gEAAgE;AAChE,oEAAoE;AACpE,wEAAwE;AACxE;AACA,2DAA2D,SAAS;AACpE;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,UAAU;AACrB,WAAW,GAAG;AACd,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,UAAU;AACrB,WAAW,GAAG;AACd,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,UAAU;AACrB,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,aAAa,cAAc;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,4DAA4D,YAAY;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B,aAAa,cAAc;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;UC/UA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;UAEA;UACA;;;;;WCzBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,sDAAsD;WACtD,sCAAsC,iEAAiE;WACvG;WACA;WACA;WACA;WACA;WACA;;;;;WCzBA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,EAAE;WACF;;;;;WCRA;WACA;WACA;WACA;WACA;;;;;WCJA;WACA;WACA;WACA;WACA;;;;;WCJA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;WCPD;;;;;WCAA;WACA;WACA;WACA;WACA,uBAAuB,4BAA4B;WACnD;WACA;WACA;WACA,iBAAiB,oBAAoB;WACrC;WACA,mGAAmG,YAAY;WAC/G;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,mEAAmE,iCAAiC;WACpG;WACA;WACA;WACA;;;;;WC3CA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;WCNA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;;;;WCfA;;WAEA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA,iCAAiC;;WAEjC;WACA;WACA;WACA,KAAK;WACL,eAAe;WACf;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM;WACN;WACA;WACA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM,qBAAqB;WAC3B;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;WACA;WACA;;;;;;;;;;;;;;;ACrF4C;AACf;;AAE7B;AACA;AACA;AACA;;AAE0B;AAE1Bb,8DAAc,EAAE;AAEhB,IAAIukD,KAAU,EAAE,E","sources":["webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/widgets/widgetsList.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/config/breakpoints.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/config/stickyHeaderHeightMap.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/Widget.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/_polyfills/getAttributeNames.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/_polyfills/index.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/AjaxForm.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/BasicForm.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/BasicInput.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/Combobox.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/Form.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/InputCheckbox.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/InputEmail.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/InputHidden.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/InputPassword.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/InputRadio.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/InputSelect.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/InputText.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/InputTextarea.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/ajax/EmailSubscribe.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/AccessibilityFocusMixin.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/AccessibilityFocusTrapMixin.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/Accordion.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/AccordionItem.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/BackToTop.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/Button.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/ButtonWithIcon.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/Carousel.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/ConfirmDialog.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/ConnectionMonitor.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/ConsentTracking.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/ContentLoader.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/ContextLoader.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/Disclosure.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/DismissBlock.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/EmitBusEvent.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/FocusHighlighter.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/Geolocation.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/GlobalAlerts.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/GlobalModal.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/Header.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/HeroCarousel.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/Label.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/ListAccessibility.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/Modal.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/ProcessButton.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/SoftKeyboardToggleMixin.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/StickyHeader.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/TabPanel.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/Tabs.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/pagedesigner/AnimationOnScroll.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/pagedesigner/CarouselExt.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/pagedesigner/CarouselSimple.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/pagedesigner/CtaExt.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/pagedesigner/EinsteinCarouselLoader.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/pagedesigner/HotSpot.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/pagedesigner/ProgressBar.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/pagedesigner/VideoExt.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/product/AlternativeImage.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/product/ProductTile.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/search/SearchBox.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/toolbox/EventBusWrapper.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/toolbox/PausableTimeout.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/toolbox/RefElement.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/toolbox/ajax.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/toolbox/cookie.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/toolbox/cssLoadChecker.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/toolbox/debounce.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/toolbox/dialogMgr.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/toolbox/dom.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/toolbox/eventBus.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/toolbox/scroll.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/toolbox/token.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/toolbox/util.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/toolbox/viewtype.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/viewTypeConfig.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/widgetsList.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/widgetsMgr.ts","webpack://sfra-boilerplate/./node_modules/eventemitter3/index.js","webpack://sfra-boilerplate/webpack/bootstrap","webpack://sfra-boilerplate/webpack/runtime/compat get default export","webpack://sfra-boilerplate/webpack/runtime/create fake namespace object","webpack://sfra-boilerplate/webpack/runtime/define property getters","webpack://sfra-boilerplate/webpack/runtime/ensure chunk","webpack://sfra-boilerplate/webpack/runtime/get javascript chunk filename","webpack://sfra-boilerplate/webpack/runtime/get mini-css chunk filename","webpack://sfra-boilerplate/webpack/runtime/global","webpack://sfra-boilerplate/webpack/runtime/hasOwnProperty shorthand","webpack://sfra-boilerplate/webpack/runtime/load script","webpack://sfra-boilerplate/webpack/runtime/make namespace object","webpack://sfra-boilerplate/webpack/runtime/publicPath","webpack://sfra-boilerplate/webpack/runtime/jsonp chunk loading","webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/app_custom_core.ts"],"sourcesContent":["import WidgetsMgr from 'widgets/widgetsMgr';\n\nWidgetsMgr.addWidgetsList('global.core', () => []);\n","export default {\n    md: 768,\n    lg: 1024,\n    xl: 1367\n};\n","/**\n * @description Sticky header height\n * @module stickyHeaderHeightMap\n * @category config\n */\n\nimport {\n    EXTRA_LARGE,\n    LARGE,\n    MEDIUM,\n    SMALL\n} from 'widgets/toolbox/viewtype';\n\nexport const stickyHeaderHeightMap = {\n    [SMALL]: 64,\n    [MEDIUM]: 64,\n    [LARGE]: 80,\n    [EXTRA_LARGE]: 80\n};\n","/* eslint-disable no-underscore-dangle */\nimport { log } from './toolbox/util';\nimport { RefElement, TRefElementData } from 'widgets/toolbox/RefElement';\nimport EventBusWrapper from 'widgets/toolbox/EventBusWrapper';\nimport widgetsMgr from './widgetsMgr';\n\nconst templateProp = '@@@_template';\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noop = () => {};\n\n/**\n * @description save template during webpack HMR\n * @param renderTo rendering element\n * @param template template string\n */\nfunction saveTemplateForHotReload(renderTo: RefElement, template: string) {\n    if (!PRODUCTION) { // save template in element for hot reload\n        const tmpEl = renderTo.get();\n\n        if (tmpEl) {\n            tmpEl[templateProp] = template;\n        }\n    }\n}\n\n/**\n * @description Find modified element\n * @param nodeOrig element\n * @param routeOrig path to element\n * @returns modified element or false if not found\n */\nfunction getFromRoute(nodeOrig: ChildNode, routeOrig: Array<number>): ChildNode | false {\n    let node = nodeOrig;\n    const route = routeOrig.slice();\n\n    while (route.length > 0) {\n        if (node && node.childNodes) {\n            const c = route.splice(0, 1)[0];\n\n            node = node.childNodes[c];\n        } else {\n            return false;\n        }\n    }\n\n    return node;\n}\n\n/**\n * @description Callback assigned on diff-dom post hook after applying changes\n * @param action diff-dom action happens with DOM node\n * @param node changed element\n * @param info diff-dom changes object\n * @returns callback\n */\nfunction getDelayedCallback(action: string, node: HTMLElement, info: diffDOM.IInfo): () => void {\n    return () => {\n        if (action === 'modifyAttribute') {\n            widgetsMgr.removeAttribute(node, info.diff);\n            widgetsMgr.addAttribute(node, info.diff);\n        } else if (action === 'removeAttribute') {\n            widgetsMgr.removeAttribute(node, info.diff);\n        } else if (action === 'addAttribute') {\n            widgetsMgr.addAttribute(node, info.diff);\n        } else {\n            throw new Error(`Unknown action \"${action}\"`);\n        }\n    };\n}\n\n/**\n * @description Diff-dom post applying callback\n * @param info - Diff-dom changes object\n * @param el Element to change\n * @param delayedAttrModification List of modifications that should be used after diffs appliance\n */\nfunction postDiffApplyCallback(info: diffDOM.IInfo, el: HTMLElement, delayedAttrModification: Array<() => void>) {\n    const { action, name } = info.diff;\n\n    if (['removeAttribute', 'addAttribute', 'modifyAttribute'].includes(action)\n        && typeof name === 'string'\n        && name.startsWith('data-') // handle only data attr changes\n        && info.node instanceof HTMLElement) {\n        const node = getFromRoute(el, info.diff.route);\n\n        if (node && node instanceof HTMLElement) {\n            const delayedCallback: () => void = getDelayedCallback(action, node, info);\n\n            // data-initialized should be executed at last point\n            delayedAttrModification[name === 'data-initialized' ? 'push' : 'unshift'](delayedCallback);\n        }\n    }\n\n    if ((action === 'addAttribute' || action === 'removeAttribute')\n        && info.node.nodeName === 'INPUT'\n        && name === 'checked') {\n        const node = <HTMLInputElement>info.node;\n\n        if (node.type === 'checkbox' || node.type === 'radio') {\n            node.checked = (action === 'addAttribute');\n        }\n    }\n}\n\n/**\n * @description Diff-dom outer diffs filter callback\n * @param t1 - Target element\n */\nfunction filterOuterDiffCallback(t1: diffDOM.INodeObj) {\n    if (t1.attributes && t1.attributes['data-skip-render']) {\n        // will not diff childNodes\n        t1.innerDone = true;\n    }\n}\n\n/**\n * @description Diff-dom pre diff hook callback\n * @param info - diff info\n */\nfunction preDiffApplyCallback(info): boolean {\n    const diffInfo = info.diff;\n\n    if (\n        diffInfo.action === 'modifyAttribute'\n        && diffInfo.name === 'class'\n        && info.node.hasAttribute('data-diffdom-no-class-modify')\n    ) {\n        return true;\n    }\n\n    // Maybe at some moment it could be implemented. Bug: after this hook DiffDOM\n    // not proper compare tree and eventually exit with not updated DOM.\n    // if (\n    //     diffInfo.action === 'removeElement'\n    //     && diffInfo.element.attributes['data-diffdom-no-remove']\n    // ) {\n    //     return true;\n    // }\n\n    return false;\n}\n\n// eslint-disable-next-line no-use-before-define\ntype TWidgetConstructor<T = typeof Widget> = (type: string) => T;\n\ntype TPreferenceValue = string | number | boolean | TUnknownObject | Array<TUnknownObject> | null | undefined;\n\n/** Core component to extend for each widget */\n/**\n * @category widgets\n * @subcategory framework\n */\nclass Widget {\n    /**\n     * @description RefElements related to current widget\n     */\n    refs: {[key: string]: RefElement} = Object.create(null);\n\n    /**\n     * @description state explain widget is shown\n     */\n    shown: boolean;\n\n    /**\n     * @description config from data attributes\n     */\n    config: {[x: string]: TUnknownObject | Array<TUnknownObject> |string|number|boolean|null|undefined};\n\n    /**\n     * @description functions which executing during destructuring of widget\n     */\n    disposables: Array<() => void>|undefined;\n\n    /**\n     * @description function assigned by WidgetsMgr after constructor call to\n     * provide ability for parent widget listen child widget event\n     * fired by method `this.emit()`\n     */\n    parentHandler: (eventName: string, ...args: Array<unknown>) => void = noop;\n\n    /**\n     * @description children widgets\n     */\n    // eslint-disable-next-line no-use-before-define\n    items: Array<Widget> = [];\n\n    /**\n     * @description Widget ID\n     */\n    id: string | undefined;\n\n    /**\n     * @param id - widget id\n     * @description Get constructor id for current widget. Used in widgetMgr\n     */\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    getConstructor: TWidgetConstructor = (id) => Widget;\n\n    /**\n     * @description Indicate if widget is in progress of refreshing\n     */\n    isRefreshingWidget = false;\n\n    /**\n     * @description Container to cache templates for rendering\n     */\n    cachedTemplates: {[id: string]: string | undefined} = {};\n\n    /**\n     * @description EventBusWrapper instance for event emitting\n     */\n    protected _eventBus: EventBusWrapper | undefined;\n\n    /**\n     * @description Creates self RefElement.js wrapper, add initial states, configuration.\n     * @param el DOM element\n     * @param config widget config\n     */\n    constructor(el: HTMLElement, config: Widget['config'] = {}) {\n        if (this.refs) { // for type check\n            this.refs.self = new RefElement([el]);\n        }\n\n        this.config = config;\n\n        if (this.ref('self').attr('id')) {\n            this.id = <string> this.ref('self').attr('id');\n        }\n\n        if (!this.id && this.config.id) {\n            this.id = <string> this.config.id;\n        }\n\n        this.shown = !this.config.hidden && !this.ref('self').hasAttr('hidden');\n\n        if (typeof this.config.passEvents === 'string') {\n            if (!PRODUCTION) {\n                log.warn('Usage of \"data-pass-events\" has been deprecated. Please take a look \"data-forward-to-parent\"');\n            }\n\n            this.config.passEvents.split(':').forEach(pair => {\n                const [methodName, emitEvent] = pair.split('-');\n\n                this[methodName] = (...args) => {\n                    this.parentHandler(emitEvent, ...args);\n                };\n            });\n        }\n    }\n\n    get length() {\n        return 1;\n    }\n\n    /**\n     * @description call class method provided in argument `name` with arguments `(classContext, value, ...args)` or\n     * call `RefElement.data(name, value)` for wrapper widget DOM node to get or set data attributes\n     * @param name of class method or data-attribute\n     * @param [value] if class has method `name` - will be used as argument, otherwise will be used as `value` to set into data attribute `name`\n     * @param [args] if class has method `name` - will be used as argument, otherwise would not be used\n     *\n     * - execution result of the method specified as `name` argument\n     * - if class has no method `name` - get or set data attribute `name` depending on provided or no `value` argument\n     */\n    data<Type extends TRefElementData = TRefElementData>(\n        name: string,\n        value?: string | boolean | unknown,\n        ...args: Array<unknown>\n    ): Type | undefined;\n\n    data(name: string, value?: string | boolean | unknown, ...args: Array<unknown>): unknown {\n        const classMethod: (v?: unknown, ...a: Array<unknown>) => unknown = this[name];\n\n        if (typeof classMethod === 'function') {\n            return classMethod.call(this, value, ...args);\n        }\n\n        return this.ref('self').data(name, value);\n    }\n\n    /**\n     * @description call class method provided in argument `name` with arguments `...args` if method exists\n     *\n     * @param name of class method\n     * @param [args] if class has method `name` - will be used as arguments\n     * @returns result of call (any) or undefined, if method not found\n     */\n    callIfExists(name: string, ...args: Array<unknown>): unknown {\n        const classMethod = this[name];\n\n        if (typeof classMethod === 'function') {\n            return classMethod.call(this, ...args);\n        }\n\n        return undefined;\n    }\n\n    /**\n     * @description Emit widget event that will be listened by parent handler with context of current widget\n\n     * @param eventName name of event\n     * @param args argument to pass\n     */\n    emit(eventName: string, ...args: Array<unknown>) {\n        this.parentHandler(eventName, this, ...args);\n    }\n\n    /**\n     * @description Emit widget event that will be listened by parent handler without context of current widget\n     * @param eventName name of event\n     * @param args argument to pass\n     */\n    emitWithoutContext(eventName: string, ...args: Array<unknown>) {\n        this.parentHandler(eventName, ...args);\n    }\n\n    /**\n     * @description In case if you need to emit/subscribe global event you may get an event bus with this method.\n     * @description Get widget's EventBusWrapper instance\n     * @returns Instance of EventBusWrapper\n     */\n    eventBus(): EventBusWrapper {\n        if (!this._eventBus) {\n            this._eventBus = new EventBusWrapper(this);\n            this.onDestroy(() => {\n                this._eventBus = undefined;\n            });\n        }\n\n        return this._eventBus;\n    }\n\n    /**\n     * @description Merge data-attribute properties to default widget properties (defined in widget javascript file, or extended from parent widget)\n     * and returns widget configuration map\n     * @returns config widget config\n     */\n    prefs() {\n        return {\n            /** is component hidden */\n            hidden: false,\n            /** class of component during loading */\n            classesLoading: 'm-widget-loading',\n            /** class of component once component loaded and inited */\n            /** id of component */\n            id: '',\n            // configs form data attributes\n            ...this.config\n        };\n    }\n\n    /**\n     * @description Sets preference to the data-attribute properties and widget properties\n     * to store widget preference state.\n     * @param key - preference key\n     * @param value - preference value to set\n     */\n    setPref(key: string, value: TPreferenceValue) {\n        const stringValue = typeof value === 'object' && value !== null\n            ? JSON.stringify(value)\n            : String(value);\n\n        this.ref('self').data(key, stringValue);\n        this.config[key] = value;\n    }\n\n    /**\n     * @description Wrapper for `setPref` method that allows to set multiple preferences via one call\n     * @param data - preferences object\n     */\n    setPrefs(data: Record<string, TPreferenceValue>) {\n        Object.entries(data).forEach(([key, value]) => {\n            this.setPref(key, value);\n        });\n    }\n\n    /**\n     * @description This method executed in the end of [Widgets Application Lifecycle,]{@link tutorial-WidgetsApplicationLifecycle.html}\n     *  in order to add business logic before initialization is finished.\n     */\n    init() {\n        this.ref('self').removeClass(this.prefs().classesLoading);\n    }\n\n    /**\n     * @description Get child refElement by key from prefs() or id\n     * @param name Id of RefElement or preference key that contains id\n     * @returns found RefElement instance or empty RefElement if doesn't exist\n     * @protected\n     */\n    ref<WrappedElementType extends HTMLElement = HTMLElement>(name: string): RefElement<WrappedElementType> {\n        const prefsName = this.prefs();\n        const prefsValue = prefsName[name];\n        let ref: RefElement<WrappedElementType>;\n\n        if (prefsValue) {\n            ref = this.refs && <RefElement<WrappedElementType>> this.refs[prefsValue];\n\n            if (ref) {\n                return ref;\n            }\n        }\n\n        ref = this.refs && <RefElement<WrappedElementType>> this.refs[name];\n\n        if (ref) {\n            return ref;\n        }\n\n        return new RefElement<WrappedElementType>([]);\n    }\n\n    /**\n     * @description search `refElement` inside of widget by `name`\n     * - if `cb` exist - run `cb` with found `refElement` as argument\n     * - otherwise return existing state\n     *\n     * @param name Id of widget/refElement or preference that contain id of widget/refElement\n     * @param [cb] callback will be executed if element found\n     * @returns true if found `refElement`\n     */\n    has(name: string, cb?: (arg: RefElement) => void): boolean {\n        const ref = this.refs && this.refs[name];\n\n        if (ref) {\n            if (cb) {\n                cb(ref);\n            }\n\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * @description Destroys widgets. Only for internal usage\n     *\n     * @protected\n     */\n    destroy() {\n        if (this.disposables) {\n            this.disposables.forEach(disposable => disposable());\n            this.disposables = undefined;\n        }\n\n        if (this.items && this.items.length) {\n            this.items.forEach(item => {\n                if (item && typeof item.destroy === 'function') {\n                    item.destroy();\n                }\n            });\n        }\n\n        this.items = [];\n        this.refs = {};\n    }\n\n    /**\n     * @description Attach an event handler function for one or more events to the selected elements.\n     * @param eventName ex: 'click', 'change'\n     * @param cb callback\n     * @param selector CSS selector\n     * @param passive is handler passive?\n     * @returns dispose functions for each element event handler\n     *\n     * @protected\n     */\n    ev<T = HTMLElement, E = Event>(\n        eventName: string,\n        cb: (this: this, element: T, event: E, ...args: Array<unknown>) => unknown,\n        selector: string | HTMLElement | EventTarget = '',\n        passive = true\n    ): Array<() => void> {\n        let elements: Array<EventTarget> = [];\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        const self = this;\n\n        if (selector instanceof EventTarget) {\n            elements = [selector];\n        } else if (typeof selector === 'string' && this.refs && this.refs.self) {\n            const el = this.refs.self.get();\n\n            if (el) {\n                elements = Array.from(el.querySelectorAll(selector));\n            }\n        } else if (this.refs && this.refs.self) {\n            const el = this.refs.self.get();\n\n            if (el) {\n                elements = [el];\n            }\n        }\n\n        return elements.map(element => {\n            let fn: EventListener | undefined = <EventListener><unknown> function fn(this: T, event: E, ...args: Array<unknown>) {\n                return cb.apply(self, [this, event, ...args]);\n            };\n\n            element.addEventListener(eventName, fn, passive ? { passive: true } : { passive: false });\n\n            const dispose = () => {\n                if (fn) {\n                    element.removeEventListener(eventName, fn);\n                    fn = undefined;\n                }\n            };\n\n            this.onDestroy(dispose);\n            dispose.eventName = eventName;\n\n            return dispose;\n        });\n    }\n\n    /**\n     * @description Assign function to be executed during widget destructuring\n     * @param fn function to be executed during destroy\n     * @returns called function\n     */\n    onDestroy(fn: () => void): () => void {\n        if (!this.disposables) {\n            this.disposables = [];\n        }\n\n        this.disposables.push(fn);\n\n        return fn;\n    }\n\n    /**\n     * @description executed when widget is re-rendered\n     */\n    onRefresh() {\n        this.shown = !this.config.hidden && !this.ref('self').hasAttr('hidden');\n\n        if (this.ref('self').attr('id')) {\n            this.id = <string> this.ref('self').attr('id');\n        } else if (this.ref('self').data('id')) {\n            this.id = <string> this.ref('self').data('id');\n        }\n    }\n\n    /**\n     * @description Search for child component instance and execute callback with this instance as argument\n     * @param id of component\n     * @param cb callback with widget\n     * @returns callback result if element found, otherwise undefined\n     */\n    getById<T extends Widget, M = void>(id: string, cb: (args0: T) => M): M | undefined {\n        if (id && this.items && this.items.length) {\n            for (let c = 0; c < this.items.length; c += 1) {\n                const item = this.items[c];\n\n                if (item && item.id === id) {\n                    return cb.call(this, <T> item);\n                }\n            }\n        }\n\n        if (!PRODUCTION) {\n            log.warn(`Widget with id \"${id}\" is not found in the children list of \"${this.constructor.name}\" `, this);\n        }\n\n        return undefined;\n    }\n\n    /**\n     * @description Search deep for child component instance and execute callback with this instance as argument\n     * @param id of component\n     * @param cb callback with widget\n     * @returns callback result if element found, otherwise undefined\n     */\n    getByIdDeep<T extends Widget, M = void>(id: string, cb: (args0: T) => M) {\n        if (id && this.items && this.items.length) {\n            for (let c = 0; c < this.items.length; c += 1) {\n                const item = this.items[c];\n\n                if (item && item.id === id) {\n                    return cb.call(this, <T> item);\n                } else {\n                    const returnedValue = this.getByIdDeep.call(item, id, cb as (args1) => void);\n\n                    if (returnedValue) {\n                        return returnedValue;\n                    }\n                }\n            }\n        }\n\n        return undefined;\n    }\n\n    /**\n     * Travels over nearest/next level child components\n     *\n     * @param fn callback\n     * @returns arrays of callback results\n     */\n    eachChild<T = Widget, R = T | void>(fn: (args0: T) => R): Array<R> {\n        if (this.items && this.items.length) {\n            return this.items.map(item => {\n                return fn(item as unknown as T);\n            });\n        }\n\n        return [];\n    }\n\n    /**\n     * @description Hide widget\n     * @returns current instance for chaining\n     */\n    hide(): this {\n        if (this.shown) {\n            this.ref('self').hide();\n            this.shown = false;\n        }\n\n        return this;\n    }\n\n    /**\n     * @description Show widget\n     * @returns current instance for chaining\n     */\n    show(): this {\n        if (!this.shown) {\n            this.ref('self').show();\n            this.shown = true;\n        }\n\n        return this;\n    }\n\n    /**\n     * @description Show or hide widget element\n     * @param [display]  Use true to show the element or false to hide it.\n     * @returns current instance for chaining\n     */\n    toggle(display: boolean): this {\n        const state = typeof display !== 'undefined' ? display : !this.shown;\n\n        this[state ? 'show' : 'hide']();\n\n        return this;\n    }\n\n    /**\n     * @description Returns whether the widget is hidden\n     * @returns Hidden flag\n     */\n    isHidden(): boolean {\n        return !this.shown;\n    }\n\n    /**\n     * @description Returns whether the widget is shown\n     * @returns Shown flag\n     */\n    isShown(): boolean {\n        return this.shown;\n    }\n\n    /**\n     * @description This method provides ability to get template from ref element.\n     * @param templateRefId - Id of template\n     * @param renderTo - Render into element\n     * @returns return template string if it was found\n     *\n     * @protected\n     */\n    getTemplateByRefID(templateRefId: string, renderTo: RefElement): string | undefined {\n        const templateElement = this.ref(templateRefId).get();\n        let template;\n\n        if (templateElement) {\n            template = templateElement.textContent || templateElement.innerHTML;\n        } else if (!PRODUCTION) {\n            const tmpEl = renderTo.get();\n\n            if (tmpEl && tmpEl[templateProp]) {\n                template = tmpEl[templateProp];\n            }\n        }\n\n        return template;\n    }\n\n    /**\n     * @description This method provides ability to dynamically render HTML for widgets.\n     * @param templateRefId id of template\n     * @param data data to render\n     * @param [renderTo] render into element\n     * @param [strToRender] pre-rendered template\n     * @returns resolved if rendered or rejected if no found template promise\n     *\n     * @protected\n     */\n    render(\n        templateRefId = 'template',\n        data: {[key: string]: unknown} = {},\n        renderTo: RefElement = this.ref('self'),\n        strToRender = ''\n    ): Promise<void> {\n        return import(/* webpackChunkName: 'dynamic-render' */ 'mustache').then(d => d.default).then((Mustache) => {\n            let template = this.cachedTemplates[templateRefId];\n\n            if (!strToRender && !template) {\n                template = this.getTemplateByRefID(templateRefId, renderTo);\n\n                if (template) {\n                    this.cachedTemplates[templateRefId] = template;\n                    saveTemplateForHotReload(renderTo, template);\n                } else if (!PRODUCTION) {\n                    log.error(`Unable find template ${templateRefId}`, this);\n\n                    return Promise.reject(new Error(`Unable find template ${templateRefId}`));\n                }\n            }\n\n            if (data) {\n                data.lower = function () {\n                    return function (text, render) {\n                        return render(text).toLowerCase();\n                    };\n                };\n            }\n\n            const renderedStr = strToRender || Mustache.render(template, data);\n            const el = renderTo.get();\n\n            if (el && el.parentNode) {\n                // use new document to avoid loading images when diffing\n                const newHTMLDocument = document.implementation.createHTMLDocument('diffDOM');\n                const diffNode: HTMLElement = newHTMLDocument.createElement('div');\n\n                diffNode.innerHTML = renderedStr;\n\n                return this.applyDiff(el, diffNode);\n            } else {\n                log.error(`Missing el to render ${templateRefId}`, this);\n            }\n\n            return Promise.resolve();\n        });\n    }\n\n    /**\n     * @description Find diff between `el` and `diffNode` and apply diff by `diff-dom`\n     * @param el Element before change\n     * @param diffNode Changed element to find diff\n     * @returns promise that resolved when diff founded and applied\n     */\n    applyDiff(el: HTMLElement, diffNode: HTMLElement): Promise<void> {\n        return import(/* webpackChunkName: 'dynamic-render' */ 'diff-dom/src/index').then(({ DiffDOM }) => {\n            const delayedAttrModification: Array<() => void> = [];\n            const dd: diffDOM.DiffDOM = new DiffDOM({\n                filterOuterDiff: filterOuterDiffCallback,\n                preDiffApply: preDiffApplyCallback,\n                postDiffApply: (info: diffDOM.IInfo) => {\n                    postDiffApplyCallback(info, el, delayedAttrModification);\n                }\n            });\n\n            // Normalize DOM tree before applying diff to prevent infinite loop\n            // Infinite loop appear in case when few text nodes became one by one\n            el.normalize();\n            const diff: Array<diffDOM.IDiff> = dd.diff(el, diffNode.firstElementChild);\n\n            if (diff && diff.length) {\n                dd.apply(el, diff);\n            }\n\n            // report attr modification once app changes are applied\n            delayedAttrModification.forEach(action => action());\n\n            if (diff && diff.length) {\n                this.eventBus().emit('rendering.applied');\n            }\n        });\n    }\n}\n\nexport type TWidget = typeof Widget;\n\nexport type TWidgetInstance = InstanceType<TWidget>;\n\nexport type TDisposable = ReturnType<TWidgetInstance['ev']>;\n\nexport default Widget;\n","/**\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttributeNames#Polyfill\n *\n * Needed for MS Edge and IE\n */\nif (Element.prototype.getAttributeNames === undefined) {\n    Element.prototype.getAttributeNames = function getAttributeNames() {\n        const attributes = this.attributes;\n        const length = attributes.length;\n        const result: Array<string> = [];\n\n        result.length = length;\n\n        for (let i = 0; i < length; i += 1) {\n            result[i] = attributes[i].name;\n        }\n\n        return result;\n    };\n}\n","// CLARIFY: get rid of smoothscroll-polyfill due to big size and not critical value\nimport './getAttributeNames'; // needed for MS Edge\n\nif (!('scrollBehavior' in document.documentElement.style)) { // needed for MS Edge\n    setTimeout(() => {\n        import(/* webpackChunkName: 'smoothscroll' */ 'smoothscroll-polyfill').then(smoothScroll => {\n            smoothScroll.default.polyfill();\n        });\n    }, 0);\n}\n","import { submitFormJson, errorFallbackMessage } from 'widgets/toolbox/ajax';\nimport { scrollWindowTo, scrollToTop } from 'widgets/toolbox/scroll';\nimport { timeout } from 'widgets/toolbox/util';\n\nimport { TButtonInstance } from 'widgets/global/Button';\nimport { TBasicInputInstance } from 'widgets/forms/BasicInput';\n\n/**\n * @param BasicForm Base widget for extending\n * @returns Ajax Form class\n */\nfunction AjaxFormClassCreator(BasicForm: import('widgets/forms/BasicForm').TBasicForm) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class AjaxForm\n     * @augments BasicForm\n     * @classdesc Represents AjaxForm component with next features:\n     * 1. Allow submit and handle submit Form\n     * 2. Allow handle server response\n     * 3. Allow handle form errors (form level and field level) that comes from backend\n     * AjaxForm widget should contain {@link Button} widgets that implement submit Form button.\n     * Widget has next relationship:\n     * * Handle Form submit using method {@link AjaxForm#handleSubmit} by event {@link Button#event:click} from {@link Button} widget.\n     * @example <caption>Example of AjaxForm widget usage</caption>\n     * <form\n     *     action=\"${URLUtils.url('Account-SavePassword')}\"\n     *     method=\"POST\"\n     *     data-widget=\"ajaxform\"\n     *     data-event-submit.prevent=\"handleSubmit\"\n     * >\n     *    <div\n     *         class=\"b-form-message b-message m-error\"\n     *         hidden=\"hidden\"\n     *         data-ref=\"errorMessageLabel\"\n     *         role=\"alert\"\n     *     ></div>\n     *\n     *     ... form fields\n     *\n     *     <div>\n     *         <button\n     *              class=\"b-button\"\n     *              type=\"submit\"\n     *              name=\"save\"\n     *              data-widget=\"button\"\n     *              data-widget-event-click=\"handleSubmit\"\n     *              data-event-click.prevent=\"handleClick\"\n     *              data-id=\"submitButton\"\n     *         >\n     *              ${Resource.msg('button.save','account',null)}\n     *         </button>\n     *     </div>\n     * </form>\n     * @property {string} data-widget - Widget name `ajaxform`\n     * @property {string} data-event-submit - Event listener for form submission\n     */\n    class AjaxForm extends BasicForm {\n        submitting: boolean | undefined;\n\n        /**\n         * @description Marks form as busy\n         */\n        busy() {\n            super.busy();\n            this.getById(this.prefs().submitButton, (submitButton: TButtonInstance) => submitButton.busy());\n        }\n\n        /**\n         * @description Marks form as not busy\n         */\n        unbusy() {\n            super.unbusy();\n            this.getById(this.prefs().submitButton, (submitButton: TButtonInstance) => submitButton.unbusy());\n        }\n\n        /**\n         * @description Handles submit Form\n         * @returns Promise object represents server response for shipping methods updating\n         */\n        handleSubmit() {\n            if (!this.isChildrenValid() || this.submitting) {\n                return Promise.resolve(null);\n            }\n\n            this.busy();\n\n            this.submitting = true;\n\n            this.ref(this.prefs().errorMessageLabel).hide();\n\n            return submitFormJson(\n                this.getFormUrl(),\n                this.getFormFields(),\n                this.ref('self').attr('method') === 'GET' ? 'GET' : 'POST'\n            )\n                .then((response) => {\n                    this.onSubmitted(response);\n\n                    return response;\n                })\n                .catch(this.onError.bind(this))\n                .finally(this.afterSubmission.bind(this));\n        }\n\n        /**\n         * @description Handles server response\n         * @emits AjaxForm#submit\n         * @param data Server JSON response once form submitted\n         */\n        onSubmitted(data: TServerResponse) {\n            if (data.success && data.redirectUrl) {\n                window.location.assign(data.redirectUrl);\n            } else if (!data.success) {\n                if (data.redirectUrl) {\n                    window.location.assign(data.redirectUrl);\n                } else if (data.fieldErrors && Object.keys(data.fieldErrors).length) {\n                    Object.entries(data.fieldErrors).forEach(([name, errorMessage], index) => {\n                        this.getById(name, (input: TBasicInputInstance) => {\n                            input.setError(errorMessage);\n\n                            // Set focus to the first invalid input field\n                            if (index === 0) {\n                                input.setFocus();\n                            }\n                        });\n                    });\n                } else if (data.errorCode !== 500) {\n                    // Show only Accessibility Alert in case of 500 error\n                    this.setError(data.errorMessage);\n                    this.eachField((field) => field.clearError());\n                }\n            } else {\n                timeout(() => {\n                    /**\n                     * @description Event to submit AjaxForm\n                     * @event AjaxForm#submit\n                     */\n                    this.emit('submit', data);\n                });\n            }\n        }\n\n        /**\n         * @description Handles an error, which happens during request (for ex. 500 response)\n         * @param error - error, which happened during request\n         */\n        onError(error: Error) {\n            this.setError(error.message || errorFallbackMessage);\n            const errorElement = this.ref(this.prefs().errorMessageLabel).get();\n\n            if (errorElement) {\n                scrollWindowTo(errorElement, true);\n            } else {\n                scrollToTop();\n            }\n        }\n\n        /**\n         * @description Changes Form state after submission\n         */\n        afterSubmission() {\n            this.unbusy();\n\n            this.submitting = false;\n        }\n\n        /**\n         * @description Set Form or Form fields errors\n         * @param msg - Generic error message, if no custom message - show generic one\n         * @param scrollToError - defines using of scroll to error\n         * @param refElem - RefElement id\n         */\n        setError(msg: string, scrollToError = true, refElem = 'errorMessageLabel') {\n            const errorMessageLabel = this.ref(refElem)\n                .setText(msg || '')\n                .show();\n\n            if (!scrollToError) {\n                return;\n            }\n\n            const element = errorMessageLabel.get();\n\n            if (element) {\n                scrollWindowTo(element, true);\n            } else {\n                scrollToTop();\n            }\n        }\n    }\n\n    return AjaxForm;\n}\n\nexport type TAjaxForm = ReturnType<typeof AjaxFormClassCreator>;\n\nexport type TAjaxFormInstance = InstanceType<TAjaxForm>;\n\nexport default AjaxFormClassCreator;\n","import { timeout } from '../toolbox/util';\nimport { getJSONByUrl } from 'widgets/toolbox/ajax';\n\nimport { TWidget } from 'widgets/Widget';\nimport { TRefElementInstance } from 'widgets/toolbox/RefElement';\nimport { TButtonInstance } from 'widgets/global/Button';\nimport { TBasicInput, TBasicInputInstance } from 'widgets/forms/BasicInput';\n\n/**\n * @param Widget base widget class\n * @returns Basic Form class\n */\nfunction BasicFormClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class BasicForm\n     * @augments Widget\n     * @classdesc Represents BasicForm component with next features:\n     * 1. Allow show/hide Form progress bar\n     * 2. Allow get submit button name, Form fields, Form action url\n     * 3. Allow submit and handle submit Form\n     * 4. Allow set value to Form fields\n     * 5. Allow validate Form and Form fields\n     * 6. Allow updates Form html body by sending an AJAX request to server with params object\n     * BasicForm widget should contain {@link Button} widgets that implement submit Form button.\n     * Widget has next relationship:\n     * * Handle Form submit using method {@link BasicForm#handleSubmit} by event {@link Button#event:click} from {@link Button} widget.\n     * @example <caption>Example of BasicForm widget usage when Submit Button have assigned widget</caption>\n     * <form\n     *     action=\"${URLUtils.url('Order-Track')}\"\n     *     method=\"GET\"\n     *     data-widget=\"form\"\n     *     data-event-submit=\"handleSubmit\"\n     * >\n     *      ... form contents\n     *    <button\n     *       data-widget=\"button\"\n     *       data-id=\"submitButton\"\n     *       type=\"submit\"\n     *       data-forward-to-parent=\"handleSubmit\"\n     *       data-event-click=\"handleSubmit\"\n     *    >\n     *       ...Button name\n     *    </button>\n     * </form>\n     * @example <caption>Example of BasicForm widget usage when submit button NOT have assigned widget</caption>\n     * <form\n     *     action=\"${URLUtils.url('Order-Track')}\"\n     *     method=\"GET\"\n     *     data-widget=\"form\"\n     *     data-event-submit=\"handleSubmit\"\n     * >\n     *      ... form contents\n     *    <button\n     *       data-ref=\"submitButton\"\n     *       type=\"submit\"\n     *       data-event-click=\"handleSubmit\"\n     *    >\n     *       ...Button name\n     *    </button>\n     * </form>\n     * @property {string} data-widget - Widget name `form`\n     * @property {string} data-event-submit - Event listener for form submission\n     */\n    class BasicForm extends Widget {\n        submitting?: boolean;\n\n        prefs() {\n            return {\n                submitEmpty: true,\n                emptyFormErrorMsg: '',\n                submitButton: 'submitButton',\n                errorMessageLabel: 'errorMessageLabel',\n                SUBMITTING_TIMEOUT: 5000,\n                formDefinitionUrl: '',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Set aria-busy attribute value true\n         */\n        busy() {\n            this.ref('self').attr('aria-busy', 'true');\n        }\n\n        /**\n         * @description Set aria-busy attribute value false\n         */\n        unbusy() {\n            this.ref('self').attr('aria-busy', 'false');\n        }\n\n        /**\n         * @description Initialize widget logic\n         */\n        init() {\n            super.init();\n\n            this.addAutofillListener();\n\n            this.eachField(widget => {\n                /**\n                 * Below code is needed to initiate correct comparison configuration for certain fields\n                 * It iterates through all BasicInput children and if it finds the compare data in validation -\n                 * it will set necessary data to a proper child BasicInput widget\n                */\n\n                const widgetValidation = widget.prefs().validationConfig || {};\n\n                if (!Array.isArray(widgetValidation.compareWith)) { return; }\n\n                widgetValidation.compareWith.forEach((compareFieldItem, index) => {\n                    this.getById(compareFieldItem.field, targetWidget => {\n                        if (targetWidget.length) {\n                            const compareOptions = {\n                                field: compareFieldItem.field,\n                                msg: widgetValidation.errors.compareWith[index] || '',\n                                equality: compareFieldItem.equality\n                            };\n\n                            widget.data('setMatchCmp', targetWidget, compareOptions);\n                        }\n                    });\n                });\n            });\n        }\n\n        /**\n         * @description Process children fields with callback passed as param\n         * @param fn - callback function\n         * @returns List of fields processing result\n         */\n        eachField(fn: (n: TBasicInputInstance) => unknown): Array<unknown> {\n            return this.getFields().map(item => {\n                return fn(item);\n            });\n        }\n\n        /**\n         * @description Get form field instances\n         */\n        getFields(): Array<TBasicInputInstance> {\n            const BasicInput = <TBasicInput> this.getConstructor('basicInput');\n            const items = this.items ? this.items : [];\n\n            return items.filter((item: unknown): item is TBasicInputInstance => item instanceof BasicInput);\n        }\n\n        /**\n         * @description Submit Form\n         */\n        submit() {\n            const elem = this.ref(this.prefs().submitButton).get();\n\n            if (elem) {\n                elem.click();\n            }\n        }\n\n        /**\n         * @description Handle submit Form\n         * @emits BasicForm#submit\n         * @param _el event source element\n         * @param eventOrButton event instance if DOM event and button instance if widget event\n         */\n        handleSubmit(_el: TRefElementInstance, eventOrButton?: Event | TRefElementInstance) {\n            this.clearError();\n\n            const valid = this.isChildrenValid();\n\n            if ((!valid || this.submitting) && (eventOrButton && eventOrButton instanceof Event)) {\n                eventOrButton.preventDefault();\n\n                return;\n            }\n\n            if (eventOrButton && eventOrButton instanceof SubmitEvent) {\n                this.has(this.prefs().submitButton, (submitButton) => {\n                    submitButton.disable();\n                });\n                this.getById<TButtonInstance>(this.prefs().submitButton, (submitButton) => {\n                    submitButton.disable();\n                });\n\n                this.submitting = true;\n                this.onDestroy(timeout(() => {\n                    this.submitting = false;\n                }, this.prefs().SUBMITTING_TIMEOUT));\n                this.emit('submit');\n            }\n        }\n\n        /**\n         * @description Get Form fields\n         * @returns Object contains form fields\n         */\n        getFormFields(): {[key: string]: string | undefined} {\n            const fields = {};\n\n            this.eachField(widget => {\n                if (!(widget.skipSubmission && widget.skipSubmission())) {\n                    const name = widget.getName();\n\n                    if (name) {\n                        fields[name.toString()] = widget.getValue();\n                    }\n                }\n            });\n\n            return fields;\n        }\n\n        /**\n         * @description Sets related fields values, can be executed silently, without triggering `change` event\n         * @param formFields - Structured object with name: value pairs for input fields\n         * @param silently - if set to `true` - input should not be validated against a new value\n         */\n        setFormFields(formFields: Record<string, string>, silently = false) {\n            this.eachField(widget => {\n                const name = widget.getName();\n\n                widget.setValue(formFields[name], silently);\n            });\n        }\n\n        /**\n         * @description Sets value for particular field\n         * @param name - field name\n         * @param value - value to set\n         * @param silently - input should not be validated against a new value and no events should be fired\n         * @param throwErrorOnMissingField - sets behavior if field with given name is not found\n         */\n        setFormFieldValue(name: string, value: string, silently = false, throwErrorOnMissingField = false) {\n            const fields = this.getFields();\n\n            const field = fields.find(f => f.getName() === name);\n\n            if (!field) {\n                if (throwErrorOnMissingField) {\n                    throw new Error(`Field with name ${name} not found`);\n                }\n\n                return;\n            }\n\n            field.setValue(value, silently);\n        }\n\n        /**\n         * @description Check is Form fields valid\n         * @param cb callback called if child inputs are valid\n         * @returns boolean value is Form input valid\n         */\n        isChildrenValid(cb?: () => void): boolean {\n            let valid = true;\n\n            this.eachField(item => {\n                if (typeof item.validate === 'function' && !item.validate()) {\n                    if (valid && item.setFocus) {\n                        item.setFocus();\n                    }\n\n                    valid = false;\n                }\n            });\n\n            if (valid && typeof cb === 'function') {\n                cb();\n            }\n\n            if (!this.prefs().submitEmpty) {\n                const fieldsValues = this.getFormFields();\n\n                if (Object.keys(fieldsValues).every((key) => !fieldsValues[key])) {\n                    valid = false;\n                    this.ref(this.prefs().errorMessageLabel)\n                        .setText(this.prefs().emptyFormErrorMsg);\n                    this.ref(this.prefs().errorMessageLabel).show();\n                }\n            }\n\n            return valid;\n        }\n\n        /**\n         * @description Form validate\n         * @returns boolean value is Form input valid\n         */\n        validate(): boolean {\n            return this.isChildrenValid();\n        }\n\n        /**\n         * @description Check is Form valid based on Form fields validation\n         * @returns boolean value is Form valid\n         */\n        isValid(): boolean {\n            let valid = true;\n\n            this.eachField((itemComponent) => {\n                if (typeof itemComponent.isValid === 'function'\n                    && !itemComponent.isValid()\n                ) {\n                    valid = false;\n\n                    return false;\n                }\n\n                return true;\n            });\n\n            return valid;\n        }\n\n        /**\n         * @description Interface that can be override\n         */\n        setFocus() {\n            throw Error('setFocus method not implemented');\n        }\n\n        /**\n         * @description Get Form action url\n         * @returns form action url\n         */\n        getFormUrl(): string {\n            const formURL = this.ref('self').attr('action');\n\n            return formURL.toString();\n        }\n\n        /**\n         * @description Clear Form Error\n         * @param refID RefElement ID\n         */\n        clearError(refID = 'errorMessageLabel') {\n            this.ref(refID)\n                .hide()\n                .setText('');\n        }\n\n        /**\n         * @description Updates form html body by sending an AJAX request to server with params object\n         * <br>(possible param key is `countryCode`)\n         * <br>Obtained template injected instead of old fields\n         * <br>Data, entered in fields previously will be restored\n         * @param params - request parameters\n         * @param params.countryCode - A country code to get country-specific form\n         * @returns Promise object represents rendering result\n         */\n        updateFormData(params: Record<string, string>): Promise<boolean> {\n            const formDefinitionUrl = this.prefs().formDefinitionUrl;\n\n            if (formDefinitionUrl && params) {\n                return new Promise((resolve, reject) => {\n                    getJSONByUrl(formDefinitionUrl, params, true).then((response) => {\n                        if (response.formDefinition) {\n                            const formFields = this.getFormFields();\n\n                            this.render('', {}, this.ref('fieldset'), <string> response.formDefinition).then(() => {\n                                Object.entries(formFields).forEach(([fieldName, fieldValue]) => {\n                                    this.getById(fieldName, (field: TBasicInputInstance) => {\n                                        field.setValue(fieldValue, true);\n                                    });\n                                });\n                                resolve(true);\n                                setTimeout(() => this.formDataUpdated(), 0);\n                            }).catch(() => {\n                                reject(new Error('Form definition rendering error'));\n                            });\n                        } else {\n                            reject(new Error('Form definition is empty'));\n                        }\n                    });\n                });\n            }\n\n            return new Promise((resolve) => {\n                resolve(true);\n                this.formDataUpdated();\n            });\n        }\n\n        /**\n         * @description Template method called once form definitions were reloaded\n         */\n        formDataUpdated() {\n            // Placeholder for additional logic on form data updating\n        }\n\n        /**\n         * @description add form elements autofill listeners. Appropriate animation\n         * fires when suggested values are filled into the form.\n         */\n        addAutofillListener() {\n            this.ev('animationstart', (element, event: AnimationEvent) => {\n                switch (event.animationName) {\n                    case 'autofill-start':\n                        this.handleAutofillStart();\n                        break;\n                    case 'autofill-end':\n                        this.handleAutofillEnd();\n                        break;\n                    default:\n                        break;\n                }\n            }, this.ref('self').get(0));\n        }\n\n        /**\n         * @description Handles an event of filling the form by previously entered information\n         * Note: this event fires when suggested values are filled into the form as a preview,\n         * if you want to handle event when user actually selects some of suggested addresses - you should look for different event.\n         */\n        handleAutofillStart() {\n            // Placeholder\n        }\n\n        /**\n         * @description Handles an event of leaving browser suggestion area without selecting\n         */\n        handleAutofillEnd() {\n            // Placeholder\n        }\n    }\n\n    return BasicForm;\n}\n\nexport type TBasicForm = ReturnType<typeof BasicFormClassCreator>;\n\nexport type TBasicFormInstance = InstanceType<TBasicForm>;\n\nexport default BasicFormClassCreator;\n","import { TRefElementInstance } from 'widgets/toolbox/RefElement';\nimport { scrollIntoView } from 'widgets/toolbox/scroll';\nimport { get } from 'widgets/toolbox/util';\nimport { TWidget } from 'widgets/Widget';\n\nexport type TValidationConfig = {\n    mandatory: boolean;\n    minLength: number;\n    maxLength: number;\n    errors: Record<string, string>;\n    patterns: Record<string, string>;\n    compareWith: string;\n    validOptions: Array<{ value: string; label: string }>;\n};\n\nexport type TCompareWithObj = {\n    widgetToMatchOpts: {\n        field?: string;\n        msg?: string;\n        equality?: string;\n    };\n    widgetToMatch: InstanceType<TWidget>;\n}\n\nexport type TCheckResultObj = {\n    valid: boolean;\n    msg: string;\n};\n\n/**\n * @description Base BasicInput implementation\n * @param Widget Base widget for extending\n * @returns Basic Input class\n */\nfunction BasicInputClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class BasicInput\n     * @augments Widget\n     * @classdesc Basic Input Widget (like abstract ancestor), contains basic validation and input management logic.\n     * Supposes valid unified input markup. Contains also error messaging.\n     * Usually is not used directly, and relevant subclasses should be used.\n     * @property {boolean} data-skip-validation - if input needs to skip validation\n     * @property {string} data-classes-error-state - classes for input's error state\n     * @property {string} data-classes-valid-state - classes for input's valid state\n     * @property {string} data-classes-disabled - classes for disabled input\n     * @property {string} data-classes-locked - classes for locked input (disabled + readonly)\n     * @property {string} data-classes-wrapper-error-state - classes for input wrapper, when input in error state\n     * @property {string} data-classes-wrapper-valid-state - classes for input wrapper, when input in valid state\n     * @property {object} data-validation-config - validation rules and error messages for input\n     */\n    class BasicInput extends Widget {\n        initValue = '';\n\n        widgetsToMatch: Array<TCompareWithObj> | undefined;\n\n        error?: string = '';\n\n        disabled = false;\n\n        locked = false;\n\n        prefs() {\n            return {\n                skipValidation: false,\n                classesErrorState: 'm-invalid',\n                classesValidState: 'm-valid',\n                classesDisabled: 'm-disabled',\n                classesLocked: 'm-locked',\n                classesInteractedState: 'm-interacted',\n                classesWrapperErrorState: 'm-invalid',\n                classesWrapperValidState: 'm-valid',\n                validationConfig: <TValidationConfig> {},\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            this.initValue = this.getValue();\n\n            if (!this.id && this.ref('field').attr('name')) {\n                this.id = <string> this.ref('field').attr('name');\n            }\n\n            this.disabled = this.ref('field').attr('disabled') === 'disabled';\n            this.widgetsToMatch = [];\n\n            this.setInputInteractedState();\n        }\n\n        /**\n         * @description Get input value\n         * @returns - return input name\n         */\n        getValue(): string {\n            return <string>(this.ref('field').val());\n        }\n\n        /**\n         * @description Get input name\n         * @returns - return input name\n         */\n        getName(): string {\n            return <string> this.ref('field').attr('name');\n        }\n\n        /**\n         * @description Set focus to input\n         */\n        focus() {\n            const field = this.ref('field').get();\n\n            if (field) {\n                field.focus();\n            }\n        }\n\n        /**\n         * @description Set focus to input and scroll element into viewport\n         */\n        setFocus() {\n            const elementToScroll = this.ref('self').get();\n\n            if (elementToScroll && !this.isScrollableInput()) {\n                scrollIntoView(elementToScroll);\n            }\n\n            this.focus();\n        }\n\n        /**\n         * @description Blur (unfocus) an input\n         */\n        blur() {\n            const field = this.ref('field').get();\n\n            if (field) {\n                field.blur();\n            }\n        }\n\n        /**\n         * @description Set input value\n         * \"checkRanges\" method needs to validate min\\max length after changing input value by JS\n         * https://stackoverflow.com/questions/53226031/html-input-validity-not-checked-when-value-is-changed-by-javascript\n         * @param [newVal] - set this value to input\n         * @param [silently] - if set to `true` - input\n         * should not be validated against a new value and no events should be fired\n         */\n        setValue(newVal: (string | number | undefined) = '', silently: (boolean | undefined) = false) {\n            const refField = this.ref('field');\n\n            refField.val(String(newVal));\n            this.checkRanges(refField);\n\n            if (!silently) {\n                this.update();\n            }\n\n            this.setInputInteractedState();\n        }\n\n        /**\n         * @description Check min/max length when value is being set and if it out of boundaries, set custom validity.\n         * After setting value via code, a min/max length rule does not work until the value is changed by user.\n         * @param refField - Field ref object\n         * */\n        checkRanges(refField: TRefElementInstance) {\n            const value: string = <string>(refField.val());\n            const field = refField.get();\n            const rangesError = this.getRangesError(value);\n\n            if (field instanceof HTMLInputElement) {\n                field.setCustomValidity(rangesError);\n            }\n        }\n\n        /**\n         * @description Check ranges and return appropriate error message or empty string\n         * @param val - Value that is being set\n         * @returns Ranges error message or empty string\n         */\n        getRangesError(val: string): string {\n            if (!val) {\n                return '';\n            }\n\n            const refField = this.ref('field');\n            const field = refField.get();\n\n            if (field instanceof HTMLInputElement) {\n                const validationConfig = this.prefs().validationConfig;\n                const valueLength = String(val).length;\n\n                if (field.minLength && valueLength && valueLength < field.minLength) {\n                    return get(validationConfig, 'errors.minLength', '');\n                } else if (field.maxLength && valueLength > field.maxLength) {\n                    return get(validationConfig, 'errors.maxLength', '');\n                }\n            }\n\n            return '';\n        }\n\n        /**\n         * @description Updates custom validity state\n         */\n        updateCustomValidityState() {\n            const field = this.ref('field');\n            const validity = field.getValidity();\n\n            if (validity && validity.state.customError) {\n                this.checkRanges(field);\n            }\n        }\n\n        /**\n         * @description Validate input and trigger `change` event\n         * @emits BasicInput#change\n         */\n        update() {\n            this.validate();\n            /**\n             * @description Event, indicates input value was changed\n             * @event BasicInput#change\n            */\n            this.emit('change', this);\n        }\n\n        /**\n         * @description Clears input error\n         * @emits BasicInput#inputstatechanged\n         */\n        clearError() {\n            this.setError('');\n        }\n\n        /**\n         * @description Set/unset error state into input (message and classes)\n         * @param [error] error message - if defined, will set error state, and valid state - otherwise\n         * @emits BasicInput#inputstatechanged\n         */\n        setError(error?: string) {\n            if (error) {\n                this.ref('field').removeClass(this.prefs().classesValidState);\n                this.ref('self').removeClass(this.prefs().classesWrapperValidState);\n                this.ref('field').addClass(this.prefs().classesErrorState);\n                this.ref('self').addClass(this.prefs().classesWrapperErrorState);\n                this.ref('errorFeedback').setText(error).show();\n            } else {\n                this.ref('field').removeClass(this.prefs().classesErrorState);\n                this.ref('self').removeClass(this.prefs().classesWrapperErrorState);\n                this.ref('field').addClass(this.prefs().classesValidState);\n                this.ref('self').addClass(this.prefs().classesWrapperValidState);\n                this.ref('errorFeedback').hide();\n            }\n\n            /**\n             * @description Event, indicates input state was changed\n             * @event BasicInput#inputstatechanged\n             */\n            this.emit('inputstatechanged', this, error || null);\n        }\n\n        /**\n         * @description Indicates, that input value is (is not) valid against HTML5 native constraints (input patterns, min/max etc).\n         * Also cares about case, when some field value should match another field value.\n         * Sets error message in case of input is not valid. Message is taken from JSON `validationConfig` data-attribute\n         * @returns is input valid or not\n         */\n        isValid(): boolean {\n            const field = this.ref('field');\n            const value = this.getValue();\n\n            this.updateCustomValidityState();\n\n            // eslint-disable-next-line prefer-const\n            let { state, msg } = field.getValidity()\n                || { msg: '', state: ({ valid: true } as ValidityState) };\n            let valid = state.valid;\n\n            const validationStateMsg = this.getValidationStateMsg(state);\n\n            if (validationStateMsg) {\n                msg = validationStateMsg;\n            }\n\n            if (valid) {\n                const matchingResult = this.checkMatching();\n\n                msg = matchingResult.msg;\n                valid = matchingResult.valid;\n            }\n\n            // Added for cases when autocomplete ignores standard length validation\n            if (valid && value) {\n                msg = this.getRangesError(value);\n                valid = !msg;\n            }\n\n            if (valid && value) {\n                const patternsCheckingResult = this.checkPatterns();\n\n                msg = patternsCheckingResult.msg;\n                valid = patternsCheckingResult.valid;\n            }\n\n            this.error = msg;\n\n            return valid;\n        }\n\n        /**\n         * @description Get message by state validity\n         * @param state Validity state\n         */\n        getValidationStateMsg(state: ValidityState): string {\n            const validation = this.prefs().validationConfig;\n\n            if ((state.patternMismatch || state.typeMismatch)) {\n                return validation.errors.parse || validation.errors.security;\n            } else if ((state.rangeOverflow || state.rangeUnderflow || state.tooLong || state.tooShort)) {\n                if (state.rangeOverflow || state.tooLong) {\n                    return validation.errors.maxLength;\n                } else if (state.rangeUnderflow || state.tooShort) {\n                    return validation.errors.minLength;\n                }\n            } else if (state.valueMissing) {\n                return validation.errors.required;\n            }\n\n            return '';\n        }\n\n        /**\n         * @description Check that field`s value match to an other field`s value\n         * @returns Result object\n         */\n        checkMatching(): TCheckResultObj {\n            const result = {\n                valid: true,\n                msg: ''\n            };\n\n            if (this.widgetsToMatch && this.widgetsToMatch.length) {\n                const invalidWidget = this.getInvalidCompareWithWidget();\n\n                if (invalidWidget) {\n                    result.msg = invalidWidget.widgetToMatchOpts.msg || '';\n                    result.valid = false;\n                }\n            }\n\n            return result;\n        }\n\n        /**\n         * @description Check field patterns\n         * @returns Result object\n         */\n        checkPatterns(): TCheckResultObj {\n            const fieldValue = this.getValue();\n            const validation = this.prefs().validationConfig;\n            const result = {\n                valid: true,\n                msg: ''\n            };\n\n            if (validation.patterns) {\n                const patternNames = Object.keys(validation.patterns);\n\n                for (let index = 0; index < patternNames.length; index++) {\n                    const patternName = patternNames[index];\n                    const pattern = validation.patterns[patternName];\n                    const patternRegExp = new RegExp(pattern);\n\n                    if (!patternRegExp.test(fieldValue)) {\n                        result.msg = validation.errors[patternName];\n                        result.valid = false;\n                    }\n                }\n            }\n\n            return result;\n        }\n\n        /**\n         * @description Triggers input validation process\n         * @returns input validation result\n         */\n        validate(): boolean {\n            if (!this.shown || this.disabled || this.prefs().skipValidation) {\n                return true;\n            }\n\n            const valid = this.isValid();\n\n            if (valid) {\n                this.setError('');\n            } else {\n                this.setError(this.error || 'Something went wrong!');\n            }\n\n            this.setInputInteractedState();\n\n            return valid;\n        }\n\n        /**\n         * @description Disables an input\n         * @returns `this` instance for chaining\n         */\n        disable(): this {\n            this.disabled = true;\n            this.ref('field').disable();\n            this.ref('self').addClass(this.prefs().classesDisabled);\n\n            return this;\n        }\n\n        /**\n         * @description Enables an input\n         * @returns `this` instance for chaining\n         */\n        enable(): this {\n            this.disabled = false;\n            this.ref('field').enable();\n            this.ref('self').removeClass(this.prefs().classesDisabled);\n\n            return this;\n        }\n\n        /**\n         * @description Locks an input (adds `readonly` attribute)\n         */\n        lock() {\n            this.locked = true;\n            this.ref('field').attr('readonly', true);\n            this.ref('self').addClass(this.prefs().classesLocked);\n        }\n\n        /**\n         * @description Unlocks an input (removes `readonly` attribute)\n         */\n        unlock() {\n            this.locked = false;\n            this.ref('field').attr('readonly', false);\n            this.ref('self').removeClass(this.prefs().classesLocked);\n        }\n\n        /**\n         * @description Checks if input is disabled\n         * @returns state of input\n         */\n        isDisabled(): boolean {\n            return this.disabled;\n        }\n\n        /**\n         * @description Saves on widget level target widget for comparison validation to use it further in `isValid` method\n         * @param widgetToMatch cmp\n         * @param options to compare\n         */\n        setMatchCmp(widgetToMatch: BasicInput, options: {\n            [x: string]: string | undefined;\n        } = {}) {\n            if (this.widgetsToMatch) {\n                this.widgetsToMatch.push({\n                    widgetToMatch: widgetToMatch,\n                    widgetToMatchOpts: options\n                });\n            }\n        }\n\n        /**\n         * @description To be either included or not into the form submission to server.\n         * @returns result\n         */\n        skipSubmission(): boolean {\n            return false;\n        }\n\n        /**\n         * @description Get invalid widget according to compareWith validation rules\n         */\n        getInvalidCompareWithWidget(): TCompareWithObj | null {\n            if (this.widgetsToMatch) {\n                return this.widgetsToMatch.find(widget => {\n                    const equality = widget.widgetToMatchOpts.equality;\n                    const matchValue = widget.widgetToMatch.data('getValue');\n\n                    return (equality && matchValue !== this.getValue())\n                        || (!equality && matchValue === this.getValue());\n                }) || null;\n            }\n\n            return null;\n        }\n\n        /**\n         * @description Get input placeholder\n         * @returns - return input placeholder\n         */\n        getPlaceholder(): string {\n            return <string> this.ref('field').attr('placeholder');\n        }\n\n        /**\n         * @description Add or remove active class for form fields\n         * @param isActive - define state of the input element\n         */\n        toggleInputInteractedState(isActive) {\n            this.ref('self').toggleClass(this.prefs().classesInteractedState, isActive);\n        }\n\n        /**\n         * @description Check if input field has value or placeholder and add special class if it has\n         */\n        setInputInteractedState() {\n            if (!this.ref('self').data('showAnimation')) {\n                return;\n            }\n\n            const filledInput = this.ref('self').get()?.querySelectorAll('input:-webkit-autofill');\n            const value = Boolean(this.getValue());\n            const placeholder = Boolean(this.getPlaceholder());\n\n            this.toggleInputInteractedState(value || placeholder);\n\n            if (filledInput?.length) {\n                this.toggleInputInteractedState(true);\n            }\n        }\n\n        /**\n         * @description Filter inputs with native scroll on focus\n         */\n        isScrollableInput() {\n            const field = this.ref('field');\n            const tags = ['input', 'select', 'textarea'];\n            const types = ['hidden', 'radio', 'checkbox'];\n\n            return tags.includes(field.get()?.tagName.toLowerCase() as string) && !types.includes(field.attr('type'));\n        }\n    }\n\n    return BasicInput;\n}\n\nexport type TBasicInput = ReturnType<typeof BasicInputClassCreator>;\n\nexport type TBasicInputInstance = InstanceType<TBasicInput>;\n\nexport default BasicInputClassCreator;\n","import { TRefElementInstance } from 'widgets/toolbox/RefElement';\nimport { clickOutside } from 'widgets/toolbox/util';\nconst KEY_DOWN = 40;\nconst KEY_UP = 38;\nconst KEY_ESCAPE = 27;\nconst KEY_RETURN = 13;\nconst KEY_TAB = 9;\nconst ACTIVE_DESCENDANT = 'aria-activedescendant';\n\n/**\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} refElement\n */\n\n/**\n * @description Base Combobox implementation\n * @param BasicInput Base widget for extending\n * @returns Combobox class\n */\nfunction ComboboxClassCreator(BasicInput: import('widgets/forms/BasicInput').TBasicInput) {\n    /*\n     * This content is based on w3.org design pattern examples and licensed according to the\n     * W3C Software License at\n     * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n     * Please see specification:\n     * https://www.w3.org/TR/wai-aria-practices/#combobox\n     */\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class Combobox\n     * @augments BasicInput\n     * @classdesc Combobox implementation in accordance with accessibility statements.\n     * Class could be extended to implement any provider-specific remote/local data fetching for Combobox inner elements.\n     * It is needed to implement `getSuggestions` method in a way, that is specific for subclasses\n     * Supports keyboard navigation among Combobox items.\n     * As far as Combobox could be used only in a subclasses, example, given below, is related to known subclass `searchBox`\n     * @property {string} data-widget - Widget name `searchBox`\n     * @property {string} data-url - URL to obtain search suggestions from server based on customer's input\n     * @property {boolean} data-close-on-tab - If true - `tab` keypress will close listbox\n     * @property {string} data-widget-event-closesearch - An event, fired when `close` element was pressed\n     * @property {string} data-event-keydown - event handler for `keydown` event\n     * @property {boolean} data-close-from-outside - config, which shows, if combobox should be closed when click outside\n     * @property {number} data-min-chars - minimum characters to trigger show combobox\n     * @property {number} data-max-chars - maximum characters to enter\n     * @property {number} data-updating-delay - update listbox delay\n     * @property {string} data-classes-focused-item - class for currently focused item\n     * @property {string} data-classes-active-list-box - active listbox class\n     * @example <caption>Example of Combobox widget usage</caption>\n     * <div\n     *     id=\"search-box-dialog\"\n     *     data-widget=\"searchBox\"\n     *     data-disable-rendering=\"true\"\n     *     data-ref-first-focus-element=\"submit\"\n     *     data-ref-last-focus-element=\"closeSearch\"\n     *     data-focus-loop=\"true\"\n     *     data-event-keydown=\"handleKeydown\"\n     *     data-url=\"${URLUtils.url('SearchServices-GetSuggestions')}\"\n     *     data-close-from-outside=\"false\"\n     *     data-close-on-tab=\"false\"\n     *     data-ref-traps-container=\"formWrap\"\n     * >\n     *     <form>\n     *         ... search field content\n     *     </form>\n     *     ...\n     *     <div\n     *        aria-labelledby=\"header-search-input\"\n     *        id=\"search-suggestions-list\"\n     *        class=\"b-suggestions\"\n     *        data-ref=\"listbox\"\n     *        data-event-mouseenter=\"markHover\"\n     *        data-event-mouseleave=\"unMarkHover\"\n     *        data-tau=\"search_suggestions_list\"\n     *     >\n     *         <div role=\"none\" class=\"b-suggestions-inner\" data-ref=\"listboxInner\"></div>\n     *     </div>\n     *     <script data-ref=\"template\" type=\"template/mustache\">\n     *         <div data-ref=\"listboxInner\">\n     *             ... search suggestions\n     *         </div>\n     *     </script>\n     * </div>\n     */\n    class Combobox extends BasicInput {\n        currentSelected?: TRefElementInstance | null;\n\n        bodyClickListener?: ReturnType<typeof clickOutside>;\n\n        timeout?: ReturnType<typeof setTimeout>;\n\n        lastSearchedTerm = '';\n\n        selectedIndex = -1;\n\n        resultsCount = 0;\n\n        isListboxOpen = false;\n\n        isOverlayVisible = false;\n\n        hasHoverWithin = false;\n\n        prefs() {\n            return {\n                minChars: 3,\n                maxChars: 50,\n                updatingDelay: 300,\n                closeFromOutside: true,\n                closeOnTab: true,\n                classesFocusedItem: 'm-focused',\n                classesActiveListBox: 'm-active',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Handles customer input\n         */\n        handleInput() {\n            const inputLength = this.ref('field').prop('value').length;\n\n            if (inputLength >= this.prefs().minChars && inputLength <= this.prefs().maxChars) {\n                this.updateListbox();\n            } else {\n                if (this.timeout) {\n                    clearTimeout(this.timeout);\n                }\n\n                this.closeListbox();\n            }\n        }\n\n        /**\n         * @description Marks element as hover, once mouse over\n         * @listens dom#mouseenter\n         */\n        markHover() {\n            this.hasHoverWithin = true;\n        }\n\n        /**\n         * @description Un-mark element as hover, once mouse out\n         * @listens dom#mouseleave\n         */\n        unMarkHover() {\n            this.hasHoverWithin = false;\n        }\n\n        /**\n         * @description Handles `focus` on combobox input\n         * @listens dom#focus\n         */\n        handleFocus() {\n            this.updateListbox();\n        }\n\n        /**\n         * @description Handles `blur` on combobox input\n         * @listens dom#blur\n         */\n        handleBlur() {\n            if (this.hasHoverWithin || this.selectedIndex < 0) {\n                return;\n            }\n\n            this.closeListbox();\n        }\n\n        /**\n         * @description Handles `keydown` on combobox input\n         * @param _ - source of keydown event\n         * @param event - keydown event object\n         * @listens dom#keydown\n         */\n        handleKeydown(_: HTMLElement, event: KeyboardEvent) {\n            let preventEventActions = false;\n\n            switch (event.keyCode) {\n                case KEY_ESCAPE:\n                    this.closeListbox();\n                    preventEventActions = true;\n                    break;\n                case KEY_UP:\n                    this.setSelectToNextItem();\n                    this.selectItem(this.getItemByIndex());\n                    preventEventActions = true;\n                    break;\n                case KEY_DOWN:\n                    this.setSelectToPreviousItem();\n                    this.selectItem(this.getItemByIndex());\n                    preventEventActions = true;\n                    break;\n                case KEY_RETURN:\n                    this.activateItem(this.getItemByIndex());\n\n                    return;\n                case KEY_TAB:\n                    if (this.prefs().closeOnTab) {\n                        this.closeListbox();\n                    }\n\n                    return;\n                default:\n                    return;\n            }\n\n            if (preventEventActions) {\n                event.stopPropagation();\n                event.preventDefault();\n            }\n        }\n\n        /**\n         * @description Sets previous item as selected, when navigating from keyboard\n         */\n        setSelectToPreviousItem() {\n            if (this.selectedIndex === -1 || this.selectedIndex >= this.resultsCount - 1) {\n                this.selectedIndex = 0;\n            } else {\n                this.selectedIndex += 1;\n            }\n        }\n\n        /**\n         * @description Sets next item as selected, when navigating from keyboard\n         */\n        setSelectToNextItem() {\n            if (this.selectedIndex <= 0) {\n                this.selectedIndex = this.resultsCount - 1;\n            } else {\n                this.selectedIndex -= 1;\n            }\n        }\n\n        /**\n         * @description Selects combobox dropdown item\n         * @param selectedItem - item, selected by user\n         */\n        selectItem(selectedItem) {\n            if (this.currentSelected) {\n                this.deselectItem(this.currentSelected);\n            }\n\n            if (selectedItem) {\n                this.ref('field').attr(ACTIVE_DESCENDANT, `result-item-${this.selectedIndex}`);\n                selectedItem\n                    .addClass(this.prefs().classesFocusedItem)\n                    .attr('aria-selected', 'true');\n                this.afterItemSelected(selectedItem);\n            } else {\n                this.ref('field').attr(ACTIVE_DESCENDANT, false);\n            }\n\n            this.currentSelected = selectedItem;\n        }\n\n        /**\n         * @description Executes logic (sets input value) after item was selected\n         * @param item - item, selected by user\n         */\n        afterItemSelected(item: TRefElementInstance) {\n            this.ref('field').prop('value', item.data<string>('suggestionValue'));\n        }\n\n        /**\n         * @description Deselects item in combobox dropdown when navigating from keyboard.\n         * @param item - item, selected by user\n         */\n        deselectItem(item: TRefElementInstance) {\n            item\n                .removeClass(this.prefs().classesFocusedItem)\n                .attr('aria-selected', 'false');\n        }\n\n        /**\n         * @description \"Activate\" item by press Enter on selected item or mouse click on item\n         * @param activeItem - item, selected by user\n         */\n        activateItem(activeItem: TRefElementInstance | null) {\n            if (activeItem) {\n                this.ref('field')\n                    .prop('value', activeItem.data<string>('suggestionValue'))\n                    .get().focus();\n                this.closeListbox();\n            }\n        }\n\n        /**\n         * @description Update Combobox Listbox (dropdown). Initiates items retrieving either from server or from any other source, like an array.\n         */\n        updateListbox() {\n            const inputValue = this.ref('field').prop('value');\n\n            if (this.lastSearchedTerm === inputValue || inputValue.length < this.prefs().minChars) {\n                // could be triggered from focus so we need additionally check minChars\n                return;\n            }\n\n            if (this.timeout) {\n                clearTimeout(this.timeout);\n            }\n\n            this.timeout = setTimeout(this.getSuggestions.bind(this, inputValue), this.prefs().updatingDelay);\n        }\n\n        /**\n         * @description Get items list for Combobox. Could be fetched from any proper source.\n         * Usually is implemented in children.\n         * @param query - a query, which needs to be processed in subclasses\n         */\n        getSuggestions(query: string) {\n            // This is example of getSuggestion method to implement\n            // Combo boxes like search or address should implement his own methods\n            // of how to get suggestion and render it. Template should follow this:\n            // <li role=\"option\" id=\"result-item-${0}\">${results[0]}</li>\n            // ...\n            // <li role=\"status\" aria-live=\"polite\">${results.length} suggestion found</li>\n            // You should always include ids of suggestion and status about how much\n            // suggestion total.\n            const resultsTotal = 1;\n\n            this.afterSuggestionsUpdate(query, resultsTotal);\n        }\n\n        /**\n         * @description Executes after a list of items (suggestions) of a Combobox has being updated.\n         * @param query - a query, used for fetching Combobox inner items\n         * @param resultsCount - obtained inner items count\n         */\n        afterSuggestionsUpdate(query: string, resultsCount: number) {\n            this.resultsCount = resultsCount;\n\n            this.selectedIndex = -1;\n\n            this.lastSearchedTerm = query;\n\n            if (resultsCount > 0) {\n                this.openListbox();\n            }\n        }\n\n        /**\n         * @description Open a Listbox (Combobox dropdown)\n         */\n        openListbox() {\n            this.isListboxOpen = true;\n            const listbox = this.ref('listbox');\n\n            listbox.addClass(this.prefs().classesActiveListBox);\n            listbox.attr('aria-hidden', 'false');\n            const input = this.ref('field');\n\n            input.attr(ACTIVE_DESCENDANT, false);\n            input.attr('aria-expanded', 'true'); // Should be combobox node by specs\n            this.toggleOverlay(true);\n\n            if (this.prefs().closeFromOutside) {\n                this.bodyClickListener = clickOutside(this.ref('self'), this.closeListbox.bind(this), false);\n\n                if (this.bodyClickListener) {\n                    this.onDestroy(this.bodyClickListener);\n                }\n            }\n        }\n\n        /**\n         * @description Close a Listbox (Combobox dropdown)\n         */\n        closeListbox() {\n            this.resultsCount = 0;\n\n            this.selectedIndex = -1;\n\n            this.lastSearchedTerm = '';\n\n            this.isListboxOpen = false;\n\n            const listbox = this.ref('listbox');\n\n            listbox.removeClass(this.prefs().classesActiveListBox);\n            listbox.attr('aria-hidden', 'true');\n\n            const input = this.ref('field');\n\n            input.attr(ACTIVE_DESCENDANT, '');\n            input.attr('aria-expanded', 'false'); // Should be combobox not by specs\n            this.toggleOverlay(false);\n\n            if (this.bodyClickListener) {\n                this.bodyClickListener();\n\n                this.bodyClickListener = undefined;\n            }\n\n            this.afterCloseListbox();\n        }\n\n        /**\n         * @description Executes after Listbox (Combobox dropdown) was closed\n         */\n        afterCloseListbox() {\n            this.ref('listbox').empty();\n        }\n\n        /**\n         * @description Toggles Combobox page overlay\n         * @param isShown - does overlay should be shown\n         */\n        toggleOverlay(isShown: boolean) {\n            this.isOverlayVisible = isShown;\n        }\n\n        /**\n         * @description Get Combobox item (suggestion) by index, stored in `this.selectedIndex` class property.\n         * @returns Founded item or null\n         */\n        getItemByIndex() {\n            if (this.selectedIndex < 0) {\n                return null;\n            }\n\n            const listItem = this.ref(`result-item-${this.selectedIndex}`);\n\n            if (listItem.length) {\n                return listItem;\n            }\n\n            return null;\n        }\n    }\n\n    return Combobox;\n}\n\nexport type TCombobox = ReturnType<typeof ComboboxClassCreator>;\n\nexport type TComboboxInstance = InstanceType<TCombobox>;\n\nexport default ComboboxClassCreator;\n","/**\n * @param BasicForm Base widget for extending\n * @returns Form class\n */\nfunction FormClassCreator(BasicForm: import('widgets/forms/BasicForm').TBasicForm) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class Form\n     * @augments BasicForm\n     * @classdesc Represents Form component\n     * @example <caption>Example of BasicForm widget usage when Submit Button have assigned widget</caption>\n     * <form\n     *     action=\"${URLUtils.url('Order-Track')}\"\n     *     method=\"GET\"\n     *     data-widget=\"form\"\n     *     data-event-submit=\"handleSubmit\"\n     * >\n     *      ... form contents\n     *    <button\n     *       data-widget=\"button\"\n     *       data-id=\"submitButton\"\n     *       type=\"submit\"\n     *       data-forward-to-parent=\"handleSubmit\"\n     *       data-event-click=\"handleSubmit\"\n     *    >\n     *       ...Button name\n     *    </button>\n     * </form>\n     * @example <caption>Example of BasicForm widget usage when submit button NOT have assigned widget</caption>\n     * <form\n     *     action=\"${URLUtils.url('Order-Track')}\"\n     *     method=\"GET\"\n     *     data-widget=\"form\"\n     *     data-event-submit=\"handleSubmit\"\n     * >\n     *      ... form contents\n     *    <button\n     *       data-ref=\"submitButton\"\n     *       type=\"submit\"\n     *       data-event-click=\"handleSubmit\"\n     *    >\n     *       ...Button name\n     *    </button>\n     * </form>\n     * @property {string} data-widget - Widget name `form`\n     * @property {string} data-event-submit - Event listener for form submission\n     */\n    class Form extends BasicForm {\n\n    }\n\n    return Form;\n}\n\nexport type TForm = ReturnType<typeof FormClassCreator>;\n\nexport type TFormInstance = InstanceType<TForm>;\n\nexport default FormClassCreator;\n","import { scrollWindowTo } from 'widgets/toolbox/scroll';\n\nconst ariaChecked = 'aria-checked';\n\n/**\n * @description Base InputCheckbox implementation\n * @param BasicInput Base widget for extending\n * @returns Input Checkbox class\n */\nfunction InputCheckboxClassCreator(BasicInput: ReturnType <typeof import('widgets/forms/BasicInput').default>) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class InputCheckbox\n     * @augments BasicInput\n     * @classdesc Checkbox input implementation. Represents input `checkbox` element together with widget-related HTML markup.\n     * HTML structure assembled on backend and injected into resulted html markup by using `formElement` component\n     * and dynamic forms configuration JSON.\n     * @property {string} data-widget - Widget name `inputCheckbox`\n     * @example <caption>InputCheckbox definition in dynamicForms.js</caption>\n     * ...\n     * // fields -> input -> checkbox\n     * checkbox: {\n     *     'label.after': true,\n     *     'element.type': 'checkbox'\n     * },\n     * ...\n     * // fields -> generic -> setAsDefault\n     * setAsDefault: {\n     *     extends: 'fields.input.checkbox',\n     *     'label.text': 'form.address.setDefault'\n     * },\n     * ...\n     * @example <caption>Insertion of InputCheckbox inside ISML templates</caption>\n     * <isset name=\"formElement\" value=\"${require('forms/formElement')}\" scope=\"page\"/>\n     * ...\n     * <form>\n     *     ...\n     *     <isprint value=\"${\n     *         formElement(pdict.addressForm.setAsDefault, pdict.addressFormOptions).render()\n     *     }\" encoding=\"off\"/>\n     *     ...\n     * </form>\n     * @example <caption>Resulted HTML structure for InputCheckbox</caption>\n     * <div data-widget=\"inputCheckbox\" class=\"b-form_field\" data-id=\"dwfrm_login_rememberMe\" data-validation-config='{\"patterns\":{},\"errors\":{},\"mandatory\":false}'>\n     *     <div class=\"b-checkbox\">\n     *         <input type=\"checkbox\" data-ref=\"field\" class=\"b-checkbox-input\" id=\"dwfrm_login_rememberMe\" name=\"dwfrm_login_rememberMe\" value=\"true\"\n     *             data-tau=\"login_rememberMe\" data-event-blur=\"validate\" aria-describedby=\"dwfrm_login_rememberMe-error\"\n     *         >\n     *         <svg class=\"b-checkbox-icon\" width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" focusable=\"false\">\n     *             <path class=\"b-checkbox-icon_check\" fill=\"none\" stroke=\"currentColor\" d=\"m5.2686 10.371 5.1528 6.9837 9.8939-11.913\"></path>\n     *         </svg>\n     *         <label class=\"b-form_field-label\" for=\"dwfrm_login_rememberMe\">Remember Me</label>\n     *     </div>\n     *     <div role=\"alert\" class=\"b-form_field-message\" data-ref=\"errorFeedback\" id=\"dwfrm_login_rememberMe-error\" hidden=\"hidden\"></div>\n     * </div>\n     */\n    class InputCheckbox extends BasicInput {\n        /**\n         * @description Get value of a checkbox input. Returns empty string if checkbox is not checked.\n         * @returns result\n         */\n        getValue(): string {\n            if (this.ref('field').prop('checked')) {\n                return super.getValue();\n            }\n\n            return '';\n        }\n\n        /**\n         * @description Set value to checkbox input. By fact - checks it if set value is not empty.\n         * @param newVal New value to set.\n         * @param silently If true - there will be no event fired, that indicates input value change.\n         * @emits BasicInput#change\n         */\n        setValue(newVal = '', silently = false) {\n            this.ref('field').prop('checked', !!newVal);\n\n            if (!silently) {\n                this.emit('change', this);\n            }\n        }\n\n        /**\n         * @description Checks the checkbox. Also updates accessibility properties of input accordingly.\n         * @emits BasicInput#change\n         */\n        check() {\n            this.ref('field').attr(ariaChecked, 'true');\n            this.ref('field').prop('checked', true);\n\n            this.emit('change', this);\n        }\n\n        /**\n         * @description Uncheck the checkbox. Also updates accessibility properties of input accordingly.\n         * @emits BasicInput#change\n         */\n        uncheck() {\n            this.ref('field').attr(ariaChecked, 'false');\n            this.ref('field').prop('checked', false);\n\n            this.emit('change', this);\n        }\n\n        /**\n         * @description Check or uncheck checkbox depending on passed state\n         * @param state Based on passed state checkbox will be enabled or disable\n         */\n        toggleState(state: boolean) {\n            this[state ? 'check' : 'uncheck']();\n        }\n\n        /**\n         * @description Update accessibility `aria-checked` depending on checkbox state.\n         */\n        updateAriaChecked() {\n            if (this.ref('field').prop('checked')) {\n                this.ref('field').attr(ariaChecked, 'true');\n            } else {\n                this.ref('field').attr(ariaChecked, 'false');\n            }\n        }\n\n        /**\n         * @description Set focus to input and scroll element into viewport\n         * Added scrollWindowTo instead of scrollIntoView because for checkbox header height should be included\n         */\n        setFocus() {\n            const elementToScroll = this.ref('self').get();\n\n            if (elementToScroll) {\n                scrollWindowTo(elementToScroll, true, true);\n            }\n\n            this.focus();\n        }\n\n        /**\n         * @description Used to handle change checkbox state.\n         * Usually used in dynamic forms config to handle `change` event on checkbox like:\n         * @example\n         * ...\n         * element: {\n         *     attributes: {\n         *         'data-event-change': 'handleChange'\n         *     }\n         * }\n         * ...\n         * @emits BasicInput#change\n         */\n        handleChange() {\n            this.updateAriaChecked();\n            this.emit('change');\n        }\n    }\n\n    return InputCheckbox;\n}\n\nexport type TInputCheckbox = ReturnType<typeof InputCheckboxClassCreator>;\n\nexport type TInputCheckboxInstance = InstanceType<TInputCheckbox>;\n\nexport default InputCheckboxClassCreator;\n","/**\n * @description Base InputEmail implementation\n * @param InputText Base widget for extending\n * @returns Input Email class\n */\nfunction InputEmailClassCreator(InputText: ReturnType<typeof import('./InputText').default>) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class InputEmail\n     * @augments InputText\n     * @classdesc Input type Email implementation. Represents input `email` element together with widget-related HTML markup.\n     * HTML structure assembled on backend and injected into resulted html markup by using `formElement` component\n     * and dynamic forms configuration JSON.\n     * @property {string} data-widget - Widget name `inputEmail`\n     * @example <caption>InputEmail definition in dynamicForms.js</caption>\n     * ...\n     * // fields -> generic -> email\n     * email: {\n     *     extends: 'fields.input.base',\n     *     element: {\n     *         attributes: {\n     *             autocomplete: 'email'\n     *         },\n     *         maxLength: 50,\n     *         type: 'email',\n     *         required: true\n     *     },\n     *     validation: {\n     *         'patterns.parse': 'validation.patterns.parse.email',\n     *         'errors.parse': 'validation.errors.email'\n     *     },\n     *     'label.text': 'form.profile.email'\n     * },\n     * ...\n     * @example <caption>Insertion of InputEmail inside ISML templates</caption>\n     * <isset name=\"formElement\" value=\"${require('forms/formElement')}\" scope=\"page\"/>\n     * ...\n     * <form>\n     *     ...\n     *     <isprint value=\"${\n     *         formElement(pdict.addressForm.email, pdict.addressFormOptions).render()\n     *     }\" encoding=\"off\"/>\n     *     ...\n     * </form>\n     * @example <caption>Resulted HTML structure for InputEmail</caption>\n     * <div data-widget=\"inputEmail\" class=\"b-form_field m-required m-invalid\" data-id=\"dwfrm_login_email\"\n     *     data-validation-config=\"... validation config\"\n     * >\n     *     <label class=\"b-form_field-label\" for=\"dwfrm_login_email\">\n     *         <span class=\"b-form_field-required\" aria-hidden=\"true\">*</span>\n     *         Email\n     *     </label>\n     *     <input data-ref=\"field\" id=\"dwfrm_login_email\" type=\"email\" class=\"b-input m-invalid\" placeholder=\"\"\n     *         aria-describedby=\"dwfrm_login_email-error\" pattern=\"...\" name=\"dwfrm_login_email\"\n     *         required=\"\" value=\"\" maxlength=\"50\" aria-required=\"true\" autocomplete=\"email\" data-event-input=\"onInput\"\n     *         data-tau=\"login_email\" data-event-blur=\"validate\"\n     *     >\n     *     <div role=\"alert\" class=\"b-form_field-message\" data-ref=\"errorFeedback\" id=\"dwfrm_login_email-error\">This field is required.</div>\n     * </div>\n     */\n    class InputEmail extends InputText {\n\n    }\n\n    return InputEmail;\n}\n\nexport type TInputEmail = ReturnType<typeof InputEmailClassCreator>;\n\nexport type TInputEmailInstance = InstanceType<TInputEmail>;\n\nexport default InputEmailClassCreator;\n","/**\n * @param BasicInput Base widget for extending\n * @returns Input Hidden class\n */\nfunction InputHiddenClassCreator(BasicInput: import('widgets/forms/BasicInput').TBasicInput) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class InputHidden\n     * @augments BasicInput\n     * @classdesc Widget used to handle hidden inputs. Represents input `hidden` element together with widget-related HTML markup.\n     * HTML structure assembled on backend and injected into resulted html markup by using `formElement` component\n     * and dynamic forms configuration JSON.\n     * Form validation will skip hidden inputs from validation perspective and will treat it as valid.\n     * @property {string} data-widget - Widget name `inputHidden`\n     * @example <caption>InputHidden definition in dynamicForms.js</caption>\n     * ...\n     * // fields -> generic -> hidden\n     * hidden: {\n     *     extends: 'fields.input.base',\n     *     element: {\n     *         type: 'hidden'\n     *     }\n     * },\n     * ...\n     * @example <caption>Insertion of InputHidden inside ISML templates</caption>\n     * <isset name=\"formElement\" value=\"${require('forms/formElement')}\" scope=\"page\"/>\n     * ...\n     * <form>\n     *     ...\n     *     <isprint value=\"${\n     *         formElement(pdict.addressForm.hiddenFieldExample).render()\n     *     }\" encoding=\"off\"/>\n     *     ...\n     * </form>\n     * @example <caption>Resulted HTML structure for InputHidden</caption>\n     * <div data-widget=\"inputHidden\" class=\"b-form_field m-required m-invalid\" data-id=\"dwfrm_login_hiddenFieldExample\">\n     *     <input data-ref=\"field\" id=\"dwfrm_login_hiddenFieldExample\" type=\"hidden\" name=\"dwfrm_login_hiddenFieldExample\" value=\"\">\n     * </div>\n     */\n    class InputHidden extends BasicInput {\n        prefs() {\n            return {\n                ...super.prefs(),\n                skipValidation: true\n            };\n        }\n    }\n\n    return InputHidden;\n}\n\nexport type TInputHidden = ReturnType<typeof InputHiddenClassCreator>;\n\nexport type TInputHiddenInstance = InstanceType<TInputHidden>;\n\nexport default InputHiddenClassCreator;\n","import { RefElement } from 'widgets/toolbox/RefElement';\n\ntype TZxcvbn = typeof import('zxcvbn');\ntype TZXCVBNScore = import('zxcvbn').ZXCVBNScore;\n\ntype TPasswordDescriptions = {\n    [key in TZXCVBNScore]: string;\n};\n\n/**\n * @description Base InputPassword implementation\n * @param BasicInput Base widget for extending\n * @returns Input Password class\n */\nfunction InputPasswordClassCreator(BasicInput: import('widgets/forms/BasicInput').TBasicInput) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class InputPassword\n     * @augments BasicInput\n     * @classdesc Specific Password input, contains specific password validation logic. Represents input `password` element together with widget-related HTML markup.\n     * HTML structure assembled on backend and injected into resulted html markup by using `formElement` component\n     * and dynamic forms configuration JSON.\n     * Uses 'show/hide mask' functionality, which allows customer to see/hide printed password characters.\n     * Adds additional validation constraints rules, which are password-specific (like special characters, uppercased characters etc).\n     * @property {string} data-widget - Widget name `inputPassword`\n     * @property {boolean} data-password-strength-enabled - Is strength enabled for this password field\n     * @example <caption>InputPassword definition in dynamicForms.js</caption>\n     * ...\n     * // fields -> input -> password\n     * password: {\n     *     extends: 'fields.input.base',\n     *     'caption.show': true,\n     *     'caption.text': 'form.profile.password.caption',\n     *     'label.text': 'form.profile.password',\n     *     element: {\n     *         type: 'password',\n     *         required: true,\n     *         minLength: 8,\n     *         maxLength: 64,\n     *         attributes: {\n     *             'data-event-input': 'onPasswordInput',\n     *             'data-event-focus': 'handleFocus'\n     *         }\n     *     }\n     * },\n     * ...\n     * @example <caption>Insertion of InputPassword inside ISML templates</caption>\n     * <isset name=\"formElement\" value=\"${require('forms/formElement')}\" scope=\"page\"/>\n     * ...\n     * <form>\n     *     ...\n     *     <isprint value=\"${\n     *         formElement(pdict.profile.password).render()\n     *     }\" encoding=\"off\"/>\n     *     ...\n     * </form>\n     * @example <caption>Resulted HTML structure for InputPassword</caption>\n     * <div data-widget=\"inputPassword\" class=\"b-form_field m-required m-invalid\"\n     *     data-id=\"dwfrm_login_password\" data-validation-config=\"... validation config\"\n     * >\n     *     <label class=\"b-form_field-label\" for=\"dwfrm_login_password\">\n     *         <span class=\"b-form_field-required\" aria-hidden=\"true\">*</span>\n     *         Password\n     *     </label>\n     *     <div class=\"b-input_password\">\n     *         <input data-ref=\"field\" id=\"dwfrm_login_password\" type=\"password\" class=\"b-input m-invalid\"\n     *            aria-describedby=\"dwfrm_login_password-error\" placeholder=\"\" name=\"dwfrm_login_password\" required=\"\" value=\"\"\n     *            maxlength=\"64\" aria-required=\"true\" minlength=\"8\" data-event-input=\"onPasswordInput\"\n     *            autocomplete=\"current-password\" data-tau=\"login_password\" data-event-blur=\"validate\"\n     *         >\n     *         <button class=\"b-input_password-toggle_visibility\" data-ref=\"showButton\" data-event-click=\"toggleMask\"\n     *             data-button-text-show=\"Show\" data-button-text-hide=\"Hide\" aria-pressed=\"false\"\n     *             title=\"Toggle password field visibility\" type=\"button\" hidden=\"hidden\">Show</button>\n     *     </div>\n     *     <div role=\"alert\" class=\"b-form_field-message\" data-ref=\"errorFeedback\" id=\"dwfrm_login_password-error\">This field is required.</div>\n     * </div>\n     */\n    class InputPassword extends BasicInput {\n        passwordEstimator?: TZxcvbn;\n\n        passwordStrengthScore: number | null = null;\n\n        prefs() {\n            return {\n                upperCaseAmount: 0,\n                lowerCaseAmount: 0,\n                numbersAmount: 0,\n                specialCharsAmount: 0,\n                specialCharsList: '$%/()[]{}=?!.,-_*|+~#',\n                maxWeakPasswordScore: 1,\n                maxMediumPasswordScore: 2,\n                maxStrongPasswordScore: 4,\n                classesWeakPassword: 'm-weak',\n                classesMediumPassword: 'm-medium',\n                classesStrongPassword: 'm-strong',\n                passwordStrengthEnabled: false,\n                passwordConfirmation: false,\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n\n            if (this.prefs().passwordStrengthEnabled) {\n                import(/* webpackChunkName: 'zxcvbn' */'zxcvbn')\n                    .then((zxcvbnPackage: unknown) => {\n                        const { default: zxcvbn } = <TTypedAsyncImport<TZxcvbn>> zxcvbnPackage;\n\n                        this.passwordEstimator = zxcvbn;\n                    });\n            }\n        }\n\n        /**\n         * @description Checks if entered data is number\n         * @param val - entered password\n         * @returns check result\n         */\n        isNumber(val: string): boolean {\n            return '0123456789'.includes(val);\n        }\n\n        /**\n         * @description Checks if entered data is simple character (not a number or special character)\n         * @param val - entered password\n         * @returns check result\n         */\n        isSimpleChar(val: string): boolean {\n            return !this.isNumber(val) && !this.prefs().specialCharsList.includes(val);\n        }\n\n        /**\n         * @description Verifies if entered password is valid in case of using password strength estimation instead of\n         * default password validation\n         * @returns check result\n         */\n        isStrongPassword(): boolean {\n            const { maxMediumPasswordScore } = this.prefs();\n\n            if (this.passwordStrengthScore !== null && this.passwordStrengthScore > maxMediumPasswordScore) {\n                return true;\n            } else {\n                this.error = this.ref('passwordEstimator').data<string>('errorWeakPassword');\n\n                return false;\n            }\n        }\n\n        /**\n         * @description Verifies if entered password is valid and meets all password constraints\n         * @returns check result\n         */\n        isValid(): boolean {\n            const val = this.getValue();\n\n            // Show password strength error instead of default input errors except for empty field state\n            if (!super.isValid()) {\n                if (!val.length || (!this.prefs().passwordStrengthEnabled && !this.prefs().passwordConfirmation)) {\n                    return false;\n                }\n            }\n\n            if (typeof val === 'string' && val) {\n                if (this.widgetsToMatch && this.widgetsToMatch.length) {\n                    // Check if password doesn't match current email\n                    const invalidWidget = this.getInvalidCompareWithWidget();\n\n                    if (invalidWidget) {\n                        this.error = invalidWidget.widgetToMatchOpts.msg || '';\n\n                        return false;\n                    } else if (this.prefs().passwordConfirmation) {\n                        return true;\n                    }\n                }\n\n                // Check rest of the validation rules\n                return this.validatePasswordChars(val);\n            }\n\n            return true;\n        }\n\n        /**\n         * @description Verifies if entered password meets the strength requirements\n         * @param val - entered password\n         * @returns check result\n         */\n        validatePasswordChars(val: string): boolean {\n            const valLetters = val.replace(/[^a-z]/gi, '').split('');\n            const valChars = val.split('');\n\n            if (this.prefs().passwordStrengthEnabled) {\n                return this.isStrongPassword();\n            } else if (\n                this.checkLowerCaseAmount(valLetters)\n                && this.checkUpperCaseAmount(valLetters)\n                && this.checkNumberAmount(valChars)\n                && this.checkSpecialCharsAmount(valChars)\n            ) {\n                return true;\n            }\n\n            return false;\n        }\n\n        /**\n         * @description Checks special characters amount in entered password as per corresponding constraint.\n         * @param valChars - array of entered password symbols\n         * @returns check results\n         */\n        checkSpecialCharsAmount(valChars: Array<string>): boolean {\n            if (this.prefs().specialCharsAmount) {\n                const specialCharsList = this.prefs().specialCharsList;\n                const specialCharsLetters = valChars.filter(char => specialCharsList.includes(char));\n\n                if (specialCharsLetters.length < this.prefs().specialCharsAmount) {\n                    this.error = this.prefs().validationConfig.errors.specialCharsAmount;\n\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n        /**\n         * @description Checks numbers amount in entered password as per corresponding constraint.\n         * @param valChars - array of entered password symbols\n         * @returns check result\n         */\n        checkNumberAmount(valChars: Array<string>): boolean {\n            if (this.prefs().numbersAmount) {\n                const numberLetters = valChars.filter(char => this.isNumber(char));\n\n                if (numberLetters.length < this.prefs().numbersAmount) {\n                    this.error = this.prefs().validationConfig.errors.numbersAmount;\n\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n        /**\n         * @description Checks lowercase characters amount in entered password as per corresponding constraint.\n         * @param valChars - array of entered password symbols\n         * @returns check result\n         */\n        checkLowerCaseAmount(valChars: Array<string>): boolean {\n            if (this.prefs().lowerCaseAmount) {\n                const lowerCaseLetters = valChars.filter(char => char === char.toLowerCase() && this.isSimpleChar(char));\n\n                if (lowerCaseLetters.length < this.prefs().lowerCaseAmount) {\n                    this.error = this.prefs().validationConfig.errors.lowerCaseAmount;\n\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n        /**\n         * @description Checks uppercase characters amount in entered password as per corresponding constraint.\n         * @param valChars - array of entered password symbols\n         * @returns check results\n         */\n        checkUpperCaseAmount(valChars: Array<string>): boolean {\n            if (this.prefs().upperCaseAmount) {\n                const upperCaseLetters = valChars.filter(char => char === char.toUpperCase() && this.isSimpleChar(char));\n\n                if (upperCaseLetters.length < this.prefs().upperCaseAmount) {\n                    this.error = this.prefs().validationConfig.errors.upperCaseAmount;\n\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n        /**\n         * @description Show mask button inside password field\n         */\n        showMaskButton() {\n            this.ref('showButton').show();\n        }\n\n        /**\n         * @description Handle click on button Show/Hide mask. Toggle type based on input type.\n         * @listens dom#click\n         */\n        toggleMask() {\n            const input = this.ref('field');\n            const inputType = input.attr('type');\n            const showButton = this.ref('showButton');\n            const showText = String(showButton.data('buttonTextShow'));\n            const hideText = String(showButton.data('buttonTextHide'));\n\n            if (inputType === 'password') {\n                input.attr('type', 'text');\n                showButton.attr('aria-pressed', 'true');\n                showButton.setText(hideText);\n            } else {\n                input.attr('type', 'password');\n                showButton.attr('aria-pressed', 'false');\n                showButton.setText(showText);\n            }\n        }\n\n        /**\n         * @description Listener for `input` event.\n         * Usually used to display Show/Hide mask button when entered needed amount of symbols into password field.\n         * @listens dom#input\n         * @param el event source element\n         */\n        onPasswordInput(el: RefElement) {\n            const entered = el && el.val();\n\n            if (entered && entered.length) {\n                this.showMaskButton();\n            }\n\n            if (this.prefs().passwordStrengthEnabled) {\n                this.showPasswordEstimator(el);\n            }\n        }\n\n        /**\n         * @description Generates an array of indicator item classes with different filling color\n         * @returns Indicator item classes\n         */\n        generateIndicatorItems(): Array<{className: string}> {\n            let indicatorClass: string;\n\n            // Defined class name to set appropriate indicator items fill color\n\n            if (this.passwordStrengthScore === null) {\n                indicatorClass = '';\n            } else if (this.passwordStrengthScore <= this.prefs().maxWeakPasswordScore) {\n                indicatorClass = this.prefs().classesWeakPassword;\n            } else if (this.passwordStrengthScore <= this.prefs().maxMediumPasswordScore) {\n                indicatorClass = this.prefs().classesMediumPassword;\n            } else {\n                indicatorClass = this.prefs().classesStrongPassword;\n            }\n\n            const indicatorItems: Array<{ className: string }> = [];\n\n            for (let i = 0; i <= this.prefs().maxStrongPasswordScore; i++) {\n                indicatorItems[i] = {\n                    className: (this.passwordStrengthScore !== null && i <= this.passwordStrengthScore) ? indicatorClass : ''\n                };\n            }\n\n            return indicatorItems;\n        }\n\n        /**\n         * @description Show password strength estimator block\n         * @param el - field source element\n         * @returns Promise object represents password estimator rendering result\n         */\n        showPasswordEstimator(el: RefElement): Promise<void|null> {\n            if (!this.passwordEstimator) {\n                return Promise.resolve(null);\n            }\n\n            const value = el && el.val();\n\n            this.passwordStrengthScore = value.length ? this.passwordEstimator(value).score : null;\n            const passwordIndicatorItems = this.generateIndicatorItems();\n            const passwordStrengthDescriptions = this.ref('passwordEstimator').data<TPasswordDescriptions>('passwordDescriptions');\n            const passwordStrengthDescription = passwordStrengthDescriptions && this.passwordStrengthScore\n                ? passwordStrengthDescriptions[this.passwordStrengthScore]\n                : '';\n\n            // Show updated password strength indicator and description\n            return this.render(\n                'passwordEstimatorTemplate',\n                { passwordIndicatorItems, passwordStrengthDescription },\n                this.ref('passwordEstimatorIndicator')\n            ).then(() => {\n                if (this.passwordStrengthScore === this.prefs().maxStrongPasswordScore) {\n                    this.ref('passwordEstimatorCaption').remove();\n                }\n\n                this.ref('passwordEstimator').show();\n            });\n        }\n\n        /**\n         * @description Handles `focus` on password input with strength estimation\n         * @listens dom#focus\n         * @param el event source element\n         */\n        handleFocus(el: RefElement) {\n            this.showPasswordEstimator(el);\n        }\n    }\n\n    return InputPassword;\n}\n\nexport type TInputPassword = ReturnType<typeof InputPasswordClassCreator>;\n\nexport type TInputPasswordInstance = InstanceType<TInputPassword>;\n\nexport default InputPasswordClassCreator;\n","const DATA_FIELD = '[data-ref=\"field\"]';\n\n/**\n * @description Base InputRadio implementation\n * @param BasicInput Base widget for extending\n * @returns Input Radio class\n */\nfunction InputRadioClassCreator(BasicInput: import('widgets/forms/BasicInput').TBasicInput) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class InputRadio\n     * @augments BasicInput\n     * @classdesc Radio input implementation. Represents input `radio` element together with widget-related HTML markup.\n     * @property {string} data-widget - Widget name `inputRadio`\n     * @example <caption>InputRadio HTML markup example</caption>\n     * <fieldset class=\"b-form_set\">\n     *     <legend class=\"b-form_set-label\">Shipping method</legend>\n     *     <div class=\"b-form_field\" data-widget=\"inputRadio\" data-id=\"shippingMethodList\"\n     *         data-select-shipping-method-url=\"https://...\"\n     *         data-action-url=\"https://...\"\n     *         data-widget-event-change=\"selectShippingMethod\" data-shipment-uuid=\"3fbc2a6f7e32e2b1755e9099bd\"\n     *     >\n     *         <div class=\"b-option_switch\">\n     *             <div class=\"b-option_switch-inner\">\n     *                 <input id=\"shippingMethod-001\" class=\"b-option_switch-input\"\n     *                     name=\"dwfrm_shipping_shippingAddress_shippingMethodID\n     *                     type=\"radio\"\n     *                     value=\"001\"\n     *                     data-value=\"001\"\n     *                     data-ref=\"field\"\n     *                     data-event-change=\"update\"\n     *                     checked=\"\"\n     *                 >\n     *                 <div class=\"b-option_switch-icon\"></div>\n     *                 <label class=\"b-option_switch-label\" for=\"shippingMethod-001\">\n     *                     ... label content\n     *                 </label>\n     *             </div>\n     *         </div>\n     *         <div class=\"b-option_switch\">\n     *             <div class=\"b-option_switch-inner\">\n     *                 <input\n     *                     id=\"shippingMethod-002\"\n     *                     class=\"b-option_switch-input\"\n     *                     name=\"dwfrm_shipping_shippingAddress_shippingMethodID\"\n     *                     type=\"radio\"\n     *                     value=\"001\"\n     *                     data-value=\"001\"\n     *                     data-ref=\"field\"\n     *                     data-event-change=\"update\"\n     *                     checked=\"\"\n     *                 >\n     *                 <div class=\"b-option_switch-icon\"></div>\n     *                 <label class=\"b-option_switch-label\" for=\"shippingMethod-001\">\n     *                     ... label content\n     *                 </label>\n     *             </div>\n     *         </div>\n     *         <div role=\"alert\" class=\"b-message m-error\" data-ref=\"errorFeedback\" hidden=\"\"></div>\n     *     </div>\n     * </fieldset>\n     */\n    class InputRadio extends BasicInput {\n        /**\n         * @description method to get `value` of the radio\n         * @returns value of selected radio input\n         */\n        getValue(): string {\n            const el = (this.ref('self').get());\n\n            if (el) {\n                return Array.from(el.querySelectorAll(DATA_FIELD))\n                    .reduce((val, elField) => {\n                        const tmpEl = <HTMLInputElement>elField;\n\n                        return val || ((tmpEl.checked || '') && tmpEl.value);\n                    }, '');\n            }\n\n            return '';\n        }\n\n        /**\n         * @description method to get `data-value` value of the radio\n         * @returns `data-value` value\n         */\n        getDataValue(): string {\n            const el = (this.ref('self').get());\n\n            if (el) {\n                return Array.from(el.querySelectorAll(DATA_FIELD))\n                    .reduce((val, elInner) => {\n                        const tmpEl = <HTMLInputElement>elInner;\n\n                        return val || ((tmpEl.checked || '') && (tmpEl.getAttribute('data-value') || ''));\n                    }, '');\n            }\n\n            return '';\n        }\n\n        /**\n         * @description Method to select radio input\n         * @param value - value to be set to radio button\n         */\n        setValue(value: string) {\n            const el = (this.ref('self').get());\n\n            if (el) {\n                Array.from(el.querySelectorAll(DATA_FIELD))\n                    .forEach((elField) => {\n                        const tmpEl = <HTMLInputElement>elField;\n\n                        if (tmpEl.value === value) {\n                            tmpEl.checked = true;\n                            tmpEl.setAttribute('checked', 'checked');\n                        } else {\n                            tmpEl.checked = false;\n                            tmpEl.removeAttribute('checked');\n                        }\n                    });\n            }\n        }\n\n        /**\n         * @description Method to get dataset of checked or first radio input\n         * @returns dataset object of first or checked radio input, or null if no 'self' exist\n         */\n        getDataSet(): null|object {\n            const checked = this.getChecked();\n\n            return checked ? checked.dataset : checked;\n        }\n\n        /**\n         * @description Method to get checked (or first) radio input\n         * @returns first or checked inputs ref element if self exists, null if not\n         */\n        getChecked(): null | HTMLElement {\n            const el = this.ref('self').get();\n\n            if (el) {\n                const currentEl = (Array.from(el.querySelectorAll(DATA_FIELD))\n                    .filter(field => {\n                        const tmpField = <HTMLInputElement>field;\n\n                        return tmpField.checked;\n                    })[0] || el.querySelectorAll(DATA_FIELD)[0]) as HTMLElement;\n\n                return currentEl;\n            }\n\n            return null;\n        }\n    }\n\n    return InputRadio;\n}\n\nexport type TInputRadio = ReturnType<typeof InputRadioClassCreator>;\n\nexport type TInputRadioInstance = InstanceType<TInputRadio>;\n\nexport default InputRadioClassCreator;\n","import { RefElement } from 'widgets/toolbox/RefElement';\n\ntype TOptionData = {\n    name: string;\n    value: string;\n    id?: string;\n};\n\n/**\n * @description Base InputSelect implementation\n * @param BasicInput Base widget for extending\n * @returns Input Select class\n */\nfunction InputSelectClassCreator(BasicInput: import('widgets/forms/BasicInput').TBasicInput) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class InputSelect\n     * @augments BasicInput\n     * @classdesc Select input implementation. Represents input `password` element together with widget-related HTML markup.\n     * HTML structure assembled on backend and injected into resulted html markup by using `formElement` component\n     * and dynamic forms configuration JSON.\n     * @property {string} data-widget - Widget name `inputSelect`\n     * @property {boolean} [first-default] - Select first option even if other option marked as selected\n     * @example <caption>InputSelect definition in dynamicForms.js</caption>\n     * ...\n     * // fields -> select\n     * select: {\n     *     'element.type': 'select',\n     *     validation: {\n     *         'patterns.security': 'validation.patterns.security',\n     *         'errors.security': 'validation.errors.parse'\n     *     }\n     * },\n     * ...\n     * // fields -> generic -> country\n     * country: {\n     *     widget: {\n     *         attributes: {\n     *             'data-widget-event-change': 'onCountryChange'\n     *         },\n     *         classes: 'm-small'\n     *     },\n     *     extends: 'fields.select',\n     *     'label.text': 'form.address.country',\n     *     element: {\n     *         required: true,\n     *             attributes: {\n     *                 'data-event-change': 'onChange'\n     *             }\n     *         }\n     *     },\n     * }\n     * ...\n     * @example <caption>Insertion of InputSelect inside ISML templates</caption>\n     * <isset name=\"formElement\" value=\"${require('forms/formElement')}\" scope=\"page\"/>\n     * ...\n     * <form>\n     *     ...\n     *     <isprint value=\"${\n     *         formElement(pdict.addressForm.country, pdict.addressFormOptions).render()\n     *     }\" encoding=\"off\"/>\n     *     ...\n     * </form>\n     * @example <caption>Resulted HTML structure for InputSelect</caption>\n     * <div data-widget=\"inputSelect\" data-first-default=\"true\"\n     *     data-widget-event-change=\"updateShippingState\" class=\"b-form_field m-required m-invalid\"\n     *     data-id=\"dwfrm_shipping_shippingAddress_addressFields_states_stateCode\"\n     *     data-validation-config=\"... validation config\"\n     * >\n     *     <label class=\"b-form_field-label\" for=\"dwfrm_shipping_shippingAddress_addressFields_states_stateCode\">\n     *         <span class=\"b-form_field-required\" aria-hidden=\"true\">*</span>\n     *         State\n     *     </label>\n     *     <div class=\"b-select\">\n     *         <select data-ref=\"field\" class=\"b-select-input m-invalid\"\n     *             id=\"dwfrm_shipping_shippingAddress_addressFields_states_stateCode\"\n     *             name=\"dwfrm_shipping_shippingAddress_addressFields_states_stateCode\"\n     *             required=\"\" aria-required=\"true\" data-event-change=\"onChange\"\n     *             aria-describedby=\"dwfrm_shipping_shippingAddress_addressFields_states_stateCode-error\"\n     *             data-event-blur=\"validate\"\n     *         >\n     *             <option value=\"\" data-id=\"0\">Please select</option>\n     *             ...\n     *         </select>\n     *         <svg aria-hidden=\"true\" class=\"b-select-icon\" width=\"10\" height=\"6\" focusable=\"false\">\n     *             <use href=\"#arrow-down-small\"></use>\n     *         </svg>\n     *     </div>\n     *     <div role=\"alert\" class=\"b-form_field-message\" data-ref=\"errorFeedback\" id=\"dwfrm_shipping_shippingAddress_addressFields_states_stateCode-error\">This field is required.</div>\n     * </div>\n     */\n    class InputSelect extends BasicInput {\n        prefs() {\n            return {\n                firstDefault: false,\n                staticOptionEnabled: false,\n                staticOptionClass: 'b-select-input_as_text',\n                selectableOptionsClass: 'b-select-input',\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            const field = this.ref('field').get<HTMLSelectElement>();\n\n            if (field) {\n                const options = this.getOptions();\n\n                let optionToSelect: HTMLOptionElement;\n\n                if (this.prefs().firstDefault) {\n                    optionToSelect = options[0];\n                } else {\n                    optionToSelect = options.find(elem => elem.hasAttribute('selected')) || options[0];\n                }\n\n                if (optionToSelect && field.selectedIndex !== optionToSelect.index) {\n                    field.selectedIndex = optionToSelect.index;\n                }\n            }\n\n            super.init();\n        }\n\n        /**\n         * @description InputSelect on change handler\n         * @listens dom#change\n         * @param el source of event\n         * @param event event instance if DOM event\n         */\n        onChange(el: RefElement, event: Event | undefined) {\n            if (!this.config.dontPrevent && event && event instanceof Event) {\n                event.preventDefault();\n            }\n\n            this.update();\n        }\n\n        /**\n         * @description Sets new value on select from selected option\n         * @param newVal new value\n         * @param silently validate after change\n         */\n        setValue(newVal: string = this.initValue, silently?: boolean) {\n            let val = newVal || '';\n\n            const field = this.ref('field').get<HTMLSelectElement>();\n\n            if (field) {\n                const option = Array.from(field.options).find(elem => elem.value === val);\n\n                if (!option) {\n                    val = this.initValue || '';\n                }\n            }\n\n            super.setValue(val, silently);\n        }\n\n        /**\n         * @description Get value from selected option\n         * @returns selected option value\n         */\n        getValue(): string {\n            const selectedOption = this.getSelectedOptions();\n\n            if (selectedOption) {\n                if (selectedOption.length) {\n                    return selectedOption.val().toString();\n                }\n\n                const field = this.ref('field').get<HTMLSelectElement>();\n\n                if (field && field.options.length) {\n                    const item = field.options.item(0);\n\n                    if (item) {\n                        return item.value;\n                    }\n                }\n            }\n\n            return '';\n        }\n\n        /**\n         * @description Get selected options for select\n         * @returns selected options\n         */\n        getSelectedOptions(): RefElement | undefined {\n            const field = this.ref('field').get<HTMLSelectElement>();\n\n            if (field && field.selectedOptions) {\n                return new RefElement(Array.from(field.selectedOptions));\n            }\n\n            return undefined;\n        }\n\n        /**\n         * @description Get options for select\n         * @returns select options\n         */\n        getOptions(): Array<HTMLOptionElement> {\n            const field = this.ref('field').get<HTMLSelectElement>();\n\n            if (field) {\n                return Array.from(field.options);\n            }\n\n            return [];\n        }\n\n        /**\n         * @description Update options list\n         * @param optionsData Options list\n         */\n        updateOptions(optionsData: Array<TOptionData>) {\n            const field = this.ref('field').empty().get();\n\n            if (!field) {\n                return;\n            }\n\n            optionsData.forEach(optionData => {\n                const option = document.createElement('option');\n\n                option.value = optionData.value;\n                option.innerHTML = optionData.name;\n\n                if (optionData.id) {\n                    option.dataset.id = optionData.id;\n                }\n\n                field.appendChild(option);\n            });\n\n            if (this.prefs().staticOptionEnabled) {\n                const singleOption = optionsData.length === 1;\n\n                this.ref('icon').toggle(!singleOption);\n\n                if (singleOption) {\n                    this.ref('field').addClass(this.prefs().staticOptionClass);\n                    this.ref('field').removeClass(this.prefs().selectableOptionsClass);\n                    this.ref('field').attr('tabindex', '-1');\n                } else {\n                    this.ref('field').addClass(this.prefs().selectableOptionsClass);\n                    this.ref('field').removeClass(this.prefs().staticOptionClass);\n                    this.ref('field').attr('tabindex', null);\n                }\n            }\n        }\n\n        /**\n         * @description Get selected option text\n         * @returns selected option text\n         */\n        getText(): string {\n            const field = this.ref('field').get<HTMLSelectElement>();\n\n            if (field) {\n                const selectedNode = Object.values(field.childNodes)\n                    .find(node => (<HTMLOptionElement> node).selected);\n\n                if (selectedNode) {\n                    return selectedNode.textContent || '';\n                }\n\n                return '';\n            }\n\n            return '';\n        }\n\n        /**\n         * @description Locks select input (add locked classes, set read-only, disabled)\n         */\n        lock() {\n            if (!this.locked) {\n                super.lock();\n                this.ref('field').attr('disabled', true);\n            }\n        }\n\n        /**\n         * @description Unlocks select input (remove locked classes, remove read-only, disabled)\n         */\n        unlock() {\n            if (this.locked) {\n                super.unlock();\n                this.ref('field').attr('disabled', false);\n            }\n        }\n\n        changeAttribute() {} // eslint-disable-line\n\n        /**\n         * @description Method to stop propagation in case if input events should not be interrupted.\n         * For example, when there is a listener on a parent widget that is triggered by the same keydown event and it should not fire, etc.\n         * @param _ - source of keydown event\n         * @param event - keydown event object\n         */\n        stopImmediatePropagation(_: HTMLElement, event: Event) {\n            if (event) { event.stopImmediatePropagation(); }\n        }\n    }\n\n    return InputSelect;\n}\n\nexport type TInputSelect = ReturnType<typeof InputSelectClassCreator>;\n\nexport type TInputSelectInstance = InstanceType<TInputSelect>;\n\nexport default InputSelectClassCreator;\n","import { TRefElementInstance } from 'widgets/toolbox/RefElement';\n\n/**\n * @description Base InputText implementation\n * @param BasicInput Base widget for extending\n * @returns Input Text class\n */\nfunction InputTextClassCreator(BasicInput: import('widgets/forms/BasicInput').TBasicInput) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class InputText\n     * @augments BasicInput\n     * @classdesc Input type `text` implementation. Represents input `text` element together with widget-related HTML markup.\n     * HTML structure assembled on backend and injected into resulted html markup by using `formElement` component\n     * and dynamic forms configuration JSON.\n     * @property {string} data-widget - Widget name `inputText`\n     * @example <caption>InputText definition in dynamicForms.js</caption>\n     * ...\n     * // fields -> input -> text\n     * text: {\n     *     extends: 'fields.input.base',\n     *     validation: {\n     *         'patterns.security': 'validation.patterns.security',\n     *         'errors.security': 'validation.errors.parse'\n     *     },\n     *     element: {\n     *         minLength: 2,\n     *         maxLength: 256,\n     *         type: 'text'\n     *     }\n     * },\n     * ...\n     * // fields -> generic -> cardType\n     * cardType: {\n     *     extends: 'fields.input.text',\n     *     'label.text': 'form.payment.card.type',\n     *     element: {\n     *         type: 'hidden',\n     *         maxLength: 20,\n     *         required: true\n     *     }\n     * },\n     * ...\n     * @example <caption>Insertion of InputText inside ISML templates</caption>\n     * <isset name=\"formElement\" value=\"${require('forms/formElement')}\" scope=\"page\"/>\n     * ...\n     * <form>\n     *     ...\n     *     <isprint value=\"${\n     *         formElement(pdict.addressForm.address1, pdict.addressFormOptions).render()\n     *     }\" encoding=\"off\"/>\n     *     ...\n     * </form>\n     * @example <caption>Resulted HTML structure for InputText</caption>\n     * <div data-widget=\"inputText\" class=\"b-form_field m-required m-invalid\"\n     *     data-id=\"dwfrm_shipping_shippingAddress_addressFields_lastName\" data-validation-config=\"... validation config\">\n     *     <label class=\"b-form_field-label\" for=\"dwfrm_shipping_shippingAddress_addressFields_lastName\">\n     *         <span class=\"b-form_field-required\" aria-hidden=\"true\">*</span>\n     *         Last Name\n     *     </label>\n     *     <input data-ref=\"field\" id=\"dwfrm_shipping_shippingAddress_addressFields_lastName\" type=\"text\"\n     *         class=\"b-input m-invalid\" placeholder=\"\" aria-describedby=\"dwfrm_shipping_shippingAddress_addressFields_lastName-error\"\n     *         pattern=\"...\" name=\"dwfrm_shipping_shippingAddress_addressFields_lastName\" required=\"\" value=\"\" maxlength=\"50\"\n     *         aria-required=\"true\" minlength=\"2\" autocomplete=\"family-name\" data-event-blur=\"validate\"\n     *     >\n     *     <div role=\"alert\" class=\"b-form_field-message\" data-ref=\"errorFeedback\" id=\"dwfrm_shipping_shippingAddress_addressFields_lastName-error\">This field is required.</div>\n     * </div>\n     */\n    class InputText extends BasicInput {\n        /**\n         * @description Element on input handler\n         * @listens dom#input\n         * @emits InputText#input\n         * @param el source of event\n         * @param event event instance if DOM event\n         */\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        onInput(el: TRefElementInstance, event?: Event) {\n            /**\n             * @description Event, indicates that `input` event happened\n             * @event InputText#input\n             */\n            this.emit('input');\n        }\n    }\n\n    return InputText;\n}\n\nexport type TInputText = ReturnType<typeof InputTextClassCreator>;\n\nexport type TInputTextInstance = InstanceType<TInputText>;\n\nexport default InputTextClassCreator;\n","/**\n * @description Base InputTextarea implementation\n * @param InputText Base widget for extending\n * @returns Input Textarea class\n */\nfunction InputTextareaClassCreator(InputText: import('widgets/forms/InputText').TInputText) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class InputTextarea\n     * @augments InputText\n     * @classdesc Input type InputTextarea implementation. Represents input `textarea` element together with widget-related HTML markup.\n     * HTML structure assembled on backend and injected into resulted html markup by using `formElement` component\n     * and dynamic forms configuration JSON.\n     * Has a possibility to display number of entered symbols and how many of them are left to enter.\n     * @property {string} data-widget - Widget name `inputTextarea`\n     * @example <caption>InputTextarea definition in dynamicForms.js</caption>\n     * ...\n     * // fields -> input -> textarea\n     * textarea: {\n     *     extends: 'fields.input.base',\n     *     validation: {\n     *         'errors.security': 'validation.errors.parse'\n     *     },\n     *     element: {\n     *         minLength: 1,\n     *         maxLength: 256,\n     *         type: 'textarea'\n     *     }\n     * },\n     * ...\n     * // forms -> shipping -> shippingAddress\n     * giftMessage: {\n     *     widget: {\n     *         attributes: {\n     *             'data-id': 'giftMessage'\n     *         },\n     *         classes: 'gift-message'\n     *     },\n     *     extends: 'fields.input.textarea',\n     *     'label.text': 'form.gift.message',\n     *     'label.showOptionalMarker': true,\n     *     element: {\n     *         maxcounter: true,\n     *         attributes: {\n     *             'data-event-input': 'onInput'\n     *         },\n     *         placeholder: 'form.gift.placeholder'\n     *     }\n     * }\n     * @example <caption>Insertion of InputTextarea inside ISML templates</caption>\n     * <isset name=\"formElement\" value=\"${require('forms/formElement')}\" scope=\"page\"/>\n     * ...\n     * <form>\n     *     ...\n     *     <isprint value=\"${\n     *         formElement(pdict.addressForm.giftMessage).render()\n     *     }\" encoding=\"off\"/>\n     *     ...\n     * </form>\n     * @example <caption>Resulted HTML structure for InputTextarea</caption>\n     * <div data-widget=\"inputTextarea\" data-id=\"giftMessage\"\n     *     class=\"b-form_field gift-message m-valid\" data-validation-config=\"... validation config\"\n     * >\n     *     <label class=\"b-form_field-label\" for=\"dwfrm_shipping_shippingAddress_giftMessage\">\n     *         Gift message (optional)\n     *     </label>\n     *     <textarea\n     *          id=\"someID\"\n     *          class=\"b-textarea m-valid\"\n     *          data-ref=\"field\"\n     *          placeholder=\"Enter your text...\"\n     *          aria-describedby=\"someID-error\"\n     *          rows=\"5\"\n     *          name=\"someName\"\n     *          maxlength=\"256\"\n     *          minlength=\"1\"\n     *          data-event-input=\"onInput\"\n     *          data-event-blur=\"validate\"\n     *          data-prevent-multi-line=\"true\"\n     *     ></textarea>\n     *     <div class=\"b-form_field-counter\">\n     *         <span class=\"b-form_field-counter_value\" data-ref=\"maxcounter\">256</span> characters left\n     *     </div>\n     *     <div role=\"alert\" hidden=\"hidden\" class=\"b-form_field-message\" data-ref=\"errorFeedback\" id=\"someID-error\"></div>\n     * </div>\n     */\n    class InputTextarea extends InputText {\n        prefs() {\n            return {\n                preventMultiLine: false,\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n\n            this.onInput();\n        }\n\n        /**\n         * @description On `input` InputTextarea handler\n         * @listens dom#input\n         */\n        onInput() {\n            const currentInputValue = this.ref('field').val().toString();\n\n            if (this.prefs().preventMultiLine) {\n                this.stripNewLines(currentInputValue);\n            }\n\n            this.updateCounter(currentInputValue);\n        }\n\n        /**\n         * @description Gives a possibility to avoid new line to be inserted to textarea\n         * @param currentInputValue textarea value\n         */\n        stripNewLines(currentInputValue: string) {\n            this.ref('field').val(currentInputValue.replace(/\\r?\\n/g, ''));\n        }\n\n        /**\n         * @description Gives a possibility to check how many symbols are entered\n         * and restricts further input in case if max allowed characters reached.\n         * @param currentInputValue textarea value\n         */\n        updateCounter(currentInputValue: string) {\n            if (!this.has('maxcounter')) {\n                return;\n            }\n\n            const maxLength = Number(this.ref('field').attr('maxlength'));\n\n            if (currentInputValue.length > maxLength) {\n                /*\n                 * Additional handling of input field value on paste to\n                 * avoid issues caused by browser incorrect value handling\n                 * https://bugs.webkit.org/show_bug.cgi?id=182725\n                 */\n                this.ref('field').val(currentInputValue.slice(0, maxLength));\n            }\n\n            const charactersLeft = maxLength - this.ref('field').val().length;\n\n            this.ref('maxcounter').setText(String(charactersLeft));\n        }\n    }\n\n    return InputTextarea;\n}\n\nexport type TInputTextarea = ReturnType<typeof InputTextareaClassCreator>;\n\nexport type TInputTextareaInstance = InstanceType<TInputTextarea>;\n\nexport default InputTextareaClassCreator;\n","import { TInputTextInstance } from 'widgets/forms/InputText';\nimport { TBasicInputInstance } from 'widgets/forms/BasicInput';\n\n/**\n * @param AjaxForm Base widget for extending\n * @returns EmailSubscribe widget\n */\nfunction EmailSubscribeClassCreator(AjaxForm: import('widgets/forms/AjaxForm').TAjaxForm) {\n    /**\n     * @category widgets\n     * @subcategory forms/ajax\n     * @class EmailSubscribe\n     * @augments AjaxForm\n     * @classdesc Serves email subscription form in footer.\n     * The main purpose EmailSubscribe widget is to allow send/validate the request to server and handles server response\n     * @property {string} data-widget - Widget name `emailSubscribe`\n     * @property {string} data-event-submit - Event listener for form submission\n     *\n     * @example <caption>Example of EmailSubscribe widget usage</caption>\n     * <form\n     *     class=\"b-newsletters\"\n     *     aria-label=\"${Resource.msg('subscribe.label', 'global', null)}\"\n     *     name=\"subscribe-form\"\n     *     action=\"${URLUtils.url('EmailSubscribe-Subscribe')}\"\n     *     method=\"POST\"\n     *     data-signup-email=\"${emailsubscribeForm.email.htmlName}\"\n     *     data-accessibility-announcement-msg=\"${Resource.msg('subscribe.alert', 'global', null)}\"\n     *     data-widget=\"emailSubscribe\"\n     *     data-event-submit.prevent=\"handleSubmit\"\n     * >\n     *     <div class=\"b-newsletters-caption\">\n     *         <iscontentasset aid=\"footer-newsletters\" local=\"${true}\" />\n     *     </div>\n     *     <div\n     *         class=\"b-newsletters-group\"\n     *         data-ref=\"formContent\"\n     *         data-tau=\"newsletters_group\"\n     *     >\n     *         ... form fields\n     *     </div>\n     *     <div\n     *         class=\"b-newsletters-message_success\"\n     *         data-ref=\"successMessage\"\n     *         hidden=\"hidden\"\n     *         data-tau=\"newsletters_message_success\"\n     *     ></div>\n     * </form>\n     */\n    class EmailSubscribe extends AjaxForm {\n        prefs() {\n            return {\n                signupEmail: 'dwfrm_emailsubscribe_email',\n                formContent: 'formContent',\n                successBlock: 'successBlock',\n                successMessage: 'successMessage',\n                agreeToPrivacy: 'agreeToPrivacy',\n                accessibilityAnnouncementMsg: '',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Handles email input\n         * @param el event source element\n         */\n        onEmailInput(el: TInputTextInstance) {\n            const entered = el && el.getValue();\n\n            if (entered && entered.length) {\n                this.showAgreeToPrivacy();\n            }\n        }\n\n        /**\n         * @description Show agree to privacy block\n         */\n        showAgreeToPrivacy() {\n            this.ref('agreeToPrivacy').show();\n        }\n\n        /**\n         * @description Handles server response\n         * @emits \"alert.show\"\n         * @param data Server JSON response once form submitted\n         */\n        onSubmitted(data: TServerResponse) {\n            if (data.success) {\n                this.ref('formContent').hide();\n                this.ref('successMessage')\n                    .setText(<string>data.msg)\n                    .show();\n                /**\n                 * @description Global event to show alert\n                 * @event \"alert.show\"\n                 */\n                this.eventBus().emit('alert.show', {\n                    accessibilityAlert: this.prefs().accessibilityAnnouncementMsg\n                });\n            }\n\n            if (!data.success) {\n                if (data.fieldErrors) {\n                    Object.entries(data.fieldErrors).forEach(([name, errorMsg]) => {\n                        this.getById(name, (formField: TBasicInputInstance) => formField.setError(errorMsg));\n                    });\n                }\n\n                if (data.errorMessage) {\n                    // Show only Accessibility Alert in case of 500 error\n                    if (data.errorCode !== 500) {\n                        this.getById(this.prefs().signupEmail, (inputEmail: TBasicInputInstance) => inputEmail.setError(data.errorMessage));\n                    }\n                }\n            }\n        }\n    }\n\n    return EmailSubscribe;\n}\n\nexport type TEmailSubscribe = ReturnType<typeof EmailSubscribeClassCreator>;\n\nexport type TEmailSubscribeInstance = InstanceType<TEmailSubscribe>;\n\nexport default EmailSubscribeClassCreator;\n","import { TWidget } from 'widgets/Widget';\nimport { isDOMElementFocusable } from 'widgets/toolbox/util';\nimport { scrollIntoView } from 'widgets/toolbox/scroll';\n\n/**\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} RefElement\n */\n\n/**\n * @param Widget Base widget for extending\n * @returns AccessibilityFocusMixin class\n */\nfunction AccessibilityFocusMixinClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class AccessibilityFocusMixin\n     * @augments Widget\n     * @classdesc Base implementation for inheritance, to be used to handle focus-related actions like getting set of focusable inputs etc.\n     * Also could be used to set focus on:\n     * - concrete element in widget's markup by ref element\n     * - first input in widget's markup\n     * - first focusable element in widget's markup\n     * This class is not intended to have a separate DOM widget. It should be used as a mixin for any other target widgets.\n     */\n    class AccessibilityFocusMixin extends Widget {\n        /**\n         * @description Get keyboard-focusable elements\n         * @param refName ref name to get focusable elements in, or nothing to get from `self`\n         * @param types array of elements selectors to search for, or nothing for default set\n         * @returns array containing focusable elements, or empty array if no elements found\n         */\n        getFocusableElements(refName = 'self', types: Array<string> = []): Array<HTMLElement> {\n            if (!types.length) {\n                types = ['a', 'button', 'input', 'textarea', 'select', 'details'];\n            }\n\n            types.push('[tabindex]:not([tabindex=\"-1\"])');\n            const selector = types.join(',');\n            let result: Array<HTMLElement> = [];\n\n            this.has(refName, refElement => {\n                const htmlEl = refElement.get();\n\n                if (htmlEl) {\n                    result = Array.from(htmlEl.querySelectorAll(selector))\n                        .filter(isDOMElementFocusable) as Array<HTMLElement>;\n                }\n            });\n\n            return result;\n        }\n\n        /**\n         * @description Get keyboard-focusable input elements\n         * @param refName ref name to get focusable elements in, or nothing to get from `self`\n         * @returns array containing focusable input elements, or empty array if no elements found\n         */\n        getFocusableInputElements(refName = 'self'): Array<Element> {\n            return this.getFocusableElements(refName, ['input', 'textarea', 'select']);\n        }\n\n        /**\n         * @description Focus first element found in ref\n         * @param containerRefName container ref name to get focusable elements in, or nothing to get from `self`\n         * @param types optional, array of elements selectors to search for, or nothing for default set\n         * @param needScrollIntoView scroll into view active element after focus\n         */\n        focusFirst(containerRefName = 'self', types: Array<string> = [], needScrollIntoView = false) {\n            const focusableElements = this.getFocusableElements(containerRefName, types);\n\n            if (focusableElements.length) {\n                focusableElements[0].focus();\n\n                if (needScrollIntoView) {\n                    scrollIntoView(focusableElements[0]); // Fix iOS not scrolled to focused element\n                }\n            }\n        }\n\n        /**\n         * @description Method to focus on first focusable input, accepts refName as param to search input in\n         * @param containerRefName container ref name to get focusable elements in, or nothing to get from `self`\n         * @param needScrollIntoView scroll into view active element after focus\n         */\n        focusFirstInput(containerRefName = 'self', needScrollIntoView = false): void {\n            const focusableInputElements = this.getFocusableInputElements(containerRefName);\n\n            if (focusableInputElements.length) {\n                (focusableInputElements[0] as HTMLElement).focus();\n\n                if (needScrollIntoView) {\n                    scrollIntoView(focusableInputElements[0] as HTMLElement); // Fix iOS not scrolled to focused element\n                }\n            }\n        }\n\n        /**\n         * @description Method to focus on a concrete focusable element, accepts refName as param to search element\n         * @param elementRefName element ref name to check if it focusable, end set focus into it\n         */\n        focusElement(elementRefName: string) {\n            if (elementRefName) {\n                this.has(elementRefName, (element) => {\n                    const domNode = element.get();\n\n                    if (domNode && isDOMElementFocusable(domNode)) {\n                        domNode.focus();\n                    }\n                });\n            }\n        }\n    }\n\n    return AccessibilityFocusMixin;\n}\n\nexport type TAccessibilityFocusMixin = ReturnType<typeof AccessibilityFocusMixinClassCreator>;\n\nexport type TAccessibilityFocusMixinInstance = InstanceType<TAccessibilityFocusMixin>;\n\nexport default AccessibilityFocusMixinClassCreator;\n","import { timeout, isDOMElementFocusable } from 'widgets/toolbox/util';\nimport { TWidget } from 'widgets/Widget';\n\n/**\n * @param Widget Base widget for extending\n * @returns AccessibilityFocusTrapMixin class\n */\nfunction AccessibilityFocusTrapMixinClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class AccessibilityFocusTrapMixin\n     * @augments Widget\n     * @classdesc Base AccessibilityFocusTrapMixin implementation.\n     * Used to trap focus inside widget according to usability requirements\n     * Can be either looped or not\n     * This class is not intended to have a separate DOM representation, but should be used as a mixin.\n     * Creates in runtime 2 `span` elements inside widget, which has `tabindex=\"0\"` and can handle focus.\n     * Once one of these spans are focused (depending last or first) - focus will be handled accordingly\n     * (either stays at previously focused widget element, or will be looped).\n     * @property {string} data-ref-last-focus-element - Reference to last possible focusable element\n     * @property {string} data-ref-first-focus-element - Reference to first possible focusable element\n     * @property {boolean} data-focus-loop - Do we need to loop focus inside widget?\n     * @property {string} data-ref-traps-container - This ref element would be wrapped with 2 `span` elements - `firstTrapRef` and `lastTrapRef`\n     * @property {string} data-first-trap-ref - Reference to first focusable `span` element to handle focus trap.\n     * @property {string} data-last-trap-ref - Reference to last focusable `span` element to handle focus trap.\n     * @property {number} data-focus-timeout - Timeout to set focus to element\n     */\n    class AccessibilityFocusTrapMixin extends Widget {\n        prefs() {\n            return {\n                refFirstFocusElement: 'firstFocusElement',\n                refLastFocusElement: 'lastFocusElement',\n                focusLoop: true,\n                refTrapsContainer: 'dialog',\n                firstTrapRef: 'firstTrap',\n                lastTrapRef: 'lastTrap',\n                focusTimeout: 600,\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n\n            const { firstTrapRef, lastTrapRef } = this.prefs();\n\n            this.onDestroy(() => {\n                [firstTrapRef, lastTrapRef].forEach((ref) => {\n                    this.has(ref, el => el.remove());\n                });\n            });\n        }\n\n        /**\n         * @description Handle Focus Trap Last.\n         * Either focuses on first element (in case of focus loop) or stays at last element.\n         * If last element is not found - tries to set focus on first element (loop-like behavior)\n         * @listens dom#focus\n         */\n        handleFocusTrapLast() {\n            if (this.prefs().focusLoop) {\n                this.focusFirstElement();\n\n                return;\n            }\n\n            const hasLastElement = this.focusLastElement();\n\n            if (!hasLastElement) {\n                this.focusFirstElement();\n            }\n        }\n\n        /**\n         * @description Handle Focus Trap First.\n         * Either focuses on last element (in case of focus loop) or stays at first element.\n         * @listens dom#focus\n         */\n        handleFocusTrapFirst() {\n            if (this.prefs().focusLoop) {\n                this.focusLastElement();\n\n                return;\n            }\n\n            this.focusFirstElement();\n        }\n\n        /**\n         * @description Method to focus on element by ref id\n         * @param refId ref id of ref element\n         * @returns boolean indicating whether necessary ref element found\n         */\n        focusElement(refId: string): boolean {\n            return this.has(refId, (element) => {\n                const domNode = element.get();\n\n                if (domNode) { domNode.focus(); }\n            });\n        }\n\n        /**\n         * @description Focus first element\n         * @returns  true if browser is able to focus on first element\n         */\n        focusFirstElement(): boolean {\n            return this.focusElement(this.prefs().refFirstFocusElement)\n                || this.focusFirstDescendant();\n        }\n\n        /**\n         * @description Focus on first descendant element\n         * @param element container element\n         */\n        focusFirstDescendant(element?: HTMLElement | Element): boolean {\n            if (!element) {\n                element = this.ref(this.prefs().refTrapsContainer).get();\n            }\n\n            if (element) {\n                for (let i = 0; i < element.children.length; i++) {\n                    const child = element.children[i];\n\n                    if (child && (this.focusAttempt(child) || this.focusFirstDescendant(child))) {\n                        return true;\n                    }\n                }\n            }\n\n            return false;\n        }\n\n        /**\n         * @description Focus last element\n         * Returns true if browser is able to focus on last element\n         */\n        focusLastElement(): boolean {\n            return this.focusElement(this.prefs().refLastFocusElement)\n                || this.focusLastDescendant();\n        }\n\n        /**\n         * @description Focus on last descendant element\n         * @param element container element\n         */\n        focusLastDescendant(element?: HTMLElement | Element): boolean {\n            if (!element) {\n                element = this.ref(this.prefs().refTrapsContainer).get();\n            }\n\n            if (element) {\n                for (let i = element.children.length - 1; i >= 0; i--) {\n                    const child = element.children[i];\n\n                    if (child && (this.focusAttempt(child) || this.focusLastDescendant(child))) {\n                        return true;\n                    }\n                }\n            }\n\n            return false;\n        }\n\n        /**\n         * @description Try to focus on element if it's focusable\n         * @param element target element to focus\n         */\n        focusAttempt(element: HTMLElement | Element): boolean {\n            if (!isDOMElementFocusable(element) || this.ref('lastTrapRef').get() === element) {\n                return false;\n            }\n\n            try {\n                if (element instanceof HTMLIFrameElement) {\n                    element.contentWindow?.focus();\n                } else {\n                    (element as HTMLElement).focus();\n                }\n            } catch (e) {\n                // catch error\n            }\n\n            return (document.activeElement === element);\n        }\n\n        /**\n         * @description Overridden `show` method, which will create 2 `span` elements for focus trap\n         * on {@link Modal} show.\n         */\n        show(): this {\n            super.show();\n\n            this.addFocusTraps();\n\n            return this;\n        }\n\n        /**\n         * @description Creates 2 `span` element with `tabindex=\"0\"` to be able to handle focus selection as per accessibility requirements.\n         * FIXME: each time when dialog closed new dialog add more this.disposables\n         * FIXME: initially this.refs do not contain firstTrapRef & lastTrapRef but they mysteriously appears on check\n         * @param isForce do we need to add new elements even if .has check passed\n         */\n        addFocusTraps(isForce = false) {\n            this.has(this.prefs().refTrapsContainer, trapsContainer => {\n                const { firstTrapRef, lastTrapRef } = this.prefs();\n\n                if (this.has(firstTrapRef) && this.has(lastTrapRef) && !isForce) {\n                    return;\n                }\n\n                trapsContainer.prepend(\n                    `<span tabindex=\"0\" data-ref=\"${firstTrapRef}\" data-event-focus.prevent=\"handleFocusTrapFirst\"></span>`\n                );\n                trapsContainer.append(\n                    `<span tabindex=\"0\" data-ref=\"${lastTrapRef}\" data-event-focus.prevent=\"handleFocusTrapLast\"></span>`\n                );\n            });\n        }\n\n        /**\n         * @description focus first element after show modal (when keyboard navigation)\n         */\n        afterShowModal() {\n            this.onDestroy(timeout(() => this.focusFirstElement(), this.prefs().focusTimeout));\n        }\n    }\n\n    return AccessibilityFocusTrapMixin;\n}\n\nexport type TAccessibilityFocusTrapMixin = ReturnType<typeof AccessibilityFocusTrapMixinClassCreator>;\n\nexport type TAccessibilityFocusTrapMixinInstance = InstanceType<TAccessibilityFocusTrapMixin>;\n\nexport default AccessibilityFocusTrapMixinClassCreator;\n","import { TFocusableElementInstance } from 'widgets/global/ListAccessibility';\n\nimport { TAccordionItemInstance } from 'widgets/global/AccordionItem';\n\n/**\n * @description Base Accordion implementation\n * @param ListAccessibility Base widget for extending\n * @returns Accordion widget\n */\nfunction AccordionClassCreator(ListAccessibility: import('widgets/global/ListAccessibility').TListAccessibility) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class Accordion\n     * @augments ListAccessibility\n     * @classdesc Represents Accordion component with next features:\n     * 1. Configurable via data attributes single or multiple selection of panels\n     * 2. Allow has opened or closed first panel\n     * 3. Allow or disallow closing panel on second click\n     * 4. Support keyboard navigation for accessibility\n     *\n     * Accordion widget should contain {@link AccordionItem} widgets that implement one accordion section.\n     * Widget has next relationship:\n     * * Accordion widget expand first item if such defined in `data-open-first` attribute by calling method {@link AccordionItem#openPanel}\n     * * Close all items using method {@link AccordionItem#closePanel} by event {@link AccordionItem#event:closeallitems} from {@link AccordionItem} widget.\n     * * Update current Accordion item using methods {@link AccordionItem#handleKeydown} and {@link AccordionItem#handleFocus} by event {@link AccordionItem#event:accordionitemupdate} from {@link AccordionItem} widget.\n     *\n     * @property {string} data-widget - Widget name `accordion`\n     * @property {string} data-event-keydown - Event listener for `handleKeydown` method\n     * @property {boolean} [data-allow-toggle=false] - Flag that allows or disallows toggle\n     * @property {boolean} [data-open-first=false] - Flag that open first item\n     * @property {boolean} [data-allow-multiple=false] - Flag that allows or disallows multiple open items\n     * @example <caption>Example of Single Selectable Accordion with one panel that is opened on init</caption>\n     * <div\n     *     class=\"b-product_accordion\"\n     *     data-widget=\"accordion\"\n     *     data-allow-toggle=\"false\"\n     *     data-open-first=\"true\"\n     *     data-allow-multiple=\"false\"\n     * >\n     *      <section\n     *          class=\"b-product_accordion-item\"\n     *          data-widget=\"accordionItem\"\n     *          data-widget-event-closeallitems=\"closeItems\"\n     *          data-widget-event-accordionitemupdate=\"updateFocusedItem\"\n     *       >\n     *          <button\n     *              class=\"b-product_accordion-button\"\n     *              data-ref=\"accordionItemBtn\"\n     *              data-event-click.prevent=\"togglePanel\"\n     *              data-event-keydown=\"handleKeydown\"\n     *              data-event-focus=\"handleFocus\"\n     *              type=\"button\"\n     *      >\n     *              <span>${Resource.msg('details.product', 'product', null)}</span>\n     *              <span class=\"b-icon_chevron\"></span>\n     *          </button>\n     *          <div data-ref=\"accordionItemPanel\">\n     *              <div data-ref=\"accordionItemPanelInner\">\n     *                  ... account panel content\n     *              </div>\n     *          </div>\n     *      </section>\n     * </div>\n     * @example <caption>Example of Multi Selectable Accordion with two panel. First panel closed on init</caption>\n     * <div\n     *     data-widget=\"accordion\"\n     *     data-allow-toggle=\"false\"\n     *     data-open-first=\"false\"\n     *     data-allow-multiple=\"true\"\n     *     class=\"b-footer_nav\"\n     * >\n     *      <section\n     *          data-widget=\"accordionItem\"\n     *          data-widget-event-closeallitems=\"closeItems\"\n     *          data-widget-event-accordionitemupdate=\"updateFocusedItem\"\n     *          class=\"b-footer_nav-column\"\n     *      >\n     *          <h2 class=\"b-footer_nav-title\">\n     *              <button\n     *                  data-ref=\"accordionItemBtn\"\n     *                  data-event-click.prevent=\"togglePanel\"\n     *                  data-event-keydown=\"handleKeydown\"\n     *                  data-event-focus=\"handleFocus\"\n     *                  class=\"b-footer_nav-button\"\n     *                  type=\"button\"\n     *              >\n     *                  <span>Account</span>\n     *                  <span class=\"b-icon_chevron\"></span>\n     *              </button>\n     *          </h2>\n     *          <div data-ref=\"accordionItemPanel\">\n     *              <div data-ref=\"accordionItemPanelInner\">\n     *                 ... account panel content\n     *              </div>\n     *          </div>\n     *      </section>\n     *      <section\n     *          data-widget=\"accordionItem\"\n     *          data-widget-event-closeallitems=\"closeItems\"\n     *          data-widget-event-accordionitemupdate=\"updateFocusedItem\"\n     *          class=\"b-footer_nav-column\"\n     *      >\n     *          <h2 class=\"b-footer_nav-title\">\n     *              <button\n     *                  data-ref=\"accordionItemBtn\"\n     *                  data-event-click.prevent=\"togglePanel\"\n     *                  data-event-keydown=\"handleKeydown\"\n     *                  data-event-focus=\"handleFocus\"\n     *                  class=\"b-footer_nav-button\"\n     *                  type=\"button\"\n     *              >\n     *                  Wishlist\n     *              </button>\n     *          </h2>\n     *          <div data-ref=\"accordionItemPanel\">\n     *              <div data-ref=\"accordionItemPanelInner\">\n     *                  ... wishlist panel content\n     *              </div>\n     *          </div>\n     *      </section>\n     * </div>\n     */\n\n    class Accordion extends ListAccessibility {\n        prefs() {\n            return {\n                allowToggle: false,\n                allowMultiple: false,\n                openFirst: false,\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Initialize widget logic\n         */\n        init() {\n            super.init();\n            this.defineItems();\n            this.eachChild<TAccordionItemInstance>((item) => {\n                item.isToggleAllowed = this.prefs().allowToggle;\n                item.isMultipleSections = this.prefs().allowMultiple;\n            });\n\n            if (this.prefs().openFirst) {\n                this.openFirstItem();\n            }\n        }\n\n        /**\n         * @description Reinit accordion once accordion has changed\n         */\n        reinit() {\n            this.init();\n            this.updateAccordionItems();\n        }\n\n        /**\n         * @description Updates accordion items state\n         */\n        updateAccordionItems() {\n            this.eachChild<TAccordionItemInstance>((item) => {\n                item.defineAttributes(item.isPanelOpen);\n                item.updateState();\n            });\n        }\n\n        /**\n         * @description Update focused accordion item\n         * @param accordionItem - Accordion item that fired event\n         * @param action - action name of the update\n         * @listens AccordionItem#accordionitemupdate\n         */\n        updateFocusedItem(accordionItem: TFocusableElementInstance, action) {\n            switch (action) {\n                case 'current':\n                    this.currentItem = accordionItem;\n                    break;\n\n                case 'next':\n                    this.setFocusToNextItem();\n                    break;\n\n                case 'previous':\n                    this.setFocusToPreviousItem();\n                    break;\n\n                case 'first':\n                    this.setFocusToFirstItem();\n                    break;\n\n                case 'last':\n                    this.setFocusToLastItem();\n                    break;\n\n                default:\n                    break;\n            }\n        }\n\n        /**\n         * @description Opens first item based on openFirst preference\n         */\n        openFirstItem() {\n            if (this.firstItem) {\n                (this.firstItem as TAccordionItemInstance).openPanel();\n            }\n        }\n\n        /**\n         * @description Close items\n         * @listens AccordionItem#closeallitems\n         */\n        closeItems() {\n            this.eachChild<TAccordionItemInstance>((accordionItem) => {\n                accordionItem.closePanel(false);\n            });\n        }\n\n        /**\n         * @description Returns current opened accordion item\n         * @returns accordion item\n         */\n        getCurrentOpenItem<T extends TAccordionItemInstance = TAccordionItemInstance>() {\n            let currentItem: T | undefined;\n\n            this.eachChild<TAccordionItemInstance>(item => {\n                if (item.isPanelOpen) {\n                    currentItem = <T> item;\n                }\n            });\n\n            return currentItem;\n        }\n    }\n\n    return Accordion;\n}\n\nexport type TAccordion = ReturnType<typeof AccordionClassCreator>;\n\nexport type TAccordionInstance = InstanceType<TAccordion>;\n\nexport default AccordionClassCreator;\n","import { RefElement } from 'widgets/toolbox/RefElement';\nimport { TWidget } from 'widgets/Widget';\n\nconst keyCode = Object.freeze({\n    RETURN: 13,\n    SPACE: 32,\n    END: 35,\n    HOME: 36,\n    UP: 38,\n    DOWN: 40\n});\n\nconst ARIA_EXPANDED = 'aria-expanded';\nconst ARIA_HIDDEN = 'aria-hidden';\nconst ARIA_DISABLED = 'aria-disabled';\n\n/**\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} RefElement\n */\n\n/**\n * @description Base AccordionItem implementation\n * @param Widget base widget class\n * @returns AccordionItem widget\n */\nfunction AccordionItemClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class AccordionItem\n     * @augments Widget\n     * @classdesc Represents AccordionItem with specific logic for accordion item, handling viewtype changes, keyboard navigation\n     * Represents AccordionItem component with next features:\n     * 1. Configurable via data attribute expanded state\n     * 2. Support keyboard navigation for accessibility\n     * 3. Define accessibility\n     * @property {string} data-widget - Widget name `accordionItem`\n     * @property {string} data-event-keydown - Event listener for `handleKeydown` method\n     * @property {string} data-event-click - Event listener for `togglePanel` method\n     * @property {string} data-widget-event-accordionitemupdate - method to be triggered on parent's widget to update current accordion item\n     * @property {boolean} [data-expanded=false] - Expanded flag\n     * @example\n     * // use this code to display widget\n     *   <section\n     *      class=\"b-product_accordion-item\"\n     *      data-widget=\"accordionItem\"\n     *      data-widget-event-closeallitems=\"closeItems\"\n     *      data-widget-event-accordionitemupdate=\"updateFocusedItem\"\n     *  >\n     *      <button\n     *          class=\"b-refinements_accordion-button\"\n     *          data-ref=\"accordionItemBtn\"\n     *          data-event-click.prevent=\"togglePanel\"\n     *          data-event-keydown=\"handleKeydown\"\n     *          data-event-focus=\"handleFocus\"\n     *          type=\"button\"\n     *      >\n     *          <span class=\"b-refinements_accordion-title\">Account</span>\n     *          <span class=\"b-icon_chevron\"></span>\n     *      </button>\n     *      <div data-ref=\"accordionItemPanel\">\n     *          <div data-ref=\"accordionItemPanelInner\">\n     *              ... account panel content\n     *          </div>\n     *      </div>\n     *  </section>\n     */\n\n    class AccordionItem extends Widget {\n        /**\n         * @description Is current panel opened\n         */\n        isPanelOpen = false;\n\n        /**\n         * @description Is panel toggle allowed\n         */\n        isToggleAllowed = false;\n\n        /**\n         * @description Is Multiple section are allowed to be opened in same time\n         */\n        isMultipleSections = false;\n\n        /**\n         * @description Returns Widget configuration object\n         * @returns Widget configuration object\n         */\n        prefs() {\n            return {\n                accordionItemBtn: 'accordionItemBtn',\n                accordionItemPanel: 'accordionItemPanel',\n                accordionItemPanelInner: 'accordionItemPanelInner',\n                expanded: false,\n                animateToggle: true,\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Initialize widget logic\n         */\n        init() {\n            this.isPanelOpen = this.prefs().expanded;\n            this.isToggleAllowed = false;\n            this.isMultipleSections = false;\n            this.defineAttributes(this.prefs().expanded);\n            this.onDestroy(this.clearAttributes.bind(this));\n            this.onDestroy(this.cleanPanelHeight.bind(this));\n\n            if (!this.isPanelOpen) {\n                this.closePanel(true);\n            }\n        }\n\n        /**\n         * @description Define attributes\n         * @param [isOpen] Panel open flag\n         */\n        defineAttributes(isOpen?: boolean) {\n            const accordionItemBtn = this.ref('accordionItemBtn');\n            const accordionItemPanel = this.ref('accordionItemPanel');\n            const accordionItemBtnID = accordionItemBtn.attr('id');\n            const accordionItemPanelID = accordionItemPanel.attr('id');\n\n            accordionItemBtn.attr('role', 'button');\n            accordionItemBtn.attr('aria-controls', accordionItemPanelID);\n            accordionItemBtn.attr(ARIA_EXPANDED, 'false');\n            accordionItemBtn.attr('tabindex', '0');\n            accordionItemPanel.attr('role', 'region');\n            accordionItemPanel.attr('aria-labelledby', accordionItemBtnID);\n\n            if (isOpen) {\n                accordionItemPanel.attr(ARIA_HIDDEN, 'false');\n                accordionItemBtn.attr(ARIA_EXPANDED, 'true');\n            } else {\n                accordionItemPanel.attr(ARIA_HIDDEN, 'true');\n                accordionItemBtn.attr(ARIA_EXPANDED, 'false');\n            }\n        }\n\n        /**\n         * @description Clear Attributes\n         */\n        clearAttributes() {\n            this.has(this.prefs().accordionItemBtn, (accordionItemBtn) => {\n                accordionItemBtn.attr('role', false);\n                accordionItemBtn.attr('aria-controls', false);\n                accordionItemBtn.attr(ARIA_EXPANDED, false);\n                accordionItemBtn.attr(ARIA_DISABLED, false);\n                accordionItemBtn.attr('tabindex', false);\n            });\n            this.has(this.prefs().accordionItemPanel, (accordionItemPanel) => {\n                accordionItemPanel.attr('role', false);\n                accordionItemPanel.attr('aria-labelledby', false);\n                accordionItemPanel.attr(ARIA_HIDDEN, false);\n            });\n        }\n\n        /**\n         * @description Set Focus\n         */\n        focus() {\n            this.has(this.prefs().accordionItemBtn, (accordionItemBtn) => {\n                accordionItemBtn.focus();\n            });\n        }\n\n        /**\n         * @description On Refresh Handler\n         */\n        onRefresh() {\n            super.onRefresh();\n            this.defineAttributes(this.isPanelOpen);\n\n            if (!this.isPanelOpen) {\n                this.closePanel();\n            }\n        }\n\n        /**\n         * @description Open panel\n         * @emits AccordionItem#closeallitems\n         * @emits AccordionItem#openpanel\n         */\n        openPanel() {\n            if (!this.isMultipleSections) {\n                /**\n                 * @description Event to close all items\n                 * @event AccordionItem#closeallitems\n                 */\n                this.emit('closeallitems');\n            }\n\n            this.has(this.prefs().accordionItemBtn, (accordionItemBtn) => {\n                accordionItemBtn.attr(ARIA_EXPANDED, 'true');\n\n                if (!this.isToggleAllowed) {\n                    accordionItemBtn.attr(ARIA_DISABLED, 'true');\n                }\n            });\n            this.has(\n                this.prefs().accordionItemPanel,\n                accordionItemPanel => this.togglePanelHeight(true, accordionItemPanel)\n            );\n\n            this.isPanelOpen = true;\n            /**\n             * @description Event for opening panel\n             * @event AccordionItem#openpanel\n             */\n            this.emit('openpanel');\n        }\n\n        /**\n         * @description Close panel\n         * @param skipEvent Skip event marker (could be used in child classes)\n         */\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        closePanel(skipEvent?: boolean) {\n            this.has(this.prefs().accordionItemBtn, (accordionItemBtn) => {\n                accordionItemBtn.attr(ARIA_EXPANDED, 'false');\n\n                if (!this.isToggleAllowed) {\n                    accordionItemBtn.attr(ARIA_DISABLED, false);\n                }\n            });\n            this.has(\n                this.prefs().accordionItemPanel,\n                accordionItemPanel => this.togglePanelHeight(false, accordionItemPanel)\n            );\n\n            this.isPanelOpen = false;\n        }\n\n        /**\n         * @description Toggle panel\n         */\n        togglePanel() {\n            if (!this.isPanelOpen) {\n                this.openPanel();\n            } else if (this.isToggleAllowed) {\n                this.closePanel();\n            }\n        }\n\n        /**\n         * @description Toggle panel height, so it could be properly animated.\n         * It is required inner element to has content height properly.\n         * @param isOpen Panel Open flag\n         * @param panel IsOpen flag\n         */\n        togglePanelHeight(isOpen: boolean, panel: RefElement) {\n            panel.attr(ARIA_HIDDEN, isOpen ? 'false' : 'true');\n\n            this.has(this.prefs().accordionItemPanelInner, inner => {\n                const panelElement = panel.get();\n                const innerElement = inner.get();\n\n                if (innerElement && panelElement) {\n                    panelElement.style.height = `${isOpen ? innerElement.offsetHeight : 0}px`;\n                }\n            });\n        }\n\n        /**\n         * @description Remove hard-coded panel height in case of widget destroyed\n         */\n        cleanPanelHeight() {\n            this.has(this.prefs().accordionItemPanel, accordionItemPanel => {\n                const element = accordionItemPanel.get();\n\n                if (element) {\n                    element.style.height = 'auto';\n                }\n            });\n        }\n\n        /**\n         * @description Update accordion item state, recalculate item height\n         * TODO: Describe approach for accordion height in case of content change\n         */\n        updateState() {\n            this.has(\n                this.prefs().accordionItemPanel,\n                accordionItemPanel => {\n                    this.togglePanelHeight(Boolean(this.isPanelOpen), accordionItemPanel);\n                }\n            );\n        }\n\n        /**\n         * @description Focus Event handler\n         * @emits AccordionItem#accordionitemupdate\n         */\n        handleFocus() {\n            /**\n             * @description Event to set focused Accordion item as current\n             * @event AccordionItem#accordionitemupdate\n             */\n            this.emit('accordionitemupdate', 'current');\n        }\n\n        /**\n         * @description Keydown Event handler\n         * @listens dom#keydown\n         * @param _ Source of keydown event\n         * @param event  Event object\n         */\n        handleKeydown(_: HTMLElement, event: KeyboardEvent) {\n            let preventEventActions = false;\n\n            switch (event.keyCode) {\n                case keyCode.RETURN:\n                case keyCode.SPACE:\n                    this.togglePanel();\n                    preventEventActions = true;\n\n                    break;\n\n                case keyCode.HOME:\n                    /**\n                     * @description Event to set first Accordion item as current\n                     * @event AccordionItem#accordionitemupdate\n                     */\n                    this.emit('accordionitemupdate', 'first');\n                    preventEventActions = true;\n\n                    break;\n\n                case keyCode.END:\n                    /**\n                     * @description Event to set last Accordion item as current\n                     * @event AccordionItem#accordionitemupdate\n                     */\n                    this.emit('accordionitemupdate', 'last');\n                    preventEventActions = true;\n\n                    break;\n\n                case keyCode.UP:\n                    /**\n                     * @description Event to set previous Accordion item as current\n                     * @event AccordionItem#accordionitemupdate\n                     */\n                    this.emit('accordionitemupdate', 'previous');\n                    preventEventActions = true;\n\n                    break;\n\n                case keyCode.DOWN:\n                    /**\n                     * @description Event to set next Accordion item as current\n                     * @event AccordionItem#accordionitemupdate\n                     */\n                    this.emit('accordionitemupdate', 'next');\n                    preventEventActions = true;\n\n                    break;\n\n                default:\n                    break;\n            }\n\n            if (preventEventActions) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n        }\n\n        /**\n         * @description Hide description\n         * @listens initerrorhandler\n         */\n        hideDescription() {\n            this.ref('accordionItemPanelDescription').hide();\n        }\n    }\n\n    return AccordionItem;\n}\n\nexport type TAccordionItem = ReturnType<typeof AccordionItemClassCreator>;\n\nexport type TAccordionItemInstance = InstanceType<TAccordionItem>;\n\nexport default AccordionItemClassCreator;\n","import { debounce } from './../toolbox/debounce';\nimport { isSmallView } from './../toolbox/viewtype';\nimport { timeout } from 'widgets/toolbox/util';\nimport { TWidget } from 'widgets/Widget';\n\ntype TEvFunction = InstanceType<TWidget>['ev'];\n\n/**\n * @param Widget Base widget for extending\n */\nfunction BackToTopClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class BackToTop\n     * @augments Widget\n     * @classdesc Back to top component. Allows scrolling window to top, pressing on a corresponding element.\n     * The main functionality based on native anchor links to not only scroll the page but move focus to header.\n     * This component only toggle button visibility depending on scroll position.\n     * @property {string} data-widget - Widget name `backtotop`\n     * @example <caption>Example of BackToTop widget usage</caption>\n     * <div\n     *     aria-label=\"${Resource.msg('backtotop.backtotop', 'global', '')}\"\n     *     data-widget=\"backtotop\"\n     *     class=\"b-back_to_top\"\n     *     href=\"${'#'}page-body\"\n     *     data-tau=\"back_to_top\"\n     * >\n     *     ... back to top element\n     * </div>\n     */\n    class BackToTop extends Widget {\n        scrollDisposable?: ReturnType<TEvFunction>;\n\n        prefs() {\n            return {\n                pageSize: 1.5,\n                activeClassName: 'm-showed',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Initialize widget logic\n         * @listens \"viewtype.change\"\n         */\n        init(): void {\n            super.init();\n            // Async init to not block other widget init\n            timeout(() => {\n                this.doInit();\n                this.eventBus().on('viewtype.change', 'doInit');\n            }, 0);\n        }\n\n        /**\n         * @description Attach scroll listener\n         */\n        attachScrollListener(): void {\n            this.scrollDisposable = this.ev('scroll', debounce(() => {\n                this.toggleButtonVisibility();\n            }, 50), window, true);\n        }\n\n        /**\n         * @description Remove scroll listener\n         */\n        removeScrollListener(): void {\n            if (this.scrollDisposable) {\n                this.scrollDisposable.forEach(disposable => disposable());\n\n                this.scrollDisposable = undefined;\n            }\n        }\n\n        /**\n         * @description Initialize widget logic\n         */\n        doInit(): void {\n            if (isSmallView()) {\n                this.removeScrollListener();\n            } else {\n                this.attachScrollListener();\n                this.toggleButtonVisibility();\n            }\n        }\n\n        /**\n         * @description Toggle back to top button visibility\n         */\n        toggleButtonVisibility(): void {\n            const scrolled = document.body.scrollTop || document.documentElement.scrollTop;\n            const windowHeight = window.innerHeight;\n            const isButtonVisible = scrolled > (windowHeight * this.prefs().pageSize);\n\n            this.ref('self')[isButtonVisible ? 'addClass' : 'removeClass'](this.prefs().activeClassName);\n        }\n    }\n\n    return BackToTop;\n}\n\nexport type TBackToTop = ReturnType<typeof BackToTopClassCreator>;\n\nexport type TBackToTopInstance = InstanceType<TBackToTop>;\n\nexport default BackToTopClassCreator;\n","import { RefElement } from 'widgets/toolbox/RefElement';\nimport { TWidget } from 'widgets/Widget';\n\nconst keyCode = Object.freeze({\n    RETURN: 13,\n    SPACE: 32\n});\n\n/**\n * @description Base Button implementation\n * @param Widget - widget for extending\n * @returns Button widget\n */\nfunction ButtonClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class Button\n     * @augments Widget\n     * @classdesc Button widget, which could be used in different contexts (html-markup, inside widgets etc).\n     * <br>Could be also used to trigger parent's widget method\n     * @property {string} data-widget - Widget name `button`\n     * @property {string} data-widget-event-click - Event listener to call Parent's widget method\n     * @property {string} data-event-click - Event listener method `handleClick` for click event on widget\n     * @property {boolean} data-prevent-action - Prevent action flag\n     * @classdesc Represents Button component with the next features:\n     * 1. Activate\\deactivate button visibility on the storefront\n     * 2. Enable\\disable button visibility on the storefront\n     * 3. Handles keydown by enter\\space keyboard button\n     * 4. Sets button error\n     * 5. Marks button as pressed\\unpressed\n     *\n     * @example <caption>Example of Button widget usage</caption>\n     * <button\n     *     type=\"submit\"\n     *     class=\"btn btn-block btn-primary\"\n     *     data-widget=\"button\"\n     *     data-widget-event-click=\"handleSubmit\"\n     *     data-event-click.prevent=\"handleClick\"\n     *     data-id=\"submitButton\"\n     * >\n     *     ${Resource.msg('button.text.loginform', 'login', null)}\n     * </button>\n     */\n    class Button extends Widget {\n        disabled = false;\n\n        isBusy = false;\n\n        selected = false;\n\n        /**\n         * @description Returns Widget configuration object\n         * @returns Widget configuration object\n         */\n        prefs() {\n            return {\n                classesError: 'm-error',\n                classesActive: 'm-active',\n                preventAction: false,\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Widget initialization logic\n         */\n        init() {\n            super.init();\n\n            if (!this.id) {\n                this.id = String(this.config.id);\n            }\n\n            this.disabled = this.ref('self').attr('disabled') === 'disabled';\n        }\n\n        /**\n         * @description Handles button click\n         * @listens dom:click\n         * @emits Button#click\n         */\n        handleClick() {\n            this.refs.self.els[0].click();\n\n            if (!this.prefs().preventAction) {\n                /**\n                 * @description Emits button click event\n                 * @event Button#click\n                 */\n                this.emit('click', this);\n            }\n        }\n\n        /**\n         * @description Returns button value\n         */\n        getValue(): string | RefElement {\n            return this.ref('self').val();\n        }\n\n        /**\n         * @param val - Value to set into widget's val attribute\n         */\n        setValue(val = ''): string | RefElement {\n            this.setError();\n\n            return this.ref('self').val(val);\n        }\n\n        /**\n         * @description Returns button text\n         */\n        getText(): string {\n            return this.ref('self').getText();\n        }\n\n        /**\n         * @param val - Value to set as a text of the Button\n         */\n        setText(val = ''): RefElement {\n            return this.ref('self').setText(val);\n        }\n\n        /**\n         * @description Sets button text error\n         * @param err - Sets `err` as a Button text and\n         * if `err` is not empty - adds error class to Button\n         */\n        setError(err = '') {\n            this.setText(err);\n\n            if (err) {\n                this.ref('self').addClass(this.prefs().classesError);\n            }\n        }\n\n        /**\n         * @description Method to mark element as `active`\n         */\n        activate() {\n            this.ref('self').addClass(this.prefs().classesActive);\n\n            return this;\n        }\n\n        /**\n         * @description Method to mark element as `inactive`\n         */\n        deactivate() {\n            this.ref('self').removeClass(this.prefs().classesActive);\n\n            return this;\n        }\n\n        /**\n         * @param state true to show/false to hide/undefined to auto\n         */\n        toggleActive(state?: boolean) {\n            this.ref('self').toggleClass(this.prefs().classesActive, state);\n        }\n\n        /**\n         * @description Check if a button has activated state\n         */\n        isActive(): boolean {\n            return this.ref('self').hasClass(this.prefs().classesActive);\n        }\n\n        /**\n         * @description Disables button\n         */\n        disable(): Button {\n            this.disabled = true;\n            this.ref('self').disable();\n\n            return this;\n        }\n\n        /**\n         * @description Enables button\n         * @returns result\n         */\n        enable(): Button {\n            this.disabled = false;\n            this.ref('self').enable();\n\n            return this;\n        }\n\n        /**\n         * @description Marks button as busy\n         */\n        busy() {\n            this.isBusy = true;\n            this.ref('self').attr('aria-busy', 'true');\n        }\n\n        /**\n         * @description Marks button as unbusy\n         */\n        unbusy() {\n            this.isBusy = false;\n            this.ref('self').attr('aria-busy', 'false');\n        }\n\n        /**\n         * @description Marks button as selected\n         */\n        select() {\n            this.selected = true;\n            this.ref('self').attr('aria-selected', 'true');\n        }\n\n        /**\n         * @description Marks button as unselected\n         */\n        unselect() {\n            this.selected = false;\n            this.ref('self').attr('aria-selected', 'false');\n        }\n\n        /**\n         * @description Method to mark button as `pressed`.\n         * Used only for button with 2 different states when pressed and not pressed. Ex:\n         * Play / Paused; Favorite / Not favorite, etc.\n         */\n        press(): Button {\n            this.ref('self').attr('aria-pressed', 'true');\n\n            return this;\n        }\n\n        /**\n         * @description Method to mark button as `unpressed`. Used only in buttons with 2 states.\n         */\n        unpress(): Button {\n            this.ref('self').attr('aria-pressed', 'false');\n\n            return this;\n        }\n\n        /**\n         * @description Returns button name\n         */\n        getName(): string | RefElement {\n            return this.ref('self').attr('name');\n        }\n\n        /**\n         * @description Focus to element\n         */\n        focus(): Button {\n            this.ref('self').focus();\n\n            return this;\n        }\n\n        /**\n         * @description Sets button to be accountable with `tab` button navigation\n         */\n        setTabIndex(): Button {\n            this.ref('self').attr('tabindex', '0');\n\n            return this;\n        }\n\n        /**\n         * @description Sets button to be not accountable with `tab` button navigation\n         */\n        unsetTabIndex(): Button {\n            this.ref('self').attr('tabindex', '-1');\n\n            return this;\n        }\n\n        /**\n         * @description Keydown Event handler\n         * @param _ Source of keydown event\n         * @param event  Event object\n         * @listens dom:keydown\n         */\n        handleKeydown(_: HTMLElement, event: KeyboardEvent) {\n            let preventEventActions = false;\n\n            switch (event.keyCode) {\n                case keyCode.RETURN:\n                case keyCode.SPACE:\n                    this.handleClick();\n                    preventEventActions = true;\n\n                    break;\n\n                default:\n                    break;\n            }\n\n            if (preventEventActions) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n        }\n\n        /**\n         * @description Method to add class to widget container. Allows chaining.\n         * @param className a class name to add to widget container\n         * @returns result\n         */\n        addClass(className: string): Button {\n            this.ref('self').addClass(className);\n\n            return this;\n        }\n\n        /**\n         * @description Method to remove class from widget container. Allows chaining.\n         * @param className a class name to remove from widget container\n         * @returns result\n         */\n        removeClass(className: string): Button {\n            this.ref('self').removeClass(className);\n\n            return this;\n        }\n    }\n\n    return Button;\n}\n\nexport type TButton = ReturnType<typeof ButtonClassCreator>;\n\nexport type TButtonInstance = InstanceType<TButton>;\n\nexport default ButtonClassCreator;\n","/**\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} refElement\n */\n\n/**\n * @description Base ButtonWithIcon implementation\n * @param Button Base widget for extending\n */\nfunction ButtonWithIconClassCreator(Button: import('widgets/global/Button').TButton) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class ButtonWithIcon\n     * @augments Button\n     * @classdesc ButtonWithIcon widget, which could be used together with icon\n     * @property {string} data-widget - Widget name `processButton`\n     * @property {string} data-widget-event-click - Event listener to call Parent's widget method\n     * @property {string} data-event-click - Event listener method `handleClick` for click event on widget\n     * @example\n     * // use this code to display widget\n     * <button type=\"submit\" class=\"btn btn-block btn-primary\"\n     *     data-widget=\"buttonWithIcon\"\n     * >\n     *     <!-- svg icon below -->\n     *     <span>\n     *         <isinclude template=\"/common/svg/wishlist\" />\n     *     </span>\n     *\n     *     <span class=\"container\">\n     *         ${Resource.msg('button.text.loginform', 'login', null)}\n     *     </span>\n     * </button>\n     */\n    class ButtonWithIcon extends Button {\n        /**\n         * @description Get Text\n         * @returns Button Text\n         */\n        getText(): string {\n            return this.ref('container').getText();\n        }\n\n        /**\n         * @description Set Text\n         * @param val - Value to set as a text of the Button\n         * @returns Reference element\n         */\n        setText(val = '') {\n            return this.ref('container').setText(val);\n        }\n    }\n\n    return ButtonWithIcon;\n}\n\nexport type TButtonWithIcon = ReturnType<typeof ButtonWithIconClassCreator>;\n\nexport type TButtonWithIconInstance = InstanceType<TButtonWithIcon>;\n\nexport default ButtonWithIconClassCreator;\n","import { scrollElementTo } from 'widgets/toolbox/scroll';\nimport { getViewType } from 'widgets/toolbox/viewtype';\nimport cssLoadChecker from 'widgets/toolbox/cssLoadChecker';\nimport { timeout } from 'widgets/toolbox/util';\nimport { TWidget } from 'widgets/Widget';\nimport { TRefElementInstance } from 'widgets/toolbox/RefElement';\n\nconst DEFAULT_DIRECTION = 'horizontal';\n\nconst keyCode = Object.freeze({\n    RETURN: 13,\n    SPACE: 32\n});\n\n/**\n * @param Widget Base widget for extending\n * @returns Carousel class\n */\nfunction CarouselClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class Carousel\n     * @augments Widget\n     * @classdesc Represents Carousel component with next features:\n     * 1. Allow to set carousel direction based on the view type\n     * 2. Allow to use pagination for carousel rendered by mustache template\n     * 3. Allow to scroll carousel to the next/previous/custom( index can be passed to the method) page index\n     * 4. Allow to scroll by on the page click(can be used for carousel with thumbnails)\n     * 5. Allow to scroll to custom element's position\n     * 6. Allow to scroll to focused element\n     * 7. Support mousemove, touchmove, mouseup, mousedown, keydown event so we can use carousel even on touch devices.\n     * Also we can control carouse with keyboard\n     * 8. Allow to get carousel images\n     *\n     * <br>Uses as a basis slider from here (ScrollCarousel.js):\n     * <br>https://github.com/dimanech/aria-components/tree/master/cartridge1/js/components/carousels/carousel\n     * @property {string} data-widget - Widget name `carousel`\n     * @property {string} data-elem-prev-button - Previous button element\n     * @property {string} data-elem-next-button - Next button element\n     * @property {string} data-elem-carousel-track - Carousel inner element\n     * @property {string} data-direction - Carousel direction - an object, contains direction per viewport\n     * @example <caption>Example of Carousel widget usage</caption>\n     * <div\n     *     class=\"b-carousel\"\n     *     data-widget=\"carousel\"\n     *     data-direction='{\n     *         \"small\": \"horizontal\",\n     *         \"medium\": \"horizontal\",\n     *         \"large\": \"vertical\",\n     *         \"extraLarge\": \"vertical\"\n     *     }'\n     * >\n     *     <button\n     *         class=\"b-carousel-ctrl ${isRTL ? 'm-next' : 'm-prev'}\"\n     *         tabindex=\"-1\"\n     *         aria-hidden=\"true\"\n     *         title=\"${Resource.msg(isRTL ? 'button.previous' : 'button.next', 'common', null)}\"\n     *         data-ref=\"elemPrevButton\"\n     *         data-event-click=\"${isRTL ? 'scrollToNextPage' : 'scrollToPrevPage'}\"\n     *         data-tau=\"carousel_prev\"\n     *     >\n     *         <isinclude template=\"/common/icons/standalone/arrowCarouselLeft\" />\n     *     </button>\n     *     <button\n     *         class=\"b-carousel-ctrl ${isRTL ? 'm-prev' : 'm-next'}\"\n     *         tabindex=\"-1\"\n     *         aria-hidden=\"true\"\n     *         title=\"${Resource.msg(isRTL ? 'button.next' : 'button.previous', 'common', null)}\"\n     *         data-ref=\"elemNextButton\"\n     *         data-event-click=\"${isRTL ? 'scrollToPrevPage' : 'scrollToNextPage'}\"\n     *         data-tau=\"carousel_next\"\n     *     >\n     *         <isinclude template=\"/common/icons/standalone/arrowCarouselRight\" />\n     *     </button>\n     *     <div\n     *         class=\"b-carousel-track\"\n     *         data-ref=\"elemCarouselTrack\"\n     *         data-event-scroll.passive=\"onScroll\"\n     *         data-event-touchstart=\"onScroll\"\n     *         data-event-mousedown.prevent=\"onMouseDown\"\n     *         data-event-mouseup=\"onMouseUp\"\n     *     >\n     *         <isloop items=\"${slotcontent.content}\" var=\"product\" status=\"loopState\">\n     *             <div class=\"b-carousel-item\" data-tau=\"carousel_tile\">\n     *                 <isobject object=\"${product}\" view=\"recommendation\">\n     *                     <isinclude url=\"${URLUtils.url('Tile-Show', 'pid', product.ID, 'viewType', 'productCarousel')}\"/>\n     *                 </isobject>\n     *             </div>\n     *         </isloop>\n     *     </div>\n     * </div>\n     */\n    class Carousel extends Widget {\n        currentPage = 0;\n\n        pagination: Promise<HTMLElement> | undefined;\n\n        scrollingTimeoutValue = 60;\n\n        grabbingTimeoutValue = 200;\n\n        delta = 0;\n\n        roundingDelta = 1;\n\n        carouselDirection = DEFAULT_DIRECTION;\n\n        carouselDimension = 0;\n\n        initialCoordinate = 0;\n\n        initialScrollPosition = 0;\n\n        isScrollStart: boolean | undefined;\n\n        isScrollEnd: boolean | undefined;\n\n        isNavButtonClicked: boolean | undefined;\n\n        mouseMoveDisposable?: Array<() => void> | undefined;\n\n        mouseLeaveDisposable?: Array<() => void> | undefined;\n\n        scrollingTimeout: NodeJS.Timeout | undefined;\n\n        grabbingRemoveTimeout: NodeJS.Timeout | undefined;\n\n        isCallInNextFrameRequested: boolean | undefined;\n\n        prefs() {\n            return {\n                elemPrevButton: 'elemPrevButton',\n                elemNextButton: 'elemNextButton',\n                elemCarouselTrack: 'elemCarouselTrack',\n                classesInited: 'm-inited',\n                pageCurrentClass: 'm-current',\n                grabbingClass: 'm-grabbing',\n                mouseMoveNavigationClass: 'm-mousemove_navigation',\n                direction: {\n                    small: 'horizontal',\n                    medium: 'horizontal',\n                    large: 'horizontal',\n                    extraLarge: 'horizontal'\n                },\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Widget initialization\n         */\n        init() {\n            super.init();\n            // Async loading to not block other widget init\n            timeout(() => {\n                cssLoadChecker.get().then(() => this.initCarousel());\n            }, 0);\n        }\n\n        /**\n         * @description Initial carousel configuration\n         * @listens \"viewtype.change\"\n         */\n        initCarousel() {\n            this.defineCarouselDirection();\n            this.eventBus().on('viewtype.change', 'onViewtypeChange');\n            this.ev('focusin', this.handleScrollToFocusedItem, this.ref(this.prefs().elemCarouselTrack).get());\n\n            this.onScroll();\n            this.updateCarouselState();\n            this.initPagination();\n            this.setActivePagination();\n            this.getCarouselDimension();\n\n            this.onCarouselLoaded();\n            this.ref('self').addClass(this.prefs().classesInited);\n        }\n\n        /**\n         * @description Update carousel. Used on PDP variation change\n         * @returns Carousel instance\n         */\n        update(): Carousel {\n            this.updateCarouselMetric();\n            this.updateCarouselState();\n            this.initPagination();\n            this.setActivePagination();\n\n            return this;\n        }\n\n        onCarouselLoaded() {\n            // Placeholder for additional logic on carousel loading\n        }\n\n        /**\n         * @description Executed when widget is re-rendered\n        */\n        onRefresh() {\n            super.onRefresh();\n\n            this.update();\n            this.ref('self').addClass(this.prefs().classesInited);\n        }\n\n        /**\n         * @description Viewtype change event handler. Recalculates carousel dimension and redefines carousel direction.\n         */\n        onViewtypeChange() {\n            this.defineCarouselDirection();\n            this.getCarouselDimension();\n            this.updateCarouselMetric();\n            this.updateCarouselState();\n        }\n\n        /**\n         * @description Scroll carousel to the next page\n         * @listens dom#click\n         */\n        scrollToNextPage() {\n            const elemCarouselTrack = this.ref(this.prefs().elemCarouselTrack).get();\n\n            if (this.carouselDirection === 'horizontal') {\n                elemCarouselTrack?.scrollBy(this.carouselDimension, 0);\n            } else {\n                elemCarouselTrack?.scrollBy(0, this.carouselDimension);\n            }\n\n            this.isNavButtonClicked = true;\n        }\n\n        /**\n         * @description Scroll carousel to the previous page\n         * @listens dom#click\n         */\n        scrollToPrevPage() {\n            const elemCarouselTrack = this.ref(this.prefs().elemCarouselTrack).get();\n\n            if (this.carouselDirection === 'horizontal') {\n                elemCarouselTrack?.scrollBy(-this.carouselDimension, 0);\n            } else {\n                elemCarouselTrack?.scrollBy(0, -this.carouselDimension);\n            }\n\n            this.isNavButtonClicked = true;\n        }\n\n        /**\n         * @description Scroll carousel to the page index\n         * @param pageIndex Page index scroll to\n         * @returns Carousel instance\n         */\n        scrollToPage(pageIndex: number): Carousel {\n            const pageStarPoint = Math.round(this.carouselDimension * pageIndex);\n\n            if (this.carouselDirection === 'horizontal') {\n                this.scrollTo(0, pageStarPoint);\n            } else {\n                this.scrollTo(pageStarPoint, 0);\n            }\n\n            return this;\n        }\n\n        /**\n         * @description Scroll element to point\n         * @param top top position\n         * @param left left position\n         */\n        scrollTo(top: number, left: number) {\n            const elemCarouselTrack = this.ref(this.prefs().elemCarouselTrack).get();\n\n            if (elemCarouselTrack) {\n                scrollElementTo(elemCarouselTrack, top, left);\n            }\n        }\n\n        /**\n         * @description On scroll we update carousel controls state\n         */\n        onScroll() {\n            this.updateCarouselMetric();\n\n            if (!this.isCallInNextFrameRequested) {\n                window.requestAnimationFrame(this.updateDuringScroll.bind(this));\n\n                this.isCallInNextFrameRequested = true;\n            }\n        }\n\n        /**\n         * @description On carousel scroll end handler\n         * @emits Carousel#pagechanged\n         */\n        onScrollEnd() {\n            /**\n             * @description Event to carousel page change\n             * @event Carousel#pagechanged\n             */\n            const updatedPageIndex = this.getCurrentPageIndex();\n\n            if (updatedPageIndex !== this.currentPage) {\n                this.currentPage = updatedPageIndex;\n                this.emit('pagechanged', updatedPageIndex);\n            }\n\n            if (this.isNavButtonClicked) {\n                if (this.isScrollStart) {\n                    this.ref(this.prefs().elemNextButton).focus();\n                }\n\n                if (this.isScrollEnd) {\n                    this.ref(this.prefs().elemPrevButton).focus();\n                }\n\n                this.isNavButtonClicked = false;\n            }\n        }\n\n        /**\n         * @description Update carousel during scroll\n         */\n        updateDuringScroll() {\n            this.updateCarouselState();\n\n            if (this.pagination) {\n                this.setActivePagination();\n            } else {\n                this.initPagination();\n            }\n\n            if (this.scrollingTimeout) {\n                clearTimeout(this.scrollingTimeout);\n            }\n\n            this.scrollingTimeout = setTimeout(() => this.onScrollEnd(), this.scrollingTimeoutValue);\n\n            this.isCallInNextFrameRequested = false;\n        }\n\n        /**\n         * @description Update carousel state\n         */\n        updateCarouselState() {\n            const carousel = this.ref('self');\n            const elemPrevButton = this.ref(this.prefs().elemPrevButton);\n            const elemNextButton = this.ref(this.prefs().elemNextButton);\n\n            carousel.toggleClass('m-no_scroll', this.hasNoScroll());\n\n            if (this.isScrollStart) {\n                carousel.removeClass('m-prev_visible');\n                elemPrevButton.attr('disabled', '');\n            } else {\n                carousel.addClass('m-prev_visible');\n                elemPrevButton.attr('disabled', false);\n            }\n\n            if (this.isScrollEnd) {\n                carousel.removeClass('m-next_visible');\n                elemNextButton.attr('disabled', '');\n            } else {\n                carousel.addClass('m-next_visible');\n                elemNextButton.attr('disabled', false);\n            }\n        }\n\n        /**\n         * @description Update carousel metric\n         */\n        updateCarouselMetric() {\n            const carouselTrackElem = this.ref(this.prefs().elemCarouselTrack).get();\n            const carouselElem = this.ref('self').get();\n\n            const roundingDelta = this.roundingDelta;\n\n            if (carouselTrackElem && carouselElem) {\n                if (this.carouselDirection === 'horizontal') {\n                    const totalScrollWidth = Math.abs(carouselTrackElem.scrollLeft) + carouselElem.offsetWidth;\n\n                    // We are comparing with 1 instead of 0 as Chrome has a problem calculating the width with RTL text direction\n                    this.isScrollStart = Math.abs(carouselTrackElem.scrollLeft) <= 1;\n                    this.isScrollEnd = (totalScrollWidth + roundingDelta) >= carouselTrackElem.scrollWidth;\n                } else {\n                    const totalScrollHeight = carouselTrackElem.scrollTop + carouselElem.offsetHeight;\n\n                    this.isScrollStart = carouselTrackElem.scrollTop <= 0;\n                    this.isScrollEnd = (totalScrollHeight + roundingDelta) >= carouselTrackElem.scrollHeight;\n                }\n            }\n        }\n\n        /**\n         * @description Method to get carousel dimension (width or height) depending on carousel direction\n         * @returns width or height of carousel\n         */\n        getCarouselDimension(): number {\n            const carouselTrack = this.ref(this.prefs().elemCarouselTrack).get();\n\n            if (!carouselTrack) {\n                return 0;\n            }\n\n            this.carouselDimension = this.carouselDirection === 'horizontal'\n                ? carouselTrack.clientWidth\n                : carouselTrack.clientHeight;\n\n            return this.carouselDimension;\n        }\n\n        getCurrentScrollPosition(): number {\n            const carouselTrack = this.ref('elemCarouselTrack').get();\n\n            if (!carouselTrack) {\n                return 0;\n            }\n\n            return this.carouselDirection === 'horizontal' ? carouselTrack.scrollLeft : carouselTrack.scrollTop;\n        }\n\n        /**\n         * @description set carousel direction property from widget config\n         */\n        defineCarouselDirection() {\n            this.carouselDirection = this.prefs().direction[getViewType()] || DEFAULT_DIRECTION;\n        }\n\n        /**\n         * @description Check if carousel has no scroll\n         * @returns indicated is carousel has no scroll\n         */\n        hasNoScroll(): boolean {\n            return Boolean(this.isScrollStart && this.isScrollEnd);\n        }\n\n        // Swipe / Drag\n        // =====================================================================\n\n        /**\n         * @description Initialize mouse move handling on mouse down\n         * @listens dom#mousedown\n         * @param el source of event\n         * @param event event instance in DOM\n         */\n        onMouseDown(el: TRefElementInstance, event: MouseEvent) {\n            this.initialCoordinate = this.getCurrentCoordinate(event);\n            this.initialScrollPosition = this.getCurrentScrollPosition();\n\n            const elemCarouselTrack = this.ref(this.prefs().elemCarouselTrack).get();\n\n            if (!elemCarouselTrack) {\n                return;\n            }\n\n            elemCarouselTrack.classList.add(this.prefs().mouseMoveNavigationClass);\n\n            this.mouseMoveDisposable = this.ev<HTMLElement, MouseEvent>('mousemove', this.onMouseMove, elemCarouselTrack);\n            this.mouseLeaveDisposable = this.ev<HTMLElement, MouseEvent>('mouseleave', this.onMouseUp, elemCarouselTrack);\n\n            if (this.grabbingRemoveTimeout) {\n                clearTimeout(this.grabbingRemoveTimeout);\n            }\n        }\n\n        /**\n         * @description Handle Mouse/Touch move\n         * @listens dom#mousemove\n         * @listens dom#touchmove\n         * @param element HTMLElement\n         * @param event DOM event\n         */\n        onMouseMove(element: HTMLElement, event: TouchEvent | MouseEvent) {\n            const currentCoordinate = this.getCurrentCoordinate(event);\n\n            if (!this.initialCoordinate || this.initialCoordinate === currentCoordinate) {\n                return;\n            }\n\n            this.delta = (this.initialCoordinate - currentCoordinate);\n\n            const elemCarouselTrack = this.ref(this.prefs().elemCarouselTrack).get();\n\n            if (!elemCarouselTrack) {\n                return;\n            }\n\n            elemCarouselTrack.classList.add(this.prefs().grabbingClass);\n\n            if (!this.delta) {\n                return;\n            }\n\n            if (this.carouselDirection === 'horizontal') {\n                elemCarouselTrack.scrollLeft = this.initialScrollPosition + this.delta;\n            } else {\n                elemCarouselTrack.scrollTop = this.initialScrollPosition + this.delta;\n            }\n\n            // console.log(this.delta, elemCarouselTrack.scrollLeft)\n        }\n\n        /**\n         * @description Mouseup event handler\n         * @listens dom#mouseup\n         */\n        onMouseUp() {\n            if (this.mouseMoveDisposable) {\n                this.mouseMoveDisposable.forEach(disposable => disposable());\n                this.mouseMoveDisposable = undefined;\n            }\n\n            if (this.mouseLeaveDisposable) {\n                this.mouseLeaveDisposable.forEach(disposable => disposable());\n                this.mouseLeaveDisposable = undefined;\n            }\n\n            // we should remove scroll-snap-type with delay, otherwise it cause bouncing\n            const elemCarouselTrack = this.ref(this.prefs().elemCarouselTrack);\n\n            this.grabbingRemoveTimeout = setTimeout(\n                () => elemCarouselTrack.removeClass([\n                    this.prefs().grabbingClass,\n                    this.prefs().mouseMoveNavigationClass\n                ]),\n                this.grabbingTimeoutValue\n            );\n\n            this.delta = 0;\n        }\n\n        /**\n         * @description Method to get event coordinate depending on carousel direction\n         * @param event event object\n         * @returns event coordinate\n         */\n        getCurrentCoordinate(event: MouseEvent | TouchEvent) {\n            let currentCoordinate = 0;\n\n            if (event instanceof MouseEvent) {\n                currentCoordinate = this.carouselDirection === 'horizontal'\n                    ? event.clientX\n                    : event.clientY;\n            } else if (event instanceof TouchEvent) {\n                currentCoordinate = this.carouselDirection === 'horizontal'\n                    ? event.touches[0].pageX\n                    : event.touches[0].pageY;\n            }\n\n            return currentCoordinate;\n        }\n\n        // Pagination\n        // =====================================================================\n\n        /**\n         * @description Pagination init logic\n         */\n        initPagination() {\n            if (this.hasNoScroll()) {\n                return;\n            }\n\n            this.has('pagination', paginationRefEl => {\n                const pagination = paginationRefEl.get();\n\n                if (pagination) {\n                    // If empty pagination - we need to render it. Otherwise - create.\n                    if (pagination.innerHTML === '') {\n                        this.createPaginationElements();\n                    } else {\n                        this.pagination = Promise.resolve(pagination);\n                    }\n                }\n            });\n        }\n\n        /**\n         * @description Pagination click handler\n         * @listens dom#click\n         * @param el source of event\n         */\n        handlePaginationClick(el: TRefElementInstance) {\n            const pageIndex = el.data('page');\n\n            if (pageIndex !== null) {\n                this.scrollToPage(parseInt(pageIndex + '', 10));\n            }\n        }\n\n        /**\n         * @description Carousel page click handler\n         * @param el page element\n         * @listens dom#click\n         * @emits Carousel#pageclicked\n         */\n        onPageClick(el: TRefElementInstance) {\n            if (this.delta === 0) {\n                /**\n                 * @description Event to carousel page click\n                 * @event Carousel#pageclicked\n                 */\n                this.emit('pageclicked', el.data('page'));\n            }\n        }\n\n        /**\n         * @description Create Pagination elements for carousel\n         */\n        createPaginationElements() {\n            const elemCarouselTrack = this.ref(this.prefs().elemCarouselTrack).get();\n\n            if (!elemCarouselTrack) {\n                return;\n            }\n\n            // We need to use round, not ceil, since it called on scroll,\n            // in case of last it would generate falls positive\n            const numberOfPages = Math.round(elemCarouselTrack.scrollWidth / elemCarouselTrack.clientWidth);\n            const pagination = new Array(numberOfPages).fill(0).map((_el, i) => ({ page: i }));\n\n            this.pagination = new Promise((resolve) => {\n                this.render(undefined, { pagination }, this.ref('pagination')).then(() => {\n                    // @ts-ignore possibly undefined\n                    return resolve(this.ref('pagination').get());\n                });\n            });\n        }\n\n        /**\n         * @description Set active pagination\n         */\n        setActivePagination() {\n            if (!this.pagination) {\n                return;\n            }\n\n            this.pagination.then((pagination: HTMLElement) => {\n                if (!pagination) {\n                    return;\n                }\n\n                const currentPageIndex = this.getCurrentPageIndex();\n                const currentPageNode = pagination.children[currentPageIndex];\n\n                if (!currentPageNode) {\n                    this.initPagination();\n                }\n\n                pagination.children[this.currentPage || 0].classList.remove(\n                    this.prefs().pageCurrentClass\n                );\n\n                currentPageNode.classList.add(this.prefs().pageCurrentClass);\n\n                this.currentPage = currentPageIndex;\n            });\n        }\n\n        /**\n         * @description Get current carousel page index\n         * @returns Current carousel page index\n         */\n        getCurrentPageIndex(): number {\n            const carouselTrackElem = this.ref(this.prefs().elemCarouselTrack).get();\n\n            if (!(carouselTrackElem instanceof HTMLElement)) {\n                return 0;\n            }\n\n            const currentPosition = this.carouselDirection === 'horizontal'\n                ? carouselTrackElem.scrollLeft : carouselTrackElem.scrollTop;\n\n            const pageDimension = this.carouselDirection === 'horizontal'\n                ? carouselTrackElem.clientWidth : carouselTrackElem.clientHeight;\n\n            return Math.round((currentPosition || 0) / (pageDimension || 1));\n        }\n\n        // Pagination methods related to PDP gallery\n        // =====================================================================\n\n        /**\n         * @description Adds some defined class on carousel inner elements\n         * @param pageIndex - element index\n         * @returns carousel instance\n         */\n        markCurrentPage(pageIndex: number): Carousel {\n            const elemCarouselTrack = this.ref(this.prefs().elemCarouselTrack).get();\n\n            [].slice.call((elemCarouselTrack?.children)).forEach((element: HTMLElement) => {\n                const dataPage = parseInt(((element && element.getAttribute('data-page')) || '0'), 10);\n\n                element.classList.toggle(this.prefs().pageCurrentClass, dataPage === pageIndex);\n            });\n\n            return this;\n        }\n\n        /**\n         * @description Scrolls active element into carousel viewport.\n         * This might be useful when using dependent carousels, like on PDP images/thumbnails\n         * @returns carousel instance\n         */\n        scrollIntoView(): Carousel {\n            const elemCarouselTrack = this.ref(this.prefs().elemCarouselTrack).get();\n\n            if (!elemCarouselTrack) {\n                return this;\n            }\n\n            // @ts-ignore possibly undefined current element\n            const currentElement: HTMLElement = [].find.call(\n                elemCarouselTrack.children,\n                (element: HTMLElement) => {\n                    return element.classList.contains(this.prefs().pageCurrentClass);\n                }\n            );\n\n            if (!currentElement) {\n                return this;\n            }\n\n            if (this.carouselDirection === DEFAULT_DIRECTION) {\n                if ((currentElement.offsetLeft + currentElement.clientWidth)\n                    > (elemCarouselTrack.scrollLeft + elemCarouselTrack.clientWidth)\n                    || (currentElement.offsetLeft < elemCarouselTrack.scrollLeft)) {\n                    this.scrollTo(0, currentElement.offsetLeft);\n                }\n            } else {\n                // eslint-disable-next-line no-lonely-if\n                if ((currentElement.offsetTop + currentElement.clientHeight)\n                    > (elemCarouselTrack.scrollTop + elemCarouselTrack.clientHeight)\n                    || (currentElement.offsetTop < elemCarouselTrack.scrollTop)) {\n                    this.scrollTo(currentElement.offsetTop, 0);\n                }\n            }\n\n            return this;\n        }\n\n        /**\n         * @description Programmatically handle scroll to focused carousel item.\n         * This is the fix for Chrome bug where it could not calculate item boundaries properly\n         * and threat item like it into view. The bug is on PDP Gallery.\n         * Applicable only for horizontal scroll.\n         */\n        handleScrollToFocusedItem() {\n            if (this.carouselDirection !== 'horizontal') { return; }\n\n            const track = this.ref(this.prefs().elemCarouselTrack).get();\n            const activeItem = document.activeElement;\n\n            if (!activeItem || !(activeItem instanceof HTMLElement) || !track) {\n                return;\n            }\n\n            const activeItemLeft = activeItem.getBoundingClientRect().left;\n            const activeItemRight = activeItemLeft + activeItem.getBoundingClientRect().width;\n            const trackStart = track.getBoundingClientRect().left;\n            const trackEnd = trackStart + track.clientWidth;\n\n            if (activeItemRight >= trackEnd) {\n                track.scrollBy(activeItemRight - trackEnd, 0);\n            } else if (activeItemLeft <= trackStart) {\n                track.scrollBy(activeItemLeft - trackStart, 0);\n            }\n        }\n\n        /**\n         * @description Next/Prev Buttons keyboard handler. Used only on PDP gallery\n         * we need this method to prevent Zoom opened on Enter and able to focus carousel pagination\n         * @listens dom#keydown\n         * @param element dom node that trigger the event\n         * @param event  Event object\n         */\n        handleKeydown(element: TRefElementInstance, event: KeyboardEvent) {\n            if (event.keyCode === keyCode.RETURN || event.keyCode === keyCode.SPACE) {\n                event.stopPropagation();\n                this.onPageClick(element);\n            }\n        }\n    }\n\n    return Carousel;\n}\n\nexport type TCarousel = ReturnType<typeof CarouselClassCreator>;\n\nexport type TCarouselInstance = InstanceType<TCarousel>;\n\nexport default CarouselClassCreator;\n","/**\n * @description Base ConfirmDialog implementation\n * @param Modal Base Modal widget for extending\n * @returns Confirmation Dialog class\n */\nfunction ConfirmDialogClassCreator(Modal: ReturnType <typeof import('widgets/global/Modal').default>) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class ConfirmDialog\n     * @augments Modal\n     * @classdesc Confirm dialog, which could be used to confirm an action in different contexts, like\n     * - Remove coupon from the cart\n     * - Remove product from the cart\n     * Can have different markup, but serves 3 actions: `confirm`, `cancel` and `alternativeconfirm`\n     * Emits 3 events: {@link ConfirmDialog#event:confirm}, {@link Modal#event:cancel} and {@link ConfirmDialog#event:alternativeconfirm} to notify parents about user triggered action.\n     * @property {string} data-widget - Widget name `confirmDialog`\n     * @property {string} data-widget-event-confirm - method to be triggered on parent's widget, once customer confirms dialog\n     * @property {string} data-widget-event-alternativeConfirm - method to be triggered on parent's widget, once customer confirms dialog\n     * @property {string} data-widget-event-cancel - method to be triggered on parent's widget, once customer cancels dialog\n     *\n     * @example <caption>Example of Modal widget</caption>\n     * <div\n     *     data-widget=\"confirmDialog\"\n     *     data-id=\"confirmDialog\"\n     *     data-ref-first-focus-element=\"firstFocusElement\"\n     *     data-ref-last-focus-element=\"lastFocusElement\"\n     *     data-focus-loop=\"true\"\n     *     data-widget-event-confirm=\"confirmedRemoveAddress\"\n     * >\n     *     <div\n     *         class=\"b-dialog\"\n     *         data-ref=\"container\"\n     *         aria-busy=\"true\"\n     *         hidden=\"hidden\"\n     *     ></div>\n     *     <script type=\"template/mustache\" data-ref=\"template\">\n     *         <div\n     *             class=\"b-dialog\"\n     *             data-ref=\"container\"\n     *             aria-busy=\"false\"\n     *         >\n     *             <div\n     *                 data-ref=\"dialog\"\n     *                 class=\"b-dialog-window\"\n     *                 role=\"dialog\"\n     *                 aria-modal=\"true\"\n     *                 aria-label=\"${Resource.msg('deleteAddressConfirmation.title','address',null)}\"\n     *                 aria-describedby=\"remove-address-confirmation-body\"\n     *             >\n     *                 ... dialog content\n     *\n     *                 <div class=\"b-dialog-footer m-actions\">\n     *                     <button\n     *                         type=\"button\"\n     *                         class=\"b-button\"\n     *                         data-dismiss=\"modal\"\n     *                         data-event-click.prevent=\"confirm\"\n     *                     >\n     *                         ${Resource.msg('deleteAddressConfirmation.confirm','address',null)}\n     *                     </button>\n     *                     <button\n     *                         type=\"button\"\n     *                         class=\"b-button m-outline\"\n     *                         data-event-click.prevent=\"cancel\"\n     *                         data-dismiss=\"modal\"\n     *                         data-ref=\"lastFocusElement\"\n     *                     >\n     *                         ${Resource.msg('deleteAddressConfirmation.cancel','address',null)}\n     *                     </button>\n     *                 </div>\n     *             </div>\n     *         </div>\n     *     </script>\n     * </div>\n     */\n    class ConfirmDialog extends Modal {\n        /**\n         * @description Confirm Handler\n         * @emits ConfirmDialog#confirm\n         */\n        confirm() {\n            this.closeModal();\n            /**\n             * @description Event dispatched, when modal `confirm` button was pressed\n             * @event ConfirmDialog#confirm\n             */\n            this.emit('confirm');\n        }\n\n        /**\n         * @description alternativeConfirm Handler\n         * @emits ConfirmDialog#alternativeconfirm\n         */\n        alternativeConfirm() {\n            this.closeModal();\n            /**\n             * @description Event dispatched, when modal alternative button (not `cancel` and not `confirm`) was pressed\n             * @event ConfirmDialog#alternativeconfirm\n             */\n            this.emit('alternativeconfirm');\n        }\n    }\n\n    return ConfirmDialog;\n}\n\nexport type TConfirmDialog = ReturnType<typeof ConfirmDialogClassCreator>;\n\nexport type TConfirmDialogInstance = InstanceType<TConfirmDialog>;\n\nexport default ConfirmDialogClassCreator;\n","import { TWidget } from 'widgets/Widget';\n\n/**\n * @param Widget Base widget for extending\n * @returns ConnectionMonitor class\n */\nfunction ConnectionMonitorClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class ConnectionMonitor\n     * @augments Widget\n     * @classdesc Connection monitor component to notify the user about the loss of connection\n     *\n     * @example <caption>Example of Modal widget</caption>\n     * <div data-widget=\"connectionMonitor\">\n     *     <div data-ref=\"container\" hidden=\"hidden\"></div>\n     *\n     *     <script type=\"template/mustache\" data-ref=\"template\">\n     *         <div\n     *             id=\"connection-dialog\"\n     *             role=\"alert\"\n     *             class=\"b-message m-error b-connection_monitor\"\n     *             data-ref=\"container\"\n     *         >\n     *             <div class=\"b-connection_monitor-inner\">\n     *                 ... connection monitor content\n     *             </div>\n     *             <button\n     *                 class=\"b-connection_monitor-btn\"\n     *                 aria-controls=\"connection-dialog\"\n     *                 aria-label=\"${Resource.msg('common.close', 'common', null)}\"\n     *                 title=\"${Resource.msg('common.close', 'common', null)}\"\n     *                 type=\"button\"\n     *                 data-event-click=\"hideAlert\"\n     *             >\n     *                 <isinclude template=\"/common/icons/standalone/close\" />\n     *             </button>\n     *         </div>\n     *     </script>\n     * </div>\n     */\n    class ConnectionMonitor extends Widget {\n        isContentInserted: boolean | undefined;\n\n        prefs() {\n            return {\n                connectionTimeoutValue: 3000,\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n\n            this.ev<HTMLElement, Event>('offline', this.onOffline, window);\n            this.ev<HTMLElement, Event>('online', this.onOnline, window);\n        }\n\n        /**\n         * @description Shows Alert message in case if client goes offline\n         */\n        onOffline() {\n            this.showAlert();\n        }\n\n        /**\n         * @description Calls hiding alert after the delay time\n         */\n        onOnline() {\n            setTimeout(() => {\n                this.hideAlert();\n            }, this.prefs().connectionTimeoutValue);\n        }\n\n        /**\n         * @description Insert alert content or just show it up when browser if offline\n         */\n        showAlert() {\n            if (this.isContentInserted) {\n                this.ref('container').show();\n            } else {\n                this.insertAlertContent();\n            }\n        }\n\n        /**\n         * @description Hides an Alert message\n         */\n        hideAlert() {\n            this.ref('container').hide();\n        }\n\n        /**\n         * @description insert dialog content. We use raw insertion because when\n         * user offline it is impossible to load chunk with mustache and diff-dom\n         */\n        insertAlertContent() {\n            const alertContent = this.ref('template').get(0);\n            const container = this.ref('container').get(0);\n\n            if (alertContent && container) {\n                container.innerHTML = alertContent.innerText;\n                this.isContentInserted = true;\n                container.querySelector('button')?.addEventListener('click', this.hideAlert);\n            }\n        }\n    }\n\n    return ConnectionMonitor;\n}\n\nexport type TConnectionMonitor = ReturnType<typeof ConnectionMonitorClassCreator>;\n\nexport type TConnectionMonitorInstance = InstanceType<TConnectionMonitor>;\n\nexport default ConnectionMonitorClassCreator;\n","import { TWidget } from 'widgets/Widget';\nimport { submitFormJson } from '../toolbox/ajax';\nimport { setCookie, getCookie } from '../toolbox/cookie';\n\nfunction ConsentTrackingClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class ConsentTracking\n     * @augments Widget\n     * @classdesc ConsentTracking Widget - used to expose Consent dialog, where customer can either accept\n     * <br>or reject Consent matter. Relevant methods will be triggered pressing related buttons\n     * @property {string} data-widget - Widget name `consentTracking`\n     * @property {string} data-reject-url - Customer chooses `reject` - request will be sent to Reject URL\n     * @property {string} data-accept-url - Customer chooses `accept` - request will be sent to Accept URL\n     * @example <caption>Example of ConsentTracking widget usage</caption>\n     * <div\n     *     data-widget=\"consentTracking\"\n     *     data-reject-url=\"${URLUtils.url('ConsentTracking-SetSession', 'consent', 'false')}\"\n     *     data-accept-url=\"${URLUtils.url('ConsentTracking-SetSession', 'consent', 'true')}\"\n     *     data-tracking-selected=\"${pdict.tracking_consent != null}\"\n     *     data-consent-api=\"${pdict.caOnline}\"\n     * >\n     *     <div\n     *         id=\"consent-dialog\"\n     *         class=\"b-notification_dialog\"\n     *         data-tau=\"consent-dialog\"\n     *     >\n     *         <div class=\"b-notification_dialog-inner\">\n     *             <div class=\"b-notification_dialog-content\">\n     *                 <iscontentasset aid=\"tracking_hint\" />\n     *             </div>\n     *             <button\n     *                 class=\"b-notification_dialog-button b-button m-outline\"\n     *                 aria-controls=\"consent-dialog\"\n     *                 type=\"button\"\n     *                 data-event-click=\"accept\"\n     *                 data-tau=\"consent-dialog_accept\"\n     *             >\n     *                 ${Resource.msg('tracking.accept', 'global', '')}\n     *             </button>\n     *             <button\n     *                 class=\"b-notification_dialog-button b-button m-outline\"\n     *                 aria-controls=\"consent-dialog\"\n     *                 type=\"button\"\n     *                 data-event-click=\"reject\"\n     *                 data-tau=\"consent-dialog_reject\"\n     *             >\n     *                 <isprint value=\"${Resource.msg('tracking.decline', 'global', '')}\" encoding=\"off\" />\n     *             </button>\n     *         </div>\n     *     </div>\n     * </div>\n     */\n    class ConsentTracking extends Widget {\n        prefs() {\n            return {\n                acceptUrl: '',\n                rejectUrl: '',\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            if (!window.sfccUnCachedData?.consentTrackingHint) {\n                return;\n            }\n\n            if (getCookie('dw_accept_cookie') === '1') {\n                return;\n            }\n\n            this.ref('self')\n                .show()\n                .attr('role', 'alert');\n        }\n\n        /**\n         * @description Toggle Panel visibility\n         * @param isVisible - `true` if Consent's dialog should be shown, `false` - otherwise\n         */\n        togglePanel(isVisible: boolean) {\n            this.ref('self').toggle(isVisible);\n        }\n\n        /**\n         * @description Accept Consent handler\n         * @listens dom#click\n         * @returns Promise object represents server response for consent tracking accepting\n         */\n        accept(): Promise<Record<string, unknown>> {\n            return submitFormJson(this.prefs().acceptUrl, undefined, 'POST').finally(() => {\n                this.togglePanel(false);\n                setCookie('dw_accept_cookie', '1', 365, true);\n                setCookie('dw_consent_cookie', '1', 365, true);\n            });\n        }\n\n        /**\n         * @description Reject Consent handler\n         * @listens dom#click\n         * @returns Promise object represents server response for consent tracking rejection\n         */\n        reject(): Promise<Record<string, unknown>> {\n            return submitFormJson(this.prefs().rejectUrl, undefined, 'POST').finally(() => {\n                this.togglePanel(false);\n                setCookie('dw_accept_cookie', '1', 365, true);\n            });\n        }\n    }\n\n    return ConsentTracking;\n}\n\nexport type TConsentTracking = ReturnType<typeof ConsentTrackingClassCreator>;\n\nexport type TConsentTrackingInstance = InstanceType<TConsentTracking>;\n\nexport default ConsentTrackingClassCreator;\n","import { TWidget } from 'widgets/Widget';\nimport { getContentByUrl } from 'widgets/toolbox/ajax';\n\n/**\n * @param Widget Base widget for extending\n */\nfunction ContentLoaderClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class ContentLoader\n     * @augments Widget\n     * @classdesc ContentLoader Widget - used to dynamically load content using ajax\n     * @property {string} data-widget - Widget name `contentLoader`\n     * @property {string} data-url - URL to obtain content from server\n     * @example <caption>Example of ContentLoader widget usage</caption>\n     * <div\n     *     data-widget=\"contentLoader\"\n     *     data-url=\"${URLUtils.url('Page-IncludeHeaderMenu')}\"\n     * >\n     * </div>\n     */\n    class ContentLoader extends Widget {\n        prefs() {\n            return {\n                url: '',\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            getContentByUrl(this.prefs().url)\n                .then(response => {\n                    const container = this.ref('self').get(0);\n\n                    if (container) {\n                        container.innerHTML = response;\n                    }\n                });\n        }\n    }\n\n    return ContentLoader;\n}\n\nexport type TContentLoader = ReturnType<typeof ContentLoaderClassCreator>;\n\nexport type TContentLoaderInstance = InstanceType<TContentLoader>;\n\nexport default ContentLoaderClassCreator;\n","import { TWidget } from 'widgets/Widget';\n\n/**\n * @param Widget Base widget for extending\n */\nfunction ContextLoaderClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class ContextLoader\n     * @augments Widget\n     * @classdesc ContextLoader Widget - used to initialize context for the page for async loading dependent widgets lists (widgets inside wouldn't be initialized)\n     * @property {string} data-widget - Widget name `contextLoader`\n     * @property {string} data-context - context id to be added\n     * @property {string} data-init-on-load - add context during widget initialization\n     * @property {string} data-init-on-viewport - add context when widget in viewport\n     * @property {string} data-loaded - override loading status\n     * @example <caption>Example of ContextLoader widget usage</caption>\n     * <div\n     *     data-widget=\"contextLoader\"\n     *     data-context=\"header\"\n     *     data-init-on-load=\"loadContext\"\n     * >\n     *    ... content\n     * </div>\n     */\n    class ContextLoader extends Widget {\n        loaded = false;\n\n        observer: IntersectionObserver | undefined;\n\n        prefs() {\n            return {\n                initOnLoad: false,\n                initOnViewport: false,\n                loaded: false,\n                context: '',\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            this.loaded = this.prefs().loaded;\n\n            if (!this.prefs().context) {\n                throw new Error('Context must be initialized!');\n            }\n\n            if (this.prefs().initOnLoad) {\n                this.loadContext();\n            } else if (this.prefs().initOnViewport) {\n                this.observer = new IntersectionObserver(([entry]) => this.onIntersection(entry), {\n                    threshold: 0.1, // 10% of element became visible\n                    rootMargin: '200px' // add margin around viewport\n                });\n                const widgetElement = this.ref('self').get();\n\n                if (widgetElement) {\n                    this.observer.observe(widgetElement); // start observing widget's DOM entry point\n                }\n            }\n        }\n\n        /**\n         * @param [entry] entry from observer\n         */\n        onIntersection(entry) {\n            if (entry && entry.isIntersecting && this.observer) {\n                this.observer.disconnect();\n                this.observer = undefined;\n                this.loadContext();\n            }\n        }\n\n        loadContext() {\n            if (this.loaded) {\n                return;\n            }\n\n            if (this.prefs().context) {\n                this.prefs().context.split(' ').forEach((context) => {\n                    this.eventBus().emit('context.add', context);\n                });\n\n                this.loaded = true;\n            }\n        }\n    }\n\n    return ContextLoader;\n}\n\nexport type TContextLoader = ReturnType<typeof ContextLoaderClassCreator>;\n\nexport type TContextLoaderInstance = InstanceType<TContextLoader>;\n\nexport default ContextLoaderClassCreator;\n","import { TWidget } from 'widgets/Widget';\n\n/**\n * @description Base Disclosure implementation\n * @param Widget Base widget for extending\n * @returns Disclosure class\n */\nfunction DisclosureClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class Disclosure\n     * @augments Widget\n     * @classdesc Accessibility [Disclosure component](https://www.w3.org/TR/wai-aria-practices/#disclosure).\n     * @property {string} data-widget - Widget name `disclosure`\n     * @property {boolean} data-show-on-init - If we need to show disclosure content on init\n     * @property {boolean} data-show-on-refresh - If we need to show disclosure on refresh (for ex. after re-render parent widget)\n     * @example <caption>Typical Disclosure widget markup</caption>\n     * <div\n     *    class=\"b-disclosure\"\n     *     data-widget=\"disclosure\"\n     *     data-show-on-init=\"false\"\n     *     data-show-on-refresh=\"false\"\n     * >\n     *     <button\n     *         class=\"b-disclosure-button\"\n     *         type=\"button\"\n     *         data-event-click=\"toggleContent\"\n     *         aria-expanded=\"false\"\n     *         aria-controls=\"coupon-form\"\n     *         data-ref=\"disclosureButton\"\n     *     >\n     *         Show more\n     *     </button>\n     *     <div\n     *         class=\"b-disclosure-content\"\n     *         data-ref=\"disclosureContent\"\n     *         id=\"coupon-form\"\n     *         hidden=\"hidden\"\n     *     >\n     *         <div class=\"b-disclosure-content_inner\">\n     *             ... content\n     *         </div>\n     *     </div>\n     * </div>\n     */\n    class Disclosure extends Widget {\n        prefs() {\n            return {\n                disclosureButton: 'disclosureButton',\n                disclosureContent: 'disclosureContent',\n                showOnInit: false,\n                showOnRefresh: false,\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n\n            this.hideContent();\n\n            if (this.prefs().showOnInit) {\n                this.showContent();\n            }\n        }\n\n        /**\n         * @description Happens on widget refresh and is needed to handle updated state\n         */\n        onRefresh() {\n            this[this.prefs().showOnRefresh ? 'showContent' : 'hideContent']();\n        }\n\n        /**\n         * @description Toggles disclosure content\n         * @listens dom#click\n         */\n        toggleContent() {\n            const isContentHidden = this.ref('disclosureContent').hasAttr('hidden');\n\n            this[isContentHidden ? 'showContent' : 'hideContent']();\n\n            if (isContentHidden) {\n                this.ref('disclosureButton').focus();\n            } else {\n                this.focusContent();\n            }\n        }\n\n        /**\n         * @description Show disclosure content and update related attributes\n         */\n        showContent() {\n            this.ref('disclosureContent').show().attr('aria-hidden', 'false');\n            this.ref('disclosureButton').attr('aria-expanded', 'true');\n        }\n\n        /**\n         * @description Hide disclosure content and update related attributes\n         */\n        hideContent() {\n            this.ref('disclosureContent').hide().attr('aria-hidden', 'true');\n            this.ref('disclosureButton').attr('aria-expanded', 'false');\n        }\n\n        /**\n         * @description Navigate focus to button or input when content is opened / closed.\n         * This handler called only when user click trigger button.\n         */\n        focusContent() {\n            if (!this.ref('disclosureContent').hasAttr('hidden')) {\n                // class AccessibilityFocusMixin, method focusFirstInput\n                this.callIfExists('focusFirstInput', 'disclosureContent');\n            }\n        }\n    }\n\n    return Disclosure;\n}\n\nexport type TDisclosure = ReturnType<typeof DisclosureClassCreator>;\n\nexport type TDisclosureInstance = InstanceType<TDisclosure>;\n\nexport default DisclosureClassCreator;\n","import { TWidget } from 'widgets/Widget';\n\n/**\n * @param Widget Base widget for extending\n * @returns DismissBlock widget\n */\nfunction DismissBlockClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class DismissBlock\n     * @augments Widget\n     * @classdesc DismissBlock widget used for display notification about using a cookie.\n     * Allow dismissing the notification by handle customer's click on the Accept button\n     * @property {string} data-widget - Widget name `dismissBlock`\n     * @property {string} data-key - Key for window.sessionStorage to store header banner display status.\n     * If value exists - header will not be shown.\n     * @example <caption>Example of DismissBlock widget usage</caption>\n     * <div\n     *     role=\"alert\"\n     *     data-widget=\"dismissBlock\"\n     *     data-key=\"hide_header_banner\"\n     * >\n     *     ... widget markup\n     *     <button data-event-click.once.prevent=\"dismiss\">Accept</button>\n     * </div>\n     */\n    class DismissBlock extends Widget {\n        prefs() {\n            return {\n                classesEnabled: 'm-visible',\n                key: 'hide_cookies_notification',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Initialize widget logic\n         */\n        init() {\n            super.init();\n\n            const dismissBlockStatus = window.sessionStorage.getItem(this.prefs().key);\n\n            if (!dismissBlockStatus || dismissBlockStatus === '0') {\n                this.ref('self').addClass(this.prefs().classesEnabled);\n            }\n        }\n\n        /**\n         * @description Dismiss cookie notification\n         * @listens dom#click\n         */\n        dismiss() {\n            this.ref('self').removeClass(this.prefs().classesEnabled);\n            window.sessionStorage.setItem(this.prefs().key, '1');\n        }\n    }\n\n    return DismissBlock;\n}\n\nexport type TDismissBlock = ReturnType<typeof DismissBlockClassCreator>;\n\nexport type TDismissBlockInstance = InstanceType<TDismissBlock>;\n\nexport default DismissBlockClassCreator;\n","import { TWidget } from 'widgets/Widget';\n\n/**\n * @param Widget Base widget for extending\n * @returns EmitBusEvent widget\n */\nfunction EmitBusEventClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class EmitBusEvent\n     * @augments Widget\n     * @classdesc Could be used to trigger any global event using interaction element\n     * <br>Could be useful to emit global events like `page.show.globalmodal` to notify\n     * <br>concerned widgets, so they could change page layout class etc.\n     * <br>Event emission could happens mostly on UI elements like links, buttons etc.\n     * @property {string} data-widget - Widget name `emitBusEvent`\n     * @property {string} data-bus-event-type - Global event type, which should be triggered\n     * @property {string} data-event-click - Event listener to trigger `emitBusEvent` method\n     * @property {string} data-url - any kind of additional properties\n     *\n     * @example <caption>Example of EmitBusEvent widget usage</caption>\n     * <button\n     *     data-widget=\"emitBusEvent\"\n     *     data-bus-event-type=\"dialogshow\"\n     *     data-event-click.prevent=\"emitBusEvent\"\n     *     data-modal-config='{\n     *         \"url\": \"${URLUtils.url('Page-LocaleContent')}\",\n     *         \"headerText\": \"${Resource.msg('form.countrySelector.title', 'forms', null)}\"\n     *     }'\n     * >\n     *     ... content\n     * </button>\n     */\n    class EmitBusEvent extends Widget {\n        prefs() {\n            return {\n                busEventType: '',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Emit event\n         */\n        emitBusEvent() {\n            if (this.prefs().busEventType) {\n                this.eventBus().emit(this.prefs().busEventType, this);\n            }\n        }\n    }\n\n    return EmitBusEvent;\n}\n\nexport type TEmitBusEvent = ReturnType<typeof EmitBusEventClassCreator>;\n\nexport type TEmitBusEventInstance = InstanceType<TEmitBusEvent>;\n\nexport default EmitBusEventClassCreator;\n","import { timeout } from 'widgets/toolbox/util';\nimport { debounce } from 'widgets/toolbox/debounce';\nimport { TWidget } from 'widgets/Widget';\n\ntype TEvFunction = InstanceType<TWidget>['ev'];\n\nconst KEY_TAB = 9;\n\ntype TRefElementInstance = InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>;\ntype TDomNode = HTMLTextAreaElement | HTMLInputElement | HTMLElement;\n\n/**\n * @description Focus highlighter\n * @param Widget Base widget for extending\n * @returns Focus Highlighter class\n */\nfunction FocusHighlighterClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class FocusHighlighter\n     * @augments Widget\n     * @classdesc This class intended to address Accessibility issue with focus highlighting on links element.\n     * Usually used on `<body>` tag to observe focus move events\n     *\n     * In case if page was focused, next subsequent `TAB` press will leads to next available link/input element focus highlighting\n     * Shows bordered rectangle, which fits currently focused element and moves rectangle to element's position.\n     * @property {string} data-widget - Widget name `focusHighlighter`\n     * @property {string} data-event-keyup - Event handler for `handleKeyup` method\n     * @property {string} data-event-click - Event handler for `handleClick` method\n     * @property {string} data-classes-inited - Inited classes, added to element after initialization\n     * @property {string} data-classes-hurry - Classes, which don't contains animation and used to move `highlighter` (bordered rectangle) between focused elements without animation.\n     *\n     * @example <caption>FocusHighlighter widget</caption>\n     * <body\n     *     class=\"l-page\"\n     *     id=\"page-body\"\n     *     data-widget=\"focusHighlighter\"\n     *     data-event-keyup=\"handleKeyup\"\n     *     data-event-click=\"handleClick\"\n     * >\n     *     ... page content here\n     * </body>\n     */\n    class FocusHighlighter extends Widget {\n        lastFocusedElement?: HTMLElement;\n\n        recheckTimeout?: ReturnType<typeof timeout>;\n\n        recheckSecondTimeout?: ReturnType<typeof timeout>;\n\n        hideTimeOut?: ReturnType<typeof timeout>;\n\n        focusinHandlers?: ReturnType<TEvFunction>;\n\n        lastKeyTime?: number;\n\n        isHurryNavigation?: boolean;\n\n        lastFocusedElementCoords = '';\n\n        keyboardModality = false;\n\n        isHighlighterVisible = false;\n\n        observer?: MutationObserver;\n\n        prefs() {\n            return {\n                classesHighlighter: 'b-highlighter',\n                classesInited: 'b-highlighter_inited',\n                classesEnabled: 'm-visible',\n                classesHurry: 'm-hurry',\n                DELAY_TIMEOUT: 200, // Delay for animation\n\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Widget initialization logic\n         */\n        init(): void {\n            this.ref('self').addClass(this.prefs().classesInited);\n            this.ev('resize', debounce(this.handleResize.bind(this), 200), window);\n            this.eventBus().on('rendering.applied', 'handleResize');\n            this.eventBus().on('highlighter.update', 'updateHighlighter');\n\n            // We need to set focus highlighter with a delay since we have CSS animation\n            this.observer = new MutationObserver(debounce(this.handleMutations.bind(this), 500));\n        }\n\n        /**\n         * @description Returns document width without scroll bar\n         * @returns Document width without scroll bar\n         */\n        getDocumentWidth(): number {\n            const clientWidth = document.documentElement.clientWidth || document.body.clientWidth;\n\n            return clientWidth === window.innerWidth ? window.innerWidth : clientWidth;\n        }\n\n        /**\n         * @param ref - key up event referenced element\n         * @param event - key up event\n         * @listens dom#keyup\n         */\n        handleKeyup(ref: TRefElementInstance, event: KeyboardEvent): void {\n            if (event.keyCode === KEY_TAB) {\n                this.enableHighlighter();\n            }\n        }\n\n        /**\n         * @param ref - click event referenced element\n         * @param event - click event\n         * @listens dom#click\n         */\n        handleClick(ref: TRefElementInstance, event: MouseEvent): void {\n            if (!this.keyboardModality) {\n                return;\n            }\n\n            const target = event.target;\n\n            // When select HTMLElement popup open via keyboard click event is\n            // synthetically clicked\n            const isSelect = target instanceof HTMLSelectElement;\n\n            // Space key up on button HTML element generates synthetic click.\n            // We do not find cross browser solution to detect this synthetical click\n            // We prevent to hide focus frame when click on buttons\n            const isButton = target instanceof HTMLButtonElement\n                || (<HTMLLinkElement> target)?.getAttribute('role') === 'button';\n\n            // Space key up on input checkbox HTML element generates synthetic click.\n            // We prevent to hide focus frame when click on checkboxes\n            const isCheckBox = target instanceof HTMLInputElement\n                && (<HTMLInputElement> target)?.getAttribute('type') === 'checkbox';\n\n            const isRadioButton = target instanceof HTMLInputElement\n                && (<HTMLInputElement> target)?.getAttribute('type') === 'radio';\n\n            if (isSelect || isButton || isCheckBox || isRadioButton) { return; }\n\n            if (this.isHighlighterVisible) { this.disableHighlighter(); }\n        }\n\n        /**\n         * @description Window resize event handler\n         * @listens dom#resize\n         */\n        handleResize(): void {\n            if (this.isHighlighterVisible && this.lastFocusedElement) {\n                this.moveTo(this.lastFocusedElement);\n            }\n        }\n\n        /**\n         * @description Update highlighter position. Needed when we need to update position from outside\n         * @listens \"highlighter.update\"\n         */\n        updateHighlighter(): void {\n            if (this.isHighlighterVisible && document.activeElement instanceof HTMLElement) {\n                this.moveTo(document.activeElement);\n            }\n        }\n\n        /**\n         * @description Handles focus change on page\n         * @listens dom#focusin\n         */\n        handleFocus(): void {\n            if (!(document.activeElement instanceof HTMLElement)) { return; } // Needed only for TS linter\n\n            const focusedElement = document.activeElement;\n\n            if (\n                !this.isValidTarget(focusedElement)\n                || (this.isTextInput(focusedElement)\n                && !this.keyboardModality)\n            ) {\n                return;\n            }\n\n            this.detectHurryNavigation();\n            this.moveTo(focusedElement);\n\n            // We need to recheck focused element position since coords could\n            // be changed during scroll in carousels, animation, dynamic page changes\n\n            if (this.recheckTimeout) { this.recheckTimeout(); }\n\n            if (this.recheckSecondTimeout) { this.recheckSecondTimeout(); }\n\n            this.recheckTimeout = timeout(() => this.moveTo(document.activeElement as HTMLElement), 400);\n\n            this.recheckSecondTimeout = timeout(() => this.moveTo(document.activeElement as HTMLElement), 800);\n        }\n\n        /**\n         * @description mutations handler for MutationObserver\n         * @param mutations Array of MutationObserver records\n         */\n        handleMutations(mutations: Array<MutationRecord>) {\n            mutations.some((mutation) => {\n                if (!(mutation.target as HTMLElement).classList.contains(this.prefs().classesHighlighter)) {\n                    this.updateHighlighter();\n\n                    return true;\n                }\n\n                return false;\n            });\n        }\n\n        /**\n         * @description Enables a `highlighter` - a bordered box with sizes of currently focused element.\n         */\n        enableHighlighter(): void {\n            if (this.keyboardModality) {\n                return;\n            }\n\n            this.observer?.observe(document.body, {\n                attributes: true,\n                childList: true,\n                subtree: true\n            });\n\n            this.keyboardModality = true;\n\n            this.ref('highlighter').addClass(this.prefs().classesEnabled);\n\n            this.isHighlighterVisible = true;\n            this.onDestroy(() => this.ref('highlighter').removeClass(this.prefs().classesEnabled));\n\n            this.handleFocus();\n\n            this.focusinHandlers = this.ev('focusin', this.handleFocus, document);\n            // all other events are handled by `focus in` event\n        }\n\n        /**\n         * @description Disables a `highlighter` - a bordered box with sizes of currently focused element.\n         */\n        disableHighlighter(): void {\n            if (!this.keyboardModality) {\n                return;\n            }\n\n            this.observer?.disconnect();\n\n            this.keyboardModality = false;\n\n            this.ref('highlighter').removeClass(this.prefs().classesEnabled);\n\n            this.isHighlighterVisible = false;\n\n            this.hideTimeOut = timeout(this.hide.bind(this), this.prefs().DELAY_TIMEOUT);\n\n            if (this.focusinHandlers) {\n                this.focusinHandlers.forEach(fn => fn());\n            }\n\n            this.lastFocusedElement = undefined;\n        }\n\n        /**\n         * @description Moves `highlighter` (a border box) in place of focused element\n         * @param focusedElement - element, which gets focus\n         */\n        moveTo(focusedElement: HTMLElement) {\n            if (!(focusedElement instanceof HTMLElement)) { return; }\n\n            const highlighterNode = this.ref('highlighter').get();\n\n            if (!highlighterNode) { return; }\n\n            const targetRectangle = focusedElement.getBoundingClientRect();\n            const targetTop = targetRectangle.top + window.scrollY;\n            const targetLeft = targetRectangle.left + window.scrollX;\n            const targetWidth = focusedElement.offsetWidth;\n            const targetHeight = focusedElement.offsetHeight;\n            const borderWidth = 3;\n            const outlineWidth = 3;\n            const documentWidth = this.getDocumentWidth();\n            const isIntersectsViewport = (targetLeft + targetWidth + borderWidth + outlineWidth) > documentWidth;\n\n            if (\n                focusedElement === this.lastFocusedElement\n                && this.lastFocusedElementCoords === '' + targetTop + targetLeft + targetWidth + targetHeight\n            ) {\n                // If we come from coords recheck do not reapply changes\n                return;\n            }\n\n            const highlighterStyle = highlighterNode.style;\n\n            highlighterStyle.top = `${targetTop - 5}px`;\n            highlighterStyle.left = `${targetLeft - 5}px`;\n            highlighterStyle.width = `${targetWidth + 4}px`;\n            highlighterStyle.height = `${targetHeight + 4}px`;\n\n            if (isIntersectsViewport) {\n                highlighterStyle.left = `${targetLeft + borderWidth}px`;\n                highlighterStyle.width = `${documentWidth - targetLeft - (borderWidth + outlineWidth) * 2}px`;\n            }\n\n            this.lastFocusedElementCoords = '' + targetTop + targetLeft + targetWidth + targetHeight;\n\n            this.lastFocusedElement = focusedElement;\n        }\n\n        /**\n         * @description Hide `highlighter`\n         */\n        hide(): this {\n            const highlighterNode = this.ref('highlighter').get();\n\n            if (!highlighterNode) {\n                return this;\n            }\n\n            const highlighterStyle = highlighterNode.style;\n\n            highlighterStyle.width = '0';\n            highlighterStyle.height = '0';\n\n            if (this.hideTimeOut) {\n                this.hideTimeOut();\n            }\n\n            return this;\n        }\n\n        /**\n         * @description Detects too fast customer navigation, and displays `highlighter`,\n         * moving from previously focused element to currently focused without animation.\n         */\n        detectHurryNavigation(): void {\n            const currentTime = Date.now();\n\n            const isHurryNavigation = (currentTime - (this.lastKeyTime || 0)) < 190;\n\n            this.ref('highlighter').toggleClass(this.prefs().classesHurry, isHurryNavigation);\n\n            this.isHurryNavigation = isHurryNavigation;\n\n            this.lastKeyTime = currentTime;\n        }\n\n        /**\n         * @param domNode - focused element\n         */\n        isValidTarget(domNode: HTMLElement): boolean {\n            return domNode !== this.lastFocusedElement\n                && domNode.nodeName !== 'HTML'\n                && domNode.nodeName !== 'BODY';\n        }\n\n        /**\n         * @param domNode - focused element\n         */\n        isTextInput(domNode: TDomNode): boolean {\n            return ((domNode instanceof HTMLTextAreaElement) && !domNode.readOnly)\n                || ((domNode instanceof HTMLInputElement) && !domNode.readOnly)\n                || !!(domNode.getAttribute('contenteditable'));\n        }\n    }\n\n    return FocusHighlighter;\n}\n\nexport type TFocusHighlighter = ReturnType<typeof FocusHighlighterClassCreator>;\n\nexport type TFocusHighlighterInstance = InstanceType<TFocusHighlighter>;\n\nexport default FocusHighlighterClassCreator;\n","import { TWidget } from 'widgets/Widget';\nimport { setCookie } from '../toolbox/cookie';\n\nfunction GeolocationClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class Geolocation\n     * @augments Widget\n     * @classdesc Geolocation Widget - the alert that suggests customer to change Site\n     * if customer's location is not applicable for the current site.\n     * The alert is shown only once at the first visit to the site.\n     * @property {string} data-widget - Widget name `Geolocation`\n     */\n    class Geolocation extends Widget {\n        init() {\n            if (window.sfccUnCachedData?.geolocationDialog) {\n                setCookie(window.sfccUnCachedData.geolocationDialog.geolocationCookieName, '1', 360);\n                this.ref('closeButton').setText(window.sfccUnCachedData?.geolocationDialog.selectedLocale);\n                this.ref('customerCountryMessage').setText(window.sfccUnCachedData?.geolocationDialog.customerCountry);\n                this.ref('self')\n                    .attr('role', 'alert')\n                    .show();\n            }\n        }\n\n        /**\n         * @description Cancel geolocation changing\n         * @listens dom#click\n         */\n        cancel() {\n            this.ref('self').hide();\n        }\n    }\n\n    return Geolocation;\n}\n\nexport type TGeolocation = ReturnType<typeof GeolocationClassCreator>;\n\nexport type TGeolocationInstance = InstanceType<TGeolocation>;\n\nexport default GeolocationClassCreator;\n","import { PausableTimeout } from 'widgets/toolbox/PausableTimeout';\nimport { TWidget } from 'widgets/Widget';\n\nexport type TGlobalAlertMessages = {\n    error500: string;\n}\n\n/**\n * @description Base GlobalAlerts implementation.\n * @param Widget Base widget for extending\n * @returns GlobalAlerts class\n */\nfunction GlobalAlertsClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class GlobalAlerts\n     * @augments Widget\n     * @classdesc Global Alerts with accessibility alert role possibility.\n     * Acts as a popup with delayed disappearing. Popup will render user action description.\n     * @property {boolean} data-widget - Widget name `globalAlerts`\n     * @property {number} data-timeout - Value of hide timeout in milliseconds\n     * @property {object} data-global-alerts - Global alerts localization messages\n     * Possible values are: `error500`\n     *\n     * @example <caption>Global Alerts widget</caption>\n     * <div\n     *     class=\"b-global_alerts ${isAccessibilityAlertsHidden ? 'm-visually_hidden' : ''}\"\n     *     data-widget=\"globalAlerts\"\n     *     data-tau=\"global_alerts\"\n     *     data-global-alerts='{\n     *         \"error500\": \"${Resource.msg('alert.error500', 'global', null)}\"\n     *     }'\n     *     aria-live=\"polite\"\n     * >\n     *     <div\n     *         hidden=\"hidden\"\n     *         data-ref=\"item\"\n     *         class=\"b-global_alerts-item\"\n     *         role=\"alert\"\n     *         data-event-mouseover=\"pauseAlert\"\n     *         data-event-mouseout=\"resumeAlert\"\n     *         data-tau=\"global_alerts_item\"\n     *     ></div>\n     * </div>\n     */\n    class GlobalAlerts extends Widget {\n        pausableTimeout: PausableTimeout | undefined;\n\n        prefs() {\n            return {\n                timeout: 4000,\n                errorClassName: 'm-error',\n                globalAlerts: <TGlobalAlertMessages>{},\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Widget initialization, onDestroy hook to clear pausable timeout.\n         * Listening `show.alert` event to display a relevant Global Alert\n         * @listens \"alert.show\"\n         * @listens \"alert.error\"\n         */\n        init() {\n            super.init();\n            this.onDestroy(() => this.disposePausableTimeout());\n            /**\n             * @description Event for Global Alert, contains data to be shown inside Global Alert popover\n             * @event \"alert.show\"\n             */\n            this.eventBus().on('alert.show', 'showAlert');\n            /**\n             * @description Event for Global Alert, contains data to be shown inside Global Alert popover as an error message\n             * @event \"alert.error\"\n             */\n            this.eventBus().on('alert.error', 'showError');\n        }\n\n        /**\n         * @description Shows global errors like 500 response\n         * @param data - event message data\n         * @param data.errorCode - error code string that could be mapped to standard global error message\n         * @param data.accessibilityAlert - alert message\n         */\n        showError(data: TResponseError) {\n            if (!data) {\n                return;\n            }\n\n            let message = '';\n\n            if (data.errorCode) {\n                message = this.prefs().globalAlerts[`error${data.errorCode}`];\n            } else if (data.accessibilityAlert) {\n                message = data.accessibilityAlert;\n            }\n\n            this.showAlert({ accessibilityAlert: message }, 'error');\n        }\n\n        /**\n         * @description Dispose pausable timeout and clear it resources\n         */\n        disposePausableTimeout() {\n            if (this.pausableTimeout) {\n                this.pausableTimeout.destroy();\n\n                this.pausableTimeout = undefined;\n            }\n        }\n\n        /**\n         * @description Show Global Alert by starting pausable timeout\n         * @param data - event data\n         * @param data.accessibilityAlert - Message to be shown and pronounced\n         * @param type - type of the message\n         */\n        showAlert(data: {accessibilityAlert?: string}, type?: string) {\n            if (data && data.accessibilityAlert) {\n                if (this.shown) {\n                    this.hideAlert();\n                }\n\n                if (type === 'error') {\n                    this.ref('item').addClass(this.prefs().errorClassName);\n                }\n\n                this.ref('item')\n                    .setText(data.accessibilityAlert)\n                    .show();\n                this.shown = true;\n\n                this.pausableTimeout = new PausableTimeout(() => this.hideAlert(), this.prefs().timeout);\n            }\n        }\n\n        /**\n         * @description Hide Global Alert and clear timeout\n         */\n        hideAlert() {\n            this.ref('item')\n                .removeClass(this.prefs().errorClassName)\n                .setText('')\n                .hide();\n            this.shown = false;\n            this.disposePausableTimeout();\n        }\n\n        /**\n         * @description Pauses Global Alert displaying.\n         * Pauses hide alert with pausable timeout.\n         */\n        pauseAlert() {\n            if (this.pausableTimeout) {\n                this.pausableTimeout.pause();\n            }\n        }\n\n        /**\n         * @description Resumes Global Alert displaying.\n         * Resumes hide alert with pausable timeout.\n         */\n        resumeAlert() {\n            if (this.pausableTimeout) {\n                this.pausableTimeout.resume();\n            }\n        }\n    }\n\n    return GlobalAlerts;\n}\n\nexport type TGlobalAlerts = ReturnType<typeof GlobalAlertsClassCreator>;\n\nexport type TGlobalAlertsInstance = InstanceType<TGlobalAlerts>;\n\nexport default GlobalAlertsClassCreator;\n","import { getContentByUrl, getJSONByUrl } from 'widgets/toolbox/ajax';\n\nimport { TEmitBusEvent } from 'widgets/global/EmitBusEvent';\n\n/**\n * @description Base GlobalModal implementation\n * @param Modal Base widget for extending\n * @returns GlobalModal class\n */\nfunction GlobalModalClassCreator(Modal: import('widgets/global/Modal').TModal) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class GlobalModal\n     * @augments Modal\n     * @classdesc Global Modal component. Allows different modals to be triggered by firing an event {@link module#dialog:dialogshow}.\n     * <br>Was implemented to get rid from excessive duplicated popups markup in product lists etc.\n     * <br>Also allow standalone components/link to trigger modal by using {@link EmitBusEvent} widget.\n     * <br>In general could be triggered either programmatically by firing an event, or using {@link EmitBusEvent} widget in DOM markup.\n     * <br>Allows: add classes to container; render modal heading; render modal action buttons; render content either via URL, or from string.\n     * @property {string} data-widget - Widget name `globalModal`\n     * @property {string} data-disable-rendering - property should be set to `false` to allow rendering inside popup template.\n     * @example <caption>Global Modal widget markup</caption>\n     * <div\n     *     data-widget=\"globalModal\"\n     *     data-disable-rendering=\"false\"\n     *     data-accessibility-alerts='{\n     *         \"dialogContentLoaded\": \"${Resource.msg('alert.dialogContentLoaded', 'global', null)}\"\n     *     }'\n     * >\n     *     <div\n     *         class=\"b-dialog\"\n     *         data-ref=\"container\"\n     *         hidden=\"hidden\"\n     *         data-label-loading=\"${Resource.msg('common.loading', 'common', '')}\"\n     *     >\n     *         <div\n     *             class=\"b-dialog-window\"\n     *             role=\"dialog\"\n     *             data-ref=\"dialog\"\n     *             aria-modal=\"true\"\n     *             aria-label=\"${Resource.msg('common.loading', 'common', '')}\"\n     *         >\n     *             <div class=\"b-dialog-header\">\n     *                 <isinclude template=\"components/modal/closeButton\">\n     *             </div>\n     *             <div\n     *                 class=\"b-dialog-body b-user_content\"\n     *                 data-ref=\"content\"\n     *             ></div>\n     *         </div>\n     *     </div>\n     *     <script type=\"template/mustache\" data-ref=\"template\">\n     *         {{^url}}\n     *             <div class=\"b-dialog\" data-ref=\"container\">\n     *         {{/url}}\n     *         <div\n     *             class=\"b-dialog-window\"\n     *             role=\"dialog\"\n     *             data-ref=\"dialog\"\n     *             aria-modal=\"true\"\n     *             title=\"{{headerText}}\"\n     *             aria-label=\"{{ariaLabel}}\"\n     *         >\n     *             <div class=\"b-dialog-header\">\n     *                 ... header content\n     *             </div>\n     *             <div class=\"b-dialog-body b-user_content\" data-ref=\"content\">\n     *                 ... dialog content\n     *             </div>\n     *             <div class=\"b-dialog-footer m-actions\">\n     *                 ... action buttons content\n     *             </div>\n     *         </div>\n     *         {{^url}}\n     *             </div>\n     *         {{/url}}\n     *     </script>\n     * </div>\n     *\n     * @example <caption>Global Modal widget triggering via DOM</caption>\n     * <button\n     *     class=\"b-promotion-details\"\n     *     type=\"button\"\n     *     aria-describedby=\"promotions-${promotion.id}\"\n     *     data-widget=\"emitBusEvent\"\n     *     data-bus-event-type=\"dialogshow\"\n     *     data-event-click.prevent=\"emitBusEvent\"\n     *     data-tau=\"promotion_details_cta\"\n     *     data-modal-config='{\n     *         \"content\": \"${promotion.detailsJSONSafe}\",\n     *         \"attributes\": {\n     *             \"data-tau\": \"promotion_details_dialog\"\n     *         },\n     *         \"ariaLabel\": \"${Resource.msg('promotion.details.label','product',null)}\"\n     *     }'\n     * >\n     *     ${Resource.msg('promotion.details','product',null)}\n     * </button>\n     *\n     * @example <caption>Global Modal widget triggering via code in {@link ProductTile} widget (synchronous operation)</caption>\n     * ...\n     * showQuickView(button) {\n     *     this.eventBus().emit('dialogshow', {\n     *         url: button.data('url'),\n     *         wrapperClasses: 'm-quick_view',\n     *         ariaLabel: this.prefs().productName,\n     *         attributes: {\n     *             'data-tau-unique': 'quick_view_dialog'\n     *         }\n     *     }, this.onModalShow.bind(this));\n     * }\n     */\n    class GlobalModal extends Modal {\n        wrapperClasses?: string | Array<string>;\n\n        onAfterCloseListener?: (globalModal: this) => void;\n\n        onCancelListener?: (globalModal: this) => void;\n\n        /**\n         * @description Widget initialization logic\n         * @listens module:events#dialogshow\n         */\n        init() {\n            super.init();\n            this.eventBus().on('dialogshow', 'showModal');\n            this.eventBus().on('dialogclose', 'closeModal');\n        }\n\n        /**\n         * @description Shows modal. Depending on needs, content for modal could be loaded via URL, or fetched from parameters.\n         * Input parameter also contains setup for modal, like container classes, action buttons, heading text etc.\n         * @example <caption>An object with expected parameters</caption>\n         * {\n         *      showActions: true,\n         *      headerText: 'Header text',\n         *      actions: [{\n         *          text: 'Cancel',\n         *          handler: 'cancel',\n         *          classes: 'm-outline'\n         *      },{\n         *          text: 'Confirm',\n         *          handler: 'cancel',\n         *          lastFocusElement: true\n         *      }],\n         *      wrapperClasses: 'class1 class2',\n         *      ariaLabel: 'test aria label',\n         *      url: 'http://www.google.com',\n         *      contentType: 'json'\n         * }\n         * In case if input parameter is an instance of {@link EmitBusEvent},\n         * modal setup properties will be taken from `data-modal-config`\n         * attribute of a {@link EmitBusEvent} widget.\n         * @emits GlobalModal#show\n         * @param templateData Input object for modal popup. See example above.\n         * @param cb - Callback function\n         * @returns Promise object represents modal rendering result\n         */\n        showModal(templateData?: Record<string, unknown> | InstanceType<TEmitBusEvent>, cb?: () => void): Promise<void> {\n            let modalData: {\n                content?: string;\n                url?: string;\n                contentType?: string;\n                wrapperClasses?: Array<string> | string;\n                bodyClass?: string;\n                trigger?: Node;\n                onAfterClose?: (globalModal: GlobalModal) => void;\n                onCancel?: (globalModal: GlobalModal) => void;\n            };\n\n            const EmitBusEventClass = <TEmitBusEvent> this.getConstructor('emitBusEvent');\n\n            if (templateData instanceof EmitBusEventClass) {\n                modalData = {\n                    url: templateData.data<string>('url')\n                };\n                const modalConfig = templateData.data<Record<string, unknown>>('modalConfig');\n\n                if (modalConfig && Object.keys(modalConfig).length) {\n                    modalData = Object.assign(modalData, modalConfig);\n                }\n            } else {\n                modalData = templateData || {};\n            }\n\n            this.onCancelListener = modalData.onCancel;\n            this.onAfterCloseListener = modalData.onAfterClose;\n\n            this.wrapperClasses = modalData.wrapperClasses;\n\n            if (modalData.bodyClass) {\n                this.classesGlobalDialog = modalData.bodyClass;\n            }\n\n            this.beforeOpenModal(modalData);\n\n            if (modalData.content) {\n                return super.showModal(modalData, cb).then(() => {\n                    if (this.wrapperClasses) {\n                        this.ref(this.prefs().refContainer).addClass(this.wrapperClasses);\n                    }\n                }).finally(() => {\n                    /**\n                     * @description Event dispatched, when Global Modal was shown\n                     * @event GlobalModal#show\n                     */\n                    this.emit('show');\n                });\n            }\n\n            if (!modalData.url) {\n                return Promise.resolve();\n            }\n\n            super.showModalPreview(modalData.wrapperClasses);\n\n            if (modalData.contentType === 'json') {\n                return getJSONByUrl(modalData.url, undefined, true).then(res => {\n                    return this.showModalOnResponse(res, modalData, cb);\n                });\n            } else {\n                return getContentByUrl(modalData.url).then(res => {\n                    return this.showModalOnResponse(res, modalData, cb);\n                });\n            }\n        }\n\n        /**\n         * @description process response data and pass it to modal\n         * @param response - response object\n         * @param modalData - modal data\n         * @param cb - callback function\n         * @returns Promise object represents modal rendering result\n         */\n        showModalOnResponse(response, modalData, cb) {\n            if (Object.keys(response).length) {\n                modalData = Object.assign(modalData, { content: response });\n                const promise = super.showModal(modalData, cb, Boolean(modalData.url));\n\n                /**\n                 * @description Event dispatched, when Global Modal was shown\n                 * @event GlobalModal#show\n                 */\n                this.emit('show');\n\n                return promise;\n            }\n\n            return Promise.resolve();\n        }\n\n        /**\n         * @description Removes wrap classes from modal\n         */\n        removeWrapperClasses() {\n            if (this.wrapperClasses) {\n                const container = this.ref(this.prefs().refContainer);\n\n                container.removeClass(this.wrapperClasses);\n\n                this.wrapperClasses = undefined;\n            }\n        }\n\n        /**\n         * @description Before open modal callback\n         * @param modalData - modal data\n         */\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        beforeOpenModal(modalData: object) {\n            // just for extending\n        }\n\n        /**\n         * @description On after modal close callback\n         */\n        onAfterCloseModal() {\n            this.removeWrapperClasses();\n\n            if (this.onAfterCloseListener) {\n                this.onAfterCloseListener(this);\n                this.onAfterCloseListener = undefined;\n            }\n        }\n\n        /**\n         * @description Cancel Handler\n         */\n        cancel() {\n            super.cancel();\n\n            if (this.onCancelListener) {\n                this.onCancelListener(this);\n                this.onCancelListener = undefined;\n            }\n        }\n    }\n\n    return GlobalModal;\n}\n\nexport type TGlobalModal = ReturnType<typeof GlobalModalClassCreator>;\n\nexport type TGlobalModalInstance = InstanceType<TGlobalModal>;\n\nexport default GlobalModalClassCreator;\n","/**\n * @param ContextLoader Base widget for extending\n * @returns Header widget\n */\nfunction HeaderClassCreator(ContextLoader: import('widgets/global/ContextLoader').TContextLoader) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class Header\n     * @augments ContextLoader\n     * @classdesc The main purpose is to define anchor for header and to toggle active class\n     * @property {string} data-widget - Widget name `header`\n     * @example <caption>Example of Header widget usage</caption>\n     * <header\n     *     class=\"l-header\"\n     *     data-widget=\"header\"\n     *     data-context=\"header\"\n     *     data-init-on-load=\"loadContext\"\n     *     aria-label=\"${Resource.msg('header.label','global',null)}\"\n     *     data-tau-unique=\"header\"\n     * >\n     *      <div class=\"l-header-inner\">\n     *            ... account header inner content\n     *      </div>\n     * </header>\n     */\n\n    class Header extends ContextLoader {\n        prefs() {\n            return {\n                classesMenuBarActive: 'm-menu_bar-active',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Initialize widget logic\n         */\n        init() {\n            super.init();\n            this.eventBus().on('menu.bar.toggle', 'toggleMenuBarStyle');\n        }\n\n        /**\n         * @description Toggle class on header relevant to menu bar dropdown submenu displayed\n         * @param status - boolean value, witch tell the function remove or add class\n         */\n        toggleMenuBarStyle(status: boolean) {\n            this.ref('self').toggleClass(this.prefs().classesMenuBarActive, status);\n        }\n    }\n\n    return Header;\n}\n\nexport type THeader = ReturnType<typeof HeaderClassCreator>;\n\nexport type THeaderInstance = InstanceType<THeader>;\n\nexport default HeaderClassCreator;\n","import { TWidget, TDisposable } from 'widgets/Widget';\nimport cssLoadChecker from 'widgets/toolbox/cssLoadChecker';\nimport { timeout } from 'widgets/toolbox/util';\nimport { RefElement } from 'widgets/toolbox/RefElement';\n\n/**\n * @param Widget Base widget for extending\n * @returns HeroCarousel class\n */\nfunction HeroCarouselClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class HeroCarousel\n     * @augments Widget\n     * @classdesc Represents HeroCarousel component with next features:\n     * 1. Allow to use pagination for carousel rendered by mustache template\n     * 2. Allow to use slides autoplay functionality\n     * 3. Allow to use start/stop autoplay functionality\n     * 4. Allow to change current slide to the next/previous/custom(index can be passed to the method) slide\n     * 5. Support mousemove, touchmove, mouseup, mousedown, keydown event so we can use carousel even on touch devices\n     * 6. Support for carousel control from the keyboard\n     * @property {string} data-widget - widget name `heroCarousel`\n     * @property {boolean} data-autoplay-enabled - enables/disables autoplay. If false, autoplay will be hidden\n     * @property {boolean} data-autoplay-stopped - starts/stops autoplay. If true, autoplay will be shown but paused\n     * @property {string} data-autoplay-duration - value for the duration of the autoplay slide change\n     * @property {string} data-autoplay-label-start - autoplay button label text to start automatic slide change\n     * @property {string} data-autoplay-label-stop - autoplay button label text to stop automatic slide change\n     * @property {string} data-event-mousedown - Event listener for `touchStart` method\n     * @property {string} data-event-touchstart - Event listener for `touchStart` method\n     * <br>Uses as a basis slider from here (ScrollCarousel.js):\n     * <br>https://github.com/dimanech/aria-components/tree/master/cartridge1/js/components/carousels/slider\n     * @example <caption>Example of HeroCarousel widget usage</caption>\n     * <div\n     *     data-widget=\"heroCarousel\"\n     *     class=\"b-hero_carousel\"\n     *     role=\"region\"\n     *     aria-roledescription=\"carousel\"\n     *     aria-label=\"${Resource.msg('carousel.sliderLabel', 'carousel', null)}\"\n     *     data-event-mousedown.passive=\"touchStart\"\n     *     data-event-touchstart.passive=\"touchStart\"\n     *     data-tau=\"carousel_hero\"\n     *     data-autoplay-enabled=\"true\"\n     *     data-autoplay-stopped=\"false\"\n     *     data-autoplay-duration=\"8000\"\n     *     data-autoplay-label-start=\"${Resource.msg('carousel.startAutoplay', 'carousel', null)}\"\n     *     data-autoplay-label-stop=\"${Resource.msg('carousel.stopAutoplay', 'carousel', null)}\"\n     * >\n     *     <button\n     *         class=\"b-hero_carousel-ctrl m-prev\"\n     *         aria-label=\"${Resource.msg('carousel.previousSlide', 'carousel', null)}\"\n     *         aria-controls=\"slider-content\"\n     *         title=\"${Resource.msg('button.previous', 'common', null)}\"\n     *         data-ref=\"elemPrevButton\"\n     *         data-event-click=\"goToPrevSlide\"\n     *         data-tau=\"carousel_hero_prev\"\n     *     >\n     *         <isinclude template=\"/common/icons/standalone/arrowCarouselLeft\" />\n     *     </button>\n     *     <button\n     *         class=\"b-hero_carousel-ctrl m-next\"\n     *         aria-label=\"${Resource.msg('carousel.nextSlide', 'carousel', null)}\"\n     *         aria-controls=\"slider-content\"\n     *         title=\"${Resource.msg('button.next', 'common', null)}\"\n     *         data-ref=\"elemNextButton\"\n     *         data-event-click=\"goToNextSlide\"\n     *         data-tau=\"carousel_hero_next\"\n     *     >\n     *         <isinclude template=\"/common/icons/standalone/arrowCarouselRight\" />\n     *     </button>\n     *     <div class=\"b-hero_carousel-pagination\" data-ref=\"pagination\">\n     *         <div class=\"b-hero_carousel-pagination_content\">\n     *             <button\n     *                 class=\"b-hero_carousel-autoplay\"\n     *                 data-ref=\"autoplay\"\n     *                 aria-pressed=\"false\"\n     *                 aria-label=\"${Resource.msg('carousel.stopAutoplay', 'carousel', null)}\"\n     *             >\n     *                 <svg class=\"b-hero_carousel-autoplay_svg\" width=\"36\" height=\"36\" viewBox=\"0 0 36 36\" focusable=\"false\" xmlns=\"http://www.w3.org/2000/svg\">\n     *                     <circle class=\"b-hero_carousel-autoplay_progress_back\" cx=\"18\" cy=\"18\" r=\"16.5\"></circle>\n     *                     <circle class=\"b-hero_carousel-autoplay_progress\" cx=\"18\" cy=\"18\" r=\"16.5\" stroke-dasharray=\"104\" transform=\"rotate(-90 18 18)\"></circle>\n     *                     <polygon class=\"b-hero_carousel-autoplay_play\" points=\"14.4,12.2 14.4,23 25.1,17.5 \"></polygon>\n     *                     <polygon class=\"b-hero_carousel-autoplay_pause\" points=\"14.5 12 14.5 24\"></polygon>\n     *                     <polygon class=\"b-hero_carousel-autoplay_pause\" points=\"21.5 12 21.5 24\"></polygon>\n     *                 </svg>\n     *             </button>\n     *             <div class=\"b-hero_carousel-pagination_dots\" role=\"group\" data-ref=\"paginationDots\" aria-label=\"${Resource.msg('carousel.chooseSlide', 'carousel', null)}\"></div>\n     *             <script type=\"template/mustache\" data-ref=\"template\">\n     *                 <div class=\"b-hero_carousel-pagination_dots\" role=\"group\" data-ref=\"paginationDots\" aria-label=\"${Resource.msg('carousel.chooseSlide', 'carousel', null)}\">\n     *                     {{${'#'}pagination}}\n     *                     <button\n     *                         class=\"b-hero_carousel-pagination_dot{{${'#'}isFirst}} m-current{{/isFirst}}\"\n     *                         aria-labelledby=\"slide-{{page}}\"\n     *                         data-page=\"{{page}}\"\n     *                         data-event-click=\"handlePaginationClick\"\n     *                         data-tau=\"carousel_hero_cta\"\n     *                     >\n     *                         <svg class=\"b-hero_carousel-pagination_svg\" height=\"18\" width=\"18\" viewBox=\"0 0 18 18\">\n     *                             <circle class=\"b-hero_carousel-pagination_dot_outline\" cx=\"9\" cy=\"9\" r=\"7.5\"></circle>\n     *                         </svg>\n     *                     </button>\n     *                     {{/pagination}}\n     *                 </div>\n     *             </script>\n     *         </div>\n     *     </div>\n     *     <div\n     *         class=\"b-hero_carousel-track\"\n     *         id=\"slider-content\"\n     *         data-ref=\"elemCarouselTrack\"\n     *         data-event-touchstart.passive=\"touchStart\"\n     *         aria-atomic=\"false\"\n     *         aria-live=\"off\"\n     *     >\n     *       <isset name=\"ContentModel\" value=\"${require(' /cartridge/models/content')}\" scope=\"page\" />\n     *       <isloop items=\"${slotcontent.content}\" var=\"contentAsset\" status=\"loopStatus\">\n     *           <div\n     *               class=\"b-hero_carousel-item\"\n     *               role=\"group\"\n     *               aria-roledescription=\"slide\"\n     *               tabindex=\"0\"\n     *               data-label-delimiter=\"${Resource.msg('carousel.labelDelimiter', 'carousel', null)}\"\n     *               data-tau=\"carousel_hero_item\"\n     *           >\n     *               <isprint value=\"${new ContentModel(contentAsset).getMarkup()}\" encoding=\"off\" />\n     *           </div>\n     *       </isloop>\n     *     </div>\n     * </div>\n     */\n    class HeroCarousel extends Widget {\n        slides?: HTMLCollection;\n\n        slidesTotal?: number;\n\n        paginationDots: HTMLCollection | null = null;\n\n        pagination?: Promise<HTMLElement | undefined>;\n\n        slidesModel: Array<string> | null = null;\n\n        transitionFallbackTimer?: ReturnType<typeof timeout>;\n\n        nextSlideTimer: ReturnType<typeof timeout> | null = null;\n\n        transitionEndDisposable?: TDisposable;\n\n        touchMoveDisposable?: TDisposable;\n\n        mouseMoveDisposable?: TDisposable;\n\n        mouseUpDisposable?: TDisposable;\n\n        mouseLeaveDisposable?: TDisposable;\n\n        touchEndDisposable?: TDisposable;\n\n        touchCancelDisposable?: TDisposable;\n\n        contextMenuDisposable?: TDisposable;\n\n        observer?: IntersectionObserver;\n\n        remainingTime: number | null = null;\n\n        currentSlideIndex = 0;\n\n        startX = 0;\n\n        startY = 0;\n\n        blockedByAnimations = false;\n\n        isGrabbing = false;\n\n        isSlider = false;\n\n        isFocused = false;\n\n        isHover = false;\n\n        isMoving = false;\n\n        autoPlayStopped = false;\n\n        autoPlayPaused = false;\n\n        creationTime?: number;\n\n        prefs() {\n            return {\n                autoplayEnabled: true,\n                autoplayStopped: false,\n                autoplayDuration: '3000',\n                autoplayLabelStart: '',\n                autoplayLabelStop: '',\n                slideCurrentClass: 'm-current',\n                slidePreviousClass: 'm-prev',\n                slideNextClass: 'm-next',\n                slideGrabbingClass: 'm-grabbing',\n                slidePrefix: 'slide-',\n                carouselInitialized: 'm-initialized',\n                autoplayAnimated: 'm-animated',\n                swipeMinShift: '16',\n                swipeAngle: '30',\n                clickShift: '1',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Widget initialization\n         */\n        init() {\n            super.init();\n            // Async loading to not block other widget init\n            timeout(() => {\n                cssLoadChecker.get().then(() => this.initCarousel());\n            }, 0);\n        }\n\n        /**\n         * @description Initial carousel configuration\n         */\n        initCarousel() {\n            // Common carousel properties\n\n            this.currentSlideIndex = 0;\n\n            this.blockedByAnimations = false;\n\n            this.slidesModel = null;\n\n            this.paginationDots = null;\n\n            this.isGrabbing = false;\n\n            this.startX = 0;\n\n            this.startY = 0;\n\n            // Autoplay properties\n\n            this.autoPlayStopped = this.prefs().autoplayStopped;\n\n            this.nextSlideTimer = null;\n\n            this.remainingTime = null;\n\n            this.initStructure();\n\n            if (!this.isSlider) { return; }\n\n            this.initPagination();\n            this.goToSlide(0);\n\n            if (this.prefs().autoplayEnabled) {\n                this.initAutoplay();\n            }\n\n            this.ref('self').addClass(this.prefs().carouselInitialized);\n        }\n\n        /**\n         * @description Initialize carousel structure with slides\n         */\n        initStructure() {\n            const track = this.ref('elemCarouselTrack').get();\n            let slidePrefix = this.prefs().slidePrefix;\n\n            if (this.ref('elemCarouselTrack').data('componentId')) {\n                slidePrefix = `${this.ref('elemCarouselTrack').data('componentId')}-${this.prefs().slidePrefix}`;\n            }\n\n            if (track) {\n                if (track.children.length === 2) {\n                    const initialContent = track.innerHTML;\n\n                    track.innerHTML = initialContent + initialContent; // Clone slides\n                }\n\n                this.slides = track.children;\n\n                this.slidesTotal = this.slides.length;\n\n                for (let i = 0; i < this.slides.length; i++) {\n                    const slide = this.slides[i];\n\n                    slide.setAttribute('id', (slidePrefix + i));\n                    // eslint-disable-next-line sonarjs/no-duplicate-string\n                    slide.setAttribute('aria-label', ((i + 1) + ' ' + track.getAttribute('data-label-delimiter')\n\n                        + ' ' + this.slidesTotal));\n                }\n            }\n\n            this.isSlider = typeof this.slidesTotal !== 'undefined' && this.slidesTotal > 1;\n        }\n\n        /**\n         * @description Executed when widget is re-rendered\n        */\n        onRefresh() {\n            super.onRefresh();\n            this.initCarousel();\n        }\n\n        /**\n         * @description Changes current slide to slide with provided index\n         * @param index Next slide index\n         * @param actionType Type of slide action\n         * @param isAutoPlay Flag if the action is called auto-play\n         */\n        goToSlide(index: number, actionType?: string, isAutoPlay?: boolean) {\n            if (this.blockedByAnimations) { return; }\n\n            if (this.prefs().autoplayEnabled) {\n                this.endAutoplay();\n            }\n\n            const newSlideIndex = this.normalizeIndex(index);\n\n            this.slidesModel = this.getSlidesModel(newSlideIndex);\n\n            this.toggleAnimationMode(true);\n            this.waitForTransitionEnd(() => this.toggleAnimationMode(false));\n\n            this.applySlidesModel();\n            this.setActivePagination(newSlideIndex);\n\n            this.currentSlideIndex = newSlideIndex;\n\n            if (actionType && isAutoPlay !== true) {\n                this.onCarouselClick(actionType);\n            }\n\n            if (this.prefs().autoplayEnabled) {\n                this.startAutoplay(true);\n\n                this.isFocused = false;\n\n                this.isHover = false;\n            }\n        }\n\n        /**\n         * @description Blocks the ability to change slides until the animation is complete\n         * @param isAnimated - block/unblock changing current slide\n         */\n        toggleAnimationMode(isAnimated: boolean) {\n            this.blockedByAnimations = isAnimated;\n            this.ref('elemPrevButton').attr('aria-busy', isAnimated);\n            this.ref('elemNextButton').attr('aria-busy', isAnimated);\n        }\n\n        /**\n         * @description Assigns classes to slide elements in accordance with position of current slide\n         */\n        applySlidesModel() {\n            if (!this.slides || !this.slidesModel) { return; }\n\n            const allClasses = [this.prefs().slidePreviousClass, this.prefs().slideNextClass, this.prefs().slideCurrentClass];\n\n            let n = this.slidesTotal || 0;\n\n            while (n--) {\n                const slideElement = this.slides[n];\n\n                const slideClass = this.slidesModel[n];\n\n                slideElement.classList.remove(...allClasses);\n\n                if (slideClass) {\n                    slideElement.classList.add(slideClass);\n                }\n            }\n        }\n\n        /**\n         * @description Updates classes list of slide elements in accordance with updated index\n         * @param index - Updated slide index\n         * @returns Array with updated classes\n         */\n        getSlidesModel(index: number): Array<string> {\n            const model = new Array(this.slidesTotal);\n            const nextIndex = this.normalizeIndex(index + 1);\n            const prevIndex = this.normalizeIndex(index - 1);\n            const currentIndex = this.normalizeIndex(index);\n\n            model.fill(this.prefs().slidePreviousClass, 0, currentIndex);\n\n            model.fill(this.prefs().slideNextClass, currentIndex, this.slidesTotal);\n\n            model[currentIndex] = this.prefs().slideCurrentClass;\n            model[nextIndex] = this.prefs().slideNextClass;\n            model[prevIndex] = this.prefs().slidePreviousClass;\n\n            return model;\n        }\n\n        /**\n         * @description Normalizes slide index according to looped carousel approach\n         * @param index - Slide index\n         * @returns Normalized slide index\n         */\n        normalizeIndex(index: number): number {\n            let normalizedIndex = 0;\n\n            if (this.slidesTotal) {\n                if (index < 0) {\n                    normalizedIndex = (this.slidesTotal - 1);\n                } else {\n                    normalizedIndex = index % this.slidesTotal;\n                }\n            }\n\n            return normalizedIndex;\n        }\n\n        /**\n         * @description Calls callback after the animation is ended\n         * @listens HeroCarousel#transitionend\n         * @param callback - function to be executed when the transition ends\n         */\n        waitForTransitionEnd(callback: () => void) {\n            const onEnd = (el, event) => {\n                if (event && event.propertyName !== 'transform') { return; }\n\n                if (this.transitionFallbackTimer) {\n                    this.transitionFallbackTimer();\n                }\n\n                if (this.transitionEndDisposable) {\n                    this.transitionEndDisposable.forEach(disposable => disposable());\n\n                    this.transitionEndDisposable = undefined;\n                }\n\n                callback();\n            };\n\n            this.transitionEndDisposable = this.ev('transitionend', onEnd, this.ref('elemCarouselTrack').get());\n\n            this.transitionFallbackTimer = timeout(onEnd, 800);\n        }\n\n        /**\n         * @description Initialize carousel pagination\n         */\n        initPagination() {\n            this.has('paginationDots', paginationRefEl => {\n                const pagination = paginationRefEl.get();\n\n                if (pagination) {\n                    // If empty pagination - we need to render it. Otherwise - create.\n                    if (pagination.innerHTML === '') {\n                        this.createPaginationElements();\n                    } else {\n                        this.pagination = Promise.resolve(pagination);\n                    }\n\n                    const paginationDots = this.ref('paginationDots').get();\n\n                    if (paginationDots) {\n                        this.paginationDots = paginationDots.children;\n                    }\n                }\n            });\n        }\n\n        /**\n         * @description Creates carousel pagination\n         */\n        createPaginationElements() {\n            const elemCarouselTrack = this.ref('elemCarouselTrack').get();\n\n            if (!elemCarouselTrack) { return; }\n\n            const pagination = new Array(this.slidesTotal).fill(0).map((_el, i) => ({ page: i, isFirst: i === 0 }));\n\n            this.pagination = new Promise((resolve) => {\n                this.render(undefined, { pagination }, this.ref('paginationDots')).then(() => {\n                    resolve(this.ref('paginationDots').get());\n                    this.ref('pagination').addClass(this.prefs().carouselInitialized);\n                });\n            });\n        }\n\n        /**\n         * @description Pagination click Event handler\n         * @listens dom#click\n         * @param el - source of event\n         */\n        handlePaginationClick(el: RefElement) {\n            if (el.hasClass(this.prefs().slideCurrentClass)) { return; }\n\n            const nextSlideIndex = el.data<number>('page') || 0;\n\n            this.goToSlide(nextSlideIndex, 'pagination_click');\n        }\n\n        /**\n         * @description Updates attributes/classes on previous and current pagination element\n         * @param index - Pagination dot index\n         */\n        setActivePagination(index: number) {\n            if (this.paginationDots && this.paginationDots.length) {\n                const currentIndex = this.currentSlideIndex || 0;\n\n                this.paginationDots[currentIndex].classList.remove(this.prefs().slideCurrentClass);\n\n                this.paginationDots[currentIndex].removeAttribute('aria-disabled');\n\n                this.paginationDots[index].classList.add(this.prefs().slideCurrentClass);\n\n                this.paginationDots[index].setAttribute('aria-disabled', 'true');\n            }\n        }\n\n        /**\n         * @description Shows the next slide\n         * @param isAutoPlay Flag if the action is called auto-play\n         * @listens dom#click\n         */\n        goToNextSlide(isAutoPlay?: boolean) {\n            if (typeof this.currentSlideIndex !== 'undefined') {\n                this.goToSlide(this.currentSlideIndex + 1, 'next_slide', isAutoPlay);\n            }\n        }\n\n        /**\n         * @description Shows the previous slide\n         * @listens dom#click\n         */\n        goToPrevSlide() {\n            if (typeof this.currentSlideIndex !== 'undefined') {\n                this.goToSlide(this.currentSlideIndex - 1, 'prev_slide');\n            }\n        }\n\n        /**\n         * @description Shows the next slide in PDX edit mode\n         * @param _el Source of Keydown event\n         * @param event event instance if DOM event\n         * @listens dom#click\n         */\n        goToNextSlideMouseDown(_el, event) {\n            // We need this to have click on Page Designer.\n            // Use mousedown,touchstart since click overloaded.\n            // Check that it is not triggered by mouse buttons.\n            // Restricted btn: mouse right and center. True - if restricted btn was clicked\n            if (event.button) {\n                return;\n            }\n\n            this.goToNextSlide();\n        }\n\n        /**\n         * @description Shows the previous slide in PDX edit mode\n         * @param _el Source of Keydown event\n         * @param event event instance if DOM event\n         * @listens dom#click\n         */\n        goToPrevSlideMouseDown(_el, event) {\n            // We need this to have click on Page Designer.\n            // Use mousedown,touchstart since click overloaded.\n            // Check that it is not triggered by mouse buttons.\n            // Restricted btn: mouse right and center. True - if restricted btn was clicked\n            if (event.button) {\n                return;\n            }\n\n            this.goToPrevSlide();\n        }\n\n        /**\n         * @description Collect data for send to dataLayer\n         * @param actionType Type of slide action\n         */\n        onCarouselClick(actionType: string) {\n            const elemCarouselTrack = this.ref('elemCarouselTrack').get();\n            const elemSlide = elemCarouselTrack?.children[this.currentSlideIndex];\n            const slideData = elemSlide?.querySelector('h1, h2, h3')?.textContent;\n\n            this.eventBus().emit('heroCarousel.click', actionType, slideData);\n        }\n\n        /**\n         * @description Adds mouse/touch listeners for swipe functionality\n         * @listens HeroCarousel#touchstart\n         * @param el - source of event\n         */\n        addTouchListeners(el: HTMLElement|undefined) {\n            this.touchMoveDisposable = this.ev('touchmove', this.touchMove, el, false);\n\n            this.mouseMoveDisposable = this.ev('mousemove', this.touchMove, el, false);\n\n            this.mouseUpDisposable = this.ev('mouseup', this.touchEnd, el);\n\n            this.mouseLeaveDisposable = this.ev('mouseleave', this.touchEnd, el);\n\n            this.touchEndDisposable = this.ev('touchend', this.touchEnd, el);\n\n            this.touchCancelDisposable = this.ev('touchcancel', this.touchEnd, el, false);\n            // call context menu on slide and close it should not be treated as mousemove\n\n            this.contextMenuDisposable = this.ev('contextmenu', this.touchEnd, el, false);\n        }\n\n        /**\n         * @description Removes mouse/touch listeners for swipe functionality\n         * @listens HeroCarousel#touchend\n         */\n        removeTouchListeners() {\n            if (this.touchMoveDisposable) {\n                this.touchMoveDisposable.forEach(disposable => disposable());\n\n                this.touchMoveDisposable = undefined;\n            }\n\n            if (this.mouseMoveDisposable) {\n                this.mouseMoveDisposable.forEach(disposable => disposable());\n\n                this.mouseMoveDisposable = undefined;\n            }\n\n            if (this.mouseUpDisposable) {\n                this.mouseUpDisposable.forEach(disposable => disposable());\n\n                this.mouseUpDisposable = undefined;\n            }\n\n            if (this.mouseLeaveDisposable) {\n                this.mouseLeaveDisposable.forEach(disposable => disposable());\n\n                this.mouseLeaveDisposable = undefined;\n            }\n\n            if (this.touchEndDisposable) {\n                this.touchEndDisposable.forEach(disposable => disposable());\n\n                this.touchEndDisposable = undefined;\n            }\n\n            if (this.touchCancelDisposable) {\n                this.touchCancelDisposable.forEach(disposable => disposable());\n\n                this.touchCancelDisposable = undefined;\n            }\n\n            if (this.contextMenuDisposable) {\n                this.contextMenuDisposable.forEach(disposable => disposable());\n\n                this.contextMenuDisposable = undefined;\n            }\n        }\n\n        /**\n         * @description Checks if swipe functionality is initialized according to provided touches angle\n         * @param x - clientX coordinate value\n         * @param y - clientY coordinate value\n         * @returns true if swipe is initialized\n         */\n        isSwipe(x: number, y: number): boolean {\n            const diffX = x - this.startX;\n\n            const diffY = y - this.startY;\n            const angleDeg = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI;\n\n            if (!this.prefs().swipeAngle) {\n                return false;\n            }\n\n            return angleDeg < +this.prefs().swipeAngle;\n        }\n\n        /**\n         * @description Defines swipe properties at the start of the event.\n         * Adds event listeners to check if the swipe event is true\n         * @listens HeroCarousel#touchstart\n         * @listens HeroCarousel#mousedown\n         * @param el - source of event\n         * @param event - DOM event\n         */\n        touchStart(el: RefElement, event: Touch | TouchEvent) {\n            if (!this.isSlider) { return; }\n\n            (event as TouchEvent).stopPropagation();\n\n            const touch: Touch = event instanceof TouchEvent ? event.changedTouches[0] : event;\n\n            this.startX = touch.clientX;\n\n            this.startY = touch.clientY;\n\n            this.isMoving = false;\n\n            this.addTouchListeners(el.get());\n        }\n\n        /**\n         * @description Shows the previous/next slide in case if the swipe event is true\n         * @listens HeroCarousel#mouseup\n         * @listens HeroCarousel#mouseleave\n         * @listens HeroCarousel#touchend\n         * @param el - source of event\n         * @param event - DOM event\n         */\n        touchEnd(el: HTMLElement, event: TouchEvent | Touch) {\n            this.removeTouchListeners();\n\n            const touch: Touch = event instanceof TouchEvent ? event.changedTouches[0] : event;\n\n            this.isGrabbing = false;\n            this.ref('elemCarouselTrack').removeClass(this.prefs().slideGrabbingClass);\n\n            const shiftWidth = this.startX - touch.clientX;\n            const isSwipe = this.isSwipe(touch.clientX, touch.clientY)\n                && Math.abs(shiftWidth) >= (+this.prefs().swipeMinShift || 0);\n\n            if (!isSwipe) { return; }\n\n            if (shiftWidth > 0) {\n                this.goToNextSlide();\n            } else {\n                this.goToPrevSlide();\n            }\n        }\n\n        /**\n         * @description Adds a class for showing grabbing cursor, prevents blocking of site scrolling, prevents child dragging.\n         * @listens HeroCarousel#touchmove\n         * @listens HeroCarousel#mousemove\n         * @param el - source of event\n         * @param event - DOM event\n         */\n        touchMove(el: HTMLElement, event: Touch | TouchEvent) {\n            // To prevent starting touchMove on click event\n\n            const touch: Touch = event instanceof TouchEvent ? event.changedTouches[0] : event;\n\n            if (!this.isMoving && (Math.abs(this.startX - touch.clientX) < parseInt(this.prefs().clickShift, 10)\n\n                || Math.abs(this.startY - touch.clientY) < parseInt(this.prefs().clickShift, 10))) {\n                return;\n            } else {\n                this.isMoving = true;\n            }\n\n            // To prevent child dragging and to add dragging cursor\n\n            if (!this.isGrabbing) {\n                this.isGrabbing = true;\n                this.ref('elemCarouselTrack').addClass(this.prefs().slideGrabbingClass);\n            }\n\n            const originalEvent = event as TouchEvent;\n\n            // To prevent blocking of site scrolling\n            const isSwipe = this.isSwipe(touch.clientX, touch.clientY);\n\n            if (isSwipe && originalEvent.cancelable) {\n                originalEvent.preventDefault();\n                originalEvent.stopPropagation();\n            }\n        }\n\n        /**\n         * @description Autoplay initialization\n         */\n        initAutoplay() {\n            this.ref('autoplay').addClass(this.prefs().carouselInitialized);\n\n            if (this.autoPlayStopped) {\n                this.autoPlayPaused = true;\n                this.togglePlayButtonState();\n\n                return;\n            }\n\n            this.startAutoplay(true);\n            this.addAutoplayListeners();\n            this.initIntersectionObserver();\n        }\n\n        /**\n         * @description Starts autoplay functionality with automatic slides changing\n         * @listens dom#click\n         * @param isForce - true if autoplay starts forced (go to slide with animation/timer restart)\n         */\n        startAutoplay(isForce?: boolean) {\n            if ((!this.autoPlayPaused && !isForce) || this.autoPlayStopped) { return; }\n\n            if (this.nextSlideTimer) {\n                this.nextSlideTimer();\n            }\n\n            this.autoPlayPaused = false;\n\n            this.ref('elemCarouselTrack').attr('aria-live', 'off');\n\n            this.creationTime = Date.now();\n\n            if (this.remainingTime === null) {\n                this.remainingTime = parseInt(this.prefs().autoplayDuration, 10); // force to access by value\n            }\n\n            this.nextSlideTimer = timeout(this.goToNextSlide.bind(this, true), this.remainingTime);\n\n            this.startDotAnimation();\n            this.togglePlayButtonState();\n        }\n\n        /**\n         * @description Pause autoplay functionality\n         * @listens dom#click\n         */\n        pauseAutoplay() {\n            if (this.autoPlayPaused) { return; }\n\n            this.autoPlayPaused = true;\n            this.ref('elemCarouselTrack').attr('aria-live', 'polite');\n\n            if (this.nextSlideTimer) {\n                this.nextSlideTimer();\n            }\n\n            if (this.remainingTime) {\n                this.remainingTime -= (Date.now() - (this.creationTime || 0));\n            }\n\n            this.pauseDotAnimation();\n            this.togglePlayButtonState();\n        }\n\n        /**\n         * @description Disable autoplay functionality\n         */\n        endAutoplay() {\n            if (this.nextSlideTimer) {\n                this.nextSlideTimer();\n            }\n\n            this.remainingTime = null;\n\n            this.removeDotAnimation();\n        }\n\n        /**\n         * @description Stops/starts autoplay. It can be unstopped only by using this method again.\n         * @listens dom#click\n         */\n        togglePlay() {\n            if (this.autoPlayPaused) {\n                this.autoPlayStopped = false;\n\n                this.startAutoplay();\n                this.onCarouselClick('unpause');\n            } else {\n                this.autoPlayStopped = true;\n                this.pauseAutoplay();\n                this.onCarouselClick('pause');\n            }\n        }\n\n        /**\n         * @description Toggles autoplay button attributes according to state(started/stopped).\n         */\n        togglePlayButtonState() {\n            if (typeof this.autoPlayPaused !== 'undefined') {\n                this.ref('autoplay').attr('aria-pressed', this.autoPlayPaused.toString());\n            }\n\n            if (this.autoPlayPaused) {\n                this.ref('autoplay').attr('aria-label', this.prefs().autoplayLabelStart);\n            } else {\n                this.ref('autoplay').attr('aria-label', this.prefs().autoplayLabelStop);\n            }\n        }\n\n        /**\n         * @description Toggles autoplay button attributes according to state(started/stopped).\n         */\n        startDotAnimation() {\n            const autoplayBtn = this.ref('autoplay').get();\n\n            if (!autoplayBtn) { return; }\n\n            autoplayBtn.style.animationDuration = `${this.prefs().autoplayDuration}ms`;\n            autoplayBtn.style.animationPlayState = 'running';\n\n            timeout(() => this.ref('autoplay').addClass(this.prefs().autoplayAnimated), 100);\n        }\n\n        /**\n         * @description Pauses dot animation.\n         */\n        pauseDotAnimation() {\n            const autoplayBtn = this.ref('autoplay').get();\n\n            if (!autoplayBtn) { return; }\n\n            autoplayBtn.style.animationPlayState = 'paused';\n        }\n\n        /**\n         * @description Removes dot animation.\n         */\n        removeDotAnimation() {\n            this.ref('autoplay').removeClass(this.prefs().autoplayAnimated);\n        }\n\n        /**\n         * @description Adds autoplay listeners\n         */\n        addAutoplayListeners() {\n            const track = this.ref('elemCarouselTrack').get();\n\n            this.ev('click', this.togglePlay, this.ref('autoplay').get());\n            this.ev('focusin', this.autoPlayFocusIn, track);\n            this.ev('focusout', this.autoPlayFocusOut, track);\n            this.ev('mouseover', this.autoPlayMouseOver, track);\n            this.ev('mouseleave', this.autoPlayMouseLeave, track);\n        }\n\n        /**\n         * @description Pauses the autoplay functionality when the slide is in focus.\n         * @listens HeroCarousel#focusin\n         */\n        autoPlayFocusIn() {\n            if (this.isFocused) { return; }\n\n            this.isFocused = true;\n            this.pauseAutoplay();\n        }\n\n        /**\n         * @description Starts the autoplay functionality when the slide loses focus.\n         * @listens HeroCarousel#focusout\n         */\n        autoPlayFocusOut() {\n            this.isFocused = false;\n\n            if (!this.isHover) {\n                this.startAutoplay();\n            }\n        }\n\n        /**\n         * @description Pauses the autoplay functionality when the slide is in hover.\n         * @listens HeroCarousel#mouseover\n         */\n        autoPlayMouseOver() {\n            if (this.isHover) { return; }\n\n            this.isHover = true;\n            this.pauseAutoplay();\n        }\n\n        /**\n         * @description Starts the autoplay functionality when the slide loses hover.\n         * @listens HeroCarousel#mouseleave\n         */\n        autoPlayMouseLeave() {\n            this.isHover = false;\n\n            if (!this.isFocused) {\n                this.startAutoplay();\n            }\n        }\n\n        /**\n         * @description Attach IntersectionObserver to carousel to pause autoplay in case if carousel is not visible\n         */\n        initIntersectionObserver() {\n            const carousel = this.ref('self').get();\n\n            if (!carousel) { return; }\n\n            this.observer = new IntersectionObserver(\n                ([entry]) => this.autoPlayVisible(entry.isIntersecting),\n                { threshold: [0, 1] }\n            );\n\n            this.observer.observe(carousel);\n        }\n\n        /**\n         * @description IntersectionObserver handler that pause/start autoplay depending of carousel visibility\n         * @param isVisible do carousel in viewport\n         */\n        autoPlayVisible(isVisible: boolean) {\n            if (this.isHover || this.isFocused) { return; }\n\n            if (isVisible) {\n                this.startAutoplay();\n            } else {\n                this.pauseAutoplay();\n            }\n        }\n\n        /**\n         * @description Destroy IntersectionObserver in case of component destroy\n         */\n        destroy() {\n            const carousel = this.ref('self').get();\n\n            if (this.observer && carousel) {\n                this.observer.unobserve(carousel);\n            }\n        }\n    }\n\n    return HeroCarousel;\n}\n\nexport type THeroCarousel = ReturnType<typeof HeroCarouselClassCreator>;\n\nexport type THeroCarouselInstance = InstanceType<THeroCarousel>;\n\nexport default HeroCarouselClassCreator;\n","import { RefElement } from 'widgets/toolbox/RefElement';\nimport { TWidget } from 'widgets/Widget';\n\n/**\n * @param Widget Base widget for extending\n */\nfunction LabelClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class Label\n     * @augments Widget\n     * @classdesc Represents Label component with next features:\n     * 1. Widget could be used in different context, where we need to display dynamic content depending on different global events using mustache template\n     * 2. Allow being enabled/disabled\n     * 3. Allow managing text/value/error messages on the referenced element\n     * @example <caption>Example of Label widget usage with checkout.step.updated event listener</caption>\n     * <div\n     *     data-widget=\"label\"\n     *     data-listen-events=\"checkout.step.updated\"\n     *     data-widget-event-click=\"submitCurrentStep\"\n     * >\n     *     <script data-ref=\"template\" type=\"template/mustache\">\n     *         <div\n     *             data-widget=\"label\"\n     *             data-listen-events=\"checkout.step.updated\"\n     *             data-widget-event-click=\"submitCurrentStep\"\n     *         >\n     *             {{${'#'}shipping}}\n     *                 <button data-event-click=\"handleClick\" type=\"submit\" name=\"submit\" value=\"submit-shipping\">\n     *                     ${Resource.msg('button.next.payment', 'checkout', null)}\n     *                 </button>\n     *             {{/shipping}}\n     *             {{${'#'}billing}}\n     *                 <button data-event-click=\"handleClick\" type=\"submit\" name=\"submit\" value=\"submit-payment\">\n     *                     ${Resource.msg('button.next.place.order', 'checkout', null)}\n     *                 </button>\n     *             {{/billing}}\n     *             {{${'#'}summary}}\n     *                 <button data-event-click=\"handleClick\" type=\"submit\" name=\"submit\" value=\"place-order\">\n     *                     ${Resource.msg('button.next.place.order', 'checkout', null)}\n     *                 </button>\n     *             {{/summary}}\n     *         </div>\n     *     </script>\n     * </div>\n     * @property {string} data-widget - Widget name `label`\n     * @property {string} data-listen-events - Events used to update template\n     * Listen to global bus events, separated by comma and updates content based on event data\n     * @property {string} data-widget-event-click - Triggers parent's method on widget's elements click\n     */\n    class Label extends Widget {\n        disabled = false;\n\n        prefs() {\n            return {\n                listenEvents: '',\n                classesError: 'm-error',\n                classesActive: 'active',\n                target: 'self',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Widget logic initialization\n         */\n        init() {\n            super.init();\n\n            if (!this.id) {\n                this.id = String(this.config.id);\n            }\n\n            this.shown = true;\n\n            if (this.config.hidden || this.ref('self').hasAttr('hidden')) {\n                this.hide();\n            } else {\n                this.show();\n            }\n\n            this.disabled = this.ref('self').attr('disabled') === 'disabled';\n\n            const listenEvents = this.config.listenEvents;\n\n            if (typeof listenEvents === 'string' && listenEvents) {\n                listenEvents.split(',').forEach(eventName => {\n                    this.eventBus().on(eventName.trim(), 'updateTemplate');\n                });\n            }\n        }\n\n        /**\n         * @description Update template with passed data\n         * @param data data to render, usually executes with the data, streamed down with an event\n         * @emits Label#updated\n         * @returns resolved if rendered or rejected if no found template promise\n         */\n        updateTemplate(data: Record<string, unknown> = {}): Promise<void> {\n            return this.render(undefined, data)\n                /**\n                 * @description Event to update block after rendering\n                 * @event Label#updated\n                 */\n                .then(() => this.emit('updated'));\n        }\n\n        /**\n         * @description get Label value\n         * @returns value of widget's target referenced attribute\n         */\n        getValue(): string | RefElement {\n            return this.ref(this.prefs().target).val();\n        }\n\n        /**\n         * @description set Label value\n         * @param val - Value to set into widget's target referenced attribute\n         */\n        setValue(val: (string | number | boolean) = '') {\n            this.setError();\n            this.ref(this.prefs().target).val(val);\n        }\n\n        /**\n         * @description get Label text\n         * @returns text of widget's target referenced attribute\n         */\n        getText(): string | RefElement {\n            return this.ref(this.prefs().target).getText();\n        }\n\n        /**\n         * @description Set Label text\n         * @param val - Value to set as a text of the widget's target referenced attribute\n         */\n        setText(val: (string | undefined) = ''): this {\n            const currentText = this.getText();\n\n            this.ref(this.prefs().target).removeClass(this.prefs().classesError);\n\n            if (currentText !== val) {\n                this.ref(this.prefs().target).setText(val);\n            }\n\n            return this;\n        }\n\n        /**\n         * @description Sets `err` as a widget's target referenced attribute text\n         * and if `err` is not empty - adds error class to widget's target referenced attribute\n         * @param err - Value to set as a text of the widget's target referenced attribute\n         */\n        setError(err: (string | undefined) = ''): this {\n            this.setText(err);\n\n            if (err) {\n                this.ref(this.prefs().target).addClass(this.prefs().classesError);\n            }\n\n            return this;\n        }\n\n        /**\n         * @description Method to mark element as `active`\n         */\n        activate(): this {\n            this.ref('self').addClass(this.prefs().classesActive);\n\n            return this;\n        }\n\n        /**\n         * @description Method to mark element as `inactive`\n         */\n        deactivate(): this {\n            this.ref('self').removeClass(this.prefs().classesActive);\n\n            return this;\n        }\n\n        /**\n         * @description Disable Label\n         */\n        disable() {\n            this.disabled = true;\n            this.ref('self').disable();\n        }\n\n        /**\n         * @description Enable Label\n         */\n        enable() {\n            this.disabled = false;\n            this.ref('self').enable();\n        }\n\n        /**\n         * @description Emit click event\n         * @emits Label#click\n         * @param data - additional data for parent\n         */\n        handleClick(data: {[key: string]: unknown}) {\n            /**\n             * @description Event to handle click\n             * @event Label#click\n             */\n            this.emit('click', data);\n        }\n    }\n\n    return Label;\n}\n\nexport type TLabel = ReturnType<typeof LabelClassCreator>;\n\nexport type TLabelInstance = InstanceType<TLabel>;\n\nexport default LabelClassCreator;\n","import { TRefElementInstance } from 'widgets/toolbox/RefElement';\nimport { TWidget, TWidgetInstance } from 'widgets/Widget';\nimport { WIDGET_PROP_NAME } from 'widgets/widgetsMgr';\n\nexport type TFocusableElementInstance = TWidgetInstance & { focus: () => void } | TRefElementInstance;\n\n/**\n * @param Widget Base widget for extending\n * @returns ListAccessibility widget\n */\nfunction ListAccessibilityClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class ListAccessibility\n     * @augments Widget\n     * @classdesc Represents ListAccessibility component that implement Basic Accessibility requirements for list of elements.\n     * Has next features:\n     * 1. Define list of focusable elements inside current widget\n     * 2. Allow set focus to item or current item\n     * 3. Allow set focus to first/last item\n     * 4. Allow set focus to next/previous item\n     *\n     * Widget should be not used as standalone widget, it should be mixed to other widgets (see {@tutorial WidgetsMixinsStrategy})\n     */\n    class ListAccessibility extends Widget {\n        focusableItems: Array<TFocusableElementInstance> = [];\n\n        currentItem: TFocusableElementInstance | undefined;\n\n        firstItem: TFocusableElementInstance | undefined;\n\n        lastItem: TFocusableElementInstance | undefined;\n\n        prefs() {\n            return {\n                itemLink: 'itemLink',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Define Items\n         * @param currentItem Current Item\n         */\n        defineItems(currentItem?: TFocusableElementInstance) {\n            this.focusableItems = this.getSortedItems().filter((item) => {\n                return item.isShown() && 'focus' in item;\n            }) as Array<TFocusableElementInstance>;\n\n            if (this.focusableItems.length > 0) {\n                if (currentItem && this.focusableItems.includes(currentItem)) {\n                    this.currentItem = currentItem;\n                } else {\n                    this.currentItem = this.focusableItems[0];\n                }\n\n                this.firstItem = this.focusableItems[0];\n                this.lastItem = this.focusableItems[this.focusableItems.length - 1];\n            } else {\n                this.firstItem = undefined;\n                this.lastItem = undefined;\n            }\n        }\n\n        /**\n         * @description Set focus to item\n         * @param item item\n         */\n        setFocusToItem(item?: TFocusableElementInstance) {\n            if (item && typeof item.focus === 'function') {\n                item.focus();\n                this.currentItem = item;\n            }\n        }\n\n        /**\n         * @description Set focus to current item\n         */\n        setFocusToCurrentItem() {\n            this.setFocusToItem(this.currentItem);\n        }\n\n        /**\n         * @description Set focus to first item\n         */\n        setFocusToFirstItem() {\n            this.setFocusToItem(this.firstItem);\n        }\n\n        /**\n         * @description Set focus to last item\n         */\n        setFocusToLastItem() {\n            this.setFocusToItem(this.lastItem);\n        }\n\n        /**\n         * @description Get item index\n         * @param item item element\n         * @returns Item index\n         */\n        getItemIndex(item?: TFocusableElementInstance): number {\n            return this.focusableItems && item ? this.focusableItems.indexOf(item) : -1;\n        }\n\n        /**\n         * @description Set focus to next item\n         */\n        setFocusToNextItem() {\n            if (this.focusableItems) {\n                const newItem = this.currentItem === this.lastItem\n                    ? this.firstItem\n                    : this.focusableItems[this.getItemIndex(this.currentItem) + 1];\n\n                this.setFocusToItem(newItem);\n            }\n        }\n\n        /**\n         * @description Set focus to previous item\n         */\n        setFocusToPreviousItem() {\n            if (this.focusableItems) {\n                const newItem = this.currentItem === this.firstItem\n                    ? this.lastItem\n                    : this.focusableItems[this.getItemIndex(this.currentItem) - 1];\n\n                this.setFocusToItem(newItem);\n            }\n        }\n\n        /**\n         * @description Set Focus\n         */\n        focus() {\n            const isItemLink = this.has(this.prefs().itemLink, (itemLink) => {\n                itemLink.focus();\n            });\n\n            if (!isItemLink) {\n                // Set focus to a child that has data-ref=\"itemLink\" and data-widget attributes simultaneously\n                this.eachChild(child => {\n                    child.has(this.prefs().itemLink, (childItemLink) => {\n                        childItemLink.focus();\n                    });\n                });\n            }\n        }\n\n        /**\n         * @description Process DOM Element and find all direct child widgets in same order as they in DOM.\n         * This required for proper focus order.\n         * @param element - current element to process\n         * @param sortedItems - resulting array of sub widget items\n         */\n        findSubWidgetItems(element: HTMLElement, sortedItems: Array<TWidgetInstance>) {\n            let child = element.firstElementChild as HTMLElement;\n\n            while (child) {\n                const currentElementWidget = child[WIDGET_PROP_NAME];\n\n                if (currentElementWidget) {\n                    if (this.items.includes(currentElementWidget)) {\n                        sortedItems.push(currentElementWidget);\n                    }\n                } else {\n                    this.findSubWidgetItems(child, sortedItems);\n                }\n\n                child = child.nextElementSibling as HTMLElement;\n            }\n        }\n\n        /**\n         * @description Get list of direct child widget in sorted order as they appear in DOM\n         */\n        getSortedItems() {\n            const sortedItems = [] as Array<TWidgetInstance>;\n            const currentElement = this.ref('self').get();\n\n            if (currentElement) {\n                this.findSubWidgetItems(currentElement, sortedItems);\n            }\n\n            return sortedItems;\n        }\n    }\n\n    return ListAccessibility;\n}\n\nexport type TListAccessibility = ReturnType<typeof ListAccessibilityClassCreator>;\n\nexport type TListAccessibilityInstance = InstanceType<TListAccessibility>;\n\nexport default ListAccessibilityClassCreator;\n","import { dialogMgr } from 'widgets/toolbox/dialogMgr';\nimport { timeout } from 'widgets/toolbox/util';\n\nconst ESCAPE_CODE = 27;\n\n/**\n * @description Modal implementation\n * @param AccessibilityFocusTrapMixin mixin\n * @returns Modal class\n */\nfunction ModalClassCreator(\n    AccessibilityFocusTrapMixin: import('widgets/global/AccessibilityFocusTrapMixin').TAccessibilityFocusTrapMixin\n) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class Modal\n     * @augments AccessibilityFocusTrapMixin\n     * @classdesc Generic modal popups implementation.<br/>\n     * - It renders a modal popup with grayed background. Can be closed by clicking outside modal.\n     * - Allows to manage multi-modal depth structure (move one modal behind of another) (indirectly, bu using {@link dialogMgr}).\n     * - If Modal need to be inited only on some viewport can be used modificators (sm,md,lg,xl). For example data-widget.sm.md=\"modal\"</br>\n     * Note that in this case need also add same modificator to sub events in html elements. This can be easily done via \"dialogViewtypes\" variable in ISML template (see example below).<br/>\n     * Don't forget clear this variable after dialog closing tag.\n     * TODO: move AccesibilityFocusTrapMixin after the modal and hold all abstract methods (like afterShowModal) here.\n     * @property {string} data-widget - Widget name `modal`\n     * @property {boolean} data-disable-rendering - Disable rendering flag\n     * @property {string} data-classes-extra - Extra classes\n     * @property {string} data-classes-global-dialog - a set of space separated additional modal classes\n     * @property {string} data-classes-show - classes added to shown modal\n     * @property {string} data-classes-top-dialog - top modal class in modals hierarchy depth\n     * @property {string} data-classes-active - active modal classes\n     * @property {string} data-ref-container - modal reference container\n     * @property {string} data-ref-dialog - dialog reference container\n     * @property {string} data-classes-extra - extra classes for dialog\n     * @property {boolean} data-click-out-side - `true` if needed to close modal by clicking outside it\n     * @property {boolean} data-close-by-escape - `true` if needed to close modal by using `Esc` button\n     *\n     * @example <caption>Example of typical Modal widget</caption>\n     * <div\n     *     data-widget=\"modal\"\n     *     data-accessibility-alerts='{\n     *         \"dialogContentLoaded\": \"${Resource.msg('alert.dialogContentLoaded', 'global', null)}\"\n     *     }'\n     * >\n     *     // dialogViewtypes need only in case when modal should be inited on some viewports\n     *     <isset name=\"dialogViewtypes\" value=\"sm.md\" scope=\"page\" />\n     *\n     *     <div\n     *         class=\"b-dialog\"\n     *         id=\"editProductModal\"\n     *         data-ref=\"container\"\n     *         hidden=\"hidden\"\n     *         data-event-click.self=\"closeModal\"\n     *         data-label-loading=\"${Resource.msg('common.loading', 'common', '')}\"\n     *     >\n     *         <div\n     *             class=\"b-dialog-window\"\n     *             role=\"dialog\"\n     *             data-ref=\"dialog\"\n     *             aria-modal=\"true\"\n     *             aria-label=\"${Resource.msg('common.loading', 'common', '')}\"\n     *         >\n     *             <div class=\"b-dialog-header\">\n     *                 <isinclude template=\"components/modal/closeButton\">\n     *             </div>\n     *             <div\n     *                 class=\"b-dialog-body b-user_content\"\n     *                 data-ref=\"content\"\n     *             ></div>\n     *         </div>\n     *     </div>\n     *\n     *     <script type=\"template/mustache\" data-ref=\"template\">\n     *          <div\n     *             class=\"b-dialog-window\"\n     *             role=\"dialog\"\n     *             data-ref=\"dialog\"\n     *             aria-modal=\"true\"\n     *             aria-labelledby=\"editProductModalTitle\"\n     *         >\n     *             <div class=\"b-dialog-header\">\n     *                 <button\n     *                     class=\"b-dialog-close\"\n     *                     title=\"${Resource.msg('common.close','common',null)}\"\n     *                     aria-label=\"${Resource.msg('common.close','common',null)}\"\n     *                     type=\"button\"\n     *                     data-dismiss=\"modal\"\n     *                     data-ref=\"closeEditPopup\"\n     *                     data-event-click.prevent=\"cancel\"\n     *                     data-tau=\"edit_product_dialog_close\"\n     *                 >\n     *                     <isinclude template=\"/common/icons/standalone/close\" />\n     *                 </button>\n     *             </div>\n     *             {{${'#'}body}}\n     *                 <div class=\"b-dialog-body\" data-ref=\"content\">\n     *                     {{&body}}\n     *                 </div>\n     *             {{/body}}\n     *\n     *             {{${'#'}footer}}\n     *                 <div class=\"b-dialog-footer\">\n     *                     {{&footer}}\n     *                 </div>\n     *             {{/footer}}\n     *         </div>\n     *     </script>\n     * </div>\n     */\n    class Modal extends AccessibilityFocusTrapMixin {\n        backFocusElement?: HTMLElement | null;\n\n        classesWrapper: string | Array<string> = '';\n\n        classesGlobalDialog = '';\n\n        longWaitingTimeout?: () => void | undefined;\n\n        escHandler?: () => void;\n\n        clickOutsideHandler?: () => void;\n\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        attributes: any;\n\n        isDialogOpen = false;\n\n        prefs() {\n            return {\n                classesGlobalDialog: 'm-has_dialog',\n                classesShow: 'm-opened',\n                classesTopDialog: 'm-top_dialog',\n                classesActive: 'm-active',\n                classesClosed: 'm-closed',\n                refContainer: 'container', // TODO: Investigate. get rid of container as required element in modal structure\n                refDialog: 'dialog',\n                refContent: 'content',\n                refTitle: 'title',\n                closeOpenedModal: false,\n                classesExtra: '',\n                clickOutSide: true,\n                disableRendering: false,\n                closeByEscape: true,\n                accessibilityAlerts: <TAccessibilityAlerts>{},\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n\n            this.classesGlobalDialog = this.prefs().classesGlobalDialog;\n\n            this.onDestroy(() => {\n                const refDialog = this.ref(this.prefs().refDialog);\n\n                refDialog.attr('role', false);\n                refDialog.attr('aria-modal', false);\n                this.cancel();\n            });\n        }\n\n        /**\n         * @description Show Modal preview for modals with async modal content as an immediate reaction to user action\n         * @param [wrapperClasses] - container class name to set appropriate modal window width\n         */\n        showModalPreview(wrapperClasses?: string | Array<string>) {\n            const container = this.ref(this.prefs().refContainer);\n            const dialog = this.ref(this.prefs().refDialog);\n\n            container.removeClass(this.classesWrapper);\n\n            if (wrapperClasses) {\n                this.classesWrapper = wrapperClasses;\n                container.addClass(wrapperClasses);\n            }\n\n            container.addClass(this.prefs().classesShow);\n            container.show();\n            dialog.addClass(this.prefs().classesActive);\n            this.toggleSpinner(true);\n\n            this.backFocusElement = <HTMLElement> document.activeElement;\n            this.focusFirstElement();\n            this.addGlobalDialogClass();\n        }\n\n        /**\n         * @description Show Modal and puts it to the top of opened modals hierarchy.\n         * TODO: Refactor.s it probably would be better to call it only from dialogMgr (if it possible)\n         * @param [templateData] data to be rendered in template\n         * @param [cb] optional callback\n         * @param [isAsyncModalData] is asynchronous modal data\n         */\n        showModal(templateData?: Record<string, unknown>, cb?: () => void, isAsyncModalData?: boolean): Promise<void> {\n            if (this.prefs().closeOpenedModal) {\n                this.closeModal();\n            }\n\n            if (!isAsyncModalData) {\n                this.backFocusElement = <HTMLElement> document.activeElement;\n            }\n\n            let renderedPromise = Promise.resolve();\n\n            if (templateData && !this.prefs().disableRendering) {\n                const renderRefElement = isAsyncModalData ? this.ref(this.prefs().refDialog) : this.ref(this.prefs().refContainer);\n\n                renderedPromise = this.render(templateData.templateName as string, templateData, renderRefElement);\n            }\n\n            return renderedPromise.then(() => {\n                this.onBeforeShowModal(<{ attributes: Record<string, unknown>}>templateData);\n                dialogMgr.openDialog(this);\n                this.show();\n\n                if (isAsyncModalData) {\n                    const accessibilityAlert = this.prefs().accessibilityAlerts.dialogContentLoaded;\n\n                    /**\n                     * @description Global event to show alert\n                     * @event \"alert.show\"\n                     */\n                    this.eventBus().emit('alert.show', {\n                        accessibilityAlert\n                    });\n                }\n\n                if (cb && typeof cb === 'function') {\n                    cb();\n                } else if (!isAsyncModalData) {\n                    this.afterShowModal();\n                }\n            });\n        }\n\n        /**\n         * @description Shows spinner bar in widget once any update operations (server calls) are pending\n         * @param isBusy - show / hide spinner\n         */\n        toggleSpinner(isBusy: boolean) {\n            this.ref(this.prefs().refDialog).removeClass(this.prefs().classesLoading);\n\n            if (this.longWaitingTimeout) {\n                this.longWaitingTimeout();\n            }\n\n            if (isBusy) {\n                // the spinner will be shown for an action that takes more than 1 second, which is recommended by UX practices\n                this.longWaitingTimeout = timeout(() => {\n                    this.ref(this.prefs().refDialog).addClass(this.prefs().classesLoading);\n                }, 1000);\n            }\n        }\n\n        /**\n         * @description Open a dialog. This method is executed explicitly or implicitly from `showModal` method.\n         */\n        open() {\n            const dialog = this.ref(this.prefs().refDialog);\n\n            dialog.attr('role', 'dialog');\n            dialog.attr('aria-modal', 'true');\n            dialog\n                .addClass(this.prefs().classesActive)\n                .addClass(this.prefs().classesTopDialog)\n                .removeClass(this.prefs().classesClosed);\n\n            this.addGlobalDialogClass();\n            this.addListeners();\n\n            const classes = [this.prefs().classesShow];\n\n            if (this.prefs().classesExtra) {\n                classes.push(this.prefs().classesExtra);\n            }\n\n            this.ref(this.prefs().refContainer)\n                .addClass(classes.join(' '))\n                .show();\n\n            this.isDialogOpen = true;\n        }\n\n        /**\n         * @description Move Behind current modal in opened modals stack.\n         */\n        moveBehind() {\n            this.cleanUpListeners();\n            this.ref(this.prefs().refDialog).removeClass(this.prefs().classesTopDialog);\n        }\n\n        /**\n         * @description Move To Top current modal in opened modals stack.\n         */\n        moveToTop() {\n            this.addListeners();\n            this.ref(this.prefs().refDialog).addClass(this.prefs().classesTopDialog);\n        }\n\n        /**\n         * @description Close modal.\n         */\n        close() {\n            this.cleanUpListeners();\n\n            const classes = [this.prefs().classesShow];\n\n            if (this.prefs().classesExtra) {\n                classes.push(this.prefs().classesExtra);\n            }\n\n            this.ref(this.prefs().refContainer).removeClass(classes.join(' '));\n\n            this.ref(this.prefs().refDialog)\n                .removeClass([this.prefs().classesTopDialog, this.prefs().classesActive].join(' '))\n                .addClass(this.prefs().classesClosed);\n\n            this.isDialogOpen = false;\n        }\n\n        /**\n         * @description Add Global Dialog Class\n         */\n        addGlobalDialogClass() {\n            const html = this.ref('html');\n\n            if (!this.classesGlobalDialog) { return; }\n\n            if (!html.hasClass(this.classesGlobalDialog)) {\n                html.addClass(this.classesGlobalDialog);\n            }\n        }\n\n        /**\n         * @description Remove Global Dialog Class\n         */\n        removeGlobalDialogClass() {\n            if (!this.classesGlobalDialog) { return; }\n\n            this.ref('html').removeClass(this.classesGlobalDialog);\n        }\n\n        /**\n         * @description Close Modal\n         * TODO: Refactor. it probably would be better to call it only from dialogMgr (if it possible)\n         * What is difference from .close()\n         */\n        closeModal() {\n            dialogMgr.closeDialog();\n\n            if (this.backFocusElement) {\n                this.backFocusElement.focus();\n                this.backFocusElement = null;\n            }\n\n            if (!this.prefs().disableRendering) {\n                const refContainer = this.ref(this.prefs().refContainer);\n\n                refContainer.hide();\n                this.ref(this.prefs().refContent).empty();\n                this.ref(this.prefs().refTitle).empty();\n                this.ref(this.prefs().refDialog).attr('aria-label', refContainer.data<string>('labelLoading'));\n            }\n\n            this.onAfterCloseModal();\n        }\n\n        /**\n         * @description Clean Up Listeners\n         */\n        cleanUpListeners() {\n            if (this.escHandler) {\n                this.escHandler();\n                this.escHandler = undefined;\n            }\n\n            if (this.clickOutsideHandler) {\n                this.clickOutsideHandler();\n                this.clickOutsideHandler = undefined;\n            }\n        }\n\n        /**\n         * @description Lifecycle hook `onAfterCloseModal` executes after closing modal window.\n         * Used to:\n         * - remove modal DOM element attributes as per modal setup\n         */\n        onAfterCloseModal() {\n            if (this.attributes) {\n                Object.keys(this.attributes).forEach((key) => {\n                    this.ref('container').attr(key, false);\n                });\n            }\n        }\n\n        /**\n         * @description Lifecycle hook `onBeforeShowModal` executes before opening modal window.\n         * @param modalData Input object for modal popup.\n         * @param modalData.attributes\n         * Used to:\n         * - add modal DOM element attributes as per modal setup\n         */\n        onBeforeShowModal(modalData: { attributes: Record<string, unknown>} | undefined) {\n            if (modalData && modalData.attributes) {\n                Object.keys(modalData.attributes).forEach((key) => {\n                    const value = <string>modalData.attributes[key];\n\n                    if (value === null || value === undefined || value === '') {\n                        delete modalData.attributes[key];\n                    }\n\n                    this.ref('container').attr(key, value);\n                });\n                this.attributes = modalData.attributes;\n            }\n        }\n\n        /**\n         * @description Cancel Handler\n         * @emits Modal#cancel\n         */\n        cancel() {\n            this.closeModal();\n            /**\n             * @description Event dispatched, when modal was closed\n             * @event Modal#cancel\n             */\n            this.emit('cancel');\n        }\n\n        /**\n         * @description Add Click Outside / Close by ESC Listener\n         */\n        addListeners() {\n            if (this.prefs().clickOutSide) {\n                this.clickOutsideHandler = this.ev('click', (_, event) => {\n                    if (event.target === this.ref(this.prefs().refContainer).get()) {\n                        this.cancel();\n                    }\n                }, this.ref(this.prefs().refContainer).get()).pop();\n            }\n\n            if (this.prefs().closeByEscape) {\n                this.escHandler = this.ev('keyup', (_, event) => {\n                    const keyboardEvent = <KeyboardEvent> event;\n\n                    if (keyboardEvent.keyCode === ESCAPE_CODE) {\n                        this.cancel();\n                    }\n                }, window).pop();\n            }\n        }\n\n        /**\n         * @description Shows modal in a DOM\n         * @returns this obj - current instance for chaining\n         */\n        show(): this {\n            super.show();\n\n            return this;\n        }\n\n        /**\n         * @description Hide modal in DOM\n         * @returns this obj - current instance for chaining\n         */\n        hide(): this {\n            this.ref(this.prefs().refContainer).hide();\n\n            return this;\n        }\n    }\n\n    return Modal;\n}\n\nexport type TModal = ReturnType<typeof ModalClassCreator>;\n\nexport type TModalInstance = InstanceType<TModal>;\n\nexport default ModalClassCreator;\n","/**\n * @description Base ProcessButton implementation\n * @param Button Base widget for extending\n * @returns Process Button class\n */\nfunction ProcessButtonClassCreator(Button: import('widgets/global/Button').TButton) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class ProcessButton\n     * @augments Button\n     * @classdesc ProcessButton widget, which could be used in different contexts (html-markup, inside widgets etc).\n     * <br>Could be also used to trigger parent's widget method\n     * @property {string} data-widget - Widget name `processButton`\n     * @property {string} data-widget-event-click - Event listener to call Parent's widget method\n     * @property {string} data-event-click - Event listener method `handleClick` for click event on widget\n     * @property {string} data-processing-label - Processing Label\n     * @property {string} data-processing-class - Processing Class\n     * @example\n     * // use this code to display widget\n     * <button type=\"submit\" class=\"btn btn-block btn-primary\"\n     *     class=\"b-button_multi_state b-button b-product_addtocard_set-button\"\n     *     type=\"button\"\n     *     data-widget=\"processButton\"\n     *     data-widget-event-click=\"onAddAllToCart\"\n     *     data-event-click=\"handleClick\"\n     *     data-pid=\"${product.id}\"\n     *     data-selected-quantity=\"${product.selectedQuantity}\"\n     *     data-add-to-cart-url=\"${pdict.addToCartUrl}\"\n     *     data-status-ooo-label=\"${Resource.msg('addtocart.unavailable', 'product', null)}\"\n     *     data-processing-label=\"${Resource.msg('addtocart.processing', 'product', null)}\"\n     *     data-processing-class=\"m-processing\"\n     * >\n     *     <isinclude template=\"/common/icons/standalone/loader\" />\n     *     <span data-ref=\"container\">\n     *         ... content\n     *     </span>\n     * </button>\n     */\n    class ProcessButton extends Button {\n        currentText = '';\n\n        isBusy = false;\n\n        prefs() {\n            return {\n                processingLabel: 'processing...',\n                processingClass: 'm-processing',\n                pid: '',\n                addToCartUrl: '',\n                selectedQuantity: 0,\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Start Progress\n         * @param val - Value to set as a text of the Button\n         */\n        startProcess(val?: string) {\n            if (this.isBusy) {\n                return;\n            }\n\n            this.busy();\n            this.currentText = this.getText();\n            this.setText(val || this.prefs().processingLabel);\n            this.ref('self').addClass(this.prefs().processingClass);\n        }\n\n        /**\n         * @description Stop Progress\n         * @param val - Value to set as a text of the Button\n         */\n        stopProcess(val?: string) {\n            this.unbusy();\n\n            const buttonText = val || this.currentText;\n\n            if (buttonText) {\n                this.setText(buttonText);\n            }\n\n            this.ref('self').removeClass(this.prefs().processingClass);\n        }\n\n        /**\n         * @description Get Text\n         * @returns Button Text\n         */\n        getText(): string {\n            return this.ref('container').getText();\n        }\n\n        /**\n         * @description Set Text\n         * @param val - Value to set as a text of the Button\n         * @returns Reference element\n         */\n        setText(val = '') {\n            return this.ref('container').setText(val);\n        }\n    }\n\n    return ProcessButton;\n}\n\nexport type TProcessButton = ReturnType<typeof ProcessButtonClassCreator>;\n\nexport type TProcessButtonInstance = InstanceType<TProcessButton>;\n\nexport default ProcessButtonClassCreator;\n","import { TWidget } from 'widgets/Widget';\n\n/**\n * @param Widget Base widget for extending\n * @returns SoftKeyboardToggleMixin class\n */\nfunction SoftKeyboardToggleMixinClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class SoftKeyboardToggleMixin\n     * @augments Widget\n     * @classdesc Represents SoftKeyboardToggleMixin component with next features:\n     * 1. Hides software keyboard on touches outside the keyboard to avoid iOS issues.\n     * 2. This class is not intended to have a separate DOM representation.\n     * @property {string} data-widget - Widget name \"searchBoxToggle\"\n     * @property {string} data-input - Target input\n     */\n    class SoftKeyboardToggleMixin extends Widget {\n        touchStartDisposables?: Array<TArrowVoidFunction>;\n\n        prefs() {\n            return {\n                input: '',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Initialize widget logic\n         */\n        init() {\n            super.init();\n\n            const input = this.ref('input').get();\n\n            if (input) {\n                this.ev('focus', this.hideKeyboardOnOutsideTouch, input);\n                this.ev('blur', this.hideKeyboardReset, input);\n            }\n        }\n\n        /**\n         * @description Hide keyboard\n         * @param el - dom element,\n         * @param event - dom event\n         */\n        hideKeyboard(el: HTMLElement, event: Event) {\n            const input = this.ref('input').get();\n\n            if (input && (event.target !== input)) {\n                input.blur();\n            }\n        }\n\n        /**\n         * @description Hide keyboard on outside touch\n         */\n        hideKeyboardOnOutsideTouch() {\n            this.touchStartDisposables = this.ev('touchstart', this.hideKeyboard, window);\n        }\n\n        /**\n         * @description Remove event listeners\n         */\n        hideKeyboardReset() {\n            const disposables = this.touchStartDisposables;\n\n            if (typeof disposables !== 'undefined') {\n                disposables.forEach(fn => fn());\n            }\n        }\n    }\n\n    return SoftKeyboardToggleMixin;\n}\n\nexport type TSoftKeyboardToggleMixin = ReturnType<typeof SoftKeyboardToggleMixinClassCreator>;\n\nexport type TSoftKeyboardToggleMixinInstance = InstanceType<TSoftKeyboardToggleMixin>;\n\nexport default SoftKeyboardToggleMixinClassCreator;\n","import { TWidget } from 'widgets/Widget';\n\ntype TEntry = {\n    intersectionRatio: number;\n};\n\n/**\n * @param Widget Base widget for extending\n * @returns StickyHeader widget\n */\nfunction StickyHeaderClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class StickyHeader\n     * @augments Widget\n     * @classdesc StickyHeader helper. Should be on element before StickyHeader to observe intersection\n     * Could be reimplemented with getBoundClientRect.top and scroll listener.\n     * The main purpose is to define anchor for StickyHeader and toggle StickyHeader.\n     *\n     * @example <caption>Example of StickyHeader widget usage</caption>\n     * <div data-widget=\"stickyHeader\"></div>\n     */\n    class StickyHeader extends Widget {\n        observer?: IntersectionObserver;\n\n        prefs() {\n            return {\n                classesShow: 'b-header_stuck',\n                dataTau: 'header_sticky',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Initialize widget logic\n         */\n        init() {\n            const stickyHeader = this.ref('self').get();\n\n            if (!stickyHeader) {\n                return;\n            }\n\n            this.observer = new IntersectionObserver(([entry]) => this.toggleStickyState(entry), { threshold: 1 });\n            this.observer.observe(stickyHeader);\n        }\n\n        /**\n         * @description Toggle sticky header state\n         * @param entry Anchor for apply sticky header\n         */\n        toggleStickyState(entry: TEntry) {\n            document.body.classList.toggle(this.prefs().classesShow, entry.intersectionRatio < 1);\n\n            if (entry.intersectionRatio < 1) {\n                document.body.setAttribute('data-tau', this.prefs().dataTau);\n            } else {\n                document.body.removeAttribute('data-tau');\n            }\n        }\n\n        /**\n         * @description Destroy widget logic\n         */\n        destroy() {\n            const stickyHeader = this.ref('self').get();\n\n            if (this.observer && stickyHeader) {\n                this.observer.unobserve(stickyHeader);\n                this.observer.disconnect();\n            }\n        }\n    }\n\n    return StickyHeader;\n}\n\nexport type TStickyHeader = ReturnType<typeof StickyHeaderClassCreator>;\n\nexport type TStickyHeaderInstance = InstanceType<TStickyHeader>;\n\nexport default StickyHeaderClassCreator;\n","import { TWidget } from 'widgets/Widget';\n\n/**\n * @param Widget - widget for extending\n * @returns Tab Panel widget\n */\nfunction TabPanelClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class TabPanel\n     * @augments Widget\n     * @property {string} data-widget - Widget name `tabPanel`\n     * @classdesc Represents a TabPanel widget with the next features:\n     * 1. Toggle active\\inactive tab panel state\n     *\n     * @example <caption>Example of TabPanel widget usage</caption>\n     * <div data-widget=\"tabs\">\n     *     <ul class=\"nav nav-tabs nav-fill\">\n     *         <li class=\"nav-item\">\n     *             <a\n     *                 data-widget=\"button\"\n     *                 data-panel-name=\"login\"\n     *                 data-widget-event-click=\"handleTabClick\"\n     *                 data-id=\"button-login\"\n     *                 data-event-click.prevent=\"handleClick\"\n     *                 href=\"#login\" role=\"tab\"\n     *             >\n     *                 ${Resource.msg('link.header.login.module', 'login', null)}\n     *             </a>\n     *         </li>\n     *         <li class=\"nav-item\">\n     *             <a\n     *                 data-widget=\"button\"\n     *                 data-panel-name=\"register\"\n     *                 data-widget-event-click=\"handleTabClick\"\n     *                 data-id=\"button-register\"\n     *                 data-event-click.prevent=\"handleClick\"\n     *                 href=\"#register\" role=\"tab\"\n     *             >\n     *                 ${Resource.msg('link.header.register.module', 'login', null)}\n     *             </a>\n     *         </li>\n     *     </ul>\n     *     <div class=\"tab-content\">\n     *         <div id=\"login\" role=\"tabpanel\" data-widget=\"tabPanel\">\n     *             ... tab content\n     *             <isinclude template=\"account/components/loginForm\" />\n     *             <isinclude template=\"account/components/oauth\" />\n     *         </div>\n     *         <div id=\"register\" role=\"tabpanel\" data-widget=\"tabPanel\">\n     *             ... tab content\n     *             <isinclude template=\"account/components/registerForm\" />\n     *         </div>\n     *     </div>\n     * </div>\n     */\n    class TabPanel extends Widget {\n        isActive = false;\n\n        prefs() {\n            return {\n                classesActive: 'm-active',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Refresh widget handler\n         */\n        onRefresh() {\n            this.toggleActive(this.isActive);\n        }\n\n        /**\n         * @description Activates tab panel\n         */\n        activate() {\n            this.toggleActive(true);\n        }\n\n        /**\n         * @description Deactivates tab panel\n         */\n        deactivate() {\n            this.toggleActive(false);\n        }\n\n        /**\n         * @param state true to show/false to hide/undefined to auto\n         */\n        toggleActive(state: (boolean | undefined)) {\n            this.isActive = this.ref('self')\n                .toggleClass(this.prefs().classesActive, !!state)\n                .hasClass(this.prefs().classesActive);\n        }\n    }\n\n    return TabPanel;\n}\n\nexport type TTabPanel = ReturnType<typeof TabPanelClassCreator>;\n\nexport type TTabPanelInstance = InstanceType<TTabPanel>;\n\nexport default TabPanelClassCreator;\n","import { TWidget } from 'widgets/Widget';\nimport { TRefElementInstance } from 'widgets/toolbox/RefElement';\nimport { TTabPanelInstance } from 'widgets/global/TabPanel';\n\nconst keyCode = Object.freeze({\n    END: 35,\n    HOME: 36,\n    LEFT: 37,\n    RIGHT: 39\n});\n\ntype TButton = ReturnType<typeof import('widgets/global/Button').default>;\ntype TButtonInstance = InstanceType<TButton>;\n\nexport type TTabPanelChangeEvent = {\n    activePanelName: string;\n    previousActivePanelName: string;\n};\n\n/**\n * @description Base Tabs implementation\n * @param Widget - widget for extending\n * @returns Tabs widget\n */\nfunction TabsClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory global\n     * @class Tabs\n     * @augments Widget\n     * @property {string} data-widget - Widget name `tabs`\n     * @property {boolean} data-active-first - activate first tab and first tab panel\n     * @property {string} data-active-panel - activate tab and tab panel by provided panel id\n     * @property {boolean} data-auto-activation - if tabs list should follow accessibility `Tabs with Automatic Activation` feature\n     * @property {boolean} data-use-url-anchor - in case if true, each tab change will add a related hash to document location.\n     * @classdesc Represents tabbed contents displaying and navigation.\n     * Has the next features:\n     * 1. Mark selected tab as active\n     * 2. Handles keydown by enter\\space keyboard button to manipulate the active tab\n     * 3. Sets focus to the current tab\n     * 4. Adds hash to document location if enabled\n     *\n     * @example <caption>Example of Tabs widget usage</caption>\n     * <div\n     *     data-widget=\"tabs\"\n     *     data-auto-activation=\"true\"\n     *     data-active-panel=\"login\"\n     * >\n     *     <div\n     *         class=\"b-tab_list m-account\"\n     *         data-ref=\"tablist\"\n     *         role=\"tablist\"\n     *         data-event-keydown=\"handleKeydown\"\n     *         aria-label=\"${Resource.msg('login.tablist.title.wai', 'login', null)}\"\n     *     >\n     *         <button\n     *             class=\"b-tab_list-tab m-active\"\n     *             aria-selected=\"true\"\n     *             data-tau=\"button_login\"\n     *             aria-controls=\"login-tab-panel\"\n     *             data-panel-name=\"login\"\n     *             data-widget-event-click=\"handleTabClick\"\n     *             data-id=\"button-login\"\n     *             data-event-click.prevent=\"handleClick\"\n     *             data-widget=\"button\"\n     *             role=\"tab\"\n     *             id=\"button-login\"\n     *         >\n     *             ${Resource.msg('login.title', 'login', null)}\n     *         </button>\n     *         <button\n     *             class=\"b-tab_list-tab\"\n     *             role=\"tab\"\n     *             id=\"button-register\"\n     *             tabindex=\"-1\"\n     *             aria-selected=\"false\"\n     *             data-tau=\"button_register\"\n     *             aria-controls=\"register-tab-panel\"\n     *             data-panel-name=\"register\"\n     *             data-widget-event-click=\"handleTabClick\"\n     *             data-id=\"button-register\"\n     *             data-event-click.prevent=\"handleClick\"\n     *             data-widget=\"button\"\n     *          >\n     *              ${Resource.msg('login.title.newAccount', 'login', null)}\n     *          </button>\n     *     </div>\n     *     <div\n     *         role=\"tabpanel\"\n     *         class=\"b-tab_panel\"\n     *         id=\"login-tab-panel\"\n     *         aria-labelledby=\"button-login\"\n     *         data-ref=\"login\"\n     *         tabindex=\"0\"\n     *         data-tau=\"login_tab_panel_active\"\n     *     >\n     *         ... tab content\n     *     </div>\n     *     <div\n     *         role=\"tabpanel\"\n     *         class=\"b-tab_panel\"\n     *         id=\"register-tab-panel\"\n     *         aria-labelledby=\"button-register\"\n     *         data-ref=\"register\"\n     *         tabindex=\"0\"\n     *         data-tau=\"register_tab_panel_active\"\n     *     >\n     *         ... tab content\n     *     </div>\n     * </div>\n     */\n    class Tabs extends Widget {\n        panelNames: Array<string> = [];\n\n        focusedTab = '';\n\n        activePanel = '';\n\n        prefs() {\n            return {\n                classesActive: 'm-active',\n                activePanel: '',\n                activeFirst: false,\n                autoActivation: false,\n                useUrlAnchor: false,\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Refresh widget handler\n         */\n        onRefresh() {\n            super.onRefresh();\n            this.fulfillPanelNames();\n        }\n\n        /**\n         * @description Widget initialization logic\n         */\n        init() {\n            super.init();\n            this.fulfillPanelNames();\n\n            if (this.prefs().activePanel) {\n                this.activatePanel(this.prefs().activePanel);\n            } else if (this.prefs().useUrlAnchor) {\n                this.handleUrlChange();\n            } else if (this.prefs().activeFirst && this.panelNames && this.panelNames.length) {\n                this.activatePanel(this.panelNames[0]);\n            }\n        }\n\n        /**\n         * @description Registers all available panels by adding their IDs into array.\n         */\n        fulfillPanelNames() {\n            this.panelNames = [];\n            const Button: TButton = <TButton> this.getConstructor('button');\n\n            this.eachChild(child => {\n                if (child instanceof Button && this.panelNames) {\n                    this.panelNames.push(String(child.config.panelName));\n                }\n            });\n        }\n\n        /**\n         * @param clickedButton - Widget, representing customer's tab clicked element\n         */\n        handleTabClick(clickedButton: InstanceType<TWidget>) {\n            this.activatePanel(String(clickedButton.config.panelName));\n        }\n\n        /**\n         * @param panelName name of panel to activate\n         * @param saveToPushState - If we need to save hash in history\n         */\n        activatePanel(panelName: string, saveToPushState = true) {\n            if (!this.panelNames) {\n                return;\n            }\n\n            const previousActivePanelName = this.activePanel;\n\n            this.panelNames.forEach(id => {\n                const isActive = id === panelName;\n\n                if (isActive) {\n                    this.activePanel = panelName;\n                    this.focusedTab = panelName;\n                }\n\n                const currentTabPanel = this.toggleTabPanel(id, isActive, saveToPushState);\n\n                if (!currentTabPanel && this.ref(id)) {\n                    this.toggleActiveRefPanel(this.ref(id), isActive);\n\n                    if (isActive && saveToPushState) {\n                        this.handleUrlAnchor(id);\n                    }\n                }\n\n                this.toggleButton(id, isActive);\n            });\n\n            const eventData: TTabPanelChangeEvent = {\n                activePanelName: panelName,\n                previousActivePanelName\n            };\n\n            this.emit('panelactivated', eventData);\n        }\n\n        /**\n         * @description Toggle tab panel\n         * @param id - panel ID\n         * @param isActive - Is current one should be active\n         * @param saveToPushState - Is state should be added to browser history\n         * @returns Tab instance\n         */\n        toggleTabPanel(id: string, isActive: boolean, saveToPushState: boolean): TTabPanelInstance | undefined {\n            return this.getById<TTabPanelInstance, TTabPanelInstance>(id, (tabPanel) => {\n                tabPanel[isActive ? 'activate' : 'deactivate']();\n\n                if (isActive && saveToPushState) {\n                    this.handleUrlAnchor(id);\n                }\n\n                return tabPanel;\n            });\n        }\n\n        /**\n         * @description Toggle tab button\n         * @param id - panel ID\n         * @param isActive - Is current should be active\n         */\n        toggleButton(id: string, isActive: boolean) {\n            this.getById<TButtonInstance>(`button-${id}`, (button) => {\n                if (isActive) {\n                    button.activate();\n                    button.select();\n                } else {\n                    button.deactivate();\n                    button.unselect();\n                }\n            });\n        }\n\n        /**\n         * @description In addition to tab switch, action will be reflected in URL anchor, if enabled.\n         * This will further allow to select proper tab, when returning back from browser history.\n         * @param tabName tab name to reflect in browser location hash.\n         */\n        handleUrlAnchor(tabName: string) {\n            if (this.prefs().useUrlAnchor) {\n                window.history.pushState({\n                    hashChangedOnly: true\n                }, document.title, `#${tabName}`);\n            }\n        }\n\n        /**\n         * @description Triggers needed tab activation, when URL changed\n         * in case of history push/replace state and using browser's `back` button.\n         * @param saveToPushState - If we need to save hash in history\n         */\n        handleUrlChange(saveToPushState = true) {\n            if (document.location.hash) {\n                const panelToActivate = this.panelNames\n                    && this.panelNames.find(panelName => panelName === document.location.hash.replace('#', ''));\n\n                if (panelToActivate) {\n                    this.activatePanel(panelToActivate, saveToPushState);\n                }\n            }\n        }\n\n        /**\n         * @description Method to toggle active panel, if it is not a separate widget `TabPanel`\n         * but an ordinary `ref` element inside `Tabs` widget.\n         * @param panel target panel name\n         * @param state is target panel is selected or not\n         */\n        toggleActiveRefPanel(panel: TRefElementInstance, state: boolean) {\n            panel.toggleClass(this.prefs().classesActive, state);\n        }\n\n        /**\n         * @description Gets last focused panel name\n         * <br>(focused panel is not necessarily active panel)\n         * @returns Focused panel name if founded. Empty string otherwise\n         */\n        getLastFocusedTab(): string {\n            return this.focusedTab\n                ? this.focusedTab\n                : this.activePanel || (this.panelNames && this.panelNames[0]) || '';\n        }\n\n        /**\n         * @description Sets focus to panel with given name\n         * <br>Uses `roving focus` accessibility feature\n         * <br>https://www.w3.org/TR/wai-aria-practices/#kbd_roving_tabindex\n         * @param tab Tab name to set focus to\n         */\n        setFocusToTab(tab: string) {\n            if (!tab) {\n                return;\n            }\n\n            this.focusedTab = tab;\n\n            if (this.panelNames) {\n                this.panelNames.forEach(id => {\n                    const isTargetTab = id === tab;\n\n                    this.getById<TButtonInstance>(`button-${id}`, (button) => {\n                        if (isTargetTab) {\n                            button.focus().setTabIndex();\n                        } else {\n                            button.unsetTabIndex();\n                        }\n                    });\n                });\n            }\n\n            if (this.prefs().autoActivation) {\n                this.activatePanel(tab);\n            }\n        }\n\n        /**\n         * @description Sets focus to the very first panel\n         */\n        setFocusToFirstTab() {\n            const firstTab = (this.panelNames\n                && this.panelNames.length\n                && this.panelNames[0])\n                || '';\n\n            this.setFocusToTab(firstTab);\n        }\n\n        /**\n         * @description Sets focus to the very last panel\n         */\n        setFocusToLastTab() {\n            const lastTab = (this.panelNames\n                && this.panelNames.length\n                && this.panelNames[this.panelNames.length - 1])\n                || '';\n\n            this.setFocusToTab(lastTab);\n        }\n\n        /**\n         * @description Sets focus to previous panel. Loops focus, if first panel reached\n         */\n        setFocusToPreviousTab() {\n            if (this.panelNames && this.panelNames.length) {\n                const currentFocusedTab = this.getLastFocusedTab();\n                const currentFocusedTabIndex = this.panelNames.indexOf(currentFocusedTab);\n                const previousTab = currentFocusedTabIndex === 0\n                    ? this.panelNames[this.panelNames.length - 1]\n                    : this.panelNames[currentFocusedTabIndex - 1];\n\n                this.setFocusToTab(previousTab);\n            }\n        }\n\n        /**\n         * @description Sets focus to next panel. Loops focus, if last panel reached\n         */\n        setFocusToNextTab() {\n            if (this.panelNames && this.panelNames.length) {\n                const currentFocusedTab = this.getLastFocusedTab();\n                const currentFocusedTabIndex = this.panelNames.indexOf(currentFocusedTab);\n                const nextTab = currentFocusedTabIndex === this.panelNames.length - 1\n                    ? this.panelNames[0]\n                    : this.panelNames[currentFocusedTabIndex + 1];\n\n                this.setFocusToTab(nextTab);\n            }\n        }\n\n        /**\n         * @description Keydown Event handler\n         * @param _ Source of keydown event\n         * @param event  Event object\n         */\n        handleKeydown(_: HTMLElement, event: KeyboardEvent) {\n            let preventEventActions = false;\n\n            switch (event.keyCode) {\n                case keyCode.HOME:\n                    this.setFocusToFirstTab();\n                    preventEventActions = true;\n                    break;\n                case keyCode.END:\n                    this.setFocusToLastTab();\n                    preventEventActions = true;\n                    break;\n                case keyCode.LEFT:\n                    this.setFocusToPreviousTab();\n                    preventEventActions = true;\n                    break;\n                case keyCode.RIGHT:\n                    this.setFocusToNextTab();\n                    preventEventActions = true;\n                    break;\n                default:\n                    break;\n            }\n\n            if (preventEventActions) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n        }\n    }\n\n    return Tabs;\n}\n\nexport type TTabs = ReturnType<typeof TabsClassCreator>;\n\nexport type TTabsInstance = InstanceType<TTabs>;\n\nexport default TabsClassCreator;\n","import { TWidget } from 'widgets/Widget';\n\n/**\n * @param Widget Base widget for extending\n * @returns AnimationOnScroll class\n */\nfunction AnimationOnScrollClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory plugin_page_designer_ext\n     * @class AnimationOnScroll\n     * @augments Widget\n     * @classdesc Layout animation by adding m-animated class to data-ref=elemAnimated\n     *   <div\n     *     class=\"l-grid_layout m-1_up m-${pdict.scrollAnimations}\"\n     *     style=\"${pdict.styles}\"\n     *     data-widget=\"animationOnScroll\"\n     *     data-ref=\"elemAnimated\"\n     *    >\n     *       <div class=\"l-grid_layout-content ${pdict.hideGutters}\">\n     *            <isprint value=\"${\n     *                   pdict.regions.layout1Column1\n     *                      .setClassName('l-grid_layout-item m-lg_12 m-md_12 m-sm_6')\n     *                      .setComponentClassName('l-grid_layout-item_in')\n     *                      .setComponentAttribute('data-cell-type', 'lg-12 md-12 sm-6')\n     *                      .setComponentAttribute('data-layout-type', pdict.layoutContext)\n     *                      .render()\n     *             }\" encoding=\"off\"/>\n     *       </div>\n     *   </div>\n     */\n    class AnimationOnScroll extends Widget {\n        prefs() {\n            return {\n                element: 'elemAnimated',\n                animatedClass: 'm-animated',\n                rootMargin: '0px 0px -30%',\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n            this.bindObserver();\n        }\n\n        /**\n         * @description Executed when widget is re-rendered\n         */\n        onRefresh() {\n            super.onRefresh();\n            this.bindObserver();\n        }\n\n        /**\n         * @description bindObserver observe changes in the intersection of a target element\n         */\n        bindObserver() {\n            const element = this.ref(this.prefs().element).get();\n\n            if (!element) {\n                return;\n            }\n\n            const options = {\n                rootMargin: this.prefs().rootMargin\n            };\n\n            const animatedObserver = new IntersectionObserver((entries, observer) => {\n                entries.forEach((entry) => {\n                    const itemClasses = entry.target.classList;\n                    const isAbove = entry.boundingClientRect.y < (entry.rootBounds?.y || 0);\n\n                    if (isAbove || entry.isIntersecting) {\n                        itemClasses.add(this.prefs().animatedClass);\n                        observer.unobserve(entry.target);\n                    }\n                });\n            }, options);\n\n            animatedObserver.observe(element);\n        }\n    }\n\n    return AnimationOnScroll;\n}\n\nexport type TAnimationOnScroll = ReturnType<typeof AnimationOnScrollClassCreator>;\n\nexport type TAnimationOnScrollInstance = InstanceType<TAnimationOnScroll>;\n\nexport default AnimationOnScrollClassCreator;\n","function CarouselExtClassCreator(Carousel: ReturnType<typeof import('widgets/global/Carousel').default >) {\n    /**\n     * @category widgets\n     * @subcategory plugin_page_designer_ext\n     * @class CarouselExt\n     * @augments Widget\n     * @classdesc Represents Carousel component with next features:\n     * 1. Allow to set carousel direction based on the view type\n     * 2. Allow to use pagination for carousel rendered by mustache template\n     * 3. Allow to scroll carousel to the next/previous/custom( index can be passed to the method) page index\n     * 4. Allow to scroll by on the page click(can be used for carousel with thumbnails)\n     * 5. Allow to scroll to custom element's position\n     * 6. Allow to scroll to focused element\n     * 7. Support mousemove, touchmove, mouseup, mousedown, keydown event so we can use carousel even on touch devices.\n     * Also we can control carouse with keyboard\n     * 8. Allow to get carousel images\n     *\n     * <br>Uses as a basis slider from here (ScrollCarousel.js):\n     * <br>https://github.com/dimanech/aria-components/tree/master/cartridge1/js/components/carousels/carousel\n     * @property {string} data-widget - Widget name `carousel`\n     * @property {string} data-elem-prev-button - Previous button element\n     * @property {string} data-elem-next-button - Next button element\n     * @property {string} data-elem-carousel-track - Carousel inner element\n     * @property {string} data-direction - Carousel direction - an object, contains direction per viewport\n     * @example <caption>Example of Carousel widget usage</caption>\n     * <div\n     *     data-widget=\"carouselExt\"\n     *     data-elem-prev-button=\"elemPrevButton\"\n     *     data-elem-next-button=\"elemNextButton\"\n     *     data-elem-carousel-track=\"elemCarouselTrack\"\n     *     data-direction='{\n     *         \"small\": \"horizontal\",\n     *         \"medium\": \"horizontal\",\n     *         \"large\": \"vertical\",\n     *         \"extraLarge\": \"vertical\"\n     *     }'\n     * >\n     *     <button\n     *         class=\"carousel__ctrl _prev\"\n     *         data-elem-prev-button\n     *         tabindex=\"-1\"\n     *         aria-hidden=\"true\"\n     *         data-ref=\"elemPrevButton\"\n     *         data-event-click=\"scrollToPrevPageExt\"\n     *     >Prev</button>\n     *     <div\n     *         class=\"carousel__track\"\n     *         data-elem-carousel-track\n     *         data-ref=\"elemCarouselTrack\"\n     *         data-event-scroll=\"onScroll\"\n     *         data-event-touchstart=\"onScroll\"\n     *         data-event-mousedown.prevent=\"onMouseDown\"\n     *         data-event-mouseup=\"onMouseUp\"\n     *     >\n     *         <isloop items=\"${slotcontent.content}\" var=\"contentAsset\">\n     *             <div class=\"box _single\" tabindex=\"0\">\n     *                 <isprint value=\"${contentAsset.custom.body}\" encoding=\"off\" />\n     *             </div>\n     *         </isloop>\n     *     </div>\n     *     <button\n     *         class=\"carousel__ctrl _next\"\n     *         data-elem-next-button\n     *         tabindex=\"-1\"\n     *         aria-hidden=\"true\"\n     *         data-ref=\"elemNextButton\"\n     *         data-event-click=\"scrollToNextPageExt\"\n     *     >Next</button>\n     *     <div class=\"pagination\" data-ref=\"pagination\"></div>\n     *     <script type=\"template/mustache\" data-ref=\"template\">\n     *         <div class=\"pagination\" data-ref=\"pagination\">\n     *             {{${'#'}pagination}}\n     *             <button\n     *                 class=\"page\"\n     *                 data-page=\"{{page}}\"\n     *                 tabindex=\"-1\"\n     *                 data-event-click.prevent=\"handlePaginationClick\"\n     *             >\n     *             </button>\n     *             {{/pagination}}\n     *         </div>\n     *     </script>\n     * </div>\n     */\n    class CarouselExt extends Carousel {\n        elemCarouselTrack!: HTMLElement;\n\n        currentPageIndex = 0;\n\n        slidesQty = 0;\n\n        slideStart: Array<number> = [];\n\n        slides!: HTMLCollectionOf<HTMLElement>;\n\n        initCarousel() {\n            this.setCarouselDimensions();\n            this.scrollToPage(0);\n            super.initCarousel();\n        }\n\n        /**\n         * @description Set carousel details: current slide index, slides qty\n        */\n        setCarouselDimensions() {\n            this.elemCarouselTrack = super.ref('elemCarouselTrack').get() as HTMLElement;\n            this.currentPageIndex = 0;\n            this.slidesQty = this.elemCarouselTrack.childElementCount;\n            this.slideStart = [];\n            this.slides = this.elemCarouselTrack.children as HTMLCollectionOf<HTMLElement>;\n\n            if (this.elemCarouselTrack) {\n                for (let i = 0; i < this.slides.length; i++) {\n                    this.slideStart[i] = 0;\n\n                    for (let j = 0; j < i; j++) {\n                        this.slideStart[i] += this.slides[j].clientWidth;\n                    }\n                }\n            }\n        }\n\n        /**\n         * @description Executed when widget is re-rendered\n         */\n        onRefresh() {\n            this.setCarouselDimensions();\n            super.onRefresh();\n        }\n\n        /**\n         * @description Scroll carousel to the page width index\n         * @param index of the page to scroll to\n         */\n        scrollToPage(index) {\n            this.elemCarouselTrack.scrollTo({ top: 0, left: this.slideStart[index], behavior: 'smooth' });\n\n            return this;\n        }\n\n        /**\n         * @description Scroll carousel to the next page\n         * @listens dom#click\n         */\n        scrollOneForward(_el, event) {\n            // We need this to have click on Page Designer.\n            // Use mousedown,touchstart since click overloaded.\n            // Check that it is not triggered by mouse buttons.\n            // Restricted btn: mouse right and center. True - if restricted btn was clicked\n            if (event.button) {\n                return;\n            }\n\n            this.currentPageIndex += (this.currentPageIndex < this.slidesQty ? 1 : 0);\n            this.scrollToPage(this.currentPageIndex);\n            this.isNavButtonClicked = true;\n        }\n\n        /**\n         * @description Scroll carousel to the previous page\n         * @listens dom#click\n         */\n        scrollOneBack(_el, event) {\n            // We need this to have click on Page Designer.\n            // Use mousedown,touchstart since click overloaded.\n            // Check that it is not triggered by mouse buttons.\n            // Restricted btn: mouse right and center. True - if restricted btn was clicked\n            if (event.button) {\n                return;\n            }\n\n            this.currentPageIndex -= (this.currentPageIndex > 0 ? 1 : 0);\n            this.scrollToPage(this.currentPageIndex);\n            this.isNavButtonClicked = true;\n        }\n\n        updateCarouselMetric() {\n            const carouselElem = this.ref('elemCarouselBody').get();\n            const roundingDelta = this.roundingDelta || 0;\n\n            if (this.elemCarouselTrack && carouselElem) {\n                const totalScrollWidth = this.elemCarouselTrack.scrollLeft + carouselElem.offsetWidth;\n\n                this.isScrollStart = this.elemCarouselTrack.scrollLeft <= 0;\n                this.isScrollEnd = (totalScrollWidth + roundingDelta) >= this.elemCarouselTrack.scrollWidth;\n            }\n        }\n\n        onScrollEnd() {\n            const totalScrollWidth = this.elemCarouselTrack.scrollLeft + this.elemCarouselTrack.offsetLeft;\n            const allSlidesAttr = Array.from(this.slides).filter(item => item.offsetLeft > 0).map(function(item, index) {\n                return {\n                    leftPosition: item.offsetLeft,\n                    'slide-index': index\n                };\n            });\n\n            if (!this.isNavButtonClicked) {\n                for (let i = 0; i < allSlidesAttr.length; i++) {\n                    if (totalScrollWidth <= allSlidesAttr[i].leftPosition) {\n                        this.currentPageIndex = allSlidesAttr[i]['slide-index'];\n                        break;\n                    }\n                }\n            }\n\n            super.onScrollEnd();\n        }\n\n        /**\n         * @description Scroll carousel to the next page\n         * @param _el Source of Keydown event\n         * @param event event instance if DOM event\n         * @listens dom#click\n         */\n        scrollToNextPageExt(_el, event) {\n            // We need this to have click on Page Designer.\n            // Use mousedown,touchstart since click overloaded.\n            // Check that it is not triggered by mouse buttons.\n            // Restricted btn: mouse right and center. True - if restricted btn was clicked\n            if (event.button) {\n                return;\n            }\n\n            super.scrollToNextPage();\n        }\n\n        /**\n         * @description Scroll carousel to the previous page\n         * @param _el Source of Keydown event\n         * @param event event instance if DOM event\n         * @listens dom#click\n         */\n        scrollToPrevPageExt(_el, event) {\n            // We need this to have click on Page Designer.\n            // Use mousedown,touchstart since click overloaded.\n            // Check that it is not triggered by mouse buttons.\n            // Restricted btn: mouse right and center. True - if restricted btn was clicked\n            if (event.button) {\n                return;\n            }\n\n            super.scrollToPrevPage();\n        }\n    }\n\n    return CarouselExt;\n}\n\nexport type TCarouselExt = ReturnType<typeof CarouselExtClassCreator>;\n\nexport type TCarouselExtInstance = InstanceType<TCarouselExt>;\n\nexport default CarouselExtClassCreator;\n","function CarouselSimpleClassCreator(Carousel: ReturnType<typeof import('widgets/global/Carousel').default >) {\n    /**\n     * @category widgets\n     * @subcategory plugin_page_designer_ext\n     * @class CarouselSimple\n     * @augments Widget\n     * @classdesc Represents Carousel component with next features:\n     * 1. Allow to set carousel direction based on the view type\n     * 2. Allow to use pagination for carousel rendered by mustache template\n     * 3. Allow to scroll carousel to the next/previous/custom( index can be passed to the method) page index\n     * 4. Allow to scroll by on the page click(can be used for carousel with thumbnails)\n     * 5. Allow to scroll to custom element's position\n     * 6. Allow to scroll to focused element\n     * 7. Support mousemove, touchmove, mouseup, mousedown, keydown event so we can use carousel even on touch devices.\n     * Also we can control carouse with keyboard\n     * 8. Allow to get carousel images\n     *\n     * <br>Uses as a basis slider from here (ScrollCarousel.js):\n     * <br>https://github.com/dimanech/aria-components/tree/master/cartridge1/js/components/carousels/carousel\n     * @property {string} data-widget - Widget name `carousel`\n     * @property {string} data-elem-prev-button - Previous button element\n     * @property {string} data-elem-next-button - Next button element\n     * @property {string} data-elem-carousel-track - Carousel inner element\n     * @property {string} data-direction - Carousel direction - an object, contains direction per viewport\n     * @example <caption>Example of Carousel widget usage</caption>\n     * <div\n     *     data-widget=\"carouselSimple\"\n     *     data-elem-prev-button=\"elemPrevButton\"\n     *     data-elem-next-button=\"elemNextButton\"\n     *     data-elem-carousel-track=\"elemCarouselTrack\"\n     *     data-direction='{\n     *         \"small\": \"horizontal\",\n     *         \"medium\": \"horizontal\",\n     *         \"large\": \"vertical\",\n     *         \"extraLarge\": \"vertical\"\n     *     }'\n     * >\n     *     <button\n     *         class=\"carousel__ctrl _prev\"\n     *         data-elem-prev-button\n     *         tabindex=\"-1\"\n     *         aria-hidden=\"true\"\n     *         data-ref=\"elemPrevButton\"\n     *         data-event-click=\"scrollToPrevPageSimple\"\n     *     >Prev</button>\n     *     <div\n     *         class=\"carousel__track\"\n     *         data-elem-carousel-track\n     *         data-ref=\"elemCarouselTrack\"\n     *         data-event-scroll=\"onScroll\"\n     *         data-event-touchstart=\"onScroll\"\n     *         data-event-mousedown.prevent=\"onMouseDown\"\n     *         data-event-mouseup=\"onMouseUp\"\n     *     >\n     *         <isloop items=\"${slotcontent.content}\" var=\"contentAsset\">\n     *             <div class=\"box _single\" tabindex=\"0\">\n     *                 <isprint value=\"${contentAsset.custom.body}\" encoding=\"off\" />\n     *             </div>\n     *         </isloop>\n     *     </div>\n     *     <button\n     *         class=\"carousel__ctrl _next\"\n     *         data-elem-next-button\n     *         tabindex=\"-1\"\n     *         aria-hidden=\"true\"\n     *         data-ref=\"elemNextButton\"\n     *         data-event-click=\"scrollToNextPageSimple\"\n     *     >Next</button>\n     *     <div class=\"pagination\" data-ref=\"pagination\"></div>\n     *     <script type=\"template/mustache\" data-ref=\"template\">\n     *         <div class=\"pagination\" data-ref=\"pagination\">\n     *             {{${'#'}pagination}}\n     *             <button\n     *                 class=\"page\"\n     *                 data-page=\"{{page}}\"\n     *                 tabindex=\"-1\"\n     *                 data-event-click.prevent=\"handlePaginationClick\"\n     *             >\n     *             </button>\n     *             {{/pagination}}\n     *         </div>\n     *     </script>\n     * </div>\n     */\n    class CarouselSimple extends Carousel {\n        defaultLeft!: number;\n\n        initCarousel() {\n            super.initCarousel();\n\n            this.defaultLeft = parseInt(getComputedStyle(this.ref('pagination').get() as Element).getPropertyValue('left'), 10);\n        }\n\n        /**\n         * @description Collects carousel data and emits event\n         * TODO: It should not be hard coded to product carousel name.\n         * @param actionType Type of slide action\n         * @param targetPageIndex Target slide index\n         */\n        onCarouselClick(actionType, targetPageIndex) {\n            const elemCarouselTrack = this.ref(this.prefs().elemCarouselTrack).get() as Element;\n            const elemSlide = elemCarouselTrack.children[targetPageIndex];\n\n            const productTileName = (elemSlide?.querySelector('[data-product-name]') as HTMLElement)?.dataset?.productName;\n            const textBlockValue = elemSlide?.querySelectorAll('h1, h2, h3')[0]?.textContent;\n\n            this.eventBus().emit('simpleCarousel.click', actionType, productTileName || textBlockValue);\n        }\n\n        /**\n         * @description Scroll carousel to the next page\n         * @param _el Source of Keydown event\n         * @param event event instance if DOM event\n         * @listens dom#click\n         */\n        scrollToNextPageSimple(_el, event) {\n            // We need this to have click on Page Designer.\n            // Use mousedown,touchstart since click overloaded.\n            // Check that it is not triggered by mouse buttons.\n            // Restricted btn: mouse right and center. True - if restricted btn was clicked\n            if (event.button) {\n                return;\n            }\n\n            const pageIndex = this.getCurrentPageIndex() + 1;\n\n            super.scrollToNextPage();\n            this.onCarouselClick('next_slide', pageIndex);\n        }\n\n        /**\n         * @description Scroll carousel to the previous page\n         * @param _el Source of Keydown event\n         * @param event event instance if DOM event\n         * @listens dom#click\n         */\n        scrollToPrevPageSimple(_el, event) {\n            // We need this to have click on Page Designer.\n            // Use mousedown,touchstart since click overloaded.\n            // Check that it is not triggered by mouse buttons.\n            // Restricted btn: mouse right and center. True - if restricted btn was clicked\n            if (event.button) {\n                return;\n            }\n\n            const pageIndex = this.getCurrentPageIndex() - 1;\n\n            super.scrollToPrevPage();\n            this.onCarouselClick('prev_slide', pageIndex);\n        }\n\n        /**\n         * @description Scroll carousel to the page index\n         * @param pageIndex Page index scroll to\n         */\n        scrollToPage(pageIndex) {\n            super.scrollToPage(pageIndex);\n            this.onCarouselClick('pagination_click', pageIndex);\n\n            return this;\n        }\n\n        /**\n         * @description Added next and prev slides and detect position of first pagination dot\n         */\n        setActivePagination() {\n            super.setActivePagination();\n\n            const pageIndex = super.getCurrentPageIndex();\n            const paginationContent = this.ref('pagination').get() as HTMLElement;\n\n            [].slice.call((paginationContent?.children)).forEach((element: Element) => {\n                const dataPage = parseInt(((element && element.getAttribute('data-page')) || '0'), 10);\n\n                element.classList.toggle(this.prefs().pageCurrentClass, dataPage === pageIndex);\n            });\n\n            paginationContent.style.left = (1 - pageIndex) * this.defaultLeft + 'px';\n\n            this.setPageIndex();\n        }\n\n        /**\n         * @description set current slide index in carousel\n         */\n        setPageIndex() {\n            this.ref('setPageIndex').setHtml((super.getCurrentPageIndex() + 1).toString());\n        }\n    }\n\n    return CarouselSimple;\n}\n\nexport type TCarouselSimple = ReturnType<typeof CarouselSimpleClassCreator>;\n\nexport type TCarouselSimpleInstance = InstanceType<TCarouselSimple>;\n\nexport default CarouselSimpleClassCreator;\n","import { TWidget } from 'widgets/Widget';\n\n/**\n * @param Widget Base widget for extending\n * @returns CtaExt class\n */\nfunction CtaExtClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory plugin_page_designer_ext\n     * @class CtaExt\n     * @augments Widget\n     * @classdesc Represents CtaExt component with next features:\n     * 1. Add GTM event when CtaExt clicked\n     * 2. Transfer styles from CtaExt to wrapper, when CTA is inside the BannerExt or TextBlock components\n     *\n     * <div class=\"b-button-ext ${pdict.mods}\">\n     *     <a href=\"${pdict.componentUrl}\" data-widget=\"ctaExt\" data-event-click=\"onCtaExtClick\" class=\"b-button\" style=\"${pdict.buttonWidth}\">\n     *         <span class=\"b-button-text\">${pdict.componentLabel}</span>\n     *     </a>\n     * </div>\n     */\n\n    class CtaExt extends Widget {\n        init() {\n            super.init();\n\n            this.transferAttributes();\n        }\n\n        /**\n         * @description Executed when widget is re-rendered\n         */\n        onRefresh() {\n            super.onRefresh();\n            this.transferAttributes();\n        }\n\n        /**\n         * @description Emit eventBus for send data to data layer\n         * @param elem - Target element\n         */\n        onCtaExtClick(elem) {\n            this.eventBus().emit('ctaExt.click', elem);\n        }\n\n        /**\n         * @description Transfer attributes from inner CTAs to outer wrapper\n         */\n        transferAttributes() {\n            const ctaWrapper = this.ref('self').get()?.closest('[data-ref=\"ctaExtWrapper\"]');\n\n            if (ctaWrapper) {\n                ctaWrapper.setAttribute('style', this.ref('self').attr('style'));\n            }\n        }\n    }\n\n    return CtaExt;\n}\n\nexport type TCtaExt = ReturnType<typeof CtaExtClassCreator>;\n\nexport type TCtaExtInstance = InstanceType<TCtaExt>;\n\nexport default CtaExtClassCreator;\n","import { TWidget } from 'widgets/Widget';\nimport { getContentByUrl } from 'widgets/toolbox/ajax';\nimport { appendParamsToUrl } from 'widgets/toolbox/util';\nconst EINSTEIN_VERSION = '1.02';\n\ndeclare type TRecommendationParams = {\n    userId: string | unknown;\n    cookieId: string | unknown;\n    emailId: string | unknown;\n    loginId: string | unknown;\n    ccver: string | unknown;\n    anchors?: object;\n}\n\ndeclare type TCQuotient = {\n    clientId: string;\n    getCQUserId: () => Record<string, unknown>;\n    getCQCookieId: () => Record<string, unknown>;\n    getRecs: (clientId: string, recommender: string, RecsParams, callback: (recommenders) => void) => Record<string, unknown>;\n    getCQHashedEmail: () => Record<string, unknown>;\n    getCQHashedLogin: () => Record<string, unknown>;\n    widgets: Array<object>;\n}\n\ndeclare global {\n    interface Window {\n        CQuotient: TCQuotient;\n    }\n}\n\ntype TAnchorObject = {\n    id: string;\n    sku?: string;\n    type?: string;\n    // eslint-disable-next-line camelcase\n    alt_id?: string;\n};\n\n/**\n * @param Widget Base widget for extending\n * @returns EinsteinCarouselLoader widget\n */\nfunction EinsteinCarouselLoaderClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory plugin_page_designer\n     * @class EinsteinCarouselLoader\n     * @augments Widget\n     * @classdesc EinsteinCarouselLoader Widget - used to load recommendation data from Einstein engine\n     * and pass data to backend for carousel markup rendering\n     * @property {string} data-title - Carousel title\n     * @property {string} data-recommender - Einstein recommender to use\n     * @property {string} data-category-id - category id if need show recommendations in context of category\n     * @property {string} data-primary-product-id - product id if need show recommendations in context of product.\n     * For variations or variations groups it is ID of master product\n     * @property {string} data-secondary-product-id - if context product is variations or variations groups it is their id, otherwise empty\n     * @property {string} data-alternative-group-type - if product has types 'set', 'bundle' or 'vgroup' then it has same value, otherwise empty\n     * @property {string} data-alternative-group-id - product id if product has type 'set', 'bundle' or 'vgroup'\n     * @property {object} data-tile-params - tile rendering parameters\n     * @property {string} data-load-url - URL to get rendered carousel markup\n     * @example <caption>Example of EinsteinCarouselLoader widget usage</caption>\n     * <section\n     *     data-widget=\"einsteinCarouselLoader\"\n     *     data-title=\"<isprint value=\"${pdict.title}\" encoding=\"htmldoublequote\"/>\"\n     *     data-recommender=\"${pdict.recommender}\"\n     *     data-load-url=\"${pdict.productLoadUrl}\"\n     *     data-primary-product-id=\"${pdict.primaryProductId}\"\n     *     data-secondary-product-id=\"${pdict.secondaryProductId}\"\n     *     data-alternative-group-type=\"${pdict.alternativeGroupType}\"\n     *     data-alternative-group-id=\"${pdict.alternativeGroupId}\"\n     *     data-category-id=\"${pdict.categoryId}\"\n     *     data-tile-params=\"<isprint value=\"${JSON.stringify(pdict.tileParams)}\" encoding=\"htmldoublequote\"/>\"\n     * ></section>\n     */\n    class EinsteinCarouselLoader extends Widget {\n        prefs() {\n            return {\n                title: '',\n                recommender: '',\n                categoryId: '',\n                primaryProductId: '',\n                secondaryProductId: '',\n                alternativeGroupType: '',\n                alternativeGroupId: '',\n                tileParams: {},\n                loadUrl: '',\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n            this.loadEinsteinRecommendations();\n        }\n\n        /**\n         * @description Build request to Einstein engine and submit it to get recommenders object\n         */\n        loadEinsteinRecommendations() {\n            const einsteinUtils = this.getEinsteinUtils();\n\n            if (!einsteinUtils) {\n                return;\n            }\n\n            const params: TRecommendationParams = {\n                userId: einsteinUtils.getCQUserId(),\n                cookieId: einsteinUtils.getCQCookieId(),\n                emailId: einsteinUtils.getCQHashedEmail(),\n                loginId: einsteinUtils.getCQHashedLogin(),\n                ccver: EINSTEIN_VERSION\n            };\n            const anchors = this.createAnchor();\n\n            if (anchors) {\n                params.anchors = anchors;\n            }\n\n            if (einsteinUtils.getRecs) {\n                einsteinUtils.getRecs(\n                    einsteinUtils.clientId,\n                    this.prefs().recommender,\n                    params,\n                    (recommenders) => {\n                        this.loadCarousel(recommenders);\n                    }\n                );\n            } else {\n                // If SFCC Analytics is not inited at time of this code execution\n                // we can put our params into widgets array that will be processed\n                // on SFCC Analytic init\n                einsteinUtils.widgets = einsteinUtils.widgets || []; // eslint-disable-line no-param-reassign\n                einsteinUtils.widgets.push({\n                    recommenderName: this.prefs().recommender,\n                    parameters: params,\n                    callback: (recommenders) => {\n                        this.loadCarousel(recommenders);\n                    }\n                });\n            }\n        }\n\n        /**\n         * @description Create anchor parameter object to be passed to Einstein engine.\n         * If category is specified then it will be used as anchor\n         * Otherwise will be used product, or undefined for global recommendations\n         * @returns anchor object\n         */\n        createAnchor(): Array<TAnchorObject> | undefined {\n            if (this.prefs().categoryId) {\n                return [{ id: this.prefs().categoryId }];\n            }\n\n            if (this.prefs().primaryProductId) {\n                return [{\n                    id: this.prefs().primaryProductId,\n                    sku: this.prefs().secondaryProductId,\n                    type: this.prefs().alternativeGroupType,\n                    alt_id: this.prefs().alternativeGroupId\n                }];\n            }\n\n            return undefined;\n        }\n\n        /**\n         * @description Validates and Return the CQuotient namespace provided by the commerce cloud platform\n         */\n        getEinsteinUtils(): TCQuotient | null {\n            const einsteinUtils = window.CQuotient;\n\n            if (einsteinUtils\n                && (typeof einsteinUtils.getCQUserId === 'function')\n                && (typeof einsteinUtils.getCQCookieId === 'function')\n                && (typeof einsteinUtils.getCQHashedEmail === 'function')\n                && (typeof einsteinUtils.getCQHashedLogin === 'function')) {\n                return einsteinUtils;\n            }\n\n            return null;\n        }\n\n        /**\n         * @description Based on recommenders response build URL and load recommendation carousel markup\n         * @param recommenders object received from Einstein engine\n         * @returns Promise object represents server response with carousel markup\n         */\n        loadCarousel(recommenders): Promise<string|null> {\n            if (!recommenders || !recommenders[this.prefs().recommender]) {\n                return Promise.resolve(null);\n            }\n\n            const recommendations = recommenders[this.prefs().recommender].recs || [];\n\n            if (recommendations.length === 0) {\n                // If recommendations are empty not make sense execute request\n                return Promise.resolve(null);\n            }\n\n            const pids = recommendations.map((rec) => rec.id);\n            const url = appendParamsToUrl(this.prefs().loadUrl, {\n                pids: JSON.stringify(pids),\n                tileParams: JSON.stringify(this.prefs().tileParams),\n                title: this.prefs().title\n            });\n\n            return getContentByUrl(url).then((response) => {\n                return this.render(undefined, undefined, this.ref('self'), response.toString()).then(() => response);\n            });\n        }\n    }\n\n    return EinsteinCarouselLoader;\n}\n\nexport type TEinsteinCarouselLoader = ReturnType<typeof EinsteinCarouselLoaderClassCreator>;\n\nexport type TEinsteinCarouselLoaderInstance = InstanceType<TEinsteinCarouselLoader>;\n\nexport default EinsteinCarouselLoaderClassCreator;\n","import { TWidget } from 'widgets/Widget';\n\nconst DATA_HOTSPOT = '[data-widget=\"hotSpot\"]';\nconst DATA_HOTSPOT_BTN = '[data-ref=\"hotSpotBtn\"]';\nconst ATTRIBUTE_ARIA_HIDDEN = 'aria-hidden';\nconst keyCode = Object.freeze({\n    ESCAPE: 27,\n    RETURN: 13\n});\n\n/**\n * @param Widget Base widget for extending\n * @returns HotSpot class\n */\n\nfunction HotSpotClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory plugin_page_designer_ext\n     * @class HotSpot\n     * @augments Widget\n     * @classdesc Represents HotSpot component with feature:\n     * 1. Show and hide popup\n     *\n     * <div class=\"b-hot_spot ${pdict.mobileHide}\"\n     *     style=\"${pdict.styles}\"\n     *     data-widget=\"hotSpot\"\n     *     data-event-keydown=\"handleKeydown\"\n     * >\n     *       <button class=\"b-hot_spot-btn\"\n     *           data-ref=\"hotSpotBtn\"\n     *           data-event-click=\"handleHotspotInteraction\"\n     *           title=\"${Resource.msg('common.close', 'common', null)}\"\n     *           tabindex=\"0\"\n     *           aria-haspopup=\"true\"\n     *           aria-label=\"${Resource.msg('hotspot.show', 'pagedesigner', null)}\"\n     *       >\n     *           <span class=\"b-hot_spot-sign\"></span>\n     *       </button>\n     *       <div class=\"b-hot_spot-popup\"\n     *            data-ref=\"hotSpotPopup\"\n     *            tabindex=\"-1\"\n     *            aria-hidden=\"true\"\n     *       >\n     *           <button\n     *               class=\"b-hot_spot-close\"\n     *               title=\"${Resource.msg('common.close', 'common', null)}\"\n     *               data-event-click=\"closePopup\"\n     *               aria-label=\"${Resource.msg('common.close', 'common', null)}\"\n     *           >\n     *                  <isinclude template=\"/common/icons/standalone/close\" />\n     *           </button>\n     *           <div class=\"b-hot_spot-scrollbox\">\n     *              <div class=\"b-hot_spot-content\">\n     *              </div>\n     *           </div>\n     *       </div>\n     *       <div class=\"b-hot_spot-overlay\"  data-event-click=\"closePopup\"></div>\n     *  </div>\n     * </div>\n     */\n\n    class HotSpot extends Widget {\n        timeout?: ReturnType<typeof setTimeout>;\n\n        hotSpots!: NodeListOf<HTMLElement>;\n\n        hotSpotButtons!: Array<HTMLButtonElement>;\n\n        prefs() {\n            return {\n                active: 'm-active',\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n            this.hotSpots = document.querySelectorAll(DATA_HOTSPOT);\n\n            this.hotSpotButtons = [];\n\n            this.hotSpots.forEach(item => {\n                const hotSpotButton: HTMLButtonElement | null = item.querySelector(DATA_HOTSPOT_BTN);\n\n                if (hotSpotButton) {\n                    this.hotSpotButtons.push(hotSpotButton);\n                }\n            });\n        }\n\n        /**\n         * @description Set tabindex value\n         * @param indexValue attribute value\n         */\n        toggleButtonTabindex(indexValue) {\n            this.hotSpotButtons.forEach(item => {\n                item.setAttribute('tabindex', indexValue);\n            });\n        }\n\n        /**\n         * @description Open hotspot popup\n         */\n        openPopup() {\n            this.ref('hotSpotBtn').addClass(this.prefs().active);\n            this.ref('hotSpotPopup').attr(ATTRIBUTE_ARIA_HIDDEN, 'false');\n            this.toggleButtonTabindex(-1);\n\n            if (this.timeout) {\n                clearTimeout(this.timeout);\n            }\n\n            this.timeout = setTimeout(() => {\n                this.ref('buttonClose').focus();\n            }, 0);\n        }\n\n        /**\n         * @description Close hotspot popup\n         * @param _el Source of Keydown event\n         * @param event event instance if DOM event\n         */\n        closePopup(_el, event) {\n            // We need this to have click on Page Designer.\n            // Use mousedown,touchstart since click overloaded.\n            // Check that it is not triggered by mouse buttons.\n            // Restricted btn: mouse right and center. True - if restricted btn was clicked\n            if (event.button) {\n                return;\n            }\n\n            this.ref('hotSpotBtn').removeClass(this.prefs().active);\n            this.ref('hotSpotPopup').attr(ATTRIBUTE_ARIA_HIDDEN, 'true');\n            this.ref('hotSpotBtn').focus();\n            this.toggleButtonTabindex(0);\n        }\n\n        /**\n         * @description Handle hotSpot click\n         * @param _el Source of Keydown event\n         * @param event event instance if DOM event\n         */\n        handleHotspotInteraction(_el, event) {\n            // We need this to have click on Page Designer.\n            // Use mousedown,touchstart since click overloaded.\n            // Check that it is not triggered by mouse buttons.\n            // Restricted btn: mouse right and center. True - if restricted btn was clicked\n            if (event.button) {\n                return;\n            }\n\n            const hotSpot = this.ref('self').get();\n            const productTileName = (hotSpot?.querySelector('[data-product-name]') as HTMLElement)?.dataset?.productName;\n            const textBlockValue = hotSpot?.querySelectorAll('h1, h2, h3')[0]?.textContent;\n\n            this.openPopup();\n            this.eventBus().emit('hotSpot.click', productTileName || textBlockValue);\n        }\n\n        /**\n         * @param _el Source of Keydown event\n         * @param event event instance if DOM event\n         */\n        handleKeydown(_el, event) {\n            if (!event) {\n                return;\n            }\n\n            if (event.keyCode === keyCode.ESCAPE) {\n                event.preventDefault();\n                event.stopPropagation();\n\n                this.closePopup(_el, event);\n            }\n        }\n    }\n\n    return HotSpot;\n}\n\nexport type THotSpot = ReturnType<typeof HotSpotClassCreator>;\n\nexport type THotSpotInstance = InstanceType<THotSpot>;\n\nexport default HotSpotClassCreator;\n","import { debounce } from 'widgets/toolbox/debounce';\nimport { timeout } from 'widgets/toolbox/util';\nimport { getViewType } from 'widgets/toolbox/viewtype';\nimport { stickyHeaderHeightMap } from 'config/stickyHeaderHeightMap';\nimport cssLoadChecker from 'widgets/toolbox/cssLoadChecker';\nimport { TWidget } from 'widgets/Widget';\n\nconst progressBarHeight = 50;\nconst DATA_PROGRESS_CONTENT = '[data-ref=\"progressBarContent\"]';\nconst DATA_PROGRESS_ITEM = '[data-ref=\"progressBarItem\"]';\n\n/**\n * @param Widget Base widget for extending\n * @returns ProgressBar class\n */\nfunction ProgressBarClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory plugin_page_designer_ext\n     * @class ProgressBar\n     * @augments Widget\n     * @classdesc Added progress bar on page\n     * <div class=\"b-progress_bar\" data-widget=\"progressBar\" data-ref=\"progressBarContainer\">\n     *     <div class=\"b-progress_bar-inner\">\n     *         <div class=\"b-progress_bar-content\">\n     *             <span class=\"b-progress_bar-line\" data-ref=\"progressBarLine\"></span>\n     *             <div class=\"b-progress_bar-btns\" data-ref=\"progressBarActions\"></div>\n     *             <script type=\"template/mustache\" data-ref=\"template\">\n     *             <div class=\"b-progress_bar-btns\" data-ref=\"progressBarActions\">\n     *                   {{${'#'}progressBarButtons}}\n     *                       <button\n     *                          data-event-click=\"onClick\"\n     *                          style=\"left:{{xAxisPercentage}}\"\n     *                          data-target=\"{{page}}\"\n     *                          aria-label=\"{{layoutName}}\"\n     *                          class=\"b-progress_bar-dot\"\n     *                          id=\"{{layoutName}}-{{page}}\">\n     *                              <span class=\"b-progress_bar-dot_name\">{{layoutName}}</span>\n     *                       </button>\n     *                   {{/progressBarButtons}}\n     *             </div>\n     *             </script>\n     *         </div>\n     *     </div>\n     * </div>\n     */\n\n    class ProgressBar extends Widget {\n        progressBarContainer!: HTMLElement | undefined;\n\n        progressBar!: HTMLElement | undefined;\n\n        progressBarActions!: HTMLElement | undefined;\n\n        targetElement!: HTMLElement | null;\n\n        progressBarItems!: undefined | NodeListOf<HTMLElement>;\n\n        scrollDisposable!: Array<() => void>;\n\n        targetElementHeight = 0;\n\n        spacer = 0;\n\n        targetElementOffset = 0;\n\n        progressBarButtons!: Promise<HTMLElement | undefined>;\n\n        prefs() {\n            return {\n                activeClass: 'm-active',\n                initialized: 'm-initialized',\n                textLeft: 'm-text_left',\n                lastActive: 'm-last_active',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Widget initialization\n         */\n        init() {\n            super.init();\n            /* Async loading to not block other widget init */\n            timeout(() => {\n                cssLoadChecker.get().then(() => this.initProgressBar());\n            }, 200);\n        }\n\n        /**\n         * @description Initial ProgressBar configuration\n         * @listens \"viewtype.change\"\n         */\n        initProgressBar() {\n            this.progressBarContainer = this.ref('progressBarContainer').get();\n            this.progressBar = this.ref('progressBarLine').get();\n            this.progressBarActions = this.ref('progressBarActions').get();\n            this.targetElement = document.querySelector(DATA_PROGRESS_CONTENT);\n            this.progressBarItems = this.targetElement?.querySelectorAll(DATA_PROGRESS_ITEM);\n\n            this.setVars();\n            this.getHeaderHeight();\n            this.generateButtons();\n            this.attachScrollListener();\n            this.setProgressWidth();\n            this.eventBus().on('viewtype.change', 'resize');\n        }\n\n        /**\n         * @description Added scroll listener\n         */\n        attachScrollListener() {\n            this.scrollDisposable = this.ev('scroll', debounce(() => {\n                this.setProgressWidth();\n            }, 0), window, true);\n        }\n\n        /**\n         * @description Recalculate data when page resize\n         */\n        resize() {\n            this.setVars();\n            this.getHeaderHeight();\n            this.generateButtons();\n            this.setProgressWidth();\n        }\n\n        /**\n         * @description Calculate data for progress bar\n         */\n        setVars() {\n            const headerHeight = stickyHeaderHeightMap[getViewType()];\n\n            this.targetElementHeight = this.targetElement?.offsetHeight || 0;\n            this.spacer = headerHeight + progressBarHeight;\n            this.targetElementOffset = this.getCorrectedOffsetTop(this.targetElement);\n        }\n\n        /**\n         * @description Get header height\n         */\n        getHeaderHeight () {\n            if (this.progressBarContainer) {\n                this.progressBarContainer.style.top = stickyHeaderHeightMap[getViewType()] + 'px';\n            }\n        }\n\n        /**\n         * @description Calculate progress indicator percentage\n         */\n        setProgressWidth() {\n            const currentWidth = this.getProgressWidth();\n\n            if (this.progressBar) {\n                this.progressBar.style.width = currentWidth + '%';\n            }\n\n            this.setActive(currentWidth);\n        }\n\n        /**\n         * @description Get data to scroll to the each of element\n         * @returns Scroll to element\n         */\n        getCorrectedOffsetTop(element) {\n            const offsetTop = element.getBoundingClientRect().top + window.pageYOffset;\n\n            return offsetTop - this.spacer;\n        }\n\n        getRoundNum(num) {\n            return Math.round(num * 100) / 100;\n        }\n\n        /**\n         * @description Get scroll position\n         * @returns Scroll position\n         */\n        getScrollPosition() {\n            let windowScrollTop = document.body.scrollTop || document.documentElement.scrollTop;\n\n            windowScrollTop -= this.targetElementOffset;\n\n            return windowScrollTop <= 0 ? 0 : windowScrollTop;\n        }\n\n        /**\n         * @description Check progress indicator percentage\n         * @returns width\n         */\n        getProgressWidth() {\n            const width = this.getRoundNum((this.getScrollPosition() / this.targetElementHeight) * 100);\n\n            return (width >= 100 ? 100 : width);\n        }\n\n        /**\n         * @description Generate buttons on progressBarLine\n         */\n        generateButtons() {\n            this.has('progressBarActions', progressRefEl => {\n                const progressBarActions = progressRefEl.get();\n\n                if (progressBarActions) {\n                    progressBarActions.innerHTML = '';\n                    this.createProgressBarButtons();\n                }\n            });\n        }\n\n        /**\n         * @description Create buttons on progressBarLine\n         */\n        createProgressBarButtons() {\n            if (!this.progressBarItems) { return; }\n\n            const progressBarButtons = [...this.progressBarItems].map((item: HTMLElement, i) => {\n                const layoutName = item.dataset.progressBarItem;\n                const yOffset = item.getBoundingClientRect().top - (this.targetElement?.getBoundingClientRect().top || 0);\n                const xAxis = this.getRoundNum((yOffset / this.targetElementHeight) * 100);\n                const xAxisPercentage = xAxis + '%';\n                let extraClass = '';\n\n                if (xAxis < 6) {\n                    extraClass = this.prefs().textLeft;\n                }\n\n                if (this.getProgressWidth() >= xAxis) {\n                    extraClass += ' ' + this.prefs().activeClass;\n                }\n\n                return {\n                    page: i,\n                    layoutName,\n                    xAxisPercentage,\n                    extraClass\n                };\n            });\n\n            this.progressBarButtons = new Promise((resolve) => {\n                this.render(undefined, { progressBarButtons }, this.ref('progressBarActions')).then(() => {\n                    resolve(this.progressBarActions);\n                    this.ref('self').addClass(this.prefs().initialized);\n                });\n            });\n        }\n\n        /**\n         * @description Get active buttons on progress bar\n         */\n        setActive(currentWidth) {\n            if (!this.progressBarActions) {\n                return;\n            }\n\n            const progressBarButtons = this.progressBarActions.children as HTMLCollectionOf<HTMLElement>;\n            let lastActiveIndex = 0;\n\n            for (let i = 0; i < progressBarButtons.length; i++) {\n                progressBarButtons[i].classList.remove(this.prefs().lastActive);\n\n                if (Math.ceil(currentWidth) >= parseFloat(progressBarButtons[i].style.left)) {\n                    progressBarButtons[i].classList.add(this.prefs().activeClass);\n                    lastActiveIndex = i;\n                } else {\n                    progressBarButtons[i].classList.remove(this.prefs().activeClass);\n                }\n            }\n\n            if (progressBarButtons.length > 0) {\n                progressBarButtons[lastActiveIndex].classList.add(this.prefs().lastActive);\n            }\n        }\n\n        /**\n         * @description Scroll to select element after click on progress bar button\n         */\n        onClick(ref) {\n            const targetIndex = ref.get().dataset.target;\n            const targetElement = this.progressBarItems?.[targetIndex];\n            const yAxis = this.getCorrectedOffsetTop(targetElement);\n\n            window.scrollTo({\n                top: yAxis,\n                behavior: 'smooth'\n            });\n        }\n    }\n\n    return ProgressBar;\n}\n\nexport type TProgressBar = ReturnType<typeof ProgressBarClassCreator>;\n\nexport type TProgressBarInstance = InstanceType<TProgressBar>;\n\nexport default ProgressBarClassCreator;\n","import { RefElement, TRefElementData } from 'widgets/toolbox/RefElement';\nimport { getViewType } from 'widgets/toolbox/viewtype';\nimport { TWidget } from 'widgets/Widget';\n\nconst keyCode = Object.freeze({\n    ENTER: 13\n});\n\nfunction VideoExtClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory plugin_page_designer_ext\n     * @class VideoExt\n     * @augments Widget\n     * @classdesc Represents VideoExt component with next features:\n     * 1. Change url source on viewport resize\n     * 2. Allow play or pause the video by clicking on it when native controls are hidden (only for HTML5 video tag)\n     *\n     * <div class=\"b-video_banner m-vertical_${pdict.verticalAlignment}\" data-widget=\"videoExt\" data-player-type=\"${pdict.playerType}\">\n     *      <div class=\"b-video_banner-container\">\n     *         <isprint value=\"${\n     *              pdict.regions.videoBannerText\n     *              .setClassName('b-video_banner-text_block')\n     *              .render()}\" encoding=\"off\"\n     *          />\n     *          <figure class=\"b-video_banner-poster ${pdict.posterVisibility}\" data-event-click=\"onPlay\" data-ref=\"poster\">\n     *              <isprint value=\"${pdict.image.setClassName('b-image_tile-picture').render()}\" encoding=\"off\" />\n     *              <figcaption>\n     *                  <span class=\"b-video_banner-title\"><isprint value=\"${pdict.posterTitle}\"/></span>\n     *                  <button\n     *                     type=\"button\"\n     *                     aria-label=\"${Resource.msg('video.play.button','pagedesigner',null)}\"\n     *                     class=\"b-video_banner-ctrl\"\n     *                  >\n     *                  </button>\n     *              </figcaption>\n     *          </figure>\n     *          <iframe\n     *              class=\"b-video_banner-item\"\n     *              data-ref=\"elemSource\"\n     *              data-id-video=\"${pdict.idVideo}\"\n     *              data-id-video-mobile=\"${pdict.idVideoMobile}\"\n     *              data-url=\"${pdict.url}\"\n     *              data-mobile-url=\"${pdict.urlMobile}\"\n     *              src=\"${pdict.url}\"\n     *              frameborder=\"0\"\n     *              allow=\"${pdict.extraAttributes}\"\n     *              allowfullscreen\n     *              aria-hidden=\"${Boolean(pdict.image)}\"\n     *          >\n     *          </iframe>\n     *      </div>\n     * </div>\n     *\n     * or\n     *\n     * <div class=\"b-video_banner m-vertical_${pdict.verticalAlignment}\" data-widget=\"videoExt\" data-player-type=\"${pdict.playerType}\">\n     *      <figure class=\"b-video_banner-poster ${pdict.posterVisibility}\" data-event-click=\"onPlay\" data-ref=\"poster\">\n     *           <isprint value=\"${pdict.image.setClassName('b-image_tile-picture').render()}\" encoding=\"off\" />\n     *           <figcaption>\n     *               <span class=\"b-video_banner-title\"><isprint value=\"${pdict.posterTitle}\"/></span>\n     *               <button\n     *                  type=\"button\"\n     *                  aria-label=\"${Resource.msg('video.play.button','pagedesigner',null)}\"\n     *                  class=\"b-video_banner-ctrl\"\n     *              >\n     *              </button>\n     *           </figcaption>\n     *      </figure>\n     *      <video\n     *          class=\"b-video_banner-item m-external\"\n     *          data-ref=\"elemVideo\"\n     *          ${pdict.extraAttributes}\n     *          aria-hidden=\"${Boolean(pdict.image)}\"\n     *      >\n     *              <source\n     *                  data-ref=\"elemSource\"\n     *                  data-url=\"${pdict.url}\"\n     *                  data-mobile-url=\"${pdict.urlMobile}\"\n     *                  src=\"${pdict.url}\"\n     *                  type=\"video/mp4\"\n     *              />\n     *      </video>\n     * </div>\n     */\n\n    class VideoExt extends Widget {\n        playerType: RefElement | TRefElementData;\n\n        poster!: RefElement;\n\n        elemVideo!: RefElement<HTMLVideoElement>;\n\n        elemSource!: RefElement;\n\n        url: RefElement | TRefElementData;\n\n        mobileUrl: RefElement | TRefElementData;\n\n        iframeId: RefElement | TRefElementData;\n\n        init() {\n            super.init();\n\n            this.playerType = this.ref('self').data('player-type');\n            this.poster = this.ref('poster');\n            this.elemVideo = this.ref('elemVideo');\n            this.elemSource = this.ref('elemSource');\n            this.url = this.elemSource.data('url');\n            this.mobileUrl = this.elemSource.data('mobileUrl');\n            this.iframeId = this.elemSource.data('id-video');\n\n            this.bindObserver();\n            this.eventBus().on('viewtype.change', 'onViewtypeChange');\n            this.ref('self').addClass('m-inited');\n        }\n\n        /**\n         * @description sets and loads video if it is in the intersection\n         */\n        bindObserver() {\n            const element = this.ref('self').get();\n\n            if (!element) {\n                return;\n            }\n\n            const animatedObserver = new IntersectionObserver((entries, observer) => {\n                entries.forEach((entry) => {\n                    const isAutoplay = String(this.url).indexOf('autoplay=1') >= 0 || this.elemVideo?.hasAttr('autoplay');\n\n                    if (entry.isIntersecting && (!this.poster.length || isAutoplay)) {\n                        this.setVideoSource();\n                        this.hidePoster();\n                        observer.unobserve(entry.target);\n                    }\n                });\n            }, {\n                rootMargin: '0px 0px -25%'\n            });\n\n            animatedObserver.observe(element);\n        }\n\n        /**\n         * @description sets video source and additional attributes\n         */\n        setVideoSource() {\n            if (getViewType() === 'small' && this.mobileUrl) {\n                this.elemSource.attr('src', this.mobileUrl);\n                this.iframeId = this.elemSource.data('id-video-mobile');\n            } else {\n                this.elemSource.attr('src', this.url);\n            }\n\n            if (this.playerType === 'url') {\n                this.elemSource.attr('src', this.elemSource.attr('src') + '#t=0.001'); // Fix IOS not showing video preview\n            }\n\n            this.loadVideo();\n        }\n\n        /**\n         * @description Executed when widget is re-rendered\n         */\n        onRefresh() {\n            super.onRefresh();\n            this.setVideoSource();\n            this.ref('self').addClass('m-inited');\n        }\n\n        /**\n         * @description Reload video when src is changed\n         */\n        loadVideo() {\n            if (this.elemVideo && this.elemVideo.get()) {\n                this.elemVideo.get()?.load();\n            }\n        }\n\n        /**\n         * @description Hide poster on click and show video\n         */\n        hidePoster() {\n            this.poster.hide();\n\n            if (this.playerType === 'url') {\n                this.elemVideo.attr('aria-hidden', 'false');\n            } else {\n                this.elemSource.attr('aria-hidden', 'false');\n            }\n        }\n\n        /**\n         * @description Change video src on viewport change\n         */\n        onViewtypeChange() {\n            const isMobileUrl = getViewType() === 'small' && this.mobileUrl;\n\n            if (this.elemSource) {\n                this.elemSource.attr('src', isMobileUrl ? this.mobileUrl : this.url);\n            }\n\n            this.loadVideo();\n        }\n\n        /**\n         * @description Click over poster\n         */\n        onPlay () {\n            let videoName;\n\n            this.setVideoSource();\n\n            if (this.playerType !== 'url') {\n                this.elemSource.attr('src', this.elemSource.attr('src').replace('autoplay=0', 'autoplay=1'));\n\n                videoName = this.iframeId;\n            } else {\n                const videoUrl = this.elemVideo.get() as HTMLVideoElement;\n\n                videoUrl?.play();\n\n                videoName = this.elemSource.attr('src');\n            }\n\n            this.eventBus().emit('videoPoster.click', this.playerType, videoName);\n            this.hidePoster();\n        }\n\n        /**\n         * @param _el event source element\n         * @param event event instance if DOM event\n         */\n        handleKeydown(_el, event) {\n            if (!event) {\n                return;\n            }\n\n            if (event.keyCode === keyCode.ENTER) {\n                event.preventDefault();\n                event.stopPropagation();\n                this.onPlay();\n            }\n        }\n    }\n\n    return VideoExt;\n}\n\nexport type TVideoExt = ReturnType<typeof VideoExtClassCreator>;\n\nexport type TVideoExtInstance = InstanceType<TVideoExt>;\n\nexport default VideoExtClassCreator;\n","import { TWidget } from 'widgets/Widget';\n\n/**\n * @description Base AlternativeImage implementation\n * @param Widget Base widget for extending\n * @returns Alternative image view widget\n */\nfunction AlternativeImageClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory product\n     * @class AlternativeImage\n     * @augments Widget\n     * @classdesc Alternative image component that mixed to ProductTile widget.\n     * It implement possibility to show alternative product image on tile in form of hover slider (on desktop)\n     * and carousel with swapping (on mobile/tablet). It designed to be as lightweight as possible to not blow up very\n     * heavy PLP page. For product carousels (e.g. \"Recently Viewed\" or \"Recommendations\" carousel), we have disabled\n     * the feature with pictures swapping(on mobile/tablet) since we have double scrolling.\n     * For this reasons in mind alternative image do not stored into markup it added dynamically on user\n     * actions (hover, scroll). As approach for proper image size fetch (viewport, pixels density etc) we\n     * use front-end url generation. As base for it we use basic image size - the most proper size that browser\n     * choose from proposed sources. To get this image we use `currentSrc` HTMLImageElement property.\n     * @property {string} data-widget - Widget name `productTile`\n     * @property {string} data-alt-image-url - alternative image src\n     * @property {string} data-alt-image-title - alternative image title\n     */\n    class AlternativeImage extends Widget {\n        imageInserted = false;\n\n        observer: IntersectionObserver | undefined;\n\n        /**\n         * @description Prepare alternative image viewport dependent src.\n         * The trick is get already defined by browser image from set and prepare same image for alt.\n         * If project has completely different images on breakpoints this should be extended with\n         * update image src on viewport change.\n         * @returns alternative image url\n         */\n        getAlternativeImageSrc(): string {\n            if (!this.has('alternativeViewContainer')) {\n                return '';\n            }\n\n            const altImageUrl = new URL(this.ref('alternativeViewContainer').attr('data-alt-image-url'));\n\n            const baseImage = this.ref('tileImage').get();\n\n            if (!(baseImage instanceof HTMLImageElement)) {\n                return '';\n            }\n\n            const baseImageUrl = baseImage.currentSrc || baseImage.src;\n            const baseImageUrlParsed = new URL(baseImageUrl);\n            const disQueryString = baseImageUrlParsed.search;\n\n            return altImageUrl.origin + altImageUrl.pathname + disQueryString;\n        }\n\n        /**\n         * @description Prepare alternative image viewport dependent alternative text\n         * @returns alternative image url\n         */\n        getAlternativeImageText(): string {\n            const alternativeImageText = this.ref('alternativeViewContainer').attr('data-alt-image-title');\n\n            if (typeof alternativeImageText === 'string') {\n                return alternativeImageText;\n            } else {\n                return '';\n            }\n        }\n\n        /**\n         * @description Insert img tag to alternative image picture container\n         */\n        insertAlternativeImage() {\n            if (this.imageInserted) {\n                return;\n            }\n\n            const alternativeImageSrc = this.getAlternativeImageSrc();\n\n            if (!alternativeImageSrc) {\n                return;\n            }\n\n            const altImageElement = document.createElement('img');\n\n            altImageElement.src = alternativeImageSrc;\n            altImageElement.alt = this.getAlternativeImageText();\n            const alternativeImagePicture = this.ref('alternativeViewPicture').get(0);\n\n            if (!alternativeImagePicture) {\n                return;\n            }\n\n            alternativeImagePicture.append(altImageElement);\n\n            this.imageInserted = true;\n        }\n\n        /**\n         * @description Executes hover logic\n         */\n        handleHover() {\n            this.insertAlternativeImage();\n        }\n\n        /**\n         * @description Executes scroll pagination logic + image insertion. We use intersection observer\n         * to easily handle rtl direction.\n         * Otherwise the same could be done with `track.scrollLeft > (track.offsetWidth / 2))`\n         */\n        handleScroll() {\n            if (this.observer) {\n                return;\n            }\n\n            const track = this.ref('tileImageLink').get();\n            const altImage = this.ref('alternativeViewPicture').get(0);\n\n            if (!track || !altImage) {\n                return;\n            }\n\n            this.observer = new IntersectionObserver(this.markAlternativeImageActive.bind(this), {\n                root: track,\n                threshold: 0.5\n            });\n\n            this.observer.observe(altImage);\n        }\n\n        /**\n         * @description Handles alternative images active state\n         * @param entries - intersection observer entries\n         */\n        markAlternativeImageActive(entries: Array<IntersectionObserverEntry>) {\n            if (!entries || !entries[0]) {\n                return;\n            }\n\n            this.ref('alternativeViewContainer').toggleClass('m-alt_active', entries[0].isIntersecting);\n            this.insertAlternativeImage();\n        }\n    }\n\n    return AlternativeImage;\n}\n\nexport type TAlternativeImage = ReturnType<typeof AlternativeImageClassCreator>;\n\nexport type TAlternativeImageInstance = InstanceType<TAlternativeImage>;\n\nexport default AlternativeImageClassCreator;\n","import { TWidget } from 'widgets/Widget';\nimport { TRefElementInstance } from 'widgets/toolbox/RefElement';\n\nimport { TButtonInstance } from 'widgets/global/Button';\n\n/**\n * @description Base ProductTile implementation\n * @param Widget Base widget for extending\n * @returns Product Tile widget\n */\nfunction ProductTileClassCreator(Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory product\n     * @class ProductTile\n     * @augments Widget\n     * @classdesc Product Tile component. Used in different product grids.\n     * @property {string} data-widget - Widget name `productTile`\n     * @property {string} data-pid - product ID\n     * @property {string} data-product-name - product name\n     * @property {object} data-analytics - analytics data for product tile\n     * @property {string} data-text-network-error - network error text, when current ajax operation ended up with network error\n     * @property {string} data-text-added-to-wishlist - a text which is used to indicate, that product has being added to wishlist\n     * @property {object} data-accessibility-alerts - contains accessibility alerts for product tile actions\n     * @property {object} data-grid-item - indicates, that product tile is used inside product grid\n     *\n     * @example <caption>Product Tile widget usage</caption>\n     * <section\n     *     class=\"b-product_tile\"\n     *     aria-label=\"${product.productName}\"\n     *     <isif condition=\"${pdict.first}\">\n     *         data-id=\"firstTile\"\n     *     </isif>\n     *     data-pid=\"${product.id}\"\n     *     data-product-name=\"${product.productName}\"\n     *     data-product-options=\"${JSON.stringify(product.options)}\"\n     *     data-product-id=\"${product.id}\"\n     *     data-widget=\"productTile\"\n     *     data-analytics=\"${JSON.stringify(product.gtmInfo)}\"\n     *     data-recommendation=\"true\"\n     *     data-text-network-error=\"${Resource.msg('error.alert.network', 'product', null)}\"\n     *     data-text-added-to-wishlist=\"${Resource.msg('button.added.to.wishlist', 'wishlist', null)}\"\n     *     data-show-alert-if-product-in-wishlist=\"true\"\n     *     data-accessibility-alerts='{\n     *         \"removedfromwishlist\": \"${Resource.msg('alert.removedfromwishlist', 'product', null)}\",\n     *         \"addedtowishlist\": \"${Resource.msg('alert.addedtowishlist', 'product', null)}\"\n     *     }'\n     *     data-grid-item=true\n     *     data-tau=\"product_tile\"\n     *     data-tau-product-id=\"${product.id}\"\n     * >\n     *     <isinclude template=\"product/productTile\" />\n     * </section>\n     */\n    class ProductTile extends Widget {\n        prefs() {\n            return {\n                productName: '',\n                gridItem: false,\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Init widget\n         * @emits \"product.tile.init\"\n         */\n        init() {\n            super.init();\n\n            this.eventBus().emit('product.tile.init', this.ref('self'));\n        }\n\n        /**\n         * @description Executes when user clicks on product details link on product tile.\n         * Usually used by analytics etc.\n         * @emits tile.product.link.click\n         * @param link - product link\n         */\n        onProductLinkClick(link: TRefElementInstance) {\n            this.eventBus().emit('tile.product.link.click', link);\n        }\n\n        /**\n         * @description On modal window show callback\n         * @emits \"product.tile.qv.open\"\n         */\n        onModalShow() {\n            this.eventBus().emit('product.tile.qv.open', {\n                gtmInfo: this.data('analytics')\n            });\n        }\n\n        showQuickView(button: TButtonInstance) {\n            /**\n             * @description Event dispatched, when Global Modal should be triggered\n             * @event module:events#dialogshow\n             */\n            this.eventBus().emit('dialogshow', {\n                url: button.data('url'),\n                wrapperClasses: 'm-quick_view',\n                ariaLabel: this.prefs().productName,\n                attributes: {\n                    'data-tau-unique': 'quick_view_dialog'\n                }\n            }, this.onModalShow.bind(this));\n        }\n\n        /**\n         * @description Focus\n         */\n        focus() {\n            this.ref('tileImageLink').focus();\n        }\n    }\n\n    return ProductTile;\n}\n\nexport type TProductTile = ReturnType<typeof ProductTileClassCreator>;\n\nexport type TProductTileInstance = InstanceType<TProductTile>;\n\nexport default ProductTileClassCreator;\n","import { getJSONByUrl } from 'widgets/toolbox/ajax';\nimport { TRefElementInstance, RefElement } from 'widgets/toolbox/RefElement';\nimport { scrollElementTo } from 'widgets/toolbox/scroll';\nimport { timeout } from 'widgets/toolbox/util';\n\n/**\n * @param Combobox Base widget for extending\n * @returns SearchBox widget\n */\nfunction SearchBoxClassCreator(Combobox: import('widgets/forms/Combobox').TCombobox) {\n    /**\n     * @category widgets\n     * @subcategory search\n     * @class SearchBox\n     * @augments Combobox\n     * @classdesc Search suggestion box. Handles input, shows and interacts with suggestions box.\n     * <br>Implements `SFCC search suggestions` provider functionality in `getSuggestions` method\n     * <br>It also override combobox logic - when we select suggestion the default action not fill input, but navigate to\n     * <br>suggestion that implemented as links (reference combobox should have listbox items).\n     * <br>If user interactive with keyboard and select link form should not submitted.\n     * Represents Refinement component with next features:\n     * 1. Allow send search request to the server and process response\n     * 2. Allow handle server error\n     * 3. Allow manage search box state(open/close)\n     * 4. Allow handle input event\n     * 5. Allow handle active/selected search suggestions state\n     * 6. Allow clear input field\n     * @property {string} data-widget - Widget name `searchBox`\n     * @property {string} data-url - URL to obtain search suggestions from server based on customer's input\n     * @property {boolean} data-close-on-tab - If true - `tab` keypress will close listbox\n     * @property {string} data-widget-event-closesearch - An event, fired when `close` element was pressed\n     * @property {string} data-event-keydown - event handler for `keydown` event\n     * @property {boolean} data-close-from-outside - config, which shows, if combobox should be closed when click outside\n     * @property {number} data-show-spinner-delay - config delay in ms to show spinner\n     * @property {string} data-ref-first-focus-element - reference to first focus element for focus trap\n     * @property {string} data-ref-last-focus-element - reference to last focus element for focus trap\n     *\n     * @example <caption>Example of SearchBox widget usage</caption>\n     * <div\n     *     id=\"search-box-dialog\"\n     *     data-widget=\"searchBox\"\n     *     data-disable-rendering=\"true\"\n     *     data-ref-first-focus-element=\"submit\"\n     *     data-ref-last-focus-element=\"closeSearch\"\n     *     data-focus-loop=\"true\"\n     *     data-event-keydown=\"handleKeydown\"\n     *     data-url=\"${URLUtils.url('SearchServices-GetSuggestions')}\"\n     *     data-close-from-outside=\"false\"\n     *     data-close-on-tab=\"false\"\n     *     data-ref-traps-container=\"formWrap\"\n     * >\n     *     <isinclude template=\"search/searchBox\" />\n     * </div>\n     */\n    class SearchBox extends Combobox {\n        lastSearchedTerm = '';\n\n        selectedIndex = 0;\n\n        resultsCount = 0;\n\n        goingByLink = false;\n\n        timeout: undefined;\n\n        longLoadingTimer: (() => void) | undefined;\n\n        prefs() {\n            return {\n                showSpinnerDelay: 500,\n                outlineSpace: 5,\n                classesClearEnabled: 'm-visible',\n                classesLoadingSuggestions: 'm-loading',\n                classesLoadingSuggestionsLong: 'm-loading-long',\n                url: '',\n                disableRendering: true,\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Initialize widget logic\n         * @listens \"page.show.searchbox\"\n         */\n        init() {\n            super.init();\n            this.eventBus().on('page.show.searchbox', 'openSearch');\n        }\n\n        /**\n         * @description Shows suggestions popup in initial state.\n         * <br>Initial state can be a slot/asset markup, rendered in backed\n         * <br>and placed in `searchSuggestionsInitial` template\n         * @param setInputFocus - if we need to focus search input\n         * @returns Promise object represents search default state rendering result\n         */\n        showInDefaultState(setInputFocus = true): Promise<void> {\n            if (setInputFocus) {\n                this.focusInput();\n            }\n\n            this.lastSearchedTerm = '';\n\n            return this.render('searchSuggestionsInitial', undefined, this.ref('listboxInner'))\n                .then(() => {\n                    this.selectedIndex = -1;\n                    this.resultsCount = this.getRealItemsCount();\n                    this.openListbox();\n                });\n        }\n\n        /**\n         * @description Send request to the server\n         * @param query - requested search query\n         * @returns Promise object represents server response for search suggestions\n         */\n        getSuggestions(query: string): Promise<void> {\n            this.toggleSpinner(true);\n\n            return getJSONByUrl(this.prefs().url, { q: query })\n                .then(response => this.processResponse(query, <{ suggestions: { total: number }}>response))\n                .catch(this.handleError.bind(this));\n        }\n\n        /**\n         * @description Process response from the server\n         * If there are no results according to search query an Error is thrown to show an Error Template (handleError function)\n         * @param query - customer's search query\n         * @param response - backend response with suggestions\n         * @param response.suggestions - suggestions\n         * @param response.suggestions.total - suggestion total\n         */\n        processResponse(query: string, response: { suggestions: { total: number }}) {\n            if (response && response.suggestions && response.suggestions.total !== 0) {\n                if (this.ref('field').val() !== query) {\n                    // if value changed during request, we do not show outdated suggestions\n                    return;\n                }\n\n                if (document.activeElement !== this.ref('field').get()) {\n                    this.toggleSpinner(false);\n                    this.showInDefaultState();\n\n                    return;\n                }\n\n                this.renderResult(response).then(() => {\n                    this.afterSuggestionsUpdate(query, response.suggestions.total);\n                });\n            } else {\n                throw Error('Empty result');\n            }\n\n            this.toggleSpinner(false);\n        }\n\n        /**\n         * @description Render server response result\n         * @param response - Backend response with suggestions\n         * @returns Promise object represents search response rendering result\n         */\n        renderResult(response: Record<string, unknown>): Promise<void> {\n            return this.render(undefined, response, this.ref('listboxInner')).then(() => {\n                timeout(() => {\n                    const listbox = this.ref('listbox').get();\n\n                    if (listbox) {\n                        scrollElementTo(listbox);\n                    }\n                }, 10);\n            });\n        }\n\n        /**\n         * @description Handle server error\n         * @param query - customer's search query\n         */\n        handleError(query: string): Promise<void> {\n            return this.render('templateError', {}, this.ref('listboxInner')).then(() => {\n                this.toggleSpinner(false);\n                this.afterSuggestionsUpdate(query, 0);\n            });\n        }\n\n        /**\n         * @description Clear listbox\n         */\n        afterCloseListbox() {\n            if (this.ref('field').val()) {\n                return;\n            }\n\n            this.showInDefaultState(false);\n        }\n\n        /**\n         * @description Handle active item\n         * @param selectedItem - search suggestion item selected by customer\n         */\n\n        activateItem(selectedItem: RefElement) {\n            // We do not need default combobox behavior.\n            // Instead of pasting suggestion value we go by the link\n            // if we have selected item in listbox\n            if (selectedItem) {\n                this.ref('field').val(selectedItem.attr('data-suggestion-value'));\n                this.goingByLink = true;\n                window.location.assign(selectedItem.attr('href').toString());\n            }\n        }\n\n        /**\n         * @description Handle input\n         * @listens dom#keydown\n         */\n        handleInput() {\n            const inputValue = this.ref('field');\n            let inputLength = 0;\n\n            if (inputValue.length) {\n                const inputValueRaw = inputValue.prop('value').trim();\n\n                inputLength = inputValueRaw.length || 0;\n            }\n\n            if (inputLength >= this.prefs().minChars && inputLength <= this.prefs().maxChars) {\n                this.updateListbox();\n            } else {\n                if (this.timeout) {\n                    clearTimeout(this.timeout);\n                }\n\n                this.showInDefaultState();\n            }\n\n            this.toggleClearButton(!!this.ref('field').val());\n        }\n\n        /**\n         * @description Toggle spinner\n         * @param isShown - Indicated is spinner display\n         */\n        toggleSpinner(isShown: boolean) {\n            const listbox = this.ref('listbox');\n\n            listbox.attr('aria-busy', String(isShown));\n            listbox.toggleClass(this.prefs().classesLoadingSuggestions, isShown);\n\n            if (isShown) {\n                this.longLoadingTimer = timeout(() => {\n                    this.ref('listbox').addClass(this.prefs().classesLoadingSuggestionsLong);\n                }, this.prefs().showSpinnerDelay);\n            } else {\n                if (this.longLoadingTimer) {\n                    this.longLoadingTimer();\n                }\n\n                this.ref('listbox').removeClass(this.prefs().classesLoadingSuggestionsLong);\n            }\n        }\n\n        /**\n         * @description Handle selected item\n         * @param selectedItem - search suggestion item selected by customer\n         */\n        afterItemSelected(selectedItem: RefElement) {\n            const item = selectedItem.get();\n\n            if (item) {\n                const listbox = this.ref('listbox').get();\n                const top = (item.offsetTop - this.prefs().outlineSpace);\n\n                if (listbox) {\n                    scrollElementTo(listbox, top);\n                }\n            }\n        }\n\n        /**\n         * @description Executes when user clicks on product details link in the search box results.\n         * Usually used by analytics etc.\n         * @emits \"searchbox.product.link.click\"\n         * @param link - product link\n         */\n        onProductLinkClick(link: TRefElementInstance) {\n            /**\n             * @description Event to click product link in search box\n             * @event \"searchbox.product.link.click\"\n             */\n            this.eventBus().emit('searchbox.product.link.click', link);\n        }\n\n        // Form functionality\n\n        /**\n         * @description Submit form simplified handler\n         * @param _ event source element\n         * @param event event instance\n         */\n        handleSubmit(_: TRefElementInstance, event: Event) {\n            const searchInput = this.ref('field');\n            const inputVal = searchInput.val();\n\n            if (typeof inputVal === 'string') {\n                searchInput.val(inputVal.trim());\n            }\n\n            if (this.goingByLink || !inputVal) {\n                event.preventDefault();\n            }\n\n            if (!inputVal) {\n                this.focusInput();\n            } else {\n                this.closeListbox();\n            }\n        }\n\n        /**\n         * @description Clears search input and show suggestions from default state. Optionally sets focus to search field.\n         * @listens dom#click\n         * @param setInputFocus - if we need to focus input\n         */\n        clearInput(setInputFocus: boolean) {\n            this.toggleSpinner(false);\n            const searchInput = this.ref('field');\n\n            searchInput.val('');\n\n            if (setInputFocus) {\n                this.focusInput();\n            }\n\n            this.toggleClearButton(false);\n            this.showInDefaultState(setInputFocus);\n        }\n\n        /**\n         * @description Toggle clear button\n         * @param isInputHasValue - is search input has value\n         */\n        toggleClearButton(isInputHasValue: boolean) {\n            this.ref('clearButton').toggleClass(this.prefs().classesClearEnabled, isInputHasValue);\n        }\n\n        /**\n         * @description Gets the real count of suggestions items.\n         * <br>Could be used in case, when no backend suggestion count are set.\n         * <br>As an example: case of rendering content assets with\n         * <br>unknown suggestions set\n         * @returns - a number of listbox inner elements\n         */\n        getRealItemsCount(): number {\n            const listboxInner = this.ref('listboxInner').get();\n\n            return listboxInner\n                ? listboxInner.querySelectorAll('[data-suggestion-value]').length\n                : 0;\n        }\n\n        /**\n         * @description Cancel handler\n         */\n        cancel() {\n            this.closeSearch();\n        }\n\n        /**\n         * @description Open search modal\n         * @listens \"page.show.searchbox\"\n         */\n        openSearch() {\n            this.ref('listbox').attr('role', 'listbox');\n\n            return this.callIfExists('showModal', {\n                attributes: {\n                    'data-tau': 'search_dialog'\n                }\n            }, this.showInDefaultState.bind(this));\n        }\n\n        /**\n         * @description Set focus to input\n         */\n        focusInput() {\n            // iOS could disable focus method on HTMLInputElement https://bugs.webkit.org/show_bug.cgi?id=195884\n            // it is done to not annoy the user with software keyboard.\n            // To show keyboard we should never hide input and parent with display none.\n            // Also focus should be set without delay.\n            const input = this.ref('field').get();\n\n            if (!input) {\n                return;\n            }\n\n            input.focus();\n        }\n\n        /**\n         * @description Used to notify concerning widget to close suggestions popup and do all other actions\n         * @emits SearchBox#closesearch\n         * @param [refEl] - refEl\n         */\n        closeSearch(refEl?: RefElement) {\n            if (refEl && refEl.data<boolean>('stop-click') === true) {\n                return;\n            }\n\n            this.ref('listbox').attr('role', null);\n\n            /**\n             * @description Event to close search box\n             * @event SearchBox#closesearch\n             */\n            this.emit('closesearch');\n\n            this.callIfExists('closeModal');\n            this.closeListbox();\n            this.clearInput(false);\n        }\n\n        /**\n         * @description Toggle search state\n         * @param ref search\n         */\n        toggleSearch(ref: RefElement) {\n            if (ref.attr('aria-expanded') === 'true') {\n                this.closeSearch();\n            } else {\n                this.openSearch();\n            }\n        }\n\n        /**\n         * @description Hide search\n         * @returns Current widget instance\n         */\n        hide(): this {\n            super.hide();\n            this.closeListbox();\n            this.clearInput(false);\n\n            return this;\n        }\n    }\n\n    return SearchBox;\n}\n\nexport type TSearchBox = ReturnType<typeof SearchBoxClassCreator>;\n\nexport type TSearchBoxInstance = InstanceType<TSearchBox>;\n\nexport default SearchBoxClassCreator;\n","import EventBus from 'widgets/toolbox/eventBus';\nimport { TWidget } from 'widgets/Widget';\n\n/**\n * @category widgets\n * @subcategory toolbox\n * @class EventBusWrapper\n * @classdesc Represents EventBusWrapper component with next features:\n * 1. Allow subscribing action on an event (subscribe once allow as well)\n * 2. Allow emitting event\n *\n * @example EventBusWrapper imported in Widget.js file and you can use EventBusWrapper in your own widget as `this.eventBus()`\n * <caption>Example of EventBusWrapper widget usage for emitting a global event</caption>\n *\n * this.eventBus().emit('rendering.applied');\n *\n * <caption>Example of EventBusWrapper widget usage for subscribe action on a global event</caption>\n *\n * this.eventBus().on('minicart.updated', 'renderCart');\n */\nclass EventBusWrapper {\n    widgetInstance: InstanceType<TWidget>;\n\n    /**\n     * @description Define widget instance\n     * @param widgetInstance usually this of widget\n     */\n    constructor(widgetInstance: InstanceType<TWidget>) {\n        this.widgetInstance = widgetInstance;\n    }\n\n    /**\n     * @description Subscribe action on event\n     * @param eventName name of the event\n     * @param methodName name of the method to call if/when event happens\n     */\n    on(eventName: string, methodName: string) {\n        let fn: (...args: Array<unknown>) => void = (...args): void => {\n            this.widgetInstance[methodName].call(this.widgetInstance, ...args);\n        };\n\n        EventBus.addListener(eventName, fn);\n        this.widgetInstance.onDestroy(() => {\n            if (fn) {\n                EventBus.removeListener(eventName, fn);\n                // @ts-ignore for clean up variable\n                fn = undefined;\n            }\n        });\n    }\n\n    /**\n     * @description Subscribe action once on event\n     * @param eventName name of event\n     * @param methodName name of method to call if/when event happen\n     */\n    once(eventName: string, methodName: string) {\n        let onceFn = (...args) => {\n            EventBus.removeListener(eventName, onceFn);\n            this.widgetInstance[methodName].call(this.widgetInstance, ...args);\n            // @ts-ignore for clean up variable\n            onceFn = undefined;\n        };\n\n        EventBus.addListener(eventName, onceFn);\n        this.widgetInstance.onDestroy(() => {\n            if (onceFn) {\n                EventBus.removeListener(eventName, onceFn);\n                // @ts-ignore for clean up variable\n                onceFn = undefined;\n            }\n        });\n    }\n\n    /**\n     * @description Emit event\n     * @param event - event name\n     * @param  args Arguments passed to the event emitter\n     */\n    emit(event: string | symbol, ...args: Array<unknown>) {\n        EventBus.emit(event, ...args);\n    }\n}\nexport default EventBusWrapper;\n","import { timeout } from './util';\n/**\n * @category widgets\n * @subcategory toolbox\n * @class PausableTimeout\n * @classdesc Class represents the `setTimeout` with an ability to perform pause/resume actions\n *\n * @example <caption>Example of PausableTimeout widget usage</caption>\n * import { PausableTimeout } from 'widgets/toolbox/PausableTimeout';\n * this.pausableTimeout = new PausableTimeout(() => {\n *      this.hideAlert();\n * }, this.prefs().timeout);\n */\nexport class PausableTimeout {\n    durationTimeout: (() => void) | undefined;\n\n    done: boolean;\n\n    callback: () => void;\n\n    remaining: number;\n\n    start: Date = new Date();\n\n    /**\n     * @description PausableTimeout init logic\n     * @param callback function to be called after specified time\n     * @param time time before call callback\n     */\n    constructor(callback: (() => void) | undefined, time = 0) {\n        this.done = false;\n\n        this.callback = () => {\n            if (callback) {\n                callback();\n            }\n\n            this.done = true;\n            this.durationTimeout = undefined;\n            callback = undefined;\n        };\n\n        this.remaining = time;\n        this.resume();\n    }\n\n    /**\n     * @description Pauses Timeout\n     * @returns Instance of the PausableTimeout class\n     */\n    pause(): this {\n        if (this.durationTimeout && !this.done) {\n            this.clearTimeoutRef();\n            this.remaining -= new Date().getTime() - (this.start ? this.start.getTime() : 0);\n        }\n\n        return this;\n    }\n\n    /**\n     * @description Resumes Timeout\n     * @returns Instance of the PausableTimeout class\n     */\n    resume(): this {\n        if (!this.durationTimeout && !this.done) {\n            this.start = new Date();\n            this.durationTimeout = timeout(this.callback, this.remaining);\n        }\n\n        return this;\n    }\n\n    /**\n     * @description Clear resources on demand\n     */\n    destroy() {\n        this.clearTimeout();\n    }\n\n    /**\n     * @description Clears the timeout and marks it as done.\n     * After called, the timeout will not resume.\n     */\n    clearTimeout() {\n        this.clearTimeoutRef();\n        this.done = true;\n    }\n\n    /**\n     * @description Clears resources\n\n     */\n    clearTimeoutRef() {\n        if (this.durationTimeout) {\n            this.durationTimeout();\n            this.durationTimeout = undefined;\n        }\n    }\n}\n","import { isInputLike } from './dom';\nimport { getData, log } from './util';\n\nconst REFELEMENT_ERROR = 'Reference element is not found';\n\nexport declare type TRefElementData = Record<string, unknown> | string | number | boolean | null | undefined | unknown;\n\n/**\n * @description Convert string to snake-case\n * @param s String in camelCase to convert\n * @returns Converted to snake-case string\n * @example myCustomProperty => my-custom-property\n */\nfunction toSnakeCase(s: string): string {\n    return s.replace(/(?:^|\\.?)([A-Z])/g, (x, y) => '-' + y.toLowerCase()).replace(/^_/, '');\n}\n\n/**\n * @category widgets\n * @subcategory toolbox\n * @class RefElement\n * @classdesc jQuery like wrapper for simple access to DOM. It will be added into `Widget.items` array of first parent widget.\n * Represents RefElement component with next features:\n * 1. Allow to get/set data attribute depends on provided/not provided value\n * 2. Allow to get/set the value into element\n * 3. Allow to append/prepend string into element\n * 4. Allow to get/set/remove attribute for element\n * 5. Allow to check that some element has attribute `attributeName`\n * 6. Allow to get/set property value for `propertyName` property for element\n * 7. Allow to get element of set by idx\n * 8. Allow to replace content of element by empty string\n * 9. Allow to remove element\n * 10. Allow to enable/disable element or check if element is disabled\n * 11. Allow to get/set the content `text` into element\n * 12. Allow to set focus on element\n * 13. Allow to show/hide element or toggle state\n * 14. Allow to add/remove/toggle or check if element has class\n * 15. Allow to specify the position of the element in the window\n *\n * @example <caption>Example of RefElement widget usage</caption>\n * // to use just add data-ref attribute\n * <div data-ref=\"myRefElement\"></div>\n *\n * // to get it in any widget method\n * this.ref('myRefElement')\n */\nexport class RefElement<WrappedElementType extends HTMLElement = HTMLElement> {\n    /**\n     * @description Array of HTMLElements that current RefElement represents\n     */\n    els: Array<WrappedElementType>;\n\n    /**\n     * @description Define array of elements\n     * @param els array of elements\n     */\n    constructor(els: Array<WrappedElementType>) {\n        this.els = els;\n    }\n\n    /**\n     * @description Get amount of elements in set\n     * @returns Number of elements in set\n     */\n    get length(): number {\n        return this.els.length;\n    }\n\n    /**\n     * @description Checks if there are elements in set\n     * @returns result\n     */\n    exists(): boolean {\n        return this.length > 0;\n    }\n\n    /**\n     * @description Get or Set data attribute depends on provided/not provided value\n     * @param name Name of data attribute in camelCase, f.e. `testIt` to get `data-test-it`\n     * @param [value] to set\n     *\n     * - if value provided - returns current instance for chaining\n     * - otherwise provided value of data attribute with appropriate type or undefined if attribute doesn't exist\n     */\n    data<RefElementDataType extends TRefElementData = TRefElementData>(name: string): RefElementDataType | undefined;\n\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    data<RefElementDataType extends TRefElementData = TRefElementData>(name: string, value: string | boolean | unknown): this;\n\n    data<RefElementDataType extends TRefElementData = TRefElementData>(\n        name: string,\n        value?: string | boolean | unknown\n    ): this | RefElementDataType | undefined {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        const attrName = 'data-' + toSnakeCase(name);\n\n        if (typeof value === 'undefined') {\n            if (this.hasAttr(attrName)) {\n                const attrValue = this.attr(attrName);\n\n                if (typeof attrValue === 'string') {\n                    return getData(attrValue);\n                }\n            }\n\n            return undefined;\n        }\n\n        return this.attr(attrName, value);\n    }\n\n    /**\n     * @description Get or set the value into elements in set\n     * @param [value] If not empty set value into inputs in set\n     *\n     * - If value: undefined - returns joined string of values in set of inputs\n     * - Otherwise returns current instance for chaining\n     */\n\n    val(value?: undefined): string\n\n    val(value: string | number | boolean): this\n\n    val(value?: string | number | boolean): string | this {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        if (typeof value === 'undefined') {\n            return this.els.map(el => isInputLike(el) ? el.value : '').join('');\n        }\n\n        if (typeof value === 'string') {\n            this.els.forEach(el => {\n                if (isInputLike(el)) {\n                    el.value = value;\n                }\n            });\n        }\n\n        return this;\n    }\n\n    /**\n     * @description Get validity object for first element in set\n     *\n     * - If element instance of `HTMLInputElement|HTMLSelectElement` returns validity object\n     * - Otherwise returns `undefined`\n     */\n    getValidity(): { state: ValidityState; msg: string } | undefined {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        const element = this.els[0];\n\n        if (element instanceof HTMLInputElement\n            || element instanceof HTMLSelectElement\n            || element instanceof HTMLTextAreaElement\n        ) {\n            return {\n                state: element.validity,\n                msg: element.validationMessage\n            };\n        }\n\n        return undefined;\n    }\n\n    /**\n     * @description Appends string into each element from set\n     * @param content String to append\n     * @param index Append position\n     */\n    append(content: string, index?: number) {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        this.els.forEach(el => {\n            const tempEl = document.createElement('div');\n\n            tempEl.innerHTML = content;\n\n            const scripts: NodeListOf<HTMLScriptElement> = tempEl.querySelectorAll(\n                'script[type=\"text/javascript\"]'\n            );\n\n            Array.from(scripts).forEach(script => {\n                if (script && script.parentNode) {\n                    script.parentNode.removeChild(script);\n                }\n            });\n\n            const appendToIndex = index && el.childElementCount >= index;\n\n            Array.from(tempEl.childNodes).forEach((child, nodeIndex) => {\n                if (appendToIndex) {\n                    el.insertBefore(child, el.children[<number>index + nodeIndex]);\n                } else {\n                    el.appendChild(child);\n                }\n            });\n\n            Array.from(scripts).forEach((script) => {\n                const tempScript = document.createElement('script');\n\n                tempScript.text = script.text;\n\n                el.appendChild(tempScript);\n            });\n\n            tempEl.innerHTML = '';\n        });\n    }\n\n    /**\n     * @description Prepends string into each element from set\n     * @param content String to prepend\n     */\n    prepend(content: string) {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        this.els.forEach(el => {\n            const tempEl = document.createElement('div');\n\n            tempEl.innerHTML = content;\n\n            const scripts: NodeListOf<HTMLScriptElement> = tempEl.querySelectorAll(\n                'script[type=\"text/javascript\"]'\n            );\n\n            Array.from(scripts).forEach(script => {\n                if (script && script.parentNode) {\n                    script.parentNode.removeChild(script);\n                }\n            });\n\n            Array.from(tempEl.childNodes).reverse().forEach(child => el.prepend(child));\n\n            Array.from(scripts).forEach((script) => {\n                const tempScript = document.createElement('script');\n\n                tempScript.text = script.text;\n\n                el.appendChild(tempScript);\n            });\n\n            tempEl.innerHTML = '';\n        });\n    }\n\n    /**\n     * @description\n     * Get/Set/Remove attribute for each element of set depends on params:\n     * - if value: undefined - Get attribute value\n     * - if value: true - Set attribute attribute=\"attribute\", f.e. `attr('disabled', true)` => `disabled=\"disabled\"`\n     * - if value: null|false - Remove attribute if `value`\n     * - any another type - Convert value to string and set as attributeValue\n     * @param attributeName Name of attribute\n     * @param [value] to set (null or false to remove attribute)\n     *\n     * - If value: undefined - Returns string with joined values from attribute\n     * - Otherwise returns current instance for chaining\n     */\n    attr(attributeName: string, value?: undefined): string;\n\n    attr(attributeName: string, value: string | null | boolean | unknown): this;\n\n    attr(attributeName: string, value?: string | null | undefined | boolean): string | this {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        if (value === false || value === null) {\n            this.els.forEach(el => el.removeAttribute(attributeName));\n        } else if (value === true) {\n            this.els.forEach(el => el.setAttribute(attributeName, attributeName));\n        } else if (value !== undefined) {\n            this.els.forEach(el => el.setAttribute(attributeName, value));\n        } else {\n            return this.els.map(el => el.getAttribute(attributeName)).join('');\n        }\n\n        return this;\n    }\n\n    /**\n     * @description Check that some element in the set of elements has attribute `attributeName`\n     * @param attributeName name of attribute\n     * @returns `true` if has such attribute\n     */\n    hasAttr(attributeName: string): boolean {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        return this.els.some(el => el.hasAttribute(attributeName));\n    }\n\n    /**\n     * @description\n     * - Get property value by `propertyName` from first element in set if `value` parameter is not provided\n     * - Set property value for `propertyName` property for each element in set\n     * @param propertyName The name of the property to get or set.\n     * @param [value] A value to set for the property.\n     * @returns Returns undefined for the value of a property that has not been set\n     * or property value if exists\n     */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    prop(propertyName: keyof HTMLInputElement, value?: string | boolean | undefined): any {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        if (typeof value === 'undefined') {\n            const el = this.els[0];\n\n            return el[propertyName];\n        }\n\n        // @ts-expect-error ts-migrate(2540) FIXME: Cannot assign to 'ATTRIBUTE_NODE' because it is a ... Remove this comment to see the full error message\n        this.els.forEach(el => { el[propertyName] = value; });\n\n        return undefined;\n    }\n\n    /**\n     * @description Get element of set by idx\n     * @param [idx] Identifier of element, first by default\n     * @returns element if founded\n     */\n    get<RequestedWrappedElementType extends WrappedElementType = WrappedElementType>(idx = 0): RequestedWrappedElementType | undefined {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        if (this.els[idx]) {\n            return <RequestedWrappedElementType> this.els[idx];\n        }\n\n        return undefined;\n    }\n\n    /**\n     * @description Replace content of each element in set by empty string\n     * @returns current instance for chaining\n     */\n    empty(): this {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        this.els.forEach(el => { el.textContent = ''; });\n\n        return this;\n    }\n\n    /**\n     * @description Remove set of elements\n     * @returns current instance for chaining\n     */\n    remove(): this {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        this.els.forEach(el => el.parentNode && el.parentNode.removeChild(el));\n\n        return this;\n    }\n\n    /**\n     * @description Add attribute disabled=\"disabled\"\n     * @returns current instance for chaining\n     */\n    disable(): this {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        this.attr('disabled', true);\n        this.addClass('m-disabled');\n\n        return this;\n    }\n\n    /**\n     * @description Remove attribute disabled=\"disabled\"\n     * @returns current instance for chaining\n     */\n    enable(): this {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        this.removeClass('m-disabled');\n        this.attr('disabled', false);\n\n        return this;\n    }\n\n    /**\n     * @description Check if every element in set has disabled attribute\n     * @returns true if disabled\n     */\n    isDisabled(): boolean {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        return this.attr('disabled') === 'disabled';\n    }\n\n    /**\n     * @description Set the content `text` into each element in the set\n     * @param text The text to place as content\n     * @returns current instance for chaining\n     */\n    setText(text: string): this {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        this.els.forEach(el => {\n            if (el.textContent !== text) {\n                el.textContent = text;\n            }\n        });\n\n        return this;\n    }\n\n    /**\n     * @description Get the content of each element from set and join it to string\n     * @returns Joined text from set of elements\n     */\n    getText(): string {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        return this.els.map(el => el.textContent).join();\n    }\n\n    /**\n     * @description Set the html into each element in the set\n     * @param html The html string to place as content\n     * @returns current instance for chaining\n     */\n    setHtml(html: string): this {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        this.els.forEach(el => {\n            if (el.innerHTML !== html) {\n                el.innerHTML = html;\n            }\n        });\n\n        return this;\n    }\n\n    /**\n     * @description Get the html content of each element from set and join it to string\n     * @returns Joined html from set of elements\n     */\n    getHtml(): string {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        return this.els.map(el => el.innerHTML).join();\n    }\n\n    /**\n     * @description Focus first element\n     */\n    focus() {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        if (this.els[0]) {\n            this.els[0].focus();\n        }\n    }\n\n    /**\n     * @description Hide element\n     * @returns current instance for chaining\n     */\n    hide(): this {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        this.attr('hidden', true);\n\n        return this;\n    }\n\n    /**\n     * @description Show element\n     * @returns current instance for chaining\n     */\n    show(): this {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        this.attr('hidden', false);\n\n        return this;\n    }\n\n    /**\n     * @description Disable or enable element depending on passed state\n     * @param state Based on passed state element will be enabled or disable\n     * @returns current instance for chaining\n     */\n    toggleAvailability(state: boolean): this {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        this[state ? 'enable' : 'disable']();\n\n        return this;\n    }\n\n    /**\n     * @description Show or hide element depending on either the presence or `initialState` parameter\n     * @param [initialState]  true - show else false hide\n     * @returns current instance for chaining\n     */\n    toggle(initialState?: boolean): this {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        const state = typeof initialState !== 'undefined' ? initialState : this.hasAttr('hidden');\n\n        this[state ? 'show' : 'hide']();\n\n        return this;\n    }\n\n    /**\n     * @description Add or Remove class depending on either the class's presence or the `state` parameter\n     * @param className name of class\n     * @param [state] true to add, false to remove class\n     * @returns current instance for chaining\n     */\n    toggleClass(className: string, state?: boolean): this {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        if (state === undefined) {\n            if (this.hasClass(className)) {\n                this.removeClass(className);\n            } else {\n                this.addClass(className);\n            }\n        } else if (state) {\n            this.addClass(className);\n        } else {\n            this.removeClass(className);\n        }\n\n        return this;\n    }\n\n    /**\n     * @description Add single class or multiple classes into element\n     * @param classNames string or strings array of class name(s)\n     * @returns current instance for chaining\n     */\n    addClass(classNames: string | Array<string>): this {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        if (typeof classNames === 'string') {\n            classNames = classNames.split(' ');\n        }\n\n        classNames.forEach(className => {\n            this.els.forEach(el => {\n                if (!this.hasClass(className)) {\n                    el.classList.add(className);\n                }\n            });\n        });\n\n        return this;\n    }\n\n    /**\n     * @description Remove single class or multiple classes for element in set\n     * @param classNames array or string of class names\n     * @returns current instance for chaining\n     */\n    removeClass(classNames: string | Array<string>): this {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        if (typeof classNames === 'string') {\n            classNames = classNames.split(' ');\n        }\n\n        classNames.forEach(className => {\n            this.els.forEach(el => {\n                if (this.hasClass(className)) {\n                    el.classList.remove(className);\n                }\n            });\n        });\n\n        return this;\n    }\n\n    /**\n     * @description Determine whether each element in set have assigned the given class\n     * @param className The class name to search for.\n     * @returns `true` if yes\n     */\n    hasClass(className: string): boolean {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        return this.els.every(el => el.classList.contains(className));\n    }\n\n    /**\n     * @description Specifies the position of the element in the window\n     * @returns object with top and left position in px\n     */\n    offset(): { top: number; left: number } {\n        if (!PRODUCTION && !this.exists()) {\n            log.warn(REFELEMENT_ERROR, this);\n        }\n\n        const ret = { top: 0, left: 0 };\n\n        if (this.els.length) {\n            const docElem = document.documentElement;\n            const elemBox = this.els[0].getBoundingClientRect();\n\n            ret.top = elemBox.top + window.pageYOffset - docElem.clientTop;\n            ret.left = elemBox.left + window.pageXOffset - docElem.clientLeft;\n        }\n\n        return ret;\n    }\n}\n\nexport type TRefElementInstance = InstanceType<typeof RefElement>;\n","/**\n * @module ajax\n * @category widgets\n * @subcategory toolbox\n * @description\n * Represents ajax component with next features:\n * 1. Allow to send request on form submit\n * 2. Allow to get content by URL\n * 3. Allow to get JSON response by URL\n * 4. Allow to handle response with 500 status\n * 5. Allow to set token\n *\n * @example <caption>Example of ajax module usage</caption>\n * import { submitFormJson, getContentByUrl } from 'widgets/toolbox/ajax';\n * submitFormJson(inputSelect.data('action'), {\n *  pid: inputSelect.data('pid'),\n *  uuid: uuid,\n *  quantity: inputSelect.getValue()\n * }, 'GET')\n *  .then((resp) => {\n *      this.renderCartResponse(resp);\n *      this.accessibilityAlert(this.prefs().accessibilityAlerts.quantitychanged);\n *  })\n *  .catch((error) => {\n *      if (error && !error.success && error.errorMessage) {\n *          this.render('errorTemplate', { message: error.errorMessage }, this.ref('errorMsgs'));\n *      } else {\n *          this.renderCartWithItemLevelActionError(uuid, error.message);\n *      }\n *  })\n *  .finally(() => {\n *      this.hideProgressBar();\n *  });\n */\n\nimport { showErrorLayout, appendParamsToUrl, timeout } from './util';\nimport eventBus from './eventBus';\nimport token from './token';\n// eslint-disable-next-line max-len\nexport const errorFallbackMessage = 'For technical reasons, your request could not be handled properly at this time. We apologize for any inconvenience.';\nconst SAME_ORIGIN = 'same-origin';\nconst APPLICATION_JSON = 'application/json';\nconst TEXT_HTML = 'text/html';\nconst NO_REFERRER = 'no-referrer';\nconst CONTENT_TYPE = 'content-type';\nconst FAILED_FETCH = 'Failed to fetch';\n\ntype TLegacyServerResponse = {\n    error?: boolean | string;\n    message: string;\n    fields: Array<TFieldError>;\n};\n\n/**\n * @description Get fetch\n * @returns Promise whose internal state matches the provided promise\n */\nfunction getFetch(): Promise<Array<unknown>> {\n    const dependencies: Array<Promise<unknown>> = [];\n\n    if (window.fetch) {\n        dependencies.push(Promise.resolve(window.fetch));\n    } else {\n        dependencies.push(import(/* webpackChunkName: 'fetch' */ 'whatwg-fetch'));\n    }\n\n    if (window.AbortController) {\n        dependencies.push(Promise.resolve(window.AbortController));\n    } else {\n        dependencies.push(import(/* webpackChunkName: 'fetch' */ 'yet-another-abortcontroller-polyfill'));\n    }\n\n    return Promise.all(dependencies);\n}\n\n/**\n * @description Build valid request URL or add form data to the request\n * @param method - HTTP method\n * @param data - request data\n * @param skipToken - Checks if CSRF token should be skipped in the request\n * @param url - request url\n * @returns result\n */\nfunction handleUrlOrFormData(\n    method: string,\n    data: { [keys: string]: string | number | boolean | undefined },\n    skipToken: boolean,\n    url: string\n): { valuedUrl: string; formData: string | undefined } {\n    let formData: string | undefined;\n\n    let valuedUrl: string;\n\n    if (method === 'POST') {\n        const tokenObj = !skipToken && token.name ? { [token.name]: token.value } : {};\n        const dataToSend = { ...data, ...tokenObj };\n\n        formData = Object.keys(dataToSend).map(key => key + '=' + encodeURIComponent(<string>dataToSend[key])).join('&');\n\n        valuedUrl = url;\n    } else if (skipToken) {\n        valuedUrl = appendParamsToUrl(url, data);\n    } else {\n        valuedUrl = appendParamsToUrl(url, { ...data, ...{ [token.name]: token.value } });\n    }\n\n    // parameter to identify ajax request\n    valuedUrl = appendParamsToUrl(valuedUrl, { ajax: 'true' });\n\n    return { valuedUrl, formData };\n}\n\n/**\n * @description Response handler from the server with 500 status\n * @param response Response object\n * @returns A Promise for the completion of which ever callback is executed.\n */\nfunction handleResponse500(response: Response): Promise<unknown> {\n    eventBus.emit('alert.error', {\n        errorCode: 500\n    });\n\n    return response.text().then(textResponse => {\n        let errorObj;\n\n        try {\n            errorObj = JSON.parse(textResponse);\n        } catch (e) {\n            errorObj = {};\n        }\n\n        if (errorObj.csrfError) {\n            if (errorObj) {\n                if (errorObj.csrfError && errorObj.redirectUrl) {\n                    window.location.assign(errorObj.redirectUrl);\n                } else {\n                    showErrorLayout(errorObj);\n                }\n            }\n        } else if (errorObj.errorMessage || errorObj.error || errorObj.message) {\n            // TODO: Change the 'lib' compiler option to 'es2022' in tsconfig.json file\n            // @ts-ignore TS2554: Expected 0-1 arguments, but got 2\n            // currently we use only \"errorMessage\", but legacy code can use \"error\" or \"message\"\n            return Promise.reject(new Error(errorObj.errorMessage || errorObj.message || errorObj.error, { cause: { code: 500 } }));\n        } else {\n            const div = document.createElement('div');\n\n            div.innerHTML = textResponse;\n            const err = Array.from(div.querySelectorAll('code')).map(code => code.innerHTML).join('<br/>');\n\n            showErrorLayout(err);\n        }\n\n        // @ts-ignore TS2554: Expected 0-1 arguments, but got 2\n        return Promise.reject(new Error('Unexpected error', { cause: { code: 500 } }));\n    });\n}\n\n/**\n * @description A function, called after each success ajax call. Emits an event with given response context.\n * @emits module:ajax#responseok\n * @param response Response formatted object\n * @returns Response formatted object\n */\nfunction handleOkResponse(response: Promise<unknown>): Promise<unknown> {\n    /**\n     * @description Event about success ajax server response\n     * @event module:ajax#responseok\n     */\n    timeout(() => eventBus.emit('responseok', response), 0);\n\n    return response;\n}\n\n/**\n * @description Prepares general params for the fetch request\n * @returns result\n */\nfunction prepareRequestData(): Record<string, unknown> {\n    return {\n        mode: SAME_ORIGIN, // no-cors, cors, *same-origin\n        cache: 'default', // *default, no-cache, reload, force-cache, only-if-cached\n        redirect: 'follow' // manual, *follow, error\n    };\n}\n\n/**\n * @description Prepares general header params\n * @returns result\n */\nfunction prepareHeaders(): Record<string, string> {\n    const locale = document.documentElement?.dataset?.locale || '';\n    const siteId = document.documentElement?.dataset?.siteid || '';\n\n    return {\n        'x-sf-cc-siteid': siteId,\n        'x-sf-cc-requestlocale': locale,\n        'x-requested-with': 'XMLHttpRequest'\n    };\n}\n\n/**\n * @description Adapter function to handle legacy response error properties' names and convert it to the new ones\n * @param response - Promise that returns server response\n * @returns result\n */\nfunction cleanupServerResponse(response: Promise<TServerResponse & TLegacyServerResponse>): Promise<TServerResponse> {\n    return response.then(res => {\n        const errors = res.fieldErrors || res.fields;\n\n        let success = res.success ?? res.error !== true;\n\n        if (errors && Object.keys(errors).length > 0) {\n            success = false;\n        }\n\n        res.success = success;\n\n        let errorMessage = res.errorMessage || ((typeof res.error === 'string') ? res.error : null);\n\n        if (!success && !errorMessage) {\n            errorMessage = res.message;\n        }\n\n        const fieldErrors = Array.isArray(errors)\n            // convert [{field1: error1}, {field2: error2}] to {field1: error1, field2: error2}\n            ? errors.reduce((acc, el) => ({ ...acc, ...el }), {})\n            : errors;\n\n        if (errorMessage) {\n            res.errorMessage = String(Array.isArray(errorMessage) ? errorMessage.join('<br>') : errorMessage);\n        }\n\n        if (fieldErrors) {\n            res.fieldErrors = fieldErrors;\n        }\n\n        return res;\n    });\n}\n\n/**\n * @description Handles response by type and status\n * @param response - response data\n * @param type - content type to handle\n * @returns result\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction handleResponse(response: Response, type: string = APPLICATION_JSON): Promise<any> {\n    const contentType = response.headers.get(CONTENT_TYPE);\n\n    if (response.ok) {\n        if (contentType && contentType.includes(APPLICATION_JSON) && (type === APPLICATION_JSON)) {\n            return handleOkResponse(cleanupServerResponse(response.json()));\n        }\n\n        if (contentType && contentType.includes(TEXT_HTML) && (type === TEXT_HTML)) {\n            return handleOkResponse(response.text());\n        }\n\n        if (type !== TEXT_HTML || response.status !== 204) {\n            showErrorLayout(errorFallbackMessage);\n            throw new TypeError(errorFallbackMessage);\n        }\n    } else if (response.status === 401) {\n        window.location.reload();\n\n        return Promise.reject(new Error('Unauthorized error'));\n    } else if (response.status === 404) {\n        showErrorLayout(errorFallbackMessage);\n        throw new TypeError(errorFallbackMessage);\n    } else if (response.status === 500) {\n        return handleResponse500(response);\n    }\n\n    return response.json().then(errorJson => {\n        return Promise.reject(errorJson);\n    });\n}\n\nexport type TFailedRequestResponse = {\n    errorMessage: string;\n    errorCode: number;\n    success: false;\n}\n\n/**\n * @description Handle errors when response failed for some reason\n * @param error - error object\n * @returns result\n */\nfunction handleRequestError(error: Error | TServerResponse): TFailedRequestResponse {\n    let message = '';\n\n    switch (error.message) {\n        case FAILED_FETCH:\n            message = errorFallbackMessage;\n            break;\n        default:\n            message = 'errorMessage' in error ? error.errorMessage : error.message as string || '';\n            break;\n    }\n\n    return {\n        success: false,\n        errorMessage: message,\n        // @ts-ignore TS2550: Property 'cause' does not exist on type 'Error'\n        errorCode: error?.cause?.code\n    };\n}\n\n/**\n * @description Form submission handler\n * @param url url of resource\n * @param [data] form content\n * @param  [method] typeof request\n * @param [skipToken] skip token for request\n * @returns Fetching result promise\n */\nexport const submitFormJson = (\n    url: string | undefined,\n    data: { [x: string]: string | number | boolean | undefined } = {},\n    method: 'POST' | 'GET' | 'PATCH' | 'DELETE' = 'POST',\n    skipToken = false\n) => {\n    if (url === undefined) {\n        return Promise.reject();\n    }\n\n    return getFetch().then(() => {\n        const { valuedUrl, formData } = handleUrlOrFormData(method, data, skipToken, url);\n        /**\n         * This magic is mandatory for MS Edge because fetch polyfill is returning not polyfilled Promise object\n         */\n\n        return Promise.resolve(fetch(valuedUrl, {\n            ...prepareRequestData(),\n            method: method, // *GET, POST, PUT, DELETE, etc.\n            credentials: SAME_ORIGIN, // include, *same-origin, omit\n            headers: {\n                ...prepareHeaders(),\n                'Content-Type': 'application/x-www-form-urlencoded',\n                Accept: APPLICATION_JSON\n            },\n            referrer: NO_REFERRER, // no-referrer, *client\n            body: formData // body data type must match \"Content-Type\" header\n        })).then(handleResponse).catch(handleRequestError);\n    });\n};\n\n/**\n * @description Submit data via POST method\n * @param url url of resource\n * @param [data] content\n * @param [skipToken] skip token for request\n * @returns Fetching result promise\n */\nexport const postJsonData = (\n    url: string,\n    data: { [x: string]: string | Record<string, unknown> } = {},\n    skipToken = false\n) => {\n    return getFetch().then(() => {\n        const tokenObj = !skipToken && token.name ? { [token.name]: token.value } : {};\n        const dataToSend = { ...data, ...tokenObj };\n\n        /**\n         * This magic is mandatory for MS Edge because fetch polyfill is returning not polyfilled Promise object\n         */\n        return Promise.resolve(fetch(appendParamsToUrl(url, { ajax: 'true' }), {\n            ...prepareRequestData(),\n            method: 'POST', // *GET, POST, PUT, DELETE, etc.\n            credentials: SAME_ORIGIN, // include, *same-origin, omit\n            headers: {\n                ...prepareHeaders(),\n                'Content-Type': APPLICATION_JSON,\n                Accept: APPLICATION_JSON\n            },\n            referrer: NO_REFERRER, // no-referrer, *client\n            body: JSON.stringify(dataToSend) // body data type must match \"Content-Type\" header\n        })).then(handleResponse).catch(handleRequestError);\n    });\n};\n\n/**\n * @description Get content by URL\n * @param url URL to get data\n * @param params optional params to url\n * @returns Fetching result promise\n */\nexport function getContentByUrl(url: string | undefined, params: { [keys: string]: string | undefined } = {}): Promise<string> {\n    if (url === undefined) {\n        return Promise.reject();\n    }\n\n    params.ajax = 'true';\n\n    /**\n     * This magic is mandatory for MS Edge because fetch polyfill is returning not polyfilled Promise object\n     */\n    return Promise.resolve(fetch(appendParamsToUrl(url, params), {\n        method: 'GET', // *GET, POST, PUT, DELETE, etc.\n        ...prepareRequestData(),\n        credentials: SAME_ORIGIN, // include, *same-origin, omit\n        headers: {\n            ...prepareHeaders(),\n            Accept: 'text/html'\n        },\n        referrer: NO_REFERRER // no-referrer, *client\n    })).then((response) => {\n        return handleResponse(response, TEXT_HTML);\n    });\n}\n\n/**\n * @description Get JSON response from the server by URL\n * @param url URL to get data\n * @param [params] optional params to url\n * @param [skipToken] skip token for request\n * @returns Fetching result promise\n */\nexport function getJSONByUrl(\n    url: string | undefined,\n    params: { [keys: string]: string | undefined } = {},\n    skipToken = true\n) {\n    return submitFormJson(url, params, 'GET', skipToken);\n}\n\ntype TAbstractControlledRequest<Response> = {\n    promise: Promise<Response>;\n    abortController: AbortController;\n};\n\nexport type TSuccessControlledRequest<Response> = TAbstractControlledRequest<Response & { success: true }>;\nexport type TFailedControlledRequest<Response> = TAbstractControlledRequest<Response & TFailedRequestResponse>;\nexport type TAbortedRequest = TAbstractControlledRequest<null>;\n\nconst handleControlledRequestError = (error: Error): null | TFailedRequestResponse => {\n    if (error.name === 'AbortError') {\n        return null;\n    }\n\n    return handleRequestError(error);\n};\n\nexport type TControlledRequest<SuccessResponse, UnsuccessResponse = unknown> = TSuccessControlledRequest<SuccessResponse>\n    | TFailedControlledRequest<UnsuccessResponse>\n    | TAbortedRequest;\n\n/**\n * @description Form submission handler with possibility to abort request\n * @param url url of resource\n * @param [data] form content\n * @param [method] typeof request\n * @param [skipToken] skip token for request\n * @returns An object contains the Fetching result promise and AbortController\n */\nexport function submitFormJsonWithAbort<SuccessResponse = unknown, UnsuccessResponse = unknown>(\n    url: string | undefined,\n    data: { [x: string]: string | undefined } = {},\n    method: 'POST' | 'GET' = 'POST',\n    skipToken = false\n): TControlledRequest<SuccessResponse, UnsuccessResponse> {\n    const abortController = new AbortController();\n    const signal = abortController.signal;\n\n    const result = {\n        abortController,\n        promise: getFetch().then(() => {\n            if (url === undefined) {\n                return Promise.reject();\n            }\n\n            const { valuedUrl, formData } = handleUrlOrFormData(method, data, skipToken, url);\n\n            /**\n             * This magic is mandatory for MS Edge because fetch polyfill is returning not polyfilled Promise object\n             */\n            return Promise.resolve(fetch(valuedUrl, {\n                ...prepareRequestData(),\n                method: method, // *GET, POST, PUT, DELETE, etc.\n                credentials: SAME_ORIGIN, // include, *same-origin, omit\n                headers: {\n                    ...prepareHeaders(),\n                    'Content-Type': 'application/x-www-form-urlencoded',\n                    Accept: APPLICATION_JSON\n                },\n                referrer: NO_REFERRER, // no-referrer, *client\n                body: formData, // body data type must match \"Content-Type\" header\n                signal: signal // can be used to communicate with/abort a DOM request\n            })).then(handleResponse).catch(handleControlledRequestError);\n        })\n    };\n\n    return result;\n}\n","/**\n * @module cookie\n * @category widgets\n * @subcategory toolbox\n * @description Represents cookie component with next features:\n * 1. Allow to set/get cookie\n *\n * @example <caption>Example of cookie module usage</caption>\n * import { setCookie } from '../toolbox/cookie';\n * setCookie('dw_accept_cookie', '1', 365, true);\n */\n\n/**\n * @description Uses to set cookies to the document\n * @param cookieName - cookie name\n * @param cookieValue - cookie value\n * @param expireInDays - number of days before cookie expiration. 0 - end of a session, 365 - default value\n * @param isSecure - adds secure cookie if true\n */\nexport function setCookie(cookieName: string, cookieValue: string, expireInDays = 365, isSecure = false) {\n    const d = new Date();\n\n    d.setTime(d.getTime() + (expireInDays * 24 * 60 * 60 * 1000));\n    const expires = expireInDays === 0 ? '' : `expires=${d.toUTCString()}`;\n\n    document.cookie = `${cookieName}=${cookieValue};${expires};path=/${isSecure ? ';secure' : ''}`;\n}\n\n/**\n * @description Gets cookie value from document.Empty string is returned by default\n * @param cookieName - cookie name\n * @returns cookie value\n */\nexport function getCookie(cookieName: string): string {\n    const name = `${cookieName}=`;\n    const ca = document.cookie.split(';');\n\n    for (let i = 0; i < ca.length; i += 1) {\n        let c = ca[i];\n\n        while (c.charAt(0) === ' ') {\n            c = c.substring(1);\n        }\n\n        if (c.indexOf(name) === 0) {\n            return c.substring(name.length, c.length);\n        }\n    }\n\n    return '';\n}\n","/**\n * @module cssLoadChecker\n * @category widgets\n * @subcategory toolbox\n * @description\n * Util that used for checking if CSS was loaded.\n * Return Promise that resolved as soon as CSS loaded.\n *\n * @example\n * cssLoadChecker.get().then(() => {\n *  do some staff after css load\n * });\n */\nconst CSS_SELECTOR = '.js-styles';\n\nexport default {\n    /**\n     * @description Get loading state of all link nodes\n     * @returns - loading state\n     */\n    get: function () {\n        return Promise.all(\n            Array.from(document.querySelectorAll(CSS_SELECTOR), link => this.getLoadedState(link))\n        );\n    },\n    /**\n     * @description Get loading state of particular link node\n     * @param css - link DOM node\n     * @returns - loading state\n     */\n    getLoadedState(css) {\n        if (module.hot) { // This trick not work with hot reload\n            return new Promise(resolve => {\n                setTimeout(() => resolve(true), 200);\n            });\n        }\n\n        return new Promise((resolve) => {\n            if (css.media === 'all' || css.media === '') {\n                try {\n                    /**\n                     * This trick is needed to be sure css are loaded across all browsers\n                     * `document.styleSheets` is not suitable since FF changes the length prematurely\n                     * Combined solution from https://www.phpied.com/when-is-a-stylesheet-really-loaded/\n                     */\n                    const cssRules = css.sheet.cssRules; // Only populated when css is loaded. This is cross-browser solution.\n\n                    if (cssRules) {\n                        resolve(true);\n                    }\n                } catch (e) {\n                    css.addEventListener('load', resolve);\n                    css.addEventListener('error', resolve);\n                }\n            } else {\n                css.addEventListener('load', resolve);\n                css.addEventListener('error', resolve);\n            }\n        });\n    }\n};\n","/**\n * @description Return type of 'debounce' function\n */\ninterface IDebounceFunction<T extends TAbstractFunction> {\n    (...args: Parameters<T>): void;\n}\n\n/**\n * @description Return type of 'throttle' function\n */\ninterface IThrottleFunction<T extends TAbstractFunction> {\n    (...args: Parameters<T>): void;\n}\n\n/**\n * @module debounce\n * @category widgets\n * @subcategory toolbox\n * @description Represents debounce component with next features:\n * 1. Debounce function\n * 2. Throttle function\n * @example <caption>Example of debounce module usage</caption>\n * import { debounce } from 'widgets/toolbox/debounce';\n *\n * this.ev('resize', debounce(this.handleResize.bind(this), 200), window);\n */\n\n/**\n * @description Returns a function, that, as long as it continues to be invoked, will not be triggered.\n * The function will be called after it stops being called for N milliseconds.\n * If `invokeLeading` is passed, trigger the function on the leading edge, instead of the trailing.\n * If `invokeTrailing` is passed, trigger the function on the trailing edge additionally.\n * @param callbackFunction - callback\n * @param delay - timeout duration\n * @param [invokeLeading] - executing the debounce without waiting\n * @param [invokeTrailing]\n * execute trailing function after timeout: could be used in combination with 'invokeLeading' parameter\n * to execute both functions - leading and trailing ones\n * @returns Debounce function\n */\nexport function debounce<T extends TAbstractFunction>(\n    callbackFunction: T,\n    delay: number,\n    invokeLeading = false,\n    invokeTrailing = false\n): IDebounceFunction<T> {\n    let timeout: number | null;\n    const executeTrailing = !invokeLeading || invokeTrailing;\n\n    return function debounceInner(this: unknown, ...args: Array<unknown>) {\n        // Leading function execution\n        if (invokeLeading && !timeout) {\n            callbackFunction.apply(this, args);\n        }\n\n        // Set timeout for trailing function execution\n        if (executeTrailing) {\n            if (timeout) {\n                clearTimeout(timeout);\n            }\n\n            timeout = window.setTimeout(() => {\n                timeout = null;\n                callbackFunction.apply(this, args);\n            }, delay);\n        }\n    };\n}\n\n/**\n * @description Creates and returns a new, throttled version of the passed function, that,\n *  when invoked repeatedly, will only actually call the original function at most once per every\n * `wait` milliseconds. Useful for rate-limiting events that occur faster than you can keep up with.\n * By default, `throttle` will execute the function as soon as you call it for the first time, and,\n * if you call it again any number of times during the `wait` period,as soon as that period is over.\n * If you'd like to disable the leading-edge call, pass `{leading: false}`, and if you'd like to disable\n * the execution on the trailing-edge, pass `{trailing: false}`.\n * @param func Function to execute\n * @param wait Execution period\n * @param [options] Configurations\n * @param [options.leading] leading timeout\n * @param [options.trailing] trailing timeout\n * @returns Throttled version of passed function\n */\nexport function throttle<T extends TAbstractFunction>(\n    func: T,\n    wait: number,\n    options: { leading: boolean; trailing: boolean } = { leading: false, trailing: false }\n): IThrottleFunction<T> {\n    let timeout: number | null;\n    let context: unknown | null;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    let args: any;\n    let result: unknown;\n\n    let previous = 0;\n\n    const later = function () {\n        previous = options.leading === false ? 0 : Date.now();\n        timeout = null;\n\n        result = func.apply(context, args);\n\n        if (!timeout) {\n            context = null;\n            args = null;\n        }\n    };\n\n    return function (this: unknown) {\n        const now = Date.now();\n\n        if (!previous && options.leading === false) { previous = now; }\n\n        const remaining = wait - (now - previous);\n\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        context = this;\n        // eslint-disable-next-line prefer-rest-params\n        args = arguments;\n\n        if (remaining <= 0 || remaining > wait) {\n            if (timeout) {\n                clearTimeout(timeout);\n                timeout = null;\n            }\n\n            previous = now;\n            result = func.apply(context, args);\n\n            if (!timeout) {\n                context = null;\n                args = null;\n            }\n        } else if (!timeout && options.trailing !== false) {\n            timeout = window.setTimeout(later, remaining);\n        }\n\n        return result;\n    };\n}\n","type TModalInstance = InstanceType<ReturnType <typeof import('widgets/global/Modal').default>>;\n\n/**\n * @category widgets\n * @subcategory toolbox\n * @class DialogMgr\n * @classdesc Represents ajax component with next features:\n * 1. Allow opening the second dialog above the first one.\n * 2. Allow closing opened dialog. If any other opened dialog exists, moves it to the top.\n *\n * @example <caption>Usage of dialogMgr instance. In this case `dialogMgr` used in class {@link TModalInstance} to show it's content above any other opened dialog</caption>\n * import { dialogMgr } from 'widgets/toolbox/dialogMgr';\n * class Modal extends AccessibilityFocusTrapMixin {\n *     ...\n        showModal(templateData, cb) {\n            ...\n            renderedPromise.then(() => {\n                ...\n                dialogMgr.openDialog(this);\n            });\n        }\n * }\n */\nclass DialogMgr {\n    dialogsStack: Array<TModalInstance>;\n\n    /**\n     * @description Define empty dialogs stack\n     */\n    constructor() {\n        this.dialogsStack = [];\n    }\n\n    /**\n     * @description Open Modal. If any other opened dialog exists - move it behind newly opened modal.\n     * @param dialog - Dialog object\n     */\n    openDialog(dialog: TModalInstance) {\n        const topDialog = this.dialogsStack.length ? this.dialogsStack[this.dialogsStack.length - 1] : null;\n\n        dialog.toggleSpinner(false);\n\n        if (topDialog !== dialog) {\n            if (topDialog) {\n                topDialog.moveBehind();\n            }\n\n            dialog.open();\n\n            this.dialogsStack.push(dialog);\n        }\n    }\n\n    /**\n     * @description Close Modal. If any other opened dialog exists, moves it to top.\n     */\n    closeDialog() {\n        const dialog = this.dialogsStack.pop();\n\n        if (dialog) {\n            dialog.close();\n\n            if (this.dialogsStack.length) {\n                const previousDialog = this.dialogsStack[this.dialogsStack.length - 1];\n\n                previousDialog.moveToTop();\n            } else {\n                dialog.removeGlobalDialogClass();\n            }\n        }\n    }\n}\n\nexport const dialogMgr = new DialogMgr();\n","/**\n * @module dom\n * @category widgets\n * @subcategory toolbox\n * @description Represents the component with next features:\n * 1. Modify string HTML markup, removing certain wrappers by their class names\n *\n * @example <caption>Example of dom module usage</caption>\n * import { unwrapElementsByClasses } from 'widgets/toolbox/dom';\n *\n * const someServerRespone = `\n *     <div class=\"container\">\n *         <h1>Response</h1>\n *         <p>Lorem</p>\n *     </div>\n * `;\n *\n * const handleResponse = (htmlMarkup) => {\n *    return unwrapElementsByClasses(htmlMarkup, 'container');\n * }\n *\n * const processedResponse = handleResponse(someServerRespone);\n *\n * The result is:  `<h1>Response</h1>\n *                  <p>Lorem</p>`\n */\n\n/**\n * @description Removes wrapper block while keeping inner markup\n * @param wrapper Element containing other html elements\n */\nfunction unwrap(wrapper: Element) {\n    wrapper.outerHTML = wrapper.innerHTML;\n}\n\n/**\n * @description Removes wrapper blocks with passed class names while keeping inner markup\n * @param stringDOM HTML markup containing wrapper elements\n * @param classNames target classes which blocks should be unwrapped\n * @returns new string with unwrapped elements\n */\nexport function unwrapElementsByClasses(stringDOM: string, ...classNames: Array<string>) {\n    const DOM = new DOMParser().parseFromString(stringDOM, 'text/html');\n\n    for (let i = 0; i < classNames.length; i++) {\n        const node = DOM.querySelector('.' + classNames[i]);\n\n        if (node) {\n            unwrap(node);\n        }\n    }\n\n    return DOM.body.innerHTML;\n}\n\n/**\n * @description Checks if html element is something like input (select, textarea, etc)\n *\n * @param el html element to check\n * @returns check result\n */\nexport function isInputLike(el: HTMLElement): el is HTMLInputElement {\n    return el instanceof HTMLInputElement\n        || el instanceof HTMLSelectElement\n        || el instanceof HTMLOptionElement\n        || el instanceof HTMLTextAreaElement;\n}\n","/**\n * @module eventBus\n * @category widgets\n * @subcategory toolbox\n * @description Create and returns an instance of EventEmitter. Refer [eventemitter3 documentation](https://www.npmjs.com/package/eventemitter3).\n *\n * @example  <caption>Example of eventBus module usage</caption>\n * import EventBus from 'widgets/toolbox/eventBus';\n * EventBus.addListener(eventName, fn);\n */\n\nimport { EventEmitter } from 'eventemitter3';\nconst EventBus = new EventEmitter();\n\nexport default EventBus;\n","/**\n * @module scroll\n * @category widgets\n * @subcategory toolbox\n * @description Represents scroll component with next features:\n * 1. Allow to scroll element into view\n * 2. Allow to scroll element to provided coordinate\n * 3. Allow to scroll window to provided element\n * 4. Allow to scroll window to top\n * 5. Allow to get scroll position\n * 6. Allow to add callback on scroll event\n *\n * @example <caption>Example of scroll module usage</caption>\n * import { scrollWindowTo, scrollToTop } from 'widgets/toolbox/scroll';\n * scrollWindowTo(errorElement, true);\n */\n\nimport { debounce } from 'widgets/toolbox/debounce';\nimport { getViewType } from 'widgets/toolbox/viewtype';\nimport { stickyHeaderHeightMap } from 'config/stickyHeaderHeightMap';\n\n/**\n * @description Scroll element into view\n * @param element - HTML Element\n */\nexport function scrollIntoView(element?: HTMLElement): void {\n    if (!element) {\n        return;\n    }\n\n    if ('scrollBehavior' in document.documentElement.style) {\n        element.scrollIntoView({ behavior: 'smooth', block: 'start', inline: 'nearest' });\n    } else {\n        element.scrollIntoView(false);\n    }\n}\n\n/**\n * @description Scroll element to provided coordinate\n * @param element - HTML Element\n * @param top - top coordinate\n * @param left - left coordinate\n */\nexport function scrollElementTo(element: HTMLElement, top = 0, left = 0): void {\n    if (element && typeof element.scrollTo === 'function') {\n        element.scrollTo({ top: top, left: left, behavior: 'smooth' });\n    }\n}\n\n/**\n * @description Scroll window to provided element\n * @param element - HTML Element\n * @param isCountHeaderHeight - add to top header height\n * @param isCentered - centers the element inside the window\n */\nexport function scrollWindowTo(element?: HTMLElement, isCountHeaderHeight = false, isCentered = false): void {\n    if (!element) {\n        return;\n    }\n\n    const headerHeight = stickyHeaderHeightMap[getViewType()];\n    let top = element.getBoundingClientRect().top + window.pageYOffset;\n\n    if (isCentered) {\n        top -= (window.innerHeight - element.offsetHeight) / 2;\n    }\n\n    const left = 0;\n\n    if (isCountHeaderHeight) {\n        window.scrollTo({ top: top - headerHeight, left: left, behavior: 'smooth' });\n    } else {\n        window.scrollTo({ top: top, left: left, behavior: 'smooth' });\n    }\n}\n\n/**\n * @description Scroll window to top\n */\nexport function scrollToTop(): void {\n    window.scrollTo(0, 0);\n}\n\nconst DEBOUNCE_INTERVAL = 20;\n\ntype TScrollHandler = (arg0: { currentPosition: number; lastScrollPosition: number; diff: number }) => void;\n\nconst scrollHandlers: Array<TScrollHandler> = [];\n\n/**\n * @description Get scroll position\n * @returns Scroll position\n */\nexport function getScrollPosition(): number {\n    if (document.documentElement.scrollTop !== undefined) {\n        return document.documentElement.scrollTop;\n    }\n\n    if (document.scrollingElement && document.scrollingElement.scrollTop !== undefined) {\n        return document.scrollingElement.scrollTop;\n    }\n\n    return -1;\n}\n\nlet lastScrollPosition = 0;\n\nconst debounceScroll = debounce(() => {\n    const currentPosition = getScrollPosition();\n\n    scrollHandlers.forEach(handler => handler({\n        currentPosition,\n        lastScrollPosition,\n        diff: currentPosition - lastScrollPosition\n    }));\n    lastScrollPosition = currentPosition;\n}, DEBOUNCE_INTERVAL, true, true);\n\n/**\n * @description Add callback on scroll event\n * @param callback - on scroll callback\n * @returns result\n */\nexport function onScroll(callback: TScrollHandler): () => void {\n    if (!scrollHandlers.length) {\n        window.addEventListener('scroll', debounceScroll, { passive: true });\n    }\n\n    scrollHandlers.push(callback);\n\n    return () => {\n        scrollHandlers.splice(scrollHandlers.indexOf(callback), 1);\n\n        if (!scrollHandlers.length) {\n            window.removeEventListener('scroll', debounceScroll);\n        }\n    };\n}\n","/**\n * @category widgets\n * @subcategory toolbox\n * @module token\n * @description Module represents functionality to get/set token name and value\n *\n * @example <caption>Example of token updating from some module</caption>\n * import token from 'widgets/toolbox/token';\n * ...\n * return submitFormJson(this.prefs().sessionContinueUrl, {}).then((response) => {\n *     token.name = response.csrf.tokenName;\n *     token.value = response.csrf.token;\n *     this.closeModal();\n *     this.countdownShown = false;\n * });\n * ...\n */\nexport default {\n    tokenName: '',\n\n    tokenValue: '',\n\n    /**\n     * @description Token name\n     */\n    get name(): string {\n        if (!this.tokenName) {\n            this.tokenName = window.csrfToken?.name || '';\n        }\n\n        return this.tokenName;\n    },\n\n    set name(value: string) {\n        this.tokenName = value;\n    },\n\n    /**\n     * @description Token value\n     */\n    get value(): string {\n        if (!this.tokenValue) {\n            this.tokenValue = window.csrfToken?.value || '';\n        }\n\n        return this.tokenValue;\n    },\n\n    set value(value: string) {\n        this.tokenValue = value;\n    }\n};\n","/**\n * @module util\n * @category widgets\n * @subcategory toolbox\n * @description Represents util component with next features:\n * 1. Allow formatting message\n * 2. Allow setting timeout/interval for provided function\n * 3. Allow adding/remove/get parameter from URL\n * 4. Allow showing error layout\n * 5. Allow checking if `event` is triggered outside of `el`\n * 6. Allow creating a function to unsubscribe listener\n * 7. Allow creating a listener for click outside of `el` to execute a callback\n * 8. Allow comparing object instances\n * 9. Allow generating an integer Array containing an arithmetic progression\n * 10. Allow converting a value from data attribute into js type value\n * 11. Allow creating a function that memoizes the result of `func`\n * 12. Allow adding script tag on a page\n * 13. Allow getting value in tree object by path\n * 14. Allow checking if DOM element is focusable\n *\n * @example <caption>Example of util module usage</caption>\n * import { range, timeout } from 'widgets/toolbox/util';\n * itemObject.quantityOptionsList = range(\n *      item.quantityOptions.minOrderQuantity,\n *      item.quantityOptions.maxOrderQuantity + 1\n * ).map(qty => ({\n *      index: qty,\n *      selected: qty === item.quantity ? 'selected' : ''\n * }));\n */\n\nimport { RefElement } from './RefElement';\n\n/**\n * @description Window console\n */\nexport const log = window.console;\n\n// IE11 fix\nif (!log.table) {\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    log.table = () => {};\n}\n\n/**\n * @description Format message\n * @param  message message with placeholders i.e. {0}\n * @param params values for placeholders\n * @returns formatted message\n */\nexport function format(message: string, ...params: Array<string>): string {\n    return params.reduce((msg, param, idx) => {\n        const reg = new RegExp('\\\\{' + idx + '\\\\}', 'gm');\n\n        return msg.replace(reg, param);\n    }, message);\n}\n\n/**\n * @description Timeout for provided function\n * @param fn function to be called after specified time\n * @param time time before call callback\n * @returns Timeout disposable\n */\nexport function timeout(fn?: TAbstractFunction, time = 0) {\n    let timer: ReturnType<typeof setTimeout> | undefined;\n\n    timer = setTimeout(() => {\n        if (fn) {\n            fn();\n        }\n\n        timer = undefined;\n        fn = undefined;\n    }, time);\n\n    return () => {\n        if (timer) {\n            clearTimeout(timer);\n\n            timer = undefined;\n            fn = undefined;\n        }\n    };\n}\n\n/**\n * @param delay time in milliseconds\n * @returns Promise that will be resolved after delay\n */\nexport const sleep = (delay: number) => new Promise((res) => { setTimeout(res, delay); });\n\nexport type TTimeout = ReturnType<typeof timeout>;\n\n/**\n * @description Interval for provided function\n * @param fn function to be called regularly, after specified time delay\n * @param time time regularity for callback execution\n * @returns Interval disposable\n */\nexport function interval(fn?: () => void, time = 0) {\n    let intervalID: ReturnType<typeof setInterval> | undefined;\n\n    intervalID = setInterval(() => {\n        if (fn) {\n            fn();\n        }\n    }, time);\n\n    return () => {\n        if (intervalID) {\n            clearInterval(intervalID);\n\n            intervalID = undefined;\n            fn = undefined;\n        }\n    };\n}\n\n/**\n * @description Append parameter to provided URL\n * @param initialUrl initial url\n * @param name name of params\n * @param value value of param\n * @returns url with appended param\n */\nexport function appendParamToURL(initialUrl: string, name: string, value: string): string {\n    const url = new URL(initialUrl, document.location.origin);\n\n    // quit if the param already exists\n    if (url.searchParams.get(name)) {\n        return url.toString();\n    }\n\n    url.searchParams.append(name, value);\n\n    return url.toString();\n}\n\n/**\n * @description Remove provided parameter from URL\n * @param initialUrl Source Url\n * @param name Parameter to remove\n * @returns Url without parameter\n */\nexport function removeParamFromURL(initialUrl: string, name: string): string {\n    const url = new URL(initialUrl, document.location.origin);\n\n    url.searchParams.delete(name);\n\n    return url.toString();\n}\n\n/**\n * @description Add parameters to provided URL\n * @param url initial url\n * @param params  params as key value-object\n * @returns Url with appended parameters\n */\nexport function appendParamsToUrl(url: string, params: { [key: string]: string|number|boolean|undefined }): string {\n    return Object.entries(params).reduce((accumulator, [name, value]) => {\n        return appendParamToURL(accumulator, name, String(value));\n    }, url);\n}\n\n/**\n * @description Get parameters from URL\n * @param [url] Source Url\n * @returns Hash map of Url parameters\n */\nexport function getUrlParams(url?: string): {[x: string]: string} {\n    // get query string from url (optional) or window\n    let queryString = url ? url.split('?')[1] : window.location.search.slice(1);\n\n    // we'll store the parameters here\n    /**\n     * @type {{[x: string]: string}}\n     */\n    const obj = {};\n\n    // if query string doesn't exist\n    if (!queryString) {\n        return obj;\n    }\n\n    // stuff after # is not part of query string, so get rid of it\n    queryString = queryString.split('#')[0];\n\n    const queryParams = new URLSearchParams(queryString);\n\n    // transform instance of URLSearchParams to a Hash map\n    queryParams.forEach((value, key) => {\n        obj[key] = value;\n    });\n\n    return obj;\n}\n\n/**\n * @description Array of errors\n * @type {string[]}\n */\nlet errors: Array<string> = [];\n\n/**\n * @description Show error layout\n * @param message to show\n */\nexport function showErrorLayout(message: string | Error) {\n    const errorLayout = document.querySelector('#errorLayout');\n\n    if (!errorLayout) {\n        return;\n    }\n\n    if (message instanceof Error) {\n        if (message.stack) {\n            errors.unshift(message.stack);\n        }\n\n        errors.unshift(message.message);\n    } else {\n        errors.unshift(message);\n    }\n\n    log.error(message);\n    errorLayout.addEventListener('click', () => {\n        errorLayout.innerHTML = ''; errors = [];\n    }, { once: true });\n\n    errorLayout.innerHTML = `<div class=\"danger\" style=\"\n        bottom: 0;\n        right: 0;\n        position: fixed;\n        background-color: #ff0000c7;\n        border: black;\n        padding: 5px;\n        z-index: 9999999;\n        border-radius: 10px;\n    \">\n            Error: <br/>\n            ${errors.join('<hr/>')}\n        </div>`;\n}\n\n/**\n * @description Check if event `event` is triggered outside of element `el`\n * @param event DOM event\n * @param el element to track click on\n * @returns `true` if triggered outside of element\n */\nexport function isEventTriggeredOutsideElement(event: Event, el: HTMLElement): boolean {\n    if (event.target && event.target instanceof Element) {\n        let currElement = event.target;\n\n        while (currElement.parentElement) {\n            if (currElement === el) {\n                return false;\n            }\n\n            currElement = currElement.parentElement;\n        }\n\n        return true;\n    }\n\n    return false;\n}\n\n/**\n * @description Create a function to unsubscribe listener\n * @param listener Listener to unsubscribe\n * @param eventName Event to unsubscribe\n * @returns Unsubscribed listener or undefined\n */\nfunction makeExposableListener(listener: EventListener | undefined, eventName: string): EventListener | undefined {\n    if (listener) {\n        document.removeEventListener(eventName, listener);\n        listener = undefined;\n    }\n\n    return listener;\n}\n\n/**\n * @description Create listener for click outside of element `el` to execute callback `cb`\n * @param el Element to track click on\n * @param cb Callback\n * @param preventDefault Optional to prevent the default event\n * @returns Disposable function for listener (for unsubscription)\n */\nexport function clickOutside(el: RefElement, cb: (event) => void|boolean, preventDefault = true): () => void {\n    // need for support desktop emulation\n    const eventName = 'click';\n    const domEl = el.get();\n    /**\n     * @type {EventListener|undefined}\n     */\n    let listener;\n\n    function expose() {\n        listener = makeExposableListener(listener, eventName);\n    }\n\n    if (domEl) {\n        listener = event => {\n            if (isEventTriggeredOutsideElement(event, domEl)) {\n                if (cb(event) === false) {\n                    expose();\n                }\n\n                if (preventDefault === true) {\n                    event.preventDefault();\n                }\n            }\n        };\n\n        setTimeout(() => {\n            if (listener) {\n                document.addEventListener(eventName, listener);\n            }\n        }, 0);\n\n        return expose;\n    }\n\n    throw new Error('Missing required el');\n}\n\n/**\n * @description Compare object instances\n * @param x Source object\n * @param y Object for compare\n * @returns `true` if objects are equal\n */\n// eslint-disable-next-line complexity\nexport function objectEquals(x, y): boolean {\n    if (x === null || x === undefined || y === null || y === undefined) {\n        return x === y;\n    }\n\n    // after this just checking type of one would be enough\n    if (x.constructor !== y.constructor) {\n        return false;\n    }\n\n    // if they are functions or regexps, they should exactly refer to same one (because of closures)\n    if ((x instanceof Function) || (x instanceof RegExp)) {\n        return x === y;\n    }\n\n    if (x === y || x.valueOf() === y.valueOf()) {\n        return true;\n    }\n\n    if (Array.isArray(x) && x.length !== y.length) {\n        return false;\n    }\n\n    // if they are dates, they must had equal valueOf\n    if (x instanceof Date) {\n        return false;\n    }\n\n    // if they are strictly equal, they both need to be object at least\n    if (!(x instanceof Object) || !(y instanceof Object)) {\n        return false;\n    }\n\n    // recursive object equality check\n    const p = Object.keys(x);\n\n    return Object.keys(y).every((i) => p.indexOf(i) !== -1)\n        && p.every((i) => objectEquals(x[i], y[i]));\n}\n\n/**\n * @description Generate an integer Array containing an arithmetic progression\n * @param start start from\n * @param stop end on\n * @param step step\n * @returns Array with an arithmetic progression\n */\nexport function range(start: number, stop: number | null = null, step?: number): Array<number> {\n    if (stop === null) {\n        stop = start || 0;\n        start = 0;\n    }\n\n    if (!step) {\n        step = stop < start ? -1 : 1;\n    }\n\n    const length = Math.max(Math.ceil((stop - start) / step), 0);\n    const newRange = Array(length);\n\n    for (let idx = 0; idx < length; idx += 1, start += step) {\n        newRange[idx] = start;\n    }\n\n    return newRange;\n}\n\nconst regexpBrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/;\n\n/**\n * @description Converts value from data attribute into js type value\n * @param data value to convert\n * @returns converted value\n */\nexport function getData(data: string | null) {\n    if (data === null) {\n        return false;\n    }\n\n    if (data === 'true') {\n        return true;\n    }\n\n    if (data === 'false') {\n        return false;\n    }\n\n    if (data === 'null') {\n        return null;\n    }\n\n    // Determine number\n    if (!Number.isNaN(+data) && !Number.isNaN(parseFloat(data))) {\n        return +data;\n    }\n\n    if (regexpBrace.test(data)) {\n        return JSON.parse(data);\n    }\n\n    return data;\n}\n\ninterface IMemorizeHasher<FunctionForHashing extends TAbstractFunction> {\n    (...args: Parameters<FunctionForHashing>): string;\n}\n\n/**\n * @description Creates a function that memoize the result of `func`.\n * If resolver `hasher` is provided, it determines the cache key for storing\n * the result based on the arguments provided to the memoized function.\n * By default, the first argument provided to the memoized function is used as the map cache key.\n * The func is invoked with the this binding of the memoized function.\n * @param func The function to have its output memoized.\n * @param [hasher] The function to resolve the cache key.\n * @returns Returns the new memoized function.\n */\nexport function memoize<Func extends TAbstractFunction>(\n    func: Func,\n    hasher?: IMemorizeHasher<Func>\n) {\n    type TMemorizeCache = Record<string, ReturnType<Func>>;\n    type TMemoizedFunction = Func & { cache: TMemorizeCache };\n\n    /**\n     * @description Memoize function wrapper\n     * @param this context\n     * @param key Memoize key\n     * @returns Memoize cache value\n     */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    function memoizeInner(this: any, key: string) {\n        const cache: TMemorizeCache = memoizeInner.cache;\n\n        // eslint-disable-next-line prefer-rest-params\n        const address = '' + (hasher ? hasher.apply(this, <Parameters<Func>> arguments) : key);\n\n        if (typeof cache[address] === 'undefined') {\n            // eslint-disable-next-line prefer-rest-params\n            cache[address] = func.apply(this, <Parameters<Func>> arguments);\n        }\n\n        return cache[address];\n    }\n\n    memoizeInner.cache = {};\n\n    return <TMemoizedFunction> memoizeInner;\n}\n\n/**\n * @description Add script tag on page\n * @param source Url of script\n * @param options Script loading options\n * @param options.globalScriptName Script name in the global scope\n * @param options.integrity Script integrity\n * @param options.scriptAttributes Script attributes\n * @returns Promise when script loading is done or rejected\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst loadScriptHandler = <ScriptType = any> (\n    source: string,\n    options?: {\n        globalScriptName?: string;\n        integrity?: string;\n        scriptAttributes?: Record<string, string>;\n    }\n) => {\n    return <Promise<ScriptType|null>> new Promise((resolve, reject) => {\n        let script: HTMLScriptElement | undefined = document.createElement('script');\n        const prior = document.getElementsByTagName('script')[0];\n\n        if (!prior || !prior.parentNode) {\n            throw Error('No document');\n        }\n\n        script.async = true;\n\n        if (options?.integrity) {\n            script.integrity = options?.integrity;\n        }\n\n        if (options?.scriptAttributes) {\n            Object.keys(options.scriptAttributes).forEach((attrName) => {\n                const attributeValue = options?.scriptAttributes?.[attrName] as string;\n\n                script?.setAttribute(attrName, attributeValue);\n            });\n        }\n\n        script.type = 'text/javascript';\n        prior.parentNode.insertBefore(script, prior);\n\n        script.onload = () => {\n            if (script) {\n                script.onload = null;\n            }\n\n            script = undefined;\n\n            if (options?.globalScriptName) {\n                if (window[options?.globalScriptName]) {\n                    resolve(window[options?.globalScriptName]);\n                } else {\n                    reject();\n                }\n            } else {\n                resolve(null);\n            }\n        };\n\n        script.onabort = () => {\n            reject();\n        };\n\n        script.onerror = () => {\n            reject();\n        };\n\n        script.src = source;\n    });\n};\n\nexport const loadScript = memoize(loadScriptHandler);\n\n/**\n * @description Get value in tree object `target` by path `path`\n * @param target Source object\n * @param path In `target` object\n * @param [defaults] Will be returned instead of result if value doesn't exist\n * @returns Value in `target` object by path `path`\n */\nexport function get(target, path: string, defaults?) {\n    const parts = (path + '').split('.');\n    let part;\n\n    while (parts.length) {\n        part = parts.shift();\n\n        if (typeof target === 'object' && target !== null && part && part in target) {\n            target = target[part];\n        } else if (typeof target === 'string' && part) {\n            target = target[+part];\n            break;\n        } else {\n            target = defaults;\n            break;\n        }\n    }\n\n    return target;\n}\n\n/**\n * @description Checks if DOM element is focusable\n * @param element HTML element to check if it is focusable\n * @returns true if focusable, false if not\n */\nexport function isDOMElementFocusable(element: Element | HTMLElement): boolean {\n    if (\n        (element as HTMLElement).tabIndex > 0\n        || ((element as HTMLElement).tabIndex === 0 && element.hasAttribute('tabIndex'))\n        || element.hasAttribute('contenteditable')\n    ) {\n        return true;\n    }\n\n    if (element.hasAttribute('disabled') || element.hasAttribute('hidden')) {\n        return false;\n    }\n\n    switch (element.nodeName) {\n        case 'A':\n            return !!(element as HTMLLinkElement).href && (element as HTMLLinkElement).rel !== 'ignore';\n        case 'INPUT':\n            return (element as HTMLInputElement).type !== 'hidden' && (element as HTMLInputElement).type !== 'file';\n        case 'BUTTON':\n        case 'SELECT':\n        case 'TEXTAREA':\n            return true;\n        default:\n            return false;\n    }\n}\n","/**\n * @module viewtype\n * @category widgets\n * @subcategory toolbox\n * @description Represents viewtype component with next features:\n * 1. Allow getting current view type\n * 2. Allow handling Window change event and view type change event\n * 3. Allow checking if touch device\n * 4. Allow checking view type (e.g isSmallView, isMediumView, isLargeView etc.)\n *\n * @example <caption>Example of viewtype module usage</caption>\n * import { isDesktopView } from 'widgets/toolbox/viewtype';\n *\n *  checkAriaAttributes() {\n *      this.panelItems\n *          .map(menuItem => menuItem.ref('itemLink'))\n *          .filter(itemLink => itemLink.data('isCustomMenuHtml'))\n *          .forEach(itemLink => {\n *              itemLink.attr(ARIA_EXPANDED, isDesktopView());\n *              itemLink.attr('aria-haspopup', isDesktopView());\n *          });\n *  }\n */\n\nimport eventBus from './eventBus';\nimport { debounce } from './debounce';\nimport viewTypeConfig from 'widgets/viewTypeConfig';\nimport breakpoints from 'config/breakpoints';\nimport { setCookie } from './cookie';\n\nconst smallID = 'small';\nconst mediumID = 'medium';\nconst largeID = 'large';\nconst extraLargeID = 'extraLarge';\n\nexport type TViewType = typeof smallID|typeof mediumID| typeof largeID|typeof extraLargeID;\n\nexport type TQueryMap = Array<[v: TViewType, q: string]>;\n\nconst breakMd = breakpoints.md;\nconst breakLg = breakpoints.lg;\nconst breakXl = breakpoints.xl;\n\nconst smallView = `screen and (max-width: ${breakMd - 1}px)`;\nconst mediumView = `screen and (min-width: ${breakMd}px) and (max-width: ${breakLg - 1}px)`;\nconst largeView = `screen and (min-width: ${breakLg}px) and (max-width: ${breakXl - 1}px)`;\nconst exLargeView = `screen and (min-width: ${breakXl - 1}px)`;\nlet queriesMap: TQueryMap = [\n    [smallID, smallView],\n    [mediumID, mediumView],\n    [largeID, largeView],\n    [extraLargeID, exLargeView]\n];\n\nlet currentWindowWidth = window.innerWidth;\nlet currentWindowHeight = window.innerHeight;\n\n/**\n * @description Get current view type\n * @returns Current view type\n */\nfunction getCurrentViewType(): TViewType {\n    const matchQuery: [v: TViewType, q: string] | undefined = queriesMap.find(([, query]) => window.matchMedia(query).matches);\n\n    return (matchQuery && matchQuery[0]) || smallID;\n}\n\n/**\n * @description Set cookie \"screenSize\" that used on backend for detecting device type\n */\nfunction setScreenSizeToCookie() {\n    setCookie('screenSize', `${window.innerWidth}x${window.innerHeight}`);\n}\n\n/**\n * @description WindowChange event handler\n * @emits \"viewtype.windowChange\"\n */\nconst onWindowChange = (): void => {\n    if (currentWindowWidth !== window.innerWidth || currentWindowHeight !== window.innerHeight) {\n        currentWindowWidth = window.innerWidth;\n        currentWindowHeight = window.innerHeight;\n\n        setScreenSizeToCookie();\n\n        /**\n         * @description Event to window change\n         * @event \"viewtype.windowChange\"\n         */\n        eventBus.emit('viewtype.windowChange', {\n            currentWindowWidth: currentWindowWidth,\n            currentWindowHeight: currentWindowHeight\n        });\n    }\n};\n\n/**\n * @type {viewtype} Current view type\n */\nlet currentViewType: TViewType = smallID;\n\n/**\n * @description Small view type ID\n */\nexport const SMALL = smallID;\n\n/**\n * @description Medium view type ID\n */\nexport const MEDIUM = mediumID;\n\n/**\n * @description Large view type ID\n */\nexport const LARGE = largeID;\n\n/**\n * @description Extra large view type ID\n */\nexport const EXTRA_LARGE = extraLargeID;\n\n/**\n * @description Get current view type\n * @returns Current view type\n */\nexport const getViewType = (): string => currentViewType;\n\n/**\n * @description Check if touch device\n * @returns If touch device\n */\nexport const isTouchDevice = (): boolean => ('ontouchstart' in window)\n\n    || !!(window.DocumentTouch && document instanceof window.DocumentTouch);\n\n/**\n * @description Check if the current view type is equal to the provided one\n * @param type name of the type to check\n * @returns Return true if a provided type is equal to the current view type\n */\nfunction isViewTypeMatch(type: typeof currentViewType): boolean {\n    return getViewType() === type;\n}\n\n/**\n * @description Check if view type is small\n * @returns result\n */\nexport const isSmallView = (): boolean => isViewTypeMatch(smallID);\n\n/**\n * @description Check if view type is medium\n * @returns result\n */\nexport const isMediumView = (): boolean => isViewTypeMatch(mediumID);\n\n/**\n * @description Check if view type is medium and up\n * @returns result\n */\nexport const isMediumViewAndUp = (): boolean => !isSmallView();\n\n/**\n * @description Check if view type is medium and down\n * @returns result\n */\nexport const isMediumViewAndDown = (): boolean => isSmallView() || isMediumView();\n\n/**\n * @description Check if view type is extra large\n * @returns result\n */\nexport const isExtraLargeView = (): boolean => isViewTypeMatch(extraLargeID);\n\n/**\n * @description Check if view type is large\n * @returns result\n */\nexport const isLargeView = (): boolean => isViewTypeMatch(largeID);\n\n/**\n * @description Check if view type is large and up\n * @returns result\n */\nexport const isLargeViewAndUp = (): boolean => isLargeView() || isExtraLargeView();\n\n/**\n * @description Check if view type is large and down\n * @returns result\n */\nexport const isLargeViewAndDown = (): boolean => !isExtraLargeView();\n\n/**\n * @description Check if view type is desktop\n */\nexport const isDesktopView = isLargeViewAndUp;\n\nconst modifiersMapping = {\n    sm: isSmallView,\n    md: isMediumView,\n    lg: isLargeView,\n    xl: isExtraLargeView\n};\n\nexport type TShortViewtypes = keyof typeof modifiersMapping;\n\n/**\n * @description Define all view types\n * @type {}\n */\nexport const ALL_VIEW_TYPES: Array<TShortViewtypes> = ['sm', 'md', 'lg', 'xl'];\n\n/**\n * @description Get active view type name\n * @returns Active view type name\n */\nexport const getActiveViewtypeName = (): string => ALL_VIEW_TYPES.find(m => modifiersMapping[m]()) || 'xl';\n\n/**\n * @description Match viewport by device name\n * @emits \"viewtype.change\"\n * @param newDevice device type\n */\nfunction matchViewport(newDevice: typeof smallID | typeof mediumID | typeof largeID | typeof extraLargeID) {\n    const previousDevice = currentViewType;\n\n    currentViewType = newDevice;\n\n    if (previousDevice !== currentViewType) {\n        /**\n         * @description Event to change view type\n         * @event \"viewtype.change\"\n         */\n        eventBus.emit('viewtype.change', currentViewType);\n    }\n}\n\n/**\n * @description To init view types, you shouldn't use methods of modules before this executing\n * @emits \"viewtype.change\"\n * @param [config] object\n * @param config.useWindowListeners use listeners or MediaQueryListener\n * @param config.queriesMap size of mobile in pixels\n */\nexport function init(config: { useWindowListeners: boolean; queriesMap?: TQueryMap } = { useWindowListeners: false }) {\n    const currentConfig = { ...config, ...viewTypeConfig };\n\n    if (currentConfig.queriesMap) {\n        queriesMap = currentConfig.queriesMap;\n    }\n\n    if (currentConfig.useWindowListeners) {\n        const windowResize = debounce(() => {\n            onWindowChange();\n            matchViewport(getCurrentViewType());\n        }, 50);\n\n        window.addEventListener('resize', windowResize, { passive: true });\n        window.addEventListener('orientationchange', windowResize, { passive: true });\n    } else {\n        const applyCurrentDeviceType = debounce(() => matchViewport(getCurrentViewType()), 50);\n\n        queriesMap.forEach(([, query]) => window.matchMedia(query).addListener(applyCurrentDeviceType));\n    }\n\n    setScreenSizeToCookie();\n\n    currentViewType = getCurrentViewType();\n    /**\n     * @description Event to change view type\n     * @event \"viewtype.change\"\n     */\n    eventBus.emit('viewtype.change', currentViewType);\n}\n","export default {\n    useWindowListeners: true\n};\n","/* eslint-disable max-len, indent, sonarjs/no-duplicate-string */\n/* sonar-ignore-start */\n\nimport widgetsMgr from 'widgets/widgetsMgr';\nimport ContextLoader from 'widgets/global/ContextLoader';\nimport ContentLoader from 'widgets/global/ContentLoader';\n\nimport Tabs from 'widgets/global/Tabs';\nimport TabPanel from 'widgets/global/TabPanel';\nimport Accordion from 'widgets/global/Accordion';\nimport AccordionItem from 'widgets/global/AccordionItem';\nimport Label from 'widgets/global/Label';\nimport Modal from 'widgets/global/Modal';\nimport GlobalModal from 'widgets/global/GlobalModal';\nimport ConfirmDialog from 'widgets/global/ConfirmDialog';\nimport GlobalAlerts from 'widgets/global/GlobalAlerts';\nimport Carousel from 'widgets/global/Carousel';\nimport BackToTop from 'widgets/global/BackToTop';\nimport EmitBusEvent from 'widgets/global/EmitBusEvent';\nimport StickyHeader from 'widgets/global/StickyHeader';\nimport Header from 'widgets/global/Header';\nimport ConnectionMonitor from 'widgets/global/ConnectionMonitor';\n\nimport ListAccessibility from 'widgets/global/ListAccessibility';\nimport AccessibilityFocusTrapMixin from 'widgets/global/AccessibilityFocusTrapMixin';\nimport AccessibilityFocusMixin from 'widgets/global/AccessibilityFocusMixin';\nimport SoftKeyboardToggleMixin from 'widgets/global/SoftKeyboardToggleMixin';\nimport FocusHighlighter from 'widgets/global/FocusHighlighter';\nimport Disclosure from 'widgets/global/Disclosure';\n\nimport Form from 'widgets/forms/Form';\nimport BasicForm from 'widgets/forms/BasicForm';\nimport AjaxForm from 'widgets/forms/AjaxForm';\nimport BasicInput from 'widgets/forms/BasicInput';\nimport InputEmail from 'widgets/forms/InputEmail';\nimport InputPassword from 'widgets/forms/InputPassword';\nimport InputCheckbox from 'widgets/forms/InputCheckbox';\nimport InputText from 'widgets/forms/InputText';\nimport InputTextarea from 'widgets/forms/InputTextarea';\nimport InputHidden from 'widgets/forms/InputHidden';\nimport InputSelect from 'widgets/forms/InputSelect';\nimport InputRadio from 'widgets/forms/InputRadio';\nimport Button from 'widgets/global/Button';\nimport ButtonWithIcon from 'widgets/global/ButtonWithIcon';\nimport ProcessButton from 'widgets/global/ProcessButton';\n\nimport DismissBlock from 'widgets/global/DismissBlock';\nimport ConsentTracking from 'widgets/global/ConsentTracking';\nimport Geolocation from 'widgets/global/Geolocation';\nimport EmailSubscribe from 'widgets/forms/ajax/EmailSubscribe';\nimport Combobox from 'widgets/forms/Combobox';\nimport SearchBox from 'widgets/search/SearchBox';\nimport ProductTile from 'widgets/product/ProductTile';\nimport AlternativeImage from 'widgets/product/AlternativeImage';\n\nimport CarouselExt from 'widgets/pagedesigner/CarouselExt';\nimport VideoExt from 'widgets/pagedesigner/VideoExt';\nimport AnimationOnScroll from 'widgets/pagedesigner/AnimationOnScroll';\nimport CtaExt from 'widgets/pagedesigner/CtaExt';\nimport HotSpot from 'widgets/pagedesigner/HotSpot';\nimport CarouselSimple from 'widgets/pagedesigner/CarouselSimple';\nimport ProgressBar from 'widgets/pagedesigner/ProgressBar';\nimport EinsteinCarouselLoader from 'widgets/pagedesigner/EinsteinCarouselLoader';\nimport HeroCarousel from 'widgets/global/HeroCarousel';\n\nwidgetsMgr.addWidgetsList('global.widgets', () => [\n    ['contextLoader', ContextLoader],\n    ['contentLoader', ContentLoader],\n    ['label', Label],\n    ['carousel', Carousel],\n    ['button', Button],\n        ['buttonWithIcon', ButtonWithIcon, 'button'],\n        ['processButton', ProcessButton, 'button'],\n    ['listAccessibility', ListAccessibility],\n        ['accordion', Accordion, 'listAccessibility'],\n    ['accordionItem', AccordionItem],\n    ['dismissBlock', DismissBlock],\n    ['backtotop', BackToTop],\n    ['consentTracking', ConsentTracking],\n    ['geolocation', Geolocation],\n    ['emitBusEvent', EmitBusEvent],\n    ['focusHighlighter', FocusHighlighter],\n    ['stickyHeader', StickyHeader],\n    ['header', Header, 'contextLoader'],\n    ['basicForm', BasicForm],\n        ['form', Form, 'basicForm'],\n            ['ajaxform', AjaxForm, 'basicForm'],\n                ['emailSubscribe', EmailSubscribe, 'ajaxform'],\n    ['basicInput', BasicInput],\n        ['inputPassword', InputPassword, 'basicInput'],\n        ['inputCheckbox', InputCheckbox, 'basicInput'],\n        ['inputSelect', InputSelect, 'basicInput'],\n        ['inputText', InputText, 'basicInput'],\n            ['inputEmail', InputEmail, 'inputText'],\n            ['inputTextarea', InputTextarea, 'inputText'],\n        ['inputRadio', InputRadio, 'basicInput'],\n        ['inputHidden', InputHidden, 'basicInput'],\n    ['modal', Modal],\n        ['modal', AccessibilityFocusTrapMixin, 'modal'],\n        ['globalModal', GlobalModal, 'modal'],\n        ['confirmDialog', ConfirmDialog, 'modal'],\n    ['combobox', Combobox],\n        ['searchBox', SearchBox, 'combobox'],\n            ['searchBox', AccessibilityFocusTrapMixin, 'searchBox'],\n            ['searchBox', SoftKeyboardToggleMixin, 'searchBox'],\n            ['searchBox', Modal, 'searchBox'],\n    ['tabs', Tabs],\n    ['tabPanel', TabPanel],\n    ['productTile', ProductTile],\n        ['productTile', AlternativeImage, 'productTile'],\n    ['disclosure', Disclosure],\n        ['disclosure', AccessibilityFocusMixin, 'disclosure'],\n    ['globalAlerts', GlobalAlerts],\n    ['connectionMonitor', ConnectionMonitor]\n]);\n\nwidgetsMgr.addWidgetsList('page_designer.global.core', () => [\n    ['carouselExt', CarouselExt, 'carousel'],\n    ['videoExt', VideoExt],\n    ['animationOnScroll', AnimationOnScroll],\n    ['ctaExt', CtaExt],\n    ['hotSpot', HotSpot],\n    ['carouselSimple', CarouselSimple, 'carousel'],\n    ['progressBar', ProgressBar],\n    ['einsteinCarouselLoader', EinsteinCarouselLoader],\n    ['heroCarousel', HeroCarousel]\n]);\n\n/* sonar-ignore-end */\n","/**\n * @module widgetsMgr\n * @category widgets\n * @subcategory framework\n */\n\n/* eslint-disable no-use-before-define */\n/* eslint-disable max-classes-per-file */\nif ('assetsStaticURL' in window) {\n    // eslint-disable-next-line no-undef, camelcase\n    __webpack_public_path__ = window.assetsStaticURL;\n}\n\nimport './_polyfills';\nimport { log, getData } from './toolbox/util';\nimport { RefElement } from 'widgets/toolbox/RefElement';\nimport Widget from 'widgets/Widget';\nimport {\n    init as initViewType,\n    getActiveViewtypeName,\n    ALL_VIEW_TYPES,\n    TShortViewtypes\n} from 'widgets/toolbox/viewtype';\nimport eventBus from 'widgets/toolbox/eventBus';\n\nexport const WIDGET_PROP_NAME = '@@_widget_instance_@@';\nconst WIDGET_DISPOSABLE_VALUES = '@@_widget_events_disposable_@@';\nconst WIDGET_DOM_EVENT_PREFIX = 'data-event-';\nconst DATA_ATTR_PREFIX = 'data-';\nconst DATA_WIDGET = 'data-widget';\nconst DATA_WIDGET_VIEWTYPE_RELATED = 'data-widget.';\nconst WIDGET_EVENT_PREFIX = 'data-widget-event-';\nconst DATA_INITIALIZED = 'data-initialized';\nconst DATA_REF = 'data-ref';\nconst DATA_CONTEXT = 'data-context';\n\nimport type * as diffDOM from 'diff-dom/src/index';\n\n/**\n * @description check if there are viewtype modifiers\n * @param modifiers to check\n * @returns true if any viewtype modifier exist\n */\nconst isViewtypeModifiers = (modifiers: Array<TShortViewtypes>): boolean => modifiers.some(m => ALL_VIEW_TYPES.includes(m));\n/**\n * @description check if HTML Element is widget\n * @param el element to check\n * @returns true if widget\n */\nconst isWidget = (el: HTMLElement): boolean => el.hasAttribute(DATA_WIDGET)\n    || el.getAttributeNames().some(name => name.startsWith(DATA_WIDGET_VIEWTYPE_RELATED));\n/**\n * @description get widget name for current viewtype\n * @param el widget element\n * @returns widget name if exist\n */\nconst getViewtypeRelatedWidgetName = (el: HTMLElement): string | null => {\n    const activeViewtypeName = getActiveViewtypeName();\n    const viewtypeWidgetConfigs = el.getAttributeNames().filter(name => name.startsWith(DATA_WIDGET_VIEWTYPE_RELATED));\n\n    if (viewtypeWidgetConfigs.length) {\n        const attrName = viewtypeWidgetConfigs.find(name => name.includes(activeViewtypeName));\n\n        return attrName ? el.getAttribute(attrName) : 'widget';\n    } else {\n        return null;\n    }\n};\n/**\n * @description check if element has viewtype-related widget definition or widget properties\n * @param el element\n * @returns widget name if exist\n */\nconst isViewtypeRelatedWidget = (el: HTMLElement): boolean => {\n    if (el.getAttribute(DATA_WIDGET)) {\n        return el.getAttributeNames().some(name => name.startsWith(DATA_ATTR_PREFIX) // is data attr\n            && !name.startsWith(WIDGET_EVENT_PREFIX) // not widget event\n            && !name.startsWith(WIDGET_DOM_EVENT_PREFIX) // not dom event\n            && ALL_VIEW_TYPES.some(m => name.includes(m))); // is viewtype related property\n    } else {\n        return isWidget(el); // is viewtype related widget definition\n    }\n};\n\nclass RootWidget extends Widget {}\n\nif (!document.head.parentElement) {\n    throw Error('No document');\n}\n\ntype TDomWidgetConfig = {\n    [key: string]: Record<string, unknown> | string | number | boolean | null | undefined;\n}\n\n/**\n * @description get initial widget state from data attributes\n * @param domNode element of widget\n * @returns json-like configuration\n */\nfunction getWidgetConfig(domNode: HTMLElement): TDomWidgetConfig {\n    const config: TDomWidgetConfig = {};\n    const activeViewtype = getActiveViewtypeName();\n\n    domNode.getAttributeNames().forEach(attrName => {\n        if (typeof attrName === 'string'\n            && attrName.includes(DATA_ATTR_PREFIX)\n            && !attrName.startsWith(WIDGET_DOM_EVENT_PREFIX)\n            && !attrName.startsWith(DATA_WIDGET)\n        ) {\n            const [key, ...modifiers] = attrName.replace(DATA_ATTR_PREFIX, '').split('.');\n            const camelCaseKey = camelCase(key);\n            const isActiveViewtypeModifier = modifiers.includes(activeViewtype);\n            const isViewtypeModifier = isViewtypeModifiers(<Array<TShortViewtypes>>modifiers);\n            const isConfigNotExist = typeof config[camelCaseKey] === 'undefined';\n\n            // If modifiers has activeViewtype that we definitely need set it to config, even if we already have value in config (most probable there can be only default value set)\n            // If not check if it is default value (not have modifiers) and if value was not previously set by attribute with modifiers then we will set default value to config\n            if (isActiveViewtypeModifier || (!isViewtypeModifier && isConfigNotExist)) {\n                config[camelCaseKey] = getData(domNode.getAttribute(attrName));\n            }\n        }\n    });\n\n    const jsonConfig = domNode.getAttribute('data-json-config');\n\n    if (jsonConfig) {\n        try {\n            const parsedConfig = JSON.parse(jsonConfig);\n\n            return { ...config, ...parsedConfig };\n        } catch (error) {\n            if (PRODUCTION) {\n                log.error(`Invalid json config for widget ${domNode} ${error}`);\n            } else {\n                throw new Error(`Invalid json config for widget ${domNode} ${error}`);\n            }\n        }\n    }\n\n    return config;\n}\n\n/**\n  * @description detach/attach widgets to elements by name\n  * @param el root element for re-initialization widgets\n  * @param widgetsListNames - widgets list\n  */\nfunction reinitElementByWidgetsNamesList(\n    el: HTMLElement | null = document.head.parentElement,\n    widgetsListNames: Array<string> = []\n) {\n    if (!el) {\n        return;\n    }\n\n    const widgetName = el && el.getAttribute(DATA_WIDGET);\n\n    if ((widgetName && widgetsListNames.includes(widgetName)) || isViewtypeRelatedWidget(el)) {\n        detachElement(el);\n        attachElements(el);\n\n        return;\n    }\n\n    if (!el.children) {\n        return;\n    }\n\n    // recursion\n    // disposable not view type events\n    // assign view type events\n    const attrs = el.getAttributeNames().filter(name => name.startsWith(WIDGET_DOM_EVENT_PREFIX));\n    const reloadEvents = attrs.some(attr => {\n        const [, ...modifiers] = <[x: unknown, ...m: Array<TShortViewtypes>]>attr.replace(WIDGET_DOM_EVENT_PREFIX, '').split('.');\n\n        return modifiers.some(mod => ALL_VIEW_TYPES.includes(mod));\n    });\n\n    if (reloadEvents) {\n        const parentWidget = el[WIDGET_PROP_NAME] || findParentWidget(el);\n        const disposableValues = el[WIDGET_DISPOSABLE_VALUES];\n\n        if (disposableValues) {\n            el[WIDGET_DISPOSABLE_VALUES] = disposableValues.filter((dispose) => {\n                if (dispose.eventName) {\n                    // Dispose only events\n                    dispose();\n\n                    return false;\n                }\n\n                return true;\n            });\n        }\n\n        attrs.forEach(attachEventToElement(el, parentWidget));\n    }\n\n    Array.from(el.children).forEach(child => {\n        reinitElementByWidgetsNamesList(<HTMLElement> child, widgetsListNames);\n    });\n}\n\nconst rootWidget = new RootWidget(document.head.parentElement, {});\nconst widgetsInitMetric: {[widgetName: string]: number} = Object.create(null);\nlet initialized = false;\n\n/**\n * @description Widget Mixin Function\n */\ntype TMixinFunction<T = typeof Widget> = (base: never) => T;\n\n/**\n * @description Widget Definition Config contain Mixin function and parent widget name (if exist)\n */\ntype TWidgetDefinitionConfig = [TMixinFunction, string|undefined];\n\n/**\n * @description Simple Widget Registry record\n */\ntype TSimpleWidgetRegistry = [string, TMixinFunction];\n\n/**\n * @description Simple Widget Registry record\n */\ntype TExtendedWidgetRegistry = [string, TMixinFunction, string];\n\n/**\n * @description Widget Registry record\n */\ntype TWidgetRegistryRecord = TSimpleWidgetRegistry | TExtendedWidgetRegistry;\n\n/**\n * @description Async widget list\n */\ntype TAsyncList = {\n    getLoadingFlag: () => boolean;\n    load: () => Promise<{ listId: string; widgetsDefinition: () => Array<TWidgetRegistryRecord> }>;\n    loaded?: boolean;\n};\n\nclass WidgetMgr {\n    /**\n     * @description Map of widgets configurations in format: `widgetId: [widgetFunction, dependencyWidgetId]\n     */\n    widgets: {[key: string]: TWidgetDefinitionConfig | undefined} = Object.create(null);\n\n    /**\n     * @description Map of widgets list generators in format `listId: generatorFunction`\n     * Generator function return widgets list\n     */\n    widgetsLists: {[key: string]: () => Array<TWidgetRegistryRecord>} = Object.create(null);\n\n    /**\n     * @description Array of registered widgets lists IDs\n     */\n    widgetsListsNameSpaceOrder: Array<string> = [];\n\n    /**\n     * @description Map of cached widgets classes in format `widgetId: returnsClassFunction`\n     */\n    widgetsClassCache: {[key: string]: typeof Widget|undefined} = Object.create(null);\n\n    /**\n     * @description Async list contain widget definition that loaded asynchronously\n     */\n    asyncLists: Array<TAsyncList> = [];\n\n    hashRegistry: { [key: string]: Array<string> | undefined } = Object.create(null);\n\n    /**\n     * @description Timestamp for widgets evaluate\n     */\n    timeOfEvaluate: number;\n\n    /**\n     * @description Timestamp for widgets run\n     */\n    timeOfRun: number;\n\n    /**\n     * @description Timestamp for widgets init\n     */\n    timeOfInit: number;\n\n    /**\n     * @description Flag that indicate if dom loaded before widget initialization\n     */\n    hasDomLoadedFirst = false;\n\n    /**\n     * Record of callbacks that will be triggered after widget initialization is finished\n     * Object used instead of array to make sure that the same callbacks will not be added multiple times accidentally\n     */\n    onInitialized: Record<string, () => void> = {};\n\n    constructor() {\n        this.timeOfEvaluate = Date.now();\n        this.timeOfRun = Date.now();\n        this.timeOfInit = Date.now();\n        this.widgets.widget = [() => Widget, ''];\n\n        initViewType();\n        eventBus.on('context.add', (contextId) => {\n            if (!window.contexts.includes(contextId)) {\n                window.contexts.push(contextId);\n            }\n\n            this.run(contextId);\n        });\n    }\n\n    /**\n     * @description When DOM is ready, the method starts registering widgets, for each assigned widgets list, and executes WidgetMgr.init()\n     * @param [contextId] Id of context to be added\n     */\n    run(contextId?: string) {\n        const asyncListPromises = this.asyncLists.filter(list => !list.loaded).filter(list => list.getLoadingFlag()).map(list => {\n            list.loaded = true;\n\n            return list.load();\n        });\n\n        Promise.all(asyncListPromises).then((asyncLists) => {\n            asyncLists.forEach(({ listId, widgetsDefinition }) => this.addWidgetsList(listId, widgetsDefinition));\n\n            if (contextId) {\n                asyncLists.forEach(asyncList => {\n                    this.registerWidgetsList(asyncList.listId);\n                });\n                document.querySelectorAll(`[${DATA_CONTEXT}~=\"${contextId}\"]`).forEach(el => {\n                    const contexts = el.getAttribute(DATA_CONTEXT);\n\n                    if (contexts === contextId) {\n                        el.removeAttribute(DATA_CONTEXT);\n                    } else if (contexts) {\n                        el.setAttribute(\n                            DATA_CONTEXT,\n                            contexts.split(' ')\n                                .filter(context => context !== contextId)\n                                .join(' ')\n                        );\n                    }\n\n                    if (el instanceof HTMLElement) {\n                        attachElements(el);\n                    }\n                });\n\n                return;\n            }\n\n            this.widgetsListsNameSpaceOrder.forEach(this.registerWidgetsList, this);\n            this.timeOfRun = Date.now();\n\n            // Init widgets once DOM is ready\n            if (document.readyState === 'loading') {\n                this.hasDomLoadedFirst = false;\n                document.addEventListener('DOMContentLoaded', () => {\n                    setTimeout(() => this.init(), 0);\n                }, { once: true });\n            } else {\n                this.hasDomLoadedFirst = true;\n                this.init();\n            }\n        });\n    }\n\n    /**\n     * @description Returns all registered widgets.\n     * @returns all widgets\n     */\n    getAll(): WidgetMgr['widgets'] {\n        return this.widgets;\n    }\n\n    /**\n     * @description Returns registered widget by name.\n     * @param [name] Name of registered widget (used as data-widget=\"<name>\" in DOM)\n     * @returns return widget class by name\n     */\n    get(name?: string): typeof Widget {\n        if (name) {\n            const cachedClass = this.widgetsClassCache[name];\n\n            if (cachedClass) {\n                return cachedClass;\n            }\n\n            const widgetsConfig = this.widgets[name];\n\n            if (widgetsConfig) {\n                const [getWidgetClass, baseWidget] = widgetsConfig;\n                const widgetClass = getWidgetClass(<never> this.get(baseWidget));\n\n                this.widgetsClassCache[name] = widgetClass;\n\n                return widgetClass;\n            }\n\n            // eslint-disable-next-line no-console\n            console.error(`widgetClass with ID \"${name}\" missed in widgets config`);\n        }\n\n        return Widget;\n    }\n\n    /**\n     * @description add widget by name into registry\n     * @param name of widget in registry\n     * @param widget definition configuration to set\n     * @returns widget return set widget config\n     */\n    set(name: string, widget: TWidgetDefinitionConfig): TWidgetDefinitionConfig {\n        this.widgets[name] = widget;\n\n        return widget;\n    }\n\n    /**\n     * @description Add widgets list into registry\n     * @param nameSpace - name of widgets list\n     * @param cb - function that returns widget list\n     */\n    addWidgetsList(nameSpace: string, cb: () => Array<TWidgetRegistryRecord>) {\n        if (!this.widgetsListsNameSpaceOrder.includes(nameSpace)) {\n            this.widgetsListsNameSpaceOrder.push(nameSpace);\n        }\n\n        if (!PRODUCTION && this.widgetsLists[nameSpace]) {\n            // eslint-disable-next-line no-console\n            console.error(`Widget List with listId \"${nameSpace}\" already exist. listId should be unique!`);\n        }\n\n        this.widgetsLists[nameSpace] = cb;\n    }\n\n    /**\n     * @description Register all widgets from widgets list by name space\n     * @param nameSpace - widgets list name space\n     */\n    registerWidgetsList(nameSpace: string) {\n        if (!PRODUCTION) {\n            // eslint-disable-next-line no-console\n            console.groupCollapsed(`${nameSpace} widgets registration`);\n        }\n\n        this.widgetsLists[nameSpace]().forEach(args => this.register(args[0], args[1], args[2]));\n\n        if (!PRODUCTION) {\n            // eslint-disable-next-line no-console\n            console.groupEnd();\n        }\n    }\n\n    /**\n     * @description set hash to registry by widget name with widget dependency\n     * @param hashRegistry registry object\n     * @param name widget in hashRegistry\n     * @param baseWidget name of base widget\n     */\n    setHash(hashRegistry: WidgetMgr['hashRegistry'], name: string, baseWidget = '') {\n        if (!hashRegistry[name]) {\n            hashRegistry[name] = [name];\n        }\n\n        const currentHash = hashRegistry[name];\n\n        if (baseWidget && currentHash) {\n            currentHash.push(baseWidget);\n        }\n    }\n\n    /**\n     * @description get widget hash from registry by name\n     * @param hashRegistry registry object\n     * @param name widget in hashRegistry\n     * @returns hash for widget\n     */\n    getHash(hashRegistry: WidgetMgr['hashRegistry'], name: string): string {\n        return (hashRegistry[name] || []).reduce((currentWidget, baseWidget) => {\n            let hash;\n\n            if (name === baseWidget) {\n                hash = baseWidget;\n            } else {\n                hash = this.getHash(hashRegistry, baseWidget);\n            }\n\n            return currentWidget + hash;\n        }, '');\n    }\n\n    /**\n     * @description add widget into registry\n     * @param name name of widget (will be used in `data-widget=\"name\"`)\n     * @param widgetConstructor function mixin that returns class\n     * @param [baseWidget] base widget to extend\n     */\n    register(name: string, widgetConstructor: TMixinFunction, baseWidget?: string) {\n        const widgetConfig = this.widgets[name];\n\n        if (widgetConfig && baseWidget === name) {\n            const [superWidgetConstructor, superBaseWidget] = widgetConfig;\n\n            this.set(name, [base => widgetConstructor(<never> superWidgetConstructor(base)), superBaseWidget]);\n        } else {\n            this.set(name, [widgetConstructor, baseWidget]);\n        }\n\n        this.setHash(this.hashRegistry, name, baseWidget);\n    }\n\n    /**\n     * @description Returns list of widgets changed during 'viewtype.change' event\n     * @returns widgets that was changed due to viewport change\n     */\n    getChangedWidgets(): Array<TWidgetRegistryRecord> {\n        const emptyArray: Array<TWidgetRegistryRecord> = [];\n        const newRegistry = this.widgetsListsNameSpaceOrder\n            .map(ns => this.widgetsLists[ns]())\n            .reduce((prev, nsList) => [...prev, ...nsList], emptyArray);\n\n        // find extendable widgets\n        const newHash: WidgetMgr['hashRegistry'] = Object.create(null);\n\n        newRegistry.forEach(([widgetName, , baseName]) => this.setHash(newHash, widgetName, baseName));\n\n        const changedWidgets = newRegistry\n            .filter(([widgetName]) => this.getHash(newHash, widgetName) !== this.getHash(this.hashRegistry, widgetName));\n\n        return changedWidgets;\n    }\n\n    /**\n     * @description Re-init widgets changed during 'viewtype.change' event and re-assign viewtype related events\n     */\n    updateMutableComponents() {\n        if (!initialized) {\n            this.onInitialized.updateMutableComponents = this.updateMutableComponents.bind(this);\n\n            return;\n        }\n\n        const changedWidgets = this.getChangedWidgets();\n\n        if (!changedWidgets.length) {\n            reinitElementByWidgetsNamesList();\n\n            return;\n        }\n\n        const widgetsNames = changedWidgets.map(w => w[0]);\n\n        // remove definitions\n        changedWidgets.forEach(([name]) => {\n            this.hashRegistry[name] = undefined;\n            this.widgets[name] = undefined;\n            this.widgetsClassCache[name] = undefined;\n        });\n        // register again\n        changedWidgets.forEach(args => this.register(args[0], args[1], args[2]));\n        reinitElementByWidgetsNamesList(document.head.parentElement, widgetsNames);\n    }\n\n    /**\n     * @description Destroy all widgets/events and construct them again. Needed for webpack HMR during change code for any widget\n     * @param el - root element from which start restart of widgets\n     */\n    restartWidgets(el: HTMLElement | null = document.head.parentElement) {\n        if (el) {\n            detachElement(el);\n            this.hashRegistry = {};\n            this.widgets = {};\n            this.widgets.widget = [() => Widget, ''];\n            this.widgetsClassCache = {};\n            this.widgetsListsNameSpaceOrder.forEach(this.registerWidgetsList, this);\n            attachElements(el);\n        }\n    }\n\n    /**\n     * @description destroy widget or refElement, run disposable for events for element\n     * @param el element for processing attributes\n     * @param diff diffDom internal object of changes\n     */\n    removeAttribute(el: HTMLElement, diff: diffDOM.IDiff) {\n        if (diff.name === DATA_REF) {\n            el[WIDGET_DISPOSABLE_VALUES] = (el[WIDGET_DISPOSABLE_VALUES] || []).filter(disposable => {\n                if (disposable.attrName === 'ref') {\n                    disposable();\n\n                    return false;\n                }\n\n                return true;\n            });\n        } else if (DATA_WIDGET === diff.name || diff.name.startsWith(DATA_WIDGET_VIEWTYPE_RELATED)) {\n            detachElement(el);\n        } else if (diff.name.startsWith(WIDGET_DOM_EVENT_PREFIX)) {\n            const name = diff.name.replace(WIDGET_DOM_EVENT_PREFIX, '').split('.')[0];\n            const value = diff.value || diff.oldValue;\n\n            el[WIDGET_DISPOSABLE_VALUES] = (el[WIDGET_DISPOSABLE_VALUES] || []).filter(disposable => {\n                if (disposable.eventName === name && disposable.methodToCall === value) {\n                    disposable();\n\n                    return false;\n                }\n\n                return true;\n            });\n        } else if (el[WIDGET_PROP_NAME]) {\n            handleWidgetPropertyChange(el, diff);\n        }\n    }\n\n    /**\n     * @description Create widget or refElement, assign events for element\n     * @param el element for processing attributes\n     * @param diff diffDom internal object of changes\n     */\n    addAttribute(el: HTMLElement, diff: diffDOM.IDiff) {\n        if (diff.name === DATA_REF) {\n            const widget = el[WIDGET_PROP_NAME] || findParentWidget(el);\n\n            if (widget && widget.refs) {\n                const refEl = new RefElement([el]);\n\n                widget.refs[diff.value || diff.newValue] = refEl;\n                disposableForParent(el, widget, refEl, diff.value || diff.newValue);\n            }\n        } else if (DATA_WIDGET === diff.name || diff.name.startsWith(DATA_WIDGET_VIEWTYPE_RELATED)) {\n            attachElements(el);\n        } else if (diff.name.startsWith(WIDGET_DOM_EVENT_PREFIX)) {\n            attachEventToElement(el, el[WIDGET_PROP_NAME] || findParentWidget(el))(diff.name);\n        } else if (el[WIDGET_PROP_NAME]) {\n            const widget = el[WIDGET_PROP_NAME];\n\n            if (widget && diff.name !== DATA_INITIALIZED) {\n                widget.config = getWidgetConfig(el);\n            }\n        }\n    }\n\n    /**\n     * @description Attaching widget to DOM elements from parent to child recursively, by Widgets.attachElements(element)\n     * Initialize mutation observer\n     */\n    init() {\n        if (!PRODUCTION) {\n            this.timeOfInit = Date.now();\n            // log.profile('Initialization widgets');\n        }\n\n        if (!document.head.parentElement) {\n            throw Error('No document');\n        }\n\n        const observer = new MutationObserver(mutations => mutations.forEach((mutation) => {\n            this.handleMutations(mutation);\n        }));\n\n        observer.observe(document.body, {\n            attributes: false,\n            characterData: false,\n            childList: true,\n            subtree: true\n        });\n\n        attachElements(document.head.parentElement);\n\n        eventBus.on('viewtype.change', () => this.updateMutableComponents());\n\n        if (!PRODUCTION) {\n            const total = Date.now() - window.headInitTime;\n            const timeInitWidgets = Date.now() - this.timeOfInit;\n            const timeToRegisterWidgets = this.timeOfRun - this.timeOfEvaluate;\n            const loadAndScriptingTime = this.timeOfEvaluate - window.headInitTime;\n\n            let waitToDomLoaded = 0;\n\n            waitToDomLoaded = this.hasDomLoadedFirst ? (window.domReadyTime - this.timeOfInit) : this.timeOfInit - this.timeOfRun;\n\n            const headToDomReady = (window.domReadyTime || this.timeOfRun) - window.headInitTime;\n\n            log.table({\n                headToDomReady: {\n                    ms: headToDomReady,\n                    percentage: 0\n                },\n                loadAndScriptingTime: {\n                    ms: loadAndScriptingTime,\n                    percentage: Math.round((loadAndScriptingTime / total) * 100)\n                },\n                registerWidgetsTime: {\n                    ms: timeToRegisterWidgets,\n                    percentage: Math.round((timeToRegisterWidgets / total) * 100)\n                },\n                waitToDomLoaded: {\n                    ms: waitToDomLoaded,\n                    percentage: waitToDomLoaded > 0 ? Math.round((waitToDomLoaded / total) * 100) : 0\n                },\n                initWidgetsTime: {\n                    ms: timeInitWidgets,\n                    percentage: Math.round((timeInitWidgets / total) * 100)\n                },\n                total: {\n                    ms: total,\n                    percentage: Math.round(100)\n                }\n            });\n\n            if (timeToRegisterWidgets > 50) {\n                log.warn('High time of widgets registration');\n            }\n\n            if (timeInitWidgets > 50) {\n                log.warn('High time of widgets initialization');\n            }\n\n            widgetsInitMetric.total = Object.values(widgetsInitMetric).reduce((a, b) => a + b, 0);\n            log.groupCollapsed('Widgets initialization time (init method)');\n            log.table(widgetsInitMetric);\n            log.groupEnd();\n        }\n\n        // CLARIFY: What is magic timeout for 500 ms?\n        setTimeout(() => {\n            initialized = true;\n            Object.values(this.onInitialized).forEach(callback => callback());\n        }, 500);\n    }\n\n    /**\n     * @description mutations handler for MutationObserver\n     * @param mutation record of MutationObserver\n     */\n    handleMutations(mutation: MutationRecord) {\n        const { addedNodes, removedNodes } = mutation;\n\n        removedNodes.forEach(removedNode => {\n            if (removedNode.nodeType === removedNode.ELEMENT_NODE) {\n                detachElement(<HTMLElement>removedNode);\n            }\n        });\n        addedNodes.forEach(addedNode => {\n            if (addedNode.nodeType === addedNode.ELEMENT_NODE && document.body.contains(addedNode)) {\n                attachElements(<HTMLElement>addedNode);\n            }\n        });\n    }\n}\n\nconst widgetsMgr = new WidgetMgr();\n\n// Matches dashed string for camel case\nconst rmsPrefix = /^-ms-/;\nconst rdashAlpha = /-([a-z])/g;\n\n/**\n * @description handler for Widget.onRefresh() lifecycle hook\n * @param el element for processing attributes\n * @param diff diffDom internal object of changes\n */\nfunction handleWidgetPropertyChange(el: HTMLElement, diff: diffDOM.IDiff) {\n    const widget = el[WIDGET_PROP_NAME];\n\n    if (widget) {\n        if (diff.name === DATA_INITIALIZED) {\n            if (!widget.isRefreshingWidget) {\n                widget.isRefreshingWidget = true;\n                widget.onRefresh();\n                widget.isRefreshingWidget = false;\n            }\n\n            el.setAttribute(DATA_INITIALIZED, '1');\n        } else {\n            widget.config = getWidgetConfig(el);\n        }\n    }\n}\n\n/**\n * @description Convert dashed to camelCase; used by the css and data modules\n * @param string String to convert\n * @returns Converted string\n */\nfunction camelCase(string: string): string {\n    return string.replace(rmsPrefix, 'ms-').replace(rdashAlpha, (_all, letter) => letter.toUpperCase());\n}\n\n/**\n * @description Get widget name from node or instance\n * @param widgetInstance Widget instance\n * @returns Message with widget name\n */\nfunction getWidgetName(widgetInstance: Widget | null): string {\n    if (!widgetInstance) {\n        return 'name not found';\n    }\n\n    const widgetNode = widgetInstance.ref('self').get();\n\n    if (widgetNode && widgetNode.getAttribute(DATA_WIDGET)) {\n        return widgetNode.getAttribute(DATA_WIDGET) as string;\n    }\n\n    if (widgetInstance.constructor.name) {\n        return widgetInstance.constructor.name;\n    }\n\n    return 'name not found';\n}\n\n/**\n * @description Get attributes data from widget dom element\n * @param widgetNode widget element\n */\nfunction getWidgetDataMsg(widgetNode: HTMLElement | undefined): string {\n    if (!widgetNode) {\n        return '';\n    }\n\n    const widgetData: Array<string> = [''];\n\n    if (widgetNode.getAttribute('data-id')) {\n        widgetData.push(`data-id=\"${widgetNode.getAttribute('data-id')}\"`);\n    }\n\n    if (widgetNode.getAttribute('id')) {\n        widgetData.push(`id=\"${widgetNode.getAttribute('id')}\"`);\n    }\n\n    return widgetData.join('\\n');\n}\n\n/**\n * @description Create callback that will attach DOM events to element through `attachEventToWidget` using data-event- attributes\n * @param el DOM element\n * @param widgetInstance Widget instance\n * @returns callback\n */\nfunction attachEventToElement(el: HTMLElement, widgetInstance: Widget|null): (attr: string) => void {\n    return attr => {\n        const [attrName, ...modifiers] = attr.replace(WIDGET_DOM_EVENT_PREFIX, '').split('.');\n        const attrValue = el.getAttribute(attr) || '@';\n\n        if (!PRODUCTION && modifiers.length && ALL_VIEW_TYPES.every(m => modifiers.includes(m))) {\n            log.error(\n                `you shouldn't use ${WIDGET_DOM_EVENT_PREFIX}eventName.${ALL_VIEW_TYPES.join('.')}`\n                + 'use it without modifiers'\n            );\n        }\n\n        if (isViewtypeModifiers(<Array<TShortViewtypes>>modifiers) && !modifiers.includes(getActiveViewtypeName())) {\n            return;\n        }\n\n        if (widgetInstance && typeof widgetInstance[attrValue] === 'function') {\n            attachEventToWidget(modifiers, widgetInstance, attrName, attrValue, el);\n        } else {\n            log.error(\n                [\n                    `Widget \"${getWidgetName(widgetInstance)}\" don't have method \"${attrValue}\".`,\n                    `Unable to assign event. Additional data: ${getWidgetDataMsg(widgetInstance?.ref('self').get())}`\n                ].join(' '),\n                { el }\n            );\n        }\n    };\n}\n\n/**\n * @description Attach DOM events to widget instance specified in data-event- attributes\n * @param modifiers Event modifiers\n * @param widgetInstance Widget for event assignment\n * @param eventName DOM event\n * @param methodToCall widget method to call\n * @param el Widget self element to store disposables\n */\nfunction attachEventToWidget(\n    modifiers: Array<string>,\n    widgetInstance: Widget,\n    eventName: string,\n    methodToCall: string,\n    el: HTMLElement\n) {\n    let disposableValues = el[WIDGET_DISPOSABLE_VALUES] || [];\n\n    const prevent = modifiers.includes('prevent');\n    const stop = modifiers.includes('stop');\n    const once = modifiers.includes('once');\n    const self = modifiers.includes('self');\n\n    disposableValues = disposableValues.filter((disposable) => {\n        // If such event already exist need to remove it before attaching new event\n        if (disposable.eventName === eventName && disposable.methodToCall === methodToCall && disposable.el === el) {\n            disposable();\n\n            return false;\n        }\n\n        return true;\n    });\n\n    let disposables = <Array<IDisposableFunction>> widgetInstance.ev(eventName, function eventHandler(this: Widget, element, event) {\n        if (prevent) {\n            event.preventDefault();\n        }\n\n        if (stop) {\n            event.stopPropagation();\n        }\n\n        if (once && disposables) {\n            disposables.forEach(disposable => disposable());\n        }\n\n        if (event.currentTarget !== event.target && self) {\n            return;\n        }\n\n        const target = Object.values(widgetInstance.refs || {})\n            .find((refEl) => Boolean(refEl && refEl instanceof RefElement && refEl.get() === element))\n            || new RefElement([element]);\n\n        widgetInstance[methodToCall].call(this, target, event);\n    }, el, modifiers.includes('passive'));\n\n    disposables = disposables.map((disposable) => {\n        disposable.methodToCall = methodToCall;\n        disposable.el = el;\n\n        return disposable;\n    });\n\n    // register events to remove once removed from DOM\n    disposableValues.push(...disposables);\n    el[WIDGET_DISPOSABLE_VALUES] = disposableValues;\n}\n\nconst noop = () => undefined;\nconst getConstructor: Widget['getConstructor'] = (name) => widgetsMgr.get(name);\n\n/**\n * @description Create widget instance, assign it to parent, assign widget events\n * @param domNode element of widget\n * @returns Instance of initialized widget\n */\nfunction initWidget(domNode: HTMLElement): InstanceType<typeof Widget> {\n    let currentWidget: Widget;\n    const registeredWidgets = widgetsMgr.getAll();\n    const instance: Widget | undefined = domNode[WIDGET_PROP_NAME];\n    let widgetName = domNode.getAttribute(DATA_WIDGET) || getViewtypeRelatedWidgetName(domNode);\n\n    if (!widgetName) {\n        if (PRODUCTION) {\n            // eslint-disable-next-line no-console\n            console.error('Empty widget name on node:', domNode);\n        } else {\n            throw Error('Empty widget name');\n        }\n\n        widgetName = 'widget';\n    }\n\n    if (instance && instance.refs && instance.refs.self) {\n        currentWidget = instance;\n    } else {\n        if (!registeredWidgets[widgetName]) {\n            if (PRODUCTION) {\n                // eslint-disable-next-line no-console\n                console.error(`Widget \"${widgetName}\" is not found in registry on dom node: ${getWidgetDataMsg(domNode)}`);\n                // Fallback to basic widget in case we found widget that not exist in registry\n                widgetName = 'widget';\n            } else {\n                throw Error(`Widget \"${widgetName}\" is not found in registry: ${getWidgetDataMsg(domNode)}`);\n            }\n        }\n\n        currentWidget = new (widgetsMgr.get(widgetName))(domNode, getWidgetConfig(domNode));\n    }\n\n    domNode[WIDGET_PROP_NAME] = currentWidget;\n\n    if (!instance) {\n        addRelationships(currentWidget, domNode);\n\n        return currentWidget;\n    }\n\n    return instance;\n}\n\n/**\n * @description Add relationships between current widget and his parents\n * @param currentWidget current widget instance\n * @param domNode element of widget\n */\nfunction addRelationships(currentWidget: Widget, domNode: HTMLElement) {\n    const parentWidget = findParentWidget(domNode);\n\n    if (parentWidget.items) {\n        linkCurrentToParent(parentWidget, currentWidget);\n    }\n\n    if (currentWidget.refs && rootWidget.refs) {\n        currentWidget.refs.html = rootWidget.refs.self;\n    }\n\n    currentWidget.parentHandler = noop;\n    currentWidget.getConstructor = getConstructor;\n    prepareWidgetAttributes(domNode, currentWidget, parentWidget);\n    // currentWidget.parentHandler = parentWidget.eventHandler.bind(parentWidget);\n}\n\n/**\n * @description assign current widget into parent for parent->child structure\n * @param parentWidget parent widget instance\n * @param currentWidget current widget instance\n */\nfunction linkCurrentToParent(parentWidget: Widget, currentWidget: Widget) {\n    if (parentWidget && currentWidget) {\n        if (parentWidget.items) {\n            parentWidget.items.push(currentWidget);\n            currentWidget.onDestroy(() => {\n                if (parentWidget.items) {\n                    const idx = parentWidget.items.indexOf(currentWidget);\n\n                    if (idx > -1) {\n                        parentWidget.items.splice(idx, 1);\n                    }\n                }\n            });\n        }\n    }\n}\n\n/**\n * @description assign widget events to parent handlers\n * @param domNode HTML Element of widget\n * @param currentWidget current widget instance\n * @param  parentWidget parent widget instance\n */\nfunction prepareWidgetAttributes(\n    domNode: HTMLElement,\n    currentWidget: InstanceType<typeof Widget>,\n    parentWidget: InstanceType<typeof Widget>\n) {\n    const forwardToParent = domNode.getAttribute('data-forward-to-parent');\n\n    if (forwardToParent) {\n        forwardToParent.split(':').forEach(pair => {\n            const [methodName, parentWidgetMethodName] = pair.split('-');\n\n            currentWidget[methodName] = (...args: Array<unknown>) => {\n                parentWidget[parentWidgetMethodName || methodName].call(parentWidget, ...args);\n            };\n        });\n    }\n\n    const attrs = domNode.getAttributeNames().filter(name => name.startsWith(WIDGET_EVENT_PREFIX));\n\n    if (!attrs) {\n        return;\n    }\n\n    attrs.forEach(attr => {\n        const [attrName, ...modifiers] = attr.replace(WIDGET_EVENT_PREFIX, '').split('.');\n\n        if (isViewtypeModifiers(<Array<TShortViewtypes>>modifiers) && !modifiers.includes(getActiveViewtypeName())) {\n            return;\n        }\n\n        const attrValue = domNode.getAttribute(attr);\n        const prevHandler = currentWidget.parentHandler;\n\n        if (attrValue && typeof parentWidget[attrValue] === 'function') {\n            currentWidget.parentHandler = (name, ...args) => {\n                prevHandler(name, ...args);\n\n                if (name === attrName && typeof parentWidget[attrValue] === 'function') {\n                    parentWidget[attrValue].call(parentWidget, ...args);\n                }\n            };\n        } else {\n            log.error(`Widget \"${parentWidget.constructor.name}\" don't have method \"${attrValue}\"`);\n        }\n    });\n}\n\n/**\n * @description Recursive widgets creation and events assignment for HTML Element\n * @param element top element as entry point to start recursion\n */\nfunction attachElements(element: HTMLElement) {\n    let widgetInstance: Widget | undefined;\n\n    if (isWidget(element) && !element[WIDGET_PROP_NAME]) {\n        widgetInstance = initWidget(element);\n    }\n\n    const ref = element.getAttribute(DATA_REF);\n    let parentWidget: Widget | null = null;\n\n    if (ref) {\n        parentWidget = element[WIDGET_PROP_NAME] || findParentWidget(element);\n\n        if (parentWidget?.refs) {\n            const refEl = new RefElement([element]);\n\n            parentWidget.refs[ref] = refEl;\n            // here we will listen for the event of removal parent widget\n            disposableForParent(element, parentWidget, refEl, ref);\n        }\n    }\n\n    const attrs = element.getAttributeNames().filter(name => name.startsWith(WIDGET_DOM_EVENT_PREFIX));\n\n    if (attrs.length) {\n        parentWidget = parentWidget || element[WIDGET_PROP_NAME] || findParentWidget(element);\n        attrs.forEach(attachEventToElement(element, parentWidget));\n    }\n\n    if (!element.hasAttribute(DATA_CONTEXT)) {\n        let child = element.firstElementChild;\n\n        while (child) {\n            attachElements(<HTMLElement>child);\n            child = child.nextElementSibling;\n        }\n    }\n\n    if (!widgetInstance) {\n        return;\n    }\n\n    const startTime = Date.now();\n\n    widgetInstance.init();\n    element.setAttribute(DATA_INITIALIZED, '1');\n\n    addWidgetMetricData(element, startTime);\n}\n\n/**\n * @description Add widget metric data for non-production instance\n * @param element Widget element\n * @param startTime Widget initialization start time\n */\nfunction addWidgetMetricData(element: HTMLElement, startTime: number) {\n    if (!PRODUCTION) {\n        const widgetName = element.getAttribute(DATA_WIDGET) || getViewtypeRelatedWidgetName(element);\n\n        if (widgetName) {\n            widgetsInitMetric[widgetName] = (widgetsInitMetric[widgetName] || 0) + (Date.now() - startTime);\n        }\n    }\n}\n\n/**\n * @description Listener for the event of removal parent widget\n * @param element Element to listen\n * @param parentWidget Parent widget\n * @param refEl linked ref element\n * @param ref RefElement id\n */\nfunction disposableForParent(element: HTMLElement, parentWidget: Widget, refEl: RefElement, ref: string) {\n    if (!element[WIDGET_DISPOSABLE_VALUES]) {\n        element[WIDGET_DISPOSABLE_VALUES] = [];\n    }\n\n    const disposableValues = element[WIDGET_DISPOSABLE_VALUES];\n\n    if (disposableValues) {\n        const dispose: IDisposableFunction = () => {\n            // remove reference if element is removed from DOM ref points to the same element\n            if (parentWidget && parentWidget.refs && refEl === parentWidget.refs[ref]) {\n                delete parentWidget.refs[ref];\n            }\n        };\n\n        dispose.attrName = 'ref';\n        disposableValues.push(dispose);\n    }\n}\n\n/**\n * @description find parent widget by HTML Element\n * @param el entry point for searching\n * @returns parent widget\n */\nfunction findParentWidget(el: HTMLElement): Widget {\n    let parent: HTMLElement | null = el.parentElement;\n\n    while (parent) {\n        const widgetName = parent.getAttribute(DATA_WIDGET) || getViewtypeRelatedWidgetName(parent);\n\n        if (widgetName) {\n            break;\n        } else {\n            parent = parent.parentElement;\n        }\n    }\n\n    return (parent && parent[WIDGET_PROP_NAME]) || rootWidget;\n}\n\n/**\n * @description Destroy widgets, run disposables for element and elements inside\n * @param el top element for recursive procession\n */\nfunction detachElement(el: HTMLElement) {\n    const disposableValues = el[WIDGET_DISPOSABLE_VALUES];\n\n    if (disposableValues) {\n        disposableValues.forEach((dispose) => dispose());\n        el[WIDGET_DISPOSABLE_VALUES] = undefined;\n    }\n\n    const currentWidget = el[WIDGET_PROP_NAME];\n\n    if (currentWidget) {\n        currentWidget.destroy();\n        el[WIDGET_PROP_NAME] = undefined;\n\n        if (!PRODUCTION && !initialized) {\n            log.warn('Destroying widget before initialization is complete or right after init complete', el);\n        }\n    }\n\n    let child = el.firstElementChild;\n\n    while (child) {\n        detachElement(<HTMLElement>child);\n        child = child.nextElementSibling;\n    }\n}\n\n/**\n * @description tool for visualization widgets and put widget object into console by click. just call it in your console and look\n */\nwindow.initToolkit = (): Promise<void> => import(/* webpackChunkName: 'toolkit' */ 'widgets/widgetsToolkit')\n    .then(widgetsToolkit => widgetsToolkit.initToolkit(widgetsMgr));\n\nexport default widgetsMgr;\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n  , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n  Events.prototype = Object.create(null);\n\n  //\n  // This hack is needed because the `__proto__` property is still inherited in\n  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n  //\n  if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n  this.fn = fn;\n  this.context = context;\n  this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('The listener must be a function');\n  }\n\n  var listener = new EE(fn, context || emitter, once)\n    , evt = prefix ? prefix + event : event;\n\n  if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n  else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n  else emitter._events[evt] = [emitter._events[evt], listener];\n\n  return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n  if (--emitter._eventsCount === 0) emitter._events = new Events();\n  else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n  this._events = new Events();\n  this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n  var names = []\n    , events\n    , name;\n\n  if (this._eventsCount === 0) return names;\n\n  for (name in (events = this._events)) {\n    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n  }\n\n  if (Object.getOwnPropertySymbols) {\n    return names.concat(Object.getOwnPropertySymbols(events));\n  }\n\n  return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n  var evt = prefix ? prefix + event : event\n    , handlers = this._events[evt];\n\n  if (!handlers) return [];\n  if (handlers.fn) return [handlers.fn];\n\n  for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n    ee[i] = handlers[i].fn;\n  }\n\n  return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n  var evt = prefix ? prefix + event : event\n    , listeners = this._events[evt];\n\n  if (!listeners) return 0;\n  if (listeners.fn) return 1;\n  return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return false;\n\n  var listeners = this._events[evt]\n    , len = arguments.length\n    , args\n    , i;\n\n  if (listeners.fn) {\n    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n    switch (len) {\n      case 1: return listeners.fn.call(listeners.context), true;\n      case 2: return listeners.fn.call(listeners.context, a1), true;\n      case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n    }\n\n    for (i = 1, args = new Array(len -1); i < len; i++) {\n      args[i - 1] = arguments[i];\n    }\n\n    listeners.fn.apply(listeners.context, args);\n  } else {\n    var length = listeners.length\n      , j;\n\n    for (i = 0; i < length; i++) {\n      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n      switch (len) {\n        case 1: listeners[i].fn.call(listeners[i].context); break;\n        case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n        default:\n          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n            args[j - 1] = arguments[j];\n          }\n\n          listeners[i].fn.apply(listeners[i].context, args);\n      }\n    }\n  }\n\n  return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n  return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n  return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return this;\n  if (!fn) {\n    clearEvent(this, evt);\n    return this;\n  }\n\n  var listeners = this._events[evt];\n\n  if (listeners.fn) {\n    if (\n      listeners.fn === fn &&\n      (!once || listeners.once) &&\n      (!context || listeners.context === context)\n    ) {\n      clearEvent(this, evt);\n    }\n  } else {\n    for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n      if (\n        listeners[i].fn !== fn ||\n        (once && !listeners[i].once) ||\n        (context && listeners[i].context !== context)\n      ) {\n        events.push(listeners[i]);\n      }\n    }\n\n    //\n    // Reset the array, or remove it completely if we have no more listeners.\n    //\n    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n    else clearEvent(this, evt);\n  }\n\n  return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n  var evt;\n\n  if (event) {\n    evt = prefix ? prefix + event : event;\n    if (this._events[evt]) clearEvent(this, evt);\n  } else {\n    this._events = new Events();\n    this._eventsCount = 0;\n  }\n\n  return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n  module.exports = EventEmitter;\n}\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](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 = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (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__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".bundle.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\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 = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"sfra-boilerplate:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t\tif (script.src.indexOf(window.location.origin + '/') !== 0) {\n\t\t\tscript.crossOrigin = \"anonymous\";\n\t\t}\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t};\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = (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};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","// 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\t\"app_custom_core\": 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\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((id) => (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\n}\n\nvar chunkLoadingGlobal = globalThis[\"webpackChunksfra_boilerplate\"] = globalThis[\"webpackChunksfra_boilerplate\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","import WidgetsMgr from 'widgets/widgetsMgr';\nimport 'widgets/widgetsList';\n\n/*\nDon't delete next comment, it's a placeholder for additional imports\nSee details in documentation/tools/WebpackConfiguration.md\n */\n\nimport 'core/widgetsList';\n\nWidgetsMgr.run();\n\nif (module.hot) {\n    module.hot.accept(['widgets/widgetsList', 'core/widgetsList'], () => WidgetsMgr.restartWidgets());\n}\n"],"names":["WidgetsMgr","addWidgetsList","md","lg","xl","EXTRA_LARGE","LARGE","MEDIUM","SMALL","stickyHeaderHeightMap","log","RefElement","EventBusWrapper","widgetsMgr","templateProp","noop","saveTemplateForHotReload","renderTo","template","PRODUCTION","tmpEl","get","getFromRoute","nodeOrig","routeOrig","node","route","slice","length","childNodes","c","splice","getDelayedCallback","action","info","removeAttribute","diff","addAttribute","Error","postDiffApplyCallback","el","delayedAttrModification","name","includes","startsWith","HTMLElement","delayedCallback","nodeName","type","checked","filterOuterDiffCallback","t1","attributes","innerDone","preDiffApplyCallback","diffInfo","hasAttribute","Widget","refs","Object","create","parentHandler","items","getConstructor","id","isRefreshingWidget","cachedTemplates","constructor","config","self","ref","attr","shown","hidden","hasAttr","passEvents","warn","split","forEach","pair","methodName","emitEvent","args","data","value","classMethod","call","callIfExists","undefined","emit","eventName","emitWithoutContext","eventBus","_eventBus","onDestroy","prefs","classesLoading","setPref","key","stringValue","JSON","stringify","String","setPrefs","entries","init","removeClass","prefsName","prefsValue","has","cb","destroy","disposables","disposable","item","ev","selector","passive","elements","EventTarget","Array","from","querySelectorAll","map","element","fn","event","apply","addEventListener","dispose","removeEventListener","push","onRefresh","getById","getByIdDeep","returnedValue","eachChild","hide","show","toggle","display","state","isHidden","isShown","getTemplateByRefID","templateRefId","templateElement","textContent","innerHTML","render","strToRender","then","d","default","Mustache","error","Promise","reject","lower","text","toLowerCase","renderedStr","parentNode","newHTMLDocument","document","implementation","createHTMLDocument","diffNode","createElement","applyDiff","resolve","DiffDOM","dd","filterOuterDiff","preDiffApply","postDiffApply","normalize","firstElementChild","Element","prototype","getAttributeNames","result","i","documentElement","style","setTimeout","smoothScroll","polyfill","submitFormJson","errorFallbackMessage","scrollWindowTo","scrollToTop","timeout","AjaxFormClassCreator","BasicForm","AjaxForm","busy","submitButton","unbusy","handleSubmit","isChildrenValid","submitting","errorMessageLabel","getFormUrl","getFormFields","response","onSubmitted","catch","onError","bind","finally","afterSubmission","success","redirectUrl","window","location","assign","fieldErrors","keys","index","errorMessage","input","setError","setFocus","errorCode","eachField","field","clearError","message","errorElement","msg","scrollToError","refElem","setText","getJSONByUrl","BasicFormClassCreator","submitEmpty","emptyFormErrorMsg","SUBMITTING_TIMEOUT","formDefinitionUrl","addAutofillListener","widget","widgetValidation","validationConfig","isArray","compareWith","compareFieldItem","targetWidget","compareOptions","errors","equality","getFields","BasicInput","filter","submit","elem","click","_el","eventOrButton","valid","Event","preventDefault","SubmitEvent","disable","fields","skipSubmission","getName","toString","getValue","setFormFields","formFields","silently","setValue","setFormFieldValue","throwErrorOnMissingField","find","f","validate","fieldsValues","every","isValid","itemComponent","formURL","refID","updateFormData","params","formDefinition","fieldName","fieldValue","formDataUpdated","animationName","handleAutofillStart","handleAutofillEnd","scrollIntoView","BasicInputClassCreator","initValue","disabled","locked","skipValidation","classesErrorState","classesValidState","classesDisabled","classesLocked","classesInteractedState","classesWrapperErrorState","classesWrapperValidState","widgetsToMatch","setInputInteractedState","val","focus","elementToScroll","isScrollableInput","blur","newVal","refField","checkRanges","update","rangesError","getRangesError","HTMLInputElement","setCustomValidity","valueLength","minLength","maxLength","updateCustomValidityState","validity","getValidity","customError","addClass","validationStateMsg","getValidationStateMsg","matchingResult","checkMatching","patternsCheckingResult","checkPatterns","validation","patternMismatch","typeMismatch","parse","security","rangeOverflow","rangeUnderflow","tooLong","tooShort","valueMissing","required","invalidWidget","getInvalidCompareWithWidget","widgetToMatchOpts","patterns","patternNames","patternName","pattern","patternRegExp","RegExp","test","enable","lock","unlock","isDisabled","setMatchCmp","widgetToMatch","options","matchValue","getPlaceholder","toggleInputInteractedState","isActive","toggleClass","filledInput","Boolean","placeholder","tags","types","tagName","clickOutside","KEY_DOWN","KEY_UP","KEY_ESCAPE","KEY_RETURN","KEY_TAB","ACTIVE_DESCENDANT","ComboboxClassCreator","Combobox","lastSearchedTerm","selectedIndex","resultsCount","isListboxOpen","isOverlayVisible","hasHoverWithin","minChars","maxChars","updatingDelay","closeFromOutside","closeOnTab","classesFocusedItem","classesActiveListBox","handleInput","inputLength","prop","updateListbox","clearTimeout","closeListbox","markHover","unMarkHover","handleFocus","handleBlur","handleKeydown","_","preventEventActions","keyCode","setSelectToNextItem","selectItem","getItemByIndex","setSelectToPreviousItem","activateItem","stopPropagation","selectedItem","currentSelected","deselectItem","afterItemSelected","activeItem","inputValue","getSuggestions","query","resultsTotal","afterSuggestionsUpdate","openListbox","listbox","toggleOverlay","bodyClickListener","afterCloseListbox","empty","listItem","FormClassCreator","Form","ariaChecked","InputCheckboxClassCreator","InputCheckbox","check","uncheck","toggleState","updateAriaChecked","handleChange","InputEmailClassCreator","InputText","InputEmail","InputHiddenClassCreator","InputHidden","InputPasswordClassCreator","InputPassword","passwordStrengthScore","upperCaseAmount","lowerCaseAmount","numbersAmount","specialCharsAmount","specialCharsList","maxWeakPasswordScore","maxMediumPasswordScore","maxStrongPasswordScore","classesWeakPassword","classesMediumPassword","classesStrongPassword","passwordStrengthEnabled","passwordConfirmation","zxcvbnPackage","zxcvbn","passwordEstimator","isNumber","isSimpleChar","isStrongPassword","validatePasswordChars","valLetters","replace","valChars","checkLowerCaseAmount","checkUpperCaseAmount","checkNumberAmount","checkSpecialCharsAmount","specialCharsLetters","char","numberLetters","lowerCaseLetters","upperCaseLetters","toUpperCase","showMaskButton","toggleMask","inputType","showButton","showText","hideText","onPasswordInput","entered","showPasswordEstimator","generateIndicatorItems","indicatorClass","indicatorItems","className","score","passwordIndicatorItems","passwordStrengthDescriptions","passwordStrengthDescription","remove","DATA_FIELD","InputRadioClassCreator","InputRadio","reduce","elField","getDataValue","elInner","getAttribute","setAttribute","getDataSet","getChecked","dataset","currentEl","tmpField","InputSelectClassCreator","InputSelect","firstDefault","staticOptionEnabled","staticOptionClass","selectableOptionsClass","getOptions","optionToSelect","onChange","dontPrevent","option","selectedOption","getSelectedOptions","selectedOptions","updateOptions","optionsData","optionData","appendChild","singleOption","getText","selectedNode","values","selected","changeAttribute","stopImmediatePropagation","InputTextClassCreator","onInput","InputTextareaClassCreator","InputTextarea","preventMultiLine","currentInputValue","stripNewLines","updateCounter","Number","charactersLeft","EmailSubscribeClassCreator","EmailSubscribe","signupEmail","formContent","successBlock","successMessage","agreeToPrivacy","accessibilityAnnouncementMsg","onEmailInput","showAgreeToPrivacy","accessibilityAlert","errorMsg","formField","inputEmail","isDOMElementFocusable","AccessibilityFocusMixinClassCreator","AccessibilityFocusMixin","getFocusableElements","refName","join","refElement","htmlEl","getFocusableInputElements","focusFirst","containerRefName","needScrollIntoView","focusableElements","focusFirstInput","focusableInputElements","focusElement","elementRefName","domNode","AccessibilityFocusTrapMixinClassCreator","AccessibilityFocusTrapMixin","refFirstFocusElement","refLastFocusElement","focusLoop","refTrapsContainer","firstTrapRef","lastTrapRef","focusTimeout","handleFocusTrapLast","focusFirstElement","hasLastElement","focusLastElement","handleFocusTrapFirst","refId","focusFirstDescendant","children","child","focusAttempt","focusLastDescendant","HTMLIFrameElement","contentWindow","e","activeElement","addFocusTraps","isForce","trapsContainer","prepend","append","afterShowModal","AccordionClassCreator","ListAccessibility","Accordion","allowToggle","allowMultiple","openFirst","defineItems","isToggleAllowed","isMultipleSections","openFirstItem","reinit","updateAccordionItems","defineAttributes","isPanelOpen","updateState","updateFocusedItem","accordionItem","currentItem","setFocusToNextItem","setFocusToPreviousItem","setFocusToFirstItem","setFocusToLastItem","firstItem","openPanel","closeItems","closePanel","getCurrentOpenItem","freeze","RETURN","SPACE","END","HOME","UP","DOWN","ARIA_EXPANDED","ARIA_HIDDEN","ARIA_DISABLED","AccordionItemClassCreator","AccordionItem","accordionItemBtn","accordionItemPanel","accordionItemPanelInner","expanded","animateToggle","clearAttributes","cleanPanelHeight","isOpen","accordionItemBtnID","accordionItemPanelID","togglePanelHeight","skipEvent","togglePanel","panel","inner","panelElement","innerElement","height","offsetHeight","hideDescription","debounce","isSmallView","BackToTopClassCreator","BackToTop","pageSize","activeClassName","doInit","on","attachScrollListener","scrollDisposable","toggleButtonVisibility","removeScrollListener","scrolled","body","scrollTop","windowHeight","innerHeight","isButtonVisible","ButtonClassCreator","Button","isBusy","classesError","classesActive","preventAction","handleClick","els","err","activate","deactivate","toggleActive","hasClass","select","unselect","press","unpress","setTabIndex","unsetTabIndex","ButtonWithIconClassCreator","ButtonWithIcon","scrollElementTo","getViewType","cssLoadChecker","DEFAULT_DIRECTION","CarouselClassCreator","Carousel","currentPage","scrollingTimeoutValue","grabbingTimeoutValue","delta","roundingDelta","carouselDirection","carouselDimension","initialCoordinate","initialScrollPosition","elemPrevButton","elemNextButton","elemCarouselTrack","classesInited","pageCurrentClass","grabbingClass","mouseMoveNavigationClass","direction","small","medium","large","extraLarge","initCarousel","defineCarouselDirection","handleScrollToFocusedItem","onScroll","updateCarouselState","initPagination","setActivePagination","getCarouselDimension","onCarouselLoaded","updateCarouselMetric","onViewtypeChange","scrollToNextPage","scrollBy","isNavButtonClicked","scrollToPrevPage","scrollToPage","pageIndex","pageStarPoint","Math","round","scrollTo","top","left","isCallInNextFrameRequested","requestAnimationFrame","updateDuringScroll","onScrollEnd","updatedPageIndex","getCurrentPageIndex","isScrollStart","isScrollEnd","pagination","scrollingTimeout","carousel","hasNoScroll","carouselTrackElem","carouselElem","totalScrollWidth","abs","scrollLeft","offsetWidth","scrollWidth","totalScrollHeight","scrollHeight","carouselTrack","clientWidth","clientHeight","getCurrentScrollPosition","onMouseDown","getCurrentCoordinate","classList","add","mouseMoveDisposable","onMouseMove","mouseLeaveDisposable","onMouseUp","grabbingRemoveTimeout","currentCoordinate","MouseEvent","clientX","clientY","TouchEvent","touches","pageX","pageY","paginationRefEl","createPaginationElements","handlePaginationClick","parseInt","onPageClick","numberOfPages","fill","page","currentPageIndex","currentPageNode","currentPosition","pageDimension","markCurrentPage","dataPage","currentElement","contains","offsetLeft","offsetTop","track","activeItemLeft","getBoundingClientRect","activeItemRight","width","trackStart","trackEnd","ConfirmDialogClassCreator","Modal","ConfirmDialog","confirm","closeModal","alternativeConfirm","ConnectionMonitorClassCreator","ConnectionMonitor","connectionTimeoutValue","onOffline","onOnline","showAlert","hideAlert","isContentInserted","insertAlertContent","alertContent","container","innerText","querySelector","setCookie","getCookie","ConsentTrackingClassCreator","ConsentTracking","acceptUrl","rejectUrl","sfccUnCachedData","consentTrackingHint","isVisible","accept","getContentByUrl","ContentLoaderClassCreator","ContentLoader","url","ContextLoaderClassCreator","ContextLoader","loaded","initOnLoad","initOnViewport","context","loadContext","observer","IntersectionObserver","entry","onIntersection","threshold","rootMargin","widgetElement","observe","isIntersecting","disconnect","DisclosureClassCreator","Disclosure","disclosureButton","disclosureContent","showOnInit","showOnRefresh","hideContent","showContent","toggleContent","isContentHidden","focusContent","DismissBlockClassCreator","DismissBlock","classesEnabled","dismissBlockStatus","sessionStorage","getItem","dismiss","setItem","EmitBusEventClassCreator","EmitBusEvent","busEventType","emitBusEvent","FocusHighlighterClassCreator","FocusHighlighter","lastFocusedElementCoords","keyboardModality","isHighlighterVisible","classesHighlighter","classesHurry","DELAY_TIMEOUT","handleResize","MutationObserver","handleMutations","getDocumentWidth","innerWidth","handleKeyup","enableHighlighter","target","isSelect","HTMLSelectElement","isButton","HTMLButtonElement","isCheckBox","isRadioButton","disableHighlighter","lastFocusedElement","moveTo","updateHighlighter","focusedElement","isValidTarget","isTextInput","detectHurryNavigation","recheckTimeout","recheckSecondTimeout","mutations","some","mutation","childList","subtree","focusinHandlers","hideTimeOut","highlighterNode","targetRectangle","targetTop","scrollY","targetLeft","scrollX","targetWidth","targetHeight","borderWidth","outlineWidth","documentWidth","isIntersectsViewport","highlighterStyle","currentTime","Date","now","isHurryNavigation","lastKeyTime","HTMLTextAreaElement","readOnly","GeolocationClassCreator","Geolocation","geolocationDialog","geolocationCookieName","selectedLocale","customerCountry","cancel","PausableTimeout","GlobalAlertsClassCreator","GlobalAlerts","errorClassName","globalAlerts","disposePausableTimeout","showError","pausableTimeout","pauseAlert","pause","resumeAlert","resume","GlobalModalClassCreator","GlobalModal","showModal","templateData","modalData","EmitBusEventClass","modalConfig","onCancelListener","onCancel","onAfterCloseListener","onAfterClose","wrapperClasses","bodyClass","classesGlobalDialog","beforeOpenModal","content","refContainer","showModalPreview","contentType","res","showModalOnResponse","promise","removeWrapperClasses","onAfterCloseModal","HeaderClassCreator","Header","classesMenuBarActive","toggleMenuBarStyle","status","HeroCarouselClassCreator","HeroCarousel","paginationDots","slidesModel","nextSlideTimer","remainingTime","currentSlideIndex","startX","startY","blockedByAnimations","isGrabbing","isSlider","isFocused","isHover","isMoving","autoPlayStopped","autoPlayPaused","autoplayEnabled","autoplayStopped","autoplayDuration","autoplayLabelStart","autoplayLabelStop","slideCurrentClass","slidePreviousClass","slideNextClass","slideGrabbingClass","slidePrefix","carouselInitialized","autoplayAnimated","swipeMinShift","swipeAngle","clickShift","initStructure","goToSlide","initAutoplay","initialContent","slides","slidesTotal","slide","actionType","isAutoPlay","endAutoplay","newSlideIndex","normalizeIndex","getSlidesModel","toggleAnimationMode","waitForTransitionEnd","applySlidesModel","onCarouselClick","startAutoplay","isAnimated","allClasses","n","slideElement","slideClass","model","nextIndex","prevIndex","currentIndex","normalizedIndex","callback","onEnd","propertyName","transitionFallbackTimer","transitionEndDisposable","isFirst","nextSlideIndex","goToNextSlide","goToPrevSlide","goToNextSlideMouseDown","button","goToPrevSlideMouseDown","elemSlide","slideData","addTouchListeners","touchMoveDisposable","touchMove","mouseUpDisposable","touchEnd","touchEndDisposable","touchCancelDisposable","contextMenuDisposable","removeTouchListeners","isSwipe","x","y","diffX","diffY","angleDeg","atan2","PI","touchStart","touch","changedTouches","shiftWidth","originalEvent","cancelable","togglePlayButtonState","addAutoplayListeners","initIntersectionObserver","creationTime","startDotAnimation","pauseAutoplay","pauseDotAnimation","removeDotAnimation","togglePlay","autoplayBtn","animationDuration","animationPlayState","autoPlayFocusIn","autoPlayFocusOut","autoPlayMouseOver","autoPlayMouseLeave","autoPlayVisible","unobserve","LabelClassCreator","Label","listenEvents","trim","updateTemplate","currentText","WIDGET_PROP_NAME","ListAccessibilityClassCreator","focusableItems","itemLink","getSortedItems","lastItem","setFocusToItem","setFocusToCurrentItem","getItemIndex","indexOf","newItem","isItemLink","childItemLink","findSubWidgetItems","sortedItems","currentElementWidget","nextElementSibling","dialogMgr","ESCAPE_CODE","ModalClassCreator","classesWrapper","isDialogOpen","classesShow","classesTopDialog","classesClosed","refDialog","refContent","refTitle","closeOpenedModal","classesExtra","clickOutSide","disableRendering","closeByEscape","accessibilityAlerts","dialog","toggleSpinner","backFocusElement","addGlobalDialogClass","isAsyncModalData","renderedPromise","renderRefElement","templateName","onBeforeShowModal","openDialog","dialogContentLoaded","longWaitingTimeout","open","addListeners","classes","moveBehind","cleanUpListeners","moveToTop","close","html","removeGlobalDialogClass","closeDialog","escHandler","clickOutsideHandler","pop","keyboardEvent","ProcessButtonClassCreator","ProcessButton","processingLabel","processingClass","pid","addToCartUrl","selectedQuantity","startProcess","stopProcess","buttonText","SoftKeyboardToggleMixinClassCreator","SoftKeyboardToggleMixin","hideKeyboardOnOutsideTouch","hideKeyboardReset","hideKeyboard","touchStartDisposables","StickyHeaderClassCreator","StickyHeader","dataTau","stickyHeader","toggleStickyState","intersectionRatio","TabPanelClassCreator","TabPanel","LEFT","RIGHT","TabsClassCreator","Tabs","panelNames","focusedTab","activePanel","activeFirst","autoActivation","useUrlAnchor","fulfillPanelNames","activatePanel","handleUrlChange","panelName","handleTabClick","clickedButton","saveToPushState","previousActivePanelName","currentTabPanel","toggleTabPanel","toggleActiveRefPanel","handleUrlAnchor","toggleButton","eventData","activePanelName","tabPanel","tabName","history","pushState","hashChangedOnly","title","hash","panelToActivate","getLastFocusedTab","setFocusToTab","tab","isTargetTab","setFocusToFirstTab","firstTab","setFocusToLastTab","lastTab","setFocusToPreviousTab","currentFocusedTab","currentFocusedTabIndex","previousTab","setFocusToNextTab","nextTab","AnimationOnScrollClassCreator","AnimationOnScroll","animatedClass","bindObserver","animatedObserver","itemClasses","isAbove","boundingClientRect","rootBounds","CarouselExtClassCreator","CarouselExt","slidesQty","slideStart","setCarouselDimensions","childElementCount","j","behavior","scrollOneForward","scrollOneBack","allSlidesAttr","leftPosition","scrollToNextPageExt","scrollToPrevPageExt","CarouselSimpleClassCreator","CarouselSimple","defaultLeft","getComputedStyle","getPropertyValue","targetPageIndex","productTileName","productName","textBlockValue","scrollToNextPageSimple","scrollToPrevPageSimple","paginationContent","setPageIndex","setHtml","CtaExtClassCreator","CtaExt","transferAttributes","onCtaExtClick","ctaWrapper","closest","appendParamsToUrl","EINSTEIN_VERSION","EinsteinCarouselLoaderClassCreator","EinsteinCarouselLoader","recommender","categoryId","primaryProductId","secondaryProductId","alternativeGroupType","alternativeGroupId","tileParams","loadUrl","loadEinsteinRecommendations","einsteinUtils","getEinsteinUtils","userId","getCQUserId","cookieId","getCQCookieId","emailId","getCQHashedEmail","loginId","getCQHashedLogin","ccver","anchors","createAnchor","getRecs","clientId","recommenders","loadCarousel","widgets","recommenderName","parameters","sku","alt_id","CQuotient","recommendations","recs","pids","rec","DATA_HOTSPOT","DATA_HOTSPOT_BTN","ATTRIBUTE_ARIA_HIDDEN","ESCAPE","HotSpotClassCreator","HotSpot","active","hotSpots","hotSpotButtons","hotSpotButton","toggleButtonTabindex","indexValue","openPopup","closePopup","handleHotspotInteraction","hotSpot","progressBarHeight","DATA_PROGRESS_CONTENT","DATA_PROGRESS_ITEM","ProgressBarClassCreator","ProgressBar","targetElementHeight","spacer","targetElementOffset","activeClass","initialized","textLeft","lastActive","initProgressBar","progressBarContainer","progressBar","progressBarActions","targetElement","progressBarItems","setVars","getHeaderHeight","generateButtons","setProgressWidth","resize","headerHeight","getCorrectedOffsetTop","currentWidth","getProgressWidth","setActive","pageYOffset","getRoundNum","num","getScrollPosition","windowScrollTop","progressRefEl","createProgressBarButtons","progressBarButtons","layoutName","progressBarItem","yOffset","xAxis","xAxisPercentage","extraClass","lastActiveIndex","ceil","parseFloat","onClick","targetIndex","yAxis","ENTER","VideoExtClassCreator","VideoExt","playerType","poster","elemVideo","elemSource","mobileUrl","iframeId","isAutoplay","setVideoSource","hidePoster","loadVideo","load","isMobileUrl","onPlay","videoName","videoUrl","play","AlternativeImageClassCreator","AlternativeImage","imageInserted","getAlternativeImageSrc","altImageUrl","URL","baseImage","HTMLImageElement","baseImageUrl","currentSrc","src","baseImageUrlParsed","disQueryString","search","origin","pathname","getAlternativeImageText","alternativeImageText","insertAlternativeImage","alternativeImageSrc","altImageElement","alt","alternativeImagePicture","handleHover","handleScroll","altImage","markAlternativeImageActive","root","ProductTileClassCreator","ProductTile","gridItem","onProductLinkClick","link","onModalShow","gtmInfo","showQuickView","ariaLabel","SearchBoxClassCreator","SearchBox","goingByLink","showSpinnerDelay","outlineSpace","classesClearEnabled","classesLoadingSuggestions","classesLoadingSuggestionsLong","showInDefaultState","setInputFocus","focusInput","getRealItemsCount","q","processResponse","handleError","suggestions","total","renderResult","inputValueRaw","toggleClearButton","longLoadingTimer","searchInput","inputVal","clearInput","isInputHasValue","listboxInner","closeSearch","openSearch","refEl","toggleSearch","EventBus","widgetInstance","addListener","removeListener","once","onceFn","start","time","done","durationTimeout","remaining","clearTimeoutRef","getTime","isInputLike","getData","REFELEMENT_ERROR","toSnakeCase","s","exists","attrName","attrValue","validationMessage","tempEl","scripts","script","removeChild","appendToIndex","nodeIndex","insertBefore","tempScript","reverse","attributeName","idx","getHtml","toggleAvailability","initialState","classNames","offset","ret","docElem","elemBox","clientTop","pageXOffset","clientLeft","showErrorLayout","token","SAME_ORIGIN","APPLICATION_JSON","TEXT_HTML","NO_REFERRER","CONTENT_TYPE","FAILED_FETCH","getFetch","dependencies","fetch","AbortController","all","handleUrlOrFormData","method","skipToken","formData","valuedUrl","tokenObj","dataToSend","encodeURIComponent","ajax","handleResponse500","textResponse","errorObj","csrfError","cause","code","div","handleOkResponse","prepareRequestData","mode","cache","redirect","prepareHeaders","locale","siteId","siteid","cleanupServerResponse","acc","handleResponse","headers","ok","json","TypeError","reload","errorJson","handleRequestError","credentials","Accept","referrer","postJsonData","handleControlledRequestError","submitFormJsonWithAbort","abortController","signal","cookieName","cookieValue","expireInDays","isSecure","setTime","expires","toUTCString","cookie","ca","charAt","substring","CSS_SELECTOR","getLoadedState","css","module","hot","media","cssRules","sheet","callbackFunction","delay","invokeLeading","invokeTrailing","executeTrailing","debounceInner","throttle","func","wait","leading","trailing","previous","later","arguments","DialogMgr","dialogsStack","topDialog","previousDialog","unwrap","wrapper","outerHTML","unwrapElementsByClasses","stringDOM","DOM","DOMParser","parseFromString","HTMLOptionElement","EventEmitter","block","inline","isCountHeaderHeight","isCentered","DEBOUNCE_INTERVAL","scrollHandlers","scrollingElement","lastScrollPosition","debounceScroll","handler","tokenName","tokenValue","csrfToken","console","table","format","param","reg","timer","sleep","interval","intervalID","setInterval","clearInterval","appendParamToURL","initialUrl","searchParams","removeParamFromURL","delete","accumulator","getUrlParams","queryString","obj","queryParams","URLSearchParams","errorLayout","stack","unshift","isEventTriggeredOutsideElement","currElement","parentElement","makeExposableListener","listener","domEl","expose","objectEquals","Function","valueOf","p","range","stop","step","max","newRange","regexpBrace","isNaN","memoize","hasher","memoizeInner","address","loadScriptHandler","source","prior","getElementsByTagName","async","integrity","scriptAttributes","attributeValue","onload","globalScriptName","onabort","onerror","loadScript","path","defaults","parts","part","shift","tabIndex","href","rel","viewTypeConfig","breakpoints","smallID","mediumID","largeID","extraLargeID","breakMd","breakLg","breakXl","smallView","mediumView","largeView","exLargeView","queriesMap","currentWindowWidth","currentWindowHeight","getCurrentViewType","matchQuery","matchMedia","matches","setScreenSizeToCookie","onWindowChange","currentViewType","isTouchDevice","DocumentTouch","isViewTypeMatch","isMediumView","isMediumViewAndUp","isMediumViewAndDown","isExtraLargeView","isLargeView","isLargeViewAndUp","isLargeViewAndDown","isDesktopView","modifiersMapping","sm","ALL_VIEW_TYPES","getActiveViewtypeName","m","matchViewport","newDevice","previousDevice","useWindowListeners","currentConfig","windowResize","applyCurrentDeviceType","__webpack_public_path__","assetsStaticURL","initViewType","WIDGET_DISPOSABLE_VALUES","WIDGET_DOM_EVENT_PREFIX","DATA_ATTR_PREFIX","DATA_WIDGET","DATA_WIDGET_VIEWTYPE_RELATED","WIDGET_EVENT_PREFIX","DATA_INITIALIZED","DATA_REF","DATA_CONTEXT","isViewtypeModifiers","modifiers","isWidget","getViewtypeRelatedWidgetName","activeViewtypeName","viewtypeWidgetConfigs","isViewtypeRelatedWidget","RootWidget","head","getWidgetConfig","activeViewtype","camelCaseKey","camelCase","isActiveViewtypeModifier","isViewtypeModifier","isConfigNotExist","jsonConfig","parsedConfig","reinitElementByWidgetsNamesList","widgetsListNames","widgetName","detachElement","attachElements","attrs","reloadEvents","mod","parentWidget","findParentWidget","disposableValues","attachEventToElement","rootWidget","widgetsInitMetric","WidgetMgr","widgetsLists","widgetsListsNameSpaceOrder","widgetsClassCache","asyncLists","hashRegistry","hasDomLoadedFirst","onInitialized","timeOfEvaluate","timeOfRun","timeOfInit","contextId","contexts","run","asyncListPromises","list","getLoadingFlag","listId","widgetsDefinition","asyncList","registerWidgetsList","readyState","getAll","cachedClass","widgetsConfig","getWidgetClass","baseWidget","widgetClass","set","nameSpace","groupCollapsed","register","groupEnd","setHash","currentHash","getHash","currentWidget","widgetConstructor","widgetConfig","superWidgetConstructor","superBaseWidget","base","getChangedWidgets","emptyArray","newRegistry","ns","prev","nsList","newHash","baseName","changedWidgets","updateMutableComponents","widgetsNames","w","restartWidgets","oldValue","methodToCall","handleWidgetPropertyChange","newValue","disposableForParent","characterData","headInitTime","timeInitWidgets","timeToRegisterWidgets","loadAndScriptingTime","waitToDomLoaded","domReadyTime","headToDomReady","ms","percentage","registerWidgetsTime","initWidgetsTime","a","b","addedNodes","removedNodes","removedNode","nodeType","ELEMENT_NODE","addedNode","rmsPrefix","rdashAlpha","string","_all","letter","getWidgetName","widgetNode","getWidgetDataMsg","widgetData","attachEventToWidget","prevent","eventHandler","currentTarget","initWidget","registeredWidgets","instance","addRelationships","linkCurrentToParent","prepareWidgetAttributes","forwardToParent","parentWidgetMethodName","prevHandler","startTime","addWidgetMetricData","parent","initToolkit","widgetsToolkit"],"sourceRoot":""}