@gitlab/ui 111.9.1 → 111.10.1

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 CHANGED
@@ -1,3 +1,17 @@
1
+ ## [111.10.1](https://gitlab.com/gitlab-org/gitlab-ui/compare/v111.10.0...v111.10.1) (2025-03-31)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **GlAreaChart:** Legend is updated on changes ([0caa619](https://gitlab.com/gitlab-org/gitlab-ui/commit/0caa61948ad48ee1098c063bacf3c3ddfff3e804))
7
+
8
+ # [111.10.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v111.9.1...v111.10.0) (2025-03-28)
9
+
10
+
11
+ ### Features
12
+
13
+ * **GlCollapsibleListbox:** Allow listbox options to have a null value ([6e1c5f6](https://gitlab.com/gitlab-org/gitlab-ui/commit/6e1c5f6af82d74c856ab4f1a5985d65316cbc39b))
14
+
1
15
  ## [111.9.1](https://gitlab.com/gitlab-org/gitlab-ui/compare/v111.9.0...v111.9.1) (2025-03-28)
2
16
 
3
17
 
@@ -18,6 +18,7 @@ import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
18
18
 
19
19
  //
20
20
  const ITEM_SELECTOR = '[role="option"]';
21
+ const ITEM_NULL_KEY = Symbol('null-key');
21
22
  const HEADER_ITEMS_BORDER_CLASSES = ['gl-border-b-1', 'gl-border-b-solid', 'gl-border-b-dropdown-divider'];
22
23
  const GROUP_TOP_BORDER_CLASSES = ['gl-border-t-1', 'gl-border-t-solid', 'gl-border-t-dropdown-divider', 'gl-pt-1', 'gl-mt-2'];
23
24
  const SEARCH_INPUT_SELECTOR = '.gl-listbox-search-input';
@@ -725,6 +726,12 @@ var script = {
725
726
  */
726
727
  this.$emit('bottom-reached');
727
728
  },
729
+ listboxItemKey(item) {
730
+ if (item.value === null) {
731
+ return ITEM_NULL_KEY;
732
+ }
733
+ return item.value;
734
+ },
728
735
  listboxItemMoreItemsAriaAttributes(index) {
729
736
  if (this.totalItems === null) {
730
737
  return {};
@@ -769,7 +776,7 @@ var script = {
769
776
  const __vue_script__ = script;
770
777
 
771
778
  /* template */
772
- 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.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,"positioning-strategy":_vm.positioningStrategy},on:_vm._d({},[_vm.$options.events.GL_DROPDOWN_SHOWN,_vm.onShow,_vm.$options.events.GL_DROPDOWN_HIDDEN,_vm.onHide]),scopedSlots:_vm._u([(_vm.hasCustomToggle)?{key:"toggle",fn:function(){return [_vm._t("toggle")]},proxy:true}:null],null,true)},[_vm._v(" "),(_vm.headerText)?_c('div',{staticClass:"gl-flex gl-min-h-8 gl-items-center !gl-p-4",class:_vm.$options.HEADER_ITEMS_BORDER_CLASSES},[_c('div',{staticClass:"gl-grow gl-pr-2 gl-text-sm gl-font-bold gl-text-strong",attrs:{"id":_vm.headerId,"data-testid":"listbox-header-text"}},[_vm._v("\n "+_vm._s(_vm.headerText)+"\n ")]),_vm._v(" "),(_vm.showResetButton)?_c('gl-button',{staticClass:"!gl-m-0 !gl-w-auto gl-max-w-1/2 gl-flex-shrink-0 gl-text-ellipsis !gl-px-2 !gl-text-sm focus:!gl-focus-inset",attrs:{"category":"tertiary","size":"small","data-testid":"listbox-reset-button"},on:{"click":_vm.onResetButtonClicked}},[_vm._v("\n "+_vm._s(_vm.resetButtonLabel)+"\n ")]):_vm._e(),_vm._v(" "),(_vm.showSelectAllButton)?_c('gl-button',{staticClass:"!gl-m-0 !gl-w-auto gl-max-w-1/2 gl-flex-shrink-0 gl-text-ellipsis !gl-px-2 !gl-text-sm focus:!gl-focus-inset",attrs:{"category":"tertiary","size":"small","data-testid":"listbox-select-all-button"},on:{"click":_vm.onSelectAllButtonClicked}},[_vm._v("\n "+_vm._s(_vm.showSelectAllButtonLabel)+"\n ")]):_vm._e()],1):_vm._e(),_vm._v(" "),(_vm.searchable)?_c('div',{class:_vm.$options.HEADER_ITEMS_BORDER_CLASSES},[_c('gl-listbox-search-input',{ref:"searchBox",class:{ 'gl-listbox-topmost': !_vm.headerText },attrs:{"data-testid":"listbox-search-input","placeholder":_vm.searchPlaceholder},on:{"input":_vm.search,"keydown":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"enter",13,$event.key,"Enter")){ return null; }$event.preventDefault();},_vm.onKeydown]},model:{value:(_vm.searchStr),callback:function ($$v) {_vm.searchStr=$$v;},expression:"searchStr"}}),_vm._v(" "),(_vm.searching)?_c('gl-loading-icon',{staticClass:"gl-my-3",attrs:{"data-testid":"listbox-search-loader","size":"md"}}):_vm._e()],1):_vm._e(),_vm._v(" "),(_vm.showList)?_c(_vm.listboxTag,{ref:"list",tag:"component",staticClass:"gl-new-dropdown-contents gl-new-dropdown-contents-with-scrim-overlay",class:_vm.listboxClasses,attrs:{"id":_vm.listboxId,"aria-labelledby":_vm.listAriaLabelledBy || _vm.headerId || _vm.toggleIdComputed,"role":"listbox","tabindex":"0"},on:{"keydown":_vm.onKeydown}},[_c(_vm.itemTag,{tag:"component",staticClass:"top-scrim-wrapper",attrs:{"aria-hidden":"true","data-testid":"top-scrim"}},[_c('div',{staticClass:"top-scrim",class:{ 'top-scrim-light': !_vm.hasHeader, 'top-scrim-dark': _vm.hasHeader }})]),_vm._v(" "),_c(_vm.itemTag,{ref:"top-boundary",tag:"component",attrs:{"aria-hidden":"true"}}),_vm._v(" "),_vm._l((_vm.items),function(item,index){return [(_vm.isOption(item))?[_c('gl-listbox-item',_vm._b({key:item.value,attrs:{"data-testid":("listbox-item-" + (item.value)),"is-highlighted":_vm.isHighlighted(item),"is-selected":_vm.isSelected(item),"is-focused":_vm.isFocused(item),"is-check-centered":_vm.isCheckCentered},on:{"select":function($event){return _vm.onSelect(item, $event)}}},'gl-listbox-item',_vm.listboxItemMoreItemsAriaAttributes(index),false),[_vm._t("list-item",function(){return [_vm._v("\n "+_vm._s(item.text)+"\n ")]},{"item":item})],2)]:[_c('gl-listbox-group',{key:item.text,class:_vm.groupClasses(index),attrs:{"name":item.text,"text-sr-only":item.textSrOnly},scopedSlots:_vm._u([(_vm.$scopedSlots['group-label'])?{key:"group-label",fn:function(){return [_vm._t("group-label",null,{"group":item})]},proxy:true}:null],null,true)},[_vm._v(" "),_vm._l((item.options),function(option){return _c('gl-listbox-item',{key:option.value,attrs:{"data-testid":("listbox-item-" + (option.value)),"is-highlighted":_vm.isHighlighted(option),"is-selected":_vm.isSelected(option),"is-focused":_vm.isFocused(option),"is-check-centered":_vm.isCheckCentered},on:{"select":function($event){return _vm.onSelect(option, $event)}}},[_vm._t("list-item",function(){return [_vm._v("\n "+_vm._s(option.text)+"\n ")]},{"item":option})],2)})],2)]]}),_vm._v(" "),(_vm.infiniteScrollLoading)?_c(_vm.itemTag,{tag:"component"},[_c('gl-loading-icon',{staticClass:"gl-my-3",attrs:{"data-testid":"listbox-infinite-scroll-loader","size":"md"}})],1):_vm._e(),_vm._v(" "),(_vm.showIntersectionObserver)?_c('gl-intersection-observer',{on:{"appear":_vm.onIntersectionObserverAppear}}):_vm._e(),_vm._v(" "),_c(_vm.itemTag,{ref:"bottom-boundary",tag:"component",attrs:{"aria-hidden":"true"}}),_vm._v(" "),_c(_vm.itemTag,{tag:"component",staticClass:"bottom-scrim-wrapper",attrs:{"aria-hidden":"true","data-testid":"bottom-scrim"}},[_c('div',{staticClass:"bottom-scrim",class:{ '!gl-rounded-none': _vm.hasFooter }})])],2):_vm._e(),_vm._v(" "),(_vm.announceSRSearchResults)?_c('span',{staticClass:"gl-sr-only",attrs:{"data-testid":"listbox-number-of-results","aria-live":"assertive"}},[_vm._t("search-summary-sr-only",function(){return [_vm._v("\n "+_vm._s(_vm.srOnlyResultsLabel(_vm.flattenedOptions.length))+"\n ")]})],2):(_vm.showNoResultsText)?_c('div',{staticClass:"gl-py-3 gl-pl-7 gl-pr-5 gl-text-base gl-text-subtle",attrs:{"aria-live":"assertive","data-testid":"listbox-no-results-text"}},[_vm._v("\n "+_vm._s(_vm.noResultsText)+"\n ")]):_vm._e(),_vm._v(" "),_vm._t("footer")],2)};
779
+ 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.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,"positioning-strategy":_vm.positioningStrategy},on:_vm._d({},[_vm.$options.events.GL_DROPDOWN_SHOWN,_vm.onShow,_vm.$options.events.GL_DROPDOWN_HIDDEN,_vm.onHide]),scopedSlots:_vm._u([(_vm.hasCustomToggle)?{key:"toggle",fn:function(){return [_vm._t("toggle")]},proxy:true}:null],null,true)},[_vm._v(" "),(_vm.headerText)?_c('div',{staticClass:"gl-flex gl-min-h-8 gl-items-center !gl-p-4",class:_vm.$options.HEADER_ITEMS_BORDER_CLASSES},[_c('div',{staticClass:"gl-grow gl-pr-2 gl-text-sm gl-font-bold gl-text-strong",attrs:{"id":_vm.headerId,"data-testid":"listbox-header-text"}},[_vm._v("\n "+_vm._s(_vm.headerText)+"\n ")]),_vm._v(" "),(_vm.showResetButton)?_c('gl-button',{staticClass:"!gl-m-0 !gl-w-auto gl-max-w-1/2 gl-flex-shrink-0 gl-text-ellipsis !gl-px-2 !gl-text-sm focus:!gl-focus-inset",attrs:{"category":"tertiary","size":"small","data-testid":"listbox-reset-button"},on:{"click":_vm.onResetButtonClicked}},[_vm._v("\n "+_vm._s(_vm.resetButtonLabel)+"\n ")]):_vm._e(),_vm._v(" "),(_vm.showSelectAllButton)?_c('gl-button',{staticClass:"!gl-m-0 !gl-w-auto gl-max-w-1/2 gl-flex-shrink-0 gl-text-ellipsis !gl-px-2 !gl-text-sm focus:!gl-focus-inset",attrs:{"category":"tertiary","size":"small","data-testid":"listbox-select-all-button"},on:{"click":_vm.onSelectAllButtonClicked}},[_vm._v("\n "+_vm._s(_vm.showSelectAllButtonLabel)+"\n ")]):_vm._e()],1):_vm._e(),_vm._v(" "),(_vm.searchable)?_c('div',{class:_vm.$options.HEADER_ITEMS_BORDER_CLASSES},[_c('gl-listbox-search-input',{ref:"searchBox",class:{ 'gl-listbox-topmost': !_vm.headerText },attrs:{"data-testid":"listbox-search-input","placeholder":_vm.searchPlaceholder},on:{"input":_vm.search,"keydown":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"enter",13,$event.key,"Enter")){ return null; }$event.preventDefault();},_vm.onKeydown]},model:{value:(_vm.searchStr),callback:function ($$v) {_vm.searchStr=$$v;},expression:"searchStr"}}),_vm._v(" "),(_vm.searching)?_c('gl-loading-icon',{staticClass:"gl-my-3",attrs:{"data-testid":"listbox-search-loader","size":"md"}}):_vm._e()],1):_vm._e(),_vm._v(" "),(_vm.showList)?_c(_vm.listboxTag,{ref:"list",tag:"component",staticClass:"gl-new-dropdown-contents gl-new-dropdown-contents-with-scrim-overlay",class:_vm.listboxClasses,attrs:{"id":_vm.listboxId,"aria-labelledby":_vm.listAriaLabelledBy || _vm.headerId || _vm.toggleIdComputed,"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:{"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:{"data-testid":("listbox-item-" + (option.value)),"is-highlighted":_vm.isHighlighted(option),"is-selected":_vm.isSelected(option),"is-focused":_vm.isFocused(option),"is-check-centered":_vm.isCheckCentered},on:{"select":function($event){return _vm.onSelect(option, $event)}}},[_vm._t("list-item",function(){return [_vm._v("\n "+_vm._s(option.text)+"\n ")]},{"item":option})],2)})],2)]]}),_vm._v(" "),(_vm.infiniteScrollLoading)?_c(_vm.itemTag,{tag:"component"},[_c('gl-loading-icon',{staticClass:"gl-my-3",attrs:{"data-testid":"listbox-infinite-scroll-loader","size":"md"}})],1):_vm._e(),_vm._v(" "),(_vm.showIntersectionObserver)?_c('gl-intersection-observer',{on:{"appear":_vm.onIntersectionObserverAppear}}):_vm._e(),_vm._v(" "),_c(_vm.itemTag,{ref:"bottom-boundary",tag:"component",attrs:{"aria-hidden":"true"}}),_vm._v(" "),_c(_vm.itemTag,{tag:"component",staticClass:"bottom-scrim-wrapper",attrs:{"aria-hidden":"true","data-testid":"bottom-scrim"}},[_c('div',{staticClass:"bottom-scrim",class:{ '!gl-rounded-none': _vm.hasFooter }})])],2):_vm._e(),_vm._v(" "),(_vm.announceSRSearchResults)?_c('span',{staticClass:"gl-sr-only",attrs:{"data-testid":"listbox-number-of-results","aria-live":"assertive"}},[_vm._t("search-summary-sr-only",function(){return [_vm._v("\n "+_vm._s(_vm.srOnlyResultsLabel(_vm.flattenedOptions.length))+"\n ")]})],2):(_vm.showNoResultsText)?_c('div',{staticClass:"gl-py-3 gl-pl-7 gl-pr-5 gl-text-base gl-text-subtle",attrs:{"aria-live":"assertive","data-testid":"listbox-no-results-text"}},[_vm._v("\n "+_vm._s(_vm.noResultsText)+"\n ")]):_vm._e(),_vm._v(" "),_vm._t("footer")],2)};
773
780
  var __vue_staticRenderFns__ = [];
