@gitlab/ui 108.3.0 → 108.4.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 CHANGED
@@ -1,3 +1,17 @@
1
+ # [108.4.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v108.3.1...v108.4.0) (2025-02-21)
2
+
3
+
4
+ ### Features
5
+
6
+ * **GlLink:** Add variants and use design tokens in GlLink ([ec6b16d](https://gitlab.com/gitlab-org/gitlab-ui/commit/ec6b16d5142e07a3abe6b6e11fc61f58cb7c2baa))
7
+
8
+ ## [108.3.1](https://gitlab.com/gitlab-org/gitlab-ui/compare/v108.3.0...v108.3.1) (2025-02-14)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **GlDisclosureDropdownItem:** remove improper aria-hidden ([37977f8](https://gitlab.com/gitlab-org/gitlab-ui/commit/37977f861dee1f84dcdd6ca1ed9702c6d8a19752))
14
+
1
15
  # [108.3.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v108.2.0...v108.3.0) (2025-02-12)
2
16
 
3
17
 
@@ -72,7 +72,7 @@ var script = {
72
72
  const __vue_script__ = script;
73
73
 
74
74
  /* template */
75
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"gl-avatar-labeled"},[_c('gl-avatar',_vm._g(_vm._b({class:_vm.avatarCssClasses,attrs:{"alt":""}},'gl-avatar',_vm.$attrs,false),_vm.avatarListeners)),_vm._v(" "),_c('div',{staticClass:"gl-avatar-labeled-labels !gl-text-left",class:_vm.avatarRowLayoutClass},[_c('div',{staticClass:"-gl-mx-1 -gl-my-1 gl-flex gl-flex-wrap gl-items-center !gl-text-left"},[(_vm.hasLabelLink)?_c('gl-link',{ref:"labelLink",staticClass:"gl-avatar-link",attrs:{"href":_vm.labelLink}},[_c('span',{staticClass:"gl-avatar-labeled-label"},[_vm._v(_vm._s(_vm.label))])]):_c('span',{staticClass:"gl-avatar-labeled-label"},[_vm._v(_vm._s(_vm.label))]),_vm._v(" "),_vm._t("meta")],2),_vm._v(" "),(_vm.hasSubLabelLink)?_c('gl-link',{staticClass:"gl-avatar-link",attrs:{"href":_vm.subLabelLink}},[_c('span',{staticClass:"gl-avatar-labeled-sublabel"},[_vm._v(_vm._s(_vm.subLabel))])]):_c('span',{staticClass:"gl-avatar-labeled-sublabel"},[_vm._v(_vm._s(_vm.subLabel))]),_vm._v(" "),_vm._t("default")],2)],1)};
75
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"gl-avatar-labeled"},[_c('gl-avatar',_vm._g(_vm._b({class:_vm.avatarCssClasses,attrs:{"alt":""}},'gl-avatar',_vm.$attrs,false),_vm.avatarListeners)),_vm._v(" "),_c('div',{staticClass:"gl-avatar-labeled-labels !gl-text-left",class:_vm.avatarRowLayoutClass},[_c('div',{staticClass:"-gl-mx-1 -gl-my-1 gl-flex gl-flex-wrap gl-items-center !gl-text-left"},[(_vm.hasLabelLink)?_c('gl-link',{ref:"labelLink",staticClass:"gl-avatar-link",attrs:{"href":_vm.labelLink,"variant":"meta"}},[_c('span',{staticClass:"gl-avatar-labeled-label"},[_vm._v(_vm._s(_vm.label))])]):_c('span',{staticClass:"gl-avatar-labeled-label"},[_vm._v(_vm._s(_vm.label))]),_vm._v(" "),_vm._t("meta")],2),_vm._v(" "),(_vm.hasSubLabelLink)?_c('gl-link',{staticClass:"gl-avatar-link",attrs:{"href":_vm.subLabelLink,"variant":"meta"}},[_c('span',{staticClass:"gl-avatar-labeled-sublabel"},[_vm._v(_vm._s(_vm.subLabel))])]):_c('span',{staticClass:"gl-avatar-labeled-sublabel"},[_vm._v(_vm._s(_vm.subLabel))]),_vm._v(" "),_vm._t("default")],2)],1)};
76
76
  var __vue_staticRenderFns__ = [];
