{"version":3,"file":"store.js","mappings":";;;;AAAA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,EAAE;AAC7B;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,0CAA0C,QAAQ;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;ACjFsH;;AAEtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,kBAAkB,iBAAiB;AACnC,WAAW;;AAEX;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb,YAAY;AACZ;AACA;;AAEA,+CAA+C,oBAAoB,IAAI,sBAAsB,IAAI,aAAa,GAAG,cAAc;;AAE/H;;AAEA;AACA;AACA,8CAA8C,WAAW;;AAEzD;AACA;AACA;AACA,sCAAsC,YAAY;AAClD,uCAAuC,MAAM;AAC7C;AACA,wCAAwC,mBAAmB;AAC3D;AACA;AACA,aAAa;;AAEb;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,4CAA4C,IAAI;;AAEhD;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,wBAAwB,qBAAqB;AAC7C,SAAS;AACT,QAAQ;AACR;AACA;;AAEA;;AAEA,MAAM;AACN;AACA;AACA;AACA,GAAG;;;AAGH;AACA;AACA,0BAA0B,mBAAmB;AAC7C;;AAEA,+DAA+D,sBAAsB;;AAErF,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,IAAI,KAAK,IAAI;AACnC;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;;AAEA,+CAAe,QAAQ,EAAC;;;AC9LsB;AAC9C;AACA;AACA;AACA;AACA;AACA,IAAI,QAAQ;AACZ;AACA;AACA;AACA,kDAAe,WAAW;;ACVyB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,EAAE;AAC/B;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA,aAAa;AACb,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,4CAA4C,QAAQ;AACpD;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA,QAAQ;AACR;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uBAAuB;AAC5C;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,QAAQ;AAC9C;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,SAAS;AACT;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,kCAAkC;AAClC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,yBAAyB,uBAAuB;AAChD,WAAW;AACX;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,QAAQ;AACR;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX,SAAS;AACT,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX,SAAS;AACT,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,uBAAuB,YAAY,SAAS;AAC5E;AACA,wCAAwC,uBAAuB,YAAY,SAAS;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,WAAW;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,kBAAkB;AACtE,sDAAsD,kBAAkB;AACxE,SAAS;AACT;AACA;AACA;AACA,oDAAoD,kBAAkB;AACtE,sDAAsD,kBAAkB;AACxE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,oDAAoD,kBAAkB;AACtE,uDAAuD,kBAAkB;AACzE,SAAS;AACT;AACA;AACA;AACA,oDAAoD,kBAAkB;AACtE,uDAAuD,kBAAkB;AACzE,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA,4CAA4C,kBAAkB;AAC9D,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kBAAkB;AACzC;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,mBAAmB,iBAAiB,oCAAoC,kBAAkB;AAC1F","sources":["webpack://build/../bolovo2/assets/javascripts/components/utilities.js","webpack://build/../bolovo2/assets/javascripts/components/shipping.js","webpack://build/../bolovo2/assets/javascripts/components/checkProdCD.js","webpack://build/../bolovo2/assets/javascripts/store.js"],"sourcesContent":["// ===============================================================\r\n// FORMAT MONEY\r\n// ===============================================================\r\nexport function formatMoney(value) {\r\n // FORMATA UM VALOR\r\n return (\r\n 'R$ ' +\r\n value\r\n .toFixed(2)\r\n .replace('.', ',')\r\n .replace(/(\\d)(?=(\\d{3})+\\,)/g, '$1.')\r\n );\r\n}\r\n\r\n// ===============================================================\r\n// URL ENCODE FORM DATA\r\n// ===============================================================\r\nexport function urlencodeFormData(formData) {\r\n let string = '';\r\n\r\n function encode(s) {\r\n return encodeURIComponent(s).replace(/%20/g, '+');\r\n }\r\n\r\n for (const pair of formData.entries()) {\r\n if (typeof pair[1] == 'string') {\r\n string += (string ? '&' : '') + encode(pair[0]) + '=' + encode(pair[1]);\r\n }\r\n }\r\n return string;\r\n}\r\n\r\n// ===============================================================\r\n// VALIDATE FORM PRODUCT\r\n// ===============================================================\r\nexport function validateFormProduct(_$form){\r\n // VALIDA O FORM DE PRODUTO PARA VER SE O PRODUTO PODE SER ADICIONADO\r\n var $parent = _$form.closest(\"[data-box-produto]\");\r\n var $btnComprar = _$form.find('[data-action=\"add-cart\"]');\r\n var validated = true;\r\n var errorsTxt = [];\r\n\r\n console.log($btnComprar.data(\"available\"));\r\n\r\n // verifica se o sku foi selecionado\r\n if (_$form.find('[name=\"sku\"]').val() == \"\") {\r\n validated = false;\r\n errorsTxt.push(\"Selecione um atributo para o produto\");\r\n }\r\n\r\n // verifica se a quantidade é válida\r\n console.log(_$form.find('input[name=\"quantity\"]').val());\r\n if (_$form.find('input[name=\"quantity\"]').val() <= 0) {\r\n console.log(\"qtd invalida\");\r\n validated = false;\r\n errorsTxt.push(\"Quantidade indisponível\");\r\n }\r\n\r\n return { validated: validated, errors: errorsTxt };\r\n}\r\n\r\n// ===============================================================\r\n// SET RESP VALIDATE PRODUCT\r\n// ===============================================================\r\nexport function setRespValidateProduct(_resp, _$form, _$boxResponse){\r\n // var $boxResult = _$form.find('.resp-validate');\r\n var $boxResult = _$boxResponse;\r\n var htmlErrors = \"\";\r\n\r\n if (_resp.validated) {\r\n $boxResult.empty();\r\n } else {\r\n for (var i = _resp.errors.length - 1; i >= 0; i--) {\r\n htmlErrors += '' + _resp.errors[i] + \"\";\r\n }\r\n\r\n $boxResult.html(htmlErrors);\r\n setTimeout(function () {\r\n $boxResult.html(\"\");\r\n }, 4000);\r\n }\r\n}","import { formatMoney, urlencodeFormData, validateFormProduct, setRespValidateProduct } from '../components/utilities';\n\nconst Shipping = {\n handleShipping: async function (form) {\n const sku = document.querySelector('[data-section-product] [name=\"sku\"]').value;\n const quantity = document.querySelector(\n '[data-section-product] [name=\"quantity\"]'\n ).value;\n const zip = form.querySelector('.input').value.replace('-', '');\n const buttonSubmit = form.querySelector('.action');\n\n if (zip.length != 8) {\n form.classList.add('error');\n form.querySelector('.msg-error').classList.add('-visible');\n form.querySelector('.msg-error').innerHTML = 'Formato de CEP inválido';\n } else {\n const formData = new FormData();\n\n formData.set('sku', sku);\n formData.set('quantity', quantity);\n formData.set('zip', zip);\n\n if (!form.classList.contains('-sending')) {\n form.classList.remove('-error');\n form.classList.add('-sending');\n buttonSubmit.classList.add('-sending');\n\n try {\n const response = await fetch('/frete_produto', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: urlencodeFormData(formData),\n });\n\n const data = await response.json();\n\n if (data.error) {\n console.error('Ocorreu um erro ao consultar o frete');\n console.error(data.error);\n\n form.classList.add('error');\n form.querySelector('.msg-error').classList.add('-visible');\n form.querySelector('.msg-error').innerHTML =\n 'Ocorreu um erro ao calcular o frete, favor verifique seu cep.';\n\n setTimeout(function () {\n form.classList.remove('-error');\n form.querySelector('.msg-error').classList.remove('-visible');\n buttonSubmit.classList.remove('-sending');\n }, 3500);\n } else {\n const methods = JSON.parse(data.methods);\n const address = data.address_details;\n\n let result = `
${method.name}
\n${price}
\nCEP Invalido
`;\n outputWrapper.innerHTML = html;\n\n return; \n } \n\n if(location.toLowerCase() === 'pinheiros'){\n console.log('inventories: ', variantSelected[0].inventories);\n\n if(variantSelected[0].inventories.length > 0){\n const inventories = variantSelected[0].inventories;\n\n inventories.forEach(inventory => {\n html += `${inventory.place.name}: Pronta entrega, 2 dia uteis
`;\n })\n } else {\n html = `Indisponivel nos estoques
`;\n }\n\n outputWrapper.innerHTML = html;\n\n } else {\n html = `Indisponivel nos estoques (Pinheiros)
`;\n outputWrapper.innerHTML = html;\n }\n },\n\n\n handleLocation: function (location, form, $form){\n \n const respValidated = validateFormProduct($form);\n const $boxResponse = $('.product-wrap').find(\".resp-validate\");\n\n respValidated.validated ? Shipping.setResponse(location) : setRespValidateProduct(respValidated, $form, $boxResponse)\n\n },\n\n init: function () {\n const _this = this;\n const form = document.querySelector('[name=\"shipping-form\"]');\n\n if (form) {\n const $form = $('[data-form-product]');\n const inputValue = form.querySelector('.input');\n \n // Limpa os dados do campo de input\n inputValue.addEventListener('input', (event) => {\n const x = event.target.value\n .replace(/\\D/g, '')\n .match(/(\\d{0,5})(\\d{0,3})/);\n event.target.value = !x[2] ? x[1] : x[1] + '-' + x[2];\n });\n \n // Listener de submit do campo\n form.addEventListener('submit', async function(event){\n event.preventDefault();\n \n const location = await Shipping.checkPostCode(form);\n \n console.log('location: ', location);\n \n // Chamada para verificar o CD\n Shipping.handleLocation(location, form, $form);\n \n // Chamada comum para verificação do Frete\n // _this.handleShipping(form);\n });\n }\n },\n};\n\nexport default Shipping;\n","import Shipping from '../components/shipping';\r\n\r\nconst CheckProdCD = {\r\n init: function() {\r\n console.log('Check Prod CD called');\r\n\r\n Shipping.init();\r\n }\r\n}\r\n\r\nexport default CheckProdCD;","import CheckProdCD from \"./components/checkProdCD\";\r\n\r\nvar $window = $(window);\r\nvar $body = $(\"body\");\r\nvar $header = $(\"#header\");\r\nvar $wrapper = $(\"#wrapper\");\r\nvar spaceToHeaderFixed;\r\nvar language = $(\"html\").attr(\"lang\");\r\nvar timeTransitionDefault = 350;\r\nvar texts = [];\r\nwindow.page = $body.data(\"page\");\r\n\r\ntexts[\"pt-BR\"] = {\r\n quantity: \"quantidade\",\r\n price: \"preço\",\r\n cart_empty: \"O seu carrinho está vazio\",\r\n go_product: \"Ir para a página do produto\",\r\n btn_edit_cart: \"Editar pedido\",\r\n btn_checkout: \"Finalizar pedido\",\r\n btn_success: \"Adicionado!\",\r\n errorsTxt: {\r\n withoutSku: \"Selecione um atributo para o produto\",\r\n },\r\n};\r\n\r\ntexts[\"en\"] = {\r\n quantity: \"quantity\",\r\n price: \"price\",\r\n cart_empty: \"Cart is empty...\",\r\n go_product: \"Go to product page\",\r\n btn_edit_cart: \"Edit order\",\r\n btn_checkout: \"Finish order\",\r\n btn_success: \"Added!\",\r\n errorsTxt: {\r\n withoutSku: \"Select an attribute for the product\",\r\n },\r\n};\r\n\r\nfunction getText(key, subKey) {\r\n if (typeof subKey == \"undefined\") {\r\n return texts[language][key];\r\n } else {\r\n return texts[language][key][subKey];\r\n }\r\n}\r\n\r\nwindow.store = {\r\n config: {\r\n // Seletor do botão de comprar\r\n selectorBtnBuy: '[data-action=\"add-cart\"]',\r\n selectorBtnBuyAssinatura: '[data-action=\"add-cart-assinatura\"]',\r\n // Seletor do elemento que engloba um produto\r\n selectorWrapperProduct: \"[data-box-produto]\",\r\n selectorWrapperProductAssinatura: \"[data-box-produto-assinatura]\",\r\n selectorFormProduct: \"[data-form-product]\",\r\n selectorFormProductAssinatura: \"[data-form-product-assinatura]\",\r\n // Se a store tem versão internacional ou não\r\n hasInternacionalVersion: false,\r\n errorsTxt: {\r\n withoutSku: getText(\"errorsTxt\", \"withoutSku\"),\r\n },\r\n // configuração de comportamento ao add um produto\r\n addToCartOpenCartpopup: true,\r\n addToCartOpenCartpopupMobile: true,\r\n cartCount: {\r\n selector: \"[data-cart-count]\",\r\n attr: \"[data-cart-count-attr]\",\r\n text: \"[data-cart-item-text]\",\r\n },\r\n priceProds: {\r\n selector: \"[data-update-price]\",\r\n attr: \"update-price\",\r\n },\r\n },\r\n formatMoney: function (value) {\r\n // FORMATA UM VALOR\r\n return (\r\n \"R$ \" +\r\n value\r\n .toFixed(2)\r\n .replace(\".\", \",\")\r\n .replace(/(\\d)(?=(\\d{3})+\\,)/g, \"$1.\")\r\n );\r\n },\r\n validateQuantity: function (_val) {\r\n // VALIDA SE A QUANTIDADE INFORMADA É UM NÚMERO\r\n if (!isNaN(_val)) {\r\n if (parseInt(_val) > 0) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n },\r\n getClearNumber: function (_val) {\r\n // RETORNA UM NÚMERO LIMPO COMO INT\r\n if (!isNaN(_val)) {\r\n clearNumber = parseInt(_val);\r\n\r\n return clearNumber;\r\n }\r\n\r\n return false;\r\n },\r\n validateFormProduct: function (_$form) {\r\n // VALIDA O FORM DE PRODUTO PARA VER SE O PRODUTO PODE SER ADICIONADO\r\n var $parent = _$form.closest(\"[data-box-produto]\");\r\n var $btnComprar = _$form.find('[data-action=\"add-cart\"]');\r\n var validated = true;\r\n var errorsTxt = [];\r\n\r\n console.log($btnComprar.data(\"available\"));\r\n\r\n // verifica se o sku foi selecionado\r\n if (_$form.find('[name=\"sku\"]').val() == \"\") {\r\n validated = false;\r\n errorsTxt.push(\"Selecione um atributo para o produto\");\r\n }\r\n\r\n // verifica se a quantidade é válida\r\n console.log(_$form.find('input[name=\"quantity\"]').val());\r\n if (_$form.find('input[name=\"quantity\"]').val() <= 0) {\r\n console.log(\"qtd invalida\");\r\n validated = false;\r\n errorsTxt.push(\"Quantidade indisponível\");\r\n }\r\n\r\n return { validated: validated, errors: errorsTxt };\r\n },\r\n setRespValidateProduct: function (_resp, _$form, _$boxResponse) {\r\n // var $boxResult = _$form.find('.resp-validate');\r\n var $boxResult = _$boxResponse;\r\n var htmlErrors = \"\";\r\n\r\n if (_resp.validated) {\r\n $boxResult.empty();\r\n } else {\r\n for (var i = _resp.errors.length - 1; i >= 0; i--) {\r\n htmlErrors += '' + _resp.errors[i] + \"\";\r\n }\r\n\r\n $boxResult.html(htmlErrors);\r\n setTimeout(function () {\r\n $boxResult.html(\"\");\r\n }, 4000);\r\n }\r\n },\r\n addItemResultDefault: function (_$form, _typeResult, _result, _$boxResponse) {\r\n var _this = this;\r\n if (_typeResult == \"produto-adicionado\") {\r\n var $btnComprar = _$form.find(_this.config.selectorBtnBuy);\r\n\r\n $btnComprar.addClass(\"success\").html(\"Produto adicionado!\");\r\n\r\n setTimeout(function () {\r\n // _$form.find('.msg-response').slideUp(350);\r\n $btnComprar\r\n .removeClass(\"success\")\r\n .html($btnComprar.data(\"text-available\"));\r\n }, 3500);\r\n\r\n setTimeout(function () {\r\n window.location.href = urlCart;\r\n }, 150);\r\n } else if (_typeResult == \"erro-adicionar\") {\r\n var errorText = JSON.parse(_result.responseText);\r\n\r\n if (typeof _$boxResponse != \"undefined\" && _$boxResponse.length > 0) {\r\n console.info(errorText);\r\n\r\n _$boxResponse.addClass(\"error\");\r\n _$boxResponse.removeClass(\"success\");\r\n\r\n _$boxResponse.find(\"span\").html(errorText.error);\r\n _$boxResponse.slideDown(350);\r\n\r\n setTimeout(function () {\r\n _$boxResponse.slideUp(350);\r\n }, 3500);\r\n }\r\n }\r\n },\r\n addItemResultDefaultAssinatura: function (\r\n _$form,\r\n _typeResult,\r\n _result,\r\n _$boxResponse\r\n ) {\r\n var _this = this;\r\n if (_typeResult == \"produto-adicionado\") {\r\n var $btnComprar = _$form.find(_this.config.selectorBtnBuyAssinatura);\r\n\r\n $btnComprar.addClass(\"success\").html(\"Adicionado!\");\r\n\r\n setTimeout(function () {\r\n // _$form.find('.msg-response').slideUp(350);\r\n $btnComprar\r\n .removeClass(\"success\")\r\n .html($btnComprar.data(\"text-available\"));\r\n }, 3500);\r\n\r\n setTimeout(function () {\r\n window.location.href = urlAssinaturaCart;\r\n }, 150);\r\n } else if (_typeResult == \"erro-adicionar\") {\r\n if (typeof _result == \"object\") {\r\n var errorText = _result;\r\n } else {\r\n var errorText = JSON.parse(_result);\r\n }\r\n\r\n if (typeof _$boxResponse != \"undefined\" && _$boxResponse.length > 0) {\r\n console.info(errorText);\r\n\r\n _$boxResponse.addClass(\"error\");\r\n _$boxResponse.removeClass(\"success\");\r\n\r\n _$boxResponse.find(\"span\").html(errorText.error);\r\n _$boxResponse.slideDown(350);\r\n }\r\n }\r\n },\r\n addItem: function (_$form, _$parent, addItemResult) {\r\n var _this = this;\r\n var $btnComprar = _$parent.find('[data-action=\"add-cart\"]');\r\n var urlAdd = \"/carrinho/adicionar\";\r\n var urlUpdate = \"/carrinho\";\r\n var url = urlAdd;\r\n var form = _$form.serialize();\r\n var $boxResponse = _$parent.find(\r\n \"[data-form-product] .msg-response:not(.resp-validate)\"\r\n );\r\n\r\n console.info(\"addItem\");\r\n console.info(\"addItem\", _$form.serializeArray());\r\n\r\n if (!$btnComprar.hasClass(\"adding\")) {\r\n $.ajax({\r\n url: url,\r\n type: \"POST\",\r\n dataType: \"json\",\r\n data: form,\r\n beforeSend: function () {\r\n $btnComprar.addClass(\"adding\");\r\n },\r\n })\r\n .done(function (resp) {\r\n console.log(\"success\");\r\n console.info(resp);\r\n\r\n if (typeof template_store.addItemResult == \"function\") {\r\n template_store.addItemResult(\r\n _$form,\r\n \"produto-adicionado\",\r\n resp,\r\n $boxResponse\r\n );\r\n } else {\r\n template_store.addItemResultDefault(\r\n _$form,\r\n \"produto-adicionado\",\r\n resp,\r\n $boxResponse\r\n );\r\n }\r\n })\r\n .fail(function (resp) {\r\n console.log(\"error\");\r\n console.error(resp);\r\n console.error(resp.responseText);\r\n console.error(resp.responseText.error);\r\n\r\n if (typeof template_store.addItemResult == \"function\") {\r\n template_store.addItemResult(\r\n _$form,\r\n \"erro-adicionar\",\r\n resp,\r\n $boxResponse\r\n );\r\n } else {\r\n template_store.addItemResultDefault(\r\n _$form,\r\n \"erro-adicionar\",\r\n resp,\r\n $boxResponse\r\n );\r\n }\r\n })\r\n .always(function () {\r\n $btnComprar.removeClass(\"adding\");\r\n });\r\n }\r\n },\r\n addItemAssinatura: function (_$form, _$parent, addItemResult) {\r\n var _this = this;\r\n var $btnComprar = _$parent.find(store.config.selectorBtnBuyAssinatura);\r\n var url = urlAssinaturaCartAdd;\r\n var form = _$form.serialize();\r\n var $boxResponse = _$parent.find(\r\n store.config.selectorFormProductAssinatura +\r\n \" .msg-response:not(.resp-validate)\"\r\n );\r\n var data = {};\r\n\r\n data.subscription_item = {\r\n quantity: _$form.find('[name=\"quantity\"]').val(),\r\n sku: _$form.find('[name=\"sku\"]').val(),\r\n extra: {\r\n vindi_plan_id: _$form.find('[name=\"extra[vindi_plan_id]\"]').val(),\r\n },\r\n };\r\n\r\n console.info(\"addItemAssinatura\");\r\n console.info(\"addItemAssinatura\", data);\r\n console.info(\"addItemAssinatura\", JSON.stringify(data));\r\n\r\n if (!$btnComprar.hasClass(\"adding\")) {\r\n $.ajax({\r\n url: url,\r\n type: \"POST\",\r\n // dataType: 'json',\r\n contentType: \"application/json\",\r\n data: JSON.stringify(data),\r\n xhrFields: { withCredentials: true },\r\n beforeSend: function () {\r\n $btnComprar.addClass(\"adding\");\r\n },\r\n })\r\n .done(function (resp) {\r\n console.log(\"success\");\r\n console.info(resp);\r\n\r\n if (typeof template_store.addItemResult == \"function\") {\r\n template_store.addItemResult(\r\n _$form,\r\n \"produto-adicionado\",\r\n resp,\r\n $boxResponse\r\n );\r\n } else {\r\n template_store.addItemResultDefaultAssinatura(\r\n _$form,\r\n \"produto-adicionado\",\r\n resp,\r\n $boxResponse\r\n );\r\n }\r\n })\r\n .fail(function (xhr, status, error) {\r\n console.log(\"error\");\r\n console.error(xhr);\r\n console.error(status);\r\n console.error(error);\r\n\r\n var resp = {\r\n error:\r\n \"Houve um problema ao adicionar. Tente mais tarde ou entre em contato.\",\r\n };\r\n\r\n if (typeof template_store.addItemResult == \"function\") {\r\n template_store.addItemResult(\r\n _$form,\r\n \"erro-adicionar\",\r\n resp,\r\n $boxResponse\r\n );\r\n } else {\r\n template_store.addItemResultDefaultAssinatura(\r\n _$form,\r\n \"erro-adicionar\",\r\n resp,\r\n $boxResponse\r\n );\r\n }\r\n })\r\n .always(function () {\r\n $btnComprar.removeClass(\"adding\");\r\n });\r\n }\r\n },\r\n deleteItem: function (_itemId, _$item, removeItemResult) {\r\n var _this = this;\r\n\r\n if (!_$item.hasClass(\"removing\")) {\r\n $.ajax({\r\n url: \"/carrinho\",\r\n type: \"POST\",\r\n dataType: \"json\",\r\n data: {\r\n _method: \"delete\",\r\n item_id: _itemId,\r\n },\r\n beforeSend: function () {\r\n _$item.addClass(\"removing\");\r\n },\r\n })\r\n .done(function (_cart) {\r\n console.log(\"success\");\r\n\r\n if ($body.width() > 768) {\r\n if (store.config.addToCartOpenCartpopup) {\r\n template_store.headerCart.loadCart(_cart);\r\n // template_store.headerCart.hide();\r\n }\r\n } else {\r\n if (store.config.addToCartOpenCartpopupMobile) {\r\n template_store.headerCart.loadCart(_cart);\r\n // template_store.headerCart.hide();\r\n }\r\n }\r\n\r\n if (typeof removeItemResult == \"function\") {\r\n removeItemResult(_$item, _cart);\r\n }\r\n })\r\n .fail(function (error) {\r\n console.log(\"erro ao remover\", error.responseText);\r\n })\r\n .always(function () {\r\n _$item.removeClass(\"removing\");\r\n });\r\n }\r\n },\r\n setMsgResponse: function (_msg, _type, _$parent) {\r\n /*\r\n O tipo pode conter um dos 3 valores: success, warning, error ou CLEAR.\r\n O type CLEAR limpa as mensagens e faz sumir a mensagem\r\n */\r\n\r\n // Verifica se não há mais de uma mensagem\r\n // caso tenha, gera um html para cada mensagem\r\n if (Array.isArray(_msg)) {\r\n var msgArr = _msg;\r\n _msg = \"\";\r\n for (var i = msgArr.length - 1; i >= 0; i--) {\r\n _msg += '' + msgArr[i] + \"\";\r\n }\r\n }\r\n\r\n _$parent\r\n .find(\"[data-msg-retorno]\")\r\n .removeClass(\"success\")\r\n .removeClass(\"warning\")\r\n .removeClass(\"error\");\r\n\r\n _$parent.find(\"[data-msg-retorno] [data-msg]\").empty();\r\n\r\n if (_type != \"clear\") {\r\n _$parent.find(\"[data-msg-retorno]\").addClass(_type);\r\n _$parent.find(\"[data-msg-retorno] [data-msg]\").html(_msg);\r\n }\r\n },\r\n updateCartCount: function (_itemsCount) {\r\n var _this = this;\r\n\r\n // $(_this.cartCount.selector).empty().text(_itemsCount);\r\n\r\n $(_this.config.cartCount.attr).data(\"cart-count-attr\", _itemsCount);\r\n $(_this.config.cartCount.attr).attr(\"data-cart-count-attr\", _itemsCount);\r\n\r\n $(_this.config.cartCount.attr).html(_itemsCount);\r\n $(_this.config.cartCount.text).html(_itemsCount);\r\n $(_this.config.cartCount.textLabel).html(\r\n _itemsCount > 1 ? \"itens\" : \"item\"\r\n );\r\n\r\n if (_itemsCount > 0) {\r\n $(\"[data-cart-body]\").parent().addClass(\"active\");\r\n } else {\r\n $(\"[data-cart-body]\").parent().removeClass(\"active\");\r\n }\r\n },\r\n getCartCount: function () {\r\n async function getCartItens() {\r\n let itens;\r\n\r\n try {\r\n itens = await $.ajax({\r\n url: \"/carrinho/itens\",\r\n type: \"GET\",\r\n dataType: \"text\",\r\n });\r\n\r\n return itens;\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n\r\n if ($(store.config.cartCount.selector).length > 0) {\r\n getCartItens().then((total) => {\r\n var itens = Number.isInteger(parseInt(total));\r\n if (itens) {\r\n $(store.config.cartCount.attr).attr(\"data-cart-count-attr\", total);\r\n $(store.config.cartCount.selector).html(total);\r\n\r\n var $boxCart = $(\"[data-cart-body]\");\r\n\r\n if ($boxCart.length > 0) {\r\n if (total > 0) {\r\n template_store.headerCart.loadCart();\r\n } else {\r\n $boxCart.html(`R$ 000
`);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n },\r\n getPriceProd: function () {\r\n var selector = store.config.priceProds.selector;\r\n var attr = store.config.priceProds.attr;\r\n\r\n if ($(selector).length > 0) {\r\n $(selector).each(function (index, value) {\r\n var $this = $(this);\r\n var prodId = $(this).data(attr);\r\n var url = \"/produto/preco/\" + prodId;\r\n\r\n if (prodId != \"\" && prodId != null) {\r\n $.ajax({\r\n url: url,\r\n type: \"GET\",\r\n })\r\n .done(function (resp) {\r\n console.log(\"success\");\r\n // console.info(resp);\r\n $this.html(resp);\r\n })\r\n .fail(function (resp) {\r\n console.log(\"error\");\r\n console.error(resp);\r\n console.error(resp.responseText);\r\n console.error(resp.responseText.error);\r\n })\r\n .always(function () {\r\n });\r\n }\r\n });\r\n }\r\n },\r\n submitForm: function (_$form) {\r\n _$form.find('[name=\"reply_to\"]').val(_$form.find('[name=\"email\"]').val());\r\n\r\n if (!_$form.hasClass(\"sending\")) {\r\n $.ajax({\r\n url: \"/webform\",\r\n type: \"POST\",\r\n data: _$form.serialize(),\r\n beforeSend: function () {\r\n _$form.addClass(\"sending\");\r\n },\r\n })\r\n .done(function () {\r\n // console.info('foi');\r\n // store.setMsgResponse('Mensagem enviada com sucesso!', 'success', _$form);\r\n _$form\r\n .find(\"[data-msg-retorno] [data-msg-success]\")\r\n .addClass(\"visible\");\r\n _$form\r\n .find(\"[data-msg-retorno] [data-msg-error]\")\r\n .removeClass(\"visible\");\r\n _$form.find(\"button[type=submit]\").text(\"Enviado\");\r\n\r\n setTimeout(function () {\r\n _$form.find(\"button[type=submit]\").text(\"Enviar\");\r\n }, 3500);\r\n _$form[0].reset();\r\n })\r\n .fail(function () {\r\n // console.info('foi, mas deu ruim');\r\n _$form\r\n .find(\"[data-msg-retorno] [data-msg-success]\")\r\n .removeClass(\"visible\");\r\n _$form\r\n .find(\"[data-msg-retorno] [data-msg-error]\")\r\n .addClass(\"visible\");\r\n _$form.find(\"button[type=submit]\").text(\"Falha ao enviar\");\r\n setTimeout(function () {\r\n _$form.find(\"button[type=submit]\").text(\"Enviar\");\r\n }, 3500);\r\n // store.setMsgResponse('Houve um problema ao enviar sua mensagem, tente novamente! Ou entre em contato conosco pelo telefone (21) 99644-6925 ', 'error', $form);\r\n })\r\n .always(function () {\r\n _$form.removeClass(\"sending\");\r\n });\r\n }\r\n },\r\n login: {\r\n validateLogin: function (_$form) {\r\n var validated = true;\r\n var errorsTxt = [];\r\n\r\n if (_$form.find('[name=\"email\"]').val() == \"\") {\r\n validated = false;\r\n errorsTxt.push(\"Informe seu email!\");\r\n }\r\n\r\n if (_$form.find('[name=\"password\"]').val() == \"\") {\r\n validated = false;\r\n errorsTxt.push(\"Informe a senha!\");\r\n }\r\n\r\n return { validated: validated, errors: errorsTxt };\r\n },\r\n validateRegister: function (_$form) {\r\n var validated = true;\r\n var errorsTxt = [];\r\n\r\n if (_$form.find('[name=\"email\"]').val() == \"\") {\r\n validated = false;\r\n errorsTxt.push(\"Informe seu email!\");\r\n }\r\n\r\n if (_$form.find('[name=\"password\"]').val() == \"\") {\r\n validated = false;\r\n errorsTxt.push(\"Informe uma senha!\");\r\n }\r\n\r\n if (_$form.find('[name=\"password\"]').val() != \"\") {\r\n var pass = _$form.find('[name=\"password\"]').val();\r\n var confirmationPass = _$form\r\n .find('[name=\"password_confirmation\"]')\r\n .val();\r\n\r\n if (pass != confirmationPass) {\r\n validated = false;\r\n errorsTxt.push(\"Senha e confirmação são diferentes!\");\r\n }\r\n }\r\n\r\n return { validated: validated, errors: errorsTxt };\r\n },\r\n validateRecover: function (_$form) {\r\n var validated = true;\r\n var errorsTxt = [];\r\n\r\n if (_$form.find('[name=\"email\"]').val() == \"\") {\r\n validated = false;\r\n errorsTxt.push(\"Informe seu email!\");\r\n }\r\n\r\n return { validated: validated, errors: errorsTxt };\r\n },\r\n logar: function (_$form) {\r\n if (!_$form.hasClass(\"sending\")) {\r\n $.ajax({\r\n url: \"/entrar\",\r\n type: \"POST\",\r\n dataType: \"json\",\r\n data: _$form.serialize(),\r\n beforeSend: function () {\r\n _$form.addClass(\"sending\");\r\n },\r\n })\r\n .done(function (resp) {\r\n console.log(\"success\", resp);\r\n\r\n if (resp.error) {\r\n store.setMsgResponse(resp.error, \"error\", _$form);\r\n }\r\n\r\n if (resp.client) {\r\n window.location.href = resp.redirect_to;\r\n }\r\n })\r\n .fail(function (resp) {\r\n console.error(\"error\", error.responseText);\r\n })\r\n .always(function () {\r\n _$form.removeClass(\"sending\");\r\n });\r\n }\r\n },\r\n recoverPassord: function (_$form) {\r\n if (!_$form.hasClass(\"sending\")) {\r\n $.ajax({\r\n url: \"/recuperar_senha\",\r\n type: \"POST\",\r\n dataType: \"json\",\r\n data: _$form.serialize(),\r\n beforeSend: function () {\r\n _$form.addClass(\"sending\");\r\n },\r\n })\r\n .done(function (resp) {\r\n console.log(\"success\", resp);\r\n\r\n if (resp.error) {\r\n store.setMsgResponse(resp.error, \"error\", _$form);\r\n }\r\n\r\n if (resp.ok) {\r\n store.setMsgResponse(resp.ok, \"success\", _$form);\r\n }\r\n\r\n /*if (resp.client) {\r\n window.location.href = resp.redirect_to;\r\n }*/\r\n })\r\n .fail(function (resp) {\r\n console.error(\"error\", error.responseText);\r\n })\r\n .always(function () {\r\n _$form.removeClass(\"sending\");\r\n });\r\n }\r\n },\r\n },\r\n};\r\n\r\nwindow.template_store = {\r\n /* \r\n Manda um ajax para o form de avise-me e também para um form da plataforma para o cliente receber um email\r\n */\r\n submitFormNotify: function (_$form) {\r\n var formData = _$form.serialize();\r\n\r\n if (!_$form.hasClass(\"sending\")) {\r\n $.ajax({\r\n url: _$form.attr(\"action\"),\r\n type: \"post\",\r\n dataType: \"json\",\r\n data: formData,\r\n beforeSend: function () {\r\n _$form.addClass(\"sending\");\r\n },\r\n })\r\n .done(function (resp) {\r\n console.log(\"success\");\r\n console.info(resp);\r\n\r\n var msgSuccess =\r\n \"Você receberá um e-mail quando o produto estiver disponível\";\r\n\r\n // Envia um email para o cliente saber que o usuário solicitou o avise-me\r\n $.ajax({\r\n url: \"/webform\",\r\n type: \"POST\",\r\n data: {\r\n key: _$form.find('[name=\"key\"]').val(),\r\n reply_to: _$form.find('[name=\"email\"]').val(),\r\n email: _$form.find('[name=\"email\"]').val(),\r\n product_name: _$form.find('[name=\"nome\"]').val(),\r\n referencia: _$form.find('[name=\"referencia\"]').val(),\r\n sku: _$form.find('[name=\"sku\"]').val(),\r\n },\r\n })\r\n .done(function (resp) {\r\n _$form\r\n .find(\"[data-msg-retorno] [data-msg-success]\")\r\n .addClass(\"visible\");\r\n _$form\r\n .find(\"[data-msg-retorno] [data-msg-error]\")\r\n .removeClass(\"visible\");\r\n\r\n _$form[0].reset();\r\n })\r\n .fail(function (error) {\r\n _$form\r\n .find(\"[data-msg-retorno] [data-msg-success]\")\r\n .removeClass(\"visible\");\r\n _$form\r\n .find(\"[data-msg-retorno] [data-msg-error]\")\r\n .addClass(\"visible\");\r\n })\r\n .always(function () {});\r\n })\r\n .fail(function (resp) {\r\n console.log(\"error\");\r\n console.error(resp);\r\n console.error(resp.responseText);\r\n console.error(resp.responseText.error);\r\n\r\n var errorText = JSON.parse(resp.responseText);\r\n console.info(errorText);\r\n\r\n _$form\r\n .find(\"[data-msg-retorno] [data-msg-error]\")\r\n .html(errorText.error);\r\n _$form\r\n .find(\"[data-msg-retorno] [data-msg-success]\")\r\n .removeClass(\"visible\");\r\n _$form\r\n .find(\"[data-msg-retorno] [data-msg-error]\")\r\n .addClass(\"visible\");\r\n })\r\n .always(function () {\r\n _$form.removeClass(\"sending\");\r\n });\r\n }\r\n },\r\n /* \r\n Função que executa o comportamento de quando o produto é adicionado no carrinho\r\n */\r\n addItemResult: function (_$form, _typeResult, _result, _$boxResponse) {\r\n var _this;\r\n\r\n if (_typeResult == \"produto-adicionado\") {\r\n var $btnComprar = _$form.find(store.config.selectorBtnBuy);\r\n\r\n $btnComprar.addClass(\"success\").html(getText(language));\r\n\r\n setTimeout(function () {\r\n // _$form.find('.msg-response').slideUp(350);\r\n $btnComprar\r\n .removeClass(\"success\")\r\n .html($btnComprar.data(\"text-available\"));\r\n }, 3500);\r\n\r\n if ($body.width() > 768) {\r\n if (store.config.addToCartOpenCartpopup) {\r\n template_store.headerCart.loadCart(_result);\r\n template_store.headerCart.show();\r\n } else {\r\n setTimeout(function () {\r\n window.location.href = urlCart;\r\n }, 150);\r\n }\r\n } else {\r\n if (store.config.addToCartOpenCartpopupMobile) {\r\n template_store.headerCart.loadCart(_result);\r\n template_store.headerCart.show();\r\n } else {\r\n setTimeout(function () {\r\n window.location.href = urlCart;\r\n }, 150);\r\n }\r\n }\r\n } else if (_typeResult == \"erro-adicionar\") {\r\n var errorText = JSON.parse(_result.responseText);\r\n\r\n if (typeof _$boxResponse != \"undefined\" && _$boxResponse.length > 0) {\r\n $(\"html,body\").animate(\r\n {\r\n scrollTop: _$boxResponse.offset().top,\r\n },\r\n \"250\"\r\n );\r\n\r\n console.info(errorText);\r\n\r\n _$boxResponse.addClass(\"error\");\r\n _$boxResponse.removeClass(\"success\");\r\n\r\n _$boxResponse.find(\"span\").html(errorText.error);\r\n _$boxResponse.slideDown(350);\r\n\r\n setTimeout(function () {\r\n _$boxResponse.slideUp(350);\r\n }, 3500);\r\n }\r\n }\r\n },\r\n headerCart: {\r\n loadCart: function (_cart) {\r\n var _this = this;\r\n var $boxCart = $(\"[data-cart-body]\");\r\n\r\n if (_cart) {\r\n console.log(_cart.items_count);\r\n store.updateCartCount(_cart.items_count);\r\n }\r\n\r\n vnda.loadCartPopup(function (html) {\r\n $boxCart.html(html);\r\n //console.log(html)\r\n });\r\n },\r\n show: function () {\r\n var $cartBody = $(\"[data-cart-body]\");\r\n //var $cartHeader = $('.cart');\r\n\r\n $header.addClass(\"active\");\r\n $cartBody.addClass(\"active\");\r\n $('[data-action=\"close-all\"]').addClass(\"active\");\r\n\r\n setTimeout(function () {\r\n $header.removeClass(\"active\");\r\n $cartBody.removeClass(\"active\");\r\n $cartBody.parent().removeClass(\"active\");\r\n }, 4000);\r\n },\r\n hide: function () {\r\n var $cartBody = $(\"[data-cart-body]\");\r\n //var $cartHeader = $('.cart');\r\n\r\n $cartBody.removeClass(\"active\");\r\n $cartBody.parent().removeClass(\"active\");\r\n },\r\n toggle: function () {\r\n console.log(\"toggle\");\r\n var $cartBody = $(\"[data-cart-body]\");\r\n //var $cartHeader = $('.cart');\r\n\r\n $cartBody.parent().toggleClass(\"active\");\r\n $('[data-action=\"close-all\"]').toggleClass(\"active\");\r\n },\r\n delete: function () {\r\n $(document).on(\r\n \"click\",\r\n '[data-action=\"delete-item-cart\"]',\r\n function (event) {\r\n event.preventDefault();\r\n\r\n var $item = $(this).closest(\"[data-item-cart]\");\r\n var itemId = $item.data(\"item-id\");\r\n console.info(\"deletando item\");\r\n\r\n store.deleteItem(itemId, $item);\r\n }\r\n );\r\n },\r\n updateQuantity: function () {\r\n $(document).on(\"click\", '[data-cart-quantity=\"plus\"]', function (e) {\r\n //console.log('adicionando mais um item')\r\n\r\n e.preventDefault();\r\n\r\n let quantityAvailable = parseFloat(\r\n e.target.closest(\"[data-item-cart]\").dataset.itemStock\r\n );\r\n let sku = e.target.closest(\"[data-item-cart]\").dataset.itemProductSku;\r\n let quantity = parseFloat(\r\n e.target.closest(\"[data-item-cart]\").dataset.itemQuantity\r\n );\r\n\r\n if (quantityAvailable > 0) {\r\n $.ajax({\r\n url: \"/carrinho/adicionar\",\r\n type: \"POST\",\r\n dataType: \"json\",\r\n data: {\r\n quantity: quantity + 1,\r\n sku: sku,\r\n },\r\n xhrFields: { withCredentials: true },\r\n })\r\n .done(function (resp) {\r\n console.log(\"success\");\r\n console.info(resp);\r\n template_store.headerCart.loadCart(resp);\r\n })\r\n .fail(function (xhr, status, error) {\r\n console.log(\"error\");\r\n console.error(xhr);\r\n console.error(status);\r\n console.error(error);\r\n })\r\n .always(function () {\r\n });\r\n }\r\n });\r\n },\r\n },\r\n /*\r\n Debounce retorna uma função que enquanto continuar sendo chamada não é executada\r\n A função só será executada quando para de ser chamada por N milisegundos\r\n Útil para melhorar a performance de códigos que são executados muitas vezes por segundo, como o $(window).resize()\r\n\r\n Ex:\r\n \r\n $(window).resize(debounce(function() {\r\n // código a ser executado\r\n }, 500))\r\n \r\n No exemplo acima a função só será executada 500ms depois do último resize\r\n Abra o link abaixo e redimensione a janela branca e acompanhe o output do console\r\n Exemplo codepen: https://codepen.io/valkervieira/pen/oNgqyWY\r\n\r\n Um caso comum de uso é em lojas onde a seleção de um filtro na página de tag recarrega automáticamente a página\r\n Com o debounce o usuário pode escolher vários filtros rapidamente e a página só recarrega quando parar de escolher\r\n */\r\n debounce: function (func, wait, immediate = true) {\r\n var timeout;\r\n\r\n return function () {\r\n var context = this,\r\n args = arguments;\r\n\r\n var later = function () {\r\n timeout = null;\r\n if (!immediate) func.apply(context, args);\r\n };\r\n\r\n var callNow = immediate && !timeout;\r\n\r\n clearTimeout(timeout);\r\n\r\n timeout = setTimeout(later, wait);\r\n\r\n if (callNow) func.apply(context, args);\r\n };\r\n },\r\n\r\n /*\r\n Throttle diminui a frequencia que uma função é executada\r\n Enquanto no debounce a função só é executada quando para de ser chamada, no throttle ela\r\n continua sendo executada só que em um intervalo mínimo de N milisegundos (default = 250)\r\n\r\n Ex:\r\n\r\n $(window).resize(throttle() {\r\n // código a ser executado\r\n }, 500)\r\n\r\n No exemplo acima a função resize é chamada várias vezes por segundo mas só é executada 1 vez a cada 500ms\r\n Abra o link abaixo, redimensione a janela branca e acompanhe o console\r\n Exemplo codepen: https://codepen.io/valkervieira/pen/yLyKEPW\r\n\r\n Um caso comum de uso é checar se o scroll passou de um determinado ponto, para fixar um header ou alterar algum elemento do DOM\r\n */\r\n throttle: function (fn, threshhold, scope) {\r\n threshhold || (threshhold = 250);\r\n var last, deferTimer;\r\n return function () {\r\n var context = scope || this;\r\n\r\n var now = +new Date(),\r\n args = arguments;\r\n if (last && now < last + threshhold) {\r\n // hold on to it\r\n clearTimeout(deferTimer);\r\n deferTimer = setTimeout(function () {\r\n last = now;\r\n fn.apply(context, args);\r\n }, threshhold);\r\n } else {\r\n last = now;\r\n fn.apply(context, args);\r\n }\r\n };\r\n },\r\n changeHeaderHeight: function () {\r\n var topBar = 0;\r\n if (\r\n document.querySelector(\".top-bar\") &&\r\n document.querySelector(\".top-bar\").getBoundingClientRect().top == 0\r\n ) {\r\n topBar = document.querySelector(\".top-bar\").getBoundingClientRect()\r\n .height;\r\n }\r\n document.documentElement.style.setProperty(\r\n \"--header-height\",\r\n document.getElementById(\"header\").offsetHeight + topBar + \"px\"\r\n );\r\n\r\n return document.getElementById(\"header\").offsetHeight + topBar;\r\n },\r\n listProducts: function () {\r\n let listProducts = document.querySelectorAll('[data-slider=\"products\"]');\r\n let productTemplate = document.querySelector('[data-page=\"product\"]');\r\n let goOutTemplate = document.querySelector(\"body.go-out\");\r\n\r\n if (listProducts) {\r\n listProducts.forEach(function (slider, index) {\r\n var sliderProducts = new Swiper(slider, {\r\n slidesPerView: productTemplate || goOutTemplate ? 2.5 : 3.5,\r\n loop: true,\r\n centeredSlides: false,\r\n spaceBetween: 0,\r\n simulateTouch: false,\r\n autoplay: {\r\n delay: 8000,\r\n reverseDirection: index % 2 == 0 ? false : true,\r\n },\r\n slidesPerGroup: 1,\r\n\r\n breakpoints: {\r\n 767: {\r\n slidesPerView: 5.5,\r\n centeredSlides: true,\r\n },\r\n 1440: {\r\n slidesPerView: 6.5,\r\n },\r\n },\r\n\r\n navigation: {\r\n nextEl: slider.querySelector(\".button-next\"),\r\n prevEl: slider.querySelector(\".button-prev\"),\r\n },\r\n\r\n on: {\r\n init: function () {\r\n //console.log(this, 'slideChange')\r\n setTimeout(() => lazyLoadInstance.update(), 900);\r\n },\r\n },\r\n });\r\n });\r\n }\r\n },\r\n listProductsBigger: function () {\r\n const listProductsBigger = document.querySelectorAll(\r\n '[data-slider=\"products-bigger\"]'\r\n );\r\n\r\n if (listProductsBigger) {\r\n listProductsBigger.forEach(function (slider, index) {\r\n var sliderProducts = new Swiper(slider, {\r\n slidesPerView: 1.5,\r\n loop: true,\r\n centeredSlides: false,\r\n spaceBetween: 0,\r\n simulateTouch: false,\r\n autoplay: {\r\n delay: 3000,\r\n reverseDirection: index % 2 == 0 ? false : true,\r\n },\r\n slidesPerGroup: 1,\r\n\r\n navigation: {\r\n nextEl: slider.querySelector(\".button-next\"),\r\n prevEl: slider.querySelector(\".button-prev\"),\r\n },\r\n\r\n breakpoints: {\r\n 767: {\r\n slidesPerView: 3.5,\r\n centeredSlides: true,\r\n },\r\n },\r\n\r\n on: {\r\n init: function () {\r\n //console.log(this)\r\n setTimeout(() => lazyLoadInstance.update(), 900);\r\n },\r\n },\r\n });\r\n });\r\n }\r\n },\r\n addToCartProducBlock: function () {\r\n var products = $(document).find('[data-add-cart=\"product-block\"]');\r\n var variants = $(document).find(\"[data-sku]\");\r\n var inputSku = $(document).find(\"input[name=sku]\");\r\n var btnBuy = $(document).find('[type=\"submit\"]');\r\n\r\n if (products) {\r\n if (variants) {\r\n $(document).on(\"click\", \"[data-add-cart='product-block'] [data-sku]\", function (e) {\r\n e.preventDefault();\r\n var $formBuy = $(this).parents(\"form\");\r\n var $inputFormBuy = $formBuy.find('input[name=sku]');\r\n var $submitBtnBuy = $formBuy.find('[type=\"submit\"]')\r\n\r\n // console.log($inputFormBuy);\r\n // console.log($submitBtnBuy);\r\n var sku = $(this).data('sku');\r\n\r\n console.log(\"click na variante\", $(this));\r\n // console.log(sku);\r\n\r\n $inputFormBuy.attr(\"value\", sku);\r\n\r\n // console.log($inputFormBuy);\r\n\r\n // variants.removeClass(\"selected\");\r\n $formBuy.find(\"[data-sku]\").removeClass('selected');\r\n $(this).addClass(\"selected\");\r\n\r\n $submitBtnBuy.attr(\"available\", true);\r\n\r\n // btnBuy.setAttribute(\"available\", true);\r\n // btnBuy.focus();\r\n });\r\n\r\n }\r\n\r\n if (btnBuy) {\r\n $(document).on(\"click\", \"[data-add-cart='product-block'] [type='submit']\", function (e) {\r\n \r\n e.preventDefault();\r\n\r\n var $form = $(this).parent(\"form\");\r\n var $parent = $(this).parent(\"form\").parent();\r\n\r\n var respValidated = store.validateFormProduct($form);\r\n var $boxResponse = $parent.find(\".resp-validate\");\r\n\r\n if (respValidated.validated) {\r\n store.addItem($form, $parent);\r\n } else {\r\n console.info(\"não foi\");\r\n store.setRespValidateProduct(respValidated, $form, $boxResponse);\r\n }\r\n });\r\n }\r\n }\r\n },\r\n mobileTouch: function () {\r\n if (screen.width < 767) {\r\n $(\".product-block .sizes .size\").on(\"touchstart\", (el) => {\r\n $(el.currentTarget).click();\r\n });\r\n }\r\n },\r\n bar: {\r\n close: function () {\r\n let btnClose = document.querySelectorAll('[data-action=\"close-bar\"]');\r\n\r\n btnClose.forEach((btn) => {\r\n btn.addEventListener(\"click\", () => {\r\n btn.closest(\".top-bar\").remove();\r\n });\r\n });\r\n },\r\n },\r\n home: {\r\n setFullbanner: function () {\r\n const fullbanners = document.querySelectorAll(\"[data-fullbanner]\");\r\n\r\n if (fullbanners) {\r\n fullbanners.forEach(function (slider, index) {\r\n var fullbanner = new Swiper(slider, {\r\n slidesPerView: 1,\r\n spaceBetween: 0,\r\n watchOverflow: true,\r\n autoplay: {\r\n delay: 5000,\r\n },\r\n\r\n navigation: {\r\n nextEl: slider.querySelector(\".button-next\"),\r\n prevEl: slider.querySelector(\".button-prev\"),\r\n },\r\n\r\n pagination: {\r\n el: slider.querySelector(\".swiper-pagination\"),\r\n type: \"bullets\",\r\n },\r\n });\r\n });\r\n }\r\n },\r\n setInfiniteScroll: function () {\r\n const body = document.getElementsByTagName(\"body\")[0];\r\n const bodyHeight = document.body.scrollHeight / 2;\r\n const headerHeight = template_store.changeHeaderHeight();\r\n var remove = false;\r\n\r\n const language = document.querySelector('html').getAttribute('lang');\r\n\r\n const fetchHtml = async function () {\r\n body.classList.add(\"-fetching\");\r\n console.log('fetch', `${document.location.href}?language=${language}`);\r\n\r\n const response = await fetch(`${document.location.href}?language=${language}`);\r\n const data = await response.text();\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(data, \"text/html\");\r\n console.log('fetch language', doc.querySelector('html').getAttribute('lang'));\r\n const main = doc.querySelector('[data-action=\"change-content\"]');\r\n\r\n //console.log(doc, main)\r\n\r\n document.getElementsByTagName(\"main\")[0].appendChild(main);\r\n remove = true;\r\n };\r\n\r\n function removeFirstContent() {\r\n if (remove) {\r\n // console.log(document.querySelectorAll('[data-action=\"change-content\"]')[1].getBoundingClientRect().top <= headerHeight, document.querySelectorAll('[data-action=\"change-content\"]')[1].getBoundingClientRect().top, headerHeight)\r\n if (\r\n document\r\n .querySelectorAll('[data-action=\"change-content\"]')[1]\r\n .getBoundingClientRect().top <= headerHeight\r\n ) {\r\n // console.log('remove de cima e refresh seções')\r\n body.classList.add(\"-changing\");\r\n // console.log(headerHeight)\r\n document.querySelector('[data-action=\"change-content\"]').remove();\r\n document.documentElement.scrollTop = 0;\r\n window.scrollTo(0,0);\r\n\r\n remove = false;\r\n setTimeout(() => {\r\n body.classList.remove(\"-changing\");\r\n body.classList.remove(\"-fetching\");\r\n }, 1000);\r\n }\r\n }\r\n }\r\n\r\n function observeContent() {\r\n // console.log(window.scrollY >= bodyHeight, window.scrollY, bodyHeight);\r\n if (\r\n window.scrollY >= bodyHeight &&\r\n !body.classList.contains(\"-fetching\") &&\r\n !body.classList.contains(\"-changing\")\r\n ) {\r\n fetchHtml().then(() => {\r\n lazyLoadInstance.update();\r\n template_store.home.setFullbanner();\r\n template_store.listProducts();\r\n template_store.listProductsBigger();\r\n template_store.addToCartProducBlock();\r\n store.getPriceProd();\r\n });\r\n }\r\n }\r\n\r\n window.addEventListener(\r\n \"scroll\",\r\n template_store.debounce(observeContent),\r\n 900\r\n );\r\n\r\n window.addEventListener(\r\n \"scroll\",\r\n template_store.debounce(removeFirstContent),\r\n 900\r\n );\r\n },\r\n init: function () {\r\n var _this = this;\r\n\r\n _this.setFullbanner();\r\n template_store.listProducts();\r\n template_store.listProductsBigger();\r\n // template_store.home.setInfiniteScroll();\r\n },\r\n },\r\n product: {\r\n $sectionProduct: $(\"[data-section-product]\"),\r\n $wrapperImages: $(\"[data-section-product]\").find(\"[data-product-images]\"),\r\n $sliderProduct: $(\"[data-section-product]\").find(\r\n \"[data-product-images] [data-main-slider]\"\r\n ),\r\n $thumbsProduct: $(\"[data-section-product]\").find(\"[data-slider-thumbs]\"),\r\n sliderProduct: [],\r\n /* \r\n Exibe as primeiras imagens do produto\r\n ** Importante para quando houver imagem por sku **\r\n */\r\n showFirstImages: function () {\r\n var _this = this;\r\n var variants = vnda.variants.all();\r\n var $imagesWithoutSkus = _this.$sliderProduct.find(\".image-without-sku\");\r\n var $thumbsWithoutSkus = _this.$thumbsProduct.find(\".image-without-sku\");\r\n\r\n if ($imagesWithoutSkus.length > 0) {\r\n /* \r\n Todas as imagens sem skus são exibidas sempre\r\n */\r\n\r\n $imagesWithoutSkus.removeClass(\"inactive\").addClass(\"active\");\r\n\r\n $thumbsWithoutSkus.removeClass(\"inactive\").addClass(\"active\");\r\n } else {\r\n /* \r\n Percorre todas as variantes\r\n */\r\n for (var i = 0; i < variants.length; i++) {\r\n if (variants[i].main) {\r\n console.info(variants[i]);\r\n\r\n // Procura a imagem que contém o sku e a exibe\r\n _this.$sliderProduct\r\n .find('[data-image][data-skus-image*=\"' + variants[i].sku + '\"]')\r\n .addClass(\"active\")\r\n .removeClass(\"inactive\");\r\n\r\n _this.$thumbsProduct\r\n .find(\r\n '[data-image-thumb][data-skus-image*=\"' + variants[i].sku + '\"]'\r\n )\r\n .addClass(\"active\")\r\n .removeClass(\"inactive\");\r\n }\r\n }\r\n }\r\n },\r\n setGallery: function () {\r\n var _this = this;\r\n\r\n if (_this.$thumbsProduct.length > 0) {\r\n var galleryThumbs = new Swiper(_this.$thumbsProduct, {\r\n slidesPerView: \"auto\",\r\n spaceBetween: 0,\r\n allowTouchMove: false,\r\n touchRatio: 0,\r\n freemode: true,\r\n watchOverflow: true,\r\n });\r\n\r\n var gallery = new Swiper(_this.$sliderProduct, {\r\n slidesPerView: 1,\r\n spaceBetween: 5,\r\n watchOverflow: true,\r\n observeParents: true,\r\n\r\n scrollbar: {\r\n el: _this.$sliderProduct.find(\".swiper-scrollbar\"),\r\n draggable: true,\r\n },\r\n\r\n navigation: {\r\n nextEl: _this.$sliderProduct.find(\".button-next\"),\r\n prevEl: _this.$sliderProduct.find(\".button-prev\"),\r\n },\r\n\r\n thumbs: {\r\n swiper: galleryThumbs,\r\n },\r\n\r\n on: {\r\n transitionEnd: function () {\r\n MagicZoom.refresh();\r\n }\r\n }\r\n });\r\n } else {\r\n var gallery = new Swiper(_this.$sliderProduct, {\r\n slidesPerView: 1,\r\n spaceBetween: 30,\r\n watchOverflow: true,\r\n observeParents: true,\r\n scrollbar: {\r\n el: _this.$sliderProduct.find(\".swiper-scrollbar\"),\r\n draggable: true,\r\n },\r\n });\r\n }\r\n\r\n this.sliderProduct.push(gallery);\r\n },\r\n submitNotify: function () {\r\n $(document).on(\"submit\", \"[data-form-notify]\", function (event) {\r\n event.preventDefault();\r\n template_store.submitFormNotify($(this));\r\n });\r\n },\r\n setZoom: function () {\r\n var mzOptions = {\r\n lazyZoom: true,\r\n expand: \"off\",\r\n zoomOn: \"click\",\r\n zoomPosition: \"inner\",\r\n expandZoomMode: \"off\",\r\n hint: \"off\",\r\n };\r\n },\r\n init: function () {\r\n var _this = this;\r\n\r\n _this.showFirstImages();\r\n _this.setGallery();\r\n _this.submitNotify();\r\n _this.setZoom();\r\n\r\n template_store.listProducts();\r\n\r\n CheckProdCD.init();\r\n\r\n \r\n if (window.innerWidth < 768) {\r\n document\r\n .querySelector(\"[data-product-images]\")\r\n .addEventListener(\"click\", (e) => {\r\n if (\r\n e.target != document.querySelector('[data-action=\"close-zoom\"]')\r\n ) {\r\n e.preventDefault();\r\n\r\n console.log(e);\r\n\r\n document\r\n .querySelector(\"[data-product-images]\")\r\n .classList.add(\"-fullscreen\");\r\n document.getElementsByTagName(\"body\")[0].style.overflow =\r\n \"hidden\";\r\n\r\n // template_store.product.sliderProduct[0].update();\r\n }\r\n });\r\n document\r\n .querySelector('[data-action=\"close-zoom\"]')\r\n .addEventListener(\"click\", (e) => {\r\n e.preventDefault();\r\n\r\n console.log(e, document.querySelector(\"[data-product-images]\"));\r\n\r\n document\r\n .querySelector(\"[data-product-images]\")\r\n .classList.remove(\"-fullscreen\");\r\n document.getElementsByTagName(\"body\")[0].style.overflow = \"\";\r\n\r\n template_store.product.sliderProduct[0].update();\r\n });\r\n }\r\n \r\n\r\n $(document).on(\r\n \"submit\",\r\n store.config.selectorFormProduct,\r\n function (event) {\r\n event.preventDefault();\r\n\r\n var $form = $(this);\r\n var $parent = $form.closest(store.config.selectorWrapperProduct);\r\n\r\n var $btnComprar = $parent.find(store.config.selectorBtnBuy);\r\n\r\n var respValidated = store.validateFormProduct($form);\r\n var $boxResponse = $parent.find(\".resp-validate\");\r\n\r\n if (respValidated.validated) {\r\n store.addItem($form, $parent);\r\n } else {\r\n console.info(\"não foi\", respValidated);\r\n store.setRespValidateProduct(respValidated, $form, $boxResponse);\r\n }\r\n }\r\n );\r\n },\r\n },\r\n tag: {\r\n init: function () {\r\n template_store.listProducts();\r\n template_store.home.setFullbanner();\r\n\r\n var btnOpenFilter = document.querySelector(\"[data-action=open-filters]\");\r\n if (btnOpenFilter) {\r\n var btnClearFilters = document.querySelector(\r\n \"[data-action=clear-filters]\"\r\n );\r\n var height = btnOpenFilter.parentNode.querySelector(\".filters-wrapper\")\r\n .offsetHeight;\r\n var group = btnOpenFilter.parentNode.querySelector(\".filters-group\");\r\n if (group.classList.contains(\"active\")) {\r\n group.style.height = height + \"px\";\r\n }\r\n\r\n btnOpenFilter.addEventListener(\"click\", function (e) {\r\n e.preventDefault();\r\n group.classList.toggle(\"active\");\r\n if (btnClearFilters) {\r\n btnClearFilters.classList.toggle(\"active\");\r\n }\r\n if (group.classList.contains(\"active\")) {\r\n group.style.height = height + \"px\";\r\n } else {\r\n group.style.height = \"\";\r\n }\r\n });\r\n }\r\n },\r\n },\r\n login: {\r\n init: function () {\r\n $(\"[data-content-login]\").each(function (index, el) {\r\n // Animação\r\n $(el).on(\"click\", \"[data-forget-password]\", function (event) {\r\n event.preventDefault();\r\n $(el).find(\"[data-form-login]\").animate({ height: \"toggle\" }, 200);\r\n $(el).find(\"[data-form-recover]\").animate({ height: \"toggle\" }, 200);\r\n });\r\n\r\n $(el).on(\"click\", \"[data-forget-password-back]\", function (event) {\r\n event.preventDefault();\r\n $(el).find(\"[data-form-login]\").animate({ height: \"toggle\" }, 200);\r\n $(el).find(\"[data-form-recover]\").animate({ height: \"toggle\" }, 200);\r\n });\r\n\r\n $(el).on(\"submit\", \"[data-form-login]\", function (event) {\r\n event.preventDefault();\r\n\r\n var $form = $(this);\r\n var respValidated = store.login.validateLogin($form);\r\n\r\n if (respValidated.validated) {\r\n store.login.logar($form);\r\n } else {\r\n store.setMsgResponse(respValidated.errors, \"error\", $(this));\r\n }\r\n });\r\n\r\n $(el).on(\"submit\", \"[data-form-register]\", function (event) {\r\n event.preventDefault();\r\n\r\n var $form = $(this);\r\n var respValidated = store.login.validateRegister($form);\r\n\r\n if (respValidated.validated) {\r\n store.login.logar($form);\r\n } else {\r\n store.setMsgResponse(respValidated.errors, \"error\", $(this));\r\n }\r\n });\r\n\r\n $(el).on(\"submit\", \"[data-form-recover]\", function (event) {\r\n event.preventDefault();\r\n\r\n var $form = $(this);\r\n var respValidated = store.login.validateRecover($form);\r\n\r\n if (respValidated.validated) {\r\n store.login.recoverPassord($form);\r\n } else {\r\n store.setMsgResponse(respValidated.errors, \"error\", $(this));\r\n }\r\n });\r\n\r\n $(el).on(\"click\", '[data-action=\"open-register\"]', function (event) {\r\n event.preventDefault();\r\n $(el).find(\"[data-form-login]\").animate({ height: \"toggle\" }, 200);\r\n $(el).find(\"[data-form-register]\").animate({ height: \"toggle\" }, 200);\r\n });\r\n\r\n $(el).on(\"click\", '[data-action=\"back-login\"]', function (event) {\r\n event.preventDefault();\r\n $(el).find(\"[data-form-login]\").animate({ height: \"toggle\" }, 200);\r\n $(el).find(\"[data-form-register]\").animate({ height: \"toggle\" }, 200);\r\n });\r\n });\r\n\r\n $(document).on(\"click\", '[data-action=\"open-login\"]', function (event) {\r\n event.preventDefault();\r\n $(\"[data-content-login]\").animate({ height: \"toggle\" }, 200);\r\n });\r\n\r\n $(document).on(\r\n \"click\",\r\n '[data-action=\"open-newsletter\"]',\r\n function (event) {\r\n event.preventDefault();\r\n $('[data-webform=\"newsletter\"]')\r\n .parent()\r\n .animate({ height: \"toggle\" }, 200);\r\n }\r\n );\r\n },\r\n },\r\n init: function () {\r\n if (document.getElementById(\"header\"))\r\n template_store.changeHeaderHeight();\r\n store.getPriceProd();\r\n store.getCartCount();\r\n template_store.addToCartProducBlock();\r\n template_store.headerCart.delete();\r\n template_store.headerCart.updateQuantity();\r\n template_store.bar.close();\r\n template_store.mobileTouch();\r\n\r\n if (document.getElementById(\"header\"))\r\n window.addEventListener(\r\n \"scroll\",\r\n template_store.debounce(template_store.changeHeaderHeight)\r\n );\r\n\r\n $(window).on(\"scroll\", function () {\r\n if ($(window).scrollTop() > 0) {\r\n $(\"#header\").addClass(\"active\");\r\n } else {\r\n $(\"#header\").removeClass(\"active\");\r\n }\r\n });\r\n\r\n // ===========================================================\r\n // i18n Collapsible\r\n //============================================================\r\n var i18nclick = true;\r\n $(\".i18n-option\").each(function () {\r\n if($(this).find('[data-selected]')) {\r\n $('.i18n-dropdown b').html($(this).find('[data-selected]').html());\r\n }\r\n });\r\n $(document).on('click','div.i18n-dropdown',function(e){\r\n e.preventDefault();\r\n if(i18nclick){\r\n $('.i18n-option').stop().slideDown(300);\r\n i18nclick = false;\r\n }else{\r\n $('.i18n-option').stop().slideUp(300);\r\n i18nclick = true;\r\n }\r\n });\r\n $(document).on('click','.i18n-option li',function(e){\r\n e.preventDefault();\r\n var option_value = $(this).html();\r\n var option_link = $(this).data('value');\r\n $('.i18n-dropdown b').html(option_value);\r\n $('.i18n-option').slideUp(300);\r\n i18nclick = true;\r\n location.replace(option_link)\r\n });\r\n\r\n var btnOpenMenu = document.querySelector('[data-action=\"open-menu\"]');\r\n var btnOpenInfo = document.querySelectorAll('[data-action=\"open-info\"]');\r\n\r\n var btnCloseMenu = document.querySelector('[data-action=\"close-menu\"]');\r\n var btnCloseInfo = document.querySelector('[data-action=\"close-info\"]');\r\n var btnCloseAll = document.querySelector('[data-action=\"close-all\"]');\r\n\r\n var menuLateral = document.getElementById(\"menu-lateral\");\r\n var infoLateral = document.getElementById(\"info-lateral\");\r\n\r\n if (btnOpenMenu)\r\n btnOpenMenu.addEventListener(\"click\", function () {\r\n var wrapperBtn = this.parentNode;\r\n infoLateral.classList.remove(\"visible\");\r\n btnOpenInfo.forEach(function (btn) {\r\n btn.parentNode.classList.remove(\"active\");\r\n });\r\n wrapperBtn.classList.add(\"active\");\r\n menuLateral.classList.add(\"visible\");\r\n });\r\n\r\n if (btnCloseMenu)\r\n btnCloseMenu.addEventListener(\"click\", function () {\r\n var wrapperBtn = this.parentNode;\r\n wrapperBtn.classList.remove(\"active\");\r\n menuLateral.classList.remove(\"visible\");\r\n });\r\n\r\n if (btnOpenInfo.length)\r\n btnOpenInfo.forEach(function (btn) {\r\n btn.addEventListener(\"click\", function () {\r\n var wrapperBtn = this.parentNode;\r\n btnCloseMenu.parentNode.classList.remove(\"active\");\r\n menuLateral.classList.remove(\"visible\");\r\n wrapperBtn.classList.toggle(\"active\");\r\n infoLateral.classList.toggle(\"visible\");\r\n });\r\n });\r\n\r\n if (btnCloseInfo)\r\n btnCloseInfo.addEventListener(\"click\", function () {\r\n var wrapperBtn = this.parentNode;\r\n wrapperBtn.classList.remove(\"active\");\r\n infoLateral.classList.remove(\"visible\");\r\n });\r\n\r\n if (btnCloseAll)\r\n btnCloseAll.addEventListener(\"click\", function (e) {\r\n e.preventDefault();\r\n btnCloseInfo.closest(\".info\").classList.remove(\"active\");\r\n infoLateral.classList.remove(\"visible\");\r\n btnCloseMenu.closest(\".menu-options\").classList.remove(\"active\");\r\n menuLateral.classList.remove(\"visible\");\r\n template_store.headerCart.hide();\r\n this.classList.remove(\"active\");\r\n e.stopPropagation();\r\n });\r\n\r\n if (document.querySelector('[data-action=\"open-search\"]'))\r\n document\r\n .querySelector('[data-action=\"open-search\"]')\r\n .addEventListener(\"click\", (e) => {\r\n e.target.parentNode.classList.toggle(\"active\");\r\n document.getElementById(\"header\").classList.toggle(\"active\");\r\n if (e.target.parentNode.classList.contains(\"active\")) {\r\n e.target.parentNode.querySelector(\"[name=q]\").focus();\r\n }\r\n });\r\n\r\n if (document.querySelector('[data-action=\"toggle-cart\"]'))\r\n document\r\n .querySelector('[data-action=\"toggle-cart\"]')\r\n .addEventListener(\"click\", (e) => {\r\n template_store.headerCart.toggle();\r\n });\r\n\r\n // ENVIO DE FORMULÁRIOS\r\n $(\"[data-webform]\").on(\"submit\", function (event) {\r\n event.preventDefault();\r\n var $form = $(this);\r\n\r\n var vnda = $(this).find('[name=\"vnda\"]');\r\n\r\n if (vnda.length > 0) {\r\n if (vnda.val() != \"\") {\r\n console.info(\"ROBOT DETECTED\");\r\n return false;\r\n }\r\n }\r\n\r\n store.submitForm($form);\r\n });\r\n\r\n template_store.login.init();\r\n },\r\n};\r\n\r\n$(function () {\r\n template_store.init();\r\n\r\n if (page == \"home\") {\r\n template_store.home.init();\r\n }\r\n console.log(\"page \", page);\r\n\r\n if (page == \"product\") {\r\n template_store.product.init();\r\n }\r\n\r\n if (page == \"tag\" || page == \"search\") {\r\n template_store.tag.init();\r\n }\r\n\r\n if (page == \"login\") {\r\n template_store.login.init();\r\n }\r\n\r\n if (page == \"media/conteudo_post\") {\r\n template_store.listProducts();\r\n }\r\n});\r\n\r\nconsole.log(\r\n \"%cVnda - Tecnologia em Ecommerce\",\r\n 'color: #f88d5b; font-size: 15px; font-family: \"Verdana\", sans-serif; font-weight: bold;'\r\n);\r\n"],"names":[],"sourceRoot":""}