{"version":3,"sources":["webpack:///./src/@core/utils/filter.js","webpack:///./src/@core/libs/acl/utils.js","webpack:///./src/@core/libs/acl/index.js","webpack:///./src/@core/libs/i18n/utils.js","webpack:///./src/@core/libs/i18n/index.js","webpack:///./src/@core/utils/utils.js"],"names":["title","value","replacer","arguments","length","undefined","str","toString","arr","split","capitalizedArray","forEach","word","capitalized","charAt","toUpperCase","slice","push","join","avatarText","nameArray","map","can","action","subject","vm","getCurrentInstance","proxy","$can","canViewVerticalNavMenuLink","item","resource","canViewVerticalNavMenuGroup","hasAnyVisibleChild","children","some","i","canViewVerticalNavMenuHeader","canViewHorizontalNavMenuLink","canViewHorizontalNavMenuHeaderLink","canViewHorizontalNavMenuGroup","canViewHorizontalNavMenuHeaderGroup","grpOrItem","useUtils","_objectSpread","utils","t","key","$t","_","isObject","obj","_typeof","isToday","date","today","Date","getDate","getMonth","getFullYear","useRouter","state","reactive","route","$route","watch","r","toRefs","router","$router"],"mappings":"mUAKaA,EAAQ,SAACC,GAA0B,IAAnBC,EAAQC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,IACtC,IAAKF,EAAO,MAAO,GACnB,IAAMK,EAAML,EAAMM,WAEZC,EAAMF,EAAIG,MAAMP,GAChBQ,EAAmB,GAKzB,OAJAF,EAAIG,SAAQ,SAACC,GACX,IAAMC,EAAcD,EAAKE,OAAO,GAAGC,cAAgBH,EAAKI,MAAM,GAC9DN,EAAiBO,KAAKJ,MAEjBH,EAAiBQ,KAAK,MAGlBC,EAAa,SAAClB,GACzB,IAAKA,EAAO,MAAO,GACnB,IAAMmB,EAAYnB,EAAMQ,MAAM,KAC9B,OAAOW,EAAUC,KAAI,SAACT,GAAI,OAAKA,EAAKE,OAAO,GAAGC,iBAAeG,KAAK,M,wlBCZvDI,EAAM,SAACC,EAAQC,GAC1B,IAAMC,EAAKC,kCAAqBC,MAChC,OAAOF,EAAGG,MAAOH,EAAGG,KAAKL,EAAQC,IAStBK,EAA6B,SAACC,GACzC,OAAOR,EAAIQ,EAAKP,OAAQO,EAAKC,WAQlBC,EAA8B,SAACF,GAE1C,IAAMG,EAAqBH,EAAKI,SAASC,MAAK,SAACC,GAAC,OAC9Cd,EAAIc,EAAEb,OAAQa,EAAEL,aAKlB,OAAMD,EAAKP,QAAUO,EAAKC,SAGnBT,EAAIQ,EAAKP,OAAQO,EAAKC,WAAaE,EAFjCA,GAUEI,EAA+B,SAACP,GAC3C,OAAOR,EAAIQ,EAAKP,OAAQO,EAAKC,WAQlBO,EAA+B,SAACR,GAAI,OAC/CR,EAAIQ,EAAKP,OAAQO,EAAKC,WAOXQ,EAAqC,SAACT,GAAI,OACrDR,EAAIQ,EAAKP,OAAQO,EAAKC,WAQXS,EAAgC,SAACV,GAE5C,IAAMG,EAAqBH,EAAKI,SAASC,MAAK,SAACC,GAAC,OAC9Cd,EAAIc,EAAEb,OAAQa,EAAEL,aAKlB,OAAMD,EAAKP,QAAUO,EAAKC,SAGnBT,EAAIQ,EAAKP,OAAQO,EAAKC,WAAaE,EAFjCA,GAMEQ,EAAsC,SAACX,GAIlD,IAAMG,EAAqBH,EAAKI,SAASC,MAAK,SAACO,GAG7C,OAAOA,EAAUR,SACbM,EAA8BE,GAC9BJ,EAA6BI,MAKnC,OAAMZ,EAAKP,QAAUO,EAAKC,SAGnBT,EAAIQ,EAAKP,OAAQO,EAAKC,WAAaE,EAFjCA,GCtGEU,EAAW,WAAH,OAAAC,eAAA,GAChBC,K,sLCMQC,EAAI,SAACC,GAChB,IAAMtB,EAAKC,kCAAqBC,MAChC,OAAOF,EAAGuB,GAAKvB,EAAGuB,GAAGD,GAAOA,GAGjBE,EAAI,KCZJN,EAAW,WAAH,OAAAC,eAAA,GAChBC,K,4LCMQK,EAAW,SAACC,GAAG,MAAoB,WAAfC,eAAOD,IAA4B,OAARA,GAE/CE,EAAU,SAACC,GACtB,IAAMC,EAAQ,IAAIC,KAClB,OAEEF,EAAKG,YAAcF,EAAME,WACzBH,EAAKI,aAAeH,EAAMG,YAC1BJ,EAAKK,gBAAkBJ,EAAMI,eAkBpBC,EAAY,WACvB,IAAMnC,EAAKC,kCAAqBC,MAC1BkC,EAAQC,sBAAS,CACrBC,MAAOtC,EAAGuC,SAUZ,OAPAC,oBACE,kBAAMxC,EAAGuC,UACT,SAACE,GACCL,EAAME,MAAQG,KAIlBtB,8BAAA,GAAYuB,oBAAON,IAAM,IAAEO,OAAQ3C,EAAG4C","file":"js/chunk-0c23698b.a11d946f.js","sourcesContent":["import { isToday } from \"./utils\";\n\nexport const kFormatter = (num) =>\n num > 999 ? `${(num / 1000).toFixed(1)}k` : num;\n\nexport const title = (value, replacer = \" \") => {\n if (!value) return \"\";\n const str = value.toString();\n\n const arr = str.split(replacer);\n const capitalizedArray = [];\n arr.forEach((word) => {\n const capitalized = word.charAt(0).toUpperCase() + word.slice(1);\n capitalizedArray.push(capitalized);\n });\n return capitalizedArray.join(\" \");\n};\n\nexport const avatarText = (value) => {\n if (!value) return \"\";\n const nameArray = value.split(\" \");\n return nameArray.map((word) => word.charAt(0).toUpperCase()).join(\"\");\n};\n\n/**\n * Format and return date in Humanize format\n * Intl docs: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/format\n * Intl Constructor: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat\n * @param {String} value date to format\n * @param {Object} formatting Intl object to format with\n */\nexport const formatDate = (\n value,\n formatting = { month: \"short\", day: \"numeric\", year: \"numeric\" }\n) => {\n if (!value) return value;\n return new Intl.DateTimeFormat(\"en-US\", formatting).format(new Date(value));\n};\n\n/**\n * Return short human friendly month representation of date\n * Can also convert date to only time if date is of today (Better UX)\n * @param {String} value date to format\n * @param {Boolean} toTimeForCurrentDay Shall convert to time if day is today/current\n */\nexport const formatDateToMonthShort = (value, toTimeForCurrentDay = true) => {\n const date = new Date(value);\n let formatting = { month: \"short\", day: \"numeric\" };\n\n if (toTimeForCurrentDay && isToday(date)) {\n formatting = { hour: \"numeric\", minute: \"numeric\" };\n }\n\n return new Intl.DateTimeFormat(\"en-US\", formatting).format(new Date(value));\n};\n\n// Strip all the tags from markup and return plain text\nexport const filterTags = (value) => value.replace(/<\\/?[^>]+(>|$)/g, \"\");\n","import { getCurrentInstance } from \"@vue/composition-api\";\n\n/**\n * Returns ability result if ACL is configured or else just return true\n * Useful if you don't know if ACL is configured or not\n * Used in @core files to handle absence of ACL without errors\n * @param {String} action CASL Actions // https://casl.js.org/v4/en/guide/intro#basics\n * @param {String} subject CASL Subject // https://casl.js.org/v4/en/guide/intro#basics\n */\nexport const can = (action, subject) => {\n const vm = getCurrentInstance().proxy;\n return vm.$can ? vm.$can(action, subject) : true;\n};\n\n/**\n * Check if user can view item based on it's ability\n * Based on item's action and resource\n * @param {Object} item navigation object item\n */\n\nexport const canViewVerticalNavMenuLink = (item) => {\n return can(item.action, item.resource);\n};\n/**\n * Check if user can view item based on it's ability\n * Based on item's action and resource & Hide group if all of it's children are hidden\n * @param {Object} item navigation object item\n */\n// eslint-disable-next-line arrow-body-style\nexport const canViewVerticalNavMenuGroup = (item) => {\n // ! This same logic is used in canViewHorizontalNavMenuGroup and canViewHorizontalNavMenuHeaderGroup. So make sure to update logic in them as well\n const hasAnyVisibleChild = item.children.some((i) =>\n can(i.action, i.resource)\n );\n\n // If resource and action is defined in item => Return based on children visibility (Hide group if no child is visible)\n // Else check for ability using provided resource and action along with checking if has any visible child\n if (!(item.action && item.resource)) {\n return hasAnyVisibleChild;\n }\n return can(item.action, item.resource) && hasAnyVisibleChild;\n};\n\n/**\n * Check if user can view item based on it's ability\n * Based on item's action and resource\n * @param {Object} item navigation object item\n */\nexport const canViewVerticalNavMenuHeader = (item) => {\n return can(item.action, item.resource);\n};\n\n/**\n * Check if user can view item based on it's ability\n * Based on item's action and resource\n * @param {Object} item navigation object item\n */\nexport const canViewHorizontalNavMenuLink = (item) =>\n can(item.action, item.resource);\n\n/**\n * Check if user can view item based on it's ability\n * Based on item's action and resource\n * @param {Object} item navigation object item\n */\nexport const canViewHorizontalNavMenuHeaderLink = (item) =>\n can(item.action, item.resource);\n\n/**\n * Check if user can view item based on it's ability\n * Based on item's action and resource & Hide group if all of it's children are hidden\n * @param {Object} item navigation object item\n */\n// eslint-disable-next-line arrow-body-style\nexport const canViewHorizontalNavMenuGroup = (item) => {\n // ? Same logic as canViewVerticalNavMenuGroup\n const hasAnyVisibleChild = item.children.some((i) =>\n can(i.action, i.resource)\n );\n\n // If resource and action is defined in item => Return based on children visibility (Hide group if no child is visible)\n // Else check for ability using provided resource and action along with checking if has any visible child\n if (!(item.action && item.resource)) {\n return hasAnyVisibleChild;\n }\n return can(item.action, item.resource) && hasAnyVisibleChild;\n};\n\n// eslint-disable-next-line arrow-body-style\nexport const canViewHorizontalNavMenuHeaderGroup = (item) => {\n // ? Same logic as canViewVerticalNavMenuGroup but with extra content\n\n // eslint-disable-next-line arrow-body-style\n const hasAnyVisibleChild = item.children.some((grpOrItem) => {\n // If it have children => It's grp\n // Call ACL function based on grp/link\n return grpOrItem.children\n ? canViewHorizontalNavMenuGroup(grpOrItem)\n : canViewHorizontalNavMenuLink(grpOrItem);\n });\n\n // If resource and action is defined in item => Return based on children visibility (Hide group if no child is visible)\n // Else check for ability using provided resource and action along with checking if has any visible child\n if (!(item.action && item.resource)) {\n return hasAnyVisibleChild;\n }\n return can(item.action, item.resource) && hasAnyVisibleChild;\n};\n","import * as utils from \"./utils\";\n\nexport const useUtils = () => ({\n ...utils,\n});\n\nexport const _ = null;\n","import { getCurrentInstance } from \"@vue/composition-api\";\n\n/**\n * Returns translated string if i18n package is available to Vue\n * If i18n is not configured then it will simply return what is being passed\n * Useful if you don't know if i18n is configured or not\n * Used in @core files to handle absence of i18n without errors\n * @param {String} key i18n key to use for translation\n */\nexport const t = (key) => {\n const vm = getCurrentInstance().proxy;\n return vm.$t ? vm.$t(key) : key;\n};\n\nexport const _ = null;\n","import * as utils from \"./utils\";\n\nexport const useUtils = () => ({\n ...utils,\n});\n\nexport const _ = null;\n","import router from \"@/router\";\n// eslint-disable-next-line object-curly-newline\nimport {\n reactive,\n getCurrentInstance,\n watch,\n toRefs,\n} from \"@vue/composition-api\";\n\nexport const isObject = (obj) => typeof obj === \"object\" && obj !== null;\n\nexport const isToday = (date) => {\n const today = new Date();\n return (\n /* eslint-disable operator-linebreak */\n date.getDate() === today.getDate() &&\n date.getMonth() === today.getMonth() &&\n date.getFullYear() === today.getFullYear()\n /* eslint-enable */\n );\n};\n\nconst getRandomFromArray = (array) =>\n array[Math.floor(Math.random() * array.length)];\n\n// ? Light and Dark variant is not included\n// prettier-ignore\nexport const getRandomBsVariant = () => getRandomFromArray(['primary', 'secondary', 'success', 'warning', 'danger', 'info'])\n\nexport const isDynamicRouteActive = (route) => {\n const { route: resolvedRoute } = router.resolve(route);\n return resolvedRoute.path === router.currentRoute.path;\n};\n\n// Thanks: https://medium.com/better-programming/reactive-vue-routes-with-the-composition-api-18c1abd878d1\nexport const useRouter = () => {\n const vm = getCurrentInstance().proxy;\n const state = reactive({\n route: vm.$route,\n });\n\n watch(\n () => vm.$route,\n (r) => {\n state.route = r;\n }\n );\n\n return { ...toRefs(state), router: vm.$router };\n};\n\n/**\n * This is just enhancement over Object.extend [Gives deep extend]\n * @param {target} a Object which contains values to be overridden\n * @param {source} b Object which contains values to override\n */\n// export const objectExtend = (a, b) => {\n// // Don't touch 'null' or 'undefined' objects.\n// if (a == null || b == null) {\n// return a\n// }\n\n// Object.keys(b).forEach(key => {\n// if (Object.prototype.toString.call(b[key]) === '[object Object]') {\n// if (Object.prototype.toString.call(a[key]) !== '[object Object]') {\n// // eslint-disable-next-line no-param-reassign\n// a[key] = b[key]\n// } else {\n// // eslint-disable-next-line no-param-reassign\n// a[key] = objectExtend(a[key], b[key])\n// }\n// } else {\n// // eslint-disable-next-line no-param-reassign\n// a[key] = b[key]\n// }\n// })\n\n// return a\n// }\n"],"sourceRoot":""}