77
77
 
78
78
  /* style */
@@ -12,7 +12,7 @@ var script = {
12
12
  const __vue_script__ = script;
13
13
 
14
14
  /* template */
15
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('gl-link',_vm._g(_vm._b({staticClass:"gl-avatar-link"},'gl-link',_vm.$attrs,false),_vm.$listeners),[_vm._t("default")],2)};
15
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('gl-link',_vm._g(_vm._b({staticClass:"gl-avatar-link",attrs:{"variant":"meta"}},'gl-link',_vm.$attrs,false),_vm.$listeners),[_vm._t("default")],2)};
16
16
  var __vue_staticRenderFns__ = [];
17
17
 
18
18
  /* style */
@@ -1,3 +1,4 @@
1
+ import uniqueId from 'lodash/uniqueId';
1
2
  import { GlTooltipDirective } from '../../../directives/tooltip';
2
3
  import { getDateInPast, getDateInFuture, getDayDifference } from '../../../utils/datetime_utility';
3
4
  import GlDatepicker from '../datepicker/datepicker';
@@ -26,6 +27,16 @@ var script = {
26
27
  required: false,
27
28
  default: 'To'
28
29
  },
30
+ fromAriaLabel: {
31
+ type: String,
32
+ required: false,
33
+ default: 'From date'
34
+ },
35
+ toAriaLabel: {
36
+ type: String,
37
+ required: false,
38
+ default: 'To date'
39
+ },
29
40
  value: {
30
41
  type: Object,
31
42
  required: false,
@@ -198,6 +209,12 @@ var script = {
198
209
  },
199
210
  showIndicator() {
200
211
  return Boolean(this.$scopedSlots.default || this.tooltip);
212
+ },
213
+ fromId() {
214
+ return uniqueId('date-from-field-');
215
+ },
216
+ toId() {
217
+ return uniqueId('date-to-field-');
201
218
  }
202
219
  },
