{"version":3,"sources":["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/lodash/isNil.js","webpack:////build/source/node_modules/lodash/_baseClamp.js","webpack:///./listbox/index.js","webpack:///./listbox/redirect_behavior.js","webpack:////build/source/node_modules/@gitlab/ui/dist/directives/outside/outside.js","webpack:////build/source/node_modules/@gitlab/ui/dist/components/base/new_dropdowns/constants.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/@gitlab/ui/dist/components/base/new_dropdowns/listbox/listbox_item.js"],"names":["__vue_script__","name","components","GlButton","directives","GlTooltip","props","title","type","String","required","default","tooltipContainer","validator","value","HTMLElement","__vue_component__","render","_h","this","$createElement","_self","_c","_g","rawName","container","expression","modifiers","staticClass","attrs","$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","initListbox","el","onChange","selected","placement","className","headerText","itemsString","dataset","JSON","parse","parseAttributes","Vue","data","computed","_items$find","_this","find","h","_this2","GlCollapsibleListbox","toggleText","class","on","select","selectedValue","selectedItem","from","document","querySelectorAll","href","visitUrl","callbacks","Map","activeEventTypes","lastMousedown","globalListener","event","forEach","element","callback","eventTypes","originalEvent","contains","target","includes","e","onMousedown","OutsideDirective","bind","bindings","_ref3","arg","modifiersList","Object","keys","parseBinding","has","set","eventType","addEventListener","capture","add","startListening","unbind","entry","get","eventTypesToUnbind","delete","values","removeEventListener","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","GlClearIconButton","GlIcon","model","prop","placeholder","input","$emit","methods","focusInput","$refs","focus","_vm","_v","ref","domProps","inputListeners","$event","stopPropagation","clearInput","apply","_e","textSrOnly","nameId","_t","_s","GROUP_TOP_BORDER_CLASSES","HEADER_ITEMS_BORDER_CLASSES","events","GlBaseDropdown","GlListboxItem","GlListboxGroup","GlSearchBoxByType","GlListboxSearchInput","GlLoadingIcon","GlIntersectionObserver","Number","multiple","category","primary","variant","icon","disabled","loading","toggleClass","noCaret","isCheckCentered","toggleAriaLabelledBy","listAriaLabelledBy","searchable","searching","infiniteScroll","totalItems","infiniteScrollLoading","noResultsText","searchPlaceholder","resetButtonLabel","showSelectAllButtonLabel","block","dropdownOffset","fluidWidth","positioningStrategy","strategy","startOpened","srOnlyResultsLabel","Function","selectedValues","toggleId","listboxId","nextFocusedItemIndex","searchStr","topBoundaryVisible","bottomBoundaryVisible","hasItems","listboxTag","_this$flattenedOption","findIndex","sort","showNoResultsText","showSelectAllButton","$scopedSlots","toggle","toggleClasses","hasSelection","push","footer","watch","immediate","newSelected","$nextTick","observeScroll","searchHasOptions","open","_this$scrollObserver","scrollObserver","disconnect","baseDropdown","close","groupClasses","index","_this$selectedIndices","focusSearchInput","focusItem","selectedIndices","getFocusableListItemElements","code","elements","stop","isSearchInput","matches","indexOf","focusNextItem","onSelect","_this$$refs$list","list","offset","currentIndex","nextIndex","_elements$index","searchBox","isSelected","onMultiSelect","onSingleSelect","some","closeAndFocus","searchTerm","_this$scrollObserver2","rootMargin","root","threshold","observer","IntersectionObserver","entries","_entry$target","$__visibilityProp","isIntersecting","topBoundary","bottomBoundary","observe","listboxToggleText","toggleButtonClasses","_d","$options","onShow","onHide","scopedSlots","_u","key","fn","proxy","headerId","onResetButtonClicked","onSelectAllButtonClicked","search","_k","keyCode","preventDefault","onKeydown","$$v","tag","listboxClasses","itemTag","hasHeader","_l","_b","isHighlighted","isFocused","listboxItemMoreItemsAriaAttributes","option","onIntersectionObserverAppear","hasFooter","getObserver","$_gl_intersectionHandler","$el","$_gl_intersectionObserver","unobserve","GlFormInput","inheritAttrs","borderless","clearButtonTitle","isLoading","attributes","$attrs","onInput","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","isFixed","alignment","split","middleware","allowedPlacements","dropdownArrow","_this$nonScrollableCo","availableHeight","contentsEl","floating","querySelector","contentsAvailableHeight","nonScrollableContentHeight","assign","style","maxHeight","Math","max","deep","toggleElement","setAttribute","checkToggleFocusable","stopFloating","actualPlacement","offsetConfigs","top","staticSide","rotation","bottom","left","right","calculateNonScrollableAreaHeight","MutationObserver","content","childList","subtree","stopAutoUpdate","async","result","floatingUIConfig","x","y","middlewareData","getArrowOffsets","arrow","arrowX","arrowY","toggleRect","getBoundingClientRect","contentRect","clampedArrowX","width","min","transform","_this$observer","_this$stopAutoUpdate","call","prevented","startFloating","hadFocusWithin","activeElement","hasToggled","focusToggle","tagName","toggleOnEnter","toggleOnSpace","_this$$refs$content","scrollableArea","floatingElementBoundingBox","scrollableAreaBoundingBox","height","toggleComponent","toggleAttributes","toggleListeners","panelClasses","toggleSelection","checkedClasses"],"mappings":"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","file":"redirect_listbox.7620ad18.chunk.js","sourcesContent":["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","/**\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","import { GlCollapsibleListbox } from '@gitlab/ui';\nimport Vue from 'vue';\n\nexport function parseAttributes(el) {\n const { items: itemsString, selected, placement, headerText } = el.dataset;\n\n const items = JSON.parse(itemsString);\n\n const { className } = el;\n\n return { items, selected, placement, className, headerText };\n}\n\nexport function initListbox(el, { onChange } = {}) {\n if (!el) return null;\n\n const { items, selected, placement, className, headerText } = parseAttributes(el);\n\n return new Vue({\n el,\n data() {\n return {\n selected,\n };\n },\n computed: {\n text() {\n return items.find(({ value }) => value === this.selected)?.text;\n },\n },\n render(h) {\n return h(GlCollapsibleListbox, {\n props: {\n items,\n placement,\n selected: this.selected,\n toggleText: this.text,\n headerText,\n },\n class: className,\n on: {\n select: (selectedValue) => {\n this.selected = selectedValue;\n const selectedItem = items.find(({ value }) => value === selectedValue);\n\n if (typeof onChange === 'function') {\n onChange(selectedItem);\n }\n },\n },\n });\n },\n });\n}\n","import { initListbox } from '~/listbox';\nimport { visitUrl } from '~/lib/utils/url_utility';\n\n/**\n * Instantiates GlCollapsibleListbox components with redirect behavior for tags created\n * with the `gl_redirect_listbox_tag` HAML helper.\n *\n * NOTE: Do not import this script explicitly. Using `gl_redirect_listbox_tag`\n * automatically injects the `redirect_listbox` bundle, which calls this\n * function.\n */\nexport function initRedirectListboxBehavior() {\n const elements = Array.from(document.querySelectorAll('.js-redirect-listbox'));\n\n return elements.map((el) =>\n initListbox(el, {\n onChange({ href }) {\n visitUrl(href);\n },\n }),\n );\n}\n","/**\n * Map }>\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}\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","// 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 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, ENTER } 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-divider'];\nconst GROUP_TOP_BORDER_CLASSES = ['gl-border-t-1', 'gl-border-t-solid', 'gl-border-t-dropdown-divider', '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 searchHasOptions() {\n return this.flattenedOptions.length > 0 && this.searchStr;\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 * Every time the list of items changes, and there is a search string,\n * we want to visually highlight the first item\n */\n if (this.searchHasOptions) {\n this.nextFocusedItemIndex = 0;\n } else {\n this.nextFocusedItemIndex = null;\n }\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 // eslint-disable-next-line no-console\n console.warn('When using grouped options infinite scroll can only be used on the last group.');\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\n /**\n * If the search string is not empty, highlight the first item\n */\n if (this.searchHasOptions) {\n this.nextFocusedItemIndex = 0;\n }\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 if (!this.searchHasOptions) {\n this.nextFocusedItemIndex = null;\n }\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 if (code === ENTER && isSearchInput) {\n if (this.searchHasOptions && elements.length > 0) {\n this.onSelect(this.flattenedOptions[0], true);\n }\n stop = true;\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 isHighlighted(item) {\n return this.nextFocusedItemIndex === this.flattenedOptions.indexOf(item);\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-focus-inset\",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-focus-inset\",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-highlighted\":_vm.isHighlighted(item),\"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-highlighted\":_vm.isHighlighted(option),\"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, arrow, 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, ARROW_X_MINIMUM } 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(), arrow({\n element: this.$refs.dropdownArrow\n }), 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) return;\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 getArrowOffsets(actualPlacement) {\n // Try to extract the base direction (top, bottom, left, right) from the placement\n const direction = actualPlacement === null || actualPlacement === void 0 ? void 0 : actualPlacement.split('-')[0];\n const offsetConfigs = {\n top: {\n staticSide: 'bottom',\n rotation: '225deg'\n },\n bottom: {\n staticSide: 'top',\n rotation: '45deg'\n },\n left: {\n staticSide: 'right',\n rotation: '135deg'\n },\n right: {\n staticSide: 'left',\n rotation: '315deg'\n }\n };\n return offsetConfigs[direction] || offsetConfigs.bottom;\n },\n async startFloating() {\n this.calculateNonScrollableAreaHeight();\n this.observer = new MutationObserver(this.calculateNonScrollableAreaHeight);\n this.observer.observe(this.$refs.content, {\n childList: true,\n subtree: true\n });\n this.stopAutoUpdate = autoUpdate(this.toggleElement, this.$refs.content, async () => {\n const result = 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 const {\n x,\n y,\n middlewareData,\n placement\n } = result;\n\n // Get offsets based on actual placement, not requested placement\n const {\n rotation,\n staticSide\n } = this.getArrowOffsets(placement);\n\n // Assign dropdown window position\n Object.assign(this.$refs.content.style, {\n left: `${x}px`,\n top: `${y}px`\n });\n\n // Assign arrow position\n if (middlewareData && middlewareData.arrow) {\n const {\n x: arrowX,\n y: arrowY\n } = middlewareData.arrow;\n\n /**\n * Clamp arrow X position to a minimum of 24px from the edge of the dropdown.\n * This prevents wide toggles from pushing the arrow to the very edge of the dropdown.\n */\n const toggleRect = this.toggleElement.getBoundingClientRect();\n const contentRect = this.$refs.content.getBoundingClientRect();\n const clampedArrowX = toggleRect.width > contentRect.width ? Math.min(Math.max(arrowX, ARROW_X_MINIMUM), contentRect.width - ARROW_X_MINIMUM) : arrowX;\n Object.assign(this.$refs.dropdownArrow.style, {\n left: arrowX != null ? `${clampedArrowX}px` : '',\n top: arrowY != null ? `${arrowY}px` : '',\n right: '',\n bottom: '',\n [staticSide]: '-4px',\n transform: `rotate(${rotation})`\n });\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',{ref:\"dropdownArrow\",staticClass:\"gl-new-dropdown-arrow\"}),_vm._v(\" \"),_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 = 8;\nconst ARROW_X_MINIMUM = 24;\n\nexport { ARROW_X_MINIMUM, DEFAULT_OFFSET, FIXED_WIDTH_CLASS };\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 isHighlighted: {\n type: Boolean,\n default: false,\n required: 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',{class:['gl-new-dropdown-item', { 'gl-new-dropdown-item-highlighted': _vm.isHighlighted }],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":""}