774
781
 
775
782
  /* style */
@@ -802,4 +809,4 @@ var __vue_staticRenderFns__ = [];
802
809
  );
803
810
 
804
811
  export default __vue_component__;
805
- export { ITEM_SELECTOR, SEARCH_INPUT_SELECTOR };
812
+ export { ITEM_NULL_KEY, ITEM_SELECTOR, SEARCH_INPUT_SELECTOR };
@@ -34,6 +34,9 @@ const mockOptions = [{
34
34
  }, {
35
35
  value: 'sup',
36
36
  text: 'Support'
37
+ }, {
38
+ value: null,
39
+ text: 'None'
37
40
  }];
38
41
  const mockOptionsValues = mockOptions.map(_ref => {
39
42
  let {
@@ -1,7 +1,7 @@
1
1
  import isNumber from 'lodash/isNumber';
2
2
  import isString from 'lodash/isString';
3
3
 
4
- const isOption = item => Boolean(item) && (isString(item.value) || isNumber(item.value));
4
+ const isOption = item => Boolean(item) && (isString(item.value) || isNumber(item.value) || item.value === null);
5
5
 
6
6
  // eslint-disable-next-line unicorn/no-array-callback-reference
7
7
  const isGroup = function () {
@@ -107,6 +107,7 @@ var script = {
107
107
  // https://gitlab.com/gitlab-org/gitlab-ui/-/issues/618
108
108
  return {
109
109
  chart: null,
110
+ compiledOptions: null,
110
111
  showAnnotationsTooltip: false,
111
112
  annotationsTooltipTitle: '',
112
113
  annotationsTooltipContent: '',
@@ -187,23 +188,23 @@ var script = {
187
188
  shouldShowAnnotationsTooltip() {
188
189
  return this.chart && this.hasAnnotations;
189
190
  },
190
- compiledOptions() {
191
- return this.chart ? this.chart.getOption() : null;
192
- },
193
191
  legendStyle() {
194
192
  return {
195
193
  paddingLeft: `${grid.left}px`
196
194
  };
197
195
  },
198
196
  seriesInfo() {
197
+ var _this$compiledOptions;
199
198
  if (this.legendSeriesInfo.length > 0) return this.legendSeriesInfo;
200
- return this.compiledOptions.series.reduce((acc, series, index) => {
199
+ const compiledSeries = ((_this$compiledOptions = this.compiledOptions) === null || _this$compiledOptions === void 0 ? void 0 : _this$compiledOptions.series) || [];
200
+ return compiledSeries.reduce((acc, series, index) => {
201
201
  if (series.type === 'line') {
202
+ var _series$data;
202
203
  acc.push({
203
204
  name: series.name,
204
205
  type: series.lineStyle.type,
205
206
  color: series.lineStyle.color || colorFromDefaultPalette(index),
206
- data: this.includeLegendAvgMax ? series.data.map(data => data[1]) : undefined
207
+ data: this.includeLegendAvgMax ? (_series$data = series.data) === null || _series$data === void 0 ? void 0 : _series$data.map(data => data[1]) : undefined
207
208
  });
208
209
  }
209
210
  return acc;
@@ -242,6 +243,9 @@ var script = {
242
243
  this.chart = chart;
243
244
  this.$emit('created', chart);
244
245
  },
246
+ onUpdated() {
247
+ this.compiledOptions = this.chart.getOption();
248
+ },
245
249
  onChartDataPointMouseOut() {
246
250
  this.showAnnotationsTooltip = false;
247
251
  },
@@ -278,7 +282,7 @@ const __vue_script__ = script;
278
282
  /* template */
279
283
  var __vue_render__ = function () {
280
284
  var _obj;
281
- var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"gl-relative",class:( _obj = {}, _obj[_vm.$options.HEIGHT_AUTO_CLASSES] = _vm.autoHeight, _obj )},[_c('chart',_vm._g(_vm._b({class:{ 'gl-grow': _vm.autoHeight },attrs:{"height":_vm.height,"options":_vm.options},on:{"created":_vm.onCreated}},'chart',_vm.$attrs,false),_vm.$listeners)),_vm._v(" "),(_vm.shouldShowAnnotationsTooltip)?_c('chart-tooltip',{ref:"annotationsTooltip",attrs:{"id":"annotationsTooltip","show":_vm.showAnnotationsTooltip,"top":_vm.annotationsTooltipPosition.top,"left":_vm.annotationsTooltipPosition.left,"chart":_vm.chart,"placement":"bottom"},scopedSlots:_vm._u([{key:"title",fn:function(){return [_c('div',[_vm._v(_vm._s(_vm.annotationsTooltipTitle))])]},proxy:true}],null,false,1889294429)},[_vm._v(" "),_c('div',[_vm._v(_vm._s(_vm.annotationsTooltipContent))])]):_vm._e(),_vm._v(" "),(_vm.chart)?_c('chart-tooltip',{ref:"dataTooltip",attrs:{"chart":_vm.chart,"use-default-tooltip-formatter":!_vm.formatTooltipText},scopedSlots:_vm._u([(_vm.$scopedSlots['tooltip-title'])?{key:"title",fn:function(scope){return [_vm._t("tooltip-title",null,null,scope)]}}:null,(_vm.$scopedSlots['tooltip-content'])?{key:"default",fn:function(scope){return [_vm._t("tooltip-content",null,null,scope)]}}:null,(_vm.$scopedSlots['tooltip-value'])?{key:"tooltip-value",fn:function(scope){return [_vm._t("tooltip-value",null,null,scope)]}}:null],null,true)}):_vm._e(),_vm._v(" "),(_vm.compiledOptions)?_c('chart-legend',{style:(_vm.legendStyle),attrs:{"chart":_vm.chart,"series-info":_vm.seriesInfo,"text-style":_vm.compiledOptions.textStyle,"min-text":_vm.legendMinText,"max-text":_vm.legendMaxText,"average-text":_vm.legendAverageText,"current-text":_vm.legendCurrentText,"layout":_vm.legendLayout}}):_vm._e()],1)};
285
+ var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"gl-relative",class:( _obj = {}, _obj[_vm.$options.HEIGHT_AUTO_CLASSES] = _vm.autoHeight, _obj )},[_c('chart',_vm._g(_vm._b({class:{ 'gl-grow': _vm.autoHeight },attrs:{"height":_vm.height,"options":_vm.options},on:{"created":_vm.onCreated,"updated":_vm.onUpdated}},'chart',_vm.$attrs,false),_vm.$listeners)),_vm._v(" "),(_vm.shouldShowAnnotationsTooltip)?_c('chart-tooltip',{ref:"annotationsTooltip",attrs:{"id":"annotationsTooltip","show":_vm.showAnnotationsTooltip,"top":_vm.annotationsTooltipPosition.top,"left":_vm.annotationsTooltipPosition.left,"chart":_vm.chart,"placement":"bottom"},scopedSlots:_vm._u([{key:"title",fn:function(){return [_c('div',[_vm._v(_vm._s(_vm.annotationsTooltipTitle))])]},proxy:true}],null,false,1889294429)},[_vm._v(" "),_c('div',[_vm._v(_vm._s(_vm.annotationsTooltipContent))])]):_vm._e(),_vm._v(" "),(_vm.chart)?_c('chart-tooltip',{ref:"dataTooltip",attrs:{"chart":_vm.chart,"use-default-tooltip-formatter":!_vm.formatTooltipText},scopedSlots:_vm._u([(_vm.$scopedSlots['tooltip-title'])?{key:"title",fn:function(scope){return [_vm._t("tooltip-title",null,null,scope)]}}:null,(_vm.$scopedSlots['tooltip-content'])?{key:"default",fn:function(scope){return [_vm._t("tooltip-content",null,null,scope)]}}:null,(_vm.$scopedSlots['tooltip-value'])?{key:"tooltip-value",fn:function(scope){return [_vm._t("tooltip-value",null,null,scope)]}}:null],null,true)}):_vm._e(),_vm._v(" "),(_vm.compiledOptions)?_c('chart-legend',{style:(_vm.legendStyle),attrs:{"chart":_vm.chart,"series-info":_vm.seriesInfo,"text-style":_vm.compiledOptions.textStyle,"min-text":_vm.legendMinText,"max-text":_vm.legendMaxText,"average-text":_vm.legendAverageText,"current-text":_vm.legendCurrentText,"layout":_vm.legendLayout}}):_vm._e()],1)};
282
286
  var __vue_staticRenderFns__ = [];
283
287
 
284
288
  /* style */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gitlab/ui",
3
- "version": "111.9.1",
3
+ "version": "111.10.1",
4
4
  "description": "GitLab UI Components",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
@@ -108,7 +108,7 @@
108
108
  "@gitlab/eslint-plugin": "20.7.1",
109
109
  "@gitlab/fonts": "^1.3.0",
110
110
  "@gitlab/stylelint-config": "6.2.2",
111
- "@gitlab/svgs": "3.123.0",
111
+ "@gitlab/svgs": "3.126.0",
112
112
  "@jest/test-sequencer": "^29.7.0",
113
113
  "@rollup/plugin-commonjs": "^11.1.0",
114
114
  "@rollup/plugin-node-resolve": "^7.1.3",
@@ -142,7 +142,7 @@
142
142
  "axe-playwright": "^2.1.0",
143
143
  "babel-jest": "29.0.1",
144
144
  "babel-loader": "^8.0.5",
145
- "cypress": "14.2.0",
145
+ "cypress": "14.2.1",
146
146
  "cypress-real-events": "^1.11.0",
147
147
  "dompurify": "^3.1.2",
148
148
  "emoji-regex": "^10.0.0",
@@ -100,7 +100,7 @@ objects:
100
100
 
101
101
  ```typescript
102
102
  type Option = {
103
- value: string
103
+ value: string | number | null
104
104
  text?: string
105
105
  }
106
106
 
@@ -34,6 +34,7 @@ import GlListboxGroup from './listbox_group.vue';
34
34
  import { isOption, itemsValidator, flattenedOptions } from './utils';
35
35
 
36
36
  export const ITEM_SELECTOR = '[role="option"]';
37
+ export const ITEM_NULL_KEY = Symbol('null-key');
37
38
  const HEADER_ITEMS_BORDER_CLASSES = [
38
39
  'gl-border-b-1',
39
40
  'gl-border-b-solid',
@@ -759,6 +760,12 @@ export default {
759
760
  */
760
761
  this.$emit('bottom-reached');
761
762
  },
763
+ listboxItemKey(item) {
764
+ if (item.value === null) {
765
+ return ITEM_NULL_KEY;
766
+ }
767
+ return item.value;
768
+ },
762
769
  listboxItemMoreItemsAriaAttributes(index) {
763
770
  if (this.totalItems === null) {
764
771
  return {};
@@ -907,7 +914,7 @@ export default {
907
914
  <template v-for="(item, index) in items">
908
915
  <template v-if="isOption(item)">
909
916
  <gl-listbox-item
910
- :key="item.value"
917
+ :key="listboxItemKey(item)"
911
918
  :data-testid="`listbox-item-${item.value}`"
912
919
  :is-highlighted="isHighlighted(item)"
913
920
  :is-selected="isSelected(item)"
@@ -937,7 +944,7 @@ export default {
937
944
 
938
945
  <gl-listbox-item
939
946
  v-for="option in item.options"
940
- :key="option.value"
947
+ :key="listboxItemKey(option)"
941
948
  :data-testid="`listbox-item-${option.value}`"
942
949
  :is-highlighted="isHighlighted(option)"
943
950
  :is-selected="isSelected(option)"
@@ -47,6 +47,10 @@ export const mockOptions = [
47
47
  value: 'sup',
48
48
  text: 'Support',
49
49
  },
50
+ {
51
+ value: null,
52
+ text: 'None',
53
+ },
50
54
  ];
51
55
 
52
56
  export const mockOptionsValues = mockOptions.map(({ value }) => value);
@@ -1,7 +1,8 @@
1
1
  import isNumber from 'lodash/isNumber';
2
2
  import isString from 'lodash/isString';
3
3
 
4
- const isOption = (item) => Boolean(item) && (isString(item.value) || isNumber(item.value));
4
+ const isOption = (item) =>
5
+ Boolean(item) && (isString(item.value) || isNumber(item.value) || item.value === null);
5
6
 
6
7
  // eslint-disable-next-line unicorn/no-array-callback-reference
7
8
  const isGroup = ({ options } = {}) => Array.isArray(options) && options.every(isOption);
@@ -141,6 +141,7 @@ export default {
141
141
  // https://gitlab.com/gitlab-org/gitlab-ui/-/issues/618
142
142
  return {
143
143
  chart: null,
144
+ compiledOptions: null,
144
145
  showAnnotationsTooltip: false,
145
146
  annotationsTooltipTitle: '',
146
147
  annotationsTooltipContent: '',
@@ -238,22 +239,20 @@ export default {
238
239
  shouldShowAnnotationsTooltip() {
239
240
  return this.chart && this.hasAnnotations;
240
241
  },
241
- compiledOptions() {
242
- return this.chart ? this.chart.getOption() : null;
243
- },
244
242
  legendStyle() {
245
243
  return { paddingLeft: `${grid.left}px` };
246
244
  },
247
245
  seriesInfo() {
248
246
  if (this.legendSeriesInfo.length > 0) return this.legendSeriesInfo;
249
247
 
250
- return this.compiledOptions.series.reduce((acc, series, index) => {
248
+ const compiledSeries = this.compiledOptions?.series || [];
249
+ return compiledSeries.reduce((acc, series, index) => {
251
250
  if (series.type === 'line') {
252
251
  acc.push({
253
252
  name: series.name,
254
253
  type: series.lineStyle.type,
255
254
  color: series.lineStyle.color || colorFromDefaultPalette(index),
256
- data: this.includeLegendAvgMax ? series.data.map((data) => data[1]) : undefined,
255
+ data: this.includeLegendAvgMax ? series.data?.map((data) => data[1]) : undefined,
257
256
  });
258
257
  }
259
258
  return acc;
@@ -292,6 +291,9 @@ export default {
292
291
  this.chart = chart;
293
292
  this.$emit('created', chart);
294
293
  },
294
+ onUpdated() {
295
+ this.compiledOptions = this.chart.getOption();
296
+ },
295
297
  onChartDataPointMouseOut() {
296
298
  this.showAnnotationsTooltip = false;
297
299
  },
@@ -328,6 +330,7 @@ export default {
328
330
  :options="options"
329
331
  v-on="$listeners"
330
332
  @created="onCreated"
333
+ @updated="onUpdated"
331
334
  />
332
335
  <chart-tooltip
333
336
  v-if="shouldShowAnnotationsTooltip"