@kong-ui-public/app-layout 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +105 -0
- package/dist/app-layout.es.js +1893 -0
- package/dist/app-layout.es.js.map +1 -0
- package/dist/app-layout.umd.js +12 -0
- package/dist/app-layout.umd.js.map +1 -0
- package/dist/style.css +1 -0
- package/dist/types/components/AppLayout.vue.d.ts +95 -0
- package/dist/types/components/AppLayout.vue.d.ts.map +1 -0
- package/dist/types/components/ExternalLink.vue.d.ts +32 -0
- package/dist/types/components/ExternalLink.vue.d.ts.map +1 -0
- package/dist/types/components/errors/AppError.vue.d.ts +10 -0
- package/dist/types/components/errors/AppError.vue.d.ts.map +1 -0
- package/dist/types/components/helpers/isValidUrl.d.ts +7 -0
- package/dist/types/components/helpers/isValidUrl.d.ts.map +1 -0
- package/dist/types/components/icons/BananaSplit.vue.d.ts +3 -0
- package/dist/types/components/icons/BananaSplit.vue.d.ts.map +1 -0
- package/dist/types/components/navbar/AppNavbar.vue.d.ts +42 -0
- package/dist/types/components/navbar/AppNavbar.vue.d.ts.map +1 -0
- package/dist/types/components/navbar/NavbarDropdownMenu.vue.d.ts +55 -0
- package/dist/types/components/navbar/NavbarDropdownMenu.vue.d.ts.map +1 -0
- package/dist/types/components/sidebar/AppSidebar.vue.d.ts +154 -0
- package/dist/types/components/sidebar/AppSidebar.vue.d.ts.map +1 -0
- package/dist/types/components/sidebar/ItemBadge.vue.d.ts +17 -0
- package/dist/types/components/sidebar/ItemBadge.vue.d.ts.map +1 -0
- package/dist/types/components/sidebar/ProfileIcon.vue.d.ts +3 -0
- package/dist/types/components/sidebar/ProfileIcon.vue.d.ts.map +1 -0
- package/dist/types/components/sidebar/SidebarFooter.vue.d.ts +32 -0
- package/dist/types/components/sidebar/SidebarFooter.vue.d.ts.map +1 -0
- package/dist/types/components/sidebar/SidebarItem.vue.d.ts +27 -0
- package/dist/types/components/sidebar/SidebarItem.vue.d.ts.map +1 -0
- package/dist/types/components/sidebar/SidebarToggle.vue.d.ts +17 -0
- package/dist/types/components/sidebar/SidebarToggle.vue.d.ts.map +1 -0
- package/dist/types/composables/index.d.ts +2 -0
- package/dist/types/composables/index.d.ts.map +1 -0
- package/dist/types/composables/useDebounce.d.ts +4 -0
- package/dist/types/composables/useDebounce.d.ts.map +1 -0
- package/dist/types/index.d.ts +18 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +3 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/types/navbar.d.ts +6 -0
- package/dist/types/types/navbar.d.ts.map +1 -0
- package/dist/types/types/sidebar.d.ts +35 -0
- package/dist/types/types/sidebar.d.ts.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-layout.es.js","sources":["../src/components/navbar/AppNavbar.vue","../src/components/sidebar/ItemBadge.vue","../src/components/sidebar/SidebarItem.vue","../src/components/sidebar/ProfileIcon.vue","../src/components/sidebar/SidebarFooter.vue","../../../../node_modules/.pnpm/tabbable@6.0.1/node_modules/tabbable/dist/index.esm.js","../../../../node_modules/.pnpm/focus-trap@7.2.0/node_modules/focus-trap/dist/focus-trap.esm.js","../../../../node_modules/.pnpm/focus-trap-vue@4.0.1_nn2zg2o47bujavotzgw5cgkzcu/node_modules/focus-trap-vue/dist/focus-trap-vue.esm-browser.js","../src/composables/useDebounce.ts","../../../../node_modules/.pnpm/lodash.clonedeep@4.5.0/node_modules/lodash.clonedeep/index.js","../src/components/sidebar/AppSidebar.vue","../src/components/sidebar/SidebarToggle.vue","../src/components/AppLayout.vue","../src/components/navbar/NavbarDropdownMenu.vue","../src/components/icons/BananaSplit.vue","../src/components/helpers/isValidUrl.ts","../src/index.ts"],"sourcesContent":["<template>\n <header class=\"kong-ui-app-navbar\">\n <div class=\"header-content\">\n <div class=\"mobile-header-left\">\n <slot name=\"mobile-sidebar-toggle\" />\n <slot name=\"mobile-logo\" />\n </div>\n <slot name=\"default\" />\n </div>\n </header>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nconst props = defineProps({\n topOffset: {\n type: Number,\n default: 0,\n },\n leftOffset: {\n type: Number,\n default: 240, // Defaults to the width of AppSidebar.vue\n },\n zIndex: {\n type: Number,\n default: 3,\n },\n})\n\nconst headerStyles = computed(() => ({\n top: props.topOffset ? `${props.topOffset}px` : '0',\n left: props.leftOffset ? `${props.leftOffset}px` : '0',\n zIndex: props.zIndex,\n}))\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"../../styles/variables\";\n\n.kong-ui-app-navbar {\n position: fixed;\n top: v-bind('headerStyles.top');\n left: 0;\n right: 0;\n background-color: var(--kong-ui-app-navbar-background-color, #fff);\n border-bottom: $navbar-border;\n z-index: v-bind('headerStyles.zIndex');\n\n @media (min-width: $viewport-md) {\n left: v-bind('headerStyles.left');\n }\n\n .header-content {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: $header-item-gap;\n height: $navbar-height;\n padding: 0 16px;\n }\n\n .mobile-header-left {\n display: inline-flex;\n gap: $header-item-gap;\n\n @media (min-width: $viewport-md) {\n display: none;\n }\n }\n}\n</style>\n","<template>\n <div\n v-if=\"alertCount\"\n class=\"item-badge\"\n :title=\"(count || 0) > MAX_COUNT ? String(count) : undefined\"\n >\n {{ alertCount }}\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nconst MAX_COUNT = 99\n\nconst props = defineProps({\n count: {\n type: Number,\n required: true,\n default: undefined,\n },\n})\n\nconst alertCount = computed((): string => {\n if (!props.count) {\n return ''\n }\n\n return props.count > MAX_COUNT ? `${MAX_COUNT}+` : props.count.toString()\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.item-badge {\n color: var(--white, #fff);\n background-color: var(--red-500, #D44324);\n padding: 2px 6px;\n border-radius: 16px;\n font-size: 12px;\n font-weight: 400;\n line-height: 1.1;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n max-width: 36px;\n -webkit-user-select: none;\n user-select: none;\n}\n</style>\n","<template>\n <li\n :class=\"[!subnavItem ? 'sidebar-item-primary' : 'sidebar-item-secondary', { 'expanded': (item as SidebarPrimaryItem).expanded }, { 'active': item.active }]\"\n :data-testid=\"item.testId ? `sidebar-item-${item.testId}` : undefined\"\n >\n <component\n :is=\"!useAnchorTag ? 'router-link' : 'div'\"\n v-slot=\"slotProps\"\n :custom=\"!useAnchorTag ? true : undefined\"\n :to=\"!useAnchorTag && !openInNewWindow ? item.to : undefined\"\n >\n <a\n :aria-controls=\"(item as SidebarPrimaryItem).items?.length && (item as SidebarPrimaryItem).expanded ? `subnav-${(item as SidebarPrimaryItem).key}` : undefined\"\n :aria-expanded=\"(item as SidebarPrimaryItem).items?.length && (item as SidebarPrimaryItem).expanded ? true : undefined\"\n class=\"sidebar-item-link\"\n :class=\"{ 'sidebar-item-external-link': openInNewWindow, 'router-link': !useAnchorTag }\"\n :href=\"useAnchorTag ? String(item.to || '#') : slotProps?.href\"\n :target=\"openInNewWindow ? '_blank' : undefined\"\n @click=\"navigate($event, item, slotProps?.navigate)\"\n @keypress.enter=\"navigate($event, item, slotProps?.navigate)\"\n >\n <div\n class=\"sidebar-item-display\"\n :class=\"{ 'has-label': !!(item as SidebarPrimaryItem).label && (item as SidebarPrimaryItem).expanded, 'has-badge': itemHasBadge }\"\n >\n <div\n v-if=\"(item as SidebarPrimaryItem).icon\"\n class=\"sidebar-item-icon\"\n >\n <KIcon\n :color=\"item.active || (item as SidebarPrimaryItem).expanded ? 'var(--white, #fff)' : '#B5BECD'\"\n :icon=\"String((item as SidebarPrimaryItem).icon)\"\n size=\"20\"\n />\n </div>\n <div class=\"sidebar-item-name-container\">\n <div\n v-if=\"subnavItem ? item.name.length < 25 : item.name.length < 18\"\n class=\"sidebar-item-name truncate-text\"\n :class=\"[subnavItem ? 'has-badge-max-width truncate-24' : 'truncate-17']\"\n >\n {{ item.name }}\n </div>\n <KTooltip\n v-else\n class=\"sidebar-item-tooltip\"\n :label=\"item.name\"\n placement=\"right\"\n position-fixed\n >\n <div class=\"sidebar-item-name has-tooltip\">\n <span\n class=\"truncate-text\"\n :class=\"[subnavItem ? 'truncate-20' : 'truncate-17', { 'has-badge-max-width': itemHasBadge }]\"\n >{{ item.name }}</span>\n </div>\n </KTooltip>\n <div\n v-if=\"(item as SidebarPrimaryItem).label && (item as SidebarPrimaryItem).expanded\"\n class=\"sidebar-item-label truncate-text truncate-20\"\n >\n {{ (item as SidebarPrimaryItem).label }}\n </div>\n </div>\n <ItemBadge\n v-if=\"itemHasBadge\"\n :count=\"(item as SidebarSecondaryItem).badgeCount\"\n />\n </div>\n </a>\n </component>\n <ul\n v-if=\"(item as SidebarPrimaryItem).items?.length && (item as SidebarPrimaryItem).expanded\"\n :id=\"`subnav-${(item as SidebarPrimaryItem).key}`\"\n class=\"level-secondary\"\n >\n <SidebarItem\n v-for=\"childItem in (item as SidebarPrimaryItem).items\"\n :key=\"childItem.name\"\n :item=\"childItem\"\n :subnav-item=\"true\"\n @click=\"itemClick(childItem)\"\n />\n </ul>\n </li>\n</template>\n\n<script setup lang=\"ts\">\nimport { PropType, computed } from 'vue'\nimport type { SidebarPrimaryItem, SidebarSecondaryItem } from '../../types'\nimport ItemBadge from './ItemBadge.vue'\nimport { KIcon, KTooltip } from '@kong/kongponents'\n\nconst emit = defineEmits(['click'])\n\nconst props = defineProps({\n item: {\n type: Object as PropType<SidebarPrimaryItem | SidebarSecondaryItem>,\n required: true,\n },\n subnavItem: {\n type: Boolean,\n default: false,\n },\n})\n\n// Force anchor tag if `item.newWindow` is true, or `item.to` starts with `http`\nconst useAnchorTag = computed((): boolean => {\n if (typeof props.item.to !== 'string') {\n return false\n }\n\n return !!props.item.newWindow || !!props.item.external || props.item.to.startsWith('http')\n})\n\n// Should component use an anchor tag and open the link in a new window\nconst openInNewWindow = computed((): boolean => {\n if (!props.item.to || typeof props.item.to !== 'string' || !props.item.newWindow) {\n return false\n }\n\n return props.item.newWindow && (props.item.to.startsWith('http') || props.item.to.startsWith('/'))\n})\n\nconst itemHasBadge = computed(() => props.subnavItem && (props.item as SidebarSecondaryItem).badgeCount !== undefined)\n\nconst itemClick = (item: SidebarPrimaryItem | SidebarSecondaryItem): void => {\n emit('click', item)\n}\n\nconst navigate = (event: Event, item: SidebarPrimaryItem | SidebarSecondaryItem, routerNavigate?: Function): void => {\n itemClick(item)\n if (typeof routerNavigate === 'function') {\n event.preventDefault()\n routerNavigate()\n }\n}\n</script>\n\n<style lang=\"scss\">\n@import \"../../styles/variables\";\n\n// Scope with wrapper class intead of using `scoped` so these styles will apply to child components\n.kong-ui-app-sidebar {\n // Shared styles for the primary and secondary elements\n .sidebar-item-primary,\n .sidebar-item-secondary {\n display: flex;\n flex-direction: column;\n position: relative;\n white-space: nowrap;\n\n &:last-of-type {\n margin-bottom: 0;\n }\n\n a.sidebar-item-link {\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: 48px;\n text-decoration: none;\n font-size: $sidebar-item-font-size;\n font-weight: 500;\n color: var(--steel-300, #A3B6D9);\n cursor: pointer;\n transition: color .2s ease-out;\n\n // SVG color transition (initial values)\n svg:not(.profile-icon) path {\n color: currentColor;\n fill: currentColor;\n transition: all .2s ease-out;\n }\n\n &:hover,\n &:focus-visible {\n color: var(--white, #fff);\n\n // SVG fill color on hover\n svg:not(.profile-icon) path {\n fill: var(--white, #fff);\n }\n }\n\n &:focus-visible {\n outline: 1px solid var(--steel-300, #A3B6D9);\n }\n\n .sidebar-item-tooltip {\n display: flex;\n align-items: center;\n height: 100%;\n }\n }\n\n &.active > a,\n &.active > div > a,\n &.expanded > a,\n &.expanded > div > a {\n color: var(--white, #fff);\n\n .sidebar-item-name {\n font-weight: 600 !important;\n }\n }\n\n ul.level-secondary {\n padding: 4px 0 12px;\n border-top: 1px solid var(--black-10, rgba(#000, 0.1));\n }\n }\n}\n</style>\n\n<style lang=\"scss\" scoped>\n@import \"../../styles/variables\";\n\n// Primary-level nav item\n.sidebar-item-primary {\n &.active,\n &.expanded {\n background-color: rgba(#fff, .1);\n border-radius: $sidebar-item-border-radius;\n }\n\n > a,\n > div > a {\n border-radius: $sidebar-item-border-radius;\n\n > .sidebar-item-display {\n\n &.has-label {\n padding-top: 12px;\n padding-bottom: 12px;\n }\n }\n }\n}\n\n// Secondary-level nav item\n.sidebar-item-secondary {\n margin-bottom: 4px;\n\n &:last-of-type {\n margin-bottom: 0;\n }\n\n a {\n color: var(--steel-200, #DAE3F2) !important;\n min-height: 36px !important;\n font-size: $sidebar-item-font-size;\n // Add a left border by default so the item doesn't \"shift\" to the right when active\n border-left: 4px solid transparent;\n background-color: transparent;\n transition: all .1s ease-in-out !important;\n\n &:hover,\n &:focus-visible {\n background-color: rgba(#fff, 0.05);\n }\n\n > .sidebar-item-display {\n &.has-badge {\n justify-content: space-between; // for badges\n\n .has-badge-max-width {\n max-width: 134px !important;\n }\n }\n }\n }\n\n &.active > a {\n color: var(--white, #fff) !important;\n background-color: rgba(#fff, 0.2);\n border-left: 4px solid var(--green-500, #07A88D);\n font-weight: 600 !important;\n }\n}\n\n.sidebar-item-display {\n display: flex;\n align-items: center;\n width: 100%;\n height: 100%;\n padding: 0 16px;\n\n .sidebar-item-name-container {\n line-height: 1.3;\n -webkit-user-select: none;\n user-select: none;\n\n .truncate-text {\n overflow: hidden;\n height: 100%;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n &.truncate {\n &-17 {\n max-width: 17ch;\n }\n &-20 {\n max-width: 20ch;\n }\n &-24 {\n max-width: 24ch;\n }\n }\n }\n\n .sidebar-item-name {\n display: flex;\n align-items: center;\n\n &.has-tooltip {\n height: 100%;\n\n span {\n min-width: 0; // Important: must be present to truncate the text\n height: auto;\n }\n }\n }\n }\n\n .sidebar-item-label {\n margin-top: 4px;\n color: var(--steel-300, #A3B6D9);\n font-size: 12px;\n }\n\n .sidebar-item-icon {\n display: flex;\n align-items: center;\n padding-right: 14px;\n line-height: 0; // to align icon with the text baseline\n }\n}\n</style>\n","<template>\n <svg\n class=\"profile-icon\"\n fill=\"none\"\n height=\"30\"\n width=\"30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M0 15C0 6.716 6.716 0 15 0c8.284 0 15 6.716 15 15 0 8.284-6.716 15-15 15-8.284 0-15-6.716-15-15Z\"\n fill=\"#0A7FAE\"\n /><path\n d=\"M12.613 15 8.5 18.115V23h13v-4.885L17.648 15h-5.035ZM15 13a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z\"\n fill=\"#fff\"\n />\n </svg>\n</template>\n","<template>\n <nav\n aria-haspopup=\"true\"\n aria-label=\"Profile Menu\"\n class=\"sidebar-footer\"\n >\n <div class=\"sidebar-profile-link\">\n <div class=\"sidebar-item-icon\">\n <ProfileIcon />\n </div>\n <div class=\"sidebar-profile-item-container\">\n <div class=\"sidebar-profile-dropdown-container\">\n <div\n v-if=\"!hasProfileItems\"\n class=\"sidebar-profile-name\"\n >\n {{ name }}\n </div>\n <KDropdownMenu\n v-else\n :kpop-attributes=\"{ placement: 'right', popoverClasses: 'ml-5 sidebar-profile-menu-popover', target: '.sidebar-footer' }\"\n width=\"240\"\n >\n <a\n aria-label=\"Open Profile Menu\"\n class=\"profile-dropdown-trigger\"\n role=\"button\"\n tabindex=\"0\"\n @click.prevent\n >\n <span class=\"sidebar-profile-name\">{{ name }}</span>\n </a>\n <template #items>\n <slot name=\"default\" />\n </template>\n </KDropdownMenu>\n </div>\n </div>\n </div>\n </nav>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport ProfileIcon from './ProfileIcon.vue'\nimport { KDropdownMenu } from '@kong/kongponents'\n\nconst props = defineProps({\n name: {\n type: String,\n required: true,\n },\n itemCount: {\n type: Number,\n required: true,\n default: 0,\n },\n})\n\nconst hasProfileItems = computed((): boolean => props.itemCount > 0)\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"../../styles/variables\";\n\n.sidebar-item-icon {\n display: flex;\n padding-right: 14px;\n line-height: 0; // to align icon with the text baseline\n}\n\n.sidebar-profile-link {\n display: flex;\n align-items: center;\n height: $sidebar-item-profile-height !important;\n padding-left: 14px;\n color: var(--steel-300, #A3B6D9);\n background-color: var(--blue-700, #0A2B66);\n text-decoration: none;\n white-space: nowrap;\n}\n\n.sidebar-profile-item-container,\n.sidebar-profile-dropdown-container {\n display: flex;\n align-items: center;\n width: 100%;\n height: 100%;\n}\n\n.sidebar-profile-dropdown-container {\n width: 100%;\n padding-right: 16px;\n\n :deep(.k-dropdown) {\n width: 100%;\n height: 100%;\n\n > * {\n width: 100%;\n height: 100%;\n\n .k-dropdown-trigger {\n display: flex;\n align-items: center;\n width: 100%;\n height: 100%;\n font-size: $sidebar-item-font-size;\n }\n }\n }\n}\n\n.profile-dropdown-trigger {\n display: flex;\n align-items: center;\n width: 100%;\n height: 100%;\n color: var(--steel-300, #A3B6D9);\n font-weight: 500;\n text-decoration: none;\n white-space: nowrap;\n transition: color .2s ease-out;\n cursor: pointer;\n\n &:hover,\n &:focus-visible {\n color: var(--white, #fff);\n }\n\n &:focus-visible {\n outline: none;\n span {\n outline: 1px solid var(--steel-300, #A3B6D9);\n }\n }\n}\n\n.sidebar-profile-name {\n line-height: 1.3;\n max-width: $profile-name-max-width;\n padding-right: 1ch;\n overflow: hidden;\n text-overflow: ellipsis;\n -webkit-user-select: none;\n user-select: none;\n}\n\n:deep(.sidebar-profile-menu-popover.k-popover) {\n --KPopPaddingX: 0 !important;\n --KPopPaddingY: 0 !important;\n margin-top: 0 !important;\n left: -2px !important;\n\n // Prevent animation classes from being applied by container app\n &.fade-enter-active,\n &.fade-enter-to,\n &.fade-leave-active,\n &.fade-leave-to {\n animation: none !important;\n }\n\n .k-dropdown-list {\n margin: var(--spacing-sm) 0;\n padding-left: 0;\n }\n\n .k-dropdown-item-trigger {\n &:focus {\n outline: none;\n box-shadow: none;\n }\n &:focus-visible {\n outline: 1px solid var(--steel-300, #A3B6D9);\n }\n }\n}\n</style>\n","/*!\n* tabbable 6.0.1\n* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE\n*/\nvar candidateSelectors = ['input', 'select', 'textarea', 'a[href]', 'button', '[tabindex]:not(slot)', 'audio[controls]', 'video[controls]', '[contenteditable]:not([contenteditable=\"false\"])', 'details>summary:first-of-type', 'details'];\nvar candidateSelector = /* #__PURE__ */candidateSelectors.join(',');\nvar NoElement = typeof Element === 'undefined';\nvar matches = NoElement ? function () {} : Element.prototype.matches || Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\nvar getRootNode = !NoElement && Element.prototype.getRootNode ? function (element) {\n return element.getRootNode();\n} : function (element) {\n return element.ownerDocument;\n};\n\n/**\n * @param {Element} el container to check in\n * @param {boolean} includeContainer add container to check\n * @param {(node: Element) => boolean} filter filter candidates\n * @returns {Element[]}\n */\nvar getCandidates = function getCandidates(el, includeContainer, filter) {\n var candidates = Array.prototype.slice.apply(el.querySelectorAll(candidateSelector));\n if (includeContainer && matches.call(el, candidateSelector)) {\n candidates.unshift(el);\n }\n candidates = candidates.filter(filter);\n return candidates;\n};\n\n/**\n * @callback GetShadowRoot\n * @param {Element} element to check for shadow root\n * @returns {ShadowRoot|boolean} ShadowRoot if available or boolean indicating if a shadowRoot is attached but not available.\n */\n\n/**\n * @callback ShadowRootFilter\n * @param {Element} shadowHostNode the element which contains shadow content\n * @returns {boolean} true if a shadow root could potentially contain valid candidates.\n */\n\n/**\n * @typedef {Object} CandidateScope\n * @property {Element} scopeParent contains inner candidates\n * @property {Element[]} candidates list of candidates found in the scope parent\n */\n\n/**\n * @typedef {Object} IterativeOptions\n * @property {GetShadowRoot|boolean} getShadowRoot true if shadow support is enabled; falsy if not;\n * if a function, implies shadow support is enabled and either returns the shadow root of an element\n * or a boolean stating if it has an undisclosed shadow root\n * @property {(node: Element) => boolean} filter filter candidates\n * @property {boolean} flatten if true then result will flatten any CandidateScope into the returned list\n * @property {ShadowRootFilter} shadowRootFilter filter shadow roots;\n */\n\n/**\n * @param {Element[]} elements list of element containers to match candidates from\n * @param {boolean} includeContainer add container list to check\n * @param {IterativeOptions} options\n * @returns {Array.<Element|CandidateScope>}\n */\nvar getCandidatesIteratively = function getCandidatesIteratively(elements, includeContainer, options) {\n var candidates = [];\n var elementsToCheck = Array.from(elements);\n while (elementsToCheck.length) {\n var element = elementsToCheck.shift();\n if (element.tagName === 'SLOT') {\n // add shadow dom slot scope (slot itself cannot be focusable)\n var assigned = element.assignedElements();\n var content = assigned.length ? assigned : element.children;\n var nestedCandidates = getCandidatesIteratively(content, true, options);\n if (options.flatten) {\n candidates.push.apply(candidates, nestedCandidates);\n } else {\n candidates.push({\n scopeParent: element,\n candidates: nestedCandidates\n });\n }\n } else {\n // check candidate element\n var validCandidate = matches.call(element, candidateSelector);\n if (validCandidate && options.filter(element) && (includeContainer || !elements.includes(element))) {\n candidates.push(element);\n }\n\n // iterate over shadow content if possible\n var shadowRoot = element.shadowRoot ||\n // check for an undisclosed shadow\n typeof options.getShadowRoot === 'function' && options.getShadowRoot(element);\n var validShadowRoot = !options.shadowRootFilter || options.shadowRootFilter(element);\n if (shadowRoot && validShadowRoot) {\n // add shadow dom scope IIF a shadow root node was given; otherwise, an undisclosed\n // shadow exists, so look at light dom children as fallback BUT create a scope for any\n // child candidates found because they're likely slotted elements (elements that are\n // children of the web component element (which has the shadow), in the light dom, but\n // slotted somewhere _inside_ the undisclosed shadow) -- the scope is created below,\n // _after_ we return from this recursive call\n var _nestedCandidates = getCandidatesIteratively(shadowRoot === true ? element.children : shadowRoot.children, true, options);\n if (options.flatten) {\n candidates.push.apply(candidates, _nestedCandidates);\n } else {\n candidates.push({\n scopeParent: element,\n candidates: _nestedCandidates\n });\n }\n } else {\n // there's not shadow so just dig into the element's (light dom) children\n // __without__ giving the element special scope treatment\n elementsToCheck.unshift.apply(elementsToCheck, element.children);\n }\n }\n }\n return candidates;\n};\nvar getTabindex = function getTabindex(node, isScope) {\n if (node.tabIndex < 0) {\n // in Chrome, <details/>, <audio controls/> and <video controls/> elements get a default\n // `tabIndex` of -1 when the 'tabindex' attribute isn't specified in the DOM,\n // yet they are still part of the regular tab order; in FF, they get a default\n // `tabIndex` of 0; since Chrome still puts those elements in the regular tab\n // order, consider their tab index to be 0.\n // Also browsers do not return `tabIndex` correctly for contentEditable nodes;\n // so if they don't have a tabindex attribute specifically set, assume it's 0.\n //\n // isScope is positive for custom element with shadow root or slot that by default\n // have tabIndex -1, but need to be sorted by document order in order for their\n // content to be inserted in the correct position\n if ((isScope || /^(AUDIO|VIDEO|DETAILS)$/.test(node.tagName) || node.isContentEditable) && isNaN(parseInt(node.getAttribute('tabindex'), 10))) {\n return 0;\n }\n }\n return node.tabIndex;\n};\nvar sortOrderedTabbables = function sortOrderedTabbables(a, b) {\n return a.tabIndex === b.tabIndex ? a.documentOrder - b.documentOrder : a.tabIndex - b.tabIndex;\n};\nvar isInput = function isInput(node) {\n return node.tagName === 'INPUT';\n};\nvar isHiddenInput = function isHiddenInput(node) {\n return isInput(node) && node.type === 'hidden';\n};\nvar isDetailsWithSummary = function isDetailsWithSummary(node) {\n var r = node.tagName === 'DETAILS' && Array.prototype.slice.apply(node.children).some(function (child) {\n return child.tagName === 'SUMMARY';\n });\n return r;\n};\nvar getCheckedRadio = function getCheckedRadio(nodes, form) {\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i].checked && nodes[i].form === form) {\n return nodes[i];\n }\n }\n};\nvar isTabbableRadio = function isTabbableRadio(node) {\n if (!node.name) {\n return true;\n }\n var radioScope = node.form || getRootNode(node);\n var queryRadios = function queryRadios(name) {\n return radioScope.querySelectorAll('input[type=\"radio\"][name=\"' + name + '\"]');\n };\n var radioSet;\n if (typeof window !== 'undefined' && typeof window.CSS !== 'undefined' && typeof window.CSS.escape === 'function') {\n radioSet = queryRadios(window.CSS.escape(node.name));\n } else {\n try {\n radioSet = queryRadios(node.name);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s', err.message);\n return false;\n }\n }\n var checked = getCheckedRadio(radioSet, node.form);\n return !checked || checked === node;\n};\nvar isRadio = function isRadio(node) {\n return isInput(node) && node.type === 'radio';\n};\nvar isNonTabbableRadio = function isNonTabbableRadio(node) {\n return isRadio(node) && !isTabbableRadio(node);\n};\n\n// determines if a node is ultimately attached to the window's document\nvar isNodeAttached = function isNodeAttached(node) {\n var _nodeRootHost;\n // The root node is the shadow root if the node is in a shadow DOM; some document otherwise\n // (but NOT _the_ document; see second 'If' comment below for more).\n // If rootNode is shadow root, it'll have a host, which is the element to which the shadow\n // is attached, and the one we need to check if it's in the document or not (because the\n // shadow, and all nodes it contains, is never considered in the document since shadows\n // behave like self-contained DOMs; but if the shadow's HOST, which is part of the document,\n // is hidden, or is not in the document itself but is detached, it will affect the shadow's\n // visibility, including all the nodes it contains). The host could be any normal node,\n // or a custom element (i.e. web component). Either way, that's the one that is considered\n // part of the document, not the shadow root, nor any of its children (i.e. the node being\n // tested).\n // To further complicate things, we have to look all the way up until we find a shadow HOST\n // that is attached (or find none) because the node might be in nested shadows...\n // If rootNode is not a shadow root, it won't have a host, and so rootNode should be the\n // document (per the docs) and while it's a Document-type object, that document does not\n // appear to be the same as the node's `ownerDocument` for some reason, so it's safer\n // to ignore the rootNode at this point, and use `node.ownerDocument`. Otherwise,\n // using `rootNode.contains(node)` will _always_ be true we'll get false-positives when\n // node is actually detached.\n var nodeRootHost = getRootNode(node).host;\n var attached = !!((_nodeRootHost = nodeRootHost) !== null && _nodeRootHost !== void 0 && _nodeRootHost.ownerDocument.contains(nodeRootHost) || node.ownerDocument.contains(node));\n while (!attached && nodeRootHost) {\n var _nodeRootHost2;\n // since it's not attached and we have a root host, the node MUST be in a nested shadow DOM,\n // which means we need to get the host's host and check if that parent host is contained\n // in (i.e. attached to) the document\n nodeRootHost = getRootNode(nodeRootHost).host;\n attached = !!((_nodeRootHost2 = nodeRootHost) !== null && _nodeRootHost2 !== void 0 && _nodeRootHost2.ownerDocument.contains(nodeRootHost));\n }\n return attached;\n};\nvar isZeroArea = function isZeroArea(node) {\n var _node$getBoundingClie = node.getBoundingClientRect(),\n width = _node$getBoundingClie.width,\n height = _node$getBoundingClie.height;\n return width === 0 && height === 0;\n};\nvar isHidden = function isHidden(node, _ref) {\n var displayCheck = _ref.displayCheck,\n getShadowRoot = _ref.getShadowRoot;\n // NOTE: visibility will be `undefined` if node is detached from the document\n // (see notes about this further down), which means we will consider it visible\n // (this is legacy behavior from a very long way back)\n // NOTE: we check this regardless of `displayCheck=\"none\"` because this is a\n // _visibility_ check, not a _display_ check\n if (getComputedStyle(node).visibility === 'hidden') {\n return true;\n }\n var isDirectSummary = matches.call(node, 'details>summary:first-of-type');\n var nodeUnderDetails = isDirectSummary ? node.parentElement : node;\n if (matches.call(nodeUnderDetails, 'details:not([open]) *')) {\n return true;\n }\n if (!displayCheck || displayCheck === 'full' || displayCheck === 'legacy-full') {\n if (typeof getShadowRoot === 'function') {\n // figure out if we should consider the node to be in an undisclosed shadow and use the\n // 'non-zero-area' fallback\n var originalNode = node;\n while (node) {\n var parentElement = node.parentElement;\n var rootNode = getRootNode(node);\n if (parentElement && !parentElement.shadowRoot && getShadowRoot(parentElement) === true // check if there's an undisclosed shadow\n ) {\n // node has an undisclosed shadow which means we can only treat it as a black box, so we\n // fall back to a non-zero-area test\n return isZeroArea(node);\n } else if (node.assignedSlot) {\n // iterate up slot\n node = node.assignedSlot;\n } else if (!parentElement && rootNode !== node.ownerDocument) {\n // cross shadow boundary\n node = rootNode.host;\n } else {\n // iterate up normal dom\n node = parentElement;\n }\n }\n node = originalNode;\n }\n // else, `getShadowRoot` might be true, but all that does is enable shadow DOM support\n // (i.e. it does not also presume that all nodes might have undisclosed shadows); or\n // it might be a falsy value, which means shadow DOM support is disabled\n\n // Since we didn't find it sitting in an undisclosed shadow (or shadows are disabled)\n // now we can just test to see if it would normally be visible or not, provided it's\n // attached to the main document.\n // NOTE: We must consider case where node is inside a shadow DOM and given directly to\n // `isTabbable()` or `isFocusable()` -- regardless of `getShadowRoot` option setting.\n\n if (isNodeAttached(node)) {\n // this works wherever the node is: if there's at least one client rect, it's\n // somehow displayed; it also covers the CSS 'display: contents' case where the\n // node itself is hidden in place of its contents; and there's no need to search\n // up the hierarchy either\n return !node.getClientRects().length;\n }\n\n // Else, the node isn't attached to the document, which means the `getClientRects()`\n // API will __always__ return zero rects (this can happen, for example, if React\n // is used to render nodes onto a detached tree, as confirmed in this thread:\n // https://github.com/facebook/react/issues/9117#issuecomment-284228870)\n //\n // It also means that even window.getComputedStyle(node).display will return `undefined`\n // because styles are only computed for nodes that are in the document.\n //\n // NOTE: THIS HAS BEEN THE CASE FOR YEARS. It is not new, nor is it caused by tabbable\n // somehow. Though it was never stated officially, anyone who has ever used tabbable\n // APIs on nodes in detached containers has actually implicitly used tabbable in what\n // was later (as of v5.2.0 on Apr 9, 2021) called `displayCheck=\"none\"` mode -- essentially\n // considering __everything__ to be visible because of the innability to determine styles.\n //\n // v6.0.0: As of this major release, the default 'full' option __no longer treats detached\n // nodes as visible with the 'none' fallback.__\n if (displayCheck !== 'legacy-full') {\n return true; // hidden\n }\n // else, fallback to 'none' mode and consider the node visible\n } else if (displayCheck === 'non-zero-area') {\n // NOTE: Even though this tests that the node's client rect is non-zero to determine\n // whether it's displayed, and that a detached node will __always__ have a zero-area\n // client rect, we don't special-case for whether the node is attached or not. In\n // this mode, we do want to consider nodes that have a zero area to be hidden at all\n // times, and that includes attached or not.\n return isZeroArea(node);\n }\n\n // visible, as far as we can tell, or per current `displayCheck=none` mode, we assume\n // it's visible\n return false;\n};\n\n// form fields (nested) inside a disabled fieldset are not focusable/tabbable\n// unless they are in the _first_ <legend> element of the top-most disabled\n// fieldset\nvar isDisabledFromFieldset = function isDisabledFromFieldset(node) {\n if (/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(node.tagName)) {\n var parentNode = node.parentElement;\n // check if `node` is contained in a disabled <fieldset>\n while (parentNode) {\n if (parentNode.tagName === 'FIELDSET' && parentNode.disabled) {\n // look for the first <legend> among the children of the disabled <fieldset>\n for (var i = 0; i < parentNode.children.length; i++) {\n var child = parentNode.children.item(i);\n // when the first <legend> (in document order) is found\n if (child.tagName === 'LEGEND') {\n // if its parent <fieldset> is not nested in another disabled <fieldset>,\n // return whether `node` is a descendant of its first <legend>\n return matches.call(parentNode, 'fieldset[disabled] *') ? true : !child.contains(node);\n }\n }\n // the disabled <fieldset> containing `node` has no <legend>\n return true;\n }\n parentNode = parentNode.parentElement;\n }\n }\n\n // else, node's tabbable/focusable state should not be affected by a fieldset's\n // enabled/disabled state\n return false;\n};\nvar isNodeMatchingSelectorFocusable = function isNodeMatchingSelectorFocusable(options, node) {\n if (node.disabled || isHiddenInput(node) || isHidden(node, options) ||\n // For a details element with a summary, the summary element gets the focus\n isDetailsWithSummary(node) || isDisabledFromFieldset(node)) {\n return false;\n }\n return true;\n};\nvar isNodeMatchingSelectorTabbable = function isNodeMatchingSelectorTabbable(options, node) {\n if (isNonTabbableRadio(node) || getTabindex(node) < 0 || !isNodeMatchingSelectorFocusable(options, node)) {\n return false;\n }\n return true;\n};\nvar isValidShadowRootTabbable = function isValidShadowRootTabbable(shadowHostNode) {\n var tabIndex = parseInt(shadowHostNode.getAttribute('tabindex'), 10);\n if (isNaN(tabIndex) || tabIndex >= 0) {\n return true;\n }\n // If a custom element has an explicit negative tabindex,\n // browsers will not allow tab targeting said element's children.\n return false;\n};\n\n/**\n * @param {Array.<Element|CandidateScope>} candidates\n * @returns Element[]\n */\nvar sortByOrder = function sortByOrder(candidates) {\n var regularTabbables = [];\n var orderedTabbables = [];\n candidates.forEach(function (item, i) {\n var isScope = !!item.scopeParent;\n var element = isScope ? item.scopeParent : item;\n var candidateTabindex = getTabindex(element, isScope);\n var elements = isScope ? sortByOrder(item.candidates) : element;\n if (candidateTabindex === 0) {\n isScope ? regularTabbables.push.apply(regularTabbables, elements) : regularTabbables.push(element);\n } else {\n orderedTabbables.push({\n documentOrder: i,\n tabIndex: candidateTabindex,\n item: item,\n isScope: isScope,\n content: elements\n });\n }\n });\n return orderedTabbables.sort(sortOrderedTabbables).reduce(function (acc, sortable) {\n sortable.isScope ? acc.push.apply(acc, sortable.content) : acc.push(sortable.content);\n return acc;\n }, []).concat(regularTabbables);\n};\nvar tabbable = function tabbable(el, options) {\n options = options || {};\n var candidates;\n if (options.getShadowRoot) {\n candidates = getCandidatesIteratively([el], options.includeContainer, {\n filter: isNodeMatchingSelectorTabbable.bind(null, options),\n flatten: false,\n getShadowRoot: options.getShadowRoot,\n shadowRootFilter: isValidShadowRootTabbable\n });\n } else {\n candidates = getCandidates(el, options.includeContainer, isNodeMatchingSelectorTabbable.bind(null, options));\n }\n return sortByOrder(candidates);\n};\nvar focusable = function focusable(el, options) {\n options = options || {};\n var candidates;\n if (options.getShadowRoot) {\n candidates = getCandidatesIteratively([el], options.includeContainer, {\n filter: isNodeMatchingSelectorFocusable.bind(null, options),\n flatten: true,\n getShadowRoot: options.getShadowRoot\n });\n } else {\n candidates = getCandidates(el, options.includeContainer, isNodeMatchingSelectorFocusable.bind(null, options));\n }\n return candidates;\n};\nvar isTabbable = function isTabbable(node, options) {\n options = options || {};\n if (!node) {\n throw new Error('No node provided');\n }\n if (matches.call(node, candidateSelector) === false) {\n return false;\n }\n return isNodeMatchingSelectorTabbable(options, node);\n};\nvar focusableCandidateSelector = /* #__PURE__ */candidateSelectors.concat('iframe').join(',');\nvar isFocusable = function isFocusable(node, options) {\n options = options || {};\n if (!node) {\n throw new Error('No node provided');\n }\n if (matches.call(node, focusableCandidateSelector) === false) {\n return false;\n }\n return isNodeMatchingSelectorFocusable(options, node);\n};\n\nexport { focusable, isFocusable, isTabbable, tabbable };\n//# sourceMappingURL=index.esm.js.map\n","/*!\n* focus-trap 7.2.0\n* @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE\n*/\nimport { tabbable, focusable, isTabbable, isFocusable } from 'tabbable';\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n}\nfunction _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _toPrimitive(input, hint) {\n if (typeof input !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (typeof res !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\nfunction _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n return typeof key === \"symbol\" ? key : String(key);\n}\n\nvar activeFocusTraps = {\n activateTrap: function activateTrap(trapStack, trap) {\n if (trapStack.length > 0) {\n var activeTrap = trapStack[trapStack.length - 1];\n if (activeTrap !== trap) {\n activeTrap.pause();\n }\n }\n var trapIndex = trapStack.indexOf(trap);\n if (trapIndex === -1) {\n trapStack.push(trap);\n } else {\n // move this existing trap to the front of the queue\n trapStack.splice(trapIndex, 1);\n trapStack.push(trap);\n }\n },\n deactivateTrap: function deactivateTrap(trapStack, trap) {\n var trapIndex = trapStack.indexOf(trap);\n if (trapIndex !== -1) {\n trapStack.splice(trapIndex, 1);\n }\n if (trapStack.length > 0) {\n trapStack[trapStack.length - 1].unpause();\n }\n }\n};\nvar isSelectableInput = function isSelectableInput(node) {\n return node.tagName && node.tagName.toLowerCase() === 'input' && typeof node.select === 'function';\n};\nvar isEscapeEvent = function isEscapeEvent(e) {\n return e.key === 'Escape' || e.key === 'Esc' || e.keyCode === 27;\n};\nvar isTabEvent = function isTabEvent(e) {\n return e.key === 'Tab' || e.keyCode === 9;\n};\n\n// checks for TAB by default\nvar isKeyForward = function isKeyForward(e) {\n return isTabEvent(e) && !e.shiftKey;\n};\n\n// checks for SHIFT+TAB by default\nvar isKeyBackward = function isKeyBackward(e) {\n return isTabEvent(e) && e.shiftKey;\n};\nvar delay = function delay(fn) {\n return setTimeout(fn, 0);\n};\n\n// Array.find/findIndex() are not supported on IE; this replicates enough\n// of Array.findIndex() for our needs\nvar findIndex = function findIndex(arr, fn) {\n var idx = -1;\n arr.every(function (value, i) {\n if (fn(value)) {\n idx = i;\n return false; // break\n }\n\n return true; // next\n });\n\n return idx;\n};\n\n/**\n * Get an option's value when it could be a plain value, or a handler that provides\n * the value.\n * @param {*} value Option's value to check.\n * @param {...*} [params] Any parameters to pass to the handler, if `value` is a function.\n * @returns {*} The `value`, or the handler's returned value.\n */\nvar valueOrHandler = function valueOrHandler(value) {\n for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n params[_key - 1] = arguments[_key];\n }\n return typeof value === 'function' ? value.apply(void 0, params) : value;\n};\nvar getActualTarget = function getActualTarget(event) {\n // NOTE: If the trap is _inside_ a shadow DOM, event.target will always be the\n // shadow host. However, event.target.composedPath() will be an array of\n // nodes \"clicked\" from inner-most (the actual element inside the shadow) to\n // outer-most (the host HTML document). If we have access to composedPath(),\n // then use its first element; otherwise, fall back to event.target (and\n // this only works for an _open_ shadow DOM; otherwise,\n // composedPath()[0] === event.target always).\n return event.target.shadowRoot && typeof event.composedPath === 'function' ? event.composedPath()[0] : event.target;\n};\n\n// NOTE: this must be _outside_ `createFocusTrap()` to make sure all traps in this\n// current instance use the same stack if `userOptions.trapStack` isn't specified\nvar internalTrapStack = [];\nvar createFocusTrap = function createFocusTrap(elements, userOptions) {\n // SSR: a live trap shouldn't be created in this type of environment so this\n // should be safe code to execute if the `document` option isn't specified\n var doc = (userOptions === null || userOptions === void 0 ? void 0 : userOptions.document) || document;\n var trapStack = (userOptions === null || userOptions === void 0 ? void 0 : userOptions.trapStack) || internalTrapStack;\n var config = _objectSpread2({\n returnFocusOnDeactivate: true,\n escapeDeactivates: true,\n delayInitialFocus: true,\n isKeyForward: isKeyForward,\n isKeyBackward: isKeyBackward\n }, userOptions);\n var state = {\n // containers given to createFocusTrap()\n // @type {Array<HTMLElement>}\n containers: [],\n // list of objects identifying tabbable nodes in `containers` in the trap\n // NOTE: it's possible that a group has no tabbable nodes if nodes get removed while the trap\n // is active, but the trap should never get to a state where there isn't at least one group\n // with at least one tabbable node in it (that would lead to an error condition that would\n // result in an error being thrown)\n // @type {Array<{\n // container: HTMLElement,\n // tabbableNodes: Array<HTMLElement>, // empty if none\n // focusableNodes: Array<HTMLElement>, // empty if none\n // firstTabbableNode: HTMLElement|null,\n // lastTabbableNode: HTMLElement|null,\n // nextTabbableNode: (node: HTMLElement, forward: boolean) => HTMLElement|undefined\n // }>}\n containerGroups: [],\n // same order/length as `containers` list\n\n // references to objects in `containerGroups`, but only those that actually have\n // tabbable nodes in them\n // NOTE: same order as `containers` and `containerGroups`, but __not necessarily__\n // the same length\n tabbableGroups: [],\n nodeFocusedBeforeActivation: null,\n mostRecentlyFocusedNode: null,\n active: false,\n paused: false,\n // timer ID for when delayInitialFocus is true and initial focus in this trap\n // has been delayed during activation\n delayInitialFocusTimer: undefined\n };\n var trap; // eslint-disable-line prefer-const -- some private functions reference it, and its methods reference private functions, so we must declare here and define later\n\n /**\n * Gets a configuration option value.\n * @param {Object|undefined} configOverrideOptions If true, and option is defined in this set,\n * value will be taken from this object. Otherwise, value will be taken from base configuration.\n * @param {string} optionName Name of the option whose value is sought.\n * @param {string|undefined} [configOptionName] Name of option to use __instead of__ `optionName`\n * IIF `configOverrideOptions` is not defined. Otherwise, `optionName` is used.\n */\n var getOption = function getOption(configOverrideOptions, optionName, configOptionName) {\n return configOverrideOptions && configOverrideOptions[optionName] !== undefined ? configOverrideOptions[optionName] : config[configOptionName || optionName];\n };\n\n /**\n * Finds the index of the container that contains the element.\n * @param {HTMLElement} element\n * @returns {number} Index of the container in either `state.containers` or\n * `state.containerGroups` (the order/length of these lists are the same); -1\n * if the element isn't found.\n */\n var findContainerIndex = function findContainerIndex(element) {\n // NOTE: search `containerGroups` because it's possible a group contains no tabbable\n // nodes, but still contains focusable nodes (e.g. if they all have `tabindex=-1`)\n // and we still need to find the element in there\n return state.containerGroups.findIndex(function (_ref) {\n var container = _ref.container,\n tabbableNodes = _ref.tabbableNodes;\n return container.contains(element) ||\n // fall back to explicit tabbable search which will take into consideration any\n // web components if the `tabbableOptions.getShadowRoot` option was used for\n // the trap, enabling shadow DOM support in tabbable (`Node.contains()` doesn't\n // look inside web components even if open)\n tabbableNodes.find(function (node) {\n return node === element;\n });\n });\n };\n\n /**\n * Gets the node for the given option, which is expected to be an option that\n * can be either a DOM node, a string that is a selector to get a node, `false`\n * (if a node is explicitly NOT given), or a function that returns any of these\n * values.\n * @param {string} optionName\n * @returns {undefined | false | HTMLElement | SVGElement} Returns\n * `undefined` if the option is not specified; `false` if the option\n * resolved to `false` (node explicitly not given); otherwise, the resolved\n * DOM node.\n * @throws {Error} If the option is set, not `false`, and is not, or does not\n * resolve to a node.\n */\n var getNodeForOption = function getNodeForOption(optionName) {\n var optionValue = config[optionName];\n if (typeof optionValue === 'function') {\n for (var _len2 = arguments.length, params = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n params[_key2 - 1] = arguments[_key2];\n }\n optionValue = optionValue.apply(void 0, params);\n }\n if (optionValue === true) {\n optionValue = undefined; // use default value\n }\n\n if (!optionValue) {\n if (optionValue === undefined || optionValue === false) {\n return optionValue;\n }\n // else, empty string (invalid), null (invalid), 0 (invalid)\n\n throw new Error(\"`\".concat(optionName, \"` was specified but was not a node, or did not return a node\"));\n }\n var node = optionValue; // could be HTMLElement, SVGElement, or non-empty string at this point\n\n if (typeof optionValue === 'string') {\n node = doc.querySelector(optionValue); // resolve to node, or null if fails\n if (!node) {\n throw new Error(\"`\".concat(optionName, \"` as selector refers to no known node\"));\n }\n }\n return node;\n };\n var getInitialFocusNode = function getInitialFocusNode() {\n var node = getNodeForOption('initialFocus');\n\n // false explicitly indicates we want no initialFocus at all\n if (node === false) {\n return false;\n }\n if (node === undefined) {\n // option not specified: use fallback options\n if (findContainerIndex(doc.activeElement) >= 0) {\n node = doc.activeElement;\n } else {\n var firstTabbableGroup = state.tabbableGroups[0];\n var firstTabbableNode = firstTabbableGroup && firstTabbableGroup.firstTabbableNode;\n\n // NOTE: `fallbackFocus` option function cannot return `false` (not supported)\n node = firstTabbableNode || getNodeForOption('fallbackFocus');\n }\n }\n if (!node) {\n throw new Error('Your focus-trap needs to have at least one focusable element');\n }\n return node;\n };\n var updateTabbableNodes = function updateTabbableNodes() {\n state.containerGroups = state.containers.map(function (container) {\n var tabbableNodes = tabbable(container, config.tabbableOptions);\n\n // NOTE: if we have tabbable nodes, we must have focusable nodes; focusable nodes\n // are a superset of tabbable nodes\n var focusableNodes = focusable(container, config.tabbableOptions);\n return {\n container: container,\n tabbableNodes: tabbableNodes,\n focusableNodes: focusableNodes,\n firstTabbableNode: tabbableNodes.length > 0 ? tabbableNodes[0] : null,\n lastTabbableNode: tabbableNodes.length > 0 ? tabbableNodes[tabbableNodes.length - 1] : null,\n /**\n * Finds the __tabbable__ node that follows the given node in the specified direction,\n * in this container, if any.\n * @param {HTMLElement} node\n * @param {boolean} [forward] True if going in forward tab order; false if going\n * in reverse.\n * @returns {HTMLElement|undefined} The next tabbable node, if any.\n */\n nextTabbableNode: function nextTabbableNode(node) {\n var forward = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n // NOTE: If tabindex is positive (in order to manipulate the tab order separate\n // from the DOM order), this __will not work__ because the list of focusableNodes,\n // while it contains tabbable nodes, does not sort its nodes in any order other\n // than DOM order, because it can't: Where would you place focusable (but not\n // tabbable) nodes in that order? They have no order, because they aren't tabbale...\n // Support for positive tabindex is already broken and hard to manage (possibly\n // not supportable, TBD), so this isn't going to make things worse than they\n // already are, and at least makes things better for the majority of cases where\n // tabindex is either 0/unset or negative.\n // FYI, positive tabindex issue: https://github.com/focus-trap/focus-trap/issues/375\n var nodeIdx = focusableNodes.findIndex(function (n) {\n return n === node;\n });\n if (nodeIdx < 0) {\n return undefined;\n }\n if (forward) {\n return focusableNodes.slice(nodeIdx + 1).find(function (n) {\n return isTabbable(n, config.tabbableOptions);\n });\n }\n return focusableNodes.slice(0, nodeIdx).reverse().find(function (n) {\n return isTabbable(n, config.tabbableOptions);\n });\n }\n };\n });\n state.tabbableGroups = state.containerGroups.filter(function (group) {\n return group.tabbableNodes.length > 0;\n });\n\n // throw if no groups have tabbable nodes and we don't have a fallback focus node either\n if (state.tabbableGroups.length <= 0 && !getNodeForOption('fallbackFocus') // returning false not supported for this option\n ) {\n throw new Error('Your focus-trap must have at least one container with at least one tabbable node in it at all times');\n }\n };\n var tryFocus = function tryFocus(node) {\n if (node === false) {\n return;\n }\n if (node === doc.activeElement) {\n return;\n }\n if (!node || !node.focus) {\n tryFocus(getInitialFocusNode());\n return;\n }\n node.focus({\n preventScroll: !!config.preventScroll\n });\n state.mostRecentlyFocusedNode = node;\n if (isSelectableInput(node)) {\n node.select();\n }\n };\n var getReturnFocusNode = function getReturnFocusNode(previousActiveElement) {\n var node = getNodeForOption('setReturnFocus', previousActiveElement);\n return node ? node : node === false ? false : previousActiveElement;\n };\n\n // This needs to be done on mousedown and touchstart instead of click\n // so that it precedes the focus event.\n var checkPointerDown = function checkPointerDown(e) {\n var target = getActualTarget(e);\n if (findContainerIndex(target) >= 0) {\n // allow the click since it ocurred inside the trap\n return;\n }\n if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n // immediately deactivate the trap\n trap.deactivate({\n // if, on deactivation, we should return focus to the node originally-focused\n // when the trap was activated (or the configured `setReturnFocus` node),\n // then assume it's also OK to return focus to the outside node that was\n // just clicked, causing deactivation, as long as that node is focusable;\n // if it isn't focusable, then return focus to the original node focused\n // on activation (or the configured `setReturnFocus` node)\n // NOTE: by setting `returnFocus: false`, deactivate() will do nothing,\n // which will result in the outside click setting focus to the node\n // that was clicked, whether it's focusable or not; by setting\n // `returnFocus: true`, we'll attempt to re-focus the node originally-focused\n // on activation (or the configured `setReturnFocus` node)\n returnFocus: config.returnFocusOnDeactivate && !isFocusable(target, config.tabbableOptions)\n });\n return;\n }\n\n // This is needed for mobile devices.\n // (If we'll only let `click` events through,\n // then on mobile they will be blocked anyways if `touchstart` is blocked.)\n if (valueOrHandler(config.allowOutsideClick, e)) {\n // allow the click outside the trap to take place\n return;\n }\n\n // otherwise, prevent the click\n e.preventDefault();\n };\n\n // In case focus escapes the trap for some strange reason, pull it back in.\n var checkFocusIn = function checkFocusIn(e) {\n var target = getActualTarget(e);\n var targetContained = findContainerIndex(target) >= 0;\n\n // In Firefox when you Tab out of an iframe the Document is briefly focused.\n if (targetContained || target instanceof Document) {\n if (targetContained) {\n state.mostRecentlyFocusedNode = target;\n }\n } else {\n // escaped! pull it back in to where it just left\n e.stopImmediatePropagation();\n tryFocus(state.mostRecentlyFocusedNode || getInitialFocusNode());\n }\n };\n\n // Hijack key nav events on the first and last focusable nodes of the trap,\n // in order to prevent focus from escaping. If it escapes for even a\n // moment it can end up scrolling the page and causing confusion so we\n // kind of need to capture the action at the keydown phase.\n var checkKeyNav = function checkKeyNav(event) {\n var isBackward = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var target = getActualTarget(event);\n updateTabbableNodes();\n var destinationNode = null;\n if (state.tabbableGroups.length > 0) {\n // make sure the target is actually contained in a group\n // NOTE: the target may also be the container itself if it's focusable\n // with tabIndex='-1' and was given initial focus\n var containerIndex = findContainerIndex(target);\n var containerGroup = containerIndex >= 0 ? state.containerGroups[containerIndex] : undefined;\n if (containerIndex < 0) {\n // target not found in any group: quite possible focus has escaped the trap,\n // so bring it back into...\n if (isBackward) {\n // ...the last node in the last group\n destinationNode = state.tabbableGroups[state.tabbableGroups.length - 1].lastTabbableNode;\n } else {\n // ...the first node in the first group\n destinationNode = state.tabbableGroups[0].firstTabbableNode;\n }\n } else if (isBackward) {\n // REVERSE\n\n // is the target the first tabbable node in a group?\n var startOfGroupIndex = findIndex(state.tabbableGroups, function (_ref2) {\n var firstTabbableNode = _ref2.firstTabbableNode;\n return target === firstTabbableNode;\n });\n if (startOfGroupIndex < 0 && (containerGroup.container === target || isFocusable(target, config.tabbableOptions) && !isTabbable(target, config.tabbableOptions) && !containerGroup.nextTabbableNode(target, false))) {\n // an exception case where the target is either the container itself, or\n // a non-tabbable node that was given focus (i.e. tabindex is negative\n // and user clicked on it or node was programmatically given focus)\n // and is not followed by any other tabbable node, in which\n // case, we should handle shift+tab as if focus were on the container's\n // first tabbable node, and go to the last tabbable node of the LAST group\n startOfGroupIndex = containerIndex;\n }\n if (startOfGroupIndex >= 0) {\n // YES: then shift+tab should go to the last tabbable node in the\n // previous group (and wrap around to the last tabbable node of\n // the LAST group if it's the first tabbable node of the FIRST group)\n var destinationGroupIndex = startOfGroupIndex === 0 ? state.tabbableGroups.length - 1 : startOfGroupIndex - 1;\n var destinationGroup = state.tabbableGroups[destinationGroupIndex];\n destinationNode = destinationGroup.lastTabbableNode;\n } else if (!isTabEvent(event)) {\n // user must have customized the nav keys so we have to move focus manually _within_\n // the active group: do this based on the order determined by tabbable()\n destinationNode = containerGroup.nextTabbableNode(target, false);\n }\n } else {\n // FORWARD\n\n // is the target the last tabbable node in a group?\n var lastOfGroupIndex = findIndex(state.tabbableGroups, function (_ref3) {\n var lastTabbableNode = _ref3.lastTabbableNode;\n return target === lastTabbableNode;\n });\n if (lastOfGroupIndex < 0 && (containerGroup.container === target || isFocusable(target, config.tabbableOptions) && !isTabbable(target, config.tabbableOptions) && !containerGroup.nextTabbableNode(target))) {\n // an exception case where the target is the container itself, or\n // a non-tabbable node that was given focus (i.e. tabindex is negative\n // and user clicked on it or node was programmatically given focus)\n // and is not followed by any other tabbable node, in which\n // case, we should handle tab as if focus were on the container's\n // last tabbable node, and go to the first tabbable node of the FIRST group\n lastOfGroupIndex = containerIndex;\n }\n if (lastOfGroupIndex >= 0) {\n // YES: then tab should go to the first tabbable node in the next\n // group (and wrap around to the first tabbable node of the FIRST\n // group if it's the last tabbable node of the LAST group)\n var _destinationGroupIndex = lastOfGroupIndex === state.tabbableGroups.length - 1 ? 0 : lastOfGroupIndex + 1;\n var _destinationGroup = state.tabbableGroups[_destinationGroupIndex];\n destinationNode = _destinationGroup.firstTabbableNode;\n } else if (!isTabEvent(event)) {\n // user must have customized the nav keys so we have to move focus manually _within_\n // the active group: do this based on the order determined by tabbable()\n destinationNode = containerGroup.nextTabbableNode(target);\n }\n }\n } else {\n // no groups available\n // NOTE: the fallbackFocus option does not support returning false to opt-out\n destinationNode = getNodeForOption('fallbackFocus');\n }\n if (destinationNode) {\n if (isTabEvent(event)) {\n // since tab natively moves focus, we wouldn't have a destination node unless we\n // were on the edge of a container and had to move to the next/previous edge, in\n // which case we want to prevent default to keep the browser from moving focus\n // to where it normally would\n event.preventDefault();\n }\n tryFocus(destinationNode);\n }\n // else, let the browser take care of [shift+]tab and move the focus\n };\n\n var checkKey = function checkKey(event) {\n if (isEscapeEvent(event) && valueOrHandler(config.escapeDeactivates, event) !== false) {\n event.preventDefault();\n trap.deactivate();\n return;\n }\n if (config.isKeyForward(event) || config.isKeyBackward(event)) {\n checkKeyNav(event, config.isKeyBackward(event));\n }\n };\n var checkClick = function checkClick(e) {\n var target = getActualTarget(e);\n if (findContainerIndex(target) >= 0) {\n return;\n }\n if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n return;\n }\n if (valueOrHandler(config.allowOutsideClick, e)) {\n return;\n }\n e.preventDefault();\n e.stopImmediatePropagation();\n };\n\n //\n // EVENT LISTENERS\n //\n\n var addListeners = function addListeners() {\n if (!state.active) {\n return;\n }\n\n // There can be only one listening focus trap at a time\n activeFocusTraps.activateTrap(trapStack, trap);\n\n // Delay ensures that the focused element doesn't capture the event\n // that caused the focus trap activation.\n state.delayInitialFocusTimer = config.delayInitialFocus ? delay(function () {\n tryFocus(getInitialFocusNode());\n }) : tryFocus(getInitialFocusNode());\n doc.addEventListener('focusin', checkFocusIn, true);\n doc.addEventListener('mousedown', checkPointerDown, {\n capture: true,\n passive: false\n });\n doc.addEventListener('touchstart', checkPointerDown, {\n capture: true,\n passive: false\n });\n doc.addEventListener('click', checkClick, {\n capture: true,\n passive: false\n });\n doc.addEventListener('keydown', checkKey, {\n capture: true,\n passive: false\n });\n return trap;\n };\n var removeListeners = function removeListeners() {\n if (!state.active) {\n return;\n }\n doc.removeEventListener('focusin', checkFocusIn, true);\n doc.removeEventListener('mousedown', checkPointerDown, true);\n doc.removeEventListener('touchstart', checkPointerDown, true);\n doc.removeEventListener('click', checkClick, true);\n doc.removeEventListener('keydown', checkKey, true);\n return trap;\n };\n\n //\n // TRAP DEFINITION\n //\n\n trap = {\n get active() {\n return state.active;\n },\n get paused() {\n return state.paused;\n },\n activate: function activate(activateOptions) {\n if (state.active) {\n return this;\n }\n var onActivate = getOption(activateOptions, 'onActivate');\n var onPostActivate = getOption(activateOptions, 'onPostActivate');\n var checkCanFocusTrap = getOption(activateOptions, 'checkCanFocusTrap');\n if (!checkCanFocusTrap) {\n updateTabbableNodes();\n }\n state.active = true;\n state.paused = false;\n state.nodeFocusedBeforeActivation = doc.activeElement;\n if (onActivate) {\n onActivate();\n }\n var finishActivation = function finishActivation() {\n if (checkCanFocusTrap) {\n updateTabbableNodes();\n }\n addListeners();\n if (onPostActivate) {\n onPostActivate();\n }\n };\n if (checkCanFocusTrap) {\n checkCanFocusTrap(state.containers.concat()).then(finishActivation, finishActivation);\n return this;\n }\n finishActivation();\n return this;\n },\n deactivate: function deactivate(deactivateOptions) {\n if (!state.active) {\n return this;\n }\n var options = _objectSpread2({\n onDeactivate: config.onDeactivate,\n onPostDeactivate: config.onPostDeactivate,\n checkCanReturnFocus: config.checkCanReturnFocus\n }, deactivateOptions);\n clearTimeout(state.delayInitialFocusTimer); // noop if undefined\n state.delayInitialFocusTimer = undefined;\n removeListeners();\n state.active = false;\n state.paused = false;\n activeFocusTraps.deactivateTrap(trapStack, trap);\n var onDeactivate = getOption(options, 'onDeactivate');\n var onPostDeactivate = getOption(options, 'onPostDeactivate');\n var checkCanReturnFocus = getOption(options, 'checkCanReturnFocus');\n var returnFocus = getOption(options, 'returnFocus', 'returnFocusOnDeactivate');\n if (onDeactivate) {\n onDeactivate();\n }\n var finishDeactivation = function finishDeactivation() {\n delay(function () {\n if (returnFocus) {\n tryFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation));\n }\n if (onPostDeactivate) {\n onPostDeactivate();\n }\n });\n };\n if (returnFocus && checkCanReturnFocus) {\n checkCanReturnFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation)).then(finishDeactivation, finishDeactivation);\n return this;\n }\n finishDeactivation();\n return this;\n },\n pause: function pause() {\n if (state.paused || !state.active) {\n return this;\n }\n state.paused = true;\n removeListeners();\n return this;\n },\n unpause: function unpause() {\n if (!state.paused || !state.active) {\n return this;\n }\n state.paused = false;\n updateTabbableNodes();\n addListeners();\n return this;\n },\n updateContainerElements: function updateContainerElements(containerElements) {\n var elementsAsArray = [].concat(containerElements).filter(Boolean);\n state.containers = elementsAsArray.map(function (element) {\n return typeof element === 'string' ? doc.querySelector(element) : element;\n });\n if (state.active) {\n updateTabbableNodes();\n }\n return this;\n }\n };\n\n // initialize container elements\n trap.updateContainerElements(elements);\n return trap;\n};\n\nexport { createFocusTrap };\n//# sourceMappingURL=focus-trap.esm.js.map\n","/*!\n * focus-trap-vue v4.0.0\n * (c) 2022 Eduardo San Martin Morote\n * @license MIT\n */\nimport { defineComponent, ref, computed, onMounted, watch, onUnmounted, Comment, cloneVNode } from 'vue';\nimport { createFocusTrap } from 'focus-trap';\n\nfunction defineFocusTrapProps(props) {\r\n return props;\r\n}\r\nconst FocusTrapProps = defineFocusTrapProps({\r\n escapeDeactivates: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n returnFocusOnDeactivate: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n allowOutsideClick: {\r\n type: [Boolean, Function],\r\n default: true,\r\n },\r\n clickOutsideDeactivates: [Boolean, Function],\r\n initialFocus: [String, Function, Boolean],\r\n fallbackFocus: [String, Function],\r\n checkCanFocusTrap: Function,\r\n checkCanReturnFocus: Function,\r\n delayInitialFocus: { type: Boolean, default: true },\r\n document: Object,\r\n preventScroll: Boolean,\r\n setReturnFocus: [Object, String, Boolean, Function],\r\n tabbableOptions: Object,\r\n});\r\nconst FocusTrap = defineComponent({\r\n props: Object.assign({\r\n active: {\r\n // TODO: could be options for activate but what about the options for deactivating?\r\n type: Boolean,\r\n default: true,\r\n },\r\n }, FocusTrapProps),\r\n emits: [\r\n 'update:active',\r\n 'activate',\r\n 'postActivate',\r\n 'deactivate',\r\n 'postDeactivate',\r\n ],\r\n render() {\r\n return this.renderImpl();\r\n },\r\n setup(props, { slots, emit }) {\r\n let trap;\r\n const wrapperEl = ref(null);\r\n const el = computed(() => {\r\n const innerElement = wrapperEl.value;\r\n return (innerElement &&\r\n (innerElement instanceof HTMLElement ? innerElement : innerElement.$el));\r\n });\r\n const ensureTrap = () => {\r\n if (trap) {\r\n return trap;\r\n }\r\n return (trap = createFocusTrap(el.value, {\r\n escapeDeactivates: props.escapeDeactivates,\r\n allowOutsideClick: props.allowOutsideClick,\r\n returnFocusOnDeactivate: props.returnFocusOnDeactivate,\r\n clickOutsideDeactivates: props.clickOutsideDeactivates,\r\n onActivate: () => {\r\n emit('update:active', true);\r\n emit('activate');\r\n },\r\n onDeactivate: () => {\r\n emit('update:active', false);\r\n emit('deactivate');\r\n },\r\n onPostActivate: () => emit('postActivate'),\r\n onPostDeactivate: () => emit('postDeactivate'),\r\n initialFocus: props.initialFocus,\r\n fallbackFocus: props.fallbackFocus,\r\n tabbableOptions: props.tabbableOptions,\r\n }));\r\n };\r\n onMounted(() => {\r\n watch(() => props.active, active => {\r\n if (active && el.value) {\r\n // has no effect if already activated\r\n ensureTrap().activate();\r\n }\r\n else if (trap) {\r\n trap.deactivate();\r\n // this allows v-if blocks to work by invalidating the trap\r\n // and forcing a new one to be created\r\n if (!el.value || el.value.nodeType === Node.COMMENT_NODE) {\r\n trap = null;\r\n }\r\n }\r\n }, { immediate: true, flush: 'post' });\r\n });\r\n onUnmounted(() => {\r\n if (trap)\r\n trap.deactivate();\r\n trap = null;\r\n });\r\n // Use object-return for setup so that we can expose the 'activate'\r\n // and 'deactivate' methods without making use of the 'expose({ ... })'\r\n // method as the ExposeProxy system is problematic for users migrating\r\n // from Vue2 -> Vue3 due to the ExposeProxy (correctly) preventing child\r\n // components from reading the internal state of their $parent. This is\r\n // problematic for migrating users because the the Vue2-based VueRouter\r\n // _requires_ that functionality as it does $parent._routerRoot to set\r\n // the $router and $route properties on components.\r\n return {\r\n activate() {\r\n ensureTrap();\r\n // @ts-ignore\r\n trap.activate();\r\n },\r\n deactivate() {\r\n trap && trap.deactivate();\r\n },\r\n renderImpl() {\r\n if (!slots.default)\r\n return null;\r\n const vNodes = slots.default().filter(vnode => vnode.type !== Comment);\r\n if (!vNodes || !vNodes.length || vNodes.length > 1) {\r\n {\r\n console.error('[focus-trap-vue]: FocusTrap requires exactly one child.');\r\n }\r\n return vNodes;\r\n }\r\n const vnode = cloneVNode(vNodes[0], { ref: wrapperEl });\r\n return vnode;\r\n },\r\n };\r\n },\r\n});\n\nexport { FocusTrap };\n","export default function useDebounce() {\n /**\n * Returns a function, that, as long as it continues to be invoked, will not be triggered. The initial function will be called after the debounced function stops being called for a certain number of milliseconds.\n *\n * @param initialFunction Initial function to debounce\n * @param delay Time to wait for recurring bounces\n * @returns the debounced function.\n */\n const debounce = (initialFunction: (...args: any) => any, delay: number): (...args: any) => void => {\n // Store timeout ID outside the returned function.\n let timeoutId: number\n\n return (...args) => {\n // If the debounced function was already invoked before, this will cancel the earlier timeout; thus, its callback will not be invoked.\n clearTimeout(timeoutId)\n\n // Starts a new timer which will call the initial function after the specified wait time unless the debounced function is called again.\n timeoutId = window?.setTimeout(() => {\n initialFunction(...args)\n }, delay)\n }\n }\n\n return {\n debounce,\n }\n}\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/**\n * Adds the key-value `pair` to `map`.\n *\n * @private\n * @param {Object} map The map to modify.\n * @param {Array} pair The key-value pair to add.\n * @returns {Object} Returns `map`.\n */\nfunction addMapEntry(map, pair) {\n // Don't return `map.set` because it's not chainable in IE 11.\n map.set(pair[0], pair[1]);\n return map;\n}\n\n/**\n * Adds `value` to `set`.\n *\n * @private\n * @param {Object} set The set to modify.\n * @param {*} value The value to add.\n * @returns {Object} Returns `set`.\n */\nfunction addSetEntry(set, value) {\n // Don't return `set.add` because it's not chainable in IE 11.\n set.add(value);\n return set;\n}\n\n/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array ? array.length : 0;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n this.__data__ = new ListCache(entries);\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n return this.__data__['delete'](key);\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var cache = this.__data__;\n if (cache instanceof ListCache) {\n var pairs = cache.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n return this;\n }\n cache = this.__data__ = new MapCache(pairs);\n }\n cache.set(key, value);\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n object[key] = value;\n }\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @param {boolean} [isFull] Specify a clone including symbols.\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, isDeep, isFull, customizer, key, object, stack) {\n var result;\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n if (isHostObject(value)) {\n return object ? value : {};\n }\n result = initCloneObject(isFunc ? {} : value);\n if (!isDeep) {\n return copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, baseClone, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (!isArr) {\n var props = isFull ? getAllKeys(value) : keys(value);\n }\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack));\n });\n return result;\n}\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} prototype The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nfunction baseCreate(proto) {\n return isObject(proto) ? objectCreate(proto) : {};\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n return objectToString.call(value);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var result = new buffer.constructor(buffer.length);\n buffer.copy(result);\n return result;\n}\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\n/**\n * Creates a clone of `map`.\n *\n * @private\n * @param {Object} map The map to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned map.\n */\nfunction cloneMap(map, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map);\n return arrayReduce(array, addMapEntry, new map.constructor);\n}\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\n/**\n * Creates a clone of `set`.\n *\n * @private\n * @param {Object} set The set to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned set.\n */\nfunction cloneSet(set, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set);\n return arrayReduce(array, addSetEntry, new set.constructor);\n}\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n assignValue(object, key, newValue === undefined ? source[key] : newValue);\n }\n return object;\n}\n\n/**\n * Copies own symbol properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Creates an array of the own enumerable symbol properties of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge < 14, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, cloneFunc, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return cloneMap(object, isDeep, cloneFunc);\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return cloneSet(object, isDeep, cloneFunc);\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, true, true);\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = cloneDeep;\n","<template>\n <div\n v-if=\"(mobileSidebarOpen && mobileOverlay && mobileEnabled)\"\n class=\"kong-ui-app-sidebar-overlay\"\n @click=\"closeSidebarFromOverlay\"\n />\n <FocusTrap\n ref=\"focusTrap\"\n :active=\"false\"\n allow-outside-click\n fallback-focus=\".kong-ui-app-sidebar\"\n >\n <aside\n class=\"kong-ui-app-sidebar\"\n :class=\"{\n 'sidebar-open': mobileSidebarOpen,\n 'no-sidebar-header': !hasHeader,\n 'mobile-header-hidden': mobileEnabled && (!hasHeader || !mobileHeaderVisible),\n 'mobile-disabled': !mobileEnabled,\n 'disable-transitions': transitionsDisabled\n }\"\n tabindex=\"-1\"\n >\n <div\n v-if=\"hasHeader\"\n class=\"sidebar-header\"\n >\n <slot name=\"header\" />\n </div>\n\n <div class=\"sidebar-content-container\">\n <div\n v-if=\"hasTopContent\"\n class=\"sidebar-top\"\n >\n <slot name=\"top\" />\n </div>\n <nav aria-label=\"Main menu\">\n <ul\n v-if=\"topNavItems.length\"\n class=\"level-primary top-items\"\n >\n <SidebarItem\n v-for=\"item in topNavItems\"\n :key=\"item.name\"\n :item=\"item\"\n @click=\"itemClick\"\n />\n </ul>\n\n <div\n v-if=\"topNavItems.length && bottomNavItems.length\"\n class=\"sidebar-level-divider\"\n role=\"separator\"\n />\n\n <ul\n v-if=\"bottomNavItems.length\"\n class=\"level-primary bottom-items\"\n >\n <SidebarItem\n v-for=\"item in bottomNavItems\"\n :key=\"item.name\"\n :item=\"item\"\n @click=\"itemClick\"\n />\n </ul>\n </nav>\n </div>\n\n <SidebarFooter\n v-if=\"profileName || profileItems.length\"\n class=\"sidebar-profile-menu\"\n :item-count=\"profileItems.length\"\n :name=\"profileName\"\n >\n <KDropdownItem\n v-for=\"item in profileItems\"\n :key=\"item.name\"\n :class=\"[{ 'has-divider': item.hasDivider },{ 'external-profile-dropdown-link': (item.external || item.newWindow) && typeof item.to === 'string' }]\"\n :has-divider=\"item.hasDivider\"\n :item=\"(item.external || item.newWindow) && typeof item.to === 'string' ? undefined : { label: item.name, to: item.to }\"\n @click=\"itemClick(item)\"\n >\n <a\n v-if=\"(item.external || item.newWindow) && typeof item.to === 'string'\"\n class=\"sidebar-item-external-link\"\n :href=\"item.to\"\n :target=\"item.newWindow ? '_blank' : undefined\"\n >\n {{ item.name }}\n <KIcon\n v-if=\"item.newWindow\"\n color=\"var(--black-70, rgba(0,0,0,0.7))\"\n icon=\"externalLink\"\n size=\"20\"\n viewBox=\"0 0 20 20\"\n />\n </a>\n </KDropdownItem>\n </SidebarFooter>\n </aside>\n </FocusTrap>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, useSlots, PropType, onMounted, onBeforeUnmount, nextTick } from 'vue'\nimport type { SidebarPrimaryItem, SidebarProfileItem } from '../../types'\nimport SidebarItem from '../sidebar/SidebarItem.vue'\nimport SidebarFooter from './SidebarFooter.vue'\nimport { KDropdownItem, KIcon } from '@kong/kongponents'\nimport { FocusTrap } from 'focus-trap-vue'\nimport { useDebounce } from '../../composables'\nimport clonedeep from 'lodash.clonedeep'\n\nconst emit = defineEmits(['click', 'toggle'])\n\nconst props = defineProps({\n topItems: {\n type: Array as PropType<SidebarPrimaryItem[]>,\n default: () => ([]),\n },\n bottomItems: {\n type: Array as PropType<SidebarPrimaryItem[]>,\n default: () => ([]),\n },\n profileItems: {\n type: Array as PropType<SidebarProfileItem[]>,\n default: () => ([]),\n },\n profileName: {\n type: String,\n default: '',\n },\n headerHeight: {\n type: Number,\n default: 60,\n },\n topOffset: {\n type: Number,\n default: 0,\n },\n zIndex: {\n type: Number,\n default: 2,\n },\n // Props that only impact mobile\n open: {\n type: Boolean,\n default: false,\n },\n mobileEnabled: {\n type: Boolean,\n default: false,\n },\n mobileTopOffset: {\n type: Number,\n default: 0,\n },\n mobileHeaderVisible: {\n type: Boolean,\n default: false,\n },\n mobileCloseDelay: {\n type: Number,\n default: 350,\n },\n mobileOverlay: {\n type: Boolean,\n default: true,\n },\n mobileOverlayZIndex: {\n type: Number,\n default: null,\n },\n mobileOverlayCloseOnClick: {\n type: Boolean,\n default: true,\n },\n})\n\nconst slots = useSlots()\nconst hasHeader = computed(() => !!slots.header)\nconst hasTopContent = computed(() => !!slots.top)\n\nconst sidebarContainerStyles = computed(() => ({\n mobileTop: props.mobileTopOffset && props.mobileEnabled ? `${props.mobileTopOffset}px` : props.topOffset ? `${props.topOffset}px` : '0',\n top: props.topOffset ? `${props.topOffset}px` : '0',\n mobileHeight: props.mobileTopOffset && props.mobileEnabled ? `calc(100% - ${props.mobileTopOffset}px)` : '100%',\n height: props.topOffset ? `calc(100% - ${props.topOffset}px)` : '100%',\n}))\n\nconst headerContainerStyles = computed(() => ({\n display: !props.mobileHeaderVisible && props.mobileEnabled ? 'none' : 'flex',\n minHeight: `${props.headerHeight}px`,\n}))\n\nconst sidebarNavStyles = computed(() => ({\n marginTop: hasHeader.value ? `${props.headerHeight}px` : '0',\n}))\n\nconst sidebarOverlayStyles = computed(() => ({\n top: props.mobileTopOffset && props.mobileEnabled ? `${props.mobileTopOffset}px` : '0',\n zIndex: props.mobileOverlayZIndex !== null ? props.mobileOverlayZIndex : (props.zIndex > 1 ? props.zIndex - 1 : 1),\n}))\n\nconst prepareNavItems = (items: SidebarPrimaryItem[]): SidebarPrimaryItem[] => {\n // Create a deep copy of `items` to manipulate\n const clonedItems = clonedeep(items)\n\n return clonedItems.map((item: SidebarPrimaryItem) => {\n if (item) {\n // If `item.key` is not provided, generate a key from the `item.name`\n if (!item.key || !item.key?.trim()) {\n item.key = String(item.name || '').trim().toLowerCase().replace(/[^[a-z]/gi, '-')\n }\n\n // If `item.testId` is not provided, generate a testId from the `item.name`\n if (!item.testId || !item.testId?.trim()) {\n item.testId = String(item.name || '').trim().toLowerCase().replace(/[^[a-z]/gi, '-')\n }\n\n // Loop through all secondary nav items and add the `parentKey` property set to the item.key value\n for (const childItem of item.items || []) {\n childItem.parentKey = item.key\n\n // If `childItem.testId` is not provided, generate a testId from the `item.name`\n if (!childItem.testId || !childItem.testId?.trim()) {\n childItem.testId = String(childItem.name || '').trim().toLowerCase().replace(/[^[a-z]/gi, '-')\n }\n }\n }\n\n return item\n })\n}\n\nconst topNavItems = computed(() => props.topItems.length ? prepareNavItems(props.topItems) : [])\nconst bottomNavItems = computed(() => props.bottomItems.length ? prepareNavItems(props.bottomItems) : [])\n\n// Do not manually set the value of `mobileSidebarOpen`; always call `toggleSidebar(true/false)`\nconst mobileSidebarOpen = ref<boolean>(props.open)\nconst toggleSidebar = (isOpen: boolean) => {\n if (mobileSidebarOpen.value !== isOpen) {\n mobileSidebarOpen.value = isOpen\n emit('toggle', isOpen)\n }\n\n // Add or remove a class from the `body` tag when the sidebar is opened/closed\n // This allows for the consuming app to add CSS to prevent overflow-y while the sidebar is open\n isOpen ? document?.body?.classList.add('kong-ui-app-sidebar-open') : document?.body?.classList.remove('kong-ui-app-sidebar-open')\n\n // Always reset to false\n sidebarTogglePending.value = false\n}\n\nconst closeSidebarFromOverlay = (): void => {\n if (props.mobileOverlayCloseOnClick) {\n toggleSidebar(false)\n }\n}\n\n// Store a boolean to indicate if a sidebar toggle has already been requested\nconst sidebarTogglePending = ref<boolean>(false)\n\nconst itemClick = (item: SidebarPrimaryItem | SidebarProfileItem): void => {\n // Set the pending toggle value to true so that the `route.path` watcher does not auto-close\n sidebarTogglePending.value = true\n\n emit('click', item)\n\n // Automatically close the sidebar when an item is clicked\n // Since we navigate on every item click, it should be fine to auto-close the mobile sidebar\n setTimeout(() => {\n toggleSidebar(false)\n }, props.mobileCloseDelay)\n}\n\n// Toggle the sidebar when `props.open` is updated\nwatch(() => props.open, (isOpen: boolean) => {\n toggleSidebar(isOpen)\n})\n\n// Automatically close the sidebar if the window is resized\nconst { debounce } = useDebounce()\nconst debouncedResizeHandler = debounce(() => {\n // Only trigger toggle if the sidebar is open, and if the windowWidth changes\n if (mobileSidebarOpen.value && (windowWidth.value !== window?.innerWidth || 0)) {\n windowWidth.value = window?.innerWidth\n toggleSidebar(false)\n }\n}, 200)\n\n// Disable mobile sidebar transitions when the window is resized\nconst windowWidth = ref<number>()\nconst transitionsDisabled = ref(false)\nconst resizeTimer = ref()\nconst disableTransitions = () => {\n if (transitionsDisabled.value) {\n return\n }\n\n transitionsDisabled.value = true\n clearTimeout(resizeTimer.value)\n resizeTimer.value = setTimeout(() => (transitionsDisabled.value = false), 1300)\n}\n\n// Initialize a focus trap when the mobile sidebar is visible for a11y\nconst focusTrap = ref<InstanceType<typeof FocusTrap> | null>(null)\nconst focusTrapEnabled = computed((): boolean => mobileSidebarOpen.value && props.mobileEnabled)\n// Enable/disable the focus trap\nconst toggleFocusTrap = async (isActive: boolean): Promise<void> => {\n if (isActive) {\n await nextTick()\n // Delay ensures that the focused element doesn't capture the event\n // that caused the focus trap activation.\n // We're waiting 300ms to ensure the enter transition has completed\n await new Promise((resolve) => setTimeout(resolve, 300))\n focusTrap.value?.activate()\n } else {\n focusTrap.value?.deactivate()\n }\n}\n\nwatch(focusTrapEnabled, async (enabled: boolean) => {\n if (enabled) {\n await toggleFocusTrap(true)\n } else {\n await toggleFocusTrap(false)\n }\n}, { immediate: true })\n\nonMounted(() => {\n // Set the window width once the component mounts\n windowWidth.value = window?.innerWidth\n // Automatically close the sidebar if the window is resized\n window.addEventListener('resize', debouncedResizeHandler)\n // Disable mobile sidebar transitions when the window is resized\n window.addEventListener('resize', disableTransitions)\n})\n\nonBeforeUnmount(() => {\n // Cleanup event listener(s)\n window.removeEventListener('resize', debouncedResizeHandler)\n window.removeEventListener('resize', disableTransitions)\n})\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"../../styles/variables\";\n\n.kong-ui-app-sidebar {\n position: fixed;\n top: v-bind('sidebarContainerStyles.mobileTop');\n display: flex;\n flex-direction: column;\n width: 100%;\n height: v-bind('sidebarContainerStyles.mobileHeight');\n background: $sidebar-background;\n left: -100%;\n z-index: v-bind(zIndex);\n transition: left 0.2s ease-in-out;\n\n // Restrict the sidebar from going full-width on larger screens\n @media (min-width: $viewport-sm) {\n width: $sidebar-width;\n max-width: $sidebar-width;\n }\n\n @media (min-width: $viewport-md) {\n height: v-bind('sidebarContainerStyles.height');\n top: v-bind('sidebarContainerStyles.top');\n left: 0;\n }\n\n &.sidebar-open,\n &.mobile-disabled {\n left: 0;\n }\n\n &.mobile-disabled {\n width: $sidebar-width;\n }\n\n // Disable all transitions/animations on window.resize when this class is applied\n &.disable-transitions {\n animation: none !important;\n transition: none !important;\n }\n\n .sidebar-content-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n margin-top: v-bind('sidebarNavStyles.marginTop');\n padding-top: $sidebar-header-spacing;\n overflow-x: hidden;\n // Must use `scroll` so that the scrollbar width is always accounted for. Cannot use `overlay` here as it breaks in Firefox.\n overflow-y: scroll;\n // Only some browsers support `overflow: overlay`, it's deprecated\n @supports(overflow: overlay) {\n overflow-y: overlay;\n }\n @include scrollbarBase;\n\n // Only show scrollbar when hovering over nav\n &:hover {\n @include scrollbarVisible;\n }\n }\n\n :deep(.k-dropdown-item) {\n font-size: $sidebar-item-font-size;\n line-height: 1.3;\n }\n}\n\n// Remove the top margin if `props.mobileHeaderVisible` is false, or if no header slot is present\n.mobile-header-hidden .sidebar-content-container,\n.no-sidebar-header .sidebar-content-container {\n @media (max-width: ($viewport-md - 1px)) {\n margin-top: 0 !important;\n }\n}\n\n.sidebar-level-divider {\n width: calc(100% - 32px);\n height: 1px;\n min-height: 1px; // required for when scrollbar is present\n margin: 24px auto;\n background-color: rgba(#fff, 0.5);\n}\n\n.sidebar-header {\n position: absolute;\n display: v-bind('headerContainerStyles.display');\n min-height: v-bind('headerContainerStyles.minHeight');\n top: 0;\n left: 0;\n right: 0;\n z-index: 1;\n align-items: center;\n padding: 0 20px;\n color: #fff;\n background: linear-gradient(180deg, #003694 70.83%, rgba(0, 54, 148, 0) 100%);\n -webkit-user-select: none;\n user-select: none;\n\n @media (min-width: $viewport-md) {\n display: flex;\n }\n\n // Force the immediate child to be display flex\n :deep(>) {\n * {\n display: flex;\n }\n\n a {\n text-decoration: none;\n\n &:focus-visible {\n outline: 1px solid var(--steel-300, #A3B6D9);\n border-radius: $sidebar-item-border-radius\n }\n }\n }\n\n &:after{\n content: '';\n display: block;\n background-image: linear-gradient(#003496, #78785400);\n height: $sidebar-header-spacing;\n margin-bottom: -$sidebar-header-spacing;\n position: absolute;\n bottom: 0;\n left: 0;\n z-index: 1;\n width: 100%;\n }\n}\n\n.sidebar-top {\n display: flex;\n align-items: center;\n margin: 0 0 16px;\n padding: 0 8px;\n color: #fff;\n user-select: none;\n}\n\n.external-profile-dropdown-link {\n // Override padding on `button` element to apply to `.sidebar-item-external-link` instead\n :deep(button.k-dropdown-item-trigger) {\n padding: 0 !important;\n\n &:focus-visible {\n outline: none;\n }\n }\n}\n\n.sidebar-item-external-link {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 14px;\n line-height: 1.3;\n text-decoration: none;\n\n &:focus-visible {\n outline: 1px solid var(--steel-300, #A3B6D9) !important;\n }\n\n .external-profile-dropdown-link & {\n padding: var(--spacing-md) var(--spacing-lg);\n }\n\n :deep(.kong-icon) {\n display: inline-flex;\n margin-bottom: -7px;\n }\n}\n\n.kong-ui-app-sidebar-overlay {\n position: fixed;\n top: v-bind('sidebarOverlayStyles.top');\n bottom: 0;\n left: 0;\n right: 0;\n background-color: rgba(11, 23, 45, .6); // Same as KModal backdrop color\n z-index: v-bind('sidebarOverlayStyles.zIndex');\n\n @media (min-width: $viewport-md) {\n display: none !important;\n }\n}\n</style>\n\n<style lang=\"scss\">\n@import \"../../styles/variables\";\n\n// Scope with wrapper class intead of using `scoped` so these styles will apply to child components\n.kong-ui-app-sidebar {\n // Shared styles for the primary and secondary elements\n .level-primary,\n .level-secondary {\n margin: 0;\n padding: 0;\n list-style: none;\n }\n\n .level-primary {\n display: flex;\n flex-direction: column;\n padding: 0 8px; // if changed, ensure you test in ALL browsers\n\n &:last-of-type {\n margin-bottom: $sidebar-header-spacing * 2;\n }\n }\n}\n\nbody.kong-ui-app-sidebar-open {\n overflow: hidden;\n\n @media (min-width: $viewport-md) {\n overflow: auto;\n }\n}\n</style>\n","<template>\n <a\n aria-haspopup=\"true\"\n :aria-label=\"isActive ? 'Close Main Menu' : 'Open Main Menu'\"\n class=\"sidebar-menu-toggle\"\n :class=\"{ 'active': isActive }\"\n href=\"#\"\n role=\"button\"\n @click.prevent=\"toggle\"\n >\n <span class=\"line\" />\n <span class=\"line\" />\n <span class=\"line\" />\n </a>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watch } from 'vue'\n\nconst emit = defineEmits(['toggle'])\nconst props = defineProps({\n active: {\n type: Boolean,\n default: false,\n },\n})\n\nconst isActive = ref<boolean>(props.active || false)\nconst toggle = () => {\n isActive.value = !isActive.value\n emit('toggle', isActive.value)\n}\n\nwatch(() => props.active, (active) => {\n isActive.value = active\n})\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"../../styles/variables\";\n\n.sidebar-menu-toggle {\n position: relative;\n padding: 0 4px;\n border-radius: 3px;\n transition: all 0.3s ease-in-out;\n\n &:focus-visible {\n outline: 1px solid var(--kong-ui-app-sidebar-mobile-icon-color, var(--blue-500, #1155cb));\n }\n\n @media (min-width: $viewport-md) {\n display: none;\n }\n\n .line {\n display: block;\n width: 24px;\n height: 2px;\n border-radius: $sidebar-item-border-radius;\n background-color: var(--kong-ui-app-sidebar-mobile-icon-color, var(--blue-500, #1155cb));\n margin: 6px auto;\n transition: all 0.3s ease-in-out;\n }\n\n &.active {\n .line {\n &:nth-child(2) {\n opacity: 0;\n }\n\n &:nth-child(1) {\n transform: translateY(8px) rotate(45deg);\n }\n\n &:nth-child(3){\n transform: translateY(-8px) rotate(-45deg);\n }\n }\n }\n}\n</style>\n","<template>\n <div\n class=\"kong-ui-app-layout\"\n :class=\"[\n { 'navbar-hidden': navbar.hidden },\n { 'sidebar-hidden': sidebar.hidden },\n ]\"\n >\n <div id=\"kong-ui-app-layout-notification\">\n <slot name=\"notification\" />\n </div>\n <AppNavbar\n v-if=\"!navbar.hidden\"\n :left-offset=\"sidebar.hidden ? 0 : undefined\"\n :top-offset=\"notificationHeight\"\n >\n <template #mobile-sidebar-toggle>\n <SidebarToggle\n v-if=\"!sidebar.hidden\"\n :active=\"mobileSidebarOpen\"\n @toggle=\"sidebarToggled\"\n />\n </template>\n <template\n v-if=\"slotContent.navbarMobileLogo\"\n #mobile-logo\n >\n <div class=\"mobile-logo\">\n <slot name=\"navbar-mobile-logo\" />\n </div>\n </template>\n <slot name=\"navbar\" />\n </AppNavbar>\n\n <AppSidebar\n v-if=\"!sidebar.hidden\"\n :bottom-items=\"sidebar.bottomItems\"\n :header-height=\"navbarHeight\"\n mobile-enabled\n :mobile-header-visible=\"false\"\n :mobile-top-offset=\"sidebarMobileTopOffset\"\n :open=\"mobileSidebarOpen\"\n :profile-items=\"sidebar.profileItems\"\n :profile-name=\"sidebar.profileName\"\n :top-items=\"sidebar.topItems\"\n :top-offset=\"notificationHeight\"\n @click=\"sidebarItemClicked\"\n @toggle=\"sidebarToggled\"\n >\n <template\n v-if=\"slotContent.sidebarHeader\"\n #header\n >\n <slot name=\"sidebar-header\" />\n </template>\n <template\n v-if=\"slotContent.sidebarTop\"\n #top\n >\n <slot name=\"sidebar-top\" />\n </template>\n </AppSidebar>\n\n <main class=\"kong-ui-app-layout-main\">\n <div class=\"kong-ui-app-layout-content\">\n <div id=\"kong-ui-app-layout-teleport-default-slot\" />\n <slot name=\"app-error\" />\n <slot\n v-if=\"!defaultSlotIsHidden\"\n name=\"default\"\n />\n </div>\n </main>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, reactive, computed, watchEffect, onMounted, onBeforeUnmount, PropType, toRef, useSlots } from 'vue'\nimport AppNavbar from './navbar/AppNavbar.vue'\nimport AppSidebar from './sidebar/AppSidebar.vue'\nimport SidebarToggle from './sidebar/SidebarToggle.vue'\nimport type { SidebarPrimaryItem, SidebarProfileItem, SidebarSecondaryItem } from '../types'\nimport { useDebounce } from '../composables'\n\ninterface AppSidebarProperties {\n topItems?: SidebarPrimaryItem[]\n bottomItems?: SidebarPrimaryItem[]\n profileItems?: SidebarProfileItem[]\n profileName?: string\n open?: boolean\n hidden?: boolean\n}\n\nconst props = defineProps({\n hideDefaultSlot: {\n type: Boolean,\n default: false,\n },\n // Navbar props\n navbarHidden: {\n type: Boolean,\n default: false,\n },\n // Sidebar props\n sidebarHidden: {\n type: Boolean,\n default: false,\n },\n sidebarOpen: {\n type: Boolean,\n default: false,\n },\n sidebarTopItems: {\n type: Array as PropType<SidebarPrimaryItem[]>,\n default: () => ([]),\n },\n sidebarBottomItems: {\n type: Array as PropType<SidebarPrimaryItem[]>,\n default: () => ([]),\n },\n sidebarProfileItems: {\n type: Array as PropType<SidebarProfileItem[]>,\n default: () => ([]),\n },\n sidebarProfileName: {\n type: String,\n default: '',\n },\n})\n\nconst emit = defineEmits(['sidebar-click'])\n\nconst slots = useSlots()\nconst slotContent = reactive({\n navbarMobileLogo: computed((): boolean => !!slots['navbar-mobile-logo']),\n sidebarHeader: computed((): boolean => !!slots['sidebar-header']),\n sidebarTop: computed((): boolean => !!slots['sidebar-top']),\n})\n\n// Evaluate variables from injected symbols; fallback to prop values.\n// Must wrap the prop values in a computed so that they remain reactive.\nconst defaultSlotIsHidden = computed(() => props.hideDefaultSlot)\nconst navbar = reactive({\n hidden: computed(() => props.navbarHidden),\n})\nconst sidebar: AppSidebarProperties = reactive({\n topItems: computed(() => props.sidebarTopItems),\n bottomItems: computed(() => props.sidebarBottomItems),\n profileItems: computed(() => props.sidebarProfileItems),\n profileName: computed(() => props.sidebarProfileName),\n open: computed(() => props.sidebarOpen),\n hidden: computed(() => props.sidebarHidden),\n})\n\nconst sidebarItemClicked = (item: SidebarPrimaryItem | SidebarSecondaryItem | SidebarProfileItem) => {\n emit('sidebar-click', item)\n}\n\nconst mobileSidebarOpen = ref<boolean>(false)\nconst sidebarToggled = (isOpen: boolean): void => {\n mobileSidebarOpen.value = isOpen\n}\n\n// Update the state of the sidebar if the prop value changes\nwatchEffect(() => {\n mobileSidebarOpen.value = toRef(sidebar, 'open').value || false\n})\n\nconst windowWidth = ref<number>(0)\nconst navbarHeight = ref<number>(60) // set to value of $navbar-height\nconst notificationHeight = ref<number>(0) // initialize as zero\nconst sidebarMobileTopOffset = computed((): number => {\n if (navbar.hidden) {\n return notificationHeight.value\n }\n\n return navbarHeight.value + notificationHeight.value\n})\nconst layoutMainMarginTop = computed((): string => `${sidebarMobileTopOffset.value}px`)\n\nconst { debounce } = useDebounce()\nconst debouncedSetNotificationHeight = debounce((force = false): void => {\n // Only update the notificationHeight if the windowWidth changes\n if (force || (windowWidth.value !== window?.innerWidth || 0)) {\n const notificationContainer: HTMLElement | null = document?.querySelector('.kong-ui-app-layout #kong-ui-app-layout-notification')\n if (notificationContainer) {\n notificationHeight.value = notificationContainer.offsetHeight\n }\n }\n}, 200)\n\n// Add a ResizeObserver to determine when the navbar element content changes\nconst resizeObserver = ref<ResizeObserver>()\n\nonMounted(() => {\n // Add classes to the `html` and `body` elements to scope styles\n document?.body?.classList.add('kong-ui-app-layout-body')\n document?.documentElement?.classList.add('kong-ui-app-layout-html')\n\n // Set the window width once the component mounts\n windowWidth.value = window?.innerWidth\n\n // Initially set the navbar offset, pass `true` to force it to ignore the initial width\n debouncedSetNotificationHeight(true)\n\n // Attach a ResizeObserver to automatically update the navbarHeight when the navbar is resized\n const notificationContainer = document?.querySelector('.kong-ui-app-layout #kong-ui-app-layout-notification')\n if (notificationContainer) {\n resizeObserver.value = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const height = entry.contentRect.height\n if (notificationHeight.value !== height) {\n notificationHeight.value = height\n }\n }\n })\n resizeObserver.value.observe(notificationContainer)\n }\n\n // Adjust the navbar offset when the window is resized (do not pass true)\n window.addEventListener('resize', debouncedSetNotificationHeight)\n})\n\nonBeforeUnmount(() => {\n // Cleanup event listener(s)\n if (resizeObserver.value) {\n resizeObserver.value.disconnect()\n }\n window.removeEventListener('resize', debouncedSetNotificationHeight)\n})\n</script>\n\n<style lang=\"scss\">\n// Leave unscoped\n// Importing all styles just for this entry component.\n// Any other component in this package should only import the `_variables.scss` file.\n@import \"../styles/app-layout\";\n</style>\n\n<style lang=\"scss\" scoped>\n@import \"../styles/variables\";\n\n.kong-ui-app-layout {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n position: relative;\n font-family: $font-family-base;\n background-color: $sidebar-background-gradient-start;\n overflow: hidden;\n\n :deep(.kong-ui-app-navbar) {\n .mobile-logo {\n display: flex;\n align-items: center;\n\n @media (min-width: $viewport-md) {\n display: none;\n }\n\n > * {\n display: flex;\n align-items: center;\n }\n\n a {\n text-decoration: none;\n }\n }\n }\n\n .kong-ui-app-layout-main {\n display: flex;\n align-items: flex-start;\n flex-grow: 1;\n width: 100%;\n height: 100%;\n margin-top: v-bind('layoutMainMarginTop');\n background-color: var(--grey-100, #f8f8fa);\n // border-top-left-radius: 16px; // TODO: Enable when Neon layout is enabled\n overflow: auto;\n\n @media (min-width: $viewport-md) {\n width: calc(100% - #{$sidebar-width});\n margin-left: $sidebar-width;\n }\n\n &.full-width {\n margin-left: 0;\n }\n\n .kong-ui-app-layout-content {\n position: relative;\n width: 100%;\n padding: 16px;\n }\n }\n\n // Style overrides if AppNavbar is hidden\n &.navbar-hidden {\n .kong-ui-app-layout-main {\n margin-top: 0;\n }\n }\n\n // Style overrides if AppSidebar is hidden\n &.sidebar-hidden {\n .kong-ui-app-layout-main {\n width: 100%;\n margin-left: 0;\n }\n }\n\n // Must keep this as an `id` because we are utilizing as a <Teleport /> container\n #kong-ui-app-layout-notification {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n z-index: 1;\n\n // Modify KAlert styles\n :deep(.k-alert) {\n border-radius: 0 !important;\n }\n }\n}\n</style>\n","<template>\n <KDropdownMenu\n appearance=\"selectionMenu\"\n class=\"top-bar-dropdown-menu\"\n :disabled=\"disabled\"\n :disabled-tooltip=\"tooltip\"\n :kpop-attributes=\"{ placement: 'bottomStart', disabled: disabled }\"\n :label=\"selectedOption.label\"\n :width=\"width\"\n @change=\"(selection: any) => optionSelected(selection)\"\n >\n <template #items=\"{ handleSelection }\">\n <slot>\n <KDropdownItem\n v-for=\"option in options\"\n :key=\"option.value\"\n :data-testid=\"'select-' + option.value\"\n :selected=\"selectedOption.value === option.value\"\n @click=\"handleSelection(option)\"\n >\n <slot :option=\"option\">\n {{ option.label }}\n </slot>\n </KDropdownItem>\n </slot>\n </template>\n </KDropdownMenu>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, Ref, PropType } from 'vue'\nimport type { NavbarDropdownMenuItem } from '../../types'\n\nconst props = defineProps({\n options: {\n type: Array as PropType<NavbarDropdownMenuItem[]>,\n default: () => ([]),\n },\n tooltip: {\n type: String,\n default: '',\n },\n width: {\n type: String,\n default: '175',\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n})\nconst emit = defineEmits(['change'])\n\nconst selectedOption: Ref<NavbarDropdownMenuItem> = ref(props.options?.filter((option: NavbarDropdownMenuItem) => !!option.selected)[0] || props.options[0])\n\nconst optionSelected = (option: NavbarDropdownMenuItem) => {\n selectedOption.value = option\n emit('change', selectedOption.value)\n}\n\n</script>\n\n<style lang=\"scss\" scoped>\n.top-bar-dropdown-menu {\n display: flex;\n margin-right: 4px;\n}\n</style>\n","<template>\n <svg\n fill=\"none\"\n height=\"130\"\n width=\"130\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n clip-rule=\"evenodd\"\n d=\"M19.111 120.198c-.226 0-.409-.164-.409-.368v-4.812c0-.203.183-.368.409-.368.226 0 .409.165.409.368v4.812c0 .204-.183.368-.409.368Zm0-9.625c-.226 0-.409-.165-.409-.368v-4.813c0-.203.183-.368.409-.368.226 0 .409.165.409.368v4.813c0 .203-.183.368-.409.368Zm0-9.625c-.226 0-.409-.165-.409-.368v-4.813c0-.203.183-.368.409-.368.226 0 .409.165.409.368v4.813c0 .203-.183.368-.409.368Zm0-9.626c-.226 0-.409-.165-.409-.368v-4.812c0-.204.183-.368.409-.368.226 0 .409.164.409.368v4.812c0 .204-.183.368-.409.368Zm0-9.625c-.226 0-.409-.165-.409-.368v-4.813c0-.203.183-.368.409-.368.226 0 .409.165.409.368v4.813c0 .203-.183.368-.409.368Zm0-9.626c-.226 0-.409-.164-.409-.367V66.89c0-.203.183-.368.409-.368.226 0 .409.165.409.368v4.813c0 .203-.183.368-.409.368Zm0-9.625c-.226 0-.409-.165-.409-.368v-4.813c0-.203.183-.368.409-.368.226 0 .409.165.409.368v4.813c0 .203-.183.368-.409.368Zm0-9.625c-.226 0-.409-.165-.409-.368V47.64c0-.203.183-.368.409-.368.226 0 .409.165.409.368v4.813c0 .203-.183.368-.409.368Zm0-9.626c-.226 0-.409-.164-.409-.368v-4.812c0-.204.183-.368.409-.368.226 0 .409.164.409.368v4.812c0 .204-.183.368-.409.368Zm0-9.625c-.226 0-.409-.165-.409-.368v-4.813c0-.203.183-.368.409-.368.226 0 .409.165.409.368v4.813c0 .203-.183.368-.409.368Zm0-9.625c-.226 0-.409-.165-.409-.369v-4.812c0-.203.183-.368.409-.368.226 0 .409.165.409.368v4.813c0 .203-.183.368-.409.368Zm0-9.626c-.226 0-.409-.165-.409-.368V9.138c0-.203.183-.368.409-.368.226 0 .409.165.409.368v4.813c0 .203-.183.368-.409.368ZM110.889 120.198c-.225 0-.408-.164-.408-.368v-4.812c0-.203.183-.368.408-.368.226 0 .409.165.409.368v4.812c0 .204-.183.368-.409.368Zm0-9.625c-.225 0-.408-.165-.408-.368v-4.813c0-.203.183-.368.408-.368.226 0 .409.165.409.368v4.813c0 .203-.183.368-.409.368Zm0-9.625c-.225 0-.408-.165-.408-.368v-4.813c0-.203.183-.368.408-.368.226 0 .409.165.409.368v4.813c0 .203-.183.368-.409.368Zm0-9.626c-.225 0-.408-.165-.408-.368v-4.812c0-.204.183-.368.408-.368.226 0 .409.164.409.368v4.812c0 .204-.183.368-.409.368Zm0-9.625c-.225 0-.408-.165-.408-.368v-4.813c0-.203.183-.368.408-.368.226 0 .409.165.409.368v4.813c0 .203-.183.368-.409.368Zm0-9.626c-.225 0-.408-.164-.408-.367V66.89c0-.203.183-.368.408-.368.226 0 .409.165.409.368v4.813c0 .203-.183.368-.409.368Zm0-9.625c-.225 0-.408-.165-.408-.368v-4.813c0-.203.183-.368.408-.368.226 0 .409.165.409.368v4.813c0 .203-.183.368-.409.368Zm0-9.625c-.225 0-.408-.165-.408-.368V47.64c0-.203.183-.368.408-.368.226 0 .409.165.409.368v4.813c0 .203-.183.368-.409.368Zm0-9.626c-.225 0-.408-.164-.408-.368v-4.812c0-.204.183-.368.408-.368.226 0 .409.164.409.368v4.812c0 .204-.183.368-.409.368Zm0-9.625c-.225 0-.408-.165-.408-.368v-4.813c0-.203.183-.368.408-.368.226 0 .409.165.409.368v4.813c0 .203-.183.368-.409.368Zm0-9.625c-.225 0-.408-.165-.408-.369v-4.812c0-.203.183-.368.408-.368.226 0 .409.165.409.368v4.813c0 .203-.183.368-.409.368Zm0-9.626c-.225 0-.408-.165-.408-.368V9.138c0-.203.183-.368.408-.368.226 0 .409.165.409.368v4.813c0 .203-.183.368-.409.368Z\"\n fill=\"#D6D6D6\"\n fill-rule=\"evenodd\"\n /><path\n clip-rule=\"evenodd\"\n d=\"M123.553 107.758a.399.399 0 0 1-.388.408h-5.068a.398.398 0 0 1-.387-.408c0-.226.173-.409.387-.409h5.068c.214 0 .388.183.388.409Zm-10.136 0a.398.398 0 0 1-.387.408h-5.068a.399.399 0 0 1-.388-.408c0-.226.174-.409.388-.409h5.068c.214 0 .387.183.387.409Zm-10.136 0a.398.398 0 0 1-.387.408h-5.068a.398.398 0 0 1-.388-.408c0-.226.174-.409.388-.409h5.068c.214 0 .387.183.387.409Zm-10.136 0a.398.398 0 0 1-.387.408H87.69a.398.398 0 0 1-.388-.408c0-.226.174-.409.388-.409h5.068c.214 0 .387.183.387.409Zm-10.136 0a.398.398 0 0 1-.387.408h-5.068a.398.398 0 0 1-.388-.408c0-.226.174-.409.388-.409h5.068c.214 0 .387.183.387.409Zm-10.135 0a.398.398 0 0 1-.388.408h-5.068a.398.398 0 0 1-.388-.408c0-.226.174-.409.388-.409h5.068c.214 0 .388.183.388.409Zm-10.136 0a.398.398 0 0 1-.388.408h-5.068a.398.398 0 0 1-.387-.408c0-.226.173-.409.387-.409h5.068c.214 0 .388.183.388.409Zm-10.136 0a.398.398 0 0 1-.388.408h-5.068a.398.398 0 0 1-.387-.408c0-.226.173-.409.387-.409h5.068c.214 0 .388.183.388.409Zm-10.136 0a.398.398 0 0 1-.388.408H37.01a.398.398 0 0 1-.387-.408c0-.226.173-.409.387-.409h5.068c.214 0 .388.183.388.409Zm-10.136 0a.398.398 0 0 1-.388.408h-5.067a.398.398 0 0 1-.388-.408c0-.226.174-.409.388-.409h5.067c.215 0 .388.183.388.409Zm-10.136 0a.398.398 0 0 1-.387.408h-5.068a.398.398 0 0 1-.388-.408c0-.226.174-.409.388-.409h5.068c.214 0 .387.183.387.409Zm-10.136 0a.398.398 0 0 1-.387.408H6.603a.398.398 0 0 1-.388-.408c0-.226.174-.409.388-.409h5.068c.214 0 .387.183.387.409ZM123.553 21.434a.399.399 0 0 1-.388.409h-5.068a.398.398 0 0 1-.387-.409c0-.226.173-.408.387-.408h5.068c.214 0 .388.183.388.408Zm-10.136 0a.399.399 0 0 1-.388.409h-5.068a.398.398 0 0 1-.387-.409c0-.226.173-.408.387-.408h5.068c.214 0 .388.183.388.408Zm-10.136 0a.398.398 0 0 1-.387.409h-5.068a.399.399 0 0 1-.388-.409c0-.226.174-.408.388-.408h5.068c.214 0 .387.183.387.408Zm-10.136 0a.398.398 0 0 1-.387.409H87.69a.398.398 0 0 1-.388-.409c0-.226.174-.408.388-.408h5.068c.214 0 .387.183.387.408Zm-10.136 0a.398.398 0 0 1-.387.409h-5.068a.398.398 0 0 1-.388-.409c0-.226.174-.408.388-.408h5.068c.214 0 .387.183.387.408Zm-10.136 0a.398.398 0 0 1-.387.409h-5.068a.398.398 0 0 1-.388-.409c0-.226.174-.408.388-.408h5.068c.214 0 .387.183.387.408Zm-10.135 0a.399.399 0 0 1-.388.409h-5.068a.398.398 0 0 1-.387-.409c0-.226.173-.408.387-.408h5.068c.214 0 .388.183.388.408Zm-10.136 0a.398.398 0 0 1-.388.409h-5.068a.398.398 0 0 1-.387-.409c0-.226.173-.408.387-.408h5.068c.214 0 .388.183.388.408Zm-10.136 0a.398.398 0 0 1-.388.409H37.01a.398.398 0 0 1-.387-.409c0-.226.173-.408.387-.408h5.068c.214 0 .388.183.388.408Zm-10.136 0a.398.398 0 0 1-.388.409h-5.068a.398.398 0 0 1-.387-.409c0-.226.173-.408.387-.408h5.068c.214 0 .388.183.388.408Zm-10.136 0a.398.398 0 0 1-.388.409h-5.068a.398.398 0 0 1-.387-.409c0-.226.173-.408.387-.408h5.068c.214 0 .388.183.388.408Zm-10.136 0a.398.398 0 0 1-.387.409H6.603a.398.398 0 0 1-.388-.409c0-.226.174-.408.388-.408h5.068c.214 0 .387.183.387.408Z\"\n fill=\"#D6D6D6\"\n fill-rule=\"evenodd\"\n /><circle\n cx=\"65\"\n cy=\"65\"\n opacity=\".5\"\n r=\"64\"\n stroke=\"#B6B6BD\"\n stroke-dasharray=\"5.69 5.69\"\n stroke-linecap=\"round\"\n stroke-width=\".854\"\n /><g\n clip-path=\"url(#a)\"\n stroke=\"#169FCC\"\n stroke-miterlimit=\"10\"\n stroke-width=\"1.42\"\n >\n <path d=\"m33.523 104.868-5.72-.695a1.214 1.214 0 0 1-.766-.386 1.182 1.182 0 0 1-.312-.788v-7.448c0-.095.038-.186.106-.253a.365.365 0 0 1 .256-.104l5.254-.263M61.471 22.733a1.761 1.761 0 0 1 1.45.235 49.628 49.628 0 0 1 15.613 17.6 48.797 48.797 0 0 1 5.65 22.702 47.236 47.236 0 0 1-.333 5.325 41.34 41.34 0 0 0-12.501-.441 48.503 48.503 0 0 0-1.813-23.734 49.117 49.117 0 0 0-12.91-20.119c1.602-.591 3.223-1.136 4.844-1.568Z\" /><path d=\"M71.35 68.154a39.493 39.493 0 0 0-10.813 3.757 51.298 51.298 0 0 0 3.251-18.062c0-9.392-4.939-19.179-9.783-27.237-.257-.432 0-1.616 2.642-2.32\" /><path d=\"M56.236 78.58a13.605 13.605 0 0 0-4.29-9.289 14.017 14.017 0 0 0-9.622-3.786 9.617 9.617 0 0 1-6.456-2.446 9.341 9.341 0 0 1-3.079-6.1l-.286-4.256c3.09 0 9.46 4.105 13.216 4.866 3.757.76 8.21.253 11.862 3.437a13.303 13.303 0 0 1 4.357 6.575\" /><path d=\"M68.594 75.442c-3.432 6.95-7.914 11.59-14.303 16.033a47.076 47.076 0 0 1-21.702 8.058v-4.696c11.642-4.809 22.208-11.806 27.948-22.88\" /><path d=\"M76.499 84.815a46.939 46.939 0 0 1-17.392 14.511 50.925 50.925 0 0 1-22.885 5.457c-2.317 0-3.662.47-3.662-.695v-4.555\" /><path d=\"M83.85 68.595c22.304 16.22 4.044 39.25-19.652 37.663.954-.939 29.95-22.222-3.661-34.3\" /><path d=\"M84.184 58.47c13.607 0 25.746 26.242 17.383 30.995-1.182-17.508-17.716-20.87-17.716-20.87\" />\n </g><defs>\n <clipPath id=\"a\">\n <path\n d=\"M0 0h79v85H0z\"\n fill=\"#fff\"\n transform=\"translate(26 22)\"\n />\n </clipPath>\n </defs>\n </svg>\n</template>\n","/**\n * Test if a string is a valid URL format\n * @param {String} str - the string to test\n * @returns {Boolean}\n */\nexport function isValidUrl(str: string) {\n const urlPattern = new RegExp('^(https?:\\\\/\\\\/)?' + // protocol\n '((([a-z\\\\d]([a-z\\\\d-]*[a-z\\\\d])*)\\\\.)+[a-z]{2,}|' + // domain name\n '((\\\\d{1,3}\\\\.){3}\\\\d{1,3}))' + // OR ip (v4) address\n '(\\\\:\\\\d+)?(\\\\/[-a-z\\\\d%_.~+]*)*' + // port and path\n '(\\\\?[;&a-z\\\\d%_.~+=-]*)?' + // query string\n '(\\\\#[-a-z\\\\d_]*)?$', 'i') // fragment locator\n\n return !!urlPattern.test(str)\n}\n","import type { App } from 'vue'\nimport AppLayout from './components/AppLayout.vue'\nimport AppNavbar from './components/navbar/AppNavbar.vue'\nimport NavbarDropdownMenu from './components/navbar/NavbarDropdownMenu.vue'\n\nimport AppSidebar from './components/sidebar/AppSidebar.vue'\nimport SidebarToggle from './components/sidebar/SidebarToggle.vue'\nimport AppError from './components/errors/AppError.vue'\nimport ExternalLink from './components/ExternalLink.vue'\n\n// Export Vue plugin as the default\nexport default {\n // Customize Vue plugin options as desired\n // Providing a `name` property allows for customizing the registered\n // name of your component (useful if exporting a single component).\n install: (app: App, options: { name?: string, [key: string]: any } = {}): void => {\n app.component(options.name || 'AppLayout', AppLayout)\n },\n}\n\nexport {\n // Individual Components\n AppLayout,\n AppNavbar,\n AppSidebar,\n SidebarToggle,\n AppError,\n ExternalLink,\n NavbarDropdownMenu,\n}\n\nexport * from './types'\n"],"names":["headerStyles","computed","props","MAX_COUNT","alertCount","useAnchorTag","openInNewWindow","itemHasBadge","itemClick","item","emit","navigate","event","routerNavigate","_hoisted_1","_hoisted_2","_createElementVNode","_hoisted_3","_hoisted_4","_sfc_render","_ctx","_cache","hasProfileItems","candidateSelectors","candidateSelector","NoElement","matches","getRootNode","element","getCandidates","el","includeContainer","filter","candidates","getCandidatesIteratively","elements","options","elementsToCheck","assigned","content","nestedCandidates","validCandidate","shadowRoot","validShadowRoot","_nestedCandidates","getTabindex","node","isScope","sortOrderedTabbables","a","b","isInput","isHiddenInput","isDetailsWithSummary","r","child","getCheckedRadio","nodes","form","i","isTabbableRadio","radioScope","queryRadios","name","radioSet","err","checked","isRadio","isNonTabbableRadio","isNodeAttached","_nodeRootHost","nodeRootHost","attached","_nodeRootHost2","isZeroArea","_node$getBoundingClie","width","height","isHidden","_ref","displayCheck","getShadowRoot","isDirectSummary","nodeUnderDetails","originalNode","parentElement","rootNode","isDisabledFromFieldset","parentNode","isNodeMatchingSelectorFocusable","isNodeMatchingSelectorTabbable","isValidShadowRootTabbable","shadowHostNode","tabIndex","sortByOrder","regularTabbables","orderedTabbables","candidateTabindex","acc","sortable","tabbable","focusable","isTabbable","focusableCandidateSelector","isFocusable","ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread2","target","source","key","_defineProperty","obj","value","_toPropertyKey","_toPrimitive","input","hint","prim","res","arg","activeFocusTraps","trapStack","trap","activeTrap","trapIndex","isSelectableInput","isEscapeEvent","e","isTabEvent","isKeyForward","isKeyBackward","delay","fn","findIndex","arr","idx","valueOrHandler","_len","params","_key","getActualTarget","internalTrapStack","createFocusTrap","userOptions","doc","config","state","getOption","configOverrideOptions","optionName","configOptionName","findContainerIndex","container","tabbableNodes","getNodeForOption","optionValue","_len2","_key2","getInitialFocusNode","firstTabbableGroup","firstTabbableNode","updateTabbableNodes","focusableNodes","forward","nodeIdx","n","group","tryFocus","getReturnFocusNode","previousActiveElement","checkPointerDown","checkFocusIn","targetContained","checkKeyNav","isBackward","destinationNode","containerIndex","containerGroup","startOfGroupIndex","_ref2","destinationGroupIndex","destinationGroup","lastOfGroupIndex","_ref3","lastTabbableNode","_destinationGroupIndex","_destinationGroup","checkKey","checkClick","addListeners","removeListeners","activateOptions","onActivate","onPostActivate","checkCanFocusTrap","finishActivation","deactivateOptions","onDeactivate","onPostDeactivate","checkCanReturnFocus","returnFocus","finishDeactivation","containerElements","elementsAsArray","FocusTrapProps","FocusTrap","defineComponent","slots","wrapperEl","ref","innerElement","ensureTrap","onMounted","watch","active","onUnmounted","vNodes","vnode","Comment","cloneVNode","useDebounce","initialFunction","timeoutId","args","LARGE_ARRAY_SIZE","HASH_UNDEFINED","MAX_SAFE_INTEGER","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","promiseTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reRegExpChar","reFlags","reIsHostCtor","reIsUint","cloneableTags","freeGlobal","global","freeSelf","root","freeExports","exports","freeModule","module","moduleExports","addMapEntry","map","pair","addSetEntry","set","arrayEach","array","iteratee","index","length","arrayPush","values","offset","arrayReduce","accumulator","initAccum","baseTimes","result","getValue","isHostObject","mapToArray","overArg","func","transform","setToArray","arrayProto","funcProto","objectProto","coreJsData","maskSrcKey","uid","funcToString","hasOwnProperty","objectToString","reIsNative","Buffer","Symbol","Uint8Array","getPrototype","objectCreate","propertyIsEnumerable","splice","nativeGetSymbols","nativeIsBuffer","nativeKeys","DataView","getNative","Map","Promise","Set","WeakMap","nativeCreate","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","Hash","entries","entry","hashClear","hashDelete","hashGet","data","hashHas","hashSet","ListCache","listCacheClear","listCacheDelete","assocIndexOf","lastIndex","listCacheGet","listCacheHas","listCacheSet","MapCache","mapCacheClear","mapCacheDelete","getMapData","mapCacheGet","mapCacheHas","mapCacheSet","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","cache","pairs","arrayLikeKeys","inherited","isArray","isArguments","skipIndexes","isIndex","assignValue","objValue","eq","baseAssign","copyObject","baseClone","isDeep","isFull","customizer","stack","isObject","isArr","initCloneArray","copyArray","tag","getTag","isFunc","isBuffer","cloneBuffer","initCloneObject","copySymbols","initCloneByTag","stacked","getAllKeys","subValue","baseCreate","proto","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","baseIsNative","isMasked","pattern","isFunction","baseKeys","isPrototype","buffer","cloneArrayBuffer","arrayBuffer","cloneDataView","dataView","cloneMap","cloneFunc","cloneRegExp","regexp","cloneSet","cloneSymbol","symbol","cloneTypedArray","typedArray","newValue","getSymbols","isKeyable","stubArray","Ctor","ctorString","type","cloneDeep","other","isArrayLikeObject","isArrayLike","isLength","isObjectLike","stubFalse","useSlots","hasHeader","hasTopContent","sidebarContainerStyles","headerContainerStyles","sidebarNavStyles","sidebarOverlayStyles","prepareNavItems","items","clonedeep","_a","_b","childItem","_c","topNavItems","bottomNavItems","mobileSidebarOpen","toggleSidebar","isOpen","sidebarTogglePending","closeSidebarFromOverlay","debounce","debouncedResizeHandler","windowWidth","transitionsDisabled","resizeTimer","disableTransitions","focusTrap","focusTrapEnabled","toggleFocusTrap","isActive","nextTick","resolve","enabled","onBeforeUnmount","toggle","slotContent","reactive","defaultSlotIsHidden","navbar","sidebar","sidebarItemClicked","sidebarToggled","watchEffect","toRef","navbarHeight","notificationHeight","sidebarMobileTopOffset","layoutMainMarginTop","debouncedSetNotificationHeight","force","notificationContainer","resizeObserver","selectedOption","option","optionSelected","_hoisted_7","isValidUrl","str","app","AppLayout"],"mappings":"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"}
|