@gitlab/ui 123.12.0 → 124.1.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.
Files changed (40) hide show
  1. package/dist/components/base/alert/alert.js +8 -2
  2. package/dist/components/base/form/form_fields/form_fields.js +20 -5
  3. package/dist/components/base/form/form_fields/form_fields_loop.js +75 -0
  4. package/dist/components/base/pagination/pagination.js +3 -8
  5. package/dist/index.css +1 -1
  6. package/dist/index.css.map +1 -1
  7. package/dist/tokens/build/js/tokens.dark.js +17 -1
  8. package/dist/tokens/build/js/tokens.js +17 -1
  9. package/dist/tokens/css/tokens.css +20 -4
  10. package/dist/tokens/css/tokens.dark.css +20 -4
  11. package/dist/tokens/docs/tokens-tailwind-docs.dark.json +515 -3
  12. package/dist/tokens/docs/tokens-tailwind-docs.json +515 -3
  13. package/dist/tokens/figma/constants.tokens.json +203 -4
  14. package/dist/tokens/js/tokens.dark.js +20 -0
  15. package/dist/tokens/js/tokens.js +20 -0
  16. package/dist/tokens/json/tokens.dark.json +499 -3
  17. package/dist/tokens/json/tokens.json +499 -3
  18. package/dist/tokens/scss/_tokens.dark.scss +20 -4
  19. package/dist/tokens/scss/_tokens.scss +20 -4
  20. package/dist/tokens/scss/_tokens_custom_properties.scss +16 -0
  21. package/dist/tokens/tailwind/tokens.cjs +110 -531
  22. package/package.json +1 -1
  23. package/src/components/base/alert/alert.vue +10 -2
  24. package/src/components/base/form/form_fields/form_fields.vue +20 -5
  25. package/src/components/base/form/form_fields/form_fields_loop.vue +44 -0
  26. package/src/components/base/pagination/pagination.vue +0 -8
  27. package/src/tokens/build/css/tokens.css +20 -4
  28. package/src/tokens/build/css/tokens.dark.css +20 -4
  29. package/src/tokens/build/docs/tokens-tailwind-docs.dark.json +515 -3
  30. package/src/tokens/build/docs/tokens-tailwind-docs.json +515 -3
  31. package/src/tokens/build/figma/constants.tokens.json +203 -4
  32. package/src/tokens/build/js/tokens.dark.js +16 -0
  33. package/src/tokens/build/js/tokens.js +16 -0
  34. package/src/tokens/build/json/tokens.dark.json +499 -3
  35. package/src/tokens/build/json/tokens.json +499 -3
  36. package/src/tokens/build/scss/_tokens.dark.scss +20 -4
  37. package/src/tokens/build/scss/_tokens.scss +20 -4
  38. package/src/tokens/build/scss/_tokens_custom_properties.scss +16 -0
  39. package/src/tokens/build/tailwind/tokens.cjs +16 -0
  40. package/src/tokens/constant/font.tokens.json +203 -4
@@ -87,7 +87,13 @@ var script = {
87
87
  required: false,
88
88
  default: false
89
89
  },
