{"version":3,"sources":["webpack://keen/../ThemeAssets/src/js/components/app.js","webpack://keen/../ThemeAssets/src/js/components/card.js","webpack://keen/../ThemeAssets/src/js/components/cookie.js","webpack://keen/../ThemeAssets/src/js/components/datatable/core.datatable.js","webpack://keen/../ThemeAssets/src/js/components/datatable/datatable.checkbox.js","webpack://keen/../ThemeAssets/src/js/components/datatable/datatable.rtl.js","webpack://keen/../ThemeAssets/src/js/components/dialog.js","webpack://keen/../ThemeAssets/src/js/components/header.js","webpack://keen/../ThemeAssets/src/js/components/image-input.js","webpack://keen/../ThemeAssets/src/js/components/menu.js","webpack://keen/../ThemeAssets/src/js/components/offcanvas.js","webpack://keen/../ThemeAssets/src/js/components/scrolltop.js","webpack://keen/../ThemeAssets/src/js/components/toggle.js","webpack://keen/../ThemeAssets/src/js/components/util.js","webpack://keen/../ThemeAssets/src/js/components/wizard.js","webpack://keen/../ThemeAssets/src/js/layout/base/aside-menu.js","webpack://keen/../ThemeAssets/src/js/layout/base/aside-toggle.js","webpack://keen/../ThemeAssets/src/js/layout/base/aside.js","webpack://keen/../ThemeAssets/src/js/layout/base/brand.js","webpack://keen/../ThemeAssets/src/js/layout/base/content.js","webpack://keen/../ThemeAssets/src/js/layout/base/footer.js","webpack://keen/../ThemeAssets/src/js/layout/base/header-menu.js","webpack://keen/../ThemeAssets/src/js/layout/base/header-topbar.js","webpack://keen/../ThemeAssets/src/js/layout/base/header.js","webpack://keen/../ThemeAssets/src/js/layout/base/sidebar.js","webpack://keen/../ThemeAssets/src/js/layout/base/sticky-card.js","webpack://keen/../ThemeAssets/src/js/layout/base/stretched-card.js","webpack://keen/../ThemeAssets/src/js/layout/base/subheader.js","webpack://keen/../ThemeAssets/src/js/layout/extended/chat.js","webpack://keen/../ThemeAssets/src/js/layout/extended/demo-panel.js","webpack://keen/../ThemeAssets/src/js/layout/extended/examples.js","webpack://keen/../ThemeAssets/src/js/layout/extended/quick-actions.js","webpack://keen/../ThemeAssets/src/js/layout/extended/quick-notifications.js","webpack://keen/../ThemeAssets/src/js/layout/extended/quick-panel.js","webpack://keen/../ThemeAssets/src/js/layout/extended/quick-search.js","webpack://keen/../ThemeAssets/src/js/layout/extended/quick-user.js","webpack://keen/../ThemeAssets/src/js/layout/extended/scrolltop.js","webpack://keen/../ThemeAssets/src/js/layout/extended/search.js","webpack://keen/../ThemeAssets/src/js/layout/initialize.js","webpack://keen/webpack/bootstrap","webpack://keen/./webpack/scripts.ThemeAssets.js"],"names":[],"mappings":";;;;;;;;;;AAAa;;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,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;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;ACzUa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,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;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;;;;;;;;;;;;ACpba;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;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,mBAAmB;;AAEnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,yBAAyB,gBAAgB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;;AAEP;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,kCAAkC,uCAAuC;AACzE;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;;AAER;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;;AAER;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR,MAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR,MAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,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;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,gBAAgB;AAChB;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,IAAI;;AAEJ;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,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;;;;;;;;;;;;AC19GY;AACb;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,MAAM;;AAEN;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL,IAAI;;AAEJ;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN,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;;;;;;;;;;;ACzPD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,eAAe,0DAA0D;AACzE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,gBAAgB,0DAA0D;AAC1E;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC/Ba;;AAEb;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA,8CAA8C;;AAE9C;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,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;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;;;;;;;;;;;;ACj4BY;;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;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;;;;;;;;;;;;AClPa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;AACA,CAAC;;;AAGD;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;AACA;AACA;AACA,mBAAmB,YAAY;AAC/B;AACA;AACA;AACA;AACA;;AAEA;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,0CAA0C;AAC1C;AACA;;AAEA,2BAA2B,sBAAsB;AACjD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;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,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;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB;AACrB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,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;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,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;;AAEA;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;;;;;;;;;;;;ACpxDY;;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA;;AAEA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,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,SAAS;;AAET;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,IAAI,KAA6B;AACjC;AACA;;;;;;;;;;;;AC7ba;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL,IAAI;;AAEJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;AC1Ja;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA,SAAS;;AAET;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;ACrFa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;AChEa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;ACxCa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,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;;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;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;ACjFa;;AAEb;AACA;AACA;AACA;;AAEA;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;;;;;;;;;;;;ACrCa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,IAA6B;AACjC;AACA;;;;;;;;;;;;ACzEa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;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;;;;;;;;;;;;ACtJa;;AAEb;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;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;;;;;;;;;;;;AClFa;;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;;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,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;;;;;;;;;;;;ACrCa;;AAEb;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;;;;;;;;;;;;AC7Ka;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;;;;;;UCnID;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;;;;;ACrBA;AACA,gBAAgB,mBAAO,CAAC,6EAA6B;AACrD,eAAe,mBAAO,CAAC,2EAA4B;AACnD,gBAAgB,mBAAO,CAAC,6EAA6B;AACrD,kBAAkB,mBAAO,CAAC,iFAA+B;AACzD,kBAAkB,mBAAO,CAAC,iFAA+B;AACzD,kBAAkB,mBAAO,CAAC,iFAA+B;AACzD,sBAAsB,mBAAO,CAAC,2FAAoC;AAClE,gBAAgB,mBAAO,CAAC,6EAA6B;AACrD,qBAAqB,mBAAO,CAAC,uFAAkC;AAC/D,qBAAqB,mBAAO,CAAC,uFAAkC;AAC/D,kBAAkB,mBAAO,CAAC,iFAA+B;AACzD,kBAAkB,mBAAO,CAAC,iFAA+B;AACzD,mBAAO,CAAC,qHAAiD;AACzD,mBAAO,CAAC,6HAAqD;AAC7D,mBAAO,CAAC,mHAAgD;;AAExD;AACA,uBAAuB,mBAAO,CAAC,iFAA+B;AAC9D,2BAA2B,mBAAO,CAAC,2FAAoC;AACvE,6BAA6B,mBAAO,CAAC,+FAAsC;AAC3E,uBAAuB,mBAAO,CAAC,iFAA+B;AAC9D,yBAAyB,mBAAO,CAAC,qFAAiC;AAClE,wBAAwB,mBAAO,CAAC,mFAAgC;AAChE,wBAAwB,mBAAO,CAAC,mFAAgC;AAChE,4BAA4B,mBAAO,CAAC,6FAAqC;AACzE,8BAA8B,mBAAO,CAAC,iGAAuC;AAC7E,yBAAyB,mBAAO,CAAC,qFAAiC;AAClE,2BAA2B,mBAAO,CAAC,yFAAmC;AACtE,4BAA4B,mBAAO,CAAC,6FAAqC;AACzE,+BAA+B,mBAAO,CAAC,mGAAwC;;AAE/E;AACA,sBAAsB,mBAAO,CAAC,uFAAkC;AAChE,2BAA2B,mBAAO,CAAC,mGAAwC;AAC3E,0BAA0B,mBAAO,CAAC,+FAAsC;AACxE,8BAA8B,mBAAO,CAAC,yGAA2C;AACjF,oCAAoC,mBAAO,CAAC,qHAAiD;AAC7F,4BAA4B,mBAAO,CAAC,qGAAyC;AAC7E,6BAA6B,mBAAO,CAAC,uGAA0C;AAC/E,2BAA2B,mBAAO,CAAC,mGAAwC;AAC3E,2BAA2B,mBAAO,CAAC,iGAAuC;AAC1E,yDAAyD,mBAAO,CAAC,2FAAoC;;AAErG,mBAAO,CAAC,iFAA+B","file":"js/scripts.bundle.js","sourcesContent":["\"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: '<div class=\"tooltip ' + theme + ' ' + width + '\" role=\"tooltip\">\\\r\n                <div class=\"arrow\"></div>\\\r\n                <div class=\"tooltip-inner\"></div>\\\r\n            </div>'\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            <div class=\"popover ' + skin + '\" role=\"tooltip\">\\\r\n                <div class=\"arrow\"></div>\\\r\n                <h3 class=\"popover-header\"></h3>\\\r\n                <div class=\"popover-body\"></div>\\\r\n            </div>'\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            });\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 = '<span class=\"spinner ' + version + ' ' + state + ' ' + size + '\"></span';\r\n\r\n            if (options.message && options.message.length > 0) {\r\n                var classes = 'blockui ' + (options.shadow === false ? 'blockui' : '');\r\n\r\n                html = '<div class=\"' + classes + '\"><span>' + options.message + '</span>' + spinner + '</div>';\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 = '<div class=\"' + classes + '\" style=\"margin-left:-' + (options.width / 2) + 'px;\"><span>' + options.message + '</span><span>' + spinner + '</span></div>';\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\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}","\"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            // Remove tooltips\r\n            var tooltips;\r\n            if ( tooltips = document.querySelectorAll('.tooltip.show') ) {\r\n                $(tooltips).tooltip('dispose');\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\tdropdownMenu.css('display', '');\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 = $('<div/>').addClass(pfx + 'datatable-lock ' + pfx + 'datatable-lock-left');\r\n\t\t\t\t\t\t\tvar lockScroll = $('<div/>').addClass(pfx + 'datatable-lock ' + pfx + 'datatable-lock-scroll');\r\n\t\t\t\t\t\t\tvar lockRight = $('<div/>').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 = $('<tr/>').addClass(pfx + 'datatable-row').data('obj', $(this).data('obj')).appendTo(lockLeft);\r\n\t\t\t\t\t\t\t\tvar rowScroll = $('<tr/>').addClass(pfx + 'datatable-row').data('obj', $(this).data('obj')).appendTo(lockScroll);\r\n\t\t\t\t\t\t\t\tvar rowRight = $('<tr/>').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 <table>, 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($('<div/>').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 = $('<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 = $('<thead/>').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 = $('<tbody/>').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 = $('<tfoot/>').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 = $('<label/>').\r\n\t\t\t\t\t\t\t\t\taddClass(pfx + 'checkbox ' + pfx + 'checkbox-single').\r\n\t\t\t\t\t\t\t\t\tappend($('<input/>').attr('type', 'checkbox').attr('value', value).on('click', function() {\r\n\t\t\t\t\t\t\t\t\t\tif ($(this).is(':checked')) {\r\n\t\t\t\t\t\t\t\t\t\t\t// add checkbox active row class\r\n\t\t\t\t\t\t\t\t\t\t\tPlugin.setActive(this);\r\n\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\t// add checkbox active row class\r\n\t\t\t\t\t\t\t\t\t\t\tPlugin.setInactive(this);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t})).\r\n\t\t\t\t\t\t\t\t\tappend('&nbsp;<span></span>');\r\n\r\n\t\t\t\t\t\t\t\t// checkbox selector has outline style\r\n\t\t\t\t\t\t\t\tif (typeof column.selector.class !== 'undefined') {\r\n\t\t\t\t\t\t\t\t\t$(chk).addClass(column.selector.class);\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t$(td).children().html(chk);\r\n\t\t\t\t\t\t\t}\r\n\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\tchildren().\r\n\t\t\t\t\t\t\t\t\thtml($('<a/>').\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\tappend($('<i/>').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// init checkbox for header/footer\r\n\t\t\t\tvar initCheckbox = function(tr) {\r\n\t\t\t\t\t// get column settings by field\r\n\t\t\t\t\tvar column = $.grep(columns, function(n, i) {\r\n\t\t\t\t\t\treturn typeof n.selector !== 'undefined' && n.selector !== false;\r\n\t\t\t\t\t})[0];\r\n\r\n\t\t\t\t\tif (typeof column !== 'undefined') {\r\n\t\t\t\t\t\t// enable column selector\r\n\t\t\t\t\t\tif (typeof column.selector !== 'undefined' && column.selector !== false) {\r\n\t\t\t\t\t\t\tvar td = $(tr).find('[data-field=\"' + column.field + '\"]');\r\n\t\t\t\t\t\t\t// check if checkbox exist\r\n\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$(td).addClass(pfx + 'datatable-cell-check');\r\n\r\n\t\t\t\t\t\t\t// append checkbox\r\n\t\t\t\t\t\t\tvar chk = $('<label/>').\r\n\t\t\t\t\t\t\t\taddClass(pfx + 'checkbox ' + pfx + 'checkbox-single ' + pfx + 'checkbox-all').\r\n\t\t\t\t\t\t\t\tappend($('<input/>').attr('type', 'checkbox').on('click', function() {\r\n\t\t\t\t\t\t\t\t\tif ($(this).is(':checked')) {\r\n\t\t\t\t\t\t\t\t\t\tPlugin.setActiveAll(true);\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tPlugin.setActiveAll(false);\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\tappend('&nbsp;<span></span>');\r\n\r\n\t\t\t\t\t\t\t// checkbox selector has outline style\r\n\t\t\t\t\t\t\tif (typeof column.selector.class !== 'undefined') {\r\n\t\t\t\t\t\t\t\t$(chk).addClass(column.selector.class);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t$(td).children().html(chk);\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\tif (options.layout.header) {\r\n\t\t\t\t\tinitCheckbox($(datatable.tableHead).find('.' + pfx + 'datatable-row').first());\r\n\t\t\t\t}\r\n\t\t\t\tif (options.layout.footer) {\r\n\t\t\t\t\tinitCheckbox($(datatable.tableFoot).find('.' + pfx + 'datatable-row').first());\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tmaxWidthList: {},\r\n\r\n\t\t\t/**\r\n\t\t\t * Adjust width to match container size\r\n\t\t\t */\r\n\t\t\tadjustCellsWidth: function() {\r\n\t\t\t\t// get table width\r\n\t\t\t\tvar containerWidth = $(datatable.tableBody).innerWidth() - Plugin.iconOffset;\r\n\r\n\t\t\t\t// get total number of columns\r\n\t\t\t\tvar columns = $(datatable.tableHead).\r\n\t\t\t\t\tfind('.' + pfx + 'datatable-row:first-child').\r\n\t\t\t\t\tfind('.' + pfx + 'datatable-cell').\r\n\t\t\t\t\t// exclude expand icon\r\n\t\t\t\t\tnot('.' + pfx + 'datatable-toggle-detail').\r\n\t\t\t\t\tnot(':hidden').length;\r\n\r\n\t\t\t\tif (columns > 0) {\r\n\t\t\t\t\t//  remove reserved sort icon width\r\n\t\t\t\t\tcontainerWidth = containerWidth - (Plugin.iconOffset * columns);\r\n\t\t\t\t\tvar minWidth = Math.floor(containerWidth / columns);\r\n\r\n\t\t\t\t\t// minimum width\r\n\t\t\t\t\tif (minWidth <= Plugin.cellOffset) {\r\n\t\t\t\t\t\tminWidth = Plugin.cellOffset;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$(datatable.table).find('.' + pfx + 'datatable-row').\r\n\t\t\t\t\t\t\tfind('.' + pfx + 'datatable-cell').\r\n\t\t\t\t\t\t\t// exclude expand icon\r\n\t\t\t\t\t\t\tnot('.' + pfx + 'datatable-toggle-detail').\r\n\t\t\t\t\t\t\tnot(':hidden').each(function(tdi, td) {\r\n\r\n\t\t\t\t\t\tvar width = minWidth;\r\n\t\t\t\t\t\tvar dataWidth = $(td).data('width');\r\n\r\n\t\t\t\t\t\tif (typeof dataWidth !== 'undefined') {\r\n\t\t\t\t\t\t\tif (dataWidth === 'auto') {\r\n\t\t\t\t\t\t\t\tvar field = $(td).data('field');\r\n\t\t\t\t\t\t\t\tif (Plugin.maxWidthList[field]) {\r\n\t\t\t\t\t\t\t\t\twidth = Plugin.maxWidthList[field];\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\tvar cells = $(datatable.table).find('.' + pfx + 'datatable-cell[data-field=\"' + field + '\"]');\r\n\t\t\t\t\t\t\t\t\twidth = Plugin.maxWidthList[field] = Math.max.apply(null,\r\n\t\t\t\t\t\t\t\t\t\t\t$(cells).map(function() {\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn $(this).outerWidth();\r\n\t\t\t\t\t\t\t\t\t\t\t}).get());\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\telse {\r\n\t\t\t\t\t\t\t\twidth = dataWidth;\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$(td).children().css('width', Math.ceil(width));\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 * Adjust height to match container size\r\n\t\t\t */\r\n\t\t\tadjustCellsHeight: function() {\r\n\t\t\t\t$.each($(datatable.table).children(), function(part, tablePart) {\r\n\t\t\t\t\tvar totalRows = $(tablePart).find('.' + pfx + 'datatable-row').first().parent().find('.' + pfx + 'datatable-row').length;\r\n\t\t\t\t\tfor (var i = 1; i <= totalRows; i++) {\r\n\t\t\t\t\t\tvar rows = $(tablePart).find('.' + pfx + 'datatable-row:nth-child(' + i + ')');\r\n\t\t\t\t\t\tif ($(rows).length > 0) {\r\n\t\t\t\t\t\t\tvar maxHeight = Math.max.apply(null, $(rows).map(function() {\r\n\t\t\t\t\t\t\t\treturn $(this).outerHeight();\r\n\t\t\t\t\t\t\t}).get());\r\n\t\t\t\t\t\t\t$(rows).css('height', Math.ceil(maxHeight));\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 * Setup table DOM and classes\r\n\t\t\t */\r\n\t\t\tsetupDOM: function(table) {\r\n\t\t\t\t// set table classes\r\n\t\t\t\t$(table).find('> thead').addClass(pfx + 'datatable-head');\r\n\t\t\t\t$(table).find('> tbody').addClass(pfx + 'datatable-body');\r\n\t\t\t\t$(table).find('> tfoot').addClass(pfx + 'datatable-foot');\r\n\t\t\t\t$(table).find('tr').addClass(pfx + 'datatable-row');\r\n\t\t\t\t$(table).find('tr > th, tr > td').addClass(pfx + 'datatable-cell');\r\n\t\t\t\t$(table).find('tr > th, tr > td').each(function(i, td) {\r\n\t\t\t\t\tif ($(td).find('span').length === 0) {\r\n\t\t\t\t\t\t$(td).wrapInner($('<span/>').css('width', Plugin.cellOffset));\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 scrollbar\r\n\t\t\t * @returns {{tableLocked: null, init: init, onScrolling:\r\n\t\t\t *     onScrolling}}\r\n\t\t\t */\r\n\t\t\tscrollbar: function() {\r\n\t\t\t\tvar scroll = {\r\n\t\t\t\t\tscrollable: null,\r\n\t\t\t\t\ttableLocked: null,\r\n\t\t\t\t\tinitPosition: null,\r\n\t\t\t\t\tinit: function() {\r\n\t\t\t\t\t\tvar screen = util.getViewPort().width;\r\n\t\t\t\t\t\t// setup scrollable datatable\r\n\t\t\t\t\t\tif (options.layout.scroll) {\r\n\t\t\t\t\t\t\t// add scrollable datatable class\r\n\t\t\t\t\t\t\t$(datatable.wrap).addClass(pfx + 'datatable-scroll');\r\n\r\n\t\t\t\t\t\t\tvar scrollable = $(datatable.tableBody).find('.' + pfx + 'datatable-lock-scroll');\r\n\r\n\t\t\t\t\t\t\t// check if scrollable area have rows\r\n\t\t\t\t\t\t\tif ($(scrollable).find('.' + pfx + 'datatable-row').length > 0 && $(scrollable).length > 0) {\r\n\t\t\t\t\t\t\t\tscroll.scrollHead = $(datatable.tableHead).find('> .' + pfx + 'datatable-lock-scroll > .' + pfx + 'datatable-row');\r\n\t\t\t\t\t\t\t\tscroll.scrollFoot = $(datatable.tableFoot).find('> .' + pfx + 'datatable-lock-scroll > .' + pfx + 'datatable-row');\r\n\t\t\t\t\t\t\t\tscroll.tableLocked = $(datatable.tableBody).find('.' + pfx + 'datatable-lock:not(.' + pfx + 'datatable-lock-scroll)');\r\n\t\t\t\t\t\t\t\tif (Plugin.getOption('layout.customScrollbar') && util.detectIE() != 10 && screen > util.getBreakpoint('lg')) {\r\n\t\t\t\t\t\t\t\t\tscroll.initCustomScrollbar(scrollable[0]);\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tscroll.initDefaultScrollbar(scrollable);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else if ($(datatable.tableBody).find('.' + pfx + 'datatable-row').length > 0) {\r\n\t\t\t\t\t\t\t\tscroll.scrollHead = $(datatable.tableHead).find('> .' + pfx + 'datatable-row');\r\n\t\t\t\t\t\t\t\tscroll.scrollFoot = $(datatable.tableFoot).find('> .' + pfx + 'datatable-row');\r\n\t\t\t\t\t\t\t\tif (Plugin.getOption('layout.customScrollbar') && util.detectIE() != 10 && screen > util.getBreakpoint('lg')) {\r\n\t\t\t\t\t\t\t\t\tscroll.initCustomScrollbar(datatable.tableBody);\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tscroll.initDefaultScrollbar(datatable.tableBody);\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\tinitDefaultScrollbar: function(scrollable) {\r\n\t\t\t\t\t\t// get initial scroll position\r\n\t\t\t\t\t\tscroll.initPosition = $(scrollable).scrollLeft();\r\n\t\t\t\t\t\t$(scrollable).css('overflow-y', 'auto').off().on('scroll', scroll.onScrolling);\r\n\t\t\t\t\t\t$(scrollable).css('overflow-x', 'auto');\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonScrolling: function(e) {\r\n\t\t\t\t\t\tvar left = $(this).scrollLeft();\r\n\t\t\t\t\t\tvar top = $(this).scrollTop();\r\n\t\t\t\t\t\tif (util.isRTL()) {\r\n\t\t\t\t\t\t\t// deduct initial position for RTL\r\n\t\t\t\t\t\t\tleft = left - scroll.initPosition;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t$(scroll.scrollHead).css('left', -left);\r\n\t\t\t\t\t\t$(scroll.scrollFoot).css('left', -left);\r\n\t\t\t\t\t\t$(scroll.tableLocked).each(function(i, table) {\r\n\t\t\t\t\t\t\tif (Plugin.isLocked()) {\r\n\t\t\t\t\t\t\t\t// scrollbar offset\r\n\t\t\t\t\t\t\t\ttop -= 1;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t$(table).css('top', -top);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t},\r\n\t\t\t\t\tinitCustomScrollbar: function(scrollable) {\r\n\t\t\t\t\t\tscroll.scrollable = scrollable;\r\n\t\t\t\t\t\t// create a new instance for table body with scrollbar\r\n\t\t\t\t\t\tPlugin.initScrollbar(scrollable);\r\n\t\t\t\t\t\t// get initial scroll position\r\n\t\t\t\t\t\tscroll.initPosition = $(scrollable).scrollLeft();\r\n\t\t\t\t\t\t$(scrollable).off().on('scroll', scroll.onScrolling);\r\n\t\t\t\t\t},\r\n\t\t\t\t};\r\n\t\t\t\tscroll.init();\r\n\t\t\t\treturn scroll;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Init custom scrollbar and reset position\r\n\t\t\t * @param element\r\n\t\t\t * @param options\r\n\t\t\t */\r\n\t\t\tinitScrollbar: function(element, options) {\r\n\t\t\t\tif (!element || !element.nodeName) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\t$(datatable.tableBody).css('overflow', '');\r\n\t\t\t\tvar ps = $(element).data('ps');\r\n\t\t\t\tif (util.hasClass(element, 'ps') && typeof ps !== 'undefined') {\r\n\t\t\t\t\tps.update();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tps = new PerfectScrollbar(element, Object.assign({}, {\r\n\t\t\t\t\t\twheelSpeed: 0.5,\r\n\t\t\t\t\t\tswipeEasing: true,\r\n\t\t\t\t\t\t// wheelPropagation: false,\r\n\t\t\t\t\t\tminScrollbarLength: 40,\r\n\t\t\t\t\t\tmaxScrollbarLength: 300,\r\n\t\t\t\t\t\tsuppressScrollX: Plugin.getOption('rows.autoHide') && !Plugin.isLocked()\r\n\t\t\t\t\t}, options));\r\n\t\t\t\t\t$(element).data('ps', ps);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// reset perfect scrollbar on resize\r\n\t\t\t\t$(window).resize(function() {\r\n\t\t\t\t\tps.update();\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 title from options.columns settings\r\n\t\t\t */\r\n\t\t\tsetHeadTitle: function(tablePart) {\r\n\t\t\t\tif (typeof tablePart === 'undefined') tablePart = datatable.tableHead;\r\n\t\t\t\ttablePart = $(tablePart)[0];\r\n\t\t\t\tvar columns = options.columns;\r\n\t\t\t\tvar row = tablePart.getElementsByTagName('tr')[0];\r\n\t\t\t\tvar ths = tablePart.getElementsByTagName('td');\r\n\r\n\t\t\t\tif (typeof row === 'undefined') {\r\n\t\t\t\t\trow = document.createElement('tr');\r\n\t\t\t\t\ttablePart.appendChild(row);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$.each(columns, function(i, column) {\r\n\t\t\t\t\tvar th = ths[i];\r\n\t\t\t\t\tif (typeof th === 'undefined') {\r\n\t\t\t\t\t\tth = document.createElement('th');\r\n\t\t\t\t\t\trow.appendChild(th);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// set column title\r\n\t\t\t\t\tif (typeof column['title'] !== 'undefined') {\r\n\t\t\t\t\t\tth.innerHTML = column.title;\r\n\t\t\t\t\t\tth.setAttribute('data-field', column.field);\r\n\t\t\t\t\t\tutil.addClass(th, column.class);\r\n\t\t\t\t\t\t// set disable autoHide or force enable\r\n\t\t\t\t\t\tif (typeof column.autoHide !== 'undefined') {\r\n\t\t\t\t\t\t\tif (column.autoHide !== true) {\r\n\t\t\t\t\t\t\t\tth.setAttribute('data-autohide-disabled', column.autoHide);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tth.setAttribute('data-autohide-enabled', column.autoHide);\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$(th).data(column);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// set header attr option\r\n\t\t\t\t\tif (typeof column.attr !== 'undefined') {\r\n\t\t\t\t\t\t$.each(column.attr, function(key, val) {\r\n\t\t\t\t\t\t\tth.setAttribute(key, val);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// apply text align to thead/tfoot\r\n\t\t\t\t\tif (typeof column.textAlign !== 'undefined') {\r\n\t\t\t\t\t\tvar align = typeof datatable.textAlign[column.textAlign] !== 'undefined' ? datatable.textAlign[column.textAlign] : '';\r\n\t\t\t\t\t\tutil.addClass(th, align);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tPlugin.setupDOM(tablePart);\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Initiate to get remote or local data via ajax\r\n\t\t\t */\r\n\t\t\tdataRender: function(action) {\r\n\t\t\t\t$(datatable.table).siblings('.' + pfx + 'datatable-pager').removeClass(pfx + 'datatable-paging-loaded');\r\n\r\n\t\t\t\tvar buildMeta = function() {\r\n\t\t\t\t\tdatatable.dataSet = datatable.dataSet || [];\r\n\t\t\t\t\tPlugin.localDataUpdate();\r\n\t\t\t\t\t// local pagination meta\r\n\t\t\t\t\tvar meta = Plugin.getDataSourceParam('pagination');\r\n\t\t\t\t\tif (meta.perpage === 0) {\r\n\t\t\t\t\t\tmeta.perpage = options.data.pageSize || 10;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tmeta.total = datatable.dataSet.length;\r\n\t\t\t\t\tvar start = Math.max(meta.perpage * (meta.page - 1), 0);\r\n\t\t\t\t\tvar end = Math.min(start + meta.perpage, meta.total);\r\n\t\t\t\t\tdatatable.dataSet = $(datatable.dataSet).slice(start, end);\r\n\t\t\t\t\treturn meta;\r\n\t\t\t\t};\r\n\r\n\t\t\t\tvar afterGetData = function(result) {\r\n\t\t\t\t\tvar localPagingCallback = function(ctx, meta) {\r\n\t\t\t\t\t\tif (!$(ctx.pager).hasClass(pfx + 'datatable-paging-loaded')) {\r\n\t\t\t\t\t\t\t$(ctx.pager).remove();\r\n\t\t\t\t\t\t\tctx.init(meta);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t$(ctx.pager).off().on(pfx + 'datatable-on-goto-page', function(e) {\r\n\t\t\t\t\t\t\t$(ctx.pager).remove();\r\n\t\t\t\t\t\t\tctx.init(meta);\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tvar start = Math.max(meta.perpage * (meta.page - 1), 0);\r\n\t\t\t\t\t\tvar end = Math.min(start + meta.perpage, meta.total);\r\n\r\n\t\t\t\t\t\tPlugin.localDataUpdate();\r\n\t\t\t\t\t\tdatatable.dataSet = $(datatable.dataSet).slice(start, end);\r\n\r\n\t\t\t\t\t\t// insert data into table content\r\n\t\t\t\t\t\tPlugin.insertData();\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t$(datatable.wrap).removeClass(pfx + 'datatable-error');\r\n\t\t\t\t\t// pagination enabled\r\n\t\t\t\t\tif (options.pagination) {\r\n\t\t\t\t\t\tif (options.data.serverPaging && options.data.type !== 'local') {\r\n\t\t\t\t\t\t\t// server pagination\r\n\t\t\t\t\t\t\tvar serverMeta = Plugin.getObject('meta', result || null);\r\n\t\t\t\t\t\t\tif (serverMeta !== null) {\r\n\t\t\t\t\t\t\t\tPlugin.pagingObject = Plugin.paging(serverMeta);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t// no meta object from server response, fallback to local pagination\r\n\t\t\t\t\t\t\t\tPlugin.pagingObject = Plugin.paging(buildMeta(), localPagingCallback);\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\t// local pagination can be used by remote data also\r\n\t\t\t\t\t\t\tPlugin.pagingObject = Plugin.paging(buildMeta(), localPagingCallback);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// pagination is disabled\r\n\t\t\t\t\t\tPlugin.localDataUpdate();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// insert data into table content\r\n\t\t\t\t\tPlugin.insertData();\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// get local datasource\r\n\t\t\t\tif (options.data.type === 'local'\r\n\t\t\t\t\t// for remote json datasource\r\n\t\t\t\t\t// || typeof options.data.source.read === 'undefined' && datatable.dataSet !== null\r\n\t\t\t\t\t// for remote datasource, server sorting is disabled and data already received from remote\r\n\t\t\t\t\t|| options.data.serverSorting === false && action === 'sort'\r\n\t\t\t\t\t|| options.data.serverFiltering === false && action === 'search'\r\n\t\t\t\t) {\r\n\t\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\t\tPlugin.setAutoColumns();\r\n\t\t\t\t\t\tafterGetData();\r\n\t\t\t\t\t});\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// getting data from remote only\r\n\t\t\t\tPlugin.getData().done(afterGetData);\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Process ajax data\r\n\t\t\t */\r\n\t\t\tinsertData: function() {\r\n\t\t\t\tdatatable.dataSet = datatable.dataSet || [];\r\n\t\t\t\tvar params = Plugin.getDataSourceParam();\r\n\r\n\t\t\t\t// get row attributes\r\n\t\t\t\tvar pagination = params.pagination;\r\n\t\t\t\tvar start = (Math.max(pagination.page, 1) - 1) * pagination.perpage;\r\n\t\t\t\tvar end = Math.min(pagination.page, pagination.pages) * pagination.perpage;\r\n\t\t\t\tvar rowProps = {};\r\n\t\t\t\tif (typeof options.data.attr.rowProps !== 'undefined' && options.data.attr.rowProps.length) {\r\n\t\t\t\t\trowProps = options.data.attr.rowProps.slice(start, end);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar tableBody = document.createElement('tbody');\r\n\t\t\t\ttableBody.style.visibility = 'hidden';\r\n\t\t\t\tvar colLength = options.columns.length;\r\n\r\n\t\t\t\t$.each(datatable.dataSet, function(rowIndex, row) {\r\n\t\t\t\t\tvar tr = document.createElement('tr');\r\n\t\t\t\t\ttr.setAttribute('data-row', rowIndex);\r\n\t\t\t\t\t// keep data object to row\r\n\t\t\t\t\t$(tr).data('obj', row);\r\n\r\n\t\t\t\t\tif (typeof rowProps[rowIndex] !== 'undefined') {\r\n\t\t\t\t\t\t$.each(rowProps[rowIndex], function() {\r\n\t\t\t\t\t\t\ttr.setAttribute(this.name, this.value);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar cellIndex = 0;\r\n\t\t\t\t\tvar tds = [];\r\n\t\t\t\t\tfor (var a = 0; a < colLength; a += 1) {\r\n\t\t\t\t\t\tvar column = options.columns[a];\r\n\t\t\t\t\t\tvar classes = [];\r\n\t\t\t\t\t\t// add sorted class to cells\r\n\t\t\t\t\t\tif (Plugin.getObject('sort.field', params) === column.field) {\r\n\t\t\t\t\t\t\tclasses.push(pfx + 'datatable-cell-sorted');\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// apply text align\r\n\t\t\t\t\t\tif (typeof column.textAlign !== 'undefined') {\r\n\t\t\t\t\t\t\tvar align = typeof datatable.textAlign[column.textAlign] !== 'undefined' ? datatable.textAlign[column.textAlign] : '';\r\n\t\t\t\t\t\t\tclasses.push(align);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// var classAttr = '';\r\n\t\t\t\t\t\tif (typeof column.class !== 'undefined') {\r\n\t\t\t\t\t\t\tclasses.push(column.class);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar td = document.createElement('td');\r\n\t\t\t\t\t\tutil.addClass(td, classes.join(' '));\r\n\t\t\t\t\t\ttd.setAttribute('data-field', column.field);\r\n\t\t\t\t\t\t// set disable autoHide or force enable\r\n\t\t\t\t\t\tif (typeof column.autoHide !== 'undefined') {\r\n\t\t\t\t\t\t\tif (column.autoHide !== true) {\r\n\t\t\t\t\t\t\t\ttd.setAttribute('data-autohide-disabled', column.autoHide);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\ttd.setAttribute('data-autohide-enabled', column.autoHide);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\ttd.innerHTML = Plugin.getObject(column.field, row);\r\n\t\t\t\t\t\ttd.setAttribute('aria-label', Plugin.getObject(column.field, row));\r\n\t\t\t\t\t\ttr.appendChild(td);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttableBody.appendChild(tr);\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// display no records message\r\n\t\t\t\tif (datatable.dataSet.length === 0) {\r\n\t\t\t\t\tvar errorSpan = document.createElement('span');\r\n\t\t\t\t\tutil.addClass(errorSpan, pfx + 'datatable-error');\r\n\t\t\t\t\terrorSpan.innerHTML = Plugin.getOption('translate.records.noRecords');\r\n\t\t\t\t\ttableBody.appendChild(errorSpan);\r\n\t\t\t\t\t$(datatable.wrap).addClass(pfx + 'datatable-error ' + pfx + 'datatable-loaded');\r\n\t\t\t\t\tPlugin.spinnerCallback(false);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// replace existing table body\r\n\t\t\t\t$(datatable.tableBody).replaceWith(tableBody);\r\n\t\t\t\tdatatable.tableBody = tableBody;\r\n\r\n\t\t\t\t// layout update\r\n\t\t\t\tPlugin.setupDOM(datatable.table);\r\n\t\t\t\tPlugin.setupCellField([datatable.tableBody]);\r\n\t\t\t\tPlugin.setupTemplateCell(datatable.tableBody);\r\n\t\t\t\tPlugin.layoutUpdate();\r\n\t\t\t},\r\n\r\n\t\t\tupdateTableComponents: function() {\r\n\t\t\t\tdatatable.tableHead = $(datatable.table).children('thead').get(0);\r\n\t\t\t\tdatatable.tableBody = $(datatable.table).children('tbody').get(0);\r\n\t\t\t\tdatatable.tableFoot = $(datatable.table).children('tfoot').get(0);\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Call ajax for raw JSON data\r\n\t\t\t */\r\n\t\t\tgetData: function() {\r\n\t\t\t\t// Plugin.spinnerCallback(true);\r\n\r\n\t\t\t\tvar ajaxParams = {\r\n\t\t\t\t\tdataType: 'json',\r\n\t\t\t\t\tmethod: 'POST',\r\n\t\t\t\t\tdata: {},\r\n\t\t\t\t\ttimeout: Plugin.getOption('data.source.read.timeout') || 30000,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif (options.data.type === 'local') {\r\n\t\t\t\t\tajaxParams.url = options.data.source;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (options.data.type === 'remote') {\r\n\t\t\t\t\tvar data = Plugin.getDataSourceParam();\r\n\t\t\t\t\t// remove if server params is not enabled\r\n\t\t\t\t\tif (!Plugin.getOption('data.serverPaging')) {\r\n\t\t\t\t\t\tdelete data['pagination'];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (!Plugin.getOption('data.serverSorting')) {\r\n\t\t\t\t\t\tdelete data['sort'];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tajaxParams.data = $.extend({}, ajaxParams.data, Plugin.getOption('data.source.read.params'), data);\r\n\t\t\t\t\tajaxParams = $.extend({}, ajaxParams, Plugin.getOption('data.source.read'));\r\n\r\n\t\t\t\t\tif (typeof ajaxParams.url !== 'string') ajaxParams.url = Plugin.getOption('data.source.read');\r\n\t\t\t\t\tif (typeof ajaxParams.url !== 'string') ajaxParams.url = Plugin.getOption('data.source');\r\n\t\t\t\t\t// ajaxParams.data = $.extend(ajaxParams.data, data.pagination);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn $.ajax(ajaxParams).done(function(response, textStatus, jqXHR) {\r\n\t\t\t\t\tdatatable.lastResponse = response;\r\n\t\t\t\t\t// extendible data map callback for custom datasource\r\n\t\t\t\t\tdatatable.dataSet = datatable.originalDataSet = Plugin.dataMapCallback(response);\r\n\t\t\t\t\tPlugin.setAutoColumns();\r\n\t\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-ajax-done', [datatable.dataSet]);\r\n\t\t\t\t}).fail(function(jqXHR, textStatus, errorThrown) {\r\n\t\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-ajax-fail', [jqXHR]);\r\n\t\t\t\t\t$(datatable.tableBody).html($('<span/>').addClass(pfx + 'datatable-error').html(Plugin.getOption('translate.records.noRecords')));\r\n\t\t\t\t\t$(datatable.wrap).addClass(pfx + 'datatable-error ' + pfx + 'datatable-loaded');\r\n\t\t\t\t\tPlugin.spinnerCallback(false);\r\n\t\t\t\t}).always(function() {\r\n\t\t\t\t});\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Pagination object\r\n\t\t\t * @param meta if null, local pagination, otherwise remote\r\n\t\t\t *     pagination\r\n\t\t\t * @param callback for update data when navigating page\r\n\t\t\t */\r\n\t\t\tpaging: function(meta, callback) {\r\n\t\t\t\tvar pg = {\r\n\t\t\t\t\tmeta: null,\r\n\t\t\t\t\tpager: null,\r\n\t\t\t\t\tpaginateEvent: null,\r\n\t\t\t\t\tpagerLayout: {pagination: null, info: null},\r\n\t\t\t\t\tcallback: null,\r\n\t\t\t\t\tinit: function(meta) {\r\n\t\t\t\t\t\tpg.meta = meta;\r\n\r\n\t\t\t\t\t\t// parse pagination meta to integer\r\n\t\t\t\t\t\tpg.meta.page = parseInt(pg.meta.page);\r\n\t\t\t\t\t\tpg.meta.pages = parseInt(pg.meta.pages);\r\n\t\t\t\t\t\tpg.meta.perpage = parseInt(pg.meta.perpage);\r\n\t\t\t\t\t\tpg.meta.total = parseInt(pg.meta.total);\r\n\r\n\t\t\t\t\t\t// always recount total pages\r\n\t\t\t\t\t\tpg.meta.pages = Math.max(Math.ceil(pg.meta.total / pg.meta.perpage), 1);\r\n\r\n\t\t\t\t\t\t// current page must be not over than total pages\r\n\t\t\t\t\t\tif (pg.meta.page > pg.meta.pages) pg.meta.page = pg.meta.pages;\r\n\r\n\t\t\t\t\t\t// set unique event name between tables\r\n\t\t\t\t\t\tpg.paginateEvent = Plugin.getTablePrefix('paging');\r\n\r\n\t\t\t\t\t\tpg.pager = $(datatable.table).siblings('.' + pfx + 'datatable-pager');\r\n\t\t\t\t\t\tif ($(pg.pager).hasClass(pfx + 'datatable-paging-loaded')) return;\r\n\r\n\t\t\t\t\t\t// if class .'+pfx+'datatable-paging-loaded not exist, recreate pagination\r\n\t\t\t\t\t\t$(pg.pager).remove();\r\n\r\n\t\t\t\t\t\t// if no pages available\r\n\t\t\t\t\t\tif (pg.meta.pages === 0) return;\r\n\r\n\t\t\t\t\t\t// update datasource params\r\n\t\t\t\t\t\tPlugin.setDataSourceParam('pagination', {\r\n\t\t\t\t\t\t\tpage: pg.meta.page,\r\n\t\t\t\t\t\t\tpages: pg.meta.pages,\r\n\t\t\t\t\t\t\tperpage: pg.meta.perpage,\r\n\t\t\t\t\t\t\ttotal: pg.meta.total,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t// default callback function, contains remote pagination handler\r\n\t\t\t\t\t\tpg.callback = pg.serverCallback;\r\n\t\t\t\t\t\t// custom callback function\r\n\t\t\t\t\t\tif (typeof callback === 'function') pg.callback = callback;\r\n\r\n\t\t\t\t\t\tpg.addPaginateEvent();\r\n\t\t\t\t\t\tpg.populate();\r\n\r\n\t\t\t\t\t\tpg.meta.page = Math.max(pg.meta.page || 1, pg.meta.page);\r\n\r\n\t\t\t\t\t\t$(datatable).trigger(pg.paginateEvent, pg.meta);\r\n\r\n\t\t\t\t\t\tpg.pagingBreakpoint.call();\r\n\t\t\t\t\t\t$(window).resize(pg.pagingBreakpoint);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tserverCallback: function(ctx, meta) {\r\n\t\t\t\t\t\tPlugin.dataRender();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tpopulate: function() {\r\n\t\t\t\t\t\tdatatable.dataSet = datatable.dataSet || [];\r\n\t\t\t\t\t\t// no records available\r\n\t\t\t\t\t\tif (datatable.dataSet.length === 0) return;\r\n\r\n\t\t\t\t\t\tvar icons = Plugin.getOption('layout.icons.pagination');\r\n\t\t\t\t\t\tvar title = Plugin.getOption('translate.toolbar.pagination.items.default');\r\n\t\t\t\t\t\t// pager root element\r\n\t\t\t\t\t\tpg.pager = $('<div/>').addClass(pfx + 'datatable-pager ' + pfx + 'datatable-paging-loaded');\r\n\t\t\t\t\t\t// numbering links\r\n\t\t\t\t\t\tvar pagerNumber = $('<ul/>').addClass(pfx + 'datatable-pager-nav my-2 mb-sm-0');\r\n\t\t\t\t\t\tpg.pagerLayout['pagination'] = pagerNumber;\r\n\r\n\t\t\t\t\t\t// pager first/previous button\r\n\t\t\t\t\t\t$('<li/>').\r\n\t\t\t\t\t\t\tappend($('<a/>').\r\n\t\t\t\t\t\t\t\tattr('title', title.first).\r\n\t\t\t\t\t\t\t\taddClass(pfx + 'datatable-pager-link ' + pfx + 'datatable-pager-link-first').\r\n\t\t\t\t\t\t\t\tappend($('<i/>').addClass(icons.first)).\r\n\t\t\t\t\t\t\t\ton('click', pg.gotoMorePage).\r\n\t\t\t\t\t\t\t\tattr('data-page', 1)).\r\n\t\t\t\t\t\t\tappendTo(pagerNumber);\r\n\t\t\t\t\t\t$('<li/>').\r\n\t\t\t\t\t\t\tappend($('<a/>').\r\n\t\t\t\t\t\t\t\tattr('title', title.prev).\r\n\t\t\t\t\t\t\t\taddClass(pfx + 'datatable-pager-link ' + pfx + 'datatable-pager-link-prev').\r\n\t\t\t\t\t\t\t\tappend($('<i/>').addClass(icons.prev)).\r\n\t\t\t\t\t\t\t\ton('click', pg.gotoMorePage)).\r\n\t\t\t\t\t\t\tappendTo(pagerNumber);\r\n\r\n\t\t\t\t\t\t$('<li/>').append($('<input/>').attr('type', 'text').addClass(pfx + 'datatable-pager-input form-control').attr('title', title.input).on('keyup', function() {\r\n\t\t\t\t\t\t\t// on keyup update [data-page]\r\n\t\t\t\t\t\t\t$(this).attr('data-page', Math.abs($(this).val()));\r\n\t\t\t\t\t\t}).on('keypress', function(e) {\r\n\t\t\t\t\t\t\t// on keypressed enter button\r\n\t\t\t\t\t\t\tif (e.which === 13) pg.gotoMorePage(e);\r\n\t\t\t\t\t\t})).appendTo(pagerNumber);\r\n\r\n\t\t\t\t\t\tvar pagesNumber = Plugin.getOption('toolbar.items.pagination.pages.desktop.pagesNumber');\r\n\t\t\t\t\t\tvar end = Math.ceil(pg.meta.page / pagesNumber) * pagesNumber;\r\n\t\t\t\t\t\tvar start = end - pagesNumber;\r\n\t\t\t\t\t\tif (end > pg.meta.pages) {\r\n\t\t\t\t\t\t\tend = pg.meta.pages;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// keep pagination 1 if there is no records\r\n\t\t\t\t\t\tif (start < 0) {\r\n\t\t\t\t\t\t\tstart = 0;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tfor (var x = start; x < (end || 1); x++) {\r\n\t\t\t\t\t\t\tvar pageNumber = x + 1;\r\n\t\t\t\t\t\t\t$('<li/>').\r\n\t\t\t\t\t\t\t\tappend($('<a/>').\r\n\t\t\t\t\t\t\t\t\taddClass(pfx + 'datatable-pager-link ' + pfx + 'datatable-pager-link-number').\r\n\t\t\t\t\t\t\t\t\ttext(pageNumber).\r\n\t\t\t\t\t\t\t\t\tattr('data-page', pageNumber).\r\n\t\t\t\t\t\t\t\t\tattr('title', pageNumber).\r\n\t\t\t\t\t\t\t\t\ton('click', pg.gotoPage)).\r\n\t\t\t\t\t\t\t\tappendTo(pagerNumber);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// pager next/last button\r\n\t\t\t\t\t\t$('<li/>').\r\n\t\t\t\t\t\t\tappend($('<a/>').\r\n\t\t\t\t\t\t\t\tattr('title', title.next).\r\n\t\t\t\t\t\t\t\taddClass(pfx + 'datatable-pager-link ' + pfx + 'datatable-pager-link-next').\r\n\t\t\t\t\t\t\t\tappend($('<i/>').addClass(icons.next)).\r\n\t\t\t\t\t\t\t\ton('click', pg.gotoMorePage)).\r\n\t\t\t\t\t\t\tappendTo(pagerNumber);\r\n\t\t\t\t\t\t$('<li/>').\r\n\t\t\t\t\t\t\tappend($('<a/>').\r\n\t\t\t\t\t\t\t\tattr('title', title.last).\r\n\t\t\t\t\t\t\t\taddClass(pfx + 'datatable-pager-link ' + pfx + 'datatable-pager-link-last').\r\n\t\t\t\t\t\t\t\tappend($('<i/>').addClass(icons.last)).\r\n\t\t\t\t\t\t\t\ton('click', pg.gotoMorePage).\r\n\t\t\t\t\t\t\t\tattr('data-page', pg.meta.pages)).\r\n\t\t\t\t\t\t\tappendTo(pagerNumber);\r\n\r\n\t\t\t\t\t\t// page info\r\n\t\t\t\t\t\tif (Plugin.getOption('toolbar.items.info')) {\r\n\t\t\t\t\t\t\tpg.pagerLayout['info'] = $('<div/>').addClass(pfx + 'datatable-pager-info my-2 mb-sm-0').append($('<span/>').addClass(pfx + 'datatable-pager-detail'));\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t$.each(Plugin.getOption('toolbar.layout'), function(i, layout) {\r\n\t\t\t\t\t\t\t$(pg.pagerLayout[layout]).appendTo(pg.pager);\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t// page size select\r\n\t\t\t\t\t\tvar pageSizeSelect = $('<select/>').\r\n\t\t\t\t\t\t\taddClass('selectpicker ' + pfx + 'datatable-pager-size').\r\n\t\t\t\t\t\t\tattr('title', Plugin.getOption('translate.toolbar.pagination.items.default.select')).\r\n\t\t\t\t\t\t\tattr('data-width', '60px').\r\n\t\t\t\t\t\t\tattr('data-container', 'body').\r\n\t\t\t\t\t\t\tval(pg.meta.perpage).\r\n\t\t\t\t\t\t\ton('change', pg.updatePerpage).\r\n\t\t\t\t\t\t\tprependTo(pg.pagerLayout['info']);\r\n\r\n\t\t\t\t\t\tvar pageSizes = Plugin.getOption('toolbar.items.pagination.pageSizeSelect');\r\n\t\t\t\t\t\t// default value here, to fix override option by user\r\n\t\t\t\t\t\tif (pageSizes.length == 0) pageSizes = [5, 10, 20, 30, 50, 100];\r\n\t\t\t\t\t\t$.each(pageSizes, function(i, size) {\r\n\t\t\t\t\t\t\tvar display = size;\r\n\t\t\t\t\t\t\tif (size === -1) display = Plugin.getOption('translate.toolbar.pagination.items.default.all');\r\n\t\t\t\t\t\t\t$('<option/>').attr('value', size).html(display).appendTo(pageSizeSelect);\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t// init selectpicker to dropdown\r\n\t\t\t\t\t\t$(datatable).ready(function() {\r\n\t\t\t\t\t\t\t$('.selectpicker').\r\n\t\t\t\t\t\t\t\tselectpicker().\r\n\t\t\t\t\t\t\t\ton('hide.bs.select', function() {\r\n\t\t\t\t\t\t\t\t\t// fix dropup arrow icon on hide\r\n\t\t\t\t\t\t\t\t\t$(this).closest('.bootstrap-select').removeClass('dropup');\r\n\t\t\t\t\t\t\t\t}).\r\n\t\t\t\t\t\t\t\tsiblings('.dropdown-toggle').\r\n\t\t\t\t\t\t\t\tattr('title', Plugin.getOption('translate.toolbar.pagination.items.default.select'));\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tpg.paste();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tpaste: function() {\r\n\t\t\t\t\t\t// insert pagination based on placement position, top|bottom\r\n\t\t\t\t\t\t$.each($.unique(Plugin.getOption('toolbar.placement')),\r\n\t\t\t\t\t\t\tfunction(i, position) {\r\n\t\t\t\t\t\t\t\tif (position === 'bottom') {\r\n\t\t\t\t\t\t\t\t\t$(pg.pager).clone(true).insertAfter(datatable.table);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif (position === 'top') {\r\n\t\t\t\t\t\t\t\t\t// pager top need some extra space\r\n\t\t\t\t\t\t\t\t\t$(pg.pager).clone(true).addClass(pfx + 'datatable-pager-top').insertBefore(datatable.table);\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},\r\n\t\t\t\t\tgotoMorePage: function(e) {\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t// $(this) is a link of .'+pfx+'datatable-pager-link\r\n\r\n\t\t\t\t\t\tif ($(this).attr('disabled') === 'disabled') return false;\r\n\r\n\t\t\t\t\t\tvar page = $(this).attr('data-page');\r\n\r\n\t\t\t\t\t\t// event from text input\r\n\t\t\t\t\t\tif (typeof page === 'undefined') {\r\n\t\t\t\t\t\t\tpage = $(e.target).attr('data-page');\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tpg.openPage(parseInt(page));\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgotoPage: function(e) {\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t// prevent from click same page number\r\n\t\t\t\t\t\tif ($(this).hasClass(pfx + 'datatable-pager-link-active')) return;\r\n\r\n\t\t\t\t\t\tpg.openPage(parseInt($(this).data('page')));\r\n\t\t\t\t\t},\r\n\t\t\t\t\topenPage: function(page) {\r\n\t\t\t\t\t\t// currentPage is 1-based index\r\n\t\t\t\t\t\tpg.meta.page = parseInt(page);\r\n\r\n\t\t\t\t\t\t$(datatable).trigger(pg.paginateEvent, pg.meta);\r\n\t\t\t\t\t\tpg.callback(pg, pg.meta);\r\n\r\n\t\t\t\t\t\t// update page callback function\r\n\t\t\t\t\t\t$(pg.pager).trigger(pfx + 'datatable-on-goto-page', pg.meta);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tupdatePerpage: function(e) {\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t// if (Plugin.getOption('layout.height') === null) {\r\n\t\t\t\t\t\t// fix white space, when perpage is set from many records to less records\r\n\t\t\t\t\t\t// $('html, body').animate({scrollTop: $(datatable).position().top});\r\n\t\t\t\t\t\t// }\r\n\r\n\t\t\t\t\t\t// hide dropdown after select\r\n\t\t\t\t\t\t$(this).selectpicker('toggle');\r\n\r\n\t\t\t\t\t\tpg.pager = $(datatable.table).siblings('.' + pfx + 'datatable-pager').removeClass(pfx + 'datatable-paging-loaded');\r\n\r\n\t\t\t\t\t\t// on change select page size\r\n\t\t\t\t\t\tif (e.originalEvent) {\r\n\t\t\t\t\t\t\tpg.meta.perpage = parseInt($(this).val());\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t$(pg.pager).find('select.' + pfx + 'datatable-pager-size').val(pg.meta.perpage).attr('data-selected', pg.meta.perpage);\r\n\r\n\t\t\t\t\t\t// update datasource params\r\n\t\t\t\t\t\tPlugin.setDataSourceParam('pagination', {\r\n\t\t\t\t\t\t\tpage: pg.meta.page,\r\n\t\t\t\t\t\t\tpages: pg.meta.pages,\r\n\t\t\t\t\t\t\tperpage: pg.meta.perpage,\r\n\t\t\t\t\t\t\ttotal: pg.meta.total,\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t// update page callback function\r\n\t\t\t\t\t\t$(pg.pager).trigger(pfx + 'datatable-on-update-perpage', pg.meta);\r\n\t\t\t\t\t\t$(datatable).trigger(pg.paginateEvent, pg.meta);\r\n\t\t\t\t\t\tpg.callback(pg, pg.meta);\r\n\r\n\t\t\t\t\t\t// update pagination info\r\n\t\t\t\t\t\tpg.updateInfo.call();\r\n\t\t\t\t\t},\r\n\t\t\t\t\taddPaginateEvent: function(e) {\r\n\t\t\t\t\t\t// pagination event\r\n\t\t\t\t\t\t$(datatable).off(pg.paginateEvent).on(pg.paginateEvent, function(e, meta) {\r\n\t\t\t\t\t\t\tPlugin.spinnerCallback(true);\r\n\r\n\t\t\t\t\t\t\tpg.pager = $(datatable.table).siblings('.' + pfx + 'datatable-pager');\r\n\t\t\t\t\t\t\tvar pagerNumber = $(pg.pager).find('.' + pfx + 'datatable-pager-nav');\r\n\r\n\t\t\t\t\t\t\t// set sync active page class\r\n\t\t\t\t\t\t\t$(pagerNumber).find('.' + pfx + 'datatable-pager-link-active').removeClass(pfx + 'datatable-pager-link-active');\r\n\t\t\t\t\t\t\t$(pagerNumber).find('.' + pfx + 'datatable-pager-link-number[data-page=\"' + meta.page + '\"]').addClass(pfx + 'datatable-pager-link-active');\r\n\r\n\t\t\t\t\t\t\t// set next and previous link page number\r\n\t\t\t\t\t\t\t$(pagerNumber).find('.' + pfx + 'datatable-pager-link-prev').attr('data-page', Math.max(meta.page - 1, 1));\r\n\t\t\t\t\t\t\t$(pagerNumber).find('.' + pfx + 'datatable-pager-link-next').attr('data-page', Math.min(meta.page + 1, meta.pages));\r\n\r\n\t\t\t\t\t\t\t// current page input value sync\r\n\t\t\t\t\t\t\t$(pg.pager).each(function() {\r\n\t\t\t\t\t\t\t\t$(this).find('.' + pfx + 'datatable-pager-input[type=\"text\"]').prop('value', meta.page);\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t// if only 1 page, should hide page?\r\n\t\t\t\t\t\t\t// $(pg.pager).find('.' + pfx + 'datatable-pager-nav').show();\r\n\t\t\t\t\t\t\t// if (meta.pages <= 1) {\r\n\t\t\t\t\t\t\t// \t// hide pager if has 1 page\r\n\t\t\t\t\t\t\t// \t$(pg.pager).find('.' + pfx + 'datatable-pager-nav').hide();\r\n\t\t\t\t\t\t\t// }\r\n\r\n\t\t\t\t\t\t\t// update datasource params\r\n\t\t\t\t\t\t\tPlugin.setDataSourceParam('pagination', {\r\n\t\t\t\t\t\t\t\tpage: pg.meta.page,\r\n\t\t\t\t\t\t\t\tpages: pg.meta.pages,\r\n\t\t\t\t\t\t\t\tperpage: pg.meta.perpage,\r\n\t\t\t\t\t\t\t\ttotal: pg.meta.total,\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t$(pg.pager).find('select.' + pfx + 'datatable-pager-size').val(meta.perpage).attr('data-selected', meta.perpage);\r\n\r\n\t\t\t\t\t\t\t// clear active rows\r\n\t\t\t\t\t\t\t$(datatable.table).find('.' + pfx + 'checkbox > [type=\"checkbox\"]').prop('checked', false);\r\n\t\t\t\t\t\t\t$(datatable.table).find('.' + pfx + 'datatable-row-active').removeClass(pfx + 'datatable-row-active');\r\n\r\n\t\t\t\t\t\t\tpg.updateInfo.call();\r\n\t\t\t\t\t\t\tpg.pagingBreakpoint.call();\r\n\t\t\t\t\t\t\t// Plugin.resetScroll();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t},\r\n\t\t\t\t\tupdateInfo: function() {\r\n\t\t\t\t\t\tvar start = Math.max(pg.meta.perpage * (pg.meta.page - 1) + 1, 1);\r\n\t\t\t\t\t\tvar end = Math.min(start + pg.meta.perpage - 1, pg.meta.total);\r\n\t\t\t\t\t\t// page info update\r\n\t\t\t\t\t\t$(pg.pager).find('.' + pfx + 'datatable-pager-info').find('.' + pfx + 'datatable-pager-detail').html(Plugin.dataPlaceholder(\r\n\t\t\t\t\t\t\tPlugin.getOption('translate.toolbar.pagination.items.info'), {\r\n\t\t\t\t\t\t\t\t// set start page 0 if the is no records. eg. Showing 0 - 0 of 0\r\n\t\t\t\t\t\t\t\tstart: pg.meta.total === 0 ? 0 : start,\r\n\t\t\t\t\t\t\t\tend: pg.meta.perpage === -1 ? pg.meta.total : end,\r\n\t\t\t\t\t\t\t\tpageSize: pg.meta.perpage === -1 ||\r\n\t\t\t\t\t\t\t\tpg.meta.perpage >= pg.meta.total\r\n\t\t\t\t\t\t\t\t\t? pg.meta.total\r\n\t\t\t\t\t\t\t\t\t: pg.meta.perpage,\r\n\t\t\t\t\t\t\t\ttotal: pg.meta.total,\r\n\t\t\t\t\t\t\t}));\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t/**\r\n\t\t\t\t\t * Update pagination layout breakpoint\r\n\t\t\t\t\t */\r\n\t\t\t\t\tpagingBreakpoint: function() {\r\n\t\t\t\t\t\t// keep page links reference\r\n\t\t\t\t\t\tvar pagerNumber = $(datatable.table).siblings('.' + pfx + 'datatable-pager').find('.' + pfx + 'datatable-pager-nav');\r\n\t\t\t\t\t\tif ($(pagerNumber).length === 0) return;\r\n\r\n\t\t\t\t\t\tvar currentPage = Plugin.getCurrentPage();\r\n\t\t\t\t\t\tvar pagerInput = $(pagerNumber).find('.' + pfx + 'datatable-pager-input').closest('li');\r\n\r\n\t\t\t\t\t\t// reset\r\n\t\t\t\t\t\t$(pagerNumber).find('li').show();\r\n\r\n\t\t\t\t\t\t// pagination update\r\n\t\t\t\t\t\t$.each(Plugin.getOption('toolbar.items.pagination.pages'),\r\n\t\t\t\t\t\t\tfunction(mode, option) {\r\n\t\t\t\t\t\t\t\tif (util.isInResponsiveRange(mode)) {\r\n\t\t\t\t\t\t\t\t\tswitch (mode) {\r\n\t\t\t\t\t\t\t\t\t\tcase 'desktop':\r\n\t\t\t\t\t\t\t\t\t\tcase 'tablet':\r\n\t\t\t\t\t\t\t\t\t\t\tvar end = Math.ceil(currentPage / option.pagesNumber) * option.pagesNumber;\r\n\t\t\t\t\t\t\t\t\t\t\tvar start = end - option.pagesNumber;\r\n\t\t\t\t\t\t\t\t\t\t\t$(pagerInput).hide();\r\n\t\t\t\t\t\t\t\t\t\t\tpg.meta = Plugin.getDataSourceParam('pagination');\r\n\t\t\t\t\t\t\t\t\t\t\tpg.paginationUpdate();\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\t\t\tcase 'mobile':\r\n\t\t\t\t\t\t\t\t\t\t\t$(pagerInput).show();\r\n\t\t\t\t\t\t\t\t\t\t\t$(pagerNumber).find('.' + pfx + 'datatable-pager-link-more-prev').closest('li').hide();\r\n\t\t\t\t\t\t\t\t\t\t\t$(pagerNumber).find('.' + pfx + 'datatable-pager-link-more-next').closest('li').hide();\r\n\t\t\t\t\t\t\t\t\t\t\t$(pagerNumber).find('.' + pfx + 'datatable-pager-link-number').closest('li').hide();\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\treturn false;\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},\r\n\r\n\t\t\t\t\t/**\r\n\t\t\t\t\t * Update pagination number and button display\r\n\t\t\t\t\t */\r\n\t\t\t\t\tpaginationUpdate: function() {\r\n\t\t\t\t\t\tvar pager = $(datatable.table).siblings('.' + pfx + 'datatable-pager').find('.' + pfx + 'datatable-pager-nav'),\r\n\t\t\t\t\t\t\tpagerMorePrev = $(pager).find('.' + pfx + 'datatable-pager-link-more-prev'),\r\n\t\t\t\t\t\t\tpagerMoreNext = $(pager).find('.' + pfx + 'datatable-pager-link-more-next'),\r\n\t\t\t\t\t\t\tpagerFirst = $(pager).find('.' + pfx + 'datatable-pager-link-first'),\r\n\t\t\t\t\t\t\tpagerPrev = $(pager).find('.' + pfx + 'datatable-pager-link-prev'),\r\n\t\t\t\t\t\t\tpagerNext = $(pager).find('.' + pfx + 'datatable-pager-link-next'),\r\n\t\t\t\t\t\t\tpagerLast = $(pager).find('.' + pfx + 'datatable-pager-link-last');\r\n\r\n\t\t\t\t\t\t// get visible page\r\n\t\t\t\t\t\tvar pagerNumber = $(pager).find('.' + pfx + 'datatable-pager-link-number');\r\n\t\t\t\t\t\t// get page before of first visible\r\n\t\t\t\t\t\tvar morePrevPage = Math.max($(pagerNumber).first().data('page') - 1, 1);\r\n\t\t\t\t\t\t$(pagerMorePrev).each(function(i, prev) {\r\n\t\t\t\t\t\t\t$(prev).attr('data-page', morePrevPage);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\t// show/hide <li>\r\n\t\t\t\t\t\tif (morePrevPage === 1) {\r\n\t\t\t\t\t\t\t$(pagerMorePrev).parent().hide();\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t$(pagerMorePrev).parent().show();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// get page after of last visible\r\n\t\t\t\t\t\tvar moreNextPage = Math.min($(pagerNumber).last().data('page') + 1,\r\n\t\t\t\t\t\t\tpg.meta.pages);\r\n\t\t\t\t\t\t$(pagerMoreNext).each(function(i, prev) {\r\n\t\t\t\t\t\t\t$(pagerMoreNext).attr('data-page', moreNextPage).show();\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t// show/hide <li>\r\n\t\t\t\t\t\tif (moreNextPage === pg.meta.pages\r\n\t\t\t\t\t\t\t// missing dot fix when last hidden page is one left\r\n\t\t\t\t\t\t\t&& moreNextPage === $(pagerNumber).last().data('page')) {\r\n\t\t\t\t\t\t\t$(pagerMoreNext).parent().hide();\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t$(pagerMoreNext).parent().show();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// begin/end of pages\r\n\t\t\t\t\t\tif (pg.meta.page === 1) {\r\n\t\t\t\t\t\t\t$(pagerFirst).attr('disabled', true).addClass(pfx + 'datatable-pager-link-disabled');\r\n\t\t\t\t\t\t\t$(pagerPrev).attr('disabled', true).addClass(pfx + 'datatable-pager-link-disabled');\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t$(pagerFirst).removeAttr('disabled').removeClass(pfx + 'datatable-pager-link-disabled');\r\n\t\t\t\t\t\t\t$(pagerPrev).removeAttr('disabled').removeClass(pfx + 'datatable-pager-link-disabled');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (pg.meta.page === pg.meta.pages) {\r\n\t\t\t\t\t\t\t$(pagerNext).attr('disabled', true).addClass(pfx + 'datatable-pager-link-disabled');\r\n\t\t\t\t\t\t\t$(pagerLast).attr('disabled', true).addClass(pfx + 'datatable-pager-link-disabled');\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t$(pagerNext).removeAttr('disabled').removeClass(pfx + 'datatable-pager-link-disabled');\r\n\t\t\t\t\t\t\t$(pagerLast).removeAttr('disabled').removeClass(pfx + 'datatable-pager-link-disabled');\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// display more buttons\r\n\t\t\t\t\t\tvar nav = Plugin.getOption('toolbar.items.pagination.navigation');\r\n\t\t\t\t\t\tif (!nav.first) $(pagerFirst).remove();\r\n\t\t\t\t\t\tif (!nav.prev) $(pagerPrev).remove();\r\n\t\t\t\t\t\tif (!nav.next) $(pagerNext).remove();\r\n\t\t\t\t\t\tif (!nav.last) $(pagerLast).remove();\r\n\t\t\t\t\t\tif (!nav.more) {\r\n\t\t\t\t\t\t\t$(pagerMorePrev).remove();\r\n\t\t\t\t\t\t\t$(pagerMoreNext).remove();\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\tpg.init(meta);\r\n\t\t\t\treturn pg;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Hide/show table cell defined by\r\n\t\t\t * options[columns][i][responsive][visible/hidden]\r\n\t\t\t */\r\n\t\t\tcolumnHide: function() {\r\n\t\t\t\tvar screen = util.getViewPort().width;\r\n\t\t\t\t// foreach columns setting\r\n\t\t\t\t$.each(options.columns, function(i, column) {\r\n\t\t\t\t\tif (typeof column.responsive !== 'undefined' || typeof column.visible !== 'undefined') {\r\n\t\t\t\t\t\tvar field = column.field;\r\n\t\t\t\t\t\tvar tds = $.grep($(datatable.table).find('.' + pfx + 'datatable-cell'), function(n, i) {\r\n\t\t\t\t\t\t\treturn field === $(n).data('field');\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t\t\t// hide by force\r\n\t\t\t\t\t\t\tif (Plugin.getObject('visible', column) === false) {\r\n\t\t\t\t\t\t\t\t$(tds).hide();\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t// show/hide by responsive breakpoint\r\n\t\t\t\t\t\t\t\tif (util.getBreakpoint(Plugin.getObject('responsive.hidden', column)) >= screen) {\r\n\t\t\t\t\t\t\t\t\t$(tds).hide();\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t$(tds).show();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif (util.getBreakpoint(Plugin.getObject('responsive.visible', column)) <= screen) {\r\n\t\t\t\t\t\t\t\t\t$(tds).show();\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t$(tds).hide();\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},\r\n\r\n\t\t\t/**\r\n\t\t\t * Setup sub datatable\r\n\t\t\t */\r\n\t\t\tsetupSubDatatable: function() {\r\n\t\t\t\tvar subTableCallback = Plugin.getOption('detail.content');\r\n\t\t\t\tif (typeof subTableCallback !== 'function') return;\r\n\r\n\t\t\t\t// subtable already exist\r\n\t\t\t\tif ($(datatable.table).find('.' + pfx + 'datatable-subtable').length > 0) return;\r\n\r\n\t\t\t\t$(datatable.wrap).addClass(pfx + 'datatable-subtable');\r\n\r\n\t\t\t\toptions.columns[0]['subtable'] = true;\r\n\r\n\t\t\t\t// toggle on open sub table\r\n\t\t\t\tvar toggleSubTable = function(e) {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t// get parent row of this subtable\r\n\t\t\t\t\tvar parentRow = $(this).closest('.' + pfx + 'datatable-row');\r\n\r\n\t\t\t\t\t// get subtable row for sub table\r\n\t\t\t\t\tvar subTableRow = $(parentRow).next('.' + pfx + 'datatable-row-subtable');\r\n\t\t\t\t\tif ($(subTableRow).length === 0) {\r\n\t\t\t\t\t\t// prepare DOM for sub table, each <tr> as parent and add <tr> as child table\r\n\t\t\t\t\t\tsubTableRow = $('<tr/>').\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($('<td/>').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($('<a/>').\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($('<i/>').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.<T>|{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 = $('<tr/>').addClass(pfx + 'datatable-row-detail').insertAfter(row);\r\n\t\t\t\t\t\tvar detailRowTd = $('<td/>').addClass(pfx + 'datatable-detail').attr('colspan', Plugin.getTotalColumns()).appendTo(detailRow);\r\n\r\n\t\t\t\t\t\tvar detailSubTable = $('<table/>');\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($('<tr class=\"' + pfx + 'datatable-row\"></tr>').\r\n\t\t\t\t\t\t\t\t\t\t\t\tappend($('<td class=\"' + pfx + 'datatable-cell\"></td>').append($('<span/>').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\tvar offsetWidth = $(this)[0].offsetWidth;\r\n\t\t\t\t\t\tvar scrollWidth = $(this)[0].scrollWidth;\r\n\r\n\t\t\t\t\t\twhile (offsetWidth < scrollWidth && (scrollWidth - offsetWidth) > Plugin.cellOffset && recursive < options.columns.length) {\r\n\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\tif (cell.length) {\r\n\t\t\t\t\t\t\t\t\t\t$(cell).hide();\r\n\t\t\t\t\t\t\t\t\t\thiddenExist = true;\r\n\t\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\trecursive++;\r\n\r\n\t\t\t\t\t\t\toffsetWidth = $(this)[0].offsetWidth;\r\n\t\t\t\t\t\t\tscrollWidth = $(this)[0].scrollWidth;\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($('<td/>').\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($('<a/>').\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('<i class=\"' + Plugin.getOption('layout.icons.rowDetail.collapse') + '\"></i>')));\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('<th class=\"' + pfx + 'datatable-cell ' + pfx + 'datatable-toggle-detail\"><span></span></th>');\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('<th class=\"' + pfx + 'datatable-cell ' + pfx + 'datatable-toggle-detail\"><span></span></th>');\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 <td>.\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 <tr>\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 <td> or <th>\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($('<i/>').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\r\n\t\t\t\t// clean up variables\r\n\t\t\t\tinitialDatatable = null;\r\n\t\t\t\tdatatable.dataSet = null;\r\n\t\t\t\tdatatable.originalDataSet = null;\r\n\t\t\t\tdatatable.tableHead = null;\r\n\t\t\t\tdatatable.tableBody = null;\r\n\t\t\t\tdatatable.table = null;\r\n\t\t\t\tdatatable.wrap = null;\r\n\t\t\t\tdatatable.API = {\r\n\t\t\t\t\trecord: null,\r\n\t\t\t\t\tvalue: null,\r\n\t\t\t\t\tparams: null,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tPlugin.ajaxParams = {};\r\n\t\t\t\tPlugin.pagingObject = {};\r\n\t\t\t\tPlugin.nodeTr = [];\r\n\t\t\t\tPlugin.nodeTd = [];\r\n\t\t\t\tPlugin.nodeCols = [];\r\n\t\t\t\tPlugin.recentNode = [];\r\n\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'] = Extension.selectedRows.filter(Extension.unique);\r\n\t\t\t\t\t\tstorage['unselectedRows'] = Extension.unselectedRows.filter(Extension.unique);\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'] = Extension.selectedRows.filter(Extension.unique);\r\n\t\t\t\t\t\tstorage['unselectedRows'] = Extension.unselectedRows.filter(Extension.unique);\r\n\t\t\t\t\t\tstorage['unselectedRows'] = Extension.unselectedRows.filter(Extension.unique);\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'] = Extension.selectedRows.filter(Extension.unique);\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 selectedAllRows.filter(Extension.unique);\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.filter(Extension.unique);\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.scrollUpdate();\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('<div class=\"menu-dropoff\" style=\"background: transparent; position: fixed; top: 0; bottom: 0; left: 0; right: 0; z-index: ' + zIndex + '\"></div>');\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(toggleElement, targetElement, 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 = toggleElement;\r\n    var target = targetElement;\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 = 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//\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// getAttributeNames\r\nif (Element.prototype.getAttributeNames == undefined) {\r\n  Element.prototype.getAttributeNames = function () {\r\n    var attributes = this.attributes;\r\n    var length = attributes.length;\r\n    var result = new Array(length);\r\n    for (var i = 0; i < length; i++) {\r\n      result[i] = attributes[i].name;\r\n    }\r\n    return result;\r\n  };\r\n}\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                    // <div style=\"z-index: -10;\"><div style=\"z-index: 0;\"></div></div>\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        // 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                if (!obj) continue;\r\n\r\n                for (var key in obj) {\r\n                    if (!obj.hasOwnProperty(key)) {\r\n                        continue;\r\n                    }\r\n\r\n                    // based on https://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/\r\n                    if ( Object.prototype.toString.call(obj[key]) === '[object Object]' ) {\r\n                        out[key] = KTUtil.deepExtend(out[key], obj[key]);\r\n                        continue;\r\n                    }\r\n\r\n                    out[key] = obj[key];\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, withMargin) {\r\n            var height = el.offsetHeight;\r\n            var style;\r\n\r\n            if (typeof withMargin !== 'undefined' && withMargin === true) {\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 if (options.height) {\r\n                        height = parseInt(options.height);\r\n                    } else {\r\n                        height = parseInt(KTUtil.css(element, '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\r\n                // Todo:Consider using Localstorage\r\n                if (options.rememberPosition === true && KTCookie && 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        changeColor: function(col, amt) {\r\n\r\n            var usePound = false;\r\n\r\n            if (col[0] == \"#\") {\r\n                col = col.slice(1);\r\n                usePound = true;\r\n            }\r\n\r\n            var num = parseInt(col,16);\r\n\r\n            var r = (num >> 16) + amt;\r\n\r\n            if (r > 255) r = 255;\r\n            else if  (r < 0) r = 0;\r\n\r\n            var b = ((num >> 8) & 0x00FF) + amt;\r\n\r\n            if (b > 255) b = 255;\r\n            else if  (b < 0) b = 0;\r\n\r\n            var g = (num & 0x0000FF) + amt;\r\n\r\n            if (g > 255) g = 255;\r\n            else if (g < 0) g = 0;\r\n\r\n            return (usePound?\"#\":\"\") + (g | (b << 8) | (r << 16)).toString(16);\r\n\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 <br>\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) {\r\n            if (!el) {\r\n                return;\r\n            }\r\n\r\n            if (typeof disable !== 'undefined' && disable === true) {\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) {\r\n            offset = offset || 0;\r\n\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","\"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.btnNext = KTUtil.find(element, '[data-wizard-type=\"action-next\"]');\r\n            the.btnPrev = KTUtil.find(element, '[data-wizard-type=\"action-prev\"]');\r\n            the.btnSubmit = KTUtil.find(element, '[data-wizard-type=\"action-submit\"]');\r\n\r\n            // Variables\r\n            the.events = [];\r\n            the.lastStep = 0;\r\n            the.currentStep = 1;\r\n            the.newStep = 0;\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\r\n                // Set new step number\r\n                Plugin.setNewStep(Plugin.getNextStep());\r\n\r\n                // Trigger change event\r\n                if (Plugin.eventTrigger('change') !== false) {\r\n                    Plugin.goTo(Plugin.getNextStep());\r\n                }\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\r\n                // Set new step number\r\n                Plugin.setNewStep(Plugin.getPrevStep());\r\n\r\n                // Trigger change event\r\n                if (Plugin.eventTrigger('change') !== false) {\r\n                    Plugin.goTo(Plugin.getPrevStep());\r\n                }\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\r\n                    if (index !== the.currentStep) {\r\n                        Plugin.setNewStep(index);\r\n\r\n                        // Trigger change event\r\n                        if (Plugin.eventTrigger('change') !== false) {\r\n                            Plugin.goTo(index);\r\n                        }\r\n                    }\r\n                });\r\n            }\r\n\r\n            // Submit button event handler\r\n            KTUtil.addEvent(the.btnSubmit, 'click', function(e) {\r\n                e.preventDefault();\r\n\r\n                Plugin.eventTrigger('submit');\r\n            });\r\n        },\r\n\r\n        /**\r\n         * Handles wizard click wizard\r\n         */\r\n        goTo: function(number) {\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            // 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            number = parseInt(number);\r\n\r\n            // Set current step\r\n            the.lastStep = the.currentStep;\r\n            the.currentStep = number;\r\n            the.newStep = 0;\r\n\r\n            Plugin.updateUI();\r\n\r\n            Plugin.eventTrigger('changed');\r\n\r\n            return the;\r\n        },\r\n\r\n        /**\r\n         * Stop wizard\r\n         */\r\n        stop: function() {\r\n            the.stopped = true;\r\n        },\r\n\r\n        /**\r\n         * Resume wizard\r\n         */\r\n        resume: 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         * Update wizard UI after step change\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 number\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 number\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         * Get new step number\r\n         */\r\n        getNewStep: function() {\r\n            return the.newStep;\r\n        },\r\n\r\n        /**\r\n         * Set new step\r\n         */\r\n        setNewStep: function(step) {\r\n            the.newStep = step;\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() {\r\n        return Plugin.goTo(Plugin.getNextStep());\r\n    };\r\n\r\n    /**\r\n     * Go to the prev step\r\n     */\r\n    the.goPrev = function() {\r\n        return Plugin.goTo(Plugin.getPrevStep());\r\n    };\r\n\r\n    /**\r\n     * Go to the last step\r\n     */\r\n    the.goLast = function() {\r\n        return Plugin.goTo(Plugin.getLastStep());\r\n    };\r\n\r\n    /**\r\n     * Go to the first step\r\n     */\r\n    the.goFirst = function() {\r\n        return Plugin.goTo(Plugin.getFirstStep());\r\n    };\r\n\r\n    /**\r\n     * Go to a step\r\n     */\r\n    the.goTo = function(number) {\r\n        return Plugin.goTo(number);\r\n    };\r\n\r\n    /**\r\n     * Stop wizard\r\n     */\r\n    the.stop = function() {\r\n        return Plugin.stop();\r\n    };\r\n\r\n    /**\r\n     * Resume wizard\r\n     */\r\n    the.resume = function() {\r\n        return Plugin.resume();\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     * Get new step number\r\n     */\r\n    the.getNewStep = function() {\r\n        return Plugin.getNewStep();\r\n    };\r\n\r\n    /**\r\n     * Set new step number\r\n     */\r\n    the.setNewStep = function(number) {\r\n        Plugin.setNewStep(number);\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(\"change\", \"changed\", \"submit\")\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 _body;\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.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                    if (KTUtil.isBreakpointDown('lg')) {\r\n                        return;\r\n                    }\r\n\r\n\t\t\t\t\tvar height = parseInt(KTUtil.getViewPort().height);\r\n\t\t\t\t\theight = height - KTLayoutBrand.getHeight();\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    var _initHover = function() {\r\n        // Handle Minimized Aside Hover\r\n\t\tif (KTUtil.hasClass(_body, 'aside-fixed') && KTUtil.hasClass(_body, 'aside-minimize-hoverable')) {\r\n\t\t\tvar insideTm;\r\n\t\t\tvar outsideTm;\r\n\r\n            // Handle Aside Hover Mode\r\n\t\t\tKTUtil.addEvent(_element, 'mouseenter', function(e) {\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif (KTUtil.isBreakpointUp('lg') === false) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (outsideTm) {\r\n\t\t\t\t\tclearTimeout(outsideTm);\r\n\t\t\t\t\toutsideTm = null;\r\n\t\t\t\t}\r\n\r\n                if (insideTm) {\r\n\t\t\t\t\tclearTimeout(insideTm);\r\n\t\t\t\t\tinsideTm = null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinsideTm = setTimeout(function() {\r\n\t\t\t\t\tif (KTUtil.hasClass(_body, 'aside-minimize') && KTUtil.isBreakpointUp('lg')) {\r\n\t\t\t\t\t\t// Hover class\r\n\t\t\t\t\t\tKTUtil.addClass(_body, 'aside-minimize-hover');\r\n\r\n\t\t\t\t\t\tKTLayoutAsideMenu.getMenu().scrollUpdate();\r\n\t\t\t\t\t\tKTLayoutAsideMenu.getMenu().scrollTop();\r\n\t\t\t\t\t}\r\n\t\t\t\t}, 50);\r\n\t\t\t});\r\n\r\n\t\t\tKTUtil.addEvent(KTLayoutAside.getElement(), 'mouseleave', function(e) {\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif (KTUtil.isBreakpointUp('lg') === false) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (insideTm) {\r\n\t\t\t\t\tclearTimeout(insideTm);\r\n\t\t\t\t\tinsideTm = null;\r\n\t\t\t\t}\r\n\r\n                if (outsideTm) {\r\n\t\t\t\t\tclearTimeout(outsideTm);\r\n\t\t\t\t\toutsideTm = null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutsideTm = setTimeout(function() {\r\n\t\t\t\t    if (KTUtil.hasClass(_body, 'aside-minimize-hover') && KTUtil.isBreakpointUp('lg')) {\r\n\t\t\t\t\t    KTUtil.removeClass(_body, 'aside-minimize-hover');\r\n\r\n\t\t\t\t\t\t// Hover class\r\n                        KTLayoutAsideMenu.getMenu().scrollUpdate();\r\n\t\t\t\t\t\tKTLayoutAsideMenu.getMenu().scrollTop();\r\n\t\t\t\t\t}\r\n\t\t\t\t}, 100);\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 menu\r\n            _init();\r\n            _initHover();\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 KTLayoutAsideToggle = function() {\r\n    // Private properties\r\n    var _body;\r\n    var _element;\r\n    var _toggleObject;\r\n\r\n\t// Initialize\r\n\tvar _init = function() {\r\n\t\t_toggleObject = new KTToggle(_element, _body, {\r\n\t\t\ttargetState: 'aside-minimize',\r\n\t\t\ttoggleState: 'active'\r\n\t\t});\r\n\r\n\t\t_toggleObject.on('toggle', function(toggle) {\r\n\t\t\tKTUtil.addClass(_body, 'aside-minimizing');\r\n            KTUtil.transitionEnd(_body, function() {\r\n                KTUtil.removeClass(_body, 'aside-minimizing');\r\n\t\t\t});\r\n\r\n            // Update sticky card\r\n            KTLayoutStickyCard.update();\r\n\r\n            // Pause header menu dropdowns\r\n            KTLayoutHeaderMenu.pauseDropdownHover(800);\r\n\r\n            // Pause aside menu dropdowns\r\n\t\t\tKTLayoutAsideMenu.pauseDropdownHover(800);\r\n\r\n            // Reload datatable\r\n\t\t\tvar datatables = $('.kt-datatable');\r\n\t\t\tif (datatables) {\r\n\t\t\t\tdatatables.each(function() {\r\n\t\t\t\t\t$(this).KTDatatable('redraw');\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// Remember state in cookie\r\n\t\t\tKTCookie.setCookie('kt_aside_toggle_state', toggle.getState());\r\n\t\t\t// to set default minimized left aside use this cookie value in your\r\n\t\t\t// server side code and add \"kt-primary--minimize aside-minimize\" classes to\r\n\t\t\t// the body tag in order to initialize the minimized left aside mode during page loading.\r\n\t\t});\r\n\r\n\t\t_toggleObject.on('beforeToggle', function(toggle) {\r\n\t\t\tif (KTUtil.hasClass(_body, 'aside-minimize') === false && KTUtil.hasClass(_body, 'aside-minimize-hover')) {\r\n\t\t\t\tKTUtil.removeClass(_body, 'aside-minimize-hover');\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\t\t},\r\n\r\n        getElement: function() {\r\n            return _element;\r\n        },\r\n\r\n        getToggle: function() {\r\n\t\t\treturn _toggleObject;\r\n\t\t},\r\n\r\n\t\tonToggle: function(handler) {\r\n\t\t\tif (typeof _toggleObject.element !== 'undefined') {\r\n\t\t\t\t_toggleObject.on('toggle', handler);\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 = KTLayoutAsideToggle;\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\r\n        isFixed: function() {\r\n            return KTUtil.hasClass(_body, 'aside-fixed');\r\n        },\r\n\r\n        isMinimized: function() {\r\n            return (KTUtil.hasClass(_body, 'aside-fixed') && KTUtil.hasClass(_body, 'aside-minimize'));\r\n        },\r\n\r\n        isHoverable: function() {\r\n            return (KTUtil.hasClass(_body, 'aside-fixed') && KTUtil.hasClass(_body, 'aside-minimize-hoverable'));\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 KTLayoutBrand = 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        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 = KTLayoutBrand;\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\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-menu-wrapper',\r\n\t\t\tcloseBy: 'kt_header_menu_mobile_close_btn',\r\n\t\t\ttoggleBy: {\r\n\t\t\t\ttarget: 'kt_header_mobile_toggle',\r\n\t\t\t\tstate: 'mobile-toggle-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    // 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\r\n            if (!_menuElement) {\r\n                return;\r\n            }\r\n\r\n            // Initialize menu\r\n            _init();\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, 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    // 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\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 KTLayoutSidebar = function() {\r\n    // Private properties\r\n    var _body;\r\n    var _element;\r\n    var _offcanvasObject;\r\n    var _lastOpenedTab;\r\n\r\n    // Private functions\r\n\t// Initialize\r\n\tvar _init = function() {\r\n        // Initialize mobile sidebar offcanvas\r\n\t\t_offcanvasObject = new KTOffcanvas(_element, {\r\n\t\t\tbaseClass: 'sidebar',\r\n\t\t\toverlay: true,\r\n\t\t\tcloseBy: 'kt_sidebar_close',\r\n\t\t\ttoggleBy: {\r\n\t\t\t\ttarget: 'kt_sidebar_mobile_toggle',\r\n\t\t\t\tstate: 'active'\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n    var _initNav = function() {\r\n        var sidebarNav = KTUtil.find(_element, '.sidebar-nav');\r\n\r\n        if (!sidebarNav) {\r\n            return;\r\n        }\r\n\r\n        KTUtil.scrollInit(sidebarNav, {\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                var sidebarNav = KTUtil.find(_element, '.sidebar-nav');\r\n                var sidebarFooter = KTUtil.find(_element, '.sidebar-footer');\r\n\r\n                height = height - (parseInt(KTUtil.css(sidebarNav, 'height')));\r\n                height = height - (parseInt(KTUtil.css(sidebarNav, 'marginBottom')) + parseInt(KTUtil.css(sidebarNav, 'marginTop')));\r\n\r\n                height = height - (parseInt(KTUtil.css(sidebarFooter, 'height')));\r\n                height = height - (parseInt(KTUtil.css(sidebarFooter, 'marginBottom')) + parseInt(KTUtil.css(sidebarFooter, 'marginTop')));\r\n\r\n                return height;\r\n            }\r\n        });\r\n\r\n        $(sidebarNav).on('click', 'a[data-toggle=\"tab\"]', function (e) {\r\n            if ((_lastOpenedTab && _lastOpenedTab.is($(this))) && $('body').hasClass('sidebar-expanded')) {\r\n                KTLayoutSidebar.minimize();\r\n            } else {\r\n                _lastOpenedTab =  $(this);\r\n                KTLayoutSidebar.expand();\r\n            }\r\n        });\r\n    }\r\n\r\n    var _initContent = function(parent) {\r\n        var parent = KTUtil.getById(parent);\r\n        var wrapper = KTUtil.find(_element, '.sidebar-wrapper');\r\n        var header = KTUtil.find(parent, '.sidebar-header');\r\n        var content = KTUtil.find(parent, '.sidebar-content');\r\n\r\n        // Close Content\r\n        $(header).on('click', '.sidebar-toggle', function (e) {\r\n            KTLayoutSidebar.minimize();\r\n        });\r\n\r\n        if (!content) {\r\n            return;\r\n        }\r\n\r\n        // Init Content Scroll\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 (KTUtil.isBreakpointUp('lg')) {\r\n                    height = height - KTLayoutHeader.getHeight();\r\n                } \r\n\r\n                if (header) {\r\n                    height = height - parseInt(KTUtil.css(header, 'height'));\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(wrapper, 'paddingTop'));\r\n                height = height - parseInt(KTUtil.css(wrapper, 'paddingBottom'));\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\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            _initNav();\r\n            _initContent('kt_sidebar_tab_1');\r\n            _initContent('kt_sidebar_tab_2');\r\n            _initContent('kt_sidebar_tab_3');\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\r\n        expand: function() {\r\n            KTUtil.addClass(_body, 'sidebar-expanded');\r\n        },\r\n\r\n        minimize: function() {\r\n            KTUtil.removeClass(_body, 'sidebar-expanded');\r\n        }\r\n\t};\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutSidebar;\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\r\n        _object = new KTCard(_element, {\r\n\t\t\tsticky: {\r\n\t\t\t\toffset: KTLayoutHeader.getHeight(),\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 (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 (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 (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\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 += '<div class=\"d-flex align-items-center\">';\r\n\t\thtml += '\t<div>';\r\n\t\thtml += '\t\t<span class=\"text-muted font-size-sm\">2 Hours</span>';\r\n\t\thtml += '\t\t<a href=\"#\" class=\"text-dark-75 text-hover-primary font-weight-bold font-size-h6\">You</a>';\r\n\t\thtml += '\t</div>';\r\n\t\thtml += '\t<div class=\"symbol symbol-circle symbol-40 ml-3\">';\r\n\t\thtml += '\t\t<img alt=\"Pic\" src=\"assets/media/users/150-9.jpg\"/>';\r\n\t\thtml += '\t</div>';\r\n\t\thtml += '</div>';\r\n\t\thtml += '<div class=\"mt-2 rounded p-5 bg-light-primary text-dark-50 font-weight-bold font-size-lg text-right max-w-400px\">' + textarea.value + '</div>';\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 += '<div class=\"d-flex align-items-center\">';\r\n\t\t\thtml += '\t<div class=\"symbol symbol-circle symbol-40 mr-3\">';\r\n\t\t\thtml += '\t\t<img alt=\"Pic\" src=\"assets/media/users/150-11.jpg\"/>';\r\n\t\t\thtml += '\t</div>';\r\n\t\t\thtml += '\t<div>';\r\n\t\t\thtml += '\t\t<a href=\"#\" class=\"text-dark-75 text-hover-primary font-weight-bold font-size-h6\">Matt Pears</a>';\r\n\t\t\thtml += '\t\t<span class=\"text-muted font-size-sm\">Just now</span>';\r\n\t\t\thtml += '\t</div>';\r\n\t\t\thtml += '</div>';\r\n\t\t\thtml += '<div class=\"mt-2 rounded p-5 bg-light-success text-dark-50 font-weight-bold font-size-lg text-left max-w-400px\">';\r\n\t\t\thtml += 'Right before vacation season we have the next Big Deal for you.';\r\n\t\t\thtml += '</div>';\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(id) {\r\n\t\t\t// Init modal chat example\r\n\t\t\t_init(KTUtil.getById(id));\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 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\t\t\tspeed: 600\r\n\t\t});\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\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, '<span class=\"font-weight-bold text-muted\">Connection error. Please try again later..</div>');\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    if (typeof KTLayoutHeader !== 'undefined') {\r\n        KTLayoutHeader.init('kt_header', 'kt_header_mobile');\r\n    }\r\n\r\n    // Init Header Menu\r\n    if (typeof KTLayoutHeaderMenu !== 'undefined') {\r\n        KTLayoutHeaderMenu.init('kt_header_menu', 'kt_header_menu_wrapper');\r\n    }\r\n\r\n    // Init Header Topbar For Mobile Mode\r\n    if (typeof KTLayoutHeaderTopbar !== 'undefined') {\r\n        KTLayoutHeaderTopbar.init('kt_header_mobile_topbar_toggle');\r\n    }\r\n\r\n    // Init Subheader\r\n    if (typeof KTLayoutSubheader !== 'undefined') {\r\n        KTLayoutSubheader.init('kt_subheader');\r\n    }\r\n\r\n    // Init Brand Panel For Logo\r\n    if (typeof KTLayoutBrand !== 'undefined') {\r\n        KTLayoutBrand.init('kt_brand');\r\n    }\r\n\r\n    // Init Aside\r\n    if (typeof KTLayoutAside !== 'undefined') {\r\n        KTLayoutAside.init('kt_aside');\r\n    }\r\n\r\n    // Init Aside Menu Toggle\r\n    if (typeof KTLayoutAsideToggle !== 'undefined') {\r\n        KTLayoutAsideToggle.init('kt_aside_toggle');\r\n    }\r\n\r\n    // Init Aside Menu\r\n    if (typeof KTLayoutAsideMenu !== 'undefined') {\r\n        KTLayoutAsideMenu.init('kt_aside_menu');\r\n    }\r\n\r\n    // Init Content\r\n    if (typeof KTLayoutContent !== 'undefined') {\r\n        KTLayoutContent.init('kt_content');\r\n    }\r\n\r\n    // Init Footer\r\n    if (typeof KTLayoutFooter !== 'undefined') {\r\n        KTLayoutFooter.init('kt_footer');\r\n    }\r\n\r\n    // Init Sidebar\r\n    if (typeof KTLayoutSidebar !== 'undefined') {\r\n        KTLayoutSidebar.init('kt_sidebar');\r\n    }\r\n\r\n    //////////////////////////////////////////////\r\n    // Layout Extended Partials(optional to use)//\r\n    //////////////////////////////////////////////\r\n\r\n    // Init Scrolltop\r\n    if (typeof KTLayoutScrolltop !== 'undefined') {\r\n        KTLayoutScrolltop.init('kt_scrolltop');\r\n    }\r\n\r\n    // Init Sticky Card\r\n    if (typeof KTLayoutStickyCard !== 'undefined') {\r\n        KTLayoutStickyCard.init('kt_page_sticky_card');\r\n    }\r\n\r\n    // Init Stretched Card\r\n    if (typeof KTLayoutStretchedCard !== 'undefined') {\r\n        KTLayoutStretchedCard.init('kt_page_stretched_card');\r\n    }\r\n\r\n    // Init Code Highlighter & Preview Blocks(used to demonstrate the theme features)\r\n    if (typeof KTLayoutExamples !== 'undefined') {\r\n        KTLayoutExamples.init();\r\n    }\r\n\r\n    // Init Demo Selection Panel\r\n    if (typeof KTLayoutDemoPanel !== 'undefined') {\r\n        KTLayoutDemoPanel.init('kt_demo_panel');\r\n    }\r\n\r\n    // Init Chat App(quick modal chat)\r\n    if (typeof KTLayoutChat !== 'undefined') {\r\n        KTLayoutChat.init('kt_chat_modal');\r\n    }\r\n\r\n    // Init Quick Actions Offcanvas Panel\r\n    if (typeof KTLayoutQuickActions !== 'undefined') {\r\n        KTLayoutQuickActions.init('kt_quick_actions');\r\n    }\r\n\r\n    // Init Quick Notifications Offcanvas Panel\r\n    if (typeof KTLayoutQuickNotifications !== 'undefined') {\r\n        KTLayoutQuickNotifications.init('kt_quick_notifications');\r\n    }\r\n\r\n    // Init Quick Offcanvas Panel\r\n    if (typeof KTLayoutQuickPanel !== 'undefined') {\r\n        KTLayoutQuickPanel.init('kt_quick_panel');\r\n    }\r\n\r\n    // Init Quick User Panel\r\n    if (typeof KTLayoutQuickUser !== 'undefined') {\r\n        KTLayoutQuickUser.init('kt_quick_user');\r\n    }\r\n\r\n    // Init Quick Search Panel\r\n    if (typeof KTLayoutQuickSearch !== 'undefined') {\r\n        KTLayoutQuickSearch.init('kt_quick_search');\r\n    }\r\n\r\n    // Init Search Result Handler For Quick Search Dropdown\r\n    if (typeof KTLayoutSearch !== 'undefined') {\r\n        KTLayoutSearch().init('kt_quick_search_dropdown');\r\n    }\r\n\r\n    // Init Search Result Handler For Quick Search Offcanvas Panel\r\n    if (typeof KTLayoutSearchOffcanvas !== 'undefined') {\r\n        KTLayoutSearchOffcanvas().init('kt_quick_search_offcanvas');\r\n    }\r\n});\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// Keenthemes' plugins\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// Keen 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.KTLayoutAsideToggle = require('@/src/js/layout/base/aside-toggle.js');\r\nwindow.KTLayoutBrand = require('@/src/js/layout/base/brand.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.KTLayoutSidebar = require('@/src/js/layout/base/sidebar.js');\r\nwindow.KTLayoutSubheader = require('@/src/js/layout/base/subheader.js');\r\nwindow.KTLayoutStickyCard = require('@/src/js/layout/base/sticky-card.js');\r\nwindow.KTLayoutStretchedCard = require('@/src/js/layout/base/stretched-card.js');\r\n\r\n// Keen 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.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":""}