203
220
  watch: {
@@ -273,7 +290,7 @@ var script = {
273
290
  const __vue_script__ = script;
274
291
 
275
292
  /* template */
276
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"gl-daterange-picker gl-flex gl-gap-5"},[_c('div',{class:_vm.startContainerClasses,attrs:{"data-testid":"daterange-picker-start-container"}},[_c('label',{class:_vm.labelClass},[_vm._v(_vm._s(_vm.fromLabel))]),_vm._v(" "),_c('gl-datepicker',{attrs:{"min-date":_vm.defaultMinDate,"max-date":_vm.fromCalendarMaxDate,"start-range":_vm.defaultMinDate,"end-range":_vm.fromCalendarMaxDate,"theme":_vm.theme,"i18n":_vm.i18n,"target":_vm.startPickerTarget,"container":_vm.startPickerContainer,"start-opened":_vm.startOpened,"state":_vm.startPickerState,"width":_vm.width},on:{"input":_vm.onStartDateSelected,"open":_vm.onStartPickerOpen,"close":_vm.onStartPickerClose},scopedSlots:_vm._u([{key:"after",fn:function(){return [_vm._t("after-start")]},proxy:true}],null,true),model:{value:(_vm.startDate),callback:function ($$v) {_vm.startDate=$$v;},expression:"startDate"}})],1),_vm._v(" "),_c('div',{class:_vm.endContainerClasses,attrs:{"data-testid":"daterange-picker-end-container"}},[_c('label',{class:_vm.labelClass},[_vm._v(_vm._s(_vm.toLabel))]),_vm._v(" "),_c('gl-datepicker',{key:_vm.numericStartTime,attrs:{"min-date":_vm.toCalendarMinDate,"max-date":_vm.toCalendarMaxDate,"start-range":_vm.toCalendarMinDate,"end-range":_vm.toCalendarMaxDate,"theme":_vm.theme,"i18n":_vm.i18n,"target":_vm.endPickerTarget,"container":_vm.endPickerContainer,"start-opened":_vm.openToCalendar,"default-date":_vm.toCalendarDefaultDate,"width":_vm.width,"state":_vm.endPickerState},on:{"input":_vm.onEndDateSelected,"open":_vm.onEndPickerOpen,"close":_vm.onEndPickerClose},scopedSlots:_vm._u([{key:"after",fn:function(){return [_vm._t("after-end")]},proxy:true}],null,true),model:{value:(_vm.endDate),callback:function ($$v) {_vm.endDate=$$v;},expression:"endDate"}})],1),_vm._v(" "),(_vm.showIndicator)?_c('div',{staticClass:"gl-daterange-picker-indicator",class:_vm.dateRangeIndicatorClass,attrs:{"data-testid":"daterange-picker-indicator"}},[_vm._t("default",null,null,{ daysSelected: _vm.numberOfDays }),_vm._v(" "),(_vm.tooltip)?_c('gl-icon',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip"}],attrs:{"name":"information-o","title":_vm.tooltip,"size":16,"variant":"info"}}):_vm._e()],2):_vm._e()])};
293
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"gl-daterange-picker gl-flex gl-gap-5"},[_c('div',{class:_vm.startContainerClasses,attrs:{"data-testid":"daterange-picker-start-container"}},[_c('label',{class:_vm.labelClass,attrs:{"for":_vm.fromId}},[_vm._v(_vm._s(_vm.fromLabel))]),_vm._v(" "),_c('gl-datepicker',{attrs:{"input-id":_vm.fromId,"input-label":_vm.fromAriaLabel,"min-date":_vm.defaultMinDate,"max-date":_vm.fromCalendarMaxDate,"start-range":_vm.defaultMinDate,"end-range":_vm.fromCalendarMaxDate,"theme":_vm.theme,"i18n":_vm.i18n,"target":_vm.startPickerTarget,"container":_vm.startPickerContainer,"start-opened":_vm.startOpened,"state":_vm.startPickerState,"width":_vm.width},on:{"input":_vm.onStartDateSelected,"open":_vm.onStartPickerOpen,"close":_vm.onStartPickerClose},scopedSlots:_vm._u([{key:"after",fn:function(){return [_vm._t("after-start")]},proxy:true}],null,true),model:{value:(_vm.startDate),callback:function ($$v) {_vm.startDate=$$v;},expression:"startDate"}})],1),_vm._v(" "),_c('div',{class:_vm.endContainerClasses,attrs:{"data-testid":"daterange-picker-end-container"}},[_c('label',{class:_vm.labelClass,attrs:{"for":_vm.toId}},[_vm._v(_vm._s(_vm.toLabel))]),_vm._v(" "),_c('gl-datepicker',{key:_vm.numericStartTime,attrs:{"input-id":_vm.toId,"input-label":_vm.toAriaLabel,"min-date":_vm.toCalendarMinDate,"max-date":_vm.toCalendarMaxDate,"start-range":_vm.toCalendarMinDate,"end-range":_vm.toCalendarMaxDate,"theme":_vm.theme,"i18n":_vm.i18n,"target":_vm.endPickerTarget,"container":_vm.endPickerContainer,"start-opened":_vm.openToCalendar,"default-date":_vm.toCalendarDefaultDate,"width":_vm.width,"state":_vm.endPickerState},on:{"input":_vm.onEndDateSelected,"open":_vm.onEndPickerOpen,"close":_vm.onEndPickerClose},scopedSlots:_vm._u([{key:"after",fn:function(){return [_vm._t("after-end")]},proxy:true}],null,true),model:{value:(_vm.endDate),callback:function ($$v) {_vm.endDate=$$v;},expression:"endDate"}})],1),_vm._v(" "),(_vm.showIndicator)?_c('div',{staticClass:"gl-daterange-picker-indicator",class:_vm.dateRangeIndicatorClass,attrs:{"data-testid":"daterange-picker-indicator"}},[_vm._t("default",null,null,{ daysSelected: _vm.numberOfDays }),_vm._v(" "),(_vm.tooltip)?_c('gl-icon',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip"}],attrs:{"name":"information-o","title":_vm.tooltip,"size":16,"variant":"info"}}):_vm._e()],2):_vm._e()])};
277
294
  var __vue_staticRenderFns__ = [];
278
295
 
279
296
  /* style */
@@ -1,5 +1,7 @@
1
1
  import { BLink } from '../../../vendor/bootstrap-vue/src/components/link/link';
2
2
  import { SafeLinkMixin } from '../../mixins/safe_link_mixin';
3
+ import { isExternalURL } from '../../../directives/safe_link/safe_link';
4
+ import { linkVariantOptions } from '../../../utils/constants';
3
5
  import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
4
6
 
5
7
  //
@@ -8,14 +10,43 @@ var script = {
8
10
  components: {
9
11
  BLink
10
12
  },
11
- mixins: [SafeLinkMixin]
13
+ mixins: [SafeLinkMixin],
14
+ props: {
15
+ /**
16
+ * If inline variant, controls ↗ character visibility
17
+ */
18
+ showExternalIcon: {
19
+ type: Boolean,
20
+ required: false,
21
+ default: false
22
+ },
23
+ /**
24
+ * Link variant
25
+ */
26
+ variant: {
27
+ type: String,
28
+ required: false,
29
+ default: null,
30
+ validator: value => value && Object.hasOwn(linkVariantOptions, value)
31
+ }
32
+ },
33
+ computed: {
34
+ isInlineAndHasExternalIcon() {
35
+ return this.showExternalIcon && this.variant === 'inline' && this.$attrs.href && isExternalURL(this.target, this.$attrs.href);
36
+ },
37
+ linkClasses() {
38
+ return ['gl-link', linkVariantOptions[this.variant], {
39
+ 'gl-link-inline-external': this.isInlineAndHasExternalIcon
40
+ }];
41
+ }
42
+ }
12
43
  };
13
44
 
14
45
  /* script */
15
46
  const __vue_script__ = script;
16
47
 
17
48
  /* template */
18
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-link',_vm._g(_vm._b({directives:[{name:"safe-link",rawName:"v-safe-link:[safeLinkConfig]",arg:_vm.safeLinkConfig}],staticClass:"gl-link",attrs:{"target":_vm.target}},'b-link',_vm.$attrs,false),_vm.$listeners),[_vm._t("default")],2)};
49
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-link',_vm._g(_vm._b({directives:[{name:"safe-link",rawName:"v-safe-link:[safeLinkConfig]",arg:_vm.safeLinkConfig}],class:_vm.linkClasses,attrs:{"target":_vm.target}},'b-link',_vm.$attrs,false),_vm.$listeners),[_vm._t("default")],2)};
19
50
  var __vue_staticRenderFns__ = [];
20
51
 
21
52
  /* style */
@@ -74,7 +74,7 @@ var script = {
74
74
  const __vue_script__ = script;
75
75
 
76
76
  /* template */
77
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',{class:_vm.borderClass},[(_vm.showHeader)?_c('div',{staticClass:"gl-py-2 gl-pl-4 gl-text-sm gl-font-bold gl-text-strong",attrs:{"id":_vm.nameId,"aria-hidden":"true"}},[_vm._t("group-label",function(){return [_vm._v(_vm._s(_vm.group.name))]})],2):_vm._e(),_vm._v(" "),_c('ul',{staticClass:"gl-mb-0 gl-list-none gl-pl-0",attrs:{"aria-labelledby":_vm.groupLabeledBy}},[_vm._t("default",function(){return _vm._l((_vm.group.items),function(item){return _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)})})})],2)])};
77
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',{class:_vm.borderClass},[(_vm.showHeader)?_c('div',{staticClass:"gl-py-2 gl-pl-4 gl-text-sm gl-font-bold gl-text-strong",attrs:{"id":_vm.nameId}},[_vm._t("group-label",function(){return [_vm._v(_vm._s(_vm.group.name))]})],2):_vm._e(),_vm._v(" "),_c('ul',{staticClass:"gl-mb-0 gl-list-none gl-pl-0",attrs:{"aria-labelledby":_vm.groupLabeledBy}},[_vm._t("default",function(){return _vm._l((_vm.group.items),function(item){return _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)})})})],2)])};
78
78
  var __vue_staticRenderFns__ = [];
79
79
 
80
80
  /* style */
@@ -62,4 +62,4 @@ const SafeLinkDirective = {
62
62
  }
63
63
  };
64
64
 
65
- export { SafeLinkDirective };
65
+ export { SafeLinkDirective, isExternalURL };