90
- // only set to 'assertive' if alert requires immediate user action, otherwise use a default value
90
+ /**
91
+ * Set the aria-live attribute on the alert.
92
+ *
93
+ * Only set to 'assertive' if alert requires immediate user action.
94
+ * Otherwise, rely on the default value.
95
+ *
96
+ */
91
97
  politeness: {
92
98
  type: String,
93
99
  required: false,
@@ -193,7 +199,7 @@ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=
193
199
  { 'gl-alert-not-dismissible': !_vm.dismissible },
194
200
  { 'gl-alert-no-icon': !_vm.showIcon },
195
201
  { 'gl-alert-has-title': !!_vm.title },
196
- _vm.variantClass ]},[(_vm.showIcon)?_c('div',{staticClass:"gl-alert-icon-container"},[_c('gl-icon',{staticClass:"gl-alert-icon",attrs:{"name":_vm.iconName}})],1):_vm._e(),_vm._v(" "),_c('div',{staticClass:"gl-alert-content",attrs:{"role":_vm.role,"aria-live":_vm.politeness}},[(_vm.title)?_c('h2',{staticClass:"gl-alert-title"},[_vm._v(_vm._s(_vm.title))]):_vm._e(),_vm._v(" "),_c('div',{staticClass:"gl-alert-body"},[_vm._t("default")],2),_vm._v(" "),(_vm.shouldRenderActions)?_c('div',{staticClass:"gl-alert-actions"},[_vm._t("actions",function(){return _vm._l((_vm.actionButtons),function(actionButton,index){return _c('gl-button',_vm._g(_vm._b({key:index,staticClass:"gl-alert-action"},'gl-button',actionButton.attrs,false),actionButton.listeners),[_vm._v("\n "+_vm._s(actionButton.text)+"\n ")])})})],2):_vm._e()]),_vm._v(" "),(_vm.dismissible)?_c('close-button',{ref:"dismiss",staticClass:"gl-dismiss-btn",attrs:{"label":_vm.dismissLabel},on:{"click":_vm.onDismiss}}):_vm._e()],1)};
202
+ _vm.variantClass ],attrs:{"role":_vm.role,"aria-live":_vm.politeness}},[(_vm.showIcon)?_c('div',{staticClass:"gl-alert-icon-container"},[_c('gl-icon',{staticClass:"gl-alert-icon",attrs:{"name":_vm.iconName}})],1):_vm._e(),_vm._v(" "),_c('div',{staticClass:"gl-alert-content"},[(_vm.title)?_c('h2',{staticClass:"gl-alert-title"},[_vm._v(_vm._s(_vm.title))]):_vm._e(),_vm._v(" "),_c('div',{staticClass:"gl-alert-body"},[_vm._t("default")],2),_vm._v(" "),(_vm.shouldRenderActions)?_c('div',{staticClass:"gl-alert-actions"},[_vm._t("actions",function(){return _vm._l((_vm.actionButtons),function(actionButton,index){return _c('gl-button',_vm._g(_vm._b({key:index,staticClass:"gl-alert-action"},'gl-button',actionButton.attrs,false),actionButton.listeners),[_vm._v("\n "+_vm._s(actionButton.text)+"\n ")])})})],2):_vm._e()]),_vm._v(" "),(_vm.dismissible)?_c('close-button',{ref:"dismiss",staticClass:"gl-dismiss-btn",attrs:{"label":_vm.dismissLabel},on:{"click":_vm.onDismiss}}):_vm._e()],1)};
197
203
  var __vue_staticRenderFns__ = [];
198
204
 
199
205
  /* style */
@@ -5,6 +5,7 @@ import GlFormGroup from '../form_group/form_group';
5
5
  import GlFormInput from '../form_input/form_input';
6
6
  import { setObjectProperty } from '../../../../utils/set_utils';
7
7
  import GlFormFieldValidator from './form_field_validator';
8
+ import GlFormFieldsLoop from './form_fields_loop';
8
9
  import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
9
10
 
