\n\n\n\n\n\n","import mod from \"-!../../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VerticalNavMenuHeader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VerticalNavMenuHeader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VerticalNavMenuHeader.vue?vue&type=template&id=060b2f56&scoped=true&\"\nimport script from \"./VerticalNavMenuHeader.vue?vue&type=script&lang=js&\"\nexport * from \"./VerticalNavMenuHeader.vue?vue&type=script&lang=js&\"\nimport style0 from \"./VerticalNavMenuHeader.vue?vue&type=style&index=0&id=060b2f56&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"060b2f56\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../../../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VSlideXTransition } from 'vuetify/lib/components/transitions';\ninstallComponents(component, {VIcon,VImg,VSlideXTransition})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.canViewVerticalNavMenuHeader(_vm.item))?_c('v-subheader',[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.menuIsVerticalNavMini || (_vm.menuIsVerticalNavMini && _vm.isMouseHovered)),expression:\"!menuIsVerticalNavMini || (menuIsVerticalNavMini && isMouseHovered)\"}],staticClass:\"title-wrapper\",class:{'no-style': _vm.menuIsVerticalNavMini && !_vm.isMouseHovered}},[_c('span',[_vm._v(_vm._s(_vm.t(_vm.item.subheader)))])]),_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.menuIsVerticalNavMini && !_vm.isMouseHovered),expression:\"menuIsVerticalNavMini && !isMouseHovered\"}]},[_vm._v(\" \"+_vm._s(_vm.icons.mdiMinus)+\" \")])],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","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\n return vm.$i18n && 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 { 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\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 */\nexport const canViewVerticalNavMenuLink = item => 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 => can(i.action, i.resource))\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\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 => 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 canViewHorizontalNavMenuLink = item => 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 => 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 => can(i.action, i.resource))\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\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 ? canViewHorizontalNavMenuGroup(grpOrItem) : 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\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","\n \n \n {{ t(item.subheader) }}\n \n\n \n {{ icons.mdiMinus }}\n \n \n\n\n\n\n\n","import mod from \"-!../../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VerticalNavMenuSectionTitle.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VerticalNavMenuSectionTitle.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VerticalNavMenuSectionTitle.vue?vue&type=template&id=cdeeec96&scoped=true&\"\nimport script from \"./VerticalNavMenuSectionTitle.vue?vue&type=script&lang=js&\"\nexport * from \"./VerticalNavMenuSectionTitle.vue?vue&type=script&lang=js&\"\nimport style0 from \"./VerticalNavMenuSectionTitle.vue?vue&type=style&index=0&id=cdeeec96&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"cdeeec96\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../../../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VSubheader } from 'vuetify/lib/components/VSubheader';\ninstallComponents(component, {VIcon,VSubheader})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.canViewVerticalNavMenuGroup(_vm.item))?_c('v-list-group',{ref:\"refVListGroup\",staticClass:\"vertical-nav-menu-group\",class:[{'vertical-nav-menu-group-active': _vm.isActive} ].concat( _vm.rootThemeClasses),attrs:{\"value\":_vm.isGroupExpanded},on:{\"click\":function($event){return _vm.updateGroupOpen(!_vm.isOpen)}},scopedSlots:_vm._u([{key:\"prependIcon\",fn:function(){return [_c('v-icon',{class:{'alternate-icon-small': !_vm.item.icon}},[_vm._v(\" \"+_vm._s(_vm.item.icon || _vm.alternateIcon)+\" \")])]},proxy:true},{key:\"activator\",fn:function(){return [_c('v-list-item-title',[_vm._v(_vm._s(_vm.t(_vm.item.title)))]),(_vm.item.badge)?_c('v-list-item-action',{staticClass:\"flex-shrink-0\"},[_c('v-badge',{attrs:{\"color\":_vm.item.badgeColor,\"inline\":\"\",\"content\":_vm.item.badge}})],1):_vm._e()]},proxy:true}],null,false,4118705515)},_vm._l((_vm.item.children),function(child){return _c(_vm.resolveNavItemComponent(child),{key:child.subheader || child.title,tag:\"component\",attrs:{\"item\":child}})}),1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.canViewVerticalNavMenuLink(_vm.item))?_c('v-list-item',_vm._b({staticClass:\"vertical-nav-menu-link\",class:{'bg-gradient-primary white--text': _vm.isActive},attrs:{\"active-class\":\"bg-gradient-primary\"}},'v-list-item',_vm.linkProps,false),[_c('v-list-item-icon',[_c('v-icon',{class:{'alternate-icon-small': !_vm.item.icon},attrs:{\"color\":_vm.isActive ? 'white': null}},[_vm._v(\" \"+_vm._s(_vm.item.icon || _vm.alternateIcon)+\" \")])],1),_c('v-list-item-title',{class:{'white--text': _vm.isActive}},[_vm._v(\" \"+_vm._s(_vm.t(_vm.item.title))+\" \")]),(_vm.item.badge)?_c('v-list-item-action',{staticClass:\"flex-shrink-0\"},[_c('v-badge',{attrs:{\"color\":_vm.item.badgeColor,\"inline\":\"\",\"content\":_vm.item.badge}})],1):_vm._e()],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import router from '@/router'\nimport { isObject } from '@core/utils'\nimport { computed } from '@vue/composition-api'\n\nexport default () => {\n const navLinkProps = computed(() => item => {\n const props = {}\n\n // If route is string => it assumes => Create route object from route name\n // If route is not string => It assumes it's route object => returns route object\n if (item.to) {\n props.to = typeof item.to === 'string' ? { name: item.to } : item.to\n } else {\n props.href = item.href\n props.target = '_blank'\n props.rel = 'nofollow'\n }\n\n if (!props.target) props.target = item.target\n\n return props\n })\n\n /**\n * Return route name for navigation link\n * If link is string then it will assume it is route-name\n * IF link is object it will resolve the object and will return the link\n * @param {Object, String} link navigation link object/string\n */\n const resolveNavLinkRouteName = link => {\n if (isObject(link.to)) {\n const { route } = router.resolve(link.to)\n\n return route.name\n }\n\n return link.to\n }\n\n /**\n * Check if nav-link is active\n * @param {Object} link nav-link object\n */\n const isNavLinkActive = link => {\n // Matched routes array of current route\n const matchedRoutes = router.currentRoute.matched\n\n // Check if provided route matches route's matched route\n const resolveRoutedName = resolveNavLinkRouteName(link)\n\n if (!resolveRoutedName) return false\n\n // eslint-disable-next-line arrow-body-style\n return matchedRoutes.some(route => {\n return route.name === resolveRoutedName || route.meta.navActiveLink === resolveRoutedName\n })\n }\n\n /**\n * Check if nav group is\n * @param {Array} children Group children\n */\n // eslint-disable-next-line arrow-body-style\n const isNavGroupActive = children => {\n return children.some(child => {\n // If child have children => It's group => Go deeper(recursive)\n if (child.children) {\n return isNavGroupActive(child.children)\n }\n\n // else it's link => Check for matched Route\n return isNavLinkActive(child)\n })\n }\n\n return {\n navLinkProps,\n resolveNavLinkRouteName,\n isNavLinkActive,\n isNavGroupActive,\n }\n}\n","import useNav from '@core/layouts/composable/useNav'\nimport { useRouter } from '@core/utils'\nimport { ref, watch } from '@vue/composition-api'\n\nexport default function useVerticalNavMenuLink(item) {\n const { isNavLinkActive, navLinkProps } = useNav()\n const { route } = useRouter()\n\n const isActive = ref(false)\n\n const linkProps = navLinkProps.value(item)\n\n watch(\n () => route.value.name,\n () => {\n isActive.value = isNavLinkActive(item)\n },\n { immediate: true },\n )\n\n return {\n isActive,\n linkProps,\n }\n}\n","\n \n \n \n {{ item.icon || alternateIcon }}\n \n \n\n \n {{ t(item.title) }}\n \n \n \n \n \n \n\n\n\n\n\n","import mod from \"-!../../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VerticalNavMenuLink.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VerticalNavMenuLink.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VerticalNavMenuLink.vue?vue&type=template&id=163d2aec&\"\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/vue-loader-v15/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\n\n/* vuetify-loader */\nimport installComponents from \"!../../../../../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBadge } from 'vuetify/lib/components/VBadge';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\ninstallComponents(component, {VBadge,VIcon,VListItem,VListItemAction,VListItemIcon,VListItemTitle})\n","import { ref } from '@vue/composition-api'\n\nexport default () => {\n const resolveNavItemComponent = item => {\n if (item.subheader) return 'vertical-nav-menu-section-title'\n if (item.children) return 'vertical-nav-menu-group'\n\n return 'vertical-nav-menu-link'\n }\n\n const isMouseHovered = ref(false)\n\n return {\n isMouseHovered,\n resolveNavItemComponent,\n }\n}\n","import useAppConfig from '@core/@app-config/useAppConfig'\nimport useNav from '@core/layouts/composable/useNav'\nimport { useRouter } from '@core/utils'\nimport { inject, ref, watch } from '@vue/composition-api'\n\nexport default function useVerticalNavMenuGroup(item) {\n const { isNavGroupActive } = useNav()\n const { route } = useRouter()\n\n // ------------------------------------------------\n // isVerticalMenuCollapsed\n // ------------------------------------------------\n const { menuIsVerticalNavMini: isVerticalMenuCollapsed } = useAppConfig()\n\n watch(isVerticalMenuCollapsed, val => {\n /* eslint-disable no-use-before-define */\n // * Handles case if routing is done outside of vertical menu\n // i.e. From Customizer Collapse or Using Link\n if (!isMouseHovered.value) {\n if (val) isOpen.value = false\n else if (!val && isActive.value) isOpen.value = true\n }\n /* eslint-enable */\n })\n\n // ------------------------------------------------\n // isMouseHovered\n // ------------------------------------------------\n const isMouseHovered = inject('isMouseHovered')\n\n // Collapse menu when menu is collapsed and show on open\n watch(isMouseHovered, val => {\n if (isVerticalMenuCollapsed.value) {\n // * we have used `val && val && isActive.value` to only open active menu on mouseEnter and close all menu on mouseLeave\n // * If we don't use `isActive.value` with `val` it can open other groups which are not active as well\n // eslint-disable-next-line no-use-before-define\n isOpen.value = val && isActive.value\n }\n })\n\n // ------------------------------------------------\n // openGroups\n // ------------------------------------------------\n const openGroups = inject('openGroups')\n\n // Collapse other groups if one group is opened\n watch(openGroups, currentOpenGroups => {\n const clickedGroup = currentOpenGroups[currentOpenGroups.length - 1]\n\n // If current group is not clicked group or current group is not active => Proceed with closing it\n // eslint-disable-next-line no-use-before-define\n if (clickedGroup !== item.title && !isActive.value) {\n // If clicked group is not child of current group\n // eslint-disable-next-line no-use-before-define\n if (!doesHaveChild(clickedGroup)) isOpen.value = false\n }\n })\n\n // ------------------------------------------------\n // isOpen\n // ------------------------------------------------\n const isOpen = ref(false)\n watch(isOpen, val => {\n // if group is opened push it to the array\n if (val) openGroups.value.push(item.title)\n })\n\n const updateGroupOpen = val => {\n // eslint-disable-next-line no-use-before-define\n isOpen.value = val\n }\n\n // ------------------------------------------------\n // isActive\n // ------------------------------------------------\n const isActive = ref(false)\n watch(isActive, val => {\n /*\n If menu is collapsed and not hovered(optional) then don't open group\n */\n if (val) {\n if (!isVerticalMenuCollapsed.value) isOpen.value = val\n } else {\n isOpen.value = val\n }\n })\n\n const updateIsActive = () => {\n isActive.value = isNavGroupActive(item.children)\n }\n watch(route, updateIsActive, { immediate: true })\n\n // ------------------------------------------------\n // Other Methods\n // ------------------------------------------------\n const doesHaveChild = title => item.children.some(child => child.title === title)\n\n return {\n isOpen,\n isActive,\n updateGroupOpen,\n openGroups,\n isMouseHovered,\n updateIsActive,\n }\n}\n","\n \n \n \n {{ item.icon || alternateIcon }}\n \n \n \n {{ t(item.title) }}\n\n \n \n \n \n \n\n \n \n\n\n\n\n\n","import mod from \"-!../../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VerticalNavMenuGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VerticalNavMenuGroup.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VerticalNavMenuGroup.vue?vue&type=template&id=81e7b5c6&\"\nimport script from \"./VerticalNavMenuGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./VerticalNavMenuGroup.vue?vue&type=script&lang=js&\"\nimport style0 from \"./VerticalNavMenuGroup.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../node_modules/@vue/vue-loader-v15/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\n\n/* vuetify-loader */\nimport installComponents from \"!../../../../../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBadge } from 'vuetify/lib/components/VBadge';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VListGroup } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\ninstallComponents(component, {VBadge,VIcon,VListGroup,VListItemAction,VListItemTitle})\n","\r\n