{"version":3,"sources":["webpack:///./vue_shared/components/page_heading.vue","webpack:///./vue_shared/components/page_heading.vue?4edf","webpack:///vue_shared/components/page_heading.vue","webpack:///./vue_shared/components/page_heading.vue?a70f","webpack:////build/source/node_modules/@gitlab/ui/dist/components/shared_components/clear_icon_button/clear_icon_button.js","webpack:////build/source/node_modules/lodash/clamp.js","webpack:////build/source/node_modules/@gitlab/ui/dist/components/base/new_dropdowns/listbox/utils.js","webpack:////build/source/node_modules/@gitlab/ui/dist/vendor/bootstrap-vue/src/components/form-radio/form-radio-group.js","webpack:////build/source/node_modules/@gitlab/ui/dist/components/base/form/form_radio_group/form_radio_group.js","webpack:////build/source/node_modules/lodash/isNil.js","webpack:////build/source/node_modules/lodash/_baseClamp.js","webpack:////build/source/node_modules/@gitlab/ui/dist/directives/outside/outside.js","webpack:////build/source/node_modules/@gitlab/ui/dist/components/base/form/form_radio/form_radio.js","webpack:////build/source/node_modules/@gitlab/ui/dist/components/base/new_dropdowns/constants.js","webpack:////build/source/node_modules/@floating-ui/dom/dist/floating-ui.dom.esm.js","webpack:////build/source/node_modules/@floating-ui/utils/dist/floating-ui.utils.esm.js","webpack:////build/source/node_modules/@gitlab/ui/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-header.js","webpack:////build/source/node_modules/@gitlab/ui/dist/components/base/dropdown/dropdown_section_header.js","webpack:////build/source/node_modules/@gitlab/ui/dist/components/base/new_dropdowns/listbox/listbox_search_input.js","webpack:////build/source/node_modules/@gitlab/ui/dist/components/base/new_dropdowns/listbox/listbox_group.js","webpack:////build/source/node_modules/@gitlab/ui/dist/components/base/new_dropdowns/listbox/listbox.js","webpack:////build/source/node_modules/@gitlab/ui/dist/components/utilities/intersection_observer/intersection_observer.js","webpack:////build/source/node_modules/@gitlab/ui/dist/components/base/search_box_by_type/search_box_by_type.js","webpack:////build/source/node_modules/@gitlab/ui/dist/components/base/new_dropdowns/base_dropdown/base_dropdown.js","webpack:////build/source/node_modules/@gitlab/ui/dist/components/base/new_dropdowns/base_dropdown/constants.js","webpack:////build/source/node_modules/@floating-ui/core/dist/floating-ui.core.esm.js","webpack:///./projects/compare/constants.js","webpack:///./projects/compare/components/revision_card.vue","webpack:///./projects/compare/components/repo_dropdown.vue?66b8","webpack:///projects/compare/components/repo_dropdown.vue","webpack:///./projects/compare/components/repo_dropdown.vue?60c2","webpack:///./projects/compare/components/repo_dropdown.vue","webpack:///projects/compare/components/revision_dropdown.vue","webpack:///./projects/compare/components/revision_dropdown.vue?d0f3","webpack:///./projects/compare/components/revision_card.vue?b7db","webpack:///projects/compare/components/revision_card.vue","webpack:///./projects/compare/components/revision_dropdown.vue?45ea","webpack:///./projects/compare/components/revision_dropdown.vue","webpack:///./projects/compare/components/revision_card.vue?5b37","webpack:///./projects/compare/components/app.vue?a972","webpack:///projects/compare/components/app.vue","webpack:///./projects/compare/components/app.vue?9d5a","webpack:///./projects/compare/components/app.vue","webpack:///./projects/compare/index.js","webpack:////build/source/node_modules/@gitlab/ui/dist/components/base/new_dropdowns/listbox/listbox_item.js"],"names":["props","heading","type","String","required","default","component","_vm","this","_c","_self","staticClass","attrs","_t","_v","$scopedSlots","_e","_s","actions","description","__vue_script__","name","components","GlButton","directives","GlTooltip","title","tooltipContainer","validator","value","HTMLElement","__vue_component__","render","_h","$createElement","_g","rawName","container","expression","modifiers","$listeners","staticRenderFns","undefined","baseClamp","toNumber","module","exports","number","lower","upper","isOption","item","Boolean","isGroup","options","arguments","length","Array","isArray","every","hasNoDuplicates","array","Set","size","flattenedOptions","items","flatMap","itemsValidator","isAllOptionsOrAllGroups","map","_ref","hasUniqueValues","filter","_ref2","text","hasUniqueGroups","BFormRadioGroup","mixins","getBvRadioGroup","computed","isRadioGroup","model","GlFormRadio","SafeHtml","inheritAttrs","methods","e","$emit","_b","on","onInput","onChange","$attrs","_l","option","idx","key","disabled","callbacks","Map","activeEventTypes","lastMousedown","globalListener","event","forEach","element","callback","eventTypes","originalEvent","contains","target","includes","onMousedown","OutsideDirective","bind","el","bindings","_ref3","arg","modifiersList","Object","keys","parseBinding","has","set","eventType","document","addEventListener","capture","add","startListening","unbind","entry","get","eventTypesToUnbind","delete","values","removeEventListener","BFormRadio","prop","checked","Number","$event","GL_DROPDOWN_SHOWN","GL_DROPDOWN_HIDDEN","GL_DROPDOWN_BEFORE_CLOSE","GL_DROPDOWN_FOCUS_CONTENT","ARROW_DOWN","ARROW_UP","END","ENTER","HOME","SPACE","POSITION_ABSOLUTE","POSITION_FIXED","GL_DROPDOWN_CONTENTS_CLASS","getWindow","node","_node$ownerDocument","ownerDocument","defaultView","window","getComputedStyle$1","getComputedStyle","isNode","Node","getNodeName","nodeName","toLowerCase","isHTMLElement","isElement","Element","isShadowRoot","ShadowRoot","isOverflowElement","overflow","overflowX","overflowY","display","test","isTableElement","isContainingBlock","safari","isSafari","css","transform","perspective","containerType","backdropFilter","some","willChange","contain","CSS","supports","isLastTraversableNode","min","Math","max","round","floor","createEmptyCoords","v","x","y","getCssDimensions","width","parseFloat","height","hasOffset","offsetWidth","offsetHeight","shouldFallback","$","unwrapElement","contextElement","getScale","domElement","rect","getBoundingClientRect","isFinite","noOffsets","getVisualOffsets","isFixed","floatingOffsetParent","_win$visualViewport","_win$visualViewport2","win","visualViewport","offsetLeft","offsetTop","includeScale","isFixedStrategy","offsetParent","clientRect","scale","visualOffsets","left","top","offsetWin","currentIFrame","frameElement","iframeScale","iframeRect","clientLeft","paddingLeft","clientTop","paddingTop","getDocumentElement","documentElement","getNodeScroll","scrollLeft","scrollTop","pageXOffset","pageYOffset","getWindowScrollBarX","getParentNode","result","assignedSlot","parentNode","host","getOverflowAncestors","list","scrollableAncestor","getNearestOverflowAncestor","body","isBody","concat","getClientRectFromClippingAncestor","clippingAncestor","strategy","html","clientWidth","clientHeight","visualViewportBased","getViewportRect","scroll","scrollWidth","scrollHeight","direction","getDocumentRect","getInnerBoundingClientRect","hasFixedPositionAncestor","stopNode","position","getTrueOffsetParent","polyfill","getOffsetParent","currentNode","getContainingBlock","getRectRelativeToOffsetParent","isOffsetParentAnElement","offsets","offsetRect","platform","getClippingRect","boundary","rootBoundary","clippingAncestors","cache","cachedResult","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","getClippingElementAncestors","firstClippingAncestor","clippingRect","reduce","accRect","right","bottom","convertOffsetParentRelativeRectToViewportRelativeRect","getDimensions","reference","floating","getOffsetParentFn","getDimensionsFn","getClientRects","from","isRTL","autoUpdate","update","ancestorScroll","ancestorResize","elementResize","ResizeObserver","layoutShift","IntersectionObserver","animationFrame","referenceEl","ancestors","passive","cleanupIo","onMove","timeoutId","io","root","cleanup","clearTimeout","disconnect","refresh","skip","threshold","rootMargin","isFirstUpdate","handleObserve","entries","ratio","intersectionRatio","setTimeout","observe","observeMove","frameId","reobserveFrame","resizeObserver","firstEntry","unobserve","cancelAnimationFrame","requestAnimationFrame","prevRefRect","frameLoop","nextRefRect","computePosition","mergedOptions","platformWithCache","sides","alignments","placements","acc","side","oppositeSideMap","oppositeAlignmentMap","start","end","clamp","evaluate","param","getSide","placement","split","getAlignment","getOppositeAxis","axis","getAxisLength","getSideAxis","getAlignmentAxis","getAlignmentSides","rects","rtl","alignment","alignmentAxis","mainAlignmentSide","getOppositePlacement","getExpandedPlacements","oppositePlacement","getOppositeAlignmentPlacement","replace","getOppositeAxisPlacements","flipAlignment","isStart","lr","rl","tb","bt","getSideList","getPaddingObject","padding","expandPaddingObject","rectToClientRect","id","tag","variant","BDropdownHeader","functional","h","data","children","role","class","ref","GlClearIconButton","GlIcon","placeholder","input","focusInput","$refs","focus","domProps","inputListeners","stopPropagation","clearInput","apply","textSrOnly","nameId","GROUP_TOP_BORDER_CLASSES","HEADER_ITEMS_BORDER_CLASSES","events","GlBaseDropdown","GlListboxItem","GlListboxGroup","GlSearchBoxByType","GlListboxSearchInput","GlLoadingIcon","GlIntersectionObserver","selected","multiple","toggleText","headerText","category","primary","icon","loading","toggleClass","noCaret","isCheckCentered","toggleAriaLabelledBy","listAriaLabelledBy","searchable","searching","infiniteScroll","totalItems","infiniteScrollLoading","noResultsText","searchPlaceholder","resetButtonLabel","showSelectAllButtonLabel","block","dropdownOffset","fluidWidth","positioningStrategy","startOpened","srOnlyResultsLabel","Function","selectedValues","toggleId","listboxId","nextFocusedItemIndex","searchStr","topBoundaryVisible","bottomBoundaryVisible","hasItems","listboxTag","_this$flattenedOption","find","findIndex","sort","showNoResultsText","showSelectAllButton","toggle","toggleClasses","hasSelection","push","footer","watch","immediate","newSelected","$nextTick","observeScroll","open","_this$scrollObserver","scrollObserver","baseDropdown","close","groupClasses","index","_this$selectedIndices","focusSearchInput","focusItem","selectedIndices","getFocusableListItemElements","code","elements","stop","isSearchInput","matches","indexOf","focusNextItem","_this$$refs$list","querySelectorAll","offset","currentIndex","nextIndex","_elements$index","searchBox","isSelected","onMultiSelect","onSingleSelect","closeAndFocus","selectedValue","searchTerm","_this$scrollObserver2","observer","_entry$target","$__visibilityProp","isIntersecting","topBoundary","bottomBoundary","listboxToggleText","toggleButtonClasses","_d","$options","onShow","onHide","scopedSlots","_u","fn","proxy","headerId","onResetButtonClicked","onSelectAllButtonClicked","search","_k","keyCode","preventDefault","onKeydown","$$v","listboxClasses","itemTag","hasHeader","isFocused","onSelect","listboxItemMoreItemsAriaAttributes","onIntersectionObserverAppear","hasFooter","getObserver","$_gl_intersectionHandler","$el","$_gl_intersectionObserver","GlFormInput","borderless","clearButtonTitle","isLoading","attributes","focusin","onFocusin","focusout","onFocusout","hasValue","_this$$refs$input","_this$$refs$clearButt","clearButton","relatedTarget","isInputOrClearButton","inputAttributes","showClearButton","BASE_DROPDOWN_CLASS","Outside","ariaHaspopup","ariaLabelledby","mainAxis","openedYet","visible","baseDropdownId","_this$toggleText","hasNoVisibleToggleText","isIconOnly","toggleLabelledBy","isEllipsisButton","isCaretOnly","isDefaultToggle","is","buttonTextClasses","toggleButtonTextClasses","ariaAttributes","listeners","keydown","click","toggleOptions","_this$$refs$toggle","firstElementChild","middleware","allowedPlacements","_this$nonScrollableCo","availableHeight","contentsEl","querySelector","contentsAvailableHeight","nonScrollableContentHeight","assign","style","maxHeight","deep","toggleElement","setAttribute","checkToggleFocusable","stopFloating","calculateNonScrollableAreaHeight","MutationObserver","content","childList","subtree","stopAutoUpdate","async","floatingUIConfig","_this$observer","_this$stopAutoUpdate","call","prevented","startFloating","hadFocusWithin","activeElement","hasToggled","focusToggle","tagName","toggleOnEnter","toggleOnSpace","_this$$refs$content","scrollableArea","floatingElementBoundingBox","scrollableAreaBoundingBox","toggleComponent","toggleAttributes","toggleListeners","panelClasses","computeCoordsFromPlacement","sideAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","config","validMiddleware","getElementRects","statefulPlacement","middlewareData","resetCount","i","nextX","nextY","reset","initialPlacement","detectOverflow","state","_await$platform$isEle","elementContext","altBoundary","paddingObject","clippingClientRect","offsetScale","elementClientRect","arrow","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","min$1","center","shouldAddOffset","alignmentOffset","centerOffset","autoPlacement","_middlewareData$autoP","_middlewareData$autoP2","_placementsThatFitOnE","crossAxis","autoAlignment","detectOverflowOptions","placements$1","getPlacementList","currentPlacement","alignmentSides","currentOverflows","allOverflows","overflows","nextPlacement","placementsSortedByMostSpace","d","slice","a","b","resetPlacement","flip","_middlewareData$arrow","_middlewareData$flip","checkMainAxis","checkCrossAxis","fallbackPlacements","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","initialSideAxis","isBasePlacement","hasFallbackAxisSideDirection","overflowsData","_middlewareData$flip2","_overflowsData$filter","_overflowsData$filter2","currentSideAxis","getSideOffsets","isAnySideFullyClipped","hide","referenceHiddenOffsets","referenceHidden","escapedOffsets","escaped","getBoundingRect","minX","minY","inline","nativeClientRects","clientRects","sortedRects","groups","prevRect","getRectsByLine","fallback","resetRects","firstRect","lastRect","isTop","isLeftSide","maxRight","minLeft","measureRects","_middlewareData$offse","diffCoords","mainAxisMulti","crossAxisMulti","rawValue","convertValueToCoords","shift","limiter","mainAxisCoord","crossAxisCoord","maxSide","limitedCoords","enabled","limitShift","rawOffset","computedOffset","len","limitMin","limitMax","_middlewareData$offse2","isOriginSide","_state$middlewareData","_state$middlewareData2","heightSide","widthSide","maximumClippingHeight","maximumClippingWidth","overflowAvailableHeight","overflowAvailableWidth","noShift","availableWidth","xMin","xMax","yMin","yMax","nextDimensions","COMPARE_OPTIONS","s__","I18N","subtitle","source","__","swap","swapRevisions","compare","optionsLabel","viewMr","openMr","COMPARE_REVISIONS_DOCS_URL","DOCS_URL_IN_EE_DIR","GlCollapsibleListbox","paramsName","projects","selectedProject","selectedProjectId","disableRepoDropdown","filteredRepos","lowerCaseSearchTerm","project","inputName","emitTargetProject","projectId","onSearch","EMPTY_DROPDOWN_TEXT","GlDropdown","GlDropdownItem","GlDropdownSectionHeader","refsProjectPath","paramsBranch","branches","tags","selectedRevision","getDefaultBranch","hasBranches","_this$branches","hasTags","_this$tags","newRefsProjectPath","oldRefsProjectPath","fetchBranchesAndTags","_debounce","searchBranchesAndTags","newBranch","setSelectedRevision","mounted","_this","axios","params","then","Branches","Tags","catch","createAlert","message","_this2","finally","onClick","revision","onSearchEnter","RepoDropdown","RevisionDropdown","trim","branch","revisionText","csrf","RevisionCard","GlFormRadioGroup","GlFormGroup","GlLink","GlSprintf","PageHeading","GlTooltipDirective","projectCompareIndexPath","sourceProjectRefsPath","targetProjectRefsPath","paramsFrom","paramsTo","projectMergeRequestPath","createMrPath","sourceProject","targetProject","straight","to","isStraight","onSubmit","form","submit","onSelectProject","refsPath","joinPaths","gon","relative_url_root","onSelectRevision","onSwapRevision","i18n","compareOptions","docsLink","token","init","getElementById","projectsFrom","dataset","Vue","CompareApp","createElement","parseBoolean","JSON","parse","toggleSelection","checkedClasses"],"mappings":"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","file":"commons-pages.projects.compare.index-pages.projects.compare.rapid_diffs-pages.projects.compare.show.45dd2e62.chunk.js","sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('div',{staticClass:\"gl-my-5 gl-flex gl-flex-wrap gl-items-center gl-justify-between gl-gap-y-3\"},[_c('div',{staticClass:\"gl-flex gl-w-full gl-flex-wrap gl-justify-between gl-gap-x-5 gl-gap-y-3 md:gl-flex-nowrap\"},[_c('h1',{staticClass:\"gl-heading-1 !gl-m-0\",attrs:{\"data-testid\":\"page-heading\"}},[_vm._t(\"heading\"),_vm._v(\" \"),(!_vm.$scopedSlots.heading)?[_vm._v(_vm._s(_vm.heading))]:_vm._e()],2),_vm._v(\" \"),(_vm.$scopedSlots.actions)?_c('div',{staticClass:\"page-heading-actions gl-flex gl-w-full gl-shrink-0 gl-flex-wrap gl-items-center gl-gap-3 sm:gl-w-auto md:gl-mt-1 lg:gl-mt-2\",attrs:{\"data-testid\":\"page-heading-actions\"}},[_vm._t(\"actions\")],2):_vm._e()]),_vm._v(\" \"),(_vm.$scopedSlots.description)?_c('div',{staticClass:\"gl-w-full gl-text-subtle\",attrs:{\"data-testid\":\"page-heading-description\"}},[_vm._t(\"description\")],2):_vm._e()])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./page_heading.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./page_heading.vue?vue&type=script&lang=js\"","<script>\nexport default {\n  props: {\n    heading: {\n      type: String,\n      required: false,\n      default: null,\n    },\n  },\n};\n</script>\n\n<template>\n  <div>\n    <div class=\"gl-my-5 gl-flex gl-flex-wrap gl-items-center gl-justify-between gl-gap-y-3\">\n      <div\n        class=\"gl-flex gl-w-full gl-flex-wrap gl-justify-between gl-gap-x-5 gl-gap-y-3 md:gl-flex-nowrap\"\n      >\n        <h1 class=\"gl-heading-1 !gl-m-0\" data-testid=\"page-heading\">\n          <slot name=\"heading\"></slot>\n          <template v-if=\"!$scopedSlots.heading\">{{ heading }}</template>\n        </h1>\n        <div\n          v-if=\"$scopedSlots.actions\"\n          class=\"page-heading-actions gl-flex gl-w-full gl-shrink-0 gl-flex-wrap gl-items-center gl-gap-3 sm:gl-w-auto md:gl-mt-1 lg:gl-mt-2\"\n          data-testid=\"page-heading-actions\"\n        >\n          <slot name=\"actions\"></slot>\n        </div>\n      </div>\n      <div\n        v-if=\"$scopedSlots.description\"\n        class=\"gl-w-full gl-text-subtle\"\n        data-testid=\"page-heading-description\"\n      >\n        <slot name=\"description\"></slot>\n      </div>\n    </div>\n  </div>\n</template>\n","import { render, staticRenderFns } from \"./page_heading.vue?vue&type=template&id=1b8cfafe\"\nimport script from \"./page_heading.vue?vue&type=script&lang=js\"\nexport * from \"./page_heading.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","import { GlTooltipDirective } from '../../../directives/tooltip';\nimport GlButton from '../../base/button/button';\nimport { translate } from '../../../utils/i18n';\nimport __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';\n\nvar script = {\n  name: 'ClearIconButton',\n  components: {\n    GlButton\n  },\n  directives: {\n    GlTooltip: GlTooltipDirective\n  },\n  props: {\n    title: {\n      type: String,\n      required: false,\n      default: () => translate('ClearIconButton.title', 'Clear')\n    },\n    tooltipContainer: {\n      required: false,\n      default: false,\n      validator: value => value === false || typeof value === 'string' || value instanceof HTMLElement\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('gl-button',_vm._g({directives:[{name:\"gl-tooltip\",rawName:\"v-gl-tooltip.hover\",value:({ container: _vm.tooltipContainer }),expression:\"{ container: tooltipContainer }\",modifiers:{\"hover\":true}}],staticClass:\"gl-clear-icon-button\",attrs:{\"variant\":\"default\",\"category\":\"tertiary\",\"size\":\"small\",\"name\":\"clear\",\"icon\":\"clear\",\"title\":_vm.title,\"aria-label\":_vm.title}},_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","var baseClamp = require('./_baseClamp'),\n    toNumber = require('./toNumber');\n\n/**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\nfunction clamp(number, lower, upper) {\n  if (upper === undefined) {\n    upper = lower;\n    lower = undefined;\n  }\n  if (upper !== undefined) {\n    upper = toNumber(upper);\n    upper = upper === upper ? upper : 0;\n  }\n  if (lower !== undefined) {\n    lower = toNumber(lower);\n    lower = lower === lower ? lower : 0;\n  }\n  return baseClamp(toNumber(number), lower, upper);\n}\n\nmodule.exports = clamp;\n","import isNumber from 'lodash/isNumber';\nimport isString from 'lodash/isString';\n\nconst isOption = item => Boolean(item) && (isString(item.value) || isNumber(item.value));\n\n// eslint-disable-next-line unicorn/no-array-callback-reference\nconst isGroup = function () {\n  let {\n    options\n  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return Array.isArray(options) && options.every(isOption);\n};\nconst hasNoDuplicates = array => array.length === new Set(array).size;\nconst flattenedOptions = items => items.flatMap(item => isOption(item) ? item : item.options);\n\n// eslint-disable-next-line unicorn/no-array-callback-reference\nconst isAllOptionsOrAllGroups = items => items.every(isOption) || items.every(isGroup);\nconst hasUniqueValues = items => hasNoDuplicates(flattenedOptions(items).map(_ref => {\n  let {\n    value\n  } = _ref;\n  return value;\n}));\n\n// eslint-disable-next-line unicorn/no-array-callback-reference\nconst hasUniqueGroups = items => hasNoDuplicates(items.filter(isGroup).map(_ref2 => {\n  let {\n    text\n  } = _ref2;\n  return text;\n}));\nconst itemsValidator = items => isAllOptionsOrAllGroups(items) && hasUniqueValues(items) && hasUniqueGroups(items);\n\nexport { flattenedOptions, isOption, itemsValidator };\n","import { extend } from '../../vue';\nimport { NAME_FORM_RADIO_GROUP } from '../../constants/components';\nimport { makePropsConfigurable } from '../../utils/props';\nimport { props as props$1, formRadioCheckGroupMixin } from '../../mixins/form-radio-check-group';\n\n// --- Props ---\n\nconst props = makePropsConfigurable(props$1, NAME_FORM_RADIO_GROUP);\n\n// --- Main component ---\n\n// @vue/component\nconst BFormRadioGroup = /*#__PURE__*/extend({\n  name: NAME_FORM_RADIO_GROUP,\n  mixins: [formRadioCheckGroupMixin],\n  provide() {\n    return {\n      getBvRadioGroup: () => this\n    };\n  },\n  props,\n  computed: {\n    isRadioGroup() {\n      return true;\n    }\n  }\n});\n\nexport { BFormRadioGroup, props };\n","import { formOptionsMixin } from '../../../../vendor/bootstrap-vue/src/mixins/form-options';\nimport { BFormRadioGroup } from '../../../../vendor/bootstrap-vue/src/components/form-radio/form-radio-group';\nimport { SafeHtmlDirective } from '../../../../directives/safe_html/safe_html';\nimport GlFormRadio from '../form_radio/form_radio';\nimport __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';\n\nconst {\n  model\n} = BFormRadioGroup.options;\nvar script = {\n  name: 'GlFormRadioGroup',\n  components: {\n    BFormRadioGroup,\n    GlFormRadio\n  },\n  directives: {\n    SafeHtml: SafeHtmlDirective\n  },\n  mixins: [formOptionsMixin],\n  inheritAttrs: false,\n  model,\n  methods: {\n    onInput(e) {\n      /**\n       * Emitted when the selected value is changed.\n       *\n       * @event input\n       */\n      this.$emit('input', e);\n    },\n    onChange(e) {\n      /**\n       * Emitted when the selected value is changed.\n       *\n       * @event change\n       */\n      this.$emit('change', e);\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-form-radio-group',_vm._g(_vm._b({staticClass:\"gl-form-checkbox-group\",attrs:{\"stacked\":\"\"},on:{\"input\":_vm.onInput,\"change\":_vm.onChange}},'b-form-radio-group',_vm.$attrs,false),_vm.$listeners),[_vm._t(\"first\"),_vm._v(\" \"),_vm._l((_vm.formOptions),function(option,idx){return _c('gl-form-radio',{key:idx,attrs:{\"value\":option.value,\"disabled\":option.disabled}},[(option.html)?_c('span',{directives:[{name:\"safe-html\",rawName:\"v-safe-html\",value:(option.html),expression:\"option.html\"}]}):_c('span',[_vm._v(_vm._s(option.text))])])}),_vm._v(\" \"),_vm._t(\"default\")],2)};\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","/**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\nfunction isNil(value) {\n  return value == null;\n}\n\nmodule.exports = isNil;\n","/**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\nfunction baseClamp(number, lower, upper) {\n  if (number === number) {\n    if (upper !== undefined) {\n      number = number <= upper ? number : upper;\n    }\n    if (lower !== undefined) {\n      number = number >= lower ? number : lower;\n    }\n  }\n  return number;\n}\n\nmodule.exports = baseClamp;\n","/**\n * Map<HTMLElement, { callback: Function, eventTypes: Array<string> }>\n */\nconst callbacks = new Map();\nconst click = 'click';\nconst focusin = 'focusin';\nconst supportedEventTypes = [click, focusin];\nconst defaultEventType = click;\n\n/**\n * A Set to keep track of currently active event types.\n * This ensures that event listeners are only added for the event types that are in use.\n *\n * @type {Set<string>}\n */\nconst activeEventTypes = new Set();\nlet lastMousedown = null;\nconst globalListener = event => {\n  callbacks.forEach((_ref, element) => {\n    let {\n      callback,\n      eventTypes\n    } = _ref;\n    const originalEvent = event.type === click ? lastMousedown || event : event;\n    if (\n    // Ignore events that aren't targeted outside the element\n    element.contains(originalEvent.target) ||\n    // Ignore events that aren't the specified types for this element\n    !eventTypes.includes(event.type)) {\n      return;\n    }\n    try {\n      callback(event);\n    } catch (e) {\n      if (process.env.NODE_ENV !== 'production') {\n        // eslint-disable-next-line no-console\n        console.error(e);\n      }\n    }\n  });\n  if (event.type === click) {\n    lastMousedown = null;\n  }\n};\n\n// We need to listen for mouse events because text selection fires click event only when selection ends.\n// This means that the click event target could differ from the element where it originally started.\n// As example: if we use mouse events we could guarantee that selecting text within a dropdown won't close it.\nconst onMousedown = event => {\n  lastMousedown = event;\n};\nconst startListening = eventTypes => {\n  eventTypes.forEach(eventType => {\n    if (!activeEventTypes.has(eventType)) {\n      // Listening to mousedown events, ensures that a text selection doesn't trigger the\n      // GlOutsideDirective 'click' callback if the selection started within the target element.\n      if (eventType === click) {\n        document.addEventListener('mousedown', onMousedown);\n      }\n\n      // Added { capture: true } to all event types to prevent the behavior discussed in https://gitlab.com/gitlab-org/gitlab-ui/-/merge_requests/1686#note_412545027\n      // Ensures the event listener handles the event in the capturing phase, avoiding issues encountered previously.\n      // Cannot be tested with Jest or Cypress, but can be tested with Playwright in the future: https://gitlab.com/gitlab-org/gitlab-ui/-/merge_requests/4272#note_1947425384\n      document.addEventListener(eventType, globalListener, {\n        capture: true\n      });\n      activeEventTypes.add(eventType);\n    }\n  });\n  lastMousedown = null;\n};\nconst stopListening = eventTypesToUnbind => {\n  eventTypesToUnbind.forEach(eventType => {\n    if (activeEventTypes.has(eventType)) {\n      if ([...callbacks.values()].every(_ref2 => {\n        let {\n          eventTypes\n        } = _ref2;\n        return !eventTypes.includes(eventType);\n      })) {\n        document.removeEventListener(eventType, globalListener);\n        activeEventTypes.delete(eventType);\n      }\n    }\n  });\n  if (eventTypesToUnbind.includes(click) && !activeEventTypes.has(click)) {\n    document.removeEventListener('mousedown', onMousedown);\n  }\n};\nfunction parseBinding(_ref3) {\n  let {\n    arg,\n    value,\n    modifiers\n  } = _ref3;\n  const modifiersList = Object.keys(modifiers);\n  if (process.env.NODE_ENV !== 'production') {\n    if (typeof value !== 'function') {\n      throw new Error(`[GlOutsideDirective] Value must be a function; got ${typeof value}!`);\n    }\n    if (typeof arg !== 'undefined') {\n      throw new Error(`[GlOutsideDirective] Arguments are not supported. Consider using modifiers instead.`);\n    }\n    const unsupportedModifiers = modifiersList.filter(modifier => !supportedEventTypes.includes(modifier));\n    if (unsupportedModifiers.length > 0) {\n      throw new Error(`[GlOutsideDirective] Cannot bind ${unsupportedModifiers.join(', ')} events; supported event types are: ${supportedEventTypes.join(', ')}`);\n    }\n  }\n  return {\n    callback: value,\n    eventTypes: modifiersList.length > 0 ? modifiersList : [defaultEventType]\n  };\n}\nconst bind = (el, bindings) => {\n  const {\n    callback,\n    eventTypes\n  } = parseBinding(bindings);\n  if (callbacks.has(el)) {\n    // This element is already bound. This is possible if two components, which\n    // share the same root node, (i.e., one is a higher-order component\n    // wrapping another) _both_ have this directive applied.\n    //\n    // Because Vue binds directives in the direction towards the root, only the\n    // deepest instance of this directive will be bound.\n    //\n    // A future iteration may add support for binding all instances on a given\n    // element.\n    return;\n  }\n  callbacks.set(el, {\n    callback,\n    eventTypes\n  });\n  startListening(eventTypes);\n};\nconst unbind = el => {\n  const entry = callbacks.get(el);\n  if (entry) {\n    callbacks.delete(el);\n    stopListening(entry.eventTypes);\n  }\n};\nconst OutsideDirective = {\n  bind,\n  unbind\n};\n\nexport { OutsideDirective };\n","import { BFormRadio } from '../../../../vendor/bootstrap-vue/src/components/form-radio/form-radio';\nimport __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';\n\nconst {\n  model\n} = BFormRadio.options;\nvar script = {\n  name: 'GlFormRadio',\n  components: {\n    BFormRadio\n  },\n  inheritAttrs: false,\n  model: {\n    prop: model.prop,\n    event: model.event\n  },\n  props: {\n    /**\n     * Whether the radio is checked\n     */\n    checked: {\n      type: [String, Number, Boolean, Object],\n      required: false,\n      default: false\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-form-radio',_vm._b({staticClass:\"gl-form-radio\",attrs:{\"checked\":_vm.checked},on:{\"input\":function($event){return _vm.$emit('input', $event)},\"change\":function($event){return _vm.$emit('change', $event)}}},'b-form-radio',_vm.$attrs,false),[_vm._t(\"default\"),_vm._v(\" \"),(_vm.$scopedSlots.help)?_c('p',{staticClass:\"help-text\"},[_vm._t(\"help\")],2):_vm._e()],2)};\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","// base dropdown events\nconst GL_DROPDOWN_SHOWN = 'shown';\nconst GL_DROPDOWN_HIDDEN = 'hidden';\nconst GL_DROPDOWN_BEFORE_CLOSE = 'beforeClose';\nconst GL_DROPDOWN_FOCUS_CONTENT = 'focusContent';\n\n// KEY Codes\nconst ARROW_DOWN = 'ArrowDown';\nconst ARROW_UP = 'ArrowUp';\nconst END = 'End';\nconst ENTER = 'Enter';\nconst HOME = 'Home';\nconst SPACE = 'Space';\n\n// Positioning strategies\n// https://floating-ui.com/docs/computePosition#strategy\nconst POSITION_ABSOLUTE = 'absolute';\nconst POSITION_FIXED = 'fixed';\nconst GL_DROPDOWN_CONTENTS_CLASS = 'gl-new-dropdown-contents';\n\nexport { ARROW_DOWN, ARROW_UP, END, ENTER, GL_DROPDOWN_BEFORE_CLOSE, GL_DROPDOWN_CONTENTS_CLASS, GL_DROPDOWN_FOCUS_CONTENT, GL_DROPDOWN_HIDDEN, GL_DROPDOWN_SHOWN, HOME, POSITION_ABSOLUTE, POSITION_FIXED, SPACE };\n","import { rectToClientRect, computePosition as computePosition$1 } from '@floating-ui/core';\nexport { arrow, autoPlacement, detectOverflow, flip, hide, inline, limitShift, offset, shift, size } from '@floating-ui/core';\n\nfunction getWindow(node) {\n  var _node$ownerDocument;\n  return ((_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\n\nfunction getComputedStyle$1(element) {\n  return getWindow(element).getComputedStyle(element);\n}\n\nfunction isNode(value) {\n  return value instanceof getWindow(value).Node;\n}\nfunction getNodeName(node) {\n  if (isNode(node)) {\n    return (node.nodeName || '').toLowerCase();\n  }\n  // Mocked nodes in testing environments may not be instances of Node. By\n  // returning `#document` an infinite loop won't occur.\n  // https://github.com/floating-ui/floating-ui/issues/2317\n  return '#document';\n}\n\nfunction isHTMLElement(value) {\n  return value instanceof getWindow(value).HTMLElement;\n}\nfunction isElement(value) {\n  return value instanceof getWindow(value).Element;\n}\nfunction isShadowRoot(node) {\n  // Browsers without `ShadowRoot` support.\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  return node instanceof getWindow(node).ShadowRoot || node instanceof ShadowRoot;\n}\nfunction isOverflowElement(element) {\n  const {\n    overflow,\n    overflowX,\n    overflowY,\n    display\n  } = getComputedStyle$1(element);\n  return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n  return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isContainingBlock(element) {\n  const safari = isSafari();\n  const css = getComputedStyle$1(element);\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  return css.transform !== 'none' || css.perspective !== 'none' || (css.containerType ? css.containerType !== 'normal' : false) || !safari && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !safari && (css.filter ? css.filter !== 'none' : false) || ['transform', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value));\n}\nfunction isSafari() {\n  if (typeof CSS === 'undefined' || !CSS.supports) return false;\n  return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nfunction isLastTraversableNode(node) {\n  return ['html', 'body', '#document'].includes(getNodeName(node));\n}\n\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createEmptyCoords = v => ({\n  x: v,\n  y: v\n});\n\nfunction getCssDimensions(element) {\n  const css = getComputedStyle$1(element);\n  // In testing environments, the `width` and `height` properties are empty\n  // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n  let width = parseFloat(css.width) || 0;\n  let height = parseFloat(css.height) || 0;\n  const hasOffset = isHTMLElement(element);\n  const offsetWidth = hasOffset ? element.offsetWidth : width;\n  const offsetHeight = hasOffset ? element.offsetHeight : height;\n  const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n  if (shouldFallback) {\n    width = offsetWidth;\n    height = offsetHeight;\n  }\n  return {\n    width,\n    height,\n    $: shouldFallback\n  };\n}\n\nfunction unwrapElement(element) {\n  return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n  const domElement = unwrapElement(element);\n  if (!isHTMLElement(domElement)) {\n    return createEmptyCoords(1);\n  }\n  const rect = domElement.getBoundingClientRect();\n  const {\n    width,\n    height,\n    $\n  } = getCssDimensions(domElement);\n  let x = ($ ? round(rect.width) : rect.width) / width;\n  let y = ($ ? round(rect.height) : rect.height) / height;\n\n  // 0, NaN, or Infinity should always fallback to 1.\n\n  if (!x || !Number.isFinite(x)) {\n    x = 1;\n  }\n  if (!y || !Number.isFinite(y)) {\n    y = 1;\n  }\n  return {\n    x,\n    y\n  };\n}\n\nconst noOffsets = /*#__PURE__*/createEmptyCoords(0);\nfunction getVisualOffsets(element, isFixed, floatingOffsetParent) {\n  var _win$visualViewport, _win$visualViewport2;\n  if (isFixed === void 0) {\n    isFixed = true;\n  }\n  if (!isSafari()) {\n    return noOffsets;\n  }\n  const win = element ? getWindow(element) : window;\n  if (!floatingOffsetParent || isFixed && floatingOffsetParent !== win) {\n    return noOffsets;\n  }\n  return {\n    x: ((_win$visualViewport = win.visualViewport) == null ? void 0 : _win$visualViewport.offsetLeft) || 0,\n    y: ((_win$visualViewport2 = win.visualViewport) == null ? void 0 : _win$visualViewport2.offsetTop) || 0\n  };\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n  const clientRect = element.getBoundingClientRect();\n  const domElement = unwrapElement(element);\n  let scale = createEmptyCoords(1);\n  if (includeScale) {\n    if (offsetParent) {\n      if (isElement(offsetParent)) {\n        scale = getScale(offsetParent);\n      }\n    } else {\n      scale = getScale(element);\n    }\n  }\n  const visualOffsets = getVisualOffsets(domElement, isFixedStrategy, offsetParent);\n  let x = (clientRect.left + visualOffsets.x) / scale.x;\n  let y = (clientRect.top + visualOffsets.y) / scale.y;\n  let width = clientRect.width / scale.x;\n  let height = clientRect.height / scale.y;\n  if (domElement) {\n    const win = getWindow(domElement);\n    const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n    let currentIFrame = win.frameElement;\n    while (currentIFrame && offsetParent && offsetWin !== win) {\n      const iframeScale = getScale(currentIFrame);\n      const iframeRect = currentIFrame.getBoundingClientRect();\n      const css = getComputedStyle(currentIFrame);\n      const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n      const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n      x *= iframeScale.x;\n      y *= iframeScale.y;\n      width *= iframeScale.x;\n      height *= iframeScale.y;\n      x += left;\n      y += top;\n      currentIFrame = getWindow(currentIFrame).frameElement;\n    }\n  }\n  return rectToClientRect({\n    width,\n    height,\n    x,\n    y\n  });\n}\n\nfunction getDocumentElement(node) {\n  return ((isNode(node) ? node.ownerDocument : node.document) || window.document).documentElement;\n}\n\nfunction getNodeScroll(element) {\n  if (isElement(element)) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n  return {\n    scrollLeft: element.pageXOffset,\n    scrollTop: element.pageYOffset\n  };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n  let {\n    rect,\n    offsetParent,\n    strategy\n  } = _ref;\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  if (offsetParent === documentElement) {\n    return rect;\n  }\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  let scale = createEmptyCoords(1);\n  const offsets = createEmptyCoords(0);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isHTMLElement(offsetParent)) {\n      const offsetRect = getBoundingClientRect(offsetParent);\n      scale = getScale(offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n  return {\n    width: rect.width * scale.x,\n    height: rect.height * scale.y,\n    x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x,\n    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y\n  };\n}\n\nfunction getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  return getBoundingClientRect(getDocumentElement(element)).left + getNodeScroll(element).scrollLeft;\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n  const html = getDocumentElement(element);\n  const scroll = getNodeScroll(element);\n  const body = element.ownerDocument.body;\n  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n  let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -scroll.scrollTop;\n  if (getComputedStyle$1(body).direction === 'rtl') {\n    x += max(html.clientWidth, body.clientWidth) - width;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\nfunction getParentNode(node) {\n  if (getNodeName(node) === 'html') {\n    return node;\n  }\n  const result =\n  // Step into the shadow DOM of the parent of a slotted node.\n  node.assignedSlot ||\n  // DOM Element detected.\n  node.parentNode ||\n  // ShadowRoot detected.\n  isShadowRoot(node) && node.host ||\n  // Fallback.\n  getDocumentElement(node);\n  return isShadowRoot(result) ? result.host : result;\n}\n\nfunction getNearestOverflowAncestor(node) {\n  const parentNode = getParentNode(node);\n  if (isLastTraversableNode(parentNode)) {\n    return node.ownerDocument ? node.ownerDocument.body : node.body;\n  }\n  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n    return parentNode;\n  }\n  return getNearestOverflowAncestor(parentNode);\n}\n\nfunction getOverflowAncestors(node, list) {\n  var _node$ownerDocument;\n  if (list === void 0) {\n    list = [];\n  }\n  const scrollableAncestor = getNearestOverflowAncestor(node);\n  const isBody = scrollableAncestor === ((_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.body);\n  const win = getWindow(scrollableAncestor);\n  if (isBody) {\n    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : []);\n  }\n  return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor));\n}\n\nfunction getViewportRect(element, strategy) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    const visualViewportBased = isSafari();\n    if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n  const top = clientRect.top + element.clientTop;\n  const left = clientRect.left + element.clientLeft;\n  const scale = isHTMLElement(element) ? getScale(element) : createEmptyCoords(1);\n  const width = element.clientWidth * scale.x;\n  const height = element.clientHeight * scale.y;\n  const x = left * scale.x;\n  const y = top * scale.y;\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n  let rect;\n  if (clippingAncestor === 'viewport') {\n    rect = getViewportRect(element, strategy);\n  } else if (clippingAncestor === 'document') {\n    rect = getDocumentRect(getDocumentElement(element));\n  } else if (isElement(clippingAncestor)) {\n    rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n  } else {\n    const visualOffsets = getVisualOffsets(element);\n    rect = {\n      ...clippingAncestor,\n      x: clippingAncestor.x - visualOffsets.x,\n      y: clippingAncestor.y - visualOffsets.y\n    };\n  }\n  return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n  const parentNode = getParentNode(element);\n  if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n    return false;\n  }\n  return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n  const cachedResult = cache.get(element);\n  if (cachedResult) {\n    return cachedResult;\n  }\n  let result = getOverflowAncestors(element).filter(el => isElement(el) && getNodeName(el) !== 'body');\n  let currentContainingBlockComputedStyle = null;\n  const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n  let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    const computedStyle = getComputedStyle$1(currentNode);\n    const currentNodeIsContaining = isContainingBlock(currentNode);\n    if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n      currentContainingBlockComputedStyle = null;\n    }\n    const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n    if (shouldDropCurrentNode) {\n      // Drop non-containing blocks.\n      result = result.filter(ancestor => ancestor !== currentNode);\n    } else {\n      // Record last containing block for next iteration.\n      currentContainingBlockComputedStyle = computedStyle;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  cache.set(element, result);\n  return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n  let {\n    element,\n    boundary,\n    rootBoundary,\n    strategy\n  } = _ref;\n  const elementClippingAncestors = boundary === 'clippingAncestors' ? getClippingElementAncestors(element, this._c) : [].concat(boundary);\n  const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n  const firstClippingAncestor = clippingAncestors[0];\n  const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n    const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n  return {\n    width: clippingRect.right - clippingRect.left,\n    height: clippingRect.bottom - clippingRect.top,\n    x: clippingRect.left,\n    y: clippingRect.top\n  };\n}\n\nfunction getDimensions(element) {\n  return getCssDimensions(element);\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n  if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n    return null;\n  }\n  if (polyfill) {\n    return polyfill(element);\n  }\n  return element.offsetParent;\n}\nfunction getContainingBlock(element) {\n  let currentNode = getParentNode(element);\n  while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    if (isContainingBlock(currentNode)) {\n      return currentNode;\n    } else {\n      currentNode = getParentNode(currentNode);\n    }\n  }\n  return null;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n  const window = getWindow(element);\n  if (!isHTMLElement(element)) {\n    return window;\n  }\n  let offsetParent = getTrueOffsetParent(element, polyfill);\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n  }\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static' && !isContainingBlock(offsetParent))) {\n    return window;\n  }\n  return offsetParent || getContainingBlock(element) || window;\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const isFixed = strategy === 'fixed';\n  const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  const offsets = createEmptyCoords(0);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isHTMLElement(offsetParent)) {\n      const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nconst platform = {\n  getClippingRect,\n  convertOffsetParentRelativeRectToViewportRelativeRect,\n  isElement,\n  getDimensions,\n  getOffsetParent,\n  getDocumentElement,\n  getScale,\n  async getElementRects(_ref) {\n    let {\n      reference,\n      floating,\n      strategy\n    } = _ref;\n    const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n    const getDimensionsFn = this.getDimensions;\n    return {\n      reference: getRectRelativeToOffsetParent(reference, await getOffsetParentFn(floating), strategy),\n      floating: {\n        x: 0,\n        y: 0,\n        ...(await getDimensionsFn(floating))\n      }\n    };\n  },\n  getClientRects: element => Array.from(element.getClientRects()),\n  isRTL: element => getComputedStyle$1(element).direction === 'rtl'\n};\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n  let io = null;\n  let timeoutId;\n  const root = getDocumentElement(element);\n  function cleanup() {\n    clearTimeout(timeoutId);\n    io && io.disconnect();\n    io = null;\n  }\n  function refresh(skip, threshold) {\n    if (skip === void 0) {\n      skip = false;\n    }\n    if (threshold === void 0) {\n      threshold = 1;\n    }\n    cleanup();\n    const {\n      left,\n      top,\n      width,\n      height\n    } = element.getBoundingClientRect();\n    if (!skip) {\n      onMove();\n    }\n    if (!width || !height) {\n      return;\n    }\n    const insetTop = floor(top);\n    const insetRight = floor(root.clientWidth - (left + width));\n    const insetBottom = floor(root.clientHeight - (top + height));\n    const insetLeft = floor(left);\n    const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n    const options = {\n      rootMargin,\n      threshold: max(0, min(1, threshold)) || 1\n    };\n    let isFirstUpdate = true;\n    function handleObserve(entries) {\n      const ratio = entries[0].intersectionRatio;\n      if (ratio !== threshold) {\n        if (!isFirstUpdate) {\n          return refresh();\n        }\n        if (!ratio) {\n          timeoutId = setTimeout(() => {\n            refresh(false, 1e-7);\n          }, 100);\n        } else {\n          refresh(false, ratio);\n        }\n      }\n      isFirstUpdate = false;\n    }\n\n    // Older browsers don't support a `document` as the root and will throw an\n    // error.\n    try {\n      io = new IntersectionObserver(handleObserve, {\n        ...options,\n        // Handle <iframe>s\n        root: root.ownerDocument\n      });\n    } catch (e) {\n      io = new IntersectionObserver(handleObserve, options);\n    }\n    io.observe(element);\n  }\n  refresh(true);\n  return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    ancestorScroll = true,\n    ancestorResize = true,\n    elementResize = typeof ResizeObserver === 'function',\n    layoutShift = typeof IntersectionObserver === 'function',\n    animationFrame = false\n  } = options;\n  const referenceEl = unwrapElement(reference);\n  const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n  ancestors.forEach(ancestor => {\n    ancestorScroll && ancestor.addEventListener('scroll', update, {\n      passive: true\n    });\n    ancestorResize && ancestor.addEventListener('resize', update);\n  });\n  const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n  let reobserveFrame = -1;\n  let resizeObserver = null;\n  if (elementResize) {\n    resizeObserver = new ResizeObserver(_ref => {\n      let [firstEntry] = _ref;\n      if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n        // Prevent update loops when using the `size` middleware.\n        // https://github.com/floating-ui/floating-ui/issues/1740\n        resizeObserver.unobserve(floating);\n        cancelAnimationFrame(reobserveFrame);\n        reobserveFrame = requestAnimationFrame(() => {\n          resizeObserver && resizeObserver.observe(floating);\n        });\n      }\n      update();\n    });\n    if (referenceEl && !animationFrame) {\n      resizeObserver.observe(referenceEl);\n    }\n    resizeObserver.observe(floating);\n  }\n  let frameId;\n  let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n  if (animationFrame) {\n    frameLoop();\n  }\n  function frameLoop() {\n    const nextRefRect = getBoundingClientRect(reference);\n    if (prevRefRect && (nextRefRect.x !== prevRefRect.x || nextRefRect.y !== prevRefRect.y || nextRefRect.width !== prevRefRect.width || nextRefRect.height !== prevRefRect.height)) {\n      update();\n    }\n    prevRefRect = nextRefRect;\n    frameId = requestAnimationFrame(frameLoop);\n  }\n  update();\n  return () => {\n    ancestors.forEach(ancestor => {\n      ancestorScroll && ancestor.removeEventListener('scroll', update);\n      ancestorResize && ancestor.removeEventListener('resize', update);\n    });\n    cleanupIo && cleanupIo();\n    resizeObserver && resizeObserver.disconnect();\n    resizeObserver = null;\n    if (animationFrame) {\n      cancelAnimationFrame(frameId);\n    }\n  };\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a reference element when it is given a certain CSS positioning\n * strategy.\n */\nconst computePosition = (reference, floating, options) => {\n  // This caches the expensive `getClippingElementAncestors` function so that\n  // multiple lifecycle resets re-use the same result. It only lives for a\n  // single call. If other functions become expensive, we can add them as well.\n  const cache = new Map();\n  const mergedOptions = {\n    platform,\n    ...options\n  };\n  const platformWithCache = {\n    ...mergedOptions.platform,\n    _c: cache\n  };\n  return computePosition$1(reference, floating, {\n    ...mergedOptions,\n    platform: platformWithCache\n  });\n};\n\nexport { autoUpdate, computePosition, getOverflowAncestors, platform };\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n  x: v,\n  y: v\n});\nconst oppositeSideMap = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n  start: 'end',\n  end: 'start'\n};\nfunction clamp(start, value, end) {\n  return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n  return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n  return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n  return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n  return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n  return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n  return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n  if (rtl === void 0) {\n    rtl = false;\n  }\n  const alignment = getAlignment(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const length = getAxisLength(alignmentAxis);\n  let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n  if (rects.reference[length] > rects.floating[length]) {\n    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n  }\n  return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n  const lr = ['left', 'right'];\n  const rl = ['right', 'left'];\n  const tb = ['top', 'bottom'];\n  const bt = ['bottom', 'top'];\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rl : lr;\n      return isStart ? lr : rl;\n    case 'left':\n    case 'right':\n      return isStart ? tb : bt;\n    default:\n      return [];\n  }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n  const alignment = getAlignment(placement);\n  let list = getSideList(getSide(placement), direction === 'start', rtl);\n  if (alignment) {\n    list = list.map(side => side + \"-\" + alignment);\n    if (flipAlignment) {\n      list = list.concat(list.map(getOppositeAlignmentPlacement));\n    }\n  }\n  return list;\n}\nfunction getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...padding\n  };\n}\nfunction getPaddingObject(padding) {\n  return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\nfunction rectToClientRect(rect) {\n  const {\n    x,\n    y,\n    width,\n    height\n  } = rect;\n  return {\n    width,\n    height,\n    top: y,\n    left: x,\n    right: x + width,\n    bottom: y + height,\n    x,\n    y\n  };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { extend, mergeData } from '../../vue';\nimport { NAME_DROPDOWN_HEADER } from '../../constants/components';\nimport { PROP_TYPE_STRING } from '../../constants/props';\nimport { isTag } from '../../utils/dom';\nimport { omit } from '../../utils/object';\nimport { makePropsConfigurable, makeProp } from '../../utils/props';\n\n// --- Props ---\n\nconst props = makePropsConfigurable({\n  id: makeProp(PROP_TYPE_STRING),\n  tag: makeProp(PROP_TYPE_STRING, 'header'),\n  variant: makeProp(PROP_TYPE_STRING)\n}, NAME_DROPDOWN_HEADER);\n\n// --- Main component ---\n\n// @vue/component\nconst BDropdownHeader = /*#__PURE__*/extend({\n  name: NAME_DROPDOWN_HEADER,\n  functional: true,\n  props,\n  render(h, _ref) {\n    let {\n      props,\n      data,\n      children\n    } = _ref;\n    const {\n      tag,\n      variant\n    } = props;\n    return h('li', mergeData(omit(data, ['attrs']), {\n      attrs: {\n        role: 'presentation'\n      }\n    }), [h(tag, {\n      staticClass: 'dropdown-header',\n      class: {\n        [`text-${variant}`]: variant\n      },\n      attrs: {\n        ...(data.attrs || {}),\n        id: props.id || null,\n        role: isTag(tag, 'header') ? null : 'heading'\n      },\n      ref: 'header'\n    }, children)]);\n  }\n});\n\nexport { BDropdownHeader, props };\n","import { BDropdownHeader } from '../../../vendor/bootstrap-vue/src/components/dropdown/dropdown-header';\nimport __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';\n\nvar script = {\n  name: 'GlDropdownHeader',\n  components: {\n    BDropdownHeader\n  },\n  inheritAttrs: false\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-dropdown-header',_vm._g(_vm._b({staticClass:\"gl-dropdown-section-header\"},'b-dropdown-header',_vm.$attrs,false),_vm.$listeners),[_vm._t(\"default\")],2)};\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 GlClearIconButton from '../../../shared_components/clear_icon_button/clear_icon_button';\nimport GlIcon from '../../icon/icon';\nimport __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';\n\nvar script = {\n  name: 'GlListboxSearchInput',\n  components: {\n    GlClearIconButton,\n    GlIcon\n  },\n  model: {\n    prop: 'value',\n    event: 'input'\n  },\n  props: {\n    /**\n     * If provided, used as value of search input\n     */\n    value: {\n      type: String,\n      required: false,\n      default: ''\n    },\n    /**\n     * Search input placeholder text and aria-label\n     */\n    placeholder: {\n      type: String,\n      required: false,\n      default: 'Search'\n    }\n  },\n  computed: {\n    hasValue() {\n      return Boolean(this.value.length);\n    },\n    inputListeners() {\n      return {\n        ...this.$listeners,\n        input: event => {\n          this.$emit('input', event.target.value);\n        }\n      };\n    }\n  },\n  methods: {\n    clearInput() {\n      this.$emit('input', '');\n      this.focusInput();\n    },\n    focusInput() {\n      this.$refs.input.focus();\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('div',{staticClass:\"gl-listbox-search\"},[_c('gl-icon',{staticClass:\"gl-listbox-search-icon\",attrs:{\"name\":\"search-sm\",\"size\":12}}),_vm._v(\" \"),_c('input',_vm._g({ref:\"input\",staticClass:\"gl-listbox-search-input\",attrs:{\"type\":\"search\",\"aria-label\":_vm.placeholder,\"placeholder\":_vm.placeholder},domProps:{\"value\":_vm.value}},_vm.inputListeners)),_vm._v(\" \"),(_vm.hasValue)?_c('gl-clear-icon-button',{staticClass:\"gl-listbox-search-clear-button\",on:{\"click\":function($event){$event.stopPropagation();return _vm.clearInput.apply(null, arguments)}}}):_vm._e()],1)};\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 uniqueId from 'lodash/uniqueId';\nimport __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';\n\nvar script = {\n  name: 'GlListboxGroup',\n  props: {\n    name: {\n      type: String,\n      required: true\n    },\n    textSrOnly: {\n      type: Boolean,\n      required: false,\n      default: false\n    }\n  },\n  created() {\n    this.nameId = uniqueId('gl-listbox-group-');\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('ul',{staticClass:\"gl-mb-0 gl-pl-0\",attrs:{\"role\":\"group\",\"aria-labelledby\":_vm.nameId}},[_c('li',{staticClass:\"gl-pb-2 gl-pl-4 gl-pt-3 gl-text-sm gl-font-bold gl-text-strong\",class:{ 'gl-sr-only': _vm.textSrOnly },attrs:{\"id\":_vm.nameId,\"role\":\"presentation\"}},[_vm._t(\"group-label\",function(){return [_vm._v(_vm._s(_vm.name))]})],2),_vm._v(\" \"),_vm._t(\"default\")],2)};\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 clamp from 'lodash/clamp';\nimport uniqueId from 'lodash/uniqueId';\nimport isNil from 'lodash/isNil';\nimport { stopEvent } from '../../../../utils/utils';\nimport { GL_DROPDOWN_SHOWN, GL_DROPDOWN_HIDDEN, POSITION_ABSOLUTE, POSITION_FIXED, GL_DROPDOWN_CONTENTS_CLASS, HOME, END, ARROW_UP, ARROW_DOWN } from '../constants';\nimport { buttonCategoryOptions, dropdownVariantOptions, buttonSizeOptions, dropdownPlacements } from '../../../../utils/constants';\nimport GlButton from '../../button/button';\nimport GlLoadingIcon from '../../loading_icon/loading_icon';\nimport GlIntersectionObserver from '../../../utilities/intersection_observer/intersection_observer';\nimport GlSearchBoxByType from '../../search_box_by_type/search_box_by_type';\nimport GlBaseDropdown from '../base_dropdown/base_dropdown';\nimport { translatePlural } from '../../../../utils/i18n';\nimport GlListboxItem from './listbox_item';\nimport GlListboxSearchInput from './listbox_search_input';\nimport GlListboxGroup from './listbox_group';\nimport { itemsValidator, isOption, flattenedOptions } from './utils';\nimport __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';\n\n//\nconst ITEM_SELECTOR = '[role=\"option\"]';\nconst HEADER_ITEMS_BORDER_CLASSES = ['gl-border-b-1', 'gl-border-b-solid', 'gl-border-b-dropdown'];\nconst GROUP_TOP_BORDER_CLASSES = ['gl-border-t', 'gl-border-t-dropdown', 'gl-pt-1', 'gl-mt-2'];\nconst SEARCH_INPUT_SELECTOR = '.gl-listbox-search-input';\nvar script = {\n  name: 'GlCollapsibleListbox',\n  HEADER_ITEMS_BORDER_CLASSES,\n  events: {\n    GL_DROPDOWN_SHOWN,\n    GL_DROPDOWN_HIDDEN\n  },\n  components: {\n    GlBaseDropdown,\n    GlListboxItem,\n    GlListboxGroup,\n    GlButton,\n    GlSearchBoxByType,\n    GlListboxSearchInput,\n    GlLoadingIcon,\n    GlIntersectionObserver\n  },\n  model: {\n    prop: 'selected',\n    event: 'select'\n  },\n  props: {\n    /**\n     * Items to display in the dropdown\n     */\n    items: {\n      type: Array,\n      required: false,\n      default: () => [],\n      validator: itemsValidator\n    },\n    /**\n     * Array of selected items values for multi-select and selected item value for single-select\n     */\n    selected: {\n      type: [Array, String, Number],\n      required: false,\n      default: () => []\n    },\n    /**\n     * Allow multi-selection\n     */\n    multiple: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    /**\n     * Toggle button text\n     */\n    toggleText: {\n      type: String,\n      required: false,\n      default: ''\n    },\n    /**\n     * Toggle text to be read by screen readers only\n     */\n    textSrOnly: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    /** The header text */\n    headerText: {\n      type: String,\n      required: false,\n      default: ''\n    },\n    /**\n     * Styling option - dropdown's toggle category\n     */\n    category: {\n      type: String,\n      required: false,\n      default: buttonCategoryOptions.primary,\n      validator: value => value in buttonCategoryOptions\n    },\n    /**\n     * Styling option - dropdown's toggle variant\n     */\n    variant: {\n      type: String,\n      required: false,\n      default: dropdownVariantOptions.default,\n      validator: value => value in dropdownVariantOptions\n    },\n    /**\n     * The size of the dropdown toggle\n     */\n    size: {\n      type: String,\n      required: false,\n      default: 'medium',\n      validator: value => value in buttonSizeOptions\n    },\n    /**\n     * Icon name that will be rendered in the toggle button\n     */\n    icon: {\n      type: String,\n      required: false,\n      default: ''\n    },\n    /**\n     * Set to \"true\" to disable the dropdown\n     */\n    disabled: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    /**\n     * Set to \"true\" when dropdown content (items) is loading\n     * It will render a small loader in the dropdown toggle and make it disabled\n     */\n    loading: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    /**\n     * Additional CSS classes to customize toggle appearance\n     */\n    toggleClass: {\n      type: [String, Array, Object],\n      required: false,\n      default: null\n    },\n    /**\n     * Set to \"true\" to hide the caret\n     */\n    noCaret: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    /**\n     * Align listbox menu with respect to the toggle button\n     */\n    placement: {\n      type: String,\n      required: false,\n      default: 'bottom-start',\n      validator: value => Object.keys(dropdownPlacements).includes(value)\n    },\n    /**\n     * Center selected item checkmark\n     */\n    isCheckCentered: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    /**\n     * The `aria-labelledby` attribute value for the toggle button\n     * Provide the string of ids seperated by space\n     */\n    toggleAriaLabelledBy: {\n      type: String,\n      required: false,\n      default: null\n    },\n    /**\n     * The `aria-labelledby` attribute value for the list of options\n     * Provide the string of ids seperated by space\n     */\n    listAriaLabelledBy: {\n      type: String,\n      required: false,\n      default: null\n    },\n    /**\n     * Enable search\n     */\n    searchable: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    /**\n     * Set to \"true\" when items search is in progress.\n     * It will display loading icon below the search input\n     */\n    searching: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    /**\n     * Enables infinite scroll.\n     * When set to `true`, the `@bottom-reached` event will be fired when\n     * the bottom of the listbox is scrolled to.\n     * Does not support groups.\n     */\n    infiniteScroll: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    /**\n     * This prop is used for infinite scroll.\n     * It represents the total number of items that exist,\n     * even if they have not yet been loaded.\n     * Do not set this prop if the total number of items is unknown.\n     */\n    totalItems: {\n      type: Number,\n      required: false,\n      default: null\n    },\n    /**\n     * This prop is used for infinite scroll.\n     * Set to `true` when more items are being loaded.\n     */\n    infiniteScrollLoading: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    /**\n     * Message to be displayed when filtering produced no results\n     */\n    noResultsText: {\n      type: String,\n      required: false,\n      default: 'No results found'\n    },\n    /**\n     * Search input placeholder text and aria-label\n     */\n    searchPlaceholder: {\n      type: String,\n      required: false,\n      default: 'Search'\n    },\n    /**\n     * The reset button's label, to be rendered in the header. If this is omitted, the button is not\n     * rendered.\n     * The reset button requires a header to be set, so this prop should be used in conjunction with\n     * headerText.\n     */\n    resetButtonLabel: {\n      type: String,\n      required: false,\n      default: ''\n    },\n    /**\n     * The select all button's label, to be rendered in the header. If this is omitted, the button is not\n     * rendered.\n     * The select all button requires a header to be set, so this prop should be used in conjunction with\n     * headerText.\n     */\n    showSelectAllButtonLabel: {\n      type: String,\n      required: false,\n      default: ''\n    },\n    /**\n     * Render the toggle button as a block element\n     */\n    block: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    /**\n     * Custom offset to be applied to Floating UI's offset middleware.\n     * https://floating-ui.com/docs/offset\n     */\n    dropdownOffset: {\n      type: [Number, Object],\n      required: false,\n      default: undefined\n    },\n    /**\n     * Lets the dropdown extend to match its content's width, up to a maximum width\n     * defined by the `$gl-new-dropdown-max-width` variable.\n     */\n    fluidWidth: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    /**\n     * Strategy to be applied by computePosition. If the dropdown's container is too short for it to\n     * fit in, setting this to fixed will let it position itself above its container.\n     * https://floating-ui.com/docs/computePosition#strategy\n     */\n    positioningStrategy: {\n      type: String,\n      required: false,\n      default: POSITION_ABSOLUTE,\n      validator: strategy => [POSITION_ABSOLUTE, POSITION_FIXED].includes(strategy)\n    },\n    /**\n     * Opens dropdown on render\n     */\n    startOpened: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    srOnlyResultsLabel: {\n      type: Function,\n      required: false,\n      default: translatePlural('GlCollapsibleListbox.srOnlyResultsLabel', '%d result', '%d results')\n    }\n  },\n  data() {\n    return {\n      selectedValues: [],\n      toggleId: uniqueId('dropdown-toggle-btn-'),\n      listboxId: uniqueId('listbox-'),\n      nextFocusedItemIndex: null,\n      searchStr: '',\n      topBoundaryVisible: true,\n      bottomBoundaryVisible: true\n    };\n  },\n  computed: {\n    listboxTag() {\n      if (!this.hasItems || isOption(this.items[0])) return 'ul';\n      return 'div';\n    },\n    listboxClasses() {\n      return {\n        'top-scrim-visible': !this.topBoundaryVisible,\n        'bottom-scrim-visible': !this.bottomBoundaryVisible,\n        [GL_DROPDOWN_CONTENTS_CLASS]: true\n      };\n    },\n    itemTag() {\n      return this.listboxTag === 'ul' ? 'li' : 'div';\n    },\n    flattenedOptions() {\n      return flattenedOptions(this.items);\n    },\n    hasItems() {\n      return this.items.length > 0;\n    },\n    listboxToggleText() {\n      if (!this.toggleText) {\n        if (!this.multiple && this.selectedValues.length) {\n          var _this$flattenedOption;\n          return (_this$flattenedOption = this.flattenedOptions.find(_ref => {\n            let {\n              value\n            } = _ref;\n            return value === this.selectedValues[0];\n          })) === null || _this$flattenedOption === void 0 ? void 0 : _this$flattenedOption.text;\n        }\n        return '';\n      }\n      return this.toggleText;\n    },\n    selectedIndices() {\n      return this.selectedValues.map(selected => this.flattenedOptions.findIndex(_ref2 => {\n        let {\n          value\n        } = _ref2;\n        return value === selected;\n      })).sort();\n    },\n    showList() {\n      return this.flattenedOptions.length && !this.searching;\n    },\n    showNoResultsText() {\n      return !this.flattenedOptions.length && !this.searching;\n    },\n    announceSRSearchResults() {\n      return this.searchable && !this.showNoResultsText;\n    },\n    headerId() {\n      return this.headerText && uniqueId('listbox-header-');\n    },\n    showResetButton() {\n      if (!this.resetButtonLabel) {\n        return false;\n      }\n\n      /**\n       * if dropdown has no items\n       * reset all should be hidden\n       */\n      if (!this.hasItems) {\n        return false;\n      }\n\n      // hide if no selection\n      if (!this.selected || this.selected.length === 0) {\n        return false;\n      }\n\n      // only show reset button if show all button is not there\n      return !this.showSelectAllButton;\n    },\n    showSelectAllButton() {\n      if (!this.showSelectAllButtonLabel) {\n        return false;\n      }\n      if (!this.multiple) {\n        return false;\n      }\n\n      /**\n       * if dropdown has no items\n       * select all should be hidden\n       */\n      if (!this.hasItems) {\n        return false;\n      }\n      return this.selected.length !== this.flattenedOptions.length;\n    },\n    showIntersectionObserver() {\n      return this.infiniteScroll && !this.infiniteScrollLoading && !this.loading && !this.searching;\n    },\n    hasCustomToggle() {\n      return Boolean(this.$scopedSlots.toggle);\n    },\n    hasSelection() {\n      return Boolean(this.selectedValues.length);\n    },\n    toggleButtonClasses() {\n      const toggleClasses = [this.toggleClass];\n      if (!this.hasSelection) {\n        toggleClasses.push('!gl-text-subtle');\n      }\n      return toggleClasses;\n    },\n    hasHeader() {\n      return this.headerText || this.searchable;\n    },\n    hasFooter() {\n      return Boolean(this.$scopedSlots.footer);\n    }\n  },\n  watch: {\n    selected: {\n      immediate: true,\n      handler(newSelected) {\n        if (Array.isArray(newSelected)) {\n          if (process.env.NODE_ENV !== 'production' && !this.multiple && newSelected.length) {\n            throw new Error('To allow multi-selection, please, set \"multiple\" property to \"true\"');\n          }\n          this.selectedValues = [...newSelected];\n        } else {\n          this.selectedValues = isNil(newSelected) ? [] : [newSelected];\n        }\n      }\n    },\n    items: {\n      handler() {\n        this.$nextTick(() => {\n          /* Every time the list of items changes (on search),\n           * the observed elements are recreated, thus we need to start obesrving them again */\n          this.observeScroll();\n        });\n      }\n    },\n    ...(process.env.NODE_ENV !== 'production' ? {\n      resetButtonLabel: {\n        immediate: true,\n        handler(newResetButtonLabel) {\n          if (newResetButtonLabel && !this.headerText) {\n            throw new Error('The reset button cannot be rendered without a header. Either provide a header via the headerText prop, or do not provide the resetButtonLabel prop.');\n          }\n        }\n      },\n      showSelectAllButtonLabel: {\n        immediate: true,\n        handler(showSelectAllButtonLabel) {\n          if (showSelectAllButtonLabel && !this.headerText) {\n            throw new Error('The select all button cannot be rendered without a header. Either provide a header via the headerText prop, or do not provide the showSelectAllButtonLabel prop.');\n          }\n        }\n      },\n      infiniteScroll: {\n        immediate: true,\n        handler(newValue) {\n          if (newValue && this.items.some(item => !isOption(item))) {\n            throw new Error('Infinite scroll does not support groups. Please set the \"infiniteScroll\" prop to \"false\"');\n          }\n        }\n      }\n    } : {})\n  },\n  mounted() {\n    if (this.startOpened) {\n      this.open();\n    }\n    this.observeScroll();\n  },\n  beforeDestroy() {\n    var _this$scrollObserver;\n    (_this$scrollObserver = this.scrollObserver) === null || _this$scrollObserver === void 0 ? void 0 : _this$scrollObserver.disconnect();\n  },\n  methods: {\n    open() {\n      this.$refs.baseDropdown.open();\n    },\n    close() {\n      this.$refs.baseDropdown.close();\n    },\n    groupClasses(index) {\n      return index === 0 ? null : GROUP_TOP_BORDER_CLASSES;\n    },\n    onShow() {\n      if (this.searchable) {\n        this.focusSearchInput();\n      } else {\n        var _this$selectedIndices;\n        this.focusItem((_this$selectedIndices = this.selectedIndices[0]) !== null && _this$selectedIndices !== void 0 ? _this$selectedIndices : 0, this.getFocusableListItemElements());\n      }\n      /**\n       * Emitted when dropdown is shown\n       *\n       * @event shown\n       */\n      this.$emit(GL_DROPDOWN_SHOWN);\n    },\n    onHide() {\n      /**\n       * Emitted when dropdown is hidden\n       *\n       * @event hidden\n       */\n      this.$emit(GL_DROPDOWN_HIDDEN);\n      this.nextFocusedItemIndex = null;\n    },\n    onKeydown(event) {\n      const {\n        code,\n        target\n      } = event;\n      const elements = this.getFocusableListItemElements();\n      if (elements.length < 1) return;\n      let stop = true;\n      const isSearchInput = target.matches(SEARCH_INPUT_SELECTOR);\n      if (code === HOME) {\n        if (isSearchInput) {\n          return;\n        }\n        this.focusItem(0, elements);\n      } else if (code === END) {\n        if (isSearchInput) {\n          return;\n        }\n        this.focusItem(elements.length - 1, elements);\n      } else if (code === ARROW_UP) {\n        if (isSearchInput) {\n          return;\n        }\n        if (this.searchable && elements.indexOf(target) === 0) {\n          this.focusSearchInput();\n        } else {\n          this.focusNextItem(event, elements, -1);\n        }\n      } else if (code === ARROW_DOWN) {\n        if (isSearchInput) {\n          this.focusItem(0, elements);\n        } else {\n          this.focusNextItem(event, elements, 1);\n        }\n      } else {\n        stop = false;\n      }\n      if (stop) {\n        stopEvent(event);\n      }\n    },\n    getFocusableListItemElements() {\n      var _this$$refs$list;\n      const items = (_this$$refs$list = this.$refs.list) === null || _this$$refs$list === void 0 ? void 0 : _this$$refs$list.querySelectorAll(ITEM_SELECTOR);\n      return Array.from(items || []);\n    },\n    focusNextItem(event, elements, offset) {\n      const {\n        target\n      } = event;\n      const currentIndex = elements.indexOf(target);\n      const nextIndex = clamp(currentIndex + offset, 0, elements.length - 1);\n      this.focusItem(nextIndex, elements);\n    },\n    focusItem(index, elements) {\n      var _elements$index;\n      this.nextFocusedItemIndex = index;\n      (_elements$index = elements[index]) === null || _elements$index === void 0 ? void 0 : _elements$index.focus();\n    },\n    focusSearchInput() {\n      this.$refs.searchBox.focusInput();\n    },\n    onSelect(item, isSelected) {\n      if (this.multiple) {\n        this.onMultiSelect(item.value, isSelected);\n      } else {\n        this.onSingleSelect(item.value, isSelected);\n      }\n    },\n    isSelected(item) {\n      return this.selectedValues.some(value => value === item.value);\n    },\n    isFocused(item) {\n      return this.nextFocusedItemIndex === this.flattenedOptions.indexOf(item);\n    },\n    onSingleSelect(value, isSelected) {\n      if (isSelected) {\n        /**\n         * Emitted when selection is changed\n         *\n         * @event select\n         */\n        this.$emit('select', value);\n      }\n      this.closeAndFocus();\n    },\n    onMultiSelect(value, isSelected) {\n      if (isSelected) {\n        this.$emit('select', [...this.selectedValues, value]);\n      } else {\n        this.$emit('select', this.selectedValues.filter(selectedValue => selectedValue !== value));\n      }\n    },\n    search(searchTerm) {\n      /**\n       * Emitted when the search query string is changed\n       *\n       * @event search\n       * @type {string}\n       */\n      this.$emit('search', searchTerm);\n    },\n    onResetButtonClicked() {\n      /**\n       * Emitted when the reset button is clicked\n       *\n       * @event reset\n       */\n      this.$emit('reset');\n    },\n    onSelectAllButtonClicked() {\n      /**\n       * Emitted when the select all button is clicked\n       *\n       * @event select-all\n       */\n      this.$emit('select-all');\n    },\n    closeAndFocus() {\n      this.$refs.baseDropdown.closeAndFocus();\n    },\n    onIntersectionObserverAppear() {\n      /**\n       * Emitted when bottom of listbox has been scrolled to.\n       * Used for infinite scroll.\n       *\n       * @event bottom-reached\n       */\n      this.$emit('bottom-reached');\n    },\n    listboxItemMoreItemsAriaAttributes(index) {\n      if (this.totalItems === null) {\n        return {};\n      }\n      return {\n        'aria-setsize': this.totalItems,\n        'aria-posinset': index + 1\n      };\n    },\n    observeScroll() {\n      var _this$scrollObserver2;\n      const root = this.$refs.list;\n      const options = {\n        rootMargin: '8px',\n        root,\n        threshold: 1.0\n      };\n      (_this$scrollObserver2 = this.scrollObserver) === null || _this$scrollObserver2 === void 0 ? void 0 : _this$scrollObserver2.disconnect();\n      const observer = new IntersectionObserver(entries => {\n        entries.forEach(entry => {\n          var _entry$target;\n          this[(_entry$target = entry.target) === null || _entry$target === void 0 ? void 0 : _entry$target.$__visibilityProp] = entry.isIntersecting;\n        });\n      }, options);\n      const topBoundary = this.$refs['top-boundary'];\n      const bottomBoundary = this.$refs['bottom-boundary'];\n      if (topBoundary) {\n        topBoundary.$__visibilityProp = 'topBoundaryVisible';\n        observer.observe(topBoundary);\n      }\n      if (bottomBoundary) {\n        bottomBoundary.$__visibilityProp = 'bottomBoundaryVisible';\n        observer.observe(bottomBoundary);\n      }\n      this.scrollObserver = observer;\n    },\n    isOption\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('gl-base-dropdown',{ref:\"baseDropdown\",attrs:{\"aria-haspopup\":\"listbox\",\"aria-labelledby\":_vm.toggleAriaLabelledBy,\"block\":_vm.block,\"toggle-id\":_vm.toggleId,\"toggle-text\":_vm.listboxToggleText,\"toggle-class\":_vm.toggleButtonClasses,\"text-sr-only\":_vm.textSrOnly,\"category\":_vm.category,\"variant\":_vm.variant,\"size\":_vm.size,\"icon\":_vm.icon,\"disabled\":_vm.disabled,\"loading\":_vm.loading,\"no-caret\":_vm.noCaret,\"placement\":_vm.placement,\"offset\":_vm.dropdownOffset,\"fluid-width\":_vm.fluidWidth,\"positioning-strategy\":_vm.positioningStrategy},on:_vm._d({},[_vm.$options.events.GL_DROPDOWN_SHOWN,_vm.onShow,_vm.$options.events.GL_DROPDOWN_HIDDEN,_vm.onHide]),scopedSlots:_vm._u([(_vm.hasCustomToggle)?{key:\"toggle\",fn:function(){return [_vm._t(\"toggle\")]},proxy:true}:null],null,true)},[_vm._v(\" \"),(_vm.headerText)?_c('div',{staticClass:\"gl-flex gl-min-h-8 gl-items-center !gl-p-4\",class:_vm.$options.HEADER_ITEMS_BORDER_CLASSES},[_c('div',{staticClass:\"gl-grow gl-pr-2 gl-text-sm gl-font-bold gl-text-strong\",attrs:{\"id\":_vm.headerId,\"data-testid\":\"listbox-header-text\"}},[_vm._v(\"\\n      \"+_vm._s(_vm.headerText)+\"\\n    \")]),_vm._v(\" \"),(_vm.showResetButton)?_c('gl-button',{staticClass:\"!gl-m-0 !gl-w-auto gl-max-w-1/2 gl-flex-shrink-0 gl-text-ellipsis !gl-px-2 !gl-text-sm focus:!gl-shadow-inner-2-blue-400\",attrs:{\"category\":\"tertiary\",\"size\":\"small\",\"data-testid\":\"listbox-reset-button\"},on:{\"click\":_vm.onResetButtonClicked}},[_vm._v(\"\\n      \"+_vm._s(_vm.resetButtonLabel)+\"\\n    \")]):_vm._e(),_vm._v(\" \"),(_vm.showSelectAllButton)?_c('gl-button',{staticClass:\"!gl-m-0 !gl-w-auto gl-max-w-1/2 gl-flex-shrink-0 gl-text-ellipsis !gl-px-2 !gl-text-sm focus:!gl-shadow-inner-2-blue-400\",attrs:{\"category\":\"tertiary\",\"size\":\"small\",\"data-testid\":\"listbox-select-all-button\"},on:{\"click\":_vm.onSelectAllButtonClicked}},[_vm._v(\"\\n      \"+_vm._s(_vm.showSelectAllButtonLabel)+\"\\n    \")]):_vm._e()],1):_vm._e(),_vm._v(\" \"),(_vm.searchable)?_c('div',{class:_vm.$options.HEADER_ITEMS_BORDER_CLASSES},[_c('gl-listbox-search-input',{ref:\"searchBox\",class:{ 'gl-listbox-topmost': !_vm.headerText },attrs:{\"data-testid\":\"listbox-search-input\",\"placeholder\":_vm.searchPlaceholder},on:{\"input\":_vm.search,\"keydown\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }$event.preventDefault();},_vm.onKeydown]},model:{value:(_vm.searchStr),callback:function ($$v) {_vm.searchStr=$$v;},expression:\"searchStr\"}}),_vm._v(\" \"),(_vm.searching)?_c('gl-loading-icon',{staticClass:\"gl-my-3\",attrs:{\"data-testid\":\"listbox-search-loader\",\"size\":\"md\"}}):_vm._e()],1):_vm._e(),_vm._v(\" \"),(_vm.showList)?_c(_vm.listboxTag,{ref:\"list\",tag:\"component\",staticClass:\"gl-new-dropdown-contents gl-new-dropdown-contents-with-scrim-overlay\",class:_vm.listboxClasses,attrs:{\"id\":_vm.listboxId,\"aria-labelledby\":_vm.listAriaLabelledBy || _vm.headerId || _vm.toggleId,\"role\":\"listbox\",\"tabindex\":\"0\"},on:{\"keydown\":_vm.onKeydown}},[_c(_vm.itemTag,{tag:\"component\",staticClass:\"top-scrim-wrapper\",attrs:{\"aria-hidden\":\"true\",\"data-testid\":\"top-scrim\"}},[_c('div',{staticClass:\"top-scrim\",class:{ 'top-scrim-light': !_vm.hasHeader, 'top-scrim-dark': _vm.hasHeader }})]),_vm._v(\" \"),_c(_vm.itemTag,{ref:\"top-boundary\",tag:\"component\",attrs:{\"aria-hidden\":\"true\"}}),_vm._v(\" \"),_vm._l((_vm.items),function(item,index){return [(_vm.isOption(item))?[_c('gl-listbox-item',_vm._b({key:item.value,attrs:{\"data-testid\":(\"listbox-item-\" + (item.value)),\"is-selected\":_vm.isSelected(item),\"is-focused\":_vm.isFocused(item),\"is-check-centered\":_vm.isCheckCentered},on:{\"select\":function($event){return _vm.onSelect(item, $event)}}},'gl-listbox-item',_vm.listboxItemMoreItemsAriaAttributes(index),false),[_vm._t(\"list-item\",function(){return [_vm._v(\"\\n            \"+_vm._s(item.text)+\"\\n          \")]},{\"item\":item})],2)]:[_c('gl-listbox-group',{key:item.text,class:_vm.groupClasses(index),attrs:{\"name\":item.text,\"text-sr-only\":item.textSrOnly},scopedSlots:_vm._u([(_vm.$scopedSlots['group-label'])?{key:\"group-label\",fn:function(){return [_vm._t(\"group-label\",null,{\"group\":item})]},proxy:true}:null],null,true)},[_vm._v(\" \"),_vm._l((item.options),function(option){return _c('gl-listbox-item',{key:option.value,attrs:{\"data-testid\":(\"listbox-item-\" + (option.value)),\"is-selected\":_vm.isSelected(option),\"is-focused\":_vm.isFocused(option),\"is-check-centered\":_vm.isCheckCentered},on:{\"select\":function($event){return _vm.onSelect(option, $event)}}},[_vm._t(\"list-item\",function(){return [_vm._v(\"\\n              \"+_vm._s(option.text)+\"\\n            \")]},{\"item\":option})],2)})],2)]]}),_vm._v(\" \"),(_vm.infiniteScrollLoading)?_c(_vm.itemTag,{tag:\"component\"},[_c('gl-loading-icon',{staticClass:\"gl-my-3\",attrs:{\"data-testid\":\"listbox-infinite-scroll-loader\",\"size\":\"md\"}})],1):_vm._e(),_vm._v(\" \"),(_vm.showIntersectionObserver)?_c('gl-intersection-observer',{on:{\"appear\":_vm.onIntersectionObserverAppear}}):_vm._e(),_vm._v(\" \"),_c(_vm.itemTag,{ref:\"bottom-boundary\",tag:\"component\",attrs:{\"aria-hidden\":\"true\"}}),_vm._v(\" \"),_c(_vm.itemTag,{tag:\"component\",staticClass:\"bottom-scrim-wrapper\",attrs:{\"aria-hidden\":\"true\",\"data-testid\":\"bottom-scrim\"}},[_c('div',{staticClass:\"bottom-scrim\",class:{ '!gl-rounded-none': _vm.hasFooter }})])],2):_vm._e(),_vm._v(\" \"),(_vm.announceSRSearchResults)?_c('span',{staticClass:\"gl-sr-only\",attrs:{\"data-testid\":\"listbox-number-of-results\",\"aria-live\":\"assertive\"}},[_vm._t(\"search-summary-sr-only\",function(){return [_vm._v(\"\\n      \"+_vm._s(_vm.srOnlyResultsLabel(_vm.flattenedOptions.length))+\"\\n    \")]})],2):(_vm.showNoResultsText)?_c('div',{staticClass:\"gl-py-3 gl-pl-7 gl-pr-5 gl-text-base gl-text-subtle\",attrs:{\"aria-live\":\"assertive\",\"data-testid\":\"listbox-no-results-text\"}},[_vm._v(\"\\n    \"+_vm._s(_vm.noResultsText)+\"\\n  \")]):_vm._e(),_vm._v(\" \"),_vm._t(\"footer\")],2)};\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__;\nexport { ITEM_SELECTOR, SEARCH_INPUT_SELECTOR };\n","import memoize from 'lodash/memoize';\nimport __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';\n\nconst getObserver = memoize(options => new IntersectionObserver(entries => {\n  entries.forEach(entry => {\n    entry.target.$_gl_intersectionHandler(entry);\n  });\n}, options || {}));\nvar script = {\n  name: 'GlIntersectionObserver',\n  props: {\n    /**\n     * Extra options to pass directly to the intersection observer API.\n     */\n    options: {\n      type: Object,\n      required: false,\n      default: null\n    }\n  },\n  mounted() {\n    const observer = getObserver(this.options);\n    this.$el.$_gl_intersectionHandler = entry => {\n      /**\n       * Emitted when the element's visibility changes\n       */\n      this.$emit('update', entry);\n      if (entry.isIntersecting) {\n        /**\n         * Emitted when the element appears on the page\n         */\n        this.$emit('appear');\n      } else {\n        /**\n         * Emitted when the element disappears from the page\n         */\n        this.$emit('disappear');\n      }\n    };\n    this.$el.$_gl_intersectionObserver = observer;\n    observer.observe(this.$el);\n  },\n  destroyed() {\n    this.$el.$_gl_intersectionObserver.unobserve(this.$el);\n    delete this.$el.$_gl_intersectionHandler;\n    delete this.$el.$_gl_intersectionObserver;\n  },\n  // Expose getObserver method for tests\n  getObserver\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('div',[_vm._t(\"default\")],2)};\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 GlClearIconButton from '../../shared_components/clear_icon_button/clear_icon_button';\nimport GlFormInput from '../form/form_input/form_input';\nimport GlIcon from '../icon/icon';\nimport GlLoadingIcon from '../loading_icon/loading_icon';\nimport { translate } from '../../../utils/i18n';\nimport __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';\n\nvar script = {\n  name: 'GlSearchboxByType',\n  components: {\n    GlClearIconButton,\n    GlIcon,\n    GlFormInput,\n    GlLoadingIcon\n  },\n  inheritAttrs: false,\n  model: {\n    prop: 'value',\n    event: 'input'\n  },\n  props: {\n    /**\n     * If provided, used as value of search input\n     */\n    value: {\n      type: String,\n      required: false,\n      default: ''\n    },\n    borderless: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    clearButtonTitle: {\n      type: String,\n      required: false,\n      default: () => translate('GlSearchBoxByType.clearButtonTitle', 'Clear')\n    },\n    /**\n     * If provided and true, disables the input and controls\n     */\n    disabled: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    /**\n     * Puts search box into loading state, rendering spinner\n     */\n    isLoading: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    /**\n     * Container for tooltip. Valid values: DOM node, selector string or `false` for default\n     */\n    tooltipContainer: {\n      required: false,\n      default: false,\n      validator: value => value === false || typeof value === 'string' || value instanceof HTMLElement\n    }\n  },\n  computed: {\n    inputAttributes() {\n      const attributes = {\n        type: 'search',\n        placeholder: translate('GlSearchBoxByType.input.placeholder', 'Search'),\n        ...this.$attrs\n      };\n      if (!attributes['aria-label']) {\n        attributes['aria-label'] = attributes.placeholder;\n      }\n      return attributes;\n    },\n    hasValue() {\n      return Boolean(this.value.length);\n    },\n    inputListeners() {\n      return {\n        ...this.$listeners,\n        input: this.onInput,\n        focusin: this.onFocusin,\n        focusout: this.onFocusout\n      };\n    },\n    showClearButton() {\n      return this.hasValue && !this.disabled;\n    }\n  },\n  methods: {\n    isInputOrClearButton(element) {\n      var _this$$refs$input, _this$$refs$clearButt;\n      return element === ((_this$$refs$input = this.$refs.input) === null || _this$$refs$input === void 0 ? void 0 : _this$$refs$input.$el) || element === ((_this$$refs$clearButt = this.$refs.clearButton) === null || _this$$refs$clearButt === void 0 ? void 0 : _this$$refs$clearButt.$el);\n    },\n    clearInput() {\n      this.onInput('');\n      this.focusInput();\n    },\n    focusInput() {\n      this.$refs.input.$el.focus();\n    },\n    onInput(value) {\n      this.$emit('input', value);\n    },\n    onFocusout(event) {\n      const {\n        relatedTarget\n      } = event;\n      if (this.isInputOrClearButton(relatedTarget)) {\n        return;\n      }\n      this.$emit('focusout', event);\n    },\n    onFocusin(event) {\n      const {\n        relatedTarget\n      } = event;\n      if (this.isInputOrClearButton(relatedTarget)) {\n        return;\n      }\n      this.$emit('focusin', event);\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('div',{staticClass:\"gl-search-box-by-type\"},[_c('gl-icon',{staticClass:\"gl-search-box-by-type-search-icon\",attrs:{\"name\":\"search\",\"variant\":\"subtle\"}}),_vm._v(\" \"),_c('gl-form-input',_vm._g(_vm._b({ref:\"input\",class:{\n      'gl-search-box-by-type-input': !_vm.borderless,\n      'gl-search-box-by-type-input-borderless': _vm.borderless,\n    },attrs:{\"value\":_vm.value,\"disabled\":_vm.disabled}},'gl-form-input',_vm.inputAttributes,false),_vm.inputListeners)),_vm._v(\" \"),(_vm.isLoading || _vm.showClearButton)?_c('div',{staticClass:\"gl-search-box-by-type-right-icons\"},[(_vm.isLoading)?_c('gl-loading-icon',{staticClass:\"gl-search-box-by-type-loading-icon\"}):_vm._e(),_vm._v(\" \"),(_vm.showClearButton)?_c('gl-clear-icon-button',{ref:\"clearButton\",staticClass:\"gl-search-box-by-type-clear gl-clear-icon-button\",attrs:{\"title\":_vm.clearButtonTitle,\"tooltip-container\":_vm.tooltipContainer},on:{\"click\":function($event){$event.stopPropagation();return _vm.clearInput.apply(null, arguments)},\"focusin\":_vm.onFocusin,\"focusout\":_vm.onFocusout}}):_vm._e()],1):_vm._e()],1)};\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 uniqueId from 'lodash/uniqueId';\nimport { offset, autoPlacement, shift, size, autoUpdate, computePosition } from '@floating-ui/dom';\nimport { buttonCategoryOptions, dropdownVariantOptions, buttonSizeOptions, dropdownPlacements, dropdownAllowedAutoPlacements } from '../../../../utils/constants';\nimport { POSITION_ABSOLUTE, POSITION_FIXED, GL_DROPDOWN_CONTENTS_CLASS, GL_DROPDOWN_BEFORE_CLOSE, GL_DROPDOWN_SHOWN, GL_DROPDOWN_HIDDEN, ENTER, SPACE, ARROW_DOWN, GL_DROPDOWN_FOCUS_CONTENT } from '../constants';\nimport { logWarning, isElementFocusable, isElementTabbable } from '../../../../utils/utils';\nimport { OutsideDirective } from '../../../../directives/outside/outside';\nimport GlButton from '../../button/button';\nimport GlIcon from '../../icon/icon';\nimport { DEFAULT_OFFSET, FIXED_WIDTH_CLASS } from './constants';\nimport __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';\n\nconst BASE_DROPDOWN_CLASS = 'gl-new-dropdown';\nvar script = {\n  name: 'BaseDropdown',\n  BASE_DROPDOWN_CLASS,\n  components: {\n    GlButton,\n    GlIcon\n  },\n  directives: {\n    Outside: OutsideDirective\n  },\n  props: {\n    toggleText: {\n      type: String,\n      required: false,\n      default: ''\n    },\n    textSrOnly: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    block: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    category: {\n      type: String,\n      required: false,\n      default: buttonCategoryOptions.primary,\n      validator: value => Object.keys(buttonCategoryOptions).includes(value)\n    },\n    variant: {\n      type: String,\n      required: false,\n      default: dropdownVariantOptions.default,\n      validator: value => Object.keys(dropdownVariantOptions).includes(value)\n    },\n    size: {\n      type: String,\n      required: false,\n      default: 'medium',\n      validator: value => Object.keys(buttonSizeOptions).includes(value)\n    },\n    icon: {\n      type: String,\n      required: false,\n      default: ''\n    },\n    disabled: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    loading: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    toggleClass: {\n      type: [String, Array, Object],\n      required: false,\n      default: null\n    },\n    noCaret: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    placement: {\n      type: String,\n      required: false,\n      default: 'bottom-start',\n      validator: value => {\n        if (['left', 'center', 'right'].includes(value)) {\n          logWarning(`GlDisclosureDropdown/GlCollapsibleListbox: \"${value}\" placement is deprecated.\n            Use ${dropdownPlacements[value]} instead.`);\n        }\n        return Object.keys(dropdownPlacements).includes(value);\n      }\n    },\n    // ARIA props\n    ariaHaspopup: {\n      type: [String, Boolean],\n      required: false,\n      default: false,\n      validator: value => {\n        return ['menu', 'listbox', 'tree', 'grid', 'dialog', true, false].includes(value);\n      }\n    },\n    /**\n     * Id that will be referenced by `aria-labelledby` attribute of the dropdown content`\n     */\n    toggleId: {\n      type: String,\n      required: true\n    },\n    /**\n     * The `aria-labelledby` attribute value for the  toggle `button`\n     */\n    ariaLabelledby: {\n      type: String,\n      required: false,\n      default: null\n    },\n    /**\n     * Custom value to be passed to the offset middleware.\n     * https://floating-ui.com/docs/offset\n     */\n    offset: {\n      type: [Number, Object],\n      required: false,\n      default: () => ({\n        mainAxis: DEFAULT_OFFSET\n      })\n    },\n    fluidWidth: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    /**\n     * Strategy to be applied by computePosition. If this is set to fixed, the dropdown's position\n     * needs to be set to fixed in CSS as well.\n     * https://floating-ui.com/docs/computePosition#strategy\n     */\n    positioningStrategy: {\n      type: String,\n      required: false,\n      default: POSITION_ABSOLUTE,\n      validator: strategy => [POSITION_ABSOLUTE, POSITION_FIXED].includes(strategy)\n    }\n  },\n  data() {\n    return {\n      openedYet: false,\n      visible: false,\n      baseDropdownId: uniqueId('base-dropdown-')\n    };\n  },\n  computed: {\n    hasNoVisibleToggleText() {\n      var _this$toggleText;\n      return !((_this$toggleText = this.toggleText) !== null && _this$toggleText !== void 0 && _this$toggleText.length) || this.textSrOnly;\n    },\n    isIconOnly() {\n      return Boolean(this.icon && this.hasNoVisibleToggleText);\n    },\n    isEllipsisButton() {\n      return this.isIconOnly && this.icon === 'ellipsis_h';\n    },\n    isCaretOnly() {\n      return !this.noCaret && !this.icon && this.hasNoVisibleToggleText;\n    },\n    ariaAttributes() {\n      return {\n        'aria-haspopup': this.ariaHaspopup,\n        'aria-expanded': String(this.visible),\n        'aria-controls': this.baseDropdownId,\n        'aria-labelledby': this.toggleLabelledBy\n      };\n    },\n    toggleButtonClasses() {\n      return [this.toggleClass, {\n        'gl-new-dropdown-toggle': true,\n        'button-ellipsis-horizontal': this.isEllipsisButton,\n        'gl-new-dropdown-icon-only btn-icon': this.isIconOnly && !this.isEllipsisButton,\n        'gl-new-dropdown-toggle-no-caret': this.noCaret,\n        'gl-new-dropdown-caret-only btn-icon': this.isCaretOnly\n      }];\n    },\n    toggleButtonTextClasses() {\n      return this.block ? 'gl-w-full' : '';\n    },\n    toggleLabelledBy() {\n      return this.ariaLabelledby ? `${this.ariaLabelledby} ${this.toggleId}` : this.toggleId;\n    },\n    isDefaultToggle() {\n      return !this.$scopedSlots.toggle;\n    },\n    toggleOptions() {\n      if (this.isDefaultToggle) {\n        return {\n          is: GlButton,\n          icon: this.icon,\n          block: this.block,\n          buttonTextClasses: this.toggleButtonTextClasses,\n          category: this.category,\n          variant: this.variant,\n          size: this.size,\n          disabled: this.disabled,\n          loading: this.loading,\n          class: this.toggleButtonClasses,\n          ...this.ariaAttributes,\n          listeners: {\n            keydown: event => this.onKeydown(event),\n            click: event => this.toggle(event)\n          }\n        };\n      }\n      return {\n        is: 'div',\n        class: 'gl-new-dropdown-custom-toggle',\n        listeners: {\n          keydown: event => this.onKeydown(event),\n          click: event => this.toggle(event)\n        }\n      };\n    },\n    toggleListeners() {\n      return this.toggleOptions.listeners;\n    },\n    toggleAttributes() {\n      const {\n        listeners,\n        is,\n        ...attributes\n      } = this.toggleOptions;\n      return attributes;\n    },\n    toggleComponent() {\n      return this.toggleOptions.is;\n    },\n    toggleElement() {\n      var _this$$refs$toggle;\n      return this.$refs.toggle.$el || ((_this$$refs$toggle = this.$refs.toggle) === null || _this$$refs$toggle === void 0 ? void 0 : _this$$refs$toggle.firstElementChild);\n    },\n    panelClasses() {\n      return {\n        '!gl-block': this.visible,\n        [FIXED_WIDTH_CLASS]: !this.fluidWidth,\n        'gl-fixed': this.openedYet && this.isFixed,\n        'gl-absolute': this.openedYet && !this.isFixed\n      };\n    },\n    isFixed() {\n      return this.positioningStrategy === POSITION_FIXED;\n    },\n    floatingUIConfig() {\n      const placement = dropdownPlacements[this.placement];\n      const [, alignment] = placement.split('-');\n      return {\n        placement,\n        strategy: this.positioningStrategy,\n        middleware: [offset(this.offset), autoPlacement({\n          alignment,\n          allowedPlacements: dropdownAllowedAutoPlacements[this.placement]\n        }), shift(), size({\n          apply: _ref => {\n            var _this$nonScrollableCo;\n            let {\n              availableHeight,\n              elements\n            } = _ref;\n            const contentsEl = elements.floating.querySelector(`.${GL_DROPDOWN_CONTENTS_CLASS}`);\n            if (!contentsEl) {\n              return;\n            }\n            const contentsAvailableHeight = availableHeight - ((_this$nonScrollableCo = this.nonScrollableContentHeight) !== null && _this$nonScrollableCo !== void 0 ? _this$nonScrollableCo : 0) - DEFAULT_OFFSET;\n            Object.assign(contentsEl.style, {\n              maxHeight: `${Math.max(contentsAvailableHeight, 0)}px`\n            });\n          }\n        })]\n      };\n    }\n  },\n  watch: {\n    ariaAttributes: {\n      deep: true,\n      handler(ariaAttributes) {\n        if (this.$scopedSlots.toggle) {\n          Object.keys(ariaAttributes).forEach(key => {\n            this.toggleElement.setAttribute(key, ariaAttributes[key]);\n          });\n        }\n      }\n    }\n  },\n  mounted() {\n    this.checkToggleFocusable();\n  },\n  beforeDestroy() {\n    this.stopFloating();\n  },\n  methods: {\n    checkToggleFocusable() {\n      if (!isElementFocusable(this.toggleElement) && !isElementTabbable(this.toggleElement)) {\n        logWarning(`GlDisclosureDropdown/GlCollapsibleListbox: Toggle is missing a 'tabindex' and cannot be focused.\n          Use 'a' or 'button' element instead or make sure to add 'role=\"button\"' along with 'tabindex' otherwise.`, this.$el);\n      }\n    },\n    async startFloating() {\n      this.calculateNonScrollableAreaHeight();\n      this.observer = new MutationObserver(this.calculateNonScrollableAreaHeight);\n      this.observer.observe(this.$refs.content, {\n        attributes: false,\n        childList: true,\n        subtree: true\n      });\n      this.stopAutoUpdate = autoUpdate(this.toggleElement, this.$refs.content, async () => {\n        const {\n          x,\n          y\n        } = await computePosition(this.toggleElement, this.$refs.content, this.floatingUIConfig);\n\n        /**\n         * Due to the asynchronous nature of computePosition, it's technically possible for the\n         * component to have been destroyed by the time the promise resolves. In such case, we exit\n         * early to prevent a TypeError.\n         */\n        if (!this.$refs.content) return;\n        Object.assign(this.$refs.content.style, {\n          left: `${x}px`,\n          top: `${y}px`\n        });\n      });\n    },\n    stopFloating() {\n      var _this$observer, _this$stopAutoUpdate;\n      (_this$observer = this.observer) === null || _this$observer === void 0 ? void 0 : _this$observer.disconnect();\n      (_this$stopAutoUpdate = this.stopAutoUpdate) === null || _this$stopAutoUpdate === void 0 ? void 0 : _this$stopAutoUpdate.call(this);\n    },\n    async toggle(event) {\n      if (event && this.visible) {\n        let prevented = false;\n        this.$emit(GL_DROPDOWN_BEFORE_CLOSE, {\n          originalEvent: event,\n          preventDefault() {\n            prevented = true;\n          }\n        });\n        if (prevented) return false;\n      }\n      this.visible = !this.visible;\n      if (this.visible) {\n        // The dropdown needs to be actually visible before we compute its position with Floating UI.\n        await this.$nextTick();\n        this.openedYet = true;\n        /**\n         * We wait until the dropdown's position has been computed before emitting the `shown` event.\n         * This ensures that, if the parent component attempts to focus an inner element, the dropdown\n         * is already properly placed in the page. Otherwise, the page would scroll back to the top.\n         */\n        this.startFloating();\n        this.$emit(GL_DROPDOWN_SHOWN);\n      } else {\n        this.stopFloating();\n        this.$emit(GL_DROPDOWN_HIDDEN);\n      }\n\n      // this is to check whether `toggle` was prevented or not\n      return true;\n    },\n    open() {\n      if (this.visible) {\n        return;\n      }\n      this.toggle();\n    },\n    close(event) {\n      if (!this.visible) {\n        return;\n      }\n      this.toggle(event);\n    },\n    /**\n     * Closes the dropdown and returns the focus to the toggle unless it has has moved outside\n     * of the dropdown, meaning that the consumer needed to put some other element in focus.\n     *\n     * @param {KeyboardEvent?} event The keyboard event that caused the dropdown to close.\n     */\n    async closeAndFocus(event) {\n      if (!this.visible) {\n        return;\n      }\n      const hadFocusWithin = this.$el.contains(document.activeElement);\n      const hasToggled = await this.toggle(event);\n      if (!hadFocusWithin) {\n        return;\n      }\n      if (hasToggled) {\n        this.focusToggle();\n      }\n    },\n    focusToggle() {\n      this.toggleElement.focus();\n    },\n    onKeydown(event) {\n      const {\n        code,\n        target: {\n          tagName\n        }\n      } = event;\n      let toggleOnEnter = true;\n      let toggleOnSpace = true;\n      if (tagName === 'BUTTON') {\n        toggleOnEnter = false;\n        toggleOnSpace = false;\n      } else if (tagName === 'A') {\n        toggleOnEnter = false;\n      }\n      if (code === ENTER && toggleOnEnter || code === SPACE && toggleOnSpace) {\n        this.toggle(event);\n      }\n      if (code === ARROW_DOWN) {\n        this.$emit(GL_DROPDOWN_FOCUS_CONTENT, event);\n      }\n    },\n    calculateNonScrollableAreaHeight() {\n      var _this$$refs$content;\n      const scrollableArea = (_this$$refs$content = this.$refs.content) === null || _this$$refs$content === void 0 ? void 0 : _this$$refs$content.querySelector(`.${GL_DROPDOWN_CONTENTS_CLASS}`);\n      if (!scrollableArea) return;\n      const floatingElementBoundingBox = this.$refs.content.getBoundingClientRect();\n      const scrollableAreaBoundingBox = scrollableArea.getBoundingClientRect();\n      this.nonScrollableContentHeight = floatingElementBoundingBox.height - scrollableAreaBoundingBox.height;\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('div',{directives:[{name:\"outside\",rawName:\"v-outside.click.focusin\",value:(_vm.close),expression:\"close\",modifiers:{\"click\":true,\"focusin\":true}}],class:[_vm.$options.BASE_DROPDOWN_CLASS, { '!gl-block': _vm.block }]},[_c(_vm.toggleComponent,_vm._g(_vm._b({ref:\"toggle\",tag:\"component\",attrs:{\"id\":_vm.toggleId,\"data-testid\":\"base-dropdown-toggle\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }$event.stopPropagation();$event.preventDefault();return _vm.close.apply(null, arguments)}}},'component',_vm.toggleAttributes,false),_vm.toggleListeners),[_vm._t(\"toggle\",function(){return [_c('span',{staticClass:\"gl-new-dropdown-button-text\",class:{ 'gl-sr-only': _vm.textSrOnly }},[_vm._v(\"\\n        \"+_vm._s(_vm.toggleText)+\"\\n      \")]),_vm._v(\" \"),(!_vm.noCaret)?_c('gl-icon',{staticClass:\"gl-button-icon gl-new-dropdown-chevron\",attrs:{\"name\":\"chevron-down\"}}):_vm._e()]})],2),_vm._v(\" \"),_c('div',{ref:\"content\",staticClass:\"gl-new-dropdown-panel\",class:_vm.panelClasses,attrs:{\"id\":_vm.baseDropdownId,\"data-testid\":\"base-dropdown-menu\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }$event.stopPropagation();$event.preventDefault();return _vm.closeAndFocus.apply(null, arguments)}}},[_c('div',{staticClass:\"gl-new-dropdown-inner\"},[_vm._t(\"default\")],2)])],1)};\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__;\nexport { BASE_DROPDOWN_CLASS };\n","const FIXED_WIDTH_CLASS = '!gl-w-31';\nconst DEFAULT_OFFSET = 4;\n\nexport { DEFAULT_OFFSET, FIXED_WIDTH_CLASS };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n  let {\n    reference,\n    floating\n  } = _ref;\n  const sideAxis = getSideAxis(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const alignLength = getAxisLength(alignmentAxis);\n  const side = getSide(placement);\n  const isVertical = sideAxis === 'y';\n  const commonX = reference.x + reference.width / 2 - floating.width / 2;\n  const commonY = reference.y + reference.height / 2 - floating.height / 2;\n  const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n  let coords;\n  switch (side) {\n    case 'top':\n      coords = {\n        x: commonX,\n        y: reference.y - floating.height\n      };\n      break;\n    case 'bottom':\n      coords = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n    case 'right':\n      coords = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n    case 'left':\n      coords = {\n        x: reference.x - floating.width,\n        y: commonY\n      };\n      break;\n    default:\n      coords = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n  switch (getAlignment(placement)) {\n    case 'start':\n      coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n    case 'end':\n      coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n  }\n  return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform\n  } = config;\n  const validMiddleware = middleware.filter(Boolean);\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n  let rects = await platform.getElementRects({\n    reference,\n    floating,\n    strategy\n  });\n  let {\n    x,\n    y\n  } = computeCoordsFromPlacement(rects, placement, rtl);\n  let statefulPlacement = placement;\n  let middlewareData = {};\n  let resetCount = 0;\n  for (let i = 0; i < validMiddleware.length; i++) {\n    const {\n      name,\n      fn\n    } = validMiddleware[i];\n    const {\n      x: nextX,\n      y: nextY,\n      data,\n      reset\n    } = await fn({\n      x,\n      y,\n      initialPlacement: placement,\n      placement: statefulPlacement,\n      strategy,\n      middlewareData,\n      rects,\n      platform,\n      elements: {\n        reference,\n        floating\n      }\n    });\n    x = nextX != null ? nextX : x;\n    y = nextY != null ? nextY : y;\n    middlewareData = {\n      ...middlewareData,\n      [name]: {\n        ...middlewareData[name],\n        ...data\n      }\n    };\n    if (reset && resetCount <= 50) {\n      resetCount++;\n      if (typeof reset === 'object') {\n        if (reset.placement) {\n          statefulPlacement = reset.placement;\n        }\n        if (reset.rects) {\n          rects = reset.rects === true ? await platform.getElementRects({\n            reference,\n            floating,\n            strategy\n          }) : reset.rects;\n        }\n        ({\n          x,\n          y\n        } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n      }\n      i = -1;\n    }\n  }\n  return {\n    x,\n    y,\n    placement: statefulPlacement,\n    strategy,\n    middlewareData\n  };\n};\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n  var _await$platform$isEle;\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    x,\n    y,\n    platform,\n    rects,\n    elements,\n    strategy\n  } = state;\n  const {\n    boundary = 'clippingAncestors',\n    rootBoundary = 'viewport',\n    elementContext = 'floating',\n    altBoundary = false,\n    padding = 0\n  } = evaluate(options, state);\n  const paddingObject = getPaddingObject(padding);\n  const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n  const element = elements[altBoundary ? altContext : elementContext];\n  const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n    element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n    boundary,\n    rootBoundary,\n    strategy\n  }));\n  const rect = elementContext === 'floating' ? {\n    x,\n    y,\n    width: rects.floating.width,\n    height: rects.floating.height\n  } : rects.reference;\n  const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n  const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n    x: 1,\n    y: 1\n  } : {\n    x: 1,\n    y: 1\n  };\n  const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  }) : rect);\n  return {\n    top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n    bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n    left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n    right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n  };\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n  name: 'arrow',\n  options,\n  async fn(state) {\n    const {\n      x,\n      y,\n      placement,\n      rects,\n      platform,\n      elements,\n      middlewareData\n    } = state;\n    // Since `element` is required, we don't Partial<> the type.\n    const {\n      element,\n      padding = 0\n    } = evaluate(options, state) || {};\n    if (element == null) {\n      return {};\n    }\n    const paddingObject = getPaddingObject(padding);\n    const coords = {\n      x,\n      y\n    };\n    const axis = getAlignmentAxis(placement);\n    const length = getAxisLength(axis);\n    const arrowDimensions = await platform.getDimensions(element);\n    const isYAxis = axis === 'y';\n    const minProp = isYAxis ? 'top' : 'left';\n    const maxProp = isYAxis ? 'bottom' : 'right';\n    const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n    const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n    const startDiff = coords[axis] - rects.reference[axis];\n    const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n    let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n    // DOM platform can return `window` as the `offsetParent`.\n    if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n      clientSize = elements.floating[clientProp] || rects.floating[length];\n    }\n    const centerToReference = endDiff / 2 - startDiff / 2;\n\n    // If the padding is large enough that it causes the arrow to no longer be\n    // centered, modify the padding so that it is centered.\n    const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n    const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n    const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n    // Make sure the arrow doesn't overflow the floating element if the center\n    // point is outside the floating element's bounds.\n    const min$1 = minPadding;\n    const max = clientSize - arrowDimensions[length] - maxPadding;\n    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n    const offset = clamp(min$1, center, max);\n\n    // If the reference is small enough that the arrow's padding causes it to\n    // to point to nothing for an aligned placement, adjust the offset of the\n    // floating element itself. To ensure `shift()` continues to take action,\n    // a single reset is performed when this is true.\n    const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n    const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n    return {\n      [axis]: coords[axis] + alignmentOffset,\n      data: {\n        [axis]: offset,\n        centerOffset: center - offset - alignmentOffset,\n        ...(shouldAddOffset && {\n          alignmentOffset\n        })\n      },\n      reset: shouldAddOffset\n    };\n  }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n  const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n  return allowedPlacementsSortedByAlignment.filter(placement => {\n    if (alignment) {\n      return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n    }\n    return true;\n  });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'autoPlacement',\n    options,\n    async fn(state) {\n      var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n      const {\n        rects,\n        middlewareData,\n        placement,\n        platform,\n        elements\n      } = state;\n      const {\n        crossAxis = false,\n        alignment,\n        allowedPlacements = placements,\n        autoAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n      const currentPlacement = placements$1[currentIndex];\n      if (currentPlacement == null) {\n        return {};\n      }\n      const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n      // Make `computeCoords` start from the right place.\n      if (placement !== currentPlacement) {\n        return {\n          reset: {\n            placement: placements$1[0]\n          }\n        };\n      }\n      const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n      const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n        placement: currentPlacement,\n        overflows: currentOverflows\n      }];\n      const nextPlacement = placements$1[currentIndex + 1];\n\n      // There are more placements to check.\n      if (nextPlacement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: nextPlacement\n          }\n        };\n      }\n      const placementsSortedByMostSpace = allOverflows.map(d => {\n        const alignment = getAlignment(d.placement);\n        return [d.placement, alignment && crossAxis ?\n        // Check along the mainAxis and main crossAxis side.\n        d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n        // Check only the mainAxis.\n        d.overflows[0], d.overflows];\n      }).sort((a, b) => a[1] - b[1]);\n      const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n      // Aligned placements should not check their opposite crossAxis\n      // side.\n      getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n      const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n      if (resetPlacement !== placement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: resetPlacement\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'flip',\n    options,\n    async fn(state) {\n      var _middlewareData$arrow, _middlewareData$flip;\n      const {\n        placement,\n        middlewareData,\n        rects,\n        initialPlacement,\n        platform,\n        elements\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true,\n        fallbackPlacements: specifiedFallbackPlacements,\n        fallbackStrategy = 'bestFit',\n        fallbackAxisSideDirection = 'none',\n        flipAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n\n      // If a reset by the arrow was caused due to an alignment offset being\n      // added, we should skip any logic now since `flip()` has already done its\n      // work.\n      // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n      if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      const side = getSide(placement);\n      const initialSideAxis = getSideAxis(initialPlacement);\n      const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n      const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n      const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n      const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n      if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n        fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n      }\n      const placements = [initialPlacement, ...fallbackPlacements];\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const overflows = [];\n      let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n      if (checkMainAxis) {\n        overflows.push(overflow[side]);\n      }\n      if (checkCrossAxis) {\n        const sides = getAlignmentSides(placement, rects, rtl);\n        overflows.push(overflow[sides[0]], overflow[sides[1]]);\n      }\n      overflowsData = [...overflowsData, {\n        placement,\n        overflows\n      }];\n\n      // One or more sides is overflowing.\n      if (!overflows.every(side => side <= 0)) {\n        var _middlewareData$flip2, _overflowsData$filter;\n        const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n        const nextPlacement = placements[nextIndex];\n        if (nextPlacement) {\n          // Try next placement and re-run the lifecycle.\n          return {\n            data: {\n              index: nextIndex,\n              overflows: overflowsData\n            },\n            reset: {\n              placement: nextPlacement\n            }\n          };\n        }\n\n        // First, find the candidates that fit on the mainAxis side of overflow,\n        // then find the placement that fits the best on the main crossAxis side.\n        let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n        // Otherwise fallback.\n        if (!resetPlacement) {\n          switch (fallbackStrategy) {\n            case 'bestFit':\n              {\n                var _overflowsData$filter2;\n                const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n                  if (hasFallbackAxisSideDirection) {\n                    const currentSideAxis = getSideAxis(d.placement);\n                    return currentSideAxis === initialSideAxis ||\n                    // Create a bias to the `y` side axis due to horizontal\n                    // reading directions favoring greater width.\n                    currentSideAxis === 'y';\n                  }\n                  return true;\n                }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n                if (placement) {\n                  resetPlacement = placement;\n                }\n                break;\n              }\n            case 'initialPlacement':\n              resetPlacement = initialPlacement;\n              break;\n          }\n        }\n        if (placement !== resetPlacement) {\n          return {\n            reset: {\n              placement: resetPlacement\n            }\n          };\n        }\n      }\n      return {};\n    }\n  };\n};\n\nfunction getSideOffsets(overflow, rect) {\n  return {\n    top: overflow.top - rect.height,\n    right: overflow.right - rect.width,\n    bottom: overflow.bottom - rect.height,\n    left: overflow.left - rect.width\n  };\n}\nfunction isAnySideFullyClipped(overflow) {\n  return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'hide',\n    options,\n    async fn(state) {\n      const {\n        rects\n      } = state;\n      const {\n        strategy = 'referenceHidden',\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      switch (strategy) {\n        case 'referenceHidden':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              elementContext: 'reference'\n            });\n            const offsets = getSideOffsets(overflow, rects.reference);\n            return {\n              data: {\n                referenceHiddenOffsets: offsets,\n                referenceHidden: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        case 'escaped':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              altBoundary: true\n            });\n            const offsets = getSideOffsets(overflow, rects.floating);\n            return {\n              data: {\n                escapedOffsets: offsets,\n                escaped: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        default:\n          {\n            return {};\n          }\n      }\n    }\n  };\n};\n\nfunction getBoundingRect(rects) {\n  const minX = min(...rects.map(rect => rect.left));\n  const minY = min(...rects.map(rect => rect.top));\n  const maxX = max(...rects.map(rect => rect.right));\n  const maxY = max(...rects.map(rect => rect.bottom));\n  return {\n    x: minX,\n    y: minY,\n    width: maxX - minX,\n    height: maxY - minY\n  };\n}\nfunction getRectsByLine(rects) {\n  const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n  const groups = [];\n  let prevRect = null;\n  for (let i = 0; i < sortedRects.length; i++) {\n    const rect = sortedRects[i];\n    if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n      groups.push([rect]);\n    } else {\n      groups[groups.length - 1].push(rect);\n    }\n    prevRect = rect;\n  }\n  return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'inline',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        elements,\n        rects,\n        platform,\n        strategy\n      } = state;\n      // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n      // ClientRect's bounds, despite the event listener being triggered. A\n      // padding of 2 seems to handle this issue.\n      const {\n        padding = 2,\n        x,\n        y\n      } = evaluate(options, state);\n      const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n      const clientRects = getRectsByLine(nativeClientRects);\n      const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n      const paddingObject = getPaddingObject(padding);\n      function getBoundingClientRect() {\n        // There are two rects and they are disjoined.\n        if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n          // Find the first rect in which the point is fully inside.\n          return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n        }\n\n        // There are 2 or more connected rects.\n        if (clientRects.length >= 2) {\n          if (getSideAxis(placement) === 'y') {\n            const firstRect = clientRects[0];\n            const lastRect = clientRects[clientRects.length - 1];\n            const isTop = getSide(placement) === 'top';\n            const top = firstRect.top;\n            const bottom = lastRect.bottom;\n            const left = isTop ? firstRect.left : lastRect.left;\n            const right = isTop ? firstRect.right : lastRect.right;\n            const width = right - left;\n            const height = bottom - top;\n            return {\n              top,\n              bottom,\n              left,\n              right,\n              width,\n              height,\n              x: left,\n              y: top\n            };\n          }\n          const isLeftSide = getSide(placement) === 'left';\n          const maxRight = max(...clientRects.map(rect => rect.right));\n          const minLeft = min(...clientRects.map(rect => rect.left));\n          const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n          const top = measureRects[0].top;\n          const bottom = measureRects[measureRects.length - 1].bottom;\n          const left = minLeft;\n          const right = maxRight;\n          const width = right - left;\n          const height = bottom - top;\n          return {\n            top,\n            bottom,\n            left,\n            right,\n            width,\n            height,\n            x: left,\n            y: top\n          };\n        }\n        return fallback;\n      }\n      const resetRects = await platform.getElementRects({\n        reference: {\n          getBoundingClientRect\n        },\n        floating: elements.floating,\n        strategy\n      });\n      if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n        return {\n          reset: {\n            rects: resetRects\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n  const {\n    placement,\n    platform,\n    elements\n  } = state;\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n  const side = getSide(placement);\n  const alignment = getAlignment(placement);\n  const isVertical = getSideAxis(placement) === 'y';\n  const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\n  const crossAxisMulti = rtl && isVertical ? -1 : 1;\n  const rawValue = evaluate(options, state);\n\n  // eslint-disable-next-line prefer-const\n  let {\n    mainAxis,\n    crossAxis,\n    alignmentAxis\n  } = typeof rawValue === 'number' ? {\n    mainAxis: rawValue,\n    crossAxis: 0,\n    alignmentAxis: null\n  } : {\n    mainAxis: rawValue.mainAxis || 0,\n    crossAxis: rawValue.crossAxis || 0,\n    alignmentAxis: rawValue.alignmentAxis\n  };\n  if (alignment && typeof alignmentAxis === 'number') {\n    crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n  }\n  return isVertical ? {\n    x: crossAxis * crossAxisMulti,\n    y: mainAxis * mainAxisMulti\n  } : {\n    x: mainAxis * mainAxisMulti,\n    y: crossAxis * crossAxisMulti\n  };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n  if (options === void 0) {\n    options = 0;\n  }\n  return {\n    name: 'offset',\n    options,\n    async fn(state) {\n      var _middlewareData$offse, _middlewareData$arrow;\n      const {\n        x,\n        y,\n        placement,\n        middlewareData\n      } = state;\n      const diffCoords = await convertValueToCoords(state, options);\n\n      // If the placement is the same and the arrow caused an alignment offset\n      // then we don't need to change the positioning coordinates.\n      if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      return {\n        x: x + diffCoords.x,\n        y: y + diffCoords.y,\n        data: {\n          ...diffCoords,\n          placement\n        }\n      };\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'shift',\n    options,\n    async fn(state) {\n      const {\n        x,\n        y,\n        placement\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = false,\n        limiter = {\n          fn: _ref => {\n            let {\n              x,\n              y\n            } = _ref;\n            return {\n              x,\n              y\n            };\n          }\n        },\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const crossAxis = getSideAxis(getSide(placement));\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      if (checkMainAxis) {\n        const minSide = mainAxis === 'y' ? 'top' : 'left';\n        const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n        const min = mainAxisCoord + overflow[minSide];\n        const max = mainAxisCoord - overflow[maxSide];\n        mainAxisCoord = clamp(min, mainAxisCoord, max);\n      }\n      if (checkCrossAxis) {\n        const minSide = crossAxis === 'y' ? 'top' : 'left';\n        const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n        const min = crossAxisCoord + overflow[minSide];\n        const max = crossAxisCoord - overflow[maxSide];\n        crossAxisCoord = clamp(min, crossAxisCoord, max);\n      }\n      const limitedCoords = limiter.fn({\n        ...state,\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      });\n      return {\n        ...limitedCoords,\n        data: {\n          x: limitedCoords.x - x,\n          y: limitedCoords.y - y,\n          enabled: {\n            [mainAxis]: checkMainAxis,\n            [crossAxis]: checkCrossAxis\n          }\n        }\n      };\n    }\n  };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    options,\n    fn(state) {\n      const {\n        x,\n        y,\n        placement,\n        rects,\n        middlewareData\n      } = state;\n      const {\n        offset = 0,\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const crossAxis = getSideAxis(placement);\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      const rawOffset = evaluate(offset, state);\n      const computedOffset = typeof rawOffset === 'number' ? {\n        mainAxis: rawOffset,\n        crossAxis: 0\n      } : {\n        mainAxis: 0,\n        crossAxis: 0,\n        ...rawOffset\n      };\n      if (checkMainAxis) {\n        const len = mainAxis === 'y' ? 'height' : 'width';\n        const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n        const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n        if (mainAxisCoord < limitMin) {\n          mainAxisCoord = limitMin;\n        } else if (mainAxisCoord > limitMax) {\n          mainAxisCoord = limitMax;\n        }\n      }\n      if (checkCrossAxis) {\n        var _middlewareData$offse, _middlewareData$offse2;\n        const len = mainAxis === 'y' ? 'width' : 'height';\n        const isOriginSide = ['top', 'left'].includes(getSide(placement));\n        const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n        const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n        if (crossAxisCoord < limitMin) {\n          crossAxisCoord = limitMin;\n        } else if (crossAxisCoord > limitMax) {\n          crossAxisCoord = limitMax;\n        }\n      }\n      return {\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      };\n    }\n  };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'size',\n    options,\n    async fn(state) {\n      var _state$middlewareData, _state$middlewareData2;\n      const {\n        placement,\n        rects,\n        platform,\n        elements\n      } = state;\n      const {\n        apply = () => {},\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const side = getSide(placement);\n      const alignment = getAlignment(placement);\n      const isYAxis = getSideAxis(placement) === 'y';\n      const {\n        width,\n        height\n      } = rects.floating;\n      let heightSide;\n      let widthSide;\n      if (side === 'top' || side === 'bottom') {\n        heightSide = side;\n        widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n      } else {\n        widthSide = side;\n        heightSide = alignment === 'end' ? 'top' : 'bottom';\n      }\n      const maximumClippingHeight = height - overflow.top - overflow.bottom;\n      const maximumClippingWidth = width - overflow.left - overflow.right;\n      const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n      const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n      const noShift = !state.middlewareData.shift;\n      let availableHeight = overflowAvailableHeight;\n      let availableWidth = overflowAvailableWidth;\n      if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n        availableWidth = maximumClippingWidth;\n      }\n      if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n        availableHeight = maximumClippingHeight;\n      }\n      if (noShift && !alignment) {\n        const xMin = max(overflow.left, 0);\n        const xMax = max(overflow.right, 0);\n        const yMin = max(overflow.top, 0);\n        const yMax = max(overflow.bottom, 0);\n        if (isYAxis) {\n          availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n        } else {\n          availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n        }\n      }\n      await apply({\n        ...state,\n        availableWidth,\n        availableHeight\n      });\n      const nextDimensions = await platform.getDimensions(elements.floating);\n      if (width !== nextDimensions.width || height !== nextDimensions.height) {\n        return {\n          reset: {\n            rects: true\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","import { __, s__ } from '~/locale';\nimport { DOCS_URL_IN_EE_DIR } from 'jh_else_ce/lib/utils/url_utility';\n\nexport const COMPARE_OPTIONS_INPUT_NAME = 'straight';\nexport const COMPARE_OPTIONS = [\n  { value: false, text: s__('CompareRevisions|Only incoming changes from source') },\n  { value: true, text: s__('CompareRevisions|Include changes to target since source was created') },\n];\n\nexport const I18N = {\n  title: s__('CompareRevisions|Compare revisions'),\n  subtitle: s__(\n    'CompareRevisions|Changes are shown as if the %{boldStart}source%{boldEnd} revision was being merged into the %{boldStart}target%{boldEnd} revision. %{linkStart}Learn more about comparing revisions.%{linkEnd}',\n  ),\n  source: __('Source'),\n  swap: s__('CompareRevisions|Swap'),\n  target: __('Target'),\n  swapRevisions: s__('CompareRevisions|Swap revisions'),\n  compare: s__('CompareRevisions|Compare'),\n  optionsLabel: s__('CompareRevisions|Show changes'),\n  viewMr: s__('CompareRevisions|View open merge request'),\n  openMr: s__('CompareRevisions|Create merge request'),\n};\n\nexport const COMPARE_REVISIONS_DOCS_URL = `${DOCS_URL_IN_EE_DIR}/user/project/repository/branches/#compare-branches`;\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"revision-card gl-min-w-0 gl-basis-1/2\"},[_c('h2',{staticClass:\"gl-mt-0 gl-text-base\"},[_vm._v(\"\\n    \"+_vm._s(_vm.revisionText)+\"\\n  \")]),_vm._v(\" \"),_c('div',{staticClass:\"gl-flex gl-flex-col gl-gap-3 sm:gl-flex-row\"},[_c('repo-dropdown',_vm._g({staticClass:\"gl-min-w-0 gl-max-w-full gl-basis-1/2\",attrs:{\"params-name\":_vm.paramsName,\"projects\":_vm.projects,\"selected-project\":_vm.selectedProject}},_vm.$listeners)),_vm._v(\" \"),_c('revision-dropdown',_vm._g({staticClass:\"gl-min-w-0 gl-max-w-full gl-basis-1/2\",attrs:{\"refs-project-path\":_vm.refsProjectPath,\"params-name\":_vm.paramsName,\"params-branch\":_vm.paramsBranch}},_vm.$listeners))],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./repo_dropdown.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./repo_dropdown.vue?vue&type=script&lang=js\"","<script>\nimport { GlCollapsibleListbox } from '@gitlab/ui';\n\nexport default {\n  components: {\n    GlCollapsibleListbox,\n  },\n  props: {\n    paramsName: {\n      type: String,\n      required: true,\n    },\n    projects: {\n      type: Array,\n      required: false,\n      default: null,\n    },\n    selectedProject: {\n      type: Object,\n      required: true,\n    },\n  },\n  data() {\n    return {\n      searchTerm: '',\n      selectedProjectId: this.selectedProject.id,\n    };\n  },\n  computed: {\n    disableRepoDropdown() {\n      return this.projects === null;\n    },\n    filteredRepos() {\n      if (this.disableRepoDropdown) return [];\n\n      const lowerCaseSearchTerm = this.searchTerm.toLowerCase();\n      return this.projects\n        .filter(({ name }) => name.toLowerCase().includes(lowerCaseSearchTerm))\n        .map((project) => ({ text: project.name, value: project.id }));\n    },\n    inputName() {\n      return `${this.paramsName}_project_id`;\n    },\n  },\n  methods: {\n    emitTargetProject(projectId) {\n      if (this.disableRepoDropdown) return;\n      const project = this.projects.find(({ id }) => id === projectId);\n      this.$emit('selectProject', { direction: this.paramsName, project });\n    },\n    onSearch(searchTerm) {\n      this.searchTerm = searchTerm;\n    },\n  },\n};\n</script>\n\n<template>\n  <div>\n    <input type=\"hidden\" :name=\"inputName\" :value=\"selectedProjectId\" />\n    <gl-collapsible-listbox\n      v-model=\"selectedProjectId\"\n      :toggle-text=\"selectedProject.name\"\n      :header-text=\"s__(`CompareRevisions|Select target project`)\"\n      class=\"gl-font-monospace\"\n      toggle-class=\"gl-min-w-0\"\n      :disabled=\"disableRepoDropdown\"\n      :items=\"filteredRepos\"\n      block\n      searchable\n      @select=\"emitTargetProject\"\n      @search=\"onSearch\"\n    />\n  </div>\n</template>\n","import { render, staticRenderFns } from \"./repo_dropdown.vue?vue&type=template&id=2e210f13\"\nimport script from \"./repo_dropdown.vue?vue&type=script&lang=js\"\nexport * from \"./repo_dropdown.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","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('input',{attrs:{\"type\":\"hidden\",\"name\":_vm.inputName},domProps:{\"value\":_vm.selectedProjectId}}),_vm._v(\" \"),_c('gl-collapsible-listbox',{staticClass:\"gl-font-monospace\",attrs:{\"toggle-text\":_vm.selectedProject.name,\"header-text\":_vm.s__(`CompareRevisions|Select target project`),\"toggle-class\":\"gl-min-w-0\",\"disabled\":_vm.disableRepoDropdown,\"items\":_vm.filteredRepos,\"block\":\"\",\"searchable\":\"\"},on:{\"select\":_vm.emitTargetProject,\"search\":_vm.onSearch},model:{value:(_vm.selectedProjectId),callback:function ($$v) {_vm.selectedProjectId=$$v},expression:\"selectedProjectId\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<script>\nimport { GlDropdown, GlDropdownItem, GlSearchBoxByType, GlDropdownSectionHeader } from '@gitlab/ui';\nimport { debounce } from 'lodash';\nimport { createAlert } from '~/alert';\nimport axios from '~/lib/utils/axios_utils';\nimport { s__ } from '~/locale';\n\nconst EMPTY_DROPDOWN_TEXT = s__('CompareRevisions|Select branch/tag');\nconst SEARCH_DEBOUNCE_MS = 300;\n\nexport default {\n  components: {\n    GlDropdown,\n    GlDropdownItem,\n    GlDropdownSectionHeader,\n    GlSearchBoxByType,\n  },\n  props: {\n    refsProjectPath: {\n      type: String,\n      required: true,\n    },\n    paramsName: {\n      type: String,\n      required: true,\n    },\n    paramsBranch: {\n      type: String,\n      required: false,\n      default: null,\n    },\n  },\n  data() {\n    return {\n      branches: [],\n      tags: [],\n      loading: true,\n      searchTerm: '',\n      selectedRevision: this.getDefaultBranch(),\n    };\n  },\n  computed: {\n    hasBranches() {\n      return Boolean(this.branches?.length);\n    },\n    hasTags() {\n      return Boolean(this.tags?.length);\n    },\n  },\n  watch: {\n    refsProjectPath(newRefsProjectPath, oldRefsProjectPath) {\n      if (newRefsProjectPath !== oldRefsProjectPath) {\n        this.fetchBranchesAndTags(true);\n      }\n    },\n    searchTerm: debounce(function debounceSearch() {\n      this.searchBranchesAndTags();\n    }, SEARCH_DEBOUNCE_MS),\n    paramsBranch(newBranch) {\n      this.setSelectedRevision(newBranch);\n    },\n  },\n  mounted() {\n    this.fetchBranchesAndTags();\n  },\n  methods: {\n    searchBranchesAndTags() {\n      return axios\n        .get(this.refsProjectPath, {\n          params: {\n            search: this.searchTerm,\n          },\n        })\n        .then(({ data }) => {\n          this.branches = data.Branches || [];\n          this.tags = data.Tags || [];\n        })\n        .catch(() => {\n          createAlert({\n            message: s__(\n              'CompareRevisions|There was an error while searching the branch/tag list. Please try again.',\n            ),\n          });\n        });\n    },\n    fetchBranchesAndTags(reset = false) {\n      this.loading = true;\n\n      if (reset) {\n        this.setSelectedRevision(this.paramsBranch);\n      }\n\n      return axios\n        .get(this.refsProjectPath)\n        .then(({ data }) => {\n          this.branches = data.Branches || [];\n          this.tags = data.Tags || [];\n        })\n        .catch(() => {\n          createAlert({\n            message: s__(\n              'CompareRevisions|There was an error while loading the branch/tag list. Please try again.',\n            ),\n          });\n        })\n        .finally(() => {\n          this.loading = false;\n        });\n    },\n    getDefaultBranch() {\n      return this.paramsBranch || EMPTY_DROPDOWN_TEXT;\n    },\n    onClick(revision) {\n      this.setSelectedRevision(revision);\n      this.$emit('selectRevision', { direction: this.paramsName, revision });\n    },\n    onSearchEnter() {\n      this.setSelectedRevision(this.searchTerm);\n    },\n    setSelectedRevision(revision) {\n      this.selectedRevision = revision || EMPTY_DROPDOWN_TEXT;\n    },\n  },\n};\n</script>\n\n<template>\n  <div :class=\"`js-compare-${paramsName}-dropdown`\">\n    <input type=\"hidden\" :name=\"paramsName\" :value=\"selectedRevision\" />\n    <gl-dropdown\n      class=\"gl-w-full gl-font-monospace\"\n      toggle-class=\"form-control compare-dropdown-toggle gl-min-w-0\"\n      :text=\"selectedRevision\"\n      :header-text=\"s__('CompareRevisions|Select Git revision')\"\n      :loading=\"loading\"\n    >\n      <template #header>\n        <gl-search-box-by-type\n          v-model.trim=\"searchTerm\"\n          :placeholder=\"s__('CompareRevisions|Filter by Git revision')\"\n          @keyup.enter=\"onSearchEnter\"\n        />\n      </template>\n      <gl-dropdown-section-header v-if=\"hasBranches\">\n        {{ s__('CompareRevisions|Branches') }}\n      </gl-dropdown-section-header>\n      <gl-dropdown-item\n        v-for=\"branch in branches\"\n        :key=\"`branch-${branch}`\"\n        is-check-item\n        :is-checked=\"selectedRevision === branch\"\n        data-testid=\"branches-dropdown-item\"\n        @click=\"onClick(branch)\"\n      >\n        {{ branch }}\n      </gl-dropdown-item>\n      <gl-dropdown-section-header v-if=\"hasTags\">\n        {{ s__('CompareRevisions|Tags') }}\n      </gl-dropdown-section-header>\n      <gl-dropdown-item\n        v-for=\"tag in tags\"\n        :key=\"`tag-${tag}`\"\n        is-check-item\n        :is-checked=\"selectedRevision === tag\"\n        data-testid=\"tags-dropdown-item\"\n        @click=\"onClick(tag)\"\n      >\n        {{ tag }}\n      </gl-dropdown-item>\n    </gl-dropdown>\n  </div>\n</template>\n","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./revision_dropdown.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./revision_dropdown.vue?vue&type=script&lang=js\"","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./revision_card.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./revision_card.vue?vue&type=script&lang=js\"","<script>\nimport RepoDropdown from './repo_dropdown.vue';\nimport RevisionDropdown from './revision_dropdown.vue';\n\nexport default {\n  components: {\n    RepoDropdown,\n    RevisionDropdown,\n  },\n  props: {\n    refsProjectPath: {\n      type: String,\n      required: true,\n    },\n    revisionText: {\n      type: String,\n      required: true,\n    },\n    paramsName: {\n      type: String,\n      required: true,\n    },\n    paramsBranch: {\n      type: String,\n      required: false,\n      default: null,\n    },\n    projects: {\n      type: Array,\n      required: false,\n      default: null,\n    },\n    selectedProject: {\n      type: Object,\n      required: true,\n    },\n  },\n};\n</script>\n\n<template>\n  <div class=\"revision-card gl-min-w-0 gl-basis-1/2\">\n    <h2 class=\"gl-mt-0 gl-text-base\">\n      {{ revisionText }}\n    </h2>\n    <div class=\"gl-flex gl-flex-col gl-gap-3 sm:gl-flex-row\">\n      <repo-dropdown\n        class=\"gl-min-w-0 gl-max-w-full gl-basis-1/2\"\n        :params-name=\"paramsName\"\n        :projects=\"projects\"\n        :selected-project=\"selectedProject\"\n        v-on=\"$listeners\"\n      />\n      <revision-dropdown\n        class=\"gl-min-w-0 gl-max-w-full gl-basis-1/2\"\n        :refs-project-path=\"refsProjectPath\"\n        :params-name=\"paramsName\"\n        :params-branch=\"paramsBranch\"\n        v-on=\"$listeners\"\n      />\n    </div>\n  </div>\n</template>\n","import { render, staticRenderFns } from \"./revision_dropdown.vue?vue&type=template&id=6d6144c2\"\nimport script from \"./revision_dropdown.vue?vue&type=script&lang=js\"\nexport * from \"./revision_dropdown.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","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{class:`js-compare-${_vm.paramsName}-dropdown`},[_c('input',{attrs:{\"type\":\"hidden\",\"name\":_vm.paramsName},domProps:{\"value\":_vm.selectedRevision}}),_vm._v(\" \"),_c('gl-dropdown',{staticClass:\"gl-w-full gl-font-monospace\",attrs:{\"toggle-class\":\"form-control compare-dropdown-toggle gl-min-w-0\",\"text\":_vm.selectedRevision,\"header-text\":_vm.s__('CompareRevisions|Select Git revision'),\"loading\":_vm.loading},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_c('gl-search-box-by-type',{attrs:{\"placeholder\":_vm.s__('CompareRevisions|Filter by Git revision')},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.onSearchEnter.apply(null, arguments)}},model:{value:(_vm.searchTerm),callback:function ($$v) {_vm.searchTerm=(typeof $$v === 'string'? $$v.trim(): $$v)},expression:\"searchTerm\"}})]},proxy:true}])},[_vm._v(\" \"),(_vm.hasBranches)?_c('gl-dropdown-section-header',[_vm._v(\"\\n      \"+_vm._s(_vm.s__('CompareRevisions|Branches'))+\"\\n    \")]):_vm._e(),_vm._v(\" \"),_vm._l((_vm.branches),function(branch){return _c('gl-dropdown-item',{key:`branch-${branch}`,attrs:{\"is-check-item\":\"\",\"is-checked\":_vm.selectedRevision === branch,\"data-testid\":\"branches-dropdown-item\"},on:{\"click\":function($event){return _vm.onClick(branch)}}},[_vm._v(\"\\n      \"+_vm._s(branch)+\"\\n    \")])}),_vm._v(\" \"),(_vm.hasTags)?_c('gl-dropdown-section-header',[_vm._v(\"\\n      \"+_vm._s(_vm.s__('CompareRevisions|Tags'))+\"\\n    \")]):_vm._e(),_vm._v(\" \"),_vm._l((_vm.tags),function(tag){return _c('gl-dropdown-item',{key:`tag-${tag}`,attrs:{\"is-check-item\":\"\",\"is-checked\":_vm.selectedRevision === tag,\"data-testid\":\"tags-dropdown-item\"},on:{\"click\":function($event){return _vm.onClick(tag)}}},[_vm._v(\"\\n      \"+_vm._s(tag)+\"\\n    \")])})],2)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./revision_card.vue?vue&type=template&id=ec1be9b6\"\nimport script from \"./revision_card.vue?vue&type=script&lang=js\"\nexport * from \"./revision_card.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./app.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./app.vue?vue&type=script&lang=js\"","<script>\nimport {\n  GlButton,\n  GlFormGroup,\n  GlFormRadioGroup,\n  GlIcon,\n  GlTooltipDirective,\n  GlSprintf,\n  GlLink,\n} from '@gitlab/ui';\nimport PageHeading from '~/vue_shared/components/page_heading.vue';\nimport csrf from '~/lib/utils/csrf';\nimport { joinPaths } from '~/lib/utils/url_utility';\nimport {\n  I18N,\n  COMPARE_OPTIONS,\n  COMPARE_REVISIONS_DOCS_URL,\n  COMPARE_OPTIONS_INPUT_NAME,\n} from '../constants';\nimport RevisionCard from './revision_card.vue';\n\nexport default {\n  csrf,\n  components: {\n    RevisionCard,\n    GlButton,\n    GlFormRadioGroup,\n    GlFormGroup,\n    GlIcon,\n    GlLink,\n    GlSprintf,\n    PageHeading,\n  },\n  directives: {\n    GlTooltip: GlTooltipDirective,\n  },\n  props: {\n    projectCompareIndexPath: {\n      type: String,\n      required: true,\n    },\n    sourceProjectRefsPath: {\n      type: String,\n      required: true,\n    },\n    targetProjectRefsPath: {\n      type: String,\n      required: true,\n    },\n    paramsFrom: {\n      type: String,\n      required: false,\n      default: null,\n    },\n    paramsTo: {\n      type: String,\n      required: false,\n      default: null,\n    },\n    projectMergeRequestPath: {\n      type: String,\n      required: true,\n    },\n    createMrPath: {\n      type: String,\n      required: true,\n    },\n    sourceProject: {\n      type: Object,\n      required: true,\n    },\n    targetProject: {\n      type: Object,\n      required: true,\n    },\n    projects: {\n      type: Array,\n      required: true,\n    },\n    straight: {\n      type: Boolean,\n      required: true,\n    },\n  },\n  data() {\n    return {\n      from: {\n        projects: this.projects,\n        selectedProject: this.targetProject,\n        revision: this.paramsFrom,\n        refsProjectPath: this.targetProjectRefsPath,\n      },\n      to: {\n        selectedProject: this.sourceProject,\n        revision: this.paramsTo,\n        refsProjectPath: this.sourceProjectRefsPath,\n      },\n      isStraight: this.straight,\n    };\n  },\n  methods: {\n    onSubmit() {\n      this.$refs.form.submit();\n    },\n    onSelectProject({ direction, project }) {\n      const refsPath = joinPaths(gon.relative_url_root || '', `/${project.name}`, '/refs');\n      // direction is either 'from' or 'to'\n      this[direction].refsProjectPath = refsPath;\n      this[direction].selectedProject = project;\n    },\n    onSelectRevision({ direction, revision }) {\n      this[direction].revision = revision; // direction is either 'from' or 'to'\n    },\n    onSwapRevision() {\n      [this.from, this.to] = [this.to, this.from]; // swaps 'from' and 'to'\n    },\n  },\n  i18n: I18N,\n  compareOptions: COMPARE_OPTIONS,\n  docsLink: COMPARE_REVISIONS_DOCS_URL,\n  inputName: COMPARE_OPTIONS_INPUT_NAME,\n};\n</script>\n\n<template>\n  <form ref=\"form\" class=\"js-signature-container\" method=\"POST\" :action=\"projectCompareIndexPath\">\n    <input :value=\"$options.csrf.token\" type=\"hidden\" name=\"authenticity_token\" />\n    <page-heading :heading=\"$options.i18n.title\">\n      <template #description>\n        <gl-sprintf :message=\"$options.i18n.subtitle\">\n          <template #bold=\"{ content }\">\n            <strong>{{ content }}</strong>\n          </template>\n          <template #link=\"{ content }\">\n            <gl-link target=\"_blank\" :href=\"$options.docsLink\" data-testid=\"help-link\">{{\n              content\n            }}</gl-link>\n          </template>\n        </gl-sprintf>\n      </template>\n    </page-heading>\n    <div class=\"compare-revision-cards gl-items-center lg:gl-flex lg:gl-flex-row\">\n      <revision-card\n        data-testid=\"sourceRevisionCard\"\n        :refs-project-path=\"to.refsProjectPath\"\n        :revision-text=\"$options.i18n.source\"\n        params-name=\"to\"\n        :params-branch=\"to.revision\"\n        :projects=\"to.projects\"\n        :selected-project=\"to.selectedProject\"\n        @selectProject=\"onSelectProject\"\n        @selectRevision=\"onSelectRevision\"\n      />\n      <gl-button\n        v-gl-tooltip=\"$options.i18n.swapRevisions\"\n        class=\"gl-mx-3 gl-hidden gl-self-end md:gl-flex\"\n        :aria-label=\"$options.i18n.swap\"\n        data-testid=\"swapRevisionsButton\"\n        category=\"tertiary\"\n        @click=\"onSwapRevision\"\n      >\n        <gl-icon name=\"substitute\" />\n      </gl-button>\n      <gl-button\n        v-gl-tooltip=\"$options.i18n.swapRevisions\"\n        class=\"gl-my-5 gl-flex gl-self-end md:gl-hidden\"\n        @click=\"onSwapRevision\"\n      >\n        {{ $options.i18n.swap }}\n      </gl-button>\n      <revision-card\n        data-testid=\"targetRevisionCard\"\n        :refs-project-path=\"from.refsProjectPath\"\n        :revision-text=\"$options.i18n.target\"\n        params-name=\"from\"\n        :params-branch=\"from.revision\"\n        :projects=\"from.projects\"\n        :selected-project=\"from.selectedProject\"\n        @selectProject=\"onSelectProject\"\n        @selectRevision=\"onSelectRevision\"\n      />\n    </div>\n    <gl-form-group :label=\"$options.i18n.optionsLabel\" class=\"gl-mt-4\">\n      <gl-form-radio-group\n        v-model=\"isStraight\"\n        :options=\"$options.compareOptions\"\n        :name=\"$options.inputName\"\n        required\n      />\n    </gl-form-group>\n    <div class=\"gl-flex gl-gap-3 gl-pb-4\">\n      <gl-button\n        category=\"primary\"\n        variant=\"confirm\"\n        data-testid=\"compare-button\"\n        @click=\"onSubmit\"\n      >\n        {{ $options.i18n.compare }}\n      </gl-button>\n      <gl-button\n        v-if=\"projectMergeRequestPath\"\n        :href=\"projectMergeRequestPath\"\n        data-testid=\"projectMrButton\"\n      >\n        {{ $options.i18n.viewMr }}\n      </gl-button>\n      <gl-button v-else-if=\"createMrPath\" :href=\"createMrPath\" data-testid=\"createMrButton\">\n        {{ $options.i18n.openMr }}\n      </gl-button>\n    </div>\n  </form>\n</template>\n","import { render, staticRenderFns } from \"./app.vue?vue&type=template&id=0fce191d\"\nimport script from \"./app.vue?vue&type=script&lang=js\"\nexport * from \"./app.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","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('form',{ref:\"form\",staticClass:\"js-signature-container\",attrs:{\"method\":\"POST\",\"action\":_vm.projectCompareIndexPath}},[_c('input',{attrs:{\"type\":\"hidden\",\"name\":\"authenticity_token\"},domProps:{\"value\":_vm.$options.csrf.token}}),_vm._v(\" \"),_c('page-heading',{attrs:{\"heading\":_vm.$options.i18n.title},scopedSlots:_vm._u([{key:\"description\",fn:function(){return [_c('gl-sprintf',{attrs:{\"message\":_vm.$options.i18n.subtitle},scopedSlots:_vm._u([{key:\"bold\",fn:function({ content }){return [_c('strong',[_vm._v(_vm._s(content))])]}},{key:\"link\",fn:function({ content }){return [_c('gl-link',{attrs:{\"target\":\"_blank\",\"href\":_vm.$options.docsLink,\"data-testid\":\"help-link\"}},[_vm._v(_vm._s(content))])]}}])})]},proxy:true}])}),_vm._v(\" \"),_c('div',{staticClass:\"compare-revision-cards gl-items-center lg:gl-flex lg:gl-flex-row\"},[_c('revision-card',{attrs:{\"data-testid\":\"sourceRevisionCard\",\"refs-project-path\":_vm.to.refsProjectPath,\"revision-text\":_vm.$options.i18n.source,\"params-name\":\"to\",\"params-branch\":_vm.to.revision,\"projects\":_vm.to.projects,\"selected-project\":_vm.to.selectedProject},on:{\"selectProject\":_vm.onSelectProject,\"selectRevision\":_vm.onSelectRevision}}),_vm._v(\" \"),_c('gl-button',{directives:[{name:\"gl-tooltip\",rawName:\"v-gl-tooltip\",value:(_vm.$options.i18n.swapRevisions),expression:\"$options.i18n.swapRevisions\"}],staticClass:\"gl-mx-3 gl-hidden gl-self-end md:gl-flex\",attrs:{\"aria-label\":_vm.$options.i18n.swap,\"data-testid\":\"swapRevisionsButton\",\"category\":\"tertiary\"},on:{\"click\":_vm.onSwapRevision}},[_c('gl-icon',{attrs:{\"name\":\"substitute\"}})],1),_vm._v(\" \"),_c('gl-button',{directives:[{name:\"gl-tooltip\",rawName:\"v-gl-tooltip\",value:(_vm.$options.i18n.swapRevisions),expression:\"$options.i18n.swapRevisions\"}],staticClass:\"gl-my-5 gl-flex gl-self-end md:gl-hidden\",on:{\"click\":_vm.onSwapRevision}},[_vm._v(\"\\n      \"+_vm._s(_vm.$options.i18n.swap)+\"\\n    \")]),_vm._v(\" \"),_c('revision-card',{attrs:{\"data-testid\":\"targetRevisionCard\",\"refs-project-path\":_vm.from.refsProjectPath,\"revision-text\":_vm.$options.i18n.target,\"params-name\":\"from\",\"params-branch\":_vm.from.revision,\"projects\":_vm.from.projects,\"selected-project\":_vm.from.selectedProject},on:{\"selectProject\":_vm.onSelectProject,\"selectRevision\":_vm.onSelectRevision}})],1),_vm._v(\" \"),_c('gl-form-group',{staticClass:\"gl-mt-4\",attrs:{\"label\":_vm.$options.i18n.optionsLabel}},[_c('gl-form-radio-group',{attrs:{\"options\":_vm.$options.compareOptions,\"name\":_vm.$options.inputName,\"required\":\"\"},model:{value:(_vm.isStraight),callback:function ($$v) {_vm.isStraight=$$v},expression:\"isStraight\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"gl-flex gl-gap-3 gl-pb-4\"},[_c('gl-button',{attrs:{\"category\":\"primary\",\"variant\":\"confirm\",\"data-testid\":\"compare-button\"},on:{\"click\":_vm.onSubmit}},[_vm._v(\"\\n      \"+_vm._s(_vm.$options.i18n.compare)+\"\\n    \")]),_vm._v(\" \"),(_vm.projectMergeRequestPath)?_c('gl-button',{attrs:{\"href\":_vm.projectMergeRequestPath,\"data-testid\":\"projectMrButton\"}},[_vm._v(\"\\n      \"+_vm._s(_vm.$options.i18n.viewMr)+\"\\n    \")]):(_vm.createMrPath)?_c('gl-button',{attrs:{\"href\":_vm.createMrPath,\"data-testid\":\"createMrButton\"}},[_vm._v(\"\\n      \"+_vm._s(_vm.$options.i18n.openMr)+\"\\n    \")]):_vm._e()],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Vue from 'vue';\nimport { parseBoolean } from '~/lib/utils/common_utils';\nimport CompareApp from './components/app.vue';\n\nexport default function init() {\n  const el = document.getElementById('js-compare-selector');\n\n  const {\n    sourceProjectRefsPath,\n    targetProjectRefsPath,\n    paramsFrom,\n    paramsTo,\n    straight,\n    projectCompareIndexPath,\n    projectMergeRequestPath,\n    createMrPath,\n    sourceProject,\n    targetProject,\n    projectsFrom,\n  } = el.dataset;\n\n  return new Vue({\n    el,\n    components: {\n      CompareApp,\n    },\n    render(createElement) {\n      return createElement(CompareApp, {\n        props: {\n          sourceProjectRefsPath,\n          targetProjectRefsPath,\n          paramsFrom,\n          paramsTo,\n          straight: parseBoolean(straight),\n          projectCompareIndexPath,\n          projectMergeRequestPath,\n          createMrPath,\n          sourceProject: JSON.parse(sourceProject),\n          targetProject: JSON.parse(targetProject),\n          projects: JSON.parse(projectsFrom),\n        },\n      });\n    },\n  });\n}\n","import GlIcon from '../../icon/icon';\nimport { ENTER, SPACE } from '../constants';\nimport { stopEvent } from '../../../../utils/utils';\nimport __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';\n\nvar script = {\n  name: 'GlListboxItem',\n  components: {\n    GlIcon\n  },\n  props: {\n    isSelected: {\n      type: Boolean,\n      default: false,\n      required: false\n    },\n    isFocused: {\n      type: Boolean,\n      default: false,\n      required: false\n    },\n    isCheckCentered: {\n      type: Boolean,\n      required: false,\n      default: false\n    }\n  },\n  computed: {\n    checkedClasses() {\n      if (this.isCheckCentered) {\n        return '';\n      }\n      return 'gl-mt-3 gl-self-start';\n    }\n  },\n  methods: {\n    toggleSelection() {\n      this.$emit('select', !this.isSelected);\n    },\n    onKeydown(event) {\n      const {\n        code\n      } = event;\n      if (code === ENTER || code === SPACE) {\n        stopEvent(event);\n        this.toggleSelection();\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('li',{staticClass:\"gl-new-dropdown-item\",attrs:{\"role\":\"option\",\"tabindex\":_vm.isFocused ? 0 : -1,\"aria-selected\":_vm.isSelected},on:{\"click\":_vm.toggleSelection,\"keydown\":_vm.onKeydown}},[_c('span',{staticClass:\"gl-new-dropdown-item-content\"},[_c('gl-icon',{class:[\n        'gl-new-dropdown-item-check-icon',\n        { 'gl-invisible': !_vm.isSelected },\n        _vm.checkedClasses ],attrs:{\"name\":\"mobile-issue-close\",\"data-testid\":\"dropdown-item-checkbox\"}}),_vm._v(\" \"),_c('span',{staticClass:\"gl-new-dropdown-item-text-wrapper\"},[_vm._t(\"default\")],2)],1)])};\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"],"sourceRoot":""}