{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///../demo7/src/js/components/app.js","webpack:///../demo7/src/js/components/card.js","webpack:///../demo7/src/js/components/cookie.js","webpack:///../demo7/src/js/components/datatable/core.datatable.js","webpack:///../demo7/src/js/components/datatable/datatable.checkbox.js","webpack:///../demo7/src/js/components/datatable/datatable.rtl.js","webpack:///../demo7/src/js/components/dialog.js","webpack:///../demo7/src/js/components/header.js","webpack:///../demo7/src/js/components/image-input.js","webpack:///../demo7/src/js/components/menu.js","webpack:///../demo7/src/js/components/offcanvas.js","webpack:///../demo7/src/js/components/scrolltop.js","webpack:///../demo7/src/js/components/toggle.js","webpack:///../demo7/src/js/components/util.js","webpack:///../demo7/src/js/components/wizard.js","webpack:///../demo7/src/js/layout/base/aside-menu.js","webpack:///../demo7/src/js/layout/base/aside.js","webpack:///../demo7/src/js/layout/base/content.js","webpack:///../demo7/src/js/layout/base/footer.js","webpack:///../demo7/src/js/layout/base/header-menu.js","webpack:///../demo7/src/js/layout/base/header-topbar.js","webpack:///../demo7/src/js/layout/base/header.js","webpack:///../demo7/src/js/layout/base/sticky-card.js","webpack:///../demo7/src/js/layout/base/stretched-card.js","webpack:///../demo7/src/js/layout/base/subheader.js","webpack:///../demo7/src/js/layout/extended/chat.js","webpack:///../demo7/src/js/layout/extended/demo-panel.js","webpack:///../demo7/src/js/layout/extended/examples.js","webpack:///../demo7/src/js/layout/extended/quick-actions.js","webpack:///../demo7/src/js/layout/extended/quick-cart.js","webpack:///../demo7/src/js/layout/extended/quick-notifications.js","webpack:///../demo7/src/js/layout/extended/quick-panel.js","webpack:///../demo7/src/js/layout/extended/quick-search.js","webpack:///../demo7/src/js/layout/extended/quick-user.js","webpack:///../demo7/src/js/layout/extended/scrolltop.js","webpack:///../demo7/src/js/layout/extended/search.js","webpack:///../demo7/src/js/layout/initialize.js","webpack:///./webpack/scripts.demo7.js"],"names":[],"mappings":";QAAA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;;AClFa;;AAEb;AACA;AACA,eAAe,OAAO;AACtB;;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;AACA;AACA;AACA,qBAAqB;AACrB;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,aAAa;AACb;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,aAAa;AACb;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,aAAa;AACb;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;;;;;;;;;;;;;ACxUY;;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,aAAa;AACb;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8CAA8C;AAC9C;AACA;;AAEA;AACA;AACA,aAAa;AACb;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,OAAO;AACP;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;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;;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,aAAa;AACb;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,2BAA2B,uBAAuB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;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;;;;;;;;;;;;;AC9aa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8BAA8B,qCAAqC;AAClF;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAAgC,GAAG,UAAU;;AAE7C;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;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,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,UAAU;AACV;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,WAAW;AACX;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,KAAK;AACL;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,WAAW;AACX;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,UAAU;AACV;AACA;AACA,SAAS;AACT,sBAAsB;;AAEtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ,4BAA4B;;AAE5B;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,oBAAoB,gBAAgB;AACpC;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,SAAS;AACT;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,SAAS;AACT;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,KAAK;AACL,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,QAAQ;AACR;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,QAAQ;AACR;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,MAAM;AACN;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,oBAAoB,eAAe;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;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;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;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,yBAAyB,gBAAgB;AACzC;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;;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,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;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,QAAQ;AACR;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;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,MAAM;AACN;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,KAAK;AACL;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,KAAK;AACL;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,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,QAAQ;AACR;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;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,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;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,QAAQ;AACR;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,kCAAkC,GAAG;AACrC;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,KAAK;AACL;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,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;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,0BAA0B;AAC1B;AACA;AACA,OAAO;AACP;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,MAAM;AACN;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,QAAQ;AACR;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,MAAM;AACN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;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;AACA;AACA;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,KAAK;AACL;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,KAAK;AACL;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,KAAK;AACL;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,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;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,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC;;AAEhC;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;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,OAAO,KAAK,KAAK,MAAM,OAAO;AACrD,MAAM;AACN,KAAK;AACL,IAAI;AACJ,GAAG;;AAEH,gBAAgB;AAChB;;AAEA,CAAC;;;;;;;;;;;;;ACz8GY;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,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,uBAAuB;AACvB;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;;;;;;;;;;;;ACxPD;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,2BAA2B,uBAAuB;AAClD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;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,aAAa;AACb;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,iBAAiB;AACjB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB,OAAO;AAC5B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB;AACjB,sCAAsC;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB,OAAO;AAC5B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA,2BAA2B,uBAAuB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;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,aAAa;AACb;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,2BAA2B,uBAAuB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;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,aAAa;AACb;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,aAAa;AACb;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,qBAAqB;AACrB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;;;AAGT;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,sDAAsD,SAAS;AAC/D;;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,aAAa;AACb;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,mDAAmD,SAAS;AAC5D;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,mEAAmE,SAAS;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qBAAqB;;AAErB;;AAEA,iBAAiB;AACjB;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,mDAAmD,SAAS;AAC5D;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA,kDAAkD,SAAS;AAC3D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA,2GAA2G,iBAAiB,QAAQ,WAAW,SAAS,UAAU;;AAElK;;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,8CAA8C,SAAS;AACvD;AACA;AACA;AACA;;AAEA,uDAAuD,WAAW;AAClE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sDAAsD,SAAS;AAC/D;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA,iDAAiD,SAAS;AAC1D;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA,iDAAiD,SAAS;AAC1D;;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,2BAA2B,uBAAuB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;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,2CAA2C,SAAS;AACpD;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACh4BY;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;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,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;;AAEA,iBAAiB;AACjB;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,aAAa;AACb;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,aAAa;AACb;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA,2BAA2B,uBAAuB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;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,aAAa;AACb;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,4CAA4C;;AAE5C;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;;AAGT;AACA;AACA;AACA;AACA,2BAA2B,uBAAuB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;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;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8CAA8C;;AAE9C;AACA;;AAEA;AACA;;AAEA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb;AACA;;AAEA;;AAEA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,2BAA2B,uBAAuB;AAClD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;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;;;;;;;;;;;;;ACjPa;;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,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qDAAqD;AACxE;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;;AAEA;AACA;;AAEA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,2BAA2B;AACtD;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;;AAEA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;AACA,2BAA2B,2BAA2B;AACtD;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,OAAO;AAC1B,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA,uBAAuB,mBAAmB;AAC1C;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,OAAO;AAC1B;AACA,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,OAAO;AAC1B,qBAAqB;AACrB;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,OAAO;AAC1B,qBAAqB;AACrB;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,OAAO;AAC1B,mBAAmB,OAAO;AAC1B,qBAAqB;AACrB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA,aAAa;;AAEb;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,OAAO;AAC1B,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,OAAO;AAC1B,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,2BAA2B,SAAS;AACpC;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,OAAO;AAC1B,mBAAmB,OAAO;AAC1B,qBAAqB;AACrB;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,SAAS;;AAET;;AAEA,0CAA0C;AAC1C;AACA;;AAEA,2BAA2B,sBAAsB;AACjD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET,+BAA+B;AAC/B;AACA;;AAEA,2BAA2B,sBAAsB;AACjD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,mBAAmB,OAAO;AAC1B,mBAAmB,OAAO;AAC1B,qBAAqB;AACrB;AACA;AACA;AACA;AACA;;AAEA;;AAEA,2BAA2B,uBAAuB;AAClD;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;;AAEA;AACA,+BAA+B,uBAAuB;AACtD;AACA;AACA;AACA;AACA,aAAa;AACb,+BAA+B,uBAAuB;AACtD;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;;AAEA;AACA,+BAA+B,uBAAuB;AACtD;AACA;AACA,aAAa;AACb,+BAA+B,uBAAuB;AACtD;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;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,0DAA0D;;AAE1D,uCAAuC;AACvC;AACA;AACA,aAAa;AACb;AACA;AACA,uCAAuC;AACvC;AACA;AACA,SAAS;;AAET;AACA;AACA,iBAAiB,cAAc;AAC/B;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,aAAa;AACb;;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,mBAAmB,2BAA2B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,uBAAuB,OAAO;AAC9B;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb;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,aAAa;AACb;;AAEA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB;AACxB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,aAAa;AACb;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb;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,iBAAiB;AACjB;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,uDAAuD,oBAAoB,gBAAgB;;AAE3F;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,aAAa;AACb;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,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4BAA4B;AAC7C;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,8BAA8B;AAC9B,mDAAmD,kBAAkB;;AAErE;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;;;AAGjB,aAAa,0BAA0B;AACvC,mDAAmD,kBAAkB;;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,uDAAuD,OAAO;AAC9D;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,uBAAuB,gBAAgB;AACvC;AACA;AACA,0BAA0B;AAC1B;;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,2BAA2B,oBAAoB;AAC/C;AACA;AACA,SAAS;;AAET;AACA;AACA,2BAA2B,oBAAoB;AAC/C;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,EAAE;AACf,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,aAAa;AACb;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,2BAA2B;;AAE3B;AACA,6CAA6C,WAAW,gBAAgB;;AAExE;AACA,iDAAiD,aAAa;;AAE9D;AACA,kDAAkD;;AAElD;AACA,kDAAkD,OAAO;;AAEzD;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,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA,eAAe;AACf;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,mDAAmD,SAAS;AAC5D;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;AACA;AACA;AACA;AACA,wEAAwE,eAAe;;AAEvF;AACA;;AAEA;AACA;;AAEA,+BAA+B,4CAA4C,EAAE,4CAA4C,EAAE,4CAA4C;AACvK,SAAS;;AAET;AACA;AACA;AACA;AACA,wEAAwE,eAAe;;AAEvF;AACA;;AAEA;AACA;;AAEA,+BAA+B,uCAAuC,EAAE,uCAAuC,EAAE,uCAAuC;AACxJ,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,iBAAiB;AACjB;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,KAA6B;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACxwDa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8CAA8C;;AAE9C;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;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,aAAa;AACb;AACA,aAAa;AACb;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,mDAAmD,SAAS;AAC5D;AACA;AACA,qBAAqB;AACrB;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uDAAuD,SAAS;AAChE;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0DAA0D,SAAS;AACnE;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,2BAA2B,uBAAuB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;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;;AAEA;AACA;;AAEA;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;;;ACrba;;AAEb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB;AACxB;;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;;AAEA;AACA;AACA;;AAEA;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;;;;;;;;;;;;;ACjFa;;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;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;;ACpDa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,S;;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;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,gDAAgD,SAAS;AACzD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;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;;;;;;;;;;;;;ACpIa;;AAEb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;;ACtCa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;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;;;;;;;;;;;;;AC3Fa;;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,OAAO;AACP;AACA;AACA;AACA;;AAEA,oBAAoB;;AAEpB;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,uBAAuB;AACvB;;AAEA,wCAAwC;AACxC;AACA,KAAK,mFAAmF;AACxF;AACA,KAAK;AACL;;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,gFAAgF;;AAEhF,kDAAkD,mBAAmB;;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,8EAA8E;AAC9E,8DAA8D,iBAAiB;AAC/E,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,8EAA8E;AAC9E,8DAA8D,mBAAmB;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,uBAAuB,qBAAqB;AAC5C;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,aAAa;;AAEb;AACA;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB,qBAAqB;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,aAAa;;AAEb;AACA;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;;;AC3Ga;;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,8BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;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;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,CAAC;;;;;;;;;;;;AC3ED;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,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","file":"js/scripts.bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./webpack/scripts.demo7.js\");\n","\"use strict\";\r\n\r\n// Component Definition\r\nvar KTApp = function() {\r\n /** @type {object} colors State colors **/\r\n var settings = {};\r\n\r\n var initTooltip = function(el) {\r\n var theme = el.data('theme') ? 'tooltip-' + el.data('theme') : '';\r\n var width = el.data('width') == 'auto' ? 'tooltop-auto-width' : '';\r\n var trigger = el.data('trigger') ? el.data('trigger') : 'hover';\r\n\r\n $(el).tooltip({\r\n trigger: trigger,\r\n template: '
\\\r\n
\\\r\n
\\\r\n
'\r\n });\r\n }\r\n\r\n var initTooltips = function() {\r\n // init bootstrap tooltips\r\n $('[data-toggle=\"tooltip\"]').each(function() {\r\n initTooltip($(this));\r\n });\r\n }\r\n\r\n var initPopover = function(el) {\r\n var skin = el.data('skin') ? 'popover-' + el.data('skin') : '';\r\n var triggerValue = el.data('trigger') ? el.data('trigger') : 'hover';\r\n\r\n el.popover({\r\n trigger: triggerValue,\r\n template: '\\\r\n
\\\r\n
\\\r\n

\\\r\n
\\\r\n
'\r\n });\r\n }\r\n\r\n var initPopovers = function() {\r\n // init bootstrap popover\r\n $('[data-toggle=\"popover\"]').each(function() {\r\n initPopover($(this));\r\n });\r\n }\r\n\r\n var initFileInput = function() {\r\n // init bootstrap popover\r\n $('.custom-file-input').on('change', function() {\r\n var fileName = $(this).val();\r\n $(this).next('.custom-file-label').addClass(\"selected\").html(fileName);\r\n });\r\n }\r\n\r\n var initScroll = function() {\r\n $('[data-scroll=\"true\"]').each(function() {\r\n var el = $(this);\r\n\r\n KTUtil.scrollInit(this, {\r\n mobileNativeScroll: true,\r\n handleWindowResize: true,\r\n rememberPosition: (el.data('remember-position') == 'true' ? true : false),\r\n height: function() {\r\n if (KTUtil.isBreakpointDown('lg') && el.data('mobile-height')) {\r\n return el.data('mobile-height');\r\n } else {\r\n return el.data('height');\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n var initAlerts = function() {\r\n // init bootstrap popover\r\n $('body').on('click', '[data-close=alert]', function() {\r\n $(this).closest('.alert').hide();\r\n });\r\n }\r\n\r\n var initCard = function(el, options) {\r\n // init card tools\r\n var el = $(el);\r\n var card = new KTCard(el[0], options);\r\n }\r\n\r\n var initCards = function() {\r\n // init card tools\r\n $('[data-card=\"true\"]').each(function() {\r\n var el = $(this);\r\n var options = {};\r\n\r\n if (el.data('data-card-initialized') !== true) {\r\n initCard(el, options);\r\n el.data('data-card-initialized', true);\r\n }\r\n });\r\n }\r\n\r\n var initStickyCard = function() {\r\n if (typeof Sticky === 'undefined') {\r\n return;\r\n }\r\n\r\n var sticky = new Sticky('[data-sticky=\"true\"]');\r\n }\r\n\r\n var initAbsoluteDropdown = function(context) {\r\n var dropdownMenu;\r\n\r\n if (!context) {\r\n return;\r\n }\r\n\r\n $('body').on('show.bs.dropdown', context, function(e) {\r\n \tdropdownMenu = $(e.target).find('.dropdown-menu');\r\n \t$('body').append(dropdownMenu.detach());\r\n \tdropdownMenu.css('display', 'block');\r\n \tdropdownMenu.position({\r\n \t\t'my': 'right top',\r\n \t\t'at': 'right bottom',\r\n \t\t'of': $(e.relatedTarget),\r\n \t});\r\n }).on('hide.bs.dropdown', context, function(e) {\r\n \t$(e.target).append(dropdownMenu.detach());\r\n \tdropdownMenu.hide();\r\n });\r\n }\r\n\r\n var initAbsoluteDropdowns = function() {\r\n $('body').on('show.bs.dropdown', function(e) {\r\n // e.target is always parent (contains toggler and menu)\r\n var $toggler = $(e.target).find(\"[data-attach='body']\");\r\n if ($toggler.length === 0) {\r\n return;\r\n }\r\n var $dropdownMenu = $(e.target).find('.dropdown-menu');\r\n // save detached menu\r\n var $detachedDropdownMenu = $dropdownMenu.detach();\r\n // save reference to detached menu inside data of toggler\r\n $toggler.data('dropdown-menu', $detachedDropdownMenu);\r\n\r\n $('body').append($detachedDropdownMenu);\r\n $detachedDropdownMenu.css('display', 'block');\r\n $detachedDropdownMenu.position({\r\n my: 'right top',\r\n at: 'right bottom',\r\n of: $(e.relatedTarget),\r\n });\r\n });\r\n\r\n $('body').on('hide.bs.dropdown', function(e) {\r\n var $toggler = $(e.target).find(\"[data-attach='body']\");\r\n if ($toggler.length === 0) {\r\n return;\r\n }\r\n // access to reference of detached menu from data of toggler\r\n var $detachedDropdownMenu = $toggler.data('dropdown-menu');\r\n // re-append detached menu inside parent\r\n $(e.target).append($detachedDropdownMenu.detach());\r\n // hide dropdown\r\n $detachedDropdownMenu.hide();\r\n });\r\n };\r\n\r\n return {\r\n init: function(settingsArray) {\r\n if (settingsArray) {\r\n settings = settingsArray;\r\n }\r\n\r\n KTApp.initComponents();\r\n },\r\n\r\n initComponents: function() {\r\n initScroll();\r\n initTooltips();\r\n initPopovers();\r\n initAlerts();\r\n initFileInput();\r\n initCards();\r\n initStickyCard();\r\n initAbsoluteDropdowns();\r\n },\r\n\r\n initTooltips: function() {\r\n initTooltips();\r\n },\r\n\r\n initTooltip: function(el) {\r\n initTooltip(el);\r\n },\r\n\r\n initPopovers: function() {\r\n initPopovers();\r\n },\r\n\r\n initPopover: function(el) {\r\n initPopover(el);\r\n },\r\n\r\n initCard: function(el, options) {\r\n initCard(el, options);\r\n },\r\n\r\n initCards: function() {\r\n initCards();\r\n },\r\n\r\n initSticky: function() {\r\n initSticky();\r\n },\r\n\r\n initAbsoluteDropdown: function(context) {\r\n initAbsoluteDropdown(context);\r\n },\r\n\r\n block: function(target, options) {\r\n var el = $(target);\r\n\r\n options = $.extend(true, {\r\n opacity: 0.05,\r\n overlayColor: '#000000',\r\n type: '',\r\n size: '',\r\n state: 'primary',\r\n centerX: true,\r\n centerY: true,\r\n message: '',\r\n shadow: true,\r\n width: 'auto'\r\n }, options);\r\n\r\n var html;\r\n var version = options.type ? 'spinner-' + options.type : '';\r\n var state = options.state ? 'spinner-' + options.state : '';\r\n var size = options.size ? 'spinner-' + options.size : '';\r\n var spinner = ' 0) {\r\n var classes = 'blockui ' + (options.shadow === false ? 'blockui' : '');\r\n\r\n html = '
' + options.message + '' + spinner + '
';\r\n\r\n var el = document.createElement('div');\r\n\r\n $('body').prepend(el);\r\n KTUtil.addClass(el, classes);\r\n el.innerHTML = html;\r\n options.width = KTUtil.actualWidth(el) + 10;\r\n KTUtil.remove(el);\r\n\r\n if (target == 'body') {\r\n html = '
' + options.message + '' + spinner + '
';\r\n }\r\n } else {\r\n html = spinner;\r\n }\r\n\r\n var params = {\r\n message: html,\r\n centerY: options.centerY,\r\n centerX: options.centerX,\r\n css: {\r\n top: '30%',\r\n left: '50%',\r\n border: '0',\r\n padding: '0',\r\n backgroundColor: 'none',\r\n width: options.width\r\n },\r\n overlayCSS: {\r\n backgroundColor: options.overlayColor,\r\n opacity: options.opacity,\r\n cursor: 'wait',\r\n zIndex: (target == 'body' ? 1100 : 10)\r\n },\r\n onUnblock: function() {\r\n if (el && el[0]) {\r\n KTUtil.css(el[0], 'position', '');\r\n KTUtil.css(el[0], 'zoom', '');\r\n }\r\n }\r\n };\r\n\r\n if (target == 'body') {\r\n params.css.top = '50%';\r\n $.blockUI(params);\r\n } else {\r\n var el = $(target);\r\n el.block(params);\r\n }\r\n },\r\n\r\n unblock: function(target) {\r\n if (target && target != 'body') {\r\n $(target).unblock();\r\n } else {\r\n $.unblockUI();\r\n }\r\n },\r\n\r\n blockPage: function(options) {\r\n return KTApp.block('body', options);\r\n },\r\n\r\n unblockPage: function() {\r\n return KTApp.unblock('body');\r\n },\r\n\r\n getSettings: function() {\r\n return settings;\r\n }\r\n };\r\n}();\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTApp;\r\n}\r\n\r\n// Initialize KTApp class on document ready\r\n$(document).ready(function() {\r\n KTApp.init(KTAppSettings);\r\n});\r\n","\"use strict\";\r\n\r\n// Component Definition\r\nvar KTCard = function(elementId, options) {\r\n // Main object\r\n var the = this;\r\n var init = false;\r\n\r\n // Get element object\r\n var element = KTUtil.getById(elementId);\r\n var body = KTUtil.getBody();\r\n\r\n if (!element) {\r\n return;\r\n }\r\n\r\n // Default options\r\n var defaultOptions = {\r\n toggleSpeed: 400,\r\n sticky: {\r\n releseOnReverse: false,\r\n offset: 300,\r\n zIndex: 101\r\n }\r\n };\r\n\r\n ////////////////////////////\r\n // ** Private Methods ** //\r\n ////////////////////////////\r\n\r\n var Plugin = {\r\n /**\r\n * Construct\r\n */\r\n\r\n construct: function(options) {\r\n if (KTUtil.data(element).has('card')) {\r\n the = KTUtil.data(element).get('card');\r\n } else {\r\n // reset menu\r\n Plugin.init(options);\r\n\r\n // build menu\r\n Plugin.build();\r\n\r\n KTUtil.data(element).set('card', the);\r\n }\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Init card\r\n */\r\n init: function(options) {\r\n the.element = element;\r\n the.events = [];\r\n\r\n // merge default and user defined options\r\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\r\n the.header = KTUtil.child(element, '.card-header');\r\n the.footer = KTUtil.child(element, '.card-footer');\r\n\r\n if (KTUtil.child(element, '.card-body')) {\r\n the.body = KTUtil.child(element, '.card-body');\r\n } else if (KTUtil.child(element, '.form')) {\r\n the.body = KTUtil.child(element, '.form');\r\n }\r\n },\r\n\r\n /**\r\n * Build Form Wizard\r\n */\r\n build: function() {\r\n // Remove\r\n var remove = KTUtil.find(the.header, '[data-card-tool=remove]');\r\n if (remove) {\r\n KTUtil.addEvent(remove, 'click', function(e) {\r\n e.preventDefault();\r\n Plugin.remove();\r\n });\r\n }\r\n\r\n // Reload\r\n var reload = KTUtil.find(the.header, '[data-card-tool=reload]');\r\n if (reload) {\r\n KTUtil.addEvent(reload, 'click', function(e) {\r\n e.preventDefault();\r\n Plugin.reload();\r\n });\r\n }\r\n\r\n // Toggle\r\n var toggle = KTUtil.find(the.header, '[data-card-tool=toggle]');\r\n if (toggle) {\r\n KTUtil.addEvent(toggle, 'click', function(e) {\r\n e.preventDefault();\r\n Plugin.toggle();\r\n });\r\n }\r\n },\r\n\r\n /**\r\n * Enable stickt mode\r\n */\r\n initSticky: function() {\r\n var lastScrollTop = 0;\r\n var offset = the.options.sticky.offset;\r\n\r\n if (!the.header) {\r\n return;\r\n }\r\n\r\n\t window.addEventListener('scroll', Plugin.onScrollSticky);\r\n },\r\n\r\n\t /**\r\n\t * Window scroll handle event for sticky card\r\n\t */\r\n\t onScrollSticky: function(e) {\r\n\t\t var offset = the.options.sticky.offset;\r\n\r\n\t\t if(isNaN(offset)) return;\r\n\r\n\t\t var st = KTUtil.getScrollTop();\r\n\r\n\t\t if (st >= offset && KTUtil.hasClass(body, 'card-sticky-on') === false) {\r\n\t\t\t Plugin.eventTrigger('stickyOn');\r\n\r\n\t\t\t KTUtil.addClass(body, 'card-sticky-on');\r\n\r\n\t\t\t Plugin.updateSticky();\r\n\r\n\t\t } else if ((st*1.5) <= offset && KTUtil.hasClass(body, 'card-sticky-on')) {\r\n\t\t\t // Back scroll mode\r\n\t\t\t Plugin.eventTrigger('stickyOff');\r\n\r\n\t\t\t KTUtil.removeClass(body, 'card-sticky-on');\r\n\r\n\t\t\t Plugin.resetSticky();\r\n\t\t }\r\n\t },\r\n\r\n updateSticky: function() {\r\n if (!the.header) {\r\n return;\r\n }\r\n\r\n var top;\r\n\r\n if (KTUtil.hasClass(body, 'card-sticky-on')) {\r\n if (the.options.sticky.position.top instanceof Function) {\r\n top = parseInt(the.options.sticky.position.top.call(this, the));\r\n } else {\r\n top = parseInt(the.options.sticky.position.top);\r\n }\r\n\r\n var left;\r\n if (the.options.sticky.position.left instanceof Function) {\r\n left = parseInt(the.options.sticky.position.left.call(this, the));\r\n } else {\r\n left = parseInt(the.options.sticky.position.left);\r\n }\r\n\r\n var right;\r\n if (the.options.sticky.position.right instanceof Function) {\r\n right = parseInt(the.options.sticky.position.right.call(this, the));\r\n } else {\r\n right = parseInt(the.options.sticky.position.right);\r\n }\r\n\r\n KTUtil.css(the.header, 'z-index', the.options.sticky.zIndex);\r\n KTUtil.css(the.header, 'top', top + 'px');\r\n KTUtil.css(the.header, 'left', left + 'px');\r\n KTUtil.css(the.header, 'right', right + 'px');\r\n }\r\n },\r\n\r\n resetSticky: function() {\r\n if (!the.header) {\r\n return;\r\n }\r\n\r\n if (KTUtil.hasClass(body, 'card-sticky-on') === false) {\r\n KTUtil.css(the.header, 'z-index', '');\r\n KTUtil.css(the.header, 'top', '');\r\n KTUtil.css(the.header, 'left', '');\r\n KTUtil.css(the.header, 'right', '');\r\n }\r\n },\r\n\r\n /**\r\n * Remove card\r\n */\r\n remove: function() {\r\n if (Plugin.eventTrigger('beforeRemove') === false) {\r\n return;\r\n }\r\n\r\n KTUtil.remove(element);\r\n\r\n Plugin.eventTrigger('afterRemove');\r\n },\r\n\r\n /**\r\n * Set content\r\n */\r\n setContent: function(html) {\r\n if (html) {\r\n the.body.innerHTML = html;\r\n }\r\n },\r\n\r\n /**\r\n * Get body\r\n */\r\n getBody: function() {\r\n return the.body;\r\n },\r\n\r\n /**\r\n * Get self\r\n */\r\n getSelf: function() {\r\n return element;\r\n },\r\n\r\n /**\r\n * Reload\r\n */\r\n reload: function() {\r\n Plugin.eventTrigger('reload');\r\n },\r\n\r\n /**\r\n * Toggle\r\n */\r\n toggle: function() {\r\n if (KTUtil.hasClass(element, 'card-collapse') || KTUtil.hasClass(element, 'card-collapsed')) {\r\n Plugin.expand();\r\n } else {\r\n Plugin.collapse();\r\n }\r\n },\r\n\r\n /**\r\n * Collapse\r\n */\r\n collapse: function() {\r\n if (Plugin.eventTrigger('beforeCollapse') === false) {\r\n return;\r\n }\r\n\r\n KTUtil.slideUp(the.body, the.options.toggleSpeed, function() {\r\n Plugin.eventTrigger('afterCollapse');\r\n });\r\n\r\n KTUtil.addClass(element, 'card-collapse');\r\n },\r\n\r\n /**\r\n * Expand\r\n */\r\n expand: function() {\r\n if (Plugin.eventTrigger('beforeExpand') === false) {\r\n return;\r\n }\r\n\r\n KTUtil.slideDown(the.body, the.options.toggleSpeed, function() {\r\n Plugin.eventTrigger('afterExpand');\r\n });\r\n\r\n KTUtil.removeClass(element, 'card-collapse');\r\n KTUtil.removeClass(element, 'card-collapsed');\r\n },\r\n\r\n /**\r\n * Trigger events\r\n */\r\n eventTrigger: function(name) {\r\n //KTUtil.triggerCustomEvent(name);\r\n for (var i = 0; i < the.events.length; i++) {\r\n var event = the.events[i];\r\n if (event.name == name) {\r\n if (event.one == true) {\r\n if (event.fired == false) {\r\n the.events[i].fired = true;\r\n return event.handler.call(this, the);\r\n }\r\n } else {\r\n return event.handler.call(this, the);\r\n }\r\n }\r\n }\r\n },\r\n\r\n addEvent: function(name, handler, one) {\r\n the.events.push({\r\n name: name,\r\n handler: handler,\r\n one: one,\r\n fired: false\r\n });\r\n\r\n return the;\r\n }\r\n };\r\n\r\n //////////////////////////\r\n // ** Public Methods ** //\r\n //////////////////////////\r\n\r\n /**\r\n * Set default options\r\n */\r\n\r\n the.setDefaults = function(options) {\r\n defaultOptions = options;\r\n };\r\n\r\n /**\r\n * Remove card\r\n */\r\n the.remove = function() {\r\n return Plugin.remove(html);\r\n };\r\n\r\n /**\r\n * Init sticky card\r\n */\r\n the.initSticky = function() {\r\n return Plugin.initSticky();\r\n };\r\n\r\n /**\r\n * Rerender sticky layout\r\n */\r\n the.updateSticky = function() {\r\n return Plugin.updateSticky();\r\n };\r\n\r\n /**\r\n * Reset the sticky\r\n */\r\n the.resetSticky = function() {\r\n return Plugin.resetSticky();\r\n };\r\n\r\n\t/**\r\n\t * Destroy sticky card\r\n\t */\r\n\tthe.destroySticky = function() {\r\n\t\tPlugin.resetSticky();\r\n\t\twindow.removeEventListener('scroll', Plugin.onScrollSticky);\r\n\t};\r\n\r\n /**\r\n * Reload card\r\n */\r\n the.reload = function() {\r\n return Plugin.reload();\r\n };\r\n\r\n /**\r\n * Set card content\r\n */\r\n the.setContent = function(html) {\r\n return Plugin.setContent(html);\r\n };\r\n\r\n /**\r\n * Toggle card\r\n */\r\n the.toggle = function() {\r\n return Plugin.toggle();\r\n };\r\n\r\n /**\r\n * Collapse card\r\n */\r\n the.collapse = function() {\r\n return Plugin.collapse();\r\n };\r\n\r\n /**\r\n * Expand card\r\n */\r\n the.expand = function() {\r\n return Plugin.expand();\r\n };\r\n\r\n /**\r\n * Get cardbody\r\n * @returns {jQuery}\r\n */\r\n the.getBody = function() {\r\n return Plugin.getBody();\r\n };\r\n\r\n /**\r\n * Get cardbody\r\n * @returns {jQuery}\r\n */\r\n the.getSelf = function() {\r\n return Plugin.getSelf();\r\n };\r\n\r\n /**\r\n * Attach event\r\n */\r\n the.on = function(name, handler) {\r\n return Plugin.addEvent(name, handler);\r\n };\r\n\r\n /**\r\n * Attach event that will be fired once\r\n */\r\n the.one = function(name, handler) {\r\n return Plugin.addEvent(name, handler, true);\r\n };\r\n\r\n // Construct plugin\r\n Plugin.construct.apply(the, [options]);\r\n\r\n return the;\r\n};\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTCard;\r\n}\r\n","\"use strict\";\r\n// DOCS: https://javascript.info/cookie\r\n\r\n// Component Definition \r\nvar KTCookie = function() {\r\n return {\r\n // returns the cookie with the given name,\r\n // or undefined if not found\r\n getCookie: function(name) {\r\n var matches = document.cookie.match(new RegExp(\r\n \"(?:^|; )\" + name.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g, '\\\\$1') + \"=([^;]*)\"\r\n ));\r\n return matches ? decodeURIComponent(matches[1]) : undefined;\r\n },\r\n // Please note that a cookie value is encoded,\r\n // so getCookie uses a built-in decodeURIComponent function to decode it.\r\n setCookie: function(name, value, options) {\r\n if (!options) {\r\n options = {};\r\n }\r\n\r\n options = Object.assign({}, {path: '/'}, options);\r\n\r\n if (options.expires instanceof Date) {\r\n options.expires = options.expires.toUTCString();\r\n }\r\n\r\n var updatedCookie = encodeURIComponent(name) + \"=\" + encodeURIComponent(value);\r\n\r\n for (var optionKey in options) {\r\n if (!options.hasOwnProperty(optionKey)) {\r\n continue;\r\n }\r\n updatedCookie += \"; \" + optionKey;\r\n var optionValue = options[optionKey];\r\n if (optionValue !== true) {\r\n updatedCookie += \"=\" + optionValue;\r\n }\r\n }\r\n\r\n document.cookie = updatedCookie;\r\n },\r\n // To delete a cookie, we can call it with a negative expiration date:\r\n deleteCookie: function(name) {\r\n setCookie(name, \"\", {\r\n 'max-age': -1\r\n })\r\n }\r\n }\r\n}();\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTCookie;\r\n}\r\n","'use strict';\r\n(function($) {\r\n\r\n\tvar pluginName = 'KTDatatable';\r\n\tvar pfx = '';\r\n\tvar util = KTUtil;\r\n\tvar app = KTApp;\r\n\r\n\tif (typeof util === 'undefined') throw new Error('Util class is required and must be included before ' + pluginName);\r\n\r\n\t// plugin setup\r\n\t$.fn[pluginName] = function(options) {\r\n\t\tif ($(this).length === 0) {\r\n\t\t\tconsole.warn('No ' + pluginName + ' element exist.');\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// global variables\r\n\t\tvar datatable = this;\r\n\r\n\t\t// debug enabled?\r\n\t\t// 1) state will be cleared on each refresh\r\n\t\t// 2) enable some logs\r\n\t\t// 3) etc.\r\n\t\tdatatable.debug = false;\r\n\r\n\t\tdatatable.API = {\r\n\t\t\trecord: null,\r\n\t\t\tvalue: null,\r\n\t\t\tparams: null,\r\n\t\t};\r\n\r\n\t\tvar Plugin = {\r\n\t\t\t/********************\r\n\t\t\t ** PRIVATE METHODS\r\n\t\t\t ********************/\r\n\t\t\tisInit: false,\r\n\t\t\tcellOffset: 110,\r\n\t\t\ticonOffset: 15,\r\n\t\t\tstateId: 'meta',\r\n\t\t\tajaxParams: {},\r\n\t\t\tpagingObject: {},\r\n\r\n\t\t\tinit: function(options) {\r\n\t\t\t\tvar isHtmlTable = false;\r\n\t\t\t\t// data source option empty is normal table\r\n\t\t\t\tif (options.data.source === null) {\r\n\t\t\t\t\tPlugin.extractTable();\r\n\t\t\t\t\tisHtmlTable = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tPlugin.setupBaseDOM.call();\r\n\t\t\t\tPlugin.setupDOM(datatable.table);\r\n\r\n\t\t\t\t// on event after layout had done setup, show datatable\r\n\t\t\t\t$(datatable).on(pfx + 'datatable-on-layout-updated', Plugin.afterRender);\r\n\r\n\t\t\t\tif (datatable.debug) {\r\n\t\t\t\t\tPlugin.stateRemove(Plugin.stateId);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/*var es = Plugin.stateGet(Plugin.stateId);\r\n\t\t\t\tvar eq = {};\r\n\t\t\t\tif (es && es.hasOwnProperty('query')) {\r\n\t\t\t\t\teq = es.query;\r\n\t\t\t\t}\r\n\t\t\t\tPlugin.setDataSourceQuery(Object.assign({}, eq, Plugin.getOption('data.source.read.params.query')));*/\r\n\r\n\t\t\t\t// set custom query from options\r\n\t\t\t\tPlugin.setDataSourceQuery(Plugin.getOption('data.source.read.params.query'));\r\n\r\n\t\t\t\t// initialize extensions\r\n\t\t\t\t$.each(Plugin.getOption('extensions'), function(extName, extOptions) {\r\n\t\t\t\t\tif (typeof $.fn[pluginName][extName] === 'function') {\r\n\t\t\t\t\t\tif (typeof extOptions !== 'object') {\r\n\t\t\t\t\t\t\textOptions = $.extend({}, extOptions);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tnew $.fn[pluginName][extName](datatable, extOptions);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tPlugin.spinnerCallback(true);\r\n\t\t\t\t// get data\r\n\t\t\t\tif (options.data.type === 'remote' || options.data.type === 'local') {\r\n\t\t\t\t\tif (options.data.saveState === false) {\r\n\t\t\t\t\t\tPlugin.stateRemove(Plugin.stateId);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// get data for local datatable and local table\r\n\t\t\t\t\tif (options.data.type === 'local' && typeof options.data.source === 'object') {\r\n\t\t\t\t\t\tdatatable.dataSet = datatable.originalDataSet = Plugin.dataMapCallback(options.data.source);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tPlugin.dataRender();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// if html table, remove and setup a new header\r\n\t\t\t\tif (isHtmlTable) {\r\n\t\t\t\t\t$(datatable.tableHead).find('tr').remove();\r\n\t\t\t\t\t$(datatable.tableFoot).find('tr').remove();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tPlugin.setHeadTitle();\r\n\t\t\t\tif (Plugin.getOption('layout.footer')) {\r\n\t\t\t\t\tPlugin.setHeadTitle(datatable.tableFoot);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// hide header\r\n\t\t\t\tif (typeof options.layout.header !== 'undefined' &&\r\n\t\t\t\t\toptions.layout.header === false) {\r\n\t\t\t\t\t$(datatable.table).find('thead').remove();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// hide footer\r\n\t\t\t\tif (typeof options.layout.footer !== 'undefined' &&\r\n\t\t\t\t\toptions.layout.footer === false) {\r\n\t\t\t\t\t$(datatable.table).find('tfoot').remove();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// for normal and local data type, run layoutUpdate\r\n\t\t\t\tif (options.data.type === null ||\r\n\t\t\t\t\toptions.data.type === 'local') {\r\n\t\t\t\t\tPlugin.setupCellField.call();\r\n\t\t\t\t\tPlugin.setupTemplateCell.call();\r\n\r\n\t\t\t\t\t// setup nested datatable, if option enabled\r\n\t\t\t\t\tPlugin.setupSubDatatable.call();\r\n\r\n\t\t\t\t\t// setup extra system column properties\r\n\t\t\t\t\tPlugin.setupSystemColumn.call();\r\n\t\t\t\t\tPlugin.redraw();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar width;\r\n\t\t\t\tvar initialWidth = false;\r\n\t\t\t\t$(window).resize(function() {\r\n\t\t\t\t\t// issue: URL Bar Resizing on mobile, https://developers.google.com/web/updates/2016/12/url-bar-resizing\r\n\t\t\t\t\t// trigger datatable resize on width change only\r\n\t\t\t\t\tif ($(this).width() !== width) {\r\n\t\t\t\t\t\twidth = $(this).width();\r\n\t\t\t\t\t\tPlugin.fullRender();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// get initial width\r\n\t\t\t\t\tif (!initialWidth) {\r\n\t\t\t\t\t\twidth = $(this).width();\r\n\t\t\t\t\t\tinitialWidth = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t$(datatable).height('');\r\n\r\n\t\t\t\tvar prevKeyword = '';\r\n\t\t\t\t$(Plugin.getOption('search.input')).on('keyup', function(e) {\r\n\t\t\t\t\tif (Plugin.getOption('search.onEnter') && e.which !== 13) return;\r\n\t\t\t\t\tvar keyword = $(this).val();\r\n\t\t\t\t\t// prevent multiple search request on every button keyup\r\n\t\t\t\t\tif (prevKeyword !== keyword) {\r\n\t\t\t\t\t\tPlugin.search(keyword);\r\n\t\t\t\t\t\tprevKeyword = keyword;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Extract static HTML table content into datasource\r\n\t\t\t */\r\n\t\t\textractTable: function() {\r\n\t\t\t\tvar columns = [];\r\n\t\t\t\tvar headers = $(datatable).find('tr:first-child th').get().map(function(cell, i) {\r\n\t\t\t\t\tvar field = $(cell).data('field');\r\n\t\t\t\t\tvar title = $(cell).data('title');\r\n\t\t\t\t\tif (typeof field === 'undefined') {\r\n\t\t\t\t\t\tfield = $(cell).text().trim();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (typeof title === 'undefined') {\r\n\t\t\t\t\t\ttitle = $(cell).text().trim();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar column = {field: field, title: title};\r\n\t\t\t\t\tfor (var ii in options.columns) {\r\n\t\t\t\t\t\tif (options.columns[ii].field === field) {\r\n\t\t\t\t\t\t\tcolumn = $.extend(true, {}, options.columns[ii], column);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcolumns.push(column);\r\n\t\t\t\t\treturn field;\r\n\t\t\t\t});\r\n\t\t\t\t// auto create columns config\r\n\t\t\t\toptions.columns = columns;\r\n\r\n\t\t\t\tvar rowProp = [];\r\n\t\t\t\tvar source = [];\r\n\r\n\t\t\t\t$(datatable).find('tr').each(function() {\r\n\t\t\t\t\tif ($(this).find('td').length) {\r\n\t\t\t\t\t\trowProp.push($(this).prop('attributes'));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar td = {};\r\n\t\t\t\t\t$(this).find('td').each(function(i, cell) {\r\n\t\t\t\t\t\ttd[headers[i]] = cell.innerHTML.trim();\r\n\t\t\t\t\t});\r\n\t\t\t\t\tif (!util.isEmpty(td)) {\r\n\t\t\t\t\t\tsource.push(td);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\toptions.data.attr.rowProps = rowProp;\r\n\t\t\t\toptions.data.source = source;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * One time layout update on init\r\n\t\t\t */\r\n\t\t\tlayoutUpdate: function() {\r\n\t\t\t\t// setup nested datatable, if option enabled\r\n\t\t\t\tPlugin.setupSubDatatable.call();\r\n\r\n\t\t\t\t// setup extra system column properties\r\n\t\t\t\tPlugin.setupSystemColumn.call();\r\n\r\n\t\t\t\t// setup cell hover event\r\n\t\t\t\tPlugin.setupHover.call();\r\n\r\n\t\t\t\tif (typeof options.detail === 'undefined'\r\n\t\t\t\t\t// temporary disable lock column in subtable\r\n\t\t\t\t\t&& Plugin.getDepth() === 1) {\r\n\t\t\t\t\t// lock columns handler\r\n\t\t\t\t\tPlugin.lockTable.call();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tPlugin.resetScroll();\r\n\r\n\t\t\t\t// check if not is a locked column\r\n\t\t\t\tif (!Plugin.isLocked()) {\r\n\t\t\t\t\tPlugin.redraw.call();\r\n\t\t\t\t\t// check if its not a subtable and has autoHide option enabled\r\n\t\t\t\t\tif (!Plugin.isSubtable() && Plugin.getOption('rows.autoHide') === true) {\r\n\t\t\t\t\t\tPlugin.autoHide();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// reset row\r\n\t\t\t\t\t$(datatable.table).find('.' + pfx + 'datatable-row').css('height', '');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tPlugin.columnHide.call();\r\n\r\n\t\t\t\tPlugin.rowEvenOdd.call();\r\n\r\n\t\t\t\tPlugin.sorting.call();\r\n\r\n\t\t\t\tPlugin.scrollbar.call();\r\n\r\n\t\t\t\tif (!Plugin.isInit) {\r\n\t\t\t\t\t// run once dropdown inside datatable\r\n\t\t\t\t\tPlugin.dropdownFix();\r\n\t\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-init', {table: $(datatable.wrap).attr('id'), options: options});\r\n\t\t\t\t\tPlugin.isInit = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-layout-updated', {table: $(datatable.wrap).attr('id')});\r\n\t\t\t},\r\n\r\n\t\t\tdropdownFix: function() {\r\n\t\t\t\tvar dropdownMenu;\r\n\t\t\t\t$('body').on('show.bs.dropdown', '.' + pfx + 'datatable .' + pfx + 'datatable-body', function(e) {\r\n\t\t\t\t\tdropdownMenu = $(e.target).find('.dropdown-menu');\r\n\t\t\t\t\t$('body').append(dropdownMenu.detach());\r\n\t\t\t\t\tdropdownMenu.css('display', 'block');\r\n\t\t\t\t\tdropdownMenu.position({\r\n\t\t\t\t\t\t'my': 'right top',\r\n\t\t\t\t\t\t'at': 'right bottom',\r\n\t\t\t\t\t\t'of': $(e.relatedTarget),\r\n\t\t\t\t\t});\r\n\t\t\t\t\t// if datatable is inside modal\r\n\t\t\t\t\tif (datatable.closest('.modal').length) {\r\n\t\t\t\t\t\t// increase dropdown z-index\r\n\t\t\t\t\t\tdropdownMenu.css('z-index', '2000');\r\n\t\t\t\t\t}\r\n\t\t\t\t}).on('hide.bs.dropdown', '.' + pfx + 'datatable .' + pfx + 'datatable-body', function(e) {\r\n\t\t\t\t\t$(e.target).append(dropdownMenu.detach());\r\n\t\t\t\t\tdropdownMenu.hide();\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// remove dropdown if window resize\r\n\t\t\t\t$(window).on('resize', function(e) {\r\n\t\t\t\t\tif (typeof dropdownMenu !== 'undefined') {\r\n\t\t\t\t\t\tdropdownMenu.hide();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t},\r\n\r\n\t\t\tlockTable: function() {\r\n\t\t\t\tvar lock = {\r\n\t\t\t\t\tlockEnabled: false,\r\n\t\t\t\t\tinit: function() {\r\n\t\t\t\t\t\t// check if table should be locked columns\r\n\t\t\t\t\t\tlock.lockEnabled = Plugin.lockEnabledColumns();\r\n\t\t\t\t\t\tif (lock.lockEnabled.left.length === 0 &&\r\n\t\t\t\t\t\t\tlock.lockEnabled.right.length === 0) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tlock.enable();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tenable: function() {\r\n\t\t\t\t\t\tvar enableLock = function(tablePart) {\r\n\t\t\t\t\t\t\t// check if already has lock column\r\n\t\t\t\t\t\t\tif ($(tablePart).find('.' + pfx + 'datatable-lock').length > 0) {\r\n\t\t\t\t\t\t\t\tPlugin.log('Locked container already exist in: ', tablePart);\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t// check if no rows exists\r\n\t\t\t\t\t\t\tif ($(tablePart).find('.' + pfx + 'datatable-row').length === 0) {\r\n\t\t\t\t\t\t\t\tPlugin.log('No row exist in: ', tablePart);\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t// locked div container\r\n\t\t\t\t\t\t\tvar lockLeft = $('
').addClass(pfx + 'datatable-lock ' + pfx + 'datatable-lock-left');\r\n\t\t\t\t\t\t\tvar lockScroll = $('
').addClass(pfx + 'datatable-lock ' + pfx + 'datatable-lock-scroll');\r\n\t\t\t\t\t\t\tvar lockRight = $('
').addClass(pfx + 'datatable-lock ' + pfx + 'datatable-lock-right');\r\n\r\n\t\t\t\t\t\t\t$(tablePart).find('.' + pfx + 'datatable-row').each(function() {\r\n\t\t\t\t\t\t\t\t// create new row for lock columns and pass the data\r\n\t\t\t\t\t\t\t\tvar rowLeft = $('').addClass(pfx + 'datatable-row').data('obj', $(this).data('obj')).appendTo(lockLeft);\r\n\t\t\t\t\t\t\t\tvar rowScroll = $('').addClass(pfx + 'datatable-row').data('obj', $(this).data('obj')).appendTo(lockScroll);\r\n\t\t\t\t\t\t\t\tvar rowRight = $('').addClass(pfx + 'datatable-row').data('obj', $(this).data('obj')).appendTo(lockRight);\r\n\t\t\t\t\t\t\t\t$(this).find('.' + pfx + 'datatable-cell').each(function() {\r\n\t\t\t\t\t\t\t\t\tvar locked = $(this).data('locked');\r\n\t\t\t\t\t\t\t\t\tif (typeof locked !== 'undefined') {\r\n\t\t\t\t\t\t\t\t\t\tif (typeof locked.left !== 'undefined' || locked === true) {\r\n\t\t\t\t\t\t\t\t\t\t\t// default locked to left\r\n\t\t\t\t\t\t\t\t\t\t\t$(this).appendTo(rowLeft);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tif (typeof locked.right !== 'undefined') {\r\n\t\t\t\t\t\t\t\t\t\t\t$(this).appendTo(rowRight);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t$(this).appendTo(rowScroll);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t// remove old row\r\n\t\t\t\t\t\t\t\t$(this).remove();\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\tif (lock.lockEnabled.left.length > 0) {\r\n\t\t\t\t\t\t\t\t$(datatable.wrap).addClass(pfx + 'datatable-lock');\r\n\t\t\t\t\t\t\t\t$(lockLeft).appendTo(tablePart);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (lock.lockEnabled.left.length > 0 || lock.lockEnabled.right.length > 0) {\r\n\t\t\t\t\t\t\t\t$(lockScroll).appendTo(tablePart);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (lock.lockEnabled.right.length > 0) {\r\n\t\t\t\t\t\t\t\t$(datatable.wrap).addClass(pfx + 'datatable-lock');\r\n\t\t\t\t\t\t\t\t$(lockRight).appendTo(tablePart);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t$(datatable.table).find('thead,tbody,tfoot').each(function() {\r\n\t\t\t\t\t\t\tvar tablePart = this;\r\n\t\t\t\t\t\t\tif ($(this).find('.' + pfx + 'datatable-lock').length === 0) {\r\n\t\t\t\t\t\t\t\t$(this).ready(function() {\r\n\t\t\t\t\t\t\t\t\tenableLock(tablePart);\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t},\r\n\t\t\t\t};\r\n\t\t\t\tlock.init();\r\n\t\t\t\treturn lock;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Render everything for resize\r\n\t\t\t */\r\n\t\t\tfullRender: function() {\r\n\t\t\t\t$(datatable.tableHead).empty();\r\n\t\t\t\tPlugin.setHeadTitle();\r\n\t\t\t\tif (Plugin.getOption('layout.footer')) {\r\n\t\t\t\t\t$(datatable.tableFoot).empty();\r\n\t\t\t\t\tPlugin.setHeadTitle(datatable.tableFoot);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tPlugin.spinnerCallback(true);\r\n\t\t\t\t$(datatable.wrap).removeClass(pfx + 'datatable-loaded');\r\n\r\n\t\t\t\tPlugin.insertData();\r\n\t\t\t},\r\n\r\n\t\t\tlockEnabledColumns: function() {\r\n\t\t\t\tvar screen = $(window).width();\r\n\t\t\t\tvar columns = options.columns;\r\n\t\t\t\tvar enabled = {left: [], right: []};\r\n\t\t\t\t$.each(columns, function(i, column) {\r\n\t\t\t\t\tif (typeof column.locked !== 'undefined') {\r\n\t\t\t\t\t\tif (typeof column.locked.left !== 'undefined') {\r\n\t\t\t\t\t\t\tif (util.getBreakpoint(column.locked.left) <= screen) {\r\n\t\t\t\t\t\t\t\tenabled['left'].push(column.locked.left);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (typeof column.locked.right !== 'undefined') {\r\n\t\t\t\t\t\t\tif (util.getBreakpoint(column.locked.right) <= screen) {\r\n\t\t\t\t\t\t\t\tenabled['right'].push(column.locked.right);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\treturn enabled;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * After render event, called by \"datatable-on-layout-updated\"\r\n\t\t\t * @param e\r\n\t\t\t * @param args\r\n\t\t\t */\r\n\t\t\tafterRender: function(e, args) {\r\n\t\t\t\t$(datatable).ready(function() {\r\n\t\t\t\t\t// redraw locked columns table\r\n\t\t\t\t\tif (Plugin.isLocked()) {\r\n\t\t\t\t\t\tPlugin.redraw();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$(datatable.tableBody).css('visibility', '');\r\n\t\t\t\t\t$(datatable.wrap).addClass(pfx + 'datatable-loaded');\r\n\r\n\t\t\t\t\tPlugin.spinnerCallback(false);\r\n\t\t\t\t});\r\n\t\t\t},\r\n\r\n\t\t\thoverTimer: 0,\r\n\t\t\tisScrolling: false,\r\n\t\t\tsetupHover: function() {\r\n\t\t\t\t$(window).scroll(function(e) {\r\n\t\t\t\t\t// stop hover when scrolling\r\n\t\t\t\t\tclearTimeout(Plugin.hoverTimer);\r\n\t\t\t\t\tPlugin.isScrolling = true;\r\n\t\t\t\t});\r\n\r\n\t\t\t\t$(datatable.tableBody).find('.' + pfx + 'datatable-cell').off('mouseenter', 'mouseleave').on('mouseenter', function() {\r\n\t\t\t\t\t// reset scroll timer to hover class\r\n\t\t\t\t\tPlugin.hoverTimer = setTimeout(function() {\r\n\t\t\t\t\t\tPlugin.isScrolling = false;\r\n\t\t\t\t\t}, 200);\r\n\t\t\t\t\tif (Plugin.isScrolling) return;\r\n\r\n\t\t\t\t\t// normal table\r\n\t\t\t\t\tvar row = $(this).closest('.' + pfx + 'datatable-row').addClass(pfx + 'datatable-row-hover');\r\n\t\t\t\t\tvar index = $(row).index() + 1;\r\n\r\n\t\t\t\t\t// lock table\r\n\t\t\t\t\t$(row).closest('.' + pfx + 'datatable-lock').parent().find('.' + pfx + 'datatable-row:nth-child(' + index + ')').addClass(pfx + 'datatable-row-hover');\r\n\t\t\t\t}).on('mouseleave', function() {\r\n\t\t\t\t\t// normal table\r\n\t\t\t\t\tvar row = $(this).closest('.' + pfx + 'datatable-row').removeClass(pfx + 'datatable-row-hover');\r\n\t\t\t\t\tvar index = $(row).index() + 1;\r\n\r\n\t\t\t\t\t// look table\r\n\t\t\t\t\t$(row).closest('.' + pfx + 'datatable-lock').parent().find('.' + pfx + 'datatable-row:nth-child(' + index + ')').removeClass(pfx + 'datatable-row-hover');\r\n\t\t\t\t});\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Adjust width of locked table containers by resize handler\r\n\t\t\t * @returns {number}\r\n\t\t\t */\r\n\t\t\tadjustLockContainer: function() {\r\n\t\t\t\tif (!Plugin.isLocked()) return 0;\r\n\r\n\t\t\t\t// refer to head dimension\r\n\t\t\t\tvar containerWidth = $(datatable.tableHead).width();\r\n\t\t\t\tvar lockLeft = $(datatable.tableHead).find('.' + pfx + 'datatable-lock-left').width();\r\n\t\t\t\tvar lockRight = $(datatable.tableHead).find('.' + pfx + 'datatable-lock-right').width();\r\n\r\n\t\t\t\tif (typeof lockLeft === 'undefined') lockLeft = 0;\r\n\t\t\t\tif (typeof lockRight === 'undefined') lockRight = 0;\r\n\r\n\t\t\t\tvar lockScroll = Math.floor(containerWidth - lockLeft - lockRight);\r\n\t\t\t\t$(datatable.table).find('.' + pfx + 'datatable-lock-scroll').css('width', lockScroll);\r\n\r\n\t\t\t\treturn lockScroll;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * todo; not in use\r\n\t\t\t */\r\n\t\t\tdragResize: function() {\r\n\t\t\t\tvar pressed = false;\r\n\t\t\t\tvar start = undefined;\r\n\t\t\t\tvar startX, startWidth;\r\n\t\t\t\t$(datatable.tableHead).find('.' + pfx + 'datatable-cell').mousedown(function(e) {\r\n\t\t\t\t\tstart = $(this);\r\n\t\t\t\t\tpressed = true;\r\n\t\t\t\t\tstartX = e.pageX;\r\n\t\t\t\t\tstartWidth = $(this).width();\r\n\t\t\t\t\t$(start).addClass(pfx + 'datatable-cell-resizing');\r\n\r\n\t\t\t\t}).mousemove(function(e) {\r\n\t\t\t\t\tif (pressed) {\r\n\t\t\t\t\t\tvar i = $(start).index();\r\n\t\t\t\t\t\tvar tableBody = $(datatable.tableBody);\r\n\t\t\t\t\t\tvar ifLocked = $(start).closest('.' + pfx + 'datatable-lock');\r\n\r\n\t\t\t\t\t\tif (ifLocked) {\r\n\t\t\t\t\t\t\tvar lockedIndex = $(ifLocked).index();\r\n\t\t\t\t\t\t\ttableBody = $(datatable.tableBody).find('.' + pfx + 'datatable-lock').eq(lockedIndex);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t$(tableBody).find('.' + pfx + 'datatable-row').each(function(tri, tr) {\r\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));\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t$(start).children().css('width', startWidth + (e.pageX - startX));\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}).mouseup(function() {\r\n\t\t\t\t\t$(start).removeClass(pfx + 'datatable-cell-resizing');\r\n\t\t\t\t\tpressed = false;\r\n\t\t\t\t});\r\n\r\n\t\t\t\t$(document).mouseup(function() {\r\n\t\t\t\t\t$(start).removeClass(pfx + 'datatable-cell-resizing');\r\n\t\t\t\t\tpressed = false;\r\n\t\t\t\t});\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * To prepare placeholder for table before content is loading\r\n\t\t\t */\r\n\t\t\tinitHeight: function() {\r\n\t\t\t\tif (options.layout.height && options.layout.scroll) {\r\n\t\t\t\t\tvar theadHeight = $(datatable.tableHead).find('.' + pfx + 'datatable-row').outerHeight();\r\n\t\t\t\t\tvar tfootHeight = $(datatable.tableFoot).find('.' + pfx + 'datatable-row').outerHeight();\r\n\t\t\t\t\tvar bodyHeight = options.layout.height;\r\n\t\t\t\t\tif (theadHeight > 0) {\r\n\t\t\t\t\t\tbodyHeight -= theadHeight;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (tfootHeight > 0) {\r\n\t\t\t\t\t\tbodyHeight -= tfootHeight;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// scrollbar offset\r\n\t\t\t\t\tbodyHeight -= 2;\r\n\r\n\t\t\t\t\t$(datatable.tableBody).css('max-height', Math.floor(parseFloat(bodyHeight)));\r\n\r\n\t\t\t\t\t// set scrollable area fixed height\r\n\t\t\t\t\t// $(datatable.tableBody).find('.' + pfx + 'datatable-lock-scroll').css('height', Math.floor(parseFloat(bodyHeight)));\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Setup base DOM (table, thead, tbody, tfoot) and create if not\r\n\t\t\t * exist.\r\n\t\t\t */\r\n\t\t\tsetupBaseDOM: function() {\r\n\t\t\t\t// keep original state before datatable initialize\r\n\t\t\t\tdatatable.initialDatatable = $(datatable).clone();\r\n\r\n\t\t\t\t// main element\r\n\t\t\t\tif ($(datatable).prop('tagName') === 'TABLE') {\r\n\t\t\t\t\t// if main init element is , wrap with div\r\n\t\t\t\t\tdatatable.table = $(datatable).removeClass(pfx + 'datatable').addClass(pfx + 'datatable-table');\r\n\t\t\t\t\tif ($(datatable.table).parents('.' + pfx + 'datatable').length === 0) {\r\n\t\t\t\t\t\tdatatable.table.wrap($('
').addClass(pfx + 'datatable').addClass(pfx + 'datatable-' + options.layout.theme));\r\n\t\t\t\t\t\tdatatable.wrap = $(datatable.table).parent();\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// create table\r\n\t\t\t\t\tdatatable.wrap = $(datatable).addClass(pfx + 'datatable').addClass(pfx + 'datatable-' + options.layout.theme);\r\n\t\t\t\t\tdatatable.table = $('
').addClass(pfx + 'datatable-table').appendTo(datatable);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (typeof options.layout.class !== 'undefined') {\r\n\t\t\t\t\t$(datatable.wrap).addClass(options.layout.class);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$(datatable.table).removeClass(pfx + 'datatable-destroyed').css('display', 'block');\r\n\r\n\t\t\t\t// force disable save state\r\n\t\t\t\tif (typeof $(datatable).attr('id') === 'undefined') {\r\n\t\t\t\t\tPlugin.setOption('data.saveState', false);\r\n\t\t\t\t\t$(datatable.table).attr('id', util.getUniqueID(pfx + 'datatable-'));\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// predefine table height\r\n\t\t\t\tif (Plugin.getOption('layout.minHeight'))\r\n\t\t\t\t\t$(datatable.table).css('min-height', Plugin.getOption('layout.minHeight'));\r\n\r\n\t\t\t\tif (Plugin.getOption('layout.height'))\r\n\t\t\t\t\t$(datatable.table).css('max-height', Plugin.getOption('layout.height'));\r\n\r\n\t\t\t\t// for normal table load\r\n\t\t\t\tif (options.data.type === null) {\r\n\t\t\t\t\t$(datatable.table).css('width', '').css('display', '');\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// create table head element\r\n\t\t\t\tdatatable.tableHead = $(datatable.table).find('thead');\r\n\t\t\t\tif ($(datatable.tableHead).length === 0) {\r\n\t\t\t\t\tdatatable.tableHead = $('').prependTo(datatable.table);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// create table head element\r\n\t\t\t\tdatatable.tableBody = $(datatable.table).find('tbody');\r\n\t\t\t\tif ($(datatable.tableBody).length === 0) {\r\n\t\t\t\t\tdatatable.tableBody = $('').appendTo(datatable.table);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (typeof options.layout.footer !== 'undefined' &&\r\n\t\t\t\t\toptions.layout.footer) {\r\n\t\t\t\t\t// create table foot element\r\n\t\t\t\t\tdatatable.tableFoot = $(datatable.table).find('tfoot');\r\n\t\t\t\t\tif ($(datatable.tableFoot).length === 0) {\r\n\t\t\t\t\t\tdatatable.tableFoot = $('').appendTo(datatable.table);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Set column data before table manipulation.\r\n\t\t\t */\r\n\t\t\tsetupCellField: function(tableParts) {\r\n\t\t\t\tif (typeof tableParts === 'undefined') tableParts = $(datatable.table).children();\r\n\t\t\t\tvar columns = options.columns;\r\n\t\t\t\t$.each(tableParts, function(part, tablePart) {\r\n\t\t\t\t\t$(tablePart).find('.' + pfx + 'datatable-row').each(function(tri, tr) {\r\n\t\t\t\t\t\t// prepare data\r\n\t\t\t\t\t\t$(tr).find('.' + pfx + 'datatable-cell').each(function(tdi, td) {\r\n\t\t\t\t\t\t\tif (typeof columns[tdi] !== 'undefined') {\r\n\t\t\t\t\t\t\t\t$(td).data(columns[tdi]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Set column template callback\r\n\t\t\t * @param tablePart\r\n\t\t\t */\r\n\t\t\tsetupTemplateCell: function(tablePart) {\r\n\t\t\t\tif (typeof tablePart === 'undefined') tablePart = datatable.tableBody;\r\n\t\t\t\tvar columns = options.columns;\r\n\t\t\t\t$(tablePart).find('.' + pfx + 'datatable-row').each(function(tri, tr) {\r\n\t\t\t\t\t// row data object, if any\r\n\t\t\t\t\tvar obj = $(tr).data('obj');\r\n\t\t\t\t\tif (typeof obj === 'undefined') {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// @deprecated in v5.0.6\r\n\t\t\t\t\t// obj['getIndex'] = function() {\r\n\t\t\t\t\t// \treturn tri;\r\n\t\t\t\t\t// };\r\n\t\t\t\t\t// @deprecated in v5.0.6\r\n\t\t\t\t\t// obj['getDatatable'] = function() {\r\n\t\t\t\t\t// \treturn datatable;\r\n\t\t\t\t\t// };\r\n\r\n\t\t\t\t\t// @deprecated in v5.0.6\r\n\t\t\t\t\tvar rowCallback = Plugin.getOption('rows.callback');\r\n\t\t\t\t\tif (typeof rowCallback === 'function') {\r\n\t\t\t\t\t\trowCallback($(tr), obj, tri);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// before template row callback\r\n\t\t\t\t\tvar beforeTemplate = Plugin.getOption('rows.beforeTemplate');\r\n\t\t\t\t\tif (typeof beforeTemplate === 'function') {\r\n\t\t\t\t\t\tbeforeTemplate($(tr), obj, tri);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// if data object is undefined, collect from table\r\n\t\t\t\t\tif (typeof obj === 'undefined') {\r\n\t\t\t\t\t\tobj = {};\r\n\t\t\t\t\t\t$(tr).find('.' + pfx + 'datatable-cell').each(function(tdi, td) {\r\n\t\t\t\t\t\t\t// get column settings by field\r\n\t\t\t\t\t\t\tvar column = $.grep(columns, function(n, i) {\r\n\t\t\t\t\t\t\t\treturn $(td).data('field') === n.field;\r\n\t\t\t\t\t\t\t})[0];\r\n\t\t\t\t\t\t\tif (typeof column !== 'undefined') {\r\n\t\t\t\t\t\t\t\tobj[column['field']] = $(td).text();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$(tr).find('.' + pfx + 'datatable-cell').each(function(tdi, td) {\r\n\t\t\t\t\t\t// get column settings by field\r\n\t\t\t\t\t\tvar column = $.grep(columns, function(n, i) {\r\n\t\t\t\t\t\t\treturn $(td).data('field') === n.field;\r\n\t\t\t\t\t\t})[0];\r\n\t\t\t\t\t\tif (typeof column !== 'undefined') {\r\n\t\t\t\t\t\t\t// column template\r\n\t\t\t\t\t\t\tif (typeof column.template !== 'undefined') {\r\n\t\t\t\t\t\t\t\tvar finalValue = '';\r\n\t\t\t\t\t\t\t\t// template string\r\n\t\t\t\t\t\t\t\tif (typeof column.template === 'string') {\r\n\t\t\t\t\t\t\t\t\tfinalValue = Plugin.dataPlaceholder(column.template, obj);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t// template callback function\r\n\t\t\t\t\t\t\t\tif (typeof column.template === 'function') {\r\n\t\t\t\t\t\t\t\t\tfinalValue = column.template(obj, tri, datatable);\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t// sanitize using DOMPurify if installed\r\n\t\t\t\t\t\t\t\tif (typeof DOMPurify !== 'undefined') {\r\n\t\t\t\t\t\t\t\t\tfinalValue = DOMPurify.sanitize(finalValue);\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tvar span = document.createElement('span');\r\n\t\t\t\t\t\t\t\tspan.innerHTML = finalValue;\r\n\r\n\t\t\t\t\t\t\t\t// insert to cell, wrap with span\r\n\t\t\t\t\t\t\t\t$(td).html(span);\r\n\r\n\t\t\t\t\t\t\t\t// set span overflow\r\n\t\t\t\t\t\t\t\tif (typeof column.overflow !== 'undefined') {\r\n\t\t\t\t\t\t\t\t\t$(span).css('overflow', column.overflow);\r\n\t\t\t\t\t\t\t\t\t$(span).css('position', 'relative');\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// after template row callback\r\n\t\t\t\t\tvar afterTemplate = Plugin.getOption('rows.afterTemplate');\r\n\t\t\t\t\tif (typeof afterTemplate === 'function') {\r\n\t\t\t\t\t\tafterTemplate($(tr), obj, tri);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Setup extra system column properties\r\n\t\t\t * Note: selector checkbox, subtable toggle\r\n\t\t\t */\r\n\t\t\tsetupSystemColumn: function() {\r\n\t\t\t\tdatatable.dataSet = datatable.dataSet || [];\r\n\t\t\t\t// no records available\r\n\t\t\t\tif (datatable.dataSet.length === 0) return;\r\n\r\n\t\t\t\tvar columns = options.columns;\r\n\t\t\t\t$(datatable.tableBody).find('.' + pfx + 'datatable-row').each(function(tri, tr) {\r\n\t\t\t\t\t$(tr).find('.' + pfx + 'datatable-cell').each(function(tdi, td) {\r\n\t\t\t\t\t\t// get column settings by field\r\n\t\t\t\t\t\tvar column = $.grep(columns, function(n, i) {\r\n\t\t\t\t\t\t\treturn $(td).data('field') === n.field;\r\n\t\t\t\t\t\t})[0];\r\n\t\t\t\t\t\tif (typeof column !== 'undefined') {\r\n\t\t\t\t\t\t\tvar value = $(td).text();\r\n\r\n\t\t\t\t\t\t\t// enable column selector\r\n\t\t\t\t\t\t\tif (typeof column.selector !== 'undefined' && column.selector !== false) {\r\n\t\t\t\t\t\t\t\t// check if checkbox exist\r\n\t\t\t\t\t\t\t\tif ($(td).find('.' + pfx + 'checkbox [type=\"checkbox\"]').length > 0) return;\r\n\r\n\t\t\t\t\t\t\t\t$(td).addClass(pfx + 'datatable-cell-check');\r\n\r\n\t\t\t\t\t\t\t\t// append checkbox\r\n\t\t\t\t\t\t\t\tvar chk = $(' as parent and add as child table\r\n\t\t\t\t\t\tsubTableRow = $('').\r\n\t\t\t\t\t\t\taddClass(pfx + 'datatable-row-subtable ' + pfx + 'datatable-row-loading').\r\n\t\t\t\t\t\t\thide().\r\n\t\t\t\t\t\t\tappend($('').addClass(pfx + 'datatable-row-detail').insertAfter(row);\r\n\t\t\t\t\t\tvar detailRowTd = $('
').addClass(pfx + 'datatable-subtable').attr('colspan', Plugin.getTotalColumns()));\r\n\t\t\t\t\t\t$(parentRow).after(subTableRow);\r\n\t\t\t\t\t\t// add class to even row\r\n\t\t\t\t\t\tif ($(parentRow).hasClass(pfx + 'datatable-row-even')) {\r\n\t\t\t\t\t\t\t$(subTableRow).addClass(pfx + 'datatable-row-subtable-even');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$(subTableRow).toggle();\r\n\r\n\t\t\t\t\tvar subTable = $(subTableRow).find('.' + pfx + 'datatable-subtable');\r\n\r\n\t\t\t\t\t// get id from first column of parent row\r\n\t\t\t\t\tvar primaryKey = $(this).closest('[data-field]:first-child').find('.' + pfx + 'datatable-toggle-subtable').data('value');\r\n\r\n\t\t\t\t\tvar icon = $(this).find('i').removeAttr('class');\r\n\r\n\t\t\t\t\t// prevent duplicate datatable init\r\n\t\t\t\t\tif ($(parentRow).hasClass(pfx + 'datatable-row-subtable-expanded')) {\r\n\t\t\t\t\t\t$(icon).addClass(Plugin.getOption('layout.icons.rowDetail.collapse'));\r\n\t\t\t\t\t\t// remove expand class from parent row\r\n\t\t\t\t\t\t$(parentRow).removeClass(pfx + 'datatable-row-subtable-expanded');\r\n\t\t\t\t\t\t// trigger event on collapse\r\n\t\t\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-collapse-subtable', [parentRow]);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// expand and run callback function\r\n\t\t\t\t\t\t$(icon).addClass(Plugin.getOption('layout.icons.rowDetail.expand'));\r\n\t\t\t\t\t\t// add expand class to parent row\r\n\t\t\t\t\t\t$(parentRow).addClass(pfx + 'datatable-row-subtable-expanded');\r\n\t\t\t\t\t\t// trigger event on expand\r\n\t\t\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-expand-subtable', [parentRow]);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// prevent duplicate datatable init\r\n\t\t\t\t\tif ($(subTable).find('.' + pfx + 'datatable').length === 0) {\r\n\t\t\t\t\t\t// get data by primary id\r\n\t\t\t\t\t\t$.map(datatable.dataSet, function(n, i) {\r\n\t\t\t\t\t\t\t// primary id must be at the first column, otherwise e.data will be undefined\r\n\t\t\t\t\t\t\tif (primaryKey === n[options.columns[0].field]) {\r\n\t\t\t\t\t\t\t\te.data = n;\r\n\t\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t// deprecated in v5.0.6\r\n\t\t\t\t\t\te.detailCell = subTable;\r\n\r\n\t\t\t\t\t\te.parentRow = parentRow;\r\n\t\t\t\t\t\te.subTable = subTable;\r\n\r\n\t\t\t\t\t\t// run callback with event\r\n\t\t\t\t\t\tsubTableCallback(e);\r\n\r\n\t\t\t\t\t\t$(subTable).children('.' + pfx + 'datatable').on(pfx + 'datatable-on-init', function(e) {\r\n\t\t\t\t\t\t\t$(subTableRow).removeClass(pfx + 'datatable-row-loading');\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tif (Plugin.getOption('data.type') === 'local') {\r\n\t\t\t\t\t\t\t$(subTableRow).removeClass(pfx + 'datatable-row-loading');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tvar columns = options.columns;\r\n\t\t\t\t$(datatable.tableBody).find('.' + pfx + 'datatable-row').each(function(tri, tr) {\r\n\t\t\t\t\t$(tr).find('.' + pfx + 'datatable-cell').each(function(tdi, td) {\r\n\t\t\t\t\t\t// get column settings by field\r\n\t\t\t\t\t\tvar column = $.grep(columns, function(n, i) {\r\n\t\t\t\t\t\t\treturn $(td).data('field') === n.field;\r\n\t\t\t\t\t\t})[0];\r\n\t\t\t\t\t\tif (typeof column !== 'undefined') {\r\n\t\t\t\t\t\t\tvar value = $(td).text();\r\n\t\t\t\t\t\t\t// enable column subtable toggle\r\n\t\t\t\t\t\t\tif (typeof column.subtable !== 'undefined' && column.subtable) {\r\n\t\t\t\t\t\t\t\t// check if subtable toggle exist\r\n\t\t\t\t\t\t\t\tif ($(td).find('.' + pfx + 'datatable-toggle-subtable').length > 0) return;\r\n\t\t\t\t\t\t\t\t// append subtable toggle\r\n\t\t\t\t\t\t\t\t$(td).\r\n\t\t\t\t\t\t\t\t\thtml($('').\r\n\t\t\t\t\t\t\t\t\t\taddClass(pfx + 'datatable-toggle-subtable').\r\n\t\t\t\t\t\t\t\t\t\tattr('href', '#').\r\n\t\t\t\t\t\t\t\t\t\tattr('data-value', value).\r\n\t\t\t\t\t\t\t\t\t\tattr('title', Plugin.getOption('detail.title')).\r\n\t\t\t\t\t\t\t\t\t\ton('click', toggleSubTable).\r\n\t\t\t\t\t\t\t\t\t\tappend($('').css('width', $(td).data('width')).addClass(Plugin.getOption('layout.icons.rowDetail.collapse'))));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// $(datatable.tableHead).find('.'+pfx+'-datatable-row').first()\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Datasource mapping callback\r\n\t\t\t */\r\n\t\t\tdataMapCallback: function(raw) {\r\n\t\t\t\t// static dataset array\r\n\t\t\t\tvar dataSet = raw;\r\n\t\t\t\t// dataset mapping callback\r\n\t\t\t\tif (typeof Plugin.getOption('data.source.read.map') === 'function') {\r\n\t\t\t\t\treturn Plugin.getOption('data.source.read.map')(raw);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// default data mapping fallback\r\n\t\t\t\t\tif (typeof raw !== 'undefined' && typeof raw.data !== 'undefined') {\r\n\t\t\t\t\t\tdataSet = raw.data;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn dataSet;\r\n\t\t\t},\r\n\r\n\t\t\tisSpinning: false,\r\n\t\t\t/**\r\n\t\t\t * BlockUI spinner callback\r\n\t\t\t * @param block\r\n\t\t\t * @param target\r\n\t\t\t */\r\n\t\t\tspinnerCallback: function(block, target) {\r\n\t\t\t\tif (typeof target === 'undefined') target = datatable;\r\n\t\t\t\t// get spinner options\r\n\t\t\t\tvar spinnerOptions = Plugin.getOption('layout.spinner');\r\n\t\t\t\t// spinner is disabled\r\n\t\t\t\tif (typeof spinnerOptions === 'undefined' || !spinnerOptions) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (block) {\r\n\t\t\t\t\tif (!Plugin.isSpinning) {\r\n\t\t\t\t\t\tif (typeof spinnerOptions.message !== 'undefined' && spinnerOptions.message === true) {\r\n\t\t\t\t\t\t\t// use default spinner message from translation\r\n\t\t\t\t\t\t\tspinnerOptions.message = Plugin.getOption('translate.records.processing');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tPlugin.isSpinning = true;\r\n\t\t\t\t\t\tif (typeof app !== 'undefined') {\r\n\t\t\t\t\t\t\tapp.block(target, spinnerOptions);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tPlugin.isSpinning = false;\r\n\t\t\t\t\tif (typeof app !== 'undefined') {\r\n\t\t\t\t\t\tapp.unblock(target);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Default sort callback function\r\n\t\t\t * @param data\r\n\t\t\t * @param sort\r\n\t\t\t * @param column\r\n\t\t\t * @returns {*|Array.|{sort, field}|{asc, desc}}\r\n\t\t\t */\r\n\t\t\tsortCallback: function(data, sort, column) {\r\n\t\t\t\tvar type = column['type'] || 'string';\r\n\t\t\t\tvar format = column['format'] || '';\r\n\t\t\t\tvar field = column['field'];\r\n\r\n\t\t\t\treturn $(data).sort(function(a, b) {\r\n\t\t\t\t\tvar aField = a[field];\r\n\t\t\t\t\tvar bField = b[field];\r\n\r\n\t\t\t\t\tswitch (type) {\r\n\t\t\t\t\t\tcase 'date':\r\n\t\t\t\t\t\t\tif (typeof moment === 'undefined') {\r\n\t\t\t\t\t\t\t\tthrow new Error('Moment.js is required.');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tvar diff = moment(aField, format).diff(moment(bField, format));\r\n\t\t\t\t\t\t\tif (sort === 'asc') {\r\n\t\t\t\t\t\t\t\treturn diff > 0 ? 1 : diff < 0 ? -1 : 0;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\treturn diff < 0 ? 1 : diff > 0 ? -1 : 0;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase 'number':\r\n\t\t\t\t\t\t\tif (isNaN(parseFloat(aField)) && aField != null) {\r\n\t\t\t\t\t\t\t\taField = Number(aField.replace(/[^0-9\\.-]+/g, ''));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (isNaN(parseFloat(bField)) && bField != null) {\r\n\t\t\t\t\t\t\t\tbField = Number(bField.replace(/[^0-9\\.-]+/g, ''));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\taField = parseFloat(aField);\r\n\t\t\t\t\t\t\tbField = parseFloat(bField);\r\n\t\t\t\t\t\t\tif (sort === 'asc') {\r\n\t\t\t\t\t\t\t\treturn aField > bField ? 1 : aField < bField ? -1 : 0;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\treturn aField < bField ? 1 : aField > bField ? -1 : 0;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase 'html':\r\n\t\t\t\t\t\t\treturn $(data).sort(function(a, b) {\r\n\t\t\t\t\t\t\t\t// get the text only from html\r\n\t\t\t\t\t\t\t\taField = $(a[field]).text();\r\n\t\t\t\t\t\t\t\tbField = $(b[field]).text();\r\n\t\t\t\t\t\t\t\t// sort\r\n\t\t\t\t\t\t\t\tif (sort === 'asc') {\r\n\t\t\t\t\t\t\t\t\treturn aField > bField ? 1 : aField < bField ? -1 : 0;\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\treturn aField < bField ? 1 : aField > bField ? -1 : 0;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase 'string':\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tif (sort === 'asc') {\r\n\t\t\t\t\t\t\t\treturn aField > bField ? 1 : aField < bField ? -1 : 0;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\treturn aField < bField ? 1 : aField > bField ? -1 : 0;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Custom debug log\r\n\t\t\t * @param text\r\n\t\t\t * @param obj\r\n\t\t\t */\r\n\t\t\tlog: function(text, obj) {\r\n\t\t\t\tif (typeof obj === 'undefined') obj = '';\r\n\t\t\t\tif (datatable.debug) {\r\n\t\t\t\t\tconsole.log(text, obj);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Auto hide columnds overflow in row\r\n\t\t\t */\r\n\t\t\tautoHide: function() {\r\n\t\t\t\tvar hiddenExist = false;\r\n\t\t\t\t// force hide enabled\r\n\t\t\t\tvar hidDefault = $(datatable.table).find('[data-autohide-enabled]');\r\n\t\t\t\tif (hidDefault.length) {\r\n\t\t\t\t\thiddenExist = true;\r\n\t\t\t\t\thidDefault.hide();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar toggleHiddenColumns = function(e) {\r\n\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\tvar row = $(this).closest('.' + pfx + 'datatable-row');\r\n\t\t\t\t\tvar detailRow = $(row).next();\r\n\r\n\t\t\t\t\tif (!$(detailRow).hasClass(pfx + 'datatable-row-detail')) {\r\n\t\t\t\t\t\t$(this).find('i').removeClass(Plugin.getOption('layout.icons.rowDetail.collapse')).addClass(Plugin.getOption('layout.icons.rowDetail.expand'));\r\n\r\n\t\t\t\t\t\tvar hiddenCells = $(row).find('.' + pfx + 'datatable-cell:hidden');\r\n\t\t\t\t\t\tvar clonedCells = hiddenCells.clone().show();\r\n\r\n\t\t\t\t\t\tdetailRow = $('
').addClass(pfx + 'datatable-detail').attr('colspan', Plugin.getTotalColumns()).appendTo(detailRow);\r\n\r\n\t\t\t\t\t\tvar detailSubTable = $('');\r\n\t\t\t\t\t\t$(clonedCells).each(function() {\r\n\t\t\t\t\t\t\tvar field = $(this).data('field');\r\n\t\t\t\t\t\t\tvar column = $.grep(options.columns, function(n, i) {\r\n\t\t\t\t\t\t\t\treturn field === n.field;\r\n\t\t\t\t\t\t\t})[0];\r\n\t\t\t\t\t\t\tif (typeof column === 'undefined' || column.visible !== false) {\r\n\t\t\t\t\t\t\t\t$(detailSubTable).\r\n\t\t\t\t\t\t\t\t\t\tappend($('').\r\n\t\t\t\t\t\t\t\t\t\t\t\tappend($('').append($('').append(column.title))).\r\n\t\t\t\t\t\t\t\t\t\t\t\tappend(this));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\t$(detailRowTd).append(detailSubTable);\r\n\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$(this).find('i').removeClass(Plugin.getOption('layout.icons.rowDetail.expand')).addClass(Plugin.getOption('layout.icons.rowDetail.collapse'));\r\n\t\t\t\t\t\t$(detailRow).remove();\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t$(datatable.table).find('.' + pfx + 'datatable-cell').show();\r\n\t\t\t\t\t$(datatable.tableBody).each(function() {\r\n\t\t\t\t\t\tvar recursive = 0;\r\n\t\t\t\t\t\twhile ($(this)[0].offsetWidth < $(this)[0].scrollWidth && recursive < options.columns.length) {\r\n\t\t\t\t\t\t\t$(datatable.table).find('.' + pfx + 'datatable-row').each(function(i) {\r\n\t\t\t\t\t\t\t\tvar cell = $(this).find('.' + pfx + 'datatable-cell:not(:hidden):not([data-autohide-disabled])').last();\r\n\t\t\t\t\t\t\t\t$(cell).hide();\r\n\t\t\t\t\t\t\t\thiddenExist = true;\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\trecursive++;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif (hiddenExist) {\r\n\t\t\t\t\t\t// toggle show hidden columns\r\n\t\t\t\t\t\t$(datatable.tableBody).find('.' + pfx + 'datatable-row').each(function() {\r\n\t\t\t\t\t\t\t// if no toggle yet\r\n\t\t\t\t\t\t\tif($(this).find('.' + pfx + 'datatable-toggle-detail').length === 0) {\r\n\t\t\t\t\t\t\t\t// add toggle\r\n\t\t\t\t\t\t\t\t$(this).prepend($('');\r\n\t\t\t\t\t\t\t\t$(datatable.tableFoot).\r\n\t\t\t\t\t\t\t\t\tfind('.' + pfx + 'datatable-row').\r\n\t\t\t\t\t\t\t\t\tfirst().\r\n\t\t\t\t\t\t\t\t\tprepend('');\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t$(datatable.tableHead).find('.' + pfx + 'datatable-toggle-detail').find('span');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tPlugin.adjustCellsWidth.call();\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * To enable auto columns features for remote data source\r\n\t\t\t */\r\n\t\t\tsetAutoColumns: function() {\r\n\t\t\t\tif (Plugin.getOption('data.autoColumns')) {\r\n\t\t\t\t\t$.each(datatable.dataSet[0], function(k, v) {\r\n\t\t\t\t\t\tvar found = $.grep(options.columns, function(n, i) {\r\n\t\t\t\t\t\t\treturn k === n.field;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tif (found.length === 0) {\r\n\t\t\t\t\t\t\toptions.columns.push({field: k, title: k});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t$(datatable.tableHead).find('.' + pfx + 'datatable-row').remove();\r\n\t\t\t\t\tPlugin.setHeadTitle();\r\n\t\t\t\t\tif (Plugin.getOption('layout.footer')) {\r\n\t\t\t\t\t\t$(datatable.tableFoot).find('.' + pfx + 'datatable-row').remove();\r\n\t\t\t\t\t\tPlugin.setHeadTitle(datatable.tableFoot);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/********************\r\n\t\t\t ** HELPERS\r\n\t\t\t ********************/\r\n\r\n\t\t\t/**\r\n\t\t\t * Check if table is a locked colums table\r\n\t\t\t */\r\n\t\t\tisLocked: function() {\r\n\t\t\t\tvar isLocked = Plugin.lockEnabledColumns();\r\n\t\t\t\treturn isLocked.left.length > 0 || isLocked.right.length > 0;\r\n\t\t\t},\r\n\r\n\t\t\tisSubtable: function() {\r\n\t\t\t\treturn util.hasClass(datatable.wrap[0], pfx + 'datatable-subtable') || false;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get total extra space of an element for width calculation,\r\n\t\t\t * including padding, margin, border\r\n\t\t\t * @param element\r\n\t\t\t * @returns {number}\r\n\t\t\t */\r\n\t\t\tgetExtraSpace: function(element) {\r\n\t\t\t\tvar padding = parseInt($(element).css('paddingRight')) +\r\n\t\t\t\t\tparseInt($(element).css('paddingLeft'));\r\n\t\t\t\tvar margin = parseInt($(element).css('marginRight')) +\r\n\t\t\t\t\tparseInt($(element).css('marginLeft'));\r\n\t\t\t\tvar border = Math.ceil(\r\n\t\t\t\t\t$(element).css('border-right-width').replace('px', ''));\r\n\t\t\t\treturn padding + margin + border;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Insert data of array into {{ }} template placeholder\r\n\t\t\t * @param template\r\n\t\t\t * @param data\r\n\t\t\t * @returns {*}\r\n\t\t\t */\r\n\t\t\tdataPlaceholder: function(template, data) {\r\n\t\t\t\tvar result = template;\r\n\t\t\t\t$.each(data, function(key, val) {\r\n\t\t\t\t\tresult = result.replace('{{' + key + '}}', val);\r\n\t\t\t\t});\r\n\t\t\t\treturn result;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get table unique ID\r\n\t\t\t * Note: table unique change each time refreshed\r\n\t\t\t * @param suffix\r\n\t\t\t * @returns {*}\r\n\t\t\t */\r\n\t\t\tgetTableId: function(suffix) {\r\n\t\t\t\tif (typeof suffix === 'undefined') suffix = '';\r\n\t\t\t\tvar id = $(datatable).attr('id');\r\n\t\t\t\tif (typeof id === 'undefined') {\r\n\t\t\t\t\tid = $(datatable).attr('class').split(' ')[0];\r\n\t\t\t\t}\r\n\t\t\t\treturn id + suffix;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get table prefix with depth number\r\n\t\t\t */\r\n\t\t\tgetTablePrefix: function(suffix) {\r\n\t\t\t\tif (typeof suffix !== 'undefined') suffix = '-' + suffix;\r\n\t\t\t\treturn Plugin.getTableId() + '-' + Plugin.getDepth() + suffix;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get current table depth of sub table\r\n\t\t\t * @returns {number}\r\n\t\t\t */\r\n\t\t\tgetDepth: function() {\r\n\t\t\t\tvar depth = 0;\r\n\t\t\t\tvar table = datatable.table;\r\n\t\t\t\tdo {\r\n\t\t\t\t\ttable = $(table).parents('.' + pfx + 'datatable-table');\r\n\t\t\t\t\tdepth++;\r\n\t\t\t\t} while ($(table).length > 0);\r\n\t\t\t\treturn depth;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Keep state item\r\n\t\t\t * @param key\r\n\t\t\t * @param value\r\n\t\t\t */\r\n\t\t\tstateKeep: function(key, value) {\r\n\t\t\t\tkey = Plugin.getTablePrefix(key);\r\n\t\t\t\tif (Plugin.getOption('data.saveState') === false) return;\r\n\t\t\t\tif (localStorage) {\r\n\t\t\t\t\tlocalStorage.setItem(key, JSON.stringify(value));\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get state item\r\n\t\t\t * @param key\r\n\t\t\t * @param defValue\r\n\t\t\t */\r\n\t\t\tstateGet: function(key, defValue) {\r\n\t\t\t\tkey = Plugin.getTablePrefix(key);\r\n\t\t\t\tif (Plugin.getOption('data.saveState') === false) return;\r\n\t\t\t\tvar value = null;\r\n\t\t\t\tif (localStorage) {\r\n\t\t\t\t\tvalue = localStorage.getItem(key);\r\n\t\t\t\t}\r\n\t\t\t\tif (typeof value !== 'undefined' && value !== null) {\r\n\t\t\t\t\treturn JSON.parse(value);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Update data in state without clear existing\r\n\t\t\t * @param key\r\n\t\t\t * @param value\r\n\t\t\t */\r\n\t\t\tstateUpdate: function(key, value) {\r\n\t\t\t\tvar ori = Plugin.stateGet(key);\r\n\t\t\t\tif (typeof ori === 'undefined' || ori === null) ori = {};\r\n\t\t\t\tPlugin.stateKeep(key, $.extend({}, ori, value));\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Remove state item\r\n\t\t\t * @param key\r\n\t\t\t */\r\n\t\t\tstateRemove: function(key) {\r\n\t\t\t\tkey = Plugin.getTablePrefix(key);\r\n\t\t\t\tif (localStorage) {\r\n\t\t\t\t\tlocalStorage.removeItem(key);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get total columns.\r\n\t\t\t */\r\n\t\t\tgetTotalColumns: function(tablePart) {\r\n\t\t\t\tif (typeof tablePart === 'undefined') tablePart = datatable.tableBody;\r\n\t\t\t\treturn $(tablePart).find('.' + pfx + 'datatable-row').first().find('.' + pfx + 'datatable-cell').length;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get table row. Useful to get row when current table is in lock\r\n\t\t\t * mode. Can be used for both lock and normal table mode. By\r\n\t\t\t * default, returning result will be in a list of \r\n\t\t\t\tvar result = $(tablePart).find('.' + pfx + 'datatable-row:not(.' + pfx + 'datatable-row-detail):nth-child(' + row + ')');\r\n\t\t\t\tif (tdOnly) {\r\n\t\t\t\t\t// get list of
').\r\n\t\t\t\t\t\t\t\t\t\taddClass(pfx + 'datatable-cell ' + pfx + 'datatable-toggle-detail').\r\n\t\t\t\t\t\t\t\t\t\tappend($('').\r\n\t\t\t\t\t\t\t\t\t\t\taddClass(pfx + 'datatable-toggle-detail').\r\n\t\t\t\t\t\t\t\t\t\t\tattr('href', '').\r\n\t\t\t\t\t\t\t\t\t\t\ton('click', toggleHiddenColumns).\r\n\t\t\t\t\t\t\t\t\t\t\tappend('')));\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t// check if subtable toggle exist\r\n\t\t\t\t\t\t\tif ($(datatable.tableHead).find('.' + pfx + 'datatable-toggle-detail').length === 0) {\r\n\t\t\t\t\t\t\t\t// add empty column to the header and footer\r\n\t\t\t\t\t\t\t\t$(datatable.tableHead).\r\n\t\t\t\t\t\t\t\t\tfind('.' + pfx + 'datatable-row').\r\n\t\t\t\t\t\t\t\t\tfirst().\r\n\t\t\t\t\t\t\t\t\tprepend('.\r\n\t\t\t * @param tablePart\r\n\t\t\t * @param row 1-based index\r\n\t\t\t * @param tdOnly Optional. Default true\r\n\t\t\t * @returns {*}\r\n\t\t\t */\r\n\t\t\tgetOneRow: function(tablePart, row, tdOnly) {\r\n\t\t\t\tif (typeof tdOnly === 'undefined') tdOnly = true;\r\n\t\t\t\t// get list of
or \r\n\t\t\t\t\tresult = result.find('.' + pfx + 'datatable-cell');\r\n\t\t\t\t}\r\n\t\t\t\treturn result;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Sort table row at HTML level by column index.\r\n\t\t\t * todo; Not in use.\r\n\t\t\t * @param header Header sort clicked\r\n\t\t\t * @param sort asc|desc. Optional. Default asc\r\n\t\t\t * @param int Boolean. Optional. Comparison value parse to integer.\r\n\t\t\t * Default false\r\n\t\t\t */\r\n\t\t\tsortColumn: function(header, sort, int) {\r\n\t\t\t\tif (typeof sort === 'undefined') sort = 'asc'; // desc\r\n\t\t\t\tif (typeof int === 'undefined') int = false;\r\n\r\n\t\t\t\tvar column = $(header).index();\r\n\t\t\t\tvar rows = $(datatable.tableBody).find('.' + pfx + 'datatable-row');\r\n\t\t\t\tvar hIndex = $(header).closest('.' + pfx + 'datatable-lock').index();\r\n\t\t\t\tif (hIndex !== -1) {\r\n\t\t\t\t\trows = $(datatable.tableBody).find('.' + pfx + 'datatable-lock:nth-child(' + (hIndex + 1) + ')').find('.' + pfx + 'datatable-row');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar container = $(rows).parent();\r\n\t\t\t\t$(rows).sort(function(a, b) {\r\n\t\t\t\t\tvar tda = $(a).find('td:nth-child(' + column + ')').text();\r\n\t\t\t\t\tvar tdb = $(b).find('td:nth-child(' + column + ')').text();\r\n\r\n\t\t\t\t\tif (int) {\r\n\t\t\t\t\t\t// useful for integer type sorting\r\n\t\t\t\t\t\ttda = parseInt(tda);\r\n\t\t\t\t\t\ttdb = parseInt(tdb);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (sort === 'asc') {\r\n\t\t\t\t\t\treturn tda > tdb ? 1 : tda < tdb ? -1 : 0;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn tda < tdb ? 1 : tda > tdb ? -1 : 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}).appendTo(container);\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Perform sort remote and local\r\n\t\t\t */\r\n\t\t\tsorting: function() {\r\n\t\t\t\tvar sortObj = {\r\n\t\t\t\t\tinit: function() {\r\n\t\t\t\t\t\tif (options.sortable) {\r\n\t\t\t\t\t\t\t$(datatable.tableHead).\r\n\t\t\t\t\t\t\t\tfind('.' + pfx + 'datatable-cell:not(.' + pfx + 'datatable-cell-check)').\r\n\t\t\t\t\t\t\t\taddClass(pfx + 'datatable-cell-sort').\r\n\t\t\t\t\t\t\t\toff('click').\r\n\t\t\t\t\t\t\t\ton('click', sortObj.sortClick);\r\n\t\t\t\t\t\t\t// first init\r\n\t\t\t\t\t\t\tsortObj.setIcon();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\tsetIcon: function() {\r\n\t\t\t\t\t\tvar meta = Plugin.getDataSourceParam('sort');\r\n\t\t\t\t\t\tif ($.isEmptyObject(meta)) return;\r\n\r\n\t\t\t\t\t\tvar column = Plugin.getColumnByField(meta.field);\r\n\t\t\t\t\t\t// sort is disabled for this column\r\n\t\t\t\t\t\tif (typeof column === 'undefined') return;\r\n\t\t\t\t\t\tif (typeof column.sortable !== 'undefined' && column.sortable === false) return;\r\n\t\t\t\t\t\tif (typeof column.selector !== 'undefined' && column.selector === true) return;\r\n\r\n\t\t\t\t\t\t// sort icon beside column header\r\n\t\t\t\t\t\tvar td = $(datatable.tableHead).find('.' + pfx + 'datatable-cell[data-field=\"' + meta.field + '\"]').attr('data-sort', meta.sort);\r\n\t\t\t\t\t\tvar sorting = $(td).find('span');\r\n\t\t\t\t\t\tvar icon = $(sorting).find('i');\r\n\r\n\t\t\t\t\t\tvar icons = Plugin.getOption('layout.icons.sort');\r\n\t\t\t\t\t\t// update sort icon; desc & asc\r\n\t\t\t\t\t\tif ($(icon).length > 0) {\r\n\t\t\t\t\t\t\t$(icon).removeAttr('class').addClass(icons[meta.sort]);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t$(sorting).append($('').addClass(icons[meta.sort]));\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// set sorted class to header on init\r\n\t\t\t\t\t\t$(td).addClass(pfx + 'datatable-cell-sorted');\r\n\t\t\t\t\t},\r\n\t\t\t\t\tsortClick: function(e) {\r\n\t\t\t\t\t\tvar meta = Plugin.getDataSourceParam('sort');\r\n\t\t\t\t\t\tvar field = $(this).data('field');\r\n\t\t\t\t\t\tvar column = Plugin.getColumnByField(field);\r\n\t\t\t\t\t\t// sort is disabled for this column\r\n\t\t\t\t\t\tif (typeof column === 'undefined') return;\r\n\t\t\t\t\t\tif (typeof column.sortable !== 'undefined' && column.sortable === false) return;\r\n\t\t\t\t\t\tif (typeof column.selector !== 'undefined' && column.selector === true) return;\r\n\r\n\t\t\t\t\t\t// set sorted class to header\r\n\t\t\t\t\t\t$(datatable.tableHead).find('th').removeClass(pfx + 'datatable-cell-sorted');\r\n\t\t\t\t\t\tutil.addClass(this, pfx + 'datatable-cell-sorted');\r\n\r\n\t\t\t\t\t\t$(datatable.tableHead).find('.' + pfx + 'datatable-cell > span > i').remove();\r\n\r\n\t\t\t\t\t\tif (options.sortable) {\r\n\t\t\t\t\t\t\tPlugin.spinnerCallback(true);\r\n\r\n\t\t\t\t\t\t\tvar sort = 'desc';\r\n\t\t\t\t\t\t\tif (Plugin.getObject('field', meta) === field) {\r\n\t\t\t\t\t\t\t\tsort = Plugin.getObject('sort', meta);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t// toggle sort\r\n\t\t\t\t\t\t\tsort = typeof sort === 'undefined' || sort === 'desc'\r\n\t\t\t\t\t\t\t\t? 'asc'\r\n\t\t\t\t\t\t\t\t: 'desc';\r\n\r\n\t\t\t\t\t\t\t// update field and sort params\r\n\t\t\t\t\t\t\tmeta = {field: field, sort: sort};\r\n\t\t\t\t\t\t\tPlugin.setDataSourceParam('sort', meta);\r\n\r\n\t\t\t\t\t\t\tsortObj.setIcon();\r\n\r\n\t\t\t\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\t\t\t\tPlugin.dataRender('sort');\r\n\t\t\t\t\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-sort', meta);\r\n\t\t\t\t\t\t\t}, 300);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t};\r\n\t\t\t\tsortObj.init();\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Update JSON data list linked with sort, filter and pagination.\r\n\t\t\t * Call this method, before using dataSet variable.\r\n\t\t\t * @returns {*|null}\r\n\t\t\t */\r\n\t\t\tlocalDataUpdate: function() {\r\n\t\t\t\tvar params = Plugin.getDataSourceParam();\r\n\t\t\t\tif (typeof datatable.originalDataSet === 'undefined') {\r\n\t\t\t\t\tdatatable.originalDataSet = datatable.dataSet;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar field = Plugin.getObject('sort.field', params);\r\n\t\t\t\tvar sort = Plugin.getObject('sort.sort', params);\r\n\t\t\t\tvar column = Plugin.getColumnByField(field);\r\n\t\t\t\tif (typeof column !== 'undefined' && Plugin.getOption('data.serverSorting') !== true) {\r\n\t\t\t\t\tif (typeof column.sortCallback === 'function') {\r\n\t\t\t\t\t\tdatatable.dataSet = column.sortCallback(datatable.originalDataSet, sort, column);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdatatable.dataSet = Plugin.sortCallback(datatable.originalDataSet, sort, column);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdatatable.dataSet = datatable.originalDataSet;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// if server filter enable, don't pass local filter\r\n\t\t\t\tif (typeof params.query === 'object' && !Plugin.getOption('data.serverFiltering')) {\r\n\t\t\t\t\tparams.query = params.query || {};\r\n\r\n\t\t\t\t\tvar nestedSearch = function(obj) {\r\n\t\t\t\t\t\tfor (var field in obj) {\r\n\t\t\t\t\t\t\tif (!obj.hasOwnProperty(field)) continue;\r\n\t\t\t\t\t\t\tif (typeof obj[field] === 'string') {\r\n\t\t\t\t\t\t\t\tif (obj[field].toLowerCase() == search || obj[field].toLowerCase().indexOf(search) !== -1) {\r\n\t\t\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else if (typeof obj[field] === 'number') {\r\n\t\t\t\t\t\t\t\tif (obj[field] === search) {\r\n\t\t\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else if (typeof obj[field] === 'object') {\r\n\t\t\t\t\t\t\t\tif (nestedSearch(obj[field])) {\r\n\t\t\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tvar search = $(Plugin.getOption('search.input')).val();\r\n\t\t\t\t\tif (typeof search !== 'undefined' && search !== '') {\r\n\t\t\t\t\t\tsearch = search.toLowerCase();\r\n\t\t\t\t\t\tdatatable.dataSet = $.grep(datatable.dataSet, nestedSearch);\r\n\t\t\t\t\t\t// remove generalSearch as we don't need this for next columns filter\r\n\t\t\t\t\t\tdelete params.query[Plugin.getGeneralSearchKey()];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// remove empty element from array\r\n\t\t\t\t\t$.each(params.query, function(k, v) {\r\n\t\t\t\t\t\tif (v === '') {\r\n\t\t\t\t\t\t\tdelete params.query[k];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// filter array by query\r\n\t\t\t\t\tdatatable.dataSet = Plugin.filterArray(datatable.dataSet, params.query);\r\n\r\n\t\t\t\t\t// reset array index\r\n\t\t\t\t\tdatatable.dataSet = datatable.dataSet.filter(function() {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn datatable.dataSet;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Utility helper to filter array by object pair of {key:value}\r\n\t\t\t * @param list\r\n\t\t\t * @param args\r\n\t\t\t * @param operator\r\n\t\t\t * @returns {*}\r\n\t\t\t */\r\n\t\t\tfilterArray: function(list, args, operator) {\r\n\t\t\t\tif (typeof list !== 'object') {\r\n\t\t\t\t\treturn [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (typeof operator === 'undefined') operator = 'AND';\r\n\r\n\t\t\t\tif (typeof args !== 'object') {\r\n\t\t\t\t\treturn list;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toperator = operator.toUpperCase();\r\n\r\n\t\t\t\tif ($.inArray(operator, ['AND', 'OR', 'NOT']) === -1) {\r\n\t\t\t\t\treturn [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar count = Object.keys(args).length;\r\n\t\t\t\tvar filtered = [];\r\n\r\n\t\t\t\t$.each(list, function(key, obj) {\r\n\t\t\t\t\tvar to_match = obj;\r\n\r\n\t\t\t\t\tvar matched = 0;\r\n\t\t\t\t\t$.each(args, function(m_key, m_value) {\r\n\t\t\t\t\t\tm_value = m_value instanceof Array ? m_value : [m_value];\r\n\t\t\t\t\t\tvar match_property = Plugin.getObject(m_key, to_match);\r\n\t\t\t\t\t\tif (typeof match_property !== 'undefined' && match_property) {\r\n\t\t\t\t\t\t\tvar lhs = match_property.toString().toLowerCase();\r\n\t\t\t\t\t\t\tm_value.forEach(function(item, index) {\r\n\t\t\t\t\t\t\t\tif (item.toString().toLowerCase() == lhs || lhs.indexOf(item.toString().toLowerCase()) !== -1) {\r\n\t\t\t\t\t\t\t\t\tmatched++;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif (('AND' == operator && matched == count) ||\r\n\t\t\t\t\t\t('OR' == operator && matched > 0) ||\r\n\t\t\t\t\t\t('NOT' == operator && 0 == matched)) {\r\n\t\t\t\t\t\tfiltered[key] = obj;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tlist = filtered;\r\n\r\n\t\t\t\treturn list;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Reset lock column scroll to 0 when resize\r\n\t\t\t */\r\n\t\t\tresetScroll: function() {\r\n\t\t\t\tif (typeof options.detail === 'undefined' && Plugin.getDepth() === 1) {\r\n\t\t\t\t\t$(datatable.table).find('.' + pfx + 'datatable-row').css('left', 0);\r\n\t\t\t\t\t$(datatable.table).find('.' + pfx + 'datatable-lock').css('top', 0);\r\n\t\t\t\t\t$(datatable.tableBody).scrollTop(0);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get column options by field\r\n\t\t\t * @param field\r\n\t\t\t * @returns {boolean}\r\n\t\t\t */\r\n\t\t\tgetColumnByField: function(field) {\r\n\t\t\t\tif (typeof field === 'undefined') return;\r\n\t\t\t\tvar result;\r\n\t\t\t\t$.each(options.columns, function(i, column) {\r\n\t\t\t\t\tif (field === column.field) {\r\n\t\t\t\t\t\tresult = column;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\treturn result;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get default sort column\r\n\t\t\t */\r\n\t\t\tgetDefaultSortColumn: function() {\r\n\t\t\t\tvar result;\r\n\t\t\t\t$.each(options.columns, function(i, column) {\r\n\t\t\t\t\tif (typeof column.sortable !== 'undefined'\r\n\t\t\t\t\t\t&& $.inArray(column.sortable, ['asc', 'desc']) !== -1) {\r\n\t\t\t\t\t\tresult = {sort: column.sortable, field: column.field};\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\treturn result;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Helper to get element dimensions, when the element is hidden\r\n\t\t\t * @param element\r\n\t\t\t * @param includeMargin\r\n\t\t\t * @returns {{width: number, height: number, innerWidth: number,\r\n\t\t\t * innerHeight: number, outerWidth: number, outerHeight:\r\n\t\t\t * number}}\r\n\t\t\t */\r\n\t\t\tgetHiddenDimensions: function(element, includeMargin) {\r\n\t\t\t\tvar props = {\r\n\t\t\t\t\t\tposition: 'absolute',\r\n\t\t\t\t\t\tvisibility: 'hidden',\r\n\t\t\t\t\t\tdisplay: 'block',\r\n\t\t\t\t\t},\r\n\t\t\t\t\tdim = {\r\n\t\t\t\t\t\twidth: 0,\r\n\t\t\t\t\t\theight: 0,\r\n\t\t\t\t\t\tinnerWidth: 0,\r\n\t\t\t\t\t\tinnerHeight: 0,\r\n\t\t\t\t\t\touterWidth: 0,\r\n\t\t\t\t\t\touterHeight: 0,\r\n\t\t\t\t\t},\r\n\t\t\t\t\thiddenParents = $(element).parents().addBack().not(':visible');\r\n\t\t\t\tincludeMargin = (typeof includeMargin === 'boolean')\r\n\t\t\t\t\t? includeMargin\r\n\t\t\t\t\t: false;\r\n\r\n\t\t\t\tvar oldProps = [];\r\n\t\t\t\thiddenParents.each(function() {\r\n\t\t\t\t\tvar old = {};\r\n\r\n\t\t\t\t\tfor (var name in props) {\r\n\t\t\t\t\t\told[name] = this.style[name];\r\n\t\t\t\t\t\tthis.style[name] = props[name];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\toldProps.push(old);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tdim.width = $(element).width();\r\n\t\t\t\tdim.outerWidth = $(element).outerWidth(includeMargin);\r\n\t\t\t\tdim.innerWidth = $(element).innerWidth();\r\n\t\t\t\tdim.height = $(element).height();\r\n\t\t\t\tdim.innerHeight = $(element).innerHeight();\r\n\t\t\t\tdim.outerHeight = $(element).outerHeight(includeMargin);\r\n\r\n\t\t\t\thiddenParents.each(function(i) {\r\n\t\t\t\t\tvar old = oldProps[i];\r\n\t\t\t\t\tfor (var name in props) {\r\n\t\t\t\t\t\tthis.style[name] = old[name];\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn dim;\r\n\t\t\t},\r\n\r\n\t\t\tgetGeneralSearchKey: function() {\r\n\t\t\t\tvar searchInput = $(Plugin.getOption('search.input'));\r\n\t\t\t\treturn Plugin.getOption('search.key') || $(searchInput).prop('name');\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get value by dot notation path string and to prevent undefined\r\n\t\t\t * errors\r\n\t\t\t * @param path String Dot notation path in string\r\n\t\t\t * @param object Object to iterate\r\n\t\t\t * @returns {*}\r\n\t\t\t */\r\n\t\t\tgetObject: function(path, object) {\r\n\t\t\t\treturn path.split('.').reduce(function(obj, i) {\r\n\t\t\t\t\treturn obj !== null && typeof obj[i] !== 'undefined' ? obj[i] : null;\r\n\t\t\t\t}, object);\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Extend object\r\n\t\t\t * @param obj\r\n\t\t\t * @param path\r\n\t\t\t * @param value\r\n\t\t\t * @returns {*}\r\n\t\t\t */\r\n\t\t\textendObj: function(obj, path, value) {\r\n\t\t\t\tvar levels = path.split('.'),\r\n\t\t\t\t\ti = 0;\r\n\r\n\t\t\t\tfunction createLevel(child) {\r\n\t\t\t\t\tvar name = levels[i++];\r\n\t\t\t\t\tif (typeof child[name] !== 'undefined' && child[name] !== null) {\r\n\t\t\t\t\t\tif (typeof child[name] !== 'object' &&\r\n\t\t\t\t\t\t\ttypeof child[name] !== 'function') {\r\n\t\t\t\t\t\t\tchild[name] = {};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tchild[name] = {};\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (i === levels.length) {\r\n\t\t\t\t\t\tchild[name] = value;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcreateLevel(child[name]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcreateLevel(obj);\r\n\t\t\t\treturn obj;\r\n\t\t\t},\r\n\r\n\t\t\trowEvenOdd: function() {\r\n\t\t\t\t// row even class\r\n\t\t\t\t$(datatable.tableBody).find('.' + pfx + 'datatable-row').removeClass(pfx + 'datatable-row-even');\r\n\t\t\t\tif ($(datatable.wrap).hasClass(pfx + 'datatable-subtable')) {\r\n\t\t\t\t\t$(datatable.tableBody).find('.' + pfx + 'datatable-row:not(.' + pfx + 'datatable-row-detail):even').addClass(pfx + 'datatable-row-even');\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$(datatable.tableBody).find('.' + pfx + 'datatable-row:nth-child(even)').addClass(pfx + 'datatable-row-even');\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/********************\r\n\t\t\t ** PUBLIC API METHODS\r\n\t\t\t ********************/\r\n\r\n\t\t\t// delay timer\r\n\t\t\ttimer: 0,\r\n\r\n\t\t\t/**\r\n\t\t\t * Redraw datatable by recalculating its DOM elements, etc.\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\tredraw: function() {\r\n\t\t\t\tPlugin.adjustCellsWidth.call();\r\n\t\t\t\tif (Plugin.isLocked()) {\r\n\t\t\t\t\t// fix hiding cell width issue\r\n\t\t\t\t\tPlugin.scrollbar();\r\n\t\t\t\t\tPlugin.resetScroll();\r\n\t\t\t\t\tPlugin.adjustCellsHeight.call();\r\n\t\t\t\t}\r\n\t\t\t\tPlugin.adjustLockContainer.call();\r\n\t\t\t\tPlugin.initHeight.call();\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Shortcode to reload\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\tload: function() {\r\n\t\t\t\tPlugin.reload();\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Datasource reload\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\treload: function() {\r\n\t\t\t\tvar delay = (function() {\r\n\t\t\t\t\treturn function(callback, ms) {\r\n\t\t\t\t\t\tclearTimeout(Plugin.timer);\r\n\t\t\t\t\t\tPlugin.timer = setTimeout(callback, ms);\r\n\t\t\t\t\t};\r\n\t\t\t\t})();\r\n\t\t\t\tdelay(function() {\r\n\t\t\t\t\t// local only. remote pagination will skip this block\r\n\t\t\t\t\tif (!options.data.serverFiltering) {\r\n\t\t\t\t\t\tPlugin.localDataUpdate();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tPlugin.dataRender();\r\n\t\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-reloaded');\r\n\t\t\t\t}, Plugin.getOption('search.delay'));\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get record by record ID\r\n\t\t\t * @param id\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\tgetRecord: function(id) {\r\n\t\t\t\tif (typeof datatable.tableBody === 'undefined') datatable.tableBody = $(datatable.table).children('tbody');\r\n\t\t\t\t$(datatable.tableBody).find('.' + pfx + 'datatable-cell:first-child').each(function(i, cell) {\r\n\t\t\t\t\tif (id == $(cell).text()) {\r\n\t\t\t\t\t\tvar rowNumber = $(cell).closest('.' + pfx + 'datatable-row').index() + 1;\r\n\t\t\t\t\t\tdatatable.API.record = datatable.API.value = Plugin.getOneRow(datatable.tableBody, rowNumber);\r\n\t\t\t\t\t\treturn datatable;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * @deprecated in v5.0.6\r\n\t\t\t * Get column of current record ID\r\n\t\t\t * @param columnName\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\tgetColumn: function(columnName) {\r\n\t\t\t\tPlugin.setSelectedRecords();\r\n\t\t\t\tdatatable.API.value = $(datatable.API.record).find('[data-field=\"' + columnName + '\"]');\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Destroy datatable to original DOM state before datatable was\r\n\t\t\t * initialized\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\tdestroy: function() {\r\n\t\t\t\t$(datatable).parent().find('.' + pfx + 'datatable-pager').remove();\r\n\t\t\t\tvar initialDatatable = $(datatable.initialDatatable).addClass(pfx + 'datatable-destroyed').show();\r\n\t\t\t\t$(datatable).replaceWith(initialDatatable);\r\n\t\t\t\tdatatable = initialDatatable;\r\n\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-destroy');\r\n\t\t\t\tPlugin.isInit = false;\r\n\t\t\t\tinitialDatatable = null;\r\n\t\t\t\treturn initialDatatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Sort by column field\r\n\t\t\t * @param field\r\n\t\t\t * @param sort\r\n\t\t\t */\r\n\t\t\tsort: function(field, sort) {\r\n\t\t\t\t// toggle sort\r\n\t\t\t\tsort = typeof sort === 'undefined' ? 'asc' : sort;\r\n\r\n\t\t\t\tPlugin.spinnerCallback(true);\r\n\r\n\t\t\t\t// update field and sort params\r\n\t\t\t\tvar meta = {field: field, sort: sort};\r\n\t\t\t\tPlugin.setDataSourceParam('sort', meta);\r\n\r\n\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\tPlugin.dataRender('sort');\r\n\t\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-sort', meta);\r\n\t\t\t\t\t$(datatable.tableHead).find('.' + pfx + 'datatable-cell > span > i').remove();\r\n\t\t\t\t}, 300);\r\n\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * @deprecated in v5.0.6\r\n\t\t\t * Get current selected column value\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\tgetValue: function() {\r\n\t\t\t\treturn $(datatable.API.value).text();\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Set checkbox active\r\n\t\t\t * @param cell JQuery selector or checkbox ID\r\n\t\t\t */\r\n\t\t\tsetActive: function(cell) {\r\n\t\t\t\tif (typeof cell === 'string') {\r\n\t\t\t\t\t// set by checkbox id\r\n\t\t\t\t\tcell = $(datatable.tableBody).find('.' + pfx + 'checkbox-single > [type=\"checkbox\"][value=\"' + cell + '\"]');\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$(cell).prop('checked', true);\r\n\r\n\t\t\t\tvar ids = [];\r\n\t\t\t\t$(cell).each(function(i, td) {\r\n\t\t\t\t\t// normal table\r\n\t\t\t\t\tvar row = $(td).closest('tr').addClass(pfx + 'datatable-row-active');\r\n\r\n\t\t\t\t\tvar id = $(td).attr('value');\r\n\t\t\t\t\tif (typeof id !== 'undefined') {\r\n\t\t\t\t\t\tids.push(id);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-check', [ids]);\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Set checkbox inactive\r\n\t\t\t * @param cell JQuery selector or checkbox ID\r\n\t\t\t */\r\n\t\t\tsetInactive: function(cell) {\r\n\t\t\t\tif (typeof cell === 'string') {\r\n\t\t\t\t\t// set by checkbox id\r\n\t\t\t\t\tcell = $(datatable.tableBody).find('.' + pfx + 'checkbox-single > [type=\"checkbox\"][value=\"' + cell + '\"]');\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$(cell).prop('checked', false);\r\n\r\n\t\t\t\tvar ids = [];\r\n\t\t\t\t$(cell).each(function(i, td) {\r\n\t\t\t\t\t// normal table\r\n\t\t\t\t\tvar row = $(td).closest('tr').removeClass(pfx + 'datatable-row-active');\r\n\r\n\t\t\t\t\tvar id = $(td).attr('value');\r\n\t\t\t\t\tif (typeof id !== 'undefined') {\r\n\t\t\t\t\t\tids.push(id);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-uncheck', [ids]);\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Set all checkboxes active or inactive\r\n\t\t\t * @param active\r\n\t\t\t */\r\n\t\t\tsetActiveAll: function(active) {\r\n\t\t\t\tvar checkboxes = $(datatable.table).\r\n\t\t\t\t\tfind('> tbody, > thead').\r\n\t\t\t\t\tfind('tr').not('.' + pfx + 'datatable-row-subtable').\r\n\t\t\t\t\tfind('.' + pfx + 'datatable-cell-check [type=\"checkbox\"]');\r\n\t\t\t\tif (active) {\r\n\t\t\t\t\tPlugin.setActive(checkboxes);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tPlugin.setInactive(checkboxes);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * @deprecated in v5.0.6\r\n\t\t\t * Get selected rows which are active\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\tsetSelectedRecords: function() {\r\n\t\t\t\tdatatable.API.record = $(datatable.tableBody).find('.' + pfx + 'datatable-row-active');\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get selected records\r\n\t\t\t * @returns {null}\r\n\t\t\t */\r\n\t\t\tgetSelectedRecords: function() {\r\n\t\t\t\t// support old method\r\n\t\t\t\tPlugin.setSelectedRecords();\r\n\t\t\t\tdatatable.API.record = datatable.rows('.' + pfx + 'datatable-row-active').nodes();\r\n\t\t\t\treturn datatable.API.record;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get options by dots notation path\r\n\t\t\t * @param path String Dot notation path in string\r\n\t\t\t * @returns {*}\r\n\t\t\t */\r\n\t\t\tgetOption: function(path) {\r\n\t\t\t\treturn Plugin.getObject(path, options);\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Set global options nodes by dots notation path\r\n\t\t\t * @param path\r\n\t\t\t * @param object\r\n\t\t\t */\r\n\t\t\tsetOption: function(path, object) {\r\n\t\t\t\toptions = Plugin.extendObj(options, path, object);\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Search filter for local & remote\r\n\t\t\t * @param value\r\n\t\t\t * @param columns. Optional list of columns to be filtered.\r\n\t\t\t */\r\n\t\t\tsearch: function(value, columns) {\r\n\t\t\t\tif (typeof columns !== 'undefined') columns = $.makeArray(columns);\r\n\t\t\t\tvar delay = (function() {\r\n\t\t\t\t\treturn function(callback, ms) {\r\n\t\t\t\t\t\tclearTimeout(Plugin.timer);\r\n\t\t\t\t\t\tPlugin.timer = setTimeout(callback, ms);\r\n\t\t\t\t\t};\r\n\t\t\t\t})();\r\n\r\n\t\t\t\tdelay(function() {\r\n\t\t\t\t\t// get query parameters\r\n\t\t\t\t\tvar query = Plugin.getDataSourceQuery();\r\n\r\n\t\t\t\t\t// search not by columns\r\n\t\t\t\t\tif (typeof columns === 'undefined' && typeof value !== 'undefined') {\r\n\t\t\t\t\t\tvar key = Plugin.getGeneralSearchKey();\r\n\t\t\t\t\t\tquery[key] = value;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// search by columns, support multiple columns\r\n\t\t\t\t\tif (typeof columns === 'object') {\r\n\t\t\t\t\t\t$.each(columns, function(k, column) {\r\n\t\t\t\t\t\t\tquery[column] = value;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\t// remove empty element from arrays\r\n\t\t\t\t\t\t$.each(query, function(k, v) {\r\n\t\t\t\t\t\t\tif (v === '' || $.isEmptyObject(v)) {\r\n\t\t\t\t\t\t\t\tdelete query[k];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tPlugin.setDataSourceQuery(query);\r\n\r\n\t\t\t\t\t// reset pagination to 1 when doing seearching\r\n\t\t\t\t\tdatatable.setDataSourceParam('pagination', Object.assign({}, datatable.getDataSourceParam('pagination'), {page: 1}));\r\n\r\n\t\t\t\t\t// local filter only. remote pagination will skip this block\r\n\t\t\t\t\tif (!options.data.serverFiltering) {\r\n\t\t\t\t\t\tPlugin.localDataUpdate();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tPlugin.dataRender('search');\r\n\t\t\t\t}, Plugin.getOption('search.delay'));\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Set datasource params extract\r\n\t\t\t * @param param\r\n\t\t\t * @param value\r\n\t\t\t */\r\n\t\t\tsetDataSourceParam: function(param, value) {\r\n\t\t\t\tdatatable.API.params = $.extend({}, {\r\n\t\t\t\t\tpagination: {page: 1, perpage: Plugin.getOption('data.pageSize')},\r\n\t\t\t\t\tsort: Plugin.getDefaultSortColumn(),\r\n\t\t\t\t\tquery: {},\r\n\t\t\t\t}, datatable.API.params, Plugin.stateGet(Plugin.stateId));\r\n\r\n\t\t\t\tdatatable.API.params = Plugin.extendObj(datatable.API.params, param, value);\r\n\r\n\t\t\t\tPlugin.stateKeep(Plugin.stateId, datatable.API.params);\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get datasource params\r\n\t\t\t * @param param\r\n\t\t\t */\r\n\t\t\tgetDataSourceParam: function(param) {\r\n\t\t\t\tdatatable.API.params = $.extend({}, {\r\n\t\t\t\t\tpagination: {page: 1, perpage: Plugin.getOption('data.pageSize')},\r\n\t\t\t\t\tsort: Plugin.getDefaultSortColumn(),\r\n\t\t\t\t\tquery: {},\r\n\t\t\t\t}, datatable.API.params, Plugin.stateGet(Plugin.stateId));\r\n\r\n\t\t\t\tif (typeof param === 'string') {\r\n\t\t\t\t\treturn Plugin.getObject(param, datatable.API.params);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn datatable.API.params;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Shortcode to datatable.getDataSourceParam('query');\r\n\t\t\t * @returns {*}\r\n\t\t\t */\r\n\t\t\tgetDataSourceQuery: function() {\r\n\t\t\t\treturn Plugin.getDataSourceParam('query') || {};\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Shortcode to datatable.setDataSourceParam('query', query);\r\n\t\t\t * @param query\r\n\t\t\t */\r\n\t\t\tsetDataSourceQuery: function(query) {\r\n\t\t\t\tPlugin.setDataSourceParam('query', query);\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get current page number\r\n\t\t\t * @returns {number}\r\n\t\t\t */\r\n\t\t\tgetCurrentPage: function() {\r\n\t\t\t\treturn $(datatable.table).\r\n\t\t\t\t\tsiblings('.' + pfx + 'datatable-pager').\r\n\t\t\t\t\tlast().\r\n\t\t\t\t\tfind('.' + pfx + 'datatable-pager-nav').\r\n\t\t\t\t\tfind('.' + pfx + 'datatable-pager-link.' + pfx + 'datatable-pager-link-active').\r\n\t\t\t\t\tdata('page') || 1;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get selected dropdown page size\r\n\t\t\t * @returns {*|number}\r\n\t\t\t */\r\n\t\t\tgetPageSize: function() {\r\n\t\t\t\treturn $(datatable.table).siblings('.' + pfx + 'datatable-pager').last().find('select.' + pfx + 'datatable-pager-size').val() || 10;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get total rows\r\n\t\t\t */\r\n\t\t\tgetTotalRows: function() {\r\n\t\t\t\treturn datatable.API.params.pagination.total;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get full dataset in grid\r\n\t\t\t * @returns {*|null|Array}\r\n\t\t\t */\r\n\t\t\tgetDataSet: function() {\r\n\t\t\t\treturn datatable.originalDataSet;\r\n\t\t\t},\r\n\r\n\t\t\tnodeTr: [],\r\n\t\t\tnodeTd: [],\r\n\t\t\tnodeCols: [],\r\n\t\t\trecentNode: [],\r\n\r\n\t\t\ttable: function() {\r\n\t\t\t\tif (typeof datatable.table !== 'undefined') {\r\n\t\t\t\t\treturn datatable.table;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Select a single row from the table\r\n\t\t\t * @param selector\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\trow: function(selector) {\r\n\t\t\t\tPlugin.rows(selector);\r\n\t\t\t\tPlugin.nodeTr = Plugin.recentNode = $(Plugin.nodeTr).first();\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Select multiple rows from the table\r\n\t\t\t * @param selector\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\trows: function(selector) {\r\n\t\t\t\tif (Plugin.isLocked()) {\r\n\t\t\t\t\tPlugin.nodeTr = Plugin.recentNode = $(datatable.tableBody).find(selector).filter('.' + pfx + 'datatable-lock-scroll > .' + pfx + 'datatable-row');\r\n\t\t\t\t} else {\r\n\t\t\t\t\tPlugin.nodeTr = Plugin.recentNode = $(datatable.tableBody).find(selector).filter('.' + pfx + 'datatable-row');\r\n\t\t\t\t}\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Select a single column from the table\r\n\t\t\t * @param index zero-based index\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\tcolumn: function(index) {\r\n\t\t\t\tPlugin.nodeCols = Plugin.recentNode = $(datatable.tableBody).find('.' + pfx + 'datatable-cell:nth-child(' + (index + 1) + ')');\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Select multiple columns from the table\r\n\t\t\t * @param selector\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\tcolumns: function(selector) {\r\n\t\t\t\tvar context = datatable.table;\r\n\t\t\t\tif (Plugin.nodeTr === Plugin.recentNode) {\r\n\t\t\t\t\tcontext = Plugin.nodeTr;\r\n\t\t\t\t}\r\n\t\t\t\tvar columns = $(context).find('.' + pfx + 'datatable-cell[data-field=\"' + selector + '\"]');\r\n\t\t\t\tif (columns.length > 0) {\r\n\t\t\t\t\tPlugin.nodeCols = Plugin.recentNode = columns;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tPlugin.nodeCols = Plugin.recentNode = $(context).find(selector).filter('.' + pfx + 'datatable-cell');\r\n\t\t\t\t}\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\tcell: function(selector) {\r\n\t\t\t\tPlugin.cells(selector);\r\n\t\t\t\tPlugin.nodeTd = Plugin.recentNode = $(Plugin.nodeTd).first();\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\tcells: function(selector) {\r\n\t\t\t\tvar cells = $(datatable.tableBody).find('.' + pfx + 'datatable-cell');\r\n\t\t\t\tif (typeof selector !== 'undefined') {\r\n\t\t\t\t\tcells = $(cells).filter(selector);\r\n\t\t\t\t}\r\n\t\t\t\tPlugin.nodeTd = Plugin.recentNode = cells;\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Delete the selected row from the table\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\tremove: function() {\r\n\t\t\t\tif ($(Plugin.nodeTr.length) && Plugin.nodeTr === Plugin.recentNode) {\r\n\t\t\t\t\t$(Plugin.nodeTr).remove();\r\n\t\t\t\t}\r\n\t\t\t\tPlugin.layoutUpdate();\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Show or hide the columns or rows\r\n\t\t\t */\r\n\t\t\tvisible: function(bool) {\r\n\t\t\t\tif ($(Plugin.recentNode.length)) {\r\n\t\t\t\t\tvar locked = Plugin.lockEnabledColumns();\r\n\t\t\t\t\tif (Plugin.recentNode === Plugin.nodeCols) {\r\n\t\t\t\t\t\tvar index = Plugin.recentNode.index();\r\n\r\n\t\t\t\t\t\tif (Plugin.isLocked()) {\r\n\t\t\t\t\t\t\tvar scrollColumns = $(Plugin.recentNode).closest('.' + pfx + 'datatable-lock-scroll').length;\r\n\t\t\t\t\t\t\tif (scrollColumns) {\r\n\t\t\t\t\t\t\t\t// is at center of scrollable area\r\n\t\t\t\t\t\t\t\tindex += locked.left.length + 1;\r\n\t\t\t\t\t\t\t} else if ($(Plugin.recentNode).closest('.' + pfx + 'datatable-lock-right').length) {\r\n\t\t\t\t\t\t\t\t// is at the right locked table\r\n\t\t\t\t\t\t\t\tindex += locked.left.length + scrollColumns + 1;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (bool) {\r\n\t\t\t\t\t\tif (Plugin.recentNode === Plugin.nodeCols) {\r\n\t\t\t\t\t\t\tdelete options.columns[index].visible;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t$(Plugin.recentNode).show();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif (Plugin.recentNode === Plugin.nodeCols) {\r\n\t\t\t\t\t\t\tPlugin.setOption('columns.' + (index) + '.visible', false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t$(Plugin.recentNode).hide();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tPlugin.columnHide();\r\n\t\t\t\t\tPlugin.redraw();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get the the DOM element for the selected rows or columns\r\n\t\t\t * @returns {Array}\r\n\t\t\t */\r\n\t\t\tnodes: function() {\r\n\t\t\t\treturn Plugin.recentNode;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * will be implemented soon\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\tdataset: function() {\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Open page by number\r\n\t\t\t * @param page number\r\n\t\t\t */\r\n\t\t\tgotoPage: function (page) {\r\n\t\t\t\tif (typeof Plugin.pagingObject !== 'undefined') {\r\n\t\t\t\t\tPlugin.isInit = true;\r\n\t\t\t\t\tPlugin.pagingObject.openPage(page);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Public API methods can be used directly by datatable\r\n\t\t */\r\n\t\t$.each(Plugin, function(funcName, func) {\r\n\t\t\tdatatable[funcName] = func;\r\n\t\t});\r\n\r\n\t\t// initialize main datatable plugin\r\n\t\tif (typeof options !== 'undefined') {\r\n\t\t\tif (typeof options === 'string') {\r\n\t\t\t\tvar method = options;\r\n\t\t\t\tdatatable = $(this).data(pluginName);\r\n\t\t\t\tif (typeof datatable !== 'undefined') {\r\n\t\t\t\t\toptions = datatable.options;\r\n\t\t\t\t\tPlugin[method].apply(this, Array.prototype.slice.call(arguments, 1));\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (!datatable.data(pluginName) && !$(this).hasClass(pfx + 'datatable-loaded')) {\r\n\t\t\t\t\tdatatable.dataSet = null;\r\n\t\t\t\t\tdatatable.textAlign = {\r\n\t\t\t\t\t\tleft: pfx + 'datatable-cell-left',\r\n\t\t\t\t\t\tcenter: pfx + 'datatable-cell-center',\r\n\t\t\t\t\t\tright: pfx + 'datatable-cell-right',\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t// merge default and user defined options\r\n\t\t\t\t\toptions = $.extend(true, {}, $.fn[pluginName].defaults, options);\r\n\r\n\t\t\t\t\tdatatable.options = options;\r\n\r\n\t\t\t\t\t// init plugin process\r\n\t\t\t\t\tPlugin.init.apply(this, [options]);\r\n\r\n\t\t\t\t\t$(datatable.wrap).data(pluginName, datatable);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// get existing instance datatable\r\n\t\t\tdatatable = $(this).data(pluginName);\r\n\t\t\tif (typeof datatable === 'undefined') {\r\n\t\t\t\t$.error(pluginName + ' not initialized');\r\n\t\t\t}\r\n\t\t\toptions = datatable.options;\r\n\t\t}\r\n\r\n\t\treturn datatable;\r\n\t};\r\n\r\n\t// default options\r\n\t$.fn[pluginName].defaults = {\r\n\t\t// datasource definition\r\n\t\tdata: {\r\n\t\t\ttype: 'local',\r\n\t\t\tsource: null,\r\n\t\t\tpageSize: 10, // display records per page\r\n\t\t\tsaveState: true,\r\n\r\n\t\t\tserverPaging: false,\r\n\t\t\tserverFiltering: false,\r\n\t\t\tserverSorting: false,\r\n\r\n\t\t\tautoColumns: false,\r\n\t\t\tattr: {\r\n\t\t\t\trowProps: [],\r\n\t\t\t},\r\n\t\t},\r\n\r\n\t\t// layout definition\r\n\t\tlayout: {\r\n\t\t\ttheme: 'default', // datatable will support multiple themes and designs\r\n\t\t\tclass: pfx + 'datatable-primary', // custom wrapper class\r\n\t\t\tscroll: false, // enable/disable datatable scroll both horizontal and vertical when needed.\r\n\t\t\theight: null, // datatable's body's fixed height\r\n\t\t\tminHeight: null,\r\n\t\t\tfooter: false, // display/hide footer\r\n\t\t\theader: true, // display/hide header\r\n\t\t\tcustomScrollbar: true, // set false to disable custom scrollbar\r\n\r\n\t\t\t// datatable spinner\r\n\t\t\tspinner: {\r\n\t\t\t\toverlayColor: '#000000',\r\n\t\t\t\topacity: 0,\r\n\t\t\t\ttype: 'loader',\r\n\t\t\t\tstate: 'primary',\r\n\t\t\t\tmessage: true,\r\n\t\t\t},\r\n\r\n\t\t\t// datatable UI icons\r\n\t\t\ticons: {\r\n\t\t\t\tsort: {asc: 'flaticon2-arrow-up', desc: 'flaticon2-arrow-down'},\r\n\t\t\t\tpagination: {\r\n\t\t\t\t\tnext: 'flaticon2-next',\r\n\t\t\t\t\tprev: 'flaticon2-back',\r\n\t\t\t\t\tfirst: 'flaticon2-fast-back',\r\n\t\t\t\t\tlast: 'flaticon2-fast-next',\r\n\t\t\t\t\tmore: 'flaticon-more-1',\r\n\t\t\t\t},\r\n\t\t\t\trowDetail: {expand: 'fa fa-caret-down', collapse: 'fa fa-caret-right'},\r\n\t\t\t},\r\n\t\t},\r\n\r\n\t\t// column sorting\r\n\t\tsortable: true,\r\n\r\n\t\t// resize column size with mouse drag coming soon)\r\n\t\tresizable: false,\r\n\r\n\t\t// column based filtering (coming soon)\r\n\t\tfilterable: false,\r\n\r\n\t\tpagination: true,\r\n\r\n\t\t// inline and bactch editing (cooming soon)\r\n\t\teditable: false,\r\n\r\n\t\t// columns definition\r\n\t\tcolumns: [],\r\n\r\n\t\tsearch: {\r\n\t\t\t// enable trigger search by keyup enter\r\n\t\t\tonEnter: false,\r\n\t\t\t// input text for search\r\n\t\t\tinput: null,\r\n\t\t\t// search delay in milliseconds\r\n\t\t\tdelay: 400,\r\n\t\t\t//\tremote server search key value\r\n\t\t\tkey: null\r\n\t\t},\r\n\r\n\t\trows: {\r\n\t\t\t// deprecated\r\n\t\t\tcallback: function() {\r\n\t\t\t},\r\n\t\t\t// call before row template\r\n\t\t\tbeforeTemplate: function() {\r\n\t\t\t},\r\n\t\t\t// call after row template\r\n\t\t\tafterTemplate: function() {\r\n\t\t\t},\r\n\t\t\tautoHide: true,\r\n\t\t},\r\n\r\n\t\t// toolbar\r\n\t\ttoolbar: {\r\n\t\t\t// place pagination and displayInfo blocks according to the array order\r\n\t\t\tlayout: ['pagination', 'info'],\r\n\r\n\t\t\t// toolbar placement can be at top or bottom or both top and bottom repeated\r\n\t\t\tplacement: ['bottom'], //'top', 'bottom'\r\n\r\n\t\t\t// toolbar items\r\n\t\t\titems: {\r\n\t\t\t\t// pagination\r\n\t\t\t\tpagination: {\r\n\t\t\t\t\t// pagination type(default or scroll)\r\n\t\t\t\t\ttype: 'default',\r\n\r\n\t\t\t\t\t// number of pages to display by breakpoints\r\n\t\t\t\t\tpages: {\r\n\t\t\t\t\t\tdesktop: {\r\n\t\t\t\t\t\t\tlayout: 'default',\r\n\t\t\t\t\t\t\tpagesNumber: 5,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\ttablet: {\r\n\t\t\t\t\t\t\tlayout: 'default',\r\n\t\t\t\t\t\t\tpagesNumber: 3,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tmobile: {\r\n\t\t\t\t\t\t\tlayout: 'compact',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t// navigation buttons\r\n\t\t\t\t\tnavigation: {\r\n\t\t\t\t\t\tprev: true, // display prev button\r\n\t\t\t\t\t\tnext: true, // display next button\r\n\t\t\t\t\t\tfirst: true, // display first button\r\n\t\t\t\t\t\tlast: true, // display last button\r\n\t\t\t\t\t\tmore: false // display more button\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t// page size select\r\n\t\t\t\t\tpageSizeSelect: [], // display dropdown to select pagination size. -1 is used for \"ALl\" option\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// records info\r\n\t\t\t\tinfo: true,\r\n\t\t\t},\r\n\t\t},\r\n\r\n\t\t// here we will keep all strings and message used by datatable UI so developer can easiliy translate to any language.\r\n\t\t// By default the stirngs will be in the plugin source and here can override it\r\n\t\ttranslate: {\r\n\t\t\trecords: {\r\n\t\t\t\tprocessing: 'Please wait...',\r\n\t\t\t\tnoRecords: 'No records found',\r\n\t\t\t},\r\n\t\t\ttoolbar: {\r\n\t\t\t\tpagination: {\r\n\t\t\t\t\titems: {\r\n\t\t\t\t\t\tdefault: {\r\n\t\t\t\t\t\t\tfirst: 'First',\r\n\t\t\t\t\t\t\tprev: 'Previous',\r\n\t\t\t\t\t\t\tnext: 'Next',\r\n\t\t\t\t\t\t\tlast: 'Last',\r\n\t\t\t\t\t\t\tmore: 'More pages',\r\n\t\t\t\t\t\t\tinput: 'Page number',\r\n\t\t\t\t\t\t\tselect: 'Select page size',\r\n\t\t\t\t\t\t\tall: 'all',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tinfo: 'Showing {{start}} - {{end}} of {{total}}',\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t},\r\n\r\n\t\textensions: {},\r\n\t};\r\n\r\n}(jQuery));\r\n","\"use strict\";\r\n(function($) {\r\n\r\n\tvar pluginName = 'KTDatatable';\r\n\tvar pfx = '';\r\n\r\n\t$.fn[pluginName] = $.fn[pluginName] || {};\r\n\r\n\t/**\r\n\t * @param datatable Main datatable plugin instance\r\n\t * @param options Extension options\r\n\t * @returns {*}\r\n\t */\r\n\t$.fn[pluginName].checkbox = function(datatable, options) {\r\n\t\tvar Extension = {\r\n\t\t\tselectedAllRows: false,\r\n\t\t\tselectedRows: [],\r\n\t\t\tunselectedRows: [],\r\n\r\n\t\t\tinit: function() {\r\n\t\t\t\tif (Extension.selectorEnabled()) {\r\n\t\t\t\t\t// reset\r\n\t\t\t\t\tdatatable.setDataSourceParam(options.vars.selectedAllRows, false);\r\n\t\t\t\t\tdatatable.stateRemove('checkbox');\r\n\r\n\t\t\t\t\t// requestIds is not null\r\n\t\t\t\t\tif (options.vars.requestIds) {\r\n\t\t\t\t\t\t// request ids in response\r\n\t\t\t\t\t\tdatatable.setDataSourceParam(options.vars.requestIds, true);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// remove selected checkbox on datatable reload\r\n\t\t\t\t\t$(datatable).on(pfx + 'datatable-on-reloaded', function() {\r\n\t\t\t\t\t\tdatatable.stateRemove('checkbox');\r\n\t\t\t\t\t\tdatatable.setDataSourceParam(options.vars.selectedAllRows, false);\r\n\t\t\t\t\t\tExtension.selectedAllRows = false;\r\n\t\t\t\t\t\tExtension.selectedRows = [];\r\n\t\t\t\t\t\tExtension.unselectedRows = [];\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// select all on extension init\r\n\t\t\t\t\tExtension.selectedAllRows = datatable.getDataSourceParam(options.vars.selectedAllRows);\r\n\r\n\t\t\t\t\t$(datatable).on(pfx + 'datatable-on-layout-updated', function(e, args) {\r\n\t\t\t\t\t\tif (args.table != $(datatable.wrap).attr('id')) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tdatatable.ready(function() {\r\n\t\t\t\t\t\t\tExtension.initVars();\r\n\t\t\t\t\t\t\tExtension.initEvent();\r\n\t\t\t\t\t\t\tExtension.initSelect();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t$(datatable).on(pfx + 'datatable-on-check', function(e, ids) {\r\n\t\t\t\t\t\tids.forEach(function(id) {\r\n\t\t\t\t\t\t\tExtension.selectedRows.push(id);\r\n\t\t\t\t\t\t\t// // remove from unselected rows\r\n\t\t\t\t\t\t\tExtension.unselectedRows = Extension.remove(Extension.unselectedRows, id);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tvar storage = {};\r\n\t\t\t\t\t\tstorage['selectedRows'] = $.unique(Extension.selectedRows);\r\n\t\t\t\t\t\tstorage['unselectedRows'] = $.unique(Extension.unselectedRows);\r\n\t\t\t\t\t\tdatatable.stateKeep('checkbox', storage);\r\n\t\t\t\t\t});\r\n\t\t\t\t\t$(datatable).on(pfx + 'datatable-on-uncheck', function(e, ids) {\r\n\t\t\t\t\t\tids.forEach(function(id) {\r\n\t\t\t\t\t\t\tExtension.unselectedRows.push(id);\r\n\t\t\t\t\t\t\t// // remove from selected rows\r\n\t\t\t\t\t\t\tExtension.selectedRows = Extension.remove(Extension.selectedRows, id);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tvar storage = {};\r\n\t\t\t\t\t\tstorage['selectedRows'] = $.unique(Extension.selectedRows);\r\n\t\t\t\t\t\tstorage['unselectedRows'] = $.unique(Extension.unselectedRows);\r\n\t\t\t\t\t\tdatatable.stateKeep('checkbox', storage);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Init checkbox clicks event\r\n\t\t\t */\r\n\t\t\tinitEvent: function() {\r\n\t\t\t\t// select all checkbox click\r\n\t\t\t\t$(datatable.tableHead).find('.' + pfx + 'checkbox-all > [type=\"checkbox\"]').click(function(e) {\r\n\t\t\t\t\t// clear selected and unselected rows\r\n\t\t\t\t\tExtension.selectedRows = Extension.unselectedRows = [];\r\n\t\t\t\t\tdatatable.stateRemove('checkbox');\r\n\r\n\t\t\t\t\t// select all rows\r\n\t\t\t\t\tExtension.selectedAllRows = !!$(this).is(':checked');\r\n\r\n\t\t\t\t\t// local select all current page rows\r\n\t\t\t\t\tif (!options.vars.requestIds) {\r\n\t\t\t\t\t\tif ($(this).is(':checked')) {\r\n\t\t\t\t\t\t\tExtension.selectedRows = $.makeArray($(datatable.tableBody).find('.' + pfx + 'checkbox-single > [type=\"checkbox\"]').map(function(i, chk) {\r\n\t\t\t\t\t\t\t\treturn $(chk).val();\r\n\t\t\t\t\t\t\t}));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvar storage = {};\r\n\t\t\t\t\t\tstorage['selectedRows'] = $.unique(Extension.selectedRows);\r\n\t\t\t\t\t\tdatatable.stateKeep('checkbox', storage);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// keep selectedAllRows in datasource params\r\n\t\t\t\t\tdatatable.setDataSourceParam(options.vars.selectedAllRows, Extension.selectedAllRows);\r\n\r\n\t\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-click-checkbox', [$(this)]);\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// single row checkbox click\r\n\t\t\t\t$(datatable.tableBody).find('.' + pfx + 'checkbox-single > [type=\"checkbox\"]').click(function(e) {\r\n\t\t\t\t\tvar id = $(this).val();\r\n\t\t\t\t\tif ($(this).is(':checked')) {\r\n\t\t\t\t\t\tExtension.selectedRows.push(id);\r\n\t\t\t\t\t\t// remove from unselected rows\r\n\t\t\t\t\t\tExtension.unselectedRows = Extension.remove(Extension.unselectedRows, id);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tExtension.unselectedRows.push(id);\r\n\t\t\t\t\t\t// remove from selected rows\r\n\t\t\t\t\t\tExtension.selectedRows = Extension.remove(Extension.selectedRows, id);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// local checkbox header check\r\n\t\t\t\t\tif (!options.vars.requestIds && Extension.selectedRows.length < 1) {\r\n\t\t\t\t\t\t// remove select all checkbox, if there is no checked checkbox left\r\n\t\t\t\t\t\t$(datatable.tableHead).find('.' + pfx + 'checkbox-all > [type=\"checkbox\"]').prop('checked', false);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar storage = {};\r\n\t\t\t\t\tstorage['selectedRows'] = Extension.selectedRows.filter(Extension.unique);\r\n\t\t\t\t\tstorage['unselectedRows'] = Extension.unselectedRows.filter(Extension.unique);\r\n\t\t\t\t\tdatatable.stateKeep('checkbox', storage);\r\n\r\n\t\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-click-checkbox', [$(this)]);\r\n\t\t\t\t});\r\n\t\t\t},\r\n\r\n\t\t\tunique: function(value, index, self) {\r\n\t\t\t\treturn self.indexOf(value) === index;\r\n\t\t\t},\r\n\r\n\t\t\tinitSelect: function() {\r\n\t\t\t\t// selected all rows from server\r\n\t\t\t\tif (Extension.selectedAllRows && options.vars.requestIds) {\r\n\t\t\t\t\tif (!datatable.hasClass(pfx + 'datatable-error')) {\r\n\t\t\t\t\t\t// set header select all checkbox checked\r\n\t\t\t\t\t\t$(datatable.tableHead).find('.' + pfx + 'checkbox-all > [type=\"checkbox\"]').prop('checked', true);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// set all checkbox in table body\r\n\t\t\t\t\tdatatable.setActiveAll(true);\r\n\r\n\t\t\t\t\t// remove unselected rows\r\n\t\t\t\t\tExtension.unselectedRows.forEach(function(id) {\r\n\t\t\t\t\t\tdatatable.setInactive(id);\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t// single check for server and local\r\n\t\t\t\t\tExtension.selectedRows.forEach(function(id) {\r\n\t\t\t\t\t\tdatatable.setActive(id);\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// local checkbox; check if all checkboxes of currect page are checked\r\n\t\t\t\t\tif (!datatable.hasClass(pfx + 'datatable-error') && $(datatable.tableBody).find('.' + pfx + 'checkbox-single > [type=\"checkbox\"]').not(':checked').length < 1) {\r\n\t\t\t\t\t\t// set header select all checkbox checked\r\n\t\t\t\t\t\t$(datatable.tableHead).find('.' + pfx + 'checkbox-all > [type=\"checkbox\"]').prop('checked', true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Check if selector is enabled from options\r\n\t\t\t */\r\n\t\t\tselectorEnabled: function() {\r\n\t\t\t\treturn $.grep(datatable.options.columns, function(n, i) {\r\n\t\t\t\t\treturn n.selector || false;\r\n\t\t\t\t})[0];\r\n\t\t\t},\r\n\r\n\t\t\tinitVars: function() {\r\n\t\t\t\t// get single select/unselect from localstorage\r\n\t\t\t\tvar storage = datatable.stateGet('checkbox');\r\n\t\t\t\tif (typeof storage !== 'undefined') {\r\n\t\t\t\t\tExtension.selectedRows = storage['selectedRows'] || [];\r\n\t\t\t\t\tExtension.unselectedRows = storage['unselectedRows'] || [];\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tgetSelectedId: function(path) {\r\n\t\t\t\tExtension.initVars();\r\n\r\n\t\t\t\t// server selected all rows\r\n\t\t\t\tif (Extension.selectedAllRows && options.vars.requestIds) {\r\n\t\t\t\t\tif (typeof path === 'undefined') {\r\n\t\t\t\t\t\tpath = options.vars.rowIds;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// if selected all rows, return id from response meta\r\n\t\t\t\t\tvar selectedAllRows = datatable.getObject(path, datatable.lastResponse) || [];\r\n\r\n\t\t\t\t\tif (selectedAllRows.length > 0) {\r\n\t\t\t\t\t\t// remove single unselected rows from selectedAllRows ids from server response emta\r\n\t\t\t\t\t\tExtension.unselectedRows.forEach(function(id) {\r\n\t\t\t\t\t\t\tselectedAllRows = Extension.remove(selectedAllRows, parseInt(id));\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn $.unique(selectedAllRows);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// else return single checked selected rows\r\n\t\t\t\treturn Extension.selectedRows;\r\n\t\t\t},\r\n\r\n\t\t\tremove: function(array, element) {\r\n\t\t\t\treturn array.filter(function(e) {\r\n\t\t\t\t\treturn e !== element;\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\t// make the extension accessible from datatable init\r\n\t\tdatatable.checkbox = function() {\r\n\t\t\treturn Extension;\r\n\t\t};\r\n\r\n\t\tif (typeof options === 'object') {\r\n\t\t\toptions = $.extend(true, {}, $.fn[pluginName].checkbox.default, options);\r\n\t\t\tExtension.init.apply(this, [options]);\r\n\t\t}\r\n\r\n\t\treturn datatable;\r\n\t};\r\n\r\n\t$.fn[pluginName].checkbox.default = {\r\n\t\tvars: {\r\n\t\t\t// select all rows flag to be sent to the server\r\n\t\t\tselectedAllRows: 'selectedAllRows',\r\n\t\t\t// request id parameter's name\r\n\t\t\trequestIds: 'requestIds',\r\n\t\t\t// response path to all rows id\r\n\t\t\trowIds: 'meta.rowIds',\r\n\t\t},\r\n\t};\r\n\r\n}(jQuery));\r\n","var defaults = {\r\n\tlayout: {\r\n\t\ticons: {\r\n\t\t\tpagination: {\r\n\t\t\t\tnext: 'flaticon2-next',\r\n\t\t\t\tprev: 'flaticon2-back',\r\n\t\t\t\tfirst: 'flaticon2-fast-back',\r\n\t\t\t\tlast: 'flaticon2-fast-next',\r\n\t\t\t\tmore: 'flaticon-more-1',\r\n\t\t\t},\r\n\t\t\trowDetail: {expand: 'fa fa-caret-down', collapse: 'fa fa-caret-right'},\r\n\t\t}\r\n\t}\r\n};\r\n\r\nif (KTUtil.isRTL()) {\r\n\tdefaults = {\r\n\t\tlayout: {\r\n\t\t\ticons: {\r\n\t\t\t\tpagination: {\r\n\t\t\t\t\tnext: 'flaticon2-back',\r\n\t\t\t\t\tprev: 'flaticon2-next',\r\n\t\t\t\t\tfirst: 'flaticon2-fast-next',\r\n\t\t\t\t\tlast: 'flaticon2-fast-back',\r\n\t\t\t\t},\r\n\t\t\t\trowDetail: {collapse: 'fa fa-caret-down', expand: 'fa fa-caret-right'},\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n$.extend(true, $.fn.KTDatatable.defaults, defaults);\r\n","\"use strict\";\r\n\r\n// Component Definition \r\nvar KTDialog = function(options) {\r\n // Main object\r\n var the = this;\r\n\r\n // Get element object\r\n var element;\r\n var body = KTUtil.getBody();\r\n\r\n // Default options\r\n var defaultOptions = {\r\n 'placement' : 'top center',\r\n 'type' : 'loader',\r\n 'width' : 100,\r\n 'state' : 'default',\r\n 'message' : 'Loading...'\r\n };\r\n\r\n ////////////////////////////\r\n // ** Private Methods ** //\r\n ////////////////////////////\r\n\r\n var Plugin = {\r\n /**\r\n * Construct\r\n */\r\n\r\n construct: function(options) {\r\n Plugin.init(options);\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Handles subtoggle click toggle\r\n */\r\n init: function(options) {\r\n the.events = [];\r\n\r\n // merge default and user defined options\r\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\r\n\r\n the.state = false;\r\n },\r\n\r\n /**\r\n * Show dialog\r\n */\r\n show: function() {\r\n Plugin.eventTrigger('show');\r\n\r\n element = document.createElement(\"DIV\");\r\n KTUtil.setHTML(element, the.options.message);\r\n\r\n KTUtil.addClass(element, 'dialog dialog-shown');\r\n KTUtil.addClass(element, 'dialog-' + the.options.state);\r\n KTUtil.addClass(element, 'dialog-' + the.options.type);\r\n\r\n if (the.options.placement == 'top center') {\r\n KTUtil.addClass(element, 'dialog-top-center');\r\n }\r\n\r\n body.appendChild(element);\r\n\r\n the.state = 'shown';\r\n\r\n Plugin.eventTrigger('shown');\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Hide dialog\r\n */\r\n hide: function() {\r\n if (element) {\r\n Plugin.eventTrigger('hide');\r\n\r\n element.remove();\r\n the.state = 'hidden';\r\n\r\n Plugin.eventTrigger('hidden');\r\n }\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Trigger events\r\n */\r\n eventTrigger: function(name) {\r\n for (var i = 0; i < the.events.length; i++) {\r\n var event = the.events[i];\r\n\r\n if (event.name == name) {\r\n if (event.one == true) {\r\n if (event.fired == false) {\r\n the.events[i].fired = true;\r\n return event.handler.call(this, the);\r\n }\r\n } else {\r\n return event.handler.call(this, the);\r\n }\r\n }\r\n }\r\n },\r\n\r\n addEvent: function(name, handler, one) {\r\n the.events.push({\r\n name: name,\r\n handler: handler,\r\n one: one,\r\n fired: false\r\n });\r\n\r\n return the;\r\n }\r\n };\r\n\r\n //////////////////////////\r\n // ** Public Methods ** //\r\n //////////////////////////\r\n\r\n /**\r\n * Set default options\r\n */\r\n\r\n the.setDefaults = function(options) {\r\n defaultOptions = options;\r\n };\r\n\r\n /**\r\n * Check shown state\r\n */\r\n the.shown = function() {\r\n return the.state == 'shown';\r\n };\r\n\r\n /**\r\n * Check hidden state\r\n */\r\n the.hidden = function() {\r\n return the.state == 'hidden';\r\n };\r\n\r\n /**\r\n * Show dialog\r\n */\r\n the.show = function() {\r\n return Plugin.show();\r\n };\r\n\r\n /**\r\n * Hide dialog\r\n */\r\n the.hide = function() {\r\n return Plugin.hide();\r\n };\r\n\r\n /**\r\n * Attach event\r\n * @returns {KTToggle}\r\n */\r\n the.on = function(name, handler) {\r\n return Plugin.addEvent(name, handler);\r\n };\r\n\r\n /**\r\n * Attach event that will be fired once\r\n * @returns {KTToggle}\r\n */\r\n the.one = function(name, handler) {\r\n return Plugin.addEvent(name, handler, true);\r\n };\r\n\r\n // Construct plugin\r\n Plugin.construct.apply(the, [options]);\r\n\r\n return the;\r\n};\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTDialog;\r\n}\r\n","\"use strict\";\r\n\r\n// Component Definition\r\nvar KTHeader = function(elementId, options) {\r\n // Main object\r\n var the = this;\r\n var init = false;\r\n\r\n // Get element object\r\n var element = KTUtil.getById(elementId);\r\n var body = KTUtil.getBody();\r\n\r\n if (element === undefined) {\r\n return;\r\n }\r\n\r\n // Default options\r\n var defaultOptions = {\r\n offset: {\r\n desktop: true,\r\n tabletAndMobile: true\r\n },\r\n releseOnReverse: {\r\n desktop: false,\r\n tabletAndMobile: false\r\n }\r\n };\r\n\r\n ////////////////////////////\r\n // ** Private Methods ** //\r\n ////////////////////////////\r\n\r\n var Plugin = {\r\n /**\r\n * Run plugin\r\n * @returns {KTHeader}\r\n */\r\n construct: function(options) {\r\n if (KTUtil.data(element).has('header')) {\r\n the = KTUtil.data(element).get('header');\r\n } else {\r\n // reset header\r\n Plugin.init(options);\r\n\r\n // build header\r\n Plugin.build();\r\n\r\n KTUtil.data(element).set('header', the);\r\n }\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Handles subheader click toggle\r\n * @returns {KTHeader}\r\n */\r\n init: function(options) {\r\n the.events = [];\r\n\r\n // merge default and user defined options\r\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\r\n },\r\n\r\n /**\r\n * Reset header\r\n * @returns {KTHeader}\r\n */\r\n build: function() {\r\n var eventTriggerState = true;\r\n var lastScrollTop = 0;\r\n\r\n window.addEventListener('scroll', function() {\r\n var offset = 0, st, attrName;\r\n\r\n if (KTUtil.isBreakpointDown('lg') && the.options.offset.tabletAndMobile === false) {\r\n return;\r\n }\r\n\r\n if (KTUtil.isBreakpointUp('lg') && the.options.offset.desktop === false) {\r\n return;\r\n }\r\n\r\n if (KTUtil.isBreakpointUp('lg')) {\r\n offset = the.options.offset.desktop;\r\n } else if (KTUtil.isBreakpointDown('lg')) {\r\n offset = the.options.offset.tabletAndMobile;\r\n }\r\n\r\n st = KTUtil.getScrollTop();\r\n\r\n if (\r\n (KTUtil.isBreakpointDown('lg') && the.options.releseOnReverse.tabletAndMobile) ||\r\n (KTUtil.isBreakpointUp('lg') && the.options.releseOnReverse.desktop)\r\n ) {\r\n if (st > offset && lastScrollTop < st) { // down scroll mode\r\n if (body.hasAttribute('data-header-scroll') === false) {\r\n body.setAttribute('data-header-scroll', 'on');\r\n }\r\n\r\n if (eventTriggerState) {\r\n Plugin.eventTrigger('scrollOn', the);\r\n eventTriggerState = false;\r\n }\r\n } else { // back scroll mode\r\n if (body.hasAttribute('data-header-scroll') === true) {\r\n body.removeAttribute('data-header-scroll');\r\n }\r\n\r\n if (eventTriggerState == false) {\r\n Plugin.eventTrigger('scrollOff', the);\r\n eventTriggerState = true;\r\n }\r\n }\r\n\r\n lastScrollTop = st;\r\n } else {\r\n if (st > offset) { // down scroll mode\r\n if (body.hasAttribute('data-header-scroll') === false) {\r\n body.setAttribute('data-header-scroll', 'on');\r\n }\r\n\r\n if (eventTriggerState) {\r\n Plugin.eventTrigger('scrollOn', the);\r\n eventTriggerState = false;\r\n }\r\n } else { // back scroll mode\r\n if (body.hasAttribute('data-header-scroll') === true) {\r\n body.removeAttribute('data-header-scroll');\r\n }\r\n\r\n if (eventTriggerState == false) {\r\n Plugin.eventTrigger('scrollOff', the);\r\n eventTriggerState = true;\r\n }\r\n }\r\n }\r\n });\r\n },\r\n\r\n /**\r\n * Trigger events\r\n */\r\n eventTrigger: function(name, args) {\r\n for (var i = 0; i < the.events.length; i++) {\r\n var event = the.events[i];\r\n if (event.name == name) {\r\n if (event.one == true) {\r\n if (event.fired == false) {\r\n the.events[i].fired = true;\r\n return event.handler.call(this, the, args);\r\n }\r\n } else {\r\n return event.handler.call(this, the, args);\r\n }\r\n }\r\n }\r\n },\r\n\r\n addEvent: function(name, handler, one) {\r\n the.events.push({\r\n name: name,\r\n handler: handler,\r\n one: one,\r\n fired: false\r\n });\r\n }\r\n };\r\n\r\n //////////////////////////\r\n // ** Public Methods ** //\r\n //////////////////////////\r\n\r\n /**\r\n * Set default options\r\n */\r\n\r\n the.setDefaults = function(options) {\r\n defaultOptions = options;\r\n };\r\n\r\n /**\r\n * Register event\r\n */\r\n the.on = function(name, handler) {\r\n return Plugin.addEvent(name, handler);\r\n };\r\n\r\n ///////////////////////////////\r\n // ** Plugin Construction ** //\r\n ///////////////////////////////\r\n\r\n // Run plugin\r\n Plugin.construct.apply(the, [options]);\r\n\r\n // Init done\r\n init = true;\r\n\r\n // Return plugin instance\r\n return the;\r\n};\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTHeader;\r\n}\r\n","\"use strict\";\r\n\r\n// Component Definition \r\nvar KTImageInput = function(elementId, options) {\r\n // Main object\r\n var the = this;\r\n var init = false;\r\n\r\n // Get element object\r\n var element = KTUtil.getById(elementId);\r\n var body = KTUtil.getBody();\r\n\r\n if (!element) {\r\n return;\r\n }\r\n\r\n // Default options\r\n var defaultOptions = {\r\n editMode: false\r\n };\r\n\r\n ////////////////////////////\r\n // ** Private Methods ** //\r\n ////////////////////////////\r\n\r\n var Plugin = {\r\n /**\r\n * Construct\r\n */\r\n\r\n construct: function(options) {\r\n if (KTUtil.data(element).has('imageinput')) {\r\n the = KTUtil.data(element).get('imageinput');\r\n } else {\r\n // reset menu\r\n Plugin.init(options);\r\n\r\n // build menu\r\n Plugin.build();\r\n\r\n KTUtil.data(element).set('imageinput', the);\r\n }\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Init avatar\r\n */\r\n init: function(options) {\r\n the.element = element;\r\n the.events = [];\r\n\r\n the.input = KTUtil.find(element, 'input[type=\"file\"]');\r\n the.wrapper = KTUtil.find(element, '.image-input-wrapper');\r\n the.cancel = KTUtil.find(element, '[data-action=\"cancel\"]');\r\n the.remove = KTUtil.find(element, '[data-action=\"remove\"]');\r\n the.src = KTUtil.css(the.wrapper, 'backgroundImage');\r\n the.hidden = KTUtil.find(element, 'input[type=\"hidden\"]');\r\n\r\n // merge default and user defined options\r\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\r\n },\r\n\r\n /**\r\n * Build\r\n */\r\n build: function() {\r\n // Handle change\r\n KTUtil.addEvent(the.input, 'change', function(e) {\r\n e.preventDefault();\r\n\r\n\t if (the.input && the.input.files && the.input.files[0]) {\r\n\t var reader = new FileReader();\r\n\t reader.onload = function(e) {\r\n\t KTUtil.css(the.wrapper, 'background-image', 'url('+e.target.result +')');\r\n\t }\r\n\t reader.readAsDataURL(the.input.files[0]);\r\n\r\n\t KTUtil.addClass(the.element, 'image-input-changed');\r\n KTUtil.removeClass(the.element, 'image-input-empty');\r\n\r\n // Fire change event\r\n Plugin.eventTrigger('change');\r\n\t }\r\n });\r\n\r\n // Handle cancel\r\n KTUtil.addEvent(the.cancel, 'click', function(e) {\r\n e.preventDefault();\r\n\r\n // Fire cancel event\r\n Plugin.eventTrigger('cancel');\r\n\r\n\t KTUtil.removeClass(the.element, 'image-input-changed');\r\n KTUtil.removeClass(the.element, 'image-input-empty');\r\n\t KTUtil.css(the.wrapper, 'background-image', the.src);\r\n\t the.input.value = \"\";\r\n\r\n if (the.hidden) {\r\n the.hidden.value = \"0\";\r\n }\r\n });\r\n\r\n // Handle remove\r\n KTUtil.addEvent(the.remove, 'click', function(e) {\r\n e.preventDefault();\r\n\r\n // Fire cancel event\r\n Plugin.eventTrigger('remove');\r\n\r\n\t KTUtil.removeClass(the.element, 'image-input-changed');\r\n KTUtil.addClass(the.element, 'image-input-empty');\r\n\t KTUtil.css(the.wrapper, 'background-image', \"none\");\r\n\t the.input.value = \"\";\r\n\r\n if (the.hidden) {\r\n the.hidden.value = \"1\";\r\n }\r\n });\r\n },\r\n\r\n /**\r\n * Trigger events\r\n */\r\n eventTrigger: function(name) {\r\n //KTUtil.triggerCustomEvent(name);\r\n for (var i = 0; i < the.events.length; i++) {\r\n var event = the.events[i];\r\n if (event.name == name) {\r\n if (event.one == true) {\r\n if (event.fired == false) {\r\n the.events[i].fired = true;\r\n return event.handler.call(this, the);\r\n }\r\n } else {\r\n return event.handler.call(this, the);\r\n }\r\n }\r\n }\r\n },\r\n\r\n addEvent: function(name, handler, one) {\r\n the.events.push({\r\n name: name,\r\n handler: handler,\r\n one: one,\r\n fired: false\r\n });\r\n\r\n return the;\r\n }\r\n };\r\n\r\n //////////////////////////\r\n // ** Public Methods ** //\r\n //////////////////////////\r\n\r\n /**\r\n * Set default options\r\n */\r\n\r\n the.setDefaults = function(options) {\r\n defaultOptions = options;\r\n };\r\n\r\n /**\r\n * Attach event\r\n */\r\n the.on = function(name, handler) {\r\n return Plugin.addEvent(name, handler);\r\n };\r\n\r\n /**\r\n * Attach event that will be fired once\r\n */\r\n the.one = function(name, handler) {\r\n return Plugin.addEvent(name, handler, true);\r\n };\r\n\r\n // Construct plugin\r\n Plugin.construct.apply(the, [options]);\r\n\r\n return the;\r\n};\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTImageInput;\r\n}\r\n","\"use strict\";\r\n\r\n// Component Definition\r\nvar KTMenu = function(elementId, options) {\r\n // Main object\r\n var the = this;\r\n var init = false;\r\n\r\n // Get element object\r\n var element = KTUtil.getById(elementId);\r\n var body = KTUtil.getBody();\r\n\r\n if (!element) {\r\n return;\r\n }\r\n\r\n // Default options\r\n var defaultOptions = {\r\n // scrollable area with Perfect Scroll\r\n scroll: {\r\n rememberPosition: false\r\n },\r\n\r\n // accordion submenu mode\r\n accordion: {\r\n slideSpeed: 200, // accordion toggle slide speed in milliseconds\r\n autoScroll: false, // enable auto scrolling(focus) to the clicked menu item\r\n autoScrollSpeed: 1200,\r\n expandAll: true // allow having multiple expanded accordions in the menu\r\n },\r\n\r\n // dropdown submenu mode\r\n dropdown: {\r\n timeout: 500 // timeout in milliseconds to show and hide the hoverable submenu dropdown\r\n }\r\n };\r\n\r\n ////////////////////////////\r\n // ** Private Methods ** //\r\n ////////////////////////////\r\n\r\n var Plugin = {\r\n /**\r\n * Run plugin\r\n * @returns {KTMenu}\r\n */\r\n construct: function(options) {\r\n if (KTUtil.data(element).has('menu')) {\r\n the = KTUtil.data(element).get('menu');\r\n } else {\r\n // reset menu\r\n Plugin.init(options);\r\n\r\n // reset menu\r\n Plugin.reset();\r\n\r\n // build menu\r\n Plugin.build();\r\n\r\n KTUtil.data(element).set('menu', the);\r\n }\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Handles submenu click toggle\r\n * @returns {KTMenu}\r\n */\r\n init: function(options) {\r\n the.events = [];\r\n\r\n the.eventHandlers = {};\r\n\r\n // merge default and user defined options\r\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\r\n\r\n // pause menu\r\n the.pauseDropdownHoverTime = 0;\r\n\r\n the.uid = KTUtil.getUniqueID();\r\n },\r\n\r\n update: function(options) {\r\n // merge default and user defined options\r\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\r\n\r\n // pause menu\r\n the.pauseDropdownHoverTime = 0;\r\n\r\n // reset menu\r\n Plugin.reset();\r\n\r\n the.eventHandlers = {};\r\n\r\n // build menu\r\n Plugin.build();\r\n\r\n KTUtil.data(element).set('menu', the);\r\n },\r\n\r\n reload: function() {\r\n // reset menu\r\n Plugin.reset();\r\n\r\n // build menu\r\n Plugin.build();\r\n\r\n // reset submenu props\r\n Plugin.resetSubmenuProps();\r\n },\r\n\r\n /**\r\n * Reset menu\r\n * @returns {KTMenu}\r\n */\r\n build: function() {\r\n // General accordion submenu toggle\r\n the.eventHandlers['event_1'] = KTUtil.on( element, '.menu-toggle', 'click', Plugin.handleSubmenuAccordion);\r\n\r\n // Dropdown mode(hoverable)\r\n if (Plugin.getSubmenuMode() === 'dropdown' || Plugin.isConditionalSubmenuDropdown()) {\r\n // dropdown submenu - hover toggle\r\n the.eventHandlers['event_2'] = KTUtil.on( element, '[data-menu-toggle=\"hover\"]', 'mouseover', Plugin.handleSubmenuDrodownHoverEnter);\r\n the.eventHandlers['event_3'] = KTUtil.on( element, '[data-menu-toggle=\"hover\"]', 'mouseout', Plugin.handleSubmenuDrodownHoverExit);\r\n\r\n // dropdown submenu - click toggle\r\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);\r\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);\r\n }\r\n\r\n // Handle general link click\r\n the.eventHandlers['event_6'] = KTUtil.on(element, '.menu-item > .menu-link:not(.menu-toggle):not(.menu-link-toggle-skip)', 'click', Plugin.handleLinkClick);\r\n\r\n // Init scrollable menu\r\n if (the.options.scroll && the.options.scroll.height) {\r\n Plugin.scrollInit();\r\n }\r\n },\r\n\r\n /**\r\n * Reset menu\r\n * @returns {KTMenu}\r\n */\r\n reset: function() {\r\n KTUtil.off( element, 'click', the.eventHandlers['event_1']);\r\n\r\n // dropdown submenu - hover toggle\r\n KTUtil.off( element, 'mouseover', the.eventHandlers['event_2']);\r\n KTUtil.off( element, 'mouseout', the.eventHandlers['event_3']);\r\n\r\n // dropdown submenu - click toggle\r\n KTUtil.off( element, 'click', the.eventHandlers['event_4']);\r\n KTUtil.off( element, 'click', the.eventHandlers['event_5']);\r\n\r\n // handle link click\r\n KTUtil.off(element, 'click', the.eventHandlers['event_6']);\r\n },\r\n\r\n /**\r\n * Init scroll menu\r\n *\r\n */\r\n scrollInit: function() {\r\n if ( the.options.scroll && the.options.scroll.height ) {\r\n KTUtil.scrollDestroy(element, true);\r\n KTUtil.scrollInit(element, {mobileNativeScroll: true, windowScroll: false, resetHeightOnDestroy: true, handleWindowResize: true, height: the.options.scroll.height, rememberPosition: the.options.scroll.rememberPosition});\r\n } else {\r\n KTUtil.scrollDestroy(element, true);\r\n }\r\n },\r\n\r\n /**\r\n * Update scroll menu\r\n */\r\n scrollUpdate: function() {\r\n if ( the.options.scroll && the.options.scroll.height ) {\r\n KTUtil.scrollUpdate(element);\r\n }\r\n },\r\n\r\n /**\r\n * Scroll top\r\n */\r\n scrollTop: function() {\r\n if ( the.options.scroll && the.options.scroll.height ) {\r\n KTUtil.scrollTop(element);\r\n }\r\n },\r\n\r\n /**\r\n * Get submenu mode for current breakpoint and menu state\r\n * @returns {KTMenu}\r\n */\r\n getSubmenuMode: function(el) {\r\n if ( KTUtil.isBreakpointUp('lg') ) {\r\n if (el && KTUtil.hasAttr(el, 'data-menu-toggle') && KTUtil.attr(el, 'data-menu-toggle') == 'hover') {\r\n return 'dropdown';\r\n }\r\n\r\n if ( KTUtil.isset(the.options.submenu, 'desktop.state.body') ) {\r\n if ( KTUtil.hasClasses(body, the.options.submenu.desktop.state.body) ) {\r\n return the.options.submenu.desktop.state.mode;\r\n } else {\r\n return the.options.submenu.desktop.default;\r\n }\r\n } else if ( KTUtil.isset(the.options.submenu, 'desktop') ) {\r\n return the.options.submenu.desktop;\r\n }\r\n } else if ( KTUtil.isBreakpointUp('md') && KTUtil.isBreakpointDown('lg') && KTUtil.isset(the.options.submenu, 'tablet') ) {\r\n return the.options.submenu.tablet;\r\n } else if ( KTUtil.isBreakpointDown('md') && KTUtil.isset(the.options.submenu, 'mobile') ) {\r\n return the.options.submenu.mobile;\r\n } else {\r\n return false;\r\n }\r\n },\r\n\r\n /**\r\n * Get submenu mode for current breakpoint and menu state\r\n * @returns {KTMenu}\r\n */\r\n isConditionalSubmenuDropdown: function() {\r\n if ( KTUtil.isBreakpointUp('lg') && KTUtil.isset(the.options.submenu, 'desktop.state.body') ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n },\r\n\r\n\r\n /**\r\n * Reset submenu attributes\r\n * @returns {KTMenu}\r\n */\r\n resetSubmenuProps: function(e) {\r\n var submenus = KTUtil.findAll(element, '.menu-submenu');\r\n if ( submenus ) {\r\n for (var i = 0, len = submenus.length; i < len; i++) {\r\n var submenu = submenus[0];\r\n\r\n KTUtil.css(submenu, 'display', '');\r\n KTUtil.css(submenu, 'overflow', '');\r\n\r\n if (submenu.hasAttribute('data-hor-direction')) {\r\n KTUtil.removeClass(submenu, 'menu-submenu-left');\r\n KTUtil.removeClass(submenu, 'menu-submenu-right');\r\n KTUtil.addClass(submenu, submenu.getAttribute('data-hor-direction'));\r\n }\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Handles submenu hover toggle\r\n * @returns {KTMenu}\r\n */\r\n handleSubmenuDrodownHoverEnter: function(e) {\r\n if ( Plugin.getSubmenuMode(this) === 'accordion' ) {\r\n return;\r\n }\r\n\r\n if ( the.resumeDropdownHover() === false ) {\r\n return;\r\n }\r\n\r\n var item = this;\r\n\r\n if ( item.getAttribute('data-hover') == '1' ) {\r\n item.removeAttribute('data-hover');\r\n clearTimeout( item.getAttribute('data-timeout') );\r\n item.removeAttribute('data-timeout');\r\n }\r\n\r\n Plugin.showSubmenuDropdown(item);\r\n },\r\n\r\n /**\r\n * Handles submenu hover toggle\r\n * @returns {KTMenu}\r\n */\r\n handleSubmenuDrodownHoverExit: function(e) {\r\n if ( the.resumeDropdownHover() === false ) {\r\n return;\r\n }\r\n\r\n if ( Plugin.getSubmenuMode(this) === 'accordion' ) {\r\n return;\r\n }\r\n\r\n var item = this;\r\n var time = the.options.dropdown.timeout;\r\n\r\n var timeout = setTimeout(function() {\r\n if ( item.getAttribute('data-hover') == '1' ) {\r\n Plugin.hideSubmenuDropdown(item, true);\r\n }\r\n }, time);\r\n\r\n item.setAttribute('data-hover', '1');\r\n item.setAttribute('data-timeout', timeout);\r\n },\r\n\r\n /**\r\n * Handles submenu click toggle\r\n * @returns {KTMenu}\r\n */\r\n handleSubmenuDropdownClick: function(e) {\r\n if ( Plugin.getSubmenuMode(this) === 'accordion' ) {\r\n return;\r\n }\r\n\r\n var item = this.closest('.menu-item');\r\n\r\n // Trigger click event handlers\r\n var result = Plugin.eventTrigger('submenuToggle', this, e);\r\n if (result === false) {\r\n return;\r\n }\r\n\r\n if ( item.getAttribute('data-menu-submenu-mode') == 'accordion' ) {\r\n return;\r\n }\r\n\r\n if ( KTUtil.hasClass(item, 'menu-item-hover') === false ) {\r\n KTUtil.addClass(item, 'menu-item-open-dropdown');\r\n Plugin.showSubmenuDropdown(item);\r\n } else {\r\n KTUtil.removeClass(item, 'menu-item-open-dropdown' );\r\n Plugin.hideSubmenuDropdown(item, true);\r\n }\r\n\r\n e.preventDefault();\r\n },\r\n\r\n /**\r\n * Handles tab click toggle\r\n * @returns {KTMenu}\r\n */\r\n handleSubmenuDropdownTabClick: function(e) {\r\n if (Plugin.getSubmenuMode(this) === 'accordion') {\r\n return;\r\n }\r\n var item = this.closest('.menu-item');\r\n\r\n // Trigger click event handlers\r\n var result = Plugin.eventTrigger('submenuToggle', this, e);\r\n if (result === false) {\r\n return;\r\n }\r\n\r\n if (item.getAttribute('data-menu-submenu-mode') == 'accordion') {\r\n return;\r\n }\r\n\r\n if (KTUtil.hasClass(item, 'menu-item-hover') == false) {\r\n KTUtil.addClass(item, 'menu-item-open-dropdown');\r\n Plugin.showSubmenuDropdown(item);\r\n }\r\n\r\n e.preventDefault();\r\n },\r\n\r\n /**\r\n * Handles link click\r\n * @returns {KTMenu}\r\n */\r\n handleLinkClick: function(e) {\r\n var submenu = this.closest('.menu-item.menu-item-submenu');\r\n\r\n // Trigger click event handlers\r\n var result = Plugin.eventTrigger('linkClick', this, e);\r\n if (result === false) {\r\n return;\r\n }\r\n\r\n if ( submenu && Plugin.getSubmenuMode(submenu) === 'dropdown' ) {\r\n Plugin.hideSubmenuDropdowns();\r\n }\r\n },\r\n\r\n /**\r\n * Handles submenu dropdown close on link click\r\n * @returns {KTMenu}\r\n */\r\n handleSubmenuDropdownClose: function(e, el) {\r\n // exit if its not submenu dropdown mode\r\n if (Plugin.getSubmenuMode(el) === 'accordion') {\r\n return;\r\n }\r\n\r\n var shown = element.querySelectorAll('.menu-item.menu-item-submenu.menu-item-hover:not(.menu-item-tabs)');\r\n\r\n // check if currently clicked link's parent item ha\r\n if (shown.length > 0 && KTUtil.hasClass(el, 'menu-toggle') === false && el.querySelectorAll('.menu-toggle').length === 0) {\r\n // close opened dropdown menus\r\n for (var i = 0, len = shown.length; i < len; i++) {\r\n Plugin.hideSubmenuDropdown(shown[0], true);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * helper functions\r\n * @returns {KTMenu}\r\n */\r\n handleSubmenuAccordion: function(e, el) {\r\n var query;\r\n var item = el ? el : this;\r\n\r\n // Trigger click event handlers\r\n var result = Plugin.eventTrigger('submenuToggle', this, e);\r\n if (result === false) {\r\n return;\r\n }\r\n\r\n if ( Plugin.getSubmenuMode(el) === 'dropdown' && (query = item.closest('.menu-item') ) ) {\r\n if (query.getAttribute('data-menu-submenu-mode') != 'accordion' ) {\r\n e.preventDefault();\r\n return;\r\n }\r\n }\r\n\r\n var li = item.closest('.menu-item');\r\n var submenu = KTUtil.child(li, '.menu-submenu, .menu-inner');\r\n\r\n if (KTUtil.hasClass(item.closest('.menu-item'), 'menu-item-open-always')) {\r\n return;\r\n }\r\n\r\n if ( li && submenu ) {\r\n e.preventDefault();\r\n var speed = the.options.accordion.slideSpeed;\r\n var hasClosables = false;\r\n\r\n if ( KTUtil.hasClass(li, 'menu-item-open') === false ) {\r\n // hide other accordions\r\n if ( the.options.accordion.expandAll === false ) {\r\n var subnav = item.closest('.menu-nav, .menu-subnav');\r\n var closables = KTUtil.children(subnav, '.menu-item.menu-item-open.menu-item-submenu:not(.menu-item-here):not(.menu-item-open-always)');\r\n\r\n if ( subnav && closables ) {\r\n for (var i = 0, len = closables.length; i < len; i++) {\r\n var el_ = closables[0];\r\n var submenu_ = KTUtil.child(el_, '.menu-submenu');\r\n if ( submenu_ ) {\r\n KTUtil.slideUp(submenu_, speed, function() {\r\n Plugin.scrollUpdate();\r\n KTUtil.removeClass(el_, 'menu-item-open');\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n KTUtil.slideDown(submenu, speed, function() {\r\n Plugin.scrollToItem(item);\r\n Plugin.scrollUpdate();\r\n\r\n Plugin.eventTrigger('submenuToggle', submenu, e);\r\n });\r\n\r\n KTUtil.addClass(li, 'menu-item-open');\r\n\r\n } else {\r\n KTUtil.slideUp(submenu, speed, function() {\r\n Plugin.scrollToItem(item);\r\n Plugin.eventTrigger('submenuToggle', submenu, e);\r\n });\r\n\r\n KTUtil.removeClass(li, 'menu-item-open');\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * scroll to item function\r\n * @returns {KTMenu}\r\n */\r\n scrollToItem: function(item) {\r\n // handle auto scroll for accordion submenus\r\n if ( KTUtil.isBreakpointUp('lg') && the.options.accordion.autoScroll && element.getAttribute('data-menu-scroll') !== '1' ) {\r\n KTUtil.scrollTo(item, the.options.accordion.autoScrollSpeed);\r\n }\r\n },\r\n\r\n /**\r\n * Hide submenu dropdown\r\n * @returns {KTMenu}\r\n */\r\n hideSubmenuDropdown: function(item, classAlso) {\r\n // remove submenu activation class\r\n if ( classAlso ) {\r\n KTUtil.removeClass(item, 'menu-item-hover');\r\n KTUtil.removeClass(item, 'menu-item-active-tab');\r\n }\r\n\r\n // clear timeout\r\n item.removeAttribute('data-hover');\r\n\r\n if ( item.getAttribute('data-menu-toggle-class') ) {\r\n KTUtil.removeClass(body, item.getAttribute('data-menu-toggle-class'));\r\n }\r\n\r\n var timeout = item.getAttribute('data-timeout');\r\n item.removeAttribute('data-timeout');\r\n clearTimeout(timeout);\r\n },\r\n\r\n /**\r\n * Hide submenu dropdowns\r\n * @returns {KTMenu}\r\n */\r\n hideSubmenuDropdowns: function() {\r\n var items;\r\n if ( items = element.querySelectorAll('.menu-item-submenu.menu-item-hover:not(.menu-item-tabs):not([data-menu-toggle=\"tab\"])') ) {\r\n for (var j = 0, cnt = items.length; j < cnt; j++) {\r\n Plugin.hideSubmenuDropdown(items[j], true);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * helper functions\r\n * @returns {KTMenu}\r\n */\r\n showSubmenuDropdown: function(item) {\r\n // close active submenus\r\n var list = element.querySelectorAll('.menu-item-submenu.menu-item-hover, .menu-item-submenu.menu-item-active-tab');\r\n\r\n if ( list ) {\r\n for (var i = 0, len = list.length; i < len; i++) {\r\n var el = list[i];\r\n if ( item !== el && el.contains(item) === false && item.contains(el) === false ) {\r\n Plugin.hideSubmenuDropdown(el, true);\r\n }\r\n }\r\n }\r\n\r\n // add submenu activation class\r\n KTUtil.addClass(item, 'menu-item-hover');\r\n\r\n // Change the alignment of submenu is offscreen.\r\n var submenu = KTUtil.find(item, '.menu-submenu');\r\n\r\n if (submenu && submenu.hasAttribute('data-hor-direction') === false) {\r\n if (KTUtil.hasClass(submenu, 'menu-submenu-left')) {\r\n submenu.setAttribute('data-hor-direction', 'menu-submenu-left');\r\n } else if (KTUtil.hasClass(submenu, 'menu-submenu-right')) {\r\n submenu.setAttribute('data-hor-direction', 'menu-submenu-right');\r\n }\r\n }\r\n\r\n if ( submenu && KTUtil.isOffscreen(submenu, 'left', 15) === true ) {\r\n KTUtil.removeClass(submenu, 'menu-submenu-left');\r\n KTUtil.addClass(submenu, 'menu-submenu-right');\r\n } else if ( submenu && KTUtil.isOffscreen(submenu, 'right', 15) === true ) {\r\n KTUtil.removeClass(submenu, 'menu-submenu-right');\r\n KTUtil.addClass(submenu, 'menu-submenu-left');\r\n }\r\n\r\n if ( item.getAttribute('data-menu-toggle-class') ) {\r\n KTUtil.addClass(body, item.getAttribute('data-menu-toggle-class'));\r\n }\r\n },\r\n\r\n /**\r\n * Handles submenu slide toggle\r\n * @returns {KTMenu}\r\n */\r\n createSubmenuDropdownClickDropoff: function(el) {\r\n var query;\r\n var zIndex = (query = KTUtil.child(el, '.menu-submenu') ? KTUtil.css(query, 'z-index') : 0) - 1;\r\n\r\n var dropoff = document.createElement('
');\r\n\r\n body.appendChild(dropoff);\r\n\r\n KTUtil.addEvent(dropoff, 'click', function(e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n KTUtil.remove(this);\r\n Plugin.hideSubmenuDropdown(el, true);\r\n });\r\n },\r\n\r\n /**\r\n * Handles submenu hover toggle\r\n * @returns {KTMenu}\r\n */\r\n pauseDropdownHover: function(time) {\r\n var date = new Date();\r\n\r\n the.pauseDropdownHoverTime = date.getTime() + time;\r\n },\r\n\r\n /**\r\n * Handles submenu hover toggle\r\n * @returns {KTMenu}\r\n */\r\n resumeDropdownHover: function() {\r\n var date = new Date();\r\n\r\n return (date.getTime() > the.pauseDropdownHoverTime ? true : false);\r\n },\r\n\r\n /**\r\n * Reset menu's current active item\r\n * @returns {KTMenu}\r\n */\r\n resetActiveItem: function(item) {\r\n var list;\r\n var parents;\r\n\r\n list = element.querySelectorAll('.menu-item-active');\r\n\r\n for (var i = 0, len = list.length; i < len; i++) {\r\n var el = list[0];\r\n KTUtil.removeClass(el, 'menu-item-active');\r\n KTUtil.hide( KTUtil.child(el, '.menu-submenu') );\r\n parents = KTUtil.parents(el, '.menu-item-submenu') || [];\r\n\r\n for (var i_ = 0, len_ = parents.length; i_ < len_; i_++) {\r\n var el_ = parents[i];\r\n KTUtil.removeClass(el_, 'menu-item-open');\r\n KTUtil.hide( KTUtil.child(el_, '.menu-submenu') );\r\n }\r\n }\r\n\r\n // close open submenus\r\n if ( the.options.accordion.expandAll === false ) {\r\n if ( list = element.querySelectorAll('.menu-item-open') ) {\r\n for (var i = 0, len = list.length; i < len; i++) {\r\n KTUtil.removeClass(parents[0], 'menu-item-open');\r\n }\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Sets menu's active item\r\n * @returns {KTMenu}\r\n */\r\n setActiveItem: function(item) {\r\n // reset current active item\r\n Plugin.resetActiveItem();\r\n\r\n var parents = KTUtil.parents(item, '.menu-item-submenu') || [];\r\n for (var i = 0, len = parents.length; i < len; i++) {\r\n KTUtil.addClass(parents[i], 'menu-item-open');\r\n }\r\n\r\n KTUtil.addClass(item, 'menu-item-active');\r\n },\r\n\r\n /**\r\n * Returns page breadcrumbs for the menu's active item\r\n * @returns {KTMenu}\r\n */\r\n getBreadcrumbs: function(item) {\r\n var query;\r\n var breadcrumbs = [];\r\n var link = KTUtil.child(item, '.menu-link');\r\n\r\n breadcrumbs.push({\r\n text: (query = KTUtil.child(link, '.menu-text') ? query.innerHTML : ''),\r\n title: link.getAttribute('title'),\r\n href: link.getAttribute('href')\r\n });\r\n\r\n var parents = KTUtil.parents(item, '.menu-item-submenu');\r\n for (var i = 0, len = parents.length; i < len; i++) {\r\n var submenuLink = KTUtil.child(parents[i], '.menu-link');\r\n\r\n breadcrumbs.push({\r\n text: (query = KTUtil.child(submenuLink, '.menu-text') ? query.innerHTML : ''),\r\n title: submenuLink.getAttribute('title'),\r\n href: submenuLink.getAttribute('href')\r\n });\r\n }\r\n\r\n return breadcrumbs.reverse();\r\n },\r\n\r\n /**\r\n * Returns page title for the menu's active item\r\n * @returns {KTMenu}\r\n */\r\n getPageTitle: function(item) {\r\n var query;\r\n\r\n return (query = KTUtil.child(item, '.menu-text') ? query.innerHTML : '');\r\n },\r\n\r\n /**\r\n * Trigger events\r\n */\r\n eventTrigger: function(name, target, e) {\r\n for (var i = 0; i < the.events.length; i++ ) {\r\n var event = the.events[i];\r\n if ( event.name == name ) {\r\n if ( event.one == true ) {\r\n if ( event.fired == false ) {\r\n the.events[i].fired = true;\r\n return event.handler.call(this, target, e);\r\n }\r\n } else {\r\n return event.handler.call(this, target, e);\r\n }\r\n }\r\n }\r\n },\r\n\r\n addEvent: function(name, handler, one) {\r\n the.events.push({\r\n name: name,\r\n handler: handler,\r\n one: one,\r\n fired: false\r\n });\r\n },\r\n\r\n removeEvent: function(name) {\r\n if (the.events[name]) {\r\n delete the.events[name];\r\n }\r\n }\r\n };\r\n\r\n //////////////////////////\r\n // ** Public Methods ** //\r\n //////////////////////////\r\n\r\n /**\r\n * Set default options\r\n */\r\n\r\n the.setDefaults = function(options) {\r\n defaultOptions = options;\r\n };\r\n\r\n /**\r\n * Update scroll\r\n */\r\n the.scrollUpdate = function() {\r\n return Plugin.scrollUpdate();\r\n };\r\n\r\n /**\r\n * Re-init scroll\r\n */\r\n the.scrollReInit = function() {\r\n return Plugin.scrollInit();\r\n };\r\n\r\n /**\r\n * Scroll top\r\n */\r\n the.scrollTop = function() {\r\n return Plugin.scrollTop();\r\n };\r\n\r\n /**\r\n * Set active menu item\r\n */\r\n the.setActiveItem = function(item) {\r\n return Plugin.setActiveItem(item);\r\n };\r\n\r\n the.reload = function() {\r\n return Plugin.reload();\r\n };\r\n\r\n the.update = function(options) {\r\n return Plugin.update(options);\r\n };\r\n\r\n /**\r\n * Set breadcrumb for menu item\r\n */\r\n the.getBreadcrumbs = function(item) {\r\n return Plugin.getBreadcrumbs(item);\r\n };\r\n\r\n /**\r\n * Set page title for menu item\r\n */\r\n the.getPageTitle = function(item) {\r\n return Plugin.getPageTitle(item);\r\n };\r\n\r\n /**\r\n * Get submenu mode\r\n */\r\n the.getSubmenuMode = function(el) {\r\n return Plugin.getSubmenuMode(el);\r\n };\r\n\r\n /**\r\n * Hide dropdown\r\n * @returns {Object}\r\n */\r\n the.hideDropdown = function(item) {\r\n Plugin.hideSubmenuDropdown(item, true);\r\n };\r\n\r\n /**\r\n * Hide dropdowns\r\n * @returns {Object}\r\n */\r\n the.hideDropdowns = function() {\r\n Plugin.hideSubmenuDropdowns();\r\n };\r\n\r\n /**\r\n * Disable menu for given time\r\n * @returns {Object}\r\n */\r\n the.pauseDropdownHover = function(time) {\r\n Plugin.pauseDropdownHover(time);\r\n };\r\n\r\n /**\r\n * Disable menu for given time\r\n * @returns {Object}\r\n */\r\n the.resumeDropdownHover = function() {\r\n return Plugin.resumeDropdownHover();\r\n };\r\n\r\n /**\r\n * Register event\r\n */\r\n the.on = function(name, handler) {\r\n return Plugin.addEvent(name, handler);\r\n };\r\n\r\n the.off = function(name) {\r\n return Plugin.removeEvent(name);\r\n };\r\n\r\n the.one = function(name, handler) {\r\n return Plugin.addEvent(name, handler, true);\r\n };\r\n\r\n ///////////////////////////////\r\n // ** Plugin Construction ** //\r\n ///////////////////////////////\r\n\r\n // Run plugin\r\n Plugin.construct.apply(the, [options]);\r\n\r\n // Handle plugin on window resize\r\n KTUtil.addResizeHandler(function() {\r\n if (init) {\r\n the.reload();\r\n }\r\n });\r\n\r\n // Init done\r\n init = true;\r\n\r\n // Return plugin instance\r\n return the;\r\n};\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTMenu;\r\n}\r\n\r\n// Plugin global lazy initialization\r\ndocument.addEventListener(\"click\", function (e) {\r\n var body = KTUtil.getByTagName('body')[0];\r\n var query;\r\n if ( query = body.querySelectorAll('.menu-nav .menu-item.menu-item-submenu.menu-item-hover:not(.menu-item-tabs)[data-menu-toggle=\"click\"]') ) {\r\n for (var i = 0, len = query.length; i < len; i++) {\r\n var element = query[i].closest('.menu-nav').parentNode;\r\n\r\n if ( element ) {\r\n var the = KTUtil.data(element).get('menu');\r\n\r\n if ( !the ) {\r\n break;\r\n }\r\n\r\n if ( !the || the.getSubmenuMode() !== 'dropdown' ) {\r\n break;\r\n }\r\n\r\n if ( e.target !== element && element.contains(e.target) === false ) {\r\n the.hideDropdowns();\r\n }\r\n }\r\n }\r\n }\r\n});\r\n","\"use strict\";\r\n\r\n// Component Definition\r\nvar KTOffcanvas = function(elementId, options) {\r\n // Main object\r\n var the = this;\r\n var init = false;\r\n\r\n // Get element object\r\n var element = KTUtil.getById(elementId);\r\n var body = KTUtil.getBody();\r\n\r\n if (!element) {\r\n return;\r\n }\r\n\r\n // Default options\r\n var defaultOptions = {\r\n attrCustom: ''\r\n };\r\n\r\n ////////////////////////////\r\n // ** Private Methods ** //\r\n ////////////////////////////\r\n\r\n var Plugin = {\r\n construct: function(options) {\r\n if (KTUtil.data(element).has('offcanvas')) {\r\n the = KTUtil.data(element).get('offcanvas');\r\n } else {\r\n // Reset offcanvas\r\n Plugin.init(options);\r\n\r\n // Build offcanvas\r\n Plugin.build();\r\n\r\n KTUtil.data(element).set('offcanvas', the);\r\n }\r\n\r\n return the;\r\n },\r\n\r\n init: function(options) {\r\n the.events = [];\r\n\r\n // merge default and user defined options\r\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\r\n\r\n the.classBase = the.options.baseClass;\r\n the.attrCustom = the.options.attrCustom;\r\n the.classShown = the.classBase + '-on';\r\n the.classOverlay = the.classBase + '-overlay';\r\n the.target;\r\n\r\n the.state = KTUtil.hasClass(element, the.classShown) ? 'shown' : 'hidden';\r\n },\r\n\r\n build: function() {\r\n // offcanvas toggle\r\n if (the.options.toggleBy) {\r\n if (typeof the.options.toggleBy === 'string') {\r\n KTUtil.addEvent(KTUtil.getById(the.options.toggleBy), 'click', function(e) {\r\n e.preventDefault();\r\n the.target = this;\r\n Plugin.toggle();\r\n });\r\n } else if (the.options.toggleBy && the.options.toggleBy[0]) {\r\n if (the.options.toggleBy[0].target) {\r\n for (var i in the.options.toggleBy) {\r\n KTUtil.addEvent(KTUtil.getById(the.options.toggleBy[i].target), 'click', function(e) {\r\n e.preventDefault();\r\n the.target = this;\r\n Plugin.toggle();\r\n });\r\n }\r\n } else {\r\n for (var i in the.options.toggleBy) {\r\n KTUtil.addEvent(KTUtil.getById(the.options.toggleBy[i]), 'click', function(e) {\r\n e.preventDefault();\r\n the.target = this;\r\n Plugin.toggle();\r\n });\r\n }\r\n }\r\n\r\n } else if (the.options.toggleBy && the.options.toggleBy.target) {\r\n KTUtil.addEvent( KTUtil.getById(the.options.toggleBy.target), 'click', function(e) {\r\n e.preventDefault();\r\n the.target = this;\r\n Plugin.toggle();\r\n });\r\n }\r\n }\r\n\r\n // offcanvas close\r\n var closeBy = KTUtil.getById(the.options.closeBy);\r\n if (closeBy) {\r\n KTUtil.addEvent(closeBy, 'click', function(e) {\r\n e.preventDefault();\r\n the.target = this;\r\n Plugin.hide();\r\n });\r\n }\r\n },\r\n\r\n isShown: function() {\r\n return (the.state == 'shown' ? true : false);\r\n },\r\n\r\n toggle: function() {;\r\n Plugin.eventTrigger('toggle');\r\n\r\n if (the.state == 'shown') {\r\n Plugin.hide();\r\n } else {\r\n Plugin.show();\r\n }\r\n },\r\n\r\n show: function() {\r\n if (the.state == 'shown') {\r\n return;\r\n }\r\n\r\n Plugin.eventTrigger('beforeShow');\r\n\r\n Plugin.toggleClass('show');\r\n\r\n // Offcanvas panel\r\n KTUtil.attr(body, 'data-offcanvas-' + the.classBase, 'on');\r\n KTUtil.addClass(element, the.classShown);\r\n\r\n if (the.attrCustom.length > 0) {\r\n KTUtil.attr(body, 'data-offcanvas-' + the.classCustom, 'on');\r\n //KTUtil.addClass(body, the.classCustom);\r\n }\r\n\r\n the.state = 'shown';\r\n\r\n if (the.options.overlay) {\r\n the.overlay = KTUtil.insertAfter(document.createElement('DIV') , element );\r\n KTUtil.addClass(the.overlay, the.classOverlay);\r\n\r\n KTUtil.addEvent(the.overlay, 'click', function(e) {\r\n //e.stopPropagation();\r\n e.preventDefault();\r\n Plugin.hide(the.target);\r\n });\r\n }\r\n\r\n Plugin.eventTrigger('afterShow');\r\n },\r\n\r\n hide: function() {\r\n if (the.state == 'hidden') {\r\n return;\r\n }\r\n\r\n Plugin.eventTrigger('beforeHide');\r\n\r\n Plugin.toggleClass('hide');\r\n\r\n KTUtil.removeAttr(body, 'data-offcanvas-' + the.classBase);\r\n KTUtil.removeClass(element, the.classShown);\r\n\r\n if (the.attrCustom.length > 0) {\r\n KTUtil.removeAttr(body, 'data-offcanvas-' + the.attrCustom);\r\n }\r\n\r\n the.state = 'hidden';\r\n\r\n if (the.options.overlay && the.overlay) {\r\n KTUtil.remove(the.overlay);\r\n }\r\n\r\n Plugin.eventTrigger('afterHide');\r\n },\r\n\r\n toggleClass: function(mode) {\r\n var id = KTUtil.attr(the.target, 'id');\r\n var toggleBy;\r\n\r\n if (the.options.toggleBy && the.options.toggleBy[0] && the.options.toggleBy[0].target) {\r\n for (var i in the.options.toggleBy) {\r\n if (the.options.toggleBy[i].target === id) {\r\n toggleBy = the.options.toggleBy[i];\r\n }\r\n }\r\n } else if (the.options.toggleBy && the.options.toggleBy.target) {\r\n toggleBy = the.options.toggleBy;\r\n }\r\n\r\n if (toggleBy) {\r\n var el = KTUtil.getById(toggleBy.target);\r\n\r\n if (mode === 'show') {\r\n KTUtil.addClass(el, toggleBy.state);\r\n }\r\n\r\n if (mode === 'hide') {\r\n KTUtil.removeClass(el, toggleBy.state);\r\n }\r\n }\r\n },\r\n\r\n eventTrigger: function(name, args) {\r\n for (var i = 0; i < the.events.length; i++) {\r\n var event = the.events[i];\r\n if (event.name == name) {\r\n if (event.one == true) {\r\n if (event.fired == false) {\r\n the.events[i].fired = true;\r\n return event.handler.call(this, the, args);\r\n }\r\n } else {\r\n return event.handler.call(this, the, args);\r\n }\r\n }\r\n }\r\n },\r\n\r\n addEvent: function(name, handler, one) {\r\n the.events.push({\r\n name: name,\r\n handler: handler,\r\n one: one,\r\n fired: false\r\n });\r\n }\r\n };\r\n\r\n //////////////////////////\r\n // ** Public Methods ** //\r\n //////////////////////////\r\n\r\n /**\r\n * Set default options\r\n * @param options\r\n */\r\n the.setDefaults = function(options) {\r\n defaultOptions = options;\r\n };\r\n\r\n /**\r\n * Check if canvas is shown\r\n * @returns {boolean}\r\n */\r\n the.isShown = function() {\r\n return Plugin.isShown();\r\n };\r\n\r\n /**\r\n * Set to hide the canvas\r\n */\r\n the.hide = function() {\r\n return Plugin.hide();\r\n };\r\n\r\n /**\r\n * Set to show the canvas\r\n */\r\n the.show = function() {\r\n return Plugin.show();\r\n };\r\n\r\n /**\r\n * Attach event\r\n * @param name\r\n * @param handler\r\n */\r\n the.on = function(name, handler) {\r\n return Plugin.addEvent(name, handler);\r\n };\r\n\r\n /**\r\n * Attach event that will be fired once\r\n * @param name\r\n * @param handler\r\n */\r\n the.one = function(name, handler) {\r\n return Plugin.addEvent(name, handler, true);\r\n };\r\n\r\n ///////////////////////////////\r\n // ** Plugin Construction ** //\r\n ///////////////////////////////\r\n\r\n // Run plugin\r\n Plugin.construct.apply(the, [options]);\r\n\r\n // Init done\r\n init = true;\r\n\r\n // Return plugin instance\r\n return the;\r\n};\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTOffcanvas;\r\n}\r\n","\"use strict\";\r\n\r\n// Component Definition\r\nvar KTScrolltop = function(elementId, options) {\r\n // Main object\r\n var the = this;\r\n var init = false;\r\n\r\n // Get element object\r\n var element = KTUtil.getById(elementId);\r\n var body = KTUtil.getBody();\r\n\r\n if (!element) {\r\n return;\r\n }\r\n\r\n // Default options\r\n var defaultOptions = {\r\n offset: 300,\r\n speed: 6000\r\n };\r\n\r\n ////////////////////////////\r\n // ** Private Methods ** //\r\n ////////////////////////////\r\n\r\n var Plugin = {\r\n /**\r\n * Run plugin\r\n * @returns {mscrolltop}\r\n */\r\n construct: function(options) {\r\n if (KTUtil.data(element).has('scrolltop')) {\r\n the = KTUtil.data(element).get('scrolltop');\r\n } else {\r\n // reset scrolltop\r\n Plugin.init(options);\r\n\r\n // build scrolltop\r\n Plugin.build();\r\n\r\n KTUtil.data(element).set('scrolltop', the);\r\n }\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Handles subscrolltop click toggle\r\n * @returns {mscrolltop}\r\n */\r\n init: function(options) {\r\n the.events = [];\r\n\r\n // merge default and user defined options\r\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\r\n },\r\n\r\n build: function() {\r\n var timer;\r\n\r\n window.addEventListener('scroll', function() {\r\n KTUtil.throttle(timer, function() {\r\n Plugin.handle();\r\n }, 200);\r\n });\r\n\r\n // handle button click\r\n KTUtil.addEvent(element, 'click', Plugin.scroll);\r\n },\r\n\r\n /**\r\n * Handles scrolltop click scrollTop\r\n */\r\n handle: function() {\r\n var pos = KTUtil.getScrollTop(); // current vertical position\r\n\r\n if (pos > the.options.offset) {\r\n if (body.hasAttribute('data-scrolltop') === false) {\r\n body.setAttribute('data-scrolltop', 'on');\r\n }\r\n } else {\r\n if (body.hasAttribute('data-scrolltop') === true) {\r\n body.removeAttribute('data-scrolltop');\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Handles scrolltop click scrollTop\r\n */\r\n scroll: function(e) {\r\n e.preventDefault();\r\n\r\n KTUtil.scrollTop(0, the.options.speed);\r\n },\r\n\r\n\r\n /**\r\n * Trigger events\r\n */\r\n eventTrigger: function(name, args) {\r\n for (var i = 0; i < the.events.length; i++) {\r\n var event = the.events[i];\r\n if (event.name == name) {\r\n if (event.one == true) {\r\n if (event.fired == false) {\r\n the.events[i].fired = true;\r\n return event.handler.call(this, the, args);\r\n }\r\n } else {\r\n return event.handler.call(this, the, args);\r\n }\r\n }\r\n }\r\n },\r\n\r\n addEvent: function(name, handler, one) {\r\n the.events.push({\r\n name: name,\r\n handler: handler,\r\n one: one,\r\n fired: false\r\n });\r\n }\r\n };\r\n\r\n //////////////////////////\r\n // ** Public Methods ** //\r\n //////////////////////////\r\n\r\n /**\r\n * Set default options\r\n */\r\n\r\n the.setDefaults = function(options) {\r\n defaultOptions = options;\r\n };\r\n\r\n /**\r\n * Get subscrolltop mode\r\n */\r\n the.on = function(name, handler) {\r\n return Plugin.addEvent(name, handler);\r\n };\r\n\r\n /**\r\n * Set scrolltop content\r\n * @returns {mscrolltop}\r\n */\r\n the.one = function(name, handler) {\r\n return Plugin.addEvent(name, handler, true);\r\n };\r\n\r\n ///////////////////////////////\r\n // ** Plugin Construction ** //\r\n ///////////////////////////////\r\n\r\n // Run plugin\r\n Plugin.construct.apply(the, [options]);\r\n\r\n // Init done\r\n init = true;\r\n\r\n // Return plugin instance\r\n return the;\r\n};\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTScrolltop;\r\n}\r\n","\"use strict\";\r\n\r\n// Component Definition\r\nvar KTToggle = function(elementId, options) {\r\n // Main object\r\n var the = this;\r\n var init = false;\r\n\r\n // Get element object\r\n var element = KTUtil.getById(elementId);\r\n\r\n if (!element) {\r\n return;\r\n }\r\n\r\n // Default options\r\n var defaultOptions = {\r\n targetToggleMode: 'class' // class|attribute\r\n };\r\n\r\n ////////////////////////////\r\n // ** Private Methods ** //\r\n ////////////////////////////\r\n\r\n var Plugin = {\r\n /**\r\n * Construct\r\n */\r\n\r\n construct: function(options) {\r\n if (KTUtil.data(element).has('toggle')) {\r\n the = KTUtil.data(element).get('toggle');\r\n } else {\r\n // reset menu\r\n Plugin.init(options);\r\n\r\n // build menu\r\n Plugin.build();\r\n\r\n KTUtil.data(element).set('toggle', the);\r\n }\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Handles subtoggle click toggle\r\n */\r\n init: function(options) {\r\n the.element = element;\r\n the.events = [];\r\n\r\n // Merge default and user defined options\r\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\r\n\r\n //alert(the.options.target.tagName);\r\n the.target = KTUtil.getById(options.target);\r\n\r\n the.targetState = the.options.targetState;\r\n the.toggleState = the.options.toggleState;\r\n\r\n if (the.options.targetToggleMode == 'class') {\r\n the.state = KTUtil.hasClasses(the.target, the.targetState) ? 'on' : 'off';\r\n } else {\r\n the.state = KTUtil.hasAttr(the.target, 'data-' + the.targetState) ? KTUtil.attr(the.target, 'data-' + the.targetState) : 'off';\r\n }\r\n },\r\n\r\n /**\r\n * Setup toggle\r\n */\r\n build: function() {\r\n KTUtil.addEvent(element, 'mouseup', Plugin.toggle);\r\n },\r\n\r\n /**\r\n * Handles offcanvas click toggle\r\n */\r\n toggle: function(e) {\r\n Plugin.eventTrigger('beforeToggle');\r\n\r\n if (the.state == 'off') {\r\n Plugin.toggleOn();\r\n } else {\r\n Plugin.toggleOff();\r\n }\r\n\r\n Plugin.eventTrigger('afterToggle');\r\n\r\n e.preventDefault();\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Handles toggle click toggle\r\n */\r\n toggleOn: function() {\r\n Plugin.eventTrigger('beforeOn');\r\n\r\n if (the.options.targetToggleMode == 'class') {\r\n KTUtil.addClass(the.target, the.targetState);\r\n } else {\r\n KTUtil.attr(the.target, 'data-' + the.targetState, 'on');\r\n }\r\n\r\n if (the.toggleState) {\r\n KTUtil.addClass(element, the.toggleState);\r\n }\r\n\r\n the.state = 'on';\r\n\r\n Plugin.eventTrigger('afterOn');\r\n\r\n Plugin.eventTrigger('toggle');\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Handles toggle click toggle\r\n */\r\n toggleOff: function() {\r\n Plugin.eventTrigger('beforeOff');\r\n\r\n if (the.options.targetToggleMode == 'class') {\r\n KTUtil.removeClass(the.target, the.targetState);\r\n } else {\r\n KTUtil.removeAttr(the.target, 'data-' + the.targetState);\r\n }\r\n\r\n if (the.toggleState) {\r\n KTUtil.removeClass(element, the.toggleState);\r\n }\r\n\r\n the.state = 'off';\r\n\r\n Plugin.eventTrigger('afterOff');\r\n\r\n Plugin.eventTrigger('toggle');\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Trigger events\r\n */\r\n eventTrigger: function(name) {\r\n for (var i = 0; i < the.events.length; i++) {\r\n var event = the.events[i];\r\n\r\n if (event.name == name) {\r\n if (event.one == true) {\r\n if (event.fired == false) {\r\n the.events[i].fired = true;\r\n return event.handler.call(this, the);\r\n }\r\n } else {\r\n return event.handler.call(this, the);\r\n }\r\n }\r\n }\r\n },\r\n\r\n addEvent: function(name, handler, one) {\r\n the.events.push({\r\n name: name,\r\n handler: handler,\r\n one: one,\r\n fired: false\r\n });\r\n\r\n return the;\r\n }\r\n };\r\n\r\n //////////////////////////\r\n // ** Public Methods ** //\r\n //////////////////////////\r\n\r\n /**\r\n * Set default options\r\n */\r\n\r\n the.setDefaults = function(options) {\r\n defaultOptions = options;\r\n };\r\n\r\n /**\r\n * Get toggle state\r\n */\r\n the.getState = function() {\r\n return the.state;\r\n };\r\n\r\n /**\r\n * Toggle\r\n */\r\n the.toggle = function() {\r\n return Plugin.toggle();\r\n };\r\n\r\n /**\r\n * Toggle on\r\n */\r\n the.toggleOn = function() {\r\n return Plugin.toggleOn();\r\n };\r\n\r\n /**\r\n * Toggle off\r\n */\r\n the.toggleOff = function() {\r\n return Plugin.toggleOff();\r\n };\r\n\r\n /**\r\n * Attach event\r\n * @returns {KTToggle}\r\n */\r\n the.on = function(name, handler) {\r\n return Plugin.addEvent(name, handler);\r\n };\r\n\r\n /**\r\n * Attach event that will be fired once\r\n * @returns {KTToggle}\r\n */\r\n the.one = function(name, handler) {\r\n return Plugin.addEvent(name, handler, true);\r\n };\r\n\r\n // Construct plugin\r\n Plugin.construct.apply(the, [options]);\r\n\r\n return the;\r\n};\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTToggle;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * @class KTUtil base utilize class that privides helper functions\r\n */\r\n\r\n// Polyfills\r\n/**\r\n * Element.matches() polyfill (simple version)\r\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\r\n */\r\nif (!Element.prototype.matches) {\r\n\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\r\n}\r\n\r\n/**\r\n * Element.closest() polyfill\r\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill\r\n */\r\nif (!Element.prototype.closest) {\r\n\tif (!Element.prototype.matches) {\r\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\r\n\t}\r\n\tElement.prototype.closest = function (s) {\r\n\t\tvar el = this;\r\n\t\tvar ancestor = this;\r\n\t\tif (!document.documentElement.contains(el)) return null;\r\n\t\tdo {\r\n\t\t\tif (ancestor.matches(s)) return ancestor;\r\n\t\t\tancestor = ancestor.parentElement;\r\n\t\t} while (ancestor !== null);\r\n\t\treturn null;\r\n\t};\r\n}\r\n\r\n/**\r\n * ChildNode.remove() polyfill\r\n * https://gomakethings.com/removing-an-element-from-the-dom-the-es6-way/\r\n * @author Chris Ferdinandi\r\n * @license MIT\r\n */\r\n(function (elem) {\r\n\tfor (var i = 0; i < elem.length; i++) {\r\n\t\tif (!window[elem[i]] || 'remove' in window[elem[i]].prototype) continue;\r\n\t\twindow[elem[i]].prototype.remove = function () {\r\n\t\t\tthis.parentNode.removeChild(this);\r\n\t\t};\r\n\t}\r\n})(['Element', 'CharacterData', 'DocumentType']);\r\n\r\n//\r\n// requestAnimationFrame polyfill by Erik Möller.\r\n// With fixes from Paul Irish and Tino Zijdel\r\n//\r\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\r\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\r\n//\r\n// MIT license\r\n//\r\n(function() {\r\n var lastTime = 0;\r\n var vendors = ['webkit', 'moz'];\r\n for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\r\n window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\r\n window.cancelAnimationFrame =\r\n window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];\r\n }\r\n\r\n if (!window.requestAnimationFrame)\r\n window.requestAnimationFrame = function(callback) {\r\n var currTime = new Date().getTime();\r\n var timeToCall = Math.max(0, 16 - (currTime - lastTime));\r\n var id = window.setTimeout(function() {\r\n callback(currTime + timeToCall);\r\n }, timeToCall);\r\n lastTime = currTime + timeToCall;\r\n return id;\r\n };\r\n\r\n if (!window.cancelAnimationFrame)\r\n window.cancelAnimationFrame = function(id) {\r\n clearTimeout(id);\r\n };\r\n}());\r\n\r\n// Source: https://github.com/jserz/js_piece/blob/master/DOM/ParentNode/prepend()/prepend().md\r\n(function(arr) {\r\n arr.forEach(function(item) {\r\n if (item.hasOwnProperty('prepend')) {\r\n return;\r\n }\r\n Object.defineProperty(item, 'prepend', {\r\n configurable: true,\r\n enumerable: true,\r\n writable: true,\r\n value: function prepend() {\r\n var argArr = Array.prototype.slice.call(arguments),\r\n docFrag = document.createDocumentFragment();\r\n\r\n argArr.forEach(function(argItem) {\r\n var isNode = argItem instanceof Node;\r\n docFrag.appendChild(isNode ? argItem : document.createTextNode(String(argItem)));\r\n });\r\n\r\n this.insertBefore(docFrag, this.firstChild);\r\n }\r\n });\r\n });\r\n})([Element.prototype, Document.prototype, DocumentFragment.prototype]);\r\n\r\n// Global variables\r\nwindow.KTUtilElementDataStore = {};\r\nwindow.KTUtilElementDataStoreID = 0;\r\nwindow.KTUtilDelegatedEventHandlers = {};\r\n\r\nvar KTUtil = function() {\r\n var resizeHandlers = [];\r\n\r\n /** @type {object} breakpoints The device width breakpoints **/\r\n var breakpoints = {\r\n sm: 544, // Small screen / phone\r\n md: 768, // Medium screen / tablet\r\n lg: 992, // Large screen / desktop\r\n xl: 1200 // Extra large screen / wide desktop\r\n };\r\n\r\n /**\r\n * Handle window resize event with some\r\n * delay to attach event handlers upon resize complete\r\n */\r\n var _windowResizeHandler = function() {\r\n var _runResizeHandlers = function() {\r\n // reinitialize other subscribed elements\r\n for (var i = 0; i < resizeHandlers.length; i++) {\r\n var each = resizeHandlers[i];\r\n each.call();\r\n }\r\n };\r\n\r\n var timer;\r\n\r\n window.addEventListener('resize', function() {\r\n KTUtil.throttle(timer, function() {\r\n _runResizeHandlers();\r\n }, 200);\r\n });\r\n };\r\n\r\n return {\r\n /**\r\n * Class main initializer.\r\n * @param {object} settings.\r\n * @returns null\r\n */\r\n //main function to initiate the theme\r\n init: function(settings) {\r\n if (settings && settings.breakpoints) {\r\n breakpoints = settings.breakpoints;\r\n }\r\n\r\n _windowResizeHandler();\r\n },\r\n\r\n /**\r\n * Adds window resize event handler.\r\n * @param {function} callback function.\r\n */\r\n addResizeHandler: function(callback) {\r\n resizeHandlers.push(callback);\r\n },\r\n\r\n /**\r\n * Removes window resize event handler.\r\n * @param {function} callback function.\r\n */\r\n removeResizeHandler: function(callback) {\r\n for (var i = 0; i < resizeHandlers.length; i++) {\r\n if (callback === resizeHandlers[i]) {\r\n delete resizeHandlers[i];\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Trigger window resize handlers.\r\n */\r\n runResizeHandlers: function() {\r\n _runResizeHandlers();\r\n },\r\n\r\n resize: function() {\r\n if (typeof(Event) === 'function') {\r\n // modern browsers\r\n window.dispatchEvent(new Event('resize'));\r\n } else {\r\n // for IE and other old browsers\r\n // causes deprecation warning on modern browsers\r\n var evt = window.document.createEvent('UIEvents');\r\n evt.initUIEvent('resize', true, false, window, 0);\r\n window.dispatchEvent(evt);\r\n }\r\n },\r\n\r\n /**\r\n * Get GET parameter value from URL.\r\n * @param {string} paramName Parameter name.\r\n * @returns {string}\r\n */\r\n getURLParam: function(paramName) {\r\n var searchString = window.location.search.substring(1),\r\n i, val, params = searchString.split(\"&\");\r\n\r\n for (i = 0; i < params.length; i++) {\r\n val = params[i].split(\"=\");\r\n if (val[0] == paramName) {\r\n return unescape(val[1]);\r\n }\r\n }\r\n\r\n return null;\r\n },\r\n\r\n /**\r\n * Checks whether current device is mobile touch.\r\n * @returns {boolean}\r\n */\r\n isMobileDevice: function() {\r\n var test = (this.getViewPort().width < this.getBreakpoint('lg') ? true : false);\r\n\r\n if (test === false) {\r\n // For use within normal web clients\r\n test = navigator.userAgent.match(/iPad/i) != null;\r\n }\r\n\r\n return test;\r\n },\r\n\r\n /**\r\n * Checks whether current device is desktop.\r\n * @returns {boolean}\r\n */\r\n isDesktopDevice: function() {\r\n return KTUtil.isMobileDevice() ? false : true;\r\n },\r\n\r\n /**\r\n * Gets browser window viewport size. Ref:\r\n * http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/\r\n * @returns {object}\r\n */\r\n getViewPort: function() {\r\n var e = window,\r\n a = 'inner';\r\n if (!('innerWidth' in window)) {\r\n a = 'client';\r\n e = document.documentElement || document.body;\r\n }\r\n\r\n return {\r\n width: e[a + 'Width'],\r\n height: e[a + 'Height']\r\n };\r\n },\r\n\r\n /**\r\n * Checks whether given device mode is currently activated.\r\n * @param {string} mode Responsive mode name(e.g: desktop,\r\n * desktop-and-tablet, tablet, tablet-and-mobile, mobile)\r\n * @returns {boolean}\r\n */\r\n isInResponsiveRange: function(mode) {\r\n var breakpoint = this.getViewPort().width;\r\n\r\n if (mode == 'general') {\r\n return true;\r\n } else if (mode == 'desktop' && breakpoint >= (this.getBreakpoint('lg') + 1)) {\r\n return true;\r\n } else if (mode == 'tablet' && (breakpoint >= (this.getBreakpoint('md') + 1) && breakpoint < this.getBreakpoint('lg'))) {\r\n return true;\r\n } else if (mode == 'mobile' && breakpoint <= this.getBreakpoint('md')) {\r\n return true;\r\n } else if (mode == 'desktop-and-tablet' && breakpoint >= (this.getBreakpoint('md') + 1)) {\r\n return true;\r\n } else if (mode == 'tablet-and-mobile' && breakpoint <= this.getBreakpoint('lg')) {\r\n return true;\r\n } else if (mode == 'minimal-desktop-and-below' && breakpoint <= this.getBreakpoint('xl')) {\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n\r\n\t\t/**\r\n * Checks whether given device mode is currently activated.\r\n * @param {string} mode Responsive mode name(e.g: desktop,\r\n * desktop-and-tablet, tablet, tablet-and-mobile, mobile)\r\n * @returns {boolean}\r\n */\r\n isBreakpointUp: function(mode) {\r\n var width = this.getViewPort().width;\r\n\t\t\tvar breakpoint = this.getBreakpoint(mode);\r\n\r\n\t\t\treturn (width >= breakpoint);\r\n },\r\n\r\n\t\tisBreakpointDown: function(mode) {\r\n var width = this.getViewPort().width;\r\n\t\t\tvar breakpoint = this.getBreakpoint(mode);\r\n\r\n\t\t\treturn (width < breakpoint);\r\n },\r\n\r\n /**\r\n * Generates unique ID for give prefix.\r\n * @param {string} prefix Prefix for generated ID\r\n * @returns {boolean}\r\n */\r\n getUniqueID: function(prefix) {\r\n return prefix + Math.floor(Math.random() * (new Date()).getTime());\r\n },\r\n\r\n /**\r\n * Gets window width for give breakpoint mode.\r\n * @param {string} mode Responsive mode name(e.g: xl, lg, md, sm)\r\n * @returns {number}\r\n */\r\n getBreakpoint: function(mode) {\r\n return breakpoints[mode];\r\n },\r\n\r\n /**\r\n * Checks whether object has property matchs given key path.\r\n * @param {object} obj Object contains values paired with given key path\r\n * @param {string} keys Keys path seperated with dots\r\n * @returns {object}\r\n */\r\n isset: function(obj, keys) {\r\n var stone;\r\n\r\n keys = keys || '';\r\n\r\n if (keys.indexOf('[') !== -1) {\r\n throw new Error('Unsupported object path notation.');\r\n }\r\n\r\n keys = keys.split('.');\r\n\r\n do {\r\n if (obj === undefined) {\r\n return false;\r\n }\r\n\r\n stone = keys.shift();\r\n\r\n if (!obj.hasOwnProperty(stone)) {\r\n return false;\r\n }\r\n\r\n obj = obj[stone];\r\n\r\n } while (keys.length);\r\n\r\n return true;\r\n },\r\n\r\n /**\r\n * Gets highest z-index of the given element parents\r\n * @param {object} el jQuery element object\r\n * @returns {number}\r\n */\r\n getHighestZindex: function(el) {\r\n var position, value;\r\n\r\n while (el && el !== document) {\r\n // Ignore z-index if position is set to a value where z-index is ignored by the browser\r\n // This makes behavior of this function consistent across browsers\r\n // WebKit always returns auto if the element is positioned\r\n position = KTUtil.css(el, 'position');\r\n\r\n if (position === \"absolute\" || position === \"relative\" || position === \"fixed\") {\r\n // IE returns 0 when zIndex is not specified\r\n // other browsers return a string\r\n // we ignore the case of nested elements with an explicit value of 0\r\n //
\r\n value = parseInt(KTUtil.css(el, 'z-index'));\r\n\r\n if (!isNaN(value) && value !== 0) {\r\n return value;\r\n }\r\n }\r\n\r\n el = el.parentNode;\r\n }\r\n\r\n return null;\r\n },\r\n\r\n /**\r\n * Checks whether the element has any parent with fixed positionfreg\r\n * @param {object} el jQuery element object\r\n * @returns {boolean}\r\n */\r\n hasFixedPositionedParent: function(el) {\r\n var position;\r\n\r\n while (el && el !== document) {\r\n position = KTUtil.css(el, 'position');\r\n\r\n if (position === \"fixed\") {\r\n return true;\r\n }\r\n\r\n el = el.parentNode;\r\n }\r\n\r\n return false;\r\n },\r\n\r\n /**\r\n * Simulates delay\r\n */\r\n sleep: function(milliseconds) {\r\n var start = new Date().getTime();\r\n for (var i = 0; i < 1e7; i++) {\r\n if ((new Date().getTime() - start) > milliseconds) {\r\n break;\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Gets randomly generated integer value within given min and max range\r\n * @param {number} min Range start value\r\n * @param {number} max Range end value\r\n * @returns {number}\r\n */\r\n getRandomInt: function(min, max) {\r\n return Math.floor(Math.random() * (max - min + 1)) + min;\r\n },\r\n\r\n /**\r\n * Checks whether Angular library is included\r\n * @returns {boolean}\r\n */\r\n isAngularVersion: function() {\r\n return window.Zone !== undefined ? true : false;\r\n },\r\n\r\n // jQuery Workarounds\r\n\r\n // Deep extend: $.extend(true, {}, objA, objB);\r\n deepExtend: function(out) {\r\n out = out || {};\r\n\r\n for (var i = 1; i < arguments.length; i++) {\r\n var obj = arguments[i];\r\n\r\n if (!obj)\r\n continue;\r\n\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n if (typeof obj[key] === 'object')\r\n out[key] = KTUtil.deepExtend(out[key], obj[key]);\r\n else\r\n out[key] = obj[key];\r\n }\r\n }\r\n }\r\n\r\n return out;\r\n },\r\n\r\n // extend: $.extend({}, objA, objB);\r\n extend: function(out) {\r\n out = out || {};\r\n\r\n for (var i = 1; i < arguments.length; i++) {\r\n if (!arguments[i])\r\n continue;\r\n\r\n for (var key in arguments[i]) {\r\n if (arguments[i].hasOwnProperty(key))\r\n out[key] = arguments[i][key];\r\n }\r\n }\r\n\r\n return out;\r\n },\r\n\r\n getById: function(el) {\r\n if (typeof el === 'string') {\r\n return document.getElementById(el);\r\n } else {\r\n return el;\r\n }\r\n },\r\n\r\n getByTag: function(query) {\r\n return document.getElementsByTagName(query);\r\n },\r\n\r\n getByTagName: function(query) {\r\n return document.getElementsByTagName(query);\r\n },\r\n\r\n getByClass: function(query) {\r\n return document.getElementsByClassName(query);\r\n },\r\n\r\n getBody: function() {\r\n return document.getElementsByTagName('body')[0];\r\n },\r\n\r\n /**\r\n * Checks whether the element has given classes\r\n * @param {object} el jQuery element object\r\n * @param {string} Classes string\r\n * @returns {boolean}\r\n */\r\n hasClasses: function(el, classes) {\r\n if (!el) {\r\n return;\r\n }\r\n\r\n var classesArr = classes.split(\" \");\r\n\r\n for (var i = 0; i < classesArr.length; i++) {\r\n if (KTUtil.hasClass(el, KTUtil.trim(classesArr[i])) == false) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n\r\n hasClass: function(el, className) {\r\n if (!el) {\r\n return;\r\n }\r\n\r\n return el.classList ? el.classList.contains(className) : new RegExp('\\\\b' + className + '\\\\b').test(el.className);\r\n },\r\n\r\n addClass: function(el, className) {\r\n if (!el || typeof className === 'undefined') {\r\n return;\r\n }\r\n\r\n var classNames = className.split(' ');\r\n\r\n if (el.classList) {\r\n for (var i = 0; i < classNames.length; i++) {\r\n if (classNames[i] && classNames[i].length > 0) {\r\n el.classList.add(KTUtil.trim(classNames[i]));\r\n }\r\n }\r\n } else if (!KTUtil.hasClass(el, className)) {\r\n for (var x = 0; x < classNames.length; x++) {\r\n el.className += ' ' + KTUtil.trim(classNames[x]);\r\n }\r\n }\r\n },\r\n\r\n removeClass: function(el, className) {\r\n if (!el || typeof className === 'undefined') {\r\n return;\r\n }\r\n\r\n var classNames = className.split(' ');\r\n\r\n if (el.classList) {\r\n for (var i = 0; i < classNames.length; i++) {\r\n el.classList.remove(KTUtil.trim(classNames[i]));\r\n }\r\n } else if (KTUtil.hasClass(el, className)) {\r\n for (var x = 0; x < classNames.length; x++) {\r\n el.className = el.className.replace(new RegExp('\\\\b' + KTUtil.trim(classNames[x]) + '\\\\b', 'g'), '');\r\n }\r\n }\r\n },\r\n\r\n triggerCustomEvent: function(el, eventName, data) {\r\n var event;\r\n if (window.CustomEvent) {\r\n event = new CustomEvent(eventName, {\r\n detail: data\r\n });\r\n } else {\r\n event = document.createEvent('CustomEvent');\r\n event.initCustomEvent(eventName, true, true, data);\r\n }\r\n\r\n el.dispatchEvent(event);\r\n },\r\n\r\n triggerEvent: function(node, eventName) {\r\n // Make sure we use the ownerDocument from the provided node to avoid cross-window problems\r\n var doc;\r\n if (node.ownerDocument) {\r\n doc = node.ownerDocument;\r\n } else if (node.nodeType == 9) {\r\n // the node may be the document itself, nodeType 9 = DOCUMENT_NODE\r\n doc = node;\r\n } else {\r\n throw new Error(\"Invalid node passed to fireEvent: \" + node.id);\r\n }\r\n\r\n if (node.dispatchEvent) {\r\n // Gecko-style approach (now the standard) takes more work\r\n var eventClass = \"\";\r\n\r\n // Different events have different event classes.\r\n // If this switch statement can't map an eventName to an eventClass,\r\n // the event firing is going to fail.\r\n switch (eventName) {\r\n case \"click\": // Dispatching of 'click' appears to not work correctly in Safari. Use 'mousedown' or 'mouseup' instead.\r\n case \"mouseenter\":\r\n case \"mouseleave\":\r\n case \"mousedown\":\r\n case \"mouseup\":\r\n eventClass = \"MouseEvents\";\r\n break;\r\n\r\n case \"focus\":\r\n case \"change\":\r\n case \"blur\":\r\n case \"select\":\r\n eventClass = \"HTMLEvents\";\r\n break;\r\n\r\n default:\r\n throw \"fireEvent: Couldn't find an event class for event '\" + eventName + \"'.\";\r\n break;\r\n }\r\n var event = doc.createEvent(eventClass);\r\n\r\n var bubbles = eventName == \"change\" ? false : true;\r\n event.initEvent(eventName, bubbles, true); // All events created as bubbling and cancelable.\r\n\r\n event.synthetic = true; // allow detection of synthetic events\r\n // The second parameter says go ahead with the default action\r\n node.dispatchEvent(event, true);\r\n } else if (node.fireEvent) {\r\n // IE-old school style\r\n var event = doc.createEventObject();\r\n event.synthetic = true; // allow detection of synthetic events\r\n node.fireEvent(\"on\" + eventName, event);\r\n }\r\n },\r\n\r\n index: function( el ){\r\n var c = el.parentNode.children, i = 0;\r\n for(; i < c.length; i++ )\r\n if( c[i] == el ) return i;\r\n },\r\n\r\n trim: function(string) {\r\n return string.trim();\r\n },\r\n\r\n eventTriggered: function(e) {\r\n if (e.currentTarget.dataset.triggered) {\r\n return true;\r\n } else {\r\n e.currentTarget.dataset.triggered = true;\r\n\r\n return false;\r\n }\r\n },\r\n\r\n remove: function(el) {\r\n if (el && el.parentNode) {\r\n el.parentNode.removeChild(el);\r\n }\r\n },\r\n\r\n find: function(parent, query) {\r\n parent = KTUtil.getById(parent);\r\n if (parent) {\r\n return parent.querySelector(query);\r\n }\r\n },\r\n\r\n findAll: function(parent, query) {\r\n parent = KTUtil.getById(parent);\r\n if (parent) {\r\n return parent.querySelectorAll(query);\r\n }\r\n },\r\n\r\n insertAfter: function(el, referenceNode) {\r\n return referenceNode.parentNode.insertBefore(el, referenceNode.nextSibling);\r\n },\r\n\r\n parents: function(elem, selector) {\r\n // Element.matches() polyfill\r\n if (!Element.prototype.matches) {\r\n Element.prototype.matches =\r\n Element.prototype.matchesSelector ||\r\n Element.prototype.mozMatchesSelector ||\r\n Element.prototype.msMatchesSelector ||\r\n Element.prototype.oMatchesSelector ||\r\n Element.prototype.webkitMatchesSelector ||\r\n function(s) {\r\n var matches = (this.document || this.ownerDocument).querySelectorAll(s),\r\n i = matches.length;\r\n while (--i >= 0 && matches.item(i) !== this) {}\r\n return i > -1;\r\n };\r\n }\r\n\r\n // Set up a parent array\r\n var parents = [];\r\n\r\n // Push each parent element to the array\r\n for ( ; elem && elem !== document; elem = elem.parentNode ) {\r\n if (selector) {\r\n if (elem.matches(selector)) {\r\n parents.push(elem);\r\n }\r\n continue;\r\n }\r\n parents.push(elem);\r\n }\r\n\r\n // Return our parent array\r\n return parents;\r\n },\r\n\r\n children: function(el, selector, log) {\r\n if (!el || !el.childNodes) {\r\n return;\r\n }\r\n\r\n var result = [],\r\n i = 0,\r\n l = el.childNodes.length;\r\n\r\n for (var i; i < l; ++i) {\r\n if (el.childNodes[i].nodeType == 1 && KTUtil.matches(el.childNodes[i], selector, log)) {\r\n result.push(el.childNodes[i]);\r\n }\r\n }\r\n\r\n return result;\r\n },\r\n\r\n child: function(el, selector, log) {\r\n var children = KTUtil.children(el, selector, log);\r\n\r\n return children ? children[0] : null;\r\n },\r\n\r\n matches: function(el, selector, log) {\r\n var p = Element.prototype;\r\n var f = p.matches || p.webkitMatchesSelector || p.mozMatchesSelector || p.msMatchesSelector || function(s) {\r\n return [].indexOf.call(document.querySelectorAll(s), this) !== -1;\r\n };\r\n\r\n if (el && el.tagName) {\r\n return f.call(el, selector);\r\n } else {\r\n return false;\r\n }\r\n },\r\n\r\n data: function(el) {\r\n return {\r\n set: function(name, data) {\r\n if (!el) {\r\n return;\r\n }\r\n\r\n if (el.customDataTag === undefined) {\r\n window.KTUtilElementDataStoreID++;\r\n el.customDataTag = window.KTUtilElementDataStoreID;\r\n }\r\n\r\n if (window.KTUtilElementDataStore[el.customDataTag] === undefined) {\r\n window.KTUtilElementDataStore[el.customDataTag] = {};\r\n }\r\n\r\n window.KTUtilElementDataStore[el.customDataTag][name] = data;\r\n },\r\n\r\n get: function(name) {\r\n if (!el) {\r\n return;\r\n }\r\n\r\n if (el.customDataTag === undefined) {\r\n return null;\r\n }\r\n\r\n return this.has(name) ? window.KTUtilElementDataStore[el.customDataTag][name] : null;\r\n },\r\n\r\n has: function(name) {\r\n if (!el) {\r\n return false;\r\n }\r\n\r\n if (el.customDataTag === undefined) {\r\n return false;\r\n }\r\n\r\n return (window.KTUtilElementDataStore[el.customDataTag] && window.KTUtilElementDataStore[el.customDataTag][name]) ? true : false;\r\n },\r\n\r\n remove: function(name) {\r\n if (el && this.has(name)) {\r\n delete window.KTUtilElementDataStore[el.customDataTag][name];\r\n }\r\n }\r\n };\r\n },\r\n\r\n outerWidth: function(el, margin) {\r\n var width;\r\n\r\n if (margin === true) {\r\n width = parseFloat(el.offsetWidth);\r\n width += parseFloat(KTUtil.css(el, 'margin-left')) + parseFloat(KTUtil.css(el, 'margin-right'));\r\n\r\n return parseFloat(width);\r\n } else {\r\n width = parseFloat(el.offsetWidth);\r\n\r\n return width;\r\n }\r\n },\r\n\r\n offset: function(el) {\r\n var rect, win;\r\n\r\n if ( !el ) {\r\n return;\r\n }\r\n\r\n // Return zeros for disconnected and hidden (display: none) elements (gh-2310)\r\n // Support: IE <=11 only\r\n // Running getBoundingClientRect on a\r\n // disconnected node in IE throws an error\r\n\r\n if ( !el.getClientRects().length ) {\r\n return { top: 0, left: 0 };\r\n }\r\n\r\n // Get document-relative position by adding viewport scroll to viewport-relative gBCR\r\n rect = el.getBoundingClientRect();\r\n win = el.ownerDocument.defaultView;\r\n\r\n return {\r\n top: rect.top + win.pageYOffset,\r\n left: rect.left + win.pageXOffset\r\n };\r\n },\r\n\r\n height: function(el) {\r\n return KTUtil.css(el, 'height');\r\n },\r\n\r\n outerHeight: function(el, withMargic = false) {\r\n var height = el.offsetHeight;\r\n var style;\r\n\r\n if (withMargic) {\r\n style = getComputedStyle(el);\r\n height += parseInt(style.marginTop) + parseInt(style.marginBottom);\r\n\r\n return height;\r\n } else {\r\n return height;\r\n }\r\n },\r\n\r\n visible: function(el) {\r\n return !(el.offsetWidth === 0 && el.offsetHeight === 0);\r\n },\r\n\r\n attr: function(el, name, value) {\r\n if (el == undefined) {\r\n return;\r\n }\r\n\r\n if (value !== undefined) {\r\n el.setAttribute(name, value);\r\n } else {\r\n return el.getAttribute(name);\r\n }\r\n },\r\n\r\n hasAttr: function(el, name) {\r\n if (el == undefined) {\r\n return;\r\n }\r\n\r\n return el.getAttribute(name) ? true : false;\r\n },\r\n\r\n removeAttr: function(el, name) {\r\n if (el == undefined) {\r\n return;\r\n }\r\n\r\n el.removeAttribute(name);\r\n },\r\n\r\n animate: function(from, to, duration, update, easing, done) {\r\n /**\r\n * TinyAnimate.easings\r\n * Adapted from jQuery Easing\r\n */\r\n var easings = {};\r\n var easing;\r\n\r\n easings.linear = function(t, b, c, d) {\r\n return c * t / d + b;\r\n };\r\n\r\n easing = easings.linear;\r\n\r\n // Early bail out if called incorrectly\r\n if (typeof from !== 'number' ||\r\n typeof to !== 'number' ||\r\n typeof duration !== 'number' ||\r\n typeof update !== 'function') {\r\n return;\r\n }\r\n\r\n // Create mock done() function if necessary\r\n if (typeof done !== 'function') {\r\n done = function() {};\r\n }\r\n\r\n // Pick implementation (requestAnimationFrame | setTimeout)\r\n var rAF = window.requestAnimationFrame || function(callback) {\r\n window.setTimeout(callback, 1000 / 50);\r\n };\r\n\r\n // Animation loop\r\n var canceled = false;\r\n var change = to - from;\r\n\r\n function loop(timestamp) {\r\n var time = (timestamp || +new Date()) - start;\r\n\r\n if (time >= 0) {\r\n update(easing(time, from, change, duration));\r\n }\r\n if (time >= 0 && time >= duration) {\r\n update(to);\r\n done();\r\n } else {\r\n rAF(loop);\r\n }\r\n }\r\n\r\n update(from);\r\n\r\n // Start animation loop\r\n var start = window.performance && window.performance.now ? window.performance.now() : +new Date();\r\n\r\n rAF(loop);\r\n },\r\n\r\n actualCss: function(el, prop, cache) {\r\n var css = '';\r\n\r\n if (el instanceof HTMLElement === false) {\r\n return;\r\n }\r\n\r\n if (!el.getAttribute('kt-hidden-' + prop) || cache === false) {\r\n var value;\r\n\r\n // the element is hidden so:\r\n // making the el block so we can meassure its height but still be hidden\r\n css = el.style.cssText;\r\n el.style.cssText = 'position: absolute; visibility: hidden; display: block;';\r\n\r\n if (prop == 'width') {\r\n value = el.offsetWidth;\r\n } else if (prop == 'height') {\r\n value = el.offsetHeight;\r\n }\r\n\r\n el.style.cssText = css;\r\n\r\n // store it in cache\r\n el.setAttribute('kt-hidden-' + prop, value);\r\n\r\n return parseFloat(value);\r\n } else {\r\n // store it in cache\r\n return parseFloat(el.getAttribute('kt-hidden-' + prop));\r\n }\r\n },\r\n\r\n actualHeight: function(el, cache) {\r\n return KTUtil.actualCss(el, 'height', cache);\r\n },\r\n\r\n actualWidth: function(el, cache) {\r\n return KTUtil.actualCss(el, 'width', cache);\r\n },\r\n\r\n getScroll: function(element, method) {\r\n // The passed in `method` value should be 'Top' or 'Left'\r\n method = 'scroll' + method;\r\n return (element == window || element == document) ? (\r\n self[(method == 'scrollTop') ? 'pageYOffset' : 'pageXOffset'] ||\r\n (browserSupportsBoxModel && document.documentElement[method]) ||\r\n document.body[method]\r\n ) : element[method];\r\n },\r\n\r\n css: function(el, styleProp, value) {\r\n if (!el) {\r\n return;\r\n }\r\n\r\n if (value !== undefined) {\r\n el.style[styleProp] = value;\r\n } else {\r\n var defaultView = (el.ownerDocument || document).defaultView;\r\n // W3C standard way:\r\n if (defaultView && defaultView.getComputedStyle) {\r\n // sanitize property name to css notation\r\n // (hyphen separated words eg. font-Size)\r\n styleProp = styleProp.replace(/([A-Z])/g, \"-$1\").toLowerCase();\r\n return defaultView.getComputedStyle(el, null).getPropertyValue(styleProp);\r\n } else if (el.currentStyle) { // IE\r\n // sanitize property name to camelCase\r\n styleProp = styleProp.replace(/\\-(\\w)/g, function(str, letter) {\r\n return letter.toUpperCase();\r\n });\r\n value = el.currentStyle[styleProp];\r\n // convert other units to pixels on IE\r\n if (/^\\d+(em|pt|%|ex)?$/i.test(value)) {\r\n return (function(value) {\r\n var oldLeft = el.style.left,\r\n oldRsLeft = el.runtimeStyle.left;\r\n el.runtimeStyle.left = el.currentStyle.left;\r\n el.style.left = value || 0;\r\n value = el.style.pixelLeft + \"px\";\r\n el.style.left = oldLeft;\r\n el.runtimeStyle.left = oldRsLeft;\r\n return value;\r\n })(value);\r\n }\r\n return value;\r\n }\r\n }\r\n },\r\n\r\n slide: function(el, dir, speed, callback, recalcMaxHeight) {\r\n if (!el || (dir == 'up' && KTUtil.visible(el) === false) || (dir == 'down' && KTUtil.visible(el) === true)) {\r\n return;\r\n }\r\n\r\n speed = (speed ? speed : 600);\r\n var calcHeight = KTUtil.actualHeight(el);\r\n var calcPaddingTop = false;\r\n var calcPaddingBottom = false;\r\n\r\n if (KTUtil.css(el, 'padding-top') && KTUtil.data(el).has('slide-padding-top') !== true) {\r\n KTUtil.data(el).set('slide-padding-top', KTUtil.css(el, 'padding-top'));\r\n }\r\n\r\n if (KTUtil.css(el, 'padding-bottom') && KTUtil.data(el).has('slide-padding-bottom') !== true) {\r\n KTUtil.data(el).set('slide-padding-bottom', KTUtil.css(el, 'padding-bottom'));\r\n }\r\n\r\n if (KTUtil.data(el).has('slide-padding-top')) {\r\n calcPaddingTop = parseInt(KTUtil.data(el).get('slide-padding-top'));\r\n }\r\n\r\n if (KTUtil.data(el).has('slide-padding-bottom')) {\r\n calcPaddingBottom = parseInt(KTUtil.data(el).get('slide-padding-bottom'));\r\n }\r\n\r\n if (dir == 'up') { // up\r\n el.style.cssText = 'display: block; overflow: hidden;';\r\n\r\n if (calcPaddingTop) {\r\n KTUtil.animate(0, calcPaddingTop, speed, function(value) {\r\n el.style.paddingTop = (calcPaddingTop - value) + 'px';\r\n }, 'linear');\r\n }\r\n\r\n if (calcPaddingBottom) {\r\n KTUtil.animate(0, calcPaddingBottom, speed, function(value) {\r\n el.style.paddingBottom = (calcPaddingBottom - value) + 'px';\r\n }, 'linear');\r\n }\r\n\r\n KTUtil.animate(0, calcHeight, speed, function(value) {\r\n el.style.height = (calcHeight - value) + 'px';\r\n }, 'linear', function() {\r\n el.style.height = '';\r\n el.style.display = 'none';\r\n\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n });\r\n\r\n\r\n } else if (dir == 'down') { // down\r\n el.style.cssText = 'display: block; overflow: hidden;';\r\n\r\n if (calcPaddingTop) {\r\n KTUtil.animate(0, calcPaddingTop, speed, function(value) {//\r\n el.style.paddingTop = value + 'px';\r\n }, 'linear', function() {\r\n el.style.paddingTop = '';\r\n });\r\n }\r\n\r\n if (calcPaddingBottom) {\r\n KTUtil.animate(0, calcPaddingBottom, speed, function(value) {\r\n el.style.paddingBottom = value + 'px';\r\n }, 'linear', function() {\r\n el.style.paddingBottom = '';\r\n });\r\n }\r\n\r\n KTUtil.animate(0, calcHeight, speed, function(value) {\r\n el.style.height = value + 'px';\r\n }, 'linear', function() {\r\n el.style.height = '';\r\n el.style.display = '';\r\n el.style.overflow = '';\r\n\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n });\r\n }\r\n },\r\n\r\n slideUp: function(el, speed, callback) {\r\n KTUtil.slide(el, 'up', speed, callback);\r\n },\r\n\r\n slideDown: function(el, speed, callback) {\r\n KTUtil.slide(el, 'down', speed, callback);\r\n },\r\n\r\n show: function(el, display) {\r\n if (typeof el !== 'undefined') {\r\n el.style.display = (display ? display : 'block');\r\n }\r\n },\r\n\r\n hide: function(el) {\r\n if (typeof el !== 'undefined') {\r\n el.style.display = 'none';\r\n }\r\n },\r\n\r\n addEvent: function(el, type, handler, one) {\r\n if (typeof el !== 'undefined' && el !== null) {\r\n el.addEventListener(type, handler);\r\n }\r\n },\r\n\r\n removeEvent: function(el, type, handler) {\r\n if (el !== null) {\r\n el.removeEventListener(type, handler);\r\n }\r\n },\r\n\r\n on: function(element, selector, event, handler) {\r\n if (!selector) {\r\n return;\r\n }\r\n\r\n var eventId = KTUtil.getUniqueID('event');\r\n\r\n window.KTUtilDelegatedEventHandlers[eventId] = function(e) {\r\n var targets = element.querySelectorAll(selector);\r\n var target = e.target;\r\n\r\n while (target && target !== element) {\r\n for (var i = 0, j = targets.length; i < j; i++) {\r\n if (target === targets[i]) {\r\n handler.call(target, e);\r\n }\r\n }\r\n\r\n target = target.parentNode;\r\n }\r\n }\r\n\r\n KTUtil.addEvent(element, event, window.KTUtilDelegatedEventHandlers[eventId]);\r\n\r\n return eventId;\r\n },\r\n\r\n off: function(element, event, eventId) {\r\n if (!element || !window.KTUtilDelegatedEventHandlers[eventId]) {\r\n return;\r\n }\r\n\r\n KTUtil.removeEvent(element, event, window.KTUtilDelegatedEventHandlers[eventId]);\r\n\r\n delete window.KTUtilDelegatedEventHandlers[eventId];\r\n },\r\n\r\n one: function onetime(el, type, callback) {\r\n el.addEventListener(type, function callee(e) {\r\n // remove event\r\n if (e.target && e.target.removeEventListener) {\r\n e.target.removeEventListener(e.type, callee);\r\n }\r\n\r\n // need to verify from https://themeforest.net/author_dashboard#comment_23615588\r\n if (el && el.removeEventListener) {\r\n\t\t\t\t e.currentTarget.removeEventListener(e.type, callee);\r\n\t\t\t }\r\n\r\n // call handler\r\n return callback(e);\r\n });\r\n },\r\n\r\n hash: function(str) {\r\n var hash = 0,\r\n i, chr;\r\n\r\n if (str.length === 0) return hash;\r\n for (i = 0; i < str.length; i++) {\r\n chr = str.charCodeAt(i);\r\n hash = ((hash << 5) - hash) + chr;\r\n hash |= 0; // Convert to 32bit integer\r\n }\r\n\r\n return hash;\r\n },\r\n\r\n animateClass: function(el, animationName, callback) {\r\n var animation;\r\n var animations = {\r\n animation: 'animationend',\r\n OAnimation: 'oAnimationEnd',\r\n MozAnimation: 'mozAnimationEnd',\r\n WebkitAnimation: 'webkitAnimationEnd',\r\n msAnimation: 'msAnimationEnd',\r\n };\r\n\r\n for (var t in animations) {\r\n if (el.style[t] !== undefined) {\r\n animation = animations[t];\r\n }\r\n }\r\n\r\n KTUtil.addClass(el, 'animated ' + animationName);\r\n\r\n KTUtil.one(el, animation, function() {\r\n KTUtil.removeClass(el, 'animated ' + animationName);\r\n });\r\n\r\n if (callback) {\r\n KTUtil.one(el, animation, callback);\r\n }\r\n },\r\n\r\n transitionEnd: function(el, callback) {\r\n var transition;\r\n var transitions = {\r\n transition: 'transitionend',\r\n OTransition: 'oTransitionEnd',\r\n MozTransition: 'mozTransitionEnd',\r\n WebkitTransition: 'webkitTransitionEnd',\r\n msTransition: 'msTransitionEnd'\r\n };\r\n\r\n for (var t in transitions) {\r\n if (el.style[t] !== undefined) {\r\n transition = transitions[t];\r\n }\r\n }\r\n\r\n KTUtil.one(el, transition, callback);\r\n },\r\n\r\n animationEnd: function(el, callback) {\r\n var animation;\r\n var animations = {\r\n animation: 'animationend',\r\n OAnimation: 'oAnimationEnd',\r\n MozAnimation: 'mozAnimationEnd',\r\n WebkitAnimation: 'webkitAnimationEnd',\r\n msAnimation: 'msAnimationEnd'\r\n };\r\n\r\n for (var t in animations) {\r\n if (el.style[t] !== undefined) {\r\n animation = animations[t];\r\n }\r\n }\r\n\r\n KTUtil.one(el, animation, callback);\r\n },\r\n\r\n animateDelay: function(el, value) {\r\n var vendors = ['webkit-', 'moz-', 'ms-', 'o-', ''];\r\n for (var i = 0; i < vendors.length; i++) {\r\n KTUtil.css(el, vendors[i] + 'animation-delay', value);\r\n }\r\n },\r\n\r\n animateDuration: function(el, value) {\r\n var vendors = ['webkit-', 'moz-', 'ms-', 'o-', ''];\r\n for (var i = 0; i < vendors.length; i++) {\r\n KTUtil.css(el, vendors[i] + 'animation-duration', value);\r\n }\r\n },\r\n\r\n scrollTo: function(target, offset, duration) {\r\n var duration = duration ? duration : 500;\r\n var targetPos = target ? KTUtil.offset(target).top : 0;\r\n var scrollPos = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\r\n var from, to;\r\n\r\n if (offset) {\r\n scrollPos += offset;\r\n }\r\n\r\n from = scrollPos;\r\n to = targetPos;\r\n\r\n KTUtil.animate(from, to, duration, function(value) {\r\n document.documentElement.scrollTop = value;\r\n document.body.parentNode.scrollTop = value;\r\n document.body.scrollTop = value;\r\n }); //, easing, done\r\n },\r\n\r\n scrollTop: function(offset, duration) {\r\n KTUtil.scrollTo(null, offset, duration);\r\n },\r\n\r\n isArray: function(obj) {\r\n return obj && Array.isArray(obj);\r\n },\r\n\r\n ready: function(callback) {\r\n if (document.attachEvent ? document.readyState === \"complete\" : document.readyState !== \"loading\") {\r\n callback();\r\n } else {\r\n document.addEventListener('DOMContentLoaded', callback);\r\n }\r\n },\r\n\r\n isEmpty: function(obj) {\r\n for (var prop in obj) {\r\n if (obj.hasOwnProperty(prop)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n\r\n numberString: function(nStr) {\r\n nStr += '';\r\n var x = nStr.split('.');\r\n var x1 = x[0];\r\n var x2 = x.length > 1 ? '.' + x[1] : '';\r\n var rgx = /(\\d+)(\\d{3})/;\r\n while (rgx.test(x1)) {\r\n x1 = x1.replace(rgx, '$1' + ',' + '$2');\r\n }\r\n return x1 + x2;\r\n },\r\n\r\n detectIE: function() {\r\n var ua = window.navigator.userAgent;\r\n\r\n // Test values; Uncomment to check result …\r\n\r\n // IE 10\r\n // ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)';\r\n\r\n // IE 11\r\n // ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko';\r\n\r\n // Edge 12 (Spartan)\r\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';\r\n\r\n // Edge 13\r\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';\r\n\r\n var msie = ua.indexOf('MSIE ');\r\n if (msie > 0) {\r\n // IE 10 or older => return version number\r\n return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\r\n }\r\n\r\n var trident = ua.indexOf('Trident/');\r\n if (trident > 0) {\r\n // IE 11 => return version number\r\n var rv = ua.indexOf('rv:');\r\n return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\r\n }\r\n\r\n var edge = ua.indexOf('Edge/');\r\n if (edge > 0) {\r\n // Edge (IE 12+) => return version number\r\n return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\r\n }\r\n\r\n // other browser\r\n return false;\r\n },\r\n\r\n isRTL: function() {\r\n var html = KTUtil.getByTagName('html')[0];\r\n\r\n if (html) {\r\n return (KTUtil.attr(html, 'direction') == 'rtl');\r\n }\r\n },\r\n\r\n // Scroller\r\n scrollInit: function(element, options) {\r\n if (!element) {\r\n return;\r\n }\r\n\r\n // Learn more: https://github.com/mdbootstrap/perfect-scrollbar#options\r\n var pluginDefOptions = {\r\n wheelSpeed: 0.5,\r\n swipeEasing: true,\r\n wheelPropagation: false,\r\n minScrollbarLength: 40,\r\n maxScrollbarLength: 300,\r\n suppressScrollX: true\r\n };\r\n\r\n options = KTUtil.deepExtend({}, pluginDefOptions, options);\r\n\r\n // Define init function\r\n function init() {\r\n var ps;\r\n var height;\r\n\r\n // Get extra options via data attributes\r\n var attrs = element.getAttributeNames();\r\n if (attrs.length > 0) {\r\n attrs.forEach(function(attrName) {\r\n \t\t\t// more options; https://github.com/ganlanyuan/tiny-slider#options\r\n \t\t\tif ((/^data-.*/g).test(attrName)) {\r\n if (['scroll', 'height', 'mobile-height'].includes(optionName) == false) {\r\n var optionName = attrName.replace('data-', '').toLowerCase().replace(/(?:[\\s-])\\w/g, function(match) {\r\n \t\t\t\t\treturn match.replace('-', '').toUpperCase();\r\n \t\t\t\t});\r\n\r\n options[optionName] = KTUtil.filterBoolean(element.getAttribute(attrName));\r\n }\r\n \t\t\t}\r\n \t\t});\r\n }\r\n\r\n if (options.height instanceof Function) {\r\n height = options.height.call();\r\n } else {\r\n if (KTUtil.isMobileDevice() === true && options.mobileHeight) {\r\n height = parseInt(options.mobileHeight);\r\n } else {\r\n height = parseInt(options.height);\r\n }\r\n }\r\n\r\n if (height === false) {\r\n KTUtil.scrollDestroy(element, true);\r\n\r\n return;\r\n }\r\n\r\n height = parseInt(height);\r\n\r\n // Destroy scroll on table and mobile modes\r\n if ((options.mobileNativeScroll || options.disableForMobile) && KTUtil.isMobileDevice() === true) {\r\n ps = KTUtil.data(element).get('ps');\r\n if (ps) {\r\n if (options.resetHeightOnDestroy) {\r\n KTUtil.css(element, 'height', 'auto');\r\n } else {\r\n KTUtil.css(element, 'overflow', 'auto');\r\n if (height > 0) {\r\n KTUtil.css(element, 'height', height + 'px');\r\n }\r\n }\r\n\r\n ps.destroy();\r\n ps = KTUtil.data(element).remove('ps');\r\n } else if (height > 0){\r\n KTUtil.css(element, 'overflow', 'auto');\r\n KTUtil.css(element, 'height', height + 'px');\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (height > 0) {\r\n KTUtil.css(element, 'height', height + 'px');\r\n }\r\n\r\n if (options.desktopNativeScroll) {\r\n KTUtil.css(element, 'overflow', 'auto');\r\n return;\r\n }\r\n\r\n // Pass options via HTML Attributes\r\n if (KTUtil.attr(element, 'data-window-scroll') == 'true') {\r\n options.windowScroll = true;\r\n }\r\n\r\n // Init scroll\r\n ps = KTUtil.data(element).get('ps');\r\n\r\n if (ps) {\r\n ps.update();\r\n } else {\r\n KTUtil.css(element, 'overflow', 'hidden');\r\n KTUtil.addClass(element, 'scroll');\r\n\r\n ps = new PerfectScrollbar(element, options);\r\n\r\n KTUtil.data(element).set('ps', ps);\r\n }\r\n\r\n // Remember scroll position in cookie\r\n var uid = KTUtil.attr(element, 'id');\r\n // Consider using Localstorage\r\n //if (options.rememberPosition === true && Cookies && uid) {\r\n // if (KTCookie.getCookie(uid)) {\r\n // var pos = parseInt(KTCookie.getCookie(uid));\r\n //\r\n // if (pos > 0) {\r\n // element.scrollTop = pos;\r\n // }\r\n // }\r\n //\r\n // element.addEventListener('ps-scroll-y', function() {\r\n // KTCookie.setCookie(uid, element.scrollTop);\r\n // });\r\n //}\r\n }\r\n\r\n // Init\r\n init();\r\n\r\n // Handle window resize\r\n if (options.handleWindowResize) {\r\n KTUtil.addResizeHandler(function() {\r\n init();\r\n });\r\n }\r\n },\r\n\r\n scrollUpdate: function(element) {\r\n var ps = KTUtil.data(element).get('ps');\r\n if (ps) {\r\n ps.update();\r\n }\r\n },\r\n\r\n scrollUpdateAll: function(parent) {\r\n var scrollers = KTUtil.findAll(parent, '.ps');\r\n for (var i = 0, len = scrollers.length; i < len; i++) {\r\n KTUtil.scrollUpdate(scrollers[i]);\r\n }\r\n },\r\n\r\n scrollDestroy: function(element, resetAll) {\r\n var ps = KTUtil.data(element).get('ps');\r\n\r\n if (ps) {\r\n ps.destroy();\r\n ps = KTUtil.data(element).remove('ps');\r\n }\r\n\r\n if (element && resetAll) {\r\n element.style.setProperty('overflow', '');\r\n element.style.setProperty('height', '');\r\n }\r\n },\r\n\r\n filterBoolean: function(val) {\r\n // Convert string boolean\r\n\t\t\tif (val === true || val === 'true') {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\tif (val === false || val === 'false') {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n return val;\r\n },\r\n\r\n setHTML: function(el, html) {\r\n el.innerHTML = html;\r\n },\r\n\r\n getHTML: function(el) {\r\n if (el) {\r\n return el.innerHTML;\r\n }\r\n },\r\n\r\n getDocumentHeight: function() {\r\n var body = document.body;\r\n var html = document.documentElement;\r\n\r\n return Math.max( body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight );\r\n },\r\n\r\n getScrollTop: function() {\r\n return (document.scrollingElement || document.documentElement).scrollTop;\r\n },\r\n\r\n colorDarken: function(color, amount) {\r\n var subtractLight = function(color, amount){\r\n var cc = parseInt(color,16) - amount;\r\n var c = (cc < 0) ? 0 : (cc);\r\n c = (c.toString(16).length > 1 ) ? c.toString(16) : `0${c.toString(16)}`;\r\n\r\n return c;\r\n }\r\n\r\n color = (color.indexOf(\"#\")>=0) ? color.substring(1,color.length) : color;\r\n amount = parseInt((255*amount)/100);\r\n\r\n return color = `#${subtractLight(color.substring(0,2), amount)}${subtractLight(color.substring(2,4), amount)}${subtractLight(color.substring(4,6), amount)}`;\r\n },\r\n\r\n colorLighten: function(color, amount) {\r\n var addLight = function(color, amount){\r\n var cc = parseInt(color,16) + amount;\r\n var c = (cc > 255) ? 255 : (cc);\r\n c = (c.toString(16).length > 1 ) ? c.toString(16) : `0${c.toString(16)}`;\r\n\r\n return c;\r\n }\r\n\r\n color = (color.indexOf(\"#\")>=0) ? color.substring(1,color.length) : color;\r\n amount = parseInt((255*amount)/100);\r\n\r\n return color = `#${addLight(color.substring(0,2), amount)}${addLight(color.substring(2,4), amount)}${addLight(color.substring(4,6), amount)}`;\r\n },\r\n\r\n // Throttle function: Input as function which needs to be throttled and delay is the time interval in milliseconds\r\n throttle: function (timer, func, delay) {\r\n \t// If setTimeout is already scheduled, no need to do anything\r\n \tif (timer) {\r\n \t\treturn;\r\n \t}\r\n\r\n \t// Schedule a setTimeout after delay seconds\r\n \ttimer = setTimeout(function () {\r\n \t\tfunc();\r\n\r\n \t\t// Once setTimeout function execution is finished, timerId = undefined so that in
\r\n \t\t// the next scroll event function execution can be scheduled by the setTimeout\r\n \t\ttimer = undefined;\r\n \t}, delay);\r\n },\r\n\r\n // Debounce function: Input as function which needs to be debounced and delay is the debounced time in milliseconds\r\n debounce: function (timer, func, delay) {\r\n \t// Cancels the setTimeout method execution\r\n \tclearTimeout(timer)\r\n\r\n \t// Executes the func after delay time.\r\n \ttimer = setTimeout(func, delay);\r\n },\r\n\r\n btnWait: function(el, cls, message, disable = true) {\r\n if (!el) {\r\n return;\r\n }\r\n\r\n if (disable) {\r\n KTUtil.attr(el, \"disabled\", true);\r\n }\r\n\r\n if (cls) {\r\n KTUtil.addClass(el, cls);\r\n KTUtil.attr(el, \"wait-class\", cls);\r\n }\r\n\r\n if (message) {\r\n var caption = KTUtil.find(el, '.btn-caption');\r\n\r\n if (caption) {\r\n KTUtil.data(caption).set('caption', KTUtil.getHTML(caption));\r\n KTUtil.setHTML(caption, message);\r\n } else {\r\n KTUtil.data(el).set('caption', KTUtil.getHTML(el));\r\n KTUtil.setHTML(el, message);\r\n }\r\n }\r\n },\r\n\r\n btnRelease: function(el) {\r\n if (!el) {\r\n return;\r\n }\r\n\r\n /// Show loading state on button\r\n KTUtil.removeAttr(el, \"disabled\");\r\n\r\n if (KTUtil.hasAttr(el, \"wait-class\")) {\r\n KTUtil.removeClass(el, KTUtil.attr(el, \"wait-class\"));\r\n }\r\n\r\n var caption = KTUtil.find(el, '.btn-caption');\r\n\r\n if (caption && KTUtil.data(caption).has('caption')) {\r\n KTUtil.setHTML(caption, KTUtil.data(caption).get('caption'));\r\n } else if (KTUtil.data(el).has('caption')) {\r\n KTUtil.setHTML(el, KTUtil.data(el).get('caption'));\r\n }\r\n },\r\n\r\n isOffscreen: function(el, direction, offset = 0) {\r\n var windowWidth = KTUtil.getViewPort().width;\r\n var windowHeight = KTUtil.getViewPort().height;\r\n\r\n var top = KTUtil.offset(el).top;\r\n var height = KTUtil.outerHeight(el) + offset;\r\n var left = KTUtil.offset(el).left;\r\n var width = KTUtil.outerWidth(el) + offset;\r\n\r\n if (direction == 'bottom') {\r\n if (windowHeight < top + height) {\r\n return true;\r\n } else if (windowHeight > top + height * 1.5) {\r\n return true;\r\n }\r\n }\r\n\r\n if (direction == 'top') {\r\n if (top < 0) {\r\n return true;\r\n } else if (top > height) {\r\n return true;\r\n }\r\n }\r\n\r\n if (direction == 'left') {\r\n if (left < 0) {\r\n return true;\r\n } else if (left * 2 > width) {\r\n //console.log('left 2');\r\n //return true;\r\n }\r\n }\r\n\r\n if (direction == 'right') {\r\n if (windowWidth < left + width) {\r\n return true;\r\n } else {\r\n //console.log('right 2');\r\n //return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n }\r\n}();\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTUtil;\r\n}\r\n\r\n// Initialize KTUtil class on document ready\r\nKTUtil.ready(function() {\r\n\tif (typeof KTAppSettings !== 'undefined') {\r\n\t\tKTUtil.init(KTAppSettings);\r\n\t} else {\r\n\t\tKTUtil.init();\r\n\t}\r\n});\r\n\r\n// CSS3 Transitions only after page load(.page-loading class added to body tag and remove with JS on page load)\r\nwindow.onload = function() {\r\n var result = KTUtil.getByTagName('body');\r\n if (result && result[0]) {\r\n KTUtil.removeClass(result[0], 'page-loading');\r\n }\r\n}\r\n","\"use strict\";\r\n\r\n// Component Definition\r\nvar KTWizard = function(elementId, options) {\r\n // Main object\r\n var the = this;\r\n var init = false;\r\n\r\n // Get element object\r\n var element = KTUtil.getById(elementId);\r\n var body = KTUtil.getBody();\r\n\r\n if (!element) {\r\n return;\r\n }\r\n\r\n // Default options\r\n var defaultOptions = {\r\n startStep: 1,\r\n clickableSteps: false // to make steps clickable this set value true and add data-wizard-clickable=\"true\" in HTML for class=\"wizard\" element\r\n };\r\n\r\n ////////////////////////////\r\n // ** Private Methods ** //\r\n ////////////////////////////\r\n\r\n var Plugin = {\r\n /**\r\n * Construct\r\n */\r\n\r\n construct: function(options) {\r\n if (KTUtil.data(element).has('wizard')) {\r\n the = KTUtil.data(element).get('wizard');\r\n } else {\r\n // reset menu\r\n Plugin.init(options);\r\n\r\n // build menu\r\n Plugin.build();\r\n\r\n KTUtil.data(element).set('wizard', the);\r\n }\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Init wizard\r\n */\r\n init: function(options) {\r\n the.element = element;\r\n the.events = [];\r\n\r\n // merge default and user defined options\r\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\r\n\r\n // Elements\r\n the.steps = KTUtil.findAll(element, '[data-wizard-type=\"step\"]');\r\n\r\n the.btnSubmit = KTUtil.find(element, '[data-wizard-type=\"action-submit\"]');\r\n the.btnNext = KTUtil.find(element, '[data-wizard-type=\"action-next\"]');\r\n the.btnPrev = KTUtil.find(element, '[data-wizard-type=\"action-prev\"]');\r\n the.btnLast = KTUtil.find(element, '[data-wizard-type=\"action-last\"]');\r\n the.btnFirst = KTUtil.find(element, '[data-wizard-type=\"action-first\"]');\r\n\r\n // Variables\r\n the.events = [];\r\n the.currentStep = 1;\r\n the.stopped = false;\r\n the.totalSteps = the.steps.length;\r\n\r\n // Init current step\r\n if (the.options.startStep > 1) {\r\n Plugin.goTo(the.options.startStep);\r\n }\r\n\r\n // Init UI\r\n Plugin.updateUI();\r\n },\r\n\r\n /**\r\n * Build Form Wizard\r\n */\r\n build: function() {\r\n // Next button event handler\r\n KTUtil.addEvent(the.btnNext, 'click', function(e) {\r\n e.preventDefault();\r\n Plugin.goTo(Plugin.getNextStep(), true);\r\n });\r\n\r\n // Prev button event handler\r\n KTUtil.addEvent(the.btnPrev, 'click', function(e) {\r\n e.preventDefault();\r\n Plugin.goTo(Plugin.getPrevStep(), true);\r\n });\r\n\r\n // First button event handler\r\n KTUtil.addEvent(the.btnFirst, 'click', function(e) {\r\n e.preventDefault();\r\n Plugin.goTo(Plugin.getFirstStep(), true);\r\n });\r\n\r\n // Last button event handler\r\n KTUtil.addEvent(the.btnLast, 'click', function(e) {\r\n e.preventDefault();\r\n Plugin.goTo(Plugin.getLastStep(), true);\r\n });\r\n\r\n if (the.options.clickableSteps === true) {\r\n KTUtil.on(element, '[data-wizard-type=\"step\"]', 'click', function() {\r\n var index = KTUtil.index(this) + 1;\r\n if (index !== the.currentStep) {\r\n Plugin.goTo(index, true);\r\n }\r\n });\r\n }\r\n },\r\n\r\n /**\r\n * Handles wizard click wizard\r\n */\r\n goTo: function(number, eventHandle) {\r\n console.log('go to:' + number);\r\n\r\n // Skip if this step is already shown\r\n if (number === the.currentStep || number > the.totalSteps || number < 0) {\r\n return;\r\n }\r\n\r\n // Validate step number\r\n if (number) {\r\n number = parseInt(number);\r\n } else {\r\n number = Plugin.getNextStep();\r\n }\r\n\r\n // Before next and prev events\r\n var callback;\r\n\r\n if (eventHandle === true) {\r\n if (number > the.currentStep) {\r\n callback = Plugin.eventTrigger('beforeNext');\r\n } else {\r\n callback = Plugin.eventTrigger('beforePrev');\r\n }\r\n }\r\n\r\n // Skip if stopped\r\n if (the.stopped === true) {\r\n the.stopped = false;\r\n return;\r\n }\r\n\r\n // Continue if no exit\r\n if (callback !== false) {\r\n // Before change\r\n if (eventHandle === true) {\r\n Plugin.eventTrigger('beforeChange');\r\n }\r\n\r\n // Set current step\r\n the.currentStep = number;\r\n\r\n Plugin.updateUI();\r\n\r\n // Trigger change event\r\n if (eventHandle === true) {\r\n Plugin.eventTrigger('change');\r\n }\r\n }\r\n\r\n // After next and prev events\r\n if (eventHandle === true) {\r\n if (number > the.startStep) {\r\n Plugin.eventTrigger('afterNext');\r\n } else {\r\n Plugin.eventTrigger('afterPrev');\r\n }\r\n }\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Cancel\r\n */\r\n stop: function() {\r\n the.stopped = true;\r\n },\r\n\r\n /**\r\n * Resume\r\n */\r\n start: function() {\r\n the.stopped = false;\r\n },\r\n\r\n /**\r\n * Check last step\r\n */\r\n isLastStep: function() {\r\n return the.currentStep === the.totalSteps;\r\n },\r\n\r\n /**\r\n * Check first step\r\n */\r\n isFirstStep: function() {\r\n return the.currentStep === 1;\r\n },\r\n\r\n /**\r\n * Check between step\r\n */\r\n isBetweenStep: function() {\r\n return Plugin.isLastStep() === false && Plugin.isFirstStep() === false;\r\n },\r\n\r\n /**\r\n * Go to the first step\r\n */\r\n updateUI: function() {\r\n var stepType = '';\r\n var index = the.currentStep - 1;\r\n\r\n if (Plugin.isLastStep()) {\r\n stepType = 'last';\r\n } else if (Plugin.isFirstStep()) {\r\n stepType = 'first';\r\n } else {\r\n stepType = 'between';\r\n }\r\n\r\n KTUtil.attr(the.element, 'data-wizard-state', stepType);\r\n\r\n // Steps\r\n var steps = KTUtil.findAll(the.element, '[data-wizard-type=\"step\"]');\r\n\r\n if (steps && steps.length > 0) {\r\n for (var i = 0, len = steps.length; i < len; i++) {\r\n if (i == index) {\r\n KTUtil.attr(steps[i], 'data-wizard-state', 'current');\r\n } else {\r\n if (i < index) {\r\n KTUtil.attr(steps[i], 'data-wizard-state', 'done');\r\n } else {\r\n KTUtil.attr(steps[i], 'data-wizard-state', 'pending');\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Steps Info\r\n var stepsInfo = KTUtil.findAll(the.element, '[data-wizard-type=\"step-info\"]');\r\n if (stepsInfo &&stepsInfo.length > 0) {\r\n for (var i = 0, len = stepsInfo.length; i < len; i++) {\r\n if (i == index) {\r\n KTUtil.attr(stepsInfo[i], 'data-wizard-state', 'current');\r\n } else {\r\n KTUtil.removeAttr(stepsInfo[i], 'data-wizard-state');\r\n }\r\n }\r\n }\r\n\r\n // Steps Content\r\n var stepsContent = KTUtil.findAll(the.element, '[data-wizard-type=\"step-content\"]');\r\n if (stepsContent&& stepsContent.length > 0) {\r\n for (var i = 0, len = stepsContent.length; i < len; i++) {\r\n if (i == index) {\r\n KTUtil.attr(stepsContent[i], 'data-wizard-state', 'current');\r\n } else {\r\n KTUtil.removeAttr(stepsContent[i], 'data-wizard-state');\r\n }\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Get next step\r\n */\r\n getNextStep: function() {\r\n if (the.totalSteps >= (the.currentStep + 1)) {\r\n return the.currentStep + 1;\r\n } else {\r\n return the.totalSteps;\r\n }\r\n },\r\n\r\n /**\r\n * Get prev step\r\n */\r\n getPrevStep: function() {\r\n if ((the.currentStep - 1) >= 1) {\r\n return the.currentStep - 1;\r\n } else {\r\n return 1;\r\n }\r\n },\r\n\r\n /**\r\n * Trigger events\r\n */\r\n eventTrigger: function(name, nested) {\r\n //KTUtil.triggerCustomEvent(name);\r\n for (var i = 0; i < the.events.length; i++) {\r\n var event = the.events[i];\r\n if (event.name == name) {\r\n if (event.one == true) {\r\n if (event.fired == false) {\r\n the.events[i].fired = true;\r\n return event.handler.call(this, the);\r\n }\r\n } else {\r\n return event.handler.call(this, the);\r\n }\r\n }\r\n }\r\n },\r\n\r\n addEvent: function(name, handler, one) {\r\n the.events.push({\r\n name: name,\r\n handler: handler,\r\n one: one,\r\n fired: false\r\n });\r\n\r\n return the;\r\n }\r\n };\r\n\r\n //////////////////////////\r\n // ** Public Methods ** //\r\n //////////////////////////\r\n\r\n /**\r\n * Set default options\r\n */\r\n\r\n the.setDefaults = function(options) {\r\n defaultOptions = options;\r\n };\r\n\r\n /**\r\n * Go to the next step\r\n */\r\n the.goNext = function(eventHandle) {\r\n return Plugin.goTo(Plugin.getNextStep(), eventHandle);\r\n };\r\n\r\n /**\r\n * Go to the prev step\r\n */\r\n the.goPrev = function(eventHandle) {\r\n return Plugin.goTo(Plugin.getPrevStep(),eventHandle);\r\n };\r\n\r\n /**\r\n * Go to the last step\r\n */\r\n the.goLast = function(eventHandle) {\r\n return Plugin.goTo(Plugin.getLastStep(), eventHandle);\r\n };\r\n\r\n /**\r\n * Go to the first step\r\n */\r\n the.goFirst = function(eventHandle) {\r\n return Plugin.goTo(Plugin.getFirstStep(), eventHandle);\r\n };\r\n\r\n /**\r\n * Go to a step\r\n */\r\n the.goTo = function(number, eventHandle) {\r\n return Plugin.goTo(number, eventHandle);\r\n };\r\n\r\n /**\r\n * Cancel step\r\n */\r\n the.stop = function() {\r\n return Plugin.stop();\r\n };\r\n\r\n /**\r\n * Resume step\r\n */\r\n the.start = function() {\r\n return Plugin.start();\r\n };\r\n\r\n /**\r\n * Get current step number\r\n */\r\n the.getStep = function() {\r\n return the.currentStep;\r\n };\r\n\r\n /**\r\n * Check last step\r\n */\r\n the.isLastStep = function() {\r\n return Plugin.isLastStep();\r\n };\r\n\r\n /**\r\n * Check first step\r\n */\r\n the.isFirstStep = function() {\r\n return Plugin.isFirstStep();\r\n };\r\n\r\n /**\r\n * Attach event\r\n */\r\n the.on = function(name, handler) {\r\n return Plugin.addEvent(name, handler);\r\n };\r\n\r\n /**\r\n * Attach event that will be fired once\r\n */\r\n the.one = function(name, handler) {\r\n return Plugin.addEvent(name, handler, true);\r\n };\r\n\r\n // Construct plugin\r\n Plugin.construct.apply(the, [options]);\r\n\r\n return the;\r\n};\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTWizard;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutAsideMenu = function() {\r\n // Private properties\r\n var _element;\r\n var _menuObject;\r\n\r\n\t// Initialize\r\n\tvar _init = function() {\r\n\t\tvar menuDesktopMode = (KTUtil.attr(_element, 'data-menu-dropdown') === '1' ? 'dropdown' : 'accordion');\r\n var scroll;\r\n\r\n\t\tif (KTUtil.isBreakpointDown('lg') && KTUtil.attr(_element, 'data-menu-scroll') === '1') {\r\n\t\t\tscroll = {\r\n\t\t\t\trememberPosition: true, // remember position on page reload\r\n\t\t\t\theight: function() { // calculate available scrollable area height\r\n\t\t\t\t\tvar height = parseInt(KTUtil.getViewPort().height);\r\n\r\n\t\t\t\t\theight = height - (parseInt(KTUtil.css(_element, 'marginBottom')) + parseInt(KTUtil.css(_element, 'marginTop')));\r\n\r\n\t\t\t\t\treturn height;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t_menuObject = new KTMenu(_element, {\r\n\t\t\t// Vertical scroll\r\n\t\t\tscroll: scroll,\r\n\r\n\t\t\t// Submenu setup\r\n\t\t\tsubmenu: {\r\n\t\t\t\tdesktop: menuDesktopMode,\r\n\t\t\t\ttablet: 'accordion', // menu set to accordion in tablet mode\r\n\t\t\t\tmobile: 'accordion' // menu set to accordion in mobile mode\r\n\t\t\t},\r\n\r\n\t\t\t// Accordion setup\r\n\t\t\taccordion: {\r\n\t\t\t\texpandAll: false // allow having multiple expanded accordions in the menu\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n // Public methods\r\n\treturn {\r\n\t\tinit: function(id) {\r\n _element = KTUtil.getById(id);\r\n\r\n if (!_element) {\r\n return;\r\n }\r\n\r\n // Initialize menu\r\n _init();\r\n\t\t},\r\n\r\n\t\tgetElement: function() {\r\n\t\t\treturn _element;\r\n\t\t},\r\n\r\n getMenu: function() {\r\n\t\t\treturn _menuObject;\r\n\t\t},\r\n\r\n pauseDropdownHover: function(time) {\r\n\t\t\tif (_menuObject) {\r\n\t\t\t\t_menuObject.pauseDropdownHover(time);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tcloseMobileOffcanvas: function() {\r\n\t\t\tif (_menuObject && KTUtil.isMobileDevice()) {\r\n\t\t\t\t_menuObject.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutAsideMenu;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutAside = function() {\r\n // Private properties\r\n var _body;\r\n var _element;\r\n var _offcanvasObject;\r\n\r\n // Private functions\r\n\t// Initialize\r\n\tvar _init = function() {\r\n\t\tvar offcanvasClass = KTUtil.hasClass(_element, 'aside-offcanvas-default') ? 'aside-offcanvas-default' : 'aside';\r\n\r\n // Initialize mobile aside offcanvas\r\n\t\t_offcanvasObject = new KTOffcanvas(_element, {\r\n\t\t\tbaseClass: offcanvasClass,\r\n\t\t\toverlay: true,\r\n\t\t\tcloseBy: 'kt_aside_close_btn',\r\n\t\t\ttoggleBy: {\r\n\t\t\t\ttarget: 'kt_aside_mobile_toggle',\r\n\t\t\t\tstate: 'mobile-toggle-active'\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n // Public methods\r\n\treturn {\r\n\t\tinit: function(id) {\r\n _element = KTUtil.getById(id);\r\n _body = KTUtil.getBody();\r\n\r\n if (!_element) {\r\n return;\r\n }\r\n\r\n // Initialize\r\n _init();\r\n },\r\n\r\n getElement: function() {\r\n return _element;\r\n },\r\n\r\n getOffcanvas: function() {\r\n return _offcanvasObject;\r\n }\r\n\t};\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutAside;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutContent = function() {\r\n // Private properties\r\n var _element;\r\n\r\n\t// Private functions\r\n\tvar _getHeight = function() {\r\n\t\tvar height;\r\n\r\n\t\theight = KTUtil.getViewPort().height;\r\n\r\n if (_element) {\r\n height = height - parseInt(KTUtil.css(_element, 'paddingTop')) - parseInt(KTUtil.css(_element, 'paddingBottom'));\r\n } \r\n\r\n height = height - KTLayoutHeader.getHeight();\r\n height = height - KTLayoutSubheader.getHeight();\r\n height = height - KTLayoutFooter.getHeight();\r\n\r\n\t\treturn height;\r\n\t}\r\n\r\n // Public methods\r\n\treturn {\r\n\t\tinit: function(id) {\r\n _element = KTUtil.getById(id);\r\n\t\t},\r\n\r\n\t\tgetHeight: function() {\r\n\t\t\treturn _getHeight();\r\n\t\t},\r\n\r\n getElement: function() {\r\n return _element;\r\n }\r\n\t};\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutContent;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutFooter = function() {\r\n // Private properties\r\n var _element;\r\n\r\n\t// Private functions\r\n\tvar _getHeight = function() {\r\n\t\tvar height = 0;\r\n\r\n if (_element) {\r\n height = KTUtil.actualHeight(_element);\r\n }\r\n\r\n\t\treturn height;\r\n\t}\r\n\r\n // Public methods\r\n\treturn {\r\n\t\tinit: function(id) {\r\n _element = KTUtil.getById(id);\r\n\t\t},\r\n\r\n\t\tgetHeight: function() {\r\n\t\t\treturn _getHeight();\r\n\t\t},\r\n\r\n getElement: function() {\r\n return _element;\r\n }\r\n\t};\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutFooter;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutHeaderMenu = function() {\r\n // Private properties\r\n\tvar _menuElement;\r\n var _menuObject;\r\n var _offcanvasElement;\r\n var _offcanvasObject;\r\n\tvar _mobileTabPanes;\r\n\r\n // Private functions\r\n\tvar _init = function() {\r\n\t\t_offcanvasObject = new KTOffcanvas(_offcanvasElement, {\r\n\t\t\toverlay: true,\r\n\t\t\tbaseClass: 'header-navs',\r\n\t\t\tcloseBy: 'kt_header_mobile_close',\r\n\t\t\ttoggleBy: {\r\n\t\t\t\ttarget: 'kt_header_mobile_toggle',\r\n\t\t\t\tstate: 'burge-icon-active'\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t_menuObject = new KTMenu(_menuElement, {\r\n\t\t\tsubmenu: {\r\n\t\t\t\tdesktop: 'dropdown',\r\n\t\t\t\ttablet: 'accordion',\r\n\t\t\t\tmobile: 'accordion'\r\n\t\t\t},\r\n\t\t\taccordion: {\r\n\t\t\t\tslideSpeed: 200, // accordion toggle slide speed in milliseconds\r\n\t\t\t\texpandAll: false // allow having multiple expanded accordions in the menu\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tvar _initTabPanesForMobile = function() {\r\n\t\tif ( _mobileTabPanes ) {\r\n\t\t\tfor (var i = 0, len = _mobileTabPanes.length; i < len; i++) {\r\n\t\t\t\tvar mobileTabPane = _mobileTabPanes[i];\r\n\t\t\t\tvar tabs = KTUtil.find(_offcanvasElement, '.header-tabs');\r\n\r\n\t\t\t\tKTUtil.scrollInit(mobileTabPane, {\r\n\t\t disableForMobile: true,\r\n\t\t resetHeightOnDestroy: true,\r\n\t\t handleWindowResize: true,\r\n\t\t height: function() {\r\n\t\t\t\t\t\t// Destroy for tablet and mobile modes\r\n\t\t\t\t\t\tif (KTUtil.isBreakpointUp('lg')) {\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t var height = parseInt(KTUtil.getViewPort().height);\r\n\r\n\t\t if (tabs) {\r\n\t\t height = height - parseInt(KTUtil.actualHeight(tabs));\r\n\t\t height = height - parseInt(KTUtil.css(tabs, 'marginTop'));\r\n\t\t height = height - parseInt(KTUtil.css(tabs, 'marginBottom'));\r\n\t\t }\r\n\r\n\t\t if (mobileTabPane) {\r\n\t\t height = height - parseInt(KTUtil.css(mobileTabPane, 'marginTop'));\r\n\t\t height = height - parseInt(KTUtil.css(mobileTabPane, 'marginBottom'));\r\n\t\t }\r\n\r\n\t\t height = height - parseInt(KTUtil.css(_offcanvasElement, 'paddingTop'));\r\n\t\t height = height - parseInt(KTUtil.css(_offcanvasElement, 'paddingBottom'));\r\n\r\n\t\t height = height - 2;\r\n\r\n\t\t return height;\r\n\t\t }\r\n\t\t });\r\n\r\n\t\t\t\t$(_offcanvasElement).find('a[data-toggle=\"tab\"]').on('shown.bs.tab', function (e) {\r\n\t\t\t\t\t// Tablet & Mobile Modes Only\r\n\t\t\t\t\tif (KTUtil.isBreakpointUp('lg')) {\r\n\t\t\t\t\t\tKTUtil.scrollUpdate(mobileTabPane);\r\n\t\t\t\t\t}\r\n\t\t });\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n // Public methods\r\n\treturn {\r\n init: function(menuId, offcanvasId) {\r\n _menuElement = KTUtil.getById(menuId);\r\n _offcanvasElement = KTUtil.getById(offcanvasId);\r\n\t\t\t_mobileTabPanes = KTUtil.findAll(_offcanvasElement, '.tab-pane');\r\n\r\n if (!_menuElement) {\r\n return;\r\n }\r\n\r\n // Initialize menu\r\n _init();\r\n\t\t\t_initTabPanesForMobile();\r\n\t\t},\r\n\r\n\t\tgetMenuElement: function() {\r\n\t\t\treturn _menuElement;\r\n\t\t},\r\n\r\n getOffcanvasElement: function() {\r\n\t\t\treturn _offcanvasElement;\r\n\t\t},\r\n\r\n getMenu: function() {\r\n\t\t\treturn _menuObject;\r\n\t\t},\r\n\r\n\t\tpauseDropdownHover: function(time) {\r\n\t\t\tif (_menuObject) {\r\n\t\t\t\t_menuObject.pauseDropdownHover(time);\r\n\t\t\t}\r\n\t\t},\r\n\r\n getOffcanvas: function() {\r\n\t\t\treturn _offcanvasObject;\r\n\t\t},\r\n\r\n\t\tcloseMobileOffcanvas: function() {\r\n\t\t\tif (_menuObject && KTUtil.isMobileDevice()) {\r\n\t\t\t\t_offcanvasObject.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutHeaderMenu;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutHeaderTopbar = function() {\r\n // Private properties\r\n\tvar _toggleElement;\r\n var _toggleObject;\r\n\r\n // Private functions\r\n var _init = function() {\r\n\t\t_toggleObject = new KTToggle(_toggleElement, {\r\n\t\t\ttarget: KTUtil.getBody(),\r\n\t\t\ttargetState: 'topbar-mobile-on',\r\n\t\t\ttoggleState: 'active'\r\n\t\t});\r\n }\r\n\r\n // Public methods\r\n\treturn {\r\n\t\tinit: function(id) {\r\n _toggleElement = KTUtil.getById(id);\r\n\r\n\t\t\tif (!_toggleElement) {\r\n return;\r\n }\r\n\r\n // Initialize\r\n _init();\r\n\t\t},\r\n\r\n getToggleElement: function() {\r\n return _toggleElement;\r\n }\r\n\t};\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutHeaderTopbar;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutHeader = function() {\r\n // Private properties\r\n var _element;\r\n var _elementForMobile;\r\n var _object;\r\n\r\n\t// Private functions\r\n\tvar _init = function() {\r\n var options = {\r\n offset: {\r\n desktop: 300,\r\n tabletAndMobile: 300\r\n },\r\n releseOnReverse: {\r\n desktop: false,\r\n tabletAndMobile: false\r\n }\r\n\t\t};\r\n\r\n\t\t_object = new KTHeader(_element, options);\r\n\t}\r\n\r\n // Get height\r\n var _getHeight = function() {\r\n var height = 0;\r\n\r\n if (_element) {\r\n height = KTUtil.actualHeight(_element) + 1;\r\n }\r\n\r\n return height;\r\n }\r\n\r\n // Get height\r\n var _getHeightForMobile = function() {\r\n var height;\r\n\r\n height = KTUtil.actualHeight(_elementForMobile);\r\n\r\n return height;\r\n }\r\n\r\n // Public methods\r\n\treturn {\r\n\t\tinit: function(id, idForMobile) {\r\n _element = KTUtil.getById(id);\r\n _elementForMobile = KTUtil.getById(idForMobile);\r\n\r\n if (!_element) {\r\n return;\r\n }\r\n\r\n // Initialize\r\n _init();\r\n\t\t},\r\n\r\n isFixed: function() {\r\n return KTUtil.hasClass(KTUtil.getBody(), 'header-fixed')\r\n },\r\n\r\n isFixedForMobile: function() {\r\n return KTUtil.hasClass(KTUtil.getBody(), 'header-mobile-fixed')\r\n },\r\n\r\n getElement: function() {\r\n return _element;\r\n },\r\n\r\n getElementForMobile: function() {\r\n return _elementForMobile;\r\n },\r\n\r\n getHeader: function() {\r\n return _object;\r\n },\r\n\r\n getHeight: function() {\r\n return _getHeight();\r\n },\r\n\r\n getHeightForMobile: function() {\r\n return _getHeightForMobile();\r\n }\r\n\t};\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutHeader;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutStickyCard = function() {\r\n // Private properties\r\n\tvar _element;\r\n var _object;\r\n\r\n\t// Private functions\r\n\tvar _init = function() {\r\n\t\tvar offset = 300;\r\n\r\n\t\tif (typeof KTLayoutHeader !== 'undefined') {\r\n\t\t\toffset = KTLayoutHeader.getHeight();\r\n\t\t}\r\n\r\n _object = new KTCard(_element, {\r\n\t\t\tsticky: {\r\n\t\t\t\toffset: offset,\r\n\t\t\t\tzIndex: 90,\r\n\t\t\t\tposition: {\r\n\t\t\t\t\ttop: function() {\r\n\t\t\t\t\t\tvar pos = 0;\r\n var body = KTUtil.getBody();\r\n\r\n\t\t\t\t\t\tif (KTUtil.isBreakpointUp('lg')) {\r\n\t\t\t\t\t\t\tif (typeof KTLayoutHeader !== 'undefined' && KTLayoutHeader.isFixed()) {\r\n\t\t\t\t\t\t\t\tpos = pos + KTLayoutHeader.getHeight();\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (typeof KTLayoutSubheader !== 'undefined' && KTLayoutSubheader.isFixed()) {\r\n\t\t\t\t\t\t\t\tpos = pos + KTLayoutSubheader.getHeight();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tif (typeof KTLayoutHeader !== 'undefined' && KTLayoutHeader.isFixedForMobile()) {\r\n\t\t\t\t\t\t\t\tpos = pos + KTLayoutHeader.getHeightForMobile();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tpos = pos - 1; // remove header border width\r\n\r\n\t\t\t\t\t\treturn pos;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tleft: function(card) {\r\n\t\t\t\t\t\treturn KTUtil.offset(_element).left;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tright: function(card) {\r\n\t\t\t\t\t\tvar body = KTUtil.getBody();\r\n\r\n\t\t\t\t\t\tvar cardWidth = parseInt(KTUtil.css(_element, 'width'));\r\n\t\t\t\t\t\tvar bodyWidth = parseInt(KTUtil.css(body, 'width'));\r\n\t\t\t\t\t\tvar cardOffsetLeft = KTUtil.offset(_element).left;\r\n\r\n\t\t\t\t\t\treturn bodyWidth - cardWidth - cardOffsetLeft;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t_object.initSticky();\r\n\r\n\t\tKTUtil.addResizeHandler(function() {\r\n\t\t\t_object.updateSticky();\r\n\t\t});\r\n\t}\r\n\r\n // Public methods\r\n\treturn {\r\n\t\tinit: function(id) {\r\n _element = KTUtil.getById(id);\r\n\r\n if (!_element) {\r\n return;\r\n }\r\n\r\n // Initialize\r\n\t\t\t_init();\r\n\t\t},\r\n\r\n\t\tupdate: function() {\r\n\t\t\tif (_object) {\r\n\t\t\t\t_object.updateSticky();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutStickyCard;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutStretchedCard = function() {\r\n // Private properties\r\n\tvar _element;\r\n\r\n\t// Private functions\r\n\tvar _init = function() {\r\n\t\tvar scroll = KTUtil.find(_element, '.card-scroll');\r\n\t\tvar cardBody = KTUtil.find(_element, '.card-body');\r\n\t\tvar cardHeader = KTUtil.find(_element, '.card-header');\r\n\r\n\t\tvar height = KTLayoutContent.getHeight();\r\n\r\n\t\theight = height - parseInt(KTUtil.actualHeight(cardHeader));\r\n\r\n\t\theight = height - parseInt(KTUtil.css(_element, 'marginTop')) - parseInt(KTUtil.css(_element, 'marginBottom'));\r\n\t\theight = height - parseInt(KTUtil.css(_element, 'paddingTop')) - parseInt(KTUtil.css(_element, 'paddingBottom'));\r\n\r\n\t\theight = height - parseInt(KTUtil.css(cardBody, 'paddingTop')) - parseInt(KTUtil.css(cardBody, 'paddingBottom'));\r\n\t\theight = height - parseInt(KTUtil.css(cardBody, 'marginTop')) - parseInt(KTUtil.css(cardBody, 'marginBottom'));\r\n\r\n\t\theight = height - 3;\r\n\r\n\t\tKTUtil.css(scroll, 'height', height + 'px');\r\n\t}\r\n\r\n // Public methods\r\n\treturn {\r\n\t\tinit: function(id) {\r\n _element = KTUtil.getById(id);\r\n\r\n if (!_element) {\r\n return;\r\n }\r\n\r\n // Initialize\r\n\t\t\t_init();\r\n\r\n // Re-calculate on window resize\r\n KTUtil.addResizeHandler(function() {\r\n\t\t\t\t_init();\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\tupdate: function() {\r\n\t\t\t_init();\r\n\t\t}\r\n\t};\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutStretchedCard;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutSubheader = function() {\r\n // Private properties\r\n var _element;\r\n\r\n // Private functions\r\n var _getHeight = function() {\r\n var height = 0;\r\n\r\n if (_element) {\r\n height = KTUtil.actualHeight(_element);\r\n }\r\n\r\n return height;\r\n }\r\n\r\n // Public methods\r\n\treturn {\r\n\t\tinit: function(id) {\r\n _element = KTUtil.getById(id);\r\n\r\n if (!_element) {\r\n return;\r\n }\r\n\t\t},\r\n\r\n isFixed: function() {\r\n return KTUtil.hasClass(KTUtil.getBody(), 'subheader-fixed');\r\n },\r\n\r\n getElement: function() {\r\n return _element;\r\n },\r\n\r\n getHeight: function() {\r\n return _getHeight();\r\n }\r\n\t};\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutSubheader;\r\n}\r\n","\"use strict\";\r\n\r\n// Class definition\r\nvar KTLayoutChat = function () {\r\n\t// Private functions\r\n\tvar _init = function (element) {\r\n\t\tvar scrollEl = KTUtil.find(element, '.scroll');\r\n\t\tvar cardBodyEl = KTUtil.find(element, '.card-body');\r\n\t\tvar cardHeaderEl = KTUtil.find(element, '.card-header');\r\n\t\tvar cardFooterEl = KTUtil.find(element, '.card-footer');\r\n\r\n\t\tif (!scrollEl) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// initialize perfect scrollbar(see: https://github.com/utatti/perfect-scrollbar)\r\n\t\tKTUtil.scrollInit(scrollEl, {\r\n\t\t\twindowScroll: false, // allow browser scroll when the scroll reaches the end of the side\r\n\t\t\tmobileNativeScroll: true, // enable native scroll for mobile\r\n\t\t\tdesktopNativeScroll: false, // disable native scroll and use custom scroll for desktop\r\n\t\t\tresetHeightOnDestroy: true, // reset css height on scroll feature destroyed\r\n\t\t\thandleWindowResize: true, // recalculate hight on window resize\r\n\t\t\trememberPosition: true, // remember scroll position in cookie\r\n\t\t\theight: function() { // calculate height\r\n\t\t\t\tvar height;\r\n\r\n\t\t\t\tif (KTUtil.isBreakpointDown('lg')) { // Mobile mode\r\n\t\t\t\t\treturn KTUtil.hasAttr(scrollEl, 'data-mobile-height') ? parseInt(KTUtil.attr(scrollEl, 'data-mobile-height')) : 400;\r\n\t\t\t\t} else if (KTUtil.isBreakpointUp('lg') && KTUtil.hasAttr(scrollEl, 'data-height')) { // Desktop Mode\r\n\t\t\t\t\treturn parseInt(KTUtil.attr(scrollEl, 'data-height'));\r\n\t\t\t\t} else {\r\n\t\t\t\t\theight = KTLayoutContent.getHeight();\r\n\r\n\t\t\t\t\tif (scrollEl) {\r\n\t\t\t\t\t\theight = height - parseInt(KTUtil.css(scrollEl, 'margin-top')) - parseInt(KTUtil.css(scrollEl, 'margin-bottom'));\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (cardHeaderEl) {\r\n\t\t\t\t\t\theight = height - parseInt(KTUtil.css(cardHeaderEl, 'height'));\r\n\t\t\t\t\t\theight = height - parseInt(KTUtil.css(cardHeaderEl, 'margin-top')) - parseInt(KTUtil.css(cardHeaderEl, 'margin-bottom'));\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (cardBodyEl) {\r\n\t\t\t\t\t\theight = height - parseInt(KTUtil.css(cardBodyEl, 'padding-top')) - parseInt(KTUtil.css(cardBodyEl, 'padding-bottom'));\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (cardFooterEl) {\r\n\t\t\t\t\t\theight = height - parseInt(KTUtil.css(cardFooterEl, 'height'));\r\n\t\t\t\t\t\theight = height - parseInt(KTUtil.css(cardFooterEl, 'margin-top')) - parseInt(KTUtil.css(cardFooterEl, 'margin-bottom'));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Remove additional space\r\n\t\t\t\theight = height - 2;\r\n\r\n\t\t\t\treturn height;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// attach events\r\n\t\tKTUtil.on(element, '.card-footer textarea', 'keydown', function(e) {\r\n\t\t\tif (e.keyCode == 13) {\r\n\t\t\t\t_handeMessaging(element);\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tKTUtil.on(element, '.card-footer .chat-send', 'click', function(e) {\r\n\t\t\t_handeMessaging(element);\r\n\t\t});\r\n\t}\r\n\r\n\tvar _handeMessaging = function(element) {\r\n\t\tvar messagesEl = KTUtil.find(element, '.messages');\r\n\t\tvar scrollEl = KTUtil.find(element, '.scroll');\r\n var textarea = KTUtil.find(element, 'textarea');\r\n\r\n if (textarea.value.length === 0 ) {\r\n return;\r\n }\r\n\r\n\t\tvar node = document.createElement(\"DIV\");\r\n\t\tKTUtil.addClass(node, 'd-flex flex-column mb-5 align-items-end');\r\n\r\n\t\tvar html = '';\r\n\t\thtml += '
';\r\n\t\thtml += '\t
';\r\n\t\thtml += '\t\t2 Hours';\r\n\t\thtml += '\t\tYou';\r\n\t\thtml += '\t
';\r\n\t\thtml += '\t
';\r\n\t\thtml += '\t\t\"Pic\"';\r\n\t\thtml += '\t
';\r\n\t\thtml += '
';\r\n\t\thtml += '
' + textarea.value + '
';\r\n\r\n\t\tKTUtil.setHTML(node, html);\r\n\t\tmessagesEl.appendChild(node);\r\n\t\ttextarea.value = '';\r\n\t\tscrollEl.scrollTop = parseInt(KTUtil.css(messagesEl, 'height'));\r\n\r\n\t\tvar ps;\r\n\t\tif (ps = KTUtil.data(scrollEl).get('ps')) {\r\n\t\t\tps.update();\r\n\t\t}\r\n\r\n\t\tsetTimeout(function() {\r\n\t\t\tvar node = document.createElement(\"DIV\");\r\n\t\t\tKTUtil.addClass(node, 'd-flex flex-column mb-5 align-items-start');\r\n\r\n\t\t\tvar html = '';\r\n\t\t\thtml += '
';\r\n\t\t\thtml += '\t
';\r\n\t\t\thtml += '\t\t\"Pic\"';\r\n\t\t\thtml += '\t
';\r\n\t\t\thtml += '\t
';\r\n\t\t\thtml += '\t\tMatt Pears';\r\n\t\t\thtml += '\t\tJust now';\r\n\t\t\thtml += '\t
';\r\n\t\t\thtml += '
';\r\n\t\t\thtml += '
';\r\n\t\t\thtml += 'Right before vacation season we have the next Big Deal for you.';\r\n\t\t\thtml += '
';\r\n\r\n\t\t\tKTUtil.setHTML(node, html);\r\n\t\t\tmessagesEl.appendChild(node);\r\n\t\t\ttextarea.value = '';\r\n\t\t\tscrollEl.scrollTop = parseInt(KTUtil.css(messagesEl, 'height'));\r\n\r\n\t\t\tvar ps;\r\n\t\t\tif (ps = KTUtil.data(scrollEl).get('ps')) {\r\n\t\t\t\tps.update();\r\n\t\t\t}\r\n\t\t}, 2000);\r\n\t}\r\n\r\n\t// Public methods\r\n\treturn {\r\n\t\tinit: function() {\r\n\t\t\t// init modal chat example\r\n\t\t\t_init(KTUtil.getById('kt_chat_modal'));\r\n\r\n\t\t\t// trigger click to show popup modal chat on page load\r\n\t\t\tif (encodeURI(window.location.hostname) == 'keenthemes.com' || encodeURI(window.location.hostname) == 'www.keenthemes.com') {\r\n\t\t\t\tsetTimeout(function() {\r\n\t\t if (!KTCookie.getCookie('kt_app_chat_shown')) {\r\n\t\t var expires = new Date(new Date().getTime() + 60 * 60 * 1000); // expire in 60 minutes from now\r\n\r\n\t\t\t\t\t\tKTCookie.setCookie('kt_app_chat_shown', 1, { expires: expires });\r\n\r\n\t\t\t\t\t\tif (KTUtil.getById('kt_app_chat_launch_btn')) {\r\n\t\t\t\t\t\t\tKTUtil.getById('kt_app_chat_launch_btn').click();\r\n\t\t\t\t\t\t}\r\n\t\t }\r\n\t\t }, 2000);\r\n\t }\r\n },\r\n\r\n setup: function(element) {\r\n _init(element);\r\n }\r\n\t};\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutChat;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutDemoPanel = function() {\r\n // Private properties\r\n var _element;\r\n var _offcanvasObject;\r\n\r\n // Private functions\r\n var _init = function() {\r\n _offcanvasObject = new KTOffcanvas(_element, {\r\n overlay: true,\r\n baseClass: 'offcanvas',\r\n placement: 'right',\r\n closeBy: 'kt_demo_panel_close',\r\n toggleBy: 'kt_demo_panel_toggle'\r\n });\r\n\r\n var header = KTUtil.find(_element, '.offcanvas-header');\r\n var content = KTUtil.find(_element, '.offcanvas-content');\r\n var wrapper = KTUtil.find(_element, '.offcanvas-wrapper');\r\n var footer = KTUtil.find(_element, '.offcanvas-footer');\r\n\r\n KTUtil.scrollInit(wrapper, {\r\n disableForMobile: true,\r\n resetHeightOnDestroy: true,\r\n handleWindowResize: true,\r\n height: function() {\r\n var height = parseInt(KTUtil.getViewPort().height);\r\n\r\n if (header) {\r\n height = height - parseInt(KTUtil.actualHeight(header));\r\n height = height - parseInt(KTUtil.css(header, 'marginTop'));\r\n height = height - parseInt(KTUtil.css(header, 'marginBottom'));\r\n }\r\n\r\n if (content) {\r\n height = height - parseInt(KTUtil.css(content, 'marginTop'));\r\n height = height - parseInt(KTUtil.css(content, 'marginBottom'));\r\n }\r\n\r\n if (wrapper) {\r\n height = height - parseInt(KTUtil.css(wrapper, 'marginTop'));\r\n height = height - parseInt(KTUtil.css(wrapper, 'marginBottom'));\r\n }\r\n\r\n if (footer) {\r\n height = height - parseInt(KTUtil.actualHeight(footer));\r\n height = height - parseInt(KTUtil.css(footer, 'marginTop'));\r\n height = height - parseInt(KTUtil.css(footer, 'marginBottom'));\r\n }\r\n\r\n height = height - parseInt(KTUtil.css(_element, 'paddingTop'));\r\n height = height - parseInt(KTUtil.css(_element, 'paddingBottom'));\r\n\r\n height = height - 2;\r\n\r\n return height;\r\n }\r\n });\r\n\r\n if (typeof offcanvas !== 'undefined' && offcanvas.length === 0) {\r\n offcanvas.on('hide', function() {\r\n var expires = new Date(new Date().getTime() + 60 * 60 * 1000); // expire in 60 minutes from now\r\n KTCookie.setCookie('kt_demo_panel_shown', 1, {expires: expires});\r\n });\r\n }\r\n }\r\n\r\n var _remind = function() {\r\n if (!(encodeURI(window.location.hostname) == 'keenthemes.com' || encodeURI(window.location.hostname) == 'www.keenthemes.com')) {\r\n return;\r\n }\r\n\r\n setTimeout(function() {\r\n if (!KTCookie.getCookie('kt_demo_panel_shown')) {\r\n var expires = new Date(new Date().getTime() + 15 * 60 * 1000); // expire in 15 minutes from now\r\n KTCookie.setCookie('kt_demo_panel_shown', 1, { expires: expires });\r\n if (typeof _offcanvasObject !== 'undefined') {\r\n _offcanvasObject.show();\r\n }\r\n }\r\n }, 4000);\r\n }\r\n\r\n // Public methods\r\n return {\r\n init: function(id) {\r\n _element = KTUtil.getById(id);\r\n\r\n if (!_element) {\r\n return;\r\n }\r\n\r\n // Initialize\r\n _init();\r\n\r\n // Remind\r\n _remind();\r\n }\r\n };\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutDemoPanel;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutExamples = function() {\r\n\r\n var initDefaultMode = function(element) {\r\n var elements = element;\r\n if (typeof elements === 'undefined') {\r\n elements = document.querySelectorAll('.example:not(.example-compact):not(.example-hover):not(.example-basic)');\r\n }\r\n\r\n for (var i = 0; i < elements.length; ++i) {\r\n var example = elements[i];\r\n var copy = KTUtil.find(example, '.example-copy');\r\n\r\n var clipboard = new ClipboardJS(copy, {\r\n target: function(trigger) {\r\n var example = trigger.closest('.example');\r\n var el = KTUtil.find(example, '.example-code .tab-pane.active');\r\n\r\n if (!el) {\r\n el = KTUtil.find(example, '.example-code');\r\n }\r\n\r\n return el;\r\n }\r\n });\r\n\r\n clipboard.on('success', function(e) {\r\n KTUtil.addClass(e.trigger, 'example-copied');\r\n e.clearSelection();\r\n\r\n setTimeout(function() {\r\n KTUtil.removeClass(e.trigger, 'example-copied');\r\n }, 2000);\r\n });\r\n }\r\n }\r\n\r\n var initCompactMode = function(element) {\r\n var example,code,toggle,copy, clipboard;\r\n var elements = element;\r\n if (typeof elements === 'undefined') {\r\n var elements = document.querySelectorAll('.example.example-compact');\r\n }\r\n\r\n for (var i = 0; i < elements.length; ++i) {\r\n var example = elements[i];\r\n var toggle = KTUtil.find(example, '.example-toggle');\r\n var copy = KTUtil.find(example, '.example-copy');\r\n\r\n // Handle toggle\r\n KTUtil.addEvent(toggle, 'click', function() {\r\n var example = this.closest('.example');\r\n var code = KTUtil.find(example, '.example-code');\r\n var the = this;\r\n\r\n if (KTUtil.hasClass(this, 'example-toggled')) {\r\n KTUtil.slideUp(code, 300, function() {\r\n KTUtil.removeClass(the, 'example-toggled');\r\n KTUtil.removeClass(code, 'example-code-on');\r\n KTUtil.hide(code);\r\n });\r\n } else {\r\n KTUtil.addClass(code, 'example-code-on');\r\n KTUtil.addClass(this, 'example-toggled');\r\n KTUtil.slideDown(code, 300, function() {\r\n KTUtil.show(code);\r\n });\r\n }\r\n });\r\n\r\n // Handle copy\r\n var clipboard = new ClipboardJS(copy, {\r\n target: function(trigger) {\r\n var example = trigger.closest('.example');\r\n var el = KTUtil.find(example, '.example-code .tab-pane.active');\r\n\r\n if (!el) {\r\n el = KTUtil.find(example, '.example-code');\r\n }\r\n\r\n return el;\r\n }\r\n });\r\n\r\n clipboard.on('success', function(e) {\r\n KTUtil.addClass(e.trigger, 'example-copied');\r\n e.clearSelection();\r\n\r\n setTimeout(function() {\r\n KTUtil.removeClass(e.trigger, 'example-copied');\r\n }, 2000);\r\n });\r\n }\r\n }\r\n\r\n return {\r\n init: function(element, options) {\r\n initDefaultMode(element);\r\n initCompactMode(element);\r\n }\r\n };\r\n}();\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTLayoutExamples;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutQuickActions = function() {\r\n // Private properties\r\n var _element;\r\n var _offcanvasObject;\r\n\r\n // Private functions\r\n var _init = function() {\r\n var header = KTUtil.find(_element, '.offcanvas-header');\r\n var content = KTUtil.find(_element, '.offcanvas-content');\r\n\r\n _offcanvasObject = new KTOffcanvas(_element, {\r\n overlay: true,\r\n baseClass: 'offcanvas',\r\n placement: 'right',\r\n closeBy: 'kt_quick_actions_close',\r\n toggleBy: 'kt_quick_actions_toggle'\r\n });\r\n\r\n KTUtil.scrollInit(content, {\r\n disableForMobile: true,\r\n resetHeightOnDestroy: true,\r\n handleWindowResize: true,\r\n height: function() {\r\n var height = parseInt(KTUtil.getViewPort().height);\r\n\r\n if (header) {\r\n height = height - parseInt(KTUtil.actualHeight(header));\r\n height = height - parseInt(KTUtil.css(header, 'marginTop'));\r\n height = height - parseInt(KTUtil.css(header, 'marginBottom'));\r\n }\r\n\r\n if (content) {\r\n height = height - parseInt(KTUtil.css(content, 'marginTop'));\r\n height = height - parseInt(KTUtil.css(content, 'marginBottom'));\r\n }\r\n\r\n height = height - parseInt(KTUtil.css(_element, 'paddingTop'));\r\n height = height - parseInt(KTUtil.css(_element, 'paddingBottom'));\r\n\r\n height = height - 2;\r\n\r\n return height;\r\n }\r\n });\r\n }\r\n\r\n // Public methods\r\n return {\r\n init: function(id) {\r\n _element = KTUtil.getById(id);\r\n\r\n if (!_element) {\r\n return;\r\n }\r\n\r\n // Initialize\r\n _init();\r\n },\r\n\r\n getElement: function() {\r\n return _element;\r\n }\r\n };\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutQuickActions;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutQuickCartPanel = function() {\r\n // Private properties\r\n var _element;\r\n var _offcanvasObject;\r\n\r\n // Private functions\r\n var _init = function() {\r\n _offcanvasObject = new KTOffcanvas(_element, {\r\n overlay: true,\r\n baseClass: 'offcanvas',\r\n placement: 'right',\r\n closeBy: 'kt_quick_cart_close',\r\n toggleBy: 'kt_quick_cart_toggle'\r\n });\r\n\r\n var header = KTUtil.find(_element, '.offcanvas-header');\r\n var content = KTUtil.find(_element, '.offcanvas-content');\r\n var wrapper = KTUtil.find(_element, '.offcanvas-wrapper');\r\n var footer = KTUtil.find(_element, '.offcanvas-footer');\r\n\r\n KTUtil.scrollInit(wrapper, {\r\n disableForMobile: true,\r\n resetHeightOnDestroy: true,\r\n handleWindowResize: true,\r\n height: function() {\r\n var height = parseInt(KTUtil.getViewPort().height);\r\n\r\n if (header) {\r\n height = height - parseInt(KTUtil.actualHeight(header));\r\n height = height - parseInt(KTUtil.css(header, 'marginTop'));\r\n height = height - parseInt(KTUtil.css(header, 'marginBottom'));\r\n }\r\n\r\n if (content) {\r\n height = height - parseInt(KTUtil.css(content, 'marginTop'));\r\n height = height - parseInt(KTUtil.css(content, 'marginBottom'));\r\n }\r\n\r\n if (wrapper) {\r\n height = height - parseInt(KTUtil.css(wrapper, 'marginTop'));\r\n height = height - parseInt(KTUtil.css(wrapper, 'marginBottom'));\r\n }\r\n\r\n if (footer) {\r\n height = height - parseInt(KTUtil.actualHeight(footer));\r\n height = height - parseInt(KTUtil.css(footer, 'marginTop'));\r\n height = height - parseInt(KTUtil.css(footer, 'marginBottom'));\r\n }\r\n\r\n height = height - parseInt(KTUtil.css(_element, 'paddingTop'));\r\n height = height - parseInt(KTUtil.css(_element, 'paddingBottom'));\r\n\r\n height = height - 2;\r\n\r\n return height;\r\n }\r\n });\r\n }\r\n\r\n // Public methods\r\n return {\r\n init: function(id) {\r\n _element = KTUtil.getById(id);\r\n\r\n if (!_element) {\r\n return;\r\n }\r\n\r\n // Initialize\r\n _init();\r\n }\r\n };\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutQuickCartPanel;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutQuickNotifications = function() {\r\n // Private properties\r\n var _element;\r\n var _offcanvasObject;\r\n\r\n // Private functions\r\n var _init = function() {\r\n var header = KTUtil.find(_element, '.offcanvas-header');\r\n var content = KTUtil.find(_element, '.offcanvas-content');\r\n\r\n _offcanvasObject = new KTOffcanvas(_element, {\r\n overlay: true,\r\n baseClass: 'offcanvas',\r\n placement: 'right',\r\n closeBy: 'kt_quick_notifications_close',\r\n toggleBy: 'kt_quick_notifications_toggle'\r\n });\r\n\r\n KTUtil.scrollInit(content, {\r\n disableForMobile: true,\r\n resetHeightOnDestroy: true,\r\n handleWindowResize: true,\r\n height: function() {\r\n var height = parseInt(KTUtil.getViewPort().height);\r\n\r\n if (header) {\r\n height = height - parseInt(KTUtil.actualHeight(header));\r\n height = height - parseInt(KTUtil.css(header, 'marginTop'));\r\n height = height - parseInt(KTUtil.css(header, 'marginBottom'));\r\n }\r\n\r\n if (content) {\r\n height = height - parseInt(KTUtil.css(content, 'marginTop'));\r\n height = height - parseInt(KTUtil.css(content, 'marginBottom'));\r\n }\r\n\r\n height = height - parseInt(KTUtil.css(_element, 'paddingTop'));\r\n height = height - parseInt(KTUtil.css(_element, 'paddingBottom'));\r\n\r\n height = height - 2;\r\n\r\n return height;\r\n }\r\n });\r\n }\r\n\r\n // Public methods\r\n return {\r\n init: function(id) {\r\n _element = KTUtil.getById(id);\r\n\r\n if (!_element) {\r\n return;\r\n }\r\n\r\n // Initialize\r\n _init();\r\n },\r\n\r\n getElement: function() {\r\n return _element;\r\n }\r\n };\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutQuickNotifications;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutQuickPanel = function() {\r\n // Private properties\r\n var _element;\r\n var _offcanvasObject;\r\n var _notificationsElement;\r\n var _logsElement;\r\n var _settingsElement;\r\n\r\n // Private functions\r\n var _getContentHeight = function() {\r\n var height;\r\n\r\n var header = KTUtil.find(_element, '.offcanvas-header');\r\n var content = KTUtil.find(_element, '.offcanvas-content');\r\n\r\n var height = parseInt(KTUtil.getViewPort().height);\r\n\r\n if (header) {\r\n height = height - parseInt(KTUtil.actualHeight(header));\r\n height = height - parseInt(KTUtil.css(header, 'marginTop'));\r\n height = height - parseInt(KTUtil.css(header, 'marginBottom'));\r\n }\r\n\r\n if (content) {\r\n height = height - parseInt(KTUtil.css(content, 'marginTop'));\r\n height = height - parseInt(KTUtil.css(content, 'marginBottom'));\r\n }\r\n\r\n height = height - parseInt(KTUtil.css(_element, 'paddingTop'));\r\n height = height - parseInt(KTUtil.css(_element, 'paddingBottom'));\r\n\r\n height = height - 2;\r\n\r\n return height;\r\n }\r\n\r\n var _init = function() {\r\n _offcanvasObject = new KTOffcanvas(_element, {\r\n overlay: true,\r\n baseClass: 'offcanvas',\r\n placement: 'right',\r\n closeBy: 'kt_quick_panel_close',\r\n toggleBy: 'kt_quick_panel_toggle'\r\n });\r\n }\r\n\r\n var _initNotifications = function() {\r\n KTUtil.scrollInit(_notificationsElement, {\r\n mobileNativeScroll: true,\r\n resetHeightOnDestroy: true,\r\n handleWindowResize: true,\r\n height: function() {\r\n return _getContentHeight();\r\n }\r\n });\r\n }\r\n\r\n var _initLogs = function() {\r\n KTUtil.scrollInit(_logsElement, {\r\n mobileNativeScroll: true,\r\n resetHeightOnDestroy: true,\r\n handleWindowResize: true,\r\n height: function() {\r\n return _getContentHeight();\r\n }\r\n });\r\n }\r\n\r\n var _initSettings = function() {\r\n KTUtil.scrollInit(_settingsElement, {\r\n mobileNativeScroll: true,\r\n resetHeightOnDestroy: true,\r\n handleWindowResize: true,\r\n height: function() {\r\n return _getContentHeight();\r\n }\r\n });\r\n }\r\n\r\n var _updateScrollbars = function() {\r\n $(_element).find('a[data-toggle=\"tab\"]').on('shown.bs.tab', function (e) {\r\n KTUtil.scrollUpdate(_notificationsElement);\r\n KTUtil.scrollUpdate(_logsElement);\r\n KTUtil.scrollUpdate(_settingsElement);\r\n });\r\n }\r\n\r\n // Public methods\r\n return {\r\n init: function(id) {\r\n _element = KTUtil.getById(id);\r\n _notificationsElement = KTUtil.getById('kt_quick_panel_notifications');\r\n _logsElement = KTUtil.getById('kt_quick_panel_logs');\r\n _settingsElement = KTUtil.getById('kt_quick_panel_settings');\r\n\r\n _init();\r\n _initNotifications();\r\n _initLogs();\r\n _initSettings();\r\n\r\n _updateScrollbars();\r\n }\r\n };\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutQuickPanel;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutQuickSearch = function() {\r\n // Private properties\r\n var _element;\r\n var _offcanvasObject;\r\n\r\n // Private functions\r\n var _init = function() {\r\n var header = KTUtil.find(_element, '.offcanvas-header');\r\n var content = KTUtil.find(_element, '.offcanvas-content');\r\n var form = KTUtil.find(_element, '.quick-search-form');\r\n var results = KTUtil.find(_element, '.quick-search-wrapper');\r\n\r\n _offcanvasObject = new KTOffcanvas(_element, {\r\n overlay: true,\r\n baseClass: 'offcanvas',\r\n placement: 'right',\r\n closeBy: 'kt_quick_search_close',\r\n toggleBy: 'kt_quick_search_toggle'\r\n });\r\n\r\n KTUtil.scrollInit(results, {\r\n disableForMobile: true,\r\n resetHeightOnDestroy: true,\r\n handleWindowResize: true,\r\n height: function() {\r\n var height = parseInt(KTUtil.getViewPort().height);\r\n\r\n if (header) {\r\n height = height - parseInt(KTUtil.actualHeight(header));\r\n height = height - parseInt(KTUtil.css(header, 'marginTop'));\r\n height = height - parseInt(KTUtil.css(header, 'marginBottom'));\r\n }\r\n\r\n if (content) {\r\n height = height - parseInt(KTUtil.css(content, 'marginTop'));\r\n height = height - parseInt(KTUtil.css(content, 'marginBottom'));\r\n }\r\n\r\n if (results) {\r\n height = height - parseInt(KTUtil.actualHeight(form));\r\n height = height - parseInt(KTUtil.css(form, 'marginTop'));\r\n height = height - parseInt(KTUtil.css(form, 'marginBottom'));\r\n\r\n height = height - parseInt(KTUtil.css(results, 'marginTop'));\r\n height = height - parseInt(KTUtil.css(results, 'marginBottom'));\r\n }\r\n\r\n height = height - parseInt(KTUtil.css(_element, 'paddingTop'));\r\n height = height - parseInt(KTUtil.css(_element, 'paddingBottom'));\r\n\r\n height = height - 2;\r\n\r\n return height;\r\n }\r\n });\r\n }\r\n\r\n // Public methods\r\n return {\r\n init: function(id) {\r\n _element = KTUtil.getById(id);\r\n\r\n if (!_element) {\r\n return;\r\n }\r\n\r\n // Initialize\r\n _init();\r\n },\r\n\r\n getElement: function() {\r\n return _element;\r\n }\r\n };\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutQuickSearch;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutQuickUser = function() {\r\n // Private properties\r\n var _element;\r\n var _offcanvasObject;\r\n\r\n // Private functions\r\n var _init = function() {\r\n var header = KTUtil.find(_element, '.offcanvas-header');\r\n var content = KTUtil.find(_element, '.offcanvas-content');\r\n\r\n _offcanvasObject = new KTOffcanvas(_element, {\r\n overlay: true,\r\n baseClass: 'offcanvas',\r\n placement: 'right',\r\n closeBy: 'kt_quick_user_close',\r\n toggleBy: 'kt_quick_user_toggle'\r\n });\r\n\r\n KTUtil.scrollInit(content, {\r\n disableForMobile: true,\r\n resetHeightOnDestroy: true,\r\n handleWindowResize: true,\r\n height: function() {\r\n var height = parseInt(KTUtil.getViewPort().height);\r\n\r\n if (header) {\r\n height = height - parseInt(KTUtil.actualHeight(header));\r\n height = height - parseInt(KTUtil.css(header, 'marginTop'));\r\n height = height - parseInt(KTUtil.css(header, 'marginBottom'));\r\n }\r\n\r\n if (content) {\r\n height = height - parseInt(KTUtil.css(content, 'marginTop'));\r\n height = height - parseInt(KTUtil.css(content, 'marginBottom'));\r\n }\r\n\r\n height = height - parseInt(KTUtil.css(_element, 'paddingTop'));\r\n height = height - parseInt(KTUtil.css(_element, 'paddingBottom'));\r\n\r\n height = height - 2;\r\n\r\n return height;\r\n }\r\n });\r\n }\r\n\r\n // Public methods\r\n return {\r\n init: function(id) {\r\n _element = KTUtil.getById(id);\r\n\r\n if (!_element) {\r\n return;\r\n }\r\n\r\n // Initialize\r\n _init();\r\n },\r\n\r\n getElement: function() {\r\n return _element;\r\n }\r\n };\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutQuickUser;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutScrolltop = function() {\r\n // Private properties\r\n var _element;\r\n var _object;\r\n\r\n // Private functions\r\n var _init = function() {\r\n _object = new KTScrolltop(_element, {\r\n offset: 300,\r\n speed: 600,\r\n });\r\n }\r\n\r\n // Public methods\r\n\treturn {\r\n\t\tinit: function(id) {\r\n _element = KTUtil.getById(id);\r\n\r\n if (!_element) {\r\n return;\r\n }\r\n\r\n // Initialize\r\n _init();\r\n\t\t},\r\n\r\n getElement: function() {\r\n return _element;\r\n }\r\n\t};\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutScrolltop;\r\n}\r\n","\"use strict\";\r\n//\r\n// Handle User Quick Search For Dropdown, Inline and Offcanvas Search Panels\r\n//\r\n\r\nvar KTLayoutSearch = function() {\r\n // Private properties\r\n var _target;\r\n var _form;\r\n var _input;\r\n var _closeIcon;\r\n var _resultWrapper;\r\n var _resultDropdown;\r\n var _resultDropdownToggle;\r\n var _closeIconContainer;\r\n var _inputGroup;\r\n var _query = '';\r\n\r\n var _hasResult = false;\r\n var _timeout = false;\r\n var _isProcessing = false;\r\n var _requestTimeout = 200; // ajax request fire timeout in milliseconds\r\n var _spinnerClass = 'spinner spinner-sm spinner-primary';\r\n var _resultClass = 'quick-search-has-result';\r\n var _minLength = 2;\r\n\r\n // Private functions\r\n var _showProgress = function() {\r\n _isProcessing = true;\r\n KTUtil.addClass(_closeIconContainer, _spinnerClass);\r\n\r\n if (_closeIcon) {\r\n KTUtil.hide(_closeIcon);\r\n }\r\n }\r\n\r\n var _hideProgress = function() {\r\n _isProcessing = false;\r\n KTUtil.removeClass(_closeIconContainer, _spinnerClass);\r\n\r\n if (_closeIcon) {\r\n if (_input.value.length < _minLength) {\r\n KTUtil.hide(_closeIcon);\r\n } else {\r\n KTUtil.show(_closeIcon, 'flex');\r\n }\r\n }\r\n }\r\n\r\n var _showDropdown = function() {\r\n if (_resultDropdownToggle && !KTUtil.hasClass(_resultDropdown, 'show')) {\r\n $(_resultDropdownToggle).dropdown('toggle');\r\n $(_resultDropdownToggle).dropdown('update');\r\n }\r\n }\r\n\r\n var _hideDropdown = function() {\r\n if (_resultDropdownToggle && KTUtil.hasClass(_resultDropdown, 'show')) {\r\n $(_resultDropdownToggle).dropdown('toggle');\r\n }\r\n }\r\n\r\n var _processSearch = function() {\r\n if (_hasResult && _query === _input.value) {\r\n _hideProgress();\r\n KTUtil.addClass(_target, _resultClass);\r\n _showDropdown();\r\n KTUtil.scrollUpdate(_resultWrapper);\r\n\r\n return;\r\n }\r\n\r\n _query = _input.value;\r\n\r\n KTUtil.removeClass(_target, _resultClass);\r\n _showProgress();\r\n _hideDropdown();\r\n\r\n setTimeout(function() {\r\n $.ajax({\r\n url: HOST_URL + '/api/quick_search.php',\r\n data: {\r\n query: _query\r\n },\r\n dataType: 'html',\r\n success: function(res) {\r\n _hasResult = true;\r\n _hideProgress();\r\n KTUtil.addClass(_target, _resultClass);\r\n KTUtil.setHTML(_resultWrapper, res);\r\n _showDropdown();\r\n KTUtil.scrollUpdate(_resultWrapper);\r\n },\r\n error: function(res) {\r\n _hasResult = false;\r\n _hideProgress();\r\n KTUtil.addClass(_target, _resultClass);\r\n KTUtil.setHTML(_resultWrapper, 'Connection error. Please try again later..');\r\n _showDropdown();\r\n KTUtil.scrollUpdate(_resultWrapper);\r\n }\r\n });\r\n }, 1000);\r\n }\r\n\r\n var _handleCancel = function(e) {\r\n _input.value = '';\r\n _query = '';\r\n _hasResult = false;\r\n KTUtil.hide(_closeIcon);\r\n KTUtil.removeClass(_target, _resultClass);\r\n _hideDropdown();\r\n }\r\n\r\n var _handleSearch = function() {\r\n if (_input.value.length < _minLength) {\r\n _hideProgress();\r\n _hideDropdown();\r\n\r\n return;\r\n }\r\n\r\n if (_isProcessing == true) {\r\n return;\r\n }\r\n\r\n if (_timeout) {\r\n clearTimeout(_timeout);\r\n }\r\n\r\n _timeout = setTimeout(function() {\r\n _processSearch();\r\n }, _requestTimeout);\r\n }\r\n\r\n // Public methods\r\n return {\r\n init: function(id) {\r\n _target = KTUtil.getById(id);\r\n\r\n if (!_target) {\r\n return;\r\n }\r\n\r\n _form = KTUtil.find(_target, '.quick-search-form');\r\n _input = KTUtil.find(_target, '.form-control');\r\n _closeIcon = KTUtil.find(_target, '.quick-search-close');\r\n _resultWrapper = KTUtil.find(_target, '.quick-search-wrapper');\r\n _resultDropdown = KTUtil.find(_target, '.dropdown-menu');\r\n _resultDropdownToggle = KTUtil.find(_target, '[data-toggle=\"dropdown\"]');\r\n _inputGroup = KTUtil.find(_target, '.input-group');\r\n _closeIconContainer = KTUtil.find(_target, '.input-group .input-group-append');\r\n\r\n // Attach input keyup handler\r\n KTUtil.addEvent(_input, 'keyup', _handleSearch);\r\n KTUtil.addEvent(_input, 'focus', _handleSearch);\r\n\r\n // Prevent enter click\r\n _form.onkeypress = function(e) {\r\n var key = e.charCode || e.keyCode || 0;\r\n if (key == 13) {\r\n e.preventDefault();\r\n }\r\n }\r\n\r\n KTUtil.addEvent(_closeIcon, 'click', _handleCancel);\r\n }\r\n };\r\n};\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n module.exports = KTLayoutSearch;\r\n}\r\n\r\nvar KTLayoutSearchInline = KTLayoutSearch;\r\nvar KTLayoutSearchOffcanvas = KTLayoutSearch;\r\n","\"use strict\";\r\n\r\n// Initialization\r\nKTUtil.ready(function() {\r\n ////////////////////////////////////////////////////\r\n // Layout Base Partials(mandatory for core layout)//\r\n ////////////////////////////////////////////////////\r\n\r\n // Init Desktop & Mobile Headers\r\n KTLayoutHeader.init('kt_header', 'kt_header_mobile');\r\n\r\n // Init Header Menu\r\n KTLayoutHeaderMenu.init('kt_header_menu', 'kt_header_navs');\r\n\r\n // Init Header Topbar For Mobile Mode\r\n KTLayoutHeaderTopbar.init('kt_header_mobile_topbar_toggle');\r\n\r\n // Init Aside\r\n KTLayoutAside.init('kt_aside');\r\n\r\n // Init Aside Menu\r\n KTLayoutAsideMenu.init('kt_aside_menu');\r\n\r\n // Init Subheader\r\n KTLayoutSubheader.init('kt_subheader');\r\n\r\n // Init Content\r\n KTLayoutContent.init('kt_content');\r\n\r\n // Init Footer\r\n KTLayoutFooter.init('kt_footer');\r\n\r\n //////////////////////////////////////////////\r\n // Layout Extended Partials(optional to use)//\r\n //////////////////////////////////////////////\r\n\r\n\r\n // Init Scrolltop\r\n KTLayoutScrolltop.init('kt_scrolltop');\r\n\r\n // Init Sticky Card\r\n KTLayoutStickyCard.init('kt_page_sticky_card');\r\n\r\n // Init Stretched Card\r\n KTLayoutStretchedCard.init('kt_page_stretched_card');\r\n\r\n // Init Code Highlighter & Preview Blocks(used to demonstrate the theme features)\r\n\tKTLayoutExamples.init();\r\n\r\n // Init Demo Selection Panel\r\n\tKTLayoutDemoPanel.init('kt_demo_panel');\r\n\r\n // Init Chat App(quick modal chat)\r\n KTLayoutChat.init();\r\n\r\n // Init Quick Actions Offcanvas Panel\r\n KTLayoutQuickActions.init('kt_quick_actions');\r\n\r\n // Init Quick Notifications Offcanvas Panel\r\n KTLayoutQuickNotifications.init('kt_quick_notifications');\r\n\r\n // Init Quick Offcanvas Panel\r\n KTLayoutQuickPanel.init('kt_quick_panel');\r\n\r\n // Init Quick Search Panel\r\n KTLayoutQuickSearch.init('kt_quick_search');\r\n\r\n // Init Quick User Panel\r\n KTLayoutQuickUser.init('kt_quick_user');\r\n\r\n // Init Search For Quick Search Dropdown\r\n KTLayoutSearch().init('kt_quick_search_dropdown');\r\n\r\n // Init Search For Quick Search Offcanvas Panel\r\n KTLayoutSearchOffcanvas().init('kt_quick_search_offcanvas');\r\n});\r\n","// Keenthemes' plugins\r\nwindow.KTUtil = require('@/src/js/components/util.js');\r\nwindow.KTApp = require('@/src/js/components/app.js');\r\nwindow.KTCard = require('@/src/js/components/card.js');\r\nwindow.KTCookie = require('@/src/js/components/cookie.js');\r\nwindow.KTDialog = require('@/src/js/components/dialog.js');\r\nwindow.KTHeader = require('@/src/js/components/header.js');\r\nwindow.KTImageInput = require('@/src/js/components/image-input.js');\r\nwindow.KTMenu = require('@/src/js/components/menu.js');\r\nwindow.KTOffcanvas = require('@/src/js/components/offcanvas.js');\r\nwindow.KTScrolltop = require('@/src/js/components/scrolltop.js');\r\nwindow.KTToggle = require('@/src/js/components/toggle.js');\r\nwindow.KTWizard = require('@/src/js/components/wizard.js');\r\nrequire('@/src/js/components/datatable/core.datatable.js');\r\nrequire('@/src/js/components/datatable/datatable.checkbox.js');\r\nrequire('@/src/js/components/datatable/datatable.rtl.js');\r\n\r\n// Metronic layout base js\r\nwindow.KTLayoutAside = require('@/src/js/layout/base/aside.js');\r\nwindow.KTLayoutAsideMenu = require('@/src/js/layout/base/aside-menu.js');\r\nwindow.KTLayoutContent = require('@/src/js/layout/base/content.js');\r\nwindow.KTLayoutFooter = require('@/src/js/layout/base/footer.js');\r\nwindow.KTLayoutHeader = require('@/src/js/layout/base/header.js');\r\nwindow.KTLayoutHeaderMenu = require('@/src/js/layout/base/header-menu.js');\r\nwindow.KTLayoutHeaderTopbar = require('@/src/js/layout/base/header-topbar.js');\r\nwindow.KTLayoutStickyCard = require('@/src/js/layout/base/sticky-card.js');\r\nwindow.KTLayoutStretchedCard = require('@/src/js/layout/base/stretched-card.js');\r\nwindow.KTLayoutSubheader = require('@/src/js/layout/base/subheader.js');\r\n\r\n// Metronic layout extended js\r\nwindow.KTLayoutChat = require('@/src/js/layout/extended/chat.js');\r\nwindow.KTLayoutDemoPanel = require('@/src/js/layout/extended/demo-panel.js');\r\nwindow.KTLayoutExamples = require('@/src/js/layout/extended/examples.js');\r\nwindow.KTLayoutQuickActions = require('@/src/js/layout/extended/quick-actions.js');\r\nwindow.KTLayoutQuickCartPanel = require('@/src/js/layout/extended/quick-cart.js');\r\nwindow.KTLayoutQuickNotifications = require('@/src/js/layout/extended/quick-notifications.js');\r\nwindow.KTLayoutQuickPanel = require('@/src/js/layout/extended/quick-panel.js');\r\nwindow.KTLayoutQuickSearch = require('@/src/js/layout/extended/quick-search.js');\r\nwindow.KTLayoutQuickUser = require('@/src/js/layout/extended/quick-user.js');\r\nwindow.KTLayoutScrolltop = require('@/src/js/layout/extended/scrolltop.js');\r\nwindow.KTLayoutSearch = window.KTLayoutSearchOffcanvas = require('@/src/js/layout/extended/search.js');\r\n\r\nrequire('@/src/js/layout/initialize.js');\r\n"],"sourceRoot":""}