@gitlab/ui 86.7.1 → 86.8.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.
- package/CHANGELOG.md +7 -0
- package/dist/components/base/new_dropdowns/base_dropdown/base_dropdown.js +17 -6
- package/dist/components/base/new_dropdowns/base_dropdown/base_dropdown_deprecated_wrapper.js +47 -0
- package/dist/components/base/new_dropdowns/base_dropdown/base_dropdown_improved_wrapper.js +47 -0
- package/dist/components/base/new_dropdowns/disclosure/disclosure_dropdown.js +10 -1
- package/dist/components/base/new_dropdowns/listbox/listbox.js +10 -1
- package/dist/directives/outside/outside.js +3 -2
- package/package.json +1 -1
- package/src/components/base/new_dropdowns/base_dropdown/base_dropdown.vue +23 -5
- package/src/components/base/new_dropdowns/base_dropdown/base_dropdown_deprecated_wrapper.vue +14 -0
- package/src/components/base/new_dropdowns/base_dropdown/base_dropdown_improved_wrapper.vue +14 -0
- package/src/components/base/new_dropdowns/disclosure/disclosure_dropdown.vue +10 -0
- package/src/components/base/new_dropdowns/listbox/listbox.vue +10 -0
- package/src/directives/outside/outside.js +6 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
# [86.8.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v86.7.1...v86.8.0) (2024-07-11)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* **GlDisclosureDropdown,GlCollapsibleListbox:** Improve hide mechanism ([475d1c7](https://gitlab.com/gitlab-org/gitlab-ui/commit/475d1c76163b0b04d0c62ddadcde40c93b656e6c))
|
|
7
|
+
|
|
1
8
|
## [86.7.1](https://gitlab.com/gitlab-org/gitlab-ui/compare/v86.7.0...v86.7.1) (2024-07-11)
|
|
2
9
|
|
|
3
10
|
|
|
@@ -5,7 +5,8 @@ import { POSITION_ABSOLUTE, POSITION_FIXED, GL_DROPDOWN_CONTENTS_CLASS, GL_DROPD
|
|
|
5
5
|
import { logWarning, isElementFocusable, isElementTabbable } from '../../../../utils/utils';
|
|
6
6
|
import GlButton from '../../button/button';
|
|
7
7
|
import GlIcon from '../../icon/icon';
|
|
8
|
-
import
|
|
8
|
+
import BaseDropdownDeprecatedWrapper from './base_dropdown_deprecated_wrapper';
|
|
9
|
+
import BaseDropdownImprovedWrapper from './base_dropdown_improved_wrapper';
|
|
9
10
|
import { DEFAULT_OFFSET, FIXED_WIDTH_CLASS } from './constants';
|
|
10
11
|
import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
|
|
11
12
|
|
|
@@ -15,10 +16,9 @@ var script = {
|
|
|
15
16
|
BASE_DROPDOWN_CLASS,
|
|
16
17
|
components: {
|
|
17
18
|
GlButton,
|
|
18
|
-
GlIcon
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
Outside: OutsideDirective
|
|
19
|
+
GlIcon,
|
|
20
|
+
BaseDropdownDeprecatedWrapper,
|
|
21
|
+
BaseDropdownImprovedWrapper
|
|
22
22
|
},
|
|
23
23
|
props: {
|
|
24
24
|
toggleText: {
|
|
@@ -141,6 +141,14 @@ var script = {
|
|
|
141
141
|
required: false,
|
|
142
142
|
default: POSITION_ABSOLUTE,
|
|
143
143
|
validator: strategy => [POSITION_ABSOLUTE, POSITION_FIXED].includes(strategy)
|
|
144
|
+
},
|
|
145
|
+
/**
|
|
146
|
+
* Whether to use the deprecated or improved wrapper
|
|
147
|
+
*/
|
|
148
|
+
improvedHideHeuristics: {
|
|
149
|
+
type: Boolean,
|
|
150
|
+
required: false,
|
|
151
|
+
default: false
|
|
144
152
|
}
|
|
145
153
|
},
|
|
146
154
|
data() {
|
|
@@ -151,6 +159,9 @@ var script = {
|
|
|
151
159
|
};
|
|
152
160
|
},
|
|
153
161
|
computed: {
|
|
162
|
+
wrapperComponent() {
|
|
163
|
+
return this.improvedHideHeuristics ? BaseDropdownImprovedWrapper : BaseDropdownDeprecatedWrapper;
|
|
164
|
+
},
|
|
154
165
|
hasNoVisibleToggleText() {
|
|
155
166
|
var _this$toggleText;
|
|
156
167
|
return !((_this$toggleText = this.toggleText) !== null && _this$toggleText !== void 0 && _this$toggleText.length) || this.textSrOnly;
|
|
@@ -431,7 +442,7 @@ var script = {
|
|
|
431
442
|
const __vue_script__ = script;
|
|
432
443
|
|
|
433
444
|
/* template */
|
|
434
|
-
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(
|
|
445
|
+
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(_vm.wrapperComponent,{tag:"component",class:[_vm.$options.BASE_DROPDOWN_CLASS, { 'gl-display-block!': _vm.block }],on:{"close":_vm.close}},[_c(_vm.toggleComponent,_vm._g(_vm._b({ref:"toggle",tag:"component",attrs:{"id":_vm.toggleId,"data-testid":"base-dropdown-toggle"},on:{"keydown":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"esc",27,$event.key,["Esc","Escape"])){ return null; }$event.stopPropagation();$event.preventDefault();return _vm.close.apply(null, arguments)}}},'component',_vm.toggleAttributes,false),_vm.toggleListeners),[_vm._t("toggle",function(){return [_c('span',{staticClass:"gl-new-dropdown-button-text",class:{ 'gl-sr-only': _vm.textSrOnly }},[_vm._v("\n "+_vm._s(_vm.toggleText)+"\n ")]),_vm._v(" "),(!_vm.noCaret)?_c('gl-icon',{staticClass:"gl-button-icon gl-new-dropdown-chevron",attrs:{"name":"chevron-down"}}):_vm._e()]})],2),_vm._v(" "),_c('div',{ref:"content",staticClass:"gl-new-dropdown-panel",class:_vm.panelClasses,attrs:{"id":_vm.baseDropdownId,"data-testid":"base-dropdown-menu"},on:{"keydown":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"esc",27,$event.key,["Esc","Escape"])){ return null; }$event.stopPropagation();$event.preventDefault();return _vm.closeAndFocus.apply(null, arguments)}}},[_c('div',{staticClass:"gl-new-dropdown-inner"},[_vm._t("default")],2)])],1)};
|
|
435
446
|
var __vue_staticRenderFns__ = [];
|
|
436
447
|
|
|
437
448
|
/* style */
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { OutsideDirective } from '../../../../directives/outside/outside';
|
|
2
|
+
import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
|
|
3
|
+
|
|
4
|
+
var script = {
|
|
5
|
+
name: 'BaseDropdownDeprecatedWrapper',
|
|
6
|
+
directives: {
|
|
7
|
+
Outside: OutsideDirective
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
/* script */
|
|
12
|
+
const __vue_script__ = script;
|
|
13
|
+
|
|
14
|
+
/* template */
|
|
15
|
+
var __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",value:(function (event) { return _vm.$emit('close', event); }),expression:"(event) => $emit('close', event)"}]},[_vm._t("default")],2)};
|
|
16
|
+
var __vue_staticRenderFns__ = [];
|
|
17
|
+
|
|
18
|
+
/* style */
|
|
19
|
+
const __vue_inject_styles__ = undefined;
|
|
20
|
+
/* scoped */
|
|
21
|
+
const __vue_scope_id__ = undefined;
|
|
22
|
+
/* module identifier */
|
|
23
|
+
const __vue_module_identifier__ = undefined;
|
|
24
|
+
/* functional template */
|
|
25
|
+
const __vue_is_functional_template__ = false;
|
|
26
|
+
/* style inject */
|
|
27
|
+
|
|
28
|
+
/* style inject SSR */
|
|
29
|
+
|
|
30
|
+
/* style inject shadow dom */
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
const __vue_component__ = __vue_normalize__(
|
|
35
|
+
{ render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },
|
|
36
|
+
__vue_inject_styles__,
|
|
37
|
+
__vue_script__,
|
|
38
|
+
__vue_scope_id__,
|
|
39
|
+
__vue_is_functional_template__,
|
|
40
|
+
__vue_module_identifier__,
|
|
41
|
+
false,
|
|
42
|
+
undefined,
|
|
43
|
+
undefined,
|
|
44
|
+
undefined
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
export default __vue_component__;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { OutsideDirective } from '../../../../directives/outside/outside';
|
|
2
|
+
import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
|
|
3
|
+
|
|
4
|
+
var script = {
|
|
5
|
+
name: 'BaseDropdownImprovedWrapper',
|
|
6
|
+
directives: {
|
|
7
|
+
Outside: OutsideDirective
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
/* script */
|
|
12
|
+
const __vue_script__ = script;
|
|
13
|
+
|
|
14
|
+
/* template */
|
|
15
|
+
var __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:(function (event) { return _vm.$emit('close', event); }),expression:"(event) => $emit('close', event)",modifiers:{"click":true,"focusin":true}}]},[_vm._t("default")],2)};
|
|
16
|
+
var __vue_staticRenderFns__ = [];
|
|
17
|
+
|
|
18
|
+
/* style */
|
|
19
|
+
const __vue_inject_styles__ = undefined;
|
|
20
|
+
/* scoped */
|
|
21
|
+
const __vue_scope_id__ = undefined;
|
|
22
|
+
/* module identifier */
|
|
23
|
+
const __vue_module_identifier__ = undefined;
|
|
24
|
+
/* functional template */
|
|
25
|
+
const __vue_is_functional_template__ = false;
|
|
26
|
+
/* style inject */
|
|
27
|
+
|
|
28
|
+
/* style inject SSR */
|
|
29
|
+
|
|
30
|
+
/* style inject shadow dom */
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
const __vue_component__ = __vue_normalize__(
|
|
35
|
+
{ render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },
|
|
36
|
+
__vue_inject_styles__,
|
|
37
|
+
__vue_script__,
|
|
38
|
+
__vue_scope_id__,
|
|
39
|
+
__vue_is_functional_template__,
|
|
40
|
+
__vue_module_identifier__,
|
|
41
|
+
false,
|
|
42
|
+
undefined,
|
|
43
|
+
undefined,
|
|
44
|
+
undefined
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
export default __vue_component__;
|
|
@@ -207,6 +207,15 @@ var script = {
|
|
|
207
207
|
type: Boolean,
|
|
208
208
|
required: false,
|
|
209
209
|
default: false
|
|
210
|
+
},
|
|
211
|
+
/**
|
|
212
|
+
* Whether to use an improved hide
|
|
213
|
+
* functionality for the dropdown.
|
|
214
|
+
*/
|
|
215
|
+
improvedHideHeuristics: {
|
|
216
|
+
type: Boolean,
|
|
217
|
+
required: false,
|
|
218
|
+
default: false
|
|
210
219
|
}
|
|
211
220
|
},
|
|
212
221
|
data() {
|
|
@@ -336,7 +345,7 @@ var script = {
|
|
|
336
345
|
const __vue_script__ = script;
|
|
337
346
|
|
|
338
347
|
/* template */
|
|
339
|
-
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('gl-base-dropdown',{ref:"baseDropdown",staticClass:"gl-disclosure-dropdown",attrs:{"aria-labelledby":_vm.toggleAriaLabelledBy,"toggle-id":_vm.toggleId,"toggle-text":_vm.toggleText,"toggle-class":_vm.toggleClass,"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,"block":_vm.block,"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,_vm.$options.events.GL_DROPDOWN_BEFORE_CLOSE,_vm.onBeforeClose,_vm.$options.events.GL_DROPDOWN_FOCUS_CONTENT,_vm.onKeydown]),scopedSlots:_vm._u([(_vm.hasCustomToggle)?{key:"toggle",fn:function(){return [_vm._t("toggle")]},proxy:true}:null],null,true)},[_vm._v(" "),_vm._t("header"),_vm._v(" "),_c(_vm.disclosureTag,{ref:"content",tag:"component",class:_vm.$options.GL_DROPDOWN_CONTENTS_CLASS,attrs:{"id":_vm.disclosureId,"aria-labelledby":_vm.listAriaLabelledBy || _vm.toggleId,"data-testid":"disclosure-content","tabindex":"-1"},on:{"keydown":_vm.onKeydown,"click":_vm.handleAutoClose}},[_vm._t("default",function(){return [_vm._l((_vm.items),function(item,index){return [(_vm.isItem(item))?[_c('gl-disclosure-dropdown-item',{key:_vm.uniqueItemId(),attrs:{"item":item},on:{"action":_vm.handleAction},scopedSlots:_vm._u([('list-item' in _vm.$scopedSlots)?{key:"list-item",fn:function(){return [_vm._t("list-item",null,{"item":item})]},proxy:true}:null],null,true)})]:[_c('gl-disclosure-dropdown-group',{key:item.name,attrs:{"bordered":index !== 0,"group":item},on:{"action":_vm.handleAction},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.$scopedSlots['list-item'])?_vm._l((item.items),function(groupItem){return _c('gl-disclosure-dropdown-item',{key:_vm.uniqueItemId(),attrs:{"item":groupItem},on:{"action":_vm.handleAction},scopedSlots:_vm._u([{key:"list-item",fn:function(){return [_vm._t("list-item",null,{"item":groupItem})]},proxy:true}],null,true)})}):_vm._e()],2)]]})]})],2),_vm._v(" "),_vm._t("footer")],2)};
|
|
348
|
+
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('gl-base-dropdown',{ref:"baseDropdown",staticClass:"gl-disclosure-dropdown",attrs:{"aria-labelledby":_vm.toggleAriaLabelledBy,"toggle-id":_vm.toggleId,"toggle-text":_vm.toggleText,"toggle-class":_vm.toggleClass,"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,"block":_vm.block,"offset":_vm.dropdownOffset,"fluid-width":_vm.fluidWidth,"positioning-strategy":_vm.positioningStrategy,"improved-hide-heuristics":_vm.improvedHideHeuristics},on:_vm._d({},[_vm.$options.events.GL_DROPDOWN_SHOWN,_vm.onShow,_vm.$options.events.GL_DROPDOWN_HIDDEN,_vm.onHide,_vm.$options.events.GL_DROPDOWN_BEFORE_CLOSE,_vm.onBeforeClose,_vm.$options.events.GL_DROPDOWN_FOCUS_CONTENT,_vm.onKeydown]),scopedSlots:_vm._u([(_vm.hasCustomToggle)?{key:"toggle",fn:function(){return [_vm._t("toggle")]},proxy:true}:null],null,true)},[_vm._v(" "),_vm._t("header"),_vm._v(" "),_c(_vm.disclosureTag,{ref:"content",tag:"component",class:_vm.$options.GL_DROPDOWN_CONTENTS_CLASS,attrs:{"id":_vm.disclosureId,"aria-labelledby":_vm.listAriaLabelledBy || _vm.toggleId,"data-testid":"disclosure-content","tabindex":"-1"},on:{"keydown":_vm.onKeydown,"click":_vm.handleAutoClose}},[_vm._t("default",function(){return [_vm._l((_vm.items),function(item,index){return [(_vm.isItem(item))?[_c('gl-disclosure-dropdown-item',{key:_vm.uniqueItemId(),attrs:{"item":item},on:{"action":_vm.handleAction},scopedSlots:_vm._u([('list-item' in _vm.$scopedSlots)?{key:"list-item",fn:function(){return [_vm._t("list-item",null,{"item":item})]},proxy:true}:null],null,true)})]:[_c('gl-disclosure-dropdown-group',{key:item.name,attrs:{"bordered":index !== 0,"group":item},on:{"action":_vm.handleAction},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.$scopedSlots['list-item'])?_vm._l((item.items),function(groupItem){return _c('gl-disclosure-dropdown-item',{key:_vm.uniqueItemId(),attrs:{"item":groupItem},on:{"action":_vm.handleAction},scopedSlots:_vm._u([{key:"list-item",fn:function(){return [_vm._t("list-item",null,{"item":groupItem})]},proxy:true}],null,true)})}):_vm._e()],2)]]})]})],2),_vm._v(" "),_vm._t("footer")],2)};
|
|
340
349
|
var __vue_staticRenderFns__ = [];
|
|
341
350
|
|
|
342
351
|
/* style */
|
|
@@ -328,6 +328,15 @@ var script = {
|
|
|
328
328
|
type: Function,
|
|
329
329
|
required: false,
|
|
330
330
|
default: translatePlural('GlCollapsibleListbox.srOnlyResultsLabel', '%d result', '%d results')
|
|
331
|
+
},
|
|
332
|
+
/**
|
|
333
|
+
* Whether to use an improved hide
|
|
334
|
+
* functionality for the dropdown.
|
|
335
|
+
*/
|
|
336
|
+
improvedHideHeuristics: {
|
|
337
|
+
type: Boolean,
|
|
338
|
+
required: false,
|
|
339
|
+
default: false
|
|
331
340
|
}
|
|
332
341
|
},
|
|
333
342
|
data() {
|
|
@@ -725,7 +734,7 @@ var script = {
|
|
|
725
734
|
const __vue_script__ = script;
|
|
726
735
|
|
|
727
736
|
/* template */
|
|
728
|
-
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","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-display-flex gl-align-items-center gl-p-4! gl-min-h-8",class:_vm.$options.HEADER_ITEMS_BORDER_CLASSES},[_c('div',{staticClass:"gl-flex-grow-1 gl-font-weight-bold gl-font-sm gl-pr-2",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-focus-inset-border-2-blue-400! gl-flex-shrink-0 gl-font-sm! gl-px-2! gl-py-2! gl-w-auto! gl-m-0! gl-max-w-50p gl-text-overflow-ellipsis",attrs:{"category":"tertiary","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-focus-inset-border-2-blue-400! gl-flex-shrink-0 gl-font-sm! gl-px-2! gl-py-2! gl-w-auto! gl-m-0! gl-max-w-50p gl-text-overflow-ellipsis",attrs:{"category":"tertiary","data-testid":"listbox-select-all-button"},on:{"click":_vm.onSelectAllButtonClicked}},[_vm._v("\n "+_vm._s(_vm.showSelectAllButtonLabel)+"\n ")]):_vm._e()],1):_vm._e(),_vm._v(" "),(_vm.searchable)?_c('div',{class:_vm.$options.HEADER_ITEMS_BORDER_CLASSES},[_c('gl-listbox-search-input',{ref:"searchBox",class:{ 'gl-listbox-topmost': !_vm.headerText },attrs:{"data-testid":"listbox-search-input","placeholder":_vm.searchPlaceholder},on:{"input":_vm.search,"keydown":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"enter",13,$event.key,"Enter")){ return null; }$event.preventDefault();},_vm.onKeydown]},model:{value:(_vm.searchStr),callback:function ($$v) {_vm.searchStr=$$v;},expression:"searchStr"}}),_vm._v(" "),(_vm.searching)?_c('gl-loading-icon',{staticClass:"gl-my-3",attrs:{"data-testid":"listbox-search-loader","size":"md"}}):_vm._e()],1):_vm._e(),_vm._v(" "),(_vm.showList)?_c(_vm.listboxTag,{ref:"list",tag:"component",staticClass:"gl-new-dropdown-contents gl-new-dropdown-contents-with-scrim-overlay",class:_vm.listboxClasses,attrs:{"id":_vm.listboxId,"aria-labelledby":_vm.listAriaLabelledBy || _vm.headerId || _vm.toggleId,"role":"listbox","tabindex":"0"},on:{"keydown":_vm.onKeydown}},[_c(_vm.itemTag,{tag:"component",staticClass:"top-scrim-wrapper",attrs:{"aria-hidden":"true","data-testid":"top-scrim"}},[_c('div',{staticClass:"top-scrim",class:{ 'top-scrim-light': !_vm.hasHeader, 'top-scrim-dark': _vm.hasHeader }})]),_vm._v(" "),_c(_vm.itemTag,{ref:"top-boundary",tag:"component",attrs:{"aria-hidden":"true"}}),_vm._v(" "),_vm._l((_vm.items),function(item,index){return [(_vm.isOption(item))?[_c('gl-listbox-item',_vm._b({key:item.value,attrs:{"data-testid":("listbox-item-" + (item.value)),"is-selected":_vm.isSelected(item),"is-focused":_vm.isFocused(item),"is-check-centered":_vm.isCheckCentered},on:{"select":function($event){return _vm.onSelect(item, $event)}}},'gl-listbox-item',_vm.listboxItemMoreItemsAriaAttributes(index),false),[_vm._t("list-item",function(){return [_vm._v("\n "+_vm._s(item.text)+"\n ")]},{"item":item})],2)]:[_c('gl-listbox-group',{key:item.text,class:_vm.groupClasses(index),attrs:{"name":item.text,"text-sr-only":item.textSrOnly},scopedSlots:_vm._u([(_vm.$scopedSlots['group-label'])?{key:"group-label",fn:function(){return [_vm._t("group-label",null,{"group":item})]},proxy:true}:null],null,true)},[_vm._v(" "),_vm._l((item.options),function(option){return _c('gl-listbox-item',{key:option.value,attrs:{"data-testid":("listbox-item-" + (option.value)),"is-selected":_vm.isSelected(option),"is-focused":_vm.isFocused(option),"is-check-centered":_vm.isCheckCentered},on:{"select":function($event){return _vm.onSelect(option, $event)}}},[_vm._t("list-item",function(){return [_vm._v("\n "+_vm._s(option.text)+"\n ")]},{"item":option})],2)})],2)]]}),_vm._v(" "),(_vm.infiniteScrollLoading)?_c(_vm.itemTag,{tag:"component"},[_c('gl-loading-icon',{staticClass:"gl-my-3",attrs:{"data-testid":"listbox-infinite-scroll-loader","size":"md"}})],1):_vm._e(),_vm._v(" "),(_vm.showIntersectionObserver)?_c('gl-intersection-observer',{on:{"appear":_vm.onIntersectionObserverAppear}}):_vm._e(),_vm._v(" "),_c(_vm.itemTag,{ref:"bottom-boundary",tag:"component",attrs:{"aria-hidden":"true"}}),_vm._v(" "),_c(_vm.itemTag,{tag:"component",staticClass:"bottom-scrim-wrapper",attrs:{"aria-hidden":"true","data-testid":"bottom-scrim"}},[_c('div',{staticClass:"bottom-scrim",class:{ 'gl-rounded-0!': _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-pl-7 gl-pr-5 gl-py-3 gl-font-base gl-text-gray-600",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)};
|
|
737
|
+
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","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,"improved-hide-heuristics":_vm.improvedHideHeuristics},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-display-flex gl-align-items-center gl-p-4! gl-min-h-8",class:_vm.$options.HEADER_ITEMS_BORDER_CLASSES},[_c('div',{staticClass:"gl-flex-grow-1 gl-font-weight-bold gl-font-sm gl-pr-2",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-focus-inset-border-2-blue-400! gl-flex-shrink-0 gl-font-sm! gl-px-2! gl-py-2! gl-w-auto! gl-m-0! gl-max-w-50p gl-text-overflow-ellipsis",attrs:{"category":"tertiary","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-focus-inset-border-2-blue-400! gl-flex-shrink-0 gl-font-sm! gl-px-2! gl-py-2! gl-w-auto! gl-m-0! gl-max-w-50p gl-text-overflow-ellipsis",attrs:{"category":"tertiary","data-testid":"listbox-select-all-button"},on:{"click":_vm.onSelectAllButtonClicked}},[_vm._v("\n "+_vm._s(_vm.showSelectAllButtonLabel)+"\n ")]):_vm._e()],1):_vm._e(),_vm._v(" "),(_vm.searchable)?_c('div',{class:_vm.$options.HEADER_ITEMS_BORDER_CLASSES},[_c('gl-listbox-search-input',{ref:"searchBox",class:{ 'gl-listbox-topmost': !_vm.headerText },attrs:{"data-testid":"listbox-search-input","placeholder":_vm.searchPlaceholder},on:{"input":_vm.search,"keydown":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"enter",13,$event.key,"Enter")){ return null; }$event.preventDefault();},_vm.onKeydown]},model:{value:(_vm.searchStr),callback:function ($$v) {_vm.searchStr=$$v;},expression:"searchStr"}}),_vm._v(" "),(_vm.searching)?_c('gl-loading-icon',{staticClass:"gl-my-3",attrs:{"data-testid":"listbox-search-loader","size":"md"}}):_vm._e()],1):_vm._e(),_vm._v(" "),(_vm.showList)?_c(_vm.listboxTag,{ref:"list",tag:"component",staticClass:"gl-new-dropdown-contents gl-new-dropdown-contents-with-scrim-overlay",class:_vm.listboxClasses,attrs:{"id":_vm.listboxId,"aria-labelledby":_vm.listAriaLabelledBy || _vm.headerId || _vm.toggleId,"role":"listbox","tabindex":"0"},on:{"keydown":_vm.onKeydown}},[_c(_vm.itemTag,{tag:"component",staticClass:"top-scrim-wrapper",attrs:{"aria-hidden":"true","data-testid":"top-scrim"}},[_c('div',{staticClass:"top-scrim",class:{ 'top-scrim-light': !_vm.hasHeader, 'top-scrim-dark': _vm.hasHeader }})]),_vm._v(" "),_c(_vm.itemTag,{ref:"top-boundary",tag:"component",attrs:{"aria-hidden":"true"}}),_vm._v(" "),_vm._l((_vm.items),function(item,index){return [(_vm.isOption(item))?[_c('gl-listbox-item',_vm._b({key:item.value,attrs:{"data-testid":("listbox-item-" + (item.value)),"is-selected":_vm.isSelected(item),"is-focused":_vm.isFocused(item),"is-check-centered":_vm.isCheckCentered},on:{"select":function($event){return _vm.onSelect(item, $event)}}},'gl-listbox-item',_vm.listboxItemMoreItemsAriaAttributes(index),false),[_vm._t("list-item",function(){return [_vm._v("\n "+_vm._s(item.text)+"\n ")]},{"item":item})],2)]:[_c('gl-listbox-group',{key:item.text,class:_vm.groupClasses(index),attrs:{"name":item.text,"text-sr-only":item.textSrOnly},scopedSlots:_vm._u([(_vm.$scopedSlots['group-label'])?{key:"group-label",fn:function(){return [_vm._t("group-label",null,{"group":item})]},proxy:true}:null],null,true)},[_vm._v(" "),_vm._l((item.options),function(option){return _c('gl-listbox-item',{key:option.value,attrs:{"data-testid":("listbox-item-" + (option.value)),"is-selected":_vm.isSelected(option),"is-focused":_vm.isFocused(option),"is-check-centered":_vm.isCheckCentered},on:{"select":function($event){return _vm.onSelect(option, $event)}}},[_vm._t("list-item",function(){return [_vm._v("\n "+_vm._s(option.text)+"\n ")]},{"item":option})],2)})],2)]]}),_vm._v(" "),(_vm.infiniteScrollLoading)?_c(_vm.itemTag,{tag:"component"},[_c('gl-loading-icon',{staticClass:"gl-my-3",attrs:{"data-testid":"listbox-infinite-scroll-loader","size":"md"}})],1):_vm._e(),_vm._v(" "),(_vm.showIntersectionObserver)?_c('gl-intersection-observer',{on:{"appear":_vm.onIntersectionObserverAppear}}):_vm._e(),_vm._v(" "),_c(_vm.itemTag,{ref:"bottom-boundary",tag:"component",attrs:{"aria-hidden":"true"}}),_vm._v(" "),_c(_vm.itemTag,{tag:"component",staticClass:"bottom-scrim-wrapper",attrs:{"aria-hidden":"true","data-testid":"bottom-scrim"}},[_c('div',{staticClass:"bottom-scrim",class:{ 'gl-rounded-0!': _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-pl-7 gl-pr-5 gl-py-3 gl-font-base gl-text-gray-600",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)};
|
|
729
738
|
var __vue_staticRenderFns__ = [];
|
|
730
739
|
|
|
731
740
|
/* style */
|
|
@@ -101,8 +101,9 @@ function parseBinding(_ref3) {
|
|
|
101
101
|
if (typeof arg !== 'undefined') {
|
|
102
102
|
throw new Error(`[GlOutsideDirective] Arguments are not supported. Consider using modifiers instead.`);
|
|
103
103
|
}
|
|
104
|
-
|
|
105
|
-
|
|
104
|
+
const unsupportedModifiers = modifiersList.filter(modifier => !supportedEventTypes.includes(modifier));
|
|
105
|
+
if (unsupportedModifiers.length > 0) {
|
|
106
|
+
throw new Error(`[GlOutsideDirective] Cannot bind ${unsupportedModifiers.join(', ')} events; supported event types are: ${supportedEventTypes.join(', ')}`);
|
|
106
107
|
}
|
|
107
108
|
}
|
|
108
109
|
return {
|
package/package.json
CHANGED
|
@@ -21,10 +21,10 @@ import {
|
|
|
21
21
|
POSITION_FIXED,
|
|
22
22
|
} from '../constants';
|
|
23
23
|
import { logWarning, isElementTabbable, isElementFocusable } from '../../../../utils/utils';
|
|
24
|
-
|
|
25
24
|
import GlButton from '../../button/button.vue';
|
|
26
25
|
import GlIcon from '../../icon/icon.vue';
|
|
27
|
-
import
|
|
26
|
+
import BaseDropdownDeprecatedWrapper from './base_dropdown_deprecated_wrapper.vue';
|
|
27
|
+
import BaseDropdownImprovedWrapper from './base_dropdown_improved_wrapper.vue';
|
|
28
28
|
import { DEFAULT_OFFSET, FIXED_WIDTH_CLASS } from './constants';
|
|
29
29
|
|
|
30
30
|
export const BASE_DROPDOWN_CLASS = 'gl-new-dropdown';
|
|
@@ -35,8 +35,9 @@ export default {
|
|
|
35
35
|
components: {
|
|
36
36
|
GlButton,
|
|
37
37
|
GlIcon,
|
|
38
|
+
BaseDropdownDeprecatedWrapper,
|
|
39
|
+
BaseDropdownImprovedWrapper,
|
|
38
40
|
},
|
|
39
|
-
directives: { Outside: OutsideDirective },
|
|
40
41
|
props: {
|
|
41
42
|
toggleText: {
|
|
42
43
|
type: String,
|
|
@@ -160,6 +161,14 @@ export default {
|
|
|
160
161
|
default: POSITION_ABSOLUTE,
|
|
161
162
|
validator: (strategy) => [POSITION_ABSOLUTE, POSITION_FIXED].includes(strategy),
|
|
162
163
|
},
|
|
164
|
+
/**
|
|
165
|
+
* Whether to use the deprecated or improved wrapper
|
|
166
|
+
*/
|
|
167
|
+
improvedHideHeuristics: {
|
|
168
|
+
type: Boolean,
|
|
169
|
+
required: false,
|
|
170
|
+
default: false,
|
|
171
|
+
},
|
|
163
172
|
},
|
|
164
173
|
data() {
|
|
165
174
|
return {
|
|
@@ -169,6 +178,11 @@ export default {
|
|
|
169
178
|
};
|
|
170
179
|
},
|
|
171
180
|
computed: {
|
|
181
|
+
wrapperComponent() {
|
|
182
|
+
return this.improvedHideHeuristics
|
|
183
|
+
? BaseDropdownImprovedWrapper
|
|
184
|
+
: BaseDropdownDeprecatedWrapper;
|
|
185
|
+
},
|
|
172
186
|
hasNoVisibleToggleText() {
|
|
173
187
|
return !this.toggleText?.length || this.textSrOnly;
|
|
174
188
|
},
|
|
@@ -462,7 +476,11 @@ export default {
|
|
|
462
476
|
</script>
|
|
463
477
|
|
|
464
478
|
<template>
|
|
465
|
-
<
|
|
479
|
+
<component
|
|
480
|
+
:is="wrapperComponent"
|
|
481
|
+
:class="[$options.BASE_DROPDOWN_CLASS, { 'gl-display-block!': block }]"
|
|
482
|
+
@close="close"
|
|
483
|
+
>
|
|
466
484
|
<component
|
|
467
485
|
:is="toggleComponent"
|
|
468
486
|
v-bind="toggleAttributes"
|
|
@@ -497,5 +515,5 @@ export default {
|
|
|
497
515
|
<slot></slot>
|
|
498
516
|
</div>
|
|
499
517
|
</div>
|
|
500
|
-
</
|
|
518
|
+
</component>
|
|
501
519
|
</template>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import { OutsideDirective } from '../../../../directives/outside/outside';
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
name: 'BaseDropdownDeprecatedWrapper',
|
|
6
|
+
directives: { Outside: OutsideDirective },
|
|
7
|
+
};
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<template>
|
|
11
|
+
<div v-outside="(event) => $emit('close', event)">
|
|
12
|
+
<slot></slot>
|
|
13
|
+
</div>
|
|
14
|
+
</template>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import { OutsideDirective } from '../../../../directives/outside/outside';
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
name: 'BaseDropdownImprovedWrapper',
|
|
6
|
+
directives: { Outside: OutsideDirective },
|
|
7
|
+
};
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<template>
|
|
11
|
+
<div v-outside.click.focusin="(event) => $emit('close', event)">
|
|
12
|
+
<slot></slot>
|
|
13
|
+
</div>
|
|
14
|
+
</template>
|
|
@@ -228,6 +228,15 @@ export default {
|
|
|
228
228
|
required: false,
|
|
229
229
|
default: false,
|
|
230
230
|
},
|
|
231
|
+
/**
|
|
232
|
+
* Whether to use an improved hide
|
|
233
|
+
* functionality for the dropdown.
|
|
234
|
+
*/
|
|
235
|
+
improvedHideHeuristics: {
|
|
236
|
+
type: Boolean,
|
|
237
|
+
required: false,
|
|
238
|
+
default: false,
|
|
239
|
+
},
|
|
231
240
|
},
|
|
232
241
|
data() {
|
|
233
242
|
return {
|
|
@@ -378,6 +387,7 @@ export default {
|
|
|
378
387
|
:offset="dropdownOffset"
|
|
379
388
|
:fluid-width="fluidWidth"
|
|
380
389
|
:positioning-strategy="positioningStrategy"
|
|
390
|
+
:improved-hide-heuristics="improvedHideHeuristics"
|
|
381
391
|
class="gl-disclosure-dropdown"
|
|
382
392
|
@[$options.events.GL_DROPDOWN_SHOWN]="onShow"
|
|
383
393
|
@[$options.events.GL_DROPDOWN_HIDDEN]="onHide"
|
|
@@ -349,6 +349,15 @@ export default {
|
|
|
349
349
|
'%d results'
|
|
350
350
|
),
|
|
351
351
|
},
|
|
352
|
+
/**
|
|
353
|
+
* Whether to use an improved hide
|
|
354
|
+
* functionality for the dropdown.
|
|
355
|
+
*/
|
|
356
|
+
improvedHideHeuristics: {
|
|
357
|
+
type: Boolean,
|
|
358
|
+
required: false,
|
|
359
|
+
default: false,
|
|
360
|
+
},
|
|
352
361
|
},
|
|
353
362
|
data() {
|
|
354
363
|
return {
|
|
@@ -770,6 +779,7 @@ export default {
|
|
|
770
779
|
:offset="dropdownOffset"
|
|
771
780
|
:fluid-width="fluidWidth"
|
|
772
781
|
:positioning-strategy="positioningStrategy"
|
|
782
|
+
:improved-hide-heuristics="improvedHideHeuristics"
|
|
773
783
|
@[$options.events.GL_DROPDOWN_SHOWN]="onShow"
|
|
774
784
|
@[$options.events.GL_DROPDOWN_HIDDEN]="onHide"
|
|
775
785
|
>
|
|
@@ -98,9 +98,13 @@ function parseBinding({ arg, value, modifiers }) {
|
|
|
98
98
|
);
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
|
|
101
|
+
const unsupportedModifiers = modifiersList.filter(
|
|
102
|
+
(modifier) => !supportedEventTypes.includes(modifier)
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
if (unsupportedModifiers.length > 0) {
|
|
102
106
|
throw new Error(
|
|
103
|
-
`[GlOutsideDirective] Cannot bind ${
|
|
107
|
+
`[GlOutsideDirective] Cannot bind ${unsupportedModifiers.join(', ')} events; supported event types are: ${supportedEventTypes.join(
|
|
104
108
|
', '
|
|
105
109
|
)}`
|
|
106
110
|
);
|