{"version":3,"file":"js/scripts.bundle.js","mappings":";;;;;;;;;;AAAa;;AAEb;AACA;AACA,eAAe,QAAQ;AACvB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,SAAS;AACT;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,2GAA2G;AAC3G;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,KAA6B;AACjC;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACzUa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8CAA8C;AAC9C;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA,QAAQ;AACR;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa;;AAEb;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa;;AAEb;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;;ACpba;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAA6B,qCAAqC;AAClF;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAAgC,GAAG,UAAU;;AAE7C;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,CAAC;;AAED;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;;ACtDa;AACb;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,mBAAmB;;AAEnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,8CAA8C,0DAA0D;;AAExG;AACA;;AAEA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,sDAAsD,sDAAsD;AAC5G;AACA;;AAEA,+DAA+D,oCAAoC;AACnG,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA,QAAQ;;AAER;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,IAAI;;AAEJ;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;AACL,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL,IAAI;;AAEJ;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,IAAI;;AAEJ;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA,KAAK;AACL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN,KAAK;AACL,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA,UAAU;AACV,uBAAuB;;AAEvB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT,sBAAsB;;AAEtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ,mBAAmB;;AAEnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,gBAAgB;AACrC;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,KAAK;AACL,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;;AAEJ;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA,qBAAqB,eAAe;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC,6BAA6B;;AAE7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL,KAAK;AACL,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6BAA6B;AAChD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,0BAA0B,gBAAgB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;;AAEP;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,kCAAkC,uCAAuC;AACzE;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;;AAER;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;;AAER;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR,MAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR,MAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,KAAK;;AAEL;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA,gBAAgB,aAAa,YAAY,EAAE;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA,KAAK;;AAEL;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,6BAA6B,mBAAmB;AAChD;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA,sCAAsC;AACtC;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,gCAAgC,aAAa;AAC7C,KAAK;AACL;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,eAAe;AACf;;AAEA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA,MAAM;AACN;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA,IAAI;;AAEJ;AACA,wDAAwD;AACxD;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA,KAAK;AACL;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,IAAI;;AAEJ;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;;AAEJ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,IAAI;;AAEJ;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,gBAAgB;AAChB;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,IAAI;;AAEJ;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;;AAEA;AACA,gEAAgE,+CAA+C,QAAQ;;AAEvH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC,kBAAkB,oDAAoD;AACtE;AACA,cAAc;AACd,KAAK;;AAEL;;AAEA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC,kBAAkB,oDAAoD;AACtE;AACA,cAAc;AACd,KAAK;;AAEL;AACA;AACA;;AAEA;AACA,IAAI;;AAEJ;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC;;AAEhC;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA,WAAW,wDAAwD;AACnE;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,gBAAgB,0DAA0D;AAC1E,IAAI;AACJ,GAAG;;AAEH;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP,MAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA,KAAK;;AAEL;AACA;AACA,IAAI;AACJ,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,uBAAuB,QAAQ,IAAI,MAAM,KAAK,OAAO;AACrD,MAAM;AACN,KAAK;AACL,IAAI;AACJ,GAAG;;AAEH,gBAAgB;AAChB;;AAEA,CAAC;;;;;;;;;;;;AC59GY;AACb;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,MAAM;;AAEN;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL,IAAI;;AAEJ;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B;AAC9B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA,CAAC;;;;;;;;;;;ACzPD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,eAAe,0DAA0D;AACzE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,gBAAgB,0DAA0D;AAC1E;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC/Ba;;AAEb;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA,8CAA8C;;AAE9C;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;;AC1La;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA,8CAA8C;AAC9C,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB;AAClB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB;AAClB,uCAAuC;AACvC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;;AC7Ma;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8CAA8C;AAC9C,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;;AC7La;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;;AAEA;;AAEA;AACA,8CAA8C;;AAE9C;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,8CAA8C;;AAE9C;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,8LAA8L;AAC1O,cAAc;AACd;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,cAAc;AACd;AACA,cAAc;AACd;AACA,cAAc;AACd;AACA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,SAAS;;;AAGT;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,uDAAuD,SAAS;AAChE;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,oDAAoD,SAAS;AAC7D;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,oEAAoE,SAAS;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qBAAqB;;AAErB;;AAEA,kBAAkB;AAClB;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,oDAAoD,SAAS;AAC7D;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA,mDAAmD,SAAS;AAC5D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA,4GAA4G,iBAAiB,QAAQ,WAAW,SAAS,UAAU;;AAEnK;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;;AAEA,+CAA+C,SAAS;AACxD;AACA;AACA;AACA;;AAEA,wDAAwD,WAAW;AACnE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uDAAuD,SAAS;AAChE;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA,kDAAkD,SAAS;AAC3D;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA,kDAAkD,SAAS;AAC3D;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;;AAEA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI,KAA6B;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,4CAA4C,SAAS;AACrD;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;ACj4BY;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;;AAEA;AACA,8CAA8C;;AAE9C;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;;AAEA,kBAAkB;AAClB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;;AC5Sa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA,8CAA8C;AAC9C,SAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;;AAEb;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,6CAA6C;;AAE7C;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;;AAGT;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;;AC3Ka;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8CAA8C;;AAE9C;AACA;;AAEA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;;AAEA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;;AClPa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA;AACA,CAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qDAAqD;AACzE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA,SAAS;AACT,KAAK;AACL,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,2BAA2B;AACvD;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;;AAEA;AACA;AACA;AACA,mBAAmB,QAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,UAAU;AAC7B;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,UAAU;AAC7B;AACA;AACA,4BAA4B,2BAA2B;AACvD;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,QAAQ;AAC3B,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,QAAQ;AAC3B;AACA,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,cAAc;AACd;AACA,cAAc;AACd;AACA,cAAc;AACd;AACA,cAAc;AACd;AACA,cAAc;AACd;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,QAAQ;AAC3B;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,QAAQ;AAC3B,qBAAqB;AACrB;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,QAAQ;AAC3B,qBAAqB;AACrB;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,QAAQ;AAC3B,mBAAmB,QAAQ;AAC3B,qBAAqB;AACrB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA,cAAc;;AAEd;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,QAAQ;AAC3B,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gDAAgD,yBAAyB;AACzE;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,QAAQ;AAC3B,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,4BAA4B,SAAS;AACrC;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,QAAQ;AAC3B,mBAAmB,QAAQ;AAC3B,qBAAqB;AACrB;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,SAAS;;AAET,0CAA0C;AAC1C;AACA;;AAEA,4BAA4B,sBAAsB;AAClD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAS;;AAET,+BAA+B;AAC/B;AACA;;AAEA,4BAA4B,sBAAsB;AAClD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,QAAQ;AAC3B,mBAAmB,QAAQ;AAC3B,qBAAqB;AACrB;AACA;AACA;AACA;AACA;;AAEA;;AAEA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;;AAEA;AACA,gCAAgC,uBAAuB;AACvD;AACA;AACA;AACA;AACA,cAAc;AACd,gCAAgC,uBAAuB;AACvD;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;;AAEA;AACA,gCAAgC,uBAAuB;AACvD;AACA;AACA,cAAc;AACd,gCAAgC,uBAAuB;AACvD;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,cAAc;AACd;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,2DAA2D;;AAE3D,wCAAwC;AACxC;AACA;AACA,cAAc;AACd;AACA;AACA,wCAAwC;AACxC;AACA;AACA,SAAS;;AAET;AACA;AACA,kBAAkB,cAAc;AAChC;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,cAAc;AACd;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,2BAA2B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;;AAEA;AACA,cAAc;AACd;;AAEA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wDAAwD,oBAAoB,eAAe;;AAE3F;AACA;AACA,kBAAkB;AAClB;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+BAA+B;AAC/B,oDAAoD,iBAAiB;;AAErE;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;;;AAGjB,cAAc,0BAA0B;AACxC,oDAAoD,iBAAiB;;AAErE;AACA,8EAA8E;AAC9E;AACA,qBAAqB;AACrB;AACA,qBAAqB;AACrB;;AAEA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,qBAAqB;AACrB;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,wDAAwD,OAAO;AAC/D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;;AAEA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA,2BAA2B;AAC3B;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA,SAAS;;AAET;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,GAAG;AAChB,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,gCAAgC,EAAE;AAClC;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;;AAEA,4BAA4B;;AAE5B;AACA,8CAA8C,WAAW,gBAAgB;;AAEzE;AACA,kDAAkD,aAAa;;AAE/D;AACA,mDAAmD;;AAEnD;AACA,mDAAmD,OAAO;;AAE1D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0CAA0C;;AAE1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA,eAAe;AACf;;AAEA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,sBAAsB;AACtB;AACA,sBAAsB;AACtB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB;AAClB;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB;AACrB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,oDAAoD,SAAS;AAC7D;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,KAA6B;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,CAAC;;;;;;;;;;;;ACpxDY;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8CAA8C;;AAE9C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;;AAEA;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,cAAc;AACd;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,oDAAoD,SAAS;AAC7D;AACA;AACA,sBAAsB;AACtB;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wDAAwD,SAAS;AACjE;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2DAA2D,SAAS;AACpE;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;;AChca;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB;AACzB;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL,IAAI;;AAEJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;ACzJa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA,SAAS;;AAET;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;AC9Ea;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;AChEa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;ACxCa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;AC1Ca;;AAEb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;ACpCa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,iDAAiD;AACjD,yCAAyC;AACzC;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;ACxFa;;AAEb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;ACrCa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;ACzEa;;AAEb;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA,qBAAqB;;AAErB;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;ACzFa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ,GAAG;;AAEH;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;ACtDa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;AC5Ca;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;;AAEA,yCAAyC;AACzC;AACA,MAAM,mFAAmF;AACzF;AACA,MAAM;AACN;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iFAAiF;;AAEjF,mDAAmD,kBAAkB;;AAErE;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;ACzKa;;AAEb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA,+EAA+E;AAC/E,8DAA8D,iBAAiB;AAC/E,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,+EAA+E;AAC/E,+DAA+D,kBAAkB;AACjF;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;ACzGa;;AAEb;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,4BAA4B,qBAAqB;AACjD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;;AAEA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,4BAA4B,qBAAqB;AACjD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,sBAAsB;AACtB;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;;AAEA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;;ACpHa;;AAEb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;ACtEa;;AAEb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;AC/Ea;;AAEb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;ACtEa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;AC9Ga;;AAEb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;ACjFa;;AAEb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;ACtEa;;AAEb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;ACrCa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAI,IAA6B;AACjC;AACA;;AAEA;AACA;;;;;;;;;;;;AChLa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;;;;;;UCpID;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;;;;;ACtBA;AACA,gBAAgB,mBAAO,CAAC,uEAA6B;AACrD,eAAe,mBAAO,CAAC,qEAA4B;AACnD,gBAAgB,mBAAO,CAAC,uEAA6B;AACrD,kBAAkB,mBAAO,CAAC,2EAA+B;AACzD,kBAAkB,mBAAO,CAAC,2EAA+B;AACzD,kBAAkB,mBAAO,CAAC,2EAA+B;AACzD,sBAAsB,mBAAO,CAAC,qFAAoC;AAClE,gBAAgB,mBAAO,CAAC,uEAA6B;AACrD,qBAAqB,mBAAO,CAAC,iFAAkC;AAC/D,qBAAqB,mBAAO,CAAC,iFAAkC;AAC/D,kBAAkB,mBAAO,CAAC,2EAA+B;AACzD,kBAAkB,mBAAO,CAAC,2EAA+B;AACzD,mBAAO,CAAC,+GAAiD;AACzD,mBAAO,CAAC,uHAAqD;AAC7D,mBAAO,CAAC,6GAAgD;;AAExD;AACA,uBAAuB,mBAAO,CAAC,2EAA+B;AAC9D,2BAA2B,mBAAO,CAAC,qFAAoC;AACvE,6BAA6B,mBAAO,CAAC,yFAAsC;AAC3E,uBAAuB,mBAAO,CAAC,2EAA+B;AAC9D,yBAAyB,mBAAO,CAAC,+EAAiC;AAClE,wBAAwB,mBAAO,CAAC,6EAAgC;AAChE,wBAAwB,mBAAO,CAAC,6EAAgC;AAChE,4BAA4B,mBAAO,CAAC,uFAAqC;AACzE,8BAA8B,mBAAO,CAAC,2FAAuC;AAC7E,4BAA4B,mBAAO,CAAC,uFAAqC;AACzE,+BAA+B,mBAAO,CAAC,6FAAwC;AAC/E,2BAA2B,mBAAO,CAAC,mFAAmC;;AAEtE;AACA,sBAAsB,mBAAO,CAAC,iFAAkC;AAChE,2BAA2B,mBAAO,CAAC,6FAAwC;AAC3E,0BAA0B,mBAAO,CAAC,yFAAsC;AACxE,8BAA8B,mBAAO,CAAC,mGAA2C;AACjF,gCAAgC,mBAAO,CAAC,6FAAwC;AAChF,oCAAoC,mBAAO,CAAC,+GAAiD;AAC7F,4BAA4B,mBAAO,CAAC,+FAAyC;AAC7E,6BAA6B,mBAAO,CAAC,iGAA0C;AAC/E,2BAA2B,mBAAO,CAAC,6FAAwC;AAC3E,2BAA2B,mBAAO,CAAC,2FAAuC;AAC1E,yDAAyD,mBAAO,CAAC,qFAAoC;;AAErG,mBAAO,CAAC,2EAA+B","sources":["webpack://metronic/../demo1/src/js/components/app.js","webpack://metronic/../demo1/src/js/components/card.js","webpack://metronic/../demo1/src/js/components/cookie.js","webpack://metronic/../demo1/src/js/components/datatable/core.datatable.js","webpack://metronic/../demo1/src/js/components/datatable/datatable.checkbox.js","webpack://metronic/../demo1/src/js/components/datatable/datatable.rtl.js","webpack://metronic/../demo1/src/js/components/dialog.js","webpack://metronic/../demo1/src/js/components/header.js","webpack://metronic/../demo1/src/js/components/image-input.js","webpack://metronic/../demo1/src/js/components/menu.js","webpack://metronic/../demo1/src/js/components/offcanvas.js","webpack://metronic/../demo1/src/js/components/scrolltop.js","webpack://metronic/../demo1/src/js/components/toggle.js","webpack://metronic/../demo1/src/js/components/util.js","webpack://metronic/../demo1/src/js/components/wizard.js","webpack://metronic/../demo1/src/js/layout/base/aside-menu.js","webpack://metronic/../demo1/src/js/layout/base/aside-toggle.js","webpack://metronic/../demo1/src/js/layout/base/aside.js","webpack://metronic/../demo1/src/js/layout/base/brand.js","webpack://metronic/../demo1/src/js/layout/base/content.js","webpack://metronic/../demo1/src/js/layout/base/footer.js","webpack://metronic/../demo1/src/js/layout/base/header-menu.js","webpack://metronic/../demo1/src/js/layout/base/header-topbar.js","webpack://metronic/../demo1/src/js/layout/base/header.js","webpack://metronic/../demo1/src/js/layout/base/sticky-card.js","webpack://metronic/../demo1/src/js/layout/base/stretched-card.js","webpack://metronic/../demo1/src/js/layout/base/subheader.js","webpack://metronic/../demo1/src/js/layout/extended/chat.js","webpack://metronic/../demo1/src/js/layout/extended/demo-panel.js","webpack://metronic/../demo1/src/js/layout/extended/examples.js","webpack://metronic/../demo1/src/js/layout/extended/quick-actions.js","webpack://metronic/../demo1/src/js/layout/extended/quick-cart.js","webpack://metronic/../demo1/src/js/layout/extended/quick-notifications.js","webpack://metronic/../demo1/src/js/layout/extended/quick-panel.js","webpack://metronic/../demo1/src/js/layout/extended/quick-search.js","webpack://metronic/../demo1/src/js/layout/extended/quick-user.js","webpack://metronic/../demo1/src/js/layout/extended/scrolltop.js","webpack://metronic/../demo1/src/js/layout/extended/search.js","webpack://metronic/../demo1/src/js/layout/initialize.js","webpack://metronic/webpack/bootstrap","webpack://metronic/./webpack/scripts.demo1.js"],"sourcesContent":["\"use strict\";\n\n// Component Definition\nvar KTApp = function() {\n /** @type {object} colors State colors **/\n var settings = {};\n\n var initTooltip = function(el) {\n var theme = el.data('theme') ? 'tooltip-' + el.data('theme') : '';\n var width = el.data('width') == 'auto' ? 'tooltop-auto-width' : '';\n var trigger = el.data('trigger') ? el.data('trigger') : 'hover';\n\n $(el).tooltip({\n trigger: trigger,\n template: '
\\\n
\\\n
\\\n
'\n });\n }\n\n var initTooltips = function() {\n // init bootstrap tooltips\n $('[data-toggle=\"tooltip\"]').each(function() {\n initTooltip($(this));\n });\n }\n\n var initPopover = function(el) {\n var skin = el.data('skin') ? 'popover-' + el.data('skin') : '';\n var triggerValue = el.data('trigger') ? el.data('trigger') : 'hover';\n\n el.popover({\n trigger: triggerValue,\n template: '\\\n
\\\n
\\\n

\\\n
\\\n
'\n });\n }\n\n var initPopovers = function() {\n // init bootstrap popover\n $('[data-toggle=\"popover\"]').each(function() {\n initPopover($(this));\n });\n }\n\n var initFileInput = function() {\n // init bootstrap popover\n $('.custom-file-input').on('change', function() {\n var fileName = $(this).val();\n $(this).next('.custom-file-label').addClass(\"selected\").html(fileName);\n });\n }\n\n var initScroll = function() {\n $('[data-scroll=\"true\"]').each(function() {\n var el = $(this);\n\n KTUtil.scrollInit(this, {\n mobileNativeScroll: true,\n handleWindowResize: true,\n rememberPosition: (el.data('remember-position') == 'true' ? true : false)\n });\n });\n }\n\n var initAlerts = function() {\n // init bootstrap popover\n $('body').on('click', '[data-close=alert]', function() {\n $(this).closest('.alert').hide();\n });\n }\n\n var initCard = function(el, options) {\n // init card tools\n var el = $(el);\n var card = new KTCard(el[0], options);\n }\n\n var initCards = function() {\n // init card tools\n $('[data-card=\"true\"]').each(function() {\n var el = $(this);\n var options = {};\n\n if (el.data('data-card-initialized') !== true) {\n initCard(el, options);\n el.data('data-card-initialized', true);\n }\n });\n }\n\n var initStickyCard = function() {\n if (typeof Sticky === 'undefined') {\n return;\n }\n\n var sticky = new Sticky('[data-sticky=\"true\"]');\n }\n\n var initAbsoluteDropdown = function(context) {\n var dropdownMenu;\n\n if (!context) {\n return;\n }\n\n $('body').on('show.bs.dropdown', context, function(e) {\n \tdropdownMenu = $(e.target).find('.dropdown-menu');\n \t$('body').append(dropdownMenu.detach());\n \tdropdownMenu.css('display', 'block');\n \tdropdownMenu.position({\n \t\t'my': 'right top',\n \t\t'at': 'right bottom',\n \t\t'of': $(e.relatedTarget),\n \t});\n }).on('hide.bs.dropdown', context, function(e) {\n \t$(e.target).append(dropdownMenu.detach());\n \tdropdownMenu.hide();\n });\n }\n\n var initAbsoluteDropdowns = function() {\n $('body').on('show.bs.dropdown', function(e) {\n // e.target is always parent (contains toggler and menu)\n var $toggler = $(e.target).find(\"[data-attach='body']\");\n if ($toggler.length === 0) {\n return;\n }\n var $dropdownMenu = $(e.target).find('.dropdown-menu');\n // save detached menu\n var $detachedDropdownMenu = $dropdownMenu.detach();\n // save reference to detached menu inside data of toggler\n $toggler.data('dropdown-menu', $detachedDropdownMenu);\n\n $('body').append($detachedDropdownMenu);\n $detachedDropdownMenu.css('display', 'block');\n $detachedDropdownMenu.position({\n my: 'right top',\n at: 'right bottom',\n of: $(e.relatedTarget),\n });\n });\n\n $('body').on('hide.bs.dropdown', function(e) {\n var $toggler = $(e.target).find(\"[data-attach='body']\");\n if ($toggler.length === 0) {\n return;\n }\n // access to reference of detached menu from data of toggler\n var $detachedDropdownMenu = $toggler.data('dropdown-menu');\n // re-append detached menu inside parent\n $(e.target).append($detachedDropdownMenu.detach());\n // hide dropdown\n $detachedDropdownMenu.hide();\n });\n };\n\n return {\n init: function(settingsArray) {\n if (settingsArray) {\n settings = settingsArray;\n }\n\n KTApp.initComponents();\n },\n\n initComponents: function() {\n initScroll();\n initTooltips();\n initPopovers();\n initAlerts();\n initFileInput();\n initCards();\n initStickyCard();\n initAbsoluteDropdowns();\n },\n\n initTooltips: function() {\n initTooltips();\n },\n\n initTooltip: function(el) {\n initTooltip(el);\n },\n\n initPopovers: function() {\n initPopovers();\n },\n\n initPopover: function(el) {\n initPopover(el);\n },\n\n initCard: function(el, options) {\n initCard(el, options);\n },\n\n initCards: function() {\n initCards();\n },\n\n initSticky: function() {\n initSticky();\n },\n\n initAbsoluteDropdown: function(context) {\n initAbsoluteDropdown(context);\n },\n\n block: function(target, options) {\n var el = $(target);\n\n options = $.extend(true, {\n opacity: 0.05,\n overlayColor: '#000000',\n type: '',\n size: '',\n state: 'primary',\n centerX: true,\n centerY: true,\n message: '',\n shadow: true,\n width: 'auto'\n }, options);\n\n var html;\n var version = options.type ? 'spinner-' + options.type : '';\n var state = options.state ? 'spinner-' + options.state : '';\n var size = options.size ? 'spinner-' + options.size : '';\n var spinner = ' 0) {\n var classes = 'blockui ' + (options.shadow === false ? 'blockui' : '');\n\n html = '
' + options.message + '' + spinner + '
';\n\n var el = document.createElement('div');\n\n $('body').prepend(el);\n KTUtil.addClass(el, classes);\n el.innerHTML = html;\n options.width = KTUtil.actualWidth(el) + 10;\n KTUtil.remove(el);\n\n if (target == 'body') {\n html = '
' + options.message + '' + spinner + '
';\n }\n } else {\n html = spinner;\n }\n\n var params = {\n message: html,\n centerY: options.centerY,\n centerX: options.centerX,\n css: {\n top: '30%',\n left: '50%',\n border: '0',\n padding: '0',\n backgroundColor: 'none',\n width: options.width\n },\n overlayCSS: {\n backgroundColor: options.overlayColor,\n opacity: options.opacity,\n cursor: 'wait',\n zIndex: (target == 'body' ? 1100 : 10)\n },\n onUnblock: function() {\n if (el && el[0]) {\n KTUtil.css(el[0], 'position', '');\n KTUtil.css(el[0], 'zoom', '');\n }\n }\n };\n\n if (target == 'body') {\n params.css.top = '50%';\n $.blockUI(params);\n } else {\n var el = $(target);\n el.block(params);\n }\n },\n\n unblock: function(target) {\n if (target && target != 'body') {\n $(target).unblock();\n } else {\n $.unblockUI();\n }\n },\n\n blockPage: function(options) {\n return KTApp.block('body', options);\n },\n\n unblockPage: function() {\n return KTApp.unblock('body');\n },\n\n getSettings: function() {\n return settings;\n }\n };\n}();\n\n// webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = KTApp;\n}\n\n// Initialize KTApp class on document ready\n$(document).ready(function() {\n KTApp.init(KTAppSettings);\n});\n\n// CSS3 Transitions only after page load(.page-loading class added to body tag and remove with JS on page load)\nwindow.onload = function() {\n var result = KTUtil.getByTagName('body');\n if (result && result[0]) {\n KTUtil.removeClass(result[0], 'page-loading');\n }\n}","\"use strict\";\n\n// Component Definition\nvar KTCard = function(elementId, options) {\n // Main object\n var the = this;\n var init = false;\n\n // Get element object\n var element = KTUtil.getById(elementId);\n var body = KTUtil.getBody();\n\n if (!element) {\n return;\n }\n\n // Default options\n var defaultOptions = {\n toggleSpeed: 400,\n sticky: {\n releseOnReverse: false,\n offset: 300,\n zIndex: 101\n }\n };\n\n ////////////////////////////\n // ** Private Methods ** //\n ////////////////////////////\n\n var Plugin = {\n /**\n * Construct\n */\n\n construct: function(options) {\n if (KTUtil.data(element).has('card')) {\n the = KTUtil.data(element).get('card');\n } else {\n // reset menu\n Plugin.init(options);\n\n // build menu\n Plugin.build();\n\n KTUtil.data(element).set('card', the);\n }\n\n return the;\n },\n\n /**\n * Init card\n */\n init: function(options) {\n the.element = element;\n the.events = [];\n\n // merge default and user defined options\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\n the.header = KTUtil.child(element, '.card-header');\n the.footer = KTUtil.child(element, '.card-footer');\n\n if (KTUtil.child(element, '.card-body')) {\n the.body = KTUtil.child(element, '.card-body');\n } else if (KTUtil.child(element, '.form')) {\n the.body = KTUtil.child(element, '.form');\n }\n },\n\n /**\n * Build Form Wizard\n */\n build: function() {\n // Remove\n var remove = KTUtil.find(the.header, '[data-card-tool=remove]');\n if (remove) {\n KTUtil.addEvent(remove, 'click', function(e) {\n e.preventDefault();\n Plugin.remove();\n });\n }\n\n // Reload\n var reload = KTUtil.find(the.header, '[data-card-tool=reload]');\n if (reload) {\n KTUtil.addEvent(reload, 'click', function(e) {\n e.preventDefault();\n Plugin.reload();\n });\n }\n\n // Toggle\n var toggle = KTUtil.find(the.header, '[data-card-tool=toggle]');\n if (toggle) {\n KTUtil.addEvent(toggle, 'click', function(e) {\n e.preventDefault();\n Plugin.toggle();\n });\n }\n },\n\n /**\n * Enable stickt mode\n */\n initSticky: function() {\n var lastScrollTop = 0;\n var offset = the.options.sticky.offset;\n\n if (!the.header) {\n return;\n }\n\n\t window.addEventListener('scroll', Plugin.onScrollSticky);\n },\n\n\t /**\n\t * Window scroll handle event for sticky card\n\t */\n\t onScrollSticky: function(e) {\n\t\t var offset = the.options.sticky.offset;\n\n\t\t if(isNaN(offset)) return;\n\n\t\t var st = KTUtil.getScrollTop();\n\n\t\t if (st >= offset && KTUtil.hasClass(body, 'card-sticky-on') === false) {\n\t\t\t Plugin.eventTrigger('stickyOn');\n\n\t\t\t KTUtil.addClass(body, 'card-sticky-on');\n\n\t\t\t Plugin.updateSticky();\n\n\t\t } else if ((st*1.5) <= offset && KTUtil.hasClass(body, 'card-sticky-on')) {\n\t\t\t // Back scroll mode\n\t\t\t Plugin.eventTrigger('stickyOff');\n\n\t\t\t KTUtil.removeClass(body, 'card-sticky-on');\n\n\t\t\t Plugin.resetSticky();\n\t\t }\n\t },\n\n updateSticky: function() {\n if (!the.header) {\n return;\n }\n\n var top;\n\n if (KTUtil.hasClass(body, 'card-sticky-on')) {\n if (the.options.sticky.position.top instanceof Function) {\n top = parseInt(the.options.sticky.position.top.call(this, the));\n } else {\n top = parseInt(the.options.sticky.position.top);\n }\n\n var left;\n if (the.options.sticky.position.left instanceof Function) {\n left = parseInt(the.options.sticky.position.left.call(this, the));\n } else {\n left = parseInt(the.options.sticky.position.left);\n }\n\n var right;\n if (the.options.sticky.position.right instanceof Function) {\n right = parseInt(the.options.sticky.position.right.call(this, the));\n } else {\n right = parseInt(the.options.sticky.position.right);\n }\n\n KTUtil.css(the.header, 'z-index', the.options.sticky.zIndex);\n KTUtil.css(the.header, 'top', top + 'px');\n KTUtil.css(the.header, 'left', left + 'px');\n KTUtil.css(the.header, 'right', right + 'px');\n }\n },\n\n resetSticky: function() {\n if (!the.header) {\n return;\n }\n\n if (KTUtil.hasClass(body, 'card-sticky-on') === false) {\n KTUtil.css(the.header, 'z-index', '');\n KTUtil.css(the.header, 'top', '');\n KTUtil.css(the.header, 'left', '');\n KTUtil.css(the.header, 'right', '');\n }\n },\n\n /**\n * Remove card\n */\n remove: function() {\n if (Plugin.eventTrigger('beforeRemove') === false) {\n return;\n }\n\n // Remove tooltips\n var tooltips;\n if ( tooltips = document.querySelectorAll('.tooltip.show') ) {\n $(tooltips).tooltip('dispose');\n }\n\n KTUtil.remove(element);\n\n Plugin.eventTrigger('afterRemove');\n },\n\n /**\n * Set content\n */\n setContent: function(html) {\n if (html) {\n the.body.innerHTML = html;\n }\n },\n\n /**\n * Get body\n */\n getBody: function() {\n return the.body;\n },\n\n /**\n * Get self\n */\n getSelf: function() {\n return element;\n },\n\n /**\n * Reload\n */\n reload: function() {\n Plugin.eventTrigger('reload');\n },\n\n /**\n * Toggle\n */\n toggle: function() {\n if (KTUtil.hasClass(element, 'card-collapse') || KTUtil.hasClass(element, 'card-collapsed')) {\n Plugin.expand();\n } else {\n Plugin.collapse();\n }\n },\n\n /**\n * Collapse\n */\n collapse: function() {\n if (Plugin.eventTrigger('beforeCollapse') === false) {\n return;\n }\n\n KTUtil.slideUp(the.body, the.options.toggleSpeed, function() {\n Plugin.eventTrigger('afterCollapse');\n });\n\n KTUtil.addClass(element, 'card-collapse');\n },\n\n /**\n * Expand\n */\n expand: function() {\n if (Plugin.eventTrigger('beforeExpand') === false) {\n return;\n }\n\n KTUtil.slideDown(the.body, the.options.toggleSpeed, function() {\n Plugin.eventTrigger('afterExpand');\n });\n\n KTUtil.removeClass(element, 'card-collapse');\n KTUtil.removeClass(element, 'card-collapsed');\n },\n\n /**\n * Trigger events\n */\n eventTrigger: function(name) {\n //KTUtil.triggerCustomEvent(name);\n for (var i = 0; i < the.events.length; i++) {\n var event = the.events[i];\n if (event.name == name) {\n if (event.one == true) {\n if (event.fired == false) {\n the.events[i].fired = true;\n return event.handler.call(this, the);\n }\n } else {\n return event.handler.call(this, the);\n }\n }\n }\n },\n\n addEvent: function(name, handler, one) {\n the.events.push({\n name: name,\n handler: handler,\n one: one,\n fired: false\n });\n\n return the;\n }\n };\n\n //////////////////////////\n // ** Public Methods ** //\n //////////////////////////\n\n /**\n * Set default options\n */\n\n the.setDefaults = function(options) {\n defaultOptions = options;\n };\n\n /**\n * Remove card\n */\n the.remove = function() {\n return Plugin.remove(html);\n };\n\n /**\n * Init sticky card\n */\n the.initSticky = function() {\n return Plugin.initSticky();\n };\n\n /**\n * Rerender sticky layout\n */\n the.updateSticky = function() {\n return Plugin.updateSticky();\n };\n\n /**\n * Reset the sticky\n */\n the.resetSticky = function() {\n return Plugin.resetSticky();\n };\n\n\t/**\n\t * Destroy sticky card\n\t */\n\tthe.destroySticky = function() {\n\t\tPlugin.resetSticky();\n\t\twindow.removeEventListener('scroll', Plugin.onScrollSticky);\n\t};\n\n /**\n * Reload card\n */\n the.reload = function() {\n return Plugin.reload();\n };\n\n /**\n * Set card content\n */\n the.setContent = function(html) {\n return Plugin.setContent(html);\n };\n\n /**\n * Toggle card\n */\n the.toggle = function() {\n return Plugin.toggle();\n };\n\n /**\n * Collapse card\n */\n the.collapse = function() {\n return Plugin.collapse();\n };\n\n /**\n * Expand card\n */\n the.expand = function() {\n return Plugin.expand();\n };\n\n /**\n * Get cardbody\n * @returns {jQuery}\n */\n the.getBody = function() {\n return Plugin.getBody();\n };\n\n /**\n * Get cardbody\n * @returns {jQuery}\n */\n the.getSelf = function() {\n return Plugin.getSelf();\n };\n\n /**\n * Attach event\n */\n the.on = function(name, handler) {\n return Plugin.addEvent(name, handler);\n };\n\n /**\n * Attach event that will be fired once\n */\n the.one = function(name, handler) {\n return Plugin.addEvent(name, handler, true);\n };\n\n // Construct plugin\n Plugin.construct.apply(the, [options]);\n\n return the;\n};\n\n// webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = KTCard;\n}\n","\"use strict\";\n// DOCS: https://javascript.info/cookie\n\n// Component Definition\nvar KTCookie = function() {\n return {\n // returns the cookie with the given name,\n // or undefined if not found\n getCookie: function(name) {\n var matches = document.cookie.match(new RegExp(\n \"(?:^|; )\" + name.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g, '\\\\$1') + \"=([^;]*)\"\n ));\n return matches ? decodeURIComponent(matches[1]) : undefined;\n },\n // Please note that a cookie value is encoded,\n // so getCookie uses a built-in decodeURIComponent function to decode it.\n setCookie: function(name, value, options) {\n if (!options) {\n options = {};\n }\n\n options = Object.assign({}, {path: '/'}, options);\n\n if (options.expires instanceof Date) {\n options.expires = options.expires.toUTCString();\n }\n\n var updatedCookie = encodeURIComponent(name) + \"=\" + encodeURIComponent(value);\n\n for (var optionKey in options) {\n if (!options.hasOwnProperty(optionKey)) {\n continue;\n }\n updatedCookie += \"; \" + optionKey;\n var optionValue = options[optionKey];\n if (optionValue !== true) {\n updatedCookie += \"=\" + optionValue;\n }\n }\n\n document.cookie = updatedCookie;\n },\n // To delete a cookie, we can call it with a negative expiration date:\n deleteCookie: function(name) {\n setCookie(name, \"\", {\n 'max-age': -1\n })\n }\n }\n}();\n\n// webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = KTCookie;\n}\n","'use strict';\n(function($) {\n\n\tvar pluginName = 'KTDatatable';\n\tvar pfx = '';\n\tvar util = KTUtil;\n\tvar app = KTApp;\n\n\tif (typeof util === 'undefined') throw new Error('Util class is required and must be included before ' + pluginName);\n\n\t// plugin setup\n\t$.fn[pluginName] = function(options) {\n\t\tif ($(this).length === 0) {\n\t\t\tconsole.warn('No ' + pluginName + ' element exist.');\n\t\t\treturn;\n\t\t}\n\n\t\t// global variables\n\t\tvar datatable = this;\n\n\t\t// debug enabled?\n\t\t// 1) state will be cleared on each refresh\n\t\t// 2) enable some logs\n\t\t// 3) etc.\n\t\tdatatable.debug = false;\n\n\t\tdatatable.API = {\n\t\t\trecord: null,\n\t\t\tvalue: null,\n\t\t\tparams: null,\n\t\t};\n\n\t\tvar Plugin = {\n\t\t\t/********************\n\t\t\t ** PRIVATE METHODS\n\t\t\t ********************/\n\t\t\tisInit: false,\n\t\t\tcellOffset: 108,\n\t\t\ticonOffset: 15,\n\t\t\tstateId: 'meta',\n\t\t\tajaxParams: {},\n\t\t\tpagingObject: {},\n\n\t\t\tinit: function(options) {\n\t\t\t\tvar isHtmlTable = false;\n\t\t\t\t// data source option empty is normal table\n\t\t\t\tif (options.data.source === null) {\n\t\t\t\t\tPlugin.extractTable();\n\t\t\t\t\tisHtmlTable = true;\n\t\t\t\t}\n\n\t\t\t\tPlugin.setupBaseDOM.call();\n\t\t\t\tPlugin.setupDOM(datatable.table);\n\n\t\t\t\t// on event after layout had done setup, show datatable\n\t\t\t\t$(datatable).on(pfx + 'datatable-on-layout-updated', Plugin.afterRender);\n\n\t\t\t\tif (datatable.debug) {\n\t\t\t\t\tPlugin.stateRemove(Plugin.stateId);\n\t\t\t\t}\n\n\t\t\t\t/*var es = Plugin.stateGet(Plugin.stateId);\n\t\t\t\tvar eq = {};\n\t\t\t\tif (es && es.hasOwnProperty('query')) {\n\t\t\t\t\teq = es.query;\n\t\t\t\t}\n\t\t\t\tPlugin.setDataSourceQuery(Object.assign({}, eq, Plugin.getOption('data.source.read.params.query')));*/\n\n\t\t\t\t// set custom query from options\n\t\t\t\tPlugin.setDataSourceQuery(Plugin.getOption('data.source.read.params.query'));\n\n\t\t\t\t// initialize extensions\n\t\t\t\t$.each(Plugin.getOption('extensions'), function(extName, extOptions) {\n\t\t\t\t\tif (typeof $.fn[pluginName][extName] === 'function') {\n\t\t\t\t\t\tif (typeof extOptions !== 'object') {\n\t\t\t\t\t\t\textOptions = $.extend({}, extOptions);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnew $.fn[pluginName][extName](datatable, extOptions);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tPlugin.spinnerCallback(true);\n\t\t\t\t// get data\n\t\t\t\tif (options.data.type === 'remote' || options.data.type === 'local') {\n\t\t\t\t\tif (options.data.saveState === false) {\n\t\t\t\t\t\tPlugin.stateRemove(Plugin.stateId);\n\t\t\t\t\t}\n\t\t\t\t\t// get data for local datatable and local table\n\t\t\t\t\tif (options.data.type === 'local' && typeof options.data.source === 'object') {\n\t\t\t\t\t\tdatatable.dataSet = datatable.originalDataSet = Plugin.dataMapCallback(options.data.source);\n\t\t\t\t\t}\n\t\t\t\t\tPlugin.dataRender();\n\t\t\t\t}\n\n\t\t\t\t// if html table, remove and setup a new header\n\t\t\t\tif (isHtmlTable) {\n\t\t\t\t\t$(datatable.tableHead).find('tr').remove();\n\t\t\t\t\t$(datatable.tableFoot).find('tr').remove();\n\t\t\t\t}\n\n\t\t\t\tPlugin.setHeadTitle();\n\t\t\t\tif (Plugin.getOption('layout.footer')) {\n\t\t\t\t\tPlugin.setHeadTitle(datatable.tableFoot);\n\t\t\t\t}\n\n\t\t\t\t// hide header\n\t\t\t\tif (typeof options.layout.header !== 'undefined' &&\n\t\t\t\t\toptions.layout.header === false) {\n\t\t\t\t\t$(datatable.table).find('thead').remove();\n\t\t\t\t}\n\n\t\t\t\t// hide footer\n\t\t\t\tif (typeof options.layout.footer !== 'undefined' &&\n\t\t\t\t\toptions.layout.footer === false) {\n\t\t\t\t\t$(datatable.table).find('tfoot').remove();\n\t\t\t\t}\n\n\t\t\t\t// for normal and local data type, run layoutUpdate\n\t\t\t\tif (options.data.type === null ||\n\t\t\t\t\toptions.data.type === 'local') {\n\t\t\t\t\tPlugin.setupCellField.call();\n\t\t\t\t\tPlugin.setupTemplateCell.call();\n\n\t\t\t\t\t// setup nested datatable, if option enabled\n\t\t\t\t\tPlugin.setupSubDatatable.call();\n\n\t\t\t\t\t// setup extra system column properties\n\t\t\t\t\tPlugin.setupSystemColumn.call();\n\t\t\t\t\tPlugin.redraw();\n\t\t\t\t}\n\n\t\t\t\tvar width;\n\t\t\t\tvar initialWidth = false;\n\t\t\t\t$(window).resize(function() {\n\t\t\t\t\t// issue: URL Bar Resizing on mobile, https://developers.google.com/web/updates/2016/12/url-bar-resizing\n\t\t\t\t\t// trigger datatable resize on width change only\n\t\t\t\t\tif ($(this).width() !== width) {\n\t\t\t\t\t\twidth = $(this).width();\n\t\t\t\t\t\tPlugin.fullRender();\n\t\t\t\t\t}\n\t\t\t\t\t// get initial width\n\t\t\t\t\tif (!initialWidth) {\n\t\t\t\t\t\twidth = $(this).width();\n\t\t\t\t\t\tinitialWidth = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t$(datatable).height('');\n\n\t\t\t\tvar prevKeyword = '';\n\t\t\t\t$(Plugin.getOption('search.input')).on('keyup', function(e) {\n\t\t\t\t\tif (Plugin.getOption('search.onEnter') && e.which !== 13) return;\n\t\t\t\t\tvar keyword = $(this).val();\n\t\t\t\t\t// prevent multiple search request on every button keyup\n\t\t\t\t\tif (prevKeyword !== keyword) {\n\t\t\t\t\t\tPlugin.search(keyword);\n\t\t\t\t\t\tprevKeyword = keyword;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn datatable;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Extract static HTML table content into datasource\n\t\t\t */\n\t\t\textractTable: function() {\n\t\t\t\tvar columns = [];\n\t\t\t\tvar headers = $(datatable).find('tr:first-child th').get().map(function(cell, i) {\n\t\t\t\t\tvar field = $(cell).data('field');\n\t\t\t\t\tvar title = $(cell).data('title');\n\t\t\t\t\tif (typeof field === 'undefined') {\n\t\t\t\t\t\tfield = $(cell).text().trim();\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof title === 'undefined') {\n\t\t\t\t\t\ttitle = $(cell).text().trim();\n\t\t\t\t\t}\n\t\t\t\t\tvar column = {field: field, title: title};\n\t\t\t\t\tfor (var ii in options.columns) {\n\t\t\t\t\t\tif (options.columns[ii].field === field) {\n\t\t\t\t\t\t\tcolumn = $.extend(true, {}, options.columns[ii], column);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcolumns.push(column);\n\t\t\t\t\treturn field;\n\t\t\t\t});\n\t\t\t\t// auto create columns config\n\t\t\t\toptions.columns = columns;\n\n\t\t\t\tvar rowProp = [];\n\t\t\t\tvar source = [];\n\n\t\t\t\t$(datatable).find('tr').each(function() {\n\t\t\t\t\tif ($(this).find('td').length) {\n\t\t\t\t\t\trowProp.push($(this).prop('attributes'));\n\t\t\t\t\t}\n\t\t\t\t\tvar td = {};\n\t\t\t\t\t$(this).find('td').each(function(i, cell) {\n\t\t\t\t\t\ttd[headers[i]] = cell.innerHTML.trim();\n\t\t\t\t\t});\n\t\t\t\t\tif (!util.isEmpty(td)) {\n\t\t\t\t\t\tsource.push(td);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\toptions.data.attr.rowProps = rowProp;\n\t\t\t\toptions.data.source = source;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * One time layout update on init\n\t\t\t */\n\t\t\tlayoutUpdate: function() {\n\t\t\t\t// setup nested datatable, if option enabled\n\t\t\t\tPlugin.setupSubDatatable.call();\n\n\t\t\t\t// setup extra system column properties\n\t\t\t\tPlugin.setupSystemColumn.call();\n\n\t\t\t\t// setup cell hover event\n\t\t\t\tPlugin.setupHover.call();\n\n\t\t\t\tif (typeof options.detail === 'undefined'\n\t\t\t\t\t// temporary disable lock column in subtable\n\t\t\t\t\t&& Plugin.getDepth() === 1) {\n\t\t\t\t\t// lock columns handler\n\t\t\t\t\tPlugin.lockTable.call();\n\t\t\t\t}\n\n\t\t\t\tPlugin.resetScroll();\n\n\t\t\t\t// check if not is a locked column\n\t\t\t\tif (!Plugin.isLocked()) {\n\t\t\t\t\tPlugin.redraw.call();\n\t\t\t\t\t// check if its not a subtable and has autoHide option enabled\n\t\t\t\t\tif (!Plugin.isSubtable() && Plugin.getOption('rows.autoHide') === true) {\n\t\t\t\t\t\tPlugin.autoHide();\n\t\t\t\t\t}\n\t\t\t\t\t// reset row\n\t\t\t\t\t$(datatable.table).find('.' + pfx + 'datatable-row').css('height', '');\n\t\t\t\t}\n\n\t\t\t\tPlugin.columnHide.call();\n\n\t\t\t\tPlugin.rowEvenOdd.call();\n\n\t\t\t\tPlugin.sorting.call();\n\n\t\t\t\tPlugin.scrollbar.call();\n\n\t\t\t\tif (!Plugin.isInit) {\n\t\t\t\t\t// run once dropdown inside datatable\n\t\t\t\t\tPlugin.dropdownFix();\n\t\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-init', {table: $(datatable.wrap).attr('id'), options: options});\n\t\t\t\t\tPlugin.isInit = true;\n\t\t\t\t}\n\n\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-layout-updated', {table: $(datatable.wrap).attr('id')});\n\t\t\t},\n\n\t\t\tdropdownFix: function() {\n\t\t\t\tvar dropdownMenu;\n\t\t\t\t$('body').on('show.bs.dropdown', '.' + pfx + 'datatable .' + pfx + 'datatable-body', function(e) {\n\t\t\t\t\tdropdownMenu = $(e.target).find('.dropdown-menu');\n\t\t\t\t\t$('body').append(dropdownMenu.detach());\n\t\t\t\t\tdropdownMenu.css('display', 'block');\n\t\t\t\t\tdropdownMenu.position({\n\t\t\t\t\t\t'my': 'right top',\n\t\t\t\t\t\t'at': 'right bottom',\n\t\t\t\t\t\t'of': $(e.relatedTarget),\n\t\t\t\t\t});\n\t\t\t\t\t// if datatable is inside modal\n\t\t\t\t\tif (datatable.closest('.modal').length) {\n\t\t\t\t\t\t// increase dropdown z-index\n\t\t\t\t\t\tdropdownMenu.css('z-index', '2000');\n\t\t\t\t\t}\n\t\t\t\t}).on('hide.bs.dropdown', '.' + pfx + 'datatable .' + pfx + 'datatable-body', function(e) {\n\t\t\t\t\tif (typeof dropdownMenu !== 'undefined') {\n\t\t\t\t\t\t$(e.target).append(dropdownMenu.detach());\n\t\t\t\t\t\tdropdownMenu.hide();\n\t\t\t\t\t\tdropdownMenu.css('display', '');\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// remove dropdown if window resize\n\t\t\t\t$(window).on('resize', function(e) {\n\t\t\t\t\tif (typeof dropdownMenu !== 'undefined') {\n\t\t\t\t\t\tdropdownMenu.hide();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\n\t\t\tlockTable: function() {\n\t\t\t\tvar lock = {\n\t\t\t\t\tlockEnabled: false,\n\t\t\t\t\tinit: function() {\n\t\t\t\t\t\t// check if table should be locked columns\n\t\t\t\t\t\tlock.lockEnabled = Plugin.lockEnabledColumns();\n\t\t\t\t\t\tif (lock.lockEnabled.left.length === 0 &&\n\t\t\t\t\t\t\tlock.lockEnabled.right.length === 0) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlock.enable();\n\t\t\t\t\t},\n\t\t\t\t\tenable: function() {\n\t\t\t\t\t\tvar enableLock = function(tablePart) {\n\t\t\t\t\t\t\t// check if already has lock column\n\t\t\t\t\t\t\tif ($(tablePart).find('.' + pfx + 'datatable-lock').length > 0) {\n\t\t\t\t\t\t\t\tPlugin.log('Locked container already exist in: ', tablePart);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// check if no rows exists\n\t\t\t\t\t\t\tif ($(tablePart).find('.' + pfx + 'datatable-row').length === 0) {\n\t\t\t\t\t\t\t\tPlugin.log('No row exist in: ', tablePart);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// locked div container\n\t\t\t\t\t\t\tvar lockLeft = $('
').addClass(pfx + 'datatable-lock ' + pfx + 'datatable-lock-left');\n\t\t\t\t\t\t\tvar lockScroll = $('
').addClass(pfx + 'datatable-lock ' + pfx + 'datatable-lock-scroll');\n\t\t\t\t\t\t\tvar lockRight = $('
').addClass(pfx + 'datatable-lock ' + pfx + 'datatable-lock-right');\n\n\t\t\t\t\t\t\t$(tablePart).find('.' + pfx + 'datatable-row').each(function() {\n\t\t\t\t\t\t\t\t// create new row for lock columns and pass the data\n\t\t\t\t\t\t\t\tvar rowLeft = $('').addClass(pfx + 'datatable-row').data('obj', $(this).data('obj')).appendTo(lockLeft);\n\t\t\t\t\t\t\t\tvar rowScroll = $('').addClass(pfx + 'datatable-row').data('obj', $(this).data('obj')).appendTo(lockScroll);\n\t\t\t\t\t\t\t\tvar rowRight = $('').addClass(pfx + 'datatable-row').data('obj', $(this).data('obj')).appendTo(lockRight);\n\t\t\t\t\t\t\t\t$(this).find('.' + pfx + 'datatable-cell').each(function() {\n\t\t\t\t\t\t\t\t\tvar locked = $(this).data('locked');\n\t\t\t\t\t\t\t\t\tif (typeof locked !== 'undefined') {\n\t\t\t\t\t\t\t\t\t\tif (typeof locked.left !== 'undefined' || locked === true) {\n\t\t\t\t\t\t\t\t\t\t\t// default locked to left\n\t\t\t\t\t\t\t\t\t\t\t$(this).appendTo(rowLeft);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif (typeof locked.right !== 'undefined') {\n\t\t\t\t\t\t\t\t\t\t\t$(this).appendTo(rowRight);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t$(this).appendTo(rowScroll);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t// remove old row\n\t\t\t\t\t\t\t\t$(this).remove();\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (lock.lockEnabled.left.length > 0) {\n\t\t\t\t\t\t\t\t$(datatable.wrap).addClass(pfx + 'datatable-lock');\n\t\t\t\t\t\t\t\t$(lockLeft).appendTo(tablePart);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (lock.lockEnabled.left.length > 0 || lock.lockEnabled.right.length > 0) {\n\t\t\t\t\t\t\t\t$(lockScroll).appendTo(tablePart);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (lock.lockEnabled.right.length > 0) {\n\t\t\t\t\t\t\t\t$(datatable.wrap).addClass(pfx + 'datatable-lock');\n\t\t\t\t\t\t\t\t$(lockRight).appendTo(tablePart);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t$(datatable.table).find('thead,tbody,tfoot').each(function() {\n\t\t\t\t\t\t\tvar tablePart = this;\n\t\t\t\t\t\t\tif ($(this).find('.' + pfx + 'datatable-lock').length === 0) {\n\t\t\t\t\t\t\t\t$(this).ready(function() {\n\t\t\t\t\t\t\t\t\tenableLock(tablePart);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\tlock.init();\n\t\t\t\treturn lock;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Render everything for resize\n\t\t\t */\n\t\t\tfullRender: function() {\n\t\t\t\t$(datatable.tableHead).empty();\n\t\t\t\tPlugin.setHeadTitle();\n\t\t\t\tif (Plugin.getOption('layout.footer')) {\n\t\t\t\t\t$(datatable.tableFoot).empty();\n\t\t\t\t\tPlugin.setHeadTitle(datatable.tableFoot);\n\t\t\t\t}\n\n\t\t\t\tPlugin.spinnerCallback(true);\n\t\t\t\t$(datatable.wrap).removeClass(pfx + 'datatable-loaded');\n\n\t\t\t\tPlugin.insertData();\n\t\t\t},\n\n\t\t\tlockEnabledColumns: function() {\n\t\t\t\tvar screen = $(window).width();\n\t\t\t\tvar columns = options.columns;\n\t\t\t\tvar enabled = {left: [], right: []};\n\t\t\t\t$.each(columns, function(i, column) {\n\t\t\t\t\tif (typeof column.locked !== 'undefined') {\n\t\t\t\t\t\tif (typeof column.locked.left !== 'undefined') {\n\t\t\t\t\t\t\tif (util.getBreakpoint(column.locked.left) <= screen) {\n\t\t\t\t\t\t\t\tenabled['left'].push(column.locked.left);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof column.locked.right !== 'undefined') {\n\t\t\t\t\t\t\tif (util.getBreakpoint(column.locked.right) <= screen) {\n\t\t\t\t\t\t\t\tenabled['right'].push(column.locked.right);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn enabled;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * After render event, called by \"datatable-on-layout-updated\"\n\t\t\t * @param e\n\t\t\t * @param args\n\t\t\t */\n\t\t\tafterRender: function(e, args) {\n\t\t\t\t$(datatable).ready(function() {\n\t\t\t\t\t// redraw locked columns table\n\t\t\t\t\tif (Plugin.isLocked()) {\n\t\t\t\t\t\tPlugin.redraw();\n\t\t\t\t\t}\n\n\t\t\t\t\t$(datatable.tableBody).css('visibility', '');\n\t\t\t\t\t$(datatable.wrap).addClass(pfx + 'datatable-loaded');\n\n\t\t\t\t\tPlugin.spinnerCallback(false);\n\t\t\t\t});\n\t\t\t},\n\n\t\t\thoverTimer: 0,\n\t\t\tisScrolling: false,\n\t\t\tsetupHover: function() {\n\t\t\t\t$(window).scroll(function(e) {\n\t\t\t\t\t// stop hover when scrolling\n\t\t\t\t\tclearTimeout(Plugin.hoverTimer);\n\t\t\t\t\tPlugin.isScrolling = true;\n\t\t\t\t});\n\n\t\t\t\t$(datatable.tableBody).find('.' + pfx + 'datatable-cell').off('mouseenter', 'mouseleave').on('mouseenter', function() {\n\t\t\t\t\t// reset scroll timer to hover class\n\t\t\t\t\tPlugin.hoverTimer = setTimeout(function() {\n\t\t\t\t\t\tPlugin.isScrolling = false;\n\t\t\t\t\t}, 200);\n\t\t\t\t\tif (Plugin.isScrolling) return;\n\n\t\t\t\t\t// normal table\n\t\t\t\t\tvar row = $(this).closest('.' + pfx + 'datatable-row').addClass(pfx + 'datatable-row-hover');\n\t\t\t\t\tvar index = $(row).index() + 1;\n\n\t\t\t\t\t// lock table\n\t\t\t\t\t$(row).closest('.' + pfx + 'datatable-lock').parent().find('.' + pfx + 'datatable-row:nth-child(' + index + ')').addClass(pfx + 'datatable-row-hover');\n\t\t\t\t}).on('mouseleave', function() {\n\t\t\t\t\t// normal table\n\t\t\t\t\tvar row = $(this).closest('.' + pfx + 'datatable-row').removeClass(pfx + 'datatable-row-hover');\n\t\t\t\t\tvar index = $(row).index() + 1;\n\n\t\t\t\t\t// look table\n\t\t\t\t\t$(row).closest('.' + pfx + 'datatable-lock').parent().find('.' + pfx + 'datatable-row:nth-child(' + index + ')').removeClass(pfx + 'datatable-row-hover');\n\t\t\t\t});\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Adjust width of locked table containers by resize handler\n\t\t\t * @returns {number}\n\t\t\t */\n\t\t\tadjustLockContainer: function() {\n\t\t\t\tif (!Plugin.isLocked()) return 0;\n\n\t\t\t\t// refer to head dimension\n\t\t\t\tvar containerWidth = $(datatable.tableHead).width();\n\t\t\t\tvar lockLeft = $(datatable.tableHead).find('.' + pfx + 'datatable-lock-left').width();\n\t\t\t\tvar lockRight = $(datatable.tableHead).find('.' + pfx + 'datatable-lock-right').width();\n\n\t\t\t\tif (typeof lockLeft === 'undefined') lockLeft = 0;\n\t\t\t\tif (typeof lockRight === 'undefined') lockRight = 0;\n\n\t\t\t\tvar lockScroll = Math.floor(containerWidth - lockLeft - lockRight);\n\t\t\t\t$(datatable.table).find('.' + pfx + 'datatable-lock-scroll').css('width', lockScroll);\n\n\t\t\t\treturn lockScroll;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * todo; not in use\n\t\t\t */\n\t\t\tdragResize: function() {\n\t\t\t\tvar pressed = false;\n\t\t\t\tvar start = undefined;\n\t\t\t\tvar startX, startWidth;\n\t\t\t\t$(datatable.tableHead).find('.' + pfx + 'datatable-cell').mousedown(function(e) {\n\t\t\t\t\tstart = $(this);\n\t\t\t\t\tpressed = true;\n\t\t\t\t\tstartX = e.pageX;\n\t\t\t\t\tstartWidth = $(this).width();\n\t\t\t\t\t$(start).addClass(pfx + 'datatable-cell-resizing');\n\n\t\t\t\t}).mousemove(function(e) {\n\t\t\t\t\tif (pressed) {\n\t\t\t\t\t\tvar i = $(start).index();\n\t\t\t\t\t\tvar tableBody = $(datatable.tableBody);\n\t\t\t\t\t\tvar ifLocked = $(start).closest('.' + pfx + 'datatable-lock');\n\n\t\t\t\t\t\tif (ifLocked) {\n\t\t\t\t\t\t\tvar lockedIndex = $(ifLocked).index();\n\t\t\t\t\t\t\ttableBody = $(datatable.tableBody).find('.' + pfx + 'datatable-lock').eq(lockedIndex);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$(tableBody).find('.' + pfx + 'datatable-row').each(function(tri, tr) {\n\t\t\t\t\t\t\t$(tr).find('.' + pfx + 'datatable-cell').eq(i).width(startWidth + (e.pageX - startX)).children().width(startWidth + (e.pageX - startX));\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t$(start).children().css('width', startWidth + (e.pageX - startX));\n\t\t\t\t\t}\n\n\t\t\t\t}).mouseup(function() {\n\t\t\t\t\t$(start).removeClass(pfx + 'datatable-cell-resizing');\n\t\t\t\t\tpressed = false;\n\t\t\t\t});\n\n\t\t\t\t$(document).mouseup(function() {\n\t\t\t\t\t$(start).removeClass(pfx + 'datatable-cell-resizing');\n\t\t\t\t\tpressed = false;\n\t\t\t\t});\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * To prepare placeholder for table before content is loading\n\t\t\t */\n\t\t\tinitHeight: function() {\n\t\t\t\tif (options.layout.height && options.layout.scroll) {\n\t\t\t\t\tvar theadHeight = $(datatable.tableHead).find('.' + pfx + 'datatable-row').outerHeight();\n\t\t\t\t\tvar tfootHeight = $(datatable.tableFoot).find('.' + pfx + 'datatable-row').outerHeight();\n\t\t\t\t\tvar bodyHeight = options.layout.height;\n\t\t\t\t\tif (theadHeight > 0) {\n\t\t\t\t\t\tbodyHeight -= theadHeight;\n\t\t\t\t\t}\n\t\t\t\t\tif (tfootHeight > 0) {\n\t\t\t\t\t\tbodyHeight -= tfootHeight;\n\t\t\t\t\t}\n\n\t\t\t\t\t// scrollbar offset\n\t\t\t\t\tbodyHeight -= 2;\n\n\t\t\t\t\t$(datatable.tableBody).css('max-height', Math.floor(parseFloat(bodyHeight)));\n\n\t\t\t\t\t// set scrollable area fixed height\n\t\t\t\t\t// $(datatable.tableBody).find('.' + pfx + 'datatable-lock-scroll').css('height', Math.floor(parseFloat(bodyHeight)));\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Setup base DOM (table, thead, tbody, tfoot) and create if not\n\t\t\t * exist.\n\t\t\t */\n\t\t\tsetupBaseDOM: function() {\n\t\t\t\t// keep original state before datatable initialize\n\t\t\t\tdatatable.initialDatatable = $(datatable).clone();\n\n\t\t\t\t// main element\n\t\t\t\tif ($(datatable).prop('tagName') === 'TABLE') {\n\t\t\t\t\t// if main init element is , wrap with div\n\t\t\t\t\tdatatable.table = $(datatable).removeClass(pfx + 'datatable').addClass(pfx + 'datatable-table');\n\t\t\t\t\tif ($(datatable.table).parents('.' + pfx + 'datatable').length === 0) {\n\t\t\t\t\t\tdatatable.table.wrap($('
').addClass(pfx + 'datatable').addClass(pfx + 'datatable-' + options.layout.theme));\n\t\t\t\t\t\tdatatable.wrap = $(datatable.table).parent();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// create table\n\t\t\t\t\tdatatable.wrap = $(datatable).addClass(pfx + 'datatable').addClass(pfx + 'datatable-' + options.layout.theme);\n\t\t\t\t\tdatatable.table = $('
').addClass(pfx + 'datatable-table').appendTo(datatable);\n\t\t\t\t}\n\n\t\t\t\tif (typeof options.layout.class !== 'undefined') {\n\t\t\t\t\t$(datatable.wrap).addClass(options.layout.class);\n\t\t\t\t}\n\n\t\t\t\t$(datatable.table).removeClass(pfx + 'datatable-destroyed').css('display', 'block');\n\n\t\t\t\t// force disable save state\n\t\t\t\tif (typeof $(datatable).attr('id') === 'undefined') {\n\t\t\t\t\tPlugin.setOption('data.saveState', false);\n\t\t\t\t\t$(datatable.table).attr('id', util.getUniqueID(pfx + 'datatable-'));\n\t\t\t\t}\n\n\t\t\t\t// predefine table height\n\t\t\t\tif (Plugin.getOption('layout.minHeight'))\n\t\t\t\t\t$(datatable.table).css('min-height', Plugin.getOption('layout.minHeight'));\n\n\t\t\t\tif (Plugin.getOption('layout.height'))\n\t\t\t\t\t$(datatable.table).css('max-height', Plugin.getOption('layout.height'));\n\n\t\t\t\t// for normal table load\n\t\t\t\tif (options.data.type === null) {\n\t\t\t\t\t$(datatable.table).css('width', '').css('display', '');\n\t\t\t\t}\n\n\t\t\t\t// create table head element\n\t\t\t\tdatatable.tableHead = $(datatable.table).find('thead');\n\t\t\t\tif ($(datatable.tableHead).length === 0) {\n\t\t\t\t\tdatatable.tableHead = $('').prependTo(datatable.table);\n\t\t\t\t}\n\n\t\t\t\t// create table head element\n\t\t\t\tdatatable.tableBody = $(datatable.table).find('tbody');\n\t\t\t\tif ($(datatable.tableBody).length === 0) {\n\t\t\t\t\tdatatable.tableBody = $('').appendTo(datatable.table);\n\t\t\t\t}\n\n\t\t\t\tif (typeof options.layout.footer !== 'undefined' &&\n\t\t\t\t\toptions.layout.footer) {\n\t\t\t\t\t// create table foot element\n\t\t\t\t\tdatatable.tableFoot = $(datatable.table).find('tfoot');\n\t\t\t\t\tif ($(datatable.tableFoot).length === 0) {\n\t\t\t\t\t\tdatatable.tableFoot = $('').appendTo(datatable.table);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Set column data before table manipulation.\n\t\t\t */\n\t\t\tsetupCellField: function(tableParts) {\n\t\t\t\tif (typeof tableParts === 'undefined') tableParts = $(datatable.table).children();\n\t\t\t\tvar columns = options.columns;\n\t\t\t\t$.each(tableParts, function(part, tablePart) {\n\t\t\t\t\t$(tablePart).find('.' + pfx + 'datatable-row').each(function(tri, tr) {\n\t\t\t\t\t\t// prepare data\n\t\t\t\t\t\t$(tr).find('.' + pfx + 'datatable-cell').each(function(tdi, td) {\n\t\t\t\t\t\t\tif (typeof columns[tdi] !== 'undefined') {\n\t\t\t\t\t\t\t\t$(td).data(columns[tdi]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Set column template callback\n\t\t\t * @param tablePart\n\t\t\t */\n\t\t\tsetupTemplateCell: function(tablePart) {\n\t\t\t\tif (typeof tablePart === 'undefined') tablePart = datatable.tableBody;\n\t\t\t\tvar columns = options.columns;\n\t\t\t\t$(tablePart).find('.' + pfx + 'datatable-row').each(function(tri, tr) {\n\t\t\t\t\t// row data object, if any\n\t\t\t\t\tvar obj = $(tr).data('obj');\n\t\t\t\t\tif (typeof obj === 'undefined') {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// @deprecated in v5.0.6\n\t\t\t\t\t// obj['getIndex'] = function() {\n\t\t\t\t\t// \treturn tri;\n\t\t\t\t\t// };\n\t\t\t\t\t// @deprecated in v5.0.6\n\t\t\t\t\t// obj['getDatatable'] = function() {\n\t\t\t\t\t// \treturn datatable;\n\t\t\t\t\t// };\n\n\t\t\t\t\t// @deprecated in v5.0.6\n\t\t\t\t\tvar rowCallback = Plugin.getOption('rows.callback');\n\t\t\t\t\tif (typeof rowCallback === 'function') {\n\t\t\t\t\t\trowCallback($(tr), obj, tri);\n\t\t\t\t\t}\n\t\t\t\t\t// before template row callback\n\t\t\t\t\tvar beforeTemplate = Plugin.getOption('rows.beforeTemplate');\n\t\t\t\t\tif (typeof beforeTemplate === 'function') {\n\t\t\t\t\t\tbeforeTemplate($(tr), obj, tri);\n\t\t\t\t\t}\n\t\t\t\t\t// if data object is undefined, collect from table\n\t\t\t\t\tif (typeof obj === 'undefined') {\n\t\t\t\t\t\tobj = {};\n\t\t\t\t\t\t$(tr).find('.' + pfx + 'datatable-cell').each(function(tdi, td) {\n\t\t\t\t\t\t\t// get column settings by field\n\t\t\t\t\t\t\tvar column = $.grep(columns, function(n, i) {\n\t\t\t\t\t\t\t\treturn $(td).data('field') === n.field;\n\t\t\t\t\t\t\t})[0];\n\t\t\t\t\t\t\tif (typeof column !== 'undefined') {\n\t\t\t\t\t\t\t\tobj[column['field']] = $(td).text();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t$(tr).find('.' + pfx + 'datatable-cell').each(function(tdi, td) {\n\t\t\t\t\t\t// get column settings by field\n\t\t\t\t\t\tvar column = $.grep(columns, function(n, i) {\n\t\t\t\t\t\t\treturn $(td).data('field') === n.field;\n\t\t\t\t\t\t})[0];\n\t\t\t\t\t\tif (typeof column !== 'undefined') {\n\t\t\t\t\t\t\t// column template\n\t\t\t\t\t\t\tif (typeof column.template !== 'undefined') {\n\t\t\t\t\t\t\t\tvar finalValue = '';\n\t\t\t\t\t\t\t\t// template string\n\t\t\t\t\t\t\t\tif (typeof column.template === 'string') {\n\t\t\t\t\t\t\t\t\tfinalValue = Plugin.dataPlaceholder(column.template, obj);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// template callback function\n\t\t\t\t\t\t\t\tif (typeof column.template === 'function') {\n\t\t\t\t\t\t\t\t\tfinalValue = column.template(obj, tri, datatable);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// sanitize using DOMPurify if installed\n\t\t\t\t\t\t\t\tif (typeof DOMPurify !== 'undefined') {\n\t\t\t\t\t\t\t\t\tfinalValue = DOMPurify.sanitize(finalValue);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tvar span = document.createElement('span');\n\t\t\t\t\t\t\t\tspan.innerHTML = finalValue;\n\n\t\t\t\t\t\t\t\t// insert to cell, wrap with span\n\t\t\t\t\t\t\t\t$(td).html(span);\n\n\t\t\t\t\t\t\t\t// set span overflow\n\t\t\t\t\t\t\t\tif (typeof column.overflow !== 'undefined') {\n\t\t\t\t\t\t\t\t\t$(span).css('overflow', column.overflow);\n\t\t\t\t\t\t\t\t\t$(span).css('position', 'relative');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t// after template row callback\n\t\t\t\t\tvar afterTemplate = Plugin.getOption('rows.afterTemplate');\n\t\t\t\t\tif (typeof afterTemplate === 'function') {\n\t\t\t\t\t\tafterTemplate($(tr), obj, tri);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Setup extra system column properties\n\t\t\t * Note: selector checkbox, subtable toggle\n\t\t\t */\n\t\t\tsetupSystemColumn: function() {\n\t\t\t\tdatatable.dataSet = datatable.dataSet || [];\n\t\t\t\t// no records available\n\t\t\t\tif (datatable.dataSet.length === 0) return;\n\n\t\t\t\tvar columns = options.columns;\n\t\t\t\t$(datatable.tableBody).find('.' + pfx + 'datatable-row').each(function(tri, tr) {\n\t\t\t\t\t$(tr).find('.' + pfx + 'datatable-cell').each(function(tdi, td) {\n\t\t\t\t\t\t// get column settings by field\n\t\t\t\t\t\tvar column = $.grep(columns, function(n, i) {\n\t\t\t\t\t\t\treturn $(td).data('field') === n.field;\n\t\t\t\t\t\t})[0];\n\t\t\t\t\t\tif (typeof column !== 'undefined') {\n\t\t\t\t\t\t\tvar value = $(td).text();\n\n\t\t\t\t\t\t\t// enable column selector\n\t\t\t\t\t\t\tif (typeof column.selector !== 'undefined' && column.selector !== false) {\n\t\t\t\t\t\t\t\t// check if checkbox exist\n\t\t\t\t\t\t\t\tif ($(td).find('.' + pfx + 'checkbox [type=\"checkbox\"]').length > 0) return;\n\n\t\t\t\t\t\t\t\t$(td).addClass(pfx + 'datatable-cell-check');\n\n\t\t\t\t\t\t\t\t// append checkbox\n\t\t\t\t\t\t\t\tvar chk = $(' as parent and add as child table\n\t\t\t\t\t\tsubTableRow = $('').\n\t\t\t\t\t\t\taddClass(pfx + 'datatable-row-subtable ' + pfx + 'datatable-row-loading').\n\t\t\t\t\t\t\thide().\n\t\t\t\t\t\t\tappend($('').addClass(pfx + 'datatable-row-detail').insertAfter(row);\n\t\t\t\t\t\tvar detailRowTd = $('
').addClass(pfx + 'datatable-subtable').attr('colspan', Plugin.getTotalColumns()));\n\t\t\t\t\t\t$(parentRow).after(subTableRow);\n\t\t\t\t\t\t// add class to even row\n\t\t\t\t\t\tif ($(parentRow).hasClass(pfx + 'datatable-row-even')) {\n\t\t\t\t\t\t\t$(subTableRow).addClass(pfx + 'datatable-row-subtable-even');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t$(subTableRow).toggle();\n\n\t\t\t\t\tvar subTable = $(subTableRow).find('.' + pfx + 'datatable-subtable');\n\n\t\t\t\t\t// get id from first column of parent row\n\t\t\t\t\tvar primaryKey = $(this).closest('[data-field]:first-child').find('.' + pfx + 'datatable-toggle-subtable').data('value');\n\n\t\t\t\t\tvar icon = $(this).find('i').removeAttr('class');\n\n\t\t\t\t\t// prevent duplicate datatable init\n\t\t\t\t\tif ($(parentRow).hasClass(pfx + 'datatable-row-subtable-expanded')) {\n\t\t\t\t\t\t$(icon).addClass(Plugin.getOption('layout.icons.rowDetail.collapse'));\n\t\t\t\t\t\t// remove expand class from parent row\n\t\t\t\t\t\t$(parentRow).removeClass(pfx + 'datatable-row-subtable-expanded');\n\t\t\t\t\t\t// trigger event on collapse\n\t\t\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-collapse-subtable', [parentRow]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// expand and run callback function\n\t\t\t\t\t\t$(icon).addClass(Plugin.getOption('layout.icons.rowDetail.expand'));\n\t\t\t\t\t\t// add expand class to parent row\n\t\t\t\t\t\t$(parentRow).addClass(pfx + 'datatable-row-subtable-expanded');\n\t\t\t\t\t\t// trigger event on expand\n\t\t\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-expand-subtable', [parentRow]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// prevent duplicate datatable init\n\t\t\t\t\tif ($(subTable).find('.' + pfx + 'datatable').length === 0) {\n\t\t\t\t\t\t// get data by primary id\n\t\t\t\t\t\t$.map(datatable.dataSet, function(n, i) {\n\t\t\t\t\t\t\t// primary id must be at the first column, otherwise e.data will be undefined\n\t\t\t\t\t\t\tif (primaryKey === n[options.columns[0].field]) {\n\t\t\t\t\t\t\t\te.data = n;\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// deprecated in v5.0.6\n\t\t\t\t\t\te.detailCell = subTable;\n\n\t\t\t\t\t\te.parentRow = parentRow;\n\t\t\t\t\t\te.subTable = subTable;\n\n\t\t\t\t\t\t// run callback with event\n\t\t\t\t\t\tsubTableCallback(e);\n\n\t\t\t\t\t\t$(subTable).children('.' + pfx + 'datatable').on(pfx + 'datatable-on-init', function(e) {\n\t\t\t\t\t\t\t$(subTableRow).removeClass(pfx + 'datatable-row-loading');\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (Plugin.getOption('data.type') === 'local') {\n\t\t\t\t\t\t\t$(subTableRow).removeClass(pfx + 'datatable-row-loading');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tvar columns = options.columns;\n\t\t\t\t$(datatable.tableBody).find('.' + pfx + 'datatable-row').each(function(tri, tr) {\n\t\t\t\t\t$(tr).find('.' + pfx + 'datatable-cell').each(function(tdi, td) {\n\t\t\t\t\t\t// get column settings by field\n\t\t\t\t\t\tvar column = $.grep(columns, function(n, i) {\n\t\t\t\t\t\t\treturn $(td).data('field') === n.field;\n\t\t\t\t\t\t})[0];\n\t\t\t\t\t\tif (typeof column !== 'undefined') {\n\t\t\t\t\t\t\tvar value = $(td).text();\n\t\t\t\t\t\t\t// enable column subtable toggle\n\t\t\t\t\t\t\tif (typeof column.subtable !== 'undefined' && column.subtable) {\n\t\t\t\t\t\t\t\t// check if subtable toggle exist\n\t\t\t\t\t\t\t\tif ($(td).find('.' + pfx + 'datatable-toggle-subtable').length > 0) return;\n\t\t\t\t\t\t\t\t// append subtable toggle\n\t\t\t\t\t\t\t\t$(td).\n\t\t\t\t\t\t\t\t\thtml($('').\n\t\t\t\t\t\t\t\t\t\taddClass(pfx + 'datatable-toggle-subtable').\n\t\t\t\t\t\t\t\t\t\tattr('href', '#').\n\t\t\t\t\t\t\t\t\t\tattr('data-value', value).\n\t\t\t\t\t\t\t\t\t\tattr('title', Plugin.getOption('detail.title')).\n\t\t\t\t\t\t\t\t\t\ton('click', toggleSubTable).\n\t\t\t\t\t\t\t\t\t\tappend($('').css('width', $(td).data('width')).addClass(Plugin.getOption('layout.icons.rowDetail.collapse'))));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\t// $(datatable.tableHead).find('.'+pfx+'-datatable-row').first()\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Datasource mapping callback\n\t\t\t */\n\t\t\tdataMapCallback: function(raw) {\n\t\t\t\t// static dataset array\n\t\t\t\tvar dataSet = raw;\n\t\t\t\t// dataset mapping callback\n\t\t\t\tif (typeof Plugin.getOption('data.source.read.map') === 'function') {\n\t\t\t\t\treturn Plugin.getOption('data.source.read.map')(raw);\n\t\t\t\t} else {\n\t\t\t\t\t// default data mapping fallback\n\t\t\t\t\tif (typeof raw !== 'undefined' && typeof raw.data !== 'undefined') {\n\t\t\t\t\t\tdataSet = raw.data;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn dataSet;\n\t\t\t},\n\n\t\t\tisSpinning: false,\n\t\t\t/**\n\t\t\t * BlockUI spinner callback\n\t\t\t * @param block\n\t\t\t * @param target\n\t\t\t */\n\t\t\tspinnerCallback: function(block, target) {\n\t\t\t\tif (typeof target === 'undefined') target = datatable;\n\t\t\t\t// get spinner options\n\t\t\t\tvar spinnerOptions = Plugin.getOption('layout.spinner');\n\t\t\t\t// spinner is disabled\n\t\t\t\tif (typeof spinnerOptions === 'undefined' || !spinnerOptions) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (block) {\n\t\t\t\t\tif (!Plugin.isSpinning) {\n\t\t\t\t\t\tif (typeof spinnerOptions.message !== 'undefined' && spinnerOptions.message === true) {\n\t\t\t\t\t\t\t// use default spinner message from translation\n\t\t\t\t\t\t\tspinnerOptions.message = Plugin.getOption('translate.records.processing');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tPlugin.isSpinning = true;\n\t\t\t\t\t\tif (typeof app !== 'undefined') {\n\t\t\t\t\t\t\tapp.block(target, spinnerOptions);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tPlugin.isSpinning = false;\n\t\t\t\t\tif (typeof app !== 'undefined') {\n\t\t\t\t\t\tapp.unblock(target);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Default sort callback function\n\t\t\t * @param data\n\t\t\t * @param sort\n\t\t\t * @param column\n\t\t\t * @returns {*|Array.|{sort, field}|{asc, desc}}\n\t\t\t */\n\t\t\tsortCallback: function(data, sort, column) {\n\t\t\t\tvar type = column['type'] || 'string';\n\t\t\t\tvar format = column['format'] || '';\n\t\t\t\tvar field = column['field'];\n\n\t\t\t\treturn $(data).sort(function(a, b) {\n\t\t\t\t\tvar aField = a[field];\n\t\t\t\t\tvar bField = b[field];\n\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase 'date':\n\t\t\t\t\t\t\tif (typeof moment === 'undefined') {\n\t\t\t\t\t\t\t\tthrow new Error('Moment.js is required.');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar diff = moment(aField, format).diff(moment(bField, format));\n\t\t\t\t\t\t\tif (sort === 'asc') {\n\t\t\t\t\t\t\t\treturn diff > 0 ? 1 : diff < 0 ? -1 : 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn diff < 0 ? 1 : diff > 0 ? -1 : 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'number':\n\t\t\t\t\t\t\tif (isNaN(parseFloat(aField)) && aField != null) {\n\t\t\t\t\t\t\t\taField = Number(aField.replace(/[^0-9\\.-]+/g, ''));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (isNaN(parseFloat(bField)) && bField != null) {\n\t\t\t\t\t\t\t\tbField = Number(bField.replace(/[^0-9\\.-]+/g, ''));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\taField = parseFloat(aField);\n\t\t\t\t\t\t\tbField = parseFloat(bField);\n\t\t\t\t\t\t\tif (sort === 'asc') {\n\t\t\t\t\t\t\t\treturn aField > bField ? 1 : aField < bField ? -1 : 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn aField < bField ? 1 : aField > bField ? -1 : 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'html':\n\t\t\t\t\t\t\treturn $(data).sort(function(a, b) {\n\t\t\t\t\t\t\t\t// get the text only from html\n\t\t\t\t\t\t\t\taField = $(a[field]).text();\n\t\t\t\t\t\t\t\tbField = $(b[field]).text();\n\t\t\t\t\t\t\t\t// sort\n\t\t\t\t\t\t\t\tif (sort === 'asc') {\n\t\t\t\t\t\t\t\t\treturn aField > bField ? 1 : aField < bField ? -1 : 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn aField < bField ? 1 : aField > bField ? -1 : 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'string':\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif (sort === 'asc') {\n\t\t\t\t\t\t\t\treturn aField > bField ? 1 : aField < bField ? -1 : 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn aField < bField ? 1 : aField > bField ? -1 : 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Custom debug log\n\t\t\t * @param text\n\t\t\t * @param obj\n\t\t\t */\n\t\t\tlog: function(text, obj) {\n\t\t\t\tif (typeof obj === 'undefined') obj = '';\n\t\t\t\tif (datatable.debug) {\n\t\t\t\t\tconsole.log(text, obj);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Auto hide columnds overflow in row\n\t\t\t */\n\t\t\tautoHide: function() {\n\t\t\t\tvar hiddenExist = false;\n\t\t\t\t// force hide enabled\n\t\t\t\tvar hidDefault = $(datatable.table).find('[data-autohide-enabled]');\n\t\t\t\tif (hidDefault.length) {\n\t\t\t\t\thiddenExist = true;\n\t\t\t\t\thidDefault.hide();\n\t\t\t\t}\n\n\t\t\t\tvar toggleHiddenColumns = function(e) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tvar row = $(this).closest('.' + pfx + 'datatable-row');\n\t\t\t\t\tvar detailRow = $(row).next();\n\n\t\t\t\t\tif (!$(detailRow).hasClass(pfx + 'datatable-row-detail')) {\n\t\t\t\t\t\t$(this).find('i').removeClass(Plugin.getOption('layout.icons.rowDetail.collapse')).addClass(Plugin.getOption('layout.icons.rowDetail.expand'));\n\n\t\t\t\t\t\tvar hiddenCells = $(row).find('.' + pfx + 'datatable-cell:hidden');\n\t\t\t\t\t\tvar clonedCells = hiddenCells.clone().show();\n\n\t\t\t\t\t\tdetailRow = $('
').addClass(pfx + 'datatable-detail').attr('colspan', Plugin.getTotalColumns()).appendTo(detailRow);\n\n\t\t\t\t\t\tvar detailSubTable = $('');\n\t\t\t\t\t\t$(clonedCells).each(function() {\n\t\t\t\t\t\t\tvar field = $(this).data('field');\n\t\t\t\t\t\t\tvar column = $.grep(options.columns, function(n, i) {\n\t\t\t\t\t\t\t\treturn field === n.field;\n\t\t\t\t\t\t\t})[0];\n\t\t\t\t\t\t\tif (typeof column === 'undefined' || column.visible !== false) {\n\t\t\t\t\t\t\t\t$(detailSubTable).\n\t\t\t\t\t\t\t\t\t\tappend($('').\n\t\t\t\t\t\t\t\t\t\t\t\tappend($('').append($('').append(column.title))).\n\t\t\t\t\t\t\t\t\t\t\t\tappend(this));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\t$(detailRowTd).append(detailSubTable);\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(this).find('i').removeClass(Plugin.getOption('layout.icons.rowDetail.expand')).addClass(Plugin.getOption('layout.icons.rowDetail.collapse'));\n\t\t\t\t\t\t$(detailRow).remove();\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t$(datatable.table).find('.' + pfx + 'datatable-cell').show();\n\t\t\t\t\t$(datatable.tableBody).each(function() {\n\t\t\t\t\t\tvar recursive = 0;\n\t\t\t\t\t\tvar offsetWidth = $(this)[0].offsetWidth;\n\t\t\t\t\t\tvar scrollWidth = $(this)[0].scrollWidth;\n\n\t\t\t\t\t\twhile (offsetWidth < scrollWidth && (scrollWidth - offsetWidth) > Plugin.cellOffset && recursive < options.columns.length) {\n\n\t\t\t\t\t\t\t$(datatable.table).find('.' + pfx + 'datatable-row').each(function(i) {\n\t\t\t\t\t\t\t\tvar cell = $(this).find('.' + pfx + 'datatable-cell:not(:hidden):not([data-autohide-disabled])').last();\n\t\t\t\t\t\t\t\t\tif (cell.length) {\n\t\t\t\t\t\t\t\t\t\t$(cell).hide();\n\t\t\t\t\t\t\t\t\t\thiddenExist = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\trecursive++;\n\n\t\t\t\t\t\t\toffsetWidth = $(this)[0].offsetWidth;\n\t\t\t\t\t\t\tscrollWidth = $(this)[0].scrollWidth;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tif (hiddenExist) {\n\t\t\t\t\t\t// toggle show hidden columns\n\t\t\t\t\t\t$(datatable.tableBody).find('.' + pfx + 'datatable-row').each(function() {\n\t\t\t\t\t\t\t// if no toggle yet\n\t\t\t\t\t\t\tif($(this).find('.' + pfx + 'datatable-toggle-detail').length === 0) {\n\t\t\t\t\t\t\t\t// add toggle\n\t\t\t\t\t\t\t\t$(this).prepend($('');\n\t\t\t\t\t\t\t\t$(datatable.tableFoot).\n\t\t\t\t\t\t\t\t\tfind('.' + pfx + 'datatable-row').\n\t\t\t\t\t\t\t\t\tfirst().\n\t\t\t\t\t\t\t\t\tprepend('');\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$(datatable.tableHead).find('.' + pfx + 'datatable-toggle-detail').find('span');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tPlugin.adjustCellsWidth.call();\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * To enable auto columns features for remote data source\n\t\t\t */\n\t\t\tsetAutoColumns: function() {\n\t\t\t\tif (Plugin.getOption('data.autoColumns')) {\n\t\t\t\t\t$.each(datatable.dataSet[0], function(k, v) {\n\t\t\t\t\t\tvar found = $.grep(options.columns, function(n, i) {\n\t\t\t\t\t\t\treturn k === n.field;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (found.length === 0) {\n\t\t\t\t\t\t\toptions.columns.push({field: k, title: k});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t$(datatable.tableHead).find('.' + pfx + 'datatable-row').remove();\n\t\t\t\t\tPlugin.setHeadTitle();\n\t\t\t\t\tif (Plugin.getOption('layout.footer')) {\n\t\t\t\t\t\t$(datatable.tableFoot).find('.' + pfx + 'datatable-row').remove();\n\t\t\t\t\t\tPlugin.setHeadTitle(datatable.tableFoot);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/********************\n\t\t\t ** HELPERS\n\t\t\t ********************/\n\n\t\t\t/**\n\t\t\t * Check if table is a locked colums table\n\t\t\t */\n\t\t\tisLocked: function() {\n\t\t\t\tvar isLocked = Plugin.lockEnabledColumns();\n\t\t\t\treturn isLocked.left.length > 0 || isLocked.right.length > 0;\n\t\t\t},\n\n\t\t\tisSubtable: function() {\n\t\t\t\treturn util.hasClass(datatable.wrap[0], pfx + 'datatable-subtable') || false;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Get total extra space of an element for width calculation,\n\t\t\t * including padding, margin, border\n\t\t\t * @param element\n\t\t\t * @returns {number}\n\t\t\t */\n\t\t\tgetExtraSpace: function(element) {\n\t\t\t\tvar padding = parseInt($(element).css('paddingRight')) +\n\t\t\t\t\tparseInt($(element).css('paddingLeft'));\n\t\t\t\tvar margin = parseInt($(element).css('marginRight')) +\n\t\t\t\t\tparseInt($(element).css('marginLeft'));\n\t\t\t\tvar border = Math.ceil(\n\t\t\t\t\t$(element).css('border-right-width').replace('px', ''));\n\t\t\t\treturn padding + margin + border;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Insert data of array into {{ }} template placeholder\n\t\t\t * @param template\n\t\t\t * @param data\n\t\t\t * @returns {*}\n\t\t\t */\n\t\t\tdataPlaceholder: function(template, data) {\n\t\t\t\tvar result = template;\n\t\t\t\t$.each(data, function(key, val) {\n\t\t\t\t\tresult = result.replace('{{' + key + '}}', val);\n\t\t\t\t});\n\t\t\t\treturn result;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Get table unique ID\n\t\t\t * Note: table unique change each time refreshed\n\t\t\t * @param suffix\n\t\t\t * @returns {*}\n\t\t\t */\n\t\t\tgetTableId: function(suffix) {\n\t\t\t\tif (typeof suffix === 'undefined') suffix = '';\n\t\t\t\tvar id = $(datatable).attr('id');\n\t\t\t\tif (typeof id === 'undefined') {\n\t\t\t\t\tid = $(datatable).attr('class').split(' ')[0];\n\t\t\t\t}\n\t\t\t\treturn id + suffix;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Get table prefix with depth number\n\t\t\t */\n\t\t\tgetTablePrefix: function(suffix) {\n\t\t\t\tif (typeof suffix !== 'undefined') suffix = '-' + suffix;\n\t\t\t\treturn Plugin.getTableId() + '-' + Plugin.getDepth() + suffix;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Get current table depth of sub table\n\t\t\t * @returns {number}\n\t\t\t */\n\t\t\tgetDepth: function() {\n\t\t\t\tvar depth = 0;\n\t\t\t\tvar table = datatable.table;\n\t\t\t\tdo {\n\t\t\t\t\ttable = $(table).parents('.' + pfx + 'datatable-table');\n\t\t\t\t\tdepth++;\n\t\t\t\t} while ($(table).length > 0);\n\t\t\t\treturn depth;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Keep state item\n\t\t\t * @param key\n\t\t\t * @param value\n\t\t\t */\n\t\t\tstateKeep: function(key, value) {\n\t\t\t\tkey = Plugin.getTablePrefix(key);\n\t\t\t\tif (Plugin.getOption('data.saveState') === false) return;\n\t\t\t\tif (localStorage) {\n\t\t\t\t\tlocalStorage.setItem(key, JSON.stringify(value));\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Get state item\n\t\t\t * @param key\n\t\t\t * @param defValue\n\t\t\t */\n\t\t\tstateGet: function(key, defValue) {\n\t\t\t\tkey = Plugin.getTablePrefix(key);\n\t\t\t\tif (Plugin.getOption('data.saveState') === false) return;\n\t\t\t\tvar value = null;\n\t\t\t\tif (localStorage) {\n\t\t\t\t\tvalue = localStorage.getItem(key);\n\t\t\t\t}\n\t\t\t\tif (typeof value !== 'undefined' && value !== null) {\n\t\t\t\t\treturn JSON.parse(value);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Update data in state without clear existing\n\t\t\t * @param key\n\t\t\t * @param value\n\t\t\t */\n\t\t\tstateUpdate: function(key, value) {\n\t\t\t\tvar ori = Plugin.stateGet(key);\n\t\t\t\tif (typeof ori === 'undefined' || ori === null) ori = {};\n\t\t\t\tPlugin.stateKeep(key, $.extend({}, ori, value));\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Remove state item\n\t\t\t * @param key\n\t\t\t */\n\t\t\tstateRemove: function(key) {\n\t\t\t\tkey = Plugin.getTablePrefix(key);\n\t\t\t\tif (localStorage) {\n\t\t\t\t\tlocalStorage.removeItem(key);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Get total columns.\n\t\t\t */\n\t\t\tgetTotalColumns: function(tablePart) {\n\t\t\t\tif (typeof tablePart === 'undefined') tablePart = datatable.tableBody;\n\t\t\t\treturn $(tablePart).find('.' + pfx + 'datatable-row').first().find('.' + pfx + 'datatable-cell').length;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Get table row. Useful to get row when current table is in lock\n\t\t\t * mode. Can be used for both lock and normal table mode. By\n\t\t\t * default, returning result will be in a list of \n\t\t\t\tvar result = $(tablePart).find('.' + pfx + 'datatable-row:not(.' + pfx + 'datatable-row-detail):nth-child(' + row + ')');\n\t\t\t\tif (tdOnly) {\n\t\t\t\t\t// get list of
').\n\t\t\t\t\t\t\t\t\t\taddClass(pfx + 'datatable-cell ' + pfx + 'datatable-toggle-detail').\n\t\t\t\t\t\t\t\t\t\tappend($('').\n\t\t\t\t\t\t\t\t\t\t\taddClass(pfx + 'datatable-toggle-detail').\n\t\t\t\t\t\t\t\t\t\t\tattr('href', '').\n\t\t\t\t\t\t\t\t\t\t\ton('click', toggleHiddenColumns).\n\t\t\t\t\t\t\t\t\t\t\tappend('')));\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// check if subtable toggle exist\n\t\t\t\t\t\t\tif ($(datatable.tableHead).find('.' + pfx + 'datatable-toggle-detail').length === 0) {\n\t\t\t\t\t\t\t\t// add empty column to the header and footer\n\t\t\t\t\t\t\t\t$(datatable.tableHead).\n\t\t\t\t\t\t\t\t\tfind('.' + pfx + 'datatable-row').\n\t\t\t\t\t\t\t\t\tfirst().\n\t\t\t\t\t\t\t\t\tprepend('.\n\t\t\t * @param tablePart\n\t\t\t * @param row 1-based index\n\t\t\t * @param tdOnly Optional. Default true\n\t\t\t * @returns {*}\n\t\t\t */\n\t\t\tgetOneRow: function(tablePart, row, tdOnly) {\n\t\t\t\tif (typeof tdOnly === 'undefined') tdOnly = true;\n\t\t\t\t// get list of
or \n\t\t\t\t\tresult = result.find('.' + pfx + 'datatable-cell');\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Sort table row at HTML level by column index.\n\t\t\t * todo; Not in use.\n\t\t\t * @param header Header sort clicked\n\t\t\t * @param sort asc|desc. Optional. Default asc\n\t\t\t * @param int Boolean. Optional. Comparison value parse to integer.\n\t\t\t * Default false\n\t\t\t */\n\t\t\tsortColumn: function(header, sort, int) {\n\t\t\t\tif (typeof sort === 'undefined') sort = 'asc'; // desc\n\t\t\t\tif (typeof int === 'undefined') int = false;\n\n\t\t\t\tvar column = $(header).index();\n\t\t\t\tvar rows = $(datatable.tableBody).find('.' + pfx + 'datatable-row');\n\t\t\t\tvar hIndex = $(header).closest('.' + pfx + 'datatable-lock').index();\n\t\t\t\tif (hIndex !== -1) {\n\t\t\t\t\trows = $(datatable.tableBody).find('.' + pfx + 'datatable-lock:nth-child(' + (hIndex + 1) + ')').find('.' + pfx + 'datatable-row');\n\t\t\t\t}\n\n\t\t\t\tvar container = $(rows).parent();\n\t\t\t\t$(rows).sort(function(a, b) {\n\t\t\t\t\tvar tda = $(a).find('td:nth-child(' + column + ')').text();\n\t\t\t\t\tvar tdb = $(b).find('td:nth-child(' + column + ')').text();\n\n\t\t\t\t\tif (int) {\n\t\t\t\t\t\t// useful for integer type sorting\n\t\t\t\t\t\ttda = parseInt(tda);\n\t\t\t\t\t\ttdb = parseInt(tdb);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (sort === 'asc') {\n\t\t\t\t\t\treturn tda > tdb ? 1 : tda < tdb ? -1 : 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn tda < tdb ? 1 : tda > tdb ? -1 : 0;\n\t\t\t\t\t}\n\t\t\t\t}).appendTo(container);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Perform sort remote and local\n\t\t\t */\n\t\t\tsorting: function() {\n\t\t\t\tvar sortObj = {\n\t\t\t\t\tinit: function() {\n\t\t\t\t\t\tif (options.sortable) {\n\t\t\t\t\t\t\t$(datatable.tableHead).\n\t\t\t\t\t\t\t\tfind('.' + pfx + 'datatable-cell:not(.' + pfx + 'datatable-cell-check)').\n\t\t\t\t\t\t\t\taddClass(pfx + 'datatable-cell-sort').\n\t\t\t\t\t\t\t\toff('click').\n\t\t\t\t\t\t\t\ton('click', sortObj.sortClick);\n\t\t\t\t\t\t\t// first init\n\t\t\t\t\t\t\tsortObj.setIcon();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tsetIcon: function() {\n\t\t\t\t\t\tvar meta = Plugin.getDataSourceParam('sort');\n\t\t\t\t\t\tif ($.isEmptyObject(meta)) return;\n\n\t\t\t\t\t\tvar column = Plugin.getColumnByField(meta.field);\n\t\t\t\t\t\t// sort is disabled for this column\n\t\t\t\t\t\tif (typeof column === 'undefined') return;\n\t\t\t\t\t\tif (typeof column.sortable !== 'undefined' && column.sortable === false) return;\n\t\t\t\t\t\tif (typeof column.selector !== 'undefined' && column.selector === true) return;\n\n\t\t\t\t\t\t// sort icon beside column header\n\t\t\t\t\t\tvar td = $(datatable.tableHead).find('.' + pfx + 'datatable-cell[data-field=\"' + meta.field + '\"]').attr('data-sort', meta.sort);\n\t\t\t\t\t\tvar sorting = $(td).find('span');\n\t\t\t\t\t\tvar icon = $(sorting).find('i');\n\n\t\t\t\t\t\tvar icons = Plugin.getOption('layout.icons.sort');\n\t\t\t\t\t\t// update sort icon; desc & asc\n\t\t\t\t\t\tif ($(icon).length > 0) {\n\t\t\t\t\t\t\t$(icon).removeAttr('class').addClass(icons[meta.sort]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$(sorting).append($('').addClass(icons[meta.sort]));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// set sorted class to header on init\n\t\t\t\t\t\t$(td).addClass(pfx + 'datatable-cell-sorted');\n\t\t\t\t\t},\n\t\t\t\t\tsortClick: function(e) {\n\t\t\t\t\t\tvar meta = Plugin.getDataSourceParam('sort');\n\t\t\t\t\t\tvar field = $(this).data('field');\n\t\t\t\t\t\tvar column = Plugin.getColumnByField(field);\n\t\t\t\t\t\t// sort is disabled for this column\n\t\t\t\t\t\tif (typeof column === 'undefined') return;\n\t\t\t\t\t\tif (typeof column.sortable !== 'undefined' && column.sortable === false) return;\n\t\t\t\t\t\tif (typeof column.selector !== 'undefined' && column.selector === true) return;\n\n\t\t\t\t\t\t// set sorted class to header\n\t\t\t\t\t\t$(datatable.tableHead).find('th').removeClass(pfx + 'datatable-cell-sorted');\n\t\t\t\t\t\tutil.addClass(this, pfx + 'datatable-cell-sorted');\n\n\t\t\t\t\t\t$(datatable.tableHead).find('.' + pfx + 'datatable-cell > span > i').remove();\n\n\t\t\t\t\t\tif (options.sortable) {\n\t\t\t\t\t\t\tPlugin.spinnerCallback(true);\n\n\t\t\t\t\t\t\tvar sort = 'desc';\n\t\t\t\t\t\t\tif (Plugin.getObject('field', meta) === field) {\n\t\t\t\t\t\t\t\tsort = Plugin.getObject('sort', meta);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// toggle sort\n\t\t\t\t\t\t\tsort = typeof sort === 'undefined' || sort === 'desc'\n\t\t\t\t\t\t\t\t? 'asc'\n\t\t\t\t\t\t\t\t: 'desc';\n\n\t\t\t\t\t\t\t// update field and sort params\n\t\t\t\t\t\t\tmeta = {field: field, sort: sort};\n\t\t\t\t\t\t\tPlugin.setDataSourceParam('sort', meta);\n\n\t\t\t\t\t\t\tsortObj.setIcon();\n\n\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\tPlugin.dataRender('sort');\n\t\t\t\t\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-sort', meta);\n\t\t\t\t\t\t\t}, 300);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\tsortObj.init();\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Update JSON data list linked with sort, filter and pagination.\n\t\t\t * Call this method, before using dataSet variable.\n\t\t\t * @returns {*|null}\n\t\t\t */\n\t\t\tlocalDataUpdate: function() {\n\t\t\t\tvar params = Plugin.getDataSourceParam();\n\t\t\t\tif (typeof datatable.originalDataSet === 'undefined') {\n\t\t\t\t\tdatatable.originalDataSet = datatable.dataSet;\n\t\t\t\t}\n\n\t\t\t\tvar field = Plugin.getObject('sort.field', params);\n\t\t\t\tvar sort = Plugin.getObject('sort.sort', params);\n\t\t\t\tvar column = Plugin.getColumnByField(field);\n\t\t\t\tif (typeof column !== 'undefined' && Plugin.getOption('data.serverSorting') !== true) {\n\t\t\t\t\tif (typeof column.sortCallback === 'function') {\n\t\t\t\t\t\tdatatable.dataSet = column.sortCallback(datatable.originalDataSet, sort, column);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdatatable.dataSet = Plugin.sortCallback(datatable.originalDataSet, sort, column);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdatatable.dataSet = datatable.originalDataSet;\n\t\t\t\t}\n\n\t\t\t\t// if server filter enable, don't pass local filter\n\t\t\t\tif (typeof params.query === 'object' && !Plugin.getOption('data.serverFiltering')) {\n\t\t\t\t\tparams.query = params.query || {};\n\n\t\t\t\t\tvar nestedSearch = function(obj) {\n\t\t\t\t\t\tfor (var field in obj) {\n\t\t\t\t\t\t\tif (!obj.hasOwnProperty(field)) continue;\n\t\t\t\t\t\t\tif (typeof obj[field] === 'string') {\n\t\t\t\t\t\t\t\tif (obj[field].toLowerCase() == search || obj[field].toLowerCase().indexOf(search) !== -1) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (typeof obj[field] === 'number') {\n\t\t\t\t\t\t\t\tif (obj[field] === search) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (typeof obj[field] === 'object') {\n\t\t\t\t\t\t\t\tif (nestedSearch(obj[field])) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\n\t\t\t\t\tvar search = $(Plugin.getOption('search.input')).val();\n\t\t\t\t\tif (typeof search !== 'undefined' && search !== '') {\n\t\t\t\t\t\tsearch = search.toLowerCase();\n\t\t\t\t\t\tdatatable.dataSet = $.grep(datatable.dataSet, nestedSearch);\n\t\t\t\t\t\t// remove generalSearch as we don't need this for next columns filter\n\t\t\t\t\t\tdelete params.query[Plugin.getGeneralSearchKey()];\n\t\t\t\t\t}\n\n\t\t\t\t\t// remove empty element from array\n\t\t\t\t\t$.each(params.query, function(k, v) {\n\t\t\t\t\t\tif (v === '') {\n\t\t\t\t\t\t\tdelete params.query[k];\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t// filter array by query\n\t\t\t\t\tdatatable.dataSet = Plugin.filterArray(datatable.dataSet, params.query);\n\n\t\t\t\t\t// reset array index\n\t\t\t\t\tdatatable.dataSet = datatable.dataSet.filter(function() {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn datatable.dataSet;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Utility helper to filter array by object pair of {key:value}\n\t\t\t * @param list\n\t\t\t * @param args\n\t\t\t * @param operator\n\t\t\t * @returns {*}\n\t\t\t */\n\t\t\tfilterArray: function(list, args, operator) {\n\t\t\t\tif (typeof list !== 'object') {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\n\t\t\t\tif (typeof operator === 'undefined') operator = 'AND';\n\n\t\t\t\tif (typeof args !== 'object') {\n\t\t\t\t\treturn list;\n\t\t\t\t}\n\n\t\t\t\toperator = operator.toUpperCase();\n\n\t\t\t\tif ($.inArray(operator, ['AND', 'OR', 'NOT']) === -1) {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\n\t\t\t\tvar count = Object.keys(args).length;\n\t\t\t\tvar filtered = [];\n\n\t\t\t\t$.each(list, function(key, obj) {\n\t\t\t\t\tvar to_match = obj;\n\n\t\t\t\t\tvar matched = 0;\n\t\t\t\t\t$.each(args, function(m_key, m_value) {\n\t\t\t\t\t\tm_value = m_value instanceof Array ? m_value : [m_value];\n\t\t\t\t\t\tvar match_property = Plugin.getObject(m_key, to_match);\n\t\t\t\t\t\tif (typeof match_property !== 'undefined' && match_property) {\n\t\t\t\t\t\t\tvar lhs = match_property.toString().toLowerCase();\n\t\t\t\t\t\t\tm_value.forEach(function(item, index) {\n\t\t\t\t\t\t\t\tif (item.toString().toLowerCase() == lhs || lhs.indexOf(item.toString().toLowerCase()) !== -1) {\n\t\t\t\t\t\t\t\t\tmatched++;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tif (('AND' == operator && matched == count) ||\n\t\t\t\t\t\t('OR' == operator && matched > 0) ||\n\t\t\t\t\t\t('NOT' == operator && 0 == matched)) {\n\t\t\t\t\t\tfiltered[key] = obj;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tlist = filtered;\n\n\t\t\t\treturn list;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Reset lock column scroll to 0 when resize\n\t\t\t */\n\t\t\tresetScroll: function() {\n\t\t\t\tif (typeof options.detail === 'undefined' && Plugin.getDepth() === 1) {\n\t\t\t\t\t$(datatable.table).find('.' + pfx + 'datatable-row').css('left', 0);\n\t\t\t\t\t$(datatable.table).find('.' + pfx + 'datatable-lock').css('top', 0);\n\t\t\t\t\t$(datatable.tableBody).scrollTop(0);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Get column options by field\n\t\t\t * @param field\n\t\t\t * @returns {boolean}\n\t\t\t */\n\t\t\tgetColumnByField: function(field) {\n\t\t\t\tif (typeof field === 'undefined') return;\n\t\t\t\tvar result;\n\t\t\t\t$.each(options.columns, function(i, column) {\n\t\t\t\t\tif (field === column.field) {\n\t\t\t\t\t\tresult = column;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn result;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Get default sort column\n\t\t\t */\n\t\t\tgetDefaultSortColumn: function() {\n\t\t\t\tvar result;\n\t\t\t\t$.each(options.columns, function(i, column) {\n\t\t\t\t\tif (typeof column.sortable !== 'undefined'\n\t\t\t\t\t\t&& $.inArray(column.sortable, ['asc', 'desc']) !== -1) {\n\t\t\t\t\t\tresult = {sort: column.sortable, field: column.field};\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn result;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Helper to get element dimensions, when the element is hidden\n\t\t\t * @param element\n\t\t\t * @param includeMargin\n\t\t\t * @returns {{width: number, height: number, innerWidth: number,\n\t\t\t * innerHeight: number, outerWidth: number, outerHeight:\n\t\t\t * number}}\n\t\t\t */\n\t\t\tgetHiddenDimensions: function(element, includeMargin) {\n\t\t\t\tvar props = {\n\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\tvisibility: 'hidden',\n\t\t\t\t\t\tdisplay: 'block',\n\t\t\t\t\t},\n\t\t\t\t\tdim = {\n\t\t\t\t\t\twidth: 0,\n\t\t\t\t\t\theight: 0,\n\t\t\t\t\t\tinnerWidth: 0,\n\t\t\t\t\t\tinnerHeight: 0,\n\t\t\t\t\t\touterWidth: 0,\n\t\t\t\t\t\touterHeight: 0,\n\t\t\t\t\t},\n\t\t\t\t\thiddenParents = $(element).parents().addBack().not(':visible');\n\t\t\t\tincludeMargin = (typeof includeMargin === 'boolean')\n\t\t\t\t\t? includeMargin\n\t\t\t\t\t: false;\n\n\t\t\t\tvar oldProps = [];\n\t\t\t\thiddenParents.each(function() {\n\t\t\t\t\tvar old = {};\n\n\t\t\t\t\tfor (var name in props) {\n\t\t\t\t\t\told[name] = this.style[name];\n\t\t\t\t\t\tthis.style[name] = props[name];\n\t\t\t\t\t}\n\n\t\t\t\t\toldProps.push(old);\n\t\t\t\t});\n\n\t\t\t\tdim.width = $(element).width();\n\t\t\t\tdim.outerWidth = $(element).outerWidth(includeMargin);\n\t\t\t\tdim.innerWidth = $(element).innerWidth();\n\t\t\t\tdim.height = $(element).height();\n\t\t\t\tdim.innerHeight = $(element).innerHeight();\n\t\t\t\tdim.outerHeight = $(element).outerHeight(includeMargin);\n\n\t\t\t\thiddenParents.each(function(i) {\n\t\t\t\t\tvar old = oldProps[i];\n\t\t\t\t\tfor (var name in props) {\n\t\t\t\t\t\tthis.style[name] = old[name];\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn dim;\n\t\t\t},\n\n\t\t\tgetGeneralSearchKey: function() {\n\t\t\t\tvar searchInput = $(Plugin.getOption('search.input'));\n\t\t\t\treturn Plugin.getOption('search.key') || $(searchInput).prop('name');\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Get value by dot notation path string and to prevent undefined\n\t\t\t * errors\n\t\t\t * @param path String Dot notation path in string\n\t\t\t * @param object Object to iterate\n\t\t\t * @returns {*}\n\t\t\t */\n\t\t\tgetObject: function(path, object) {\n\t\t\t\treturn path.split('.').reduce(function(obj, i) {\n\t\t\t\t\treturn obj !== null && typeof obj[i] !== 'undefined' ? obj[i] : null;\n\t\t\t\t}, object);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Extend object\n\t\t\t * @param obj\n\t\t\t * @param path\n\t\t\t * @param value\n\t\t\t * @returns {*}\n\t\t\t */\n\t\t\textendObj: function(obj, path, value) {\n\t\t\t\tvar levels = path.split('.'),\n\t\t\t\t\ti = 0;\n\n\t\t\t\tfunction createLevel(child) {\n\t\t\t\t\tvar name = levels[i++];\n\t\t\t\t\tif (typeof child[name] !== 'undefined' && child[name] !== null) {\n\t\t\t\t\t\tif (typeof child[name] !== 'object' &&\n\t\t\t\t\t\t\ttypeof child[name] !== 'function') {\n\t\t\t\t\t\t\tchild[name] = {};\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchild[name] = {};\n\t\t\t\t\t}\n\t\t\t\t\tif (i === levels.length) {\n\t\t\t\t\t\tchild[name] = value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcreateLevel(child[name]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcreateLevel(obj);\n\t\t\t\treturn obj;\n\t\t\t},\n\n\t\t\trowEvenOdd: function() {\n\t\t\t\t// row even class\n\t\t\t\t$(datatable.tableBody).find('.' + pfx + 'datatable-row').removeClass(pfx + 'datatable-row-even');\n\t\t\t\tif ($(datatable.wrap).hasClass(pfx + 'datatable-subtable')) {\n\t\t\t\t\t$(datatable.tableBody).find('.' + pfx + 'datatable-row:not(.' + pfx + 'datatable-row-detail):even').addClass(pfx + 'datatable-row-even');\n\t\t\t\t} else {\n\t\t\t\t\t$(datatable.tableBody).find('.' + pfx + 'datatable-row:nth-child(even)').addClass(pfx + 'datatable-row-even');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/********************\n\t\t\t ** PUBLIC API METHODS\n\t\t\t ********************/\n\n\t\t\t// delay timer\n\t\t\ttimer: 0,\n\n\t\t\t/**\n\t\t\t * Redraw datatable by recalculating its DOM elements, etc.\n\t\t\t * @returns {jQuery}\n\t\t\t */\n\t\t\tredraw: function() {\n\t\t\t\tPlugin.adjustCellsWidth.call();\n\t\t\t\tif (Plugin.isLocked()) {\n\t\t\t\t\t// fix hiding cell width issue\n\t\t\t\t\tPlugin.scrollbar();\n\t\t\t\t\tPlugin.resetScroll();\n\t\t\t\t\tPlugin.adjustCellsHeight.call();\n\t\t\t\t}\n\t\t\t\tPlugin.adjustLockContainer.call();\n\t\t\t\tPlugin.initHeight.call();\n\t\t\t\treturn datatable;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Shortcode to reload\n\t\t\t * @returns {jQuery}\n\t\t\t */\n\t\t\tload: function() {\n\t\t\t\tPlugin.reload();\n\t\t\t\treturn datatable;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Datasource reload\n\t\t\t * @returns {jQuery}\n\t\t\t */\n\t\t\treload: function() {\n\t\t\t\tvar delay = (function() {\n\t\t\t\t\treturn function(callback, ms) {\n\t\t\t\t\t\tclearTimeout(Plugin.timer);\n\t\t\t\t\t\tPlugin.timer = setTimeout(callback, ms);\n\t\t\t\t\t};\n\t\t\t\t})();\n\t\t\t\tdelay(function() {\n\t\t\t\t\t// local only. remote pagination will skip this block\n\t\t\t\t\tif (!options.data.serverFiltering) {\n\t\t\t\t\t\tPlugin.localDataUpdate();\n\t\t\t\t\t}\n\t\t\t\t\tPlugin.dataRender();\n\t\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-reloaded');\n\t\t\t\t}, Plugin.getOption('search.delay'));\n\t\t\t\treturn datatable;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Get record by record ID\n\t\t\t * @param id\n\t\t\t * @returns {jQuery}\n\t\t\t */\n\t\t\tgetRecord: function(id) {\n\t\t\t\tif (typeof datatable.tableBody === 'undefined') datatable.tableBody = $(datatable.table).children('tbody');\n\t\t\t\t$(datatable.tableBody).find('.' + pfx + 'datatable-cell:first-child').each(function(i, cell) {\n\t\t\t\t\tif (id == $(cell).text()) {\n\t\t\t\t\t\tvar rowNumber = $(cell).closest('.' + pfx + 'datatable-row').index() + 1;\n\t\t\t\t\t\tdatatable.API.record = datatable.API.value = Plugin.getOneRow(datatable.tableBody, rowNumber);\n\t\t\t\t\t\treturn datatable;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn datatable;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @deprecated in v5.0.6\n\t\t\t * Get column of current record ID\n\t\t\t * @param columnName\n\t\t\t * @returns {jQuery}\n\t\t\t */\n\t\t\tgetColumn: function(columnName) {\n\t\t\t\tPlugin.setSelectedRecords();\n\t\t\t\tdatatable.API.value = $(datatable.API.record).find('[data-field=\"' + columnName + '\"]');\n\t\t\t\treturn datatable;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Destroy datatable to original DOM state before datatable was\n\t\t\t * initialized\n\t\t\t * @returns {jQuery}\n\t\t\t */\n\t\t\tdestroy: function() {\n\t\t\t\t$(datatable).parent().find('.' + pfx + 'datatable-pager').remove();\n\t\t\t\tvar initialDatatable = $(datatable.initialDatatable).addClass(pfx + 'datatable-destroyed').show();\n\t\t\t\t$(datatable).replaceWith(initialDatatable);\n\t\t\t\tdatatable = initialDatatable;\n\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-destroy');\n\t\t\t\tPlugin.isInit = false;\n\n\t\t\t\t// clean up variables\n\t\t\t\tinitialDatatable = null;\n\t\t\t\tdatatable.dataSet = null;\n\t\t\t\tdatatable.originalDataSet = null;\n\t\t\t\tdatatable.tableHead = null;\n\t\t\t\tdatatable.tableBody = null;\n\t\t\t\tdatatable.table = null;\n\t\t\t\tdatatable.wrap = null;\n\t\t\t\tdatatable.API = {\n\t\t\t\t\trecord: null,\n\t\t\t\t\tvalue: null,\n\t\t\t\t\tparams: null,\n\t\t\t\t};\n\n\t\t\t\tPlugin.ajaxParams = {};\n\t\t\t\tPlugin.pagingObject = {};\n\t\t\t\tPlugin.nodeTr = [];\n\t\t\t\tPlugin.nodeTd = [];\n\t\t\t\tPlugin.nodeCols = [];\n\t\t\t\tPlugin.recentNode = [];\n\n\t\t\t\treturn initialDatatable;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Sort by column field\n\t\t\t * @param field\n\t\t\t * @param sort\n\t\t\t */\n\t\t\tsort: function(field, sort) {\n\t\t\t\t// toggle sort\n\t\t\t\tsort = typeof sort === 'undefined' ? 'asc' : sort;\n\n\t\t\t\tPlugin.spinnerCallback(true);\n\n\t\t\t\t// update field and sort params\n\t\t\t\tvar meta = {field: field, sort: sort};\n\t\t\t\tPlugin.setDataSourceParam('sort', meta);\n\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tPlugin.dataRender('sort');\n\t\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-sort', meta);\n\t\t\t\t\t$(datatable.tableHead).find('.' + pfx + 'datatable-cell > span > i').remove();\n\t\t\t\t}, 300);\n\n\t\t\t\treturn datatable;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @deprecated in v5.0.6\n\t\t\t * Get current selected column value\n\t\t\t * @returns {jQuery}\n\t\t\t */\n\t\t\tgetValue: function() {\n\t\t\t\treturn $(datatable.API.value).text();\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Set checkbox active\n\t\t\t * @param cell JQuery selector or checkbox ID\n\t\t\t */\n\t\t\tsetActive: function(cell) {\n\t\t\t\tif (typeof cell === 'string') {\n\t\t\t\t\t// set by checkbox id\n\t\t\t\t\tcell = $(datatable.tableBody).find('.' + pfx + 'checkbox-single > [type=\"checkbox\"][value=\"' + cell + '\"]');\n\t\t\t\t}\n\n\t\t\t\t$(cell).prop('checked', true);\n\n\t\t\t\tvar ids = [];\n\t\t\t\t$(cell).each(function(i, td) {\n\t\t\t\t\t// normal table\n\t\t\t\t\tvar row = $(td).closest('tr').addClass(pfx + 'datatable-row-active');\n\n\t\t\t\t\tvar id = $(td).attr('value');\n\t\t\t\t\tif (typeof id !== 'undefined') {\n\t\t\t\t\t\tids.push(id);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-check', [ids]);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Set checkbox inactive\n\t\t\t * @param cell JQuery selector or checkbox ID\n\t\t\t */\n\t\t\tsetInactive: function(cell) {\n\t\t\t\tif (typeof cell === 'string') {\n\t\t\t\t\t// set by checkbox id\n\t\t\t\t\tcell = $(datatable.tableBody).find('.' + pfx + 'checkbox-single > [type=\"checkbox\"][value=\"' + cell + '\"]');\n\t\t\t\t}\n\n\t\t\t\t$(cell).prop('checked', false);\n\n\t\t\t\tvar ids = [];\n\t\t\t\t$(cell).each(function(i, td) {\n\t\t\t\t\t// normal table\n\t\t\t\t\tvar row = $(td).closest('tr').removeClass(pfx + 'datatable-row-active');\n\n\t\t\t\t\tvar id = $(td).attr('value');\n\t\t\t\t\tif (typeof id !== 'undefined') {\n\t\t\t\t\t\tids.push(id);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-uncheck', [ids]);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Set all checkboxes active or inactive\n\t\t\t * @param active\n\t\t\t */\n\t\t\tsetActiveAll: function(active) {\n\t\t\t\tvar checkboxes = $(datatable.table).\n\t\t\t\t\tfind('> tbody, > thead').\n\t\t\t\t\tfind('tr').not('.' + pfx + 'datatable-row-subtable').\n\t\t\t\t\tfind('.' + pfx + 'datatable-cell-check [type=\"checkbox\"]');\n\t\t\t\tif (active) {\n\t\t\t\t\tPlugin.setActive(checkboxes);\n\t\t\t\t} else {\n\t\t\t\t\tPlugin.setInactive(checkboxes);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @deprecated in v5.0.6\n\t\t\t * Get selected rows which are active\n\t\t\t * @returns {jQuery}\n\t\t\t */\n\t\t\tsetSelectedRecords: function() {\n\t\t\t\tdatatable.API.record = $(datatable.tableBody).find('.' + pfx + 'datatable-row-active');\n\t\t\t\treturn datatable;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Get selected records\n\t\t\t * @returns {null}\n\t\t\t */\n\t\t\tgetSelectedRecords: function() {\n\t\t\t\t// support old method\n\t\t\t\tPlugin.setSelectedRecords();\n\t\t\t\tdatatable.API.record = datatable.rows('.' + pfx + 'datatable-row-active').nodes();\n\t\t\t\treturn datatable.API.record;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Get options by dots notation path\n\t\t\t * @param path String Dot notation path in string\n\t\t\t * @returns {*}\n\t\t\t */\n\t\t\tgetOption: function(path) {\n\t\t\t\treturn Plugin.getObject(path, options);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Set global options nodes by dots notation path\n\t\t\t * @param path\n\t\t\t * @param object\n\t\t\t */\n\t\t\tsetOption: function(path, object) {\n\t\t\t\toptions = Plugin.extendObj(options, path, object);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Search filter for local & remote\n\t\t\t * @param value\n\t\t\t * @param columns. Optional list of columns to be filtered.\n\t\t\t */\n\t\t\tsearch: function(value, columns) {\n\t\t\t\tif (typeof columns !== 'undefined') columns = $.makeArray(columns);\n\t\t\t\tvar delay = (function() {\n\t\t\t\t\treturn function(callback, ms) {\n\t\t\t\t\t\tclearTimeout(Plugin.timer);\n\t\t\t\t\t\tPlugin.timer = setTimeout(callback, ms);\n\t\t\t\t\t};\n\t\t\t\t})();\n\n\t\t\t\tdelay(function() {\n\t\t\t\t\t// get query parameters\n\t\t\t\t\tvar query = Plugin.getDataSourceQuery();\n\n\t\t\t\t\t// search not by columns\n\t\t\t\t\tif (typeof columns === 'undefined' && typeof value !== 'undefined') {\n\t\t\t\t\t\tvar key = Plugin.getGeneralSearchKey();\n\t\t\t\t\t\tquery[key] = value;\n\t\t\t\t\t}\n\n\t\t\t\t\t// search by columns, support multiple columns\n\t\t\t\t\tif (typeof columns === 'object') {\n\t\t\t\t\t\t$.each(columns, function(k, column) {\n\t\t\t\t\t\t\tquery[column] = value;\n\t\t\t\t\t\t});\n\t\t\t\t\t\t// remove empty element from arrays\n\t\t\t\t\t\t$.each(query, function(k, v) {\n\t\t\t\t\t\t\tif (v === '' || $.isEmptyObject(v)) {\n\t\t\t\t\t\t\t\tdelete query[k];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tPlugin.setDataSourceQuery(query);\n\n\t\t\t\t\t// reset pagination to 1 when doing seearching\n\t\t\t\t\tdatatable.setDataSourceParam('pagination', Object.assign({}, datatable.getDataSourceParam('pagination'), {page: 1}));\n\n\t\t\t\t\t// local filter only. remote pagination will skip this block\n\t\t\t\t\tif (!options.data.serverFiltering) {\n\t\t\t\t\t\tPlugin.localDataUpdate();\n\t\t\t\t\t}\n\t\t\t\t\tPlugin.dataRender('search');\n\t\t\t\t}, Plugin.getOption('search.delay'));\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Set datasource params extract\n\t\t\t * @param param\n\t\t\t * @param value\n\t\t\t */\n\t\t\tsetDataSourceParam: function(param, value) {\n\t\t\t\tdatatable.API.params = $.extend({}, {\n\t\t\t\t\tpagination: {page: 1, perpage: Plugin.getOption('data.pageSize')},\n\t\t\t\t\tsort: Plugin.getDefaultSortColumn(),\n\t\t\t\t\tquery: {},\n\t\t\t\t}, datatable.API.params, Plugin.stateGet(Plugin.stateId));\n\n\t\t\t\tdatatable.API.params = Plugin.extendObj(datatable.API.params, param, value);\n\n\t\t\t\tPlugin.stateKeep(Plugin.stateId, datatable.API.params);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Get datasource params\n\t\t\t * @param param\n\t\t\t */\n\t\t\tgetDataSourceParam: function(param) {\n\t\t\t\tdatatable.API.params = $.extend({}, {\n\t\t\t\t\tpagination: {page: 1, perpage: Plugin.getOption('data.pageSize')},\n\t\t\t\t\tsort: Plugin.getDefaultSortColumn(),\n\t\t\t\t\tquery: {},\n\t\t\t\t}, datatable.API.params, Plugin.stateGet(Plugin.stateId));\n\n\t\t\t\tif (typeof param === 'string') {\n\t\t\t\t\treturn Plugin.getObject(param, datatable.API.params);\n\t\t\t\t}\n\n\t\t\t\treturn datatable.API.params;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Shortcode to datatable.getDataSourceParam('query');\n\t\t\t * @returns {*}\n\t\t\t */\n\t\t\tgetDataSourceQuery: function() {\n\t\t\t\treturn Plugin.getDataSourceParam('query') || {};\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Shortcode to datatable.setDataSourceParam('query', query);\n\t\t\t * @param query\n\t\t\t */\n\t\t\tsetDataSourceQuery: function(query) {\n\t\t\t\tPlugin.setDataSourceParam('query', query);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Get current page number\n\t\t\t * @returns {number}\n\t\t\t */\n\t\t\tgetCurrentPage: function() {\n\t\t\t\treturn $(datatable.table).\n\t\t\t\t\tsiblings('.' + pfx + 'datatable-pager').\n\t\t\t\t\tlast().\n\t\t\t\t\tfind('.' + pfx + 'datatable-pager-nav').\n\t\t\t\t\tfind('.' + pfx + 'datatable-pager-link.' + pfx + 'datatable-pager-link-active').\n\t\t\t\t\tdata('page') || 1;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Get selected dropdown page size\n\t\t\t * @returns {*|number}\n\t\t\t */\n\t\t\tgetPageSize: function() {\n\t\t\t\treturn $(datatable.table).siblings('.' + pfx + 'datatable-pager').last().find('select.' + pfx + 'datatable-pager-size').val() || 10;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Get total rows\n\t\t\t */\n\t\t\tgetTotalRows: function() {\n\t\t\t\treturn datatable.API.params.pagination.total;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Get full dataset in grid\n\t\t\t * @returns {*|null|Array}\n\t\t\t */\n\t\t\tgetDataSet: function() {\n\t\t\t\treturn datatable.originalDataSet;\n\t\t\t},\n\n\t\t\tnodeTr: [],\n\t\t\tnodeTd: [],\n\t\t\tnodeCols: [],\n\t\t\trecentNode: [],\n\n\t\t\ttable: function() {\n\t\t\t\tif (typeof datatable.table !== 'undefined') {\n\t\t\t\t\treturn datatable.table;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Select a single row from the table\n\t\t\t * @param selector\n\t\t\t * @returns {jQuery}\n\t\t\t */\n\t\t\trow: function(selector) {\n\t\t\t\tPlugin.rows(selector);\n\t\t\t\tPlugin.nodeTr = Plugin.recentNode = $(Plugin.nodeTr).first();\n\t\t\t\treturn datatable;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Select multiple rows from the table\n\t\t\t * @param selector\n\t\t\t * @returns {jQuery}\n\t\t\t */\n\t\t\trows: function(selector) {\n\t\t\t\tif (Plugin.isLocked()) {\n\t\t\t\t\tPlugin.nodeTr = Plugin.recentNode = $(datatable.tableBody).find(selector).filter('.' + pfx + 'datatable-lock-scroll > .' + pfx + 'datatable-row');\n\t\t\t\t} else {\n\t\t\t\t\tPlugin.nodeTr = Plugin.recentNode = $(datatable.tableBody).find(selector).filter('.' + pfx + 'datatable-row');\n\t\t\t\t}\n\t\t\t\treturn datatable;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Select a single column from the table\n\t\t\t * @param index zero-based index\n\t\t\t * @returns {jQuery}\n\t\t\t */\n\t\t\tcolumn: function(index) {\n\t\t\t\tPlugin.nodeCols = Plugin.recentNode = $(datatable.tableBody).find('.' + pfx + 'datatable-cell:nth-child(' + (index + 1) + ')');\n\t\t\t\treturn datatable;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Select multiple columns from the table\n\t\t\t * @param selector\n\t\t\t * @returns {jQuery}\n\t\t\t */\n\t\t\tcolumns: function(selector) {\n\t\t\t\tvar context = datatable.table;\n\t\t\t\tif (Plugin.nodeTr === Plugin.recentNode) {\n\t\t\t\t\tcontext = Plugin.nodeTr;\n\t\t\t\t}\n\t\t\t\tvar columns = $(context).find('.' + pfx + 'datatable-cell[data-field=\"' + selector + '\"]');\n\t\t\t\tif (columns.length > 0) {\n\t\t\t\t\tPlugin.nodeCols = Plugin.recentNode = columns;\n\t\t\t\t} else {\n\t\t\t\t\tPlugin.nodeCols = Plugin.recentNode = $(context).find(selector).filter('.' + pfx + 'datatable-cell');\n\t\t\t\t}\n\t\t\t\treturn datatable;\n\t\t\t},\n\n\t\t\tcell: function(selector) {\n\t\t\t\tPlugin.cells(selector);\n\t\t\t\tPlugin.nodeTd = Plugin.recentNode = $(Plugin.nodeTd).first();\n\t\t\t\treturn datatable;\n\t\t\t},\n\n\t\t\tcells: function(selector) {\n\t\t\t\tvar cells = $(datatable.tableBody).find('.' + pfx + 'datatable-cell');\n\t\t\t\tif (typeof selector !== 'undefined') {\n\t\t\t\t\tcells = $(cells).filter(selector);\n\t\t\t\t}\n\t\t\t\tPlugin.nodeTd = Plugin.recentNode = cells;\n\t\t\t\treturn datatable;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Delete the selected row from the table\n\t\t\t * @returns {jQuery}\n\t\t\t */\n\t\t\tremove: function() {\n\t\t\t\tif ($(Plugin.nodeTr.length) && Plugin.nodeTr === Plugin.recentNode) {\n\t\t\t\t\t$(Plugin.nodeTr).remove();\n\t\t\t\t}\n\t\t\t\tPlugin.layoutUpdate();\n\t\t\t\treturn datatable;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Show or hide the columns or rows\n\t\t\t */\n\t\t\tvisible: function(bool) {\n\t\t\t\tif ($(Plugin.recentNode.length)) {\n\t\t\t\t\tvar locked = Plugin.lockEnabledColumns();\n\t\t\t\t\tif (Plugin.recentNode === Plugin.nodeCols) {\n\t\t\t\t\t\tvar index = Plugin.recentNode.index();\n\n\t\t\t\t\t\tif (Plugin.isLocked()) {\n\t\t\t\t\t\t\tvar scrollColumns = $(Plugin.recentNode).closest('.' + pfx + 'datatable-lock-scroll').length;\n\t\t\t\t\t\t\tif (scrollColumns) {\n\t\t\t\t\t\t\t\t// is at center of scrollable area\n\t\t\t\t\t\t\t\tindex += locked.left.length + 1;\n\t\t\t\t\t\t\t} else if ($(Plugin.recentNode).closest('.' + pfx + 'datatable-lock-right').length) {\n\t\t\t\t\t\t\t\t// is at the right locked table\n\t\t\t\t\t\t\t\tindex += locked.left.length + scrollColumns + 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (bool) {\n\t\t\t\t\t\tif (Plugin.recentNode === Plugin.nodeCols) {\n\t\t\t\t\t\t\tdelete options.columns[index].visible;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(Plugin.recentNode).show();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (Plugin.recentNode === Plugin.nodeCols) {\n\t\t\t\t\t\t\tPlugin.setOption('columns.' + (index) + '.visible', false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(Plugin.recentNode).hide();\n\t\t\t\t\t}\n\t\t\t\t\tPlugin.columnHide();\n\t\t\t\t\tPlugin.redraw();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Get the the DOM element for the selected rows or columns\n\t\t\t * @returns {Array}\n\t\t\t */\n\t\t\tnodes: function() {\n\t\t\t\treturn Plugin.recentNode;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * will be implemented soon\n\t\t\t * @returns {jQuery}\n\t\t\t */\n\t\t\tdataset: function() {\n\t\t\t\treturn datatable;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Open page by number\n\t\t\t * @param page number\n\t\t\t */\n\t\t\tgotoPage: function (page) {\n\t\t\t\tif (typeof Plugin.pagingObject !== 'undefined') {\n\t\t\t\t\tPlugin.isInit = true;\n\t\t\t\t\tPlugin.pagingObject.openPage(page);\n\t\t\t\t}\n\t\t\t},\n\n\t\t};\n\n\t\t/**\n\t\t * Public API methods can be used directly by datatable\n\t\t */\n\t\t$.each(Plugin, function(funcName, func) {\n\t\t\tdatatable[funcName] = func;\n\t\t});\n\n\t\t// initialize main datatable plugin\n\t\tif (typeof options !== 'undefined') {\n\t\t\tif (typeof options === 'string') {\n\t\t\t\tvar method = options;\n\t\t\t\tdatatable = $(this).data(pluginName);\n\t\t\t\tif (typeof datatable !== 'undefined') {\n\t\t\t\t\toptions = datatable.options;\n\t\t\t\t\tPlugin[method].apply(this, Array.prototype.slice.call(arguments, 1));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!datatable.data(pluginName) && !$(this).hasClass(pfx + 'datatable-loaded')) {\n\t\t\t\t\tdatatable.dataSet = null;\n\t\t\t\t\tdatatable.textAlign = {\n\t\t\t\t\t\tleft: pfx + 'datatable-cell-left',\n\t\t\t\t\t\tcenter: pfx + 'datatable-cell-center',\n\t\t\t\t\t\tright: pfx + 'datatable-cell-right',\n\t\t\t\t\t};\n\n\t\t\t\t\t// merge default and user defined options\n\t\t\t\t\toptions = $.extend(true, {}, $.fn[pluginName].defaults, options);\n\n\t\t\t\t\tdatatable.options = options;\n\n\t\t\t\t\t// init plugin process\n\t\t\t\t\tPlugin.init.apply(this, [options]);\n\n\t\t\t\t\t$(datatable.wrap).data(pluginName, datatable);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// get existing instance datatable\n\t\t\tdatatable = $(this).data(pluginName);\n\t\t\tif (typeof datatable === 'undefined') {\n\t\t\t\t$.error(pluginName + ' not initialized');\n\t\t\t}\n\t\t\toptions = datatable.options;\n\t\t}\n\n\t\treturn datatable;\n\t};\n\n\t// default options\n\t$.fn[pluginName].defaults = {\n\t\t// datasource definition\n\t\tdata: {\n\t\t\ttype: 'local',\n\t\t\tsource: null,\n\t\t\tpageSize: 10, // display records per page\n\t\t\tsaveState: true,\n\n\t\t\tserverPaging: false,\n\t\t\tserverFiltering: false,\n\t\t\tserverSorting: false,\n\n\t\t\tautoColumns: false,\n\t\t\tattr: {\n\t\t\t\trowProps: [],\n\t\t\t},\n\t\t},\n\n\t\t// layout definition\n\t\tlayout: {\n\t\t\ttheme: 'default', // datatable will support multiple themes and designs\n\t\t\tclass: pfx + 'datatable-primary', // custom wrapper class\n\t\t\tscroll: false, // enable/disable datatable scroll both horizontal and vertical when needed.\n\t\t\theight: null, // datatable's body's fixed height\n\t\t\tminHeight: null,\n\t\t\tfooter: false, // display/hide footer\n\t\t\theader: true, // display/hide header\n\t\t\tcustomScrollbar: true, // set false to disable custom scrollbar\n\n\t\t\t// datatable spinner\n\t\t\tspinner: {\n\t\t\t\toverlayColor: '#000000',\n\t\t\t\topacity: 0,\n\t\t\t\ttype: 'loader',\n\t\t\t\tstate: 'primary',\n\t\t\t\tmessage: true,\n\t\t\t},\n\n\t\t\t// datatable UI icons\n\t\t\ticons: {\n\t\t\t\tsort: {asc: 'flaticon2-arrow-up', desc: 'flaticon2-arrow-down'},\n\t\t\t\tpagination: {\n\t\t\t\t\tnext: 'flaticon2-next',\n\t\t\t\t\tprev: 'flaticon2-back',\n\t\t\t\t\tfirst: 'flaticon2-fast-back',\n\t\t\t\t\tlast: 'flaticon2-fast-next',\n\t\t\t\t\tmore: 'flaticon-more-1',\n\t\t\t\t},\n\t\t\t\trowDetail: {expand: 'fa fa-caret-down', collapse: 'fa fa-caret-right'},\n\t\t\t},\n\t\t},\n\n\t\t// column sorting\n\t\tsortable: true,\n\n\t\t// resize column size with mouse drag coming soon)\n\t\tresizable: false,\n\n\t\t// column based filtering (coming soon)\n\t\tfilterable: false,\n\n\t\tpagination: true,\n\n\t\t// inline and bactch editing (cooming soon)\n\t\teditable: false,\n\n\t\t// columns definition\n\t\tcolumns: [],\n\n\t\tsearch: {\n\t\t\t// enable trigger search by keyup enter\n\t\t\tonEnter: false,\n\t\t\t// input text for search\n\t\t\tinput: null,\n\t\t\t// search delay in milliseconds\n\t\t\tdelay: 400,\n\t\t\t//\tremote server search key value\n\t\t\tkey: null\n\t\t},\n\n\t\trows: {\n\t\t\t// deprecated\n\t\t\tcallback: function() {\n\t\t\t},\n\t\t\t// call before row template\n\t\t\tbeforeTemplate: function() {\n\t\t\t},\n\t\t\t// call after row template\n\t\t\tafterTemplate: function() {\n\t\t\t},\n\t\t\tautoHide: true,\n\t\t},\n\n\t\t// toolbar\n\t\ttoolbar: {\n\t\t\t// place pagination and displayInfo blocks according to the array order\n\t\t\tlayout: ['pagination', 'info'],\n\n\t\t\t// toolbar placement can be at top or bottom or both top and bottom repeated\n\t\t\tplacement: ['bottom'], //'top', 'bottom'\n\n\t\t\t// toolbar items\n\t\t\titems: {\n\t\t\t\t// pagination\n\t\t\t\tpagination: {\n\t\t\t\t\t// pagination type(default or scroll)\n\t\t\t\t\ttype: 'default',\n\n\t\t\t\t\t// number of pages to display by breakpoints\n\t\t\t\t\tpages: {\n\t\t\t\t\t\tdesktop: {\n\t\t\t\t\t\t\tlayout: 'default',\n\t\t\t\t\t\t\tpagesNumber: 5,\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttablet: {\n\t\t\t\t\t\t\tlayout: 'default',\n\t\t\t\t\t\t\tpagesNumber: 3,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmobile: {\n\t\t\t\t\t\t\tlayout: 'compact',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\n\t\t\t\t\t// navigation buttons\n\t\t\t\t\tnavigation: {\n\t\t\t\t\t\tprev: true, // display prev button\n\t\t\t\t\t\tnext: true, // display next button\n\t\t\t\t\t\tfirst: true, // display first button\n\t\t\t\t\t\tlast: true, // display last button\n\t\t\t\t\t\tmore: false // display more button\n\t\t\t\t\t},\n\n\t\t\t\t\t// page size select\n\t\t\t\t\tpageSizeSelect: [], // display dropdown to select pagination size. -1 is used for \"ALl\" option\n\t\t\t\t},\n\n\t\t\t\t// records info\n\t\t\t\tinfo: true,\n\t\t\t},\n\t\t},\n\n\t\t// here we will keep all strings and message used by datatable UI so developer can easiliy translate to any language.\n\t\t// By default the stirngs will be in the plugin source and here can override it\n\t\ttranslate: {\n\t\t\trecords: {\n\t\t\t\tprocessing: 'Please wait...',\n\t\t\t\tnoRecords: 'No records found',\n\t\t\t},\n\t\t\ttoolbar: {\n\t\t\t\tpagination: {\n\t\t\t\t\titems: {\n\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\tfirst: 'First',\n\t\t\t\t\t\t\tprev: 'Previous',\n\t\t\t\t\t\t\tnext: 'Next',\n\t\t\t\t\t\t\tlast: 'Last',\n\t\t\t\t\t\t\tmore: 'More pages',\n\t\t\t\t\t\t\tinput: 'Page number',\n\t\t\t\t\t\t\tselect: 'Select page size',\n\t\t\t\t\t\t\tall: 'all',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinfo: 'Showing {{start}} - {{end}} of {{total}}',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\n\t\textensions: {},\n\t};\n\n}(jQuery));\n","\"use strict\";\n(function($) {\n\n\tvar pluginName = 'KTDatatable';\n\tvar pfx = '';\n\n\t$.fn[pluginName] = $.fn[pluginName] || {};\n\n\t/**\n\t * @param datatable Main datatable plugin instance\n\t * @param options Extension options\n\t * @returns {*}\n\t */\n\t$.fn[pluginName].checkbox = function(datatable, options) {\n\t\tvar Extension = {\n\t\t\tselectedAllRows: false,\n\t\t\tselectedRows: [],\n\t\t\tunselectedRows: [],\n\n\t\t\tinit: function() {\n\t\t\t\tif (Extension.selectorEnabled()) {\n\t\t\t\t\t// reset\n\t\t\t\t\tdatatable.setDataSourceParam(options.vars.selectedAllRows, false);\n\t\t\t\t\tdatatable.stateRemove('checkbox');\n\n\t\t\t\t\t// requestIds is not null\n\t\t\t\t\tif (options.vars.requestIds) {\n\t\t\t\t\t\t// request ids in response\n\t\t\t\t\t\tdatatable.setDataSourceParam(options.vars.requestIds, true);\n\t\t\t\t\t}\n\n\t\t\t\t\t// remove selected checkbox on datatable reload\n\t\t\t\t\t$(datatable).on(pfx + 'datatable-on-reloaded', function() {\n\t\t\t\t\t\tdatatable.stateRemove('checkbox');\n\t\t\t\t\t\tdatatable.setDataSourceParam(options.vars.selectedAllRows, false);\n\t\t\t\t\t\tExtension.selectedAllRows = false;\n\t\t\t\t\t\tExtension.selectedRows = [];\n\t\t\t\t\t\tExtension.unselectedRows = [];\n\t\t\t\t\t});\n\n\t\t\t\t\t// select all on extension init\n\t\t\t\t\tExtension.selectedAllRows = datatable.getDataSourceParam(options.vars.selectedAllRows);\n\n\t\t\t\t\t$(datatable).on(pfx + 'datatable-on-layout-updated', function(e, args) {\n\t\t\t\t\t\tif (args.table != $(datatable.wrap).attr('id')) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdatatable.ready(function() {\n\t\t\t\t\t\t\tExtension.initVars();\n\t\t\t\t\t\t\tExtension.initEvent();\n\t\t\t\t\t\t\tExtension.initSelect();\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\t$(datatable).on(pfx + 'datatable-on-check', function(e, ids) {\n\t\t\t\t\t\tids.forEach(function(id) {\n\t\t\t\t\t\t\tExtension.selectedRows.push(id);\n\t\t\t\t\t\t\t// // remove from unselected rows\n\t\t\t\t\t\t\tExtension.unselectedRows = Extension.remove(Extension.unselectedRows, id);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tvar storage = {};\n\t\t\t\t\t\tstorage['selectedRows'] = Extension.selectedRows.filter(Extension.unique);\n\t\t\t\t\t\tstorage['unselectedRows'] = Extension.unselectedRows.filter(Extension.unique);\n\t\t\t\t\t\tdatatable.stateKeep('checkbox', storage);\n\t\t\t\t\t});\n\t\t\t\t\t$(datatable).on(pfx + 'datatable-on-uncheck', function(e, ids) {\n\t\t\t\t\t\tids.forEach(function(id) {\n\t\t\t\t\t\t\tExtension.unselectedRows.push(id);\n\t\t\t\t\t\t\t// // remove from selected rows\n\t\t\t\t\t\t\tExtension.selectedRows = Extension.remove(Extension.selectedRows, id);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tvar storage = {};\n\t\t\t\t\t\tstorage['selectedRows'] = Extension.selectedRows.filter(Extension.unique);\n\t\t\t\t\t\tstorage['unselectedRows'] = Extension.unselectedRows.filter(Extension.unique);\n\t\t\t\t\t\tstorage['unselectedRows'] = Extension.unselectedRows.filter(Extension.unique);\n\t\t\t\t\t\tdatatable.stateKeep('checkbox', storage);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Init checkbox clicks event\n\t\t\t */\n\t\t\tinitEvent: function() {\n\t\t\t\t// select all checkbox click\n\t\t\t\t$(datatable.tableHead).find('.' + pfx + 'checkbox-all > [type=\"checkbox\"]').click(function(e) {\n\t\t\t\t\t// clear selected and unselected rows\n\t\t\t\t\tExtension.selectedRows = Extension.unselectedRows = [];\n\t\t\t\t\tdatatable.stateRemove('checkbox');\n\n\t\t\t\t\t// select all rows\n\t\t\t\t\tExtension.selectedAllRows = !!$(this).is(':checked');\n\n\t\t\t\t\t// local select all current page rows\n\t\t\t\t\tif (!options.vars.requestIds) {\n\t\t\t\t\t\tif ($(this).is(':checked')) {\n\t\t\t\t\t\t\tExtension.selectedRows = $.makeArray($(datatable.tableBody).find('.' + pfx + 'checkbox-single > [type=\"checkbox\"]').map(function(i, chk) {\n\t\t\t\t\t\t\t\treturn $(chk).val();\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar storage = {};\n\t\t\t\t\t\tstorage['selectedRows'] = Extension.selectedRows.filter(Extension.unique);\n\t\t\t\t\t\tdatatable.stateKeep('checkbox', storage);\n\t\t\t\t\t}\n\n\t\t\t\t\t// keep selectedAllRows in datasource params\n\t\t\t\t\tdatatable.setDataSourceParam(options.vars.selectedAllRows, Extension.selectedAllRows);\n\n\t\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-click-checkbox', [$(this)]);\n\t\t\t\t});\n\n\t\t\t\t// single row checkbox click\n\t\t\t\t$(datatable.tableBody).find('.' + pfx + 'checkbox-single > [type=\"checkbox\"]').click(function(e) {\n\t\t\t\t\tvar id = $(this).val();\n\t\t\t\t\tif ($(this).is(':checked')) {\n\t\t\t\t\t\tExtension.selectedRows.push(id);\n\t\t\t\t\t\t// remove from unselected rows\n\t\t\t\t\t\tExtension.unselectedRows = Extension.remove(Extension.unselectedRows, id);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tExtension.unselectedRows.push(id);\n\t\t\t\t\t\t// remove from selected rows\n\t\t\t\t\t\tExtension.selectedRows = Extension.remove(Extension.selectedRows, id);\n\t\t\t\t\t}\n\n\t\t\t\t\t// local checkbox header check\n\t\t\t\t\tif (!options.vars.requestIds && Extension.selectedRows.length < 1) {\n\t\t\t\t\t\t// remove select all checkbox, if there is no checked checkbox left\n\t\t\t\t\t\t$(datatable.tableHead).find('.' + pfx + 'checkbox-all > [type=\"checkbox\"]').prop('checked', false);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar storage = {};\n\t\t\t\t\tstorage['selectedRows'] = Extension.selectedRows.filter(Extension.unique);\n\t\t\t\t\tstorage['unselectedRows'] = Extension.unselectedRows.filter(Extension.unique);\n\t\t\t\t\tdatatable.stateKeep('checkbox', storage);\n\n\t\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-click-checkbox', [$(this)]);\n\t\t\t\t});\n\t\t\t},\n\n\t\t\tunique: function(value, index, self) {\n\t\t\t\treturn self.indexOf(value) === index;\n\t\t\t},\n\n\t\t\tinitSelect: function() {\n\t\t\t\t// selected all rows from server\n\t\t\t\tif (Extension.selectedAllRows && options.vars.requestIds) {\n\t\t\t\t\tif (!datatable.hasClass(pfx + 'datatable-error')) {\n\t\t\t\t\t\t// set header select all checkbox checked\n\t\t\t\t\t\t$(datatable.tableHead).find('.' + pfx + 'checkbox-all > [type=\"checkbox\"]').prop('checked', true);\n\t\t\t\t\t}\n\n\t\t\t\t\t// set all checkbox in table body\n\t\t\t\t\tdatatable.setActiveAll(true);\n\n\t\t\t\t\t// remove unselected rows\n\t\t\t\t\tExtension.unselectedRows.forEach(function(id) {\n\t\t\t\t\t\tdatatable.setInactive(id);\n\t\t\t\t\t});\n\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// single check for server and local\n\t\t\t\t\tExtension.selectedRows.forEach(function(id) {\n\t\t\t\t\t\tdatatable.setActive(id);\n\t\t\t\t\t});\n\n\t\t\t\t\t// local checkbox; check if all checkboxes of currect page are checked\n\t\t\t\t\tif (!datatable.hasClass(pfx + 'datatable-error') && $(datatable.tableBody).find('.' + pfx + 'checkbox-single > [type=\"checkbox\"]').not(':checked').length < 1) {\n\t\t\t\t\t\t// set header select all checkbox checked\n\t\t\t\t\t\t$(datatable.tableHead).find('.' + pfx + 'checkbox-all > [type=\"checkbox\"]').prop('checked', true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Check if selector is enabled from options\n\t\t\t */\n\t\t\tselectorEnabled: function() {\n\t\t\t\treturn $.grep(datatable.options.columns, function(n, i) {\n\t\t\t\t\treturn n.selector || false;\n\t\t\t\t})[0];\n\t\t\t},\n\n\t\t\tinitVars: function() {\n\t\t\t\t// get single select/unselect from localstorage\n\t\t\t\tvar storage = datatable.stateGet('checkbox');\n\t\t\t\tif (typeof storage !== 'undefined') {\n\t\t\t\t\tExtension.selectedRows = storage['selectedRows'] || [];\n\t\t\t\t\tExtension.unselectedRows = storage['unselectedRows'] || [];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tgetSelectedId: function(path) {\n\t\t\t\tExtension.initVars();\n\n\t\t\t\t// server selected all rows\n\t\t\t\tif (Extension.selectedAllRows && options.vars.requestIds) {\n\t\t\t\t\tif (typeof path === 'undefined') {\n\t\t\t\t\t\tpath = options.vars.rowIds;\n\t\t\t\t\t}\n\n\t\t\t\t\t// if selected all rows, return id from response meta\n\t\t\t\t\tvar selectedAllRows = datatable.getObject(path, datatable.lastResponse) || [];\n\n\t\t\t\t\tif (selectedAllRows.length > 0) {\n\t\t\t\t\t\t// remove single unselected rows from selectedAllRows ids from server response emta\n\t\t\t\t\t\tExtension.unselectedRows.forEach(function(id) {\n\t\t\t\t\t\t\tselectedAllRows = Extension.remove(selectedAllRows, parseInt(id));\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn selectedAllRows.filter(Extension.unique);\n\t\t\t\t}\n\n\t\t\t\t// else return single checked selected rows\n\t\t\t\treturn Extension.selectedRows.filter(Extension.unique);\n\t\t\t},\n\n\t\t\tremove: function(array, element) {\n\t\t\t\treturn array.filter(function(e) {\n\t\t\t\t\treturn e !== element;\n\t\t\t\t});\n\t\t\t},\n\t\t};\n\n\t\t// make the extension accessible from datatable init\n\t\tdatatable.checkbox = function() {\n\t\t\treturn Extension;\n\t\t};\n\n\t\tif (typeof options === 'object') {\n\t\t\toptions = $.extend(true, {}, $.fn[pluginName].checkbox.default, options);\n\t\t\tExtension.init.apply(this, [options]);\n\t\t}\n\n\t\treturn datatable;\n\t};\n\n\t$.fn[pluginName].checkbox.default = {\n\t\tvars: {\n\t\t\t// select all rows flag to be sent to the server\n\t\t\tselectedAllRows: 'selectedAllRows',\n\t\t\t// request id parameter's name\n\t\t\trequestIds: 'requestIds',\n\t\t\t// response path to all rows id\n\t\t\trowIds: 'meta.rowIds',\n\t\t},\n\t};\n\n}(jQuery));\n","var defaults = {\n\tlayout: {\n\t\ticons: {\n\t\t\tpagination: {\n\t\t\t\tnext: 'flaticon2-next',\n\t\t\t\tprev: 'flaticon2-back',\n\t\t\t\tfirst: 'flaticon2-fast-back',\n\t\t\t\tlast: 'flaticon2-fast-next',\n\t\t\t\tmore: 'flaticon-more-1',\n\t\t\t},\n\t\t\trowDetail: {expand: 'fa fa-caret-down', collapse: 'fa fa-caret-right'},\n\t\t}\n\t}\n};\n\nif (KTUtil.isRTL()) {\n\tdefaults = {\n\t\tlayout: {\n\t\t\ticons: {\n\t\t\t\tpagination: {\n\t\t\t\t\tnext: 'flaticon2-back',\n\t\t\t\t\tprev: 'flaticon2-next',\n\t\t\t\t\tfirst: 'flaticon2-fast-next',\n\t\t\t\t\tlast: 'flaticon2-fast-back',\n\t\t\t\t},\n\t\t\t\trowDetail: {collapse: 'fa fa-caret-down', expand: 'fa fa-caret-right'},\n\t\t\t}\n\t\t}\n\t}\n}\n\n$.extend(true, $.fn.KTDatatable.defaults, defaults);\n","\"use strict\";\n\n// Component Definition \nvar KTDialog = function(options) {\n // Main object\n var the = this;\n\n // Get element object\n var element;\n var body = KTUtil.getBody();\n\n // Default options\n var defaultOptions = {\n 'placement' : 'top center',\n 'type' : 'loader',\n 'width' : 100,\n 'state' : 'default',\n 'message' : 'Loading...'\n };\n\n ////////////////////////////\n // ** Private Methods ** //\n ////////////////////////////\n\n var Plugin = {\n /**\n * Construct\n */\n\n construct: function(options) {\n Plugin.init(options);\n\n return the;\n },\n\n /**\n * Handles subtoggle click toggle\n */\n init: function(options) {\n the.events = [];\n\n // merge default and user defined options\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\n\n the.state = false;\n },\n\n /**\n * Show dialog\n */\n show: function() {\n Plugin.eventTrigger('show');\n\n element = document.createElement(\"DIV\");\n KTUtil.setHTML(element, the.options.message);\n\n KTUtil.addClass(element, 'dialog dialog-shown');\n KTUtil.addClass(element, 'dialog-' + the.options.state);\n KTUtil.addClass(element, 'dialog-' + the.options.type);\n\n if (the.options.placement == 'top center') {\n KTUtil.addClass(element, 'dialog-top-center');\n }\n\n body.appendChild(element);\n\n the.state = 'shown';\n\n Plugin.eventTrigger('shown');\n\n return the;\n },\n\n /**\n * Hide dialog\n */\n hide: function() {\n if (element) {\n Plugin.eventTrigger('hide');\n\n element.remove();\n the.state = 'hidden';\n\n Plugin.eventTrigger('hidden');\n }\n\n return the;\n },\n\n /**\n * Trigger events\n */\n eventTrigger: function(name) {\n for (var i = 0; i < the.events.length; i++) {\n var event = the.events[i];\n\n if (event.name == name) {\n if (event.one == true) {\n if (event.fired == false) {\n the.events[i].fired = true;\n return event.handler.call(this, the);\n }\n } else {\n return event.handler.call(this, the);\n }\n }\n }\n },\n\n addEvent: function(name, handler, one) {\n the.events.push({\n name: name,\n handler: handler,\n one: one,\n fired: false\n });\n\n return the;\n }\n };\n\n //////////////////////////\n // ** Public Methods ** //\n //////////////////////////\n\n /**\n * Set default options\n */\n\n the.setDefaults = function(options) {\n defaultOptions = options;\n };\n\n /**\n * Check shown state\n */\n the.shown = function() {\n return the.state == 'shown';\n };\n\n /**\n * Check hidden state\n */\n the.hidden = function() {\n return the.state == 'hidden';\n };\n\n /**\n * Show dialog\n */\n the.show = function() {\n return Plugin.show();\n };\n\n /**\n * Hide dialog\n */\n the.hide = function() {\n return Plugin.hide();\n };\n\n /**\n * Attach event\n * @returns {KTToggle}\n */\n the.on = function(name, handler) {\n return Plugin.addEvent(name, handler);\n };\n\n /**\n * Attach event that will be fired once\n * @returns {KTToggle}\n */\n the.one = function(name, handler) {\n return Plugin.addEvent(name, handler, true);\n };\n\n // Construct plugin\n Plugin.construct.apply(the, [options]);\n\n return the;\n};\n\n// webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = KTDialog;\n}\n","\"use strict\";\n\n// Component Definition\nvar KTHeader = function(elementId, options) {\n // Main object\n var the = this;\n var init = false;\n\n // Get element object\n var element = KTUtil.getById(elementId);\n var body = KTUtil.getBody();\n\n if (element === undefined) {\n return;\n }\n\n // Default options\n var defaultOptions = {\n offset: {\n desktop: true,\n tabletAndMobile: true\n },\n releseOnReverse: {\n desktop: false,\n tabletAndMobile: false\n }\n };\n\n ////////////////////////////\n // ** Private Methods ** //\n ////////////////////////////\n\n var Plugin = {\n /**\n * Run plugin\n * @returns {KTHeader}\n */\n construct: function(options) {\n if (KTUtil.data(element).has('header')) {\n the = KTUtil.data(element).get('header');\n } else {\n // reset header\n Plugin.init(options);\n\n // build header\n Plugin.build();\n\n KTUtil.data(element).set('header', the);\n }\n\n return the;\n },\n\n /**\n * Handles subheader click toggle\n * @returns {KTHeader}\n */\n init: function(options) {\n the.events = [];\n\n // merge default and user defined options\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\n },\n\n /**\n * Reset header\n * @returns {KTHeader}\n */\n build: function() {\n var eventTriggerState = true;\n var lastScrollTop = 0;\n\n window.addEventListener('scroll', function() {\n var offset = 0, st, attrName;\n\n if (KTUtil.isBreakpointDown('lg') && the.options.offset.tabletAndMobile === false) {\n return;\n }\n\n if (KTUtil.isBreakpointUp('lg') && the.options.offset.desktop === false) {\n return;\n }\n\n if (KTUtil.isBreakpointUp('lg')) {\n offset = the.options.offset.desktop;\n } else if (KTUtil.isBreakpointDown('lg')) {\n offset = the.options.offset.tabletAndMobile;\n }\n\n st = KTUtil.getScrollTop();\n\n if (\n (KTUtil.isBreakpointDown('lg') && the.options.releseOnReverse.tabletAndMobile) ||\n (KTUtil.isBreakpointUp('lg') && the.options.releseOnReverse.desktop)\n ) {\n if (st > offset && lastScrollTop < st) { // down scroll mode\n if (body.hasAttribute('data-header-scroll') === false) {\n body.setAttribute('data-header-scroll', 'on');\n }\n\n if (eventTriggerState) {\n Plugin.eventTrigger('scrollOn', the);\n eventTriggerState = false;\n }\n } else { // back scroll mode\n if (body.hasAttribute('data-header-scroll') === true) {\n body.removeAttribute('data-header-scroll');\n }\n\n if (eventTriggerState == false) {\n Plugin.eventTrigger('scrollOff', the);\n eventTriggerState = true;\n }\n }\n\n lastScrollTop = st;\n } else {\n if (st > offset) { // down scroll mode\n if (body.hasAttribute('data-header-scroll') === false) {\n body.setAttribute('data-header-scroll', 'on');\n }\n\n if (eventTriggerState) {\n Plugin.eventTrigger('scrollOn', the);\n eventTriggerState = false;\n }\n } else { // back scroll mode\n if (body.hasAttribute('data-header-scroll') === true) {\n body.removeAttribute('data-header-scroll');\n }\n\n if (eventTriggerState == false) {\n Plugin.eventTrigger('scrollOff', the);\n eventTriggerState = true;\n }\n }\n }\n });\n },\n\n /**\n * Trigger events\n */\n eventTrigger: function(name, args) {\n for (var i = 0; i < the.events.length; i++) {\n var event = the.events[i];\n if (event.name == name) {\n if (event.one == true) {\n if (event.fired == false) {\n the.events[i].fired = true;\n return event.handler.call(this, the, args);\n }\n } else {\n return event.handler.call(this, the, args);\n }\n }\n }\n },\n\n addEvent: function(name, handler, one) {\n the.events.push({\n name: name,\n handler: handler,\n one: one,\n fired: false\n });\n }\n };\n\n //////////////////////////\n // ** Public Methods ** //\n //////////////////////////\n\n /**\n * Set default options\n */\n\n the.setDefaults = function(options) {\n defaultOptions = options;\n };\n\n /**\n * Register event\n */\n the.on = function(name, handler) {\n return Plugin.addEvent(name, handler);\n };\n\n ///////////////////////////////\n // ** Plugin Construction ** //\n ///////////////////////////////\n\n // Run plugin\n Plugin.construct.apply(the, [options]);\n\n // Init done\n init = true;\n\n // Return plugin instance\n return the;\n};\n\n// webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = KTHeader;\n}\n","\"use strict\";\n\n// Component Definition \nvar KTImageInput = function(elementId, options) {\n // Main object\n var the = this;\n var init = false;\n\n // Get element object\n var element = KTUtil.getById(elementId);\n var body = KTUtil.getBody();\n\n if (!element) {\n return;\n }\n\n // Default options\n var defaultOptions = {\n editMode: false\n };\n\n ////////////////////////////\n // ** Private Methods ** //\n ////////////////////////////\n\n var Plugin = {\n /**\n * Construct\n */\n\n construct: function(options) {\n if (KTUtil.data(element).has('imageinput')) {\n the = KTUtil.data(element).get('imageinput');\n } else {\n // reset menu\n Plugin.init(options);\n\n // build menu\n Plugin.build();\n\n KTUtil.data(element).set('imageinput', the);\n }\n\n return the;\n },\n\n /**\n * Init avatar\n */\n init: function(options) {\n the.element = element;\n the.events = [];\n\n the.input = KTUtil.find(element, 'input[type=\"file\"]');\n the.wrapper = KTUtil.find(element, '.image-input-wrapper');\n the.cancel = KTUtil.find(element, '[data-action=\"cancel\"]');\n the.remove = KTUtil.find(element, '[data-action=\"remove\"]');\n the.src = KTUtil.css(the.wrapper, 'backgroundImage');\n the.hidden = KTUtil.find(element, 'input[type=\"hidden\"]');\n\n // merge default and user defined options\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\n },\n\n /**\n * Build\n */\n build: function() {\n // Handle change\n KTUtil.addEvent(the.input, 'change', function(e) {\n e.preventDefault();\n\n\t if (the.input && the.input.files && the.input.files[0]) {\n\t var reader = new FileReader();\n\t reader.onload = function(e) {\n\t KTUtil.css(the.wrapper, 'background-image', 'url('+e.target.result +')');\n\t }\n\t reader.readAsDataURL(the.input.files[0]);\n\n\t KTUtil.addClass(the.element, 'image-input-changed');\n KTUtil.removeClass(the.element, 'image-input-empty');\n\n // Fire change event\n Plugin.eventTrigger('change');\n\t }\n });\n\n // Handle cancel\n KTUtil.addEvent(the.cancel, 'click', function(e) {\n e.preventDefault();\n\n // Fire cancel event\n Plugin.eventTrigger('cancel');\n\n\t KTUtil.removeClass(the.element, 'image-input-changed');\n KTUtil.removeClass(the.element, 'image-input-empty');\n\t KTUtil.css(the.wrapper, 'background-image', the.src);\n\t the.input.value = \"\";\n\n if (the.hidden) {\n the.hidden.value = \"0\";\n }\n });\n\n // Handle remove\n KTUtil.addEvent(the.remove, 'click', function(e) {\n e.preventDefault();\n\n // Fire cancel event\n Plugin.eventTrigger('remove');\n\n\t KTUtil.removeClass(the.element, 'image-input-changed');\n KTUtil.addClass(the.element, 'image-input-empty');\n\t KTUtil.css(the.wrapper, 'background-image', \"none\");\n\t the.input.value = \"\";\n\n if (the.hidden) {\n the.hidden.value = \"1\";\n }\n });\n },\n\n /**\n * Trigger events\n */\n eventTrigger: function(name) {\n //KTUtil.triggerCustomEvent(name);\n for (var i = 0; i < the.events.length; i++) {\n var event = the.events[i];\n if (event.name == name) {\n if (event.one == true) {\n if (event.fired == false) {\n the.events[i].fired = true;\n return event.handler.call(this, the);\n }\n } else {\n return event.handler.call(this, the);\n }\n }\n }\n },\n\n addEvent: function(name, handler, one) {\n the.events.push({\n name: name,\n handler: handler,\n one: one,\n fired: false\n });\n\n return the;\n }\n };\n\n //////////////////////////\n // ** Public Methods ** //\n //////////////////////////\n\n /**\n * Set default options\n */\n\n the.setDefaults = function(options) {\n defaultOptions = options;\n };\n\n /**\n * Attach event\n */\n the.on = function(name, handler) {\n return Plugin.addEvent(name, handler);\n };\n\n /**\n * Attach event that will be fired once\n */\n the.one = function(name, handler) {\n return Plugin.addEvent(name, handler, true);\n };\n\n // Construct plugin\n Plugin.construct.apply(the, [options]);\n\n return the;\n};\n\n// webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = KTImageInput;\n}\n","\"use strict\";\n\n// Component Definition\nvar KTMenu = function(elementId, options) {\n // Main object\n var the = this;\n var init = false;\n\n // Get element object\n var element = KTUtil.getById(elementId);\n var body = KTUtil.getBody();\n\n if (!element) {\n return;\n }\n\n // Default options\n var defaultOptions = {\n // scrollable area with Perfect Scroll\n scroll: {\n rememberPosition: false\n },\n\n // accordion submenu mode\n accordion: {\n slideSpeed: 200, // accordion toggle slide speed in milliseconds\n autoScroll: false, // enable auto scrolling(focus) to the clicked menu item\n autoScrollSpeed: 1200,\n expandAll: true // allow having multiple expanded accordions in the menu\n },\n\n // dropdown submenu mode\n dropdown: {\n timeout: 500 // timeout in milliseconds to show and hide the hoverable submenu dropdown\n }\n };\n\n ////////////////////////////\n // ** Private Methods ** //\n ////////////////////////////\n\n var Plugin = {\n /**\n * Run plugin\n * @returns {KTMenu}\n */\n construct: function(options) {\n if (KTUtil.data(element).has('menu')) {\n the = KTUtil.data(element).get('menu');\n } else {\n // reset menu\n Plugin.init(options);\n\n // reset menu\n Plugin.reset();\n\n // build menu\n Plugin.build();\n\n KTUtil.data(element).set('menu', the);\n }\n\n return the;\n },\n\n /**\n * Handles submenu click toggle\n * @returns {KTMenu}\n */\n init: function(options) {\n the.events = [];\n\n the.eventHandlers = {};\n\n // merge default and user defined options\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\n\n // pause menu\n the.pauseDropdownHoverTime = 0;\n\n the.uid = KTUtil.getUniqueID();\n },\n\n update: function(options) {\n // merge default and user defined options\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\n\n // pause menu\n the.pauseDropdownHoverTime = 0;\n\n // reset menu\n Plugin.reset();\n\n the.eventHandlers = {};\n\n // build menu\n Plugin.build();\n\n KTUtil.data(element).set('menu', the);\n },\n\n reload: function() {\n // reset menu\n Plugin.reset();\n\n // build menu\n Plugin.build();\n\n // reset submenu props\n Plugin.resetSubmenuProps();\n },\n\n /**\n * Reset menu\n * @returns {KTMenu}\n */\n build: function() {\n // General accordion submenu toggle\n the.eventHandlers['event_1'] = KTUtil.on( element, '.menu-toggle', 'click', Plugin.handleSubmenuAccordion);\n\n // Dropdown mode(hoverable)\n if (Plugin.getSubmenuMode() === 'dropdown' || Plugin.isConditionalSubmenuDropdown()) {\n // dropdown submenu - hover toggle\n the.eventHandlers['event_2'] = KTUtil.on( element, '[data-menu-toggle=\"hover\"]', 'mouseover', Plugin.handleSubmenuDrodownHoverEnter);\n the.eventHandlers['event_3'] = KTUtil.on( element, '[data-menu-toggle=\"hover\"]', 'mouseout', Plugin.handleSubmenuDrodownHoverExit);\n\n // dropdown submenu - click toggle\n the.eventHandlers['event_4'] = KTUtil.on( element, '[data-menu-toggle=\"click\"] > .menu-toggle, [data-menu-toggle=\"click\"] > .menu-link .menu-toggle', 'click', Plugin.handleSubmenuDropdownClick);\n the.eventHandlers['event_5'] = KTUtil.on( element, '[data-menu-toggle=\"tab\"] > .menu-toggle, [data-menu-toggle=\"tab\"] > .menu-link .menu-toggle', 'click', Plugin.handleSubmenuDropdownTabClick);\n }\n\n // Handle general link click\n the.eventHandlers['event_6'] = KTUtil.on(element, '.menu-item > .menu-link:not(.menu-toggle):not(.menu-link-toggle-skip)', 'click', Plugin.handleLinkClick);\n\n // Init scrollable menu\n if (the.options.scroll && the.options.scroll.height) {\n Plugin.scrollInit();\n }\n },\n\n /**\n * Reset menu\n * @returns {KTMenu}\n */\n reset: function() {\n KTUtil.off( element, 'click', the.eventHandlers['event_1']);\n\n // dropdown submenu - hover toggle\n KTUtil.off( element, 'mouseover', the.eventHandlers['event_2']);\n KTUtil.off( element, 'mouseout', the.eventHandlers['event_3']);\n\n // dropdown submenu - click toggle\n KTUtil.off( element, 'click', the.eventHandlers['event_4']);\n KTUtil.off( element, 'click', the.eventHandlers['event_5']);\n\n // handle link click\n KTUtil.off(element, 'click', the.eventHandlers['event_6']);\n },\n\n /**\n * Init scroll menu\n *\n */\n scrollInit: function() {\n if ( the.options.scroll && the.options.scroll.height ) {\n KTUtil.scrollDestroy(element, true);\n KTUtil.scrollInit(element, {mobileNativeScroll: true, windowScroll: false, resetHeightOnDestroy: true, handleWindowResize: true, height: the.options.scroll.height, rememberPosition: the.options.scroll.rememberPosition});\n } else {\n KTUtil.scrollDestroy(element, true);\n }\n },\n\n /**\n * Update scroll menu\n */\n scrollUpdate: function() {\n if ( the.options.scroll && the.options.scroll.height ) {\n KTUtil.scrollUpdate(element);\n }\n },\n\n /**\n * Scroll top\n */\n scrollTop: function() {\n if ( the.options.scroll && the.options.scroll.height ) {\n KTUtil.scrollTop(element);\n }\n },\n\n /**\n * Get submenu mode for current breakpoint and menu state\n * @returns {KTMenu}\n */\n getSubmenuMode: function(el) {\n if ( KTUtil.isBreakpointUp('lg') ) {\n if (el && KTUtil.hasAttr(el, 'data-menu-toggle') && KTUtil.attr(el, 'data-menu-toggle') == 'hover') {\n return 'dropdown';\n }\n\n if ( KTUtil.isset(the.options.submenu, 'desktop.state.body') ) {\n if ( KTUtil.hasClasses(body, the.options.submenu.desktop.state.body) ) {\n return the.options.submenu.desktop.state.mode;\n } else {\n return the.options.submenu.desktop.default;\n }\n } else if ( KTUtil.isset(the.options.submenu, 'desktop') ) {\n return the.options.submenu.desktop;\n }\n } else if ( KTUtil.isBreakpointUp('md') && KTUtil.isBreakpointDown('lg') && KTUtil.isset(the.options.submenu, 'tablet') ) {\n return the.options.submenu.tablet;\n } else if ( KTUtil.isBreakpointDown('md') && KTUtil.isset(the.options.submenu, 'mobile') ) {\n return the.options.submenu.mobile;\n } else {\n return false;\n }\n },\n\n /**\n * Get submenu mode for current breakpoint and menu state\n * @returns {KTMenu}\n */\n isConditionalSubmenuDropdown: function() {\n if ( KTUtil.isBreakpointUp('lg') && KTUtil.isset(the.options.submenu, 'desktop.state.body') ) {\n return true;\n } else {\n return false;\n }\n },\n\n\n /**\n * Reset submenu attributes\n * @returns {KTMenu}\n */\n resetSubmenuProps: function(e) {\n var submenus = KTUtil.findAll(element, '.menu-submenu');\n if ( submenus ) {\n for (var i = 0, len = submenus.length; i < len; i++) {\n var submenu = submenus[0];\n\n KTUtil.css(submenu, 'display', '');\n KTUtil.css(submenu, 'overflow', '');\n\n if (submenu.hasAttribute('data-hor-direction')) {\n KTUtil.removeClass(submenu, 'menu-submenu-left');\n KTUtil.removeClass(submenu, 'menu-submenu-right');\n KTUtil.addClass(submenu, submenu.getAttribute('data-hor-direction'));\n }\n }\n }\n },\n\n /**\n * Handles submenu hover toggle\n * @returns {KTMenu}\n */\n handleSubmenuDrodownHoverEnter: function(e) {\n if ( Plugin.getSubmenuMode(this) === 'accordion' ) {\n return;\n }\n\n if ( the.resumeDropdownHover() === false ) {\n return;\n }\n\n var item = this;\n\n if ( item.getAttribute('data-hover') == '1' ) {\n item.removeAttribute('data-hover');\n clearTimeout( item.getAttribute('data-timeout') );\n item.removeAttribute('data-timeout');\n }\n\n Plugin.showSubmenuDropdown(item);\n },\n\n /**\n * Handles submenu hover toggle\n * @returns {KTMenu}\n */\n handleSubmenuDrodownHoverExit: function(e) {\n if ( the.resumeDropdownHover() === false ) {\n return;\n }\n\n if ( Plugin.getSubmenuMode(this) === 'accordion' ) {\n return;\n }\n\n var item = this;\n var time = the.options.dropdown.timeout;\n\n var timeout = setTimeout(function() {\n if ( item.getAttribute('data-hover') == '1' ) {\n Plugin.hideSubmenuDropdown(item, true);\n }\n }, time);\n\n item.setAttribute('data-hover', '1');\n item.setAttribute('data-timeout', timeout);\n },\n\n /**\n * Handles submenu click toggle\n * @returns {KTMenu}\n */\n handleSubmenuDropdownClick: function(e) {\n if ( Plugin.getSubmenuMode(this) === 'accordion' ) {\n return;\n }\n\n var item = this.closest('.menu-item');\n\n // Trigger click event handlers\n var result = Plugin.eventTrigger('submenuToggle', this, e);\n if (result === false) {\n return;\n }\n\n if ( item.getAttribute('data-menu-submenu-mode') == 'accordion' ) {\n return;\n }\n\n if ( KTUtil.hasClass(item, 'menu-item-hover') === false ) {\n KTUtil.addClass(item, 'menu-item-open-dropdown');\n Plugin.showSubmenuDropdown(item);\n } else {\n KTUtil.removeClass(item, 'menu-item-open-dropdown' );\n Plugin.hideSubmenuDropdown(item, true);\n }\n\n e.preventDefault();\n },\n\n /**\n * Handles tab click toggle\n * @returns {KTMenu}\n */\n handleSubmenuDropdownTabClick: function(e) {\n if (Plugin.getSubmenuMode(this) === 'accordion') {\n return;\n }\n var item = this.closest('.menu-item');\n\n // Trigger click event handlers\n var result = Plugin.eventTrigger('submenuToggle', this, e);\n if (result === false) {\n return;\n }\n\n if (item.getAttribute('data-menu-submenu-mode') == 'accordion') {\n return;\n }\n\n if (KTUtil.hasClass(item, 'menu-item-hover') == false) {\n KTUtil.addClass(item, 'menu-item-open-dropdown');\n Plugin.showSubmenuDropdown(item);\n }\n\n e.preventDefault();\n },\n\n /**\n * Handles link click\n * @returns {KTMenu}\n */\n handleLinkClick: function(e) {\n var submenu = this.closest('.menu-item.menu-item-submenu');\n\n // Trigger click event handlers\n var result = Plugin.eventTrigger('linkClick', this, e);\n if (result === false) {\n return;\n }\n\n if ( submenu && Plugin.getSubmenuMode(submenu) === 'dropdown' ) {\n Plugin.hideSubmenuDropdowns();\n }\n },\n\n /**\n * Handles submenu dropdown close on link click\n * @returns {KTMenu}\n */\n handleSubmenuDropdownClose: function(e, el) {\n // exit if its not submenu dropdown mode\n if (Plugin.getSubmenuMode(el) === 'accordion') {\n return;\n }\n\n var shown = element.querySelectorAll('.menu-item.menu-item-submenu.menu-item-hover:not(.menu-item-tabs)');\n\n // check if currently clicked link's parent item ha\n if (shown.length > 0 && KTUtil.hasClass(el, 'menu-toggle') === false && el.querySelectorAll('.menu-toggle').length === 0) {\n // close opened dropdown menus\n for (var i = 0, len = shown.length; i < len; i++) {\n Plugin.hideSubmenuDropdown(shown[0], true);\n }\n }\n },\n\n /**\n * helper functions\n * @returns {KTMenu}\n */\n handleSubmenuAccordion: function(e, el) {\n var query;\n var item = el ? el : this;\n\n // Trigger click event handlers\n var result = Plugin.eventTrigger('submenuToggle', this, e);\n if (result === false) {\n return;\n }\n\n if ( Plugin.getSubmenuMode(el) === 'dropdown' && (query = item.closest('.menu-item') ) ) {\n if (query.getAttribute('data-menu-submenu-mode') != 'accordion' ) {\n e.preventDefault();\n return;\n }\n }\n\n var li = item.closest('.menu-item');\n var submenu = KTUtil.child(li, '.menu-submenu, .menu-inner');\n\n if (KTUtil.hasClass(item.closest('.menu-item'), 'menu-item-open-always')) {\n return;\n }\n\n if ( li && submenu ) {\n e.preventDefault();\n var speed = the.options.accordion.slideSpeed;\n var hasClosables = false;\n\n if ( KTUtil.hasClass(li, 'menu-item-open') === false ) {\n // hide other accordions\n if ( the.options.accordion.expandAll === false ) {\n var subnav = item.closest('.menu-nav, .menu-subnav');\n var closables = KTUtil.children(subnav, '.menu-item.menu-item-open.menu-item-submenu:not(.menu-item-here):not(.menu-item-open-always)');\n\n if ( subnav && closables ) {\n for (var i = 0, len = closables.length; i < len; i++) {\n var el_ = closables[0];\n var submenu_ = KTUtil.child(el_, '.menu-submenu');\n if ( submenu_ ) {\n KTUtil.slideUp(submenu_, speed, function() {\n Plugin.scrollUpdate();\n KTUtil.removeClass(el_, 'menu-item-open');\n });\n }\n }\n }\n }\n\n KTUtil.slideDown(submenu, speed, function() {\n Plugin.scrollToItem(item);\n Plugin.scrollUpdate();\n\n Plugin.eventTrigger('submenuToggle', submenu, e);\n });\n\n KTUtil.addClass(li, 'menu-item-open');\n\n } else {\n KTUtil.slideUp(submenu, speed, function() {\n Plugin.scrollToItem(item);\n Plugin.scrollUpdate();\n Plugin.eventTrigger('submenuToggle', submenu, e);\n });\n\n KTUtil.removeClass(li, 'menu-item-open');\n }\n }\n },\n\n /**\n * scroll to item function\n * @returns {KTMenu}\n */\n scrollToItem: function(item) {\n // handle auto scroll for accordion submenus\n if ( KTUtil.isBreakpointUp('lg') && the.options.accordion.autoScroll && element.getAttribute('data-menu-scroll') !== '1' ) {\n KTUtil.scrollTo(item, the.options.accordion.autoScrollSpeed);\n }\n },\n\n /**\n * Hide submenu dropdown\n * @returns {KTMenu}\n */\n hideSubmenuDropdown: function(item, classAlso) {\n // remove submenu activation class\n if ( classAlso ) {\n KTUtil.removeClass(item, 'menu-item-hover');\n KTUtil.removeClass(item, 'menu-item-active-tab');\n }\n\n // clear timeout\n item.removeAttribute('data-hover');\n\n if ( item.getAttribute('data-menu-toggle-class') ) {\n KTUtil.removeClass(body, item.getAttribute('data-menu-toggle-class'));\n }\n\n var timeout = item.getAttribute('data-timeout');\n item.removeAttribute('data-timeout');\n clearTimeout(timeout);\n },\n\n /**\n * Hide submenu dropdowns\n * @returns {KTMenu}\n */\n hideSubmenuDropdowns: function() {\n var items;\n if ( items = element.querySelectorAll('.menu-item-submenu.menu-item-hover:not(.menu-item-tabs):not([data-menu-toggle=\"tab\"])') ) {\n for (var j = 0, cnt = items.length; j < cnt; j++) {\n Plugin.hideSubmenuDropdown(items[j], true);\n }\n }\n },\n\n /**\n * helper functions\n * @returns {KTMenu}\n */\n showSubmenuDropdown: function(item) {\n // close active submenus\n var list = element.querySelectorAll('.menu-item-submenu.menu-item-hover, .menu-item-submenu.menu-item-active-tab');\n\n if ( list ) {\n for (var i = 0, len = list.length; i < len; i++) {\n var el = list[i];\n if ( item !== el && el.contains(item) === false && item.contains(el) === false ) {\n Plugin.hideSubmenuDropdown(el, true);\n }\n }\n }\n\n // add submenu activation class\n KTUtil.addClass(item, 'menu-item-hover');\n\n // Change the alignment of submenu is offscreen.\n var submenu = KTUtil.find(item, '.menu-submenu');\n\n if (submenu && submenu.hasAttribute('data-hor-direction') === false) {\n if (KTUtil.hasClass(submenu, 'menu-submenu-left')) {\n submenu.setAttribute('data-hor-direction', 'menu-submenu-left');\n } else if (KTUtil.hasClass(submenu, 'menu-submenu-right')) {\n submenu.setAttribute('data-hor-direction', 'menu-submenu-right');\n }\n }\n\n if ( submenu && KTUtil.isOffscreen(submenu, 'left', 15) === true ) {\n KTUtil.removeClass(submenu, 'menu-submenu-left');\n KTUtil.addClass(submenu, 'menu-submenu-right');\n } else if ( submenu && KTUtil.isOffscreen(submenu, 'right', 15) === true ) {\n KTUtil.removeClass(submenu, 'menu-submenu-right');\n KTUtil.addClass(submenu, 'menu-submenu-left');\n }\n\n if ( item.getAttribute('data-menu-toggle-class') ) {\n KTUtil.addClass(body, item.getAttribute('data-menu-toggle-class'));\n }\n },\n\n /**\n * Handles submenu slide toggle\n * @returns {KTMenu}\n */\n createSubmenuDropdownClickDropoff: function(el) {\n var query;\n var zIndex = (query = KTUtil.child(el, '.menu-submenu') ? KTUtil.css(query, 'z-index') : 0) - 1;\n\n var dropoff = document.createElement('
');\n\n body.appendChild(dropoff);\n\n KTUtil.addEvent(dropoff, 'click', function(e) {\n e.stopPropagation();\n e.preventDefault();\n KTUtil.remove(this);\n Plugin.hideSubmenuDropdown(el, true);\n });\n },\n\n /**\n * Handles submenu hover toggle\n * @returns {KTMenu}\n */\n pauseDropdownHover: function(time) {\n var date = new Date();\n\n the.pauseDropdownHoverTime = date.getTime() + time;\n },\n\n /**\n * Handles submenu hover toggle\n * @returns {KTMenu}\n */\n resumeDropdownHover: function() {\n var date = new Date();\n\n return (date.getTime() > the.pauseDropdownHoverTime ? true : false);\n },\n\n /**\n * Reset menu's current active item\n * @returns {KTMenu}\n */\n resetActiveItem: function(item) {\n var list;\n var parents;\n\n list = element.querySelectorAll('.menu-item-active');\n\n for (var i = 0, len = list.length; i < len; i++) {\n var el = list[0];\n KTUtil.removeClass(el, 'menu-item-active');\n KTUtil.hide( KTUtil.child(el, '.menu-submenu') );\n parents = KTUtil.parents(el, '.menu-item-submenu') || [];\n\n for (var i_ = 0, len_ = parents.length; i_ < len_; i_++) {\n var el_ = parents[i];\n KTUtil.removeClass(el_, 'menu-item-open');\n KTUtil.hide( KTUtil.child(el_, '.menu-submenu') );\n }\n }\n\n // close open submenus\n if ( the.options.accordion.expandAll === false ) {\n if ( list = element.querySelectorAll('.menu-item-open') ) {\n for (var i = 0, len = list.length; i < len; i++) {\n KTUtil.removeClass(parents[0], 'menu-item-open');\n }\n }\n }\n },\n\n /**\n * Sets menu's active item\n * @returns {KTMenu}\n */\n setActiveItem: function(item) {\n // reset current active item\n Plugin.resetActiveItem();\n\n var parents = KTUtil.parents(item, '.menu-item-submenu') || [];\n for (var i = 0, len = parents.length; i < len; i++) {\n KTUtil.addClass(parents[i], 'menu-item-open');\n }\n\n KTUtil.addClass(item, 'menu-item-active');\n },\n\n /**\n * Returns page breadcrumbs for the menu's active item\n * @returns {KTMenu}\n */\n getBreadcrumbs: function(item) {\n var query;\n var breadcrumbs = [];\n var link = KTUtil.child(item, '.menu-link');\n\n breadcrumbs.push({\n text: (query = KTUtil.child(link, '.menu-text') ? query.innerHTML : ''),\n title: link.getAttribute('title'),\n href: link.getAttribute('href')\n });\n\n var parents = KTUtil.parents(item, '.menu-item-submenu');\n for (var i = 0, len = parents.length; i < len; i++) {\n var submenuLink = KTUtil.child(parents[i], '.menu-link');\n\n breadcrumbs.push({\n text: (query = KTUtil.child(submenuLink, '.menu-text') ? query.innerHTML : ''),\n title: submenuLink.getAttribute('title'),\n href: submenuLink.getAttribute('href')\n });\n }\n\n return breadcrumbs.reverse();\n },\n\n /**\n * Returns page title for the menu's active item\n * @returns {KTMenu}\n */\n getPageTitle: function(item) {\n var query;\n\n return (query = KTUtil.child(item, '.menu-text') ? query.innerHTML : '');\n },\n\n /**\n * Trigger events\n */\n eventTrigger: function(name, target, e) {\n for (var i = 0; i < the.events.length; i++ ) {\n var event = the.events[i];\n if ( event.name == name ) {\n if ( event.one == true ) {\n if ( event.fired == false ) {\n the.events[i].fired = true;\n return event.handler.call(this, target, e);\n }\n } else {\n return event.handler.call(this, target, e);\n }\n }\n }\n },\n\n addEvent: function(name, handler, one) {\n the.events.push({\n name: name,\n handler: handler,\n one: one,\n fired: false\n });\n },\n\n removeEvent: function(name) {\n if (the.events[name]) {\n delete the.events[name];\n }\n }\n };\n\n //////////////////////////\n // ** Public Methods ** //\n //////////////////////////\n\n /**\n * Set default options\n */\n\n the.setDefaults = function(options) {\n defaultOptions = options;\n };\n\n /**\n * Update scroll\n */\n the.scrollUpdate = function() {\n return Plugin.scrollUpdate();\n };\n\n /**\n * Re-init scroll\n */\n the.scrollReInit = function() {\n return Plugin.scrollInit();\n };\n\n /**\n * Scroll top\n */\n the.scrollTop = function() {\n return Plugin.scrollTop();\n };\n\n /**\n * Set active menu item\n */\n the.setActiveItem = function(item) {\n return Plugin.setActiveItem(item);\n };\n\n the.reload = function() {\n return Plugin.reload();\n };\n\n the.update = function(options) {\n return Plugin.update(options);\n };\n\n /**\n * Set breadcrumb for menu item\n */\n the.getBreadcrumbs = function(item) {\n return Plugin.getBreadcrumbs(item);\n };\n\n /**\n * Set page title for menu item\n */\n the.getPageTitle = function(item) {\n return Plugin.getPageTitle(item);\n };\n\n /**\n * Get submenu mode\n */\n the.getSubmenuMode = function(el) {\n return Plugin.getSubmenuMode(el);\n };\n\n /**\n * Hide dropdown\n * @returns {Object}\n */\n the.hideDropdown = function(item) {\n Plugin.hideSubmenuDropdown(item, true);\n };\n\n /**\n * Hide dropdowns\n * @returns {Object}\n */\n the.hideDropdowns = function() {\n Plugin.hideSubmenuDropdowns();\n };\n\n /**\n * Disable menu for given time\n * @returns {Object}\n */\n the.pauseDropdownHover = function(time) {\n Plugin.pauseDropdownHover(time);\n };\n\n /**\n * Disable menu for given time\n * @returns {Object}\n */\n the.resumeDropdownHover = function() {\n return Plugin.resumeDropdownHover();\n };\n\n /**\n * Register event\n */\n the.on = function(name, handler) {\n return Plugin.addEvent(name, handler);\n };\n\n the.off = function(name) {\n return Plugin.removeEvent(name);\n };\n\n the.one = function(name, handler) {\n return Plugin.addEvent(name, handler, true);\n };\n\n ///////////////////////////////\n // ** Plugin Construction ** //\n ///////////////////////////////\n\n // Run plugin\n Plugin.construct.apply(the, [options]);\n\n // Handle plugin on window resize\n KTUtil.addResizeHandler(function() {\n if (init) {\n the.reload();\n }\n });\n\n // Init done\n init = true;\n\n // Return plugin instance\n return the;\n};\n\n// webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = KTMenu;\n}\n\n// Plugin global lazy initialization\ndocument.addEventListener(\"click\", function (e) {\n var body = KTUtil.getByTagName('body')[0];\n var query;\n if ( query = body.querySelectorAll('.menu-nav .menu-item.menu-item-submenu.menu-item-hover:not(.menu-item-tabs)[data-menu-toggle=\"click\"]') ) {\n for (var i = 0, len = query.length; i < len; i++) {\n var element = query[i].closest('.menu-nav').parentNode;\n\n if ( element ) {\n var the = KTUtil.data(element).get('menu');\n\n if ( !the ) {\n break;\n }\n\n if ( !the || the.getSubmenuMode() !== 'dropdown' ) {\n break;\n }\n\n if ( e.target !== element && element.contains(e.target) === false ) {\n the.hideDropdowns();\n }\n }\n }\n }\n});\n","\"use strict\";\n\n// Component Definition\nvar KTOffcanvas = function(elementId, options) {\n // Main object\n var the = this;\n var init = false;\n\n // Get element object\n var element = KTUtil.getById(elementId);\n var body = KTUtil.getBody();\n\n if (!element) {\n return;\n }\n\n // Default options\n var defaultOptions = {\n attrCustom: ''\n };\n\n ////////////////////////////\n // ** Private Methods ** //\n ////////////////////////////\n\n var Plugin = {\n construct: function(options) {\n if (KTUtil.data(element).has('offcanvas')) {\n the = KTUtil.data(element).get('offcanvas');\n } else {\n // Reset offcanvas\n Plugin.init(options);\n\n // Build offcanvas\n Plugin.build();\n\n KTUtil.data(element).set('offcanvas', the);\n }\n\n return the;\n },\n\n init: function(options) {\n the.events = [];\n\n // merge default and user defined options\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\n\n the.classBase = the.options.baseClass;\n the.attrCustom = the.options.attrCustom;\n the.classShown = the.classBase + '-on';\n the.classOverlay = the.classBase + '-overlay';\n the.target;\n\n the.state = KTUtil.hasClass(element, the.classShown) ? 'shown' : 'hidden';\n },\n\n build: function() {\n // offcanvas toggle\n if (the.options.toggleBy) {\n if (typeof the.options.toggleBy === 'string') {\n KTUtil.addEvent(KTUtil.getById(the.options.toggleBy), 'click', function(e) {\n e.preventDefault();\n the.target = this;\n Plugin.toggle();\n });\n } else if (the.options.toggleBy && the.options.toggleBy[0]) {\n if (the.options.toggleBy[0].target) {\n for (var i in the.options.toggleBy) {\n KTUtil.addEvent(KTUtil.getById(the.options.toggleBy[i].target), 'click', function(e) {\n e.preventDefault();\n the.target = this;\n Plugin.toggle();\n });\n }\n } else {\n for (var i in the.options.toggleBy) {\n KTUtil.addEvent(KTUtil.getById(the.options.toggleBy[i]), 'click', function(e) {\n e.preventDefault();\n the.target = this;\n Plugin.toggle();\n });\n }\n }\n\n } else if (the.options.toggleBy && the.options.toggleBy.target) {\n KTUtil.addEvent( KTUtil.getById(the.options.toggleBy.target), 'click', function(e) {\n e.preventDefault();\n the.target = this;\n Plugin.toggle();\n });\n }\n }\n\n // offcanvas close\n var closeBy = KTUtil.getById(the.options.closeBy);\n if (closeBy) {\n KTUtil.addEvent(closeBy, 'click', function(e) {\n e.preventDefault();\n the.target = this;\n Plugin.hide();\n });\n }\n },\n\n isShown: function() {\n return (the.state == 'shown' ? true : false);\n },\n\n toggle: function() {\n Plugin.eventTrigger('toggle');\n\n if (the.state == 'shown') {\n Plugin.hide();\n } else {\n Plugin.show();\n }\n },\n\n show: function() {\n if (the.state == 'shown') {\n return;\n }\n\n Plugin.eventTrigger('beforeShow');\n\n Plugin.toggleClass('show');\n\n // Offcanvas panel\n KTUtil.attr(body, 'data-offcanvas-' + the.classBase, 'on');\n KTUtil.addClass(element, the.classShown);\n\n if (the.attrCustom.length > 0) {\n KTUtil.attr(body, 'data-offcanvas-' + the.classCustom, 'on');\n //KTUtil.addClass(body, the.classCustom);\n }\n\n the.state = 'shown';\n\n if (the.options.overlay) {\n the.overlay = KTUtil.insertAfter(document.createElement('DIV') , element );\n KTUtil.addClass(the.overlay, the.classOverlay);\n\n KTUtil.addEvent(the.overlay, 'click', function(e) {\n //e.stopPropagation();\n e.preventDefault();\n Plugin.hide(the.target);\n });\n }\n\n Plugin.eventTrigger('afterShow');\n },\n\n hide: function() {\n if (the.state == 'hidden') {\n return;\n }\n\n Plugin.eventTrigger('beforeHide');\n\n Plugin.toggleClass('hide');\n\n KTUtil.removeAttr(body, 'data-offcanvas-' + the.classBase);\n KTUtil.removeClass(element, the.classShown);\n\n if (the.attrCustom.length > 0) {\n KTUtil.removeAttr(body, 'data-offcanvas-' + the.attrCustom);\n }\n\n the.state = 'hidden';\n\n if (the.options.overlay && the.overlay) {\n KTUtil.remove(the.overlay);\n }\n\n Plugin.eventTrigger('afterHide');\n },\n\n toggleClass: function(mode) {\n var id = KTUtil.attr(the.target, 'id');\n var toggleBy;\n\n if (the.options.toggleBy && the.options.toggleBy[0] && the.options.toggleBy[0].target) {\n for (var i in the.options.toggleBy) {\n if (the.options.toggleBy[i].target === id) {\n toggleBy = the.options.toggleBy[i];\n }\n }\n } else if (the.options.toggleBy && the.options.toggleBy.target) {\n toggleBy = the.options.toggleBy;\n }\n\n if (toggleBy) {\n var el = KTUtil.getById(toggleBy.target);\n\n if (mode === 'show') {\n KTUtil.addClass(el, toggleBy.state);\n }\n\n if (mode === 'hide') {\n KTUtil.removeClass(el, toggleBy.state);\n }\n }\n },\n\n eventTrigger: function(name, args) {\n for (var i = 0; i < the.events.length; i++) {\n var event = the.events[i];\n if (event.name == name) {\n if (event.one == true) {\n if (event.fired == false) {\n the.events[i].fired = true;\n return event.handler.call(this, the, args);\n }\n } else {\n return event.handler.call(this, the, args);\n }\n }\n }\n },\n\n addEvent: function(name, handler, one) {\n the.events.push({\n name: name,\n handler: handler,\n one: one,\n fired: false\n });\n }\n };\n\n //////////////////////////\n // ** Public Methods ** //\n //////////////////////////\n\n /**\n * Set default options\n * @param options\n */\n the.setDefaults = function(options) {\n defaultOptions = options;\n };\n\n /**\n * Check if canvas is shown\n * @returns {boolean}\n */\n the.isShown = function() {\n return Plugin.isShown();\n };\n\n /**\n * Set to hide the canvas\n */\n the.hide = function() {\n return Plugin.hide();\n };\n\n /**\n * Set to show the canvas\n */\n the.show = function() {\n return Plugin.show();\n };\n\n /**\n * Attach event\n * @param name\n * @param handler\n */\n the.on = function(name, handler) {\n return Plugin.addEvent(name, handler);\n };\n\n /**\n * Attach event that will be fired once\n * @param name\n * @param handler\n */\n the.one = function(name, handler) {\n return Plugin.addEvent(name, handler, true);\n };\n\n ///////////////////////////////\n // ** Plugin Construction ** //\n ///////////////////////////////\n\n // Run plugin\n Plugin.construct.apply(the, [options]);\n\n // Init done\n init = true;\n\n // Return plugin instance\n return the;\n};\n\n// webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = KTOffcanvas;\n}\n","\"use strict\";\n\n// Component Definition\nvar KTScrolltop = function(elementId, options) {\n // Main object\n var the = this;\n var init = false;\n\n // Get element object\n var element = KTUtil.getById(elementId);\n var body = KTUtil.getBody();\n\n if (!element) {\n return;\n }\n\n // Default options\n var defaultOptions = {\n offset: 300,\n speed: 6000\n };\n\n ////////////////////////////\n // ** Private Methods ** //\n ////////////////////////////\n\n var Plugin = {\n /**\n * Run plugin\n * @returns {mscrolltop}\n */\n construct: function(options) {\n if (KTUtil.data(element).has('scrolltop')) {\n the = KTUtil.data(element).get('scrolltop');\n } else {\n // reset scrolltop\n Plugin.init(options);\n\n // build scrolltop\n Plugin.build();\n\n KTUtil.data(element).set('scrolltop', the);\n }\n\n return the;\n },\n\n /**\n * Handles subscrolltop click toggle\n * @returns {mscrolltop}\n */\n init: function(options) {\n the.events = [];\n\n // merge default and user defined options\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\n },\n\n build: function() {\n var timer;\n\n window.addEventListener('scroll', function() {\n KTUtil.throttle(timer, function() {\n Plugin.handle();\n }, 200);\n });\n\n // handle button click\n KTUtil.addEvent(element, 'click', Plugin.scroll);\n },\n\n /**\n * Handles scrolltop click scrollTop\n */\n handle: function() {\n var pos = KTUtil.getScrollTop(); // current vertical position\n\n if (pos > the.options.offset) {\n if (body.hasAttribute('data-scrolltop') === false) {\n body.setAttribute('data-scrolltop', 'on');\n }\n } else {\n if (body.hasAttribute('data-scrolltop') === true) {\n body.removeAttribute('data-scrolltop');\n }\n }\n },\n\n /**\n * Handles scrolltop click scrollTop\n */\n scroll: function(e) {\n e.preventDefault();\n\n KTUtil.scrollTop(0, the.options.speed);\n },\n\n\n /**\n * Trigger events\n */\n eventTrigger: function(name, args) {\n for (var i = 0; i < the.events.length; i++) {\n var event = the.events[i];\n if (event.name == name) {\n if (event.one == true) {\n if (event.fired == false) {\n the.events[i].fired = true;\n return event.handler.call(this, the, args);\n }\n } else {\n return event.handler.call(this, the, args);\n }\n }\n }\n },\n\n addEvent: function(name, handler, one) {\n the.events.push({\n name: name,\n handler: handler,\n one: one,\n fired: false\n });\n }\n };\n\n //////////////////////////\n // ** Public Methods ** //\n //////////////////////////\n\n /**\n * Set default options\n */\n\n the.setDefaults = function(options) {\n defaultOptions = options;\n };\n\n /**\n * Get subscrolltop mode\n */\n the.on = function(name, handler) {\n return Plugin.addEvent(name, handler);\n };\n\n /**\n * Set scrolltop content\n * @returns {mscrolltop}\n */\n the.one = function(name, handler) {\n return Plugin.addEvent(name, handler, true);\n };\n\n ///////////////////////////////\n // ** Plugin Construction ** //\n ///////////////////////////////\n\n // Run plugin\n Plugin.construct.apply(the, [options]);\n\n // Init done\n init = true;\n\n // Return plugin instance\n return the;\n};\n\n// webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = KTScrolltop;\n}\n","\"use strict\";\n\n// Component Definition\nvar KTToggle = function(toggleElement, targetElement, options) {\n // Main object\n var the = this;\n var init = false;\n\n // Get element object\n var element = toggleElement;\n var target = targetElement;\n\n if (!element) {\n return;\n }\n\n // Default options\n var defaultOptions = {\n targetToggleMode: 'class' // class|attribute\n };\n\n ////////////////////////////\n // ** Private Methods ** //\n ////////////////////////////\n\n var Plugin = {\n /**\n * Construct\n */\n\n construct: function(options) {\n if (KTUtil.data(element).has('toggle')) {\n the = KTUtil.data(element).get('toggle');\n } else {\n // reset menu\n Plugin.init(options);\n\n // build menu\n Plugin.build();\n\n KTUtil.data(element).set('toggle', the);\n }\n\n return the;\n },\n\n /**\n * Handles subtoggle click toggle\n */\n init: function(options) {\n the.element = element;\n the.events = [];\n\n // Merge default and user defined options\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\n\n //alert(the.options.target.tagName);\n the.target = target;\n\n the.targetState = the.options.targetState;\n the.toggleState = the.options.toggleState;\n\n if (the.options.targetToggleMode == 'class') {\n the.state = KTUtil.hasClasses(the.target, the.targetState) ? 'on' : 'off';\n } else {\n the.state = KTUtil.hasAttr(the.target, 'data-' + the.targetState) ? KTUtil.attr(the.target, 'data-' + the.targetState) : 'off';\n }\n },\n\n /**\n * Setup toggle\n */\n build: function() {\n KTUtil.addEvent(element, 'mouseup', Plugin.toggle);\n },\n\n /**\n * Handles offcanvas click toggle\n */\n toggle: function(e) {\n Plugin.eventTrigger('beforeToggle');\n\n if (the.state == 'off') {\n Plugin.toggleOn();\n } else {\n Plugin.toggleOff();\n }\n\n Plugin.eventTrigger('afterToggle');\n\n e.preventDefault();\n\n return the;\n },\n\n /**\n * Handles toggle click toggle\n */\n toggleOn: function() {\n Plugin.eventTrigger('beforeOn');\n\n if (the.options.targetToggleMode == 'class') {\n KTUtil.addClass(the.target, the.targetState);\n } else {\n KTUtil.attr(the.target, 'data-' + the.targetState, 'on');\n }\n\n if (the.toggleState) {\n KTUtil.addClass(element, the.toggleState);\n }\n\n the.state = 'on';\n\n Plugin.eventTrigger('afterOn');\n\n Plugin.eventTrigger('toggle');\n\n return the;\n },\n\n /**\n * Handles toggle click toggle\n */\n toggleOff: function() {\n Plugin.eventTrigger('beforeOff');\n\n if (the.options.targetToggleMode == 'class') {\n KTUtil.removeClass(the.target, the.targetState);\n } else {\n KTUtil.removeAttr(the.target, 'data-' + the.targetState);\n }\n\n if (the.toggleState) {\n KTUtil.removeClass(element, the.toggleState);\n }\n\n the.state = 'off';\n\n Plugin.eventTrigger('afterOff');\n\n Plugin.eventTrigger('toggle');\n\n return the;\n },\n\n /**\n * Trigger events\n */\n eventTrigger: function(name) {\n for (var i = 0; i < the.events.length; i++) {\n var event = the.events[i];\n\n if (event.name == name) {\n if (event.one == true) {\n if (event.fired == false) {\n the.events[i].fired = true;\n return event.handler.call(this, the);\n }\n } else {\n return event.handler.call(this, the);\n }\n }\n }\n },\n\n addEvent: function(name, handler, one) {\n the.events.push({\n name: name,\n handler: handler,\n one: one,\n fired: false\n });\n\n return the;\n }\n };\n\n //////////////////////////\n // ** Public Methods ** //\n //////////////////////////\n\n /**\n * Set default options\n */\n\n the.setDefaults = function(options) {\n defaultOptions = options;\n };\n\n /**\n * Get toggle state\n */\n the.getState = function() {\n return the.state;\n };\n\n /**\n * Toggle\n */\n the.toggle = function() {\n return Plugin.toggle();\n };\n\n /**\n * Toggle on\n */\n the.toggleOn = function() {\n return Plugin.toggleOn();\n };\n\n /**\n * Toggle off\n */\n the.toggleOff = function() {\n return Plugin.toggleOff();\n };\n\n /**\n * Attach event\n * @returns {KTToggle}\n */\n the.on = function(name, handler) {\n return Plugin.addEvent(name, handler);\n };\n\n /**\n * Attach event that will be fired once\n * @returns {KTToggle}\n */\n the.one = function(name, handler) {\n return Plugin.addEvent(name, handler, true);\n };\n\n // Construct plugin\n Plugin.construct.apply(the, [options]);\n\n return the;\n};\n\n// webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = KTToggle;\n}\n","\"use strict\";\n\n/**\n * @class KTUtil base utilize class that privides helper functions\n */\n\n// Polyfills\n/**\n * Element.matches() polyfill (simple version)\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\n */\nif (!Element.prototype.matches) {\n\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n}\n\n/**\n * Element.closest() polyfill\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill\n */\nif (!Element.prototype.closest) {\n\tif (!Element.prototype.matches) {\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\t}\n\tElement.prototype.closest = function (s) {\n\t\tvar el = this;\n\t\tvar ancestor = this;\n\t\tif (!document.documentElement.contains(el)) return null;\n\t\tdo {\n\t\t\tif (ancestor.matches(s)) return ancestor;\n\t\t\tancestor = ancestor.parentElement;\n\t\t} while (ancestor !== null);\n\t\treturn null;\n\t};\n}\n\n/**\n * ChildNode.remove() polyfill\n * https://gomakethings.com/removing-an-element-from-the-dom-the-es6-way/\n * @author Chris Ferdinandi\n * @license MIT\n */\n(function (elem) {\n\tfor (var i = 0; i < elem.length; i++) {\n\t\tif (!window[elem[i]] || 'remove' in window[elem[i]].prototype) continue;\n\t\twindow[elem[i]].prototype.remove = function () {\n\t\t\tthis.parentNode.removeChild(this);\n\t\t};\n\t}\n})(['Element', 'CharacterData', 'DocumentType']);\n\n\n//\n// requestAnimationFrame polyfill by Erik Möller.\n// With fixes from Paul Irish and Tino Zijdel\n//\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n//\n// MIT license\n//\n(function() {\n var lastTime = 0;\n var vendors = ['webkit', 'moz'];\n for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\n window.cancelAnimationFrame =\n window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];\n }\n\n if (!window.requestAnimationFrame)\n window.requestAnimationFrame = function(callback) {\n var currTime = new Date().getTime();\n var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n var id = window.setTimeout(function() {\n callback(currTime + timeToCall);\n }, timeToCall);\n lastTime = currTime + timeToCall;\n return id;\n };\n\n if (!window.cancelAnimationFrame)\n window.cancelAnimationFrame = function(id) {\n clearTimeout(id);\n };\n}());\n\n// Source: https://github.com/jserz/js_piece/blob/master/DOM/ParentNode/prepend()/prepend().md\n(function(arr) {\n arr.forEach(function(item) {\n if (item.hasOwnProperty('prepend')) {\n return;\n }\n Object.defineProperty(item, 'prepend', {\n configurable: true,\n enumerable: true,\n writable: true,\n value: function prepend() {\n var argArr = Array.prototype.slice.call(arguments),\n docFrag = document.createDocumentFragment();\n\n argArr.forEach(function(argItem) {\n var isNode = argItem instanceof Node;\n docFrag.appendChild(isNode ? argItem : document.createTextNode(String(argItem)));\n });\n\n this.insertBefore(docFrag, this.firstChild);\n }\n });\n });\n})([Element.prototype, Document.prototype, DocumentFragment.prototype]);\n\n// getAttributeNames\nif (Element.prototype.getAttributeNames == undefined) {\n Element.prototype.getAttributeNames = function () {\n var attributes = this.attributes;\n var length = attributes.length;\n var result = new Array(length);\n for (var i = 0; i < length; i++) {\n result[i] = attributes[i].name;\n }\n return result;\n };\n}\n\n// Global variables\nwindow.KTUtilElementDataStore = {};\nwindow.KTUtilElementDataStoreID = 0;\nwindow.KTUtilDelegatedEventHandlers = {};\n\nvar KTUtil = function() {\n var resizeHandlers = [];\n\n /** @type {object} breakpoints The device width breakpoints **/\n var breakpoints = {\n sm: 544, // Small screen / phone\n md: 768, // Medium screen / tablet\n lg: 992, // Large screen / desktop\n xl: 1200 // Extra large screen / wide desktop\n };\n\n /**\n * Handle window resize event with some\n * delay to attach event handlers upon resize complete\n */\n var _windowResizeHandler = function() {\n var _runResizeHandlers = function() {\n // reinitialize other subscribed elements\n for (var i = 0; i < resizeHandlers.length; i++) {\n var each = resizeHandlers[i];\n each.call();\n }\n };\n\n var timer;\n\n window.addEventListener('resize', function() {\n KTUtil.throttle(timer, function() {\n _runResizeHandlers();\n }, 200);\n });\n };\n\n return {\n /**\n * Class main initializer.\n * @param {object} settings.\n * @returns null\n */\n //main function to initiate the theme\n init: function(settings) {\n if (settings && settings.breakpoints) {\n breakpoints = settings.breakpoints;\n }\n\n _windowResizeHandler();\n },\n\n /**\n * Adds window resize event handler.\n * @param {function} callback function.\n */\n addResizeHandler: function(callback) {\n resizeHandlers.push(callback);\n },\n\n /**\n * Removes window resize event handler.\n * @param {function} callback function.\n */\n removeResizeHandler: function(callback) {\n for (var i = 0; i < resizeHandlers.length; i++) {\n if (callback === resizeHandlers[i]) {\n delete resizeHandlers[i];\n }\n }\n },\n\n /**\n * Trigger window resize handlers.\n */\n runResizeHandlers: function() {\n _runResizeHandlers();\n },\n\n resize: function() {\n if (typeof(Event) === 'function') {\n // modern browsers\n window.dispatchEvent(new Event('resize'));\n } else {\n // for IE and other old browsers\n // causes deprecation warning on modern browsers\n var evt = window.document.createEvent('UIEvents');\n evt.initUIEvent('resize', true, false, window, 0);\n window.dispatchEvent(evt);\n }\n },\n\n /**\n * Get GET parameter value from URL.\n * @param {string} paramName Parameter name.\n * @returns {string}\n */\n getURLParam: function(paramName) {\n var searchString = window.location.search.substring(1),\n i, val, params = searchString.split(\"&\");\n\n for (i = 0; i < params.length; i++) {\n val = params[i].split(\"=\");\n if (val[0] == paramName) {\n return unescape(val[1]);\n }\n }\n\n return null;\n },\n\n /**\n * Checks whether current device is mobile touch.\n * @returns {boolean}\n */\n isMobileDevice: function() {\n var test = (this.getViewPort().width < this.getBreakpoint('lg') ? true : false);\n\n if (test === false) {\n // For use within normal web clients\n test = navigator.userAgent.match(/iPad/i) != null;\n }\n\n return test;\n },\n\n /**\n * Checks whether current device is desktop.\n * @returns {boolean}\n */\n isDesktopDevice: function() {\n return KTUtil.isMobileDevice() ? false : true;\n },\n\n /**\n * Gets browser window viewport size. Ref:\n * http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/\n * @returns {object}\n */\n getViewPort: function() {\n var e = window,\n a = 'inner';\n if (!('innerWidth' in window)) {\n a = 'client';\n e = document.documentElement || document.body;\n }\n\n return {\n width: e[a + 'Width'],\n height: e[a + 'Height']\n };\n },\n\n /**\n * Checks whether given device mode is currently activated.\n * @param {string} mode Responsive mode name(e.g: desktop,\n * desktop-and-tablet, tablet, tablet-and-mobile, mobile)\n * @returns {boolean}\n */\n isInResponsiveRange: function(mode) {\n var breakpoint = this.getViewPort().width;\n\n if (mode == 'general') {\n return true;\n } else if (mode == 'desktop' && breakpoint >= (this.getBreakpoint('lg') + 1)) {\n return true;\n } else if (mode == 'tablet' && (breakpoint >= (this.getBreakpoint('md') + 1) && breakpoint < this.getBreakpoint('lg'))) {\n return true;\n } else if (mode == 'mobile' && breakpoint <= this.getBreakpoint('md')) {\n return true;\n } else if (mode == 'desktop-and-tablet' && breakpoint >= (this.getBreakpoint('md') + 1)) {\n return true;\n } else if (mode == 'tablet-and-mobile' && breakpoint <= this.getBreakpoint('lg')) {\n return true;\n } else if (mode == 'minimal-desktop-and-below' && breakpoint <= this.getBreakpoint('xl')) {\n return true;\n }\n\n return false;\n },\n\n\t\t/**\n * Checks whether given device mode is currently activated.\n * @param {string} mode Responsive mode name(e.g: desktop,\n * desktop-and-tablet, tablet, tablet-and-mobile, mobile)\n * @returns {boolean}\n */\n isBreakpointUp: function(mode) {\n var width = this.getViewPort().width;\n\t\t\tvar breakpoint = this.getBreakpoint(mode);\n\n\t\t\treturn (width >= breakpoint);\n },\n\n\t\tisBreakpointDown: function(mode) {\n var width = this.getViewPort().width;\n\t\t\tvar breakpoint = this.getBreakpoint(mode);\n\n\t\t\treturn (width < breakpoint);\n },\n\n /**\n * Generates unique ID for give prefix.\n * @param {string} prefix Prefix for generated ID\n * @returns {boolean}\n */\n getUniqueID: function(prefix) {\n return prefix + Math.floor(Math.random() * (new Date()).getTime());\n },\n\n /**\n * Gets window width for give breakpoint mode.\n * @param {string} mode Responsive mode name(e.g: xl, lg, md, sm)\n * @returns {number}\n */\n getBreakpoint: function(mode) {\n return breakpoints[mode];\n },\n\n /**\n * Checks whether object has property matchs given key path.\n * @param {object} obj Object contains values paired with given key path\n * @param {string} keys Keys path seperated with dots\n * @returns {object}\n */\n isset: function(obj, keys) {\n var stone;\n\n keys = keys || '';\n\n if (keys.indexOf('[') !== -1) {\n throw new Error('Unsupported object path notation.');\n }\n\n keys = keys.split('.');\n\n do {\n if (obj === undefined) {\n return false;\n }\n\n stone = keys.shift();\n\n if (!obj.hasOwnProperty(stone)) {\n return false;\n }\n\n obj = obj[stone];\n\n } while (keys.length);\n\n return true;\n },\n\n /**\n * Gets highest z-index of the given element parents\n * @param {object} el jQuery element object\n * @returns {number}\n */\n getHighestZindex: function(el) {\n var position, value;\n\n while (el && el !== document) {\n // Ignore z-index if position is set to a value where z-index is ignored by the browser\n // This makes behavior of this function consistent across browsers\n // WebKit always returns auto if the element is positioned\n position = KTUtil.css(el, 'position');\n\n if (position === \"absolute\" || position === \"relative\" || position === \"fixed\") {\n // IE returns 0 when zIndex is not specified\n // other browsers return a string\n // we ignore the case of nested elements with an explicit value of 0\n //
\n value = parseInt(KTUtil.css(el, 'z-index'));\n\n if (!isNaN(value) && value !== 0) {\n return value;\n }\n }\n\n el = el.parentNode;\n }\n\n return null;\n },\n\n /**\n * Checks whether the element has any parent with fixed positionfreg\n * @param {object} el jQuery element object\n * @returns {boolean}\n */\n hasFixedPositionedParent: function(el) {\n var position;\n\n while (el && el !== document) {\n position = KTUtil.css(el, 'position');\n\n if (position === \"fixed\") {\n return true;\n }\n\n el = el.parentNode;\n }\n\n return false;\n },\n\n /**\n * Simulates delay\n */\n sleep: function(milliseconds) {\n var start = new Date().getTime();\n for (var i = 0; i < 1e7; i++) {\n if ((new Date().getTime() - start) > milliseconds) {\n break;\n }\n }\n },\n\n /**\n * Gets randomly generated integer value within given min and max range\n * @param {number} min Range start value\n * @param {number} max Range end value\n * @returns {number}\n */\n getRandomInt: function(min, max) {\n return Math.floor(Math.random() * (max - min + 1)) + min;\n },\n\n /**\n * Checks whether Angular library is included\n * @returns {boolean}\n */\n isAngularVersion: function() {\n return window.Zone !== undefined ? true : false;\n },\n\n // Deep extend: $.extend(true, {}, objA, objB);\n deepExtend: function(out) {\n out = out || {};\n\n for (var i = 1; i < arguments.length; i++) {\n var obj = arguments[i];\n if (!obj) continue;\n\n for (var key in obj) {\n if (!obj.hasOwnProperty(key)) {\n continue;\n }\n\n // based on https://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/\n if ( Object.prototype.toString.call(obj[key]) === '[object Object]' ) {\n out[key] = KTUtil.deepExtend(out[key], obj[key]);\n continue;\n }\n\n out[key] = obj[key];\n }\n }\n\n return out;\n },\n\n // extend: $.extend({}, objA, objB);\n extend: function(out) {\n out = out || {};\n\n for (var i = 1; i < arguments.length; i++) {\n if (!arguments[i])\n continue;\n\n for (var key in arguments[i]) {\n if (arguments[i].hasOwnProperty(key))\n out[key] = arguments[i][key];\n }\n }\n\n return out;\n },\n\n getById: function(el) {\n if (typeof el === 'string') {\n return document.getElementById(el);\n } else {\n return el;\n }\n },\n\n getByTag: function(query) {\n return document.getElementsByTagName(query);\n },\n\n getByTagName: function(query) {\n return document.getElementsByTagName(query);\n },\n\n getByClass: function(query) {\n return document.getElementsByClassName(query);\n },\n\n getBody: function() {\n return document.getElementsByTagName('body')[0];\n },\n\n /**\n * Checks whether the element has given classes\n * @param {object} el jQuery element object\n * @param {string} Classes string\n * @returns {boolean}\n */\n hasClasses: function(el, classes) {\n if (!el) {\n return;\n }\n\n var classesArr = classes.split(\" \");\n\n for (var i = 0; i < classesArr.length; i++) {\n if (KTUtil.hasClass(el, KTUtil.trim(classesArr[i])) == false) {\n return false;\n }\n }\n\n return true;\n },\n\n hasClass: function(el, className) {\n if (!el) {\n return;\n }\n\n return el.classList ? el.classList.contains(className) : new RegExp('\\\\b' + className + '\\\\b').test(el.className);\n },\n\n addClass: function(el, className) {\n if (!el || typeof className === 'undefined') {\n return;\n }\n\n var classNames = className.split(' ');\n\n if (el.classList) {\n for (var i = 0; i < classNames.length; i++) {\n if (classNames[i] && classNames[i].length > 0) {\n el.classList.add(KTUtil.trim(classNames[i]));\n }\n }\n } else if (!KTUtil.hasClass(el, className)) {\n for (var x = 0; x < classNames.length; x++) {\n el.className += ' ' + KTUtil.trim(classNames[x]);\n }\n }\n },\n\n removeClass: function(el, className) {\n if (!el || typeof className === 'undefined') {\n return;\n }\n\n var classNames = className.split(' ');\n\n if (el.classList) {\n for (var i = 0; i < classNames.length; i++) {\n el.classList.remove(KTUtil.trim(classNames[i]));\n }\n } else if (KTUtil.hasClass(el, className)) {\n for (var x = 0; x < classNames.length; x++) {\n el.className = el.className.replace(new RegExp('\\\\b' + KTUtil.trim(classNames[x]) + '\\\\b', 'g'), '');\n }\n }\n },\n\n triggerCustomEvent: function(el, eventName, data) {\n var event;\n if (window.CustomEvent) {\n event = new CustomEvent(eventName, {\n detail: data\n });\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(eventName, true, true, data);\n }\n\n el.dispatchEvent(event);\n },\n\n triggerEvent: function(node, eventName) {\n // Make sure we use the ownerDocument from the provided node to avoid cross-window problems\n var doc;\n if (node.ownerDocument) {\n doc = node.ownerDocument;\n } else if (node.nodeType == 9) {\n // the node may be the document itself, nodeType 9 = DOCUMENT_NODE\n doc = node;\n } else {\n throw new Error(\"Invalid node passed to fireEvent: \" + node.id);\n }\n\n if (node.dispatchEvent) {\n // Gecko-style approach (now the standard) takes more work\n var eventClass = \"\";\n\n // Different events have different event classes.\n // If this switch statement can't map an eventName to an eventClass,\n // the event firing is going to fail.\n switch (eventName) {\n case \"click\": // Dispatching of 'click' appears to not work correctly in Safari. Use 'mousedown' or 'mouseup' instead.\n case \"mouseenter\":\n case \"mouseleave\":\n case \"mousedown\":\n case \"mouseup\":\n eventClass = \"MouseEvents\";\n break;\n\n case \"focus\":\n case \"change\":\n case \"blur\":\n case \"select\":\n eventClass = \"HTMLEvents\";\n break;\n\n default:\n throw \"fireEvent: Couldn't find an event class for event '\" + eventName + \"'.\";\n break;\n }\n var event = doc.createEvent(eventClass);\n\n var bubbles = eventName == \"change\" ? false : true;\n event.initEvent(eventName, bubbles, true); // All events created as bubbling and cancelable.\n\n event.synthetic = true; // allow detection of synthetic events\n // The second parameter says go ahead with the default action\n node.dispatchEvent(event, true);\n } else if (node.fireEvent) {\n // IE-old school style\n var event = doc.createEventObject();\n event.synthetic = true; // allow detection of synthetic events\n node.fireEvent(\"on\" + eventName, event);\n }\n },\n\n index: function( el ){\n var c = el.parentNode.children, i = 0;\n for(; i < c.length; i++ )\n if( c[i] == el ) return i;\n },\n\n trim: function(string) {\n return string.trim();\n },\n\n eventTriggered: function(e) {\n if (e.currentTarget.dataset.triggered) {\n return true;\n } else {\n e.currentTarget.dataset.triggered = true;\n\n return false;\n }\n },\n\n remove: function(el) {\n if (el && el.parentNode) {\n el.parentNode.removeChild(el);\n }\n },\n\n find: function(parent, query) {\n parent = KTUtil.getById(parent);\n if (parent) {\n return parent.querySelector(query);\n }\n },\n\n findAll: function(parent, query) {\n parent = KTUtil.getById(parent);\n if (parent) {\n return parent.querySelectorAll(query);\n }\n },\n\n insertAfter: function(el, referenceNode) {\n return referenceNode.parentNode.insertBefore(el, referenceNode.nextSibling);\n },\n\n parents: function(elem, selector) {\n // Element.matches() polyfill\n if (!Element.prototype.matches) {\n Element.prototype.matches =\n Element.prototype.matchesSelector ||\n Element.prototype.mozMatchesSelector ||\n Element.prototype.msMatchesSelector ||\n Element.prototype.oMatchesSelector ||\n Element.prototype.webkitMatchesSelector ||\n function(s) {\n var matches = (this.document || this.ownerDocument).querySelectorAll(s),\n i = matches.length;\n while (--i >= 0 && matches.item(i) !== this) {}\n return i > -1;\n };\n }\n\n // Set up a parent array\n var parents = [];\n\n // Push each parent element to the array\n for ( ; elem && elem !== document; elem = elem.parentNode ) {\n if (selector) {\n if (elem.matches(selector)) {\n parents.push(elem);\n }\n continue;\n }\n parents.push(elem);\n }\n\n // Return our parent array\n return parents;\n },\n\n children: function(el, selector, log) {\n if (!el || !el.childNodes) {\n return;\n }\n\n var result = [],\n i = 0,\n l = el.childNodes.length;\n\n for (var i; i < l; ++i) {\n if (el.childNodes[i].nodeType == 1 && KTUtil.matches(el.childNodes[i], selector, log)) {\n result.push(el.childNodes[i]);\n }\n }\n\n return result;\n },\n\n child: function(el, selector, log) {\n var children = KTUtil.children(el, selector, log);\n\n return children ? children[0] : null;\n },\n\n matches: function(el, selector, log) {\n var p = Element.prototype;\n var f = p.matches || p.webkitMatchesSelector || p.mozMatchesSelector || p.msMatchesSelector || function(s) {\n return [].indexOf.call(document.querySelectorAll(s), this) !== -1;\n };\n\n if (el && el.tagName) {\n return f.call(el, selector);\n } else {\n return false;\n }\n },\n\n data: function(el) {\n return {\n set: function(name, data) {\n if (!el) {\n return;\n }\n\n if (el.customDataTag === undefined) {\n window.KTUtilElementDataStoreID++;\n el.customDataTag = window.KTUtilElementDataStoreID;\n }\n\n if (window.KTUtilElementDataStore[el.customDataTag] === undefined) {\n window.KTUtilElementDataStore[el.customDataTag] = {};\n }\n\n window.KTUtilElementDataStore[el.customDataTag][name] = data;\n },\n\n get: function(name) {\n if (!el) {\n return;\n }\n\n if (el.customDataTag === undefined) {\n return null;\n }\n\n return this.has(name) ? window.KTUtilElementDataStore[el.customDataTag][name] : null;\n },\n\n has: function(name) {\n if (!el) {\n return false;\n }\n\n if (el.customDataTag === undefined) {\n return false;\n }\n\n return (window.KTUtilElementDataStore[el.customDataTag] && window.KTUtilElementDataStore[el.customDataTag][name]) ? true : false;\n },\n\n remove: function(name) {\n if (el && this.has(name)) {\n delete window.KTUtilElementDataStore[el.customDataTag][name];\n }\n }\n };\n },\n\n outerWidth: function(el, margin) {\n var width;\n\n if (margin === true) {\n width = parseFloat(el.offsetWidth);\n width += parseFloat(KTUtil.css(el, 'margin-left')) + parseFloat(KTUtil.css(el, 'margin-right'));\n\n return parseFloat(width);\n } else {\n width = parseFloat(el.offsetWidth);\n\n return width;\n }\n },\n\n offset: function(el) {\n var rect, win;\n\n if ( !el ) {\n return;\n }\n\n // Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n // Support: IE <=11 only\n // Running getBoundingClientRect on a\n // disconnected node in IE throws an error\n\n if ( !el.getClientRects().length ) {\n return { top: 0, left: 0 };\n }\n\n // Get document-relative position by adding viewport scroll to viewport-relative gBCR\n rect = el.getBoundingClientRect();\n win = el.ownerDocument.defaultView;\n\n return {\n top: rect.top + win.pageYOffset,\n left: rect.left + win.pageXOffset\n };\n },\n\n height: function(el) {\n return KTUtil.css(el, 'height');\n },\n\n outerHeight: function(el, withMargin) {\n var height = el.offsetHeight;\n var style;\n\n if (typeof withMargin !== 'undefined' && withMargin === true) {\n style = getComputedStyle(el);\n height += parseInt(style.marginTop) + parseInt(style.marginBottom);\n\n return height;\n } else {\n return height;\n }\n },\n\n visible: function(el) {\n return !(el.offsetWidth === 0 && el.offsetHeight === 0);\n },\n\n attr: function(el, name, value) {\n if (el == undefined) {\n return;\n }\n\n if (value !== undefined) {\n el.setAttribute(name, value);\n } else {\n return el.getAttribute(name);\n }\n },\n\n hasAttr: function(el, name) {\n if (el == undefined) {\n return;\n }\n\n return el.getAttribute(name) ? true : false;\n },\n\n removeAttr: function(el, name) {\n if (el == undefined) {\n return;\n }\n\n el.removeAttribute(name);\n },\n\n animate: function(from, to, duration, update, easing, done) {\n /**\n * TinyAnimate.easings\n * Adapted from jQuery Easing\n */\n var easings = {};\n var easing;\n\n easings.linear = function(t, b, c, d) {\n return c * t / d + b;\n };\n\n easing = easings.linear;\n\n // Early bail out if called incorrectly\n if (typeof from !== 'number' ||\n typeof to !== 'number' ||\n typeof duration !== 'number' ||\n typeof update !== 'function') {\n return;\n }\n\n // Create mock done() function if necessary\n if (typeof done !== 'function') {\n done = function() {};\n }\n\n // Pick implementation (requestAnimationFrame | setTimeout)\n var rAF = window.requestAnimationFrame || function(callback) {\n window.setTimeout(callback, 1000 / 50);\n };\n\n // Animation loop\n var canceled = false;\n var change = to - from;\n\n function loop(timestamp) {\n var time = (timestamp || +new Date()) - start;\n\n if (time >= 0) {\n update(easing(time, from, change, duration));\n }\n if (time >= 0 && time >= duration) {\n update(to);\n done();\n } else {\n rAF(loop);\n }\n }\n\n update(from);\n\n // Start animation loop\n var start = window.performance && window.performance.now ? window.performance.now() : +new Date();\n\n rAF(loop);\n },\n\n actualCss: function(el, prop, cache) {\n var css = '';\n\n if (el instanceof HTMLElement === false) {\n return;\n }\n\n if (!el.getAttribute('kt-hidden-' + prop) || cache === false) {\n var value;\n\n // the element is hidden so:\n // making the el block so we can meassure its height but still be hidden\n css = el.style.cssText;\n el.style.cssText = 'position: absolute; visibility: hidden; display: block;';\n\n if (prop == 'width') {\n value = el.offsetWidth;\n } else if (prop == 'height') {\n value = el.offsetHeight;\n }\n\n el.style.cssText = css;\n\n // store it in cache\n el.setAttribute('kt-hidden-' + prop, value);\n\n return parseFloat(value);\n } else {\n // store it in cache\n return parseFloat(el.getAttribute('kt-hidden-' + prop));\n }\n },\n\n actualHeight: function(el, cache) {\n return KTUtil.actualCss(el, 'height', cache);\n },\n\n actualWidth: function(el, cache) {\n return KTUtil.actualCss(el, 'width', cache);\n },\n\n getScroll: function(element, method) {\n // The passed in `method` value should be 'Top' or 'Left'\n method = 'scroll' + method;\n return (element == window || element == document) ? (\n self[(method == 'scrollTop') ? 'pageYOffset' : 'pageXOffset'] ||\n (browserSupportsBoxModel && document.documentElement[method]) ||\n document.body[method]\n ) : element[method];\n },\n\n css: function(el, styleProp, value) {\n if (!el) {\n return;\n }\n\n if (value !== undefined) {\n el.style[styleProp] = value;\n } else {\n var defaultView = (el.ownerDocument || document).defaultView;\n // W3C standard way:\n if (defaultView && defaultView.getComputedStyle) {\n // sanitize property name to css notation\n // (hyphen separated words eg. font-Size)\n styleProp = styleProp.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n return defaultView.getComputedStyle(el, null).getPropertyValue(styleProp);\n } else if (el.currentStyle) { // IE\n // sanitize property name to camelCase\n styleProp = styleProp.replace(/\\-(\\w)/g, function(str, letter) {\n return letter.toUpperCase();\n });\n value = el.currentStyle[styleProp];\n // convert other units to pixels on IE\n if (/^\\d+(em|pt|%|ex)?$/i.test(value)) {\n return (function(value) {\n var oldLeft = el.style.left,\n oldRsLeft = el.runtimeStyle.left;\n el.runtimeStyle.left = el.currentStyle.left;\n el.style.left = value || 0;\n value = el.style.pixelLeft + \"px\";\n el.style.left = oldLeft;\n el.runtimeStyle.left = oldRsLeft;\n return value;\n })(value);\n }\n return value;\n }\n }\n },\n\n slide: function(el, dir, speed, callback, recalcMaxHeight) {\n if (!el || (dir == 'up' && KTUtil.visible(el) === false) || (dir == 'down' && KTUtil.visible(el) === true)) {\n return;\n }\n\n speed = (speed ? speed : 600);\n var calcHeight = KTUtil.actualHeight(el);\n var calcPaddingTop = false;\n var calcPaddingBottom = false;\n\n if (KTUtil.css(el, 'padding-top') && KTUtil.data(el).has('slide-padding-top') !== true) {\n KTUtil.data(el).set('slide-padding-top', KTUtil.css(el, 'padding-top'));\n }\n\n if (KTUtil.css(el, 'padding-bottom') && KTUtil.data(el).has('slide-padding-bottom') !== true) {\n KTUtil.data(el).set('slide-padding-bottom', KTUtil.css(el, 'padding-bottom'));\n }\n\n if (KTUtil.data(el).has('slide-padding-top')) {\n calcPaddingTop = parseInt(KTUtil.data(el).get('slide-padding-top'));\n }\n\n if (KTUtil.data(el).has('slide-padding-bottom')) {\n calcPaddingBottom = parseInt(KTUtil.data(el).get('slide-padding-bottom'));\n }\n\n if (dir == 'up') { // up\n el.style.cssText = 'display: block; overflow: hidden;';\n\n if (calcPaddingTop) {\n KTUtil.animate(0, calcPaddingTop, speed, function(value) {\n el.style.paddingTop = (calcPaddingTop - value) + 'px';\n }, 'linear');\n }\n\n if (calcPaddingBottom) {\n KTUtil.animate(0, calcPaddingBottom, speed, function(value) {\n el.style.paddingBottom = (calcPaddingBottom - value) + 'px';\n }, 'linear');\n }\n\n KTUtil.animate(0, calcHeight, speed, function(value) {\n el.style.height = (calcHeight - value) + 'px';\n }, 'linear', function() {\n el.style.height = '';\n el.style.display = 'none';\n\n if (typeof callback === 'function') {\n callback();\n }\n });\n\n\n } else if (dir == 'down') { // down\n el.style.cssText = 'display: block; overflow: hidden;';\n\n if (calcPaddingTop) {\n KTUtil.animate(0, calcPaddingTop, speed, function(value) {//\n el.style.paddingTop = value + 'px';\n }, 'linear', function() {\n el.style.paddingTop = '';\n });\n }\n\n if (calcPaddingBottom) {\n KTUtil.animate(0, calcPaddingBottom, speed, function(value) {\n el.style.paddingBottom = value + 'px';\n }, 'linear', function() {\n el.style.paddingBottom = '';\n });\n }\n\n KTUtil.animate(0, calcHeight, speed, function(value) {\n el.style.height = value + 'px';\n }, 'linear', function() {\n el.style.height = '';\n el.style.display = '';\n el.style.overflow = '';\n\n if (typeof callback === 'function') {\n callback();\n }\n });\n }\n },\n\n slideUp: function(el, speed, callback) {\n KTUtil.slide(el, 'up', speed, callback);\n },\n\n slideDown: function(el, speed, callback) {\n KTUtil.slide(el, 'down', speed, callback);\n },\n\n show: function(el, display) {\n if (typeof el !== 'undefined') {\n el.style.display = (display ? display : 'block');\n }\n },\n\n hide: function(el) {\n if (typeof el !== 'undefined') {\n el.style.display = 'none';\n }\n },\n\n addEvent: function(el, type, handler, one) {\n if (typeof el !== 'undefined' && el !== null) {\n el.addEventListener(type, handler);\n }\n },\n\n removeEvent: function(el, type, handler) {\n if (el !== null) {\n el.removeEventListener(type, handler);\n }\n },\n\n on: function(element, selector, event, handler) {\n if (!selector) {\n return;\n }\n\n var eventId = KTUtil.getUniqueID('event');\n\n window.KTUtilDelegatedEventHandlers[eventId] = function(e) {\n var targets = element.querySelectorAll(selector);\n var target = e.target;\n\n while (target && target !== element) {\n for (var i = 0, j = targets.length; i < j; i++) {\n if (target === targets[i]) {\n handler.call(target, e);\n }\n }\n\n target = target.parentNode;\n }\n }\n\n KTUtil.addEvent(element, event, window.KTUtilDelegatedEventHandlers[eventId]);\n\n return eventId;\n },\n\n off: function(element, event, eventId) {\n if (!element || !window.KTUtilDelegatedEventHandlers[eventId]) {\n return;\n }\n\n KTUtil.removeEvent(element, event, window.KTUtilDelegatedEventHandlers[eventId]);\n\n delete window.KTUtilDelegatedEventHandlers[eventId];\n },\n\n one: function onetime(el, type, callback) {\n el.addEventListener(type, function callee(e) {\n // remove event\n if (e.target && e.target.removeEventListener) {\n e.target.removeEventListener(e.type, callee);\n }\n\n // need to verify from https://themeforest.net/author_dashboard#comment_23615588\n if (el && el.removeEventListener) {\n\t\t\t\t e.currentTarget.removeEventListener(e.type, callee);\n\t\t\t }\n\n // call handler\n return callback(e);\n });\n },\n\n hash: function(str) {\n var hash = 0,\n i, chr;\n\n if (str.length === 0) return hash;\n for (i = 0; i < str.length; i++) {\n chr = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + chr;\n hash |= 0; // Convert to 32bit integer\n }\n\n return hash;\n },\n\n animateClass: function(el, animationName, callback) {\n var animation;\n var animations = {\n animation: 'animationend',\n OAnimation: 'oAnimationEnd',\n MozAnimation: 'mozAnimationEnd',\n WebkitAnimation: 'webkitAnimationEnd',\n msAnimation: 'msAnimationEnd',\n };\n\n for (var t in animations) {\n if (el.style[t] !== undefined) {\n animation = animations[t];\n }\n }\n\n KTUtil.addClass(el, 'animated ' + animationName);\n\n KTUtil.one(el, animation, function() {\n KTUtil.removeClass(el, 'animated ' + animationName);\n });\n\n if (callback) {\n KTUtil.one(el, animation, callback);\n }\n },\n\n transitionEnd: function(el, callback) {\n var transition;\n var transitions = {\n transition: 'transitionend',\n OTransition: 'oTransitionEnd',\n MozTransition: 'mozTransitionEnd',\n WebkitTransition: 'webkitTransitionEnd',\n msTransition: 'msTransitionEnd'\n };\n\n for (var t in transitions) {\n if (el.style[t] !== undefined) {\n transition = transitions[t];\n }\n }\n\n KTUtil.one(el, transition, callback);\n },\n\n animationEnd: function(el, callback) {\n var animation;\n var animations = {\n animation: 'animationend',\n OAnimation: 'oAnimationEnd',\n MozAnimation: 'mozAnimationEnd',\n WebkitAnimation: 'webkitAnimationEnd',\n msAnimation: 'msAnimationEnd'\n };\n\n for (var t in animations) {\n if (el.style[t] !== undefined) {\n animation = animations[t];\n }\n }\n\n KTUtil.one(el, animation, callback);\n },\n\n animateDelay: function(el, value) {\n var vendors = ['webkit-', 'moz-', 'ms-', 'o-', ''];\n for (var i = 0; i < vendors.length; i++) {\n KTUtil.css(el, vendors[i] + 'animation-delay', value);\n }\n },\n\n animateDuration: function(el, value) {\n var vendors = ['webkit-', 'moz-', 'ms-', 'o-', ''];\n for (var i = 0; i < vendors.length; i++) {\n KTUtil.css(el, vendors[i] + 'animation-duration', value);\n }\n },\n\n scrollTo: function(target, offset, duration) {\n var duration = duration ? duration : 500;\n var targetPos = target ? KTUtil.offset(target).top : 0;\n var scrollPos = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n var from, to;\n\n if (offset) {\n scrollPos += offset;\n }\n\n from = scrollPos;\n to = targetPos;\n\n KTUtil.animate(from, to, duration, function(value) {\n document.documentElement.scrollTop = value;\n document.body.parentNode.scrollTop = value;\n document.body.scrollTop = value;\n }); //, easing, done\n },\n\n scrollTop: function(offset, duration) {\n KTUtil.scrollTo(null, offset, duration);\n },\n\n isArray: function(obj) {\n return obj && Array.isArray(obj);\n },\n\n ready: function(callback) {\n if (document.attachEvent ? document.readyState === \"complete\" : document.readyState !== \"loading\") {\n callback();\n } else {\n document.addEventListener('DOMContentLoaded', callback);\n }\n },\n\n isEmpty: function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n return false;\n }\n }\n\n return true;\n },\n\n numberString: function(nStr) {\n nStr += '';\n var x = nStr.split('.');\n var x1 = x[0];\n var x2 = x.length > 1 ? '.' + x[1] : '';\n var rgx = /(\\d+)(\\d{3})/;\n while (rgx.test(x1)) {\n x1 = x1.replace(rgx, '$1' + ',' + '$2');\n }\n return x1 + x2;\n },\n\n detectIE: function() {\n var ua = window.navigator.userAgent;\n\n // Test values; Uncomment to check result …\n\n // IE 10\n // ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)';\n\n // IE 11\n // ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko';\n\n // Edge 12 (Spartan)\n // ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0';\n\n // Edge 13\n // ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586';\n\n var msie = ua.indexOf('MSIE ');\n if (msie > 0) {\n // IE 10 or older => return version number\n return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\n }\n\n var trident = ua.indexOf('Trident/');\n if (trident > 0) {\n // IE 11 => return version number\n var rv = ua.indexOf('rv:');\n return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\n }\n\n var edge = ua.indexOf('Edge/');\n if (edge > 0) {\n // Edge (IE 12+) => return version number\n return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\n }\n\n // other browser\n return false;\n },\n\n isRTL: function() {\n var html = KTUtil.getByTagName('html')[0];\n\n if (html) {\n return (KTUtil.attr(html, 'direction') == 'rtl');\n }\n },\n\n // Scroller\n scrollInit: function(element, options) {\n if (!element) {\n return;\n }\n\n // Learn more: https://github.com/mdbootstrap/perfect-scrollbar#options\n var pluginDefOptions = {\n wheelSpeed: 0.5,\n swipeEasing: true,\n wheelPropagation: false,\n minScrollbarLength: 40,\n maxScrollbarLength: 300,\n suppressScrollX: true\n };\n\n options = KTUtil.deepExtend({}, pluginDefOptions, options);\n\n // Define init function\n function init() {\n var ps;\n var height;\n\n // Get extra options via data attributes\n var attrs = element.getAttributeNames();\n if (attrs.length > 0) {\n attrs.forEach(function(attrName) {\n \t\t\t// more options; https://github.com/ganlanyuan/tiny-slider#options\n \t\t\tif ((/^data-.*/g).test(attrName)) {\n if (['scroll', 'height', 'mobile-height'].includes(optionName) == false) {\n var optionName = attrName.replace('data-', '').toLowerCase().replace(/(?:[\\s-])\\w/g, function(match) {\n \t\t\t\t\treturn match.replace('-', '').toUpperCase();\n \t\t\t\t});\n\n options[optionName] = KTUtil.filterBoolean(element.getAttribute(attrName));\n }\n \t\t\t}\n \t\t});\n }\n\n if (options.height instanceof Function) {\n height = options.height.call();\n } else {\n if (KTUtil.isMobileDevice() === true && options.mobileHeight) {\n height = parseInt(options.mobileHeight);\n } else if (options.height) {\n height = parseInt(options.height);\n } else {\n height = parseInt(KTUtil.css(element, 'height'));\n }\n }\n\n if (height === false) {\n KTUtil.scrollDestroy(element, true);\n\n return;\n }\n\n height = parseInt(height);\n\n // Destroy scroll on table and mobile modes\n if ((options.mobileNativeScroll || options.disableForMobile) && KTUtil.isMobileDevice() === true) {\n ps = KTUtil.data(element).get('ps');\n if (ps) {\n if (options.resetHeightOnDestroy) {\n KTUtil.css(element, 'height', 'auto');\n } else {\n KTUtil.css(element, 'overflow', 'auto');\n if (height > 0) {\n KTUtil.css(element, 'height', height + 'px');\n }\n }\n\n ps.destroy();\n ps = KTUtil.data(element).remove('ps');\n } else if (height > 0){\n KTUtil.css(element, 'overflow', 'auto');\n KTUtil.css(element, 'height', height + 'px');\n }\n\n return;\n }\n\n if (height > 0) {\n KTUtil.css(element, 'height', height + 'px');\n }\n\n if (options.desktopNativeScroll) {\n KTUtil.css(element, 'overflow', 'auto');\n return;\n }\n\n // Pass options via HTML Attributes\n if (KTUtil.attr(element, 'data-window-scroll') == 'true') {\n options.windowScroll = true;\n }\n\n // Init scroll\n ps = KTUtil.data(element).get('ps');\n\n if (ps) {\n ps.update();\n } else {\n KTUtil.css(element, 'overflow', 'hidden');\n KTUtil.addClass(element, 'scroll');\n\n ps = new PerfectScrollbar(element, options);\n\n KTUtil.data(element).set('ps', ps);\n }\n\n // Remember scroll position in cookie\n var uid = KTUtil.attr(element, 'id');\n\n // Todo:Consider using Localstorage\n if (options.rememberPosition === true && KTCookie && uid) {\n if (KTCookie.getCookie(uid)) {\n var pos = parseInt(KTCookie.getCookie(uid));\n\n if (pos > 0) {\n element.scrollTop = pos;\n }\n }\n\n element.addEventListener('ps-scroll-y', function() {\n KTCookie.setCookie(uid, element.scrollTop);\n });\n }\n }\n\n // Init\n init();\n\n // Handle window resize\n if (options.handleWindowResize) {\n KTUtil.addResizeHandler(function() {\n init();\n });\n }\n },\n\n scrollUpdate: function(element) {\n var ps = KTUtil.data(element).get('ps');\n if (ps) {\n ps.update();\n }\n },\n\n scrollUpdateAll: function(parent) {\n var scrollers = KTUtil.findAll(parent, '.ps');\n for (var i = 0, len = scrollers.length; i < len; i++) {\n KTUtil.scrollUpdate(scrollers[i]);\n }\n },\n\n scrollDestroy: function(element, resetAll) {\n var ps = KTUtil.data(element).get('ps');\n\n if (ps) {\n ps.destroy();\n ps = KTUtil.data(element).remove('ps');\n }\n\n if (element && resetAll) {\n element.style.setProperty('overflow', '');\n element.style.setProperty('height', '');\n }\n },\n\n filterBoolean: function(val) {\n // Convert string boolean\n\t\t\tif (val === true || val === 'true') {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (val === false || val === 'false') {\n\t\t\t\treturn false;\n\t\t\t}\n\n return val;\n },\n\n setHTML: function(el, html) {\n el.innerHTML = html;\n },\n\n getHTML: function(el) {\n if (el) {\n return el.innerHTML;\n }\n },\n\n getDocumentHeight: function() {\n var body = document.body;\n var html = document.documentElement;\n\n return Math.max( body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight );\n },\n\n getScrollTop: function() {\n return (document.scrollingElement || document.documentElement).scrollTop;\n },\n\n changeColor: function(col, amt) {\n\n var usePound = false;\n\n if (col[0] == \"#\") {\n col = col.slice(1);\n usePound = true;\n }\n\n var num = parseInt(col,16);\n\n var r = (num >> 16) + amt;\n\n if (r > 255) r = 255;\n else if (r < 0) r = 0;\n\n var b = ((num >> 8) & 0x00FF) + amt;\n\n if (b > 255) b = 255;\n else if (b < 0) b = 0;\n\n var g = (num & 0x0000FF) + amt;\n\n if (g > 255) g = 255;\n else if (g < 0) g = 0;\n\n return (usePound?\"#\":\"\") + (g | (b << 8) | (r << 16)).toString(16);\n\n },\n\n // Throttle function: Input as function which needs to be throttled and delay is the time interval in milliseconds\n throttle: function (timer, func, delay) {\n \t// If setTimeout is already scheduled, no need to do anything\n \tif (timer) {\n \t\treturn;\n \t}\n\n \t// Schedule a setTimeout after delay seconds\n \ttimer = setTimeout(function () {\n \t\tfunc();\n\n \t\t// Once setTimeout function execution is finished, timerId = undefined so that in
\n \t\t// the next scroll event function execution can be scheduled by the setTimeout\n \t\ttimer = undefined;\n \t}, delay);\n },\n\n // Debounce function: Input as function which needs to be debounced and delay is the debounced time in milliseconds\n debounce: function (timer, func, delay) {\n \t// Cancels the setTimeout method execution\n \tclearTimeout(timer)\n\n \t// Executes the func after delay time.\n \ttimer = setTimeout(func, delay);\n },\n\n btnWait: function(el, cls, message, disable) {\n if (!el) {\n return;\n }\n\n if (typeof disable !== 'undefined' && disable === true) {\n KTUtil.attr(el, \"disabled\", true);\n }\n\n if (cls) {\n KTUtil.addClass(el, cls);\n KTUtil.attr(el, \"wait-class\", cls);\n }\n\n if (message) {\n var caption = KTUtil.find(el, '.btn-caption');\n\n if (caption) {\n KTUtil.data(caption).set('caption', KTUtil.getHTML(caption));\n KTUtil.setHTML(caption, message);\n } else {\n KTUtil.data(el).set('caption', KTUtil.getHTML(el));\n KTUtil.setHTML(el, message);\n }\n }\n },\n\n btnRelease: function(el) {\n if (!el) {\n return;\n }\n\n /// Show loading state on button\n KTUtil.removeAttr(el, \"disabled\");\n\n if (KTUtil.hasAttr(el, \"wait-class\")) {\n KTUtil.removeClass(el, KTUtil.attr(el, \"wait-class\"));\n }\n\n var caption = KTUtil.find(el, '.btn-caption');\n\n if (caption && KTUtil.data(caption).has('caption')) {\n KTUtil.setHTML(caption, KTUtil.data(caption).get('caption'));\n } else if (KTUtil.data(el).has('caption')) {\n KTUtil.setHTML(el, KTUtil.data(el).get('caption'));\n }\n },\n\n isOffscreen: function(el, direction, offset) {\n offset = offset || 0;\n\n var windowWidth = KTUtil.getViewPort().width;\n var windowHeight = KTUtil.getViewPort().height;\n\n var top = KTUtil.offset(el).top;\n var height = KTUtil.outerHeight(el) + offset;\n var left = KTUtil.offset(el).left;\n var width = KTUtil.outerWidth(el) + offset;\n\n if (direction == 'bottom') {\n if (windowHeight < top + height) {\n return true;\n } else if (windowHeight > top + height * 1.5) {\n return true;\n }\n }\n\n if (direction == 'top') {\n if (top < 0) {\n return true;\n } else if (top > height) {\n return true;\n }\n }\n\n if (direction == 'left') {\n if (left < 0) {\n return true;\n } else if (left * 2 > width) {\n //console.log('left 2');\n //return true;\n }\n }\n\n if (direction == 'right') {\n if (windowWidth < left + width) {\n return true;\n } else {\n //console.log('right 2');\n //return true;\n }\n }\n\n return false;\n }\n }\n}();\n\n// webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = KTUtil;\n}\n\n// Initialize KTUtil class on document ready\nKTUtil.ready(function() {\n\tif (typeof KTAppSettings !== 'undefined') {\n\t\tKTUtil.init(KTAppSettings);\n\t} else {\n\t\tKTUtil.init();\n\t}\n});\n","\"use strict\";\n\n// Component Definition\nvar KTWizard = function(elementId, options) {\n // Main object\n var the = this;\n var init = false;\n\n // Get element object\n var element = KTUtil.getById(elementId);\n var body = KTUtil.getBody();\n\n if (!element) {\n return;\n }\n\n // Default options\n var defaultOptions = {\n startStep: 1,\n clickableSteps: false, // to make steps clickable this set value true and add data-wizard-clickable=\"true\" in HTML for class=\"wizard\" element\n navigation: true\n };\n\n ////////////////////////////\n // ** Private Methods ** //\n ////////////////////////////\n\n var Plugin = {\n /**\n * Construct\n */\n\n construct: function(options) {\n if (KTUtil.data(element).has('wizard')) {\n the = KTUtil.data(element).get('wizard');\n } else {\n // reset menu\n Plugin.init(options);\n\n // build menu\n Plugin.build();\n\n KTUtil.data(element).set('wizard', the);\n }\n\n return the;\n },\n\n /**\n * Init wizard\n */\n init: function(options) {\n the.element = element;\n the.events = [];\n\n // merge default and user defined options\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\n\n // Elements\n the.steps = KTUtil.findAll(element, '[data-wizard-type=\"step\"]');\n\n the.btnNext = KTUtil.find(element, '[data-wizard-type=\"action-next\"]');\n the.btnPrev = KTUtil.find(element, '[data-wizard-type=\"action-prev\"]');\n the.btnSubmit = KTUtil.find(element, '[data-wizard-type=\"action-submit\"]');\n\n // Variables\n the.events = [];\n the.lastStep = 0;\n the.currentStep = 1;\n the.newStep = 0;\n the.stopped = false;\n the.totalSteps = the.steps.length;\n\n // Init current step\n if (the.options.startStep > 1) {\n Plugin.goTo(the.options.startStep);\n }\n\n // Init UI\n Plugin.updateUI();\n },\n\n /**\n * Build Form Wizard\n */\n build: function() {\n if (the.options.navigation) {\n // Next button event handler\n KTUtil.addEvent(the.btnNext, 'click', function(e) {\n e.preventDefault();\n\n // Set new step number\n Plugin.setNewStep(Plugin.getNextStep());\n\n // Trigger change event\n if (Plugin.eventTrigger('change') !== false) {\n Plugin.goTo(Plugin.getNextStep());\n }\n });\n\n // Prev button event handler\n KTUtil.addEvent(the.btnPrev, 'click', function(e) {\n e.preventDefault();\n\n // Set new step number\n Plugin.setNewStep(Plugin.getPrevStep());\n\n // Trigger change event\n if (Plugin.eventTrigger('change') !== false) {\n Plugin.goTo(Plugin.getPrevStep());\n }\n });\n\n // Submit button event handler\n KTUtil.addEvent(the.btnSubmit, 'click', function(e) {\n e.preventDefault();\n\n Plugin.eventTrigger('submit');\n });\n }\n\n if (the.options.clickableSteps === true) {\n KTUtil.on(element, '[data-wizard-type=\"step\"]', 'click', function() {\n var index = KTUtil.index(this) + 1;\n\n if (index !== the.currentStep) {\n Plugin.setNewStep(index);\n\n // Trigger change event\n if (Plugin.eventTrigger('change') !== false) {\n Plugin.goTo(index);\n }\n }\n });\n }\n },\n\n /**\n * Handles wizard click wizard\n */\n goTo: function(number) {\n // Skip if stopped\n if (the.stopped === true) {\n the.stopped = false;\n return;\n }\n\n // Skip if this step is already shown\n if (number === the.currentStep || number > the.totalSteps || number < 0) {\n return;\n }\n\n // Validate step number\n number = parseInt(number);\n\n // Set current step\n the.lastStep = the.currentStep;\n the.currentStep = number;\n the.newStep = 0;\n\n Plugin.updateUI();\n\n Plugin.eventTrigger('changed');\n\n return the;\n },\n\n /**\n * Stop wizard\n */\n stop: function() {\n the.stopped = true;\n },\n\n /**\n * Resume wizard\n */\n resume: function() {\n the.stopped = false;\n },\n\n /**\n * Check last step\n */\n isLastStep: function() {\n return the.currentStep === the.totalSteps;\n },\n\n /**\n * Check first step\n */\n isFirstStep: function() {\n return the.currentStep === 1;\n },\n\n /**\n * Check between step\n */\n isBetweenStep: function() {\n return Plugin.isLastStep() === false && Plugin.isFirstStep() === false;\n },\n\n /**\n * Update wizard UI after step change\n */\n updateUI: function() {\n var stepType = '';\n var index = the.currentStep - 1;\n\n if (Plugin.isLastStep()) {\n stepType = 'last';\n } else if (Plugin.isFirstStep()) {\n stepType = 'first';\n } else {\n stepType = 'between';\n }\n\n KTUtil.attr(the.element, 'data-wizard-state', stepType);\n\n // Steps\n var steps = KTUtil.findAll(the.element, '[data-wizard-type=\"step\"]');\n\n if (steps && steps.length > 0) {\n for (var i = 0, len = steps.length; i < len; i++) {\n if (i == index) {\n KTUtil.attr(steps[i], 'data-wizard-state', 'current');\n } else {\n if (i < index) {\n KTUtil.attr(steps[i], 'data-wizard-state', 'done');\n } else {\n KTUtil.attr(steps[i], 'data-wizard-state', 'pending');\n }\n }\n }\n }\n\n // Steps Info\n var stepsInfo = KTUtil.findAll(the.element, '[data-wizard-type=\"step-info\"]');\n if (stepsInfo &&stepsInfo.length > 0) {\n for (var i = 0, len = stepsInfo.length; i < len; i++) {\n if (i == index) {\n KTUtil.attr(stepsInfo[i], 'data-wizard-state', 'current');\n } else {\n KTUtil.removeAttr(stepsInfo[i], 'data-wizard-state');\n }\n }\n }\n\n // Steps Content\n var stepsContent = KTUtil.findAll(the.element, '[data-wizard-type=\"step-content\"]');\n if (stepsContent&& stepsContent.length > 0) {\n for (var i = 0, len = stepsContent.length; i < len; i++) {\n if (i == index) {\n KTUtil.attr(stepsContent[i], 'data-wizard-state', 'current');\n } else {\n KTUtil.removeAttr(stepsContent[i], 'data-wizard-state');\n }\n }\n }\n },\n\n /**\n * Get next step number\n */\n getNextStep: function() {\n if (the.totalSteps >= (the.currentStep + 1)) {\n return the.currentStep + 1;\n } else {\n return the.totalSteps;\n }\n },\n\n /**\n * Get prev step number\n */\n getPrevStep: function() {\n if ((the.currentStep - 1) >= 1) {\n return the.currentStep - 1;\n } else {\n return 1;\n }\n },\n\n /**\n * Get new step number\n */\n getNewStep: function() {\n return the.newStep;\n },\n\n /**\n * Set new step\n */\n setNewStep: function(step) {\n the.newStep = step;\n },\n\n /**\n * Trigger events\n */\n eventTrigger: function(name, nested) {\n //KTUtil.triggerCustomEvent(name);\n for (var i = 0; i < the.events.length; i++) {\n var event = the.events[i];\n if (event.name == name) {\n if (event.one == true) {\n if (event.fired == false) {\n the.events[i].fired = true;\n return event.handler.call(this, the);\n }\n } else {\n return event.handler.call(this, the);\n }\n }\n }\n },\n\n addEvent: function(name, handler, one) {\n the.events.push({\n name: name,\n handler: handler,\n one: one,\n fired: false\n });\n\n return the;\n }\n };\n\n //////////////////////////\n // ** Public Methods ** //\n //////////////////////////\n\n /**\n * Set default options\n */\n\n the.setDefaults = function(options) {\n defaultOptions = options;\n };\n\n /**\n * Go to the next step\n */\n the.goNext = function() {\n return Plugin.goTo(Plugin.getNextStep());\n };\n\n /**\n * Go to the prev step\n */\n the.goPrev = function() {\n return Plugin.goTo(Plugin.getPrevStep());\n };\n\n /**\n * Go to the last step\n */\n the.goLast = function() {\n return Plugin.goTo(Plugin.getLastStep());\n };\n\n /**\n * Go to the first step\n */\n the.goFirst = function() {\n return Plugin.goTo(Plugin.getFirstStep());\n };\n\n /**\n * Go to a step\n */\n the.goTo = function(number) {\n return Plugin.goTo(number);\n };\n\n /**\n * Stop wizard\n */\n the.stop = function() {\n return Plugin.stop();\n };\n\n /**\n * Resume wizard\n */\n the.resume = function() {\n return Plugin.resume();\n };\n\n /**\n * Get current step number\n */\n the.getStep = function() {\n return the.currentStep;\n };\n\n /**\n * Get new step number\n */\n the.getNewStep = function() {\n return Plugin.getNewStep();\n };\n\n /**\n * Set new step number\n */\n the.setNewStep = function(number) {\n Plugin.setNewStep(number);\n };\n\n /**\n * Check last step\n */\n the.isLastStep = function() {\n return Plugin.isLastStep();\n };\n\n /**\n * Check first step\n */\n the.isFirstStep = function() {\n return Plugin.isFirstStep();\n };\n\n /**\n * Attach event(\"change\", \"changed\", \"submit\")\n */\n the.on = function(name, handler) {\n return Plugin.addEvent(name, handler);\n };\n\n /**\n * Attach event that will be fired once\n */\n the.one = function(name, handler) {\n return Plugin.addEvent(name, handler, true);\n };\n\n // Construct plugin\n Plugin.construct.apply(the, [options]);\n\n return the;\n};\n\n// webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = KTWizard;\n}\n","\"use strict\";\n\nvar KTLayoutAsideMenu = function() {\n // Private properties\n var _body;\n var _element;\n var _menuObject;\n\n\t// Initialize\n\tvar _init = function() {\n\t\tvar menuDesktopMode = (KTUtil.attr(_element, 'data-menu-dropdown') === '1' ? 'dropdown' : 'accordion');\n var scroll;\n\n\t\tif (KTUtil.attr(_element, 'data-menu-scroll') === '1') {\n\t\t\tscroll = {\n\t\t\t\trememberPosition: true, // remember position on page reload\n\t\t\t\theight: function() { // calculate available scrollable area height\n\t\t\t\t\tvar height = parseInt(KTUtil.getViewPort().height);\n\n\t\t\t\t\tif (KTUtil.isBreakpointUp('lg')) {\n\t\t\t\t\t\theight = height - KTLayoutBrand.getHeight();\n\t\t\t\t\t}\n\n\t\t\t\t\theight = height - (parseInt(KTUtil.css(_element, 'marginBottom')) + parseInt(KTUtil.css(_element, 'marginTop')));\n\n\t\t\t\t\treturn height;\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t_menuObject = new KTMenu(_element, {\n\t\t\t// Vertical scroll\n\t\t\tscroll: scroll,\n\n\t\t\t// Submenu setup\n\t\t\tsubmenu: {\n\t\t\t\tdesktop: menuDesktopMode,\n\t\t\t\ttablet: 'accordion', // menu set to accordion in tablet mode\n\t\t\t\tmobile: 'accordion' // menu set to accordion in mobile mode\n\t\t\t},\n\n\t\t\t// Accordion setup\n\t\t\taccordion: {\n\t\t\t\texpandAll: false // allow having multiple expanded accordions in the menu\n\t\t\t}\n\t\t});\n\t}\n\n var _initHover = function() {\n // Handle Minimized Aside Hover\n\t\tif (KTUtil.hasClass(_body, 'aside-fixed') && KTUtil.hasClass(_body, 'aside-minimize-hoverable')) {\n\t\t\tvar insideTm;\n\t\t\tvar outsideTm;\n\n // Handle Aside Hover Mode\n\t\t\tKTUtil.addEvent(_element, 'mouseenter', function(e) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tif (KTUtil.isBreakpointUp('lg') === false) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (outsideTm) {\n\t\t\t\t\tclearTimeout(outsideTm);\n\t\t\t\t\toutsideTm = null;\n\t\t\t\t}\n\n if (insideTm) {\n\t\t\t\t\tclearTimeout(insideTm);\n\t\t\t\t\tinsideTm = null;\n\t\t\t\t}\n\n\t\t\t\tinsideTm = setTimeout(function() {\n\t\t\t\t\tif (KTUtil.hasClass(_body, 'aside-minimize') && KTUtil.isBreakpointUp('lg')) {\n\t\t\t\t\t\t// Hover class\n\t\t\t\t\t\tKTUtil.addClass(_body, 'aside-minimize-hover');\n\n\t\t\t\t\t\tKTLayoutAsideMenu.getMenu().scrollUpdate();\n\t\t\t\t\t\tKTLayoutAsideMenu.getMenu().scrollTop();\n\t\t\t\t\t}\n\t\t\t\t}, 50);\n\t\t\t});\n\n\t\t\tKTUtil.addEvent(KTLayoutAside.getElement(), 'mouseleave', function(e) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tif (KTUtil.isBreakpointUp('lg') === false) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (insideTm) {\n\t\t\t\t\tclearTimeout(insideTm);\n\t\t\t\t\tinsideTm = null;\n\t\t\t\t}\n\n if (outsideTm) {\n\t\t\t\t\tclearTimeout(outsideTm);\n\t\t\t\t\toutsideTm = null;\n\t\t\t\t}\n\n\t\t\t\toutsideTm = setTimeout(function() {\n\t\t\t\t if (KTUtil.hasClass(_body, 'aside-minimize-hover') && KTUtil.isBreakpointUp('lg')) {\n\t\t\t\t\t KTUtil.removeClass(_body, 'aside-minimize-hover');\n\n\t\t\t\t\t\t// Hover class\n KTLayoutAsideMenu.getMenu().scrollUpdate();\n\t\t\t\t\t\tKTLayoutAsideMenu.getMenu().scrollTop();\n\t\t\t\t\t}\n\t\t\t\t}, 100);\n\t\t\t});\n\t\t}\n\t}\n\n // Public methods\n\treturn {\n\t\tinit: function(id) {\n _body = KTUtil.getBody();\n _element = KTUtil.getById(id);\n\n if (!_element) {\n return;\n }\n\n // Initialize menu\n _init();\n _initHover();\n\t\t},\n\n\t\tgetElement: function() {\n\t\t\treturn _element;\n\t\t},\n\n getMenu: function() {\n\t\t\treturn _menuObject;\n\t\t},\n\n pauseDropdownHover: function(time) {\n\t\t\tif (_menuObject) {\n\t\t\t\t_menuObject.pauseDropdownHover(time);\n\t\t\t}\n\t\t},\n\n\t\tcloseMobileOffcanvas: function() {\n\t\t\tif (_menuObject && KTUtil.isMobileDevice()) {\n\t\t\t\t_menuObject.hide();\n\t\t\t}\n\t\t}\n\t};\n}();\n\n// Webpack support\nif (typeof module !== 'undefined') {\n\tmodule.exports = KTLayoutAsideMenu;\n}\n","\"use strict\";\n\nvar KTLayoutAsideToggle = function() {\n // Private properties\n var _body;\n var _element;\n var _toggleObject;\n\n\t// Initialize\n\tvar _init = function() {\n\t\t_toggleObject = new KTToggle(_element, _body, {\n\t\t\ttargetState: 'aside-minimize',\n\t\t\ttoggleState: 'active'\n\t\t});\n\n\t\t_toggleObject.on('toggle', function(toggle) {\n // Update sticky card\n if (typeof KTLayoutStickyCard !== 'undefined') {\n KTLayoutStickyCard.update();\n }\n\n // Pause header menu dropdowns\n if (typeof KTLayoutHeaderMenu !== 'undefined') {\n KTLayoutHeaderMenu.pauseDropdownHover(800);\n }\n\n // Pause aside menu dropdowns\n if (typeof KTLayoutAsideMenu !== 'undefined') {\n KTLayoutAsideMenu.pauseDropdownHover(800);\n }\n\n // Remember state in cookie\n\t\t\tKTCookie.setCookie('kt_aside_toggle_state', toggle.getState());\n\t\t\t// to set default minimized left aside use this cookie value in your\n\t\t\t// server side code and add \"kt-primary--minimize aside-minimize\" classes to\n\t\t\t// the body tag in order to initialize the minimized left aside mode during page loading.\n\t\t});\n\n\t\t_toggleObject.on('beforeToggle', function(toggle) {\n\t\t\tif (KTUtil.hasClass(_body, 'aside-minimize') === false && KTUtil.hasClass(_body, 'aside-minimize-hover')) {\n\t\t\t\tKTUtil.removeClass(_body, 'aside-minimize-hover');\n\t\t\t}\n\t\t});\n\t}\n\n // Public methods\n\treturn {\n\t\tinit: function(id) {\n _element = KTUtil.getById(id);\n _body = KTUtil.getBody();\n\n if (!_element) {\n return;\n }\n\n // Initialize\n _init();\n\t\t},\n\n getElement: function() {\n return _element;\n },\n\n getToggle: function() {\n\t\t\treturn _toggleObject;\n\t\t},\n\n\t\tonToggle: function(handler) {\n\t\t\tif (typeof _toggleObject.element !== 'undefined') {\n\t\t\t\t_toggleObject.on('toggle', handler);\n\t\t\t}\n\t\t}\n\t};\n}();\n\n// Webpack support\nif (typeof module !== 'undefined') {\n\tmodule.exports = KTLayoutAsideToggle;\n}\n","\"use strict\";\n\nvar KTLayoutAside = function() {\n // Private properties\n var _body;\n var _element;\n var _offcanvasObject;\n\n // Private functions\n\t// Initialize\n\tvar _init = function() {\n\t\tvar offcanvasClass = KTUtil.hasClass(_element, 'aside-offcanvas-default') ? 'aside-offcanvas-default' : 'aside';\n\n // Initialize mobile aside offcanvas\n\t\t_offcanvasObject = new KTOffcanvas(_element, {\n\t\t\tbaseClass: offcanvasClass,\n\t\t\toverlay: true,\n\t\t\tcloseBy: 'kt_aside_close_btn',\n\t\t\ttoggleBy: {\n\t\t\t\ttarget: 'kt_aside_mobile_toggle',\n\t\t\t\tstate: 'mobile-toggle-active'\n\t\t\t}\n\t\t});\n\t}\n\n // Public methods\n\treturn {\n\t\tinit: function(id) {\n _element = KTUtil.getById(id);\n _body = KTUtil.getBody();\n\n if (!_element) {\n return;\n }\n\n // Initialize\n _init();\n },\n\n getElement: function() {\n return _element;\n },\n\n getOffcanvas: function() {\n return _offcanvasObject;\n },\n\n isFixed: function() {\n return KTUtil.hasClass(_body, 'aside-fixed');\n },\n\n isMinimized: function() {\n return (KTUtil.hasClass(_body, 'aside-fixed') && KTUtil.hasClass(_body, 'aside-minimize'));\n },\n\n isHoverable: function() {\n return (KTUtil.hasClass(_body, 'aside-fixed') && KTUtil.hasClass(_body, 'aside-minimize-hoverable'));\n }\n\t};\n}();\n\n// Webpack support\nif (typeof module !== 'undefined') {\n\tmodule.exports = KTLayoutAside;\n}\n","\"use strict\";\n\nvar KTLayoutBrand = function() {\n // Private properties\n var _element;\n\n // Private functions\n var _getHeight = function() {\n var height = 0;\n\n if (_element) {\n height = KTUtil.actualHeight(_element);\n }\n\n return height;\n }\n\n // Public methods\n\treturn {\n\t\tinit: function(id) {\n _element = KTUtil.getById(id);\n\n if (!_element) {\n return;\n }\n\t\t},\n\n getElement: function() {\n return _element;\n },\n\n getHeight: function() {\n return _getHeight();\n }\n\t};\n}();\n\n// Webpack support\nif (typeof module !== 'undefined') {\n\tmodule.exports = KTLayoutBrand;\n}\n","\"use strict\";\n\nvar KTLayoutContent = function() {\n // Private properties\n var _element;\n\n\t// Private functions\n\tvar _getHeight = function() {\n\t\tvar height;\n\n\t\theight = KTUtil.getViewPort().height;\n\n if (_element) {\n height = height - parseInt(KTUtil.css(_element, 'paddingTop')) - parseInt(KTUtil.css(_element, 'paddingBottom'));\n }\n\n height = height - KTLayoutHeader.getHeight();\n height = height - KTLayoutSubheader.getHeight();\n height = height - KTLayoutFooter.getHeight();\n\n\t\treturn height;\n\t}\n\n // Public methods\n\treturn {\n\t\tinit: function(id) {\n _element = KTUtil.getById(id);\n\t\t},\n\n\t\tgetHeight: function() {\n\t\t\treturn _getHeight();\n\t\t},\n\n getElement: function() {\n return _element;\n }\n\t};\n}();\n\n// Webpack support\nif (typeof module !== 'undefined') {\n\tmodule.exports = KTLayoutContent;\n}\n","\"use strict\";\n\nvar KTLayoutFooter = function() {\n // Private properties\n var _element;\n\n\t// Private functions\n\tvar _getHeight = function() {\n\t\tvar height = 0;\n\n if (_element) {\n height = KTUtil.actualHeight(_element);\n }\n\n\t\treturn height;\n\t}\n\n // Public methods\n\treturn {\n\t\tinit: function(id) {\n _element = KTUtil.getById(id);\n\t\t},\n\n\t\tgetHeight: function() {\n\t\t\treturn _getHeight();\n\t\t},\n\n getElement: function() {\n return _element;\n }\n\t};\n}();\n\n// Webpack support\nif (typeof module !== 'undefined') {\n\tmodule.exports = KTLayoutFooter;\n}\n","\"use strict\";\n\nvar KTLayoutHeaderMenu = function() {\n // Private properties\n\tvar _menuElement;\n var _menuObject;\n var _offcanvasElement;\n var _offcanvasObject;\n\n // Private functions\n\tvar _init = function() {\n\t\t_offcanvasObject = new KTOffcanvas(_offcanvasElement, {\n\t\t\toverlay: true,\n\t\t\tbaseClass: 'header-menu-wrapper',\n\t\t\tcloseBy: 'kt_header_menu_mobile_close_btn',\n\t\t\ttoggleBy: {\n\t\t\t\ttarget: 'kt_header_mobile_toggle',\n\t\t\t\tstate: 'mobile-toggle-active'\n\t\t\t}\n\t\t});\n\t\t\n\t\t_menuObject = new KTMenu(_menuElement, {\n\t\t\tsubmenu: {\n\t\t\t\tdesktop: 'dropdown',\n\t\t\t\ttablet: 'accordion',\n\t\t\t\tmobile: 'accordion'\n\t\t\t},\n\t\t\taccordion: {\n\t\t\t\tslideSpeed: 200, // accordion toggle slide speed in milliseconds\n\t\t\t\texpandAll: false // allow having multiple expanded accordions in the menu\n\t\t\t}\n\t\t});\n\n\t\t// Close aside offcanvas panel before page reload On tablet and mobile\n _menuObject.on('linkClick', function(menu) {\n if (KTUtil.isBreakpointDown('lg')) { // Tablet and mobile mode\n _offcanvasObject.hide(); // Hide offcanvas after general link click\n }\n });\n\t}\n\n // Public methods\n\treturn {\n init: function(menuId, offcanvasId) {\n _menuElement = KTUtil.getById(menuId);\n _offcanvasElement = KTUtil.getById(offcanvasId);\n\n if (!_menuElement) {\n return;\n }\n\n // Initialize menu\n _init();\n\t\t},\n\n\t\tgetMenuElement: function() {\n\t\t\treturn _menuElement;\n\t\t},\n\n getOffcanvasElement: function() {\n\t\t\treturn _offcanvasElement;\n\t\t},\n\n getMenu: function() {\n\t\t\treturn _menuObject;\n\t\t},\n\n\t\tpauseDropdownHover: function(time) {\n\t\t\tif (_menuObject) {\n\t\t\t\t_menuObject.pauseDropdownHover(time);\n\t\t\t}\n\t\t},\n\n getOffcanvas: function() {\n\t\t\treturn _offcanvasObject;\n\t\t},\n\n\t\tcloseMobileOffcanvas: function() {\n\t\t\tif (_menuObject && KTUtil.isMobileDevice()) {\n\t\t\t\t_offcanvasObject.hide();\n\t\t\t}\n\t\t}\n\t};\n}();\n\n// Webpack support\nif (typeof module !== 'undefined') {\n\tmodule.exports = KTLayoutHeaderMenu;\n}\n","\"use strict\";\n\nvar KTLayoutHeaderTopbar = function() {\n // Private properties\n\tvar _toggleElement;\n var _toggleObject;\n\n // Private functions\n var _init = function() {\n _toggleObject = new KTToggle(_toggleElement, KTUtil.getBody(), {\n targetState: 'topbar-mobile-on',\n toggleState: 'active',\n });\n }\n\n // Public methods\n\treturn {\n\t\tinit: function(id) {\n _toggleElement = KTUtil.getById(id);\n\n\t\t\tif (!_toggleElement) {\n return;\n }\n\n // Initialize\n _init();\n\t\t},\n\n getToggleElement: function() {\n return _toggleElement;\n }\n\t};\n}();\n\n// Webpack support\nif (typeof module !== 'undefined') {\n\tmodule.exports = KTLayoutHeaderTopbar;\n}\n","\"use strict\";\n\nvar KTLayoutHeader = function() {\n // Private properties\n var _element;\n var _elementForMobile;\n var _object;\n\n\t// Private functions\n // Get Height\n var _getHeight = function() {\n var height = 0;\n\n if (_element) {\n height = KTUtil.actualHeight(_element) + 1;\n }\n\n return height;\n }\n\n // Get Height\n var _getHeightForMobile = function() {\n var height;\n\n height = KTUtil.actualHeight(_elementForMobile);\n\n return height;\n }\n\n // Public Methods\n\treturn {\n\t\tinit: function(id, idForMobile) {\n _element = KTUtil.getById(id);\n _elementForMobile = KTUtil.getById(idForMobile);\n\n if (!_element) {\n return;\n }\n\t\t},\n\n isFixed: function() {\n return KTUtil.hasClass(KTUtil.getBody(), 'header-fixed')\n },\n\n isFixedForMobile: function() {\n return KTUtil.hasClass(KTUtil.getBody(), 'header-mobile-fixed')\n },\n\n getElement: function() {\n return _element;\n },\n\n getElementForMobile: function() {\n return _elementForMobile;\n },\n\n getHeader: function() {\n return _object;\n },\n\n getHeight: function() {\n return _getHeight();\n },\n\n getHeightForMobile: function() {\n return _getHeightForMobile();\n }\n\t};\n}();\n\n// Webpack support\nif (typeof module !== 'undefined') {\n\tmodule.exports = KTLayoutHeader;\n}\n","\"use strict\";\n\nvar KTLayoutStickyCard = function() {\n // Private properties\n\tvar _element;\n var _object;\n\n\t// Private functions\n\tvar _init = function() {\n\t\tvar offset = 300;\n\n\t\tif (typeof KTLayoutHeader !== 'undefined') {\n\t\t\toffset = KTLayoutHeader.getHeight();\n\t\t}\n\n _object = new KTCard(_element, {\n\t\t\tsticky: {\n\t\t\t\toffset: offset,\n\t\t\t\tzIndex: 90,\n\t\t\t\tposition: {\n\t\t\t\t\ttop: function() {\n\t\t\t\t\t\tvar pos = 0;\n var body = KTUtil.getBody();\n\n\t\t\t\t\t\tif (KTUtil.isBreakpointUp('lg')) {\n\t\t\t\t\t\t\tif (typeof KTLayoutHeader !== 'undefined' && KTLayoutHeader.isFixed()) {\n\t\t\t\t\t\t\t\tpos = pos + KTLayoutHeader.getHeight();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (typeof KTLayoutSubheader !== 'undefined' && KTLayoutSubheader.isFixed()) {\n\t\t\t\t\t\t\t\tpos = pos + KTLayoutSubheader.getHeight();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (typeof KTLayoutHeader !== 'undefined' && KTLayoutHeader.isFixedForMobile()) {\n\t\t\t\t\t\t\t\tpos = pos + KTLayoutHeader.getHeightForMobile();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpos = pos - 1; // remove header border width\n\n\t\t\t\t\t\treturn pos;\n\t\t\t\t\t},\n\t\t\t\t\tleft: function(card) {\n\t\t\t\t\t\treturn KTUtil.offset(_element).left;\n\t\t\t\t\t},\n\t\t\t\t\tright: function(card) {\n\t\t\t\t\t\tvar body = KTUtil.getBody();\n\n\t\t\t\t\t\tvar cardWidth = parseInt(KTUtil.css(_element, 'width'));\n\t\t\t\t\t\tvar bodyWidth = parseInt(KTUtil.css(body, 'width'));\n\t\t\t\t\t\tvar cardOffsetLeft = KTUtil.offset(_element).left;\n\n\t\t\t\t\t\treturn bodyWidth - cardWidth - cardOffsetLeft;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t_object.initSticky();\n\n\t\tKTUtil.addResizeHandler(function() {\n\t\t\t_object.updateSticky();\n\t\t});\n\t}\n\n // Public methods\n\treturn {\n\t\tinit: function(id) {\n _element = KTUtil.getById(id);\n\n if (!_element) {\n return;\n }\n\n // Initialize\n\t\t\t_init();\n\t\t},\n\n\t\tupdate: function() {\n\t\t\tif (_object) {\n\t\t\t\t_object.updateSticky();\n\t\t\t}\n\t\t}\n\t};\n}();\n\n// Webpack support\nif (typeof module !== 'undefined') {\n\tmodule.exports = KTLayoutStickyCard;\n}\n","\"use strict\";\n\nvar KTLayoutStretchedCard = function() {\n // Private properties\n\tvar _element;\n\n\t// Private functions\n\tvar _init = function() {\n\t\tvar scroll = KTUtil.find(_element, '.card-scroll');\n\t\tvar cardBody = KTUtil.find(_element, '.card-body');\n\t\tvar cardHeader = KTUtil.find(_element, '.card-header');\n\n\t\tvar height = KTLayoutContent.getHeight();\n\n\t\theight = height - parseInt(KTUtil.actualHeight(cardHeader));\n\n\t\theight = height - parseInt(KTUtil.css(_element, 'marginTop')) - parseInt(KTUtil.css(_element, 'marginBottom'));\n\t\theight = height - parseInt(KTUtil.css(_element, 'paddingTop')) - parseInt(KTUtil.css(_element, 'paddingBottom'));\n\n\t\theight = height - parseInt(KTUtil.css(cardBody, 'paddingTop')) - parseInt(KTUtil.css(cardBody, 'paddingBottom'));\n\t\theight = height - parseInt(KTUtil.css(cardBody, 'marginTop')) - parseInt(KTUtil.css(cardBody, 'marginBottom'));\n\n\t\theight = height - 3;\n\n\t\tKTUtil.css(scroll, 'height', height + 'px');\n\t}\n\n // Public methods\n\treturn {\n\t\tinit: function(id) {\n _element = KTUtil.getById(id);\n\n if (!_element) {\n return;\n }\n\n // Initialize\n\t\t\t_init();\n\n // Re-calculate on window resize\n KTUtil.addResizeHandler(function() {\n\t\t\t\t_init();\n\t\t\t});\n\t\t},\n\n\t\tupdate: function() {\n\t\t\t_init();\n\t\t}\n\t};\n}();\n\n// Webpack support\nif (typeof module !== 'undefined') {\n\tmodule.exports = KTLayoutStretchedCard;\n}\n","\"use strict\";\n\nvar KTLayoutSubheader = function() {\n // Private properties\n var _element;\n\n // Private functions\n var _getHeight = function() {\n var height = 0;\n\n if (_element) {\n height = KTUtil.actualHeight(_element);\n }\n\n return height;\n }\n\n // Public methods\n\treturn {\n\t\tinit: function(id) {\n _element = KTUtil.getById(id);\n\n if (!_element) {\n return;\n }\n\t\t},\n\n isFixed: function() {\n return KTUtil.hasClass(KTUtil.getBody(), 'subheader-fixed');\n },\n\n getElement: function() {\n return _element;\n },\n\n getHeight: function() {\n return _getHeight();\n }\n\t};\n}();\n\n// Webpack support\nif (typeof module !== 'undefined') {\n\tmodule.exports = KTLayoutSubheader;\n}\n","\"use strict\";\n\n// Class definition\nvar KTLayoutChat = function () {\n\t// Private functions\n\tvar _init = function (element) {\n\t\tvar scrollEl = KTUtil.find(element, '.scroll');\n\t\tvar cardBodyEl = KTUtil.find(element, '.card-body');\n\t\tvar cardHeaderEl = KTUtil.find(element, '.card-header');\n\t\tvar cardFooterEl = KTUtil.find(element, '.card-footer');\n\n\t\tif (!scrollEl) {\n\t\t\treturn;\n\t\t}\n\n\t\t// initialize perfect scrollbar(see: https://github.com/utatti/perfect-scrollbar)\n\t\tKTUtil.scrollInit(scrollEl, {\n\t\t\twindowScroll: false, // allow browser scroll when the scroll reaches the end of the side\n\t\t\tmobileNativeScroll: true, // enable native scroll for mobile\n\t\t\tdesktopNativeScroll: false, // disable native scroll and use custom scroll for desktop\n\t\t\tresetHeightOnDestroy: true, // reset css height on scroll feature destroyed\n\t\t\thandleWindowResize: true, // recalculate hight on window resize\n\t\t\trememberPosition: true, // remember scroll position in cookie\n\t\t\theight: function() { // calculate height\n\t\t\t\tvar height;\n\n\t\t\t\tif (KTUtil.isBreakpointDown('lg')) { // Mobile mode\n\t\t\t\t\treturn KTUtil.hasAttr(scrollEl, 'data-mobile-height') ? parseInt(KTUtil.attr(scrollEl, 'data-mobile-height')) : 400;\n\t\t\t\t} else if (KTUtil.isBreakpointUp('lg') && KTUtil.hasAttr(scrollEl, 'data-height')) { // Desktop Mode\n\t\t\t\t\treturn parseInt(KTUtil.attr(scrollEl, 'data-height'));\n\t\t\t\t} else {\n\t\t\t\t\theight = KTLayoutContent.getHeight();\n\n\t\t\t\t\tif (scrollEl) {\n\t\t\t\t\t\theight = height - parseInt(KTUtil.css(scrollEl, 'margin-top')) - parseInt(KTUtil.css(scrollEl, 'margin-bottom'));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (cardHeaderEl) {\n\t\t\t\t\t\theight = height - parseInt(KTUtil.css(cardHeaderEl, 'height'));\n\t\t\t\t\t\theight = height - parseInt(KTUtil.css(cardHeaderEl, 'margin-top')) - parseInt(KTUtil.css(cardHeaderEl, 'margin-bottom'));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (cardBodyEl) {\n\t\t\t\t\t\theight = height - parseInt(KTUtil.css(cardBodyEl, 'padding-top')) - parseInt(KTUtil.css(cardBodyEl, 'padding-bottom'));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (cardFooterEl) {\n\t\t\t\t\t\theight = height - parseInt(KTUtil.css(cardFooterEl, 'height'));\n\t\t\t\t\t\theight = height - parseInt(KTUtil.css(cardFooterEl, 'margin-top')) - parseInt(KTUtil.css(cardFooterEl, 'margin-bottom'));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove additional space\n\t\t\t\theight = height - 2;\n\n\t\t\t\treturn height;\n\t\t\t}\n\t\t});\n\n\t\t// attach events\n\t\tKTUtil.on(element, '.card-footer textarea', 'keydown', function(e) {\n\t\t\tif (e.keyCode == 13) {\n\t\t\t\t_handeMessaging(element);\n\t\t\t\te.preventDefault();\n\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\n\t\tKTUtil.on(element, '.card-footer .chat-send', 'click', function(e) {\n\t\t\t_handeMessaging(element);\n\t\t});\n\t}\n\n\tvar _handeMessaging = function(element) {\n\t\tvar messagesEl = KTUtil.find(element, '.messages');\n\t\tvar scrollEl = KTUtil.find(element, '.scroll');\n var textarea = KTUtil.find(element, 'textarea');\n\n if (textarea.value.length === 0 ) {\n return;\n }\n\n\t\tvar node = document.createElement(\"DIV\");\n\t\tKTUtil.addClass(node, 'd-flex flex-column mb-5 align-items-end');\n\n\t\tvar html = '';\n\t\thtml += '
';\n\t\thtml += '\t
';\n\t\thtml += '\t\t2 Hours';\n\t\thtml += '\t\tYou';\n\t\thtml += '\t
';\n\t\thtml += '\t
';\n\t\thtml += '\t\t\"Pic\"';\n\t\thtml += '\t
';\n\t\thtml += '
';\n\t\thtml += '
' + textarea.value + '
';\n\n\t\tKTUtil.setHTML(node, html);\n\t\tmessagesEl.appendChild(node);\n\t\ttextarea.value = '';\n\t\tscrollEl.scrollTop = parseInt(KTUtil.css(messagesEl, 'height'));\n\n\t\tvar ps;\n\t\tif (ps = KTUtil.data(scrollEl).get('ps')) {\n\t\t\tps.update();\n\t\t}\n\n\t\tsetTimeout(function() {\n\t\t\tvar node = document.createElement(\"DIV\");\n\t\t\tKTUtil.addClass(node, 'd-flex flex-column mb-5 align-items-start');\n\n\t\t\tvar html = '';\n\t\t\thtml += '
';\n\t\t\thtml += '\t
';\n\t\t\thtml += '\t\t\"Pic\"';\n\t\t\thtml += '\t
';\n\t\t\thtml += '\t
';\n\t\t\thtml += '\t\tMatt Pears';\n\t\t\thtml += '\t\tJust now';\n\t\t\thtml += '\t
';\n\t\t\thtml += '
';\n\t\t\thtml += '
';\n\t\t\thtml += 'Right before vacation season we have the next Big Deal for you.';\n\t\t\thtml += '
';\n\n\t\t\tKTUtil.setHTML(node, html);\n\t\t\tmessagesEl.appendChild(node);\n\t\t\ttextarea.value = '';\n\t\t\tscrollEl.scrollTop = parseInt(KTUtil.css(messagesEl, 'height'));\n\n\t\t\tvar ps;\n\t\t\tif (ps = KTUtil.data(scrollEl).get('ps')) {\n\t\t\t\tps.update();\n\t\t\t}\n\t\t}, 2000);\n\t}\n\n\t// Public methods\n\treturn {\n\t\tinit: function(id) {\n\t\t\t// Init modal chat example\n\t\t\t_init(KTUtil.getById(id));\n\n\t\t\t// Trigger click to show popup modal chat on page load\n\t\t\tif (encodeURI(window.location.hostname) == 'keenthemes.com' || encodeURI(window.location.hostname) == 'www.keenthemes.com') {\n\t\t\t\tsetTimeout(function() {\n\t\t if (!KTCookie.getCookie('kt_app_chat_shown')) {\n\t\t var expires = new Date(new Date().getTime() + 60 * 60 * 1000); // expire in 60 minutes from now\n\n\t\t\t\t\t\tKTCookie.setCookie('kt_app_chat_shown', 1, { expires: expires });\n\n\t\t\t\t\t\tif (KTUtil.getById('kt_app_chat_launch_btn')) {\n\t\t\t\t\t\t\tKTUtil.getById('kt_app_chat_launch_btn').click();\n\t\t\t\t\t\t}\n\t\t }\n\t\t }, 2000);\n\t }\n },\n\n setup: function(element) {\n _init(element);\n }\n\t};\n}();\n\n// Webpack support\nif (typeof module !== 'undefined') {\n\tmodule.exports = KTLayoutChat;\n}\n","\"use strict\";\n\nvar KTLayoutDemoPanel = function() {\n // Private properties\n var _element;\n var _offcanvasObject;\n\n // Private functions\n var _init = function() {\n _offcanvasObject = new KTOffcanvas(_element, {\n overlay: true,\n baseClass: 'offcanvas',\n placement: 'right',\n closeBy: 'kt_demo_panel_close',\n toggleBy: 'kt_demo_panel_toggle'\n });\n\n var header = KTUtil.find(_element, '.offcanvas-header');\n var content = KTUtil.find(_element, '.offcanvas-content');\n var wrapper = KTUtil.find(_element, '.offcanvas-wrapper');\n var footer = KTUtil.find(_element, '.offcanvas-footer');\n\n KTUtil.scrollInit(wrapper, {\n disableForMobile: true,\n resetHeightOnDestroy: true,\n handleWindowResize: true,\n height: function() {\n var height = parseInt(KTUtil.getViewPort().height);\n\n if (header) {\n height = height - parseInt(KTUtil.actualHeight(header));\n height = height - parseInt(KTUtil.css(header, 'marginTop'));\n height = height - parseInt(KTUtil.css(header, 'marginBottom'));\n }\n\n if (content) {\n height = height - parseInt(KTUtil.css(content, 'marginTop'));\n height = height - parseInt(KTUtil.css(content, 'marginBottom'));\n }\n\n if (wrapper) {\n height = height - parseInt(KTUtil.css(wrapper, 'marginTop'));\n height = height - parseInt(KTUtil.css(wrapper, 'marginBottom'));\n }\n\n if (footer) {\n height = height - parseInt(KTUtil.actualHeight(footer));\n height = height - parseInt(KTUtil.css(footer, 'marginTop'));\n height = height - parseInt(KTUtil.css(footer, 'marginBottom'));\n }\n\n height = height - parseInt(KTUtil.css(_element, 'paddingTop'));\n height = height - parseInt(KTUtil.css(_element, 'paddingBottom'));\n\n height = height - 2;\n\n return height;\n }\n });\n\n if (typeof offcanvas !== 'undefined' && offcanvas.length === 0) {\n offcanvas.on('hide', function() {\n var expires = new Date(new Date().getTime() + 60 * 60 * 1000); // expire in 60 minutes from now\n KTCookie.setCookie('kt_demo_panel_shown', 1, {expires: expires});\n });\n }\n }\n\n var _remind = function() {\n if (!(encodeURI(window.location.hostname) == 'keenthemes.com' || encodeURI(window.location.hostname) == 'www.keenthemes.com')) {\n return;\n }\n\n setTimeout(function() {\n if (!KTCookie.getCookie('kt_demo_panel_shown')) {\n var expires = new Date(new Date().getTime() + 15 * 60 * 1000); // expire in 15 minutes from now\n KTCookie.setCookie('kt_demo_panel_shown', 1, { expires: expires });\n if (typeof _offcanvasObject !== 'undefined') {\n _offcanvasObject.show();\n }\n }\n }, 4000);\n }\n\n // Public methods\n return {\n init: function(id) {\n _element = KTUtil.getById(id);\n\n if (!_element) {\n return;\n }\n\n // Initialize\n _init();\n\n // Remind\n _remind();\n }\n };\n}();\n\n// Webpack support\nif (typeof module !== 'undefined') {\n\tmodule.exports = KTLayoutDemoPanel;\n}\n","\"use strict\";\n\nvar KTLayoutExamples = function() {\n\n var initDefaultMode = function(element) {\n var elements = element;\n if (typeof elements === 'undefined') {\n elements = document.querySelectorAll('.example:not(.example-compact):not(.example-hover):not(.example-basic)');\n }\n\n if (elements && elements.length > 0 ) {\n for (var i = 0; i < elements.length; ++i) {\n var example = elements[i];\n var copy = KTUtil.find(example, '.example-copy');\n\n if (copy) {\n var clipboard = new ClipboardJS(copy, {\n target: function(trigger) {\n var example = trigger.closest('.example');\n var el = KTUtil.find(example, '.example-code .tab-pane.active');\n\n if (!el) {\n el = KTUtil.find(example, '.example-code');\n }\n\n return el;\n }\n });\n\n clipboard.on('success', function(e) {\n KTUtil.addClass(e.trigger, 'example-copied');\n e.clearSelection();\n\n setTimeout(function() {\n KTUtil.removeClass(e.trigger, 'example-copied');\n }, 2000);\n });\n }\n }\n }\n }\n\n var initCompactMode = function(element) {\n var example,code,toggle,copy, clipboard;\n\n var elements = element;\n if (typeof elements === 'undefined') {\n var elements = document.querySelectorAll('.example.example-compact');\n }\n\n if (elements && elements.length > 0 ) {\n for (var i = 0; i < elements.length; ++i) {\n var example = elements[i];\n var toggle = KTUtil.find(example, '.example-toggle');\n var copy = KTUtil.find(example, '.example-copy');\n\n // Handle toggle\n KTUtil.addEvent(toggle, 'click', function() {\n var example = this.closest('.example');\n var code = KTUtil.find(example, '.example-code');\n var the = this;\n\n if (KTUtil.hasClass(this, 'example-toggled')) {\n KTUtil.slideUp(code, 300, function() {\n KTUtil.removeClass(the, 'example-toggled');\n KTUtil.removeClass(code, 'example-code-on');\n KTUtil.hide(code);\n });\n } else {\n KTUtil.addClass(code, 'example-code-on');\n KTUtil.addClass(this, 'example-toggled');\n KTUtil.slideDown(code, 300, function() {\n KTUtil.show(code);\n });\n }\n });\n\n // Handle copy\n if (copy) {\n var clipboard = new ClipboardJS(copy, {\n target: function(trigger) {\n var example = trigger.closest('.example');\n var el = KTUtil.find(example, '.example-code .tab-pane.active');\n\n if (!el) {\n el = KTUtil.find(example, '.example-code');\n }\n\n return el;\n }\n });\n\n clipboard.on('success', function(e) {\n KTUtil.addClass(e.trigger, 'example-copied');\n e.clearSelection();\n\n setTimeout(function() {\n KTUtil.removeClass(e.trigger, 'example-copied');\n }, 2000);\n });\n }\n }\n }\n }\n\n return {\n init: function(element, options) {\n initDefaultMode(element);\n initCompactMode(element);\n }\n };\n}();\n\n// webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = KTLayoutExamples;\n}\n","\"use strict\";\n\nvar KTLayoutQuickActions = function() {\n // Private properties\n var _element;\n var _offcanvasObject;\n\n // Private functions\n var _init = function() {\n var header = KTUtil.find(_element, '.offcanvas-header');\n var content = KTUtil.find(_element, '.offcanvas-content');\n\n _offcanvasObject = new KTOffcanvas(_element, {\n overlay: true,\n baseClass: 'offcanvas',\n placement: 'right',\n closeBy: 'kt_quick_actions_close',\n toggleBy: 'kt_quick_actions_toggle'\n });\n\n KTUtil.scrollInit(content, {\n disableForMobile: true,\n resetHeightOnDestroy: true,\n handleWindowResize: true,\n height: function() {\n var height = parseInt(KTUtil.getViewPort().height);\n\n if (header) {\n height = height - parseInt(KTUtil.actualHeight(header));\n height = height - parseInt(KTUtil.css(header, 'marginTop'));\n height = height - parseInt(KTUtil.css(header, 'marginBottom'));\n }\n\n if (content) {\n height = height - parseInt(KTUtil.css(content, 'marginTop'));\n height = height - parseInt(KTUtil.css(content, 'marginBottom'));\n }\n\n height = height - parseInt(KTUtil.css(_element, 'paddingTop'));\n height = height - parseInt(KTUtil.css(_element, 'paddingBottom'));\n\n height = height - 2;\n\n return height;\n }\n });\n }\n\n // Public methods\n return {\n init: function(id) {\n _element = KTUtil.getById(id);\n\n if (!_element) {\n return;\n }\n\n // Initialize\n _init();\n },\n\n getElement: function() {\n return _element;\n }\n };\n}();\n\n// Webpack support\nif (typeof module !== 'undefined') {\n\tmodule.exports = KTLayoutQuickActions;\n}\n","\"use strict\";\n\nvar KTLayoutQuickCartPanel = function() {\n // Private properties\n var _element;\n var _offcanvasObject;\n\n // Private functions\n var _init = function() {\n _offcanvasObject = new KTOffcanvas(_element, {\n overlay: true,\n baseClass: 'offcanvas',\n placement: 'right',\n closeBy: 'kt_quick_cart_close',\n toggleBy: 'kt_quick_cart_toggle'\n });\n\n var header = KTUtil.find(_element, '.offcanvas-header');\n var content = KTUtil.find(_element, '.offcanvas-content');\n var wrapper = KTUtil.find(_element, '.offcanvas-wrapper');\n var footer = KTUtil.find(_element, '.offcanvas-footer');\n\n KTUtil.scrollInit(wrapper, {\n disableForMobile: true,\n resetHeightOnDestroy: true,\n handleWindowResize: true,\n height: function() {\n var height = parseInt(KTUtil.getViewPort().height);\n\n if (header) {\n height = height - parseInt(KTUtil.actualHeight(header));\n height = height - parseInt(KTUtil.css(header, 'marginTop'));\n height = height - parseInt(KTUtil.css(header, 'marginBottom'));\n }\n\n if (content) {\n height = height - parseInt(KTUtil.css(content, 'marginTop'));\n height = height - parseInt(KTUtil.css(content, 'marginBottom'));\n }\n\n if (wrapper) {\n height = height - parseInt(KTUtil.css(wrapper, 'marginTop'));\n height = height - parseInt(KTUtil.css(wrapper, 'marginBottom'));\n }\n\n if (footer) {\n height = height - parseInt(KTUtil.actualHeight(footer));\n height = height - parseInt(KTUtil.css(footer, 'marginTop'));\n height = height - parseInt(KTUtil.css(footer, 'marginBottom'));\n }\n\n height = height - parseInt(KTUtil.css(_element, 'paddingTop'));\n height = height - parseInt(KTUtil.css(_element, 'paddingBottom'));\n\n height = height - 2;\n\n return height;\n }\n });\n }\n\n // Public methods\n return {\n init: function(id) {\n _element = KTUtil.getById(id);\n\n if (!_element) {\n return;\n }\n\n // Initialize\n _init();\n }\n };\n}();\n\n// Webpack support\nif (typeof module !== 'undefined') {\n\tmodule.exports = KTLayoutQuickCartPanel;\n}\n","\"use strict\";\n\nvar KTLayoutQuickNotifications = function() {\n // Private properties\n var _element;\n var _offcanvasObject;\n\n // Private functions\n var _init = function() {\n var header = KTUtil.find(_element, '.offcanvas-header');\n var content = KTUtil.find(_element, '.offcanvas-content');\n\n _offcanvasObject = new KTOffcanvas(_element, {\n overlay: true,\n baseClass: 'offcanvas',\n placement: 'right',\n closeBy: 'kt_quick_notifications_close',\n toggleBy: 'kt_quick_notifications_toggle'\n });\n\n KTUtil.scrollInit(content, {\n disableForMobile: true,\n resetHeightOnDestroy: true,\n handleWindowResize: true,\n height: function() {\n var height = parseInt(KTUtil.getViewPort().height);\n\n if (header) {\n height = height - parseInt(KTUtil.actualHeight(header));\n height = height - parseInt(KTUtil.css(header, 'marginTop'));\n height = height - parseInt(KTUtil.css(header, 'marginBottom'));\n }\n\n if (content) {\n height = height - parseInt(KTUtil.css(content, 'marginTop'));\n height = height - parseInt(KTUtil.css(content, 'marginBottom'));\n }\n\n height = height - parseInt(KTUtil.css(_element, 'paddingTop'));\n height = height - parseInt(KTUtil.css(_element, 'paddingBottom'));\n\n height = height - 2;\n\n return height;\n }\n });\n }\n\n // Public methods\n return {\n init: function(id) {\n _element = KTUtil.getById(id);\n\n if (!_element) {\n return;\n }\n\n // Initialize\n _init();\n },\n\n getElement: function() {\n return _element;\n }\n };\n}();\n\n// Webpack support\nif (typeof module !== 'undefined') {\n\tmodule.exports = KTLayoutQuickNotifications;\n}\n","\"use strict\";\n\nvar KTLayoutQuickPanel = function() {\n // Private properties\n var _element;\n var _offcanvasObject;\n var _notificationsElement;\n var _logsElement;\n var _settingsElement;\n\n // Private functions\n var _getContentHeight = function() {\n var height;\n\n var header = KTUtil.find(_element, '.offcanvas-header');\n var content = KTUtil.find(_element, '.offcanvas-content');\n\n var height = parseInt(KTUtil.getViewPort().height);\n\n if (header) {\n height = height - parseInt(KTUtil.actualHeight(header));\n height = height - parseInt(KTUtil.css(header, 'marginTop'));\n height = height - parseInt(KTUtil.css(header, 'marginBottom'));\n }\n\n if (content) {\n height = height - parseInt(KTUtil.css(content, 'marginTop'));\n height = height - parseInt(KTUtil.css(content, 'marginBottom'));\n }\n\n height = height - parseInt(KTUtil.css(_element, 'paddingTop'));\n height = height - parseInt(KTUtil.css(_element, 'paddingBottom'));\n\n height = height - 2;\n\n return height;\n }\n\n var _init = function() {\n _offcanvasObject = new KTOffcanvas(_element, {\n overlay: true,\n baseClass: 'offcanvas',\n placement: 'right',\n closeBy: 'kt_quick_panel_close',\n toggleBy: 'kt_quick_panel_toggle'\n });\n }\n\n var _initNotifications = function() {\n KTUtil.scrollInit(_notificationsElement, {\n mobileNativeScroll: true,\n resetHeightOnDestroy: true,\n handleWindowResize: true,\n height: function() {\n return _getContentHeight();\n }\n });\n }\n\n var _initLogs = function() {\n KTUtil.scrollInit(_logsElement, {\n mobileNativeScroll: true,\n resetHeightOnDestroy: true,\n handleWindowResize: true,\n height: function() {\n return _getContentHeight();\n }\n });\n }\n\n var _initSettings = function() {\n KTUtil.scrollInit(_settingsElement, {\n mobileNativeScroll: true,\n resetHeightOnDestroy: true,\n handleWindowResize: true,\n height: function() {\n return _getContentHeight();\n }\n });\n }\n\n var _updateScrollbars = function() {\n $(_element).find('a[data-toggle=\"tab\"]').on('shown.bs.tab', function (e) {\n KTUtil.scrollUpdate(_notificationsElement);\n KTUtil.scrollUpdate(_logsElement);\n KTUtil.scrollUpdate(_settingsElement);\n });\n }\n\n // Public methods\n return {\n init: function(id) {\n _element = KTUtil.getById(id);\n _notificationsElement = KTUtil.getById('kt_quick_panel_notifications');\n _logsElement = KTUtil.getById('kt_quick_panel_logs');\n _settingsElement = KTUtil.getById('kt_quick_panel_settings');\n\n _init();\n _initNotifications();\n _initLogs();\n _initSettings();\n\n _updateScrollbars();\n }\n };\n}();\n\n// Webpack support\nif (typeof module !== 'undefined') {\n\tmodule.exports = KTLayoutQuickPanel;\n}\n","\"use strict\";\n\nvar KTLayoutQuickSearch = function() {\n // Private properties\n var _element;\n var _offcanvasObject;\n\n // Private functions\n var _init = function() {\n var header = KTUtil.find(_element, '.offcanvas-header');\n var content = KTUtil.find(_element, '.offcanvas-content');\n var form = KTUtil.find(_element, '.quick-search-form');\n var results = KTUtil.find(_element, '.quick-search-wrapper');\n\n _offcanvasObject = new KTOffcanvas(_element, {\n overlay: true,\n baseClass: 'offcanvas',\n placement: 'right',\n closeBy: 'kt_quick_search_close',\n toggleBy: 'kt_quick_search_toggle'\n });\n\n KTUtil.scrollInit(results, {\n disableForMobile: true,\n resetHeightOnDestroy: true,\n handleWindowResize: true,\n height: function() {\n var height = parseInt(KTUtil.getViewPort().height);\n\n if (header) {\n height = height - parseInt(KTUtil.actualHeight(header));\n height = height - parseInt(KTUtil.css(header, 'marginTop'));\n height = height - parseInt(KTUtil.css(header, 'marginBottom'));\n }\n\n if (content) {\n height = height - parseInt(KTUtil.css(content, 'marginTop'));\n height = height - parseInt(KTUtil.css(content, 'marginBottom'));\n }\n\n if (results) {\n height = height - parseInt(KTUtil.actualHeight(form));\n height = height - parseInt(KTUtil.css(form, 'marginTop'));\n height = height - parseInt(KTUtil.css(form, 'marginBottom'));\n\n height = height - parseInt(KTUtil.css(results, 'marginTop'));\n height = height - parseInt(KTUtil.css(results, 'marginBottom'));\n }\n\n height = height - parseInt(KTUtil.css(_element, 'paddingTop'));\n height = height - parseInt(KTUtil.css(_element, 'paddingBottom'));\n\n height = height - 2;\n\n return height;\n }\n });\n }\n\n // Public methods\n return {\n init: function(id) {\n _element = KTUtil.getById(id);\n\n if (!_element) {\n return;\n }\n\n // Initialize\n _init();\n },\n\n getElement: function() {\n return _element;\n }\n };\n}();\n\n// Webpack support\nif (typeof module !== 'undefined') {\n\tmodule.exports = KTLayoutQuickSearch;\n}\n","\"use strict\";\n\nvar KTLayoutQuickUser = function() {\n // Private properties\n var _element;\n var _offcanvasObject;\n\n // Private functions\n var _init = function() {\n var header = KTUtil.find(_element, '.offcanvas-header');\n var content = KTUtil.find(_element, '.offcanvas-content');\n\n _offcanvasObject = new KTOffcanvas(_element, {\n overlay: true,\n baseClass: 'offcanvas',\n placement: 'right',\n closeBy: 'kt_quick_user_close',\n toggleBy: 'kt_quick_user_toggle'\n });\n\n KTUtil.scrollInit(content, {\n disableForMobile: true,\n resetHeightOnDestroy: true,\n handleWindowResize: true,\n height: function() {\n var height = parseInt(KTUtil.getViewPort().height);\n\n if (header) {\n height = height - parseInt(KTUtil.actualHeight(header));\n height = height - parseInt(KTUtil.css(header, 'marginTop'));\n height = height - parseInt(KTUtil.css(header, 'marginBottom'));\n }\n\n if (content) {\n height = height - parseInt(KTUtil.css(content, 'marginTop'));\n height = height - parseInt(KTUtil.css(content, 'marginBottom'));\n }\n\n height = height - parseInt(KTUtil.css(_element, 'paddingTop'));\n height = height - parseInt(KTUtil.css(_element, 'paddingBottom'));\n\n height = height - 2;\n\n return height;\n }\n });\n }\n\n // Public methods\n return {\n init: function(id) {\n _element = KTUtil.getById(id);\n\n if (!_element) {\n return;\n }\n\n // Initialize\n _init();\n },\n\n getElement: function() {\n return _element;\n }\n };\n}();\n\n// Webpack support\nif (typeof module !== 'undefined') {\n\tmodule.exports = KTLayoutQuickUser;\n}\n","\"use strict\";\n\nvar KTLayoutScrolltop = function() {\n // Private properties\n var _element;\n var _object;\n\n // Private functions\n var _init = function() {\n _object = new KTScrolltop(_element, {\n offset: 300,\n speed: 600,\n });\n }\n\n // Public methods\n\treturn {\n\t\tinit: function(id) {\n _element = KTUtil.getById(id);\n\n if (!_element) {\n return;\n }\n\n // Initialize\n _init();\n\t\t},\n\n getElement: function() {\n return _element;\n }\n\t};\n}();\n\n// Webpack support\nif (typeof module !== 'undefined') {\n\tmodule.exports = KTLayoutScrolltop;\n}\n","\"use strict\";\n//\n// Handle User Quick Search For Dropdown, Inline and Offcanvas Search Panels\n//\n\nvar KTLayoutSearch = function() {\n // Private properties\n var _target;\n var _form;\n var _input;\n var _closeIcon;\n var _resultWrapper;\n var _resultDropdown;\n var _resultDropdownToggle;\n var _closeIconContainer;\n var _inputGroup;\n var _query = '';\n\n var _hasResult = false;\n var _timeout = false;\n var _isProcessing = false;\n var _requestTimeout = 200; // ajax request fire timeout in milliseconds\n var _spinnerClass = 'spinner spinner-sm spinner-primary';\n var _resultClass = 'quick-search-has-result';\n var _minLength = 2;\n\n // Private functions\n var _showProgress = function() {\n _isProcessing = true;\n KTUtil.addClass(_closeIconContainer, _spinnerClass);\n\n if (_closeIcon) {\n KTUtil.hide(_closeIcon);\n }\n }\n\n var _hideProgress = function() {\n _isProcessing = false;\n KTUtil.removeClass(_closeIconContainer, _spinnerClass);\n\n if (_closeIcon) {\n if (_input.value.length < _minLength) {\n KTUtil.hide(_closeIcon);\n } else {\n KTUtil.show(_closeIcon, 'flex');\n }\n }\n }\n\n var _showDropdown = function() {\n if (_resultDropdownToggle && !KTUtil.hasClass(_resultDropdown, 'show')) {\n $(_resultDropdownToggle).dropdown('toggle');\n $(_resultDropdownToggle).dropdown('update');\n }\n }\n\n var _hideDropdown = function() {\n if (_resultDropdownToggle && KTUtil.hasClass(_resultDropdown, 'show')) {\n $(_resultDropdownToggle).dropdown('toggle');\n }\n }\n\n var _processSearch = function() {\n if (_hasResult && _query === _input.value) {\n _hideProgress();\n KTUtil.addClass(_target, _resultClass);\n _showDropdown();\n KTUtil.scrollUpdate(_resultWrapper);\n\n return;\n }\n\n _query = _input.value;\n\n KTUtil.removeClass(_target, _resultClass);\n _showProgress();\n _hideDropdown();\n\n setTimeout(function() {\n $.ajax({\n url: HOST_URL + '/api/quick_search.php',\n data: {\n query: _query\n },\n dataType: 'html',\n success: function(res) {\n _hasResult = true;\n _hideProgress();\n KTUtil.addClass(_target, _resultClass);\n KTUtil.setHTML(_resultWrapper, res);\n _showDropdown();\n KTUtil.scrollUpdate(_resultWrapper);\n },\n error: function(res) {\n _hasResult = false;\n _hideProgress();\n KTUtil.addClass(_target, _resultClass);\n KTUtil.setHTML(_resultWrapper, 'Connection error. Please try again later..');\n _showDropdown();\n KTUtil.scrollUpdate(_resultWrapper);\n }\n });\n }, 1000);\n }\n\n var _handleCancel = function(e) {\n _input.value = '';\n _query = '';\n _hasResult = false;\n KTUtil.hide(_closeIcon);\n KTUtil.removeClass(_target, _resultClass);\n _hideDropdown();\n }\n\n var _handleSearch = function() {\n if (_input.value.length < _minLength) {\n _hideProgress();\n _hideDropdown();\n\n return;\n }\n\n if (_isProcessing == true) {\n return;\n }\n\n if (_timeout) {\n clearTimeout(_timeout);\n }\n\n _timeout = setTimeout(function() {\n _processSearch();\n }, _requestTimeout);\n }\n\n // Public methods\n return {\n init: function(id) {\n _target = KTUtil.getById(id);\n\n if (!_target) {\n return;\n }\n\n _form = KTUtil.find(_target, '.quick-search-form');\n _input = KTUtil.find(_target, '.form-control');\n _closeIcon = KTUtil.find(_target, '.quick-search-close');\n _resultWrapper = KTUtil.find(_target, '.quick-search-wrapper');\n _resultDropdown = KTUtil.find(_target, '.dropdown-menu');\n _resultDropdownToggle = KTUtil.find(_target, '[data-toggle=\"dropdown\"]');\n _inputGroup = KTUtil.find(_target, '.input-group');\n _closeIconContainer = KTUtil.find(_target, '.input-group .input-group-append');\n\n // Attach input keyup handler\n KTUtil.addEvent(_input, 'keyup', _handleSearch);\n KTUtil.addEvent(_input, 'focus', _handleSearch);\n\n // Prevent enter click\n _form.onkeypress = function(e) {\n var key = e.charCode || e.keyCode || 0;\n if (key == 13) {\n e.preventDefault();\n }\n }\n\n KTUtil.addEvent(_closeIcon, 'click', _handleCancel);\n }\n };\n};\n\n// Webpack support\nif (typeof module !== 'undefined') {\n module.exports = KTLayoutSearch;\n}\n\nvar KTLayoutSearchInline = KTLayoutSearch;\nvar KTLayoutSearchOffcanvas = KTLayoutSearch;\n","\"use strict\";\n\n// Initialization\nKTUtil.ready(function() {\n ////////////////////////////////////////////////////\n // Layout Base Partials(mandatory for core layout)//\n ////////////////////////////////////////////////////\n\n // Init Desktop & Mobile Headers\n if (typeof KTLayoutHeader !== 'undefined') {\n KTLayoutHeader.init('kt_header', 'kt_header_mobile');\n }\n\n // Init Header Menu\n if (typeof KTLayoutHeaderMenu !== 'undefined') {\n KTLayoutHeaderMenu.init('kt_header_menu', 'kt_header_menu_wrapper');\n }\n\n // Init Header Topbar For Mobile Mode\n if (typeof KTLayoutHeaderTopbar !== 'undefined') {\n KTLayoutHeaderTopbar.init('kt_header_mobile_topbar_toggle');\n }\n\n // Init Brand Panel For Logo\n if (typeof KTLayoutBrand !== 'undefined') {\n KTLayoutBrand.init('kt_brand');\n }\n\n // Init Aside\n if (typeof KTLayoutAside !== 'undefined') {\n KTLayoutAside.init('kt_aside');\n }\n\n // Init Aside Menu Toggle\n if (typeof KTLayoutAsideToggle !== 'undefined') {\n KTLayoutAsideToggle.init('kt_aside_toggle');\n }\n\n // Init Aside Menu\n if (typeof KTLayoutAsideMenu !== 'undefined') {\n KTLayoutAsideMenu.init('kt_aside_menu');\n }\n\n // Init Subheader\n if (typeof KTLayoutSubheader !== 'undefined') {\n KTLayoutSubheader.init('kt_subheader');\n }\n\n // Init Content\n if (typeof KTLayoutContent !== 'undefined') {\n KTLayoutContent.init('kt_content');\n }\n\n // Init Footer\n if (typeof KTLayoutFooter !== 'undefined') {\n KTLayoutFooter.init('kt_footer');\n }\n\n\n //////////////////////////////////////////////\n // Layout Extended Partials(optional to use)//\n //////////////////////////////////////////////\n\n // Init Scrolltop\n if (typeof KTLayoutScrolltop !== 'undefined') {\n KTLayoutScrolltop.init('kt_scrolltop');\n }\n\n // Init Sticky Card\n if (typeof KTLayoutStickyCard !== 'undefined') {\n KTLayoutStickyCard.init('kt_page_sticky_card');\n }\n\n // Init Stretched Card\n if (typeof KTLayoutStretchedCard !== 'undefined') {\n KTLayoutStretchedCard.init('kt_page_stretched_card');\n }\n\n // Init Code Highlighter & Preview Blocks(used to demonstrate the theme features)\n if (typeof KTLayoutExamples !== 'undefined') {\n KTLayoutExamples.init();\n }\n\n // Init Demo Selection Panel\n if (typeof KTLayoutDemoPanel !== 'undefined') {\n KTLayoutDemoPanel.init('kt_demo_panel');\n }\n\n // Init Chat App(quick modal chat)\n if (typeof KTLayoutChat !== 'undefined') {\n KTLayoutChat.init('kt_chat_modal');\n }\n\n // Init Quick Actions Offcanvas Panel\n if (typeof KTLayoutQuickActions !== 'undefined') {\n KTLayoutQuickActions.init('kt_quick_actions');\n }\n\n // Init Quick Notifications Offcanvas Panel\n if (typeof KTLayoutQuickNotifications !== 'undefined') {\n KTLayoutQuickNotifications.init('kt_quick_notifications');\n }\n\n // Init Quick Offcanvas Panel\n if (typeof KTLayoutQuickPanel!== 'undefined') {\n KTLayoutQuickPanel.init('kt_quick_panel');\n }\n\n // Init Quick User Panel\n if (typeof KTLayoutQuickUser !== 'undefined') {\n KTLayoutQuickUser.init('kt_quick_user');\n }\n\n // Init Quick Search Panel\n if (typeof KTLayoutQuickSearch !== 'undefined') {\n KTLayoutQuickSearch.init('kt_quick_search');\n }\n\n // Init Quick Cart Panel\n if (typeof KTLayoutQuickCartPanel !== 'undefined') {\n KTLayoutQuickCartPanel.init('kt_quick_cart');\n }\n\n // Init Search For Quick Search Dropdown\n if (typeof KTLayoutSearch !== 'undefined') {\n KTLayoutSearch().init('kt_quick_search_dropdown');\n }\n\n // Init Search For Quick Search Offcanvas Panel\n if (typeof KTLayoutSearchOffcanvas !== 'undefined') {\n KTLayoutSearchOffcanvas().init('kt_quick_search_offcanvas');\n }\n});\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// Keenthemes' plugins\nwindow.KTUtil = require('@/src/js/components/util.js');\nwindow.KTApp = require('@/src/js/components/app.js');\nwindow.KTCard = require('@/src/js/components/card.js');\nwindow.KTCookie = require('@/src/js/components/cookie.js');\nwindow.KTDialog = require('@/src/js/components/dialog.js');\nwindow.KTHeader = require('@/src/js/components/header.js');\nwindow.KTImageInput = require('@/src/js/components/image-input.js');\nwindow.KTMenu = require('@/src/js/components/menu.js');\nwindow.KTOffcanvas = require('@/src/js/components/offcanvas.js');\nwindow.KTScrolltop = require('@/src/js/components/scrolltop.js');\nwindow.KTToggle = require('@/src/js/components/toggle.js');\nwindow.KTWizard = require('@/src/js/components/wizard.js');\nrequire('@/src/js/components/datatable/core.datatable.js');\nrequire('@/src/js/components/datatable/datatable.checkbox.js');\nrequire('@/src/js/components/datatable/datatable.rtl.js');\n\n// Metronic layout base js\nwindow.KTLayoutAside = require('@/src/js/layout/base/aside.js');\nwindow.KTLayoutAsideMenu = require('@/src/js/layout/base/aside-menu.js');\nwindow.KTLayoutAsideToggle = require('@/src/js/layout/base/aside-toggle.js');\nwindow.KTLayoutBrand = require('@/src/js/layout/base/brand.js');\nwindow.KTLayoutContent = require('@/src/js/layout/base/content.js');\nwindow.KTLayoutFooter = require('@/src/js/layout/base/footer.js');\nwindow.KTLayoutHeader = require('@/src/js/layout/base/header.js');\nwindow.KTLayoutHeaderMenu = require('@/src/js/layout/base/header-menu.js');\nwindow.KTLayoutHeaderTopbar = require('@/src/js/layout/base/header-topbar.js');\nwindow.KTLayoutStickyCard = require('@/src/js/layout/base/sticky-card.js');\nwindow.KTLayoutStretchedCard = require('@/src/js/layout/base/stretched-card.js');\nwindow.KTLayoutSubheader = require('@/src/js/layout/base/subheader.js');\n\n// Metronic layout extended js\nwindow.KTLayoutChat = require('@/src/js/layout/extended/chat.js');\nwindow.KTLayoutDemoPanel = require('@/src/js/layout/extended/demo-panel.js');\nwindow.KTLayoutExamples = require('@/src/js/layout/extended/examples.js');\nwindow.KTLayoutQuickActions = require('@/src/js/layout/extended/quick-actions.js');\nwindow.KTLayoutQuickCartPanel = require('@/src/js/layout/extended/quick-cart.js');\nwindow.KTLayoutQuickNotifications = require('@/src/js/layout/extended/quick-notifications.js');\nwindow.KTLayoutQuickPanel = require('@/src/js/layout/extended/quick-panel.js');\nwindow.KTLayoutQuickSearch = require('@/src/js/layout/extended/quick-search.js');\nwindow.KTLayoutQuickUser = require('@/src/js/layout/extended/quick-user.js');\nwindow.KTLayoutScrolltop = require('@/src/js/layout/extended/scrolltop.js');\nwindow.KTLayoutSearch = window.KTLayoutSearchOffcanvas = require('@/src/js/layout/extended/search.js');\n\nrequire('@/src/js/layout/initialize.js');\n"],"names":[],"sourceRoot":""}