@gitlab/ui 128.14.2 → 128.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,11 +4,8 @@ var script = {
4
4
  name: 'GlAccordion',
5
5
  provide() {
6
6
  return {
7
- // temporary fix for this issue: https://gitlab.com/gitlab-org/gitlab-ui/-/merge_requests/2019#note_514671251
8
- // MR for the upstream pending: https://github.com/vuejs/apollo/pull/1153
9
- // Track removing this workaround in https://gitlab.com/gitlab-org/gitlab-ui/-/issues/3152
10
- defaultHeaderLevel: () => this.headerLevel,
11
- autoCollapse: () => this.autoCollapse
7
+ defaultHeaderLevel: this.headerLevel,
8
+ autoCollapse: this.autoCollapse
12
9
  };
13
10
  },
14
11
  props: {
@@ -70,7 +70,7 @@ var script = {
70
70
  },
71
71
  computed: {
72
72
  headerComponent() {
73
- const level = this.headerLevel || this.defaultHeaderLevel();
73
+ const level = this.headerLevel || this.defaultHeaderLevel;
74
74
  return `h${level}`;
75
75
  },
76
76
  buttonTitle() {
@@ -112,7 +112,7 @@ var script = {
112
112
  this.checkAndCollapseSiblingAccordionItems(newLocalVisible);
113
113
  },
114
114
  checkAndCollapseSiblingAccordionItems(newVisible) {
115
- if (this.autoCollapse() && newVisible) {
115
+ if (this.autoCollapse && newVisible) {
116
116
  this.$parent.$el.dispatchEvent(new CustomEvent(COLLAPSE_EVENT, {
117
117
  detail: this.accordionItemId
118
118
  }));
@@ -1,7 +1,7 @@
1
1
  import clamp from 'lodash/clamp';
2
2
  import uniqueId from 'lodash/uniqueId';
3
3
  import { logWarning, stopEvent } from '../../../../utils/utils';
4
- import { GL_DROPDOWN_SHOWN, GL_DROPDOWN_HIDDEN, GL_DROPDOWN_FOCUS_CONTENT, POSITION_ABSOLUTE, POSITION_FIXED, GL_DROPDOWN_CONTENTS_CLASS, ARROW_UP, ENTER, ARROW_DOWN, END, HOME } from '../constants';
4
+ import { GL_DROPDOWN_SHOWN, GL_DROPDOWN_HIDDEN, GL_DROPDOWN_FOCUS_CONTENT, POSITION_ABSOLUTE, POSITION_FIXED, GL_DROPDOWN_CONTENTS_CLASS, ENTER, ARROW_DOWN, ARROW_UP, END, HOME } from '../constants';
5
5
  import { buttonCategoryOptions, dropdownVariantOptions, buttonSizeOptions, dropdownPlacements } from '../../../../utils/constants';
6
6
  import GlButton from '../../button/button';
7
7
  import GlLoadingIcon from '../../loading_icon/loading_icon';
@@ -569,10 +569,10 @@ var script = {
569
569
 
570
570
  /**
571
571
  * Every time the list of items changes, and there is a search string,
572
- * we want to visually highlight the first item
572
+ * we want to visually highlight the first enabled item
573
573
  */
574
574
  if (this.searchHasOptions) {
575
- this.nextFocusedItemIndex = 0;
575
+ this.nextFocusedItemIndex = this.getFirstEnabledIndex();
576
576
  } else {
577
577
  this.nextFocusedItemIndex = null;
578
578
  }
@@ -637,17 +637,20 @@ var script = {
637
637
  this.focusSearchInput();
638
638
 
639
639
  /**
640
- * If the search string is not empty, highlight the first item
640
+ * If the search string is not empty, highlight the first enabled item
641
641
  */
642
642
  if (this.searchHasOptions) {
643
- this.nextFocusedItemIndex = 0;
644
- // Set activeItemId for the first item
645
- const firstItem = this.flattenedOptions[0];
643
+ const firstEnabledIndex = this.getFirstEnabledIndex();
644
+ this.nextFocusedItemIndex = firstEnabledIndex;
645
+ // Set activeItemId for the first enabled item
646
+ const firstItem = this.flattenedOptions[firstEnabledIndex];
646
647
  this.activeItemId = this.generateItemId(firstItem);
647
648
  }
648
649
  } else {
649
- var _this$selectedIndices;
650
- this.focusItem((_this$selectedIndices = this.selectedIndices[0]) !== null && _this$selectedIndices !== void 0 ? _this$selectedIndices : 0, this.getFocusableListItemElements());
650
+ var _this$flattenedOption2;
651
+ const selectedIndex = this.selectedIndices[0];
652
+ const initialIndex = selectedIndex !== undefined && !((_this$flattenedOption2 = this.flattenedOptions[selectedIndex]) !== null && _this$flattenedOption2 !== void 0 && _this$flattenedOption2.disabled) ? selectedIndex : this.getFirstEnabledIndex();
653
+ this.focusItem(initialIndex, this.getFocusableListItemElements());
651
654
  }
652
655
  /**
653
656
  * Emitted when dropdown is shown
@@ -668,13 +671,24 @@ var script = {
668
671
  this.$emit('blur', event);
669
672
  },
670
673
  getNextIndex(currentIndex, keyCode, totalLength) {
671
- // For UP: move up or wrap to end
672
- if (keyCode === ARROW_UP) {
673
- return currentIndex > 0 ? currentIndex - 1 : totalLength - 1;
674
+ const direction = keyCode === ARROW_UP ? -1 : 1;
675
+ let nextIndex = currentIndex;
676
+ for (let i = 0; i < totalLength; i += 1) {
677
+ var _this$flattenedOption3;
678
+ nextIndex += direction;
679
+ if (nextIndex < 0) nextIndex = totalLength - 1;
680
+ if (nextIndex >= totalLength) nextIndex = 0;
681
+ if (!((_this$flattenedOption3 = this.flattenedOptions[nextIndex]) !== null && _this$flattenedOption3 !== void 0 && _this$flattenedOption3.disabled)) {
682
+ return nextIndex;
683
+ }
674
684
  }
675
-
676
- // For DOWN: move down or wrap to start
677
- return currentIndex < totalLength - 1 ? currentIndex + 1 : 0;
685
+ return currentIndex;
686
+ },
687
+ getFirstEnabledIndex() {
688
+ return this.flattenedOptions.findIndex(item => !item.disabled);
689
+ },
690
+ getLastEnabledIndex() {
691
+ return this.flattenedOptions.findLastIndex(item => !item.disabled);
678
692
  },
679
693
  handleListNavigation(keyCode, elements) {
680
694
  var _this$nextFocusedItem;
@@ -693,15 +707,15 @@ var script = {
693
707
  let stop = true;
694
708
  switch (code) {
695
709
  case HOME:
696
- // Jump to first item if searchable or not in search input
710
+ // Jump to first enabled item if searchable or not in search input
697
711
  if (this.searchable || !isSearchInput) {
698
- this.focusItem(0, elements, this.searchable);
712
+ this.focusItem(this.getFirstEnabledIndex(), elements, this.searchable);
699
713
  }
700
714
  break;
701
715
  case END:
702
- // Jump to last item if searchable or not in search input
716
+ // Jump to last enabled item if searchable or not in search input
703
717
  if (this.searchable || !isSearchInput) {
704
- this.focusItem(elements.length - 1, elements, this.searchable);
718
+ this.focusItem(this.getLastEnabledIndex(), elements, this.searchable);
705
719
  }
706
720
  break;
707
721
  case ARROW_UP:
@@ -712,19 +726,21 @@ var script = {
712
726
  this.handleListNavigation(ARROW_UP, elements);
713
727
  break;
714
728
  case ARROW_DOWN:
715
- // Focus first item from search input, otherwise navigate down
729
+ // Focus first enabled item from search input, otherwise navigate down
716
730
  if (isSearchInput && !this.searchable) {
717
- this.focusItem(0, elements);
731
+ this.focusItem(this.getFirstEnabledIndex(), elements);
718
732
  } else {
719
733
  this.handleListNavigation(ARROW_DOWN, elements);
720
734
  }
721
735
  break;
722
736
  case ENTER:
723
737
  if (isSearchInput) {
724
- // Toggle selection of highlighted item if one exists
738
+ // Toggle selection of highlighted item if one exists and is not disabled
725
739
  if (elements.length > 0 && this.nextFocusedItemIndex !== null) {
726
740
  const highlightedItem = this.flattenedOptions[this.nextFocusedItemIndex];
727
- this.onSelect(highlightedItem, !this.isSelected(highlightedItem));
741
+ if (!(highlightedItem !== null && highlightedItem !== void 0 && highlightedItem.disabled)) {
742
+ this.onSelect(highlightedItem, !this.isSelected(highlightedItem));
743
+ }
728
744
  }
729
745
  } else {
730
746
  stop = false;
@@ -794,6 +810,9 @@ var script = {
794
810
  isFocused(item) {
795
811
  return this.nextFocusedItemIndex === this.flattenedOptions.indexOf(item);
796
812
  },
813
+ isDisabled(item) {
814
+ return item.disabled;
815
+ },
797
816
  onSingleSelect(value, isSelected) {
798
817
  if (isSelected) {
799
818
  /**
@@ -934,7 +953,7 @@ const __vue_script__ = script;
934
953
  /* template */
935
954
  var __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","active-item-id":_vm.activeItemId,"aria-labelledby":_vm.toggleAriaLabelledBy,"block":_vm.block,"has-searchable-listbox":_vm.searchable,"has-external-label":_vm.isInFormGroup,"listbox-id":_vm.listboxIdComputed,"state":_vm.state,"toggle-id":_vm.toggleIdComputed,"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,"panel-match-trigger-width":_vm.panelMatchTriggerWidth,"positioning-strategy":_vm.positioningStrategy},on:_vm._d({},[_vm.$options.events.GL_DROPDOWN_FOCUS_CONTENT,_vm.onFocusContent,_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(slotProps){return [_vm._t("toggle",null,null,slotProps)]}}:null,{key:"default",fn:function(ref){
936
955
  var visible = ref.visible;
937
- return [(_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:{"id":_vm.searchInputId,"data-testid":"listbox-search-input","role":"combobox","aria-expanded":String(visible),"aria-controls":_vm.listboxId,"aria-activedescendant":_vm.activeItemId,"aria-haspopup":"listbox","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-busy":_vm.isBusy,"aria-labelledby":_vm.listboxAriaLabelledByID,"aria-multiselectable":_vm.multiple ? 'true' : undefined,"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:_vm.listboxItemKey(item),attrs:{"id":_vm.generateItemId(item),"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:_vm.listboxItemKey(option),attrs:{"id":_vm.generateItemId(option),"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._e(),_vm._v(" "),(_vm.isBusy)?_c('span',{staticClass:"gl-sr-only",attrs:{"aria-live":"polite","data-testid":"listbox-loading-announcement"}},[_vm._v("\n "+_vm._s(_vm.loadingAnnouncementText)+"\n ")]):(_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")]}}],null,true)})};
956
+ return [(_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:{"id":_vm.searchInputId,"data-testid":"listbox-search-input","role":"combobox","aria-expanded":String(visible),"aria-controls":_vm.listboxId,"aria-activedescendant":_vm.activeItemId,"aria-haspopup":"listbox","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-busy":_vm.isBusy,"aria-labelledby":_vm.listboxAriaLabelledByID,"aria-multiselectable":_vm.multiple ? 'true' : undefined,"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:_vm.listboxItemKey(item),attrs:{"id":_vm.generateItemId(item),"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,"is-disabled":_vm.isDisabled(item)},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:_vm.listboxItemKey(option),attrs:{"id":_vm.generateItemId(option),"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,"is-disabled":_vm.isDisabled(option)},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._e(),_vm._v(" "),(_vm.isBusy)?_c('span',{staticClass:"gl-sr-only",attrs:{"aria-live":"polite","data-testid":"listbox-loading-announcement"}},[_vm._v("\n "+_vm._s(_vm.loadingAnnouncementText)+"\n ")]):(_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")]}}],null,true)})};
938
957
  var __vue_staticRenderFns__ = [];
