@gitlab/ui 38.8.2 → 38.9.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 (48) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/components/base/form/form_textarea/form_textarea.js +62 -2
  3. package/dist/index.css +1 -1
  4. package/dist/index.css.map +1 -1
  5. package/dist/utils/constants.js +7 -2
  6. package/package.json +1 -1
  7. package/src/components/base/accordion/accordion.stories.js +2 -4
  8. package/src/components/base/accordion/accordion_item.stories.js +2 -4
  9. package/src/components/base/alert/alert.stories.js +2 -4
  10. package/src/components/base/avatar/avatar.stories.js +3 -9
  11. package/src/components/base/avatar_labeled/avatar_labeled.stories.js +6 -12
  12. package/src/components/base/avatar_link/avatar_link.stories.js +2 -6
  13. package/src/components/base/avatars_inline/avatars_inline.stories.js +2 -4
  14. package/src/components/base/badge/badge.scss +10 -0
  15. package/src/components/base/badge/badge.stories.js +3 -9
  16. package/src/components/base/banner/banner.stories.js +1 -3
  17. package/src/components/base/broadcast_message/broadcast_message.stories.js +4 -8
  18. package/src/components/base/button/button.stories.js +8 -16
  19. package/src/components/base/datepicker/datepicker.stories.js +2 -2
  20. package/src/components/base/daterange_picker/daterange_picker.stories.js +2 -6
  21. package/src/components/base/dropdown/dropdown.stories.js +4 -12
  22. package/src/components/base/dropdown/dropdown_item.stories.js +2 -6
  23. package/src/components/base/form/form_group/form_group.stories.js +1 -1
  24. package/src/components/base/form/form_input/form_input.stories.js +1 -3
  25. package/src/components/base/form/form_input_group/form_input_group.stories.js +4 -12
  26. package/src/components/base/form/form_radio/form_radio.stories.js +1 -3
  27. package/src/components/base/form/form_select/form_select.stories.js +4 -8
  28. package/src/components/base/form/form_textarea/form_textarea.spec.js +115 -8
  29. package/src/components/base/form/form_textarea/form_textarea.stories.js +21 -0
  30. package/src/components/base/form/form_textarea/form_textarea.vue +73 -8
  31. package/src/components/base/icon/icon.stories.js +4 -8
  32. package/src/components/base/label/label.stories.js +2 -6
  33. package/src/components/base/link/link.stories.js +2 -4
  34. package/src/components/base/loading_icon/loading_icon.stories.js +4 -8
  35. package/src/components/base/modal/modal.stories.js +16 -32
  36. package/src/components/base/path/path.stories.js +2 -6
  37. package/src/components/base/popover/popover.stories.js +2 -4
  38. package/src/components/base/progress_bar/progress_bar.stories.js +2 -4
  39. package/src/components/base/search_box_by_click/search_box_by_click.stories.js +1 -3
  40. package/src/components/base/segmented_control/segmented_control.stories.js +1 -3
  41. package/src/components/base/skeleton_loading/skeleton_loading.stories.js +2 -4
  42. package/src/components/base/table/table.stories.js +2 -4
  43. package/src/components/base/toggle/toggle.stories.js +4 -10
  44. package/src/components/base/token/token.stories.js +2 -4
  45. package/src/components/base/token_selector/token_selector.stories.js +2 -4
  46. package/src/components/charts/single_stat/single_stat.stories.js +1 -3
  47. package/src/directives/resize_observer/resize_observer.stories.js +1 -3
  48. package/src/utils/constants.js +6 -0
package/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # [38.9.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v38.8.2...v38.9.0) (2022-04-12)
2
+
3
+
4
+ ### Features
5
+
6
+ * add a character counter to gl-form-textarea ([1d45d26](https://gitlab.com/gitlab-org/gitlab-ui/commit/1d45d26ad384b85589154100664da2c4eb204499))
7
+
1
8
  ## [38.8.2](https://gitlab.com/gitlab-org/gitlab-ui/compare/v38.8.1...v38.8.2) (2022-04-08)
2
9
 
3
10
 
@@ -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 */