@gitlab/ui 38.8.2 → 38.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.
Files changed (64) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/components/base/filtered_search/filtered_search.js +0 -5
  3. package/dist/components/base/form/form_textarea/form_textarea.js +62 -2
  4. package/dist/components/base/popover/popover.js +7 -1
  5. package/dist/components/base/toast/toast.js +5 -2
  6. package/dist/index.css +2 -2
  7. package/dist/index.css.map +1 -1
  8. package/dist/utility_classes.css +1 -1
  9. package/dist/utility_classes.css.map +1 -1
  10. package/dist/utils/constants.js +7 -2
  11. package/package.json +1 -1
  12. package/src/components/base/accordion/accordion.stories.js +2 -4
  13. package/src/components/base/accordion/accordion_item.stories.js +2 -4
  14. package/src/components/base/alert/alert.stories.js +2 -4
  15. package/src/components/base/avatar/avatar.stories.js +3 -9
  16. package/src/components/base/avatar_labeled/avatar_labeled.stories.js +6 -12
  17. package/src/components/base/avatar_link/avatar_link.stories.js +2 -6
  18. package/src/components/base/avatars_inline/avatars_inline.stories.js +2 -4
  19. package/src/components/base/badge/badge.scss +10 -0
  20. package/src/components/base/badge/badge.stories.js +3 -9
  21. package/src/components/base/banner/banner.stories.js +1 -3
  22. package/src/components/base/broadcast_message/broadcast_message.stories.js +4 -8
  23. package/src/components/base/button/button.stories.js +8 -16
  24. package/src/components/base/datepicker/datepicker.stories.js +2 -2
  25. package/src/components/base/daterange_picker/daterange_picker.stories.js +2 -6
  26. package/src/components/base/dropdown/dropdown.stories.js +4 -12
  27. package/src/components/base/dropdown/dropdown_item.stories.js +2 -6
  28. package/src/components/base/filtered_search/filtered_search.vue +0 -5
  29. package/src/components/base/form/form_group/form_group.stories.js +1 -1
  30. package/src/components/base/form/form_input/form_input.stories.js +1 -3
  31. package/src/components/base/form/form_input_group/form_input_group.stories.js +4 -12
  32. package/src/components/base/form/form_radio/form_radio.stories.js +1 -3
  33. package/src/components/base/form/form_select/form_select.stories.js +4 -8
  34. package/src/components/base/form/form_textarea/form_textarea.spec.js +115 -8
  35. package/src/components/base/form/form_textarea/form_textarea.stories.js +21 -0
  36. package/src/components/base/form/form_textarea/form_textarea.vue +73 -8
  37. package/src/components/base/icon/icon.stories.js +4 -8
  38. package/src/components/base/infinite_scroll/infinite_scroll.stories.js +37 -13
  39. package/src/components/base/label/label.stories.js +2 -6
  40. package/src/components/base/link/link.stories.js +2 -4
  41. package/src/components/base/loading_icon/loading_icon.stories.js +4 -8
  42. package/src/components/base/modal/modal.stories.js +16 -32
  43. package/src/components/base/pagination/pagination.stories.js +65 -83
  44. package/src/components/base/path/path.stories.js +2 -6
  45. package/src/components/base/popover/popover.scss +3 -1
  46. package/src/components/base/popover/popover.spec.js +15 -1
  47. package/src/components/base/popover/popover.stories.js +3 -5
  48. package/src/components/base/popover/popover.vue +7 -0
  49. package/src/components/base/progress_bar/progress_bar.stories.js +2 -4
  50. package/src/components/base/search_box_by_click/search_box_by_click.stories.js +1 -3
  51. package/src/components/base/segmented_control/segmented_control.stories.js +1 -3
  52. package/src/components/base/skeleton_loading/skeleton_loading.stories.js +2 -4
  53. package/src/components/base/table/table.stories.js +2 -4
  54. package/src/components/base/toast/toast.js +5 -2
  55. package/src/components/base/toast/toast.spec.js +42 -0
  56. package/src/components/base/toggle/toggle.stories.js +4 -10
  57. package/src/components/base/token/token.stories.js +2 -4
  58. package/src/components/base/token_selector/token_selector.stories.js +2 -4
  59. package/src/components/charts/single_stat/single_stat.stories.js +1 -3
  60. package/src/directives/resize_observer/resize_observer.stories.js +1 -3
  61. package/src/scss/utilities.scss +32 -0
  62. package/src/scss/utility-mixins/color.scss +4 -0
  63. package/src/scss/utility-mixins/sizing.scss +12 -0
  64. package/src/utils/constants.js +6 -0