939
958
 
940
959
  /* style */
@@ -28,6 +28,11 @@ var script = {
28
28
  type: Boolean,
29
29
  default: false,
30
30
  required: false
31
+ },
32
+ isDisabled: {
33
+ type: Boolean,
34
+ default: false,
35
+ required: false
31
36
  }
32
37
  },
33
38
  computed: {
@@ -39,7 +44,13 @@ var script = {
39
44
  }
40
45
  },
41
46
  methods: {
47
+ onMousedown(event) {
48
+ if (this.isDisabled) {
49
+ stopEvent(event);
50
+ }
51
+ },
42
52
  toggleSelection() {
53
+ if (this.isDisabled) return;
43
54
  this.$emit('select', !this.isSelected);
44
55
  },
45
56
  onKeydown(event) {
@@ -58,7 +69,12 @@ var script = {
58
69
  const __vue_script__ = script;
59
70
 
60
71
  /* template */
61
- var __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:[
72
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',{class:[
73
+ 'gl-new-dropdown-item',
74
+ {
75
+ 'gl-new-dropdown-item-highlighted': _vm.isHighlighted,
76
+ disabled: _vm.isDisabled,
77
+ } ],attrs:{"role":"option","tabindex":_vm.isFocused ? 0 : -1,"aria-selected":_vm.isSelected,"aria-disabled":_vm.isDisabled},on:{"mousedown":_vm.onMousedown,"click":_vm.toggleSelection,"keydown":_vm.onKeydown}},[_c('span',{staticClass:"gl-new-dropdown-item-content"},[_c('gl-icon',{class:[
62
78
  'gl-new-dropdown-item-check-icon',
63
79
  { 'gl-invisible': !_vm.isSelected },
64
80
  _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)])};
@@ -9,19 +9,23 @@ const mockOptions = [{
9
9
  text: 'Finance'
10
10
  }, {
11
11
  value: 'leg',
12
- text: 'Legal'
12
+ text: 'Legal',
13
+ disabled: true
13
14
  }, {
14
15
  value: 'eng',
15
- text: 'Engineering'
16
+ text: 'Engineering',
17
+ disabled: true
16
18
  }, {
17
19
  value: 'sales',
18
- text: 'Sales'
20
+ text: 'Sales',
21
+ disabled: false
19
22
  }, {
20
23
  value: 'marketing',
21
24
  text: 'Marketing'
22
25
  }, {
23
26
  value: 'acc',
24
- text: 'Accounting'
27
+ text: 'Accounting',
28
+ disabled: true
25
29
  }, {
26
30
  value: 'hr',
27
31
  text: 'Human Resource Management'
@@ -36,7 +40,8 @@ const mockOptions = [{
36
40
  text: 'Support'
37
41
  }, {
38
42
  value: null,
39
- text: 'None'
43
+ text: 'None',
44
+ disabled: true
40
45
  }];
41
46
  const mockOptionsValues = mockOptions.map(_ref => {
42
47
  let {
@@ -111,6 +116,11 @@ const mockUsers = [{
111
116
  text: 'Olena Horal-Koretska',
112
117
  secondaryText: '@ohoral',
113
118
  icon: 'bar'
119
+ }, {
120
+ value: 'jdoe',
121
+ text: 'Jane Doe',
122
+ secondaryText: '@jdoe',
123
+ disabled: true
114
124
  }, {
115
125
  value: 'markian',
116
126
  text: 'Mark Florian',