{"version":3,"file":"store.js","mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,YAAY;AACZ;AACA;AACA;AACA,+CAA+C,oBAAoB,IAAI,sBAAsB,IAAI,aAAa,GAAG,cAAc;AAC/H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,YAAY;AAClD,uCAAuC,MAAM;AAC7C;AACA,wCAAwC,mBAAmB;AAC3D;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,IAAI,KAAK,IAAI;AACjC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA,+CAAe,QAAQ,EAAC;;;AC3HxB;AACA;AACA;AACO;AACP;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,UAAU,GAAG,YAAY;AAChD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE,WAAW;AACX;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,UAAU;AACV;AACA;AACA;AACA,wEAAwE,gBAAgB;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE,WAAW;AACX;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,2FAA2F,gBAAgB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,+CAAe,QAAQ,EAAC;;;AChOU;AACoC;AACpC;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,EAAE;AAC/B;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa;AACb,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN,4CAA4C,QAAQ;AACpD;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,OAAO;AACP,MAAM;AACN;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uBAAuB;AAC5C;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sCAAsC,QAAQ;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,eAAe;AACf,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,eAAe;AACf,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,eAAe;AACf,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW;AACX;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW;AACX;AACA,KAAK;AACL,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,QAAQ;AACR;AACA;AACA,KAAK;AACL;AACA;;AAEA;;AAEA,+BAA+B,cAAc;;AAE7C;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,eAAe;AACf,aAAa;AACb,mCAAmC;;AAEnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,WAAW;AACX;AACA,QAAQ;AACR;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,WAAW;AACX;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,QAAQ;AACR;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX,SAAS;AACT,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,OAAO;AACP,kCAAkC,mDAAmD;AACrF;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,eAAe;AACf,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,WAAW;AACX,SAAS;AACT,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;;AAEP;AACA;;AAEA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT,OAAO;;AAEP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;;AAEP,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;;;AAGP;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX,UAAU;AACV;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX,SAAS;AACT,OAAO;;AAEP;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mCAAmC;AACnC,mCAAmC;AACnC,iCAAiC;AACjC,4BAA4B;AAC5B,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,QAAQ;AACd;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,OAAO;;;AAGP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,kBAAkB;AACxE;AACA;AACA,uBAAuB,kBAAkB;AACzC,SAAS;;AAET;AACA;AACA,sDAAsD,kBAAkB;AACxE;AACA;AACA,uBAAuB,kBAAkB;AACzC,SAAS;;AAET;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA,SAAS;AACT,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,qCAAqC,+BAA+B,sBAAsB,GAAG;AAC7F,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI,SAAS;AACb,IAAI,cAAc;;AAElB;AACA,IAAI,QAAQ;;AAEZ;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;;AAEA;AACA,KAAK;;AAEL,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,mBAAmB,iBAAiB,oCAAoC,kBAAkB;AAC1F","sources":["webpack://build/../laviesports/assets/javascripts/shipping.js","webpack://build/../laviesports/assets/javascripts/vndaComponents.js","webpack://build/../laviesports/assets/javascripts/webforms.js","webpack://build/../laviesports/assets/javascripts/store.js"],"sourcesContent":["\r\n\r\nconst Shipping = {\r\n handleShipping: async function (form) {\r\n const sku = document.querySelector('[data-product-box] [name=\"sku\"]').value;\r\n const quantity = document.querySelector(\r\n '[data-product-box] [name=\"quantity\"]'\r\n ).value;\r\n const zip = form.querySelector('.input').value.replace('-', '');\r\n const buttonSubmit = form.querySelector('.action');\r\n\r\n if (zip.length != 8) {\r\n form.classList.add('error');\r\n form.querySelector('.msg-error').classList.add('-visible');\r\n form.querySelector('.msg-error').innerHTML = 'Formato de CEP inválido';\r\n } else {\r\n const formData = new FormData();\r\n\r\n formData.set('sku', sku);\r\n formData.set('quantity', quantity);\r\n formData.set('zip', zip);\r\n\r\n if (!form.classList.contains('-sending')) {\r\n form.classList.remove('-error');\r\n form.classList.add('-sending');\r\n buttonSubmit.classList.add('-sending');\r\n\r\n try {\r\n const response = await fetch('/frete_produto', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded',\r\n },\r\n body: window.store.urlencodeFormData(formData),\r\n });\r\n\r\n const data = await response.json();\r\n\r\n if (data.error) {\r\n console.error('Ocorreu um erro ao consultar o frete');\r\n console.error(data.error);\r\n\r\n form.classList.add('error');\r\n form.querySelector('.msg-error').classList.add('-visible');\r\n\r\n if (formData.sku != \"\") {\r\n form.querySelector('.msg-error').innerHTML =\r\n 'Selecione um tamanho';\r\n } else {\r\n form.querySelector('.msg-error').innerHTML =\r\n 'Ocorreu um erro ao calcular o frete, favor verifique seu cep.';\r\n }\r\n\r\n setTimeout(function () {\r\n form.classList.remove('-error');\r\n form.querySelector('.msg-error').classList.remove('-visible');\r\n buttonSubmit.classList.remove('-sending');\r\n }, 3500);\r\n } else {\r\n const methods = JSON.parse(data.methods);\r\n const address = data.address_details;\r\n\r\n let result = `

${address.street_name}, ${address.neighborhood} - ${address.city}/${address.state}

`;\r\n\r\n result += '';\r\n\r\n document.querySelector('[data-list-shipping]').innerHTML = result;\r\n }\r\n } catch (error) {\r\n console.error('Erro ao enviar dados para consulta de frete');\r\n console.error(error);\r\n form.classList.add('error');\r\n form.querySelector('.msg-error').classList.add('-visible');\r\n form.querySelector('.msg-error').innerHTML =\r\n 'Ocorreu um erro ao calcular o frete, favor verifique seu cep.';\r\n buttonSubmit.classList.remove('-sending');\r\n }\r\n\r\n form.classList.remove('-sending');\r\n buttonSubmit.classList.remove('-sending');\r\n }\r\n }\r\n },\r\n\r\n init: function () {\r\n const _this = this;\r\n\r\n const form = document.querySelector('[data-form-shipping]');\r\n const inputValue = form.querySelector('.input');\r\n const button = document.querySelector('[data-button-shipping]');\r\n\r\n inputValue.addEventListener('input', (event) => {\r\n const x = event.target.value\r\n .replace(/\\D/g, '')\r\n .match(/(\\d{0,5})(\\d{0,3})/);\r\n event.target.value = !x[2] ? x[1] : x[1] + '-' + x[2];\r\n });\r\n\r\n button.addEventListener('click', (event) => {\r\n event.preventDefault();\r\n\r\n _this.handleShipping(form);\r\n });\r\n },\r\n};\r\n\r\nexport default Shipping;\r\n","// ===============================================================\n// Zendesk\n// ===============================================================\nexport function Zendesk() {\n const setZendesk = () => {\n window.removeEventListener('mousemove', setZendesk);\n window.removeEventListener('scroll', setZendesk);\n\n console.log('Zendesk Widget detected!');\n\n // Adiciona script do componente\n let newScript = document.createElement('script');\n newScript.setAttribute('src', 'https://static.zdassets.com/ekr/snippet.js?key=018344dd-c5b7-489e-b161-c69cb4c07cdd');\n newScript.setAttribute('id', 'ze-snippet');\n document.body.appendChild(newScript);\n }\n window.addEventListener('mousemove', setZendesk);\n window.addEventListener('scroll', setZendesk);\n};\n\n// ===============================================================\n// RDSTATION\n// ===============================================================\nexport function RDStation() {\n const setRDStation = () => {\n window.removeEventListener('mousemove', setRDStation);\n window.removeEventListener('scroll', setRDStation);\n\n console.log('setRDStation detected!');\n\n // Adiciona script do componente\n let newScript = document.createElement('script');\n newScript.setAttribute('src', 'https://d335luupugsy2.cloudfront.net/js/loader-scripts/3f0dfdfb-dacf-4041-a011-59920f23b0a0-loader.js');\n document.body.appendChild(newScript);\n }\n window.addEventListener('mousemove', setRDStation);\n window.addEventListener('scroll', setRDStation);\n};\n\n// ===============================================================\n// RDSTATION\n// ===============================================================\nexport function widgetWhatsapp() {\n const setWidgetWhatsapp = () => {\n window.removeEventListener('mousemove', setWidgetWhatsapp);\n window.removeEventListener('scroll', setWidgetWhatsapp);\n\n console.log('setWidgetWhatsapp detected!');\n\n // Adiciona script do componente\n let newIframe = document.createElement('iframe');\n newIframe.setAttribute('class', 'widget-whatsapp');\n newIframe.setAttribute('src', 'https://cdn.smooch.io/message-us/index.html?channel=whatsapp&color=teal&size=standard&radius=20px&label=&number=5521972556468');\n newIframe.setAttribute('width', '90');\n newIframe.setAttribute('height', '50');\n document.body.appendChild(newIframe);\n }\n window.addEventListener('mousemove', setWidgetWhatsapp);\n window.addEventListener('scroll', setWidgetWhatsapp);\n};\n\n","const Webforms = {\r\n serializeArray: function (form) {\r\n const formData = new FormData(form);\r\n const data = {};\r\n\r\n for (const [name, value] of formData) {\r\n data[name] = value\r\n }\r\n\r\n let formBody = [];\r\n\r\n for (const key in data) {\r\n const encodeKey = encodeURIComponent(key)\r\n const encodeValue = encodeURIComponent(data[key])\r\n formBody.push(`${encodeKey}=${encodeValue}`)\r\n }\r\n\r\n return formBody = formBody.join('&')\r\n },\r\n submitWebForm: async function (form, email) {\r\n const formData = this.serializeArray(form);\r\n const textBtnDefault = form.querySelector('.action').innerHTML;\r\n\r\n if (typeof email == 'undefined' || email == '') {\r\n email = form.querySelector('[name=\"email\"]').value;\r\n }\r\n\r\n form.querySelector('[name=\"reply_to\"]').value = email;\r\n\r\n if (!form.classList.contains('sending')) {\r\n\r\n form.classList.add('sending');\r\n form.classList.remove('error');\r\n form.querySelector('.action').innerHTML = 'Enviando';\r\n\r\n try {\r\n const response = await fetch('/webform', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',\r\n },\r\n body: formData\r\n })\r\n\r\n if (response.ok) {\r\n console.info('Formulário enviado com sucesso');\r\n form.classList.add('sent');\r\n form.querySelector('.msg-success').classList.add('-visible');\r\n form.querySelector('.action').innerHTML = 'Enviado';\r\n form.reset();\r\n\r\n setTimeout(function () {\r\n form.classList.remove('sent');\r\n form.querySelector('.msg-success').classList.remove('-visible');\r\n form.querySelector('.action').innerHTML = textBtnDefault;\r\n }, 3500);\r\n } else {\r\n\r\n const text = await response.text();\r\n\r\n console.error(`Ocorreu um erro no envio do formulário. Erro ${response.status}`);\r\n console.error(text);\r\n\r\n form.classList.add('error');\r\n form.querySelector('.msg-error').classList.add('-visible');\r\n form.querySelector('.action').innerHTML = 'Falha ao enviar';\r\n\r\n setTimeout(function () {\r\n form.classList.remove('error');\r\n form.querySelector('.msg-error').classList.remove('-visible');\r\n form.querySelector('.action').innerHTML = textBtnDefault;\r\n }, 3500);\r\n\r\n }\r\n\r\n } catch (error) {\r\n console.error('Erro ao enviar o webform');\r\n console.error(error);\r\n\r\n form.classList.add('error');\r\n form.querySelector('.msg-error').classList.add('-visible');\r\n form.querySelector('.action').innerHTML = 'Falha ao enviar';\r\n\r\n setTimeout(function () {\r\n form.classList.remove('error');\r\n form.querySelector('.msg-error').classList.remove('-visible');\r\n form.querySelector('.action').innerHTML = textBtnDefault;\r\n }, 3500);\r\n }\r\n\r\n form.classList.remove('sending');\r\n }\r\n },\r\n submitNotify: async function (form) {\r\n const formData = this.serializeArray(form);\r\n const btnTextDefault = form.querySelector('.action').innerHTML;\r\n\r\n if (!form.classList.contains('sending')) {\r\n\r\n form.classList.remove('error');\r\n form.classList.add('sending');\r\n form.querySelector('.action').innerHTML = 'Enviando';\r\n\r\n try {\r\n\r\n const response = await fetch('/lista_de_espera', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',\r\n },\r\n body: formData\r\n })\r\n\r\n if (response.ok) {\r\n form.classList.remove('sending');\r\n\r\n // Envia um webform de aviso de cadastro\r\n console.log('Lista de espera enviada com sucesso');\r\n Webforms.submitWebForm(form);\r\n\r\n } else {\r\n const text = await response.text();\r\n console.error(`Ocorreu um erro ao enviar o formulário de Lista de Espera. Erro ${response.status}`)\r\n console.error(text);\r\n\r\n form.classList.add('error');\r\n form.querySelector('.msg-error').classList.add('-visible');\r\n form.querySelector('.action').innerHTML = 'Falha ao enviar';\r\n\r\n setTimeout(() => {\r\n form.classList.remove('error');\r\n form.querySelector('.msg-error').classList.remove('-visible');\r\n form.querySelector('.action').innerHTML = btnTextDefault;\r\n }, 3500);\r\n }\r\n\r\n } catch (error) {\r\n console.error('Falha ao enviar lista de espera. Verificar integração.');\r\n console.error(error);\r\n\r\n form.classList.add('error');\r\n form.querySelector('.msg-error').classList.add('-visible');\r\n form.querySelector('.action').innerHTML = 'Falha ao enviar';\r\n\r\n setTimeout(() => {\r\n form.classList.remove('error');\r\n form.querySelector('.msg-error').classList.remove('-visible');\r\n form.querySelector('.action').innerHTML = btnTextDefault;\r\n }, 3500);\r\n }\r\n\r\n form.classList.remove('sending');\r\n }\r\n },\r\n showMessage: function (input, form) {\r\n const alertMessage = form.querySelector('[data-msg]');\r\n\r\n alertMessage.classList.add('-visible');\r\n alertMessage.innerText = 'Preencha os campos obrigatórios';\r\n\r\n input.classList.add('-emphasis')\r\n\r\n setTimeout(() => {\r\n\r\n alertMessage.classList.remove('-visible');\r\n alertMessage.innerText = '';\r\n\r\n input.classList.remove('-emphasis')\r\n\r\n }, 2000)\r\n\r\n },\r\n validateForm: function (vndaInput, form) {\r\n let submitAllowed = true;\r\n\r\n // Permite o envio se o input vnda estiver vazio\r\n if (vndaInput.value == '') {\r\n vndaInput.setAttribute('required', false);\r\n\r\n // Valida se os campos obrigatórios estão preenchidos\r\n const requiredFields = form.querySelectorAll('[required]:not([required=false])');\r\n requiredFields.forEach(input => {\r\n\r\n if (input.value == '') {\r\n submitAllowed = false;\r\n Webforms.showMessage(input, form);\r\n }\r\n\r\n if (input.type == 'checkbox' && input.checked == false) {\r\n submitAllowed = false;\r\n Webforms.showMessage(input, form);\r\n }\r\n\r\n })\r\n\r\n if (submitAllowed) form.id == 'form-notify' ? Webforms.submitNotify(form) : Webforms.submitWebForm(form)\r\n }\r\n },\r\n setWebForms: function () {\r\n const webForms = document.querySelectorAll('[data-webform]');\r\n\r\n webForms.length > 0 && webForms.forEach(form => {\r\n\r\n const button = form.querySelector('button');\r\n const fieldset = form.querySelector('fieldset');\r\n\r\n // Desabilita os campos do formulário, através do fieldset, quando o input vnda recebe algum valor \r\n let vndaInput = form.querySelector('input[name=\"vnda\"]');\r\n vndaInput.addEventListener('input', () => fieldset.setAttribute('disabled', true))\r\n\r\n // Realiza o envio através do clique e da tecla enter sobre o botão do formulário\r\n button && button.addEventListener('click', () => Webforms.validateForm(vndaInput, form));\r\n button && button.addEventListener('keypress', (e) => {\r\n if (e.key === 'Enter') Webforms.validateForm(vndaInput, form);\r\n })\r\n\r\n })\r\n },\r\n init: function () {\r\n const _this = this;\r\n _this.setWebForms();\r\n },\r\n};\r\n\r\nexport default Webforms;\r\n","import Shipping from \"./shipping\";\nimport { RDStation, Zendesk, widgetWhatsapp } from \"./vndaComponents\";\nimport Webforms from \"./webforms\";\n\nwindow.$window = $(window);\nwindow.$body = $(\"body\");\nwindow.page = $body.data(\"page\");\nwindow.$header = $(\"#header\");\nwindow.$wrapper = $(\"#wrapper\");\nwindow.spaceToHeaderFixed;\nwindow.language = $(\"html\").attr(\"lang\");\nwindow.timeTransitionDefault = 350;\nwindow.texts = [];\n\ntexts[\"pt-BR\"] = {\n quantity: \"quantidade\",\n price: \"preço\",\n cart_empty: \"O seu carrinho está vazio\",\n go_product: \"Ir para a página do produto\",\n btn_edit_cart: \"Editar pedido\",\n btn_checkout: \"Finalizar pedido\",\n btn_success: \"Adicionado!\",\n errorsTxt: {\n withoutSku: \"Selecione um atributo para o produto\",\n },\n};\n\nfunction getText(key, subKey) {\n if (typeof subKey == \"undefined\") {\n return texts[language][key];\n } else {\n return texts[language][key][subKey];\n }\n}\n\nwindow.store = {\n config: {\n // Seletor do botão de comprar\n selectorBtnBuy: '[data-action=\"add-cart\"]',\n selectorBtnBuyAssinatura: '[data-action=\"add-cart-assinatura\"]',\n // Seletor do elemento que engloba um produto\n selectorWrapperProduct: \"[data-box-produto]\",\n selectorWrapperProductAssinatura: \"[data-box-produto-assinatura]\",\n selectorFormProduct: \"[data-form-product]\",\n selectorFormProductAssinatura: \"[data-form-product-assinatura]\",\n // Se a store tem versão internacional ou não\n hasInternacionalVersion: false,\n errorsTxt: {\n withoutSku: getText(\"errorsTxt\", \"withoutSku\"),\n },\n // configuração de comportamento ao add um produto\n addToCartOpenCartpopup: true,\n addToCartOpenCartpopupMobile: true,\n cartCount: {\n selector: \"[data-cart-count]\",\n attr: \"[data-cart-count-attr]\",\n text: \"[data-cart-item-text]\",\n },\n },\n formatMoney: function (value) {\n // FORMATA UM VALOR\n return (\n \"R$ \" +\n value\n .toFixed(2)\n .replace(\".\", \",\")\n .replace(/(\\d)(?=(\\d{3})+\\,)/g, \"$1.\")\n );\n },\n urlencodeFormData: function (formData) {\n let string = '';\n\n function encode(s) {\n return encodeURIComponent(s).replace(/%20/g, '+');\n }\n\n for (const pair of formData.entries()) {\n if (typeof pair[1] == 'string') {\n string += (string ? '&' : '') + encode(pair[0]) + '=' + encode(pair[1]);\n }\n }\n return string;\n },\n validateQuantity: function (_val) {\n // VALIDA SE A QUANTIDADE INFORMADA É UM NÚMERO\n if (!isNaN(_val)) {\n if (parseInt(_val) > 0) {\n return true;\n }\n }\n\n return false;\n },\n getClearNumber: function (_val) {\n // RETORNA UM NÚMERO LIMPO COMO INT\n if (!isNaN(_val)) {\n clearNumber = parseInt(_val);\n\n return clearNumber;\n }\n\n return false;\n },\n findVariant: function (properties, variant_list) {\n return variant_list.filter(function (variant) {\n var match = true\n for (var property_key in properties) {\n var property1 = variant.properties['property1']\n var property2 = variant.properties['property2']\n var property3 = variant.properties['property3']\n\n if (property1 && property_key === property1.name) {\n var desired_property = property1.value\n } else if (property2 && property_key === property2.name) {\n var desired_property = property2.value\n } else if (property3 && property_key === property3.name) {\n var desired_property = property3.value\n }\n\n if (desired_property !== properties[property_key]) {\n match = false\n }\n }\n return match\n })\n },\n validateFormProduct: function (_$form) {\n // VALIDA O FORM DE PRODUTO PARA VER SE O PRODUTO PODE SER ADICIONADO\n var $parent = _$form.closest(\"[data-box-produto]\");\n var $btnComprar = _$form.find('[data-action=\"add-cart\"]');\n var validated = true;\n var errorsTxt = [];\n\n if ($btnComprar.data(\"available\") == \"false\") {\n validated = false;\n errorsTxt.push(\"\");\n } else {\n // verifica se o sku foi selecionado\n if (_$form.find('[name=\"sku\"]').val() == \"\") {\n validated = false;\n errorsTxt.push(\"Selecione um atributo para o produto\");\n }\n\n // verifica se a quantidade é válida\n //console.log(_$form.find('input[name=\"quantity\"]').val());\n if (_$form.find('input[name=\"quantity\"]').val() <= 0) {\n //console.log(\"qtd invalida\");\n validated = false;\n errorsTxt.push(\"Quantidade indisponível\");\n }\n }\n\n return { validated: validated, errors: errorsTxt };\n },\n setRespValidateProduct: function (_resp, _$form, _$boxResponse) {\n // var $boxResult = _$form.find('.resp-validate');\n var $boxResult = _$boxResponse;\n var htmlErrors = \"\";\n\n if (_resp.validated) {\n $boxResult.empty();\n } else {\n for (var i = _resp.errors.length - 1; i >= 0; i--) {\n htmlErrors += '' + _resp.errors[i] + \"\";\n }\n\n $boxResult.html(htmlErrors);\n }\n },\n addItemResultDefault: function (_$form, _typeResult, _result, _$boxResponse) {\n console.log(\"addItemResultDefault\")\n var _this = this;\n if (_typeResult == \"produto-adicionado\") {\n var $btnComprar = _$form.find(_this.config.selectorBtnBuy);\n\n $btnComprar.addClass(\"success\").html(\"Produto adicionado!\");\n\n setTimeout(function () {\n // _$form.find('.msg-response').slideUp(350);\n $btnComprar\n .removeClass(\"success\")\n .html($btnComprar.data(\"text-available\"));\n }, 3500);\n\n setTimeout(function () {\n window.location.href = urlCart;\n }, 150);\n } else if (_typeResult == \"erro-adicionar\") {\n var errorText = JSON.parse(_result.responseText);\n\n if (typeof _$boxResponse != \"undefined\" && _$boxResponse.length > 0) {\n //console.info(errorText);\n\n _$boxResponse.addClass(\"error\");\n _$boxResponse.removeClass(\"success\");\n\n _$boxResponse.find(\"span\").html(errorText.error);\n _$boxResponse.slideDown(350);\n\n setTimeout(function () {\n _$boxResponse.slideUp(350);\n }, 3500);\n }\n }\n },\n addItemResultDefaultAssinatura: function (\n _$form,\n _typeResult,\n _result,\n _$boxResponse\n ) {\n var _this = this;\n if (_typeResult == \"produto-adicionado\") {\n var $btnComprar = _$form.find(_this.config.selectorBtnBuyAssinatura);\n\n $btnComprar.addClass(\"success\").html(\"Adicionado!\");\n\n setTimeout(function () {\n // _$form.find('.msg-response').slideUp(350);\n $btnComprar\n .removeClass(\"success\")\n .html($btnComprar.data(\"text-available\"));\n }, 3500);\n\n setTimeout(function () {\n window.location.href = urlAssinaturaCart;\n }, 150);\n } else if (_typeResult == \"erro-adicionar\") {\n if (typeof _result == \"object\") {\n var errorText = _result;\n } else {\n var errorText = JSON.parse(_result);\n }\n\n if (typeof _$boxResponse != \"undefined\" && _$boxResponse.length > 0) {\n //console.info(errorText);\n\n _$boxResponse.addClass(\"error\");\n _$boxResponse.removeClass(\"success\");\n\n _$boxResponse.find(\"span\").html(errorText.error);\n _$boxResponse.slideDown(350);\n }\n }\n },\n addItem: function (_$form, _$parent, addItemResult) {\n var _this = this;\n var $btnComprar = _$parent.find('[data-action=\"add-cart\"]');\n var urlAdd = \"/carrinho/adicionar\";\n var urlUpdate = \"/carrinho\";\n var url = urlAdd;\n var form = _$form.serialize();\n var $boxResponse = _$parent.find(\n \"[data-form-product] .msg-response:not(.resp-validate)\"\n );\n\n console.info('addItem');\n console.info('addItem', _$form.serializeArray());\n\n if (!$btnComprar.hasClass(\"adding\")) {\n $.ajax({\n url: url,\n type: \"POST\",\n dataType: \"json\",\n data: form,\n beforeSend: function () {\n $btnComprar.addClass(\"adding\");\n },\n })\n .done(function (resp) {\n console.log(\"success\");\n console.info(resp);\n\n if (typeof template_store.addItemResult == \"function\") {\n template_store.addItemResult(\n _$form,\n \"produto-adicionado\",\n resp,\n $boxResponse\n );\n } else {\n template_store.addItemResultDefault(\n _$form,\n \"produto-adicionado\",\n resp,\n $boxResponse\n );\n }\n })\n .fail(function (resp) {\n //console.log(\"error\");\n //console.error(resp);\n //console.error(resp.responseText);\n //console.error(resp.responseText.error);\n\n if (typeof template_store.addItemResult == \"function\") {\n template_store.addItemResult(\n _$form,\n \"erro-adicionar\",\n resp,\n $boxResponse\n );\n } else {\n template_store.addItemResultDefault(\n _$form,\n \"erro-adicionar\",\n resp,\n $boxResponse\n );\n }\n })\n .always(function () {\n //console.log(\"complete\");\n $btnComprar.removeClass(\"adding\");\n });\n }\n },\n addItemAssinatura: function (_$form, _$parent, addItemResult) {\n var _this = this;\n var $btnComprar = _$parent.find(store.config.selectorBtnBuyAssinatura);\n var url = urlAssinaturaCartAdd;\n var form = _$form.serialize();\n var $boxResponse = _$parent.find(\n store.config.selectorFormProductAssinatura +\n \" .msg-response:not(.resp-validate)\"\n );\n var data = {};\n\n data.subscription_item = {\n quantity: _$form.find('[name=\"quantity\"]').val(),\n sku: _$form.find('[name=\"sku\"]').val(),\n extra: {\n vindi_plan_id: _$form.find('[name=\"extra[vindi_plan_id]\"]').val(),\n },\n };\n\n //console.info('addItemAssinatura');\n //console.info('addItemAssinatura', data);\n //console.info('addItemAssinatura', JSON.stringify(data));\n\n if (!$btnComprar.hasClass(\"adding\")) {\n $.ajax({\n url: url,\n type: \"POST\",\n // dataType: 'json',\n contentType: \"application/json\",\n data: JSON.stringify(data),\n xhrFields: { withCredentials: true },\n beforeSend: function () {\n $btnComprar.addClass(\"adding\");\n },\n })\n .done(function (resp) {\n //console.log(\"success\");\n //console.info(resp);\n\n if (typeof template_store.addItemResult == \"function\") {\n template_store.addItemResult(\n _$form,\n \"produto-adicionado\",\n resp,\n $boxResponse\n );\n } else {\n template_store.addItemResultDefaultAssinatura(\n _$form,\n \"produto-adicionado\",\n resp,\n $boxResponse\n );\n }\n })\n .fail(function (xhr, status, error) {\n //console.log(\"error\");\n //console.error(xhr);\n //console.error(status);\n //console.error(error);\n\n var resp = {\n error:\n \"Houve um problema ao adicionar. Tente mais tarde ou entre em contato.\",\n };\n\n if (typeof template_store.addItemResult == \"function\") {\n template_store.addItemResult(\n _$form,\n \"erro-adicionar\",\n resp,\n $boxResponse\n );\n } else {\n template_store.addItemResultDefaultAssinatura(\n _$form,\n \"erro-adicionar\",\n resp,\n $boxResponse\n );\n }\n })\n .always(function () {\n //console.log(\"complete\");\n $btnComprar.removeClass(\"adding\");\n });\n }\n },\n deleteItem: function (_itemId, _$item, removeItemResult) {\n var _this = this;\n\n if (!_$item.hasClass(\"removing\")) {\n $.ajax({\n url: \"/carrinho\",\n type: \"POST\",\n dataType: \"json\",\n data: {\n _method: \"delete\",\n item_id: _itemId,\n },\n beforeSend: function () {\n _$item.addClass(\"removing\");\n },\n })\n .done(function (_cart) {\n //console.log(\"success\");\n\n if ($body.width() > 768) {\n if (store.config.addToCartOpenCartpopup) {\n template_store.headerCart.loadCart(_cart);\n template_store.headerCart.hide();\n }\n } else {\n if (store.config.addToCartOpenCartpopupMobile) {\n template_store.headerCart.loadCart(_cart);\n template_store.headerCart.hide();\n }\n }\n\n if (typeof removeItemResult == \"function\") {\n removeItemResult(_$item, _cart);\n }\n })\n .fail(function (error) {\n //console.log(\"erro ao remover\", error.responseText);\n })\n .always(function () {\n _$item.removeClass(\"removing\");\n });\n }\n },\n setMsgResponse: function (_msg, _type, _$parent) {\n /*\n O tipo pode conter um dos 3 valores: success, warning, error ou CLEAR.\n O type CLEAR limpa as mensagens e faz sumir a mensagem\n */\n\n // Verifica se não há mais de uma mensagem\n // caso tenha, gera um html para cada mensagem\n if (Array.isArray(_msg)) {\n var msgArr = _msg;\n _msg = \"\";\n for (var i = msgArr.length - 1; i >= 0; i--) {\n _msg += '' + msgArr[i] + \"\";\n }\n }\n\n _$parent\n .find(\"[data-msg-retorno]\")\n .removeClass(\"success\")\n .removeClass(\"warning\")\n .removeClass(\"error\");\n\n _$parent.find(\"[data-msg-retorno] [data-msg]\").empty();\n\n if (_type != \"clear\") {\n _$parent.find(\"[data-msg-retorno]\").addClass(_type);\n _$parent.find(\"[data-msg-retorno] [data-msg]\").html(_msg);\n }\n },\n updateCartCount: function (_itemsCount) {\n var _this = this;\n\n $(_this.config.cartCount.selector).empty().text(_itemsCount);\n\n $(_this.config.cartCount.attr).data(\"cart-count-attr\", _itemsCount);\n $(_this.config.cartCount.attr).attr(\"data-cart-count-attr\", _itemsCount);\n\n $(_this.config.cartCount.attr).html(_itemsCount);\n $(_this.config.cartCount.text).html(_itemsCount);\n $(_this.config.cartCount.textLabel).html(\n _itemsCount > 1 ? \"itens\" : \"item\"\n );\n\n if (_itemsCount > 0) {\n $(\"[data-cart-body]\").parent().parent().addClass(\"active\");\n } else {\n $(\"[data-cart-body]\").parent().parent().removeClass(\"active\");\n }\n\n setTimeout(function () {\n $(\"[data-cart-body]\").parent().parent().removeClass(\"active\");\n }, 3500);\n },\n getCartCount: function () {\n async function getCartItens() {\n let itens;\n\n try {\n itens = await $.ajax({\n url: '/carrinho/itens',\n type: 'GET',\n dataType: 'text'\n });\n\n return itens;\n } catch (error) {\n console.error(error);\n }\n }\n\n if ($(store.config.cartCount.selector).length > 0) {\n getCartItens().then((total) => {\n var itens = Number.isInteger(parseInt(total));\n if (itens) {\n $(store.config.cartCount.attr).attr('data-cart-count-attr', total);\n $(store.config.cartCount.selector).html(total);\n\n var $boxCart = $('[data-cart-body]');\n\n if ($boxCart.length > 0) {\n if (total > 0) {\n template_store.headerCart.loadCart();\n } else {\n $boxCart.html('

Seu carrinho está vazio...

');\n }\n }\n }\n });\n };\n },\n submitForm: function (_$form) {\n _$form.find('[name=\"reply_to\"]').val(_$form.find('[name=\"email\"]').val());\n\n if (!_$form.hasClass(\"sending\")) {\n $.ajax({\n url: \"/webform\",\n type: \"POST\",\n data: _$form.serialize(),\n beforeSend: function () {\n _$form.addClass(\"sending\");\n },\n })\n .done(function () {\n // console.info('foi');\n // store.setMsgResponse('Mensagem enviada com sucesso!', 'success', _$form);\n _$form\n .find(\"[data-msg-retorno] [data-msg-success]\")\n .addClass(\"visible\");\n _$form\n .find(\"[data-msg-retorno] [data-msg-error]\")\n .removeClass(\"visible\");\n _$form.find(\"button[type=submit]\").text(\"Enviado\");\n\n setTimeout(function () {\n _$form.find(\"button[type=submit]\").text(\"Enviar\");\n }, 3500);\n _$form[0].reset();\n })\n .fail(function () {\n // console.info('foi, mas deu ruim');\n _$form\n .find(\"[data-msg-retorno] [data-msg-success]\")\n .removeClass(\"visible\");\n _$form\n .find(\"[data-msg-retorno] [data-msg-error]\")\n .addClass(\"visible\");\n _$form.find(\"button[type=submit]\").text(\"Falha ao enviar\");\n setTimeout(function () {\n _$form.find(\"button[type=submit]\").text(\"Enviar\");\n }, 3500);\n // store.setMsgResponse('Houve um problema ao enviar sua mensagem, tente novamente! Ou entre em contato conosco pelo telefone (21) 99644-6925 ', 'error', $form);\n })\n .always(function () {\n //console.log(\"complete\");\n _$form.removeClass(\"sending\");\n });\n }\n },\n login: {\n validateLogin: function (_$form) {\n var validated = true;\n var errorsTxt = [];\n\n if (_$form.find('[name=\"email\"]').val() == \"\") {\n validated = false;\n errorsTxt.push(\"Informe seu email!\");\n }\n\n if (_$form.find('[name=\"password\"]').val() == \"\") {\n validated = false;\n errorsTxt.push(\"Informe a senha!\");\n }\n\n return { validated: validated, errors: errorsTxt };\n },\n validateRegister: function (_$form) {\n var validated = true;\n var errorsTxt = [];\n\n if (_$form.find('[name=\"email\"]').val() == \"\") {\n validated = false;\n errorsTxt.push(\"Informe seu email!\");\n }\n\n if (_$form.find('[name=\"password\"]').val() == \"\") {\n validated = false;\n errorsTxt.push(\"Informe uma senha!\");\n }\n\n if (_$form.find('[name=\"password\"]').val() != \"\") {\n var pass = _$form.find('[name=\"password\"]').val();\n var confirmationPass = _$form\n .find('[name=\"password_confirmation\"]')\n .val();\n\n if (pass != confirmationPass) {\n validated = false;\n errorsTxt.push(\"Senha e confirmação são diferentes!\");\n }\n }\n\n return { validated: validated, errors: errorsTxt };\n },\n validateRecover: function (_$form) {\n var validated = true;\n var errorsTxt = [];\n\n if (_$form.find('[name=\"email\"]').val() == \"\") {\n validated = false;\n errorsTxt.push(\"Informe seu email!\");\n }\n\n return { validated: validated, errors: errorsTxt };\n },\n logar: function (_$form) {\n if (!_$form.hasClass(\"sending\")) {\n $.ajax({\n url: \"/entrar\",\n type: \"POST\",\n dataType: \"json\",\n data: _$form.serialize(),\n beforeSend: function () {\n _$form.addClass(\"sending\");\n },\n })\n .done(function (resp) {\n //console.log(\"success\", resp);\n\n if (resp.error) {\n store.setMsgResponse(resp.error, \"error\", _$form);\n }\n\n if (resp.client) {\n window.location.href = resp.redirect_to;\n }\n })\n .fail(function (resp) {\n //console.error(\"error\", error.responseText);\n })\n .always(function () {\n //console.log(\"complete\");\n _$form.removeClass(\"sending\");\n });\n }\n },\n recoverPassord: function (_$form) {\n if (!_$form.hasClass(\"sending\")) {\n $.ajax({\n url: \"/recuperar_senha\",\n type: \"POST\",\n dataType: \"json\",\n data: _$form.serialize(),\n beforeSend: function () {\n _$form.addClass(\"sending\");\n },\n })\n .done(function (resp) {\n //console.log(\"success\", resp);\n\n if (resp.error) {\n store.setMsgResponse(resp.error, \"error\", _$form);\n }\n\n if (resp.ok) {\n store.setMsgResponse(resp.ok, \"success\", _$form);\n }\n\n /*if (resp.client) {\n window.location.href = resp.redirect_to;\n }*/\n })\n .fail(function (resp) {\n //console.error(\"error\", error.responseText);\n })\n .always(function () {\n //console.log(\"complete\");\n _$form.removeClass(\"sending\");\n });\n }\n },\n },\n};\n\nwindow.template_store = {\n headerCart: {\n loadCart: async function (_cart) {\n var cartBody = document.querySelectorAll('[data-cart-body]');\n if (_cart) store.updateCartCount(_cart.items_count);\n\n try {\n const response = await fetch('/carrinho/popup')\n\n if (response.ok) {\n const html = await response.text()\n cartBody.forEach(cart => {\n cart.innerHTML = '';\n cart.innerHTML = html;\n })\n }\n } catch (error) {\n console.log('Erro ao executar funções do carrinho', error)\n }\n },\n show: function () {\n var $cartBody = $('[data-cart-body]');\n\n $cartBody.addClass(\"active\");\n\n $(\"html,body\").animate({ scrollTop: 0 }, \"250\");\n\n setTimeout(function () {\n $cartBody.removeClass(\"active\");\n }, 3500);\n },\n },\n setMenuMobile: function () {\n const btnOpenMenu = document.querySelector('[data-action=\"open-menu-mobile\"]');\n const menuMobile = document.getElementById('menu-mobile');\n const btnSubmenus = document.querySelectorAll('[data-target]');\n const wrapper = document.getElementById('wrapper');\n const overlay = document.createElement('div');\n overlay.classList.add('overlay');\n\n /* Evento para abrir e recolher submenus */\n btnSubmenus.forEach(el => {\n el.addEventListener('click', (e) => {\n e.preventDefault();\n const target = document.querySelector(e.currentTarget.dataset.target);\n const panel = e.currentTarget.closest('.opened');\n\n if (e.currentTarget.classList.contains('next')) {\n target.classList.add('opened');\n target.classList.remove('hidden');\n panel.classList.remove('opened');\n panel.classList.add('submenu-opened');\n } else {\n target.classList.add('opened');\n panel.classList.remove('opened');\n target.classList.remove('submenu-opened');\n setTimeout(() => {\n panel.classList.add('hidden');\n }, 600);\n }\n });\n });\n\n /* Evento para abrir o menu */\n btnOpenMenu.addEventListener('click', () => {\n document.documentElement.classList.add('menu-opened');\n document.body.classList.add('menu-opened');\n menuMobile.classList.add('opened');\n menuMobile.style.display = 'block';\n wrapper.appendChild(overlay);\n overlay.classList.add('bg');\n });\n\n /* Evento para fechar o menu */\n overlay.addEventListener('click', () => {\n menuMobile.classList.remove('opened');\n overlay.classList.remove('bg');\n setTimeout(() => {\n wrapper.removeChild(overlay);\n document.body.classList.remove('menu-opened');\n document.documentElement.classList.remove('menu-opened');\n menuMobile.style.display = 'none';\n }, 500);\n });\n },\n submitFormNotify: function (_$form) {\n var formData = _$form.serialize();\n\n if (!_$form.hasClass(\"sending\")) {\n $.ajax({\n url: _$form.attr(\"action\"),\n type: \"post\",\n dataType: \"json\",\n data: formData,\n beforeSend: function () {\n _$form.addClass(\"sending\");\n },\n })\n .done(function (resp) {\n //console.log(\"success\");\n //console.info(resp);\n\n var msgSuccess =\n \"Você receberá um e-mail quando o produto estiver disponível\";\n\n // Envia um email para o cliente saber que o usuário solicitou o avise-me\n $.ajax({\n url: \"/webform\",\n type: \"POST\",\n data: {\n key: _$form.find('[name=\"key\"]').val(),\n reply_to: _$form.find('[name=\"email\"]').val(),\n email: _$form.find('[name=\"email\"]').val(),\n product_name: _$form.find('[name=\"nome\"]').val(),\n referencia: _$form.find('[name=\"referencia\"]').val(),\n sku: _$form.find('[name=\"sku\"]').val(),\n },\n })\n .done(function (resp) {\n _$form.find(\"button[type=submit]\").text(\"Enviado\");\n setTimeout(function () {\n _$form.find(\"button[type=submit]\").text(\"Enviar\");\n }, 3500);\n _$form[0].reset();\n })\n .fail(function (error) {\n _$form.find(\"button[type=submit]\").text(\"Falha ao enviar\");\n setTimeout(function () {\n _$form.find(\"button[type=submit]\").text(\"Enviar\");\n }, 3500);\n })\n .always(function () { });\n\n if (resp.error) {\n _$form.find(\".msg-response\").removeClass(\"happy\").addClass(\"error\");\n _$form.find(\".msg-response span\").html(resp.error);\n _$form.find(\".msg-response\").slideDown(350);\n\n setTimeout(function () {\n _$form\n .find(\".msg-response\")\n .removeClass(\"happy\")\n .removeClass(\"error\");\n _$form.find(\".msg-response span\").empty();\n }, 3500);\n } else {\n _$form.find(\".msg-response\").addClass(\"happy\").removeClass(\"error\");\n _$form.find(\".msg-response span\").html(msgSuccess);\n\n setTimeout(function () {\n _$form\n .find(\".msg-response\")\n .removeClass(\"happy\")\n .removeClass(\"error\");\n _$form.find(\".msg-response span\").empty();\n }, 3500);\n }\n })\n .fail(function (resp) {\n //console.log(\"error\");\n //console.error(resp);\n //console.error(resp.responseText);\n //console.error(resp.responseText.error);\n\n var errorText = JSON.parse(resp.responseText);\n //console.info(errorText);\n\n _$form.find(\".msg-response\").removeClass(\"happy\");\n _$form.find(\".msg-response span\").html(errorText.error);\n _$form.find(\".msg-response\").slideDown(350);\n\n setTimeout(function () {\n $_$form.find(\".msg-response\").slideUp(350);\n }, 3500);\n })\n .always(function () {\n _$form.removeClass(\"sending\");\n });\n }\n },\n addItemResult: function (_$form, _typeResult, _result, _$boxResponse) {\n var _this;\n\n if (_typeResult == \"produto-adicionado\") {\n var $btnComprar = $(store.config.selectorBtnBuy);\n\n $btnComprar.addClass(\"success\").html(getText(language));\n\n setTimeout(function () {\n // _$form.find('.msg-response').slideUp(350);\n $btnComprar\n .removeClass(\"success\")\n .html($btnComprar.data(\"text-available\"));\n }, 3500);\n\n if ($body.width() > 768) {\n if (store.config.addToCartOpenCartpopup) {\n template_store.headerCart.loadCart(_result);\n template_store.headerCart.show();\n } else {\n setTimeout(function () {\n window.location.href = urlCart;\n }, 150);\n }\n } else {\n if (store.config.addToCartOpenCartpopupMobile) {\n template_store.headerCart.loadCart(_result);\n template_store.headerCart.show();\n } else {\n setTimeout(function () {\n window.location.href = urlCart;\n }, 150);\n }\n }\n } else if (_typeResult == \"erro-adicionar\") {\n var errorText = JSON.parse(_result.responseText);\n\n if (typeof _$boxResponse != \"undefined\" && _$boxResponse.length > 0) {\n $(\"html,body\").animate(\n {\n scrollTop: _$boxResponse.offset().top,\n },\n \"250\"\n );\n\n //console.info(errorText);\n\n _$boxResponse.addClass(\"error\");\n _$boxResponse.removeClass(\"success\");\n\n _$boxResponse.find(\"span\").html(errorText.error);\n _$boxResponse.slideDown(350);\n\n setTimeout(function () {\n _$boxResponse.slideUp(350);\n }, 3500);\n }\n }\n\n // Verifica se há popup de compra rápida ativo. Se tiver, fecha ele, retirar ou comentar se não for utilizado\n const popupPurchase = document.querySelector('[data-popup-purchase]');\n if (popupPurchase != null) {\n if (popupPurchase.classList.contains('-active')) {\n popupPurchase.querySelector('[data-close-popup-purchase]').click();\n }\n }\n },\n debounce: function (func, wait, immediate) {\n var timeout;\n return function () {\n var context = this,\n args = arguments;\n var later = function () {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n var callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) func.apply(context, args);\n };\n },\n throttle: function (fn, threshhold, scope) {\n threshhold || (threshhold = 250);\n var last, deferTimer;\n return function () {\n var context = scope || this;\n\n var now = +new Date(),\n args = arguments;\n if (last && now < last + threshhold) {\n // hold on to it\n clearTimeout(deferTimer);\n deferTimer = setTimeout(function () {\n last = now;\n fn.apply(context, args);\n }, threshhold);\n } else {\n last = now;\n fn.apply(context, args);\n }\n };\n },\n setFullbanner: function () {\n $(\".fullbanner\").each(function (index, el) {\n var $el = $(el);\n var qtdItems = $el.find(\"[data-item]\").length;\n\n var swiper = new Swiper($(el), {\n slidesPerView: 1,\n spaceBetween: 0,\n navigation: {\n nextEl: $(el).find(\".swiper-button-next\"),\n prevEl: $(el).find(\".swiper-button-prev\"),\n disabledClass: \"-disabled\",\n },\n //swiper lazy load\n preloadImages: false,\n watchVisibility: true,\n lazy: {\n loadPrevNext: false,\n loadOnTransitionStart: true\n }\n });\n });\n },\n trocaImagemProduto: function () {\n $(\"[data-image-variant]\").on(\"click\", function () {\n //console.log($(this));\n var src = $(this).data(\"image-variant\");\n //console.log(src);\n var $produto = $(this).closest(\".product-block \");\n //console.log($produto);\n $produto.find(\".images\").find(\"img\").attr(\"src\", src);\n //console.log($produto.find('.images').find('img'));\n });\n },\n setCarrosselProdutos: function () {\n $(\".produtos\").each(function (index, el) {\n var $this = $(this);\n var swiper = new Swiper($(el).find(\"[data-produtos]\"), {\n slidesPerView: 1,\n spaceBetween: 0,\n autoHeight: false,\n breakpoints: {\n 640: {\n slidesPerView: 2,\n },\n 768: {\n slidesPerView: 3,\n spaceBetween: 40,\n },\n 1024: {\n slidesPerView: 5,\n spaceBetween: 40,\n },\n },\n scrollbar: {\n el: $(el).find(\".swiper-scrollbar\"),\n draggable: true,\n },\n autoplay: {\n delay: 3000,\n },\n });\n });\n },\n setBacktop: function () {\n var $backtop = $(\"[data-scroll-top]\");\n\n if ($backtop) {\n document\n .querySelector(\"[data-scroll-top]\")\n .addEventListener(\"click\", function (e) {\n e.preventDefault();\n window.scrollTo({\n top: 0,\n behavior: \"smooth\",\n });\n });\n $(document).ready(function () {\n $(window).on(\"scroll\", function () {\n if ($(window).scrollTop() >= 10) {\n $backtop.addClass(\"active\");\n } else {\n $backtop.removeClass(\"active\");\n }\n });\n });\n }\n },\n elementInViewport: function (el) {\n //console.log('el', el.offset())\n\n var top = el.offset().top;\n var left = el.offset().left;\n var width = el.outerWidth();\n var height = el.outerHeight();\n\n //console.log('top', top)\n //console.log('left', left)\n //console.log('width', width)\n //console.log('height', height)\n\n //console.log('window.pageYOffset', window.pageYOffset)\n //console.log('window.pageXOffset', window.pageXOffset)\n\n return (\n top >= window.pageYOffset &&\n left >= window.pageXOffset &&\n top + height <= window.pageYOffset + window.innerHeight &&\n left + width <= window.pageXOffset + window.innerWidth\n );\n },\n setHeaderAttrMobile: function () {\n var atributos = document.querySelectorAll(\"[data-top-attr]\");\n\n atributos.forEach(attr => {\n attr.addEventListener(\"click\", () => {\n attr.classList.toggle(\"-active\");\n })\n })\n },\n setIconsSlider: function () {\n let sliders = document.querySelectorAll(\"[data-slider-revistas]\");\n\n sliders.forEach((slider) => {\n var slider = new Swiper(slider, {\n slidesPerView: 2,\n spaceBetween: 15,\n watchOverflow: true,\n autoHeight: true,\n watchSlidesProgress: true,\n autoplay: true,\n loop: false,\n navigation: {\n nextEl: slider.parentNode.querySelector(\".swiper-button-next\"),\n prevEl: slider.parentNode.querySelector(\".swiper-button-prev\"),\n },\n scrollbar: {\n el: slider.parentNode.querySelector(\".swiper-scrollbar\"),\n draggable: true,\n },\n breakpoints: {\n 425: {\n slidesPerView: 4,\n },\n 767: {\n slidesPerView: 9,\n },\n },\n });\n });\n },\n setFooterTrustvoxSeal: function () {\n function isInViewport(element, percentVisible) {\n let rect = element.getBoundingClientRect();\n let windowHeight = (window.innerHeight || document.documentElement.clientHeight);\n const percentFromTop = Math.floor(100 - (((rect.top >= 0 ? 0 : rect.top) / +-(rect.height / 1)) * 100));\n const percentToBottom = Math.floor(100 - ((rect.bottom - windowHeight) / rect.height) * 100);\n return percentFromTop < percentVisible || percentToBottom > percentVisible;\n }\n const certificate = document.querySelector('[data-trustvox-certificate-fixed]');\n if (certificate) {\n const scriptInterval = setInterval(() => {\n if (isInViewport(certificate, 0)) {\n let newScript = document.createElement('script');\n newScript.setAttribute('src', '//certificate.trustvox.com.br/widget.js');\n\n document.body.appendChild(newScript);\n certificate.classList.add('-loaded');\n\n clearInterval(scriptInterval);\n }\n }, 100);\n }\n },\n fixTrustvoxImgs: function () {\n let section = document.querySelector('.-trustvox');\n if (section) {\n let observer = new MutationObserver(mutation => {\n const imgs = section.querySelectorAll('img');\n if (imgs.length > 0) {\n imgs.forEach(img => {\n img.setAttribute('width', img.clientWidth);\n img.setAttribute('height', img.clientHeight);\n });\n }\n });\n observer.observe(section, { attributes: false, childList: true, subtree: true });\n }\n },\n home: {\n init: function () {\n template_store.setFullbanner();\n template_store.setIconsSlider();\n\n $(\".produtos-tabs .links a\").on(\"click\", function (e) {\n e.preventDefault();\n $(\".produtos-tabs .links a\").removeClass(\"active\");\n $(this).addClass(\"active\");\n var tag = $(this).attr(\"href\");\n $(\".produtos-tabs .produtos\").removeClass(\"active\");\n $('[data-tag=\"' + tag + '\"]').addClass(\"active\");\n\n $(\".produtos\").each(function (index, el) {\n var $this = $(this);\n var swiper = new Swiper($(el).find(\"[data-produtos]\"), {\n slidesPerView: 1,\n spaceBetween: 0,\n breakpoints: {\n 640: {\n slidesPerView: 2,\n },\n 768: {\n slidesPerView: 3,\n spaceBetween: 40,\n },\n 1024: {\n slidesPerView: 4,\n spaceBetween: 40,\n },\n },\n scrollbar: {\n el: $(el).find(\".swiper-scrollbar\"),\n draggable: true,\n },\n autoplay: {\n delay: 3000,\n },\n });\n });\n });\n },\n },\n product: {\n $sectionProduct: $(\"[data-section-product]\"),\n $wrapperImages: $(\"[data-section-product]\").find(\"[data-product-images]\"),\n $sliderProduct: $(\"[data-section-product]\").find(\n \"[data-product-images] [data-main-slider]\"\n ),\n $thumbsProduct: $(\"[data-section-product]\").find(\n \"[data-product-images] [data-slider-thumbs]\"\n ),\n sliderProduct: [],\n /* \n Exibe as primeiras imagens do produto\n ** Importante para quando houver imagem por sku **\n */\n showFirstImages: function () {\n var _this = this;\n var variants = vnda.variants.all();\n var $imagesWithoutSkus = _this.$sliderProduct.find(\".image-without-sku\");\n var $thumbsWithoutSkus = _this.$thumbsProduct.find(\".image-without-sku\");\n\n if ($imagesWithoutSkus.length > 0) {\n /* \n Todas as imagens sem skus são exibidas sempre\n */\n\n $imagesWithoutSkus.removeClass(\"inactive\").addClass(\"active\");\n\n $thumbsWithoutSkus.removeClass(\"inactive\").addClass(\"active\");\n } else {\n /* \n Percorre todas as variantes\n */\n for (var i = 0; i < variants.length; i++) {\n if (variants[i].main) {\n //console.info(variants[i]);\n\n // Procura a imagem que contém o sku e a exibe\n _this.$sliderProduct\n .find('[data-image][data-skus-image*=\"' + variants[i].sku + '\"]')\n .addClass(\"active\")\n .removeClass(\"inactive\");\n\n _this.$thumbsProduct\n .find(\n '[data-image-thumb][data-skus-image*=\"' + variants[i].sku + '\"]'\n )\n .addClass(\"active\")\n .removeClass(\"inactive\");\n }\n }\n }\n },\n setGallery: function () {\n var _this = this;\n var gallery = new Swiper(_this.$sliderProduct, {\n slidesPerView: 1,\n spaceBetween: 30,\n watchOverflow: true,\n // autoHeight: true,\n preloadImages: true,\n updateOnImagesReady: true,\n on: {\n slideChange: function () {\n MagicZoom.refresh();\n },\n }\n });\n\n var galleryThumbs = new Swiper(_this.$thumbsProduct, {\n slidesPerView: 4,\n spaceBetween: 20,\n //watchOverflow: true,\n direction: \"vertical\",\n navigation: {\n nextEl: $(\".wrapper-thumbs\").find(\".swiper-button-next\"),\n prevEl: $(\".wrapper-thumbs\").find(\".swiper-button-prev\"),\n },\n });\n\n this.sliderProduct.push(gallery);\n this.sliderProduct.push(galleryThumbs);\n\n $(\"[data-slide-index]\").on(\"click\", function () {\n gallery.slideTo($(this).data(\"slide-index\") - 1);\n });\n },\n setCarrosselConjunto: function () {\n var gallery = new Swiper('[data-carrossel-compre-junto]', {\n slidesPerView: 1.2,\n spaceBetween: 10,\n watchOverflow: true,\n preloadImages: true,\n updateOnImagesReady: true,\n simulateTouch: false,\n navigation: {\n nextEl: document.querySelector(\".compre-junto .swiper-button-next\"),\n prevEl: document.querySelector(\".compre-junto .swiper-button-prev\"),\n disabledClass: \"-disabled\",\n },\n breakpoints: {\n 640: {\n slidesPerView: 1.3,\n spaceBetween: 10,\n },\n },\n });\n\n },\n setCarrosselIcones: function () {\n var gallery = new Swiper('[data-carrossel-icones]', {\n slidesPerView: 3,\n spaceBetween: 20,\n watchOverflow: true,\n preloadImages: true,\n updateOnImagesReady: true,\n simulateTouch: false,\n breakpoints: {\n 640: {\n slidesPerView: 4,\n },\n },\n navigation: {\n nextEl: document.querySelector(\".icones .swiper-button-next\"),\n prevEl: document.querySelector(\".icones .swiper-button-prev\"),\n disabledClass: \"-disabled\",\n },\n });\n\n },\n addProductBlock: function () {\n const productWrappers = document.querySelectorAll('[data-form-product-block]');\n\n const variants = document.querySelectorAll('[data-variant-available]');\n\n variants.forEach(variant => {\n variant.addEventListener('click', () => {\n const skuInput = variant.parentElement.querySelector('[name=\"sku\"]');\n skuInput.value = variant.dataset.variantSku;\n const btnComprar = variant.parentElement.parentElement.nextElementSibling.querySelector('.add-to-cart-button');\n const textUnavailable = btnComprar.dataset.textUnavailable;\n const textAvailable = btnComprar.dataset.textAvailable;\n\n this.popupPurchase.setPopupAttribute(variant);\n\n if (variant.dataset.variantAvailable === \"false\") {\n btnComprar.dataset.available = false;\n btnComprar.classList.remove(\"available\");\n btnComprar.classList.add(\"unavailable\");\n btnComprar.innerHTML = textUnavailable;\n } else {\n btnComprar.dataset.available = true;\n btnComprar.classList.remove(\"unavailable\");\n btnComprar.classList.add(\"available\");\n btnComprar.innerHTML = textAvailable;\n }\n })\n });\n\n\n $(document).on('submit', '[data-form-product-block]', function (event) {\n event.preventDefault();\n // console.log('submit');\n\n var $form = $(this);\n\n // console.log($form.serialize());\n\n var $parent = $form.closest('[data-form-product-block]');\n\n var respValidated = store.validateFormProduct($form);\n var $boxResponse = $parent.find('.msg-response');\n\n // console.log(respValidated);\n\n if (respValidated.validated) {\n // console.log('validated');\n store.addItem($form, $parent, function (_$form, _typeResult, _result, _$boxResponse) {\n template_store.addItemResult(_$form, _typeResult, _result, _$boxResponse);\n });\n } else {\n store.setRespValidateProduct(respValidated, $form, $boxResponse);\n }\n })\n\n $(window).on('load', function () {\n $('.product-block').each(function (index, el) {\n $(el).find('[data-attribute=\"1\"] .label').first().trigger('click');\n })\n })\n },\n popupPurchase: {\n popupEl: document.querySelector('[data-popup-purchase]'),\n currentOpenProduct: false,\n\n open: function (productBox) {\n // Salva o produto atual para referência futura\n this.currentOpenProduct = productBox;\n\n // Clona elementos do produto e referencia o form de compra dele\n const clonedImages = productBox.querySelector('.images').cloneNode(true);\n const clonedName = productBox.querySelector('.name').cloneNode(true);\n const clonedPrice = productBox.querySelector('.wrapper-price').cloneNode(true);\n const purchaseForm = productBox.querySelector('[data-form-product-block]');\n\n // Joga os elementos do produto dentro do popup\n const contentBox = this.popupEl.querySelector('.product');\n const leftBox = document.createElement('div');\n const rightBox = document.createElement('div');\n let priceWrapper = document.createElement('div');\n priceWrapper.classList.add('price-wrapper');\n priceWrapper.appendChild(clonedPrice);\n\n leftBox.appendChild(clonedImages);\n rightBox.appendChild(clonedName);\n rightBox.appendChild(clonedPrice);\n rightBox.appendChild(purchaseForm);\n\n contentBox.appendChild(leftBox);\n contentBox.appendChild(rightBox);\n\n // Atualiza o componente de preço dentro do popup e exibe\n clonedPrice.setAttribute('data-was-processed', false);\n\n this.popupEl.classList.add('-active');\n\n },\n\n close: function () {\n // CHAMAR UMA ÚNICA VEZ\n // Instancia funcionamento ao clicar no botão de fechar o popup\n const popup = this.popupEl;\n const closeButtons = popup.querySelectorAll(\n '[data-close-popup-purchase]'\n );\n\n closeButtons.forEach((button) => {\n button.addEventListener('click', () => {\n popup.classList.remove('-active');\n\n setTimeout(() => {\n // Retorna o formulário para o produto correspondente\n const purchaseForm = popup.querySelector('[data-form-product-block]');\n this.currentOpenProduct.appendChild(\n purchaseForm\n );\n this.currentOpenProduct = false;\n\n // Limpa os dados do produto do popup\n const popupProductEl = popup.querySelector('.product');\n while (popupProductEl.firstChild) {\n popupProductEl.removeChild(popupProductEl.firstChild);\n }\n }, 300);\n });\n });\n },\n\n markFirstOption: function (_productBlock) {\n // atributo com dropdown\n if (_productBlock.querySelectorAll('[data-variant-available=\"true\"]').length > 0) {\n _productBlock.querySelectorAll('[data-variant-available=\"true\"]')[0].click();\n } else {\n _productBlock.querySelector('[data-variant-available]').click();\n }\n\n },\n setPopupAttribute: function (variant) {\n const optionTitle = variant.parentElement.previousElementSibling.querySelector('[data-variant]');\n optionTitle.innerText = variant.innerText.trim();\n },\n },\n responsiveDesc: function () {\n let limitDesc = 174;\n let chars = $(\"#Descrição\").html();\n let charsText = $(\"#Descrição\").text();\n if (charsText.length > limitDesc) {\n let visiblePart = $(\" \" + charsText.substr(0, limitDesc - 1) + \" \");\n let dots = $(\"... \");\n let hiddenPart = $(\"\" + chars + \"\");\n let readMore = $(\"+\");\n\n readMore.on('click', function () {\n $(this).prev().remove(); // remove dots\n $(this).prev().remove(); // remove descrição curta\n $(this).next().show(); // mostra descrição completa\n $(this).remove(); // remove readMore\n });\n\n $(\"#Descrição\").empty()\n .append(visiblePart)\n .append(dots)\n .append(readMore)\n .append(hiddenPart);\n }\n },\n waitStars: function () {\n const stars = document.querySelector('[data-trustvox-stars]');\n if (stars) {\n function isInViewport(element, percentVisible) {\n let rect = element.getBoundingClientRect();\n let windowHeight = (window.innerHeight || document.documentElement.clientHeight);\n const percentFromTop = Math.floor(100 - (((rect.top >= 0 ? 0 : rect.top) / +-(rect.height / 1)) * 100));\n const percentToBottom = Math.floor(100 - ((rect.bottom - windowHeight) / rect.height) * 100);\n return percentFromTop < percentVisible || percentToBottom > percentVisible;\n }\n const scriptInterval = setInterval(() => {\n if (isInViewport(stars, 0)) {\n let newScript1 = document.createElement('script');\n newScript1.setAttribute('src', '//static.trustvox.com.br/sincero/sincero.js');\n let newScript2 = document.createElement('script');\n newScript2.setAttribute('src', '//rate.trustvox.com.br/widget.js');\n\n document.body.appendChild(newScript1);\n document.body.appendChild(newScript2);\n\n clearInterval(scriptInterval);\n }\n }, 100);\n }\n },\n setBuyTogetherSlider: function () {\n const buyTogetherSlider = document.querySelector('[data-buy-together-slider]');\n\n if (buyTogetherSlider) {\n const swiperContainer = document.querySelector('[data-buy-together-slider] .swiper-container');\n const slides = swiperContainer.querySelectorAll('.swiper-slide');\n const qtdSlides = slides.length\n\n var slider = new Swiper(swiperContainer, {\n slidesPerView: qtdSlides,\n // slidesPerView: slides.length > 1 ? 3 : 1,\n navigation: {\n nextEl: buyTogetherSlider.querySelector('.swiper-button-next'),\n prevEl: buyTogetherSlider.querySelector('.swiper-button-prev'),\n },\n breakpoints: {\n 320: {\n slidesPerView: slides.length > 1 ? 2 : 1,\n },\n 992:{\n slidesPerView: 3,\n spaceBetween: 40\n }\n }\n });\n\n console.log('slider: ', slider);\n }\n },\n init: function () {\n var _this = this;\n\n _this.showFirstImages();\n _this.setGallery();\n _this.setCarrosselConjunto();\n _this.setCarrosselIcones();\n _this.addProductBlock();\n _this.responsiveDesc();\n _this.waitStars();\n Shipping.init();\n _this.setBuyTogetherSlider();\n\n let products = document.querySelectorAll('[data-form-product-block]');\n\n _this.popupPurchase.close();\n\n products.forEach(product => {\n _this.popupPurchase.markFirstOption(product);\n\n const openPopupPurchaseButton = product.parentElement.querySelector('[data-open-popup-purchase]');\n if (openPopupPurchaseButton != null) {\n openPopupPurchaseButton.addEventListener('click', () => {\n _this.popupPurchase.open(product.parentElement);\n });\n }\n });\n\n\n $(\".tabs .tab\").on(\"click\", function (e) {\n e.preventDefault();\n var id = $(this).attr(\"href\");\n if (id == '#Descrição' && $(id).height() == 0) {\n var height = 'auto';\n $(id).css(\"height\", height);\n $(this).addClass(\"active\");\n\n } else if ($(id).height() == 0) {\n var height = $(id).find(\"div\").height() + 15;\n $(id).css(\"height\", height);\n $(this).addClass(\"active\");\n }\n else {\n $(id).css(\"height\", 0);\n $(this).removeClass(\"active\");\n }\n });\n\n $(\".tabs .tab\")[0].click();\n\n $(\".description .tabs a\").on(\"click\", function (e) {\n e.preventDefault();\n var id = $(this).attr(\"href\");\n\n $(\".description .tabs a\").removeClass(\"active\");\n $(this).addClass(\"active\");\n\n $(\".description .content\").removeClass(\"active\");\n $(id).addClass(\"active\");\n });\n\n $(document).on(\n \"click\",\n '[data-action=\"minus-quantity-size\"]',\n function (event) {\n var $inputQtd = $wrapper.find(\"[data-input-quantity]\");\n var valQtd = parseInt($inputQtd.val());\n if (valQtd - 1 >= 0) {\n $inputQtd.val(valQtd - 1).trigger(\"change\");\n }\n }\n );\n\n $(document).on(\n \"click\",\n '[data-action=\"plus-quantity-size\"]',\n function (event) {\n var $inputQtd = $wrapper.find(\"[data-input-quantity]\");\n var valQtd = parseInt($inputQtd.val());\n\n $inputQtd.val(valQtd + 1).trigger(\"change\");\n }\n );\n\n $(document).on(\n \"submit\",\n store.config.selectorFormProduct,\n function (event) {\n event.preventDefault();\n\n var $form = $(this);\n var $parent = $form.closest(store.config.selectorWrapperProduct);\n\n var $btnComprar = $parent.find(store.config.selectorBtnBuy);\n\n var respValidated = store.validateFormProduct($form);\n var $boxResponse = $parent.find(\".resp-validate\");\n\n if (respValidated.validated) {\n store.addItem($form, $parent);\n } else {\n //console.info('não foi');\n store.setRespValidateProduct(respValidated, $form, $boxResponse);\n }\n }\n );\n },\n },\n tag: {\n setDescription: function () {\n const tagDescription = document.querySelector('[data-tag-description]');\n if (tagDescription) {\n let anchor = tagDescription.querySelector('.anchor');\n anchor.addEventListener('click', (e) => {\n e.preventDefault();\n\n if (tagDescription.classList.contains('-active')) {\n tagDescription.classList.remove('-active');\n anchor.innerText = 'Ver mais'\n } else {\n tagDescription.classList.add('-active');\n anchor.innerText = 'Ver menos'\n }\n });\n }\n },\n init: function () {\n this.setDescription();\n },\n },\n login: {\n init: function () {\n $(\"[data-content-login]\").each(function (index, el) {\n // Animação\n $(el).on(\"click\", \"[data-forget-password]\", function (event) {\n event.preventDefault();\n $(el).find(\".wrapper-form-login\").animate({ height: \"toggle\" }, 500);\n $(el)\n .find(\".wrapper-form-recover\")\n .animate({ height: \"toggle\" }, 500);\n });\n\n $(el).on(\"click\", \"[data-forget-password-back]\", function (event) {\n event.preventDefault();\n $(el).find(\".wrapper-form-login\").animate({ height: \"toggle\" }, 500);\n $(el)\n .find(\".wrapper-form-recover\")\n .animate({ height: \"toggle\" }, 500);\n });\n\n $(el).on(\"submit\", \"[data-form-login]\", function (event) {\n event.preventDefault();\n\n var $form = $(this);\n var respValidated = store.login.validateLogin($form);\n\n if (respValidated.validated) {\n store.login.logar($form);\n } else {\n store.setMsgResponse(respValidated.errors, \"error\", $(this));\n }\n });\n\n $(el).on(\"submit\", \"[data-form-register]\", function (event) {\n event.preventDefault();\n\n var $form = $(this);\n var respValidated = store.login.validateRegister($form);\n\n if (respValidated.validated) {\n store.login.logar($form);\n } else {\n store.setMsgResponse(respValidated.errors, \"error\", $(this));\n }\n });\n\n $(el).on(\"submit\", \"[data-form-recover]\", function (event) {\n event.preventDefault();\n\n var $form = $(this);\n var respValidated = store.login.validateRecover($form);\n\n if (respValidated.validated) {\n store.login.recoverPassord($form);\n } else {\n store.setMsgResponse(respValidated.errors, \"error\", $(this));\n }\n });\n });\n },\n },\n page: {\n init: function () {\n template_store.setIconsSlider();\n $(document).ready(function () {\n var hash_url = document.location.hash;\n if (hash_url != \"\") {\n var scr = $(hash_url).offset().top - 100;\n $(\"body\").animate(\n {\n scrollTop: scr,\n },\n 1000\n );\n }\n });\n },\n },\n\n initGTM: function () {\n window.addEventListener('load', () => {\n // afterLoad\n // try {\n // console.log('GTM afterLoad!');\n // window.setTimeout(() => { if (dataLayer) dataLayer.push({'event' : 'afterLoad'}) }, 1500);\n // } catch (error) {\n // console.log('GTM afterLoad error', error);\n // }\n // Jivochat\n let hasJivochat = false;\n const addJivochat = function () {\n if (hasJivochat) return;\n let newScript = document.createElement('script');\n newScript.setAttribute('src', '//code.jivosite.com/widget/q4SfRQvDo8');\n document.body.appendChild(newScript);\n hasJivochat = true;\n console.log('GTM Jivochat!');\n\n window.removeEventListener('mousemove', addJivochat);\n window.removeEventListener('scroll', addJivochat);\n }\n window.addEventListener('mousemove', addJivochat);\n window.addEventListener('scroll', addJivochat);\n });\n },\n\n init: function () {\n template_store.fixTrustvoxImgs();\n template_store.setMenuMobile();\n template_store.trocaImagemProduto();\n template_store.setCarrosselProdutos();\n template_store.setBacktop();\n template_store.setHeaderAttrMobile();\n template_store.setFooterTrustvoxSeal();\n template_store.headerCart.loadCart();\n store.updateCartCount(store.getCartCount())\n\n // COMPONENTS\n // Zendesk();\n RDStation();\n widgetWhatsapp();\n\n // ENVIO DE FORMULÁRIOS\n Webforms.init();\n\n if ($(window).width() > 767) {\n $(window).scroll(function (event) {\n if ($(window).scrollTop() > 147) {\n $(\"header.floating-top\").addClass(\"open\");\n } else {\n $(\"header.floating-top\").removeClass(\"open\");\n }\n });\n }\n\n var swiper = new Swiper($(\".atributos\").find(\".swiper-container\"), {\n slidesPerView: 2,\n spaceBetween: 0,\n autoplay: {\n delay: 3000,\n },\n navigation: {\n nextEl: $(\".atributos\").find(\".swiper-button-next\"),\n prevEl: $(\".atributos\").find(\".swiper-button-prev\"),\n disabledClass: \"-disabled\",\n },\n });\n\n $(\".submenu [data-image]\").mouseenter(function () {\n var imagem = $(this).data(\"image\");\n //console.log(imagem)\n\n $(this).closest(\".submenu\").find(\".image img\").attr(\"src\", imagem);\n });\n\n },\n};\n\n$(function () {\n window.template_store.init();\n\n if (page == \"home\" || window.location.pathname == '/p/debug') {\n template_store.home.init();\n }\n\n if (page == \"product\") {\n template_store.product.init();\n }\n\n if (page == \"tag\") {\n template_store.tag.init();\n }\n\n if (page == \"login\") {\n template_store.login.init();\n }\n\n if (page == \"page\") {\n template_store.page.init();\n }\n});\n\n$(window).on(\"load\", function () {\n $(\"body\").removeClass(\"window-loading\");\n});\n\nconsole.log(\n \"%cVnda - Tecnologia em Ecommerce\",\n 'color: #f88d5b; font-size: 15px; font-family: \"Verdana\", sans-serif; font-weight: bold;'\n);\n"],"names":[],"sourceRoot":""}