\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","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar isRegExp = require('../internals/is-regexp');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar toLength = require('../internals/to-length');\nvar callRegExpExec = require('../internals/regexp-exec-abstract');\nvar regexpExec = require('../internals/regexp-exec');\nvar fails = require('../internals/fails');\n\nvar arrayPush = [].push;\nvar min = Math.min;\nvar MAX_UINT32 = 0xFFFFFFFF;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { return !RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'.split(/(b)*/)[1] == 'c' ||\n 'test'.split(/(?:)/, -1).length != 4 ||\n 'ab'.split(/(?:ab)*/).length != 2 ||\n '.'.split(/(.?)(.?)/).length != 4 ||\n '.'.split(/()()/).length > 1 ||\n ''.split(/.?/).length\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(requireObjectCoercible(this));\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (separator === undefined) return [string];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) {\n return nativeSplit.call(string, separator, lim);\n }\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy.lastIndex;\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(1));\n lastLength = match[0].length;\n lastLastIndex = lastIndex;\n if (output.length >= lim) break;\n }\n if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n }\n if (lastLastIndex === string.length) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output.length > lim ? output.slice(0, lim) : output;\n };\n // Chakra, V8\n } else if ('0'.split(undefined, 0).length) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : nativeSplit.call(this, separator, limit);\n };\n } else internalSplit = nativeSplit;\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = requireObjectCoercible(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== nativeSplit);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n}, !SUPPORTS_Y);\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