{"version":3,"sources":["webpack:///./repository/utils/commit.js","webpack:///./repository/log_tree.js","webpack:///./repository/graphql.js","webpack:////build/gitlab/src/gitlab-foss/node_modules/@gitlab/ui/dist/vendor/bootstrap-vue/src/utils/stable-sort.js","webpack:///./repository/queries/commit.fragment.graphql","webpack:///./repository/queries/project_path.query.graphql","webpack:///./repository/components/preview/index.vue","webpack:///./repository/components/preview/index.vue?4d3d","webpack:///repository/components/preview/index.vue","webpack:///./repository/components/preview/index.vue?a9c6","webpack:///./repository/queries/commits.query.graphql","webpack:///./repository/queries/readme.query.graphql","webpack:////build/gitlab/src/gitlab-foss/node_modules/@gitlab/ui/dist/vendor/bootstrap-vue/src/components/nav/nav.js","webpack:////build/gitlab/src/gitlab-foss/node_modules/@gitlab/ui/dist/vendor/bootstrap-vue/src/components/tabs/tabs.js","webpack:////build/gitlab/src/gitlab-foss/node_modules/@gitlab/ui/dist/components/base/tabs/tabs/tabs.js","webpack:////build/gitlab/src/gitlab-foss/node_modules/@gitlab/ui/dist/vendor/bootstrap-vue/src/components/tabs/tab.js","webpack:////build/gitlab/src/gitlab-foss/node_modules/@gitlab/ui/dist/components/base/tabs/tab/tab.js","webpack:////build/gitlab/src/gitlab-foss/node_modules/@gitlab/ui/dist/components/base/tabs/constants.js","webpack:////build/gitlab/src/gitlab-foss/node_modules/@gitlab/ui/dist/vendor/bootstrap-vue/src/components/toast/toaster.js","webpack:////build/gitlab/src/gitlab-foss/node_modules/@gitlab/ui/dist/vendor/bootstrap-vue/src/components/toast/toast.js","webpack:////build/gitlab/src/gitlab-foss/node_modules/@gitlab/ui/dist/vendor/bootstrap-vue/src/components/toast/helpers/bv-toast.js","webpack:////build/gitlab/src/gitlab-foss/node_modules/@gitlab/ui/dist/vendor/bootstrap-vue/src/components/toast/index.js","webpack:////build/gitlab/src/gitlab-foss/node_modules/@gitlab/ui/dist/components/base/toast/toast.js"],"names":["normalizeData","data","path","extra","map","d","sha","commit","id","message","titleHtml","commit_title_html","committedDate","committed_date","commitPath","commit_path","fileName","file_name","filePath","joinPaths","__typename","fetchpromises","resolvers","maxOffset","nextOffset","currentPath","setNextOffset","offset","fetchLogsTree","client","resolver","_maxOffset","offsetNumber","Number","Promise","resolve","push","projectPath","readQuery","query","projectPathQuery","escapedRef","refQuery","axios","get","gon","relative_url_root","encodeURIComponent","replace","params","format","then","newData","headers","headerLogsOffset","sourceData","commitsQuery","produce","draftState","commits","writeQuery","forEach","r","entry","find","c","name","resolveCommit","Vue","use","VueApollo","defaultClient","createDefaultClient","Query","_","readme","url","viewer","cacheConfig","dataIdFromObject","obj","flatPath","_id","stableSort","array","compareFn","a","index","sort","b","this","bind","e","doc","loc","source","definitionRefs","findOperation","i","definitions","length","element","value","def","refs","Set","collectFragmentReferences","node","kind","add","type","selectionSet","selections","selection","variableDefinitions","module","exports","operationName","newDoc","hasOwnProperty","opRefs","allRefs","newRefs","refName","size","prevRefs","has","childRef","op","oneQuery","apollo","readmeQuery","variables","blob","webPath","components","GlIcon","GlLink","GlLoadingIcon","directives","SafeHtml","props","Object","required","computed","isLoading","$apollo","queries","loading","watch","newVal","_this","$nextTick","handleLocationHash","renderGFM","$refs","safeHtmlConfig","ADD_TAGS","component","_vm","_c","_self","staticClass","attrs","_v","_s","rawName","html","expression","arg","$options","ref","_e","names","concat","filter","align","cardHeader","fill","justified","pills","small","tabs","tag","BNav","functional","h","_ref","children","class","mixin","modelMixin","modelProps","prop","MODEL_PROP_NAME","event","MODEL_EVENT_NAME","notDisabled","tab","disabled","BVTabButton","inject","getBvTabs","default","controls","noKeyNav","posInSet","setSize","tabIndex","methods","link","keyCode","shiftKey","$emit","indexOf","handleEvent","title","localActive","titleItemClass","titleLinkClass","titleLinkAttributes","$link","active","bvTabs","activeNavItemClass","role","tabindex","on","click","keydown","normalizeSlot","navProps","activeTabClass","contentClass","end","lazy","navClass","navWrapperClass","noFade","noNavStyle","BTabs","mixins","currentTab","registeredTabs","newValue","oldValue","$tab","activateTab","previousTab","nextTab","slice","updateTabs","$_observer","setObserver","$t","arguments","undefined","disconnect","handler","content","childList","subtree","attributes","attributeFilter","$tabs","order","selector","safeId","join","$el","identity","getTabs","reverse","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","keys","every","val","__vue_script__","GlButton","inheritAttrs","actionPrimary","validator","actionSecondary","actionTertiary","String","Array","Boolean","syncActiveTabWithQueryParams","queryParamName","activeTabIndex","some","$listeners","input","handleInput","immediate","syncActiveTabFromQueryParams","window","addEventListener","removeEventListener","buttonBinding","queryParamValue","getQueryParamValue","tabIndexToActivate","findIndex","getTabQueryParamValue","bTabs","URLSearchParams","location","search","currentQueryParamValue","newQueryParamValue","searchParams","set","history","pushState","pathname","toString","$attrs","setQueryParamValueIfNecessary","__vue_component__","render","_h","$createElement","_g","_b","scopedSlots","_u","_l","$slots","slot","fn","_t","proxy","primary","text","secondary","tertiary","listeners","staticRenderFns","MODEL_EVENT_NAME_ACTIVE","buttonId","noBody","BTab","_isTab","card","fade","activate","deactivate","registerTab","updateButton","hasNormalizedSlot","unregisterTab","deactivateTab","tabClasses","computedLazy","mode","computedNoFade","isArray","trim","linkClass","DefaultTransition","el","afterEnter","onAfterEnter","ariaAtomic","ariaLive","BToaster","doRender","dead","staticName","hasTarget","warn","emitOnRoot","parentNode","removeChild","$toaster","$target","multiple","slim","transition","defaultValue","linkProps","appendToast","autoHideDelay","bodyClass","headerClass","headerTag","isStatus","noAutoHide","noHoverPause","solid","static","toastClass","toaster","variant","BToast","isMounted","localShow","isTransitioning","isHiding","dismissStarted","resumeDismiss","hide","beforeEnter","onBeforeEnter","beforeLeave","onBeforeLeave","afterLeave","onAfterLeave","bvAttrs","ensureToaster","$_dismissTimer","show","listenOnRoot","computedToaster","clearDismissTimer","showEvent","buildEvent","emitEvent","Date","now","hideEvent","setHoverHandler","options","target","relatedTarget","bvEvent","div","document","createElement","body","appendChild","bvEventRoot","propsData","$mount","setTimeout","computedDuration","clearTimeout","onPause","onUnPause","passed","startDismissTimer","hiddenEvent","slotScope","$headerContent","$title","$header","$body","onLinkClick","computedAttrs","isStatic","$toast","toastClasses","scopedStyleAttrs","transitionHandlers","makeToast","to","BASE_PROPS","propsToSlots","toastContent","filterOptions","reduce","memo","BVToastPlugin","plugins","plugin","BVToastPop","extend","extends","handleDestroy","$destroy","bvParent","$once","BvToast","vm","_root","parent","toast","visible","prototype","ToastPlugin","DEFAULT_OPTIONS","toastsCount","renderTitle","nodes","action","splice","onClick","showToast","$bvToast","onComplete","toastHiddenCallback","$root","$off","$on","updatedAutoHideDelay","isNaN"],"mappings":"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","file":"commons-pages.groups.show-pages.projects.blob.show-pages.projects.show-pages.projects.tree.show.44296e11.chunk.js","sourcesContent":["import { joinPaths } from '~/lib/utils/url_utility';\n\nexport function normalizeData(data, path, extra = () => {}) {\n return data.map((d) => ({\n sha: d.commit.id,\n message: d.commit.message,\n titleHtml: d.commit_title_html,\n committedDate: d.commit.committed_date,\n commitPath: d.commit_path,\n fileName: d.file_name,\n filePath: joinPaths(path, d.file_name),\n __typename: 'LogTreeCommit',\n ...extra(d),\n }));\n}\n","import produce from 'immer';\nimport { normalizeData } from 'ee_else_ce/repository/utils/commit';\nimport axios from '~/lib/utils/axios_utils';\nimport { joinPaths } from '~/lib/utils/url_utility';\nimport commitsQuery from './queries/commits.query.graphql';\nimport projectPathQuery from './queries/project_path.query.graphql';\nimport refQuery from './queries/ref.query.graphql';\n\nconst fetchpromises = {};\nconst resolvers = {};\nlet maxOffset;\nlet nextOffset;\nlet currentPath;\n\nfunction setNextOffset(offset) {\n nextOffset = offset || null;\n}\n\nexport function resolveCommit(commits, path, { resolve, entry }) {\n const commit = commits.find((c) => c.filePath === joinPaths(path, entry.name));\n\n if (commit) {\n resolve(commit);\n }\n}\n\n// eslint-disable-next-line max-params\nexport function fetchLogsTree(client, path, offset, resolver = null, _maxOffset = null) {\n if (_maxOffset) {\n maxOffset = _maxOffset;\n }\n\n if (!currentPath || currentPath !== path) {\n // ensures the nextOffset is reset if the user changed directories\n setNextOffset(null);\n }\n\n currentPath = path;\n\n const offsetNumber = Number(offset);\n\n if (!nextOffset && offsetNumber > maxOffset) {\n setNextOffset(offsetNumber - 25); // ensures commit data is fetched for newly added rows that need data from the previous request (requests are made in batches of 25).\n return Promise.resolve();\n }\n\n if (resolver) {\n if (!resolvers[path]) {\n resolvers[path] = [resolver];\n } else {\n resolvers[path].push(resolver);\n }\n }\n\n if (fetchpromises[path]) return fetchpromises[path];\n\n const { projectPath } = client.readQuery({ query: projectPathQuery });\n const { escapedRef } = client.readQuery({ query: refQuery });\n\n fetchpromises[path] = axios\n .get(\n `${gon.relative_url_root}/${projectPath}/-/refs/${escapedRef}/logs_tree/${encodeURIComponent(\n path.replace(/^\\//, ''),\n )}`,\n {\n params: { format: 'json', offset: nextOffset || offset },\n },\n )\n .then(({ data: newData, headers }) => {\n const headerLogsOffset = headers['more-logs-offset'];\n const sourceData = client.readQuery({ query: commitsQuery });\n const data = produce(sourceData, (draftState) => {\n draftState.commits.push(...normalizeData(newData, path));\n });\n client.writeQuery({\n query: commitsQuery,\n data,\n });\n\n resolvers[path].forEach((r) => resolveCommit(data.commits, path, r));\n\n delete fetchpromises[path];\n\n if (headerLogsOffset) {\n setNextOffset(null);\n fetchLogsTree(client, path, headerLogsOffset);\n } else {\n delete resolvers[path];\n maxOffset = null;\n setNextOffset(null);\n }\n });\n\n return fetchpromises[path];\n}\n","import Vue from 'vue';\nimport VueApollo from 'vue-apollo';\nimport createDefaultClient from '~/lib/graphql';\nimport axios from '~/lib/utils/axios_utils';\nimport { fetchLogsTree } from './log_tree';\n\nVue.use(VueApollo);\n\nconst defaultClient = createDefaultClient(\n {\n Query: {\n commit(_, { path, fileName, maxOffset }) {\n return new Promise((resolve) => {\n fetchLogsTree(\n defaultClient,\n path,\n '0',\n {\n resolve,\n entry: {\n name: fileName,\n },\n },\n maxOffset,\n );\n });\n },\n readme(_, { url }) {\n return axios\n .get(url, { params: { format: 'json', viewer: 'rich' } })\n .then(({ data }) => ({ ...data, __typename: 'ReadmeFile' }));\n },\n },\n },\n {\n cacheConfig: {\n dataIdFromObject: (obj) => {\n /* eslint-disable @gitlab/require-i18n-strings */\n // eslint-disable-next-line no-underscore-dangle\n switch (obj.__typename) {\n // We need to create a dynamic ID for each entry\n // Each entry can have the same ID as the ID is a commit ID\n // So we create a unique cache ID with the path and the ID\n case 'TreeEntry':\n case 'Submodule':\n case 'Blob':\n return `${encodeURIComponent(obj.flatPath)}-${obj.id}`;\n default:\n // If the type doesn't match any of the above we fallback\n // to using the default Apollo ID\n // eslint-disable-next-line no-underscore-dangle\n return obj.id || obj._id;\n }\n /* eslint-enable @gitlab/require-i18n-strings */\n },\n },\n },\n);\n\nexport default new VueApollo({\n defaultClient,\n});\n","/*\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","\n var doc = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"FragmentDefinition\",\"name\":{\"kind\":\"Name\",\"value\":\"TreeEntryCommit\"},\"typeCondition\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"LogTreeCommit\"}},\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"sha\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"message\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"titleHtml\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"committedDate\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"commitPath\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"fileName\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"filePath\"},\"arguments\":[],\"directives\":[]}]}}],\"loc\":{\"start\":0,\"end\":125}};\n doc.loc.source = {\"body\":\"fragment TreeEntryCommit on LogTreeCommit {\\n sha\\n message\\n titleHtml\\n committedDate\\n commitPath\\n fileName\\n filePath\\n}\\n\",\"name\":\"GraphQL request\",\"locationOffset\":{\"line\":1,\"column\":1}};\n \n\n var names = {};\n function unique(defs) {\n return defs.filter(\n function(def) {\n if (def.kind !== 'FragmentDefinition') return true;\n var name = def.name.value\n if (names[name]) {\n return false;\n } else {\n names[name] = true;\n return true;\n }\n }\n )\n }\n \n\n // Collect any fragment/type references from a node, adding them to the refs Set\n function collectFragmentReferences(node, refs) {\n if (node.kind === \"FragmentSpread\") {\n refs.add(node.name.value);\n } else if (node.kind === \"VariableDefinition\") {\n var type = node.type;\n if (type.kind === \"NamedType\") {\n refs.add(type.name.value);\n }\n }\n\n if (node.selectionSet) {\n node.selectionSet.selections.forEach(function(selection) {\n collectFragmentReferences(selection, refs);\n });\n }\n\n if (node.variableDefinitions) {\n node.variableDefinitions.forEach(function(def) {\n collectFragmentReferences(def, refs);\n });\n }\n\n if (node.definitions) {\n node.definitions.forEach(function(def) {\n collectFragmentReferences(def, refs);\n });\n }\n }\n\n var definitionRefs = {};\n (function extractReferences() {\n doc.definitions.forEach(function(def) {\n if (def.name) {\n var refs = new Set();\n collectFragmentReferences(def, refs);\n definitionRefs[def.name.value] = refs;\n }\n });\n })();\n\n function findOperation(doc, name) {\n for (var i = 0; i < doc.definitions.length; i++) {\n var element = doc.definitions[i];\n if (element.name && element.name.value == name) {\n return element;\n }\n }\n }\n\n function oneQuery(doc, operationName) {\n // Copy the DocumentNode, but clear out the definitions\n var newDoc = {\n kind: doc.kind,\n definitions: [findOperation(doc, operationName)]\n };\n if (doc.hasOwnProperty(\"loc\")) {\n newDoc.loc = doc.loc;\n }\n\n // Now, for the operation we're running, find any fragments referenced by\n // it or the fragments it references\n var opRefs = definitionRefs[operationName] || new Set();\n var allRefs = new Set();\n var newRefs = new Set();\n\n // IE 11 doesn't support \"new Set(iterable)\", so we add the members of opRefs to newRefs one by one\n opRefs.forEach(function(refName) {\n newRefs.add(refName);\n });\n\n while (newRefs.size > 0) {\n var prevRefs = newRefs;\n newRefs = new Set();\n\n prevRefs.forEach(function(refName) {\n if (!allRefs.has(refName)) {\n allRefs.add(refName);\n var childRefs = definitionRefs[refName] || new Set();\n childRefs.forEach(function(childRef) {\n newRefs.add(childRef);\n });\n }\n });\n }\n\n allRefs.forEach(function(refName) {\n var op = findOperation(doc, refName);\n if (op) {\n newDoc.definitions.push(op);\n }\n });\n\n return newDoc;\n }\n \n module.exports = doc;\n \n module.exports[\"TreeEntryCommit\"] = oneQuery(doc, \"TreeEntryCommit\");\n \n","\n var doc = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"query\",\"name\":{\"kind\":\"Name\",\"value\":\"getProjectPath\"},\"variableDefinitions\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"projectPath\"},\"arguments\":[],\"directives\":[{\"kind\":\"Directive\",\"name\":{\"kind\":\"Name\",\"value\":\"client\"},\"arguments\":[]}]}]}}],\"loc\":{\"start\":0,\"end\":47}};\n doc.loc.source = {\"body\":\"query getProjectPath {\\n projectPath @client\\n}\\n\",\"name\":\"GraphQL request\",\"locationOffset\":{\"line\":1,\"column\":1}};\n \n\n var names = {};\n function unique(defs) {\n return defs.filter(\n function(def) {\n if (def.kind !== 'FragmentDefinition') return true;\n var name = def.name.value\n if (names[name]) {\n return false;\n } else {\n names[name] = true;\n return true;\n }\n }\n )\n }\n \n\n // Collect any fragment/type references from a node, adding them to the refs Set\n function collectFragmentReferences(node, refs) {\n if (node.kind === \"FragmentSpread\") {\n refs.add(node.name.value);\n } else if (node.kind === \"VariableDefinition\") {\n var type = node.type;\n if (type.kind === \"NamedType\") {\n refs.add(type.name.value);\n }\n }\n\n if (node.selectionSet) {\n node.selectionSet.selections.forEach(function(selection) {\n collectFragmentReferences(selection, refs);\n });\n }\n\n if (node.variableDefinitions) {\n node.variableDefinitions.forEach(function(def) {\n collectFragmentReferences(def, refs);\n });\n }\n\n if (node.definitions) {\n node.definitions.forEach(function(def) {\n collectFragmentReferences(def, refs);\n });\n }\n }\n\n var definitionRefs = {};\n (function extractReferences() {\n doc.definitions.forEach(function(def) {\n if (def.name) {\n var refs = new Set();\n collectFragmentReferences(def, refs);\n definitionRefs[def.name.value] = refs;\n }\n });\n })();\n\n function findOperation(doc, name) {\n for (var i = 0; i < doc.definitions.length; i++) {\n var element = doc.definitions[i];\n if (element.name && element.name.value == name) {\n return element;\n }\n }\n }\n\n function oneQuery(doc, operationName) {\n // Copy the DocumentNode, but clear out the definitions\n var newDoc = {\n kind: doc.kind,\n definitions: [findOperation(doc, operationName)]\n };\n if (doc.hasOwnProperty(\"loc\")) {\n newDoc.loc = doc.loc;\n }\n\n // Now, for the operation we're running, find any fragments referenced by\n // it or the fragments it references\n var opRefs = definitionRefs[operationName] || new Set();\n var allRefs = new Set();\n var newRefs = new Set();\n\n // IE 11 doesn't support \"new Set(iterable)\", so we add the members of opRefs to newRefs one by one\n opRefs.forEach(function(refName) {\n newRefs.add(refName);\n });\n\n while (newRefs.size > 0) {\n var prevRefs = newRefs;\n newRefs = new Set();\n\n prevRefs.forEach(function(refName) {\n if (!allRefs.has(refName)) {\n allRefs.add(refName);\n var childRefs = definitionRefs[refName] || new Set();\n childRefs.forEach(function(childRef) {\n newRefs.add(childRef);\n });\n }\n });\n }\n\n allRefs.forEach(function(refName) {\n var op = findOperation(doc, refName);\n if (op) {\n newDoc.definitions.push(op);\n }\n });\n\n return newDoc;\n }\n \n module.exports = doc;\n \n module.exports[\"getProjectPath\"] = oneQuery(doc, \"getProjectPath\");\n \n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('article',{staticClass:\"file-holder limited-width-container readme-holder\"},[_c('div',{staticClass:\"js-file-title file-title-flex-parent\"},[_c('div',{staticClass:\"file-header-content\"},[_c('gl-icon',{attrs:{\"name\":\"doc-text\"}}),_vm._v(\" \"),_c('gl-link',{attrs:{\"href\":_vm.blob.webPath}},[_c('strong',[_vm._v(_vm._s(_vm.blob.name))])])],1)]),_vm._v(\" \"),_c('div',{staticClass:\"blob-viewer\",attrs:{\"data-testid\":\"blob-viewer-content\",\"itemprop\":\"about\"}},[(_vm.isLoading)?_c('gl-loading-icon',{staticClass:\"my-4 mx-auto\",attrs:{\"size\":\"lg\",\"color\":\"dark\"}}):(_vm.readme)?_c('div',{directives:[{name:\"safe-html\",rawName:\"v-safe-html:[$options.safeHtmlConfig]\",value:(_vm.readme.html),expression:\"readme.html\",arg:_vm.$options.safeHtmlConfig}],ref:\"readme\"}):_vm._e()],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--14-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--14-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--14-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--14-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js\"","\n\n\n\n","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=cceef958\"\nimport script from \"./index.vue?vue&type=script&lang=js\"\nexport * from \"./index.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n var doc = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"query\",\"name\":{\"kind\":\"Name\",\"value\":\"getCommits\"},\"variableDefinitions\":[],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"commits\"},\"arguments\":[],\"directives\":[{\"kind\":\"Directive\",\"name\":{\"kind\":\"Name\",\"value\":\"client\"},\"arguments\":[]}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"FragmentSpread\",\"name\":{\"kind\":\"Name\",\"value\":\"TreeEntryCommit\"},\"directives\":[]}]}}]}}],\"loc\":{\"start\":0,\"end\":133}};\n doc.loc.source = {\"body\":\"#import \\\"ee_else_ce/repository/queries/commit.fragment.graphql\\\"\\n\\nquery getCommits {\\n commits @client {\\n ...TreeEntryCommit\\n }\\n}\\n\",\"name\":\"GraphQL request\",\"locationOffset\":{\"line\":1,\"column\":1}};\n \n\n var names = {};\n function unique(defs) {\n return defs.filter(\n function(def) {\n if (def.kind !== 'FragmentDefinition') return true;\n var name = def.name.value\n if (names[name]) {\n return false;\n } else {\n names[name] = true;\n return true;\n }\n }\n )\n }\n doc.definitions = doc.definitions.concat(unique(require(\"ee_else_ce/repository/queries/commit.fragment.graphql\").definitions));\n\n\n // Collect any fragment/type references from a node, adding them to the refs Set\n function collectFragmentReferences(node, refs) {\n if (node.kind === \"FragmentSpread\") {\n refs.add(node.name.value);\n } else if (node.kind === \"VariableDefinition\") {\n var type = node.type;\n if (type.kind === \"NamedType\") {\n refs.add(type.name.value);\n }\n }\n\n if (node.selectionSet) {\n node.selectionSet.selections.forEach(function(selection) {\n collectFragmentReferences(selection, refs);\n });\n }\n\n if (node.variableDefinitions) {\n node.variableDefinitions.forEach(function(def) {\n collectFragmentReferences(def, refs);\n });\n }\n\n if (node.definitions) {\n node.definitions.forEach(function(def) {\n collectFragmentReferences(def, refs);\n });\n }\n }\n\n var definitionRefs = {};\n (function extractReferences() {\n doc.definitions.forEach(function(def) {\n if (def.name) {\n var refs = new Set();\n collectFragmentReferences(def, refs);\n definitionRefs[def.name.value] = refs;\n }\n });\n })();\n\n function findOperation(doc, name) {\n for (var i = 0; i < doc.definitions.length; i++) {\n var element = doc.definitions[i];\n if (element.name && element.name.value == name) {\n return element;\n }\n }\n }\n\n function oneQuery(doc, operationName) {\n // Copy the DocumentNode, but clear out the definitions\n var newDoc = {\n kind: doc.kind,\n definitions: [findOperation(doc, operationName)]\n };\n if (doc.hasOwnProperty(\"loc\")) {\n newDoc.loc = doc.loc;\n }\n\n // Now, for the operation we're running, find any fragments referenced by\n // it or the fragments it references\n var opRefs = definitionRefs[operationName] || new Set();\n var allRefs = new Set();\n var newRefs = new Set();\n\n // IE 11 doesn't support \"new Set(iterable)\", so we add the members of opRefs to newRefs one by one\n opRefs.forEach(function(refName) {\n newRefs.add(refName);\n });\n\n while (newRefs.size > 0) {\n var prevRefs = newRefs;\n newRefs = new Set();\n\n prevRefs.forEach(function(refName) {\n if (!allRefs.has(refName)) {\n allRefs.add(refName);\n var childRefs = definitionRefs[refName] || new Set();\n childRefs.forEach(function(childRef) {\n newRefs.add(childRef);\n });\n }\n });\n }\n\n allRefs.forEach(function(refName) {\n var op = findOperation(doc, refName);\n if (op) {\n newDoc.definitions.push(op);\n }\n });\n\n return newDoc;\n }\n \n module.exports = doc;\n \n module.exports[\"getCommits\"] = oneQuery(doc, \"getCommits\");\n \n","\n var doc = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"query\",\"name\":{\"kind\":\"Name\",\"value\":\"getReadme\"},\"variableDefinitions\":[{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}},\"directives\":[]}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"readme\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"url\"}}}],\"directives\":[{\"kind\":\"Directive\",\"name\":{\"kind\":\"Name\",\"value\":\"client\"},\"arguments\":[]}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"html\"},\"arguments\":[],\"directives\":[]}]}}]}}],\"loc\":{\"start\":0,\"end\":78}};\n doc.loc.source = {\"body\":\"query getReadme($url: String!) {\\n readme(url: $url) @client {\\n html\\n }\\n}\\n\",\"name\":\"GraphQL request\",\"locationOffset\":{\"line\":1,\"column\":1}};\n \n\n var names = {};\n function unique(defs) {\n return defs.filter(\n function(def) {\n if (def.kind !== 'FragmentDefinition') return true;\n var name = def.name.value\n if (names[name]) {\n return false;\n } else {\n names[name] = true;\n return true;\n }\n }\n )\n }\n \n\n // Collect any fragment/type references from a node, adding them to the refs Set\n function collectFragmentReferences(node, refs) {\n if (node.kind === \"FragmentSpread\") {\n refs.add(node.name.value);\n } else if (node.kind === \"VariableDefinition\") {\n var type = node.type;\n if (type.kind === \"NamedType\") {\n refs.add(type.name.value);\n }\n }\n\n if (node.selectionSet) {\n node.selectionSet.selections.forEach(function(selection) {\n collectFragmentReferences(selection, refs);\n });\n }\n\n if (node.variableDefinitions) {\n node.variableDefinitions.forEach(function(def) {\n collectFragmentReferences(def, refs);\n });\n }\n\n if (node.definitions) {\n node.definitions.forEach(function(def) {\n collectFragmentReferences(def, refs);\n });\n }\n }\n\n var definitionRefs = {};\n (function extractReferences() {\n doc.definitions.forEach(function(def) {\n if (def.name) {\n var refs = new Set();\n collectFragmentReferences(def, refs);\n definitionRefs[def.name.value] = refs;\n }\n });\n })();\n\n function findOperation(doc, name) {\n for (var i = 0; i < doc.definitions.length; i++) {\n var element = doc.definitions[i];\n if (element.name && element.name.value == name) {\n return element;\n }\n }\n }\n\n function oneQuery(doc, operationName) {\n // Copy the DocumentNode, but clear out the definitions\n var newDoc = {\n kind: doc.kind,\n definitions: [findOperation(doc, operationName)]\n };\n if (doc.hasOwnProperty(\"loc\")) {\n newDoc.loc = doc.loc;\n }\n\n // Now, for the operation we're running, find any fragments referenced by\n // it or the fragments it references\n var opRefs = definitionRefs[operationName] || new Set();\n var allRefs = new Set();\n var newRefs = new Set();\n\n // IE 11 doesn't support \"new Set(iterable)\", so we add the members of opRefs to newRefs one by one\n opRefs.forEach(function(refName) {\n newRefs.add(refName);\n });\n\n while (newRefs.size > 0) {\n var prevRefs = newRefs;\n newRefs = new Set();\n\n prevRefs.forEach(function(refName) {\n if (!allRefs.has(refName)) {\n allRefs.add(refName);\n var childRefs = definitionRefs[refName] || new Set();\n childRefs.forEach(function(childRef) {\n newRefs.add(childRef);\n });\n }\n });\n }\n\n allRefs.forEach(function(refName) {\n var op = findOperation(doc, refName);\n if (op) {\n newDoc.definitions.push(op);\n }\n });\n\n return newDoc;\n }\n \n module.exports = doc;\n \n module.exports[\"getReadme\"] = oneQuery(doc, \"getReadme\");\n \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","import { Wormhole, PortalTarget } from 'portal-vue';\nimport { extend } from '../../vue';\nimport { NAME_TOASTER } from '../../constants/components';\nimport { EVENT_NAME_DESTROYED } from '../../constants/events';\nimport { PROP_TYPE_STRING } from '../../constants/props';\nimport { requestAF, removeClass } from '../../utils/dom';\nimport { getRootEventName } from '../../utils/events';\nimport { makePropsConfigurable, makeProp } from '../../utils/props';\nimport { warn } from '../../utils/warn';\nimport { listenOnRootMixin } from '../../mixins/listen-on-root';\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot';\n\n// --- Helper components ---\n\n// @vue/component\nconst DefaultTransition = /*#__PURE__*/extend({\n mixins: [normalizeSlotMixin],\n data() {\n return {\n // Transition classes base name\n name: 'b-toaster'\n };\n },\n methods: {\n onAfterEnter(el) {\n // Work around a Vue.js bug where `*-enter-to` class is not removed\n // See: https://github.com/vuejs/vue/pull/7901\n // The `*-move` class is also stuck on elements that moved,\n // but there are no JavaScript hooks to handle after move\n // See: https://github.com/vuejs/vue/pull/7906\n requestAF(() => {\n removeClass(el, `${this.name}-enter-to`);\n });\n }\n },\n render(h) {\n return h('transition-group', {\n props: {\n tag: 'div',\n name: this.name\n },\n on: {\n afterEnter: this.onAfterEnter\n }\n }, this.normalizeSlot());\n }\n});\n\n// --- Props ---\n\nconst props = makePropsConfigurable({\n // Allowed: 'true' or 'false' or `null`\n ariaAtomic: makeProp(PROP_TYPE_STRING),\n ariaLive: makeProp(PROP_TYPE_STRING),\n name: makeProp(PROP_TYPE_STRING, undefined, true),\n // Required\n // Aria role\n role: makeProp(PROP_TYPE_STRING)\n}, NAME_TOASTER);\n\n// --- Main component ---\n\n// @vue/component\nconst BToaster = /*#__PURE__*/extend({\n name: NAME_TOASTER,\n mixins: [listenOnRootMixin],\n props,\n data() {\n return {\n // We don't render on SSR or if a an existing target found\n doRender: false,\n dead: false,\n // Toaster names cannot change once created\n staticName: this.name\n };\n },\n beforeMount() {\n const {\n name\n } = this;\n this.staticName = name;\n\n /* istanbul ignore if */\n if (Wormhole.hasTarget(name)) {\n warn(`A \"\" with name \"${name}\" already exists in the document.`, NAME_TOASTER);\n this.dead = true;\n } else {\n this.doRender = true;\n }\n },\n beforeDestroy() {\n // Let toasts made with `this.$bvToast.toast()` know that this toaster\n // is being destroyed and should should also destroy/hide themselves\n if (this.doRender) {\n this.emitOnRoot(getRootEventName(NAME_TOASTER, EVENT_NAME_DESTROYED), this.name);\n }\n },\n destroyed() {\n // Remove from DOM if needed\n const {\n $el\n } = this;\n /* istanbul ignore next: difficult to test */\n if ($el && $el.parentNode) {\n $el.parentNode.removeChild($el);\n }\n },\n render(h) {\n let $toaster = h('div', {\n class: ['gl-hidden', {\n 'b-dead-toaster': this.dead\n }]\n });\n if (this.doRender) {\n const $target = h(PortalTarget, {\n staticClass: 'b-toaster-slot',\n props: {\n name: this.staticName,\n multiple: true,\n tag: 'div',\n slim: false,\n // transition: this.transition || DefaultTransition\n transition: DefaultTransition\n }\n });\n $toaster = h('div', {\n staticClass: 'b-toaster',\n class: [this.staticName],\n attrs: {\n id: this.staticName,\n // Fallback to null to make sure attribute doesn't exist\n role: this.role || null,\n 'aria-live': this.ariaLive,\n 'aria-atomic': this.ariaAtomic\n }\n }, [$target]);\n }\n return $toaster;\n }\n});\n\nexport { BToaster, DefaultTransition, props };\n","import { Wormhole, Portal } from 'portal-vue';\nimport { extend, COMPONENT_UID_KEY } from '../../vue';\nimport { NAME_TOAST, NAME_TOASTER } from '../../constants/components';\nimport { EVENT_NAME_CHANGE, EVENT_NAME_SHOW, EVENT_NAME_HIDE, EVENT_NAME_DESTROYED, EVENT_OPTIONS_NO_CAPTURE, EVENT_NAME_SHOWN, EVENT_NAME_HIDDEN } from '../../constants/events';\nimport { PROP_TYPE_BOOLEAN, PROP_TYPE_NUMBER_STRING, PROP_TYPE_ARRAY_OBJECT_STRING, PROP_TYPE_STRING } from '../../constants/props';\nimport { SLOT_NAME_TOAST_TITLE, SLOT_NAME_DEFAULT } from '../../constants/slots';\nimport { BvEvent } from '../../utils/bv-event.class';\nimport { requestAF } from '../../utils/dom';\nimport { getRootActionEventName, getRootEventName, eventOnOff } from '../../utils/events';\nimport { mathMax } from '../../utils/math';\nimport { makeModelMixin } from '../../utils/model';\nimport { toInteger } from '../../utils/number';\nimport { pick, sortKeys } from '../../utils/object';\nimport { makePropsConfigurable, makeProp, pluckProps } from '../../utils/props';\nimport { isLink } from '../../utils/router';\nimport { createNewChildComponent } from '../../utils/create-new-child-component';\nimport { attrsMixin } from '../../mixins/attrs';\nimport { props as props$2, idMixin } from '../../mixins/id';\nimport { listenOnRootMixin } from '../../mixins/listen-on-root';\nimport { normalizeSlotMixin } from '../../mixins/normalize-slot';\nimport { scopedStyleMixin } from '../../mixins/scoped-style';\nimport { props as props$1, BLink } from '../link/link';\nimport { BVTransition } from '../transition/bv-transition';\nimport { BToaster } from './toaster';\n\n// --- Constants ---\n\nconst {\n mixin: modelMixin,\n props: modelProps,\n prop: MODEL_PROP_NAME,\n event: MODEL_EVENT_NAME\n} = makeModelMixin('visible', {\n type: PROP_TYPE_BOOLEAN,\n defaultValue: false,\n event: EVENT_NAME_CHANGE\n});\nconst MIN_DURATION = 1000;\n\n// --- Props ---\n\nconst linkProps = pick(props$1, ['href', 'to']);\nconst props = makePropsConfigurable(sortKeys({\n ...props$2,\n ...modelProps,\n ...linkProps,\n appendToast: makeProp(PROP_TYPE_BOOLEAN, false),\n autoHideDelay: makeProp(PROP_TYPE_NUMBER_STRING, 5000),\n bodyClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n headerClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n headerTag: makeProp(PROP_TYPE_STRING, 'header'),\n // Switches role to 'status' and aria-live to 'polite'\n isStatus: makeProp(PROP_TYPE_BOOLEAN, false),\n noAutoHide: makeProp(PROP_TYPE_BOOLEAN, false),\n noFade: makeProp(PROP_TYPE_BOOLEAN, false),\n noHoverPause: makeProp(PROP_TYPE_BOOLEAN, false),\n solid: makeProp(PROP_TYPE_BOOLEAN, false),\n // Render the toast in place, rather than in a portal-target\n static: makeProp(PROP_TYPE_BOOLEAN, false),\n title: makeProp(PROP_TYPE_STRING),\n toastClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),\n toaster: makeProp(PROP_TYPE_STRING, 'b-toaster-top-right'),\n variant: makeProp(PROP_TYPE_STRING)\n}), NAME_TOAST);\n\n// --- Main component ---\n\n// @vue/component\nconst BToast = /*#__PURE__*/extend({\n name: NAME_TOAST,\n mixins: [attrsMixin, idMixin, modelMixin, listenOnRootMixin, normalizeSlotMixin, scopedStyleMixin],\n inheritAttrs: false,\n props,\n data() {\n return {\n isMounted: false,\n doRender: false,\n localShow: false,\n isTransitioning: false,\n isHiding: false,\n order: 0,\n dismissStarted: 0,\n resumeDismiss: 0\n };\n },\n computed: {\n toastClasses() {\n const {\n appendToast,\n variant\n } = this;\n return {\n 'b-toast-solid': this.solid,\n 'b-toast-append': appendToast,\n 'b-toast-prepend': !appendToast,\n [`b-toast-${variant}`]: variant\n };\n },\n slotScope() {\n const {\n hide\n } = this;\n return {\n hide\n };\n },\n computedDuration() {\n // Minimum supported duration is 1 second\n return mathMax(toInteger(this.autoHideDelay, 0), MIN_DURATION);\n },\n computedToaster() {\n return String(this.toaster);\n },\n transitionHandlers() {\n return {\n beforeEnter: this.onBeforeEnter,\n afterEnter: this.onAfterEnter,\n beforeLeave: this.onBeforeLeave,\n afterLeave: this.onAfterLeave\n };\n },\n computedAttrs() {\n return {\n ...this.bvAttrs,\n id: this.safeId(),\n tabindex: '0'\n };\n }\n },\n watch: {\n [MODEL_PROP_NAME](newValue) {\n this[newValue ? 'show' : 'hide']();\n },\n localShow(newValue) {\n if (newValue !== this[MODEL_PROP_NAME]) {\n this.$emit(MODEL_EVENT_NAME, newValue);\n }\n },\n /* istanbul ignore next */\n toaster() {\n // If toaster target changed, make sure toaster exists\n this.$nextTick(this.ensureToaster);\n },\n /* istanbul ignore next */\n static(newValue) {\n // If static changes to true, and the toast is showing,\n // ensure the toaster target exists\n if (newValue && this.localShow) {\n this.ensureToaster();\n }\n }\n },\n created() {\n // Create private non-reactive props\n this.$_dismissTimer = null;\n },\n mounted() {\n this.isMounted = true;\n this.$nextTick(() => {\n if (this[MODEL_PROP_NAME]) {\n requestAF(() => {\n this.show();\n });\n }\n });\n // Listen for global $root show events\n this.listenOnRoot(getRootActionEventName(NAME_TOAST, EVENT_NAME_SHOW), id => {\n if (id === this.safeId()) {\n this.show();\n }\n });\n // Listen for global $root hide events\n this.listenOnRoot(getRootActionEventName(NAME_TOAST, EVENT_NAME_HIDE), id => {\n if (!id || id === this.safeId()) {\n this.hide();\n }\n });\n // Make sure we hide when toaster is destroyed\n /* istanbul ignore next: difficult to test */\n this.listenOnRoot(getRootEventName(NAME_TOASTER, EVENT_NAME_DESTROYED), toaster => {\n /* istanbul ignore next */\n if (toaster === this.computedToaster) {\n this.hide();\n }\n });\n },\n beforeDestroy() {\n this.clearDismissTimer();\n },\n methods: {\n show() {\n if (!this.localShow) {\n this.ensureToaster();\n const showEvent = this.buildEvent(EVENT_NAME_SHOW);\n this.emitEvent(showEvent);\n this.dismissStarted = this.resumeDismiss = 0;\n this.order = Date.now() * (this.appendToast ? 1 : -1);\n this.isHiding = false;\n this.doRender = true;\n this.$nextTick(() => {\n // We show the toast after we have rendered the portal and b-toast wrapper\n // so that screen readers will properly announce the toast\n requestAF(() => {\n this.localShow = true;\n });\n });\n }\n },\n hide() {\n if (this.localShow) {\n const hideEvent = this.buildEvent(EVENT_NAME_HIDE);\n this.emitEvent(hideEvent);\n this.setHoverHandler(false);\n this.dismissStarted = this.resumeDismiss = 0;\n this.clearDismissTimer();\n this.isHiding = true;\n requestAF(() => {\n this.localShow = false;\n });\n }\n },\n buildEvent(type) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return new BvEvent(type, {\n cancelable: false,\n target: this.$el || null,\n relatedTarget: null,\n ...options,\n vueTarget: this,\n componentId: this.safeId()\n });\n },\n emitEvent(bvEvent) {\n const {\n type\n } = bvEvent;\n this.emitOnRoot(getRootEventName(NAME_TOAST, type), bvEvent);\n this.$emit(type, bvEvent);\n },\n ensureToaster() {\n if (this.static) {\n return;\n }\n const {\n computedToaster\n } = this;\n if (!Wormhole.hasTarget(computedToaster)) {\n const div = document.createElement('div');\n document.body.appendChild(div);\n const toaster = createNewChildComponent(this.bvEventRoot, BToaster, {\n propsData: {\n name: computedToaster\n }\n });\n toaster.$mount(div);\n }\n },\n startDismissTimer() {\n this.clearDismissTimer();\n if (!this.noAutoHide) {\n this.$_dismissTimer = setTimeout(this.hide, this.resumeDismiss || this.computedDuration);\n this.dismissStarted = Date.now();\n this.resumeDismiss = 0;\n }\n },\n clearDismissTimer() {\n clearTimeout(this.$_dismissTimer);\n this.$_dismissTimer = null;\n },\n setHoverHandler(on) {\n const el = this.$refs['b-toast'];\n eventOnOff(on, el, 'mouseenter', this.onPause, EVENT_OPTIONS_NO_CAPTURE);\n eventOnOff(on, el, 'mouseleave', this.onUnPause, EVENT_OPTIONS_NO_CAPTURE);\n },\n onPause() {\n // Determine time remaining, and then pause timer\n if (this.noAutoHide || this.noHoverPause || !this.$_dismissTimer || this.resumeDismiss) {\n return;\n }\n const passed = Date.now() - this.dismissStarted;\n if (passed > 0) {\n this.clearDismissTimer();\n this.resumeDismiss = mathMax(this.computedDuration - passed, MIN_DURATION);\n }\n },\n onUnPause() {\n // Restart timer with max of time remaining or 1 second\n if (this.noAutoHide || this.noHoverPause || !this.resumeDismiss) {\n this.resumeDismiss = this.dismissStarted = 0;\n return;\n }\n this.startDismissTimer();\n },\n onLinkClick() {\n // We delay the close to allow time for the\n // browser to process the link click\n this.$nextTick(() => {\n requestAF(() => {\n this.hide();\n });\n });\n },\n onBeforeEnter() {\n this.isTransitioning = true;\n },\n onAfterEnter() {\n this.isTransitioning = false;\n const hiddenEvent = this.buildEvent(EVENT_NAME_SHOWN);\n this.emitEvent(hiddenEvent);\n this.startDismissTimer();\n this.setHoverHandler(true);\n },\n onBeforeLeave() {\n this.isTransitioning = true;\n },\n onAfterLeave() {\n this.isTransitioning = false;\n this.order = 0;\n this.resumeDismiss = this.dismissStarted = 0;\n const hiddenEvent = this.buildEvent(EVENT_NAME_HIDDEN);\n this.emitEvent(hiddenEvent);\n this.doRender = false;\n },\n // Render helper for generating the toast\n makeToast(h) {\n const {\n slotScope\n } = this;\n const link = isLink(this);\n const $headerContent = [];\n const $title = this.normalizeSlot(SLOT_NAME_TOAST_TITLE, slotScope);\n if ($title) {\n $headerContent.push($title);\n }\n let $header = h();\n if ($headerContent.length > 0) {\n $header = h(this.headerTag, {\n staticClass: 'toast-header',\n class: this.headerClass\n }, $headerContent);\n }\n const $body = h(link ? BLink : 'div', {\n staticClass: 'toast-body',\n class: this.bodyClass,\n props: link ? pluckProps(linkProps, this) : {},\n on: link ? {\n click: this.onLinkClick\n } : {}\n }, this.normalizeSlot(SLOT_NAME_DEFAULT, slotScope));\n return h('div', {\n staticClass: 'toast',\n class: this.toastClass,\n attrs: this.computedAttrs,\n key: `toast-${this[COMPONENT_UID_KEY]}`,\n ref: 'toast'\n }, [$header, $body]);\n }\n },\n render(h) {\n if (!this.doRender || !this.isMounted) {\n return h();\n }\n const {\n order,\n static: isStatic,\n isHiding,\n isStatus\n } = this;\n const name = `b-toast-${this[COMPONENT_UID_KEY]}`;\n const $toast = h('div', {\n staticClass: 'b-toast',\n class: this.toastClasses,\n attrs: {\n // If scoped styles are applied and the toast is not static,\n // make sure the scoped style data attribute is applied\n ...(isStatic ? {} : this.scopedStyleAttrs),\n id: this.safeId('_toast_outer'),\n role: isHiding ? null : isStatus ? 'status' : 'alert',\n 'aria-live': isHiding ? null : isStatus ? 'polite' : 'assertive',\n 'aria-atomic': isHiding ? null : 'true'\n },\n key: name,\n ref: 'b-toast'\n }, [h(BVTransition, {\n props: {\n noFade: this.noFade\n },\n on: this.transitionHandlers\n }, [this.localShow ? this.makeToast(h) : h()])]);\n return h(Portal, {\n props: {\n name,\n to: this.computedToaster,\n order,\n slim: true,\n disabled: isStatic\n }\n }, [$toast]);\n }\n});\n\nexport { BToast, props };\n","import { NAME_TOAST_POP, NAME_TOASTER, NAME_TOAST } from '../../../constants/components';\nimport { HOOK_EVENT_NAME_DESTROYED, EVENT_NAME_HIDDEN, EVENT_NAME_DESTROYED, EVENT_NAME_SHOW, EVENT_NAME_HIDE } from '../../../constants/events';\nimport { useParentMixin } from '../../../mixins/use-parent';\nimport { concat } from '../../../utils/array';\nimport { getComponentConfig } from '../../../utils/config';\nimport { requestAF } from '../../../utils/dom';\nimport { getRootEventName, getRootActionEventName } from '../../../utils/events';\nimport { isUndefined } from '../../../utils/inspect';\nimport { keys, omit, hasOwnProperty, defineProperty, assign, defineProperties, readonlyDescriptor } from '../../../utils/object';\nimport { pluginFactory } from '../../../utils/plugins';\nimport { warn, warnNotClient } from '../../../utils/warn';\nimport { createNewChildComponent } from '../../../utils/create-new-child-component';\nimport { getEventRoot } from '../../../utils/get-event-root';\nimport { props, BToast } from '../toast';\n\n/**\n * Plugin for adding `$bvToast` property to all Vue instances\n */\n\n// --- Constants ---\n\nconst PROP_NAME = '$bvToast';\nconst PROP_NAME_PRIV = '_bv__toast';\n\n// Base toast props that are allowed\n// Some may be ignored or overridden on some message boxes\n// Prop ID is allowed, but really only should be used for testing\n// We need to add it in explicitly as it comes from the `idMixin`\nconst BASE_PROPS = ['id', ...keys(omit(props, ['static', 'visible']))];\n\n// Map prop names to toast slot names\nconst propsToSlots = {\n toastContent: 'default',\n title: 'toast-title'\n};\n\n// --- Helper methods ---\n\n// Method to filter only recognized props that are not undefined\nconst filterOptions = options => {\n return BASE_PROPS.reduce((memo, key) => {\n if (!isUndefined(options[key])) {\n memo[key] = options[key];\n }\n return memo;\n }, {});\n};\n\n// Method to install `$bvToast` VM injection\nconst plugin = Vue => {\n // Create a private sub-component constructor that\n // extends BToast and self-destructs after hidden\n // @vue/component\n const BVToastPop = Vue.extend({\n name: NAME_TOAST_POP,\n extends: BToast,\n mixins: [useParentMixin],\n destroyed() {\n // Make sure we not in document any more\n const {\n $el\n } = this;\n if ($el && $el.parentNode) {\n $el.parentNode.removeChild($el);\n }\n },\n mounted() {\n // Self destruct handler\n const handleDestroy = () => {\n // Ensure the toast has been force hidden\n this.localShow = false;\n this.doRender = false;\n this.$nextTick(() => {\n this.$nextTick(() => {\n // In a `requestAF()` to release control back to application\n // and to allow the portal-target time to remove the content\n requestAF(() => {\n this.$destroy();\n });\n });\n });\n };\n // Self destruct if parent destroyed\n this.bvParent.$once(HOOK_EVENT_NAME_DESTROYED, handleDestroy);\n // Self destruct after hidden\n this.$once(EVENT_NAME_HIDDEN, handleDestroy);\n // Self destruct when toaster is destroyed\n this.listenOnRoot(getRootEventName(NAME_TOASTER, EVENT_NAME_DESTROYED), toaster => {\n /* istanbul ignore next: hard to test */\n if (toaster === this.toaster) {\n handleDestroy();\n }\n });\n }\n });\n\n // Private method to generate the on-demand toast\n const makeToast = (props, parent) => {\n if (warnNotClient(PROP_NAME)) {\n /* istanbul ignore next */\n return;\n }\n // Create an instance of `BVToastPop` component\n const toast = createNewChildComponent(parent, BVToastPop, {\n // We set parent as the local VM so these toasts can emit events on the\n // app `$root`, and it ensures `BToast` is destroyed when parent is destroyed\n propsData: {\n ...filterOptions(getComponentConfig(NAME_TOAST)),\n // Add in (filtered) user supplied props\n ...omit(props, keys(propsToSlots)),\n // Props that can't be overridden\n static: false,\n visible: true\n }\n });\n // Convert certain props to slots\n keys(propsToSlots).forEach(prop => {\n const value = props[prop];\n if (!isUndefined(value)) {\n toast.$slots[propsToSlots[prop]] = concat(value);\n }\n });\n // Create a mount point (a DIV) and mount it (which triggers the show)\n const div = document.createElement('div');\n document.body.appendChild(div);\n toast.$mount(div);\n };\n\n // Declare BvToast instance property class\n class BvToast {\n constructor(vm) {\n // Assign the new properties to this instance\n assign(this, {\n _vm: vm,\n _root: getEventRoot(vm)\n });\n // Set these properties as read-only and non-enumerable\n defineProperties(this, {\n _vm: readonlyDescriptor(),\n _root: readonlyDescriptor()\n });\n }\n\n // --- Public Instance methods ---\n\n // Opens a user defined toast and returns immediately\n toast(content) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (!content || warnNotClient(PROP_NAME)) {\n /* istanbul ignore next */\n return;\n }\n makeToast({\n ...filterOptions(options),\n toastContent: content\n }, this._vm);\n }\n\n // shows a `` component with the specified ID\n show(id) {\n if (id) {\n this._root.$emit(getRootActionEventName(NAME_TOAST, EVENT_NAME_SHOW), id);\n }\n }\n\n // Hide a toast with specified ID, or if not ID all toasts\n hide() {\n let id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n this._root.$emit(getRootActionEventName(NAME_TOAST, EVENT_NAME_HIDE), id);\n }\n }\n\n // Add our instance mixin\n Vue.mixin({\n beforeCreate() {\n // Because we need access to `$root` for `$emits`, and VM for parenting,\n // we have to create a fresh instance of `BvToast` for each VM\n this[PROP_NAME_PRIV] = new BvToast(this);\n }\n });\n\n // Define our read-only `$bvToast` instance property\n // Placed in an if just in case in HMR mode\n if (!hasOwnProperty(Vue.prototype, PROP_NAME)) {\n defineProperty(Vue.prototype, PROP_NAME, {\n get() {\n /* istanbul ignore next */\n if (!this || !this[PROP_NAME_PRIV]) {\n warn(`\"${PROP_NAME}\" must be accessed from a Vue instance \"this\" context.`, NAME_TOAST);\n }\n return this[PROP_NAME_PRIV];\n }\n });\n }\n};\nconst BVToastPlugin = /*#__PURE__*/pluginFactory({\n plugins: {\n plugin\n }\n});\n\nexport { BVToastPlugin };\n","import { BVToastPlugin } from './helpers/bv-toast';\nimport { BToast } from './toast';\nexport { BToast } from './toast';\nimport { BToaster } from './toaster';\nexport { BToaster } from './toaster';\nimport { pluginFactory } from '../../utils/plugins';\n\nconst ToastPlugin = /*#__PURE__*/pluginFactory({\n components: {\n BToast,\n BToaster\n },\n // $bvToast injection\n plugins: {\n BVToastPlugin\n }\n});\n\nexport { ToastPlugin };\n","import isFunction from 'lodash/isFunction';\nimport { ToastPlugin } from '../../../vendor/bootstrap-vue/src/components/toast/index';\nimport CloseButton from '../../shared_components/close_button/close_button';\n\n/* eslint-disable import/no-default-export */\nconst DEFAULT_OPTIONS = {\n autoHideDelay: 5000,\n toastClass: 'gl-toast',\n isStatus: true,\n toaster: 'b-toaster-bottom-left'\n};\nlet toastsCount = 0;\nfunction renderTitle(h, toast, options) {\n const nodes = [h(CloseButton, {\n class: ['gl-toast-close-button'],\n on: {\n click: toast.hide\n }\n })];\n if (options.action) {\n nodes.splice(0, 0, h('a', {\n role: 'button',\n class: ['gl-toast-action'],\n on: {\n click: e => options.action.onClick(e, toast)\n }\n }, options.action.text));\n }\n return nodes;\n}\nfunction showToast(message) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n // eslint-disable-next-line @gitlab/tailwind-no-interpolation -- Not a CSS utility\n const id = `gl-toast-${toastsCount}`;\n toastsCount += 1;\n const hide = () => {\n this.$bvToast.hide(id);\n };\n const toast = {\n id,\n hide\n };\n if (isFunction(options.onComplete)) {\n const toastHiddenCallback = e => {\n if (e.componentId === id) {\n this.$root.$off('bv::toast:hidden', toastHiddenCallback);\n options.onComplete(e);\n }\n };\n this.$root.$on('bv::toast:hidden', toastHiddenCallback);\n }\n const updatedAutoHideDelay = !Number.isNaN(options === null || options === void 0 ? void 0 : options.autoHideDelay) ? {\n autoHideDelay: options.autoHideDelay\n } : null;\n this.$bvToast.toast(message, {\n ...DEFAULT_OPTIONS,\n ...updatedAutoHideDelay,\n id,\n title: renderTitle(this.$createElement, toast, options)\n });\n return toast;\n}\n\n/**\n * Note: This is not a typical Vue component and needs to be registered before instantiating a Vue app.\n * Once registered, the toast will be globally available throughout your app.\n *\n * See https://gitlab-org.gitlab.io/gitlab-ui/ for detailed documentation.\n */\nvar toast = {\n install(Vue) {\n Vue.use(ToastPlugin);\n Vue.mixin({\n beforeCreate() {\n if (this.$toast) {\n return;\n }\n this.$toast = {\n show: showToast.bind(this)\n };\n }\n });\n }\n};\n\nexport default toast;\n"],"sourceRoot":""}