{"version":3,"sources":["webpack:////build/source/node_modules/@gitlab/ui/dist/vendor/bootstrap-vue/src/utils/stable-sort.js","webpack:////build/source/node_modules/@gitlab/ui/dist/vendor/bootstrap-vue/src/components/nav/nav.js","webpack:////build/source/node_modules/@gitlab/ui/dist/vendor/bootstrap-vue/src/components/tabs/tabs.js","webpack:////build/source/node_modules/@gitlab/ui/dist/components/base/tabs/tabs/tabs.js","webpack:////build/source/node_modules/@gitlab/ui/dist/vendor/bootstrap-vue/src/components/tabs/tab.js","webpack:////build/source/node_modules/@gitlab/ui/dist/components/base/tabs/tab/tab.js","webpack:////build/source/node_modules/@gitlab/ui/dist/components/base/tabs/constants.js"],"names":["stableSort","array","compareFn","map","a","index","sort","b","this","bind","e","align","cardHeader","fill","justified","pills","small","tabs","tag","BNav","name","functional","props","h","_ref","data","children","staticClass","class","value","mixin","modelMixin","modelProps","prop","MODEL_PROP_NAME","event","MODEL_EVENT_NAME","type","notDisabled","tab","disabled","BVTabButton","inject","getBvTabs","default","controls","id","noKeyNav","posInSet","setSize","tabIndex","computed","methods","$refs","link","keyCode","shiftKey","$emit","indexOf","handleEvent","title","localActive","titleItemClass","titleLinkClass","titleLinkAttributes","$link","active","bvTabs","activeNavItemClass","attrs","role","tabindex","on","click","keydown","ref","normalizeSlot","navProps","activeTabClass","contentClass","end","lazy","navClass","navWrapperClass","noFade","noNavStyle","BTabs","mixins","currentTab","registeredTabs","watch","newValue","oldValue","$tab","activateTab","previousTab","nextTab","forEach","i","$nextTick","slice","updateTabs","$_observer","setObserver","push","filter","$t","arguments","length","undefined","disconnect","handler","content","childList","subtree","attributes","attributeFilter","$tabs","order","selector","safeId","join","$el","identity","getTabs","reverse","find","buttons","$btn","$button","getButtonForTab","$forceUpdate","result","tabEvent","cancelable","vueTarget","componentId","defaultPrevented","emitTabClick","focus","focusButton","currentIndex","math","firstTab","lastTab","$activeTab","$fallbackTab","$buttons","controlledBy","clickTab","key","$nav","$children","$empty","$content","validatorHelper","obj","Object","keys","every","val","__vue_script__","components","GlButton","inheritAttrs","actionPrimary","required","validator","actionSecondary","actionTertiary","String","Array","Boolean","syncActiveTabWithQueryParams","queryParamName","Number","activeTabIndex","some","$listeners","input","handleInput","immediate","syncActiveTabFromQueryParams","window","addEventListener","removeEventListener","buttonBinding","queryParamValue","getQueryParamValue","tabIndexToActivate","findIndex","getTabQueryParamValue","bTabs","URLSearchParams","location","search","get","currentQueryParamValue","newQueryParamValue","searchParams","set","history","pushState","pathname","toString","$attrs","setQueryParamValueIfNecessary","__vue_component__","render","_vm","_h","$createElement","_c","_self","_g","_b","scopedSlots","_u","_l","$slots","slot","fn","_t","proxy","primary","_v","_s","text","_e","secondary","tertiary","listeners","staticRenderFns","MODEL_EVENT_NAME_ACTIVE","buttonId","noBody","BTab","_isTab","card","fade","activate","deactivate","registerTab","updateButton","hasNormalizedSlot","unregisterTab","deactivateTab","tabClasses","directives","computedLazy","mode","computedNoFade","isArray","trim","linkClass"],"mappings":"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","file":"78.64a12dac.chunk.js","sourcesContent":["/*\n * Consistent and stable sort function across JavaScript platforms\n *\n * Inconsistent sorts can cause SSR problems between client and server\n * such as in if sortBy is applied to the data on server side render.\n * Chrome and V8 native sorts are inconsistent/unstable\n *\n * This function uses native sort with fallback to index compare when the a and b\n * compare returns 0\n *\n * Algorithm based on:\n * https://stackoverflow.com/questions/1427608/fast-stable-sorting-algorithm-implementation-in-javascript/45422645#45422645\n *\n * @param {array} array to sort\n * @param {function} sort compare function\n * @return {array}\n */\nconst stableSort = (array, compareFn) => {\n // Using `.bind(compareFn)` on the wrapped anonymous function improves\n // performance by avoiding the function call setup. We don't use an arrow\n // function here as it binds `this` to the `stableSort` context rather than\n // the `compareFn` context, which wouldn't give us the performance increase.\n return array.map((a, index) => [index, a]).sort(function (a, b) {\n return this(a[1], b[1]) || a[0] - b[0];\n }.bind(compareFn)).map(e => e[1]);\n};\n\nexport { stableSort };\n","import { extend, mergeData } from '../../vue';\nimport { NAME_NAV } from '../../constants/components';\nimport { PROP_TYPE_STRING, PROP_TYPE_BOOLEAN } from '../../constants/props';\nimport { makePropsConfigurable, makeProp } from '../../utils/props';\n\n// --- Helper methods ---\n\nconst computeJustifyContent = value => {\n value = value === 'left' ? 'start' : value === 'right' ? 'end' : value;\n return `justify-content-${value}`;\n};\n\n// --- Props ---\n\nconst props = makePropsConfigurable({\n align: makeProp(PROP_TYPE_STRING),\n // Set to `true` if placing in a card header\n cardHeader: makeProp(PROP_TYPE_BOOLEAN, false),\n fill: makeProp(PROP_TYPE_BOOLEAN, false),\n justified: makeProp(PROP_TYPE_BOOLEAN, false),\n pills: makeProp(PROP_TYPE_BOOLEAN, false),\n small: makeProp(PROP_TYPE_BOOLEAN, false),\n tabs: makeProp(PROP_TYPE_BOOLEAN, false),\n tag: makeProp(PROP_TYPE_STRING, 'ul')\n}, NAME_NAV);\n\n// --- Main component ---\n\n// @vue/component\nconst BNav = /*#__PURE__*/extend({\n name: NAME_NAV,\n functional: true,\n props,\n render(h, _ref) {\n let {\n props,\n data,\n children\n } = _ref;\n const {\n tabs,\n pills,\n align,\n cardHeader\n } = props;\n return h(props.tag, mergeData(data, {\n staticClass: 'nav',\n class: {\n 'nav-tabs': tabs,\n 'nav-pills': pills && !tabs,\n 'card-header-tabs': cardHeader && tabs,\n 'card-header-pills': cardHeader && pills && !tabs,\n 'nav-fill': props.fill,\n 'nav-justified': props.justified,\n [computeJustifyContent(align)]: align,\n small: props.small\n }\n }), children);\n }\n});\n\nexport { BNav, props };\n","import { extend, COMPONENT_UID_KEY, REF_FOR_KEY } from '../../vue';\nimport { NAME_TAB_BUTTON_HELPER, NAME_TABS } from '../../constants/components';\nimport { IS_BROWSER } from '../../constants/env';\nimport { EVENT_NAME_CLICK, EVENT_NAME_FIRST, EVENT_NAME_PREV, EVENT_NAME_LAST, EVENT_NAME_NEXT, EVENT_NAME_CHANGED, EVENT_NAME_ACTIVATE_TAB } from '../../constants/events';\nimport { CODE_SPACE, CODE_UP, CODE_LEFT, CODE_HOME, CODE_DOWN, CODE_RIGHT, CODE_END } from '../../constants/key-codes';\nimport { PROP_TYPE_NUMBER, PROP_TYPE_STRING, PROP_TYPE_BOOLEAN, PROP_TYPE_ARRAY_OBJECT_STRING } from '../../constants/props';\nimport { SLOT_NAME_TITLE, SLOT_NAME_TABS_START, SLOT_NAME_TABS_END, SLOT_NAME_EMPTY } from '../../constants/slots';\nimport { arrayIncludes } from '../../utils/array';\nimport { BvEvent } from '../../utils/bv-event.class';\nimport { attemptFocus, selectAll, requestAF } from '../../utils/dom';\nimport { stopEvent } from '../../utils/events';\nimport { identity } from '../../utils/identity';\nimport { isEvent } from '../../utils/inspect';\nimport { looseEqual } from '../../utils/loose-equal';\nimport { mathMax } from '../../utils/math';\nimport { makeModelMixin } from '../../utils/model';\nimport { toInteger } from '../../utils/number';\nimport { omit, sortKeys } from '../../utils/object';\nimport { observeDom } from '../../utils/observe-dom';\nimport { makeProp, makePropsConfigurable } from '../../utils/props';\nimport { stableSort } from '../../utils/stable-sort';\nimport { props as props$2, idMixin } from '../../mixins/id';\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot';\nimport { BLink } from '../link/link';\nimport { props as props$1, BNav } from '../nav/nav';\n\n// --- Constants ---\n\nconst {\n mixin: modelMixin,\n props: modelProps,\n prop: MODEL_PROP_NAME,\n event: MODEL_EVENT_NAME\n} = makeModelMixin('value', {\n type: PROP_TYPE_NUMBER\n});\n\n// --- Helper methods ---\n\n// Filter function to filter out disabled tabs\nconst notDisabled = tab => !tab.disabled;\n\n// --- Helper components ---\n\n// @vue/component\nconst BVTabButton = /*#__PURE__*/extend({\n name: NAME_TAB_BUTTON_HELPER,\n inject: {\n getBvTabs: {\n default: /* istanbul ignore next */() => () => ({})\n }\n },\n props: {\n controls: makeProp(PROP_TYPE_STRING),\n id: makeProp(PROP_TYPE_STRING),\n noKeyNav: makeProp(PROP_TYPE_BOOLEAN, false),\n posInSet: makeProp(PROP_TYPE_NUMBER),\n setSize: makeProp(PROP_TYPE_NUMBER),\n // Reference to the child instance\n tab: makeProp(),\n tabIndex: makeProp(PROP_TYPE_NUMBER)\n },\n computed: {\n bvTabs() {\n return this.getBvTabs();\n }\n },\n methods: {\n focus() {\n attemptFocus(this.$refs.link);\n },\n handleEvent(event) {\n /* istanbul ignore next */\n if (this.tab.disabled) {\n return;\n }\n const {\n type,\n keyCode,\n shiftKey\n } = event;\n if (type === 'click') {\n stopEvent(event);\n this.$emit(EVENT_NAME_CLICK, event);\n } else if (type === 'keydown' && keyCode === CODE_SPACE) {\n // For ARIA tabs the SPACE key will also trigger a click/select\n // Even with keyboard navigation disabled, SPACE should \"click\" the button\n // See: https://github.com/bootstrap-vue/bootstrap-vue/issues/4323\n stopEvent(event);\n this.$emit(EVENT_NAME_CLICK, event);\n } else if (type === 'keydown' && !this.noKeyNav) {\n // For keyboard navigation\n if ([CODE_UP, CODE_LEFT, CODE_HOME].indexOf(keyCode) !== -1) {\n stopEvent(event);\n if (shiftKey || keyCode === CODE_HOME) {\n this.$emit(EVENT_NAME_FIRST, event);\n } else {\n this.$emit(EVENT_NAME_PREV, event);\n }\n } else if ([CODE_DOWN, CODE_RIGHT, CODE_END].indexOf(keyCode) !== -1) {\n stopEvent(event);\n if (shiftKey || keyCode === CODE_END) {\n this.$emit(EVENT_NAME_LAST, event);\n } else {\n this.$emit(EVENT_NAME_NEXT, event);\n }\n }\n }\n }\n },\n render(h) {\n const {\n id,\n tabIndex,\n setSize,\n posInSet,\n controls,\n handleEvent\n } = this;\n const {\n title,\n localActive,\n disabled,\n titleItemClass,\n titleLinkClass,\n titleLinkAttributes\n } = this.tab;\n const $link = h(BLink, {\n staticClass: 'nav-link',\n class: [{\n active: localActive && !disabled,\n disabled\n }, titleLinkClass,\n // Apply `activeNavItemClass` styles when the tab is active\n localActive ? this.bvTabs.activeNavItemClass : null],\n props: {\n disabled\n },\n attrs: {\n ...titleLinkAttributes,\n id,\n role: 'tab',\n // Roving tab index when keynav enabled\n tabindex: tabIndex,\n 'aria-selected': localActive && !disabled ? 'true' : 'false',\n 'aria-setsize': setSize,\n 'aria-posinset': posInSet,\n 'aria-controls': controls\n },\n on: {\n click: handleEvent,\n keydown: handleEvent\n },\n ref: 'link'\n }, [this.tab.normalizeSlot(SLOT_NAME_TITLE) || title]);\n return h('li', {\n staticClass: 'nav-item',\n class: [titleItemClass],\n attrs: {\n role: 'presentation'\n }\n }, [$link]);\n }\n});\n\n// --- Props ---\n\nconst navProps = omit(props$1, ['tabs', 'cardHeader']);\nconst props = makePropsConfigurable(sortKeys({\n ...props$2,\n ...modelProps,\n ...navProps,\n // Only applied to the currently active ``\n activeNavItemClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n // Only applied to the currently active ``\n // This prop is sniffed by the `` child\n activeTabClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n contentClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n // Synonym for 'bottom'\n end: makeProp(PROP_TYPE_BOOLEAN, false),\n // This prop is sniffed by the `` child\n lazy: makeProp(PROP_TYPE_BOOLEAN, false),\n navClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n navWrapperClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n noFade: makeProp(PROP_TYPE_BOOLEAN, false),\n noKeyNav: makeProp(PROP_TYPE_BOOLEAN, false),\n noNavStyle: makeProp(PROP_TYPE_BOOLEAN, false),\n tag: makeProp(PROP_TYPE_STRING, 'div')\n}), NAME_TABS);\n\n// --- Main component ---\n\n// @vue/component\nconst BTabs = /*#__PURE__*/extend({\n name: NAME_TABS,\n mixins: [idMixin, modelMixin, normalizeSlotMixin],\n provide() {\n return {\n getBvTabs: () => this\n };\n },\n props,\n data() {\n return {\n // Index of current tab\n currentTab: toInteger(this[MODEL_PROP_NAME], -1),\n // Array of direct child `` instances, in DOM order\n tabs: [],\n // Array of child instances registered (for triggering reactive updates)\n registeredTabs: []\n };\n },\n computed: {\n fade() {\n // This computed prop is sniffed by the tab child\n return !this.noFade;\n }\n },\n watch: {\n [MODEL_PROP_NAME](newValue, oldValue) {\n if (newValue !== oldValue) {\n newValue = toInteger(newValue, -1);\n oldValue = toInteger(oldValue, 0);\n const $tab = this.tabs[newValue];\n if ($tab && !$tab.disabled) {\n this.activateTab($tab);\n } else {\n // Try next or prev tabs\n if (newValue < oldValue) {\n this.previousTab();\n } else {\n this.nextTab();\n }\n }\n }\n },\n currentTab(newValue) {\n let index = -1;\n\n // Ensure only one tab is active at most\n this.tabs.forEach(($tab, i) => {\n if (i === newValue && !$tab.disabled) {\n $tab.localActive = true;\n index = i;\n } else {\n $tab.localActive = false;\n }\n });\n\n // Update the v-model\n this.$emit(MODEL_EVENT_NAME, index);\n },\n // If tabs added, removed, or re-ordered, we emit a `changed` event\n tabs(newValue, oldValue) {\n // We use `_uid` instead of `safeId()`, as the later is changed in a `$nextTick()`\n // if no explicit ID is provided, causing duplicate emits\n if (!looseEqual(newValue.map($tab => $tab[COMPONENT_UID_KEY]), oldValue.map($tab => $tab[COMPONENT_UID_KEY]))) {\n // In a `$nextTick()` to ensure `currentTab` has been set first\n this.$nextTick(() => {\n // We emit shallow copies of the new and old arrays of tabs,\n // to prevent users from potentially mutating the internal arrays\n this.$emit(EVENT_NAME_CHANGED, newValue.slice(), oldValue.slice());\n });\n }\n },\n // Each `` will register/unregister itself\n // We use this to detect when tabs are added/removed\n // to trigger the update of the tabs\n registeredTabs() {\n this.updateTabs();\n }\n },\n created() {\n // Create private non-reactive props\n this.$_observer = null;\n },\n mounted() {\n this.setObserver(true);\n },\n beforeDestroy() {\n this.setObserver(false);\n // Ensure no references to child instances exist\n this.tabs = [];\n },\n methods: {\n registerTab($tab) {\n if (!arrayIncludes(this.registeredTabs, $tab)) {\n this.registeredTabs.push($tab);\n }\n },\n unregisterTab($tab) {\n this.registeredTabs = this.registeredTabs.slice().filter($t => $t !== $tab);\n },\n // DOM observer is needed to detect changes in order of tabs\n setObserver() {\n let on = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n this.$_observer && this.$_observer.disconnect();\n this.$_observer = null;\n if (on) {\n /* istanbul ignore next: difficult to test mutation observer in JSDOM */\n const handler = () => {\n this.$nextTick(() => {\n requestAF(() => {\n this.updateTabs();\n });\n });\n };\n\n // Watch for changes to `` sub components\n this.$_observer = observeDom(this.$refs.content, handler, {\n childList: true,\n subtree: false,\n attributes: true,\n attributeFilter: ['id']\n });\n }\n },\n getTabs() {\n const $tabs = this.registeredTabs;\n // Dropped intentionally\n // .filter(\n // $tab => $tab.$children.filter($t => $t && $t._isTab).length === 0\n // )\n\n // DOM Order of Tabs\n let order = [];\n /* istanbul ignore next: too difficult to test */\n if (IS_BROWSER && $tabs.length > 0) {\n // We rely on the DOM when mounted to get the \"true\" order of the `` children\n // `querySelectorAll()` always returns elements in document order, regardless of\n // order specified in the selector\n const selector = $tabs.map($tab => `#${$tab.safeId()}`).join(', ');\n order = selectAll(selector, this.$el).map($el => $el.id).filter(identity);\n }\n\n // Stable sort keeps the original order if not found in the `order` array,\n // which will be an empty array before mount\n return stableSort($tabs, (a, b) => order.indexOf(a.safeId()) - order.indexOf(b.safeId()));\n },\n updateTabs() {\n const $tabs = this.getTabs();\n\n // Find last active non-disabled tab in current tabs\n // We trust tab state over `currentTab`, in case tabs were added/removed/re-ordered\n let tabIndex = $tabs.indexOf($tabs.slice().reverse().find($tab => $tab.localActive && !$tab.disabled));\n\n // Else try setting to `currentTab`\n if (tabIndex < 0) {\n const {\n currentTab\n } = this;\n if (currentTab >= $tabs.length) {\n // Handle last tab being removed, so find the last non-disabled tab\n tabIndex = $tabs.indexOf($tabs.slice().reverse().find(notDisabled));\n } else if ($tabs[currentTab] && !$tabs[currentTab].disabled) {\n // Current tab is not disabled\n tabIndex = currentTab;\n }\n }\n\n // Else find first non-disabled tab in current tabs\n if (tabIndex < 0) {\n tabIndex = $tabs.indexOf($tabs.find(notDisabled));\n }\n\n // Ensure only one tab is active at a time\n $tabs.forEach(($tab, index) => {\n $tab.localActive = index === tabIndex;\n });\n this.tabs = $tabs;\n this.currentTab = tabIndex;\n },\n // Find a button that controls a tab, given the tab reference\n // Returns the button vm instance\n getButtonForTab($tab) {\n return (this.$refs.buttons || []).find($btn => $btn.tab === $tab);\n },\n // Force a button to re-render its content, given a `` instance\n // Called by `` on `update()`\n updateButton($tab) {\n const $button = this.getButtonForTab($tab);\n if ($button && $button.$forceUpdate) {\n $button.$forceUpdate();\n }\n },\n // Activate a tab given a `` instance\n // Also accessed by ``\n activateTab($tab) {\n const {\n currentTab,\n tabs: $tabs\n } = this;\n let result = false;\n if ($tab) {\n const index = $tabs.indexOf($tab);\n if (index !== currentTab && index > -1 && !$tab.disabled) {\n const tabEvent = new BvEvent(EVENT_NAME_ACTIVATE_TAB, {\n cancelable: true,\n vueTarget: this,\n componentId: this.safeId()\n });\n this.$emit(tabEvent.type, index, currentTab, tabEvent);\n if (!tabEvent.defaultPrevented) {\n this.currentTab = index;\n result = true;\n }\n }\n }\n\n // Couldn't set tab, so ensure v-model is up to date\n /* istanbul ignore next: should rarely happen */\n if (!result && this[MODEL_PROP_NAME] !== currentTab) {\n this.$emit(MODEL_EVENT_NAME, currentTab);\n }\n return result;\n },\n // Deactivate a tab given a `` instance\n // Accessed by ``\n deactivateTab($tab) {\n if ($tab) {\n // Find first non-disabled tab that isn't the one being deactivated\n // If no tabs are available, then don't deactivate current tab\n return this.activateTab(this.tabs.filter($t => $t !== $tab).find(notDisabled));\n }\n /* istanbul ignore next: should never/rarely happen */\n return false;\n },\n // Focus a tab button given its `` instance\n focusButton($tab) {\n // Wrap in `$nextTick()` to ensure DOM has completed rendering\n this.$nextTick(() => {\n attemptFocus(this.getButtonForTab($tab));\n });\n },\n // Emit a click event on a specified `` component instance\n emitTabClick(tab, event) {\n if (isEvent(event) && tab && tab.$emit && !tab.disabled) {\n tab.$emit(EVENT_NAME_CLICK, event);\n }\n },\n // Click handler\n clickTab($tab, event) {\n this.activateTab($tab);\n this.emitTabClick($tab, event);\n },\n // Move to first non-disabled tab\n firstTab(focus) {\n const $tab = this.tabs.find(notDisabled);\n if (this.activateTab($tab) && focus) {\n this.focusButton($tab);\n this.emitTabClick($tab, focus);\n }\n },\n // Move to previous non-disabled tab\n previousTab(focus) {\n const currentIndex = mathMax(this.currentTab, 0);\n const $tab = this.tabs.slice(0, currentIndex).reverse().find(notDisabled);\n if (this.activateTab($tab) && focus) {\n this.focusButton($tab);\n this.emitTabClick($tab, focus);\n }\n },\n // Move to next non-disabled tab\n nextTab(focus) {\n const currentIndex = mathMax(this.currentTab, -1);\n const $tab = this.tabs.slice(currentIndex + 1).find(notDisabled);\n if (this.activateTab($tab) && focus) {\n this.focusButton($tab);\n this.emitTabClick($tab, focus);\n }\n },\n // Move to last non-disabled tab\n lastTab(focus) {\n const $tab = this.tabs.slice().reverse().find(notDisabled);\n if (this.activateTab($tab) && focus) {\n this.focusButton($tab);\n this.emitTabClick($tab, focus);\n }\n }\n },\n render(h) {\n const {\n align,\n end,\n fill,\n firstTab,\n justified,\n lastTab,\n nextTab,\n noKeyNav,\n noNavStyle,\n pills,\n previousTab,\n small,\n tabs: $tabs\n } = this;\n\n // Currently active tab\n const $activeTab = $tabs.find($tab => $tab.localActive && !$tab.disabled);\n\n // Tab button to allow focusing when no active tab found (keynav only)\n const $fallbackTab = $tabs.find($tab => !$tab.disabled);\n\n // For each `` found create the tab buttons\n const $buttons = $tabs.map(($tab, index) => {\n const {\n safeId\n } = $tab;\n\n // Ensure at least one tab button is focusable when keynav enabled (if possible)\n let tabIndex = null;\n if (!noKeyNav) {\n // Buttons are not in tab index unless active, or a fallback tab\n tabIndex = -1;\n if ($tab === $activeTab || !$activeTab && $tab === $fallbackTab) {\n // Place tab button in tab sequence\n tabIndex = null;\n }\n }\n return h(BVTabButton, {\n props: {\n controls: safeId ? safeId() : null,\n id: $tab.controlledBy || (safeId ? safeId(`_BV_tab_button_`) : null),\n noKeyNav,\n posInSet: index + 1,\n setSize: $tabs.length,\n tab: $tab,\n tabIndex\n },\n on: {\n [EVENT_NAME_CLICK]: event => {\n this.clickTab($tab, event);\n },\n [EVENT_NAME_FIRST]: firstTab,\n [EVENT_NAME_PREV]: previousTab,\n [EVENT_NAME_NEXT]: nextTab,\n [EVENT_NAME_LAST]: lastTab\n },\n key: $tab[COMPONENT_UID_KEY] || index,\n ref: 'buttons',\n // Needed to make `this.$refs.buttons` an array\n [REF_FOR_KEY]: true\n });\n });\n let $nav = h(BNav, {\n class: this.navClass,\n attrs: {\n role: 'tablist',\n id: this.safeId('_BV_tab_controls_')\n },\n props: {\n fill,\n justified,\n align,\n tabs: !noNavStyle && !pills,\n pills: !noNavStyle && pills,\n small\n },\n ref: 'nav'\n }, [this.normalizeSlot(SLOT_NAME_TABS_START) || h(), $buttons, this.normalizeSlot(SLOT_NAME_TABS_END) || h()]);\n $nav = h('div', {\n class: this.navWrapperClass,\n key: 'bv-tabs-nav'\n }, [$nav]);\n const $children = this.normalizeSlot() || [];\n let $empty = h();\n if ($children.length === 0) {\n $empty = h('div', {\n class: ['tab-pane', 'active'],\n key: 'bv-empty-tab'\n }, this.normalizeSlot(SLOT_NAME_EMPTY));\n }\n const $content = h('div', {\n staticClass: 'tab-content',\n class: this.contentClass,\n attrs: {\n id: this.safeId('_BV_tab_container_')\n },\n key: 'bv-content',\n ref: 'content'\n }, [$children, $empty]);\n\n // Render final output\n return h(this.tag, {\n staticClass: 'tabs',\n attrs: {\n id: this.safeId()\n }\n }, [end ? $content : h(), $nav, end ? h() : $content]);\n }\n});\n\nexport { BTabs, props };\n","import { BTabs } from '../../../../vendor/bootstrap-vue/src/components/tabs/tabs';\nimport { tabsButtonDefaults } from '../../../../utils/constants';\nimport GlButton from '../../button/button';\nimport __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';\n\n//\nconst validatorHelper = obj => Object.keys(obj).every(val => val === 'text' || val === 'attributes');\nvar script = {\n name: 'GlTabs',\n components: {\n BTabs,\n GlButton\n },\n inheritAttrs: false,\n props: {\n actionPrimary: {\n type: Object,\n required: false,\n default: null,\n validator: obj => validatorHelper(obj)\n },\n actionSecondary: {\n type: Object,\n required: false,\n default: null,\n validator: obj => validatorHelper(obj)\n },\n actionTertiary: {\n type: Object,\n required: false,\n default: null,\n validator: obj => validatorHelper(obj)\n },\n contentClass: {\n type: [String, Array, Object],\n required: false,\n default: null\n },\n navClass: {\n type: [String, Array, Object],\n required: false,\n default: null\n },\n justified: {\n type: Boolean,\n required: false,\n default: false\n },\n /**\n * Sync active tab with query string parameters. Allows for deep linking into specific tabs.\n */\n syncActiveTabWithQueryParams: {\n type: Boolean,\n required: false,\n default: false\n },\n /**\n * Name to use for query string parameter.\n */\n queryParamName: {\n type: String,\n required: false,\n default: 'tab'\n },\n value: {\n type: Number,\n required: false,\n default: 0\n }\n },\n data() {\n return {\n activeTabIndex: 0\n };\n },\n computed: {\n hasActions() {\n return [this.actionPrimary, this.actionSecondary, this.actionTertiary].some(Boolean);\n },\n listeners() {\n return {\n ...this.$listeners,\n input: this.handleInput\n };\n }\n },\n watch: {\n value: {\n handler(newValue) {\n if (this.activeTabIndex !== newValue) {\n this.activeTabIndex = newValue;\n }\n },\n immediate: true\n }\n },\n mounted() {\n if (this.syncActiveTabWithQueryParams) {\n this.syncActiveTabFromQueryParams();\n window.addEventListener('popstate', this.syncActiveTabFromQueryParams);\n }\n\n // Because we are manually binding `value` attribute to `b-tabs` the `input`\n // event is no longer automatically fired when the component is mounted.\n // To maintain parity with original `b-tabs` functionality\n // we manually fire the `input` event when the component is mounted.\n this.$emit('input', this.activeTabIndex);\n },\n destroyed() {\n window.removeEventListener('popstate', this.syncActiveTabFromQueryParams);\n },\n methods: {\n buttonBinding(prop, name) {\n if (!prop.attributes) {\n return tabsButtonDefaults[name];\n }\n return prop.attributes;\n },\n primary() {\n this.$emit('primary');\n },\n secondary() {\n this.$emit('secondary');\n },\n tertiary() {\n this.$emit('tertiary');\n },\n /**\n * When the query parameter is updated, update the active tab to match.\n */\n async syncActiveTabFromQueryParams() {\n await this.$nextTick();\n const queryParamValue = this.getQueryParamValue();\n const tabIndexToActivate = this.getTabs().findIndex((tab, tabIndex) => this.getTabQueryParamValue(tabIndex) === queryParamValue);\n this.activeTabIndex = tabIndexToActivate !== -1 ? tabIndexToActivate : 0;\n },\n /**\n * Returns a list of all instances associated with this tab control.\n */\n getTabs() {\n return this.$refs.bTabs.getTabs();\n },\n /**\n * Get the value of the query param as defined by the `queryParamName` prop.\n */\n getQueryParamValue() {\n const searchParams = new URLSearchParams(window.location.search);\n return searchParams.get(this.queryParamName);\n },\n /**\n * Set the value of the query param as defined by the `queryParamName` prop.\n * This method does nothing if the query param is already up to date.\n */\n setQueryParamValueIfNecessary(tabIndex) {\n const currentQueryParamValue = this.getQueryParamValue();\n const newQueryParamValue = this.getTabQueryParamValue(tabIndex);\n\n // If the current query parameter is already up-to-date,\n // avoid creating a duplicate history entry.\n if (tabIndex === 0 && !currentQueryParamValue || tabIndex !== 0 && currentQueryParamValue === newQueryParamValue) {\n return;\n }\n const searchParams = new URLSearchParams(window.location.search);\n searchParams.set(this.queryParamName, newQueryParamValue);\n window.history.pushState({}, '', `${window.location.pathname}?${searchParams.toString()}`);\n },\n /**\n * Returns the query param value for a tab.\n * Defaults to the tab index unless the `query-param-value` attribute is set.\n */\n getTabQueryParamValue(tabIndex) {\n const tab = this.getTabs()[tabIndex];\n return (tab === null || tab === void 0 ? void 0 : tab.$attrs['query-param-value']) || tabIndex.toString();\n },\n /**\n * Event handler for `input` event.\n */\n handleInput(tabIndex) {\n this.$emit('input', tabIndex);\n this.activeTabIndex = tabIndex;\n if (this.syncActiveTabWithQueryParams) {\n this.setQueryParamValueIfNecessary(tabIndex);\n }\n }\n }\n};\n\n/* script */\nconst __vue_script__ = script;\n\n/* template */\nvar __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-tabs',_vm._g(_vm._b({ref:\"bTabs\",staticClass:\"gl-tabs\",attrs:{\"no-nav-style\":true,\"no-fade\":true,\"active-nav-item-class\":\"gl-tab-nav-item-active\",\"content-class\":[_vm.contentClass, 'gl-tab-content'],\"nav-class\":[_vm.navClass, 'gl-tabs-nav'],\"justified\":_vm.justified,\"value\":_vm.activeTabIndex},scopedSlots:_vm._u([_vm._l((Object.keys(_vm.$slots)),function(slot){return {key:slot,fn:function(){return [_vm._t(slot)]},proxy:true}}),(_vm.hasActions)?{key:\"tabs-start\",fn:function(){return [_c('div',{staticClass:\"gl-actions-tabs-start\",attrs:{\"data-testid\":\"actions-tabs-start\"}},[(_vm.actionPrimary)?_c('gl-button',_vm._b({attrs:{\"data-testid\":\"action-primary\"},on:{\"click\":_vm.primary}},'gl-button',_vm.buttonBinding(_vm.actionPrimary, 'actionPrimary'),false),[_vm._v(\"\\n \"+_vm._s(_vm.actionPrimary.text)+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.actionSecondary)?_c('gl-button',_vm._b({attrs:{\"data-testid\":\"action-secondary\"},on:{\"click\":_vm.secondary}},'gl-button',_vm.buttonBinding(_vm.actionSecondary, 'actionSecondary'),false),[_vm._v(\"\\n \"+_vm._s(_vm.actionSecondary.text)+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.actionTertiary)?_c('gl-button',_vm._b({attrs:{\"data-testid\":\"action-tertiary\"},on:{\"click\":_vm.tertiary}},'gl-button',_vm.buttonBinding(_vm.actionTertiary, 'actionTertiary'),false),[_vm._v(\"\\n \"+_vm._s(_vm.actionTertiary.text)+\"\\n \")]):_vm._e()],1)]},proxy:true}:null,(_vm.hasActions)?{key:\"tabs-end\",fn:function(){return [_c('div',{staticClass:\"gl-actions-tabs-end\",attrs:{\"data-testid\":\"actions-tabs-end\"}},[(_vm.actionPrimary)?_c('gl-button',_vm._b({attrs:{\"data-testid\":\"action-primary\"},on:{\"click\":_vm.primary}},'gl-button',_vm.buttonBinding(_vm.actionPrimary, 'actionPrimary'),false),[_vm._v(\"\\n \"+_vm._s(_vm.actionPrimary.text)+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.actionSecondary)?_c('gl-button',_vm._b({attrs:{\"data-testid\":\"action-secondary\"},on:{\"click\":_vm.secondary}},'gl-button',_vm.buttonBinding(_vm.actionSecondary, 'actionSecondary'),false),[_vm._v(\"\\n \"+_vm._s(_vm.actionSecondary.text)+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.actionTertiary)?_c('gl-button',_vm._b({attrs:{\"data-testid\":\"action-tertiary\"},on:{\"click\":_vm.tertiary}},'gl-button',_vm.buttonBinding(_vm.actionTertiary, 'actionTertiary'),false),[_vm._v(\"\\n \"+_vm._s(_vm.actionTertiary.text)+\"\\n \")]):_vm._e()],1)]},proxy:true}:null],null,true)},'b-tabs',_vm.$attrs,false),_vm.listeners))};\nvar __vue_staticRenderFns__ = [];\n\n /* style */\n const __vue_inject_styles__ = undefined;\n /* scoped */\n const __vue_scope_id__ = undefined;\n /* module identifier */\n const __vue_module_identifier__ = undefined;\n /* functional template */\n const __vue_is_functional_template__ = false;\n /* style inject */\n \n /* style inject SSR */\n \n /* style inject shadow dom */\n \n\n \n const __vue_component__ = __vue_normalize__(\n { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n __vue_inject_styles__,\n __vue_script__,\n __vue_scope_id__,\n __vue_is_functional_template__,\n __vue_module_identifier__,\n false,\n undefined,\n undefined,\n undefined\n );\n\nexport default __vue_component__;\n","import { extend } from '../../vue';\nimport { NAME_TAB } from '../../constants/components';\nimport { MODEL_EVENT_NAME_PREFIX } from '../../constants/events';\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_STRING, PROP_TYPE_ARRAY_OBJECT_STRING, PROP_TYPE_OBJECT } from '../../constants/props';\nimport { SLOT_NAME_TITLE } from '../../constants/slots';\nimport { sortKeys } from '../../utils/object';\nimport { makePropsConfigurable, makeProp } from '../../utils/props';\nimport { props as props$1, idMixin } from '../../mixins/id';\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot';\nimport { BVTransition } from '../transition/bv-transition';\n\n// --- Constants ---\n\nconst MODEL_PROP_NAME_ACTIVE = 'active';\nconst MODEL_EVENT_NAME_ACTIVE = MODEL_EVENT_NAME_PREFIX + MODEL_PROP_NAME_ACTIVE;\n\n// --- Props ---\n\nconst props = makePropsConfigurable(sortKeys({\n ...props$1,\n [MODEL_PROP_NAME_ACTIVE]: makeProp(PROP_TYPE_BOOLEAN, false),\n buttonId: makeProp(PROP_TYPE_STRING),\n disabled: makeProp(PROP_TYPE_BOOLEAN, false),\n lazy: makeProp(PROP_TYPE_BOOLEAN, false),\n noBody: makeProp(PROP_TYPE_BOOLEAN, false),\n tag: makeProp(PROP_TYPE_STRING, 'div'),\n title: makeProp(PROP_TYPE_STRING),\n // Sniffed by `` and added to nav `li.nav-item`\n titleItemClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n titleLinkAttributes: makeProp(PROP_TYPE_OBJECT),\n // Sniffed by `` and added to nav `a.nav-link`\n titleLinkClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING)\n}), NAME_TAB);\n\n// --- Main component ---\n\n// @vue/component\nconst BTab = /*#__PURE__*/extend({\n name: NAME_TAB,\n mixins: [idMixin, normalizeSlotMixin],\n inject: {\n getBvTabs: {\n default: () => () => ({})\n }\n },\n props,\n data() {\n return {\n localActive: this[MODEL_PROP_NAME_ACTIVE] && !this.disabled\n };\n },\n computed: {\n bvTabs() {\n return this.getBvTabs();\n },\n // For parent sniffing of child\n _isTab() {\n return true;\n },\n tabClasses() {\n const {\n localActive: active,\n disabled\n } = this;\n return [{\n active,\n disabled,\n 'card-body': this.bvTabs.card && !this.noBody\n },\n // Apply `activeTabClass` styles when this tab is active\n active ? this.bvTabs.activeTabClass : null];\n },\n controlledBy() {\n return this.buttonId || this.safeId('__BV_tab_button__');\n },\n computedNoFade() {\n return !(this.bvTabs.fade || false);\n },\n computedLazy() {\n return this.bvTabs.lazy || this.lazy;\n }\n },\n watch: {\n [MODEL_PROP_NAME_ACTIVE](newValue, oldValue) {\n if (newValue !== oldValue) {\n if (newValue) {\n // If activated post mount\n this.activate();\n } else {\n /* istanbul ignore next */\n if (!this.deactivate()) {\n // Tab couldn't be deactivated, so we reset the synced active prop\n // Deactivation will fail if no other tabs to activate\n this.$emit(MODEL_EVENT_NAME_ACTIVE, this.localActive);\n }\n }\n }\n },\n disabled(newValue, oldValue) {\n if (newValue !== oldValue) {\n const {\n firstTab\n } = this.bvTabs;\n if (newValue && this.localActive && firstTab) {\n this.localActive = false;\n firstTab();\n }\n }\n },\n localActive(newValue) {\n // Make `active` prop work with `.sync` modifier\n this.$emit(MODEL_EVENT_NAME_ACTIVE, newValue);\n }\n },\n mounted() {\n // Inform `` of our presence\n this.registerTab();\n },\n updated() {\n // Force the tab button content to update (since slots are not reactive)\n // Only done if we have a title slot, as the title prop is reactive\n const {\n updateButton\n } = this.bvTabs;\n if (updateButton && this.hasNormalizedSlot(SLOT_NAME_TITLE)) {\n updateButton(this);\n }\n },\n beforeDestroy() {\n // Inform `` of our departure\n this.unregisterTab();\n },\n methods: {\n // Private methods\n registerTab() {\n // Inform `` of our presence\n const {\n registerTab\n } = this.bvTabs;\n if (registerTab) {\n registerTab(this);\n }\n },\n unregisterTab() {\n // Inform `` of our departure\n const {\n unregisterTab\n } = this.bvTabs;\n if (unregisterTab) {\n unregisterTab(this);\n }\n },\n // Public methods\n activate() {\n // Not inside a `` component or tab is disabled\n const {\n activateTab\n } = this.bvTabs;\n return activateTab && !this.disabled ? activateTab(this) : false;\n },\n deactivate() {\n // Not inside a `` component or not active to begin with\n const {\n deactivateTab\n } = this.bvTabs;\n return deactivateTab && this.localActive ? deactivateTab(this) : false;\n }\n },\n render(h) {\n const {\n localActive\n } = this;\n const $content = h(this.tag, {\n staticClass: 'tab-pane',\n class: this.tabClasses,\n directives: [{\n name: 'show',\n value: localActive\n }],\n attrs: {\n role: 'tabpanel',\n id: this.safeId(),\n 'aria-hidden': localActive ? 'false' : 'true',\n 'aria-labelledby': this.controlledBy || null\n },\n ref: 'panel'\n },\n // Render content lazily if requested\n [localActive || !this.computedLazy ? this.normalizeSlot() : h()]);\n return h(BVTransition, {\n props: {\n mode: 'out-in',\n noFade: this.computedNoFade\n }\n }, [$content]);\n }\n});\n\nexport { BTab, props };\n","import isPlainObject from 'lodash/isPlainObject';\nimport { BTab } from '../../../../vendor/bootstrap-vue/src/components/tabs/tab';\nimport { DEFAULT_TAB_TITLE_LINK_CLASS } from '../constants';\nimport __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';\n\n//\nvar script = {\n name: 'GlTab',\n components: {\n BTab\n },\n inheritAttrs: false,\n props: {\n titleLinkClass: {\n type: [String, Array, Object],\n required: false,\n default: ''\n },\n /**\n * Query string parameter value to use when `gl-tabs` `sync-active-tab-with-query-params` prop is set to `true`.\n */\n queryParamValue: {\n type: String,\n required: false,\n default: null\n }\n },\n computed: {\n linkClass() {\n const {\n titleLinkClass\n } = this;\n if (Array.isArray(titleLinkClass)) {\n return [...titleLinkClass, DEFAULT_TAB_TITLE_LINK_CLASS];\n }\n if (isPlainObject(titleLinkClass)) {\n return {\n ...titleLinkClass,\n [DEFAULT_TAB_TITLE_LINK_CLASS]: true\n };\n }\n return `${titleLinkClass} ${DEFAULT_TAB_TITLE_LINK_CLASS}`.trim();\n }\n }\n};\n\n/* script */\nconst __vue_script__ = script;\n\n/* template */\nvar __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-tab',_vm._g(_vm._b({attrs:{\"title-link-class\":_vm.linkClass,\"query-param-value\":_vm.queryParamValue},scopedSlots:_vm._u([_vm._l((Object.keys(_vm.$slots)),function(slot){return {key:slot,fn:function(){return [_vm._t(slot)]},proxy:true}})],null,true)},'b-tab',_vm.$attrs,false),_vm.$listeners))};\nvar __vue_staticRenderFns__ = [];\n\n /* style */\n const __vue_inject_styles__ = undefined;\n /* scoped */\n const __vue_scope_id__ = undefined;\n /* module identifier */\n const __vue_module_identifier__ = undefined;\n /* functional template */\n const __vue_is_functional_template__ = false;\n /* style inject */\n \n /* style inject SSR */\n \n /* style inject shadow dom */\n \n\n \n const __vue_component__ = __vue_normalize__(\n { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n __vue_inject_styles__,\n __vue_script__,\n __vue_scope_id__,\n __vue_is_functional_template__,\n __vue_module_identifier__,\n false,\n undefined,\n undefined,\n undefined\n );\n\nexport default __vue_component__;\n","const DEFAULT_TAB_TITLE_LINK_CLASS = 'gl-tab-nav-item';\n\nexport { DEFAULT_TAB_TITLE_LINK_CLASS };\n"],"sourceRoot":""}