@gitlab/ui 126.3.0 → 126.3.2
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/dist/components/base/avatars_inline/avatars_inline.js +21 -0
- package/dist/components/base/badge/badge.js +10 -7
- package/dist/components/base/button/button.js +4 -1
- package/dist/components/base/drawer/drawer.js +19 -0
- package/dist/components/base/dropdown/dropdown_item.js +34 -0
- package/dist/components/base/filtered_search/filtered_search.js +4 -2
- package/dist/components/base/form/form_input_group/form_input_group.js +6 -0
- package/dist/components/base/icon/icon.js +4 -2
- package/dist/components/base/illustration/illustration.js +4 -2
- package/dist/components/base/label/label.js +26 -6
- package/dist/components/base/modal/modal.js +4 -1
- package/dist/components/base/new_dropdowns/base_dropdown/base_dropdown.js +8 -4
- package/dist/components/base/new_dropdowns/listbox/listbox.js +4 -3
- package/dist/components/base/popover/popover.js +15 -0
- package/dist/components/base/progress_bar/progress_bar.js +15 -0
- package/dist/components/base/search_box_by_type/search_box_by_type.js +20 -0
- package/dist/components/base/table/table.js +4 -1
- package/dist/components/base/tabs/tab/tab.js +33 -2
- package/dist/components/base/token/token.js +3 -0
- package/dist/components/dashboards/dashboard_layout/dashboard_layout.js +27 -1
- package/dist/components/dashboards/dashboard_layout/grid_layout/grid_layout.js +28 -6
- package/dist/utils/utils.js +14 -7
- package/package.json +4 -4
- package/src/components/base/avatars_inline/avatars_inline.vue +22 -0
- package/src/components/base/badge/badge.vue +9 -8
- package/src/components/base/button/button.vue +4 -4
- package/src/components/base/drawer/drawer.vue +23 -0
- package/src/components/base/dropdown/dropdown.vue +2 -2
- package/src/components/base/dropdown/dropdown_item.vue +35 -0
- package/src/components/base/filtered_search/filtered_search.vue +3 -2
- package/src/components/base/form/form_input_group/form_input_group.vue +6 -0
- package/src/components/base/icon/icon.vue +2 -2
- package/src/components/base/illustration/illustration.vue +4 -2
- package/src/components/base/label/label.vue +26 -6
- package/src/components/base/modal/modal.vue +8 -8
- package/src/components/base/new_dropdowns/base_dropdown/base_dropdown.vue +7 -4
- package/src/components/base/new_dropdowns/listbox/listbox.vue +3 -3
- package/src/components/base/popover/popover.vue +20 -1
- package/src/components/base/progress_bar/progress_bar.vue +15 -0
- package/src/components/base/search_box_by_type/search_box_by_type.vue +18 -0
- package/src/components/base/table/table.vue +1 -1
- package/src/components/base/tabs/tab/tab.vue +47 -2
- package/src/components/base/token/token.vue +4 -0
- package/src/components/dashboards/dashboard_layout/dashboard_layout.vue +29 -0
- package/src/components/dashboards/dashboard_layout/grid_layout/grid_layout.vue +29 -6
- package/src/utils/utils.js +10 -5
|
@@ -12,33 +12,54 @@ var script = {
|
|
|
12
12
|
GlTooltip
|
|
13
13
|
},
|
|
14
14
|
props: {
|
|
15
|
+
/**
|
|
16
|
+
* Array of avatar objects to display
|
|
17
|
+
*/
|
|
15
18
|
avatars: {
|
|
16
19
|
type: Array,
|
|
17
20
|
required: true
|
|
18
21
|
},
|
|
22
|
+
/**
|
|
23
|
+
* Maximum number of avatars to display before collapsing
|
|
24
|
+
*/
|
|
19
25
|
maxVisible: {
|
|
20
26
|
type: Number,
|
|
21
27
|
required: true
|
|
22
28
|
},
|
|
29
|
+
/**
|
|
30
|
+
* Size of each avatar in pixels
|
|
31
|
+
*/
|
|
23
32
|
avatarSize: {
|
|
24
33
|
type: Number,
|
|
25
34
|
required: true,
|
|
26
35
|
validator: value => avatarsInlineSizeOptions.includes(value)
|
|
27
36
|
},
|
|
37
|
+
/**
|
|
38
|
+
* Whether to show the avatars in collapsed state
|
|
39
|
+
*/
|
|
28
40
|
collapsed: {
|
|
29
41
|
type: Boolean,
|
|
30
42
|
required: false,
|
|
31
43
|
default: false
|
|
32
44
|
},
|
|
45
|
+
/**
|
|
46
|
+
* Screen reader text for the collapsed avatars badge
|
|
47
|
+
*/
|
|
33
48
|
badgeSrOnlyText: {
|
|
34
49
|
type: String,
|
|
35
50
|
required: true
|
|
36
51
|
},
|
|
52
|
+
/**
|
|
53
|
+
* Property name to extract tooltip text from each hidden avatar object
|
|
54
|
+
*/
|
|
37
55
|
badgeTooltipProp: {
|
|
38
56
|
type: String,
|
|
39
57
|
required: false,
|
|
40
58
|
default: ''
|
|
41
59
|
},
|
|
60
|
+
/**
|
|
61
|
+
* Maximum number of characters to display in the badge tooltip
|
|
62
|
+
*/
|
|
42
63
|
badgeTooltipMaxChars: {
|
|
43
64
|
type: Number,
|
|
44
65
|
required: false,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import GlLink from '../link/link';
|
|
2
2
|
import { badgeVariantOptions, badgeIconSizeOptions, linkVariantUnstyled } from '../../../utils/constants';
|
|
3
3
|
import GlIcon from '../icon/icon';
|
|
4
|
+
import { logWarning } from '../../../utils/utils';
|
|
4
5
|
import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
|
|
5
6
|
|
|
6
7
|
//
|
|
@@ -116,12 +117,6 @@ var script = {
|
|
|
116
117
|
role() {
|
|
117
118
|
return this.hasIconOnly ? 'img' : undefined;
|
|
118
119
|
},
|
|
119
|
-
ariaLabel() {
|
|
120
|
-
if (this.$attrs['aria-label']) {
|
|
121
|
-
return this.$attrs['aria-label'];
|
|
122
|
-
}
|
|
123
|
-
return this.role === 'img' ? this.icon : undefined;
|
|
124
|
-
},
|
|
125
120
|
iconSizeComputed() {
|
|
126
121
|
return badgeIconSizeOptions[this.iconSize];
|
|
127
122
|
},
|
|
@@ -154,6 +149,14 @@ var script = {
|
|
|
154
149
|
'!gl-px-2': !this.$scopedSlots.default
|
|
155
150
|
}];
|
|
156
151
|
}
|
|
152
|
+
},
|
|
153
|
+
mounted() {
|
|
154
|
+
if (this.hasIconOnly && !this.$attrs['aria-label']) {
|
|
155
|
+
logWarning('Icon-only badges require an aria-label for accessibility. The label should describe the metadata (e.g., "Due date", "Open issue"), not the icon name. See https://design.gitlab.com/components/badge#using-icon-only-badges', {
|
|
156
|
+
name: 'GlBadge',
|
|
157
|
+
element: this.$el
|
|
158
|
+
});
|
|
159
|
+
}
|
|
157
160
|
}
|
|
158
161
|
};
|
|
159
162
|
|
|
@@ -161,7 +164,7 @@ var script = {
|
|
|
161
164
|
const __vue_script__ = script;
|
|
162
165
|
|
|
163
166
|
/* template */
|
|
164
|
-
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(_vm.computedTag,_vm._g(_vm._b({tag:"component",class:_vm.classes,attrs:{"role":_vm.role
|
|
167
|
+
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(_vm.computedTag,_vm._g(_vm._b({tag:"component",class:_vm.classes,attrs:{"role":_vm.role}},'component',_vm.computedProps,false),_vm.$listeners),[(_vm.icon)?_c('gl-icon',{staticClass:"gl-badge-icon",class:{ '-gl-ml-2': _vm.isCircularIcon },attrs:{"size":_vm.iconSizeComputed,"name":_vm.icon}}):_vm._e(),_vm._v(" "),(_vm.$slots.default)?_c('span',{staticClass:"gl-badge-content"},[_vm._t("default")],2):_vm._e()],1)};
|
|
165
168
|
var __vue_staticRenderFns__ = [];
|
|
166
169
|
|
|
167
170
|
/* style */
|
|
@@ -364,7 +364,10 @@ var script = {
|
|
|
364
364
|
mounted() {
|
|
365
365
|
// eslint-disable-next-line @gitlab/vue-prefer-dollar-scopedslots
|
|
366
366
|
if (!this.$slots.default && !this.$attrs['aria-label'] && !this.$props.label) {
|
|
367
|
-
logWarning('
|
|
367
|
+
logWarning('Accessible name missing. Please add inner text or aria-label.', {
|
|
368
|
+
name: 'GlButton',
|
|
369
|
+
element: this.$el
|
|
370
|
+
});
|
|
368
371
|
}
|
|
369
372
|
},
|
|
370
373
|
methods: {
|
|
@@ -11,25 +11,40 @@ var script = {
|
|
|
11
11
|
GlButton
|
|
12
12
|
},
|
|
13
13
|
props: {
|
|
14
|
+
/**
|
|
15
|
+
* Controls the visibility state of the drawer.
|
|
16
|
+
*/
|
|
14
17
|
open: {
|
|
15
18
|
type: Boolean,
|
|
16
19
|
required: true
|
|
17
20
|
},
|
|
21
|
+
/**
|
|
22
|
+
* Height of the header element (e.g., '64px'). Used to position the drawer below a fixed header.
|
|
23
|
+
*/
|
|
18
24
|
headerHeight: {
|
|
19
25
|
type: String,
|
|
20
26
|
required: false,
|
|
21
27
|
default: ''
|
|
22
28
|
},
|
|
29
|
+
/**
|
|
30
|
+
* When true, makes the drawer header sticky so it remains visible when scrolling the drawer content.
|
|
31
|
+
*/
|
|
23
32
|
headerSticky: {
|
|
24
33
|
type: Boolean,
|
|
25
34
|
required: false,
|
|
26
35
|
default: false
|
|
27
36
|
},
|
|
37
|
+
/**
|
|
38
|
+
* Z-index value for the drawer. Useful for controlling stacking order with other elements.
|
|
39
|
+
*/
|
|
28
40
|
zIndex: {
|
|
29
41
|
type: Number,
|
|
30
42
|
required: false,
|
|
31
43
|
default: maxZIndex
|
|
32
44
|
},
|
|
45
|
+
/**
|
|
46
|
+
* Visual variant of the drawer.
|
|
47
|
+
*/
|
|
33
48
|
variant: {
|
|
34
49
|
type: String,
|
|
35
50
|
required: false,
|
|
@@ -91,6 +106,10 @@ var script = {
|
|
|
91
106
|
handleEscape(e) {
|
|
92
107
|
const ESC = 27;
|
|
93
108
|
if (this.open && e.keyCode === ESC) {
|
|
109
|
+
/**
|
|
110
|
+
* Emits when drawer gets closed (by pressing ESC or clicking the close button).
|
|
111
|
+
* @event close
|
|
112
|
+
*/
|
|
94
113
|
this.$emit('close');
|
|
95
114
|
}
|
|
96
115
|
}
|
|
@@ -15,51 +15,81 @@ var script = {
|
|
|
15
15
|
},
|
|
16
16
|
inheritAttrs: false,
|
|
17
17
|
props: {
|
|
18
|
+
/**
|
|
19
|
+
* URL for the avatar image to display
|
|
20
|
+
*/
|
|
18
21
|
avatarUrl: {
|
|
19
22
|
type: String,
|
|
20
23
|
required: false,
|
|
21
24
|
default: ''
|
|
22
25
|
},
|
|
26
|
+
/**
|
|
27
|
+
* Color variant for the icon on the left side
|
|
28
|
+
*/
|
|
23
29
|
iconColor: {
|
|
24
30
|
type: String,
|
|
25
31
|
required: false,
|
|
26
32
|
default: ''
|
|
27
33
|
},
|
|
34
|
+
/**
|
|
35
|
+
* Name of the icon to display on the left side
|
|
36
|
+
*/
|
|
28
37
|
iconName: {
|
|
29
38
|
type: String,
|
|
30
39
|
required: false,
|
|
31
40
|
default: ''
|
|
32
41
|
},
|
|
42
|
+
/**
|
|
43
|
+
* Aria label for the right icon button
|
|
44
|
+
*/
|
|
33
45
|
iconRightAriaLabel: {
|
|
34
46
|
type: String,
|
|
35
47
|
required: false,
|
|
36
48
|
default: ''
|
|
37
49
|
},
|
|
50
|
+
/**
|
|
51
|
+
* Name of the icon to display on the right side
|
|
52
|
+
*/
|
|
38
53
|
iconRightName: {
|
|
39
54
|
type: String,
|
|
40
55
|
required: false,
|
|
41
56
|
default: ''
|
|
42
57
|
},
|
|
58
|
+
/**
|
|
59
|
+
* Whether the dropdown item is checked
|
|
60
|
+
*/
|
|
43
61
|
isChecked: {
|
|
44
62
|
type: Boolean,
|
|
45
63
|
required: false,
|
|
46
64
|
default: false
|
|
47
65
|
},
|
|
66
|
+
/**
|
|
67
|
+
* Whether to show a check icon for this item
|
|
68
|
+
*/
|
|
48
69
|
isCheckItem: {
|
|
49
70
|
type: Boolean,
|
|
50
71
|
required: false,
|
|
51
72
|
default: false
|
|
52
73
|
},
|
|
74
|
+
/**
|
|
75
|
+
* Whether to center the check icon vertically
|
|
76
|
+
*/
|
|
53
77
|
isCheckCentered: {
|
|
54
78
|
type: Boolean,
|
|
55
79
|
required: false,
|
|
56
80
|
default: false
|
|
57
81
|
},
|
|
82
|
+
/**
|
|
83
|
+
* Secondary text to display below the main content
|
|
84
|
+
*/
|
|
58
85
|
secondaryText: {
|
|
59
86
|
type: String,
|
|
60
87
|
required: false,
|
|
61
88
|
default: ''
|
|
62
89
|
},
|
|
90
|
+
/**
|
|
91
|
+
* ARIA role for the dropdown item
|
|
92
|
+
*/
|
|
63
93
|
role: {
|
|
64
94
|
type: String,
|
|
65
95
|
required: false,
|
|
@@ -97,6 +127,10 @@ var script = {
|
|
|
97
127
|
},
|
|
98
128
|
methods: {
|
|
99
129
|
handleClickIconRight() {
|
|
130
|
+
/**
|
|
131
|
+
* Emitted when right icon is clicked.
|
|
132
|
+
* @event handleClickIconRight
|
|
133
|
+
*/
|
|
100
134
|
this.$emit('click-icon-right');
|
|
101
135
|
}
|
|
102
136
|
}
|
|
@@ -2,6 +2,7 @@ import isEqual from 'lodash/isEqual';
|
|
|
2
2
|
import cloneDeep from 'lodash/cloneDeep';
|
|
3
3
|
import { PortalTarget } from 'portal-vue';
|
|
4
4
|
import { GlTooltipDirective } from '../../../directives/tooltip/tooltip';
|
|
5
|
+
import { logWarning } from '../../../utils/utils';
|
|
5
6
|
import GlIcon from '../icon/icon';
|
|
6
7
|
import GlSearchBoxByClick from '../search_box_by_click/search_box_by_click';
|
|
7
8
|
import GlFilteredSearchTerm from './filtered_search_term';
|
|
@@ -67,8 +68,9 @@ var script = {
|
|
|
67
68
|
return !token || token.__v_skip;
|
|
68
69
|
});
|
|
69
70
|
if (!isOk) {
|
|
70
|
-
|
|
71
|
-
|
|
71
|
+
logWarning('You are using Vue3. In Vue3 each token component passed to filtered search must be wrapped into markRaw', {
|
|
72
|
+
name: 'GlFilteredSearch'
|
|
73
|
+
});
|
|
72
74
|
}
|
|
73
75
|
return isOk;
|
|
74
76
|
}
|
|
@@ -34,11 +34,17 @@ var script = {
|
|
|
34
34
|
}],
|
|
35
35
|
validator: options => options.every(opt => Object.keys(opt).includes('name', 'value'))
|
|
36
36
|
},
|
|
37
|
+
/**
|
|
38
|
+
* Accessible label for the input field. Used for the aria-label attribute.
|
|
39
|
+
*/
|
|
37
40
|
label: {
|
|
38
41
|
type: String,
|
|
39
42
|
required: false,
|
|
40
43
|
default: undefined
|
|
41
44
|
},
|
|
45
|
+
/**
|
|
46
|
+
* Additional CSS class(es) to apply to the input element.
|
|
47
|
+
*/
|
|
42
48
|
inputClass: {
|
|
43
49
|
type: [String, Array, Object],
|
|
44
50
|
required: false,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import iconsPath from '@gitlab/svgs/dist/icons.svg';
|
|
2
2
|
import iconsInfo from '@gitlab/svgs/dist/icons.json';
|
|
3
|
+
import { logWarning } from '../../../utils/utils';
|
|
3
4
|
import { iconSizeOptions, iconVariantOptions } from '../../../utils/constants';
|
|
4
5
|
import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
|
|
5
6
|
|
|
@@ -37,8 +38,9 @@ var script = {
|
|
|
37
38
|
if (knownIcons.has(value)) {
|
|
38
39
|
return true;
|
|
39
40
|
}
|
|
40
|
-
|
|
41
|
-
|
|
41
|
+
logWarning(`Icon '${value}' is not a known icon of @gitlab/svgs`, {
|
|
42
|
+
name: 'GlIcon'
|
|
43
|
+
});
|
|
42
44
|
return false;
|
|
43
45
|
}
|
|
44
46
|
},
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import illustrationsPath from '@gitlab/svgs/dist/illustrations.svg';
|
|
2
2
|
import illustrationsInfo from '@gitlab/svgs/dist/illustrations.json';
|
|
3
|
+
import { logWarning } from '../../../utils/utils';
|
|
3
4
|
import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
|
|
4
5
|
|
|
5
6
|
//
|
|
@@ -25,8 +26,9 @@ var script = {
|
|
|
25
26
|
if (knownIllustrations.some(obj => obj.name === value)) {
|
|
26
27
|
return true;
|
|
27
28
|
}
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
logWarning(`Illustration '${value}' is not a known illustration of @gitlab/svgs`, {
|
|
30
|
+
name: 'GlIllustration'
|
|
31
|
+
});
|
|
30
32
|
return false;
|
|
31
33
|
}
|
|
32
34
|
}
|
|
@@ -17,41 +17,65 @@ var script = {
|
|
|
17
17
|
GlTooltip
|
|
18
18
|
},
|
|
19
19
|
props: {
|
|
20
|
+
/**
|
|
21
|
+
* Background color of the label in hex, rgb, or rgba format
|
|
22
|
+
*/
|
|
20
23
|
backgroundColor: {
|
|
21
24
|
type: String,
|
|
22
25
|
required: true,
|
|
23
26
|
validator: value => /^(#|rgb|rgba)/.test(value)
|
|
24
27
|
},
|
|
28
|
+
/**
|
|
29
|
+
* Title text of the label
|
|
30
|
+
*/
|
|
25
31
|
title: {
|
|
26
32
|
type: String,
|
|
27
33
|
required: true,
|
|
28
34
|
default: ''
|
|
29
35
|
},
|
|
36
|
+
/**
|
|
37
|
+
* Description text shown in tooltip
|
|
38
|
+
*/
|
|
30
39
|
description: {
|
|
31
40
|
type: String,
|
|
32
41
|
required: false,
|
|
33
42
|
default: ''
|
|
34
43
|
},
|
|
44
|
+
/**
|
|
45
|
+
* Placement of the tooltip
|
|
46
|
+
*/
|
|
35
47
|
tooltipPlacement: {
|
|
36
48
|
type: String,
|
|
37
49
|
required: false,
|
|
38
50
|
default: 'top'
|
|
39
51
|
},
|
|
52
|
+
/**
|
|
53
|
+
* Target URL for the label link
|
|
54
|
+
*/
|
|
40
55
|
target: {
|
|
41
56
|
type: String,
|
|
42
57
|
required: false,
|
|
43
58
|
default: ''
|
|
44
59
|
},
|
|
60
|
+
/**
|
|
61
|
+
* Whether the label is scoped (uses :: separator)
|
|
62
|
+
*/
|
|
45
63
|
scoped: {
|
|
46
64
|
type: Boolean,
|
|
47
65
|
required: false,
|
|
48
66
|
default: false
|
|
49
67
|
},
|
|
68
|
+
/**
|
|
69
|
+
* Whether to show the close button
|
|
70
|
+
*/
|
|
50
71
|
showCloseButton: {
|
|
51
72
|
type: Boolean,
|
|
52
73
|
required: false,
|
|
53
74
|
default: false
|
|
54
75
|
},
|
|
76
|
+
/**
|
|
77
|
+
* Whether the label is disabled
|
|
78
|
+
*/
|
|
55
79
|
disabled: {
|
|
56
80
|
type: Boolean,
|
|
57
81
|
required: false,
|
|
@@ -99,19 +123,15 @@ var script = {
|
|
|
99
123
|
methods: {
|
|
100
124
|
onClick(e) {
|
|
101
125
|
/**
|
|
102
|
-
* Emitted when label is clicked
|
|
103
|
-
*
|
|
126
|
+
* Emitted when the label is clicked.
|
|
104
127
|
* @event click
|
|
105
|
-
* @type {object}
|
|
106
128
|
*/
|
|
107
129
|
this.$emit('click', e);
|
|
108
130
|
},
|
|
109
131
|
onClose(e) {
|
|
110
132
|
/**
|
|
111
|
-
* Emitted when
|
|
112
|
-
*
|
|
133
|
+
* Emitted when the close button is clicked.
|
|
113
134
|
* @event close
|
|
114
|
-
* @type {object}
|
|
115
135
|
*/
|
|
116
136
|
this.$emit('close', e);
|
|
117
137
|
}
|
|
@@ -141,7 +141,10 @@ var script = {
|
|
|
141
141
|
},
|
|
142
142
|
mounted() {
|
|
143
143
|
if (!this.ariaLabel && !this.title) {
|
|
144
|
-
logWarning('
|
|
144
|
+
logWarning('Accessible name for modal missing. Please add title prop or aria-label.', {
|
|
145
|
+
name: 'GlModal',
|
|
146
|
+
element: this.$el
|
|
147
|
+
});
|
|
145
148
|
}
|
|
146
149
|
},
|
|
147
150
|
methods: {
|
|
@@ -90,8 +90,9 @@ var script = {
|
|
|
90
90
|
default: 'bottom-start',
|
|
91
91
|
validator: value => {
|
|
92
92
|
if (['left', 'center', 'right'].includes(value)) {
|
|
93
|
-
logWarning(`
|
|
94
|
-
|
|
93
|
+
logWarning(`"${value}" placement is deprecated. Use ${dropdownPlacements[value]} instead.`, {
|
|
94
|
+
name: 'GlDisclosureDropdown/GlCollapsibleListbox'
|
|
95
|
+
});
|
|
95
96
|
}
|
|
96
97
|
return Object.keys(dropdownPlacements).includes(value);
|
|
97
98
|
}
|
|
@@ -307,8 +308,11 @@ var script = {
|
|
|
307
308
|
methods: {
|
|
308
309
|
checkToggleFocusable() {
|
|
309
310
|
if (!isElementFocusable(this.toggleElement) && !isElementTabbable(this.toggleElement)) {
|
|
310
|
-
logWarning(`
|
|
311
|
-
Use 'a' or 'button' element instead or make sure to add 'role="button"' along with 'tabindex' otherwise.`,
|
|
311
|
+
logWarning(`Toggle is missing a 'tabindex' and cannot be focused.
|
|
312
|
+
Use 'a' or 'button' element instead or make sure to add 'role="button"' along with 'tabindex' otherwise.`, {
|
|
313
|
+
name: 'GlDisclosureDropdown/GlCollapsibleListbox',
|
|
314
|
+
element: this.$el
|
|
315
|
+
});
|
|
312
316
|
}
|
|
313
317
|
},
|
|
314
318
|
getArrowOffsets(actualPlacement) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import clamp from 'lodash/clamp';
|
|
2
2
|
import uniqueId from 'lodash/uniqueId';
|
|
3
|
-
import { stopEvent } from '../../../../utils/utils';
|
|
3
|
+
import { logWarning, stopEvent } from '../../../../utils/utils';
|
|
4
4
|
import { GL_DROPDOWN_SHOWN, GL_DROPDOWN_HIDDEN, POSITION_ABSOLUTE, POSITION_FIXED, GL_DROPDOWN_CONTENTS_CLASS, ARROW_UP, ENTER, ARROW_DOWN, END, HOME } from '../constants';
|
|
5
5
|
import { buttonCategoryOptions, dropdownVariantOptions, buttonSizeOptions, dropdownPlacements } from '../../../../utils/constants';
|
|
6
6
|
import GlButton from '../../button/button';
|
|
@@ -550,8 +550,9 @@ var script = {
|
|
|
550
550
|
immediate: true,
|
|
551
551
|
handler(newValue) {
|
|
552
552
|
if (newValue && this.items.some(item => !isOption(item))) {
|
|
553
|
-
|
|
554
|
-
|
|
553
|
+
logWarning('When using grouped options infinite scroll can only be used on the last group.', {
|
|
554
|
+
name: 'GlCollapsibleListbox'
|
|
555
|
+
});
|
|
555
556
|
}
|
|
556
557
|
}
|
|
557
558
|
}
|
|
@@ -16,6 +16,9 @@ var script = {
|
|
|
16
16
|
mixins: [tooltipMixin(popoverRefName)],
|
|
17
17
|
inheritAttrs: false,
|
|
18
18
|
props: {
|
|
19
|
+
/**
|
|
20
|
+
* Additional CSS class(es) to apply to the popover.
|
|
21
|
+
*/
|
|
19
22
|
cssClasses: {
|
|
20
23
|
type: [Array, String, Object],
|
|
21
24
|
required: false,
|
|
@@ -31,21 +34,33 @@ var script = {
|
|
|
31
34
|
required: false,
|
|
32
35
|
default: 'hover focus'
|
|
33
36
|
},
|
|
37
|
+
/**
|
|
38
|
+
* Title text to display in the popover header.
|
|
39
|
+
*/
|
|
34
40
|
title: {
|
|
35
41
|
type: String,
|
|
36
42
|
required: false,
|
|
37
43
|
default: ''
|
|
38
44
|
},
|
|
45
|
+
/**
|
|
46
|
+
* When true, displays a close button in the popover header.
|
|
47
|
+
*/
|
|
39
48
|
showCloseButton: {
|
|
40
49
|
type: Boolean,
|
|
41
50
|
required: false,
|
|
42
51
|
default: false
|
|
43
52
|
},
|
|
53
|
+
/**
|
|
54
|
+
* Placement of the popover relative to the target element.
|
|
55
|
+
*/
|
|
44
56
|
placement: {
|
|
45
57
|
type: String,
|
|
46
58
|
required: false,
|
|
47
59
|
default: popoverPlacements.top
|
|
48
60
|
},
|
|
61
|
+
/**
|
|
62
|
+
* Padding (in pixels) between the popover and the viewport boundary.
|
|
63
|
+
*/
|
|
49
64
|
boundaryPadding: {
|
|
50
65
|
type: [Number, String],
|
|
51
66
|
required: false,
|
|
@@ -12,27 +12,42 @@ const backgroundClasses = {
|
|
|
12
12
|
var script = {
|
|
13
13
|
name: 'GlProgressBar',
|
|
14
14
|
props: {
|
|
15
|
+
/**
|
|
16
|
+
* Accessible label for the progress bar. Used for the aria-label attribute.
|
|
17
|
+
*/
|
|
15
18
|
ariaLabel: {
|
|
16
19
|
type: String,
|
|
17
20
|
required: false,
|
|
18
21
|
default: translate('GlProgressBar.ariaLabel', 'Progress bar')
|
|
19
22
|
},
|
|
23
|
+
/**
|
|
24
|
+
* Current progress value. Should be between 0 and the max value.
|
|
25
|
+
*/
|
|
20
26
|
value: {
|
|
21
27
|
type: [Number, String],
|
|
22
28
|
required: false,
|
|
23
29
|
default: 0
|
|
24
30
|
},
|
|
31
|
+
/**
|
|
32
|
+
* Visual variant of the progress bar.
|
|
33
|
+
*/
|
|
25
34
|
variant: {
|
|
26
35
|
type: String,
|
|
27
36
|
required: false,
|
|
28
37
|
default: 'primary',
|
|
29
38
|
validator: value => Object.keys(progressBarVariantOptions).includes(value)
|
|
30
39
|
},
|
|
40
|
+
/**
|
|
41
|
+
* Maximum value for the progress bar. The value prop is calculated as a percentage of this.
|
|
42
|
+
*/
|
|
31
43
|
max: {
|
|
32
44
|
type: [Number, String],
|
|
33
45
|
required: false,
|
|
34
46
|
default: 100
|
|
35
47
|
},
|
|
48
|
+
/**
|
|
49
|
+
* Custom height for the progress bar (e.g., '8px', '1rem').
|
|
50
|
+
*/
|
|
36
51
|
height: {
|
|
37
52
|
type: String,
|
|
38
53
|
required: false,
|
|
@@ -27,11 +27,17 @@ var script = {
|
|
|
27
27
|
required: false,
|
|
28
28
|
default: ''
|
|
29
29
|
},
|
|
30
|
+
/**
|
|
31
|
+
* Whether to render the search box without borders
|
|
32
|
+
*/
|
|
30
33
|
borderless: {
|
|
31
34
|
type: Boolean,
|
|
32
35
|
required: false,
|
|
33
36
|
default: false
|
|
34
37
|
},
|
|
38
|
+
/**
|
|
39
|
+
* Title text for the clear button
|
|
40
|
+
*/
|
|
35
41
|
clearButtonTitle: {
|
|
36
42
|
type: String,
|
|
37
43
|
required: false,
|
|
@@ -102,6 +108,10 @@ var script = {
|
|
|
102
108
|
this.$refs.input.$el.focus();
|
|
103
109
|
},
|
|
104
110
|
onInput(value) {
|
|
111
|
+
/**
|
|
112
|
+
* Emitted when the input value changes or gets cleared.
|
|
113
|
+
* @event input
|
|
114
|
+
*/
|
|
105
115
|
this.$emit('input', value);
|
|
106
116
|
},
|
|
107
117
|
onFocusout(event) {
|
|
@@ -111,6 +121,11 @@ var script = {
|
|
|
111
121
|
if (this.isInputOrClearButton(relatedTarget)) {
|
|
112
122
|
return;
|
|
113
123
|
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Emitted when focus leaves the search box (input and clear button).
|
|
127
|
+
* @event focusout
|
|
128
|
+
*/
|
|
114
129
|
this.$emit('focusout', event);
|
|
115
130
|
},
|
|
116
131
|
onFocusin(event) {
|
|
@@ -120,6 +135,11 @@ var script = {
|
|
|
120
135
|
if (this.isInputOrClearButton(relatedTarget)) {
|
|
121
136
|
return;
|
|
122
137
|
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Emitted when focus enters the search box (input or clear button).
|
|
141
|
+
* @event focusin
|
|
142
|
+
*/
|
|
123
143
|
this.$emit('focusin', event);
|
|
124
144
|
}
|
|
125
145
|
}
|
|
@@ -109,7 +109,10 @@ var script = {
|
|
|
109
109
|
// logWarning will call isDev before logging any message
|
|
110
110
|
// this additional call to isDev is being made to exit the condition early when run in production
|
|
111
111
|
if (isDev() && !shouldUseFullTable(this)) {
|
|
112
|
-
logWarning(glTableLiteWarning,
|
|
112
|
+
logWarning(glTableLiteWarning, {
|
|
113
|
+
name: 'GlTable',
|
|
114
|
+
element: this.$el
|
|
115
|
+
});
|
|
113
116
|
}
|
|
114
117
|
},
|
|
115
118
|
methods: {
|