package/CHANGELOG.md CHANGED
@@ -1,3 +1,30 @@
1
+ ## [38.10.1](https://gitlab.com/gitlab-org/gitlab-ui/compare/v38.10.0...v38.10.1) (2022-04-14)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **GlToast:** Event listener memory leak ([b799657](https://gitlab.com/gitlab-org/gitlab-ui/commit/b7996570d3f675c4ee11cc0eb26f2aa0a6fda817))
7
+
8
+ # [38.10.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v38.9.0...v38.10.0) (2022-04-13)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **GlPopover:** Remove horizontal border ([f40c030](https://gitlab.com/gitlab-org/gitlab-ui/commit/f40c030c429fc76c7dd9dcb3ff7aeaa6f889d653))
14
+
15
+
16
+ ### Features
17
+
18
+ * **CSS:** Add new utility CSS classes ([19e3dd6](https://gitlab.com/gitlab-org/gitlab-ui/commit/19e3dd63eef519e85264391cf3a95ecf038c2f07))
19
+ * **GlPopover:** top placement by default ([705dfe4](https://gitlab.com/gitlab-org/gitlab-ui/commit/705dfe412200581620c78011612de451d22ece55))
20
+
21
+ # [38.9.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v38.8.2...v38.9.0) (2022-04-12)
22
+
23
+
24
+ ### Features
25
+
26
+ * add a character counter to gl-form-textarea ([1d45d26](https://gitlab.com/gitlab-org/gitlab-ui/commit/1d45d26ad384b85589154100664da2c4eb204499))
27
+
1
28
  ## [38.8.2](https://gitlab.com/gitlab-org/gitlab-ui/compare/v38.8.1...v38.8.2) (2022-04-08)
2
29
 
3
30
 
@@ -316,11 +316,6 @@ var script = {
316
316
  * @property {array} tokens
317
317
  */
318
318
  this.$emit('submit', normalizeTokens(_cloneDeep(this.tokens)));
319
- },
320
-
321
- clearInput() {
322
- this.tokens = initialState();
323
- this.$emit('clearInput');
324
319
  }
325
320
 
326
321
  }
@@ -1,4 +1,6 @@
1
1
  import { BFormTextarea } from 'bootstrap-vue/esm/index.js';
2
+ import GlSprintf from '../../../utilities/sprintf/sprintf';
3
+ import { textareaCountOptions } from '../../../../utils/constants';
2
4
  import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
3
5
 
4
6
  const model = {
@@ -7,7 +9,8 @@ const model = {
7
9
  };
8
10
  var script = {
9
11
  components: {
10
- BFormTextarea
12
+ BFormTextarea,
13
+ GlSprintf
11
14
  },
12
15
  inheritAttrs: false,
13
16
  model,
@@ -28,6 +31,27 @@ var script = {
28
31
  type: Boolean,
29
32
  required: false,
30
33
  default: false
34
+ },
35
+ count: {
36
+ type: Number,
37
+ required: false,
38
+ default: 0
39
+ },
40
+ countType: {
41
+ required: false,
42
+ type: String,
43
+ default: textareaCountOptions.max,
44
+ validator: value => Object.keys(textareaCountOptions).includes(value)
45
+ },
46
+ characterCountText: {
47
+ required: false,
48
+ type: String,
49
+ default: ''
50
+ },
51
+ characterCountOverLimitText: {
52
+ required: false,
53
+ type: String,
54
+ default: ''
31
55
  }
32
56
  },
33
57
  computed: {
@@ -64,6 +88,42 @@ var script = {
64
88
 
65
89
  keypressEvent() {
66
90
  return this.submitOnEnter ? 'keyup' : null;
91
+ },
92
+
93
+ characters() {
94
+ return this.value.length;
95
+ },
96
+
97
+ remainingCharacters() {
98
+ if (this.count) {
99
+ return Math.abs(this.count - this.characters);
100
+ }
101
+
102
+ return null;
103
+ },
104
+
105
+ characterCountClasses() {
106
+ switch (this.countType) {
107
+ case textareaCountOptions.max:
108
+ return {
109
+ 'gl-text-red-500': this.value.length > this.count,
110
+ 'gl-text-gray-500': this.value.length <= this.count
111
+ };
112
+
113
+ case textareaCountOptions.recommended:
114
+ return 'gl-text-gray-500';
115
+
116
+ default:
117
+ return {};
118
+ }
119
+ },
120
+
121
+ hasCount() {
122
+ return this.remainingCharacters != null;
123
+ },
124
+
125
+ characterCountMessage() {
126
+ return this.characters > this.count ? this.characterCountOverLimitText : this.characterCountText;
67
127
  }
68
128
 
69
129
  },
@@ -81,7 +141,7 @@ var script = {
81
141
  const __vue_script__ = script;
82
142
 
83
143
  /* template */
84
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-form-textarea',_vm._g(_vm._b({staticClass:"gl-form-input gl-form-textarea",attrs:{"no-resize":_vm.noResize,"value":_vm.value},nativeOn:_vm._d({},[_vm.keypressEvent,function($event){return _vm.handleKeyPress($event)}])},'b-form-textarea',_vm.$attrs,false),_vm.listeners))};
144
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('b-form-textarea',_vm._g(_vm._b({ref:"textarea",staticClass:"gl-form-input gl-form-textarea",attrs:{"no-resize":_vm.noResize,"value":_vm.value},nativeOn:_vm._d({},[_vm.keypressEvent,function($event){return _vm.handleKeyPress($event)}])},'b-form-textarea',_vm.$attrs,false),_vm.listeners)),_vm._v(" "),(_vm.hasCount)?_c('div',[_c('small',{class:_vm.characterCountClasses,attrs:{"aria-live":"polite"}},[_c('gl-sprintf',{attrs:{"message":_vm.characterCountMessage},scopedSlots:_vm._u([{key:"count",fn:function(){return [_vm._v(_vm._s(_vm.remainingCharacters))]},proxy:true}],null,false,2559963941)})],1)]):_vm._e()],1)};
85
145
  var __vue_staticRenderFns__ = [];
86
146
 
87
147
  /* style */
@@ -1,6 +1,7 @@
1
1
  import { BPopover } from 'bootstrap-vue/esm/index.js';
2
2
  import tooltipMixin from '../../mixins/tooltip_mixin';
3
3
  import CloseButton from '../../shared_components/close_button/close_button';
4
+ import { popoverPlacements } from '../../../utils/constants';
4
5
  import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
5
6
 
6
7
  const popoverRefName = 'bPopover';
@@ -37,6 +38,11 @@ var script = {
37
38
  type: Boolean,
38
39
  required: false,
39
40
  default: false
41
+ },
42
+ placement: {
43
+ type: String,
44
+ required: false,
45
+ default: popoverPlacements.top
40
46
  }
41
47
  },
42
48
  computed: {
@@ -67,7 +73,7 @@ var script = {
67
73
  const __vue_script__ = script;
68
74
 
69
75
  /* template */
70
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-popover',_vm._g(_vm._b({ref:_vm.$options.popoverRefName,attrs:{"custom-class":_vm.customClass,"triggers":_vm.triggers,"title":_vm.title},scopedSlots:_vm._u([(_vm.shouldShowTitle)?{key:"title",fn:function(){return [_vm._t("title",[_vm._v("\n "+_vm._s(_vm.title)+"\n ")]),_vm._v(" "),(_vm.showCloseButton)?_c('close-button',{staticClass:"gl-float-right gl-mt-n2 gl-mr-n3",attrs:{"data-testid":"close-button"},on:{"click":_vm.close}}):_vm._e()]},proxy:true}:null],null,true)},'b-popover',_vm.$attrs,false),_vm.$listeners),[_vm._v(" "),_vm._t("default")],2)};
76
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-popover',_vm._g(_vm._b({ref:_vm.$options.popoverRefName,attrs:{"custom-class":_vm.customClass,"triggers":_vm.triggers,"title":_vm.title,"placement":_vm.placement},scopedSlots:_vm._u([(_vm.shouldShowTitle)?{key:"title",fn:function(){return [_vm._t("title",[_vm._v("\n "+_vm._s(_vm.title)+"\n ")]),_vm._v(" "),(_vm.showCloseButton)?_c('close-button',{staticClass:"gl-float-right gl-mt-n2 gl-mr-n3",attrs:{"data-testid":"close-button"},on:{"click":_vm.close}}):_vm._e()]},proxy:true}:null],null,true)},'b-popover',_vm.$attrs,false),_vm.$listeners),[_vm._v(" "),_vm._t("default")],2)};
71
77
  var __vue_staticRenderFns__ = [];
72
78
 
73
79
  /* style */
@@ -46,11 +46,14 @@ function showToast(message) {
46
46
  };
47
47
 
48
48
  if (_isFunction(options.onComplete)) {
49
- this.$root.$on('bv::toast:hidden', e => {
49
+ const toastHiddenCallback = e => {
50
50
  if (e.componentId === id) {
51
+ this.$root.$off('bv::toast:hidden', toastHiddenCallback);
51
52
  options.onComplete(e);
52
53
  }
53
- });
54
+ };
55
+
56
+ this.$root.$on('bv::toast:hidden', toastHiddenCallback);
54
57
  }
55
58
 
56
59
  this.$bvToast.toast(message, { ...DEFAULT_OPTIONS,