@gitlab/ui 62.9.3 → 62.11.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 +15 -0
- package/dist/components/base/new_dropdowns/disclosure/disclosure_dropdown.js +20 -3
- package/dist/components/base/new_dropdowns/disclosure/disclosure_dropdown_item.js +1 -1
- package/dist/components/charts/legend/legend.js +51 -3
- package/dist/utility_classes.css +1 -1
- package/dist/utility_classes.css.map +1 -1
- package/package.json +2 -2
- package/src/components/base/new_dropdowns/disclosure/disclosure_dropdown.md +1 -0
- package/src/components/base/new_dropdowns/disclosure/disclosure_dropdown.spec.js +16 -0
- package/src/components/base/new_dropdowns/disclosure/disclosure_dropdown.stories.js +13 -3
- package/src/components/base/new_dropdowns/disclosure/disclosure_dropdown.vue +21 -1
- package/src/components/base/new_dropdowns/disclosure/disclosure_dropdown_item.vue +1 -2
- package/src/components/charts/area/area.spec.js +11 -10
- package/src/components/charts/legend/legend.spec.js +47 -5
- package/src/components/charts/legend/legend.stories.js +21 -1
- package/src/components/charts/legend/legend.vue +52 -6
- package/src/scss/utilities.scss +8 -0
- package/src/scss/utility-mixins/cursor.scss +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
# [62.11.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v62.10.0...v62.11.0) (2023-05-12)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* **GlDisclosureDropdown:** Close the disclosure dropdown on item click ([f4c2208](https://gitlab.com/gitlab-org/gitlab-ui/commit/f4c2208af8f11b5aa96faa6bdb88898f67b4edcc))
|
|
7
|
+
|
|
8
|
+
# [62.10.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v62.9.3...v62.10.0) (2023-05-11)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* **GlChartLegend:** Prevent toggling off all legends ([b036385](https://gitlab.com/gitlab-org/gitlab-ui/commit/b036385448b95003368a22e1533304d6b8097050))
|
|
14
|
+
* add hover state to gl-cursor-notallowed mixin ([4a122c2](https://gitlab.com/gitlab-org/gitlab-ui/commit/4a122c2be93d4e5da505d3390ccea116353524f1))
|
|
15
|
+
|
|
1
16
|
## [62.9.3](https://gitlab.com/gitlab-org/gitlab-ui/compare/v62.9.2...v62.9.3) (2023-05-11)
|
|
2
17
|
|
|
3
18
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import clamp from 'lodash/clamp';
|
|
2
2
|
import uniqueId from 'lodash/uniqueId';
|
|
3
3
|
import { stopEvent, filterVisible } from '../../../../utils/utils';
|
|
4
|
-
import { GL_DROPDOWN_SHOWN, GL_DROPDOWN_HIDDEN, GL_DROPDOWN_FOCUS_CONTENT, HOME, END, ARROW_UP, ARROW_DOWN } from '../constants';
|
|
4
|
+
import { GL_DROPDOWN_SHOWN, GL_DROPDOWN_HIDDEN, GL_DROPDOWN_FOCUS_CONTENT, HOME, END, ARROW_UP, ARROW_DOWN, ENTER, SPACE } from '../constants';
|
|
5
5
|
import { buttonCategoryOptions, dropdownVariantOptions, buttonSizeOptions, dropdownPlacements } from '../../../../utils/constants';
|
|
6
6
|
import GlBaseDropdown from '../base_dropdown/base_dropdown';
|
|
7
7
|
import GlDisclosureDropdownItem, { ITEM_CLASS } from './disclosure_dropdown_item';
|
|
@@ -10,6 +10,7 @@ import { itemsValidator, hasOnlyListItems, isItem } from './utils';
|
|
|
10
10
|
import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
|
|
11
11
|
|
|
12
12
|
//
|
|
13
|
+
const ITEM_SELECTOR = `.${ITEM_CLASS}`;
|
|
13
14
|
var script = {
|
|
14
15
|
name: 'GlDisclosureDropdown',
|
|
15
16
|
events: {
|
|
@@ -169,6 +170,14 @@ var script = {
|
|
|
169
170
|
type: Boolean,
|
|
170
171
|
required: false,
|
|
171
172
|
default: false
|
|
173
|
+
},
|
|
174
|
+
/**
|
|
175
|
+
* Close the dropdown on item click (action)
|
|
176
|
+
*/
|
|
177
|
+
autoClose: {
|
|
178
|
+
type: Boolean,
|
|
179
|
+
required: false,
|
|
180
|
+
default: true
|
|
172
181
|
}
|
|
173
182
|
},
|
|
174
183
|
data() {
|
|
@@ -228,6 +237,8 @@ var script = {
|
|
|
228
237
|
this.focusNextItem(event, elements, -1);
|
|
229
238
|
} else if (code === ARROW_DOWN) {
|
|
230
239
|
this.focusNextItem(event, elements, 1);
|
|
240
|
+
} else if (code === ENTER || code === SPACE) {
|
|
241
|
+
this.handleAutoClose(event);
|
|
231
242
|
} else {
|
|
232
243
|
stop = false;
|
|
233
244
|
}
|
|
@@ -237,7 +248,7 @@ var script = {
|
|
|
237
248
|
},
|
|
238
249
|
getFocusableListItemElements() {
|
|
239
250
|
var _this$$refs$content;
|
|
240
|
-
const items = (_this$$refs$content = this.$refs.content) === null || _this$$refs$content === void 0 ? void 0 : _this$$refs$content.querySelectorAll(
|
|
251
|
+
const items = (_this$$refs$content = this.$refs.content) === null || _this$$refs$content === void 0 ? void 0 : _this$$refs$content.querySelectorAll(ITEM_SELECTOR);
|
|
241
252
|
return filterVisible(Array.from(items || []));
|
|
242
253
|
},
|
|
243
254
|
focusNextItem(event, elements, offset) {
|
|
@@ -264,6 +275,11 @@ var script = {
|
|
|
264
275
|
*/
|
|
265
276
|
this.$emit('action', action);
|
|
266
277
|
},
|
|
278
|
+
handleAutoClose(e) {
|
|
279
|
+
if (this.autoClose && e.target.closest(ITEM_SELECTOR)) {
|
|
280
|
+
this.closeAndFocus();
|
|
281
|
+
}
|
|
282
|
+
},
|
|
267
283
|
uniqueItemId() {
|
|
268
284
|
return uniqueId(`disclosure-item-`);
|
|
269
285
|
},
|
|
@@ -275,7 +291,7 @@ var script = {
|
|
|
275
291
|
const __vue_script__ = script;
|
|
276
292
|
|
|
277
293
|
/* template */
|
|
278
|
-
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,"popper-options":_vm.popperOptions,"fluid-width":_vm.fluidWidth},on:_vm._d({},[_vm.$options.events.GL_DROPDOWN_SHOWN,_vm.onShow,_vm.$options.events.GL_DROPDOWN_HIDDEN,_vm.onHide,_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",staticClass:"gl-new-dropdown-contents",attrs:{"id":_vm.disclosureId,"aria-labelledby":_vm.listAriaLabelledBy || _vm.toggleId,"data-testid":"disclosure-content","tabindex":"-1"},on:{"keydown":_vm.onKeydown}},[_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([{key:"list-item",fn:function(){return [_vm._t("list-item",null,{"item":item})]},proxy:true}],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)};
|
|
294
|
+
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,"popper-options":_vm.popperOptions,"fluid-width":_vm.fluidWidth},on:_vm._d({},[_vm.$options.events.GL_DROPDOWN_SHOWN,_vm.onShow,_vm.$options.events.GL_DROPDOWN_HIDDEN,_vm.onHide,_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",staticClass:"gl-new-dropdown-contents",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([{key:"list-item",fn:function(){return [_vm._t("list-item",null,{"item":item})]},proxy:true}],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)};
|
|
279
295
|
var __vue_staticRenderFns__ = [];
|
|
280
296
|
|
|
281
297
|
/* style */
|
|
@@ -308,3 +324,4 @@ var __vue_staticRenderFns__ = [];
|
|
|
308
324
|
);
|
|
309
325
|
|
|
310
326
|
export default __vue_component__;
|
|
327
|
+
export { ITEM_SELECTOR };
|
|
@@ -79,11 +79,11 @@ var script = {
|
|
|
79
79
|
code
|
|
80
80
|
} = event;
|
|
81
81
|
if (code === ENTER || code === SPACE) {
|
|
82
|
-
stopEvent(event);
|
|
83
82
|
if (this.isCustomContent) {
|
|
84
83
|
this.action();
|
|
85
84
|
} else {
|
|
86
85
|
var _this$$refs$item;
|
|
86
|
+
stopEvent(event);
|
|
87
87
|
/** Instead of simply navigating or calling the action, we want
|
|
88
88
|
* the `a/button` to be the target of the event as it might have additional attributes.
|
|
89
89
|
* E.g. `a` might have `target` attribute.
|
|
@@ -75,7 +75,8 @@ var script = {
|
|
|
75
75
|
},
|
|
76
76
|
data() {
|
|
77
77
|
return {
|
|
78
|
-
disabledSeries: {}
|
|
78
|
+
disabledSeries: {},
|
|
79
|
+
lastActiveSeriesLabel: null
|
|
79
80
|
};
|
|
80
81
|
},
|
|
81
82
|
computed: {
|
|
@@ -84,8 +85,17 @@ var script = {
|
|
|
84
85
|
fontFamily: this.textStyle.fontFamily || 'sans-serif',
|
|
85
86
|
fontSize: `${this.textStyle.fontSize || defaultFontSize}px`
|
|
86
87
|
};
|
|
88
|
+
},
|
|
89
|
+
hasOneSeriesElement() {
|
|
90
|
+
return this.seriesInfo.length === 1;
|
|
87
91
|
}
|
|
88
92
|
},
|
|
93
|
+
created() {
|
|
94
|
+
this.chart.on('legendselectchanged', this.suppressLastActiveSeriesLabelToggle);
|
|
95
|
+
},
|
|
96
|
+
beforeDestroy() {
|
|
97
|
+
this.chart.off('legendselectchanged', this.suppressLastActiveSeriesLabelToggle);
|
|
98
|
+
},
|
|
89
99
|
methods: {
|
|
90
100
|
sanitizeSeriesData(seriesData) {
|
|
91
101
|
var _seriesData$filter;
|
|
@@ -110,7 +120,12 @@ var script = {
|
|
|
110
120
|
seriesNameIsLong(seriesName) {
|
|
111
121
|
return seriesName.length > 120;
|
|
112
122
|
},
|
|
113
|
-
handleClick(
|
|
123
|
+
handleClick(_ref, key) {
|
|
124
|
+
let {
|
|
125
|
+
name,
|
|
126
|
+
disabled
|
|
127
|
+
} = _ref;
|
|
128
|
+
if (this.hasOneSeriesElement || this.isToggleDisabled(name, disabled)) return;
|
|
114
129
|
this.chart.dispatchAction({
|
|
115
130
|
type: 'legendToggleSelect',
|
|
116
131
|
name
|
|
@@ -134,6 +149,30 @@ var script = {
|
|
|
134
149
|
},
|
|
135
150
|
getColor(color, key) {
|
|
136
151
|
return this.disabledSeries[key] ? gray200 : color;
|
|
152
|
+
},
|
|
153
|
+
suppressLastActiveSeriesLabelToggle(_ref2) {
|
|
154
|
+
let {
|
|
155
|
+
selected
|
|
156
|
+
} = _ref2;
|
|
157
|
+
const selectedSeriesLabels = Object.entries(selected).filter(_ref3 => {
|
|
158
|
+
let [, isSelected] = _ref3;
|
|
159
|
+
return Boolean(isSelected);
|
|
160
|
+
});
|
|
161
|
+
this.lastActiveSeriesLabel = null;
|
|
162
|
+
if (selectedSeriesLabels.length === 1) {
|
|
163
|
+
const [lastActiveSeriesLabelName] = selectedSeriesLabels[0];
|
|
164
|
+
this.lastActiveSeriesLabel = lastActiveSeriesLabelName;
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
/**
|
|
168
|
+
* Disables toggling legend if it is the last active one or if its data series
|
|
169
|
+
* has a disabled property set to true
|
|
170
|
+
* @param {String} name Series name
|
|
171
|
+
* @param {Boolean} isDisabled Value of the series element's disabled property
|
|
172
|
+
* @returns {boolean}
|
|
173
|
+
*/
|
|
174
|
+
isToggleDisabled(name, isDisabled) {
|
|
175
|
+
return name === this.lastActiveSeriesLabel || isDisabled;
|
|
137
176
|
}
|
|
138
177
|
},
|
|
139
178
|
legendLayoutTypes: {
|
|
@@ -146,7 +185,16 @@ var script = {
|
|
|
146
185
|
const __vue_script__ = script;
|
|
147
186
|
|
|
148
187
|
/* template */
|
|
149
|
-
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',
|
|
188
|
+
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{"data-testid":"gl-chart-legend"}},[(_vm.layout === _vm.$options.legendLayoutTypes.LEGEND_LAYOUT_INLINE)?[_c('div',{staticClass:"gl-legend-inline"},_vm._l((_vm.seriesInfo),function(series,key){return _c('div',{key:key,staticClass:"gl-legend-inline-series",class:{
|
|
189
|
+
'text-muted': _vm.disabledSeries[key],
|
|
190
|
+
'w-100': _vm.seriesNameIsLong(series.name),
|
|
191
|
+
'gl-hover-cursor-not-allowed!':
|
|
192
|
+
_vm.hasOneSeriesElement || _vm.isToggleDisabled(series.name, series.disabled),
|
|
193
|
+
},style:(_vm.fontStyle),attrs:{"aria-disabled":_vm.hasOneSeriesElement || _vm.isToggleDisabled(series.name, series.disabled),"role":"button"},on:{"click":function($event){return _vm.handleClick(series, key)},"mouseenter":function($event){return _vm.handleMouseEnter(series.name)},"mouseleave":function($event){return _vm.handleMouseLeave(series.name)}}},[_c('gl-chart-series-label',{staticClass:"gl-legend-inline-series-label",class:{ 'w-75': _vm.seriesNameIsLong(series.name) },attrs:{"color":_vm.getColor(series.color, key),"type":series.type}},[_c('gl-truncate',{staticClass:"gl-font-weight-bold",attrs:{"text":series.name}})],1),_vm._v(" "),(series.data && series.data.length)?_c('span',{class:{ 'gl-white-space-nowrap': _vm.seriesNameIsLong(series.name) }},[_vm._v("\n "+_vm._s(_vm.averageText)+": "+_vm._s(_vm.seriesAverage(series.data))+" · "+_vm._s(_vm.maxText)+":\n "+_vm._s(_vm.seriesMax(series.data))+"\n ")]):_vm._e()],1)}),0)]:_vm._e(),_vm._v(" "),(_vm.layout === _vm.$options.legendLayoutTypes.LEGEND_LAYOUT_TABLE)?[_c('div',{staticClass:"gl-legend-tabular",style:(_vm.fontStyle)},[_c('header',{staticClass:"gl-legend-tabular-header"},[_c('div',{staticClass:"gl-legend-tabular-header-cell"},[_vm._v(_vm._s(_vm.minText))]),_vm._v(" "),_c('div',{staticClass:"gl-legend-tabular-header-cell"},[_vm._v(_vm._s(_vm.maxText))]),_vm._v(" "),_c('div',{staticClass:"gl-legend-tabular-header-cell"},[_vm._v(_vm._s(_vm.averageText))]),_vm._v(" "),_c('div',{staticClass:"gl-legend-tabular-header-cell"},[_vm._v(_vm._s(_vm.currentText))])]),_vm._v(" "),_c('section',{staticClass:"gl-legend-tabular-body"},_vm._l((_vm.seriesInfo),function(series,key){return _c('div',{key:key,staticClass:"gl-legend-tabular-row",class:{
|
|
194
|
+
'text-muted': _vm.disabledSeries[key],
|
|
195
|
+
'gl-hover-cursor-not-allowed!':
|
|
196
|
+
_vm.hasOneSeriesElement || _vm.isToggleDisabled(series.name, series.disabled),
|
|
197
|
+
},style:(_vm.fontStyle),attrs:{"aria-disabled":_vm.isToggleDisabled(series.name, series.disabled),"role":"button"},on:{"click":function($event){return _vm.handleClick(series, key)},"mouseenter":function($event){return _vm.handleMouseEnter(series.name)},"mouseleave":function($event){return _vm.handleMouseLeave(series.name)}}},[_c('div',{staticClass:"gl-legend-tabular-title-cell"},[_c('gl-chart-series-label',{style:(_vm.fontStyle),attrs:{"color":_vm.getColor(series.color, key),"type":series.type}},[_c('gl-truncate',{staticClass:"gl-font-weight-bold",attrs:{"text":series.name}})],1)],1),_vm._v(" "),(_vm.sanitizeSeriesData(series.data).length)?[_c('div',{staticClass:"gl-legend-tabular-details-cell"},[_vm._v(_vm._s(_vm.seriesMin(series.data)))]),_vm._v(" "),_c('div',{staticClass:"gl-legend-tabular-details-cell"},[_vm._v(_vm._s(_vm.seriesMax(series.data)))]),_vm._v(" "),_c('div',{staticClass:"gl-legend-tabular-details-cell"},[_vm._v(_vm._s(_vm.seriesAverage(series.data)))]),_vm._v(" "),_c('div',{staticClass:"gl-legend-tabular-details-cell"},[_vm._v(_vm._s(_vm.seriesLast(series.data)))])]:[_c('div',{staticClass:"gl-legend-tabular-details-cell"},[_vm._v("-")]),_vm._v(" "),_c('div',{staticClass:"gl-legend-tabular-details-cell"},[_vm._v("-")]),_vm._v(" "),_c('div',{staticClass:"gl-legend-tabular-details-cell"},[_vm._v("-")]),_vm._v(" "),_c('div',{staticClass:"gl-legend-tabular-details-cell"},[_vm._v("-")])]],2)}),0)])]:_vm._e()],2)};
|
|
150
198
|
var __vue_staticRenderFns__ = [];
|
|
151
199
|
|
|
152
200
|
/* style */
|