}\n */\n put(resource, params) {\n return Vue.axios.put(`${resource}`, params);\n },\n\n /**\n * Send the DELETE HTTP request\n * @param resource\n * @returns {*}\n */\n delete(resource) {\n return Vue.axios.delete(resource).catch(error => {\n // console.log(error);\n throw new Error(`[RWV] ApiService ${error}`);\n });\n }\n};\n\nexport default ApiService;\n","import vue from 'vue';\n\n/**\n * 공통함수입니다.\n * @type {{install(*): void}}\n */\nexport const CommonJs = {\n\n\n install( Vue ) {\n\n Vue.prototype.$isValidEmail = function( email ) {\n\n if( !email ) {\n return false;\n }\n\n let emailReg = new RegExp(/^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,99}(?:\\.[a-z]{2})?)$/i);\n return emailReg.test( email );\n },\n\n Vue.prototype.$getSequenceText = function( index ) {\n\n if( \"number\" !== typeof index ) {\n return \"\";\n }\n if( index === 1 ) return \"1st\"\n if( index === 2 ) return \"2nd\"\n if( index === 3 ) return \"3rd\"\n if( index > 3 ) return ( index + \"th\" )\n },\n\n /**\n * @param uri : 다운로드 URL\n * @param fileName : 파일명\n * @desc uri 파일을 fileName으로 다운로드\n */\n Vue.prototype.$downloadURI = function( uri, name = \"untitled\" ) {\n\n if( !uri ) {\n console.log( \"download uri is not exist \" );\n return;\n }\n let link = document.createElement( \"a\" );\n link.download = name;\n link.href = uri;\n document.body.appendChild( link );\n link.click();\n document.body.removeChild( link );\n\n },\n\n /**\n * 페이지 길이를 가져옵니다.\n * Ex) totalCount 가 31, pageSize가 10이면 4를 return\n * totalCount 가 30, pageSize가 10이면 3을 return\n */\n Vue.prototype.$getPageLength = function( totalCount, pageSize ) {\n let calc = ( totalCount % pageSize == 0 ? 0 : 1 );\n return Math.floor( totalCount / pageSize ) + calc;\n },\n\n\n /**\n * vue bootstrap\n */\n Vue.prototype.$getStatusColorBootstrap = function( status ) {\n if ( status === \"pending\" ) return 'warning'\n else if (status ===\"approved\") return 'success'\n else if (status === \"rejected\") return 'danger'\n else return 'secondary';\n },\n Vue.prototype.$getStatusIcon = function( status ) {\n if ( status === \"pending\" ) return 'exclamation-circle-fill'\n else if (status ===\"approved\") return 'check-circle-fill'\n else if (status === \"rejected\") return 'x-circle-fill'\n else if (status === 'incomplete') return 'exclamation-circle-fill'\n else return 'secondary';\n },\n\n /**\n * vuetify\n * @param status - pending, rejected, incomplete, approved\n * @returns {string}\n */\n Vue.prototype.$getStatusColor = function( status ) {\n if ( status === \"pending\" ) return 'orange'\n else if (status ===\"approved\") return 'green'\n else if (status === \"rejected\") return 'red'\n else return 'grey';\n }\n\n\n Vue.prototype.$getAgeGroupColor = function( ageGroup ) {\n switch (ageGroup) {\n case 'minor':\n return '#FFECEA';\n case 'early-teen':\n return '#FFF7D5';\n case 'teen':\n return '#E9F2FF';\n case 'adult':\n return '#DCFFF1';\n default:\n return 'transparent'; // default background color\n }\n }\n\n Vue.prototype.$getAgeGroupTextColor = function( ageGroup ) {\n switch (ageGroup) {\n case 'minor':\n return '#AD2E24';\n case 'early-teen':\n return '#A64802';\n case 'teen':\n return '#0A5ACE';\n case 'adult':\n return '#206D4D';\n default:\n return 'transparent'; // default text color\n }\n }\n\n /**\n * 최신순으로 데이터를 나열\n * 나열 기준 : default 컬럼명 \"created_at\"\n */\n Vue.prototype.$sortByDate = function( list, column_name = \"createTime\" ) {\n\n if( !list || list.length == 0 ) {\n return [];\n }\n console.log(\"list -- \", list);\n list.sort( function( curr, next ) {\n\n let currDate = new Date( curr[ column_name ] );\n let nextDate = new Date( next[ column_name ] );\n\n return nextDate - currDate;\n });\n return list;\n },\n Vue.prototype.$getTextByteLength = function(str) {\n let byteLength = 0;\n for (let i = 0; i < str.length; i++) {\n const charCode = str.charCodeAt(i);\n if (charCode <= 0x007F) {\n byteLength++;\n } else if (charCode <= 0x07FF) {\n byteLength += 2;\n } else if (charCode <= 0xFFFF) {\n byteLength += 3;\n } else {\n byteLength += 4;\n }\n }\n return byteLength;\n },\n\n Vue.prototype.$getAge = function( dob ) {\n\n\n if( !dob || ( new Date(dob) == 'Invalid Date' ) ) {\n console.log( \"$getAge - not exist param ::: \" , dob );\n return 0;\n }\n\n let birthdate = new Date( dob );\n let today = new Date();\n let age = ( today.getFullYear() ) - ( birthdate.getFullYear() );\n\n\n if( vue.prototype.$moment( today ).format( \"MMDD\" ) - vue.prototype.$moment( birthdate ).format( \"MMDD\" ) < 0 ) {\n age = age - 1;\n }\n\n return age;\n },\n\n Vue.prototype.$getFormHtml = function(formId, type=\"html\") {\n\n if( !formId ) {\n console.log( \"잘못된 파라미터입니다. $getFormHtml >> param ::: \", formId );\n return;\n }\n\n // let html =`
`;\n // return html;\n //console.log(\"formId in getForm\", formId);\n\n //let domain = \"https://form.jotform.com/\";\n let domain = \"https://kyc.argos-solutions.io/apply/\";\n if( type == \"html\") {\n let html = ``;\n for (let i = 0; i < formId.length; i++) {\n let url = domain + formId[i];\n\n html += `${url}
`;\n }\n\n return html;\n }\n\n //@TODO 현재는 form id가 하나일 것이란 가정하에 개발\n return ( domain + formId[0] );\n },\n\n /**\n * object의 empty여부를 반환합니다.\n * @param obj\n * @returns {boolean} 비어있을 시 true, 비어있지 않을 시 false\n */\n Vue.prototype.$isEmptyObject = function( obj ) {\n\n if( !obj ) {\n return true;\n }\n\n for( let prop in obj ) {\n if(obj.hasOwnProperty(prop))\n return false;\n }\n\n return JSON.stringify(obj) === JSON.stringify({});\n },\n\n /**\n * @param time 파라미터는 2021-08-07T00:00:00.000Z 형태로 들어옴\n */\n Vue.prototype.$changeTimeFromSelectedLang = function (time , selectedLang) {\n if (!time) {\n return '';\n }\n const {timezone , value : navigatorLanguage} = selectedLang;\n const formatter = new Intl.DateTimeFormat(navigatorLanguage, {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n timeZone: timezone,\n });\n const date = new Date(time);\n\n return formatter.format(date);\n },\n\n\n Vue.prototype.$isAfterNovemberFirst2023 = function (createTime) {\n // UTC 기준 2023년 11월 1일 00시를 설정합니다.\n const targetDate = new Date(Date.UTC(2023, 10, 1, 0, 0, 0));\n\n // createTime 파라미터를 Date 객체로 변환합니다.\n const inputDate = new Date(createTime);\n\n // inputDate가 targetDate 이후인지 확인합니다.\n return inputDate >= targetDate;\n }\n\n\n\n /**\n * 원하는 날짜만큼 + 하여 return\n * @param dateParam : ex) \"2021-08-07\", new Date() 등등 가능\n * @param addDay : 필수로 숫자형이여야만 함 ! ex) -1, 2\n * 사용 예 : this.$addDay( \"2021-05-24\", -3 ) => return new Date( \"2018-05-24\" )\n */\n Vue.prototype.$addYear = function( dateParam, addYear ) {\n if( !dateParam || typeof addYear !== \"number\" || new Date( dateParam ) == 'Invalid Date' ) {\n console.log( \"잘못된 호출입니다 \" );\n return;\n }\n\n let day = new Date( dateParam );\n\n let year = day.getFullYear();\n let month = day.getMonth();\n let date = day.getDate();\n return new Date( year + addYear, month, date );\n },\n\n Vue.prototype.$addDay = function( dateParam, addDay, format ) {\n\n if( !dateParam || typeof addDay !== \"number\" || ( new Date( dateParam ) == 'Invalid Date' ) ) {\n console.log( \"잘못된 호출입니다 \" );\n return;\n }\n\n let day = new Date( dateParam );\n\n let year = day.getFullYear();\n let month = day.getMonth();\n let date = day.getDate();\n\n let resultDate = new Date( year, month, date + addDay );\n if( !format ) {\n return resultDate;\n }\n\n return vue.prototype.$moment( resultDate ).format( format )\n }\n }\n}\n","const dataTree = require('data-tree');\n\nexport const TreeCommon = {\n\n install( Vue ) {\n\n Vue.prototype.$convertListToTree = function (list) {\n\n console.log( \"list ::: \", list )\n let tree = dataTree.create();\n let rootNode = tree.insert({\n key: '#root',\n value: {\n \"nationality\": \"\",\n \"ratio\": null,\n \"nodePath\": \"\",\n \"nodeStatus\": \"\",\n \"createdTime\": \"\",\n \"nodeName\": \"root\",\n \"submissionId\": \"\",\n \"nodeLevel\": null,\n \"updateTime\": \"\",\n \"documentUrl\": \"\",\n \"birthDate\": \"\",\n \"nodeType\": \"\",\n \"uniqNo\": \"\",\n \"nodeParent\": \"\",\n \"amlScreen\" : \"\",\n amlResult : [],\n }\n });\n\n for(let shareholder of list){\n let keyValue = \"#\" + shareholder.nodeName.toLowerCase();\n console.log(\"shareHolder\", shareholder);\n let inObj = {\n key: keyValue,\n value: shareholder\n }\n\n // 최상위 부모는 0000\n if( shareholder.nodeParent == \"0000\" || !shareholder.nodeParent ){\n keyValue = \"#root\";\n tree.insertTo(function(data){\n return data.key == keyValue;\n }, inObj)\n }\n else{\n // 최상위 Node가 아닐 경우 Parent Node 위치를 확인하여 insert해야 한다.\n let parentKeyValue = \"#\" + shareholder.nodeParent.toLowerCase();\n let searchNode = tree.traverser().searchBFS(function(data){\n return data.key === parentKeyValue;\n })\n tree.insertToNode(searchNode, inObj)\n }\n }\n\n var exported = rootNode.export(function(data){\n let result = {}\n let keys= [ \"nodeName\",\"ratio\",\"nodeStatus\",\"createTime\",\"submissionId\"\n ,\"nodeLevel\",\"nodeParent\",\"updateTime\",\"documentUrl\"\n ,\"birthDate\",\"nodeType\",\"uniqNo\",\"nationality\",\"amlScreen\",\"amlResult\"];\n for( let item in data.value ) {\n if( keys.includes( item ) ) {\n result[item] = data.value[item];\n }\n }\n return result;\n });\n\n //console.log(\"exported\", exported);\n return exported.children;\n },\n\n\n Vue.prototype.$convertListToTree2 = function (list) {\n\n console.log( \"$convertListToTree2 parameter list ::: \", list )\n let tree = dataTree.create();\n let rootNode = tree.insert({\n key: '#root',\n value: {\n \"name\": \"\",\n \"title\": \"\",\n \"parent\": \"\",\n \"type\" : \"\",\n \"temp1\" : \"\", // 추가데이터 1 (확장성 고려)\n }\n });\n\n for(let shareholder of list){\n let keyValue = \"#\" + shareholder.name.toLowerCase();\n // console.log(\"shareHolder\", shareholder);\n let inObj = {\n key: keyValue,\n value: shareholder\n }\n\n // 최상위 부모는 0000\n if( shareholder.parent == \"0000\" || !shareholder.parent ){\n keyValue = \"#root\";\n tree.insertTo(function(data){\n return data.key == keyValue;\n }, inObj)\n }\n else{\n // 최상위 Node가 아닐 경우 Parent Node 위치를 확인하여 insert해야 한다.\n let parentKeyValue = \"#\" + shareholder.parent.toLowerCase();\n let searchNode = tree.traverser().searchBFS(function(data){\n return data.key === parentKeyValue;\n })\n tree.insertToNode(searchNode, inObj)\n }\n }\n\n let exported = rootNode.export(function(data){\n return {\n name: data.value.name,\n parent: data.value.parent,\n title : data.value.title,\n type : data.value.type,\n temp1 : data.value.temp1,\n temp2 : data.value.temp2,\n };\n });\n\n //console.log(\"exported\", exported);\n return exported.children;\n }\n }\n\n}\n","// USA\nexport const locale = {\n TRANSLATOR: {\n SELECT: \"Select your language\"\n },\n MENU: {\n NEW: \"new\",\n ACTIONS: \"Actions\",\n CREATE_POST: \"Create New Post\",\n PAGES: \"Pages\",\n FEATURES: \"Features\",\n APPS: \"Apps\",\n DASHBOARD: \"Dashboard\"\n },\n AUTH: {\n GENERAL: {\n OR: \"Or\",\n SUBMIT_BUTTON: \"Submit\",\n NO_ACCOUNT: \"Don't have an account?\",\n SIGNUP_BUTTON: \"Sign Up\",\n FORGOT_BUTTON: \"Forgot Password\",\n BACK_BUTTON: \"Back\",\n PRIVACY: \"Privacy\",\n LEGAL: \"Legal\",\n CONTACT: \"Contact\"\n },\n LOGIN: {\n TITLE: \"Login Account\",\n BUTTON: \"Sign In\"\n },\n FORGOT: {\n TITLE: \"Forgot Password?\",\n DESC: \"Enter your email to reset your password\",\n SUCCESS: \"Your account has been successfully reset.\"\n },\n REGISTER: {\n TITLE: \"Sign Up\",\n DESC: \"Enter your details to create your account\",\n SUCCESS: \"Your account has been successfuly registered.\"\n },\n INPUT: {\n EMAIL: \"Email\",\n FULLNAME: \"Fullname\",\n PASSWORD: \"Password\",\n CONFIRM_PASSWORD: \"Confirm Password\",\n USERNAME: \"Username\"\n },\n VALIDATION: {\n INVALID: \"{{name}} is not valid\",\n REQUIRED: \"{{name}} is required\",\n MIN_LENGTH: \"{{name}} minimum length is {{min}}\",\n AGREEMENT_REQUIRED: \"Accepting terms & conditions are required\",\n NOT_FOUND: \"The requested {{name}} is not found\",\n INVALID_LOGIN: \"The login detail is incorrect\",\n REQUIRED_FIELD: \"Required field\",\n MIN_LENGTH_FIELD: \"Minimum field length:\",\n MAX_LENGTH_FIELD: \"Maximum field length:\",\n INVALID_FIELD: \"Field is not valid\"\n }\n },\n ECOMMERCE: {\n COMMON: {\n SELECTED_RECORDS_COUNT: \"Selected records count: \",\n ALL: \"All\",\n SUSPENDED: \"Suspended\",\n ACTIVE: \"Active\",\n FILTER: \"Filter\",\n BY_STATUS: \"by Status\",\n BY_TYPE: \"by Type\",\n BUSINESS: \"Business\",\n INDIVIDUAL: \"Individual\",\n SEARCH: \"Search\",\n IN_ALL_FIELDS: \"in all fields\"\n },\n ECOMMERCE: \"eCommerce\",\n CUSTOMERS: {\n CUSTOMERS: \"Customers\",\n CUSTOMERS_LIST: \"Customers list\",\n NEW_CUSTOMER: \"New Customer\",\n DELETE_CUSTOMER_SIMPLE: {\n TITLE: \"Customer Delete\",\n DESCRIPTION: \"Are you sure to permanently delete this customer?\",\n WAIT_DESCRIPTION: \"Customer is deleting...\",\n MESSAGE: \"Customer has been deleted\"\n },\n DELETE_CUSTOMER_MULTY: {\n TITLE: \"Customers Delete\",\n DESCRIPTION: \"Are you sure to permanently delete selected customers?\",\n WAIT_DESCRIPTION: \"Customers are deleting...\",\n MESSAGE: \"Selected customers have been deleted\"\n },\n UPDATE_STATUS: {\n TITLE: \"Status has been updated for selected customers\",\n MESSAGE: \"Selected customers status have successfully been updated\"\n },\n EDIT: {\n UPDATE_MESSAGE: \"Customer has been updated\",\n ADD_MESSAGE: \"Customer has been created\"\n }\n }\n }\n};\n","// China\nexport const locale = {\n TRANSLATOR: {\n SELECT: \"选择你的语言\"\n },\n MENU: {\n NEW: \"新\",\n ACTIONS: \"行动\",\n CREATE_POST: \"创建新帖子\",\n PAGES: \"Pages\",\n FEATURES: \"特征\",\n APPS: \"应用\",\n DASHBOARD: \"仪表板\"\n },\n AUTH: {\n GENERAL: {\n OR: \"要么\",\n SUBMIT_BUTTON: \"提交\",\n NO_ACCOUNT: \"没有账号?\",\n SIGNUP_BUTTON: \"注册\",\n FORGOT_BUTTON: \"忘记密码\",\n BACK_BUTTON: \"背部\",\n PRIVACY: \"隐私\",\n LEGAL: \"法律\",\n CONTACT: \"联系\"\n },\n LOGIN: {\n TITLE: \"创建帐号\",\n BUTTON: \"签到\"\n },\n FORGOT: {\n TITLE: \"Forgot Password?\",\n DESC: \"Enter your email to reset your password\",\n SUCCESS: \"Your account has been successfully reset.\"\n },\n REGISTER: {\n TITLE: \"Sign Up\",\n DESC: \"Enter your details to create your account\",\n SUCCESS: \"Your account has been successfuly registered.\"\n },\n INPUT: {\n EMAIL: \"Email\",\n FULLNAME: \"Fullname\",\n PASSWORD: \"Password\",\n CONFIRM_PASSWORD: \"Confirm Password\",\n USERNAME: \"用戶名\"\n },\n VALIDATION: {\n INVALID: \"{{name}} is not valid\",\n REQUIRED: \"{{name}} is required\",\n MIN_LENGTH: \"{{name}} minimum length is {{min}}\",\n AGREEMENT_REQUIRED: \"Accepting terms & conditions are required\",\n NOT_FOUND: \"The requested {{name}} is not found\",\n INVALID_LOGIN: \"The login detail is incorrect\",\n REQUIRED_FIELD: \"Required field\",\n MIN_LENGTH_FIELD: \"Minimum field length:\",\n MAX_LENGTH_FIELD: \"Maximum field length:\",\n INVALID_FIELD: \"Field is not valid\"\n }\n },\n ECOMMERCE: {\n COMMON: {\n SELECTED_RECORDS_COUNT: \"Selected records count: \",\n ALL: \"All\",\n SUSPENDED: \"Suspended\",\n ACTIVE: \"Active\",\n FILTER: \"Filter\",\n BY_STATUS: \"by Status\",\n BY_TYPE: \"by Type\",\n BUSINESS: \"Business\",\n INDIVIDUAL: \"Individual\",\n SEARCH: \"Search\",\n IN_ALL_FIELDS: \"in all fields\"\n },\n ECOMMERCE: \"eCommerce\",\n CUSTOMERS: {\n CUSTOMERS: \"顾客\",\n CUSTOMERS_LIST: \"客户名单\",\n NEW_CUSTOMER: \"New Customer\",\n DELETE_CUSTOMER_SIMPLE: {\n TITLE: \"Customer Delete\",\n DESCRIPTION: \"Are you sure to permanently delete this customer?\",\n WAIT_DESCRIPTION: \"Customer is deleting...\",\n MESSAGE: \"Customer has been deleted\"\n },\n DELETE_CUSTOMER_MULTY: {\n TITLE: \"Customers Delete\",\n DESCRIPTION: \"Are you sure to permanently delete selected customers?\",\n WAIT_DESCRIPTION: \"Customers are deleting...\",\n MESSAGE: \"Selected customers have been deleted\"\n },\n UPDATE_STATUS: {\n TITLE: \"Status has been updated for selected customers\",\n MESSAGE: \"Selected customers status have successfully been updated\"\n },\n EDIT: {\n UPDATE_MESSAGE: \"Customer has been updated\",\n ADD_MESSAGE: \"Customer has been created\"\n }\n }\n }\n};\n","// Spain\nexport const locale = {\n TRANSLATOR: {\n SELECT: \"Elige tu idioma\"\n },\n MENU: {\n NEW: \"nuevo\",\n ACTIONS: \"Comportamiento\",\n CREATE_POST: \"Crear nueva publicación\",\n PAGES: \"Pages\",\n FEATURES: \"Caracteristicas\",\n APPS: \"Aplicaciones\",\n DASHBOARD: \"Tablero\"\n },\n AUTH: {\n GENERAL: {\n OR: \"O\",\n SUBMIT_BUTTON: \"Enviar\",\n NO_ACCOUNT: \"No tienes una cuenta?\",\n SIGNUP_BUTTON: \"Regístrate\",\n FORGOT_BUTTON: \"Se te olvidó tu contraseña\",\n BACK_BUTTON: \"Espalda\",\n PRIVACY: \"Intimidad\",\n LEGAL: \"Legal\",\n CONTACT: \"Contacto\"\n },\n LOGIN: {\n TITLE: \"Crear una cuenta\",\n BUTTON: \"Registrarse\"\n },\n FORGOT: {\n TITLE: \"Contraseña olvidada?\",\n DESC: \"Ingrese su correo electrónico para restablecer su contraseña\",\n SUCCESS: \"Your account has been successfully reset.\"\n },\n REGISTER: {\n TITLE: \"Sign Up\",\n DESC: \"Enter your details to create your account\",\n SUCCESS: \"Your account has been successfuly registered.\"\n },\n INPUT: {\n EMAIL: \"Email\",\n FULLNAME: \"Fullname\",\n PASSWORD: \"Password\",\n CONFIRM_PASSWORD: \"Confirm Password\",\n USERNAME: \"Usuario\"\n },\n VALIDATION: {\n INVALID: \"{{name}} is not valid\",\n REQUIRED: \"{{name}} is required\",\n MIN_LENGTH: \"{{name}} minimum length is {{min}}\",\n AGREEMENT_REQUIRED: \"Accepting terms & conditions are required\",\n NOT_FOUND: \"The requested {{name}} is not found\",\n INVALID_LOGIN: \"The login detail is incorrect\",\n REQUIRED_FIELD: \"Required field\",\n MIN_LENGTH_FIELD: \"Minimum field length:\",\n MAX_LENGTH_FIELD: \"Maximum field length:\",\n INVALID_FIELD: \"Field is not valid\"\n }\n },\n ECOMMERCE: {\n COMMON: {\n SELECTED_RECORDS_COUNT: \"Selected records count: \",\n ALL: \"All\",\n SUSPENDED: \"Suspended\",\n ACTIVE: \"Active\",\n FILTER: \"Filter\",\n BY_STATUS: \"by Status\",\n BY_TYPE: \"by Type\",\n BUSINESS: \"Business\",\n INDIVIDUAL: \"Individual\",\n SEARCH: \"Search\",\n IN_ALL_FIELDS: \"in all fields\"\n },\n ECOMMERCE: \"eCommerce\",\n CUSTOMERS: {\n CUSTOMERS: \"Customers\",\n CUSTOMERS_LIST: \"Customers list\",\n NEW_CUSTOMER: \"New Customer\",\n DELETE_CUSTOMER_SIMPLE: {\n TITLE: \"Customer Delete\",\n DESCRIPTION: \"Are you sure to permanently delete this customer?\",\n WAIT_DESCRIPTION: \"Customer is deleting...\",\n MESSAGE: \"Customer has been deleted\"\n },\n DELETE_CUSTOMER_MULTY: {\n TITLE: \"Customers Delete\",\n DESCRIPTION: \"Are you sure to permanently delete selected customers?\",\n WAIT_DESCRIPTION: \"Customers are deleting...\",\n MESSAGE: \"Selected customers have been deleted\"\n },\n UPDATE_STATUS: {\n TITLE: \"Status has been updated for selected customers\",\n MESSAGE: \"Selected customers status have successfully been updated\"\n },\n EDIT: {\n UPDATE_MESSAGE: \"Customer has been updated\",\n ADD_MESSAGE: \"Customer has been created\"\n }\n }\n }\n};\n","// Japan\nexport const locale = {\n TRANSLATOR: {\n SELECT: \"あなたが使う言語を選んでください\"\n },\n MENU: {\n NEW: \"新しい\",\n ACTIONS: \"行動\",\n CREATE_POST: \"新しい投稿を作成\",\n PAGES: \"Pages\",\n FEATURES: \"特徴\",\n APPS: \"アプリ\",\n DASHBOARD: \"ダッシュボード\"\n },\n AUTH: {\n GENERAL: {\n OR: \"または\",\n SUBMIT_BUTTON: \"提出する\",\n NO_ACCOUNT: \"アカウントを持っていない?\",\n SIGNUP_BUTTON: \"サインアップ\",\n FORGOT_BUTTON: \"パスワードをお忘れですか\",\n BACK_BUTTON: \"バック\",\n PRIVACY: \"プライバシー\",\n LEGAL: \"法的\",\n CONTACT: \"接触\"\n },\n LOGIN: {\n TITLE: \"Create Account\",\n BUTTON: \"Sign In\"\n },\n FORGOT: {\n TITLE: \"Forgot Password?\",\n DESC: \"Enter your email to reset your password\",\n SUCCESS: \"Your account has been successfully reset.\"\n },\n REGISTER: {\n TITLE: \"Sign Up\",\n DESC: \"Enter your details to create your account\",\n SUCCESS: \"Your account has been successfuly registered.\"\n },\n INPUT: {\n EMAIL: \"Email\",\n FULLNAME: \"Fullname\",\n PASSWORD: \"Password\",\n CONFIRM_PASSWORD: \"Confirm Password\",\n USERNAME: \"ユーザー名\"\n },\n VALIDATION: {\n INVALID: \"{{name}} is not valid\",\n REQUIRED: \"{{name}} is required\",\n MIN_LENGTH: \"{{name}} minimum length is {{min}}\",\n AGREEMENT_REQUIRED: \"Accepting terms & conditions are required\",\n NOT_FOUND: \"The requested {{name}} is not found\",\n INVALID_LOGIN: \"The login detail is incorrect\",\n REQUIRED_FIELD: \"Required field\",\n MIN_LENGTH_FIELD: \"Minimum field length:\",\n MAX_LENGTH_FIELD: \"Maximum field length:\",\n INVALID_FIELD: \"Field is not valid\"\n }\n },\n ECOMMERCE: {\n COMMON: {\n SELECTED_RECORDS_COUNT: \"Selected records count: \",\n ALL: \"All\",\n SUSPENDED: \"Suspended\",\n ACTIVE: \"Active\",\n FILTER: \"Filter\",\n BY_STATUS: \"by Status\",\n BY_TYPE: \"by Type\",\n BUSINESS: \"Business\",\n INDIVIDUAL: \"Individual\",\n SEARCH: \"Search\",\n IN_ALL_FIELDS: \"in all fields\"\n },\n ECOMMERCE: \"eCommerce\",\n CUSTOMERS: {\n CUSTOMERS: \"Customers\",\n CUSTOMERS_LIST: \"Customers list\",\n NEW_CUSTOMER: \"New Customer\",\n DELETE_CUSTOMER_SIMPLE: {\n TITLE: \"Customer Delete\",\n DESCRIPTION: \"Are you sure to permanently delete this customer?\",\n WAIT_DESCRIPTION: \"Customer is deleting...\",\n MESSAGE: \"Customer has been deleted\"\n },\n DELETE_CUSTOMER_MULTY: {\n TITLE: \"Customers Delete\",\n DESCRIPTION: \"Are you sure to permanently delete selected customers?\",\n WAIT_DESCRIPTION: \"Customers are deleting...\",\n MESSAGE: \"Selected customers have been deleted\"\n },\n UPDATE_STATUS: {\n TITLE: \"Status has been updated for selected customers\",\n MESSAGE: \"Selected customers status have successfully been updated\"\n },\n EDIT: {\n UPDATE_MESSAGE: \"Customer has been updated\",\n ADD_MESSAGE: \"Customer has been created\"\n }\n }\n }\n};\n","// Germany\nexport const locale = {\n TRANSLATOR: {\n SELECT: \"Wähle deine Sprache\"\n },\n MENU: {\n NEW: \"Neu\",\n ACTIONS: \"Aktionen\",\n CREATE_POST: \"Erstellen Sie einen neuen Beitrag\",\n PAGES: \"Pages\",\n FEATURES: \"Eigenschaften\",\n APPS: \"Apps\",\n DASHBOARD: \"Instrumententafel\"\n },\n AUTH: {\n GENERAL: {\n OR: \"Oder\",\n SUBMIT_BUTTON: \"einreichen\",\n NO_ACCOUNT: \"Hast du kein Konto?\",\n SIGNUP_BUTTON: \"Anmelden\",\n FORGOT_BUTTON: \"Passwort vergessen\",\n BACK_BUTTON: \"Zurück\",\n PRIVACY: \"Privatsphäre\",\n LEGAL: \"Legal\",\n CONTACT: \"Kontakt\"\n },\n LOGIN: {\n TITLE: \"Create Account\",\n BUTTON: \"Sign In\"\n },\n FORGOT: {\n TITLE: \"Forgot Password?\",\n DESC: \"Enter your email to reset your password\",\n SUCCESS: \"Your account has been successfully reset.\"\n },\n REGISTER: {\n TITLE: \"Sign Up\",\n DESC: \"Enter your details to create your account\",\n SUCCESS: \"Your account has been successfuly registered.\"\n },\n INPUT: {\n EMAIL: \"Email\",\n FULLNAME: \"Fullname\",\n PASSWORD: \"Password\",\n CONFIRM_PASSWORD: \"Confirm Password\",\n USERNAME: \"Nutzername\"\n },\n VALIDATION: {\n INVALID: \"{{name}} is not valid\",\n REQUIRED: \"{{name}} is required\",\n MIN_LENGTH: \"{{name}} minimum length is {{min}}\",\n AGREEMENT_REQUIRED: \"Accepting terms & conditions are required\",\n NOT_FOUND: \"The requested {{name}} is not found\",\n INVALID_LOGIN: \"The login detail is incorrect\",\n REQUIRED_FIELD: \"Required field\",\n MIN_LENGTH_FIELD: \"Minimum field length:\",\n MAX_LENGTH_FIELD: \"Maximum field length:\",\n INVALID_FIELD: \"Field is not valid\"\n }\n },\n ECOMMERCE: {\n COMMON: {\n SELECTED_RECORDS_COUNT: \"Selected records count: \",\n ALL: \"All\",\n SUSPENDED: \"Suspended\",\n ACTIVE: \"Active\",\n FILTER: \"Filter\",\n BY_STATUS: \"by Status\",\n BY_TYPE: \"by Type\",\n BUSINESS: \"Business\",\n INDIVIDUAL: \"Individual\",\n SEARCH: \"Search\",\n IN_ALL_FIELDS: \"in all fields\"\n },\n ECOMMERCE: \"eCommerce\",\n CUSTOMERS: {\n CUSTOMERS: \"Customers\",\n CUSTOMERS_LIST: \"Customers list\",\n NEW_CUSTOMER: \"New Customer\",\n DELETE_CUSTOMER_SIMPLE: {\n TITLE: \"Customer Delete\",\n DESCRIPTION: \"Are you sure to permanently delete this customer?\",\n WAIT_DESCRIPTION: \"Customer is deleting...\",\n MESSAGE: \"Customer has been deleted\"\n },\n DELETE_CUSTOMER_MULTY: {\n TITLE: \"Customers Delete\",\n DESCRIPTION: \"Are you sure to permanently delete selected customers?\",\n WAIT_DESCRIPTION: \"Customers are deleting...\",\n MESSAGE: \"Selected customers have been deleted\"\n },\n UPDATE_STATUS: {\n TITLE: \"Status has been updated for selected customers\",\n MESSAGE: \"Selected customers status have successfully been updated\"\n },\n EDIT: {\n UPDATE_MESSAGE: \"Customer has been updated\",\n ADD_MESSAGE: \"Customer has been created\"\n }\n }\n }\n};\n","// France\nexport const locale = {\n TRANSLATOR: {\n SELECT: \"choisissez votre langue\"\n },\n MENU: {\n NEW: \"Nouveau\",\n ACTIONS: \"Actes\",\n CREATE_POST: \"Créer un nouveau Post\",\n PAGES: \"Pages\",\n FEATURES: \"Fonctionnalités\",\n APPS: \"Applications\",\n DASHBOARD: \"Tableau de Bord\"\n },\n AUTH: {\n GENERAL: {\n OR: \"Ou\",\n SUBMIT_BUTTON: \"Soumettre\",\n NO_ACCOUNT: \"Ne pas avoir de compte?\",\n SIGNUP_BUTTON: \"Registre\",\n FORGOT_BUTTON: \"Mot de passe oublié\",\n BACK_BUTTON: \"Back\",\n PRIVACY: \"Privacy\",\n LEGAL: \"Legal\",\n CONTACT: \"Contact\"\n },\n LOGIN: {\n TITLE: \"Créer un compte\",\n BUTTON: \"Sign In\"\n },\n FORGOT: {\n TITLE: \"Forgot Password?\",\n DESC: \"Enter your email to reset your password\",\n SUCCESS: \"Your account has been successfully reset.\"\n },\n REGISTER: {\n TITLE: \"Sign Up\",\n DESC: \"Enter your details to create your account\",\n SUCCESS: \"Your account has been successfuly registered.\"\n },\n INPUT: {\n EMAIL: \"Email\",\n FULLNAME: \"Fullname\",\n PASSWORD: \"Mot de passe\",\n CONFIRM_PASSWORD: \"Confirm Password\",\n USERNAME: \"Nom d'utilisateur\"\n },\n VALIDATION: {\n INVALID: \"{{name}} n'est pas valide\",\n REQUIRED: \"{{name}} est requis\",\n MIN_LENGTH: \"{{name}} minimum length is {{min}}\",\n AGREEMENT_REQUIRED: \"Accepting terms & conditions are required\",\n NOT_FOUND: \"The requested {{name}} is not found\",\n INVALID_LOGIN: \"The login detail is incorrect\",\n REQUIRED_FIELD: \"Required field\",\n MIN_LENGTH_FIELD: \"Minimum field length:\",\n MAX_LENGTH_FIELD: \"Maximum field length:\",\n INVALID_FIELD: \"Field is not valid\"\n }\n },\n ECOMMERCE: {\n COMMON: {\n SELECTED_RECORDS_COUNT: \"Nombre d'enregistrements sélectionnés: \",\n ALL: \"All\",\n SUSPENDED: \"Suspended\",\n ACTIVE: \"Active\",\n FILTER: \"Filter\",\n BY_STATUS: \"by Status\",\n BY_TYPE: \"by Type\",\n BUSINESS: \"Business\",\n INDIVIDUAL: \"Individual\",\n SEARCH: \"Search\",\n IN_ALL_FIELDS: \"in all fields\"\n },\n ECOMMERCE: \"éCommerce\",\n CUSTOMERS: {\n CUSTOMERS: \"Les clients\",\n CUSTOMERS_LIST: \"Liste des clients\",\n NEW_CUSTOMER: \"Nouveau client\",\n DELETE_CUSTOMER_SIMPLE: {\n TITLE: \"Suppression du client\",\n DESCRIPTION: \"Êtes-vous sûr de supprimer définitivement ce client?\",\n WAIT_DESCRIPTION: \"Le client est en train de supprimer ...\",\n MESSAGE: \"Le client a été supprimé\"\n },\n DELETE_CUSTOMER_MULTY: {\n TITLE: \"Supprimer les clients\",\n DESCRIPTION:\n \"Êtes-vous sûr de supprimer définitivement les clients sélectionnés?\",\n WAIT_DESCRIPTION: \"Les clients suppriment ...\",\n MESSAGE: \"Les clients sélectionnés ont été supprimés\"\n },\n UPDATE_STATUS: {\n TITLE: \"Le statut a été mis à jour pour les clients sélectionnés\",\n MESSAGE:\n \"Le statut des clients sélectionnés a été mis à jour avec succès\"\n },\n EDIT: {\n UPDATE_MESSAGE: \"Le client a été mis à jour\",\n ADD_MESSAGE: \"Le client a été créé\"\n }\n }\n }\n};\n","import Vue from \"vue\";\nimport VueI18n from \"vue-i18n\";\n\n// // Localisation language list\n// import { locale as en } from \"@/core/config/i18n/en\";\n// import { locale as ch } from \"@/core/config/i18n/ch\";\n// import { locale as es } from \"@/core/config/i18n/es\";\n// import { locale as jp } from \"@/core/config/i18n/jp\";\n// import { locale as de } from \"@/core/config/i18n/de\";ㅑ\n// import { locale as fr } from \"@/core/config/i18n/fr\";\n//\n// Vue.use(VueI18n);\n//\n// let messages = {};\n// messages = { ...messages, en, ch, es, jp, de, fr };\n//\n// // get current selected language\n// const lang = localStorage.getItem(\"language\") || \"en\";\n//\n//\n//\n// // Create VueI18n instance with options\n// const i18n = new VueI18n({\n// locale: lang, // set locale\n// messages // set locale messages\n// });\n\nimport { locale as en } from \"@/core/config/i18n/en\";\nimport { locale as ch } from \"@/core/config/i18n/ch\";\nimport { locale as es } from \"@/core/config/i18n/es\";\nimport { locale as jp } from \"@/core/config/i18n/jp\";\nimport { locale as de } from \"@/core/config/i18n/de\";\nimport { locale as fr } from \"@/core/config/i18n/fr\";\nVue.use(VueI18n);\n\nfunction loadLocaleMessages () {\n const locales = require.context('../config/i18n', true, /[A-Za-z0-9-,\\s]+.json$/i)\n let messages = {}\n messages = { ...messages, en, ch, es, jp, de, fr };\n locales.keys().forEach(key => {\n const matched = key.match(/([A-Za-z0-9-]+)./i)\n if (matched && matched.length > 1) {\n const locale = matched[1];\n messages[locale] = locales(key)\n }\n });\n\n return messages;\n}\n\nlet langList = [\"cn\",\"en\",\"es\",\"jp\",\"ko\",\"pt\",\"vn\", \"ru\", \"ar\", \"fi\" , \"fr\", \"hi\", \"id\", \"pe\", \"pl\", \"th\", \"tr\"];\n\nlet lang = localStorage.getItem(\"language\") || \"en\"; //default\n\nlet userLang = null;\n// get query string\nconst urlSearchParams = new URLSearchParams(window.location.search);\nconst params = Object.fromEntries(urlSearchParams.entries());\nuserLang = params.lang ? params.lang : navigator.language;\n\nif( userLang ) {\n userLang = userLang.split( \"-\" )[0];\n if( langList.includes( userLang ) ) {\n lang = userLang;\n }\n}\n\nlet vueI18n = new VueI18n({\n locale: lang,\n fallbackLocale: lang,\n messages: loadLocaleMessages()\n}) ;\n\n\n\n\nexport default vueI18n;\n\n","import Vue from \"vue\";\n\nimport Vuetify from \"vuetify/lib/framework\";\n\nVue.use(Vuetify, {\n dense: true,\n fileInput: {\n\n dense: true,\n placeholder: \"안녕하세용\",\n color:\"red accent-4\"\n }\n});\n\nlet vuetifyObj = new Vuetify({\n\n/* dense : true,\n fileInput: {\n\n dense: true,\n placeholder: \"안녕하세용\",\n color:\"red accent-4\"\n },*/\n options: {\n customProperties: true\n },\n\n theme: {\n\n themes: {\n light: {\n primary: \"#5867dd\",\n secondary: \"#e8ecfa\",\n accent: \"#5d78ff\",\n error: \"#fd397a\",\n info: \"#5578eb\",\n success: \"#0abb87\",\n warning: \"#ffb822\"\n }\n }\n }\n});\n\n\n\nexport default vuetifyObj;\n\n//@TODO default 옵션 변경실패\n/*\nVue.component( \"v-file-input-custom\", {\n mixins : [VFileInput],\n mounted() {\n console.log( \"1111111111111111\" )\n }\n} )\n*/\n","import Vue from \"vue\";\nimport VueSweetalert2 from \"vue-sweetalert2\";\n\nimport 'sweetalert2/dist/sweetalert2.min.css';\n\nVue.use(VueSweetalert2);\n","import Vue from \"vue\";\nimport PortalVue from \"portal-vue\";\n\nVue.use(PortalVue);\n\nexport default PortalVue;\n","import Vue from \"vue\";\nimport { BootstrapVue, IconsPlugin } from \"bootstrap-vue\";\n\n// Install BootstrapVue\nVue.use(BootstrapVue);\n// Optionally install the BootstrapVue icon components plugin\nVue.use(IconsPlugin);\n","import Vue from \"vue\";\nimport PerfectScrollbar from \"vue2-perfect-scrollbar\";\n\n// Perfect scrollbar\nVue.use(PerfectScrollbar);\n\n//Vue.component( \"perfect-scrollbar\", PerfectScrollbar );\n","import Vue from \"vue\";\n// Highlight js\nimport VueHighlightJS from \"vue-highlight.js\";\n// Highlight.js languages (Only required languages)\nimport scss from \"highlight.js/lib/languages/scss\";\nimport javascript from \"highlight.js/lib/languages/javascript\";\nimport json from \"highlight.js/lib/languages/json\";\nimport vue from \"vue-highlight.js/lib/languages/vue\";\nimport \"highlight.js/styles/github-gist.css\";\n\n// highlight js\nVue.use(VueHighlightJS, {\n // Register only languages that you want\n languages: {\n scss,\n javascript,\n json,\n vue\n }\n});\n","import Vue from \"vue\";\nimport { InlineSvgPlugin } from \"vue-inline-svg\";\n\nVue.use(InlineSvgPlugin);\n","import Vue from \"vue\";\nimport VueApexCharts from \"vue-apexcharts\";\n\nVue.use(VueApexCharts);\n\nVue.component(\"apexchart\", VueApexCharts);\n","import Vue from \"vue\";\nimport Treeselect from \"@riophae/vue-treeselect\";\n\nVue.use(Treeselect);\n\nVue.component(\"treeselect\", Treeselect);\n","\"use strict\";\n\nvar KTLayoutAside = function() {\n // Private properties\n var _body;\n var _element;\n var _offcanvasObject;\n\n // Private functions\n\t// Initialize\n\tvar _init = function() {\n\t\tvar offcanvasClass = KTUtil.hasClass(_element, 'aside-offcanvas-default') ? 'aside-offcanvas-default' : 'aside';\n\n // Initialize mobile aside offcanvas\n\t\t_offcanvasObject = new KTOffcanvas(_element, {\n\t\t\tbaseClass: offcanvasClass,\n\t\t\toverlay: true,\n\t\t\tcloseBy: 'kt_aside_close_btn',\n\t\t\ttoggleBy: {\n\t\t\t\ttarget: 'kt_aside_mobile_toggle',\n\t\t\t\tstate: 'mobile-toggle-active'\n\t\t\t}\n\t\t});\n\t}\n\n // Public methods\n\treturn {\n\t\tinit: function(id) {\n _element = KTUtil.getById(id);\n _body = KTUtil.getBody();\n\n if (!_element) {\n return;\n }\n\n // Initialize\n _init();\n },\n\n getElement: function() {\n return _element;\n },\n\n getOffcanvas: function() {\n return _offcanvasObject;\n },\n\n isFixed: function() {\n return KTUtil.hasClass(_body, 'aside-fixed');\n },\n\n isMinimized: function() {\n return (KTUtil.hasClass(_body, 'aside-fixed') && KTUtil.hasClass(_body, 'aside-minimize'));\n },\n\n isHoverable: function() {\n return (KTUtil.hasClass(_body, 'aside-fixed') && KTUtil.hasClass(_body, 'aside-minimize-hoverable'));\n }\n\t};\n}();\n\n\n\nexport default KTLayoutAside;","\"use strict\";\n\nvar KTLayoutAsideMenu = function() {\n // Private properties\n var _body;\n var _element;\n var _menuObject;\n\n\t// Initialize\n\tvar _init = function() {\n\t\tvar menuDesktopMode = (KTUtil.attr(_element, 'data-menu-dropdown') === '1' ? 'dropdown' : 'accordion');\n var scroll;\n\n\t\tif (KTUtil.attr(_element, 'data-menu-scroll') === '1') {\n\t\t\tscroll = {\n\t\t\t\trememberPosition: true, // remember position on page reload\n\t\t\t\theight: function() { // calculate available scrollable area height\n\t\t\t\t\tvar height = parseInt(KTUtil.getViewPort().height);\n\n\t\t\t\t\tif (KTUtil.isBreakpointUp('lg')) {\n\t\t\t\t\t\theight = height - KTLayoutBrand.getHeight();\n\t\t\t\t\t}\n\n\t\t\t\t\theight = height - (parseInt(KTUtil.css(_element, 'marginBottom')) + parseInt(KTUtil.css(_element, 'marginTop')));\n\n\t\t\t\t\treturn height;\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t_menuObject = new KTMenu(_element, {\n\t\t\t// Vertical scroll\n\t\t\tscroll: scroll,\n\n\t\t\t// Submenu setup\n\t\t\tsubmenu: {\n\t\t\t\tdesktop: menuDesktopMode,\n\t\t\t\ttablet: 'accordion', // menu set to accordion in tablet mode\n\t\t\t\tmobile: 'accordion' // menu set to accordion in mobile mode\n\t\t\t},\n\n\t\t\t// Accordion setup\n\t\t\taccordion: {\n\t\t\t\texpandAll: false // allow having multiple expanded accordions in the menu\n\t\t\t}\n\t\t});\n\t}\n\n var _initHover = function() {\n // Handle Minimized Aside Hover\n\t\tif (KTUtil.hasClass(_body, 'aside-fixed') && KTUtil.hasClass(_body, 'aside-minimize-hoverable')) {\n\t\t\tvar insideTm;\n\t\t\tvar outsideTm;\n\n // Handle Aside Hover Mode\n\t\t\tKTUtil.addEvent(_element, 'mouseenter', function(e) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tif (KTUtil.isBreakpointUp('lg') === false) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (outsideTm) {\n\t\t\t\t\tclearTimeout(outsideTm);\n\t\t\t\t\toutsideTm = null;\n\t\t\t\t}\n\n if (insideTm) {\n\t\t\t\t\tclearTimeout(insideTm);\n\t\t\t\t\tinsideTm = null;\n\t\t\t\t}\n\n\t\t\t\tinsideTm = setTimeout(function() {\n\t\t\t\t\tif (KTUtil.hasClass(_body, 'aside-minimize') && KTUtil.isBreakpointUp('lg')) {\n\t\t\t\t\t\t// Hover class\n\t\t\t\t\t\tKTUtil.addClass(_body, 'aside-minimize-hover');\n\n\t\t\t\t\t\tKTLayoutAsideMenu.getMenu().scrollUpdate();\n\t\t\t\t\t\tKTLayoutAsideMenu.getMenu().scrollTop();\n\t\t\t\t\t}\n\t\t\t\t}, 50);\n\t\t\t});\n\n\t\t\tKTUtil.addEvent(KTLayoutAside.getElement(), 'mouseleave', function(e) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tif (KTUtil.isBreakpointUp('lg') === false) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (insideTm) {\n\t\t\t\t\tclearTimeout(insideTm);\n\t\t\t\t\tinsideTm = null;\n\t\t\t\t}\n\n if (outsideTm) {\n\t\t\t\t\tclearTimeout(outsideTm);\n\t\t\t\t\toutsideTm = null;\n\t\t\t\t}\n\n\t\t\t\toutsideTm = setTimeout(function() {\n\t\t\t\t if (KTUtil.hasClass(_body, 'aside-minimize-hover') && KTUtil.isBreakpointUp('lg')) {\n\t\t\t\t\t KTUtil.removeClass(_body, 'aside-minimize-hover');\n\n\t\t\t\t\t\t// Hover class\n KTLayoutAsideMenu.getMenu().scrollUpdate();\n\t\t\t\t\t\tKTLayoutAsideMenu.getMenu().scrollTop();\n\t\t\t\t\t}\n\t\t\t\t}, 100);\n\t\t\t});\n\t\t}\n\t}\n\n // Public methods\n\treturn {\n\t\tinit: function(id) {\n _body = KTUtil.getBody();\n _element = KTUtil.getById(id);\n\n if (!_element) {\n return;\n }\n\n // Initialize menu\n _init();\n _initHover();\n\t\t},\n\n\t\tgetElement: function() {\n\t\t\treturn _element;\n\t\t},\n\n getMenu: function() {\n\t\t\treturn _menuObject;\n\t\t},\n\n pauseDropdownHover: function(time) {\n\t\t\tif (_menuObject) {\n\t\t\t\t_menuObject.pauseDropdownHover(time);\n\t\t\t}\n\t\t},\n\n\t\tcloseMobileOffcanvas: function() {\n\t\t\tif (_menuObject && KTUtil.isMobileDevice()) {\n\t\t\t\t_menuObject.hide();\n\t\t\t}\n\t\t}\n\t};\n}();\n\n\n\nexport default KTLayoutAsideMenu;","\"use strict\";\n\nvar KTLayoutAsideToggle = function() {\n // Private properties\n var _body;\n var _element;\n var _toggleObject;\n\n\t// Initialize\n\tvar _init = function() {\n\t\t_toggleObject = new KTToggle(_element, _body, {\n\t\t\ttargetState: 'aside-minimize',\n\t\t\ttoggleState: 'active'\n\t\t});\n\n\t\t_toggleObject.on('toggle', function(toggle) {\n // Update sticky card\n if (typeof KTLayoutStickyCard !== 'undefined') {\n KTLayoutStickyCard.update();\n }\n\n // Pause header menu dropdowns\n if (typeof KTLayoutHeaderMenu !== 'undefined') {\n KTLayoutHeaderMenu.pauseDropdownHover(800);\n }\n\n // Pause aside menu dropdowns\n if (typeof KTLayoutAsideMenu !== 'undefined') {\n KTLayoutAsideMenu.pauseDropdownHover(800);\n }\n\n // Remember state in cookie\n\t\t\tKTCookie.setCookie('kt_aside_toggle_state', toggle.getState());\n\t\t\t// to set default minimized left aside use this cookie value in your\n\t\t\t// server side code and add \"kt-primary--minimize aside-minimize\" classes to\n\t\t\t// the body tag in order to initialize the minimized left aside mode during page loading.\n\t\t});\n\n\t\t_toggleObject.on('beforeToggle', function(toggle) {\n\t\t\tif (KTUtil.hasClass(_body, 'aside-minimize') === false && KTUtil.hasClass(_body, 'aside-minimize-hover')) {\n\t\t\t\tKTUtil.removeClass(_body, 'aside-minimize-hover');\n\t\t\t}\n\t\t});\n\t}\n\n // Public methods\n\treturn {\n\t\tinit: function(id) {\n _element = KTUtil.getById(id);\n _body = KTUtil.getBody();\n\n if (!_element) {\n return;\n }\n\n // Initialize\n _init();\n\t\t},\n\n getElement: function() {\n return _element;\n },\n\n getToggle: function() {\n\t\t\treturn _toggleObject;\n\t\t},\n\n\t\tonToggle: function(handler) {\n\t\t\tif (typeof _toggleObject.element !== 'undefined') {\n\t\t\t\t_toggleObject.on('toggle', handler);\n\t\t\t}\n\t\t}\n\t};\n}();\n\n\n\nexport default KTLayoutAsideToggle;","\"use strict\";\n\nvar KTLayoutBrand = function() {\n // Private properties\n var _element;\n\n // Private functions\n var _getHeight = function() {\n var height = 0;\n\n if (_element) {\n height = KTUtil.actualHeight(_element);\n }\n\n return height;\n }\n\n // Public methods\n\treturn {\n\t\tinit: function(id) {\n _element = KTUtil.getById(id);\n\n if (!_element) {\n return;\n }\n\t\t},\n\n getElement: function() {\n return _element;\n },\n\n getHeight: function() {\n return _getHeight();\n }\n\t};\n}();\n\n\n\nexport default KTLayoutBrand;","\"use strict\";\n\nvar KTLayoutContent = function() {\n // Private properties\n var _element;\n\n\t// Private functions\n\tvar _getHeight = function() {\n\t\tvar height;\n\n\t\theight = KTUtil.getViewPort().height;\n\n if (_element) {\n height = height - parseInt(KTUtil.css(_element, 'paddingTop')) - parseInt(KTUtil.css(_element, 'paddingBottom'));\n }\n\n height = height - KTLayoutHeader.getHeight();\n height = height - KTLayoutSubheader.getHeight();\n height = height - KTLayoutFooter.getHeight();\n\n\t\treturn height;\n\t}\n\n // Public methods\n\treturn {\n\t\tinit: function(id) {\n _element = KTUtil.getById(id);\n\t\t},\n\n\t\tgetHeight: function() {\n\t\t\treturn _getHeight();\n\t\t},\n\n getElement: function() {\n return _element;\n }\n\t};\n}();\n\n\n\nexport default KTLayoutContent;","\"use strict\";\n\nvar KTLayoutFooter = function() {\n // Private properties\n var _element;\n\n\t// Private functions\n\tvar _getHeight = function() {\n\t\tvar height = 0;\n\n if (_element) {\n height = KTUtil.actualHeight(_element);\n }\n\n\t\treturn height;\n\t}\n\n // Public methods\n\treturn {\n\t\tinit: function(id) {\n _element = KTUtil.getById(id);\n\t\t},\n\n\t\tgetHeight: function() {\n\t\t\treturn _getHeight();\n\t\t},\n\n getElement: function() {\n return _element;\n }\n\t};\n}();\n\n\n\nexport default KTLayoutFooter;","\"use strict\";\n\nvar KTLayoutHeaderTopbar = function() {\n // Private properties\n\tvar _toggleElement;\n var _toggleObject;\n\n // Private functions\n var _init = function() {\n _toggleObject = new KTToggle(_toggleElement, KTUtil.getBody(), {\n targetState: 'topbar-mobile-on',\n toggleState: 'active',\n });\n }\n\n // Public methods\n\treturn {\n\t\tinit: function(id) {\n _toggleElement = KTUtil.getById(id);\n\n\t\t\tif (!_toggleElement) {\n return;\n }\n\n // Initialize\n _init();\n\t\t},\n\n getToggleElement: function() {\n return _toggleElement;\n }\n\t};\n}();\n\n\n\nexport default KTLayoutHeaderTopbar;","\"use strict\";\n\nvar KTLayoutStickyCard = function() {\n // Private properties\n\tvar _element;\n var _object;\n\n\t// Private functions\n\tvar _init = function() {\n\t\tvar offset = 300;\n\n\t\tif (typeof KTLayoutHeader !== 'undefined') {\n\t\t\toffset = KTLayoutHeader.getHeight();\n\t\t}\n\n _object = new KTCard(_element, {\n\t\t\tsticky: {\n\t\t\t\toffset: offset,\n\t\t\t\tzIndex: 90,\n\t\t\t\tposition: {\n\t\t\t\t\ttop: function() {\n\t\t\t\t\t\tvar pos = 0;\n var body = KTUtil.getBody();\n\n\t\t\t\t\t\tif (KTUtil.isBreakpointUp('lg')) {\n\t\t\t\t\t\t\tif (typeof KTLayoutHeader !== 'undefined' && KTLayoutHeader.isFixed()) {\n\t\t\t\t\t\t\t\tpos = pos + KTLayoutHeader.getHeight();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (typeof KTLayoutSubheader !== 'undefined' && KTLayoutSubheader.isFixed()) {\n\t\t\t\t\t\t\t\tpos = pos + KTLayoutSubheader.getHeight();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (typeof KTLayoutHeader !== 'undefined' && KTLayoutHeader.isFixedForMobile()) {\n\t\t\t\t\t\t\t\tpos = pos + KTLayoutHeader.getHeightForMobile();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpos = pos - 1; // remove header border width\n\n\t\t\t\t\t\treturn pos;\n\t\t\t\t\t},\n\t\t\t\t\tleft: function(card) {\n\t\t\t\t\t\treturn KTUtil.offset(_element).left;\n\t\t\t\t\t},\n\t\t\t\t\tright: function(card) {\n\t\t\t\t\t\tvar body = KTUtil.getBody();\n\n\t\t\t\t\t\tvar cardWidth = parseInt(KTUtil.css(_element, 'width'));\n\t\t\t\t\t\tvar bodyWidth = parseInt(KTUtil.css(body, 'width'));\n\t\t\t\t\t\tvar cardOffsetLeft = KTUtil.offset(_element).left;\n\n\t\t\t\t\t\treturn bodyWidth - cardWidth - cardOffsetLeft;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t_object.initSticky();\n\n\t\tKTUtil.addResizeHandler(function() {\n\t\t\t_object.updateSticky();\n\t\t});\n\t}\n\n // Public methods\n\treturn {\n\t\tinit: function(id) {\n _element = KTUtil.getById(id);\n\n if (!_element) {\n return;\n }\n\n // Initialize\n\t\t\t_init();\n\t\t},\n\n\t\tupdate: function() {\n\t\t\tif (_object) {\n\t\t\t\t_object.updateSticky();\n\t\t\t}\n\t\t}\n\t};\n}();\n\n\n\nexport default KTLayoutStickyCard;","\"use strict\";\n\nvar KTLayoutStretchedCard = function() {\n // Private properties\n\tvar _element;\n\n\t// Private functions\n\tvar _init = function() {\n\t\tvar scroll = KTUtil.find(_element, '.card-scroll');\n\t\tvar cardBody = KTUtil.find(_element, '.card-body');\n\t\tvar cardHeader = KTUtil.find(_element, '.card-header');\n\n\t\tvar height = KTLayoutContent.getHeight();\n\n\t\theight = height - parseInt(KTUtil.actualHeight(cardHeader));\n\n\t\theight = height - parseInt(KTUtil.css(_element, 'marginTop')) - parseInt(KTUtil.css(_element, 'marginBottom'));\n\t\theight = height - parseInt(KTUtil.css(_element, 'paddingTop')) - parseInt(KTUtil.css(_element, 'paddingBottom'));\n\n\t\theight = height - parseInt(KTUtil.css(cardBody, 'paddingTop')) - parseInt(KTUtil.css(cardBody, 'paddingBottom'));\n\t\theight = height - parseInt(KTUtil.css(cardBody, 'marginTop')) - parseInt(KTUtil.css(cardBody, 'marginBottom'));\n\n\t\theight = height - 3;\n\n\t\tKTUtil.css(scroll, 'height', height + 'px');\n\t}\n\n // Public methods\n\treturn {\n\t\tinit: function(id) {\n _element = KTUtil.getById(id);\n\n if (!_element) {\n return;\n }\n\n // Initialize\n\t\t\t_init();\n\n // Re-calculate on window resize\n KTUtil.addResizeHandler(function() {\n\t\t\t\t_init();\n\t\t\t});\n\t\t},\n\n\t\tupdate: function() {\n\t\t\t_init();\n\t\t}\n\t};\n}();\n\n\n\nexport default KTLayoutStretchedCard;","\"use strict\";\n\nvar KTLayoutSubheader = function() {\n // Private properties\n var _element;\n\n // Private functions\n var _getHeight = function() {\n var height = 0;\n\n if (_element) {\n height = KTUtil.actualHeight(_element);\n }\n\n return height;\n }\n\n // Public methods\n\treturn {\n\t\tinit: function(id) {\n _element = KTUtil.getById(id);\n\n if (!_element) {\n return;\n }\n\t\t},\n\n isFixed: function() {\n return KTUtil.hasClass(KTUtil.getBody(), 'subheader-fixed');\n },\n\n getElement: function() {\n return _element;\n },\n\n getHeight: function() {\n return _getHeight();\n }\n\t};\n}();\n\n\n\nexport default KTLayoutSubheader;","\"use strict\";\n\n// Class definition\nvar KTLayoutChat = function () {\n\t// Private functions\n\tvar _init = function (element) {\n\t\tvar scrollEl = KTUtil.find(element, '.scroll');\n\t\tvar cardBodyEl = KTUtil.find(element, '.card-body');\n\t\tvar cardHeaderEl = KTUtil.find(element, '.card-header');\n\t\tvar cardFooterEl = KTUtil.find(element, '.card-footer');\n\n\t\tif (!scrollEl) {\n\t\t\treturn;\n\t\t}\n\n\t\t// initialize perfect scrollbar(see: https://github.com/utatti/perfect-scrollbar)\n\t\tKTUtil.scrollInit(scrollEl, {\n\t\t\twindowScroll: false, // allow browser scroll when the scroll reaches the end of the side\n\t\t\tmobileNativeScroll: true, // enable native scroll for mobile\n\t\t\tdesktopNativeScroll: false, // disable native scroll and use custom scroll for desktop\n\t\t\tresetHeightOnDestroy: true, // reset css height on scroll feature destroyed\n\t\t\thandleWindowResize: true, // recalculate hight on window resize\n\t\t\trememberPosition: true, // remember scroll position in cookie\n\t\t\theight: function() { // calculate height\n\t\t\t\tvar height;\n\n\t\t\t\tif (KTUtil.isBreakpointDown('lg')) { // Mobile mode\n\t\t\t\t\treturn KTUtil.hasAttr(scrollEl, 'data-mobile-height') ? parseInt(KTUtil.attr(scrollEl, 'data-mobile-height')) : 400;\n\t\t\t\t} else if (KTUtil.isBreakpointUp('lg') && KTUtil.hasAttr(scrollEl, 'data-height')) { // Desktop Mode\n\t\t\t\t\treturn parseInt(KTUtil.attr(scrollEl, 'data-height'));\n\t\t\t\t} else {\n\t\t\t\t\theight = KTLayoutContent.getHeight();\n\n\t\t\t\t\tif (scrollEl) {\n\t\t\t\t\t\theight = height - parseInt(KTUtil.css(scrollEl, 'margin-top')) - parseInt(KTUtil.css(scrollEl, 'margin-bottom'));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (cardHeaderEl) {\n\t\t\t\t\t\theight = height - parseInt(KTUtil.css(cardHeaderEl, 'height'));\n\t\t\t\t\t\theight = height - parseInt(KTUtil.css(cardHeaderEl, 'margin-top')) - parseInt(KTUtil.css(cardHeaderEl, 'margin-bottom'));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (cardBodyEl) {\n\t\t\t\t\t\theight = height - parseInt(KTUtil.css(cardBodyEl, 'padding-top')) - parseInt(KTUtil.css(cardBodyEl, 'padding-bottom'));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (cardFooterEl) {\n\t\t\t\t\t\theight = height - parseInt(KTUtil.css(cardFooterEl, 'height'));\n\t\t\t\t\t\theight = height - parseInt(KTUtil.css(cardFooterEl, 'margin-top')) - parseInt(KTUtil.css(cardFooterEl, 'margin-bottom'));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove additional space\n\t\t\t\theight = height - 2;\n\n\t\t\t\treturn height;\n\t\t\t}\n\t\t});\n\n\t\t// attach events\n\t\tKTUtil.on(element, '.card-footer textarea', 'keydown', function(e) {\n\t\t\tif (e.keyCode == 13) {\n\t\t\t\t_handeMessaging(element);\n\t\t\t\te.preventDefault();\n\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\n\t\tKTUtil.on(element, '.card-footer .chat-send', 'click', function(e) {\n\t\t\t_handeMessaging(element);\n\t\t});\n\t}\n\n\tvar _handeMessaging = function(element) {\n\t\tvar messagesEl = KTUtil.find(element, '.messages');\n\t\tvar scrollEl = KTUtil.find(element, '.scroll');\n var textarea = KTUtil.find(element, 'textarea');\n\n if (textarea.value.length === 0 ) {\n return;\n }\n\n\t\tvar node = document.createElement(\"DIV\");\n\t\tKTUtil.addClass(node, 'd-flex flex-column mb-5 align-items-end');\n\n\t\tvar html = '';\n\t\thtml += '';\n\t\thtml += '\t
';\n\t\thtml += '\t\t
2 Hours';\n\t\thtml += '\t\t
You';\n\t\thtml += '\t
';\n\t\thtml += '\t
';\n\t\thtml += '\t\t

';\n\t\thtml += '\t
';\n\t\thtml += '
';\n\t\thtml += '' + textarea.value + '
';\n\n\t\tKTUtil.setHTML(node, html);\n\t\tmessagesEl.appendChild(node);\n\t\ttextarea.value = '';\n\t\tscrollEl.scrollTop = parseInt(KTUtil.css(messagesEl, 'height'));\n\n\t\tvar ps;\n\t\tif (ps = KTUtil.data(scrollEl).get('ps')) {\n\t\t\tps.update();\n\t\t}\n\n\t\tsetTimeout(function() {\n\t\t\tvar node = document.createElement(\"DIV\");\n\t\t\tKTUtil.addClass(node, 'd-flex flex-column mb-5 align-items-start');\n\n\t\t\tvar html = '';\n\t\t\thtml += '';\n\t\t\thtml += '\t
';\n\t\t\thtml += '\t\t

';\n\t\t\thtml += '\t
';\n\t\t\thtml += '\t
';\n\t\t\thtml += '\t\t
Matt Pears';\n\t\t\thtml += '\t\t
Just now';\n\t\t\thtml += '\t
';\n\t\t\thtml += '
';\n\t\t\thtml += '';\n\t\t\thtml += 'Right before vacation season we have the next Big Deal for you.';\n\t\t\thtml += '
';\n\n\t\t\tKTUtil.setHTML(node, html);\n\t\t\tmessagesEl.appendChild(node);\n\t\t\ttextarea.value = '';\n\t\t\tscrollEl.scrollTop = parseInt(KTUtil.css(messagesEl, 'height'));\n\n\t\t\tvar ps;\n\t\t\tif (ps = KTUtil.data(scrollEl).get('ps')) {\n\t\t\t\tps.update();\n\t\t\t}\n\t\t}, 2000);\n\t}\n\n\t// Public methods\n\treturn {\n\t\tinit: function(id) {\n\t\t\t// Init modal chat example\n\t\t\t_init(KTUtil.getById(id));\n\n\t\t\t// Trigger click to show popup modal chat on page load\n\t\t\tif (encodeURI(window.location.hostname) == 'keenthemes.com' || encodeURI(window.location.hostname) == 'www.keenthemes.com') {\n\t\t\t\tsetTimeout(function() {\n\t\t if (!KTCookie.getCookie('kt_app_chat_shown')) {\n\t\t var expires = new Date(new Date().getTime() + 60 * 60 * 1000); // expire in 60 minutes from now\n\n\t\t\t\t\t\tKTCookie.setCookie('kt_app_chat_shown', 1, { expires: expires });\n\n\t\t\t\t\t\tif (KTUtil.getById('kt_app_chat_launch_btn')) {\n\t\t\t\t\t\t\tKTUtil.getById('kt_app_chat_launch_btn').click();\n\t\t\t\t\t\t}\n\t\t }\n\t\t }, 2000);\n\t }\n },\n\n setup: function(element) {\n _init(element);\n }\n\t};\n}();\n\n\n\nexport default KTLayoutChat;","\"use strict\";\n\nvar KTLayoutQuickActions = function() {\n // Private properties\n var _element;\n var _offcanvasObject;\n\n // Private functions\n var _init = function() {\n var header = KTUtil.find(_element, '.offcanvas-header');\n var content = KTUtil.find(_element, '.offcanvas-content');\n\n _offcanvasObject = new KTOffcanvas(_element, {\n overlay: true,\n baseClass: 'offcanvas',\n placement: 'right',\n closeBy: 'kt_quick_actions_close',\n toggleBy: 'kt_quick_actions_toggle'\n });\n\n KTUtil.scrollInit(content, {\n disableForMobile: true,\n resetHeightOnDestroy: true,\n handleWindowResize: true,\n height: function() {\n var height = parseInt(KTUtil.getViewPort().height);\n\n if (header) {\n height = height - parseInt(KTUtil.actualHeight(header));\n height = height - parseInt(KTUtil.css(header, 'marginTop'));\n height = height - parseInt(KTUtil.css(header, 'marginBottom'));\n }\n\n if (content) {\n height = height - parseInt(KTUtil.css(content, 'marginTop'));\n height = height - parseInt(KTUtil.css(content, 'marginBottom'));\n }\n\n height = height - parseInt(KTUtil.css(_element, 'paddingTop'));\n height = height - parseInt(KTUtil.css(_element, 'paddingBottom'));\n\n height = height - 2;\n\n return height;\n }\n });\n }\n\n // Public methods\n return {\n init: function(id) {\n _element = KTUtil.getById(id);\n\n if (!_element) {\n return;\n }\n\n // Initialize\n _init();\n },\n\n getElement: function() {\n return _element;\n }\n };\n}();\n\n\n\nexport default KTLayoutQuickActions;","\"use strict\";\n\nvar KTLayoutQuickCartPanel = function() {\n // Private properties\n var _element;\n var _offcanvasObject;\n\n // Private functions\n var _init = function() {\n _offcanvasObject = new KTOffcanvas(_element, {\n overlay: true,\n baseClass: 'offcanvas',\n placement: 'right',\n closeBy: 'kt_quick_cart_close',\n toggleBy: 'kt_quick_cart_toggle'\n });\n\n var header = KTUtil.find(_element, '.offcanvas-header');\n var content = KTUtil.find(_element, '.offcanvas-content');\n var wrapper = KTUtil.find(_element, '.offcanvas-wrapper');\n var footer = KTUtil.find(_element, '.offcanvas-footer');\n\n KTUtil.scrollInit(wrapper, {\n disableForMobile: true,\n resetHeightOnDestroy: true,\n handleWindowResize: true,\n height: function() {\n var height = parseInt(KTUtil.getViewPort().height);\n\n if (header) {\n height = height - parseInt(KTUtil.actualHeight(header));\n height = height - parseInt(KTUtil.css(header, 'marginTop'));\n height = height - parseInt(KTUtil.css(header, 'marginBottom'));\n }\n\n if (content) {\n height = height - parseInt(KTUtil.css(content, 'marginTop'));\n height = height - parseInt(KTUtil.css(content, 'marginBottom'));\n }\n\n if (wrapper) {\n height = height - parseInt(KTUtil.css(wrapper, 'marginTop'));\n height = height - parseInt(KTUtil.css(wrapper, 'marginBottom'));\n }\n\n if (footer) {\n height = height - parseInt(KTUtil.actualHeight(footer));\n height = height - parseInt(KTUtil.css(footer, 'marginTop'));\n height = height - parseInt(KTUtil.css(footer, 'marginBottom'));\n }\n\n height = height - parseInt(KTUtil.css(_element, 'paddingTop'));\n height = height - parseInt(KTUtil.css(_element, 'paddingBottom'));\n\n height = height - 2;\n\n return height;\n }\n });\n }\n\n // Public methods\n return {\n init: function(id) {\n _element = KTUtil.getById(id);\n\n if (!_element) {\n return;\n }\n\n // Initialize\n _init();\n }\n };\n}();\n\n\n\nexport default KTLayoutQuickCartPanel;","\"use strict\";\n\nvar KTLayoutQuickNotifications = function() {\n // Private properties\n var _element;\n var _offcanvasObject;\n\n // Private functions\n var _init = function() {\n var header = KTUtil.find(_element, '.offcanvas-header');\n var content = KTUtil.find(_element, '.offcanvas-content');\n\n _offcanvasObject = new KTOffcanvas(_element, {\n overlay: true,\n baseClass: 'offcanvas',\n placement: 'right',\n closeBy: 'kt_quick_notifications_close',\n toggleBy: 'kt_quick_notifications_toggle'\n });\n\n KTUtil.scrollInit(content, {\n disableForMobile: true,\n resetHeightOnDestroy: true,\n handleWindowResize: true,\n height: function() {\n var height = parseInt(KTUtil.getViewPort().height);\n\n if (header) {\n height = height - parseInt(KTUtil.actualHeight(header));\n height = height - parseInt(KTUtil.css(header, 'marginTop'));\n height = height - parseInt(KTUtil.css(header, 'marginBottom'));\n }\n\n if (content) {\n height = height - parseInt(KTUtil.css(content, 'marginTop'));\n height = height - parseInt(KTUtil.css(content, 'marginBottom'));\n }\n\n height = height - parseInt(KTUtil.css(_element, 'paddingTop'));\n height = height - parseInt(KTUtil.css(_element, 'paddingBottom'));\n\n height = height - 2;\n\n return height;\n }\n });\n }\n\n // Public methods\n return {\n init: function(id) {\n _element = KTUtil.getById(id);\n\n if (!_element) {\n return;\n }\n\n // Initialize\n _init();\n },\n\n getElement: function() {\n return _element;\n }\n };\n}();\n\n\n\nexport default KTLayoutQuickNotifications;","\"use strict\";\n\nvar KTLayoutQuickPanel = function() {\n // Private properties\n var _element;\n var _offcanvasObject;\n var _notificationsElement;\n var _logsElement;\n var _settingsElement;\n\n // Private functions\n var _getContentHeight = function() {\n var height;\n\n var header = KTUtil.find(_element, '.offcanvas-header');\n var content = KTUtil.find(_element, '.offcanvas-content');\n\n var height = parseInt(KTUtil.getViewPort().height);\n\n if (header) {\n height = height - parseInt(KTUtil.actualHeight(header));\n height = height - parseInt(KTUtil.css(header, 'marginTop'));\n height = height - parseInt(KTUtil.css(header, 'marginBottom'));\n }\n\n if (content) {\n height = height - parseInt(KTUtil.css(content, 'marginTop'));\n height = height - parseInt(KTUtil.css(content, 'marginBottom'));\n }\n\n height = height - parseInt(KTUtil.css(_element, 'paddingTop'));\n height = height - parseInt(KTUtil.css(_element, 'paddingBottom'));\n\n height = height - 2;\n\n return height;\n }\n\n var _init = function() {\n _offcanvasObject = new KTOffcanvas(_element, {\n overlay: true,\n baseClass: 'offcanvas',\n placement: 'right',\n closeBy: 'kt_quick_panel_close',\n toggleBy: 'kt_quick_panel_toggle'\n });\n }\n\n var _initNotifications = function() {\n KTUtil.scrollInit(_notificationsElement, {\n mobileNativeScroll: true,\n resetHeightOnDestroy: true,\n handleWindowResize: true,\n height: function() {\n return _getContentHeight();\n }\n });\n }\n\n var _initLogs = function() {\n KTUtil.scrollInit(_logsElement, {\n mobileNativeScroll: true,\n resetHeightOnDestroy: true,\n handleWindowResize: true,\n height: function() {\n return _getContentHeight();\n }\n });\n }\n\n var _initSettings = function() {\n KTUtil.scrollInit(_settingsElement, {\n mobileNativeScroll: true,\n resetHeightOnDestroy: true,\n handleWindowResize: true,\n height: function() {\n return _getContentHeight();\n }\n });\n }\n\n var _updateScrollbars = function() {\n $(_element).find('a[data-toggle=\"tab\"]').on('shown.bs.tab', function (e) {\n KTUtil.scrollUpdate(_notificationsElement);\n KTUtil.scrollUpdate(_logsElement);\n KTUtil.scrollUpdate(_settingsElement);\n });\n }\n\n // Public methods\n return {\n init: function(id) {\n _element = KTUtil.getById(id);\n _notificationsElement = KTUtil.getById('kt_quick_panel_notifications');\n _logsElement = KTUtil.getById('kt_quick_panel_logs');\n _settingsElement = KTUtil.getById('kt_quick_panel_settings');\n\n _init();\n _initNotifications();\n _initLogs();\n _initSettings();\n\n \n }\n };\n}();\n\n\n\nexport default KTLayoutQuickPanel;","\"use strict\";\n\nvar KTLayoutQuickSearch = function() {\n // Private properties\n var _element;\n var _offcanvasObject;\n\n // Private functions\n var _init = function() {\n var header = KTUtil.find(_element, '.offcanvas-header');\n var content = KTUtil.find(_element, '.offcanvas-content');\n var form = KTUtil.find(_element, '.quick-search-form');\n var results = KTUtil.find(_element, '.quick-search-wrapper');\n\n _offcanvasObject = new KTOffcanvas(_element, {\n overlay: true,\n baseClass: 'offcanvas',\n placement: 'right',\n closeBy: 'kt_quick_search_close',\n toggleBy: 'kt_quick_search_toggle'\n });\n\n KTUtil.scrollInit(results, {\n disableForMobile: true,\n resetHeightOnDestroy: true,\n handleWindowResize: true,\n height: function() {\n var height = parseInt(KTUtil.getViewPort().height);\n\n if (header) {\n height = height - parseInt(KTUtil.actualHeight(header));\n height = height - parseInt(KTUtil.css(header, 'marginTop'));\n height = height - parseInt(KTUtil.css(header, 'marginBottom'));\n }\n\n if (content) {\n height = height - parseInt(KTUtil.css(content, 'marginTop'));\n height = height - parseInt(KTUtil.css(content, 'marginBottom'));\n }\n\n if (results) {\n height = height - parseInt(KTUtil.actualHeight(form));\n height = height - parseInt(KTUtil.css(form, 'marginTop'));\n height = height - parseInt(KTUtil.css(form, 'marginBottom'));\n\n height = height - parseInt(KTUtil.css(results, 'marginTop'));\n height = height - parseInt(KTUtil.css(results, 'marginBottom'));\n }\n\n height = height - parseInt(KTUtil.css(_element, 'paddingTop'));\n height = height - parseInt(KTUtil.css(_element, 'paddingBottom'));\n\n height = height - 2;\n\n return height;\n }\n });\n }\n\n // Public methods\n return {\n init: function(id) {\n _element = KTUtil.getById(id);\n\n if (!_element) {\n return;\n }\n\n // Initialize\n _init();\n },\n\n getElement: function() {\n return _element;\n }\n };\n}();\n\n\n\nexport default KTLayoutQuickSearch;","\"use strict\";\n//\n// Handle User Quick Search For Dropdown, Inline and Offcanvas Search Panels\n//\n\nvar KTLayoutSearch = function() {\n // Private properties\n var _target;\n var _form;\n var _input;\n var _closeIcon;\n var _resultWrapper;\n var _resultDropdown;\n var _resultDropdownToggle;\n var _closeIconContainer;\n var _inputGroup;\n var _query = '';\n\n var _hasResult = false;\n var _timeout = false;\n var _isProcessing = false;\n var _requestTimeout = 200; // ajax request fire timeout in milliseconds\n var _spinnerClass = 'spinner spinner-sm spinner-primary';\n var _resultClass = 'quick-search-has-result';\n var _minLength = 2;\n\n // Private functions\n var _showProgress = function() {\n _isProcessing = true;\n KTUtil.addClass(_closeIconContainer, _spinnerClass);\n\n if (_closeIcon) {\n KTUtil.hide(_closeIcon);\n }\n }\n\n var _hideProgress = function() {\n _isProcessing = false;\n KTUtil.removeClass(_closeIconContainer, _spinnerClass);\n\n if (_closeIcon) {\n if (_input.value.length < _minLength) {\n KTUtil.hide(_closeIcon);\n } else {\n KTUtil.show(_closeIcon, 'flex');\n }\n }\n }\n\n var _showDropdown = function() {\n if (_resultDropdownToggle && !KTUtil.hasClass(_resultDropdown, 'show')) {\n $(_resultDropdownToggle).dropdown('toggle');\n $(_resultDropdownToggle).dropdown('update');\n }\n }\n\n var _hideDropdown = function() {\n if (_resultDropdownToggle && KTUtil.hasClass(_resultDropdown, 'show')) {\n $(_resultDropdownToggle).dropdown('toggle');\n }\n }\n\n var _processSearch = function() {\n if (_hasResult && _query === _input.value) {\n _hideProgress();\n KTUtil.addClass(_target, _resultClass);\n _showDropdown();\n KTUtil.scrollUpdate(_resultWrapper);\n\n return;\n }\n\n _query = _input.value;\n\n KTUtil.removeClass(_target, _resultClass);\n _showProgress();\n _hideDropdown();\n\n setTimeout(function() {\n $.ajax({\n url: HOST_URL + '/api/quick_search.php',\n data: {\n query: _query\n },\n dataType: 'html',\n success: function(res) {\n _hasResult = true;\n _hideProgress();\n KTUtil.addClass(_target, _resultClass);\n KTUtil.setHTML(_resultWrapper, res);\n _showDropdown();\n KTUtil.scrollUpdate(_resultWrapper);\n },\n error: function(res) {\n _hasResult = false;\n _hideProgress();\n KTUtil.addClass(_target, _resultClass);\n KTUtil.setHTML(_resultWrapper, 'Connection error. Please try again later..');\n _showDropdown();\n KTUtil.scrollUpdate(_resultWrapper);\n }\n });\n }, 1000);\n }\n\n var _handleCancel = function(e) {\n _input.value = '';\n _query = '';\n _hasResult = false;\n KTUtil.hide(_closeIcon);\n KTUtil.removeClass(_target, _resultClass);\n _hideDropdown();\n }\n\n var _handleSearch = function() {\n if (_input.value.length < _minLength) {\n _hideProgress();\n _hideDropdown();\n\n return;\n }\n\n if (_isProcessing == true) {\n return;\n }\n\n if (_timeout) {\n clearTimeout(_timeout);\n }\n\n _timeout = setTimeout(function() {\n _processSearch();\n }, _requestTimeout);\n }\n\n // Public methods\n return {\n init: function(id) {\n _target = KTUtil.getById(id);\n\n if (!_target) {\n return;\n }\n\n _form = KTUtil.find(_target, '.quick-search-form');\n _input = KTUtil.find(_target, '.form-control');\n _closeIcon = KTUtil.find(_target, '.quick-search-close');\n _resultWrapper = KTUtil.find(_target, '.quick-search-wrapper');\n _resultDropdown = KTUtil.find(_target, '.dropdown-menu');\n _resultDropdownToggle = KTUtil.find(_target, '[data-toggle=\"dropdown\"]');\n _inputGroup = KTUtil.find(_target, '.input-group');\n _closeIconContainer = KTUtil.find(_target, '.input-group .input-group-append');\n\n // Attach input keyup handler\n KTUtil.addEvent(_input, 'keyup', _handleSearch);\n KTUtil.addEvent(_input, 'focus', _handleSearch);\n\n // Prevent enter click\n _form.onkeypress = function(e) {\n var key = e.charCode || e.keyCode || 0;\n if (key == 13) {\n e.preventDefault();\n }\n }\n\n KTUtil.addEvent(_closeIcon, 'click', _handleCancel);\n }\n };\n};\n\n\n\nvar KTLayoutSearchInline = KTLayoutSearch;\nvar KTLayoutSearchOffcanvas = KTLayoutSearch;\n\nexport default KTLayoutSearch;","// Keenthemes plugins\nimport KTUtil from \"@/assets/js/components/util.js\";\nwindow.KTUtil = KTUtil;\n\nimport KTCard from \"@/assets/js/components/card.js\";\nwindow.KTCard = KTCard;\n\nimport KTCookie from \"@/assets/js/components/cookie.js\";\nwindow.KTCookie = KTCookie;\n\nimport KTDialog from \"@/assets/js/components/dialog.js\";\nwindow.KTDialog = KTDialog;\n\nimport KTHeader from \"@/assets/js/components/header.js\";\nwindow.KTHeader = KTHeader;\n\nimport KTImageInput from \"@/assets/js/components/image-input.js\";\nwindow.KTImageInput = KTImageInput;\n\nimport KTMenu from \"@/assets/js/components/menu.js\";\nwindow.KTMenu = KTMenu;\n\nimport KTOffcanvas from \"@/assets/js/components/offcanvas.js\";\nwindow.KTOffcanvas = KTOffcanvas;\n\nimport KTScrolltop from \"@/assets/js/components/scrolltop.js\";\nwindow.KTScrolltop = KTScrolltop;\n\nimport KTToggle from \"@/assets/js/components/toggle.js\";\nwindow.KTToggle = KTToggle;\n\nimport KTWizard from \"@/assets/js/components/wizard.js\";\nwindow.KTWizard = KTWizard;\n\n// Metronic layout base js\nimport KTLayoutAside from \"@/assets/js/layout/base/aside.js\";\nwindow.KTLayoutAside = KTLayoutAside;\n\nimport KTLayoutAsideMenu from \"@/assets/js/layout/base/aside-menu.js\";\nwindow.KTLayoutAsideMenu = KTLayoutAsideMenu;\n\nimport KTLayoutAsideToggle from \"@/assets/js/layout/base/aside-toggle.js\";\nwindow.KTLayoutAsideToggle = KTLayoutAsideToggle;\n\nimport KTLayoutBrand from \"@/assets/js/layout/base/brand.js\";\nwindow.KTLayoutBrand = KTLayoutBrand;\n\nimport KTLayoutContent from \"@/assets/js/layout/base/content.js\";\nwindow.KTLayoutContent = KTLayoutContent;\n\nimport KTLayoutFooter from \"@/assets/js/layout/base/footer.js\";\nwindow.KTLayoutFooter = KTLayoutFooter;\n\nimport KTLayoutHeader from \"@/assets/js/layout/base/header.js\";\nwindow.KTLayoutHeader = KTLayoutHeader;\n\nimport KTLayoutHeaderMenu from \"@/assets/js/layout/base/header-menu.js\";\nwindow.KTLayoutHeaderMenu = KTLayoutHeaderMenu;\n\nimport KTLayoutHeaderTopbar from \"@/assets/js/layout/base/header-topbar.js\";\nwindow.KTLayoutHeaderTopbar = KTLayoutHeaderTopbar;\n\nimport KTLayoutStickyCard from \"@/assets/js/layout/base/sticky-card.js\";\nwindow.KTLayoutStickyCard = KTLayoutStickyCard;\n\nimport KTLayoutStretchedCard from \"@/assets/js/layout/base/stretched-card.js\";\nwindow.KTLayoutStretchedCard = KTLayoutStretchedCard;\n\nimport KTLayoutSubheader from \"@/assets/js/layout/base/subheader.js\";\nwindow.KTLayoutSubheader = KTLayoutSubheader;\n\n// Metronic layout extended js\nimport KTLayoutChat from \"@/assets/js/layout/extended/chat.js\";\nwindow.KTLayoutChat = KTLayoutChat;\n\nimport KTLayoutExamples from \"@/assets/js/layout/extended/examples.js\";\nwindow.KTLayoutExamples = KTLayoutExamples;\n\nimport KTLayoutQuickActions from \"@/assets/js/layout/extended/quick-actions.js\";\nwindow.KTLayoutQuickActions = KTLayoutQuickActions;\n\nimport KTLayoutQuickCartPanel from \"@/assets/js/layout/extended/quick-cart.js\";\nwindow.KTLayoutQuickCartPanel = KTLayoutQuickCartPanel;\n\nimport KTLayoutQuickNotifications from \"@/assets/js/layout/extended/quick-notifications.js\";\nwindow.KTLayoutQuickNotifications = KTLayoutQuickNotifications;\n\nimport KTLayoutQuickPanel from \"@/assets/js/layout/extended/quick-panel.js\";\nwindow.KTLayoutQuickPanel = KTLayoutQuickPanel;\n\nimport KTLayoutQuickSearch from \"@/assets/js/layout/extended/quick-search.js\";\nwindow.KTLayoutQuickSearch = KTLayoutQuickSearch;\n\nimport KTLayoutQuickUser from \"@/assets/js/layout/extended/quick-user.js\";\nwindow.KTLayoutQuickUser = KTLayoutQuickUser;\n\nimport KTLayoutScrolltop from \"@/assets/js/layout/extended/scrolltop.js\";\nwindow.KTLayoutScrolltop = KTLayoutScrolltop;\n\nimport KTLayoutSearch from \"@/assets/js/layout/extended/search.js\";\nwindow.KTLayoutSearch = KTLayoutSearch;\n","import Vue from \"vue\";\nimport VueMoment from 'vue-moment';\n\nVue.use( VueMoment );","import Vue from 'vue';\nimport Multiselect from 'vue-multiselect';\nimport \"vue-multiselect/dist/vue-multiselect.min.css\";\n\nVue.component( 'multiselect', Multiselect );","export default function s(){return{fns:{},clear(){this.fns={}},emit(s,...f){(this.fns[s]||[]).map(s=>s.apply(s,f))},off(s,f){if(this.fns[s]){const n=this.fns[s].indexOf(f);if(n>=0){this.fns[s].splice(n,1)}}},on(s,f){(this.fns[s]=this.fns[s]||[]).push(f)}}}","export default function t(){return{filters:{},add(t,e){(this.filters[t]=this.filters[t]||[]).push(e)},clear(){this.filters={}},execute(t,e,i){if(!this.filters[t]||!this.filters[t].length){return e}let s=e;const r=this.filters[t];const l=r.length;for(let t=0;tt!==e)}}}}","export default function e(e,t,r,c){const n=(r.getAttribute(\"type\")||\"\").toLowerCase();const a=r.tagName.toLowerCase();switch(a){case\"textarea\":return r.value;case\"select\":const e=r;const t=e.selectedIndex;return t>=0?e.options.item(t).value:\"\";case\"input\":if(\"radio\"===n||\"checkbox\"===n){const e=c.filter(e=>e.checked).length;return e===0?\"\":e+\"\"}else{return r.value}default:return\"\"}}","export default function r(r,e){const t=Array.isArray(e)?e:[e];let a=r;t.forEach(r=>{a=a.replace(\"%s\",r)});return a}","import e from\"../utils/format\";export default function s(){const s=e=>parseFloat(`${e}`.replace(\",\",\".\"));return{validate(a){const t=a.value;if(t===\"\"){return{valid:true}}const n=Object.assign({},{inclusive:true,message:\"\"},a.options);const l=s(n.min);const o=s(n.max);return n.inclusive?{message:e(a.l10n?n.message||a.l10n.between.default:n.message,[`${l}`,`${o}`]),valid:parseFloat(t)>=l&&parseFloat(t)<=o}:{message:e(a.l10n?n.message||a.l10n.between.notInclusive:n.message,[`${l}`,`${o}`]),valid:parseFloat(t)>l&&parseFloat(t)e.checked).length;const s=t.options.min?`${t.options.min}`:\"\";const n=t.options.max?`${t.options.max}`:\"\";let a=t.l10n?t.options.message||t.l10n.choice.default:t.options.message;const l=!(s&&oparseInt(n,10));switch(true){case!!s&&!!n:a=e(t.l10n?t.l10n.choice.between:t.options.message,[s,n]);break;case!!s:a=e(t.l10n?t.l10n.choice.more:t.options.message,s);break;case!!n:a=e(t.l10n?t.l10n.choice.less:t.options.message,n);break;default:break}return{message:a,valid:l}}}}","export default function t(t){let e=t.length;const l=[[0,1,2,3,4,5,6,7,8,9],[0,2,4,6,8,1,3,5,7,9]];let n=0;let r=0;while(e--){r+=l[n][parseInt(t.charAt(e),10)];n=1-n}return r%10===0&&r>0}","import e from\"../algorithms/luhn\";const t={AMERICAN_EXPRESS:{length:[15],prefix:[\"34\",\"37\"]},DANKORT:{length:[16],prefix:[\"5019\"]},DINERS_CLUB:{length:[14],prefix:[\"300\",\"301\",\"302\",\"303\",\"304\",\"305\",\"36\"]},DINERS_CLUB_US:{length:[16],prefix:[\"54\",\"55\"]},DISCOVER:{length:[16],prefix:[\"6011\",\"622126\",\"622127\",\"622128\",\"622129\",\"62213\",\"62214\",\"62215\",\"62216\",\"62217\",\"62218\",\"62219\",\"6222\",\"6223\",\"6224\",\"6225\",\"6226\",\"6227\",\"6228\",\"62290\",\"62291\",\"622920\",\"622921\",\"622922\",\"622923\",\"622924\",\"622925\",\"644\",\"645\",\"646\",\"647\",\"648\",\"649\",\"65\"]},ELO:{length:[16],prefix:[\"4011\",\"4312\",\"4389\",\"4514\",\"4573\",\"4576\",\"5041\",\"5066\",\"5067\",\"509\",\"6277\",\"6362\",\"6363\",\"650\",\"6516\",\"6550\"]},FORBRUGSFORENINGEN:{length:[16],prefix:[\"600722\"]},JCB:{length:[16],prefix:[\"3528\",\"3529\",\"353\",\"354\",\"355\",\"356\",\"357\",\"358\"]},LASER:{length:[16,17,18,19],prefix:[\"6304\",\"6706\",\"6771\",\"6709\"]},MAESTRO:{length:[12,13,14,15,16,17,18,19],prefix:[\"5018\",\"5020\",\"5038\",\"5868\",\"6304\",\"6759\",\"6761\",\"6762\",\"6763\",\"6764\",\"6765\",\"6766\"]},MASTERCARD:{length:[16],prefix:[\"51\",\"52\",\"53\",\"54\",\"55\"]},SOLO:{length:[16,18,19],prefix:[\"6334\",\"6767\"]},UNIONPAY:{length:[16,17,18,19],prefix:[\"622126\",\"622127\",\"622128\",\"622129\",\"62213\",\"62214\",\"62215\",\"62216\",\"62217\",\"62218\",\"62219\",\"6222\",\"6223\",\"6224\",\"6225\",\"6226\",\"6227\",\"6228\",\"62290\",\"62291\",\"622920\",\"622921\",\"622922\",\"622923\",\"622924\",\"622925\"]},VISA:{length:[16],prefix:[\"4\"]},VISA_ELECTRON:{length:[16],prefix:[\"4026\",\"417500\",\"4405\",\"4508\",\"4844\",\"4913\",\"4917\"]}};export default function l(){return{validate(l){if(l.value===\"\"){return{meta:{type:null},valid:true}}if(/[^0-9-\\s]+/.test(l.value)){return{meta:{type:null},valid:false}}const r=l.value.replace(/\\D/g,\"\");if(!e(r)){return{meta:{type:null},valid:false}}for(const e of Object.keys(t)){for(const n in t[e].prefix){if(l.value.substr(0,t[e].prefix[n].length)===t[e].prefix[n]&&t[e].length.indexOf(r.length)!==-1){return{meta:{type:e},valid:true}}}}return{meta:{type:null},valid:false}}}}export{t as CREDIT_CARD_TYPES};","export default function t(t,e,n,r){if(isNaN(t)||isNaN(e)||isNaN(n)){return false}if(t<1e3||t>9999||e<=0||e>12){return false}const s=[31,t%400===0||t%100!==0&&t%4===0?29:28,31,30,31,30,31,31,30,31,30,31];if(n<=0||n>s[e-1]){return false}if(r===true){const r=new Date;const s=r.getFullYear();const a=r.getMonth();const u=r.getDate();return t{const s=e.indexOf(\"YYYY\");const a=e.indexOf(\"MM\");const l=e.indexOf(\"DD\");if(s===-1||a===-1||l===-1){return null}const o=t.split(\" \");const r=o[0].split(n);if(r.length<3){return null}const c=new Date(parseInt(r[s],10),parseInt(r[a],10)-1,parseInt(r[l],10));if(o.length>1){const t=o[1].split(\":\");c.setHours(t.length>0?parseInt(t[0],10):0);c.setMinutes(t.length>1?parseInt(t[1],10):0);c.setSeconds(t.length>2?parseInt(t[2],10):0)}return c};const s=(t,e)=>{const n=e.replace(/Y/g,\"y\").replace(/M/g,\"m\").replace(/D/g,\"d\").replace(/:m/g,\":M\").replace(/:mm/g,\":MM\").replace(/:S/,\":s\").replace(/:SS/,\":ss\");const s=t.getDate();const a=s<10?`0${s}`:s;const l=t.getMonth()+1;const o=l<10?`0${l}`:l;const r=`${t.getFullYear()}`.substr(2);const c=t.getFullYear();const i=t.getHours()%12||12;const g=i<10?`0${i}`:i;const u=t.getHours();const m=u<10?`0${u}`:u;const d=t.getMinutes();const f=d<10?`0${d}`:d;const p=t.getSeconds();const h=p<10?`0${p}`:p;const $={H:`${u}`,HH:`${m}`,M:`${d}`,MM:`${f}`,d:`${s}`,dd:`${a}`,h:`${i}`,hh:`${g}`,m:`${l}`,mm:`${o}`,s:`${p}`,ss:`${h}`,yy:`${r}`,yyyy:`${c}`};return n.replace(/d{1,4}|m{1,4}|yy(?:yy)?|([HhMs])\\1?|\"[^\"]*\"|'[^']*'/g,t=>$[t]?$[t]:t.slice(1,t.length-1))};return{validate(a){if(a.value===\"\"){return{meta:{date:null},valid:true}}const l=Object.assign({},{format:a.element&&a.element.getAttribute(\"type\")===\"date\"?\"YYYY-MM-DD\":\"MM/DD/YYYY\",message:\"\"},a.options);const o=a.l10n?a.l10n.date.default:l.message;const r={message:`${o}`,meta:{date:null},valid:false};const c=l.format.split(\" \");const i=c.length>1?c[1]:null;const g=c.length>2?c[2]:null;const u=a.value.split(\" \");const m=u[0];const d=u.length>1?u[1]:null;if(c.length!==u.length){return r}const f=l.separator||(m.indexOf(\"/\")!==-1?\"/\":m.indexOf(\"-\")!==-1?\"-\":m.indexOf(\".\")!==-1?\".\":\"/\");if(f===null||m.indexOf(f)===-1){return r}const p=m.split(f);const h=c[0].split(f);if(p.length!==h.length){return r}const $=p[h.indexOf(\"YYYY\")];const M=p[h.indexOf(\"MM\")];const Y=p[h.indexOf(\"DD\")];if(!/^\\d+$/.test($)||!/^\\d+$/.test(M)||!/^\\d+$/.test(Y)||$.length>4||M.length>2||Y.length>2){return r}const D=parseInt($,10);const x=parseInt(M,10);const y=parseInt(Y,10);if(!e(D,x,y)){return r}const I=new Date(D,x-1,y);if(i){const t=d.split(\":\");if(i.split(\":\").length!==t.length){return r}const e=t.length>0?t[0].length<=2&&/^\\d+$/.test(t[0])?parseInt(t[0],10):-1:0;const n=t.length>1?t[1].length<=2&&/^\\d+$/.test(t[1])?parseInt(t[1],10):-1:0;const s=t.length>2?t[2].length<=2&&/^\\d+$/.test(t[2])?parseInt(t[2],10):-1:0;if(e===-1||n===-1||s===-1){return r}if(s<0||s>60){return r}if(e<0||e>=24||g&&e>12){return r}if(n<0||n>59){return r}I.setHours(e);I.setMinutes(n);I.setSeconds(s)}const O=typeof l.min===\"function\"?l.min():l.min;const v=O instanceof Date?O:O?n(O,h,f):I;const H=typeof l.max===\"function\"?l.max():l.max;const T=H instanceof Date?H:H?n(H,h,f):I;const S=O instanceof Date?s(v,l.format):O;const b=H instanceof Date?s(T,l.format):H;switch(true){case!!S&&!b:return{message:t(a.l10n?a.l10n.date.min:o,S),meta:{date:I},valid:I.getTime()>=v.getTime()};case!!b&&!S:return{message:t(a.l10n?a.l10n.date.max:o,b),meta:{date:I},valid:I.getTime()<=T.getTime()};case!!b&&!!S:return{message:t(a.l10n?a.l10n.date.range:o,[S,b]),meta:{date:I},valid:I.getTime()<=T.getTime()&&I.getTime()>=v.getTime()};default:return{message:`${o}`,meta:{date:I},valid:true}}}}}","export default function o(){return{validate(o){const t=\"function\"===typeof o.options.compare?o.options.compare.call(this):o.options.compare;return{valid:t===\"\"||o.value!==t}}}}","export default function e(){return{validate(e){return{valid:e.value===\"\"||/^\\d+$/.test(e.value)}}}}","export default function t(){const t=(t,e)=>{const s=t.split(/\"/);const l=s.length;const n=[];let r=\"\";for(let t=0;t()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;const n=s.multiple===true||`${s.multiple}`===\"true\";if(n){const n=s.separator||/[,;]/;const r=t(e.value,n);const a=r.length;for(let t=0;tparseInt(`${e.options.maxFiles}`,10)){return{meta:{error:\"INVALID_MAX_FILES\"},valid:false}}if(e.options.minFiles&&oparseInt(`${e.options.maxSize}`,10)){return{meta:Object.assign({},{error:\"INVALID_MAX_SIZE\"},r),valid:false}}if(i&&i.indexOf(t.toLowerCase())===-1){return{meta:Object.assign({},{error:\"INVALID_EXTENSION\"},r),valid:false}}if(n[l].type&&s&&s.indexOf(n[l].type.toLowerCase())===-1){return{meta:Object.assign({},{error:\"INVALID_TYPE\"},r),valid:false}}}if(e.options.maxTotalSize&&a>parseInt(`${e.options.maxTotalSize}`,10)){return{meta:Object.assign({},{error:\"INVALID_MAX_TOTAL_SIZE\",totalSize:a},r),valid:false}}if(e.options.minTotalSize&&a=t}:{message:e(a.l10n?s.message||a.l10n.greaterThan.notInclusive:s.message,`${t}`),valid:parseFloat(a.value)>t}}}}","export default function o(){return{validate(o){const t=\"function\"===typeof o.options.compare?o.options.compare.call(this):o.options.compare;return{valid:t===\"\"||o.value===t}}}}","export default function a(){return{validate(a){if(a.value===\"\"){return{valid:true}}const e=Object.assign({},{decimalSeparator:\".\",thousandsSeparator:\"\"},a.options);const t=e.decimalSeparator===\".\"?\"\\\\.\":e.decimalSeparator;const r=e.thousandsSeparator===\".\"?\"\\\\.\":e.thousandsSeparator;const o=new RegExp(`^-?[0-9]{1,3}(${r}[0-9]{3})*(${t}[0-9]+)?$`);const n=new RegExp(r,\"g\");let s=`${a.value}`;if(!o.test(s)){return{valid:false}}if(r){s=s.replace(n,\"\")}if(t){s=s.replace(t,\".\")}const i=parseFloat(s);return{valid:!isNaN(i)&&isFinite(i)&&Math.floor(i)===i}}}}","export default function d(){return{validate(d){if(d.value===\"\"){return{valid:true}}const a=Object.assign({},{ipv4:true,ipv6:true},d.options);const e=/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\\/([0-9]|[1-2][0-9]|3[0-2]))?$/;const s=/^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*(\\/(\\d|\\d\\d|1[0-1]\\d|12[0-8]))?$/;switch(true){case a.ipv4&&!a.ipv6:return{message:d.l10n?a.message||d.l10n.ip.ipv4:a.message,valid:e.test(d.value)};case!a.ipv4&&a.ipv6:return{message:d.l10n?a.message||d.l10n.ip.ipv6:a.message,valid:s.test(d.value)};case a.ipv4&&a.ipv6:default:return{message:d.l10n?a.message||d.l10n.ip.default:a.message,valid:e.test(d.value)||s.test(d.value)}}}}}","import e from\"../utils/format\";export default function s(){return{validate(s){if(s.value===\"\"){return{valid:true}}const a=Object.assign({},{inclusive:true,message:\"\"},s.options);const l=parseFloat(`${a.max}`.replace(\",\",\".\"));return a.inclusive?{message:e(s.l10n?a.message||s.l10n.lessThan.default:a.message,`${l}`),valid:parseFloat(s.value)<=l}:{message:e(s.l10n?a.message||s.l10n.lessThan.notInclusive:a.message,`${l}`),valid:parseFloat(s.value)Object.keys(e).map(t=>`${encodeURIComponent(t)}=${encodeURIComponent(e[t])}`).join(\"&\");return new Promise((o,s)=>{const d=Object.assign({},{crossDomain:false,headers:{},method:\"GET\",params:{}},t);const a=Object.keys(d.params).map(e=>`${encodeURIComponent(e)}=${encodeURIComponent(d.params[e])}`).join(\"&\");const r=e.indexOf(\"?\");const c=\"GET\"===d.method?`${e}${r?\"?\":\"&\"}${a}`:e;if(d.crossDomain){const e=document.createElement(\"script\");const t=`___fetch${Date.now()}___`;window[t]=e=>{delete window[t];o(e)};e.src=`${c}${r?\"&\":\"?\"}callback=${t}`;e.async=true;e.addEventListener(\"load\",()=>{e.parentNode.removeChild(e)});e.addEventListener(\"error\",()=>s);document.head.appendChild(e)}else{const e=new XMLHttpRequest;e.open(d.method,c);e.setRequestHeader(\"X-Requested-With\",\"XMLHttpRequest\");if(\"POST\"===d.method){e.setRequestHeader(\"Content-Type\",\"application/x-www-form-urlencoded\")}Object.keys(d.headers).forEach(t=>e.setRequestHeader(t,d.headers[t]));e.addEventListener(\"load\",(function(){o(JSON.parse(this.responseText))}));e.addEventListener(\"error\",()=>s);e.send(n(d.params))}})}","import e from\"../utils/fetch\";export default function a(){const a={crossDomain:false,data:{},headers:{},method:\"GET\",validKey:\"valid\"};return{validate(t){if(t.value===\"\"){return Promise.resolve({valid:true})}const s=Object.assign({},a,t.options);let r=s.data;if(\"function\"===typeof s.data){r=s.data.call(this,t)}if(\"string\"===typeof r){r=JSON.parse(r)}r[s.name||t.field]=t.value;const o=\"function\"===typeof s.url?s.url.call(this,t):s.url;return e(o,{crossDomain:s.crossDomain,headers:s.headers,method:s.method,params:r}).then(e=>Promise.resolve({message:e.message,meta:e,valid:`${e[s.validKey]}`===\"true\"})).catch(e=>Promise.reject({valid:false}))}}}","export default function e(){return{validate(e){if(e.value===\"\"){return{valid:true}}const a=Object.assign({},{case:\"lower\"},e.options);const s=(a.case||\"lower\").toLowerCase();return{message:a.message||(e.l10n?\"upper\"===s?e.l10n.stringCase.upper:e.l10n.stringCase.default:a.message),valid:\"upper\"===s?e.value===e.value.toUpperCase():e.value===e.value.toLowerCase()}}}}","import e from\"../utils/format\";export default function t(){const t=e=>{let t=e.length;for(let s=e.length-1;s>=0;s--){const n=e.charCodeAt(s);if(n>127&&n<=2047){t++}else if(n>2047&&n<=65535){t+=2}if(n>=56320&&n<=57343){s--}}return`${t}`};return{validate(s){const n=Object.assign({},{message:\"\",trim:false,utf8Bytes:false},s.options);const a=n.trim===true||`${n.trim}`===\"true\"?s.value.trim():s.value;if(a===\"\"){return{valid:true}}const r=n.min?`${n.min}`:\"\";const l=n.max?`${n.max}`:\"\";const i=n.utf8Bytes?t(a):a.length;let g=true;let m=s.l10n?n.message||s.l10n.stringLength.default:n.message;if(r&&iparseInt(l,10)){g=false}switch(true){case!!r&&!!l:m=e(s.l10n?n.message||s.l10n.stringLength.between:n.message,[r,l]);break;case!!r:m=e(s.l10n?n.message||s.l10n.stringLength.more:n.message,`${parseInt(r,10)-1}`);break;case!!l:m=e(s.l10n?n.message||s.l10n.stringLength.less:n.message,`${parseInt(l,10)+1}`);break;default:break}return{message:m,valid:g}}}}","export default function t(){const t={allowEmptyProtocol:false,allowLocal:false,protocol:\"http, https, ftp\"};return{validate(o){if(o.value===\"\"){return{valid:true}}const a=Object.assign({},t,o.options);const l=a.allowLocal===true||`${a.allowLocal}`===\"true\";const f=a.allowEmptyProtocol===true||`${a.allowEmptyProtocol}`===\"true\";const u=a.protocol.split(\",\").join(\"|\").replace(/\\s/g,\"\");const e=new RegExp(\"^\"+\"(?:(?:\"+u+\")://)\"+(f?\"?\":\"\")+\"(?:\\\\S+(?::\\\\S*)?@)?\"+\"(?:\"+(l?\"\":\"(?!(?:10|127)(?:\\\\.\\\\d{1,3}){3})\"+\"(?!(?:169\\\\.254|192\\\\.168)(?:\\\\.\\\\d{1,3}){2})\"+\"(?!172\\\\.(?:1[6-9]|2\\\\d|3[0-1])(?:\\\\.\\\\d{1,3}){2})\")+\"(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])\"+\"(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}\"+\"(?:\\\\.(?:[1-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))\"+\"|\"+\"(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]-?)*[a-z\\\\u00a1-\\\\uffff0-9]+)\"+\"(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]-?)*[a-z\\\\u00a1-\\\\uffff0-9])*\"+\"(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,}))\"+(l?\"?\":\"\")+\")\"+\"(?::\\\\d{2,5})?\"+\"(?:/[^\\\\s]*)?$\",\"i\");return{valid:e.test(o.value)}}}}","import r from\"./between\";import m from\"./blank\";import i from\"./callback\";import o from\"./choice\";import t from\"./creditCard\";import e from\"./date\";import p from\"./different\";import f from\"./digits\";import n from\"./emailAddress\";import a from\"./file\";import s from\"./greaterThan\";import d from\"./identical\";import l from\"./integer\";import c from\"./ip\";import g from\"./lessThan\";import h from\"./notEmpty\";import b from\"./numeric\";import u from\"./promise\";import k from\"./regexp\";import C from\"./remote\";import T from\"./stringCase\";import x from\"./stringLength\";import w from\"./uri\";export default{between:r,blank:m,callback:i,choice:o,creditCard:t,date:e,different:p,digits:f,emailAddress:n,file:a,greaterThan:s,identical:d,integer:l,ip:c,lessThan:g,notEmpty:h,numeric:b,promise:u,regexp:k,remote:C,stringCase:T,stringLength:x,uri:w};","import e from\"./emitter\";import t from\"./filter\";import i from\"../filters/getFieldValue\";import s from\"../validators/index\";class l{constructor(i,s){this.elements={};this.ee=e();this.filter=t();this.plugins={};this.results=new Map;this.validators={};this.form=i;this.fields=s}on(e,t){this.ee.on(e,t);return this}off(e,t){this.ee.off(e,t);return this}emit(e,...t){this.ee.emit(e,...t);return this}registerPlugin(e,t){if(this.plugins[e]){throw new Error(`The plguin ${e} is registered`)}t.setCore(this);t.install();this.plugins[e]=t;return this}deregisterPlugin(e){const t=this.plugins[e];if(t){t.uninstall()}delete this.plugins[e];return this}registerValidator(e,t){if(this.validators[e]){throw new Error(`The validator ${e} is registered`)}this.validators[e]=t;return this}registerFilter(e,t){this.filter.add(e,t);return this}deregisterFilter(e,t){this.filter.remove(e,t);return this}executeFilter(e,t,i){return this.filter.execute(e,t,i)}addField(e,t){const i=Object.assign({},{selector:\"\",validators:{}},t);this.fields[e]=this.fields[e]?{selector:i.selector||this.fields[e].selector,validators:Object.assign({},this.fields[e].validators,i.validators)}:i;this.elements[e]=this.queryElements(e);this.emit(\"core.field.added\",{elements:this.elements[e],field:e,options:this.fields[e]});return this}removeField(e){if(!this.fields[e]){throw new Error(`The field ${e} validators are not defined. Please ensure the field is added first`)}const t=this.elements[e];const i=this.fields[e];delete this.elements[e];delete this.fields[e];this.emit(\"core.field.removed\",{elements:t,field:e,options:i});return this}validate(){this.emit(\"core.form.validating\");return this.filter.execute(\"validate-pre\",Promise.resolve(),[]).then(()=>Promise.all(Object.keys(this.fields).map(e=>this.validateField(e))).then(e=>{switch(true){case e.indexOf(\"Invalid\")!==-1:this.emit(\"core.form.invalid\");return Promise.resolve(\"Invalid\");case e.indexOf(\"NotValidated\")!==-1:this.emit(\"core.form.notvalidated\");return Promise.resolve(\"NotValidated\");default:this.emit(\"core.form.valid\");return Promise.resolve(\"Valid\")}}))}validateField(e){const t=this.results.get(e);if(t===\"Valid\"||t===\"Invalid\"){return Promise.resolve(t)}this.emit(\"core.field.validating\",e);const i=this.elements[e];if(i.length===0){this.emit(\"core.field.valid\",e);return Promise.resolve(\"Valid\")}const s=i[0].getAttribute(\"type\");if(\"radio\"===s||\"checkbox\"===s||i.length===1){return this.validateElement(e,i[0])}else{return Promise.all(i.map(t=>this.validateElement(e,t))).then(t=>{switch(true){case t.indexOf(\"Invalid\")!==-1:this.emit(\"core.field.invalid\",e);this.results.set(e,\"Invalid\");return Promise.resolve(\"Invalid\");case t.indexOf(\"NotValidated\")!==-1:this.emit(\"core.field.notvalidated\",e);this.results.delete(e);return Promise.resolve(\"NotValidated\");default:this.emit(\"core.field.valid\",e);this.results.set(e,\"Valid\");return Promise.resolve(\"Valid\")}})}}validateElement(e,t){this.results.delete(e);const i=this.elements[e];const s=this.filter.execute(\"element-ignored\",false,[e,t,i]);if(s){this.emit(\"core.element.ignored\",{element:t,elements:i,field:e});return Promise.resolve(\"Ignored\")}const l=this.fields[e].validators;this.emit(\"core.element.validating\",{element:t,elements:i,field:e});const r=Object.keys(l).map(i=>()=>this.executeValidator(e,t,i,l[i]));return this.waterfall(r).then(s=>{const l=s.indexOf(\"Invalid\")===-1;this.emit(\"core.element.validated\",{element:t,elements:i,field:e,valid:l});const r=t.getAttribute(\"type\");if(\"radio\"===r||\"checkbox\"===r||i.length===1){this.emit(l?\"core.field.valid\":\"core.field.invalid\",e)}return Promise.resolve(l?\"Valid\":\"Invalid\")}).catch(s=>{this.emit(\"core.element.notvalidated\",{element:t,elements:i,field:e});return Promise.resolve(s)})}executeValidator(e,t,i,s){const l=this.elements[e];const r=this.filter.execute(\"validator-name\",i,[i,e]);s.message=this.filter.execute(\"validator-message\",s.message,[this.locale,e,r]);if(!this.validators[r]||s.enabled===false){this.emit(\"core.validator.validated\",{element:t,elements:l,field:e,result:this.normalizeResult(e,r,{valid:true}),validator:r});return Promise.resolve(\"Valid\")}const a=this.validators[r];const d=this.getElementValue(e,t,r);const o=this.filter.execute(\"field-should-validate\",true,[e,t,d,i]);if(!o){this.emit(\"core.validator.notvalidated\",{element:t,elements:l,field:e,validator:i});return Promise.resolve(\"NotValidated\")}this.emit(\"core.validator.validating\",{element:t,elements:l,field:e,validator:i});const n=a().validate({element:t,elements:l,field:e,l10n:this.localization,options:s,value:d});const h=\"function\"===typeof n[\"then\"];if(h){return n.then(s=>{const r=this.normalizeResult(e,i,s);this.emit(\"core.validator.validated\",{element:t,elements:l,field:e,result:r,validator:i});return r.valid?\"Valid\":\"Invalid\"})}else{const s=this.normalizeResult(e,i,n);this.emit(\"core.validator.validated\",{element:t,elements:l,field:e,result:s,validator:i});return Promise.resolve(s.valid?\"Valid\":\"Invalid\")}}getElementValue(e,t,s){const l=i(this.form,e,t,this.elements[e]);return this.filter.execute(\"field-value\",l,[l,e,t,s])}getElements(e){return this.elements[e]}getFields(){return this.fields}getFormElement(){return this.form}getLocale(){return this.locale}getPlugin(e){return this.plugins[e]}updateFieldStatus(e,t,i){const s=this.elements[e];const l=s[0].getAttribute(\"type\");const r=\"radio\"===l||\"checkbox\"===l?[s[0]]:s;r.forEach(s=>this.updateElementStatus(e,s,t,i));if(!i){switch(t){case\"NotValidated\":this.emit(\"core.field.notvalidated\",e);this.results.delete(e);break;case\"Validating\":this.emit(\"core.field.validating\",e);this.results.delete(e);break;case\"Valid\":this.emit(\"core.field.valid\",e);this.results.set(e,\"Valid\");break;case\"Invalid\":this.emit(\"core.field.invalid\",e);this.results.set(e,\"Invalid\");break}}return this}updateElementStatus(e,t,i,s){const l=this.elements[e];const r=this.fields[e].validators;const a=s?[s]:Object.keys(r);switch(i){case\"NotValidated\":a.forEach(i=>this.emit(\"core.validator.notvalidated\",{element:t,elements:l,field:e,validator:i}));this.emit(\"core.element.notvalidated\",{element:t,elements:l,field:e});break;case\"Validating\":a.forEach(i=>this.emit(\"core.validator.validating\",{element:t,elements:l,field:e,validator:i}));this.emit(\"core.element.validating\",{element:t,elements:l,field:e});break;case\"Valid\":a.forEach(i=>this.emit(\"core.validator.validated\",{element:t,field:e,result:{message:r[i].message,valid:true},validator:i}));this.emit(\"core.element.validated\",{element:t,elements:l,field:e,valid:true});break;case\"Invalid\":a.forEach(i=>this.emit(\"core.validator.validated\",{element:t,field:e,result:{message:r[i].message,valid:false},validator:i}));this.emit(\"core.element.validated\",{element:t,elements:l,field:e,valid:false});break}return this}resetForm(e){Object.keys(this.fields).forEach(t=>this.resetField(t,e));this.emit(\"core.form.reset\",{reset:e});return this}resetField(e,t){if(t){const t=this.elements[e];const i=t[0].getAttribute(\"type\");t.forEach(e=>{if(\"radio\"===i||\"checkbox\"===i){e.removeAttribute(\"selected\");e.removeAttribute(\"checked\");e.checked=false}else{e.setAttribute(\"value\",\"\");if(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement){e.value=\"\"}}})}this.updateFieldStatus(e,\"NotValidated\");this.emit(\"core.field.reset\",{field:e,reset:t});return this}revalidateField(e){this.updateFieldStatus(e,\"NotValidated\");return this.validateField(e)}disableValidator(e,t){return this.toggleValidator(false,e,t)}enableValidator(e,t){return this.toggleValidator(true,e,t)}updateValidatorOption(e,t,i,s){if(this.fields[e]&&this.fields[e].validators&&this.fields[e].validators[t]){this.fields[e].validators[t][i]=s}return this}setFieldOptions(e,t){this.fields[e]=t;return this}destroy(){Object.keys(this.plugins).forEach(e=>this.plugins[e].uninstall());this.ee.clear();this.filter.clear();this.results.clear();this.plugins={};return this}setLocale(e,t){this.locale=e;this.localization=t;return this}waterfall(e){return e.reduce((e,t,i,s)=>e.then(e=>t().then(t=>{e.push(t);return e})),Promise.resolve([]))}queryElements(e){const t=this.fields[e].selector?\"#\"===this.fields[e].selector.charAt(0)?`[id=\"${this.fields[e].selector.substring(1)}\"]`:this.fields[e].selector:`[name=\"${e}\"]`;return[].slice.call(this.form.querySelectorAll(t))}normalizeResult(e,t,i){const s=this.fields[e].validators[t];return Object.assign({},i,{message:i.message||(s?s.message:\"\")||(this.localization&&this.localization[t]&&this.localization[t].default?this.localization[t].default:\"\")||`The field ${e} is not valid`})}toggleValidator(e,t,i){const s=this.fields[t].validators;if(i&&s&&s[i]){this.fields[t].validators[i].enabled=e}else if(!i){Object.keys(s).forEach(i=>this.fields[t].validators[i].enabled=e)}return this.updateFieldStatus(t,\"NotValidated\",i)}}export default function r(e,t){const i=Object.assign({},{fields:{},locale:\"en_US\",plugins:{}},t);const r=new l(e,i.fields);r.setLocale(i.locale,i.localization);Object.keys(i.plugins).forEach(e=>r.registerPlugin(e,i.plugins[e]));Object.keys(s).forEach(e=>r.registerValidator(e,s[e]));Object.keys(i.fields).forEach(e=>r.addField(e,i.fields[e]));return r}export{l as Core};","import Vue from \"vue\";\nimport formValidation from \"@/assets/plugins/formvalidation/dist/es6/core/Core\";\n\nVue.use(formValidation);\n","import Vue from 'vue';\nimport VueSession from 'vue-session';\n\nlet sessionOptions = {\n persist: true\n}\n\nVue.use(VueSession, sessionOptions);","import Vue from 'vue';\nimport Loading from 'vue-loading-overlay';\nimport 'vue-loading-overlay/dist/vue-loading.css';\n\n\nVue.use(Loading);\n\nVue.component( \"loading\", Loading );","import \"vue-easytable/libs/theme-default/index.css\"; // import style\n\n\n\nimport Vue from \"vue\";\nimport { VeTable } from \"vue-easytable\";\n\nVue.use(VeTable);\n\n//Vue.component( \"ve-table\", VueEasytable)\n","//https://www.npmjs.com/package/vuejs-datepicker#demo\n\nimport Vue from 'vue';\nimport DatePicker from 'vue2-datepicker';\nimport 'vue2-datepicker/index.css';\n\nVue.use( DatePicker );\nVue.component( \"datepicker\", DatePicker );","import Vue from 'vue';\nimport VueEllipseProgress from 'vue-ellipse-progress';\nimport 'vue-ellipse-progress/dist/vue-ellipse-progress.umd.min'\n\nVue.use(VueEllipseProgress);\n","/*\nimport Vue from 'vue';\nimport vmodal from 'vue-js-modal';\n\nVue.use( vmodal, { dynamic: true, dynamicDefaults: {\n draggable: false,\n scrollable : true,\n resizable: false,\n height: 'auto',\n }} )\n*/\n\n\n\nimport Vue from 'vue';\nimport VModal from 'vue-js-modal';\nVue.use(VModal)\n","import Vue from 'vue';\nimport Viewer from 'v-viewer';\nimport 'viewerjs/dist/viewer.css';\n\n\nVue.use( Viewer );\nViewer.setDefaults( {\n //zIndexInline : 2017\n})\n\n/*\nimport Vue from \"vue\";\nimport Viewer from \"v-viewer\";\nimport \"viewerjs/dist/viewer.css\";\n\n\nVue.use(Viewer.default);\n*/\n","import Vue from \"vue\";\nimport JsonViewer from 'vue-json-viewer'\n\n\nVue.use(JsonViewer)","\nimport vue from 'vue';\n\nvue.filter( \"datetimeFormat\", function( date ) {\n if( isNaN( Date.parse( date ) ) ) {\n return \"\";\n }\n\n return vue.prototype.$moment( date ).format( \"YYYY-MM-DD HH:mm\" );\n} )\n\n\nvue.filter( \"datetimeFormatSecond\", function( date ) {\n if( isNaN( Date.parse( date ) ) ) {\n return \"\";\n }\n\n return vue.prototype.$moment( date ).format( \"YYYY-MM-DD HH:mm:ss\" );\n} )\n","/* eslint-disable */\n// WARNING: DO NOT EDIT. This file is automatically generated by AWS Amplify. It will be overwritten.\n\nconst awsmobile = {\n \"aws_project_region\": \"us-east-1\",\n \"aws_cloud_logic_custom\": [\n {\n \"name\": \"apiArgosDashboard\",\n \"endpoint\": \"https://l8flh1ihle.execute-api.us-east-1.amazonaws.com/master\",\n \"region\": \"us-east-1\"\n }\n ],\n \"aws_cognito_identity_pool_id\": \"us-east-1:44e7622b-1338-4d51-929d-2128ada4ffc1\",\n \"aws_cognito_region\": \"us-east-1\",\n \"aws_user_pools_id\": \"us-east-1_88CD5PUd3\",\n \"aws_user_pools_web_client_id\": \"246cnv2j13oi8r7dr0e0fau7k\",\n \"oauth\": {},\n \"aws_cognito_username_attributes\": [\n \"EMAIL\"\n ],\n \"aws_cognito_social_providers\": [],\n \"aws_cognito_signup_attributes\": [\n \"EMAIL\"\n ],\n \"aws_cognito_mfa_configuration\": \"OFF\",\n \"aws_cognito_mfa_types\": [\n \"SMS\"\n ],\n \"aws_cognito_password_protection_settings\": {\n \"passwordPolicyMinLength\": 8,\n \"passwordPolicyCharacters\": []\n },\n \"aws_cognito_verification_mechanisms\": [\n \"EMAIL\"\n ],\n \"aws_user_files_s3_bucket\": \"s3argosbucket113003-master\",\n \"aws_user_files_s3_bucket_region\": \"us-east-1\"\n};\n\n\nexport default awsmobile;\n","import Vue from \"vue\";\nimport App from \"./App.vue\";\nimport router from \"./router\";\nimport store from \"@/core/services/store\";\nimport ApiService from \"@/core/services/api.service\";\nimport VueSessionStorage from \"vue-sessionstorage\";\n\nimport { CommonJs } from \"@/assets/js/common/common\";\nimport { TreeCommon } from \"@/assets/js/common/treecommon\";\n\nVue.config.productionTip = false;\n\n// Global 3rd party plugins\nimport \"popper.js\";\nimport \"tooltip.js\";\nimport PerfectScrollbar from \"perfect-scrollbar\";\nwindow.PerfectScrollbar = PerfectScrollbar;\nimport ClipboardJS from \"clipboard\";\nwindow.ClipboardJS = ClipboardJS;\n\n\n// Vue 3rd party plugins\nimport i18n from \"@/core/plugins/vue-i18n\";\nimport vuetify from \"@/core/plugins/vuetify\";\n\nimport \"@/core/plugins\";\nimport \"@/core/services/filters\";\n\nimport Amplify from 'aws-amplify';\nimport \"@aws-amplify/ui-vue\";\nimport aws_exports from './aws-exports';\n\nimport axios from 'axios';\nimport VueAxios from 'vue-axios';\n\n\nAmplify.configure(aws_exports);\n\n// import * as func from \"./function\";\n// API service init\nApiService.init();\n\n// Remove this to disable mock API\n// MockService.init();\n//\n// router.beforeEach((to, from, next) => {\n// // Ensure we checked auth before each page load.\n// Promise.all([store.dispatch(VERIFY_AUTH)]).then(next);\n//\n// // reset config to initial state\n// store.dispatch(RESET_LAYOUT_CONFIG);\n//\n// // Scroll page to top on every route change\n// setTimeout(() => {\n// window.scrollTo(0, 0);\n// }, 100);\n// });\n\nVue.use( CommonJs );\nVue.use( TreeCommon );\nVue.use(VueSessionStorage);\nVue.use(VueAxios, axios);\n\nnew Vue({\n router,\n store,\n i18n,\n vuetify,\n // func,\n render: h => h(App)\n}).$mount(\"#app\");\n","import objectPath from \"object-path\";\nimport merge from \"deepmerge\";\nimport config from \"@/core/config/layout.config.json\";\n\n// action types\nexport const SET_LAYOUT_CONFIG = \"setLayoutConfig\";\nexport const RESET_LAYOUT_CONFIG = \"resetLayoutConfig\";\nexport const OVERRIDE_LAYOUT_CONFIG = \"overrideLayoutConfig\";\nexport const OVERRIDE_PAGE_LAYOUT_CONFIG = \"overridePageLayoutConfig\";\n\n// mutation types\n\nexport default {\n state: {\n config: config,\n initial: config\n },\n getters: {\n /**\n * Get config from layout config\n * @param state\n * @returns {function(path, defaultValue): *}\n */\n layoutConfig: state => (path, defaultValue) => {\n return objectPath.get(state.config, path, defaultValue);\n }\n },\n actions: {\n /**\n * Set and replace the whole config\n * @param state\n * @param payload\n */\n [SET_LAYOUT_CONFIG](state, payload) {\n state.commit(SET_LAYOUT_CONFIG, payload);\n },\n\n /**\n * Reset the config at the initial state\n * @param state\n */\n [RESET_LAYOUT_CONFIG](state) {\n state.commit(RESET_LAYOUT_CONFIG);\n },\n\n /**\n * Reset the config using saved config in the cache by the layout builder\n * @param state\n */\n [OVERRIDE_LAYOUT_CONFIG](state) {\n state.commit(OVERRIDE_LAYOUT_CONFIG);\n },\n\n /**\n * Override config by page level\n * @param state\n * @param payload\n */\n [OVERRIDE_PAGE_LAYOUT_CONFIG](state, payload) {\n state.commit(OVERRIDE_PAGE_LAYOUT_CONFIG, payload);\n }\n },\n mutations: {\n [SET_LAYOUT_CONFIG](state, payload) {\n state.config = payload;\n },\n [RESET_LAYOUT_CONFIG](state) {\n state.config = Object.assign({}, state.initial);\n },\n [OVERRIDE_LAYOUT_CONFIG](state) {\n state.config = state.initial = Object.assign(\n {},\n state.initial,\n JSON.parse(localStorage.getItem(\"config\"))\n );\n },\n [OVERRIDE_PAGE_LAYOUT_CONFIG](state, payload) {\n state.config = merge(state.config, payload);\n }\n }\n};\n","\"use strict\";\n\nimport KTUtil from \"./util\";\n\n// Component Definition\nvar KTHeader = function(elementId, options) {\n // Main object\n var the = this;\n var init = false;\n\n // Get element object\n var element = KTUtil.getById(elementId);\n var body = KTUtil.getBody();\n\n if (element === undefined) {\n return;\n }\n\n // Default options\n var defaultOptions = {\n offset: {\n desktop: true,\n tabletAndMobile: true\n },\n releseOnReverse: {\n desktop: false,\n tabletAndMobile: false\n }\n };\n\n ////////////////////////////\n // ** Private Methods ** //\n ////////////////////////////\n\n var Plugin = {\n /**\n * Run plugin\n * @returns {KTHeader}\n */\n construct: function(options) {\n if (KTUtil.data(element).has('header')) {\n the = KTUtil.data(element).get('header');\n } else {\n // reset header\n Plugin.init(options);\n\n // build header\n Plugin.build();\n\n KTUtil.data(element).set('header', the);\n }\n\n return the;\n },\n\n /**\n * Handles subheader click toggle\n * @returns {KTHeader}\n */\n init: function(options) {\n the.events = [];\n\n // merge default and user defined options\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\n },\n\n /**\n * Reset header\n * @returns {KTHeader}\n */\n build: function() {\n var eventTriggerState = true;\n var lastScrollTop = 0;\n\n window.addEventListener('scroll', function() {\n var offset = 0, st, attrName;\n\n if (KTUtil.isBreakpointDown('lg') && the.options.offset.tabletAndMobile === false) {\n return;\n }\n\n if (KTUtil.isBreakpointUp('lg') && the.options.offset.desktop === false) {\n return;\n }\n\n if (KTUtil.isBreakpointUp('lg')) {\n offset = the.options.offset.desktop;\n } else if (KTUtil.isBreakpointDown('lg')) {\n offset = the.options.offset.tabletAndMobile;\n }\n\n st = KTUtil.getScrollTop();\n\n if (\n (KTUtil.isBreakpointDown('lg') && the.options.releseOnReverse.tabletAndMobile) ||\n (KTUtil.isBreakpointUp('lg') && the.options.releseOnReverse.desktop)\n ) {\n if (st > offset && lastScrollTop < st) { // down scroll mode\n if (body.hasAttribute('data-header-scroll') === false) {\n body.setAttribute('data-header-scroll', 'on');\n }\n\n if (eventTriggerState) {\n Plugin.eventTrigger('scrollOn', the);\n eventTriggerState = false;\n }\n } else { // back scroll mode\n if (body.hasAttribute('data-header-scroll') === true) {\n body.removeAttribute('data-header-scroll');\n }\n\n if (eventTriggerState == false) {\n Plugin.eventTrigger('scrollOff', the);\n eventTriggerState = true;\n }\n }\n\n lastScrollTop = st;\n } else {\n if (st > offset) { // down scroll mode\n if (body.hasAttribute('data-header-scroll') === false) {\n body.setAttribute('data-header-scroll', 'on');\n }\n\n if (eventTriggerState) {\n Plugin.eventTrigger('scrollOn', the);\n eventTriggerState = false;\n }\n } else { // back scroll mode\n if (body.hasAttribute('data-header-scroll') === true) {\n body.removeAttribute('data-header-scroll');\n }\n\n if (eventTriggerState == false) {\n Plugin.eventTrigger('scrollOff', the);\n eventTriggerState = true;\n }\n }\n }\n });\n },\n\n /**\n * Trigger events\n */\n eventTrigger: function(name, args) {\n for (var i = 0; i < the.events.length; i++) {\n var event = the.events[i];\n if (event.name == name) {\n if (event.one == true) {\n if (event.fired == false) {\n the.events[i].fired = true;\n return event.handler.call(this, the, args);\n }\n } else {\n return event.handler.call(this, the, args);\n }\n }\n }\n },\n\n addEvent: function(name, handler, one) {\n the.events.push({\n name: name,\n handler: handler,\n one: one,\n fired: false\n });\n }\n };\n\n //////////////////////////\n // ** Public Methods ** //\n //////////////////////////\n\n /**\n * Set default options\n */\n\n the.setDefaults = function(options) {\n defaultOptions = options;\n };\n\n /**\n * Register event\n */\n the.on = function(name, handler) {\n return Plugin.addEvent(name, handler);\n };\n\n ///////////////////////////////\n // ** Plugin Construction ** //\n ///////////////////////////////\n\n // Run plugin\n Plugin.construct.apply(the, [options]);\n\n // Init done\n init = true;\n\n // Return plugin instance\n return the;\n};\n\n// webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = KTHeader;\n}\n\nexport default KTHeader;","\"use strict\";\n\nvar KTLayoutScrolltop = function() {\n // Private properties\n var _element;\n var _object;\n\n // Private functions\n var _init = function() {\n _object = new KTScrolltop(_element, {\n offset: 300,\n speed: 600,\n });\n }\n\n // Public methods\n\treturn {\n\t\tinit: function(id) {\n _element = KTUtil.getById(id);\n\n if (!_element) {\n return;\n }\n\n // Initialize\n _init();\n\t\t},\n\n getElement: function() {\n return _element;\n }\n\t};\n}();\n\n\n\nexport default KTLayoutScrolltop;","import { API } from \"aws-amplify\";\nimport rejectReason from \"@/core/config/reject.reason.json\";\n\nexport default {\n\n // 모듈이 독립적이거나 재사용되기를 원한다면 namespaced를 true로\n //namespaced: true,\n\n state : {\n rejectReason : {\n\n /*automaticReject : [\n { text: 'codef 실패', value: 'codef_fail' },\n { text: 'detect face 감지되지 않음', value: 'face_image_not_detected' },\n { text: 'detect face 얼굴이 하나 이상 감지됨', value: 'face_image_more_than_one_face' },\n { text: 'face compare 가 되지 않거나 감지된 얼굴이 두 개 이상임', value: 'face_image_not_match_or_more_than_one_face' },\n { text: 'invalid image - 신분증이 아님', value: 'liveness_fail' },\n ],\n idImageReject : [ //@TODO https://maroon-headlight-09a.notion.site/524decb589d84813a8ee276480bbd54f 참고\n { text: 'invalid image - 신분증이 아님', value: 'id_image_invalidImage' },\n { text: 'invalid ID - 여권이 아님', value: 'id_image_invalidId' },\n { text: 'Error - 이미지 업로드 실패 에러', value: 'id_image_error' },\n { text: 'bad image - 읽을 수 없음.', value: 'id_image_badImage' }\n ],\n\n idInfoReject : [\n { text : 'data mismatch', value : 'id_info_dataMismatch' },\n { text : 'expired - 만료', value : 'id_info_expired' },\n { text : 'blacklisted nationality', value : 'id_info_blacklist' },\n { text : 'not of age', value : 'id_info_notOfAge' },\n { text : 'language mismatch - 신분증상 언어와 입력 언어 다름', value : 'id_info_languageMismatch' },\n ],\n\n selfieImageReject : [\n { text : 'invalid selfie - 셀피가 아님', value : 'selfie_image_invalidSelfie' },\n { text : 'selfie mismatch - 같은 사람이 아님', value : 'selfie_image_selfieMismatch' },\n { text : 'Error - 이미지 업로드 실패 에러', value : 'selfie_image_error' },\n { text : 'bad image - 얼굴 확인 불가', value : 'selfie_image_badImage' },\n ],*/\n\n },\n idType : {\n \"drivers_license\" : \"Driver License\",\n \"passport\" : \"Passport\",\n \"government_id\" : \"Government ID\",\n \"residence_permit\" : \"Residence Permit\",\n \"vehicle_registration_certificate\" : \"Vehicle Registration Certificate\",\n \"visa\" : \"VISA\",\n \"aadhaar\" : \"AADHAAR\",\n \"pancard\" : \"PANCARD\",\n },\n submissionId: \"\",\n companyName: \"\",\n submissions : [],\n submissionTotalCount: 0,\n submissionApprovedCount: 0,\n directors: [],\n shareholders: [],\n companyProfileCount: {}\n },\n\n // state를 변경할수 있는 유일한 요소, action에서 호출\n mutations: {\n setSubmissions (state, res) {\n console.log(\"setSubmissions\", res);\n state.submissions = res;\n state.submissionTotalCount = res.length;\n state.submissionApprovedCount = res.length;\n },\n setDirectors(state, list){\n state.directors = list;\n },\n setId(state, id){\n state.submissionId = id;\n },\n setCpnyName(state, name){\n state.companyName = name;\n },\n setShareHolders(state, list){\n state.shareholders = list;\n },\n setCompanyProfileCnt(state, profileInfo){\n state.companyProfileCount = profileInfo\n },\n setHistory(state , alias) {\n state.alias = alias\n },\n },\n\n actions: {\n\n /**\n * get submission detail\n * @param context\n * @param payload\n * @returns {Promise}\n */\n // async callSubmissionData(context, payload){\n // let params = {\n // project_id: payload.projectId,\n // submission_id: payload.submissionId\n // };\n // let requestParam = {\n // alias: context.getters.getEnv,\n // requestType: 'submission_data',\n // submission_data: JSON.stringify( params )\n // };\n // return await API.get('apiArgosDashboard', '/kybSubmission', {queryStringParameters: requestParam });\n // },\n\n async callSubmissionData(context, payload){\n let params = {submissionId: payload.submissionId};\n let result;\n try{\n result = await API.get('apiArgosDashboard', '/kybSubmission', {queryStringParameters: {alias: context.getters.getEnv, requestType: 'submission_data', submission_data: JSON.stringify(params)}});\n //console.log( \"callSubmissionData res ::: \", JSON.stringify( result ) );\n }\n catch( e ) {\n console.log( \"callSubmissionData error ::\", e?.message )\n }\n\n return result;\n },\n\n /**\n * get submission List\n * @param context\n * @param payload\n * @returns {Promise<*[]|any>}\n */\n // async callSubmissionList( context, payload ){\n // console.log(\"payload\", payload);\n // let params = {project_id: payload.projectId};\n // let requestParam = {\n // alias: context.getters.getEnv,\n // requestType: 'submission_list',\n // submission_data: JSON.stringify( params )\n // };\n // let getSubmission = await API.get('apiArgosDashboard', '/kybSubmission', {queryStringParameters: requestParam});\n // if(!getSubmission.error){\n // return getSubmission;\n // }else{\n // console.log(\"getSubmission err\", getSubmission);\n // return [];\n // }\n // },\n\n async callSubmissionList(context, payload){\n console.log(\"payload in callSubmissionList\", payload);\n let params = {projectId: payload.projectId};\n\n //@TODO\n let getSubmission = await API.get('apiArgosDashboard', '/kybSubmission', {queryStringParameters: {alias: context.getters.getEnv, requestType: 'submission_list', submission_data: JSON.stringify(params)}});\n //console.log( \"callSubmissionList :: \", JSON.stringify( getSubmission ) );\n if(!getSubmission.error){\n return getSubmission;\n }\n console.log(\"getSubmission err\", getSubmission);\n return [];\n },\n\n /**\n * get submission shareholder\n * @param context\n * @param submissionId\n * @returns {Promise}\n */\n // async getSubmissionShareHolders(context, submissionId){\n // let params = { 'submission_id': submissionId };\n // let requestParam = {\n // alias: context.getters.getEnv,\n // requestType: 'shareholder_list',\n // shareholder_data: JSON.stringify( params )\n // };\n // let getShareholder = await API.get('apiArgosDashboard', '/kybShareholder', {queryStringParameters: requestParam });\n // console.log(\"getShareholder\", getShareholder);\n // return getShareholder;\n // },\n\n async getSubmissionShareHolders(context, submissionId){\n if( !submissionId ) {\n console.log( \"In getSubmissionShareHolders > wrong request ,param : \", submissionId );\n return;\n }\n let param = {\n alias: context.getters.getEnv,\n requestType: 'shareholder_list',\n shareholder_data: JSON.stringify({'submissionId': submissionId})\n };\n console.log(\"param in getSubmissionShareHolders\", param);\n let getShareholder = await API.get('apiArgosDashboard', '/kybShareholder', {queryStringParameters: param});\n console.log(\"getShareholder\", JSON.stringify( getShareholder ));\n return getShareholder;\n },\n\n async amlKybReportDownload(context, payload){\n if( !payload.resourceId ) {\n console.log( \"amlKybReportDownload request param error - resourceId ::: \", payload.resourceId );\n return {};\n }\n\n payload.alias = context.getters.getEnv;\n console.log( \"amlKybReportDownload payload ::: \", payload );\n let returnValue = await API.get('apiArgosDashboard', '/kycAmlReport03', {queryStringParameters: payload});\n console.log(\"amlKybReportDownload\", returnValue);\n return returnValue;\n },\n\n\n async deleteSubmission(context, payload) {\n let params = {\n queryStringParameters: {\n alias: context.getters.getEnv,\n isDashboard: true,\n ...payload\n }\n }\n\n return await API.del('apiArgosDashboard', '/deleteSubmission', params);\n },\n\n\n\n async updateSubmission(context, payload) {\n\n\n const {submissionId , ...rest} = payload\n\n let params = {\n body: {\n submissionId,\n alias: context.getters.getEnv,\n projectId: context.getters.getSelectedProjectId,\n admin: context.getters.currentLoginUser.email,\n data : {\n ...rest,\n }\n }\n }\n\n return await API.post('apiArgosDashboard' , '/updateSubmission', params);\n },\n\n async updateMemo(context,payload) {\n let parma = {\n alias: context.getters.getEnv,\n submissionId: payload.submissionId,\n memo: payload.memo\n }\n return await API.post('apiArgosDashboard', '/kycSubmissionMemo', {body: parma});\n },\n\n /**\n * get project history list\n * @param context\n * @param payload\n * @returns {Promise<*[]>}\n */\n async getProjectHistory( context, payload ){\n\n if( !payload.project_id ) {\n console.log( \"require parameter is not exist ::: \", payload );\n return [];\n }\n\n let params = {\n queryStringParameters: {\n alias: context.getters.getEnv,\n requestType: 'history_list',\n history_data: JSON.stringify( payload )\n }\n };\n let historyList = await API.get('apiArgosDashboard', '/kybEvent', params);\n console.log(\"historyList\", historyList);\n\n return historyList.value || [];\n },\n\n async getKybEventLog(context, payload){\n let params = {\n alias: context.getters.getEnv,\n searchType: 'KYB'\n };\n if( !payload || !payload.projectId ) {\n console.log( \"getKybEventLog request param error - projectId ::: \", payload.projectId );\n return {};\n }\n\n let keys = Object.keys( payload );\n keys.forEach( function( key ){\n params[ key ] = payload[key];\n } );\n\n console.log( \"getKycEventLog param ::: \", params );\n let result;\n try{\n result = await API.get('apiArgosDashboard', '/kybEvent', {queryStringParameters: params} );\n console.log( \"getKybEventLog response :::\", JSON.stringify(result ) )\n }\n catch( e ) {\n console.log( \"getKybEventLog :: \", e );\n }\n return result;\n },\n\n\n async getLoginHistory(context, email) {\n\n let params = {\n alias: context.getters.getEnv,\n requestType : 'getHistory',\n email: email,\n };\n try {\n const result = await API.get('apiArgosDashboard', '/loginV2', {queryStringParameters: params})\n return result\n } catch (e) {\n console.log(\"Catch The Error ::: \", e)\n }\n },\n\n async setLoginHistory(context) {\n let params = {\n alias: context.getters.getEnv,\n requestType: 'setHistory'\n };\n try {\n return await API.get('apiArgosDashboard', '/login', {queryStringParameters: params})\n } catch (e) {\n console.log(\"Catch The Login History Error\", e)\n }\n },\n\n setSubmissionDirectors(context, payload){\n if(!payload) payload = [];\n context.commit('setDirectors', payload);\n },\n setSubmissionId(context, payload){\n context.commit('setId', payload)\n },\n setCompanyName(context, payload){\n context.commit('setCpnyName', payload);\n },\n setShareHolderList(context, payload){\n context.commit('setShareHolders', payload);\n },\n setCompanyProfileCount(context, payload){\n context.commit('setCompanyProfileCnt', payload);\n }\n },\n\n\n // 외부 컴포넌트의 computed에서 사용\n getters: {\n\n /**\n * 카테고리별 reject reason\n * @param state\n * @returns {{addressImageReject: [], automaticReject: [], idImageReject: [], selfieImageReject: [], idInfoReject: [], addressInfoReject: []}|*}\n */\n rejectReason ( state ) {\n\n // 이미 만들어져있는 경우 그대로 return\n if( state.isMadeRejectReason ) {\n return state.rejectReason;\n }\n\n state.isMadeRejectReason = true;\n\n let rejectReasonKey = Object.keys( rejectReason );\n\n\n //idImageReject,idInfoReject,selfieImageReject,automaticReject,addressImageReject,addressInfoReject\n rejectReasonKey.forEach( function( item ) {\n\n let temp = {\n value : item,\n text : rejectReason[item].console_text,\n custom_text : rejectReason[item].custom_text,\n }\n\n let category = rejectReason[item].category;\n state.rejectReason[category].push( temp );\n })\n\n console.log( \"reject Reason :::\", state.rejectReason )\n return state.rejectReason;\n\n },\n\n getSubmissions ( state ) {\n return state.submissions || [];\n },\n getDirectors(state){\n return state.directors || [];\n },\n getSubmissionId(state){\n return state.submissionId;\n },\n getCompanyName(state){\n return state.companyName;\n },\n getShareHolders(state){\n return state.shareholders || [];\n },\n getCompanyProfileCount(state) {\n return state.companyProfileCount;\n }\n },\n\n}\n","import {API} from \"aws-amplify\";\nimport axios from \"axios\";\nimport Vue from 'vue';\nimport * as queryString from \"querystring\";\n\nexport default {\n\n // 모듈이 독립적이거나 재사용되기를 원한다면 namespaced를 true로\n //namespaced: true,\n\n state : {\n\n PROJECT_TYPE_TEXT : {\n \"service\": \"Service\",\n \"test\" : \"Test\",\n },\n submissionsInfo: {},\n\n },\n\n // state를 변경할수 있는 유일한 요소, action에서 호출\n mutations: {\n\n },\n\n actions: {\n\n /**\n * project list 를 가져옵니다\n * @param context\n * @param payload\n */\n\n\n //\n // async getProjectAuth(context, payload){\n // console.log(\"getProjectAuth payload\", payload);\n //\n // let param = {\n // alias: context.getters.getEnv,\n // admins_data: JSON.stringify(payload)}\n // let params = {queryStringParameters: param};\n // let getAdmins = await API.get('apiArgosDashboard', '/admin', params);\n // console.log(\"getAdmins\", getAdmins);\n // return getAdmins;\n // },\n\n async getProjectAdmins(context, payload){\n\n if( !payload || !payload.email ) {\n console.log( \"getProjectAdmins param error ::\", payload );\n return;\n }\n\n let param = {\n alias: context.getters.getEnv,\n requestType: \"admins_list\",\n admins_data: JSON.stringify(payload)\n };\n let params = {queryStringParameters: param };\n let getAdmins = {};\n try{\n getAdmins = await API.get('apiArgosDashboard', '/admin', params);\n }\n catch( e ) {\n console.log( \"error ::: \", e );\n }\n\n\n return getAdmins;\n },\n\n /**\n * get project data\n * @param context\n * @param payload\n * @returns {Promise}\n */\n async getProjectData(context, payload){\n if( !payload.project_id ) {\n console.log( \"getProjectData param[project_id] is null\" );\n return null;\n }\n // return await API.get('apiArgosDashboard', '/project', {queryStringParameters: {project_id: payload.project_id}});\n\n let param = {\n alias: context.getters.getEnv,\n requestType: 'project_data',\n projectId: payload.project_id\n };\n\n let projectData = await API.get('apiArgosDashboard', '/kybProject', { queryStringParameters: param });\n console.log(\"projectData res ::: \", JSON.stringify( projectData ));\n return projectData;\n },\n\n /**\n * 전체 프로젝트 리스트를 가져옵니다\n * @param context\n * @param payload\n * @returns {Promise<*[]|*>}\n */\n async getProjectAllList(context, payload) {\n\n let param = {\n alias: context.getters.getEnv,\n requestType: \"project_list\",\n project_data: JSON.stringify({} )\n };\n let projectList = await API.get('apiArgosDashboard', '/kybProject', {queryStringParameters: param });\n //console.log(\"get getProjectAllList response :: \", JSON.stringify( projectList ));\n\n return projectList;\n // if(projectList.value) return projectList.value;\n // else return [];\n },\n\n /**\n * project id list로 project list 를 가져옵니다\n * @param context\n * @param payload - 필수 : projectIdList\n * @returns {Promise<*[]|*>}\n */\n async getProjectList(context, payload) {\n if( !payload.projectIdList || payload.projectIdList.length == 0 ) {\n return [];\n }\n // return await API.get('apiArgosDashboard', '/project', {queryStringParameters: {projectIdList: payload.projectIdList}});\n let param = {\n alias: context.getters.getEnv,\n requestType: \"project_id_list\",\n project_data: JSON.stringify({ projectIdList: payload.projectIdList } )\n };\n let projectList = await API.get('apiArgosDashboard', '/kybProject', {queryStringParameters: param });\n console.log(\"get projectList response :: \", JSON.stringify( projectList ));\n\n return projectList || [];\n },\n downloadFile(context, payload){\n axios({\n method: 'get',\n url: payload.url,\n responseType: 'arraybuffer'\n }).then(res => {\n const url = window.URL.createObjectURL(new Blob([res.data]))\n const link = document.createElement('a')\n link.href = url\n link.setAttribute('download', decodeURI(decodeURI(payload.url.split('/').pop()))) //or any other extension\n document.body.appendChild(link)\n link.click()\n }).catch(err => {\n console.log(\"err\", err);\n })\n },\n\n async otpVerify(context, payload = {}){\n payload.requestType = 'verify';\n let params = {\n alias: context.getters.getEnv,\n otp_data: JSON.stringify(payload)\n };\n console.log(\"params in setOtpProperties\", params);\n let returnValue;\n\n try {\n returnValue = await API.get('apiArgosDashboard', '/otp', {queryStringParameters: params })\n console.log( \"otpVerify res ::\", returnValue )\n }\n catch( e ) {\n console.log( \"otpVerify error ::: \", e?.message )\n }\n return returnValue;\n },\n\n async resetOtp(context, payload = {}){\n\n payload.requestType = 'resetOtp';\n let params = {\n alias: context.getters.getEnv,\n otp_data: JSON.stringify(payload)\n };\n console.log(\"params in setOtpProperties\", params);\n let returnValue;\n\n try {\n returnValue = await API.get('apiArgosDashboard', '/otp', {queryStringParameters: params })\n console.log( \"resetOtp res ::\", returnValue )\n }\n catch( e ) {\n console.log( \"resetOtp error ::: \", e?.message )\n }\n return returnValue;\n },\n\n /**\n * otp 생성\n * @param context\n * @param payload\n * @returns {Promise<*>}\n */\n async createOtp(context, payload = {}){\n payload.requestType = \"setOtp\";\n let params = {\n alias: context.getters.getEnv,\n otp_data: JSON.stringify(payload)\n };\n console.log(\"params in setOtpProperties\", params);\n let returnValue;\n\n try {\n returnValue = await API.get('apiArgosDashboard', '/otp', {queryStringParameters: params })\n }\n catch( e ) {\n console.log( \"createOtp error ::: \", e?.message )\n }\n return returnValue;\n },\n\n /**\n * email알림 정보를 가져옵니다\n * @param context\n * @param payload\n * @returns {Promise<*>}\n */\n\n\n async emailNotification(context, payload) {\n\n let params = {\n queryStringParameters: {\n alias: context.getters.getEnv,\n requestType: 'emailNotification'\n },\n body: { emailNotification: payload.emailNotification}\n };\n let emailValue = {};\n try{\n emailValue = await API.post('apiArgosDashboard', '/adminV2', params);\n console.log(\"getAdmins res :: \", JSON.stringify( emailValue ));\n }\n catch( e ) {\n console.log( \"error ::: \", e );\n }\n\n return emailValue;\n },\n async kybWebhookInfo(context, payload) {\n\n let params = {\n queryStringParameters: {\n alias: context.getters.getEnv,\n projectId: payload.projectId\n },\n body: { webhookURL: payload.webhookURL}\n };\n\n let webhookValue = {};\n try{\n webhookValue = await API.post('apiArgosDashboard', '/kybProjectV2', params);\n }\n catch( e ) {\n console.log( \"error ::: \", e );\n }\n return webhookValue;\n },\n\n\n async deleteProject(context, payload) {\n try {\n let params = {\n body: {\n alias: context.getters.getEnv,\n projectId: payload.projectId,\n admin : payload.admin,\n comment : payload.comment\n }\n };\n return await API.post('apiArgosDashboard', '/presetKycProjectRemoval', params);\n } catch (e) {\n return {\n statusCode : e?.response?.status ?? 400,\n errorMessage : e?.response?.data?.message ?? \"Something went wrong\"\n }\n }\n },\n\n\n async duplicateProject(context,payload) {\n try {\n let params = {\n body: {\n alias: context.getters.getEnv,\n projectId: payload.projectId,\n projectName : payload.projectName,\n admin : payload.admin,\n }\n };\n return await API.post('apiArgosDashboard', '/duplicateKycProject', params);\n } catch (e) {\n return {\n statusCode : e?.response?.status ?? 400,\n errorMessage : e?.response?.data?.message ?? \"Something went wrong\"\n }\n }\n }\n\n\n\n },\n\n\n getters: {\n\n },\n\n}\n","\nexport default {\n\n // 모듈이 독립적이거나 재사용되기를 원한다면 namespaced를 true로\n //namespaced: true,\n\n state : {\n\n /**\n * DB에 저장되어있는 KEY값으로 TEXT 추출\n */\n ACTION_TYPE_TEXT : {\n KYB_CREATE : \"New Submission\",\n KYB_COMPLETE : \"Submission Complete\",\n DIRECTOR_CREATE : \"New Director\",\n DIRECTOR_COMPLETE : \"Director Complete\",\n SHAREHOLDER_CREATE : \"New Shareholder\",\n SHAREHOLDER_COMPLETE : \"Shareholder Complete\",\n },\n\n BADGE_COLOR : {\n KYB_CREATE : \"warning\",\n KYB_COMPLETE : \"primary\",\n DIRECTOR_CREATE : \"danger\",\n DIRECTOR_COMPLETE : \"danger\",\n SHAREHOLDER_CREATE : \"success\",\n SHAREHOLDER_COMPLETE : \"success\",\n },\n historyList: [],\n },\n\n // state를 변경할수 있는 유일한 요소, action에서 호출\n mutations: {\n\n setHistoryList ( state, list ) {\n state.historyList = list;\n },\n\n },\n\n actions: {\n\n /**\n * history list를 db에서 가져옵니다\n * @param context\n * @param payload\n */\n callHistoryApi ( context, payload ) {\n\n var AWS = require('aws-sdk');\n AWS.config.update({\n region: \"ap-northeast-2\",\n accessKeyId: context.rootState.storeOption.accessKeyId,\n secretAccessKey: context.rootState.storeOption.secretAccessKey\n });\n\n const docClient = new AWS.DynamoDB.DocumentClient(); //dynamodDB client\n\n /**\n * 검색조건\n */\n let params = {\n TableName: \"kyb-history\",\n ExpressionAttributeValues: {\":projectId\": payload.projectId},\n KeyConditionExpression: \"project_id=:projectId\"\n };\n\n // console.log(\"params in callHistoryApi\", params);\n\n docClient.query(params, (err, data) => {\n if (err) console.log(err);\n else{\n //console.log( \"callHistoryApi response ::: \", data )\n // Regex PhoneNumber Format && Change Date Format\n context.commit('setHistoryList', data.Items );\n };\n });\n },\n },\n\n\n /**\n * 결과값을 계산해야하는 경우가 있을 때 사용\n */\n getters: {\n\n getHistories ( state ) {\n return state.historyList || [];\n },\n },\n\n\n\n}","/**\n * vuetify default option 설정..\n * 현재 미사용\n */\nexport default {\n\n // 모듈이 독립적이거나 재사용되기를 원한다면 namespaced를 true로\n //namespaced: true,\n\n state : {\n fileInput: {\n dense: true,\n color: \"deep-purple accent-4\"\n }\n },\n\n\n}","import countryList from '@/core/config/country.js';\nimport Vue from 'vue';\n\n\nfunction makeCountryMap() {\n\n console.log( \"make country map ::\" )\n let countryObjs = {};\n\n\n /// i18n.locale = 'en' 일때와 'ko' 일때를 구분해서 처리해야함\n\n\n\n countryList.map( function( country, index ) {\n countryObjs[ country.value ] = country.label;\n } );\n\n return countryObjs;\n}\n\nfunction makeCountryObjList() {\n\n let tmpList = [];\n for(let obj of countryList){\n let newObj = {};\n newObj.label = obj.name;\n newObj.value = obj.value;\n newObj.text = obj.label;\n tmpList.push(newObj);\n }\n return tmpList;\n}\n\n\nexport default {\n state : {\n countryList: makeCountryObjList(), //외부에서 사용\n countryObjs : makeCountryMap(),\n\n },\n\n mutations : {\n\n },\n\n getters : {\n getCountryList(state) {\n return state.countryList.map((country) => {\n if (country.text === 'United states') {\n return {\n ...country,\n text: 'United States'\n }\n }\n return country\n }).sort((a, b) => a.text.localeCompare(b.text));\n },\n\n getCountryLabelByValue : state => ( key ) => {\n\n if( !key ) {\n return \"\";\n }\n // 소문자인 경우에 대문자로 변경\n key = key.toUpperCase();\n\n // 한번 가져온 이후에는 다시 가져오지 않도록 수정\n return state.countryObjs[key];\n }\n\n }\n\n}\n","/**\n * session key 를 정의합니다\n */\nexport default {\n\n state : {\n\n LOGIN_USER : \"user\",\n PROJECT_ID : \"project_id\",\n PROJECT_ID_KYC : \"project_id_kyc\",\n SELECTED_PROJECT_ID : \"selected_project_id\", //현재 선택되어있는 프로젝트 아이디\n SELECTED_PROJECT_ID_KYC : \"selected_project_id_kyc\", //현재 선택되어있는 프로젝트 아이디\n\n PROJECT_OBJECT : \"project_object\",\n\n PROJECT_ID_LIST : \"projectIdList\",\n PROJECT_ID_LIST_KYC: \"projectIdListKyc\",\n\n PROJECT_LIST : \"projectList\",\n\n SUBMISSION_ID : \"submissionId\",\n ADD_ON_ID : \"addOnId\",\n\n SUBMISSION_VALUE : \"submissionValue\"\n\n },\n\n mutation : {\n\n },\n\n}\n","\nexport default {\n state: {\n\n s3UrlQa : \"https://kyb-console92837-qaaa.s3.ap-northeast-2.amazonaws.com/public/\",\n s3UrlDev : \"https://kyb-console130322-dev.s3.ap-northeast-2.amazonaws.com/public/\",\n\n\n s3HostQa : \"https://kyb-console92837-qaaa.s3.ap-northeast-2.amazonaws.com/\",\n s3HostDev : \"https://kyb-console130322-dev.s3.ap-northeast-2.amazonaws.com/\",\n\n formUrlLive : \"https://form.argosidentity.com\",\n formUrlQa : \"https://form-qa.argosidentity.net\",\n formUrlDev : \"https://form-dev.argosidentity.net\",\n\n liveAPIBaseURL : \"https://rest-api.argosidentity.com\",\n devAPIBaseURL : \"https://test-api.argosidentity.com\",\n },\n getters: {\n\n\n getEnv () {\n\n //dev, qa, live\n let host = location.host;\n if( host.includes( \"localhost\" ) || host.includes( \"dev\" ) || host.includes( \"idcheck-local\" )) {\n return \"dev\";\n }\n else if( host.includes( \"admin-qa.argosidentity.com\" ) || host.includes( \"idcheck-qa.argosidentity.net\" )) {\n return \"live\";\n }\n else if(host.includes('admin.argosidentity.com') || host.includes('idcheck.argosidentity.com')){\n return \"live\";\n }\n\n else {\n return \"dev\";\n }\n\n },\n getAPIBaseURL (state, getters ) {\n let env = getters.getEnv;\n if( env === \"dev\" ) {\n return state.devAPIBaseURL;\n }\n return state.liveAPIBaseURL\n },\n\n getFormUrl (state, getters ) {\n\n let env = getters.getEnv;\n\n if( env === \"dev\" ) {\n return state.formUrlDev;\n }\n if( env === \"qa\" ) {\n return state.formUrlQa;\n }\n\n return state.formUrlLive;\n },\n\n getS3Url ( state ) {\n\n let host = location.host;\n if( host.includes( \"localhost\" ) || host.includes( \"idcheck-local\" )) {\n\n return state.s3UrlDev;\n }\n return state.s3UrlQa;\n },\n\n getS3Host ( state ) {\n\n let host = location.host;\n if( host.includes( \"localhost\" ) || host.includes( \"idcheck-local\" )) {\n return state.s3HostDev;\n }\n return state.s3HostQa;\n }\n\n },\n actions: {\n\n },\n mutations: {\n }\n};\n","\nexport default {\n state : {\n\n represent : {\n \"ceo\" : \"CEO\",\n \"delegate\" : \"Delegate\"\n }\n },\n}","/**\n * 로그인 사용자가 현재 접속중인 설정값들을 저장하는 스토어입니다\n * ex)\n * selected project id,\n * selected project object ( db에서 가져온 값)\n * accessable project list\n */\n\nimport Vue from 'vue';\nimport axios from \"axios\";\nimport { API } from \"aws-amplify\";\n\nexport default {\n\n // 모듈이 독립적이거나 재사용되기를 원한다면 namespaced를 true로\n //namespaced: true,\n\n state : {\n isUserDashboard: false,\n isGuestKYB: false, // adminRole에 관리자 권한은 없지만 projects에 KYB 프로젝트가 존재\n isGuestKYC: false, // adminRole에 관리자 권한은 없지만 projects에 KYC 프로젝트가 존재\n selectedProjectId : \"\", //선택된 프로젝트 id\n selectedProjectObject : {}, //선택된 프로젝트 정보, (kyc, kyb key 형식이 같은 공통으로 사용하는 object)\n selectedProjectDetail : {}, //선택된 프로젝트 디테일정보 (kyb, kyc 형식이 다르지만 더 많은 정보를 가지고있습니다)\n\n // 사용자가 접근가능한 프로젝트 정보 (admin 테이블에서 가져오므로 디테일정보는 포함하지 않습니다)\n projectSimpleInfoList : [],\n\n },\n\n // state를 변경할수 있는 유일한 요소, action에서 호출\n mutations: {\n\n setSelectedProjectDetail( state, projectObject ) {\n if( Vue.prototype.$isEmptyObject( projectObject ) ) {\n state.selectedProjectDetail = {};\n return;\n }\n state.selectedProjectDetail = projectObject;\n },\n\n setSelectedProject ( state, projectObject ) {\n if( Vue.prototype.$isEmptyObject( projectObject )\n || !projectObject.id ) {\n state.selectedProjectObject = {};\n state.selectedProjectId = \"\";\n return;\n }\n\n state.selectedProjectObject = projectObject;\n state.selectedProjectId = projectObject.id;\n\n console.log( \"selected project 설정완료 ::: \", state )\n },\n\n setProjectSimpleInfoList( state, projectList ) {\n if( !projectList || projectList.length === 0 ) {\n return;\n }\n state.projectSimpleInfoList = projectList;\n },\n\n setSelectedProjectObject ( state, payload ) {\n state.projectIdList = payload;\n },\n\n /**\n * 관리자일 경우 set admin properties\n * @param state\n * @param payload : adminRole list\n */\n setAdminProperties(state, payload){\n\n if( !payload || payload.length == 0 ) {\n state.isUserDashboard = false;\n return;\n }\n console.log(\"payload in setAdminProperties\", payload);\n state.isUserDashboard = payload.indexOf('Dashboard') > -1;\n },\n\n /**\n * guest지만 관리하는 프로젝트가 있는경우\n * @param state\n * @param payload : project list\n */\n setGuestProperties(state, payload){\n\n if( !payload || payload.length == 0 ) {\n state.isGuestKYB = false, state.isGuestKYC = false;\n return;\n }\n\n let kybProjects = payload.filter( project => project.type == \"KYB\" );\n let kycProjects = payload.filter( project => project.type == \"KYC\" );\n\n state.isGuestKYB = ( kybProjects.length > 0 ) ;\n state.isGuestKYC = ( kycProjects.length > 0 ) ;\n }\n\n },\n\n actions: {\n\n /**\n * 나의 ip를 가져오는 api 호출\n */\n async callIpApi(context, payload) {\n let result = await API.get( 'apiArgosDashboard',`/getIp?alias=${payload.env}` ,{});\n if( result?.statusCode !== 200 ) {\n return \"\";\n }\n return result?.ip;\n },\n\n /**\n * 선택된 project 정보를 받아와 state에 저장\n * kyc, kyb 의 데이터 형식이 다르므로 아래와 같이 키값을 통일\n * example ) { id : \"111\", name : \"argos test\", type : \"KYC\" }\n * @param context\n * @param payload\n */\n setSelectedProject( context, payload ) {\n context.commit( \"setSelectedProject\", payload );\n },\n\n /**\n * 가져온 그대로의 프로젝트 정보룰 저장합니다 ( kyc, kyb type별로 key 형식이 다릅니다)\n * @param context\n * @param payload\n */\n setSelectedProjectDetail( context, payload ) {\n context.commit( \"setSelectedProjectDetail\", payload );\n },\n\n\n setProjectSimpleInfoList( context, pList ) {\n context.commit( \"setProjectSimpleInfoList\", pList );\n },\n\n setAdminProperties(context, list){\n context.commit('setAdminProperties', list);\n },\n\n setGuestProperties(context, list){\n context.commit('setGuestProperties', list);\n },\n\n\n\n },\n\n\n getters: {\n\n getProjectSimpleInfoList( state ) {\n return state.projectSimpleInfoList;\n },\n\n getSelectedProjectId ( state ) {\n return state.selectedProjectId;\n },\n\n getSelectedProjectObject ( state ) {\n return state.selectedProjectObject;\n },\n\n getSelectedProjectDetail ( state ) {\n return state.selectedProjectDetail;\n },\n\n getUserRole( state ) {\n return {\n isGuestKYB : state.isGuestKYB,\n isGuestKYC : state.isGuestKYC,\n isUserDashboard : state.isUserDashboard,\n }\n },\n\n\n },\n\n}\n","import TIME_ZONE_LIST from \"@/core/config/time.zone.json\";\nimport {API} from 'aws-amplify';\n\nconst sliceLang = navigator.language.slice(0,2);\nconst getStoredTimezone = () => {\n const storedTz = sessionStorage.getItem('tz');\n return storedTz ? JSON.parse(storedTz) : null;\n};\n\nexport default {\n state: {\n selectedLang: getStoredTimezone() ||\n TIME_ZONE_LIST.find((time) => time.timezone === Intl.DateTimeFormat().resolvedOptions().timeZone) ||\n TIME_ZONE_LIST.find((time) => time.value === navigator.language) ||\n TIME_ZONE_LIST.find((time) => time.value.includes(sliceLang)),\n },\n getters: {\n getSelectedLang: state => {\n return state.selectedLang;\n },\n },\n actions: {\n setSelectedLanguage({ commit }, selectedLang) {\n commit('setSelectedLanguage', selectedLang);\n sessionStorage.setItem('tz', JSON.stringify(selectedLang));\n },\n async getTimeZone(context, payload) {\n const params = {\n queryStringParameters: {\n alias: context.getters.getEnv,\n email: context.getters.currentLoginUser.email,\n type: 'get'\n }\n }\n return await API.get('apiArgosDashboard', '/timezone', params);\n },\n async setTimeZone(context, payload) {\n const params = {\n body: {\n alias: context.getters.getEnv,\n email: context.getters.currentLoginUser.email,\n type: 'update',\n timezone: payload.timezone,\n ...(payload.issuingCountry && ({ issuingCountry: payload.issuingCountry })),\n ...(payload.phoneNumber && ({ phoneNumber: payload.phoneNumber })),\n }\n }\n\n const response = await API.post('apiArgosDashboard', '/timezone', params);\n if (response.success) {\n const updatedLang = TIME_ZONE_LIST.find(time => time.timezone === payload.timezone) || context.state.selectedLang;\n context.dispatch('setSelectedLanguage', updatedLang);\n sessionStorage.setItem('tz', JSON.stringify(updatedLang));\n }\n return response;\n }\n },\n mutations: {\n setSelectedLanguage(state, selectedLang) {\n state.selectedLang = selectedLang;\n }\n }\n};","const storeOption = {\n namespaced: true,\n state: {\n accessKeyId: \"AKIA37O6XGDZJAF5KGMC\",\n secretAccessKey: \"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\",\n projectValue: {},\n\n\n\n\n STATUS_TEXT: {\n \"complete\": \"Complete\",\n \"open\": \"Open\"\n }\n },\n getters: {\n ACCESS_KEY_ID: (state) => {return state.accessKeyId},\n SECRET_ACCESS_KEY: (state) => {return state.secretAccessKey},\n PROJECT_VALUE: (state) => {return state.projectValue}\n // getAccessKeyId(){return this.state.accessKeyId},\n // getSecretAccessKey(){return this.state.secretAccessKey}\n },\n mutations: {\n MUT_PROJECT_VALUE: (state, payload) => {\n state.projectValue = payload;\n },\n },\n actions: {\n ACT_PROJECT_VALUE: function({commit}, payload){\n commit(\"MUT_PROJECT_VALUE\", payload);\n }\n }\n}\n\nexport default storeOption;\n","import Vue from \"vue\";\nimport Vuex from \"vuex\";\n\n\n//import auth from \"./auth.module\";\nimport htmlClass from \"./htmlclass.module\";\nimport config from \"./config.module\";\nimport breadcrumbs from \"./breadcrumbs.module\";\nimport profile from \"./profile.module\";\nimport submission from \"./submission.module\";\nimport projectModule from \"./project.module\";\nimport historyModule from \"./history.module\";\nimport vuetifyModule from \"./vuetify.module\";\nimport countryModule from './country.module';\nimport sessionKey from './session-key.module';\nimport envModule from './env.module';\nimport kybModule from './kyb.module';\nimport kycModule from './kyc.module';\nimport roleModule from './role.module';\nimport formattedTimeModule from './formattedtime.module'\nimport CreatePersistedState from 'vuex-persistedstate';\n\nimport storeOption from \"./store\";\n\nVue.use(Vuex);\n\nconst store = new Vuex.Store({\n\n plugins : [\n CreatePersistedState( {\n storage : window.sessionStorage, //저장소는 session storage (브라우저가 닫히면 소멸)\n paths : [\"breadcrumbs\", \"roleModule\", \"profile\"]\n } )\n ],\n state : {\n\n // user email info\n\n email: null,\n\n // kyb status 기본옵션 (submission, profile 등)\n KYB_STATUS_OPTIONS : [\n { value: \"open\", text: 'Open' },\n { value: \"complete\", text: 'Complete' },\n ],\n\n // kyb status 기본옵션 (submission, profile 등)\n KYB_PROJECT_STATUS_OPTIONS : [\n { value: \"open\", text: 'Open' },\n { value: \"complete\", text: 'Complete' },\n { value: \"closed\", text: 'Closed' },\n ],\n\n\n KYB_PROJECT_STATUS_TEXT : {\n complete : \"Complete\",// 기존의 approved\n open : \"Open\", // 기존의 pending\n closed : \"Closed\", // 기존의 rejected\n },\n\n // kyb project status는 closed 타입 존재\n KYB_PROJECT_STATUS_KEYS : {\n complete : \"complete\",// 기존의 approved\n open : \"open\", // 기존의 pending\n closed : \"closed\", // 기존의 rejected\n },\n\n KYB_STATUS_COLOR : {\n complete : \"green\",// 기존의 approved\n open : \"red\", // 기존의 pending\n closed : \"orange\", // 기존의 rejected\n },\n\n\n ID_TYPE : {\n \"passport\" : \"Passport\",\n \"government_id\" : \"Government ID\",\n \"drivers_license\" : \"Drivers License\",\n \"residence_permit\" : \"Residence Permit\",\n \"vehicle_registration_certificate\" : \"Vehicle Registration Certificate\",\n \"visa\" : \"VISA\",\n \"aadhaar\" : \"AADHAAR\",\n \"pancard\" : \"PANCARD\",\n }\n },\n mutations: {\n setEmail(state, email) {\n state.email = email;\n },\n },\n actions: {\n setEmail({ commit }, email) {\n commit(\"setEmail\", email);\n },\n },\n modules: {\n //auth,\n htmlClass,\n config,\n breadcrumbs,\n profile,\n submission,\n projectModule,\n historyModule,\n vuetifyModule,\n countryModule,\n sessionKey,\n envModule,\n kybModule,\n kycModule,\n roleModule,\n storeOption,\n formattedTimeModule,\n }\n});\n\nexport default store;\n","\"use strict\";\n\nimport KTUtil from \"./util\";\n\n// Component Definition\nvar KTMenu = function(elementId, options) {\n // Main object\n var the = this;\n var init = false;\n\n // Get element object\n var element = KTUtil.getById(elementId);\n var body = KTUtil.getBody();\n\n if (!element) {\n return;\n }\n\n // Default options\n var defaultOptions = {\n // scrollable area with Perfect Scroll\n scroll: {\n rememberPosition: false\n },\n\n // accordion submenu mode\n accordion: {\n slideSpeed: 200, // accordion toggle slide speed in milliseconds\n autoScroll: false, // enable auto scrolling(focus) to the clicked menu item\n autoScrollSpeed: 1200,\n expandAll: true // allow having multiple expanded accordions in the menu\n },\n\n // dropdown submenu mode\n dropdown: {\n timeout: 500 // timeout in milliseconds to show and hide the hoverable submenu dropdown\n }\n };\n\n ////////////////////////////\n // ** Private Methods ** //\n ////////////////////////////\n\n var Plugin = {\n /**\n * Run plugin\n * @returns {KTMenu}\n */\n construct: function(options) {\n if (KTUtil.data(element).has('menu')) {\n the = KTUtil.data(element).get('menu');\n } else {\n // reset menu\n Plugin.init(options);\n\n // reset menu\n Plugin.reset();\n\n // build menu\n Plugin.build();\n\n KTUtil.data(element).set('menu', the);\n }\n\n return the;\n },\n\n /**\n * Handles submenu click toggle\n * @returns {KTMenu}\n */\n init: function(options) {\n the.events = [];\n\n the.eventHandlers = {};\n\n // merge default and user defined options\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\n\n // pause menu\n the.pauseDropdownHoverTime = 0;\n\n the.uid = KTUtil.getUniqueID();\n },\n\n update: function(options) {\n // merge default and user defined options\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\n\n // pause menu\n the.pauseDropdownHoverTime = 0;\n\n // reset menu\n Plugin.reset();\n\n the.eventHandlers = {};\n\n // build menu\n Plugin.build();\n\n KTUtil.data(element).set('menu', the);\n },\n\n reload: function() {\n // reset menu\n Plugin.reset();\n\n // build menu\n Plugin.build();\n\n // reset submenu props\n Plugin.resetSubmenuProps();\n },\n\n /**\n * Reset menu\n * @returns {KTMenu}\n */\n build: function() {\n // General accordion submenu toggle\n the.eventHandlers['event_1'] = KTUtil.on( element, '.menu-toggle', 'click', Plugin.handleSubmenuAccordion);\n\n // Dropdown mode(hoverable)\n if (Plugin.getSubmenuMode() === 'dropdown' || Plugin.isConditionalSubmenuDropdown()) {\n // dropdown submenu - hover toggle\n the.eventHandlers['event_2'] = KTUtil.on( element, '[data-menu-toggle=\"hover\"]', 'mouseover', Plugin.handleSubmenuDrodownHoverEnter);\n the.eventHandlers['event_3'] = KTUtil.on( element, '[data-menu-toggle=\"hover\"]', 'mouseout', Plugin.handleSubmenuDrodownHoverExit);\n\n // dropdown submenu - click toggle\n the.eventHandlers['event_4'] = KTUtil.on( element, '[data-menu-toggle=\"click\"] > .menu-toggle, [data-menu-toggle=\"click\"] > .menu-link .menu-toggle', 'click', Plugin.handleSubmenuDropdownClick);\n the.eventHandlers['event_5'] = KTUtil.on( element, '[data-menu-toggle=\"tab\"] > .menu-toggle, [data-menu-toggle=\"tab\"] > .menu-link .menu-toggle', 'click', Plugin.handleSubmenuDropdownTabClick);\n }\n\n // Handle general link click\n the.eventHandlers['event_6'] = KTUtil.on(element, '.menu-item > .menu-link:not(.menu-toggle):not(.menu-link-toggle-skip)', 'click', Plugin.handleLinkClick);\n\n // Init scrollable menu\n if (the.options.scroll && the.options.scroll.height) {\n Plugin.scrollInit();\n }\n },\n\n /**\n * Reset menu\n * @returns {KTMenu}\n */\n reset: function() {\n KTUtil.off( element, 'click', the.eventHandlers['event_1']);\n\n // dropdown submenu - hover toggle\n KTUtil.off( element, 'mouseover', the.eventHandlers['event_2']);\n KTUtil.off( element, 'mouseout', the.eventHandlers['event_3']);\n\n // dropdown submenu - click toggle\n KTUtil.off( element, 'click', the.eventHandlers['event_4']);\n KTUtil.off( element, 'click', the.eventHandlers['event_5']);\n\n // handle link click\n KTUtil.off(element, 'click', the.eventHandlers['event_6']);\n },\n\n /**\n * Init scroll menu\n *\n */\n scrollInit: function() {\n if ( the.options.scroll && the.options.scroll.height ) {\n KTUtil.scrollDestroy(element, true);\n KTUtil.scrollInit(element, {mobileNativeScroll: true, windowScroll: false, resetHeightOnDestroy: true, handleWindowResize: true, height: the.options.scroll.height, rememberPosition: the.options.scroll.rememberPosition});\n } else {\n KTUtil.scrollDestroy(element, true);\n }\n },\n\n /**\n * Update scroll menu\n */\n scrollUpdate: function() {\n if ( the.options.scroll && the.options.scroll.height ) {\n KTUtil.scrollUpdate(element);\n }\n },\n\n /**\n * Scroll top\n */\n scrollTop: function() {\n if ( the.options.scroll && the.options.scroll.height ) {\n KTUtil.scrollTop(element);\n }\n },\n\n /**\n * Get submenu mode for current breakpoint and menu state\n * @returns {KTMenu}\n */\n getSubmenuMode: function(el) {\n if ( KTUtil.isBreakpointUp('lg') ) {\n if (el && KTUtil.hasAttr(el, 'data-menu-toggle') && KTUtil.attr(el, 'data-menu-toggle') == 'hover') {\n return 'dropdown';\n }\n\n if ( KTUtil.isset(the.options.submenu, 'desktop.state.body') ) {\n if ( KTUtil.hasClasses(body, the.options.submenu.desktop.state.body) ) {\n return the.options.submenu.desktop.state.mode;\n } else {\n return the.options.submenu.desktop.default;\n }\n } else if ( KTUtil.isset(the.options.submenu, 'desktop') ) {\n return the.options.submenu.desktop;\n }\n } else if ( KTUtil.isBreakpointUp('md') && KTUtil.isBreakpointDown('lg') && KTUtil.isset(the.options.submenu, 'tablet') ) {\n return the.options.submenu.tablet;\n } else if ( KTUtil.isBreakpointDown('md') && KTUtil.isset(the.options.submenu, 'mobile') ) {\n return the.options.submenu.mobile;\n } else {\n return false;\n }\n },\n\n /**\n * Get submenu mode for current breakpoint and menu state\n * @returns {KTMenu}\n */\n isConditionalSubmenuDropdown: function() {\n if ( KTUtil.isBreakpointUp('lg') && KTUtil.isset(the.options.submenu, 'desktop.state.body') ) {\n return true;\n } else {\n return false;\n }\n },\n\n\n /**\n * Reset submenu attributes\n * @returns {KTMenu}\n */\n resetSubmenuProps: function(e) {\n var submenus = KTUtil.findAll(element, '.menu-submenu');\n if ( submenus ) {\n for (var i = 0, len = submenus.length; i < len; i++) {\n var submenu = submenus[0];\n\n KTUtil.css(submenu, 'display', '');\n KTUtil.css(submenu, 'overflow', '');\n\n if (submenu.hasAttribute('data-hor-direction')) {\n KTUtil.removeClass(submenu, 'menu-submenu-left');\n KTUtil.removeClass(submenu, 'menu-submenu-right');\n KTUtil.addClass(submenu, submenu.getAttribute('data-hor-direction'));\n }\n }\n }\n },\n\n /**\n * Handles submenu hover toggle\n * @returns {KTMenu}\n */\n handleSubmenuDrodownHoverEnter: function(e) {\n if ( Plugin.getSubmenuMode(this) === 'accordion' ) {\n return;\n }\n\n if ( the.resumeDropdownHover() === false ) {\n return;\n }\n\n var item = this;\n\n if ( item.getAttribute('data-hover') == '1' ) {\n item.removeAttribute('data-hover');\n clearTimeout( item.getAttribute('data-timeout') );\n item.removeAttribute('data-timeout');\n }\n\n Plugin.showSubmenuDropdown(item);\n },\n\n /**\n * Handles submenu hover toggle\n * @returns {KTMenu}\n */\n handleSubmenuDrodownHoverExit: function(e) {\n if ( the.resumeDropdownHover() === false ) {\n return;\n }\n\n if ( Plugin.getSubmenuMode(this) === 'accordion' ) {\n return;\n }\n\n var item = this;\n var time = the.options.dropdown.timeout;\n\n var timeout = setTimeout(function() {\n if ( item.getAttribute('data-hover') == '1' ) {\n Plugin.hideSubmenuDropdown(item, true);\n }\n }, time);\n\n item.setAttribute('data-hover', '1');\n item.setAttribute('data-timeout', timeout);\n },\n\n /**\n * Handles submenu click toggle\n * @returns {KTMenu}\n */\n handleSubmenuDropdownClick: function(e) {\n if ( Plugin.getSubmenuMode(this) === 'accordion' ) {\n return;\n }\n\n var item = this.closest('.menu-item');\n\n // Trigger click event handlers\n var result = Plugin.eventTrigger('submenuToggle', this, e);\n if (result === false) {\n return;\n }\n\n if ( item.getAttribute('data-menu-submenu-mode') == 'accordion' ) {\n return;\n }\n\n if ( KTUtil.hasClass(item, 'menu-item-hover') === false ) {\n KTUtil.addClass(item, 'menu-item-open-dropdown');\n Plugin.showSubmenuDropdown(item);\n } else {\n KTUtil.removeClass(item, 'menu-item-open-dropdown' );\n Plugin.hideSubmenuDropdown(item, true);\n }\n\n e.preventDefault();\n },\n\n /**\n * Handles tab click toggle\n * @returns {KTMenu}\n */\n handleSubmenuDropdownTabClick: function(e) {\n if (Plugin.getSubmenuMode(this) === 'accordion') {\n return;\n }\n var item = this.closest('.menu-item');\n\n // Trigger click event handlers\n var result = Plugin.eventTrigger('submenuToggle', this, e);\n if (result === false) {\n return;\n }\n\n if (item.getAttribute('data-menu-submenu-mode') == 'accordion') {\n return;\n }\n\n if (KTUtil.hasClass(item, 'menu-item-hover') == false) {\n KTUtil.addClass(item, 'menu-item-open-dropdown');\n Plugin.showSubmenuDropdown(item);\n }\n\n e.preventDefault();\n },\n\n /**\n * Handles link click\n * @returns {KTMenu}\n */\n handleLinkClick: function(e) {\n var submenu = this.closest('.menu-item.menu-item-submenu');\n\n // Trigger click event handlers\n var result = Plugin.eventTrigger('linkClick', this, e);\n if (result === false) {\n return;\n }\n\n if ( submenu && Plugin.getSubmenuMode(submenu) === 'dropdown' ) {\n Plugin.hideSubmenuDropdowns();\n }\n },\n\n /**\n * Handles submenu dropdown close on link click\n * @returns {KTMenu}\n */\n handleSubmenuDropdownClose: function(e, el) {\n // exit if its not submenu dropdown mode\n if (Plugin.getSubmenuMode(el) === 'accordion') {\n return;\n }\n\n var shown = element.querySelectorAll('.menu-item.menu-item-submenu.menu-item-hover:not(.menu-item-tabs)');\n\n // check if currently clicked link's parent item ha\n if (shown.length > 0 && KTUtil.hasClass(el, 'menu-toggle') === false && el.querySelectorAll('.menu-toggle').length === 0) {\n // close opened dropdown menus\n for (var i = 0, len = shown.length; i < len; i++) {\n Plugin.hideSubmenuDropdown(shown[0], true);\n }\n }\n },\n\n /**\n * helper functions\n * @returns {KTMenu}\n */\n handleSubmenuAccordion: function(e, el) {\n var query;\n var item = el ? el : this;\n\n // Trigger click event handlers\n var result = Plugin.eventTrigger('submenuToggle', this, e);\n if (result === false) {\n return;\n }\n\n if ( Plugin.getSubmenuMode(el) === 'dropdown' && (query = item.closest('.menu-item') ) ) {\n if (query.getAttribute('data-menu-submenu-mode') != 'accordion' ) {\n e.preventDefault();\n return;\n }\n }\n\n var li = item.closest('.menu-item');\n var submenu = KTUtil.child(li, '.menu-submenu, .menu-inner');\n\n if (KTUtil.hasClass(item.closest('.menu-item'), 'menu-item-open-always')) {\n return;\n }\n\n if ( li && submenu ) {\n e.preventDefault();\n var speed = the.options.accordion.slideSpeed;\n var hasClosables = false;\n\n if ( KTUtil.hasClass(li, 'menu-item-open') === false ) {\n // hide other accordions\n if ( the.options.accordion.expandAll === false ) {\n var subnav = item.closest('.menu-nav, .menu-subnav');\n var closables = KTUtil.children(subnav, '.menu-item.menu-item-open.menu-item-submenu:not(.menu-item-here):not(.menu-item-open-always)');\n\n if ( subnav && closables ) {\n for (var i = 0, len = closables.length; i < len; i++) {\n var el_ = closables[0];\n var submenu_ = KTUtil.child(el_, '.menu-submenu');\n if ( submenu_ ) {\n KTUtil.slideUp(submenu_, speed, function() {\n Plugin.scrollUpdate();\n KTUtil.removeClass(el_, 'menu-item-open');\n });\n }\n }\n }\n }\n\n KTUtil.slideDown(submenu, speed, function() {\n Plugin.scrollToItem(item);\n Plugin.scrollUpdate();\n\n Plugin.eventTrigger('submenuToggle', submenu, e);\n });\n\n KTUtil.addClass(li, 'menu-item-open');\n\n } else {\n KTUtil.slideUp(submenu, speed, function() {\n Plugin.scrollToItem(item);\n Plugin.scrollUpdate();\n Plugin.eventTrigger('submenuToggle', submenu, e);\n });\n\n KTUtil.removeClass(li, 'menu-item-open');\n }\n }\n },\n\n /**\n * scroll to item function\n * @returns {KTMenu}\n */\n scrollToItem: function(item) {\n // handle auto scroll for accordion submenus\n if ( KTUtil.isBreakpointUp('lg') && the.options.accordion.autoScroll && element.getAttribute('data-menu-scroll') !== '1' ) {\n KTUtil.scrollTo(item, the.options.accordion.autoScrollSpeed);\n }\n },\n\n /**\n * Hide submenu dropdown\n * @returns {KTMenu}\n */\n hideSubmenuDropdown: function(item, classAlso) {\n // remove submenu activation class\n if ( classAlso ) {\n KTUtil.removeClass(item, 'menu-item-hover');\n KTUtil.removeClass(item, 'menu-item-active-tab');\n }\n\n // clear timeout\n item.removeAttribute('data-hover');\n\n if ( item.getAttribute('data-menu-toggle-class') ) {\n KTUtil.removeClass(body, item.getAttribute('data-menu-toggle-class'));\n }\n\n var timeout = item.getAttribute('data-timeout');\n item.removeAttribute('data-timeout');\n clearTimeout(timeout);\n },\n\n /**\n * Hide submenu dropdowns\n * @returns {KTMenu}\n */\n hideSubmenuDropdowns: function() {\n var items;\n if ( items = element.querySelectorAll('.menu-item-submenu.menu-item-hover:not(.menu-item-tabs):not([data-menu-toggle=\"tab\"])') ) {\n for (var j = 0, cnt = items.length; j < cnt; j++) {\n Plugin.hideSubmenuDropdown(items[j], true);\n }\n }\n },\n\n /**\n * helper functions\n * @returns {KTMenu}\n */\n showSubmenuDropdown: function(item) {\n // close active submenus\n var list = element.querySelectorAll('.menu-item-submenu.menu-item-hover, .menu-item-submenu.menu-item-active-tab');\n\n if ( list ) {\n for (var i = 0, len = list.length; i < len; i++) {\n var el = list[i];\n if ( item !== el && el.contains(item) === false && item.contains(el) === false ) {\n Plugin.hideSubmenuDropdown(el, true);\n }\n }\n }\n\n // add submenu activation class\n KTUtil.addClass(item, 'menu-item-hover');\n\n // Change the alignment of submenu is offscreen.\n var submenu = KTUtil.find(item, '.menu-submenu');\n\n if (submenu && submenu.hasAttribute('data-hor-direction') === false) {\n if (KTUtil.hasClass(submenu, 'menu-submenu-left')) {\n submenu.setAttribute('data-hor-direction', 'menu-submenu-left');\n } else if (KTUtil.hasClass(submenu, 'menu-submenu-right')) {\n submenu.setAttribute('data-hor-direction', 'menu-submenu-right');\n }\n }\n\n if ( submenu && KTUtil.isOffscreen(submenu, 'left', 15) === true ) {\n KTUtil.removeClass(submenu, 'menu-submenu-left');\n KTUtil.addClass(submenu, 'menu-submenu-right');\n } else if ( submenu && KTUtil.isOffscreen(submenu, 'right', 15) === true ) {\n KTUtil.removeClass(submenu, 'menu-submenu-right');\n KTUtil.addClass(submenu, 'menu-submenu-left');\n }\n\n if ( item.getAttribute('data-menu-toggle-class') ) {\n KTUtil.addClass(body, item.getAttribute('data-menu-toggle-class'));\n }\n },\n\n /**\n * Handles submenu slide toggle\n * @returns {KTMenu}\n */\n createSubmenuDropdownClickDropoff: function(el) {\n var query;\n var zIndex = (query = KTUtil.child(el, '.menu-submenu') ? KTUtil.css(query, 'z-index') : 0) - 1;\n\n var dropoff = document.createElement('');\n\n body.appendChild(dropoff);\n\n KTUtil.addEvent(dropoff, 'click', function(e) {\n e.stopPropagation();\n e.preventDefault();\n KTUtil.remove(this);\n Plugin.hideSubmenuDropdown(el, true);\n });\n },\n\n /**\n * Handles submenu hover toggle\n * @returns {KTMenu}\n */\n pauseDropdownHover: function(time) {\n var date = new Date();\n\n the.pauseDropdownHoverTime = date.getTime() + time;\n },\n\n /**\n * Handles submenu hover toggle\n * @returns {KTMenu}\n */\n resumeDropdownHover: function() {\n var date = new Date();\n\n return (date.getTime() > the.pauseDropdownHoverTime ? true : false);\n },\n\n /**\n * Reset menu's current active item\n * @returns {KTMenu}\n */\n resetActiveItem: function(item) {\n var list;\n var parents;\n\n list = element.querySelectorAll('.menu-item-active');\n\n for (var i = 0, len = list.length; i < len; i++) {\n var el = list[0];\n KTUtil.removeClass(el, 'menu-item-active');\n KTUtil.hide( KTUtil.child(el, '.menu-submenu') );\n parents = KTUtil.parents(el, '.menu-item-submenu') || [];\n\n for (var i_ = 0, len_ = parents.length; i_ < len_; i_++) {\n var el_ = parents[i];\n KTUtil.removeClass(el_, 'menu-item-open');\n KTUtil.hide( KTUtil.child(el_, '.menu-submenu') );\n }\n }\n\n // close open submenus\n if ( the.options.accordion.expandAll === false ) {\n if ( list = element.querySelectorAll('.menu-item-open') ) {\n for (var i = 0, len = list.length; i < len; i++) {\n KTUtil.removeClass(parents[0], 'menu-item-open');\n }\n }\n }\n },\n\n /**\n * Sets menu's active item\n * @returns {KTMenu}\n */\n setActiveItem: function(item) {\n // reset current active item\n Plugin.resetActiveItem();\n\n var parents = KTUtil.parents(item, '.menu-item-submenu') || [];\n for (var i = 0, len = parents.length; i < len; i++) {\n KTUtil.addClass(parents[i], 'menu-item-open');\n }\n\n KTUtil.addClass(item, 'menu-item-active');\n },\n\n /**\n * Returns page breadcrumbs for the menu's active item\n * @returns {KTMenu}\n */\n getBreadcrumbs: function(item) {\n var query;\n var breadcrumbs = [];\n var link = KTUtil.child(item, '.menu-link');\n\n breadcrumbs.push({\n text: (query = KTUtil.child(link, '.menu-text') ? query.innerHTML : ''),\n title: link.getAttribute('title'),\n href: link.getAttribute('href')\n });\n\n var parents = KTUtil.parents(item, '.menu-item-submenu');\n for (var i = 0, len = parents.length; i < len; i++) {\n var submenuLink = KTUtil.child(parents[i], '.menu-link');\n\n breadcrumbs.push({\n text: (query = KTUtil.child(submenuLink, '.menu-text') ? query.innerHTML : ''),\n title: submenuLink.getAttribute('title'),\n href: submenuLink.getAttribute('href')\n });\n }\n\n return breadcrumbs.reverse();\n },\n\n /**\n * Returns page title for the menu's active item\n * @returns {KTMenu}\n */\n getPageTitle: function(item) {\n var query;\n\n return (query = KTUtil.child(item, '.menu-text') ? query.innerHTML : '');\n },\n\n /**\n * Trigger events\n */\n eventTrigger: function(name, target, e) {\n for (var i = 0; i < the.events.length; i++ ) {\n var event = the.events[i];\n if ( event.name == name ) {\n if ( event.one == true ) {\n if ( event.fired == false ) {\n the.events[i].fired = true;\n return event.handler.call(this, target, e);\n }\n } else {\n return event.handler.call(this, target, e);\n }\n }\n }\n },\n\n addEvent: function(name, handler, one) {\n the.events.push({\n name: name,\n handler: handler,\n one: one,\n fired: false\n });\n },\n\n removeEvent: function(name) {\n if (the.events[name]) {\n delete the.events[name];\n }\n }\n };\n\n //////////////////////////\n // ** Public Methods ** //\n //////////////////////////\n\n /**\n * Set default options\n */\n\n the.setDefaults = function(options) {\n defaultOptions = options;\n };\n\n /**\n * Update scroll\n */\n the.scrollUpdate = function() {\n return Plugin.scrollUpdate();\n };\n\n /**\n * Re-init scroll\n */\n the.scrollReInit = function() {\n return Plugin.scrollInit();\n };\n\n /**\n * Scroll top\n */\n the.scrollTop = function() {\n return Plugin.scrollTop();\n };\n\n /**\n * Set active menu item\n */\n the.setActiveItem = function(item) {\n return Plugin.setActiveItem(item);\n };\n\n the.reload = function() {\n return Plugin.reload();\n };\n\n the.update = function(options) {\n return Plugin.update(options);\n };\n\n /**\n * Set breadcrumb for menu item\n */\n the.getBreadcrumbs = function(item) {\n return Plugin.getBreadcrumbs(item);\n };\n\n /**\n * Set page title for menu item\n */\n the.getPageTitle = function(item) {\n return Plugin.getPageTitle(item);\n };\n\n /**\n * Get submenu mode\n */\n the.getSubmenuMode = function(el) {\n return Plugin.getSubmenuMode(el);\n };\n\n /**\n * Hide dropdown\n * @returns {Object}\n */\n the.hideDropdown = function(item) {\n Plugin.hideSubmenuDropdown(item, true);\n };\n\n /**\n * Hide dropdowns\n * @returns {Object}\n */\n the.hideDropdowns = function() {\n Plugin.hideSubmenuDropdowns();\n };\n\n /**\n * Disable menu for given time\n * @returns {Object}\n */\n the.pauseDropdownHover = function(time) {\n Plugin.pauseDropdownHover(time);\n };\n\n /**\n * Disable menu for given time\n * @returns {Object}\n */\n the.resumeDropdownHover = function() {\n return Plugin.resumeDropdownHover();\n };\n\n /**\n * Register event\n */\n the.on = function(name, handler) {\n return Plugin.addEvent(name, handler);\n };\n\n the.off = function(name) {\n return Plugin.removeEvent(name);\n };\n\n the.one = function(name, handler) {\n return Plugin.addEvent(name, handler, true);\n };\n\n ///////////////////////////////\n // ** Plugin Construction ** //\n ///////////////////////////////\n\n // Run plugin\n Plugin.construct.apply(the, [options]);\n\n // Handle plugin on window resize\n KTUtil.addResizeHandler(function() {\n if (init) {\n the.reload();\n }\n });\n\n // Init done\n init = true;\n\n // Return plugin instance\n return the;\n};\n\n// webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = KTMenu;\n}\n\n// Plugin global lazy initialization\ndocument.addEventListener(\"click\", function (e) {\n var body = KTUtil.getByTagName('body')[0];\n var query;\n if ( query = body.querySelectorAll('.menu-nav .menu-item.menu-item-submenu.menu-item-hover:not(.menu-item-tabs)[data-menu-toggle=\"click\"]') ) {\n for (var i = 0, len = query.length; i < len; i++) {\n var element = query[i].closest('.menu-nav').parentNode;\n\n if ( element ) {\n var the = KTUtil.data(element).get('menu');\n\n if ( !the ) {\n break;\n }\n\n if ( !the || the.getSubmenuMode() !== 'dropdown' ) {\n break;\n }\n\n if ( e.target !== element && element.contains(e.target) === false ) {\n the.hideDropdowns();\n }\n }\n }\n }\n});\n\nexport default KTMenu;","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&id=235e7fb0&prod&lang=scss\"","// action types\nexport const ADD_BODY_CLASSNAME = \"addBodyClassName\";\nexport const REMOVE_BODY_CLASSNAME = \"removeBodyClassName\";\nexport const ADD_CLASSNAME = \"addClassName\";\n// mutation types\nexport const SET_CLASSNAME_BY_POSITION = \"setClassNameByPosition\";\n\nexport default {\n state: {\n classes: {}\n },\n getters: {\n getClasses: state => position => {\n if (typeof position !== \"undefined\") {\n return state.classes[position];\n }\n return state.classes;\n }\n },\n actions: {\n [ADD_BODY_CLASSNAME](context, className) {\n document.body.classList.add(className);\n },\n [REMOVE_BODY_CLASSNAME](context, className) {\n document.body.classList.remove(className);\n },\n [ADD_CLASSNAME](context, payload) {\n context.commit(SET_CLASSNAME_BY_POSITION, payload);\n }\n },\n mutations: {\n [SET_CLASSNAME_BY_POSITION](state, payload) {\n const { position, className } = payload;\n if (!state.classes[position]) {\n state.classes[position] = [];\n }\n state.classes[position].push(className);\n }\n }\n};\n","import { API, Storage } from \"aws-amplify\";\nimport AWS from 'aws-sdk';\nimport vue from 'vue';\n\nAWS.config.update({\n accessKeyId: 'AKIA37O6XGDZALU2SV6S',\n secretAccessKey:'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'\n});\n\n\nexport default {\n\n // 모듈이 독립적이거나 재사용되기를 원한다면 namespaced를 true로\n //namespaced: true,\n\n state : {\n },\n\n // state를 변경할수 있는 유일한 요소, action에서 호출\n mutations: {\n },\n\n actions: {\n\n /**\n * submission 관련 이미지를 base64로 받아옵니다\n *\n * @param context\n * @param payload : {type : \"\", submissionId : \"\"}\n * type 은 selfieImage 또는 idImage 입니다\n * @returns {Promise}\n */\n async getSubmissionImageBase64( context, payload ) {\n\n console.log( \"호출 !!!\" )\n if( !payload || !payload.submissionId || !payload.type ) {\n console.log( \"getSubmissionImageBase64 error : payload is empty\" );\n return null;\n }\n let param = {\n queryStringParameters : {\n submission_id : payload.submissionId,\n alias : context.getters.getEnv,\n type : payload.type\n }\n };\n\n console.log( \"param ::: \", param )\n\n let result = null;\n try {\n result = await API.get( \"apiArgosDashboard\", \"/convertUrlToBase64\", param );\n }\n catch(e) {\n console.log( \"error:\", e );\n }\n return result;\n },\n\n //@TODO request param 필수파라미터 작업 !!\n // 검수완료 시 api 호출\n async kycSubmissionReview(context, payload){\n console.log(\"payload in kycSubmissionReview\", payload);\n if( vue.prototype.$isEmptyObject( payload ) ) return console.log( \"kycSubmissionReview param is not exist ::: \", payload );\n let params = {\n body: {\n alias: context.getters.getEnv,\n datas: JSON.stringify(payload)\n } };\n return await API.post('apiArgosDashboard', '/imageUpload', params);\n },\n\n async uploadFileFromBase64(context, payload){\n try{\n let base64Str = payload.base64Str.replace(/^data:image\\/\\w+;base64,/,\"\");\n let buffer = new Buffer.from(base64Str, 'base64');\n let options = {\n contentType: 'image/'+payload.imageUrl.split('.').pop(),\n metadata: null\n };\n\n\n const env = context.getters.getEnv;\n\n\n const myBucket = new AWS.S3({\n params: {\n Bucket: env === 'dev' ? 'liveformimages135940-qqa': 'argos-kyc-images'\n },\n region: env === 'dev' ? 'ap-northeast-2': 'us-east-1',\n });\n\n let imageURL = 'https://argos-kyc-images.s3.amazonaws.com/'\n if (env === 'dev') {\n imageURL = 'https://liveformimages135940-qqa.s3.ap-northeast-2.amazonaws.com/'\n }\n\n let urlPath = payload.imageUrl.split('/');\n const {v4: uuidv4} = require('uuid');\n let uploadPath = urlPath[urlPath.length - 2] + '/' + uuidv4() + urlPath[urlPath.length - 1];\n await myBucket.putObject({\n Key: uploadPath,\n Body: buffer,\n ContentEncoding: 'base64',\n ContentType: 'image/jpeg'\n }).promise();\n return imageURL + uploadPath\n }catch(e){\n console.log(`Catch The error `, e)\n return false;\n }\n },\n\n\n /**\n * kyc submissions download\n * @param context\n * @param payload\n * @returns {Promise} // response type : base64\n */\n async downloadSubmissionList( context, payload ) {\n\n if( !payload || !payload.projectId ) {\n console.log( \"downloadSubmissionList error, payload ::\", payload );\n return;\n }\n\n let param = {\n queryStringParameters: {\n ...payload, isCsv: true, alias: context.getters.getEnv\n }\n };\n\n\n let result ;\n try{\n result = await API.get('apiArgosDashboard', '/kycSubmissionListCsv', param );\n }\n catch( e ) {\n console.log( \"downloadSubmissionList error:: \", e?.message );\n }\n\n return result;\n\n },\n\n async getKycProject(context, payload){\n\n let param = {\n alias: context.getters.getEnv,\n projectId: payload.projectId\n }\n let result;\n try {\n result = await API.get('apiArgosDashboard', '/kycProject', {queryStringParameters: param})\n //console.log( \"getKycProject res ::\", JSON.stringify( result ) );\n }\n catch( e ) {\n console.log( \"getKycProject error ::\", e?.message );\n }\n return result;\n },\n\n async getKycProjectList(context, payload){\n\n let param = {\n alias: context.getters.getEnv,\n projectIdList: payload.projectIdList\n }\n let result;\n try {\n result = await API.get('apiArgosDashboard', '/kycProject', {queryStringParameters: param});\n //console.log( \"getKycProjectList res ::\", JSON.stringify( result ) );\n }\n catch( e ) {\n console.log( \"getKycProjectList error ::\", e?.message );\n }\n return result;\n },\n\n /**\n * 프로젝트 전체 리스트를 가져옵니다\n * @param context\n * @param payload\n * @returns {Promise}\n */\n async getKycProjectAllList(context, payload){\n\n let param = {\n alias: context.getters.getEnv,\n isDashboard : true\n }\n\n let result;\n try {\n result = await API.get('apiArgosDashboard', '/kycProject', {queryStringParameters: param});\n //console.log( \"getKycProjectAllList res ::\", JSON.stringify( result ) );\n }\n catch( e ) {\n console.log( \"getKycProjectAllList error ::\", e?.message );\n }\n return result || [];\n },\n\n\n\n\n async getKycSubmissionList(context, payload){\n let param = payload;\n\n param.alias = context.getters.getEnv\n let result;\n try{\n result = await API.get('apiArgosDashboard', '/kycSubmissionListCsv', {queryStringParameters: param})\n }\n catch( e ) {\n console.log( \"getKycSubmissionList error ::\", e?.message );\n }\n return result;\n },\n\n\n async getKycAmlList(context, payload){\n let param = payload; // key list : alias, projectId, searchText, searchStatus\n param.alias = context.getters.getEnv\n // let projectList = [];\n // return await API.get('apiKybConsole', '/kycSubmissionList', {queryStringParameters: {alias: payload.alias, projectId: payload.projectId, days: payload.days}});\n let result;\n try{\n result = await API.get('apiArgosDashboard', '/amlList', {queryStringParameters: param})\n //console.log( \"getKycSubmissionList res :::\", JSON.stringify(result) );\n }\n catch( e ) {\n console.log( \"getKycSubmissionList error ::\", e?.message );\n }\n return result;\n },\n async getKycSubmissionDetail(context, payload){\n if( !payload.submissionId ) {\n console.log( \"getKycSubmissionDetail request param error - email, submissionId ::: \", payload.email, payload.submissionId );\n return {};\n }\n let param = {\n alias: context.getters.getEnv,\n submissionId: payload.submissionId\n };\n //console.log( \"getKycSubmissionDetail param ::: \", param );\n let result;\n try{\n result = await API.get('apiArgosDashboard', '/kycSubmissionDetail', {queryStringParameters: param})\n //console.log( \"getKycSubmissionDetail result ::\", JSON.stringify( result ) );\n }\n catch( e ) {\n console.log( \"getKycSubmissionDetail error :: \", e?.message );\n }\n return result;\n },\n\n async kycSummary(context, payload){\n if( !payload.projectId ) {\n console.log( \"getKycSummary request param error - projectId ::: \", payload.projectId );\n return {};\n }\n let param = {\n alias: context.getters.getEnv,\n projectId: payload.projectId,\n searchType: payload.searchType\n };\n\n if(payload.invocationType) param.invocationType = payload.invocationType;\n\n console.log( \"kycSummary param ::: \", param );\n let result;\n try{\n result = await API.get('apiArgosDashboard', '/kycSummary', {queryStringParameters: param});\n //console.log( \"kycSummary res :: \", JSON.stringify( result ) );\n }\n catch( e ) {\n console.log( \"kycSummary error :: \", e?.message );\n }\n return result;\n },\n\n async amlReportDownloadV3(context, payload){\n if( !payload.QR_code ) {\n console.log( \"amlReportDownload request param error - QR_code ::: \", payload.QR_code );\n return {};\n }\n let param = {\n alias: context.getters.getEnv,\n resourceId: payload.QR_code\n };\n console.log( \"amlReportDownload param ::: \", param );\n\n let returnValue;\n try {\n returnValue = await API.get('apiArgosDashboard', '/kycAmlReport03', {queryStringParameters: param});\n //console.log( \"amlReportDownloadV3 res :: \", returnValue );\n }\n catch( e ) {\n console.log( \"amlReportDownloadV3 error ::\", e?.message );\n }\n return returnValue;\n },\n\n async amlReportDownload(context, payload){\n if( !payload.QR_code ) {\n console.log( \"amlReportDownload request param error - QR_code ::: \", payload.QR_code );\n return {};\n }\n let param = {\n alias: context.getters.getEnv,\n QR_code: payload.QR_code\n };\n console.log( \"amlReportDownload param ::: \", param );\n let returnValue;\n try {\n returnValue = await API.get('apiArgosDashboard', '/kycAmlReport', {queryStringParameters: param});\n //console.log( \"amlReportDownload res ::: \", returnValue );\n }\n catch( e ) {\n console.log( \"amlReportDownload error :: \", e?.message );\n }\n return returnValue;\n },\n async getKycEventLog(context, payload){\n\n let params = {\n alias: context.getters.getEnv,\n searchType: 'KYC'\n };\n if( !payload || !payload.projectId ) {\n console.log( \"getKycEventLog request param error - projectId ::: \", payload.projectId );\n return {};\n }\n\n let keys = Object.keys( payload );\n keys.forEach( function( key ){\n params[ key ] = payload[key];\n } );\n\n console.log( \"getKycEventLog param ::: \", params );\n let result;\n try {\n result = await API.get('apiArgosDashboard', '/kycEvent', {queryStringParameters: params} );\n //console.log( \"getKycEventLog res ::: \", JSON.stringify( result ) );\n }\n catch( e ) {\n console.log( \"getKycEventLog error :::\", result );\n }\n return result;\n },\n\n async uploadLogoImage(context, payload){\n\n const {v4: uuidv4} = require('uuid');\n let fileData = payload.fileData;\n let putConfig = {\n contentType: fileData.type,\n level: 'public'\n };\n\n let uploadPath = \"\";\n let env = context.getters.getEnv;\n uploadPath = env + '/' + payload.projectId + '/logo_' + uuidv4() + '.' + fileData.name.split('.').pop();\n\n\n let putResult\n try{\n putResult = await Storage.put(uploadPath, fileData, putConfig);\n }catch (err){\n console.log(\"uploadFileToS3Amplify err\", err);\n return err;\n }\n\n let imageUrl;\n if(putResult.key)\n imageUrl = `https://s3argosbucket113003-master.s3.amazonaws.com/public/${putResult.key}`;\n\n console.log(\"imageUrl\", imageUrl);\n\n let imageParams = {\n projectId: payload.projectId,\n imageUrl: imageUrl,\n type: fileData.type\n };\n\n let params = {\n body: {\n alias: context.getters.getEnv,\n data: JSON.stringify(imageParams)\n }\n };\n try{\n return await API.post('apiArgosDashboard', '/kycUploadLogo', params);\n }catch (e) {\n console.log(\"Error\", e);\n }\n },\n\n\n async updateGuestAdmins(context, payload){\n try{\n //@TODO dev 또는 qa live\n let params = {\n queryStringParameters: {\n alias: context.getters.getEnv, requestType: 'admins_update'\n },\n body : {admins_data: JSON.stringify(payload)}\n };\n console.log(\"Update params in kycGuestAdmins\", params);\n let updateResult = await API.post('apiArgosDashboard', '/admin', params);\n return updateResult;\n }catch(e){\n console.log(\"e\", e);\n }\n },\n\n\n },\n\n\n\n /**\n * 결과값을 계산해야하는 경우가 있을 때 사용\n */\n getters: {\n },\n\n}\n","\"use strict\";\n\nvar KTLayoutQuickUser = function() {\n // Private properties\n var _element;\n var _offcanvasObject;\n\n // Private functions\n var _init = function() {\n\n var header = KTUtil.find(_element, '.offcanvas-header');\n var content = KTUtil.find(_element, '.offcanvas-content');\n\n _offcanvasObject = new KTOffcanvas(_element, {\n overlay: true,\n baseClass: 'offcanvas',\n placement: 'right',\n closeBy: 'kt_quick_user_close',\n toggleBy: 'kt_quick_user_toggle'\n });\n\n KTUtil.scrollInit(content, {\n disableForMobile: true,\n resetHeightOnDestroy: true,\n handleWindowResize: true,\n // height: function() {\n // var height = parseInt(KTUtil.getViewPort().height);\n //\n // if (header) {\n // height = height - parseInt(KTUtil.actualHeight(header));\n // height = height - parseInt(KTUtil.css(header, 'marginTop'));\n // height = height - parseInt(KTUtil.css(header, 'marginBottom'));\n // }\n //\n // if (content) {\n // height = height - parseInt(KTUtil.css(content, 'marginTop'));\n // height = height - parseInt(KTUtil.css(content, 'marginBottom'));\n // }\n //\n // height = height - parseInt(KTUtil.css(_element, 'paddingTop'));\n // height = height - parseInt(KTUtil.css(_element, 'paddingBottom'));\n //\n // height = height - 200;\n // return height;\n // }\n });\n }\n\n // Public methods\n return {\n init: function(id) {\n _element = KTUtil.getById(id);\n\n if (!_element) {\n return;\n }\n\n // Initialize\n _init();\n },\n\n getElement: function() {\n return _element;\n }\n };\n}();\n\n\n\nexport default KTLayoutQuickUser;","\"use strict\";\n\nimport KTUtil from \"./util\";\n\n// Component Definition \nvar KTDialog = function(options) {\n // Main object\n var the = this;\n\n // Get element object\n var element;\n var body = KTUtil.getBody();\n\n // Default options\n var defaultOptions = {\n 'placement' : 'top center',\n 'type' : 'loader',\n 'width' : 100,\n 'state' : 'default',\n 'message' : 'Loading...'\n };\n\n ////////////////////////////\n // ** Private Methods ** //\n ////////////////////////////\n\n var Plugin = {\n /**\n * Construct\n */\n\n construct: function(options) {\n Plugin.init(options);\n\n return the;\n },\n\n /**\n * Handles subtoggle click toggle\n */\n init: function(options) {\n the.events = [];\n\n // merge default and user defined options\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\n\n the.state = false;\n },\n\n /**\n * Show dialog\n */\n show: function() {\n Plugin.eventTrigger('show');\n\n element = document.createElement(\"DIV\");\n KTUtil.setHTML(element, the.options.message);\n\n KTUtil.addClass(element, 'dialog dialog-shown');\n KTUtil.addClass(element, 'dialog-' + the.options.state);\n KTUtil.addClass(element, 'dialog-' + the.options.type);\n\n if (the.options.placement == 'top center') {\n KTUtil.addClass(element, 'dialog-top-center');\n }\n\n body.appendChild(element);\n\n the.state = 'shown';\n\n Plugin.eventTrigger('shown');\n\n return the;\n },\n\n /**\n * Hide dialog\n */\n hide: function() {\n if (element) {\n Plugin.eventTrigger('hide');\n\n element.remove();\n the.state = 'hidden';\n\n Plugin.eventTrigger('hidden');\n }\n\n return the;\n },\n\n /**\n * Trigger events\n */\n eventTrigger: function(name) {\n for (var i = 0; i < the.events.length; i++) {\n var event = the.events[i];\n\n if (event.name == name) {\n if (event.one == true) {\n if (event.fired == false) {\n the.events[i].fired = true;\n return event.handler.call(this, the);\n }\n } else {\n return event.handler.call(this, the);\n }\n }\n }\n },\n\n addEvent: function(name, handler, one) {\n the.events.push({\n name: name,\n handler: handler,\n one: one,\n fired: false\n });\n\n return the;\n }\n };\n\n //////////////////////////\n // ** Public Methods ** //\n //////////////////////////\n\n /**\n * Set default options\n */\n\n the.setDefaults = function(options) {\n defaultOptions = options;\n };\n\n /**\n * Check shown state\n */\n the.shown = function() {\n return the.state == 'shown';\n };\n\n /**\n * Check hidden state\n */\n the.hidden = function() {\n return the.state == 'hidden';\n };\n\n /**\n * Show dialog\n */\n the.show = function() {\n return Plugin.show();\n };\n\n /**\n * Hide dialog\n */\n the.hide = function() {\n return Plugin.hide();\n };\n\n /**\n * Attach event\n * @returns {KTToggle}\n */\n the.on = function(name, handler) {\n return Plugin.addEvent(name, handler);\n };\n\n /**\n * Attach event that will be fired once\n * @returns {KTToggle}\n */\n the.one = function(name, handler) {\n return Plugin.addEvent(name, handler, true);\n };\n\n // Construct plugin\n Plugin.construct.apply(the, [options]);\n\n return the;\n};\n\n// webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = KTDialog;\n}\n\nexport default KTDialog;","\"use strict\";\n\nimport KTUtil from \"./util\";\n\n// Component Definition\nvar KTWizard = function(elementId, options) {\n // Main object\n var the = this;\n var init = false;\n\n // Get element object\n var element = KTUtil.getById(elementId);\n var body = KTUtil.getBody();\n\n if (!element) {\n return;\n }\n\n // Default options\n var defaultOptions = {\n startStep: 1,\n clickableSteps: false // to make steps clickable this set value true and add data-wizard-clickable=\"true\" in HTML for class=\"wizard\" element\n };\n\n ////////////////////////////\n // ** Private Methods ** //\n ////////////////////////////\n\n var Plugin = {\n /**\n * Construct\n */\n\n construct: function(options) {\n if (KTUtil.data(element).has('wizard')) {\n the = KTUtil.data(element).get('wizard');\n } else {\n // reset menu\n Plugin.init(options);\n\n // build menu\n Plugin.build();\n\n KTUtil.data(element).set('wizard', the);\n }\n\n return the;\n },\n\n /**\n * Init wizard\n */\n init: function(options) {\n the.element = element;\n the.events = [];\n\n // merge default and user defined options\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\n\n // Elements\n the.steps = KTUtil.findAll(element, '[data-wizard-type=\"step\"]');\n\n the.btnNext = KTUtil.find(element, '[data-wizard-type=\"action-next\"]');\n the.btnPrev = KTUtil.find(element, '[data-wizard-type=\"action-prev\"]');\n the.btnSubmit = KTUtil.find(element, '[data-wizard-type=\"action-submit\"]');\n\n // Variables\n the.events = [];\n the.lastStep = 0;\n the.currentStep = 1;\n the.newStep = 0;\n the.stopped = false;\n the.totalSteps = the.steps.length;\n\n // Init current step\n if (the.options.startStep > 1) {\n Plugin.goTo(the.options.startStep);\n }\n\n // Init UI\n Plugin.updateUI();\n },\n\n /**\n * Build Form Wizard\n */\n build: function() {\n // Next button event handler\n KTUtil.addEvent(the.btnNext, 'click', function(e) {\n e.preventDefault();\n\n // Set new step number\n Plugin.setNewStep(Plugin.getNextStep());\n\n // Trigger change event\n if (Plugin.eventTrigger('change') !== false) {\n Plugin.goTo(Plugin.getNextStep());\n }\n });\n\n // Prev button event handler\n KTUtil.addEvent(the.btnPrev, 'click', function(e) {\n e.preventDefault();\n\n // Set new step number\n Plugin.setNewStep(Plugin.getPrevStep());\n\n // Trigger change event\n if (Plugin.eventTrigger('change') !== false) {\n Plugin.goTo(Plugin.getPrevStep());\n }\n });\n\n if (the.options.clickableSteps === true) {\n KTUtil.on(element, '[data-wizard-type=\"step\"]', 'click', function() {\n var index = KTUtil.index(this) + 1;\n\n if (index !== the.currentStep) {\n Plugin.setNewStep(index);\n\n // Trigger change event\n if (Plugin.eventTrigger('change') !== false) {\n Plugin.goTo(index);\n }\n }\n });\n }\n\n // Submit button event handler\n KTUtil.addEvent(the.btnSubmit, 'click', function(e) {\n e.preventDefault();\n\n Plugin.eventTrigger('submit');\n });\n },\n\n /**\n * Handles wizard click wizard\n */\n goTo: function(number) {\n // Skip if stopped\n if (the.stopped === true) {\n the.stopped = false;\n return;\n }\n\n // Skip if this step is already shown\n if (number === the.currentStep || number > the.totalSteps || number < 0) {\n return;\n }\n\n // Validate step number\n number = parseInt(number);\n\n // Set current step\n the.lastStep = the.currentStep;\n the.currentStep = number;\n the.newStep = 0;\n\n Plugin.updateUI();\n\n Plugin.eventTrigger('changed');\n\n return the;\n },\n\n /**\n * Stop wizard\n */\n stop: function() {\n the.stopped = true;\n },\n\n /**\n * Resume wizard\n */\n resume: function() {\n the.stopped = false;\n },\n\n /**\n * Check last step\n */\n isLastStep: function() {\n return the.currentStep === the.totalSteps;\n },\n\n /**\n * Check first step\n */\n isFirstStep: function() {\n return the.currentStep === 1;\n },\n\n /**\n * Check between step\n */\n isBetweenStep: function() {\n return Plugin.isLastStep() === false && Plugin.isFirstStep() === false;\n },\n\n /**\n * Update wizard UI after step change\n */\n updateUI: function() {\n var stepType = '';\n var index = the.currentStep - 1;\n\n if (Plugin.isLastStep()) {\n stepType = 'last';\n } else if (Plugin.isFirstStep()) {\n stepType = 'first';\n } else {\n stepType = 'between';\n }\n\n KTUtil.attr(the.element, 'data-wizard-state', stepType);\n\n // Steps\n var steps = KTUtil.findAll(the.element, '[data-wizard-type=\"step\"]');\n\n if (steps && steps.length > 0) {\n for (var i = 0, len = steps.length; i < len; i++) {\n if (i == index) {\n KTUtil.attr(steps[i], 'data-wizard-state', 'current');\n } else {\n if (i < index) {\n KTUtil.attr(steps[i], 'data-wizard-state', 'done');\n } else {\n KTUtil.attr(steps[i], 'data-wizard-state', 'pending');\n }\n }\n }\n }\n\n // Steps Info\n var stepsInfo = KTUtil.findAll(the.element, '[data-wizard-type=\"step-info\"]');\n if (stepsInfo &&stepsInfo.length > 0) {\n for (var i = 0, len = stepsInfo.length; i < len; i++) {\n if (i == index) {\n KTUtil.attr(stepsInfo[i], 'data-wizard-state', 'current');\n } else {\n KTUtil.removeAttr(stepsInfo[i], 'data-wizard-state');\n }\n }\n }\n\n // Steps Content\n var stepsContent = KTUtil.findAll(the.element, '[data-wizard-type=\"step-content\"]');\n if (stepsContent&& stepsContent.length > 0) {\n for (var i = 0, len = stepsContent.length; i < len; i++) {\n if (i == index) {\n KTUtil.attr(stepsContent[i], 'data-wizard-state', 'current');\n } else {\n KTUtil.removeAttr(stepsContent[i], 'data-wizard-state');\n }\n }\n }\n },\n\n /**\n * Get next step number\n */\n getNextStep: function() {\n if (the.totalSteps >= (the.currentStep + 1)) {\n return the.currentStep + 1;\n } else {\n return the.totalSteps;\n }\n },\n\n /**\n * Get prev step number\n */\n getPrevStep: function() {\n if ((the.currentStep - 1) >= 1) {\n return the.currentStep - 1;\n } else {\n return 1;\n }\n },\n\n /**\n * Get new step number\n */\n getNewStep: function() {\n return the.newStep;\n },\n\n /**\n * Set new step\n */\n setNewStep: function(step) {\n the.newStep = step;\n },\n\n /**\n * Trigger events\n */\n eventTrigger: function(name, nested) {\n //KTUtil.triggerCustomEvent(name);\n for (var i = 0; i < the.events.length; i++) {\n var event = the.events[i];\n if (event.name == name) {\n if (event.one == true) {\n if (event.fired == false) {\n the.events[i].fired = true;\n return event.handler.call(this, the);\n }\n } else {\n return event.handler.call(this, the);\n }\n }\n }\n },\n\n addEvent: function(name, handler, one) {\n the.events.push({\n name: name,\n handler: handler,\n one: one,\n fired: false\n });\n\n return the;\n }\n };\n\n //////////////////////////\n // ** Public Methods ** //\n //////////////////////////\n\n /**\n * Set default options\n */\n\n the.setDefaults = function(options) {\n defaultOptions = options;\n };\n\n /**\n * Go to the next step\n */\n the.goNext = function() {\n return Plugin.goTo(Plugin.getNextStep());\n };\n\n /**\n * Go to the prev step\n */\n the.goPrev = function() {\n return Plugin.goTo(Plugin.getPrevStep());\n };\n\n /**\n * Go to the last step\n */\n the.goLast = function() {\n return Plugin.goTo(Plugin.getLastStep());\n };\n\n /**\n * Go to the first step\n */\n the.goFirst = function() {\n return Plugin.goTo(Plugin.getFirstStep());\n };\n\n /**\n * Go to a step\n */\n the.goTo = function(number) {\n return Plugin.goTo(number);\n };\n\n /**\n * Stop wizard\n */\n the.stop = function() {\n return Plugin.stop();\n };\n\n /**\n * Resume wizard\n */\n the.resume = function() {\n return Plugin.resume();\n };\n\n /**\n * Get current step number\n */\n the.getStep = function() {\n return the.currentStep;\n };\n\n /**\n * Get new step number\n */\n the.getNewStep = function() {\n return Plugin.getNewStep();\n };\n\n /**\n * Set new step number\n */\n the.setNewStep = function(number) {\n Plugin.setNewStep(number);\n };\n\n /**\n * Check last step\n */\n the.isLastStep = function() {\n return Plugin.isLastStep();\n };\n\n /**\n * Check first step\n */\n the.isFirstStep = function() {\n return Plugin.isFirstStep();\n };\n\n /**\n * Attach event(\"change\", \"changed\", \"submit\")\n */\n the.on = function(name, handler) {\n return Plugin.addEvent(name, handler);\n };\n\n /**\n * Attach event that will be fired once\n */\n the.one = function(name, handler) {\n return Plugin.addEvent(name, handler, true);\n };\n\n // Construct plugin\n Plugin.construct.apply(the, [options]);\n\n return the;\n};\n\n// webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = KTWizard;\n}\n\nexport default KTWizard;","import {Auth} from \"aws-amplify\";\n\nexport const SET_LOGIN_USER = \"setLoginUser\";\nimport vue from 'vue';\n\nconst state = {\n\n loginUser : {},\n\n amplifyAuth : false,\n otpAuth : false, //@TODO default는 false로 변경예정\n\n isCheckOtpAuth : true, //otp 체크여부\n};\nconst getters = {\n currentLoginUser ( state ) {\n return state.loginUser;\n },\n amplifyAuth( state ) {\n return state.amplifyAuth;\n },\n otpAuth( state ) {\n return state.otpAuth;\n },\n\n isCheckOtpAuth( state ) {\n return state.isCheckOtpAuth;\n }\n};\n\nconst actions = {\n\n async logout() {\n\n console.log( \"logout 실행 ::: \" )\n\n vue.prototype.$session.clear();\n window.sessionStorage.removeItem( \"vuex\" )\n\n try {\n await Auth.signOut();\n }\n catch (error) {\n console.log('error signing out: ', error);\n }\n\n location.href=\"/\";\n\n },\n setLoginUser( context, payload ) {\n context.commit( \"setLoginUser\", payload )\n },\n\n // amplify auth 여부\n setAmplifyAuth(context, auth) {\n context.commit( \"setAmplifyAuth\", auth );\n },\n\n setOtpAuth(context, otpAuth) {\n context.commit( \"setOtpAuth\", otpAuth );\n },\n\n setIsCheckOtpAuth( context, isCheckOtpAuth ) {\n context.commit( \"setIsCheckOtpAuth\", isCheckOtpAuth )\n }\n};\n\nconst mutations = {\n\n setIsCheckOtpAuth( state, isCheckOtpAuth ) {\n\n state.isCheckOtpAuth = isCheckOtpAuth;\n },\n\n setLoginUser( state, loginUser ) {\n state.loginUser = vue.prototype.$isEmptyObject( loginUser ) ? null : loginUser ;\n },\n\n setOtpAuth( state, otpAuth ) {\n\n if( \"boolean\" !== typeof otpAuth ) {\n console.log( \"setAmplifyAuth param is not exist ::: \", otpAuth );\n state.otpAuth = false;\n return;\n }\n state.otpAuth = otpAuth;\n },\n\n setAmplifyAuth( state, auth ) {\n if( \"boolean\" !== typeof auth ) {\n console.log( \"setAmplifyAuth param is not exist ::: \", auth );\n state.amplifyAuth = false;\n return;\n }\n state.amplifyAuth = auth;\n }\n};\n\nexport default {\n state,\n actions,\n mutations,\n getters\n};\n","\"use strict\";\n\n/**\n * @class KTUtil base utilize class that privides helper functions\n */\n\n// Polyfills\n/**\n * Element.matches() polyfill (simple version)\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\n */\nif (!Element.prototype.matches) {\n\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n}\n\n/**\n * Element.closest() polyfill\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill\n */\nif (!Element.prototype.closest) {\n\tif (!Element.prototype.matches) {\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\t}\n\tElement.prototype.closest = function (s) {\n\t\tvar el = this;\n\t\tvar ancestor = this;\n\t\tif (!document.documentElement.contains(el)) return null;\n\t\tdo {\n\t\t\tif (ancestor.matches(s)) return ancestor;\n\t\t\tancestor = ancestor.parentElement;\n\t\t} while (ancestor !== null);\n\t\treturn null;\n\t};\n}\n\n/**\n * ChildNode.remove() polyfill\n * https://gomakethings.com/removing-an-element-from-the-dom-the-es6-way/\n * @author Chris Ferdinandi\n * @license MIT\n */\n(function (elem) {\n\tfor (var i = 0; i < elem.length; i++) {\n\t\tif (!window[elem[i]] || 'remove' in window[elem[i]].prototype) continue;\n\t\twindow[elem[i]].prototype.remove = function () {\n\t\t\tthis.parentNode.removeChild(this);\n\t\t};\n\t}\n})(['Element', 'CharacterData', 'DocumentType']);\n\n\n//\n// requestAnimationFrame polyfill by Erik Möller.\n// With fixes from Paul Irish and Tino Zijdel\n//\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n//\n// MIT license\n//\n(function() {\n var lastTime = 0;\n var vendors = ['webkit', 'moz'];\n for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\n window.cancelAnimationFrame =\n window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];\n }\n\n if (!window.requestAnimationFrame)\n window.requestAnimationFrame = function(callback) {\n var currTime = new Date().getTime();\n var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n var id = window.setTimeout(function() {\n callback(currTime + timeToCall);\n }, timeToCall);\n lastTime = currTime + timeToCall;\n return id;\n };\n\n if (!window.cancelAnimationFrame)\n window.cancelAnimationFrame = function(id) {\n clearTimeout(id);\n };\n}());\n\n// Source: https://github.com/jserz/js_piece/blob/master/DOM/ParentNode/prepend()/prepend().md\n(function(arr) {\n arr.forEach(function(item) {\n if (item.hasOwnProperty('prepend')) {\n return;\n }\n Object.defineProperty(item, 'prepend', {\n configurable: true,\n enumerable: true,\n writable: true,\n value: function prepend() {\n var argArr = Array.prototype.slice.call(arguments),\n docFrag = document.createDocumentFragment();\n\n argArr.forEach(function(argItem) {\n var isNode = argItem instanceof Node;\n docFrag.appendChild(isNode ? argItem : document.createTextNode(String(argItem)));\n });\n\n this.insertBefore(docFrag, this.firstChild);\n }\n });\n });\n})([Element.prototype, Document.prototype, DocumentFragment.prototype]);\n\n// getAttributeNames\nif (Element.prototype.getAttributeNames == undefined) {\n Element.prototype.getAttributeNames = function () {\n var attributes = this.attributes;\n var length = attributes.length;\n var result = new Array(length);\n for (var i = 0; i < length; i++) {\n result[i] = attributes[i].name;\n }\n return result;\n };\n}\n\n// Global variables\nwindow.KTUtilElementDataStore = {};\nwindow.KTUtilElementDataStoreID = 0;\nwindow.KTUtilDelegatedEventHandlers = {};\n\nvar KTUtil = function() {\n var resizeHandlers = [];\n\n /** @type {object} breakpoints The device width breakpoints **/\n var breakpoints = {\n sm: 0, // Small screen / phone\n md: 0, // Medium screen / tablet\n lg: 992, // Large screen / desktop\n xl: 1200 // Extra large screen / wide desktop\n };\n\n /**\n * Handle window resize event with some\n * delay to attach event handlers upon resize complete\n */\n var _windowResizeHandler = function() {\n var _runResizeHandlers = function() {\n // reinitialize other subscribed elements\n for (var i = 0; i < resizeHandlers.length; i++) {\n var each = resizeHandlers[i];\n each.call();\n }\n };\n\n var timer;\n\n window.addEventListener('resize', function() {\n KTUtil.throttle(timer, function() {\n _runResizeHandlers();\n }, 200);\n });\n };\n\n return {\n /**\n * Class main initializer.\n * @param {object} settings.\n * @returns null\n */\n //main function to initiate the theme\n init: function(settings) {\n if (settings && settings.breakpoints) {\n breakpoints = settings.breakpoints;\n }\n\n _windowResizeHandler();\n },\n\n /**\n * Adds window resize event handler.\n * @param {function} callback function.\n */\n addResizeHandler: function(callback) {\n resizeHandlers.push(callback);\n },\n\n /**\n * Removes window resize event handler.\n * @param {function} callback function.\n */\n removeResizeHandler: function(callback) {\n for (var i = 0; i < resizeHandlers.length; i++) {\n if (callback === resizeHandlers[i]) {\n delete resizeHandlers[i];\n }\n }\n },\n\n /**\n * Trigger window resize handlers.\n */\n runResizeHandlers: function() {\n _runResizeHandlers();\n },\n\n resize: function() {\n if (typeof(Event) === 'function') {\n // modern browsers\n window.dispatchEvent(new Event('resize'));\n } else {\n // for IE and other old browsers\n // causes deprecation warning on modern browsers\n var evt = window.document.createEvent('UIEvents');\n evt.initUIEvent('resize', true, false, window, 0);\n window.dispatchEvent(evt);\n }\n },\n\n /**\n * Get GET parameter value from URL.\n * @param {string} paramName Parameter name.\n * @returns {string}\n */\n getURLParam: function(paramName) {\n var searchString = window.location.search.substring(1),\n i, val, params = searchString.split(\"&\");\n\n for (i = 0; i < params.length; i++) {\n val = params[i].split(\"=\");\n if (val[0] == paramName) {\n return unescape(val[1]);\n }\n }\n\n return null;\n },\n\n /**\n * Checks whether current device is mobile touch.\n * @returns {boolean}\n */\n isMobileDevice: function() {\n var test = (this.getViewPort().width < this.getBreakpoint('lg') ? true : false);\n\n if (test === false) {\n // For use within normal web clients\n test = navigator.userAgent.match(/iPad/i) != null;\n }\n\n return test;\n },\n\n /**\n * Checks whether current device is desktop.\n * @returns {boolean}\n */\n isDesktopDevice: function() {\n return KTUtil.isMobileDevice() ? false : true;\n },\n\n /**\n * Gets browser window viewport size. Ref:\n * http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/\n * @returns {object}\n */\n getViewPort: function() {\n var e = window,\n a = 'inner';\n if (!('innerWidth' in window)) {\n a = 'client';\n e = document.documentElement || document.body;\n }\n\n return {\n width: e[a + 'Width'],\n height: e[a + 'Height']\n };\n },\n\n /**\n * Checks whether given device mode is currently activated.\n * @param {string} mode Responsive mode name(e.g: desktop,\n * desktop-and-tablet, tablet, tablet-and-mobile, mobile)\n * @returns {boolean}\n */\n isInResponsiveRange: function(mode) {\n var breakpoint = this.getViewPort().width;\n\n if (mode == 'general') {\n return true;\n } else if (mode == 'desktop' && breakpoint >= (this.getBreakpoint('lg') + 1)) {\n return true;\n } else if (mode == 'tablet' && (breakpoint >= (this.getBreakpoint('md') + 1) && breakpoint < this.getBreakpoint('lg'))) {\n return true;\n } else if (mode == 'mobile' && breakpoint <= this.getBreakpoint('md')) {\n return true;\n } else if (mode == 'desktop-and-tablet' && breakpoint >= (this.getBreakpoint('md') + 1)) {\n return true;\n } else if (mode == 'tablet-and-mobile' && breakpoint <= this.getBreakpoint('lg')) {\n return true;\n } else if (mode == 'minimal-desktop-and-below' && breakpoint <= this.getBreakpoint('xl')) {\n return true;\n }\n\n return false;\n },\n\n\t\t/**\n * Checks whether given device mode is currently activated.\n * @param {string} mode Responsive mode name(e.g: desktop,\n * desktop-and-tablet, tablet, tablet-and-mobile, mobile)\n * @returns {boolean}\n */\n isBreakpointUp: function(mode) {\n var width = this.getViewPort().width;\n\t\t\tvar breakpoint = this.getBreakpoint(mode);\n\n\t\t\treturn (width >= breakpoint);\n },\n\n\t\tisBreakpointDown: function(mode) {\n var width = this.getViewPort().width;\n\t\t\tvar breakpoint = this.getBreakpoint(mode);\n\n\t\t\treturn (width < breakpoint);\n },\n\n /**\n * Generates unique ID for give prefix.\n * @param {string} prefix Prefix for generated ID\n * @returns {boolean}\n */\n getUniqueID: function(prefix) {\n return prefix + Math.floor(Math.random() * (new Date()).getTime());\n },\n\n /**\n * Gets window width for give breakpoint mode.\n * @param {string} mode Responsive mode name(e.g: xl, lg, md, sm)\n * @returns {number}\n */\n getBreakpoint: function(mode) {\n return breakpoints[mode];\n },\n\n /**\n * Checks whether object has property matchs given key path.\n * @param {object} obj Object contains values paired with given key path\n * @param {string} keys Keys path seperated with dots\n * @returns {object}\n */\n isset: function(obj, keys) {\n var stone;\n\n keys = keys || '';\n\n if (keys.indexOf('[') !== -1) {\n throw new Error('Unsupported object path notation.');\n }\n\n keys = keys.split('.');\n\n do {\n if (obj === undefined) {\n return false;\n }\n\n stone = keys.shift();\n\n if (!obj.hasOwnProperty(stone)) {\n return false;\n }\n\n obj = obj[stone];\n\n } while (keys.length);\n\n return true;\n },\n\n /**\n * Gets highest z-index of the given element parents\n * @param {object} el jQuery element object\n * @returns {number}\n */\n getHighestZindex: function(el) {\n var position, value;\n\n while (el && el !== document) {\n // Ignore z-index if position is set to a value where z-index is ignored by the browser\n // This makes behavior of this function consistent across browsers\n // WebKit always returns auto if the element is positioned\n position = KTUtil.css(el, 'position');\n\n if (position === \"absolute\" || position === \"relative\" || position === \"fixed\") {\n // IE returns 0 when zIndex is not specified\n // other browsers return a string\n // we ignore the case of nested elements with an explicit value of 0\n // \n value = parseInt(KTUtil.css(el, 'z-index'));\n\n if (!isNaN(value) && value !== 0) {\n return value;\n }\n }\n\n el = el.parentNode;\n }\n\n return null;\n },\n\n /**\n * Checks whether the element has any parent with fixed positionfreg\n * @param {object} el jQuery element object\n * @returns {boolean}\n */\n hasFixedPositionedParent: function(el) {\n var position;\n\n while (el && el !== document) {\n position = KTUtil.css(el, 'position');\n\n if (position === \"fixed\") {\n return true;\n }\n\n el = el.parentNode;\n }\n\n return false;\n },\n\n /**\n * Simulates delay\n */\n sleep: function(milliseconds) {\n var start = new Date().getTime();\n for (var i = 0; i < 1e7; i++) {\n if ((new Date().getTime() - start) > milliseconds) {\n break;\n }\n }\n },\n\n /**\n * Gets randomly generated integer value within given min and max range\n * @param {number} min Range start value\n * @param {number} max Range end value\n * @returns {number}\n */\n getRandomInt: function(min, max) {\n return Math.floor(Math.random() * (max - min + 1)) + min;\n },\n\n /**\n * Checks whether Angular library is included\n * @returns {boolean}\n */\n isAngularVersion: function() {\n return window.Zone !== undefined ? true : false;\n },\n\n // Deep extend: $.extend(true, {}, objA, objB);\n deepExtend: function(out) {\n out = out || {};\n\n for (var i = 1; i < arguments.length; i++) {\n var obj = arguments[i];\n if (!obj) continue;\n\n for (var key in obj) {\n if (!obj.hasOwnProperty(key)) {\n continue;\n }\n\n // based on https://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/\n if ( Object.prototype.toString.call(obj[key]) === '[object Object]' ) {\n out[key] = KTUtil.deepExtend(out[key], obj[key]);\n continue;\n }\n\n out[key] = obj[key];\n }\n }\n\n return out;\n },\n\n // extend: $.extend({}, objA, objB);\n extend: function(out) {\n out = out || {};\n\n for (var i = 1; i < arguments.length; i++) {\n if (!arguments[i])\n continue;\n\n for (var key in arguments[i]) {\n if (arguments[i].hasOwnProperty(key))\n out[key] = arguments[i][key];\n }\n }\n\n return out;\n },\n\n getById: function(el) {\n if (typeof el === 'string') {\n return document.getElementById(el);\n } else {\n return el;\n }\n },\n\n getByTag: function(query) {\n return document.getElementsByTagName(query);\n },\n\n getByTagName: function(query) {\n return document.getElementsByTagName(query);\n },\n\n getByClass: function(query) {\n return document.getElementsByClassName(query);\n },\n\n getBody: function() {\n return document.getElementsByTagName('body')[0];\n },\n\n /**\n * Checks whether the element has given classes\n * @param {object} el jQuery element object\n * @param {string} Classes string\n * @returns {boolean}\n */\n hasClasses: function(el, classes) {\n if (!el) {\n return;\n }\n\n var classesArr = classes.split(\" \");\n\n for (var i = 0; i < classesArr.length; i++) {\n if (KTUtil.hasClass(el, KTUtil.trim(classesArr[i])) == false) {\n return false;\n }\n }\n\n return true;\n },\n\n hasClass: function(el, className) {\n if (!el) {\n return;\n }\n\n return el.classList ? el.classList.contains(className) : new RegExp('\\\\b' + className + '\\\\b').test(el.className);\n },\n\n addClass: function(el, className) {\n if (!el || typeof className === 'undefined') {\n return;\n }\n\n var classNames = className.split(' ');\n\n if (el.classList) {\n for (var i = 0; i < classNames.length; i++) {\n if (classNames[i] && classNames[i].length > 0) {\n el.classList.add(KTUtil.trim(classNames[i]));\n }\n }\n } else if (!KTUtil.hasClass(el, className)) {\n for (var x = 0; x < classNames.length; x++) {\n el.className += ' ' + KTUtil.trim(classNames[x]);\n }\n }\n },\n\n removeClass: function(el, className) {\n if (!el || typeof className === 'undefined') {\n return;\n }\n\n var classNames = className.split(' ');\n\n if (el.classList) {\n for (var i = 0; i < classNames.length; i++) {\n el.classList.remove(KTUtil.trim(classNames[i]));\n }\n } else if (KTUtil.hasClass(el, className)) {\n for (var x = 0; x < classNames.length; x++) {\n el.className = el.className.replace(new RegExp('\\\\b' + KTUtil.trim(classNames[x]) + '\\\\b', 'g'), '');\n }\n }\n },\n\n triggerCustomEvent: function(el, eventName, data) {\n var event;\n if (window.CustomEvent) {\n event = new CustomEvent(eventName, {\n detail: data\n });\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(eventName, true, true, data);\n }\n\n el.dispatchEvent(event);\n },\n\n triggerEvent: function(node, eventName) {\n // Make sure we use the ownerDocument from the provided node to avoid cross-window problems\n var doc;\n if (node.ownerDocument) {\n doc = node.ownerDocument;\n } else if (node.nodeType == 9) {\n // the node may be the document itself, nodeType 9 = DOCUMENT_NODE\n doc = node;\n } else {\n throw new Error(\"Invalid node passed to fireEvent: \" + node.id);\n }\n\n if (node.dispatchEvent) {\n // Gecko-style approach (now the standard) takes more work\n var eventClass = \"\";\n\n // Different events have different event classes.\n // If this switch statement can't map an eventName to an eventClass,\n // the event firing is going to fail.\n switch (eventName) {\n case \"click\": // Dispatching of 'click' appears to not work correctly in Safari. Use 'mousedown' or 'mouseup' instead.\n case \"mouseenter\":\n case \"mouseleave\":\n case \"mousedown\":\n case \"mouseup\":\n eventClass = \"MouseEvents\";\n break;\n\n case \"focus\":\n case \"change\":\n case \"blur\":\n case \"select\":\n eventClass = \"HTMLEvents\";\n break;\n\n default:\n throw \"fireEvent: Couldn't find an event class for event '\" + eventName + \"'.\";\n break;\n }\n var event = doc.createEvent(eventClass);\n\n var bubbles = eventName == \"change\" ? false : true;\n event.initEvent(eventName, bubbles, true); // All events created as bubbling and cancelable.\n\n event.synthetic = true; // allow detection of synthetic events\n // The second parameter says go ahead with the default action\n node.dispatchEvent(event, true);\n } else if (node.fireEvent) {\n // IE-old school style\n var event = doc.createEventObject();\n event.synthetic = true; // allow detection of synthetic events\n node.fireEvent(\"on\" + eventName, event);\n }\n },\n\n index: function( el ){\n var c = el.parentNode.children, i = 0;\n for(; i < c.length; i++ )\n if( c[i] == el ) return i;\n },\n\n trim: function(string) {\n return string.trim();\n },\n\n eventTriggered: function(e) {\n if (e.currentTarget.dataset.triggered) {\n return true;\n } else {\n e.currentTarget.dataset.triggered = true;\n\n return false;\n }\n },\n\n remove: function(el) {\n if (el && el.parentNode) {\n el.parentNode.removeChild(el);\n }\n },\n\n find: function(parent, query) {\n parent = KTUtil.getById(parent);\n if (parent) {\n return parent.querySelector(query);\n }\n },\n\n findAll: function(parent, query) {\n parent = KTUtil.getById(parent);\n if (parent) {\n return parent.querySelectorAll(query);\n }\n },\n\n insertAfter: function(el, referenceNode) {\n return referenceNode.parentNode.insertBefore(el, referenceNode.nextSibling);\n },\n\n parents: function(elem, selector) {\n // Element.matches() polyfill\n if (!Element.prototype.matches) {\n Element.prototype.matches =\n Element.prototype.matchesSelector ||\n Element.prototype.mozMatchesSelector ||\n Element.prototype.msMatchesSelector ||\n Element.prototype.oMatchesSelector ||\n Element.prototype.webkitMatchesSelector ||\n function(s) {\n var matches = (this.document || this.ownerDocument).querySelectorAll(s),\n i = matches.length;\n while (--i >= 0 && matches.item(i) !== this) {}\n return i > -1;\n };\n }\n\n // Set up a parent array\n var parents = [];\n\n // Push each parent element to the array\n for ( ; elem && elem !== document; elem = elem.parentNode ) {\n if (selector) {\n if (elem.matches(selector)) {\n parents.push(elem);\n }\n continue;\n }\n parents.push(elem);\n }\n\n // Return our parent array\n return parents;\n },\n\n children: function(el, selector, log) {\n if (!el || !el.childNodes) {\n return;\n }\n\n var result = [],\n i = 0,\n l = el.childNodes.length;\n\n for (var i; i < l; ++i) {\n if (el.childNodes[i].nodeType == 1 && KTUtil.matches(el.childNodes[i], selector, log)) {\n result.push(el.childNodes[i]);\n }\n }\n\n return result;\n },\n\n child: function(el, selector, log) {\n var children = KTUtil.children(el, selector, log);\n\n return children ? children[0] : null;\n },\n\n matches: function(el, selector, log) {\n var p = Element.prototype;\n var f = p.matches || p.webkitMatchesSelector || p.mozMatchesSelector || p.msMatchesSelector || function(s) {\n return [].indexOf.call(document.querySelectorAll(s), this) !== -1;\n };\n\n if (el && el.tagName) {\n return f.call(el, selector);\n } else {\n return false;\n }\n },\n\n data: function(el) {\n return {\n set: function(name, data) {\n if (!el) {\n return;\n }\n\n if (el.customDataTag === undefined) {\n window.KTUtilElementDataStoreID++;\n el.customDataTag = window.KTUtilElementDataStoreID;\n }\n\n if (window.KTUtilElementDataStore[el.customDataTag] === undefined) {\n window.KTUtilElementDataStore[el.customDataTag] = {};\n }\n\n window.KTUtilElementDataStore[el.customDataTag][name] = data;\n },\n\n get: function(name) {\n if (!el) {\n return;\n }\n\n if (el.customDataTag === undefined) {\n return null;\n }\n\n return this.has(name) ? window.KTUtilElementDataStore[el.customDataTag][name] : null;\n },\n\n has: function(name) {\n if (!el) {\n return false;\n }\n\n if (el.customDataTag === undefined) {\n return false;\n }\n\n return (window.KTUtilElementDataStore[el.customDataTag] && window.KTUtilElementDataStore[el.customDataTag][name]) ? true : false;\n },\n\n remove: function(name) {\n if (el && this.has(name)) {\n delete window.KTUtilElementDataStore[el.customDataTag][name];\n }\n }\n };\n },\n\n outerWidth: function(el, margin) {\n var width;\n\n if (margin === true) {\n width = parseFloat(el.offsetWidth);\n width += parseFloat(KTUtil.css(el, 'margin-left')) + parseFloat(KTUtil.css(el, 'margin-right'));\n\n return parseFloat(width);\n } else {\n width = parseFloat(el.offsetWidth);\n\n return width;\n }\n },\n\n offset: function(el) {\n var rect, win;\n\n if ( !el ) {\n return;\n }\n\n // Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n // Support: IE <=11 only\n // Running getBoundingClientRect on a\n // disconnected node in IE throws an error\n\n if ( !el.getClientRects().length ) {\n return { top: 0, left: 0 };\n }\n\n // Get document-relative position by adding viewport scroll to viewport-relative gBCR\n rect = el.getBoundingClientRect();\n win = el.ownerDocument.defaultView;\n\n return {\n top: rect.top + win.pageYOffset,\n left: rect.left + win.pageXOffset\n };\n },\n\n height: function(el) {\n return KTUtil.css(el, 'height');\n },\n\n outerHeight: function(el, withMargin) {\n var height = el.offsetHeight;\n var style;\n\n if (typeof withMargin !== 'undefined' && withMargin === true) {\n style = getComputedStyle(el);\n height += parseInt(style.marginTop) + parseInt(style.marginBottom);\n\n return height;\n } else {\n return height;\n }\n },\n\n visible: function(el) {\n return !(el.offsetWidth === 0 && el.offsetHeight === 0);\n },\n\n attr: function(el, name, value) {\n if (el == undefined) {\n return;\n }\n\n if (value !== undefined) {\n el.setAttribute(name, value);\n } else {\n return el.getAttribute(name);\n }\n },\n\n hasAttr: function(el, name) {\n if (el == undefined) {\n return;\n }\n\n return el.getAttribute(name) ? true : false;\n },\n\n removeAttr: function(el, name) {\n if (el == undefined) {\n return;\n }\n\n el.removeAttribute(name);\n },\n\n animate: function(from, to, duration, update, easing, done) {\n /**\n * TinyAnimate.easings\n * Adapted from jQuery Easing\n */\n var easings = {};\n var easing;\n\n easings.linear = function(t, b, c, d) {\n return c * t / d + b;\n };\n\n easing = easings.linear;\n\n // Early bail out if called incorrectly\n if (typeof from !== 'number' ||\n typeof to !== 'number' ||\n typeof duration !== 'number' ||\n typeof update !== 'function') {\n return;\n }\n\n // Create mock done() function if necessary\n if (typeof done !== 'function') {\n done = function() {};\n }\n\n // Pick implementation (requestAnimationFrame | setTimeout)\n var rAF = window.requestAnimationFrame || function(callback) {\n window.setTimeout(callback, 1000 / 50);\n };\n\n // Animation loop\n var canceled = false;\n var change = to - from;\n\n function loop(timestamp) {\n var time = (timestamp || +new Date()) - start;\n\n if (time >= 0) {\n update(easing(time, from, change, duration));\n }\n if (time >= 0 && time >= duration) {\n update(to);\n done();\n } else {\n rAF(loop);\n }\n }\n\n update(from);\n\n // Start animation loop\n var start = window.performance && window.performance.now ? window.performance.now() : +new Date();\n\n rAF(loop);\n },\n\n actualCss: function(el, prop, cache) {\n var css = '';\n\n if (el instanceof HTMLElement === false) {\n return;\n }\n\n if (!el.getAttribute('kt-hidden-' + prop) || cache === false) {\n var value;\n\n // the element is hidden so:\n // making the el block so we can meassure its height but still be hidden\n css = el.style.cssText;\n el.style.cssText = 'position: absolute; visibility: hidden; display: block;';\n\n if (prop == 'width') {\n value = el.offsetWidth;\n } else if (prop == 'height') {\n value = el.offsetHeight;\n }\n\n el.style.cssText = css;\n\n // store it in cache\n el.setAttribute('kt-hidden-' + prop, value);\n\n return parseFloat(value);\n } else {\n // store it in cache\n return parseFloat(el.getAttribute('kt-hidden-' + prop));\n }\n },\n\n actualHeight: function(el, cache) {\n return KTUtil.actualCss(el, 'height', cache);\n },\n\n actualWidth: function(el, cache) {\n return KTUtil.actualCss(el, 'width', cache);\n },\n\n getScroll: function(element, method) {\n // The passed in `method` value should be 'Top' or 'Left'\n method = 'scroll' + method;\n return (element == window || element == document) ? (\n self[(method == 'scrollTop') ? 'pageYOffset' : 'pageXOffset'] ||\n (browserSupportsBoxModel && document.documentElement[method]) ||\n document.body[method]\n ) : element[method];\n },\n\n css: function(el, styleProp, value) {\n if (!el) {\n return;\n }\n\n if (value !== undefined) {\n el.style[styleProp] = value;\n } else {\n var defaultView = (el.ownerDocument || document).defaultView;\n // W3C standard way:\n if (defaultView && defaultView.getComputedStyle) {\n // sanitize property name to css notation\n // (hyphen separated words eg. font-Size)\n styleProp = styleProp.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n return defaultView.getComputedStyle(el, null).getPropertyValue(styleProp);\n } else if (el.currentStyle) { // IE\n // sanitize property name to camelCase\n styleProp = styleProp.replace(/\\-(\\w)/g, function(str, letter) {\n return letter.toUpperCase();\n });\n value = el.currentStyle[styleProp];\n // convert other units to pixels on IE\n if (/^\\d+(em|pt|%|ex)?$/i.test(value)) {\n return (function(value) {\n var oldLeft = el.style.left,\n oldRsLeft = el.runtimeStyle.left;\n el.runtimeStyle.left = el.currentStyle.left;\n el.style.left = value || 0;\n value = el.style.pixelLeft + \"px\";\n el.style.left = oldLeft;\n el.runtimeStyle.left = oldRsLeft;\n return value;\n })(value);\n }\n return value;\n }\n }\n },\n\n slide: function(el, dir, speed, callback, recalcMaxHeight) {\n if (!el || (dir == 'up' && KTUtil.visible(el) === false) || (dir == 'down' && KTUtil.visible(el) === true)) {\n return;\n }\n\n speed = (speed ? speed : 600);\n var calcHeight = KTUtil.actualHeight(el);\n var calcPaddingTop = false;\n var calcPaddingBottom = false;\n\n if (KTUtil.css(el, 'padding-top') && KTUtil.data(el).has('slide-padding-top') !== true) {\n KTUtil.data(el).set('slide-padding-top', KTUtil.css(el, 'padding-top'));\n }\n\n if (KTUtil.css(el, 'padding-bottom') && KTUtil.data(el).has('slide-padding-bottom') !== true) {\n KTUtil.data(el).set('slide-padding-bottom', KTUtil.css(el, 'padding-bottom'));\n }\n\n if (KTUtil.data(el).has('slide-padding-top')) {\n calcPaddingTop = parseInt(KTUtil.data(el).get('slide-padding-top'));\n }\n\n if (KTUtil.data(el).has('slide-padding-bottom')) {\n calcPaddingBottom = parseInt(KTUtil.data(el).get('slide-padding-bottom'));\n }\n\n if (dir == 'up') { // up\n el.style.cssText = 'display: block; overflow: hidden;';\n\n if (calcPaddingTop) {\n KTUtil.animate(0, calcPaddingTop, speed, function(value) {\n el.style.paddingTop = (calcPaddingTop - value) + 'px';\n }, 'linear');\n }\n\n if (calcPaddingBottom) {\n KTUtil.animate(0, calcPaddingBottom, speed, function(value) {\n el.style.paddingBottom = (calcPaddingBottom - value) + 'px';\n }, 'linear');\n }\n\n KTUtil.animate(0, calcHeight, speed, function(value) {\n el.style.height = (calcHeight - value) + 'px';\n }, 'linear', function() {\n el.style.height = '';\n el.style.display = 'none';\n\n if (typeof callback === 'function') {\n callback();\n }\n });\n\n\n } else if (dir == 'down') { // down\n el.style.cssText = 'display: block; overflow: hidden;';\n\n if (calcPaddingTop) {\n KTUtil.animate(0, calcPaddingTop, speed, function(value) {//\n el.style.paddingTop = value + 'px';\n }, 'linear', function() {\n el.style.paddingTop = '';\n });\n }\n\n if (calcPaddingBottom) {\n KTUtil.animate(0, calcPaddingBottom, speed, function(value) {\n el.style.paddingBottom = value + 'px';\n }, 'linear', function() {\n el.style.paddingBottom = '';\n });\n }\n\n KTUtil.animate(0, calcHeight, speed, function(value) {\n el.style.height = value + 'px';\n }, 'linear', function() {\n el.style.height = '';\n el.style.display = '';\n el.style.overflow = '';\n\n if (typeof callback === 'function') {\n callback();\n }\n });\n }\n },\n\n slideUp: function(el, speed, callback) {\n KTUtil.slide(el, 'up', speed, callback);\n },\n\n slideDown: function(el, speed, callback) {\n KTUtil.slide(el, 'down', speed, callback);\n },\n\n show: function(el, display) {\n if (typeof el !== 'undefined') {\n el.style.display = (display ? display : 'block');\n }\n },\n\n hide: function(el) {\n if (typeof el !== 'undefined') {\n el.style.display = 'none';\n }\n },\n\n addEvent: function(el, type, handler, one) {\n if (typeof el !== 'undefined' && el !== null) {\n el.addEventListener(type, handler);\n }\n },\n\n removeEvent: function(el, type, handler) {\n if (el !== null) {\n el.removeEventListener(type, handler);\n }\n },\n\n on: function(element, selector, event, handler) {\n if (!selector) {\n return;\n }\n\n var eventId = KTUtil.getUniqueID('event');\n\n window.KTUtilDelegatedEventHandlers[eventId] = function(e) {\n var targets = element.querySelectorAll(selector);\n var target = e.target;\n\n while (target && target !== element) {\n for (var i = 0, j = targets.length; i < j; i++) {\n if (target === targets[i]) {\n handler.call(target, e);\n }\n }\n\n target = target.parentNode;\n }\n }\n\n KTUtil.addEvent(element, event, window.KTUtilDelegatedEventHandlers[eventId]);\n\n return eventId;\n },\n\n off: function(element, event, eventId) {\n if (!element || !window.KTUtilDelegatedEventHandlers[eventId]) {\n return;\n }\n\n KTUtil.removeEvent(element, event, window.KTUtilDelegatedEventHandlers[eventId]);\n\n delete window.KTUtilDelegatedEventHandlers[eventId];\n },\n\n one: function onetime(el, type, callback) {\n el.addEventListener(type, function callee(e) {\n // remove event\n if (e.target && e.target.removeEventListener) {\n e.target.removeEventListener(e.type, callee);\n }\n\n // need to verify from https://themeforest.net/author_dashboard#comment_23615588\n if (el && el.removeEventListener) {\n\t\t\t\t e.currentTarget.removeEventListener(e.type, callee);\n\t\t\t }\n\n // call handler\n return callback(e);\n });\n },\n\n hash: function(str) {\n var hash = 0,\n i, chr;\n\n if (str.length === 0) return hash;\n for (i = 0; i < str.length; i++) {\n chr = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + chr;\n hash |= 0; // Convert to 32bit integer\n }\n\n return hash;\n },\n\n animateClass: function(el, animationName, callback) {\n var animation;\n var animations = {\n animation: 'animationend',\n OAnimation: 'oAnimationEnd',\n MozAnimation: 'mozAnimationEnd',\n WebkitAnimation: 'webkitAnimationEnd',\n msAnimation: 'msAnimationEnd',\n };\n\n for (var t in animations) {\n if (el.style[t] !== undefined) {\n animation = animations[t];\n }\n }\n\n KTUtil.addClass(el, 'animated ' + animationName);\n\n KTUtil.one(el, animation, function() {\n KTUtil.removeClass(el, 'animated ' + animationName);\n });\n\n if (callback) {\n KTUtil.one(el, animation, callback);\n }\n },\n\n transitionEnd: function(el, callback) {\n var transition;\n var transitions = {\n transition: 'transitionend',\n OTransition: 'oTransitionEnd',\n MozTransition: 'mozTransitionEnd',\n WebkitTransition: 'webkitTransitionEnd',\n msTransition: 'msTransitionEnd'\n };\n\n for (var t in transitions) {\n if (el.style[t] !== undefined) {\n transition = transitions[t];\n }\n }\n\n KTUtil.one(el, transition, callback);\n },\n\n animationEnd: function(el, callback) {\n var animation;\n var animations = {\n animation: 'animationend',\n OAnimation: 'oAnimationEnd',\n MozAnimation: 'mozAnimationEnd',\n WebkitAnimation: 'webkitAnimationEnd',\n msAnimation: 'msAnimationEnd'\n };\n\n for (var t in animations) {\n if (el.style[t] !== undefined) {\n animation = animations[t];\n }\n }\n\n KTUtil.one(el, animation, callback);\n },\n\n animateDelay: function(el, value) {\n var vendors = ['webkit-', 'moz-', 'ms-', 'o-', ''];\n for (var i = 0; i < vendors.length; i++) {\n KTUtil.css(el, vendors[i] + 'animation-delay', value);\n }\n },\n\n animateDuration: function(el, value) {\n var vendors = ['webkit-', 'moz-', 'ms-', 'o-', ''];\n for (var i = 0; i < vendors.length; i++) {\n KTUtil.css(el, vendors[i] + 'animation-duration', value);\n }\n },\n\n scrollTo: function(target, offset, duration) {\n var duration = duration ? duration : 500;\n var targetPos = target ? KTUtil.offset(target).top : 0;\n var scrollPos = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n var from, to;\n\n if (offset) {\n scrollPos += offset;\n }\n\n from = scrollPos;\n to = targetPos;\n\n KTUtil.animate(from, to, duration, function(value) {\n document.documentElement.scrollTop = value;\n document.body.parentNode.scrollTop = value;\n document.body.scrollTop = value;\n }); //, easing, done\n },\n\n scrollTop: function(offset, duration) {\n KTUtil.scrollTo(null, offset, duration);\n },\n\n isArray: function(obj) {\n return obj && Array.isArray(obj);\n },\n\n ready: function(callback) {\n if (document.attachEvent ? document.readyState === \"complete\" : document.readyState !== \"loading\") {\n callback();\n } else {\n document.addEventListener('DOMContentLoaded', callback);\n }\n },\n\n isEmpty: function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n return false;\n }\n }\n\n return true;\n },\n\n numberString: function(nStr) {\n nStr += '';\n var x = nStr.split('.');\n var x1 = x[0];\n var x2 = x.length > 1 ? '.' + x[1] : '';\n var rgx = /(\\d+)(\\d{3})/;\n while (rgx.test(x1)) {\n x1 = x1.replace(rgx, '$1' + ',' + '$2');\n }\n return x1 + x2;\n },\n\n detectIE: function() {\n var ua = window.navigator.userAgent;\n\n // Test values; Uncomment to check result …\n\n // IE 10\n // ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)';\n\n // IE 11\n // ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko';\n\n // Edge 12 (Spartan)\n // ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0';\n\n // Edge 13\n // ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586';\n\n var msie = ua.indexOf('MSIE ');\n if (msie > 0) {\n // IE 10 or older => return version number\n return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\n }\n\n var trident = ua.indexOf('Trident/');\n if (trident > 0) {\n // IE 11 => return version number\n var rv = ua.indexOf('rv:');\n return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\n }\n\n var edge = ua.indexOf('Edge/');\n if (edge > 0) {\n // Edge (IE 12+) => return version number\n return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\n }\n\n // other browser\n return false;\n },\n\n isRTL: function() {\n var html = KTUtil.getByTagName('html')[0];\n\n if (html) {\n return (KTUtil.attr(html, 'direction') == 'rtl');\n }\n },\n\n // Scroller\n scrollInit: function(element, options) {\n if (!element) {\n return;\n }\n\n // Learn more: https://github.com/mdbootstrap/perfect-scrollbar#options\n var pluginDefOptions = {\n wheelSpeed: 0.5,\n swipeEasing: true,\n wheelPropagation: false,\n minScrollbarLength: 40,\n maxScrollbarLength: 300,\n suppressScrollX: true\n };\n\n options = KTUtil.deepExtend({}, pluginDefOptions, options);\n\n // Define init function\n function init() {\n var ps;\n var height;\n\n // Get extra options via data attributes\n var attrs = element.getAttributeNames();\n if (attrs.length > 0) {\n attrs.forEach(function(attrName) {\n \t\t\t// more options; https://github.com/ganlanyuan/tiny-slider#options\n \t\t\tif ((/^data-.*/g).test(attrName)) {\n if (['scroll', 'height', 'mobile-height'].includes(optionName) == false) {\n var optionName = attrName.replace('data-', '').toLowerCase().replace(/(?:[\\s-])\\w/g, function(match) {\n \t\t\t\t\treturn match.replace('-', '').toUpperCase();\n \t\t\t\t});\n\n options[optionName] = KTUtil.filterBoolean(element.getAttribute(attrName));\n }\n \t\t\t}\n \t\t});\n }\n\n if (options.height instanceof Function) {\n height = options.height.call();\n } else {\n if (KTUtil.isMobileDevice() === true && options.mobileHeight) {\n height = parseInt(options.mobileHeight);\n } else if (options.height) {\n height = parseInt(options.height);\n } else {\n height = parseInt(KTUtil.css(element, 'height'));\n }\n }\n\n if (height === false) {\n KTUtil.scrollDestroy(element, true);\n\n return;\n }\n\n height = parseInt(height);\n\n // Destroy scroll on table and mobile modes\n if ((options.mobileNativeScroll || options.disableForMobile) && KTUtil.isMobileDevice() === true) {\n ps = KTUtil.data(element).get('ps');\n if (ps) {\n if (options.resetHeightOnDestroy) {\n KTUtil.css(element, 'height', 'auto');\n } else {\n KTUtil.css(element, 'overflow', 'auto');\n if (height > 0) {\n KTUtil.css(element, 'height', height + 'px');\n }\n }\n\n ps.destroy();\n ps = KTUtil.data(element).remove('ps');\n } else if (height > 0){\n KTUtil.css(element, 'overflow', 'auto');\n KTUtil.css(element, 'height', height + 'px');\n }\n\n return;\n }\n\n if (height > 0) {\n KTUtil.css(element, 'height', height + 'px');\n }\n\n if (options.desktopNativeScroll) {\n KTUtil.css(element, 'overflow', 'auto');\n return;\n }\n\n // Pass options via HTML Attributes\n if (KTUtil.attr(element, 'data-window-scroll') == 'true') {\n options.windowScroll = true;\n }\n\n // Init scroll\n ps = KTUtil.data(element).get('ps');\n\n if (ps) {\n ps.update();\n } else {\n KTUtil.css(element, 'overflow', 'hidden');\n KTUtil.addClass(element, 'scroll');\n\n ps = new PerfectScrollbar(element, options);\n\n KTUtil.data(element).set('ps', ps);\n }\n\n // Remember scroll position in cookie\n var uid = KTUtil.attr(element, 'id');\n\n // Todo:Consider using Localstorage\n if (options.rememberPosition === true && KTCookie && uid) {\n if (KTCookie.getCookie(uid)) {\n var pos = parseInt(KTCookie.getCookie(uid));\n\n if (pos > 0) {\n element.scrollTop = pos;\n }\n }\n\n element.addEventListener('ps-scroll-y', function() {\n KTCookie.setCookie(uid, element.scrollTop);\n });\n }\n }\n\n // Init\n init();\n\n // Handle window resize\n if (options.handleWindowResize) {\n KTUtil.addResizeHandler(function() {\n init();\n });\n }\n },\n\n scrollUpdate: function(element) {\n var ps = KTUtil.data(element).get('ps');\n if (ps) {\n ps.update();\n }\n },\n\n scrollUpdateAll: function(parent) {\n var scrollers = KTUtil.findAll(parent, '.ps');\n for (var i = 0, len = scrollers.length; i < len; i++) {\n KTUtil.scrollUpdate(scrollers[i]);\n }\n },\n\n scrollDestroy: function(element, resetAll) {\n var ps = KTUtil.data(element).get('ps');\n\n if (ps) {\n ps.destroy();\n ps = KTUtil.data(element).remove('ps');\n }\n\n if (element && resetAll) {\n element.style.setProperty('overflow', '');\n element.style.setProperty('height', '');\n }\n },\n\n filterBoolean: function(val) {\n // Convert string boolean\n\t\t\tif (val === true || val === 'true') {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (val === false || val === 'false') {\n\t\t\t\treturn false;\n\t\t\t}\n\n return val;\n },\n\n setHTML: function(el, html) {\n el.innerHTML = html;\n },\n\n getHTML: function(el) {\n if (el) {\n return el.innerHTML;\n }\n },\n\n getDocumentHeight: function() {\n var body = document.body;\n var html = document.documentElement;\n\n return Math.max( body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight );\n },\n\n getScrollTop: function() {\n return (document.scrollingElement || document.documentElement).scrollTop;\n },\n\n changeColor: function(col, amt) {\n\n var usePound = false;\n\n if (col[0] == \"#\") {\n col = col.slice(1);\n usePound = true;\n }\n\n var num = parseInt(col,16);\n\n var r = (num >> 16) + amt;\n\n if (r > 255) r = 255;\n else if (r < 0) r = 0;\n\n var b = ((num >> 8) & 0x00FF) + amt;\n\n if (b > 255) b = 255;\n else if (b < 0) b = 0;\n\n var g = (num & 0x0000FF) + amt;\n\n if (g > 255) g = 255;\n else if (g < 0) g = 0;\n\n return (usePound?\"#\":\"\") + (g | (b << 8) | (r << 16)).toString(16);\n\n },\n\n // Throttle function: Input as function which needs to be throttled and delay is the time interval in milliseconds\n throttle: function (timer, func, delay) {\n \t// If setTimeout is already scheduled, no need to do anything\n \tif (timer) {\n \t\treturn;\n \t}\n\n \t// Schedule a setTimeout after delay seconds\n \ttimer = setTimeout(function () {\n \t\tfunc();\n\n \t\t// Once setTimeout function execution is finished, timerId = undefined so that in
\n \t\t// the next scroll event function execution can be scheduled by the setTimeout\n \t\ttimer = undefined;\n \t}, delay);\n },\n\n // Debounce function: Input as function which needs to be debounced and delay is the debounced time in milliseconds\n debounce: function (timer, func, delay) {\n \t// Cancels the setTimeout method execution\n \tclearTimeout(timer)\n\n \t// Executes the func after delay time.\n \ttimer = setTimeout(func, delay);\n },\n\n btnWait: function(el, cls, message, disable) {\n if (!el) {\n return;\n }\n\n if (typeof disable !== 'undefined' && disable === true) {\n KTUtil.attr(el, \"disabled\", true);\n }\n\n if (cls) {\n KTUtil.addClass(el, cls);\n KTUtil.attr(el, \"wait-class\", cls);\n }\n\n if (message) {\n var caption = KTUtil.find(el, '.btn-caption');\n\n if (caption) {\n KTUtil.data(caption).set('caption', KTUtil.getHTML(caption));\n KTUtil.setHTML(caption, message);\n } else {\n KTUtil.data(el).set('caption', KTUtil.getHTML(el));\n KTUtil.setHTML(el, message);\n }\n }\n },\n\n btnRelease: function(el) {\n if (!el) {\n return;\n }\n\n /// Show loading state on button\n KTUtil.removeAttr(el, \"disabled\");\n\n if (KTUtil.hasAttr(el, \"wait-class\")) {\n KTUtil.removeClass(el, KTUtil.attr(el, \"wait-class\"));\n }\n\n var caption = KTUtil.find(el, '.btn-caption');\n\n if (caption && KTUtil.data(caption).has('caption')) {\n KTUtil.setHTML(caption, KTUtil.data(caption).get('caption'));\n } else if (KTUtil.data(el).has('caption')) {\n KTUtil.setHTML(el, KTUtil.data(el).get('caption'));\n }\n },\n\n isOffscreen: function(el, direction, offset) {\n offset = offset || 0;\n\n var windowWidth = KTUtil.getViewPort().width;\n var windowHeight = KTUtil.getViewPort().height;\n\n var top = KTUtil.offset(el).top;\n var height = KTUtil.outerHeight(el) + offset;\n var left = KTUtil.offset(el).left;\n var width = KTUtil.outerWidth(el) + offset;\n\n if (direction == 'bottom') {\n if (windowHeight < top + height) {\n return true;\n } else if (windowHeight > top + height * 1.5) {\n return true;\n }\n }\n\n if (direction == 'top') {\n if (top < 0) {\n return true;\n } else if (top > height) {\n return true;\n }\n }\n\n if (direction == 'left') {\n if (left < 0) {\n return true;\n } else if (left * 2 > width) {\n //console.log('left 2');\n //return true;\n }\n }\n\n if (direction == 'right') {\n if (windowWidth < left + width) {\n return true;\n } else {\n //console.log('right 2');\n //return true;\n }\n }\n\n return false;\n }\n }\n}();\n\n// webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = KTUtil;\n}\n\n// Initialize KTUtil class on document ready\nKTUtil.ready(function() {\n\tif (typeof KTAppSettings !== 'undefined') {\n\t\tKTUtil.init(KTAppSettings);\n\t} else {\n\t\tKTUtil.init();\n\t}\n});\n\n// CSS3 Transitions only after page load(.page-loading class added to body tag and remove with JS on page load)\nwindow.onload = function() {\n var result = KTUtil.getByTagName('body');\n if (result && result[0]) {\n KTUtil.removeClass(result[0], 'page-loading');\n }\n}\n\nexport default KTUtil;","\"use strict\";\n\nvar KTLayoutExamples = function() {\n\n var initDefaultMode = function(element) {\n var elements = element;\n if (typeof elements === 'undefined') {\n elements = document.querySelectorAll('.example:not(.example-compact):not(.example-hover):not(.example-basic)');\n }\n\n if (elements && elements.length > 0 ) {\n for (var i = 0; i < elements.length; ++i) {\n var example = elements[i];\n var copy = KTUtil.find(example, '.example-copy');\n\n if (copy) {\n var clipboard = new ClipboardJS(copy, {\n target: function(trigger) {\n var example = trigger.closest('.example');\n var el = KTUtil.find(example, '.example-code .tab-pane.active');\n\n if (!el) {\n el = KTUtil.find(example, '.example-code');\n }\n\n return el;\n }\n });\n\n clipboard.on('success', function(e) {\n KTUtil.addClass(e.trigger, 'example-copied');\n e.clearSelection();\n\n setTimeout(function() {\n KTUtil.removeClass(e.trigger, 'example-copied');\n }, 2000);\n });\n }\n }\n }\n }\n\n var initCompactMode = function(element) {\n var example,code,toggle,copy, clipboard;\n\n var elements = element;\n if (typeof elements === 'undefined') {\n var elements = document.querySelectorAll('.example.example-compact');\n }\n\n if (elements && elements.length > 0 ) {\n for (var i = 0; i < elements.length; ++i) {\n var example = elements[i];\n var toggle = KTUtil.find(example, '.example-toggle');\n var copy = KTUtil.find(example, '.example-copy');\n\n // Handle toggle\n KTUtil.addEvent(toggle, 'click', function() {\n var example = this.closest('.example');\n var code = KTUtil.find(example, '.example-code');\n var the = this;\n\n if (KTUtil.hasClass(this, 'example-toggled')) {\n KTUtil.slideUp(code, 300, function() {\n KTUtil.removeClass(the, 'example-toggled');\n KTUtil.removeClass(code, 'example-code-on');\n KTUtil.hide(code);\n });\n } else {\n KTUtil.addClass(code, 'example-code-on');\n KTUtil.addClass(this, 'example-toggled');\n KTUtil.slideDown(code, 300, function() {\n KTUtil.show(code);\n });\n }\n });\n\n // Handle copy\n if (copy) {\n var clipboard = new ClipboardJS(copy, {\n target: function(trigger) {\n var example = trigger.closest('.example');\n var el = KTUtil.find(example, '.example-code .tab-pane.active');\n\n if (!el) {\n el = KTUtil.find(example, '.example-code');\n }\n\n return el;\n }\n });\n\n clipboard.on('success', function(e) {\n KTUtil.addClass(e.trigger, 'example-copied');\n e.clearSelection();\n\n setTimeout(function() {\n KTUtil.removeClass(e.trigger, 'example-copied');\n }, 2000);\n });\n }\n }\n }\n }\n\n return {\n init: function(element, options) {\n initDefaultMode(element);\n initCompactMode(element);\n }\n };\n}();\n\n\n\nexport default KTLayoutExamples;","\"use strict\";\n\nimport KTUtil from \"./util\";\n\n// Component Definition\nvar KTOffcanvas = function(elementId, options) {\n // Main object\n var the = this;\n var init = false;\n\n // Get element object\n var element = KTUtil.getById(elementId);\n var body = KTUtil.getBody();\n\n if (!element) {\n return;\n }\n\n // Default options\n var defaultOptions = {\n attrCustom: ''\n };\n\n ////////////////////////////\n // ** Private Methods ** //\n ////////////////////////////\n\n var Plugin = {\n construct: function(options) {\n if (KTUtil.data(element).has('offcanvas')) {\n the = KTUtil.data(element).get('offcanvas');\n } else {\n // Reset offcanvas\n Plugin.init(options);\n\n // Build offcanvas\n Plugin.build();\n\n KTUtil.data(element).set('offcanvas', the);\n }\n\n return the;\n },\n\n init: function(options) {\n the.events = [];\n\n // merge default and user defined options\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\n\n the.classBase = the.options.baseClass;\n the.attrCustom = the.options.attrCustom;\n the.classShown = the.classBase + '-on';\n the.classOverlay = the.classBase + '-overlay';\n the.target;\n\n the.state = KTUtil.hasClass(element, the.classShown) ? 'shown' : 'hidden';\n },\n\n build: function() {\n // offcanvas toggle\n if (the.options.toggleBy) {\n if (typeof the.options.toggleBy === 'string') {\n KTUtil.addEvent(KTUtil.getById(the.options.toggleBy), 'click', function(e) {\n e.preventDefault();\n the.target = this;\n\n Plugin.toggle();\n });\n } else if (the.options.toggleBy && the.options.toggleBy[0]) {\n if (the.options.toggleBy[0].target) {\n for (var i in the.options.toggleBy) {\n KTUtil.addEvent(KTUtil.getById(the.options.toggleBy[i].target), 'click', function(e) {\n e.preventDefault();\n the.target = this;\n Plugin.toggle();\n });\n }\n } else {\n for (var i in the.options.toggleBy) {\n KTUtil.addEvent(KTUtil.getById(the.options.toggleBy[i]), 'click', function(e) {\n e.preventDefault();\n the.target = this;\n Plugin.toggle();\n });\n }\n }\n\n } else if (the.options.toggleBy && the.options.toggleBy.target) {\n KTUtil.addEvent( KTUtil.getById(the.options.toggleBy.target), 'click', function(e) {\n e.preventDefault();\n the.target = this;\n Plugin.toggle();\n });\n }\n }\n\n // offcanvas close\n var closeBy = KTUtil.getById(the.options.closeBy);\n if (closeBy) {\n KTUtil.addEvent(closeBy, 'click', function(e) {\n e.preventDefault();\n the.target = this;\n Plugin.hide();\n });\n }\n },\n\n isShown: function() {\n return (the.state == 'shown' ? true : false);\n },\n\n toggle: function() {;\n Plugin.eventTrigger('toggle');\n\n if (the.state == 'shown') {\n Plugin.hide();\n } else {\n Plugin.show();\n }\n },\n\n show: function() {\n if (the.state == 'shown') {\n return;\n }\n\n Plugin.eventTrigger('beforeShow');\n\n Plugin.toggleClass('show');\n\n // Offcanvas panel\n KTUtil.attr(body, 'data-offcanvas-' + the.classBase, 'on');\n KTUtil.addClass(element, the.classShown);\n\n if (the.attrCustom.length > 0) {\n KTUtil.attr(body, 'data-offcanvas-' + the.classCustom, 'on');\n //KTUtil.addClass(body, the.classCustom);\n }\n\n the.state = 'shown';\n\n if (the.options.overlay) {\n the.overlay = KTUtil.insertAfter(document.createElement('DIV') , element );\n KTUtil.addClass(the.overlay, the.classOverlay);\n\n KTUtil.addEvent(the.overlay, 'click', function(e) {\n //e.stopPropagation();\n e.preventDefault();\n Plugin.hide(the.target);\n });\n }\n\n Plugin.eventTrigger('afterShow');\n },\n\n hide: function() {\n if (the.state == 'hidden') {\n return;\n }\n\n Plugin.eventTrigger('beforeHide');\n\n Plugin.toggleClass('hide');\n\n KTUtil.removeAttr(body, 'data-offcanvas-' + the.classBase);\n KTUtil.removeClass(element, the.classShown);\n\n if (the.attrCustom.length > 0) {\n KTUtil.removeAttr(body, 'data-offcanvas-' + the.attrCustom);\n }\n\n the.state = 'hidden';\n\n if (the.options.overlay && the.overlay) {\n KTUtil.remove(the.overlay);\n }\n\n Plugin.eventTrigger('afterHide');\n },\n\n toggleClass: function(mode) {\n var id = KTUtil.attr(the.target, 'id');\n var toggleBy;\n\n if (the.options.toggleBy && the.options.toggleBy[0] && the.options.toggleBy[0].target) {\n for (var i in the.options.toggleBy) {\n if (the.options.toggleBy[i].target === id) {\n toggleBy = the.options.toggleBy[i];\n }\n }\n } else if (the.options.toggleBy && the.options.toggleBy.target) {\n toggleBy = the.options.toggleBy;\n }\n\n if (toggleBy) {\n var el = KTUtil.getById(toggleBy.target);\n\n if (mode === 'show') {\n KTUtil.addClass(el, toggleBy.state);\n }\n\n if (mode === 'hide') {\n KTUtil.removeClass(el, toggleBy.state);\n }\n }\n },\n\n eventTrigger: function(name, args) {\n for (var i = 0; i < the.events.length; i++) {\n var event = the.events[i];\n if (event.name == name) {\n if (event.one == true) {\n if (event.fired == false) {\n the.events[i].fired = true;\n return event.handler.call(this, the, args);\n }\n } else {\n return event.handler.call(this, the, args);\n }\n }\n }\n },\n\n addEvent: function(name, handler, one) {\n the.events.push({\n name: name,\n handler: handler,\n one: one,\n fired: false\n });\n }\n };\n\n //////////////////////////\n // ** Public Methods ** //\n //////////////////////////\n\n /**\n * Set default options\n * @param options\n */\n the.setDefaults = function(options) {\n defaultOptions = options;\n };\n\n /**\n * Check if canvas is shown\n * @returns {boolean}\n */\n the.isShown = function() {\n return Plugin.isShown();\n };\n\n /**\n * Set to hide the canvas\n */\n the.hide = function() {\n return Plugin.hide();\n };\n\n /**\n * Set to show the canvas\n */\n the.show = function() {\n return Plugin.show();\n };\n\n /**\n * Attach event\n * @param name\n * @param handler\n */\n the.on = function(name, handler) {\n return Plugin.addEvent(name, handler);\n };\n\n /**\n * Attach event that will be fired once\n * @param name\n * @param handler\n */\n the.one = function(name, handler) {\n return Plugin.addEvent(name, handler, true);\n };\n\n ///////////////////////////////\n // ** Plugin Construction ** //\n ///////////////////////////////\n\n // Run plugin\n Plugin.construct.apply(the, [options]);\n\n // Init done\n init = true;\n\n // Return plugin instance\n return the;\n};\n\n// webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = KTOffcanvas;\n}\n\nexport default KTOffcanvas;","\"use strict\";\n\nimport KTUtil from \"./util\";\n\n// Component Definition\nvar KTScrolltop = function(elementId, options) {\n // Main object\n var the = this;\n var init = false;\n\n // Get element object\n var element = KTUtil.getById(elementId);\n var body = KTUtil.getBody();\n\n if (!element) {\n return;\n }\n\n // Default options\n var defaultOptions = {\n offset: 300,\n speed: 6000\n };\n\n ////////////////////////////\n // ** Private Methods ** //\n ////////////////////////////\n\n var Plugin = {\n /**\n * Run plugin\n * @returns {mscrolltop}\n */\n construct: function(options) {\n if (KTUtil.data(element).has('scrolltop')) {\n the = KTUtil.data(element).get('scrolltop');\n } else {\n // reset scrolltop\n Plugin.init(options);\n\n // build scrolltop\n Plugin.build();\n\n KTUtil.data(element).set('scrolltop', the);\n }\n\n return the;\n },\n\n /**\n * Handles subscrolltop click toggle\n * @returns {mscrolltop}\n */\n init: function(options) {\n the.events = [];\n\n // merge default and user defined options\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\n },\n\n build: function() {\n var timer;\n\n window.addEventListener('scroll', function() {\n KTUtil.throttle(timer, function() {\n Plugin.handle();\n }, 200);\n });\n\n // handle button click\n KTUtil.addEvent(element, 'click', Plugin.scroll);\n },\n\n /**\n * Handles scrolltop click scrollTop\n */\n handle: function() {\n var pos = KTUtil.getScrollTop(); // current vertical position\n\n if (pos > the.options.offset) {\n if (body.hasAttribute('data-scrolltop') === false) {\n body.setAttribute('data-scrolltop', 'on');\n }\n } else {\n if (body.hasAttribute('data-scrolltop') === true) {\n body.removeAttribute('data-scrolltop');\n }\n }\n },\n\n /**\n * Handles scrolltop click scrollTop\n */\n scroll: function(e) {\n e.preventDefault();\n\n KTUtil.scrollTop(0, the.options.speed);\n },\n\n\n /**\n * Trigger events\n */\n eventTrigger: function(name, args) {\n for (var i = 0; i < the.events.length; i++) {\n var event = the.events[i];\n if (event.name == name) {\n if (event.one == true) {\n if (event.fired == false) {\n the.events[i].fired = true;\n return event.handler.call(this, the, args);\n }\n } else {\n return event.handler.call(this, the, args);\n }\n }\n }\n },\n\n addEvent: function(name, handler, one) {\n the.events.push({\n name: name,\n handler: handler,\n one: one,\n fired: false\n });\n }\n };\n\n //////////////////////////\n // ** Public Methods ** //\n //////////////////////////\n\n /**\n * Set default options\n */\n\n the.setDefaults = function(options) {\n defaultOptions = options;\n };\n\n /**\n * Get subscrolltop mode\n */\n the.on = function(name, handler) {\n return Plugin.addEvent(name, handler);\n };\n\n /**\n * Set scrolltop content\n * @returns {mscrolltop}\n */\n the.one = function(name, handler) {\n return Plugin.addEvent(name, handler, true);\n };\n\n ///////////////////////////////\n // ** Plugin Construction ** //\n ///////////////////////////////\n\n // Run plugin\n Plugin.construct.apply(the, [options]);\n\n // Init done\n init = true;\n\n // Return plugin instance\n return the;\n};\n\n// webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = KTScrolltop;\n}\n\nexport default KTScrolltop;","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=1&id=235e7fb0&prod&scoped=true&lang=css\"","\"use strict\";\n\nimport KTUtil from \"./util\";\n\n// Component Definition\nvar KTToggle = function(toggleElement, targetElement, options) {\n // Main object\n var the = this;\n var init = false;\n\n // Get element object\n var element = toggleElement;\n var target = targetElement;\n\n if (!element) {\n return;\n }\n\n // Default options\n var defaultOptions = {\n targetToggleMode: 'class' // class|attribute\n };\n\n ////////////////////////////\n // ** Private Methods ** //\n ////////////////////////////\n\n var Plugin = {\n /**\n * Construct\n */\n\n construct: function(options) {\n if (KTUtil.data(element).has('toggle')) {\n the = KTUtil.data(element).get('toggle');\n } else {\n // reset menu\n Plugin.init(options);\n\n // build menu\n Plugin.build();\n\n KTUtil.data(element).set('toggle', the);\n }\n\n return the;\n },\n\n /**\n * Handles subtoggle click toggle\n */\n init: function(options) {\n the.element = element;\n the.events = [];\n\n // Merge default and user defined options\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\n\n //alert(the.options.target.tagName);\n the.target = target;\n\n the.targetState = the.options.targetState;\n the.toggleState = the.options.toggleState;\n\n if (the.options.targetToggleMode == 'class') {\n the.state = KTUtil.hasClasses(the.target, the.targetState) ? 'on' : 'off';\n } else {\n the.state = KTUtil.hasAttr(the.target, 'data-' + the.targetState) ? KTUtil.attr(the.target, 'data-' + the.targetState) : 'off';\n }\n },\n\n /**\n * Setup toggle\n */\n build: function() {\n KTUtil.addEvent(element, 'mouseup', Plugin.toggle);\n },\n\n /**\n * Handles offcanvas click toggle\n */\n toggle: function(e) {\n Plugin.eventTrigger('beforeToggle');\n\n if (the.state == 'off') {\n Plugin.toggleOn();\n } else {\n Plugin.toggleOff();\n }\n\n Plugin.eventTrigger('afterToggle');\n\n e.preventDefault();\n\n return the;\n },\n\n /**\n * Handles toggle click toggle\n */\n toggleOn: function() {\n Plugin.eventTrigger('beforeOn');\n\n if (the.options.targetToggleMode == 'class') {\n KTUtil.addClass(the.target, the.targetState);\n } else {\n KTUtil.attr(the.target, 'data-' + the.targetState, 'on');\n }\n\n if (the.toggleState) {\n KTUtil.addClass(element, the.toggleState);\n }\n\n the.state = 'on';\n\n Plugin.eventTrigger('afterOn');\n\n Plugin.eventTrigger('toggle');\n\n return the;\n },\n\n /**\n * Handles toggle click toggle\n */\n toggleOff: function() {\n Plugin.eventTrigger('beforeOff');\n\n if (the.options.targetToggleMode == 'class') {\n KTUtil.removeClass(the.target, the.targetState);\n } else {\n KTUtil.removeAttr(the.target, 'data-' + the.targetState);\n }\n\n if (the.toggleState) {\n KTUtil.removeClass(element, the.toggleState);\n }\n\n the.state = 'off';\n\n Plugin.eventTrigger('afterOff');\n\n Plugin.eventTrigger('toggle');\n\n return the;\n },\n\n /**\n * Trigger events\n */\n eventTrigger: function(name) {\n for (var i = 0; i < the.events.length; i++) {\n var event = the.events[i];\n\n if (event.name == name) {\n if (event.one == true) {\n if (event.fired == false) {\n the.events[i].fired = true;\n return event.handler.call(this, the);\n }\n } else {\n return event.handler.call(this, the);\n }\n }\n }\n },\n\n addEvent: function(name, handler, one) {\n the.events.push({\n name: name,\n handler: handler,\n one: one,\n fired: false\n });\n\n return the;\n }\n };\n\n //////////////////////////\n // ** Public Methods ** //\n //////////////////////////\n\n /**\n * Set default options\n */\n\n the.setDefaults = function(options) {\n defaultOptions = options;\n };\n\n /**\n * Get toggle state\n */\n the.getState = function() {\n return the.state;\n };\n\n /**\n * Toggle\n */\n the.toggle = function() {\n return Plugin.toggle();\n };\n\n /**\n * Toggle on\n */\n the.toggleOn = function() {\n return Plugin.toggleOn();\n };\n\n /**\n * Toggle off\n */\n the.toggleOff = function() {\n return Plugin.toggleOff();\n };\n\n /**\n * Attach event\n * @returns {KTToggle}\n */\n the.on = function(name, handler) {\n return Plugin.addEvent(name, handler);\n };\n\n /**\n * Attach event that will be fired once\n * @returns {KTToggle}\n */\n the.one = function(name, handler) {\n return Plugin.addEvent(name, handler, true);\n };\n\n // Construct plugin\n Plugin.construct.apply(the, [options]);\n\n return the;\n};\n\n// webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = KTToggle;\n}\n\nexport default KTToggle;","var map = {\n\t\"./en.json\": \"d142\",\n\t\"./ko.json\": \"79d8\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"d041\";","export const country = [\n\n {\n \"label\": \"American Samoa\",\n \"name\": \"american-samoa\",\n \"value\": \"ASM\",\n \"infertext\": \"아메리칸사모아\",\n \"status\": true\n },\n\n {\n \"label\": \"Anguilla\",\n \"name\": \"anguilla\",\n \"value\": \"AIA\",\n \"infertext\": \"앵귈라\",\n \"status\": true\n },\n {\n \"label\": \"Antarctica\",\n \"name\": \"antarctica\",\n \"value\": \"ATA\",\n \"infertext\": \"남극\",\n \"status\": true\n },\n {\n \"label\": \"Bonaire, Sint Eustatius and Saba\",\n \"name\": \"bonaire\",\n \"value\": \"BES\",\n \"infertext\": \"카리브 네덜란드\",\n \"status\": true\n },\n\n {\n \"label\": \"Bouvet Island\",\n \"name\": \"bouvet-island\",\n \"value\": \"BVT\",\n \"infertext\": \"부베 섬\",\n \"status\": true\n },\n\n {\n \"label\": \"British Indian Ocean Territory (the)\",\n \"name\": \"british-indian\",\n \"value\": \"IOT\",\n \"infertext\": \"영국령 인도양 지역\",\n \"status\": true\n },\n {\n \"label\": \"Christmas Island\",\n \"name\": \"christmas-island\",\n \"value\": \"CXR\",\n \"infertext\": \"크리스마스 섬\",\n \"status\": true\n },\n {\n \"label\": \"Cocos (Keeling) Islands (the)\",\n \"name\": \"cocos-islands\",\n \"value\": \"CCK\",\n \"infertext\": \"코코스 제도\",\n \"status\": true\n },\n {\n \"label\": \"Curaçao\",\n \"name\": \"curacao\",\n \"value\": \"CUW\",\n \"infertext\": \"퀴라소\",\n \"status\": true\n },\n {\n \"label\": \"Falkland Islands (the) [Malvinas]\",\n \"name\": \"falkland-islands\",\n \"value\": \"FLK\",\n \"infertext\": \"포클랜드 제도\",\n \"status\": true\n },\n {\n \"label\": \"Faroe Islands (the)\",\n \"name\": \"faroe-islands\",\n \"value\": \"FRO\",\n \"infertext\": \"페로 제도\",\n \"status\": true\n },\n {\n \"label\": \"French Guiana\",\n \"name\": \"french-guiana\",\n \"value\": \"GUF\",\n \"infertext\": \"프랑스령 기아나\",\n \"status\": true\n },\n {\n \"label\": \"French Polynesia\",\n \"name\": \"french-polynesia\",\n \"value\": \"PYF\",\n \"infertext\": \"프랑스령 폴리네시아\",\n \"status\": true\n },\n\n {\n \"label\": \"French Southern Territories (the)\",\n \"name\": \"french-southern\",\n \"value\": \"ATF\",\n \"infertext\": \"프랑스령 남방 및 남극 지역\",\n \"status\": true\n },\n\n {\n \"label\": \"Gibraltar\",\n \"name\": \"gibraltar\",\n \"value\": \"GIB\",\n \"infertext\": \"지브롤터\",\n \"status\": true\n },\n {\n \"label\": \"Greenland\",\n \"name\": \"greenland\",\n \"value\": \"GRL\",\n \"infertext\": \"그린란드\",\n \"status\": true\n },\n {\n \"label\": \"Guadeloupe\",\n \"name\": \"guadeloupe\",\n \"value\": \"GLP\",\n \"infertext\": \"과들루프\",\n \"status\": true\n },\n {\n \"label\": \"Guernsey\",\n \"name\": \"guernsey\",\n \"value\": \"GGY\",\n \"infertext\": \"건지섬\",\n \"status\": true\n },\n {\n \"label\": \"Heard Island and McDonald Islands\",\n \"name\": \"heard-island\",\n \"value\": \"HMD\",\n \"infertext\": \"허드 맥도널드 제도\",\n \"status\": true\n },\n\n {\n \"label\": \"Holy See (the)\",\n \"name\": \"holy-see\",\n \"value\": \"VAT\",\n \"infertext\": \"바티칸 시국\",\n \"status\": true\n },\n\n {\n \"label\": \"Isle of Man\",\n \"name\": \"isle-of-man\",\n \"value\": \"IMN\",\n \"infertext\": \"맨섬\",\n \"status\": true\n },\n {\n \"label\": \"Jersey\",\n \"name\": \"jersey\",\n \"value\": \"JEY\",\n \"infertext\": \"저지섬\",\n \"status\": true\n },\n {\n \"label\": \"Kiribati\",\n \"name\": \"kiribati\",\n \"value\": \"KIR\",\n \"infertext\": \"키리바시\",\n \"status\": true\n },\n {\n \"label\": \"Macao\",\n \"name\": \"macao\",\n \"value\": \"MAC\",\n \"infertext\": \"마카오\",\n \"status\": true\n },\n {\n \"label\": \"Marshall Islands (the)\",\n \"name\": \"marshall-islands\",\n \"value\": \"MHL\",\n \"infertext\": \"마셜 제도\",\n \"status\": true\n },\n {\n \"label\": \"Martinique\",\n \"name\": \"martinique\",\n \"value\": \"MTQ\",\n \"infertext\": \"마르티니크\",\n \"status\": true\n },\n {\n \"label\": \"Mayotte\",\n \"name\": \"mayotte\",\n \"value\": \"MYT\",\n \"infertext\": \"마요트\",\n \"status\": true\n },\n {\n \"label\": \"Montenegro\",\n \"name\": \"montenegro\",\n \"value\": \"MNE\",\n \"infertext\": \"몬테네그로\",\n \"status\": true\n },\n\n {\n \"label\": \"Montserrat\",\n \"name\": \"montserrat\",\n \"value\": \"MSR\",\n \"infertext\": \"몬트세랫\",\n \"status\": true\n },\n {\n \"label\": \"New Caledonia\",\n \"name\": \"new-caledonia\",\n \"value\": \"NCL\",\n \"infertext\": \"누벨칼레도니\",\n \"status\": true\n },\n {\n \"label\": \"Niue\",\n \"name\": \"niue\",\n \"value\": \"NIU\",\n \"infertext\": \"니우에\",\n \"status\": true\n },\n\n {\n \"label\": \"Northern Mariana Islands (the)\",\n \"name\": \"northern-mariana-islands\",\n \"value\": \"MNP\",\n \"infertext\": \"북마리아나 제도\",\n \"status\": true\n },\n\n {\n \"label\": \"Pitcairn\",\n \"name\": \"pitcairn\",\n \"value\": \"PCN\",\n \"infertext\": \"핏케언 제도\",\n \"status\": true\n },\n {\n \"label\": \"Réunion\",\n \"name\": \"reunion\",\n \"value\": \"REU\",\n \"infertext\": \"레위니옹\",\n \"status\": true\n },\n\n {\n \"label\": \"Saint Barthélemy\",\n \"name\": \"saint-barthelemy\",\n \"value\": \"BLM\",\n \"infertext\": \"생바르텔레미\",\n \"status\": true\n },\n {\n \"label\": \"Saint Helena, Ascension and Tristan da Cunha\",\n \"name\": \"saint-helena\",\n \"value\": \"SHN\",\n \"infertext\": \"세인트헬레나\",\n \"status\": true\n },\n\n {\n \"label\": \"Saint Martin (French part)\",\n \"name\": \"saint-martin\",\n \"value\": \"MAF\",\n \"infertext\": \"생마르탱\",\n \"status\": true\n },\n {\n \"label\": \"Saint Pierre and Miquelon\",\n \"name\": \"saint-pierre-and-miquelon\",\n \"value\": \"SPM\",\n \"infertext\": \"생피에르 미클롱\",\n \"status\": true\n },\n {\n \"label\": \"Sint Maarten (Dutch part)\",\n \"name\": \"sint-maarten\",\n \"value\": \"SXM\",\n \"infertext\": \"신트마르턴\",\n \"status\": true\n },\n {\n \"label\": \"South Georgia and the South Sandwich Islands\",\n \"name\": \"south-georgia\",\n \"value\": \"SGS\",\n \"infertext\": \"사우스조지아 사우스샌드위치 제도\",\n \"status\": true\n },\n {\n \"label\": \"Svalbard and Jan Mayen\",\n \"name\": \"svalbard\",\n \"value\": \"SJM\",\n \"infertext\": \"스발바르 얀마옌\",\n \"status\": true\n },\n {\n \"label\": \"Timor-Leste\",\n \"name\": \"timor-leste\",\n \"value\": \"TLS\",\n \"infertext\": \"동티모르\",\n \"status\": true\n },\n {\n \"label\": \"Tokelau\",\n \"name\": \"tokelau\",\n \"value\": \"TKL\",\n \"infertext\": \"토켈라우\",\n \"status\": true\n },\n {\n \"label\": \"Tuvalu\",\n \"name\": \"tuvalu\",\n \"value\": \"TUV\",\n \"infertext\": \"투발루\",\n \"status\": true\n },\n {\n \"label\": \"United States Minor Outlying Islands (the)\",\n \"name\": \"united-states-minor-outlying-islands\",\n \"value\": \"UMI\",\n \"infertext\": \"미국령 군소 제도\",\n \"status\": true\n },\n {\n \"label\": \"Wallis and Futuna\",\n \"name\": \"wallis-and-futuna\",\n \"value\": \"WLF\",\n \"infertext\": \"왈리스 푸투나\",\n \"status\": true\n },\n\n {\n \"label\": \"South Sudan\",\n \"name\": \"south-sudan\",\n \"value\": \"SSD\",\n \"infertext\": \"남수단\",\n \"status\": true\n },\n\n {\n \"label\": \"Turks and Caicos Islands (the)\",\n \"name\": \"turks-and-caicos-islands\",\n \"value\": \"TCA\",\n \"infertext\": \"터크스 케이커스 제도\",\n \"status\": true\n },\n {\n \"label\": \"Western Sahara\",\n \"name\": \"western-sahara\",\n \"value\": \"ESH\",\n \"infertext\": \"서사하라\",\n \"status\": true\n },\n {\n \"label\": \"Åland Islands\",\n \"name\": \"aland-islands\",\n \"value\": \"ALA\",\n \"infertext\": \"올란드 제도\",\n \"status\": true\n },\n\n\n {\n \"label\": \"Afghanistan\",\n \"name\": \"afghanistan\",\n \"value\": \"AFG\",\n \"infertext\": \"아프가니스탄\",\n \"status\": true\n },\n\n {\n \"label\": \"Albania\",\n \"name\": \"albania\",\n \"value\": \"ALB\",\n \"infertext\": \"알바니아\",\n \"status\": true\n },\n {\n \"label\": \"Algeria\",\n \"name\": \"algeria\",\n \"value\": \"DZA\",\n \"infertext\": \"알제리\",\n \"status\": true\n },\n {\n \"label\": \"Andorra\",\n \"name\": \"andorra\",\n \"value\": \"AND\",\n \"infertext\": \"안도라\",\n \"status\": true\n },\n {\n \"label\": \"Angola\",\n \"name\": \"angola\",\n \"value\": \"AGO\",\n \"infertext\": \"앙골라\",\n \"status\": true\n },\n {\n \"label\": \"Antiguaand barbuda\",\n \"name\": \"antigua-and-barbuda\",\n \"value\": \"ATG\",\n \"infertext\": \"앤티과바부다\",\n \"status\": true\n },\n {\n \"label\": \"Argentina\",\n \"name\": \"argentina\",\n \"value\": \"ARG\",\n \"infertext\": \"아르헨티나\",\n \"status\": true\n },\n {\n \"label\": \"Armenia\",\n \"name\": \"armenia\",\n \"value\": \"ARM\",\n \"infertext\": \"아르메니아\",\n \"status\": true\n },\n {\n \"label\": \"Aruba\",\n \"name\": \"aruba\",\n \"value\": \"ABW\",\n \"infertext\": \"아루바\",\n \"status\": true\n },\n {\n \"label\": \"Samoa\",\n \"name\": \"samoa\",\n \"value\": \"WSM\",\n \"infertext\": \"사모아\",\n \"status\": true\n },\n {\n \"label\": \"Australia\",\n \"name\": \"australia\",\n \"value\": \"AUS\",\n \"infertext\": \"오스트레일리아\",\n \"status\": true\n },\n {\n \"label\": \"Austria\",\n \"name\": \"austria\",\n \"value\": \"AUT\",\n \"infertext\": \"오스트리아\",\n \"status\": true\n },\n {\n \"label\": \"Azerbaijan\",\n \"name\": \"azerbaijan\",\n \"value\": \"AZE\",\n \"infertext\": \"아제르바이잔\",\n \"status\": true\n },\n {\n \"label\": \"Bahamas\",\n \"name\": \"bahamas\",\n \"value\": \"BHS\",\n \"infertext\": \"바하마\",\n \"status\": true\n },\n {\n \"label\": \"Bangladesh\",\n \"name\": \"bangladesh\",\n \"value\": \"BGD\",\n \"infertext\": \"방글라데시\",\n \"status\": true\n },\n {\n \"label\": \"Barbados\",\n \"name\": \"barbados\",\n \"value\": \"BRB\",\n \"infertext\": \"바베이도즈\",\n \"status\": true\n },\n {\n \"label\": \"Burundi\",\n \"name\": \"burundi\",\n \"value\": \"BDI\",\n \"infertext\": \"부룬디\",\n \"status\": true\n },\n {\n \"label\": \"Belgium\",\n \"name\": \"belgium\",\n \"value\": \"BEL\",\n \"infertext\": \"벨기에\",\n \"status\": true\n },\n {\n \"label\": \"Benin\",\n \"name\": \"benin\",\n \"value\": \"BEN\",\n \"infertext\": \"베넹\",\n \"status\": true\n },\n {\n \"label\": \"Bermuda\",\n \"name\": \"bermuda\",\n \"value\": \"BMU\",\n \"infertext\": \"버뮤다\",\n \"status\": true\n },\n {\n \"label\": \"Bhutan\",\n \"name\": \"bhutan\",\n \"value\": \"BTN\",\n \"infertext\": \"부탄\",\n \"status\": true\n },\n {\n \"label\": \"Bosnia and herzegovina\",\n \"name\": \"bosnia-and-herzegovina\",\n \"value\": \"BIH\",\n \"infertext\": \"보스니아헤르체고비나\",\n \"status\": true\n },\n {\n \"label\": \"Belize\",\n \"name\": \"belize\",\n \"value\": \"BLZ\",\n \"infertext\": \"벨리즈\",\n \"status\": true\n },\n {\n \"label\": \"Belarus\",\n \"name\": \"belarus\",\n \"value\": \"BLR\",\n \"infertext\": \"벨라루스\",\n \"status\": true\n },\n {\n \"label\": \"Bolivia\",\n \"name\": \"bolivia\",\n \"value\": \"BOL\",\n \"infertext\": \"볼리비아\",\n \"status\": true\n },\n {\n \"label\": \"Botswana\",\n \"name\": \"botswana\",\n \"value\": \"BWA\",\n \"infertext\": \"보츠와나\",\n \"status\": true\n },\n {\n \"label\": \"Brazil\",\n \"name\": \"brazil\",\n \"value\": \"BRA\",\n \"infertext\": \"브라질\",\n \"status\": true\n },\n {\n \"label\": \"Bahrain\",\n \"name\": \"bahrain\",\n \"value\": \"BHR\",\n \"infertext\": \"바레인\",\n \"status\": true\n },\n {\n \"label\": \"Brunei\",\n \"name\": \"brunei\",\n \"value\": \"BRN\",\n \"infertext\": \"브루나이\",\n \"status\": true\n },\n {\n \"label\": \"Bulgaria\",\n \"name\": \"bulgaria\",\n \"value\": \"BGR\",\n \"infertext\": \"불가리아\",\n \"status\": true\n },\n {\n \"label\": \"Burkina Faso\",\n \"name\": \"burkina-faso\",\n \"value\": \"BFA\",\n \"infertext\": \"부르키나파소\",\n \"status\": true\n },\n {\n \"label\": \"Central African Republic (the)\",\n \"name\": \"central-african-republic\",\n \"value\": \"CAF\",\n \"infertext\": \"중앙아프리카공화국\",\n \"status\": true\n },\n {\n \"label\": \"Cambodia\",\n \"name\": \"cambodia\",\n \"value\": \"KHM\",\n \"infertext\": \"캄보디아\",\n \"status\": true\n },\n {\n \"label\": \"Canada\",\n \"name\": \"canada\",\n \"value\": \"CAN\",\n \"infertext\": \"캐나다\",\n \"status\": true\n },\n {\n \"label\": \"Cayman\",\n \"name\": \"cayman-islands\",\n \"value\": \"CYM\",\n \"infertext\": \"케이먼 제도\",\n \"status\": true\n },\n {\n \"label\": \"Congo (the)\",\n \"name\": \"republic-of-the-congo\",\n \"value\": \"COG\",\n \"infertext\": \"콩고\",\n \"status\": true\n },\n\n {\n \"label\": \"Chad\",\n \"name\": \"chad\",\n \"value\": \"TCD\",\n \"infertext\": \"차드\",\n \"status\": true\n },\n {\n \"label\": \"Chile\",\n \"name\": \"chile\",\n \"value\": \"CHL\",\n \"infertext\": \"칠레\",\n \"status\": true\n },\n {\n \"label\": \"China\",\n \"name\": \"china\",\n \"value\": \"CHN\",\n \"infertext\": \"중국 中文 中国 中华人民共和国\",\n \"status\": true\n },\n {\n \"label\": \"Côte d'Ivoire\",\n \"name\": \"coted_d_ivoire\",\n \"value\": \"CIV\",\n \"infertext\": \"코트디부아르\",\n \"status\": true\n },\n {\n \"label\": \"Cameroon\",\n \"name\": \"cameroon\",\n \"value\": \"CMR\",\n \"infertext\": \"카메룬\",\n \"status\": true\n },\n {\n \"label\": \"Congo (the Democratic Republic of the)\",\n \"name\": \"democratic-republic-of-congo\",\n \"value\": \"COD\",\n \"infertext\": \"콩고민주공화국\",\n \"status\": true\n },\n {\n \"label\": \"Cook Islands (the)\",\n \"name\": \"cook-islands\",\n \"value\": \"COK\",\n \"infertext\": \"쿡\",\n \"status\": true\n },\n {\n \"label\": \"Colombia\",\n \"name\": \"colombia\",\n \"value\": \"COL\",\n \"infertext\": \"콜롬비아\",\n \"status\": true\n },\n {\n \"label\": \"Comoros (the)\",\n \"name\": \"comoros\",\n \"value\": \"COM\",\n \"infertext\": \"코모로\",\n \"status\": true\n },\n {\n \"label\": \"Cabo Verde\",\n \"name\": \"cape-verde\",\n \"value\": \"CPV\",\n \"infertext\": \"케이프베르데\",\n \"status\": true\n },\n {\n \"label\": \"Costa Rica\",\n \"name\": \"costa-rica\",\n \"value\": \"CRI\",\n \"infertext\": \"코스타리카\",\n \"status\": true\n },\n {\n \"label\": \"Croatia\",\n \"name\": \"croatia\",\n \"value\": \"HRV\",\n \"infertext\": \"크로아티아\",\n \"status\": true\n },\n {\n \"label\": \"Cuba\",\n \"name\": \"cuba\",\n \"value\": \"CUB\",\n \"infertext\": \"쿠바\",\n \"status\": true\n },\n {\n \"label\": \"Cyprus\",\n \"name\": \"cyprus\",\n \"value\": \"CYP\",\n \"infertext\": \"키프러스\",\n \"status\": true\n },\n {\n \"label\": \"Czechia\",\n \"name\": \"czech-republic\",\n \"value\": \"CZE\",\n \"infertext\": \"체코\",\n \"status\": true\n },\n {\n \"label\": \"Denmark\",\n \"name\": \"denmark\",\n \"value\": \"DNK\",\n \"infertext\": \"덴마크\",\n \"status\": true\n },\n {\n \"label\": \"Djibouti\",\n \"name\": \"djibouti\",\n \"value\": \"DJI\",\n \"infertext\": \"지부티\",\n \"status\": true\n },\n {\n \"label\": \"Dominica\",\n \"name\": \"dominica\",\n \"value\": \"DMA\",\n \"infertext\": \"도미니카 연방\",\n \"status\": true\n },\n {\n \"label\": \"Dominican Republic (the)\",\n \"name\": \"dominican-republic\",\n \"value\": \"DOM\",\n \"infertext\": \"도미니카 공화국\",\n \"status\": true\n },\n {\n \"label\": \"Ecuador\",\n \"name\": \"ecuador\",\n \"value\": \"ECU\",\n \"infertext\": \"에콰도르\",\n \"status\": true\n },\n {\n \"label\": \"Egypt\",\n \"name\": \"egypt\",\n \"value\": \"EGY\",\n \"infertext\": \"이집트\",\n \"status\": true\n },\n {\n \"label\": \"Eritrea\",\n \"name\": \"eritrea\",\n \"value\": \"ERI\",\n \"infertext\": \"에리트레아\",\n \"status\": true\n },\n {\n \"label\": \"El Salvador\",\n \"name\": \"el-salvador\",\n \"value\": \"SLV\",\n \"infertext\": \"엘살바도르\",\n \"status\": true\n },\n {\n \"label\": \"Spain\",\n \"name\": \"spain\",\n \"value\": \"ESP\",\n \"infertext\": \"스페인 Español español\",\n \"status\": true\n },\n {\n \"label\": \"Estonia\",\n \"name\": \"estonia\",\n \"value\": \"EST\",\n \"infertext\": \"에스토니아\",\n \"status\": true\n },\n {\n \"label\": \"Ethiopia\",\n \"name\": \"ethiopia\",\n \"value\": \"ETH\",\n \"infertext\": \"에티오피아\",\n \"status\": true\n },\n {\n \"label\": \"Fiji\",\n \"name\": \"fiji\",\n \"value\": \"FJI\",\n \"infertext\": \"피지\",\n \"status\": true\n },\n {\n \"label\": \"Finland\",\n \"name\": \"finland\",\n \"value\": \"FIN\",\n \"infertext\": \"핀란드\",\n \"status\": true\n },\n {\n \"label\": \"France\",\n \"name\": \"france\",\n \"value\": \"FRA\",\n \"infertext\": \"프랑스\",\n \"status\": true\n },\n {\n \"label\": \"Micronesia\",\n \"name\": \"micronesia\",\n \"value\": \"FSM\",\n \"infertext\": \"미크로네시아\",\n \"status\": true\n },\n {\n \"label\": \"Gabon\",\n \"name\": \"gabon\",\n \"value\": \"GAB\",\n \"infertext\": \"가봉\",\n \"status\": true\n },\n {\n \"label\": \"Gambia\",\n \"name\": \"gambia\",\n \"value\": \"GMB\",\n \"infertext\": \"감비아\",\n \"status\": true\n },\n {\n \"label\": \"United Kingdom of Great Britain and Northern Ireland (the)\",\n \"name\": \"united-kingdom\",\n \"value\": \"GBR\",\n \"infertext\": \"영국\",\n \"status\": true\n },\n {\n \"label\": \"Guinea Bissau\",\n \"name\": \"guinea-bissau\",\n \"value\": \"GNB\",\n \"infertext\": \"기니비사우\",\n \"status\": true\n },\n {\n \"label\": \"Georgia\",\n \"name\": \"georgia\",\n \"value\": \"GEO\",\n \"infertext\": \"조지아\",\n \"status\": true\n },\n {\n \"label\": \"Equatorial Guinea\",\n \"name\": \"equatorial-guinea\",\n \"value\": \"GNQ\",\n \"infertext\": \"적도 기니\",\n \"status\": true\n },\n {\n \"label\": \"Germany\",\n \"name\": \"germany\",\n \"value\": \"DEU\",\n \"infertext\": \"독일\",\n \"status\": true\n },\n {\n \"label\": \"Ghana\",\n \"name\": \"ghana\",\n \"value\": \"GHA\",\n \"infertext\": \"가나\",\n \"status\": true\n },\n {\n \"label\": \"Greece\",\n \"name\": \"greece\",\n \"value\": \"GRC\",\n \"infertext\": \"그리스\",\n \"status\": true\n },\n {\n \"label\": \"Grenada\",\n \"name\": \"grenada\",\n \"value\": \"GRD\",\n \"infertext\": \"그레나다\",\n \"status\": true\n },\n {\n \"label\": \"Guatemala\",\n \"name\": \"guatemala\",\n \"value\": \"GTM\",\n \"infertext\": \"과테말라\",\n \"status\": true\n },\n {\n \"label\": \"Guinea\",\n \"name\": \"guinea\",\n \"value\": \"GIN\",\n \"infertext\": \"기니\",\n \"status\": true\n },\n {\n \"label\": \"Guam\",\n \"name\": \"guam\",\n \"value\": \"GUM\",\n \"infertext\": \"괌\",\n \"status\": true\n },\n {\n \"label\": \"Guyana\",\n \"name\": \"guyana\",\n \"value\": \"GUY\",\n \"infertext\": \"가이아나\",\n \"status\": true\n },\n {\n \"label\": \"Haiti\",\n \"name\": \"haiti\",\n \"value\": \"HTI\",\n \"infertext\": \"아이티\",\n \"status\": true\n },\n {\n \"label\": \"Hong Kong\",\n \"name\": \"hong-kong\",\n \"value\": \"HKG\",\n \"infertext\": \"홍콩\",\n \"status\": true\n },\n {\n \"label\": \"Honduras\",\n \"name\": \"honduras\",\n \"value\": \"HND\",\n \"infertext\": \"온두라스\",\n \"status\": true\n },\n {\n \"label\": \"Hungary\",\n \"name\": \"hungary\",\n \"value\": \"HUN\",\n \"infertext\": \"헝가리\",\n \"status\": true\n },\n {\n \"label\": \"Indonesia\",\n \"name\": \"indonesia\",\n \"value\": \"IDN\",\n \"infertext\": \"인도네시아\",\n \"status\": true\n },\n {\n \"label\": \"India\",\n \"name\": \"india\",\n \"value\": \"IND\",\n \"infertext\": \"인도\",\n \"status\": true\n },\n {\n \"label\": \"Iran\",\n \"name\": \"iran\",\n \"value\": \"IRN\",\n \"infertext\": \"이란\",\n \"status\": false\n },\n {\n \"label\": \"Ireland\",\n \"name\": \"ireland\",\n \"value\": \"IRL\",\n \"infertext\": \"아일랜드\",\n \"status\": true\n },\n {\n \"label\": \"Iraq\",\n \"name\": \"iraq\",\n \"value\": \"IRQ\",\n \"infertext\": \"이라크\",\n \"status\": true\n },\n {\n \"label\": \"Iceland\",\n \"name\": \"iceland\",\n \"value\": \"ISL\",\n \"infertext\": \"아이슬란드\",\n \"status\": true\n },\n {\n \"label\": \"Israel\",\n \"name\": \"israel\",\n \"value\": \"ISR\",\n \"infertext\": \"이스라엘\",\n \"status\": true\n },\n {\n \"label\": \"Italy\",\n \"name\": \"italy\",\n \"value\": \"ITA\",\n \"infertext\": \"이탈리아\",\n \"status\": true\n },\n {\n \"label\": \"Virgin Islands (British)\",\n \"name\": \"british-virgin-islands\",\n \"value\": \"VGB\",\n \"infertext\": \"영국령 버진\",\n \"status\": true\n },\n {\n \"label\": \"Jamaica\",\n \"name\": \"jamaica\",\n \"value\": \"JAM\",\n \"infertext\": \"자메이카\",\n \"status\": true\n },\n {\n \"label\": \"Jordan\",\n \"name\": \"jordan\",\n \"value\": \"JOR\",\n \"infertext\": \"요르단\",\n \"status\": true\n },\n {\n \"label\": \"Japan\",\n \"name\": \"japan\",\n \"value\": \"JPN\",\n \"infertext\": \"일본 日本\",\n \"status\": true\n },\n {\n \"label\": \"Kazakhstan\",\n \"name\": \"kazakhstan\",\n \"value\": \"KAZ\",\n \"infertext\": \"카자흐스탄\",\n \"status\": true\n },\n {\n \"label\": \"Kenya\",\n \"name\": \"kenya\",\n \"value\": \"KEN\",\n \"infertext\": \"케냐\",\n \"status\": true\n },\n {\n \"label\": \"Kosovo\",\n \"name\": \"kosovo\",\n \"value\": \"XKX\",\n \"infertext\": \"코소보\",\n \"status\": true\n },\n {\n \"label\": \"Kyrgyzstan\",\n \"name\": \"kyrgyzstan\",\n \"value\": \"KGZ\",\n \"infertext\": \"키르기즈스탄\",\n \"status\": true\n },\n {\n \"label\": \"South Korea\",\n \"name\": \"south-korea\",\n \"value\": \"KOR\",\n \"infertext\": \"대한민국 한국\",\n \"status\": true\n },\n {\n \"label\": \"Saudi arabia\",\n \"name\": \"saudi-arabia\",\n \"value\": \"SAU\",\n \"infertext\": \"사우디아라비아\",\n \"status\": true\n },\n {\n \"label\": \"Kuwait\",\n \"name\": \"kuwait\",\n \"value\": \"KWT\",\n \"infertext\": \"쿠웨이트\",\n \"status\": true\n },\n {\n \"label\": \"Laos\",\n \"name\": \"laos\",\n \"value\": \"LAO\",\n \"infertext\": \"라오스\",\n \"status\": true\n },\n {\n \"label\": \"Latvia\",\n \"name\": \"latvia\",\n \"value\": \"LVA\",\n \"infertext\": \"라트비아\",\n \"status\": true\n },\n {\n \"label\": \"Libya\",\n \"name\": \"libya\",\n \"value\": \"LBY\",\n \"infertext\": \"리비아\",\n \"status\": true\n },\n {\n \"label\": \"Liberia\",\n \"name\": \"liberia\",\n \"value\": \"LBR\",\n \"infertext\": \"라이베리아\",\n \"status\": true\n },\n {\n \"label\": \"Saint Lucia\",\n \"name\": \"st-lucia\",\n \"value\": \"LCA\",\n \"infertext\": \"세인트루시아\",\n \"status\": true\n },\n {\n \"label\": \"Lesotho\",\n \"name\": \"lesotho\",\n \"value\": \"LSO\",\n \"infertext\": \"레소토\",\n \"status\": true\n },\n {\n \"label\": \"Lebanon\",\n \"name\": \"lebanon\",\n \"value\": \"LBN\",\n \"infertext\": \"레바논\",\n \"status\": true\n },\n {\n \"label\": \"Liechtenstein\",\n \"name\": \"liechtenstein\",\n \"value\": \"LIE\",\n \"infertext\": \"리히텐슈타인\",\n \"status\": true\n },\n {\n \"label\": \"Lithuania\",\n \"name\": \"lithuania\",\n \"value\": \"LTU\",\n \"infertext\": \"리투아니아\",\n \"status\": true\n },\n {\n \"label\": \"Luxembourg\",\n \"name\": \"luxembourg\",\n \"value\": \"LUX\",\n \"infertext\": \"룩셈부르크\",\n \"status\": true\n },\n {\n \"label\": \"Madagascar\",\n \"name\": \"madagascar\",\n \"value\": \"MDG\",\n \"infertext\": \"마다가스카르\",\n \"status\": true\n },\n {\n \"label\": \"Morocco\",\n \"name\": \"morocco\",\n \"value\": \"MAR\",\n \"infertext\": \"모로코\",\n \"status\": true\n },\n {\n \"label\": \"Malaysia\",\n \"name\": \"malaysia\",\n \"value\": \"MYS\",\n \"infertext\": \"말레이시아\",\n \"status\": true\n },\n {\n \"label\": \"Malawi\",\n \"name\": \"malawi\",\n \"value\": \"MWI\",\n \"infertext\": \"말라위\",\n \"status\": true\n },\n {\n \"label\": \"Moldova\",\n \"name\": \"moldova\",\n \"value\": \"MDA\",\n \"infertext\": \"몰도바\",\n \"status\": true\n },\n {\n \"label\": \"Maldives\",\n \"name\": \"maldives\",\n \"value\": \"MDV\",\n \"infertext\": \"몰디브\",\n \"status\": true\n },\n {\n \"label\": \"Mexico\",\n \"name\": \"mexico\",\n \"value\": \"MEX\",\n \"infertext\": \"멕시코\",\n \"status\": true\n },\n {\n \"label\": \"Mongolia\",\n \"name\": \"mongolia\",\n \"value\": \"MNG\",\n \"infertext\": \"몽골\",\n \"status\": true\n },\n {\n \"label\": \"Republic of North Macedonia\",\n \"name\": \"republic-of-macedonia\",\n \"value\": \"MKD\",\n \"infertext\": \"마케도니아\",\n \"status\": true\n },\n {\n \"label\": \"Mali\",\n \"name\": \"mali\",\n \"value\": \"MLI\",\n \"infertext\": \"말리\",\n \"status\": true\n },\n {\n \"label\": \"Malta\",\n \"name\": \"malta\",\n \"value\": \"MLT\",\n \"infertext\": \"몰타\",\n \"status\": true\n },\n {\n \"label\": \"Monaco\",\n \"name\": \"monaco\",\n \"value\": \"MCO\",\n \"infertext\": \"모나코\",\n \"status\": true\n },\n {\n \"label\": \"Mozambique\",\n \"name\": \"mozambique\",\n \"value\": \"MOZ\",\n \"infertext\": \"모잠비크\",\n \"status\": true\n },\n {\n \"label\": \"Mauritius\",\n \"name\": \"mauritius\",\n \"value\": \"MUS\",\n \"infertext\": \"모리셔스\",\n \"status\": true\n },\n {\n \"label\": \"Mauritania\",\n \"name\": \"mauritania\",\n \"value\": \"MRT\",\n \"infertext\": \"모리타니아\",\n \"status\": true\n },\n {\n \"label\": \"Myanmar\",\n \"name\": \"myanmar\",\n \"value\": \"MMR\",\n \"infertext\": \"미얀마\",\n \"status\": true\n },\n {\n \"label\": \"Namibia\",\n \"name\": \"namibia\",\n \"value\": \"NAM\",\n \"infertext\": \"나미비아\",\n \"status\": true\n },\n {\n \"label\": \"Nauru\",\n \"name\": \"nauru\",\n \"value\": \"NRU\",\n \"infertext\": \"나우루\",\n \"status\": true\n },\n {\n \"label\": \"Netherlands (the)\",\n \"name\": \"netherlands\",\n \"value\": \"NLD\",\n \"infertext\": \"네덜란드\",\n \"status\": true\n },\n\n {\n \"label\": \"Nepal\",\n \"name\": \"nepal\",\n \"value\": \"NPL\",\n \"infertext\": \"네팔\",\n \"status\": true\n },\n {\n \"label\": \"New Zealand\",\n \"name\": \"new-zealand\",\n \"value\": \"NZL\",\n \"infertext\": \"뉴질란드\",\n \"status\": true\n },\n {\n \"label\": \"Nicaragua\",\n \"name\": \"nicaragua\",\n \"value\": \"NIC\",\n \"infertext\": \"니카라과\",\n \"status\": true\n },\n {\n \"label\": \"Nigeria\",\n \"name\": \"nigeria\",\n \"value\": \"NGA\",\n \"infertext\": \"나이지리아\",\n \"status\": true\n },\n {\n \"label\": \"Niger\",\n \"name\": \"niger\",\n \"value\": \"NER\",\n \"infertext\": \"니제르\",\n \"status\": true\n },\n {\n \"label\": \"Norfolk\",\n \"name\": \"norfolk\",\n \"value\": \"NFK\",\n \"infertext\": \"노퍽\",\n \"status\": true\n },\n {\n \"label\": \"Norway\",\n \"name\": \"norway\",\n \"value\": \"NOR\",\n \"infertext\": \"노르웨이\",\n \"status\": true\n },\n {\n \"label\": \"Oman\",\n \"name\": \"oman\",\n \"value\": \"OMN\",\n \"infertext\": \"오만\",\n \"status\": true\n },\n {\n \"label\": \"Pakistan\",\n \"name\": \"pakistan\",\n \"value\": \"PAK\",\n \"infertext\": \"파키스탄\",\n \"status\": true\n },\n {\n \"label\": \"Panama\",\n \"name\": \"panama\",\n \"value\": \"PAN\",\n \"infertext\": \"파나마\",\n \"status\": true\n },\n {\n \"label\": \"Paraguay\",\n \"name\": \"paraguay\",\n \"value\": \"PRY\",\n \"infertext\": \"파라과이\",\n \"status\": true\n },\n {\n \"label\": \"Peru\",\n \"name\": \"peru\",\n \"value\": \"PER\",\n \"infertext\": \"페루\",\n \"status\": true\n },\n {\n \"label\": \"Philippines\",\n \"name\": \"philippines\",\n \"value\": \"PHL\",\n \"infertext\": \"필리핀 pilip\",\n \"status\": true\n },\n {\n \"label\": \"Palestine\",\n \"name\": \"palestine\",\n \"value\": \"PSE\",\n \"infertext\": \"팔레스타인\",\n \"status\": true\n },\n {\n \"label\": \"Palau\",\n \"name\": \"palau\",\n \"value\": \"PLW\",\n \"infertext\": \"팔라우\",\n \"status\": true\n },\n {\n \"label\": \"Papua New Guinea\",\n \"name\": \"papua-new-guinea\",\n \"value\": \"PNG\",\n \"infertext\": \"파푸아뉴기니\",\n \"status\": true\n },\n {\n \"label\": \"Poland\",\n \"name\": \"republic-of-poland\",\n \"value\": \"POL\",\n \"infertext\": \"폴란드\",\n \"status\": true\n },\n {\n \"label\": \"Portugal\",\n \"name\": \"portugal\",\n \"value\": \"PRT\",\n \"infertext\": \"포르투갈 portug português Português\",\n \"status\": true\n },\n {\n \"label\": \"North Korea\",\n \"name\": \"north-korea\",\n \"value\": \"PRK\",\n \"infertext\": \"북한\",\n \"status\": false\n },\n {\n \"label\": \"Puerto Rico\",\n \"name\": \"puerto-rico\",\n \"value\": \"PRI\",\n \"infertext\": \"푸에르토리코\",\n \"status\": true\n },\n {\n \"label\": \"Qatar\",\n \"name\": \"qatar\",\n \"value\": \"QAT\",\n \"infertext\": \"카타르\",\n \"status\": true\n },\n {\n \"label\": \"Romania\",\n \"name\": \"romania\",\n \"value\": \"ROU\",\n \"infertext\": \"루마니아\",\n \"status\": true\n },\n {\n \"label\": \"South Africa\",\n \"name\": \"south-africa\",\n \"value\": \"ZAF\",\n \"infertext\": \"남아프리카공화국\",\n \"status\": true\n },\n {\n \"label\": \"Russia\",\n \"name\": \"russia\",\n \"value\": \"RUS\",\n \"infertext\": \"러시아\",\n \"status\": true\n },\n {\n \"label\": \"Rwanda\",\n \"name\": \"rwanda\",\n \"value\": \"RWA\",\n \"infertext\": \"르완다\",\n \"status\": true\n },\n {\n \"label\": \"Serbia\",\n \"name\": \"serbia\",\n \"value\": \"SRB\",\n \"infertext\": \"세르비아\",\n \"status\": true\n },\n {\n \"label\": \"Senegal\",\n \"name\": \"senegal\",\n \"value\": \"SEN\",\n \"infertext\": \"세네갈\",\n \"status\": true\n },\n {\n \"label\": \"Seychelles\",\n \"name\": \"seychelles\",\n \"value\": \"SYC\",\n \"infertext\": \"세이셸\",\n \"status\": true\n },\n {\n \"label\": \"Singapore\",\n \"name\": \"singapore\",\n \"value\": \"SGP\",\n \"infertext\": \"싱가포르\",\n \"status\": true\n },\n {\n \"label\": \"Saint Kitts and Nevis\",\n \"name\": \"saint-kitts-and-nevis\",\n \"value\": \"KNA\",\n \"infertext\": \"세인트 키츠 앤 네비스\",\n \"status\": true\n },\n {\n \"label\": \"Sierra Leone\",\n \"name\": \"sierra-leone\",\n \"value\": \"SLE\",\n \"infertext\": \"시에라리온\",\n \"status\": true\n },\n {\n \"label\": \"Slovenia\",\n \"name\": \"slovenia\",\n \"value\": \"SVN\",\n \"infertext\": \"슬로베니아\",\n \"status\": true\n },\n {\n \"label\": \"San Marino\",\n \"name\": \"san-marino\",\n \"value\": \"SMR\",\n \"infertext\": \"산마리노\",\n \"status\": true\n },\n {\n \"label\": \"Solomon islands\",\n \"name\": \"solomon-islands\",\n \"value\": \"SLB\",\n \"infertext\": \"솔로몬\",\n \"status\": true\n },\n {\n \"label\": \"Somalia\",\n \"name\": \"somalia\",\n \"value\": \"SOM\",\n \"infertext\": \"소말리아\",\n \"status\": true\n },\n {\n \"label\": \"Sri Lanka\",\n \"name\": \"sri-lanka\",\n \"value\": \"LKA\",\n \"infertext\": \"스리랑카\",\n \"status\": true\n },\n {\n \"label\": \"Sao Tome And Principe\",\n \"name\": \"sao-tome-and-principe\",\n \"value\": \"STP\",\n \"infertext\": \"상투메 프린시페\",\n \"status\": true\n },\n {\n \"label\": \"Sudan\",\n \"name\": \"sudan\",\n \"value\": \"SDN\",\n \"infertext\": \"수단\",\n \"status\": true\n },\n {\n \"label\": \"Switzerland\",\n \"name\": \"switzerland\",\n \"value\": \"CHE\",\n \"infertext\": \"스위스\",\n \"status\": true\n },\n {\n \"label\": \"Suriname\",\n \"name\": \"suriname\",\n \"value\": \"SUR\",\n \"infertext\": \"수리남\",\n \"status\": true\n },\n {\n \"label\": \"Slovakia\",\n \"name\": \"slovakia\",\n \"value\": \"SVK\",\n \"infertext\": \"슬로바키아\",\n \"status\": true\n },\n {\n \"label\": \"Sweden\",\n \"name\": \"sweden\",\n \"value\": \"SWE\",\n \"infertext\": \"스웨덴\",\n \"status\": true\n },\n {\n \"label\": \"Swaziland\",\n \"name\": \"swaziland\",\n \"value\": \"SWZ\",\n \"infertext\": \"스와질랜드\",\n \"status\": true\n },\n {\n \"label\": \"Syria\",\n \"name\": \"syria\",\n \"value\": \"SYR\",\n \"infertext\": \"시리아\",\n \"status\": true\n },\n {\n \"label\": \"Tanzania\",\n \"name\": \"tanzania\",\n \"value\": \"TZA\",\n \"infertext\": \"탄자니아\",\n \"status\": true\n },\n {\n \"label\": \"Tonga\",\n \"name\": \"tonga\",\n \"value\": \"TON\",\n \"infertext\": \"통가\",\n \"status\": true\n },\n {\n \"label\": \"Thailand\",\n \"name\": \"thailand\",\n \"value\": \"THA\",\n \"infertext\": \"타이\",\n \"status\": true\n },\n {\n \"label\": \"Tajikistan\",\n \"name\": \"tadzhikistan\",\n \"value\": \"TJK\",\n \"infertext\": \"타지키스탄\",\n \"status\": true\n },\n {\n \"label\": \"Turkmenistan\",\n \"name\": \"turkmenistan\",\n \"value\": \"TKM\",\n \"infertext\": \"투르크메니스탄\",\n \"status\": true\n },\n {\n \"label\": \"Togo\",\n \"name\": \"togo\",\n \"value\": \"TGO\",\n \"infertext\": \"토고\",\n \"status\": true\n },\n {\n \"label\": \"Taiwan\",\n \"name\": \"taiwan\",\n \"value\": \"TWN\",\n \"infertext\": \"대만\",\n \"status\": true\n },\n {\n \"label\": \"Trinidad And Tobago\",\n \"name\": \"trinidad-and-tobago\",\n \"value\": \"TTO\",\n \"infertext\": \"트리니다드 토바고\",\n \"status\": true\n },\n {\n \"label\": \"Tunisia\",\n \"name\": \"tunisia\",\n \"value\": \"TUN\",\n \"infertext\": \"튀니지\",\n \"status\": true\n },\n {\n \"label\": \"Turkey\",\n \"name\": \"turkey\",\n \"value\": \"TUR\",\n \"infertext\": \"터키\",\n \"status\": true\n },\n {\n \"label\": \"United Arab Emirates (the)\",\n \"name\": \"united-arab-emirates\",\n \"value\": \"ARE\",\n \"infertext\": \"아랍 에미레이트\",\n \"status\": true\n },\n {\n \"label\": \"Uganda\",\n \"name\": \"uganda\",\n \"value\": \"UGA\",\n \"infertext\": \"우간다\",\n \"status\": true\n },\n {\n \"label\": \"Ukraine\",\n \"name\": \"ukraine\",\n \"value\": \"UKR\",\n \"infertext\": \"우크라이나\",\n \"status\": true\n },\n {\n \"label\": \"Uruguay\",\n \"name\": \"uruguay\",\n \"value\": \"URY\",\n \"infertext\": \"우루과이\",\n \"status\": true\n },\n {\n \"label\": \"United states\",\n \"name\": \"united-states\",\n \"value\": \"USA\",\n \"infertext\": \"미국 america America us US U.S USA usa\",\n \"status\": true\n },\n {\n \"label\": \"United States Virgin Islands\",\n \"name\": \"united-states-virgin-islands\",\n \"value\": \"VIR\",\n \"infertext\": \"버진\",\n \"status\": true\n },\n {\n \"label\": \"Uzbekistan\",\n \"name\": \"uzbekistn\",\n \"value\": \"UZB\",\n \"infertext\": \"우즈베키스탄 Uzbek\",\n \"status\": true\n },\n {\n \"label\": \"Vanuatu\",\n \"name\": \"vanuatu\",\n \"value\": \"VUT\",\n \"infertext\": \"바누아투\",\n \"status\": true\n },\n {\n \"label\": \"Venezuela\",\n \"name\": \"venezuela\",\n \"value\": \"VEN\",\n \"infertext\": \"베네수엘라\",\n \"status\": true\n },\n {\n \"label\": \"Vietnam\",\n \"name\": \"vietnam\",\n \"value\": \"VNM\",\n \"infertext\": \"베트남 Tiếng Việt việt viet\",\n \"status\": true\n },\n {\n \"label\": \"Saint Vincent and the Grenadines\",\n \"name\": \"st-vincent-and-the-grenadines\",\n \"value\": \"VCT\",\n \"infertext\": \"세인트 빈센트 그레나딘\",\n \"status\": true\n },\n {\n \"label\": \"Yemen\",\n \"name\": \"yemen\",\n \"value\": \"YEM\",\n \"infertext\": \"예멘\",\n \"status\": true\n },\n\n {\n \"label\": \"Zambia\",\n \"name\": \"zambia\",\n \"value\": \"ZMB\",\n \"infertext\": \"잠비아\",\n \"status\": true\n },\n {\n \"label\": \"Zimbabwe\",\n \"name\": \"zimbabwe\",\n \"value\": \"ZWE\",\n \"infertext\": \"짐바브웨\",\n \"status\": true\n }\n];\n\nexport default country;\n","\"use strict\";\n\nimport KTUtil from \"./util\";\n\n// Component Definition\nvar KTCard = function(elementId, options) {\n // Main object\n var the = this;\n var init = false;\n\n // Get element object\n var element = KTUtil.getById(elementId);\n var body = KTUtil.getBody();\n\n if (!element) {\n return;\n }\n\n // Default options\n var defaultOptions = {\n toggleSpeed: 400,\n sticky: {\n releseOnReverse: false,\n offset: 300,\n zIndex: 101\n }\n };\n\n ////////////////////////////\n // ** Private Methods ** //\n ////////////////////////////\n\n var Plugin = {\n /**\n * Construct\n */\n\n construct: function(options) {\n if (KTUtil.data(element).has('card')) {\n the = KTUtil.data(element).get('card');\n } else {\n // reset menu\n Plugin.init(options);\n\n // build menu\n Plugin.build();\n\n KTUtil.data(element).set('card', the);\n }\n\n return the;\n },\n\n /**\n * Init card\n */\n init: function(options) {\n the.element = element;\n the.events = [];\n\n // merge default and user defined options\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\n the.header = KTUtil.child(element, '.card-header');\n the.footer = KTUtil.child(element, '.card-footer');\n\n if (KTUtil.child(element, '.card-body')) {\n the.body = KTUtil.child(element, '.card-body');\n } else if (KTUtil.child(element, '.form')) {\n the.body = KTUtil.child(element, '.form');\n }\n },\n\n /**\n * Build Form Wizard\n */\n build: function() {\n // Remove\n var remove = KTUtil.find(the.header, '[data-card-tool=remove]');\n if (remove) {\n KTUtil.addEvent(remove, 'click', function(e) {\n e.preventDefault();\n Plugin.remove();\n });\n }\n\n // Reload\n var reload = KTUtil.find(the.header, '[data-card-tool=reload]');\n if (reload) {\n KTUtil.addEvent(reload, 'click', function(e) {\n e.preventDefault();\n Plugin.reload();\n });\n }\n\n // Toggle\n var toggle = KTUtil.find(the.header, '[data-card-tool=toggle]');\n if (toggle) {\n KTUtil.addEvent(toggle, 'click', function(e) {\n e.preventDefault();\n Plugin.toggle();\n });\n }\n },\n\n /**\n * Enable stickt mode\n */\n initSticky: function() {\n var lastScrollTop = 0;\n var offset = the.options.sticky.offset;\n\n if (!the.header) {\n return;\n }\n\n\t window.addEventListener('scroll', Plugin.onScrollSticky);\n },\n\n\t /**\n\t * Window scroll handle event for sticky card\n\t */\n\t onScrollSticky: function(e) {\n\t\t var offset = the.options.sticky.offset;\n\n\t\t if(isNaN(offset)) return;\n\n\t\t var st = KTUtil.getScrollTop();\n\n\t\t if (st >= offset && KTUtil.hasClass(body, 'card-sticky-on') === false) {\n\t\t\t Plugin.eventTrigger('stickyOn');\n\n\t\t\t KTUtil.addClass(body, 'card-sticky-on');\n\n\t\t\t Plugin.updateSticky();\n\n\t\t } else if ((st*1.5) <= offset && KTUtil.hasClass(body, 'card-sticky-on')) {\n\t\t\t // Back scroll mode\n\t\t\t Plugin.eventTrigger('stickyOff');\n\n\t\t\t KTUtil.removeClass(body, 'card-sticky-on');\n\n\t\t\t Plugin.resetSticky();\n\t\t }\n\t },\n\n updateSticky: function() {\n if (!the.header) {\n return;\n }\n\n var top;\n\n if (KTUtil.hasClass(body, 'card-sticky-on')) {\n if (the.options.sticky.position.top instanceof Function) {\n top = parseInt(the.options.sticky.position.top.call(this, the));\n } else {\n top = parseInt(the.options.sticky.position.top);\n }\n\n var left;\n if (the.options.sticky.position.left instanceof Function) {\n left = parseInt(the.options.sticky.position.left.call(this, the));\n } else {\n left = parseInt(the.options.sticky.position.left);\n }\n\n var right;\n if (the.options.sticky.position.right instanceof Function) {\n right = parseInt(the.options.sticky.position.right.call(this, the));\n } else {\n right = parseInt(the.options.sticky.position.right);\n }\n\n KTUtil.css(the.header, 'z-index', the.options.sticky.zIndex);\n KTUtil.css(the.header, 'top', top + 'px');\n KTUtil.css(the.header, 'left', left + 'px');\n KTUtil.css(the.header, 'right', right + 'px');\n }\n },\n\n resetSticky: function() {\n if (!the.header) {\n return;\n }\n\n if (KTUtil.hasClass(body, 'card-sticky-on') === false) {\n KTUtil.css(the.header, 'z-index', '');\n KTUtil.css(the.header, 'top', '');\n KTUtil.css(the.header, 'left', '');\n KTUtil.css(the.header, 'right', '');\n }\n },\n\n /**\n * Remove card\n */\n remove: function() {\n if (Plugin.eventTrigger('beforeRemove') === false) {\n return;\n }\n\n KTUtil.remove(element);\n\n Plugin.eventTrigger('afterRemove');\n },\n\n /**\n * Set content\n */\n setContent: function(html) {\n if (html) {\n the.body.innerHTML = html;\n }\n },\n\n /**\n * Get body\n */\n getBody: function() {\n return the.body;\n },\n\n /**\n * Get self\n */\n getSelf: function() {\n return element;\n },\n\n /**\n * Reload\n */\n reload: function() {\n Plugin.eventTrigger('reload');\n },\n\n /**\n * Toggle\n */\n toggle: function() {\n if (KTUtil.hasClass(element, 'card-collapse') || KTUtil.hasClass(element, 'card-collapsed')) {\n Plugin.expand();\n } else {\n Plugin.collapse();\n }\n },\n\n /**\n * Collapse\n */\n collapse: function() {\n if (Plugin.eventTrigger('beforeCollapse') === false) {\n return;\n }\n\n KTUtil.slideUp(the.body, the.options.toggleSpeed, function() {\n Plugin.eventTrigger('afterCollapse');\n });\n\n KTUtil.addClass(element, 'card-collapse');\n },\n\n /**\n * Expand\n */\n expand: function() {\n if (Plugin.eventTrigger('beforeExpand') === false) {\n return;\n }\n\n KTUtil.slideDown(the.body, the.options.toggleSpeed, function() {\n Plugin.eventTrigger('afterExpand');\n });\n\n KTUtil.removeClass(element, 'card-collapse');\n KTUtil.removeClass(element, 'card-collapsed');\n },\n\n /**\n * Trigger events\n */\n eventTrigger: function(name) {\n //KTUtil.triggerCustomEvent(name);\n for (var i = 0; i < the.events.length; i++) {\n var event = the.events[i];\n if (event.name == name) {\n if (event.one == true) {\n if (event.fired == false) {\n the.events[i].fired = true;\n return event.handler.call(this, the);\n }\n } else {\n return event.handler.call(this, the);\n }\n }\n }\n },\n\n addEvent: function(name, handler, one) {\n the.events.push({\n name: name,\n handler: handler,\n one: one,\n fired: false\n });\n\n return the;\n }\n };\n\n //////////////////////////\n // ** Public Methods ** //\n //////////////////////////\n\n /**\n * Set default options\n */\n\n the.setDefaults = function(options) {\n defaultOptions = options;\n };\n\n /**\n * Remove card\n */\n the.remove = function() {\n return Plugin.remove(html);\n };\n\n /**\n * Init sticky card\n */\n the.initSticky = function() {\n return Plugin.initSticky();\n };\n\n /**\n * Rerender sticky layout\n */\n the.updateSticky = function() {\n return Plugin.updateSticky();\n };\n\n /**\n * Reset the sticky\n */\n the.resetSticky = function() {\n return Plugin.resetSticky();\n };\n\n\t/**\n\t * Destroy sticky card\n\t */\n\tthe.destroySticky = function() {\n\t\tPlugin.resetSticky();\n\t\twindow.removeEventListener('scroll', Plugin.onScrollSticky);\n\t};\n\n /**\n * Reload card\n */\n the.reload = function() {\n return Plugin.reload();\n };\n\n /**\n * Set card content\n */\n the.setContent = function(html) {\n return Plugin.setContent(html);\n };\n\n /**\n * Toggle card\n */\n the.toggle = function() {\n return Plugin.toggle();\n };\n\n /**\n * Collapse card\n */\n the.collapse = function() {\n return Plugin.collapse();\n };\n\n /**\n * Expand card\n */\n the.expand = function() {\n return Plugin.expand();\n };\n\n /**\n * Get cardbody\n * @returns {jQuery}\n */\n the.getBody = function() {\n return Plugin.getBody();\n };\n\n /**\n * Get cardbody\n * @returns {jQuery}\n */\n the.getSelf = function() {\n return Plugin.getSelf();\n };\n\n /**\n * Attach event\n */\n the.on = function(name, handler) {\n return Plugin.addEvent(name, handler);\n };\n\n /**\n * Attach event that will be fired once\n */\n the.one = function(name, handler) {\n return Plugin.addEvent(name, handler, true);\n };\n\n // Construct plugin\n Plugin.construct.apply(the, [options]);\n\n return the;\n};\n\n// webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = KTCard;\n}\n\nexport default KTCard;","\"use strict\";\n\nvar KTLayoutHeader = function() {\n // Private properties\n var _element;\n var _elementForMobile;\n var _object;\n\n\t// Private functions\n // Get Height\n var _getHeight = function() {\n var height = 0;\n\n if (_element) {\n height = KTUtil.actualHeight(_element) + 1;\n }\n\n return height;\n }\n\n // Get Height\n var _getHeightForMobile = function() {\n var height;\n\n height = KTUtil.actualHeight(_elementForMobile);\n\n return height;\n }\n\n // Public Methods\n\treturn {\n\t\tinit: function(id, idForMobile) {\n _element = KTUtil.getById(id);\n _elementForMobile = KTUtil.getById(idForMobile);\n\n if (!_element) {\n return;\n }\n\t\t},\n\n isFixed: function() {\n return KTUtil.hasClass(KTUtil.getBody(), 'header-fixed')\n },\n\n isFixedForMobile: function() {\n return KTUtil.hasClass(KTUtil.getBody(), 'header-mobile-fixed')\n },\n\n getElement: function() {\n return _element;\n },\n\n getElementForMobile: function() {\n return _elementForMobile;\n },\n\n getHeader: function() {\n return _object;\n },\n\n getHeight: function() {\n return _getHeight();\n },\n\n getHeightForMobile: function() {\n return _getHeightForMobile();\n }\n\t};\n}();\n\n\n\nexport default KTLayoutHeader;","\"use strict\";\n\nimport KTUtil from \"./util\";\n// DOCS: https://javascript.info/cookie\n\n// Component Definition\nvar KTCookie = function() {\n return {\n // returns the cookie with the given name,\n // or undefined if not found\n getCookie: function(name) {\n var matches = document.cookie.match(new RegExp(\n \"(?:^|; )\" + name.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g, '\\\\$1') + \"=([^;]*)\"\n ));\n return matches ? decodeURIComponent(matches[1]) : undefined;\n },\n // Please note that a cookie value is encoded,\n // so getCookie uses a built-in decodeURIComponent function to decode it.\n setCookie: function(name, value, options) {\n if (!options) {\n options = {};\n }\n\n options = Object.assign({}, {path: '/'}, options);\n\n if (options.expires instanceof Date) {\n options.expires = options.expires.toUTCString();\n }\n\n var updatedCookie = encodeURIComponent(name) + \"=\" + encodeURIComponent(value);\n\n for (var optionKey in options) {\n if (!options.hasOwnProperty(optionKey)) {\n continue;\n }\n updatedCookie += \"; \" + optionKey;\n var optionValue = options[optionKey];\n if (optionValue !== true) {\n updatedCookie += \"=\" + optionValue;\n }\n }\n\n document.cookie = updatedCookie;\n },\n // To delete a cookie, we can call it with a negative expiration date:\n deleteCookie: function(name) {\n setCookie(name, \"\", {\n 'max-age': -1\n })\n }\n }\n}();\n\n// webpack support\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = KTCookie;\n}\n\nexport default KTCookie;","\"use strict\";\n\nvar KTLayoutHeaderMenu = function() {\n // Private properties\n\tvar _menuElement;\n var _menuObject;\n var _offcanvasElement;\n var _offcanvasObject;\n\n // Private functions\n\tvar _init = function() {\n\t\t_offcanvasObject = new KTOffcanvas(_offcanvasElement, {\n\t\t\toverlay: true,\n\t\t\tbaseClass: 'header-menu-wrapper',\n\t\t\tcloseBy: 'kt_header_menu_mobile_close_btn',\n\t\t\ttoggleBy: {\n\t\t\t\ttarget: 'kt_header_mobile_toggle',\n\t\t\t\tstate: 'mobile-toggle-active'\n\t\t\t}\n\t\t});\n\t\t\n\t\t_menuObject = new KTMenu(_menuElement, {\n\t\t\tsubmenu: {\n\t\t\t\tdesktop: 'dropdown',\n\t\t\t\ttablet: 'accordion',\n\t\t\t\tmobile: 'accordion'\n\t\t\t},\n\t\t\taccordion: {\n\t\t\t\tslideSpeed: 200, // accordion toggle slide speed in milliseconds\n\t\t\t\texpandAll: false // allow having multiple expanded accordions in the menu\n\t\t\t}\n\t\t});\n\n\t\t// Close aside offcanvas panel before page reload On tablet and mobile\n _menuObject.on('linkClick', function(menu) {\n if (KTUtil.isBreakpointDown('lg')) { // Tablet and mobile mode\n _offcanvasObject.hide(); // Hide offcanvas after general link click\n }\n });\n\t}\n\n // Public methods\n\treturn {\n init: function(menuId, offcanvasId) {\n _menuElement = KTUtil.getById(menuId);\n _offcanvasElement = KTUtil.getById(offcanvasId);\n\n if (!_menuElement) {\n return;\n }\n\n // Initialize menu\n _init();\n\t\t},\n\n\t\tgetMenuElement: function() {\n\t\t\treturn _menuElement;\n\t\t},\n\n getOffcanvasElement: function() {\n\t\t\treturn _offcanvasElement;\n\t\t},\n\n getMenu: function() {\n\t\t\treturn _menuObject;\n\t\t},\n\n\t\tpauseDropdownHover: function(time) {\n\t\t\tif (_menuObject) {\n\t\t\t\t_menuObject.pauseDropdownHover(time);\n\t\t\t}\n\t\t},\n\n getOffcanvas: function() {\n\t\t\treturn _offcanvasObject;\n\t\t},\n\n\t\tcloseMobileOffcanvas: function() {\n\t\t\tif (_menuObject && KTUtil.isMobileDevice()) {\n\t\t\t\t_offcanvasObject.hide();\n\t\t\t}\n\t\t}\n\t};\n}();\n\n\n\nexport default KTLayoutHeaderMenu;"],"sourceRoot":""}