\r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LayoutContentRendererLeftDetached.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LayoutContentRendererLeftDetached.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LayoutContentRendererLeftDetached.vue?vue&type=template&id=96b62330&\"\nimport script from \"./LayoutContentRendererLeftDetached.vue?vue&type=script&lang=js&\"\nexport * from \"./LayoutContentRendererLeftDetached.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { isToday } from './utils'\r\n\r\nexport const kFormatter = num => (num > 999 ? `${(num / 1000).toFixed(1)}k` : num)\r\n\r\nexport const title = (value, replacer = ' ') => {\r\n if (!value) return ''\r\n const str = value.toString()\r\n\r\n const arr = str.split(replacer)\r\n const capitalizedArray = []\r\n arr.forEach(word => {\r\n const capitalized = word.charAt(0).toUpperCase() + word.slice(1)\r\n capitalizedArray.push(capitalized)\r\n })\r\n return capitalizedArray.join(' ')\r\n}\r\n\r\nexport const avatarText = value => {\r\n if (!value) return ''\r\n const nameArray = value.split(' ')\r\n return nameArray.map(word => word.charAt(0).toUpperCase()).join('')\r\n}\r\n\r\n/**\r\n * Format and return date in Humanize format\r\n * Intl docs: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/format\r\n * Intl Constructor: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat\r\n * @param {String} value date to format\r\n * @param {Object} formatting Intl object to format with\r\n */\r\nexport const formatDate = (value, formatting = { month: 'short', day: 'numeric', year: 'numeric' }) => {\r\n if (!value) return value\r\n return new Intl.DateTimeFormat('en-US', formatting).format(new Date(value))\r\n}\r\n\r\n/**\r\n * Return short human friendly month representation of date\r\n * Can also convert date to only time if date is of today (Better UX)\r\n * @param {String} value date to format\r\n * @param {Boolean} toTimeForCurrentDay Shall convert to time if day is today/current\r\n */\r\nexport const formatDateToMonthShort = (value, toTimeForCurrentDay = true) => {\r\n const date = new Date(value)\r\n let formatting = { month: 'short', day: 'numeric' }\r\n\r\n if (toTimeForCurrentDay && isToday(date)) {\r\n formatting = { hour: 'numeric', minute: 'numeric' }\r\n }\r\n\r\n return new Intl.DateTimeFormat('en-US', formatting).format(new Date(value))\r\n}\r\n\r\n// Strip all the tags from markup and return plain text\r\nexport const filterTags = value => value.replace(/<\\/?[^>]+(>|$)/g, '')\r\n","'use strict';\nvar toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.repeat` method implementation\n// https://tc39.github.io/ecma262/#sec-string.prototype.repeat\nmodule.exports = ''.repeat || function repeat(count) {\n var str = String(requireObjectCoercible(this));\n var result = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n return result;\n};\n","import { getCurrentInstance } from '@vue/composition-api'\r\n\r\n/**\r\n * Returns ability result if ACL is configured or else just return true\r\n * Useful if you don't know if ACL is configured or not\r\n * Used in @core files to handle absence of ACL without errors\r\n * @param {String} action CASL Actions // https://casl.js.org/v4/en/guide/intro#basics\r\n * @param {String} subject CASL Subject // https://casl.js.org/v4/en/guide/intro#basics\r\n */\r\nexport const can = (action, subject) => {\r\n const vm = getCurrentInstance().proxy\r\n return vm.$can ? vm.$can(action, subject) : true\r\n}\r\n\r\n/**\r\n * Check if user can view item based on it's ability\r\n * Based on item's action and resource\r\n * @param {Object} item navigation object item\r\n */\r\nexport const canViewVerticalNavMenuLink = item => can(item.action, item.resource)\r\n\r\n/**\r\n * Check if user can view item based on it's ability\r\n * Based on item's action and resource & Hide group if all of it's children are hidden\r\n * @param {Object} item navigation object item\r\n */\r\n// eslint-disable-next-line arrow-body-style\r\nexport const canViewVerticalNavMenuGroup = item => {\r\n // ! This same logic is used in canViewHorizontalNavMenuGroup and canViewHorizontalNavMenuHeaderGroup. So make sure to update logic in them as well\r\n const hasAnyVisibleChild = item.children.some(i => can(i.action, i.resource))\r\n\r\n // If resource and action is defined in item => Return based on children visibility (Hide group if no child is visible)\r\n // Else check for ability using provided resource and action along with checking if has any visible child\r\n if (!(item.action && item.resource)) {\r\n return hasAnyVisibleChild\r\n }\r\n return can(item.action, item.resource) && hasAnyVisibleChild\r\n}\r\n\r\n/**\r\n * Check if user can view item based on it's ability\r\n * Based on item's action and resource\r\n * @param {Object} item navigation object item\r\n */\r\nexport const canViewVerticalNavMenuHeader = item => can(item.action, item.resource)\r\n\r\n/**\r\n * Check if user can view item based on it's ability\r\n * Based on item's action and resource\r\n * @param {Object} item navigation object item\r\n */\r\nexport const canViewHorizontalNavMenuLink = item => can(item.action, item.resource)\r\n\r\n/**\r\n * Check if user can view item based on it's ability\r\n * Based on item's action and resource\r\n * @param {Object} item navigation object item\r\n */\r\nexport const canViewHorizontalNavMenuHeaderLink = item => can(item.action, item.resource)\r\n\r\n/**\r\n * Check if user can view item based on it's ability\r\n * Based on item's action and resource & Hide group if all of it's children are hidden\r\n * @param {Object} item navigation object item\r\n */\r\n// eslint-disable-next-line arrow-body-style\r\nexport const canViewHorizontalNavMenuGroup = item => {\r\n // ? Same logic as canViewVerticalNavMenuGroup\r\n const hasAnyVisibleChild = item.children.some(i => can(i.action, i.resource))\r\n\r\n // If resource and action is defined in item => Return based on children visibility (Hide group if no child is visible)\r\n // Else check for ability using provided resource and action along with checking if has any visible child\r\n if (!(item.action && item.resource)) {\r\n return hasAnyVisibleChild\r\n }\r\n return can(item.action, item.resource) && hasAnyVisibleChild\r\n}\r\n\r\n// eslint-disable-next-line arrow-body-style\r\nexport const canViewHorizontalNavMenuHeaderGroup = item => {\r\n // ? Same logic as canViewVerticalNavMenuGroup but with extra content\r\n\r\n // eslint-disable-next-line arrow-body-style\r\n const hasAnyVisibleChild = item.children.some(grpOrItem => {\r\n // If it have children => It's grp\r\n // Call ACL function based on grp/link\r\n return grpOrItem.children ? canViewHorizontalNavMenuGroup(grpOrItem) : canViewHorizontalNavMenuLink(grpOrItem)\r\n })\r\n\r\n // If resource and action is defined in item => Return based on children visibility (Hide group if no child is visible)\r\n // Else check for ability using provided resource and action along with checking if has any visible child\r\n if (!(item.action && item.resource)) {\r\n return hasAnyVisibleChild\r\n }\r\n return can(item.action, item.resource) && hasAnyVisibleChild\r\n}\r\n","import * as utils from './utils'\r\n\r\nexport const useUtils = () => ({\r\n ...utils,\r\n})\r\n\r\nexport const _ = null\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"app-content content\",class:[{'show-overlay': _vm.$store.state.app.shallShowOverlay}, typeof _vm.$route.meta == 'function' ? _vm.$route.meta(_vm.$route).contentClass: '']},[_c('div',{staticClass:\"content-overlay\"}),_c('div',{staticClass:\"header-navbar-shadow\"}),_c('div',{staticClass:\"content-wrapper\",class:_vm.contentWidth === 'boxed' ? 'container p-0' : null},[_vm._t(\"breadcrumb\",[_c('app-breadcrumb',[_c('template',{slot:\"bread-actions\"},[_vm._t(\"bread-actions\")],2)],2)]),_c('div',{staticClass:\"content-body\"},[_c('transition',{attrs:{\"name\":_vm.routerTransition,\"mode\":\"out-in\"}},[_vm._t(\"default\")],2)],1)],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n
\r\n \r\n\r\n\r\n\r\n","import mod from \"-!../../../../../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VerticalNavMenuLink.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VerticalNavMenuLink.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VerticalNavMenuLink.vue?vue&type=template&id=a6d777b0&\"\nimport script from \"./VerticalNavMenuLink.vue?vue&type=script&lang=js&\"\nexport * from \"./VerticalNavMenuLink.vue?vue&type=script&lang=js&\"\nimport style0 from \"./VerticalNavMenuLink.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.canViewVerticalNavMenuGroup(_vm.item) && _vm.isRoled(_vm.item))?_c('li',{staticClass:\"nav-item has-sub\",class:{\n 'open': _vm.isOpen,\n 'disabled': _vm.item.disabled,\n 'sidebar-group-active': _vm.isActive,\n }},[_c('b-link',{staticClass:\"d-flex align-items-center\",on:{\"click\":function () { return _vm.updateGroupOpen(!_vm.isOpen); }}},[_c('unicon',{attrs:{\"width\":\"18\",\"name\":_vm.item.icon || 'circle',\"fill\":\"#5E5873\"}}),_c('span',{staticClass:\"menu-title text-truncate\"},[_vm._v(_vm._s(_vm.item.title))]),(_vm.item.tag)?_c('b-badge',{staticClass:\"mr-1 ml-auto\",attrs:{\"pill\":\"\",\"variant\":_vm.item.tagVariant || 'primary'}},[_vm._v(\" \"+_vm._s(_vm.item.tag)+\" \")]):_vm._e()],1),_c('b-collapse',{staticClass:\"menu-content\",attrs:{\"tag\":\"ul\"},model:{value:(_vm.isOpen),callback:function ($$v) {_vm.isOpen=$$v},expression:\"isOpen\"}},_vm._l((_vm.item.children),function(child){return _c(_vm.resolveNavItemComponent(child),{key:child.header || child.title,ref:\"groupChild\",refInFor:true,tag:\"component\",attrs:{\"item\":child,\"isRoled\":_vm.isRoled(child)}})}),1)],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","// eslint-disable-next-line object-curly-newline\r\nimport { ref, watch, inject, computed } from '@vue/composition-api'\r\nimport store from '@/store'\r\nimport { isNavGroupActive } from '@core/layouts/utils'\r\n\r\nexport default function useVerticalNavMenuGroup(item) {\r\n // ------------------------------------------------\r\n // isVerticalMenuCollapsed\r\n // ------------------------------------------------\r\n const isVerticalMenuCollapsed = computed(() => store.state.verticalMenu.isVerticalMenuCollapsed)\r\n\r\n watch(isVerticalMenuCollapsed, val => {\r\n /* eslint-disable no-use-before-define */\r\n // * Handles case if routing is done outside of vertical menu\r\n // i.e. From Customizer Collapse or Using Link\r\n if (!isMouseHovered.value) {\r\n if (val) isOpen.value = false\r\n else if (!val && isActive.value) isOpen.value = true\r\n }\r\n /* eslint-enable */\r\n })\r\n\r\n // ------------------------------------------------\r\n // isMouseHovered\r\n // ------------------------------------------------\r\n const isMouseHovered = inject('isMouseHovered')\r\n\r\n // Collapse menu when menu is collapsed and show on open\r\n watch(isMouseHovered, val => {\r\n if (isVerticalMenuCollapsed.value) {\r\n // * we have used `val && val && isActive.value` to only open active menu on mouseEnter and close all menu on mouseLeave\r\n // * If we don't use `isActive.value` with `val` it can open other groups which are not active as well\r\n // eslint-disable-next-line no-use-before-define\r\n isOpen.value = val && isActive.value\r\n }\r\n })\r\n\r\n // ------------------------------------------------\r\n // openGroups\r\n // ------------------------------------------------\r\n const openGroups = inject('openGroups')\r\n\r\n // Collapse other groups if one group is opened\r\n watch(openGroups, currentOpenGroups => {\r\n const clickedGroup = currentOpenGroups[currentOpenGroups.length - 1]\r\n\r\n // If current group is not clicked group or current group is not active => Proceed with closing it\r\n // eslint-disable-next-line no-use-before-define\r\n if (clickedGroup !== item.title && !isActive.value) {\r\n // If clicked group is not child of current group\r\n // eslint-disable-next-line no-use-before-define\r\n if (!doesHaveChild(clickedGroup)) isOpen.value = false\r\n }\r\n })\r\n\r\n // ------------------------------------------------\r\n // isOpen\r\n // ------------------------------------------------\r\n const isOpen = ref(false)\r\n watch(isOpen, val => {\r\n // if group is opened push it to the array\r\n if (val) openGroups.value.push(item.title)\r\n })\r\n\r\n const updateGroupOpen = val => {\r\n // eslint-disable-next-line no-use-before-define\r\n isOpen.value = val\r\n }\r\n\r\n // ------------------------------------------------\r\n // isActive\r\n // ------------------------------------------------\r\n const isActive = ref(false)\r\n watch(isActive, val => {\r\n /*\r\n If menu is collapsed and not hovered(optional) then don't open group\r\n */\r\n if (val) {\r\n if (!isVerticalMenuCollapsed.value) isOpen.value = val\r\n } else {\r\n isOpen.value = val\r\n }\r\n })\r\n\r\n const updateIsActive = () => {\r\n isActive.value = isNavGroupActive(item.children)\r\n }\r\n\r\n // ------------------------------------------------\r\n // Other Methods\r\n // ------------------------------------------------\r\n\r\n const doesHaveChild = title => item.children.some(child => child.title === title)\r\n\r\n return {\r\n isOpen,\r\n isActive,\r\n updateGroupOpen,\r\n openGroups,\r\n isMouseHovered,\r\n updateIsActive,\r\n }\r\n}\r\n","export default {\r\n watch: {\r\n $route: {\r\n immediate: true,\r\n handler() {\r\n this.updateIsActive()\r\n },\r\n },\r\n },\r\n}\r\n","\r\n