10
11
  var script = {
@@ -12,7 +13,8 @@ var script = {
12
13
  components: {
13
14
  GlFormGroup,
14
15
  GlFormInput,
15
- GlFormFieldValidator
16
+ GlFormFieldValidator,
17
+ GlFormFieldsLoop
16
18
  },
17
19
  model: {
18
20
  prop: 'values',
@@ -66,7 +68,8 @@ var script = {
66
68
  data() {
67
69
  return {
68
70
  fieldDirtyStatuses: {},
69
- fieldValidations: {}
71
+ fieldValidations: {},
72
+ fieldIds: {}
70
73
  };
71
74
  },
72
75
  computed: {
@@ -95,7 +98,7 @@ var script = {
95
98
  },
96
99
  fieldsToRender() {
97
100
  return mapValues(this.fields, (field, fieldName) => {
98
- const id = uniqueId('gl-form-field-');
101
+ const id = this.memoizeAndReturnFieldId(field, fieldName);
99
102
  const inputSlotName = `input(${fieldName})`;
100
103
  const groupPassthroughSlotName = `group(${fieldName})-`;
101
104
  const afterSlotName = `after(${fieldName})`;
@@ -160,6 +163,15 @@ var script = {
160
163
  }
161
164
  return val;
162
165
  },
166
+ memoizeAndReturnFieldId(field, fieldName) {
167
+ const memoizedId = this.fieldIds[fieldName];
168
+ if (memoizedId) {
169
+ return memoizedId;
170
+ }
171
+ const id = field.id || uniqueId('gl-form-field-');
172
+ this.fieldIds[fieldName] = id;
173
+ return id;
174
+ },
163
175
  onFieldValidationUpdate(fieldName, invalidFeedback) {
164
176
  this.fieldValidations = setObjectProperty(this.fieldValidations, fieldName, invalidFeedback);
165
177
  this.$emit('field-validation', {
@@ -206,10 +218,13 @@ var script = {
206
218
  const __vue_script__ = script;
207
219
 
208
220
  /* template */
209
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_vm._l((_vm.fieldsToRender),function(field,fieldName){return [_c('gl-form-group',_vm._b({attrs:{"label":field.label,"label-for":field.id,"invalid-feedback":_vm.fieldValidationProps[fieldName].invalidFeedback,"state":_vm.fieldValidationProps[fieldName].state},scopedSlots:_vm._u([_vm._l((field.groupPassthroughSlots),function(ref){
221
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('gl-form-fields-loop',{attrs:{"fields":_vm.fieldsToRender},scopedSlots:_vm._u([{key:"default",fn:function(ref){
222
+ var field = ref.field;
223
+ var fieldName = ref.fieldName;
224
+ return [_c('gl-form-group',_vm._b({key:field.id,attrs:{"label":field.label,"label-for":field.id,"invalid-feedback":_vm.fieldValidationProps[fieldName].invalidFeedback,"state":_vm.fieldValidationProps[fieldName].state},scopedSlots:_vm._u([_vm._l((field.groupPassthroughSlots),function(ref){
210
225
  var slotName = ref.slotName;
211
226
  var childSlotName = ref.childSlotName;
212
- return {key:childSlotName,fn:function(){return [_vm._t(slotName)]},proxy:true}})],null,true)},'gl-form-group',field.groupAttrs,false),[_c('gl-form-field-validator',{attrs:{"value":_vm.fieldValues[fieldName],"validators":field.validators,"should-validate":_vm.fieldDirtyStatuses[fieldName]},on:{"update":function($event){return _vm.onFieldValidationUpdate(fieldName, $event)}}}),_vm._v(" "),_vm._v(" "),_vm._t(field.inputSlot.slotName,function(){return [_c('gl-form-input',_vm._b({attrs:{"id":field.id,"value":_vm.fieldValues[fieldName],"state":_vm.fieldValidationProps[fieldName].state},on:{"input":function($event){return _vm.onFieldInput(fieldName, $event)},"blur":function($event){return _vm.onFieldBlur(fieldName)}}},'gl-form-input',field.inputAttrs,false))]},null,field.inputSlot.attrs)],2),_vm._v(" "),_vm._t(field.afterSlotName)]})],2)};
227
+ return {key:childSlotName,fn:function(){return [_vm._t(slotName)]},proxy:true}})],null,true)},'gl-form-group',field.groupAttrs,false),[_c('gl-form-field-validator',{attrs:{"value":_vm.fieldValues[fieldName],"validators":field.validators,"should-validate":_vm.fieldDirtyStatuses[fieldName]},on:{"update":function($event){return _vm.onFieldValidationUpdate(fieldName, $event)}}}),_vm._v(" "),_vm._v(" "),_vm._t(field.inputSlot.slotName,function(){return [_c('gl-form-input',_vm._b({attrs:{"id":field.id,"value":_vm.fieldValues[fieldName],"state":_vm.fieldValidationProps[fieldName].state},on:{"input":function($event){return _vm.onFieldInput(fieldName, $event)},"blur":function($event){return _vm.onFieldBlur(fieldName)}}},'gl-form-input',field.inputAttrs,false))]},null,field.inputSlot.attrs)],2),_vm._v(" "),_vm._t(field.afterSlotName)]}}],null,true)})};
213
228
  var __vue_staticRenderFns__ = [];
214
229
 
215
230
  /* style */
@@ -0,0 +1,75 @@
1
+ import Vue from 'vue';
2
+ import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
3
+
4
+ var script = {
5
+ name: 'GlFormFieldsLoop',
6
+ props: {
7
+ fields: {
8
+ type: Object,
9
+ required: true
10
+ }
11
+ },
12
+ render(createElement) {
13
+ const {
14
+ Fragment
15
+ } = Vue;
16
+
17
+ // Vue 3, key goes on `Fragment` (<template> element)
18
+ if (Fragment) {
19
+ return createElement('div', Object.entries(this.fields).map(_ref => {
20
+ let [fieldName, field] = _ref;
21
+ return createElement(Fragment, {
22
+ key: field.id
23
+ }, this.$scopedSlots.default({
24
+ fieldName,
25
+ field
26
+ }));
27
+ }));
28
+ }
29
+
30
+ // Vue 2, key goes on element (rendered via default slot)
31
+ return createElement('div', Object.entries(this.fields).map(_ref2 => {
32
+ let [fieldName, field] = _ref2;
33
+ return this.$scopedSlots.default({
34
+ fieldName,
35
+ field
36
+ });
37
+ }));
38
+ }
39
+ };
40
+
41
+ /* script */
42
+ const __vue_script__ = script;
43
+
44
+ /* template */
45
+
46
+ /* style */
47
+ const __vue_inject_styles__ = undefined;
48
+ /* scoped */
49
+ const __vue_scope_id__ = undefined;
50
+ /* module identifier */
51
+ const __vue_module_identifier__ = undefined;
52
+ /* functional template */
53
+ const __vue_is_functional_template__ = undefined;
54
+ /* style inject */
55
+
56
+ /* style inject SSR */
57
+
58
+ /* style inject shadow dom */
59
+
60
+
61
+
62
+ const __vue_component__ = /*#__PURE__*/__vue_normalize__(
63
+ {},
64
+ __vue_inject_styles__,
65
+ __vue_script__,
66
+ __vue_scope_id__,
67
+ __vue_is_functional_template__,
68
+ __vue_module_identifier__,
69
+ false,
70
+ undefined,
71
+ undefined,
72
+ undefined
73
+ );
74
+
75
+ export { __vue_component__ as default };
@@ -167,11 +167,6 @@ var script = {
167
167
  required: false,
168
168
  default: alignOptions.left,
169
169
  validator: value => Object.keys(alignOptions).includes(value)
170
- },
171
- disabled: {
172
- type: Boolean,
173
- required: false,
174
- default: false
175
170
  }
176
171
  },
177
172
  data() {
@@ -290,7 +285,7 @@ var script = {
290
285
  this.breakpoint = GlBreakpointInstance.getBreakpointSize();
291
286
  },
292
287
  pageIsDisabled(page) {
293
- return this.disabled || page < 1 || this.isCompactPagination && page > this.value && !this.nextPage || !this.isCompactPagination && page > this.totalPages;
288
+ return page < 1 || this.isCompactPagination && page > this.value && !this.nextPage || !this.isCompactPagination && page > this.totalPages;
294
289
  },
295
290
  getPageItem(page) {
296
291
  let label = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
@@ -377,13 +372,13 @@ const __vue_script__ = script;
377
372
  var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('nav',{staticClass:"gl-pagination",attrs:{"aria-label":_vm.labelNav}},[_c('ul',{class:_vm.wrapperClasses},[_c('li',{class:{
378
373
  disabled: _vm.prevPageIsDisabled,
379
374
  'gl-flex-auto': _vm.isFillAlign,
380
- },attrs:{"aria-disabled":_vm.prevPageIsDisabled,"aria-hidden":_vm.prevPageIsDisabled,"data-testid":"gl-pagination-li"}},[_c(_vm.prevPageIsDisabled ? 'span' : 'a',{tag:"component",staticClass:"gl-pagination-item",attrs:{"data-testid":"gl-pagination-prev","aria-label":_vm.prevPageAriaLabel,"href":_vm.prevPageHref},on:{"click":function($event){!_vm.prevPageIsDisabled ? _vm.handlePrevious($event, _vm.value - 1) : null;}}},[_vm._t("previous",function(){return [_c('gl-icon',{attrs:{"name":"chevron-left"}}),_vm._v(" "),_c('span',{staticClass:"gl-hidden @sm:gl-block"},[_vm._v(_vm._s(_vm.prevText))])]},null,{ page: _vm.value - 1, disabled: _vm.prevPageIsDisabled })],2)],1),_vm._v(" "),_vm._l((_vm.visibleItems),function(item){return _c('li',{key:item.key,class:{
375
+ },attrs:{"aria-hidden":_vm.prevPageIsDisabled,"data-testid":"gl-pagination-li"}},[_c(_vm.prevPageIsDisabled ? 'span' : 'a',{tag:"component",staticClass:"gl-pagination-item",attrs:{"data-testid":"gl-pagination-prev","aria-label":_vm.prevPageAriaLabel,"href":_vm.prevPageHref},on:{"click":function($event){!_vm.prevPageIsDisabled ? _vm.handlePrevious($event, _vm.value - 1) : null;}}},[_vm._t("previous",function(){return [_c('gl-icon',{attrs:{"name":"chevron-left"}}),_vm._v(" "),_c('span',{staticClass:"gl-hidden @sm:gl-block"},[_vm._v(_vm._s(_vm.prevText))])]},null,{ page: _vm.value - 1, disabled: _vm.prevPageIsDisabled })],2)],1),_vm._v(" "),_vm._l((_vm.visibleItems),function(item){return _c('li',{key:item.key,class:{
381
376
  disabled: item.disabled,
382
377
  'gl-flex-auto': _vm.isFillAlign,
383
378
  },attrs:{"data-testid":"gl-pagination-li"}},[_c(item.component,_vm._g(_vm._b({tag:"component",staticClass:"gl-pagination-item",attrs:{"data-testid":"gl-pagination-item","size":"md","aria-disabled":item.disabled}},'component',item.attrs,false),item.listeners),[_vm._t(item.slot,function(){return [_vm._v(_vm._s(item.content))]},null,item.slotData)],2)],1)}),_vm._v(" "),_c('li',{class:{
384
379
  disabled: _vm.nextPageIsDisabled,
385
380
  'gl-flex-auto': _vm.isFillAlign,
386
- },attrs:{"aria-disabled":_vm.nextPageIsDisabled,"aria-hidden":_vm.nextPageIsDisabled,"data-testid":"gl-pagination-li"}},[_c(_vm.nextPageIsDisabled ? 'span' : 'a',{tag:"component",staticClass:"gl-pagination-item",attrs:{"data-testid":"gl-pagination-next","aria-label":_vm.nextPageAriaLabel,"href":_vm.nextPageHref},on:{"click":function($event){!_vm.nextPageIsDisabled ? _vm.handleNext($event, _vm.value + 1) : null;}}},[_vm._t("next",function(){return [_c('span',{staticClass:"gl-hidden @sm:gl-block"},[_vm._v(_vm._s(_vm.nextText))]),_vm._v(" "),_c('gl-icon',{attrs:{"name":"chevron-right"}})]},null,{ page: _vm.value + 1, disabled: _vm.nextPageIsDisabled })],2)],1)],2)]):_vm._e()};
381
+ },attrs:{"aria-hidden":_vm.nextPageIsDisabled,"data-testid":"gl-pagination-li"}},[_c(_vm.nextPageIsDisabled ? 'span' : 'a',{tag:"component",staticClass:"gl-pagination-item",attrs:{"data-testid":"gl-pagination-next","aria-label":_vm.nextPageAriaLabel,"href":_vm.nextPageHref},on:{"click":function($event){!_vm.nextPageIsDisabled ? _vm.handleNext($event, _vm.value + 1) : null;}}},[_vm._t("next",function(){return [_c('span',{staticClass:"gl-hidden @sm:gl-block"},[_vm._v(_vm._s(_vm.nextText))]),_vm._v(" "),_c('gl-icon',{attrs:{"name":"chevron-right"}})]},null,{ page: _vm.value + 1, disabled: _vm.nextPageIsDisabled })],2)],1)],2)]):_vm._e()};
387
382
  var __vue_staticRenderFns__ = [];
388
383
 
389
384
  /* style */