@gitlab/ui 132.0.3 → 132.2.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 (233) hide show
  1. package/dist/components/base/accordion/accordion_item.js +1 -3
  2. package/dist/components/base/avatar/avatar.js +76 -5
  3. package/dist/components/base/badge/badge.js +5 -7
  4. package/dist/components/base/button/button.js +1 -3
  5. package/dist/components/base/collapse/collapse.js +2 -6
  6. package/dist/components/base/datepicker/datepicker.js +4 -5
  7. package/dist/components/base/daterange_picker/daterange_picker.js +2 -4
  8. package/dist/components/base/dropdown/dropdown_item.js +3 -4
  9. package/dist/components/base/filtered_search/filtered_search.js +55 -7
  10. package/dist/components/base/filtered_search/filtered_search_token.js +6 -14
  11. package/dist/components/base/filtered_search/filtered_search_token_segment.js +39 -19
  12. package/dist/components/base/filtered_search/filtered_search_utils.js +57 -7
  13. package/dist/components/base/form/form_checkbox/form_checkbox.js +13 -26
  14. package/dist/components/base/form/form_checkbox/form_checkbox_group.js +1 -3
  15. package/dist/components/base/form/form_fields/form_fields_loop.js +57 -6
  16. package/dist/components/base/form/form_group/form_group.js +1 -3
  17. package/dist/components/base/form/form_input/form_input.js +95 -41
  18. package/dist/components/base/form/form_input_group/form_input_group.js +2 -4
  19. package/dist/components/base/form/form_radio/form_radio.js +5 -9
  20. package/dist/components/base/form/form_radio_group/form_radio_group.js +1 -3
  21. package/dist/components/base/form/form_select/form_select.js +76 -5
  22. package/dist/components/base/infinite_scroll/infinite_scroll.js +7 -14
  23. package/dist/components/base/link/link.js +26 -7
  24. package/dist/components/base/new_dropdowns/base_dropdown/base_dropdown.js +93 -32
  25. package/dist/components/base/new_dropdowns/disclosure/disclosure_dropdown.js +2 -6
  26. package/dist/components/base/new_dropdowns/disclosure/disclosure_dropdown_item.js +2 -6
  27. package/dist/components/base/new_dropdowns/listbox/listbox.js +5 -13
  28. package/dist/components/base/new_dropdowns/listbox/listbox_item.js +1 -3
  29. package/dist/components/base/new_dropdowns/listbox/mock_data.js +2 -6
  30. package/dist/components/base/new_dropdowns/listbox/utils.js +6 -11
  31. package/dist/components/base/path/path.js +1 -5
  32. package/dist/components/base/search_box_by_type/search_box_by_type.js +2 -6
  33. package/dist/components/base/skeleton_loader/skeleton_loader.js +3 -5
  34. package/dist/components/base/table/table.js +32 -21
  35. package/dist/components/base/table_lite/table_lite.js +1 -3
  36. package/dist/components/base/tabs/tab/tab.js +1 -3
  37. package/dist/components/base/tabs/tabs/scrollable_tabs.js +1 -5
  38. package/dist/components/base/token_selector/token_selector.js +2 -6
  39. package/dist/components/charts/area/area.js +6 -7
  40. package/dist/components/charts/column/column.js +11 -15
  41. package/dist/components/charts/discrete_scatter/discrete_scatter.js +57 -5
  42. package/dist/components/charts/gauge/gauge.js +13 -21
  43. package/dist/components/charts/heatmap/heatmap.js +66 -18
  44. package/dist/components/charts/legend/legend.js +59 -13
  45. package/dist/components/charts/line/line.js +6 -7
  46. package/dist/components/charts/shared/tooltip/tooltip.js +11 -18
  47. package/dist/components/charts/sparkline/sparkline.js +72 -19
  48. package/dist/components/charts/stacked_column/stacked_column.js +18 -31
  49. package/dist/components/dashboards/dashboard_layout/grid_layout/grid_layout.js +40 -24
  50. package/dist/components/utilities/friendly_wrap/friendly_wrap.js +3 -7
  51. package/dist/components/utilities/intersperse/intersperse.js +6 -11
  52. package/dist/components/utilities/sprintf/sprintf.js +58 -7
  53. package/dist/components/utilities/truncate/truncate.js +2 -4
  54. package/dist/components/utilities/truncate_text/truncate_text.js +1 -3
  55. package/dist/config.js +3 -4
  56. package/dist/directives/hover_load/hover_load.js +1 -3
  57. package/dist/directives/outside/outside.js +9 -16
  58. package/dist/directives/resize_observer/resize_observer.js +6 -8
  59. package/dist/directives/safe_html/safe_html.js +1 -3
  60. package/dist/directives/safe_link/safe_link.js +11 -14
  61. package/dist/index.css +2 -2
  62. package/dist/index.css.map +1 -1
  63. package/dist/tokens/build/js/tokens.dark.js +95 -95
  64. package/dist/tokens/build/js/tokens.js +74 -74
  65. package/dist/tokens/common_story_options.js +7 -8
  66. package/dist/utils/charts/config.js +122 -90
  67. package/dist/utils/constants.js +26 -1
  68. package/dist/utils/data_utils.js +28 -1
  69. package/dist/utils/form_options_utils.js +4 -6
  70. package/dist/utils/is_slot_empty.js +3 -5
  71. package/dist/utils/stories_utils.js +8 -8
  72. package/dist/utils/use_mock_intersection_observer.js +63 -12
  73. package/dist/utils/utils.js +76 -19
  74. package/dist/vendor/bootstrap-vue/src/components/button/button-close.js +8 -11
  75. package/dist/vendor/bootstrap-vue/src/components/button/button.js +12 -17
  76. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-divider.js +3 -6
  77. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-form.js +6 -9
  78. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-group.js +14 -19
  79. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-header.js +8 -13
  80. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-item-button.js +9 -12
  81. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-item.js +8 -11
  82. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-text.js +9 -14
  83. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown.js +34 -43
  84. package/dist/vendor/bootstrap-vue/src/components/form/form-invalid-feedback.js +5 -9
  85. package/dist/vendor/bootstrap-vue/src/components/form/form-text.js +7 -10
  86. package/dist/vendor/bootstrap-vue/src/components/form/form-valid-feedback.js +5 -9
  87. package/dist/vendor/bootstrap-vue/src/components/form/form.js +7 -10
  88. package/dist/vendor/bootstrap-vue/src/components/form-group/form-group.js +77 -33
  89. package/dist/vendor/bootstrap-vue/src/components/form-select/form-select-option-group.js +6 -11
  90. package/dist/vendor/bootstrap-vue/src/components/form-select/form-select-option.js +6 -12
  91. package/dist/vendor/bootstrap-vue/src/components/form-select/form-select.js +28 -29
  92. package/dist/vendor/bootstrap-vue/src/components/form-textarea/form-textarea.js +7 -10
  93. package/dist/vendor/bootstrap-vue/src/components/layout/col.js +7 -11
  94. package/dist/vendor/bootstrap-vue/src/components/layout/form-row.js +3 -5
  95. package/dist/vendor/bootstrap-vue/src/components/link/link.js +19 -31
  96. package/dist/vendor/bootstrap-vue/src/components/modal/helpers/modal-manager.js +3 -4
  97. package/dist/vendor/bootstrap-vue/src/components/modal/modal.js +59 -68
  98. package/dist/vendor/bootstrap-vue/src/components/popover/helpers/bv-popover-template.js +2 -4
  99. package/dist/vendor/bootstrap-vue/src/components/popover/popover.js +4 -5
  100. package/dist/vendor/bootstrap-vue/src/components/table/helpers/default-sort-compare.js +11 -7
  101. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-bottom-row.js +4 -6
  102. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-busy.js +3 -6
  103. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-caption.js +4 -7
  104. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-colgroup.js +1 -3
  105. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-empty.js +16 -20
  106. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-filtering.js +14 -25
  107. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-items.js +23 -35
  108. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-pagination.js +6 -8
  109. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-provider.js +8 -10
  110. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-selectable.js +8 -15
  111. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-sorting.js +33 -41
  112. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-stacked.js +3 -8
  113. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-table-renderer.js +38 -50
  114. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-tbody-row.js +19 -31
  115. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-tbody.js +13 -23
  116. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-tfoot.js +5 -6
  117. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-thead.js +17 -21
  118. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-top-row.js +4 -6
  119. package/dist/vendor/bootstrap-vue/src/components/table/helpers/sanitize-row.js +1 -3
  120. package/dist/vendor/bootstrap-vue/src/components/table/tbody.js +3 -6
  121. package/dist/vendor/bootstrap-vue/src/components/table/td.js +9 -14
  122. package/dist/vendor/bootstrap-vue/src/components/table/tfoot.js +1 -2
  123. package/dist/vendor/bootstrap-vue/src/components/table/thead.js +1 -2
  124. package/dist/vendor/bootstrap-vue/src/components/table/tr.js +2 -5
  125. package/dist/vendor/bootstrap-vue/src/components/tabs/tab.js +19 -36
  126. package/dist/vendor/bootstrap-vue/src/components/tabs/tabs.js +66 -81
  127. package/dist/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-popper.js +2 -6
  128. package/dist/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip-template.js +5 -11
  129. package/dist/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip.js +8 -14
  130. package/dist/vendor/bootstrap-vue/src/components/tooltip/tooltip.js +19 -22
  131. package/dist/vendor/bootstrap-vue/src/components/transition/bv-transition.js +7 -10
  132. package/dist/vendor/bootstrap-vue/src/components/transporter/transporter.js +7 -14
  133. package/dist/vendor/bootstrap-vue/src/directives/modal/modal.js +4 -5
  134. package/dist/vendor/bootstrap-vue/src/directives/visible/visible.js +5 -9
  135. package/dist/vendor/bootstrap-vue/src/mixins/dropdown.js +17 -29
  136. package/dist/vendor/bootstrap-vue/src/mixins/form-control.js +6 -7
  137. package/dist/vendor/bootstrap-vue/src/mixins/form-custom.js +1 -2
  138. package/dist/vendor/bootstrap-vue/src/mixins/form-options.js +5 -6
  139. package/dist/vendor/bootstrap-vue/src/mixins/form-size.js +1 -2
  140. package/dist/vendor/bootstrap-vue/src/mixins/form-state.js +1 -2
  141. package/dist/vendor/bootstrap-vue/src/mixins/form-text.js +29 -43
  142. package/dist/vendor/bootstrap-vue/src/mixins/id.js +1 -2
  143. package/dist/vendor/bootstrap-vue/src/utils/create-new-child-component.js +62 -15
  144. package/dist/vendor/bootstrap-vue/src/utils/dom.js +3 -9
  145. package/dist/vendor/bootstrap-vue/src/utils/events.js +7 -5
  146. package/dist/vendor/bootstrap-vue/src/utils/plugins.js +4 -5
  147. package/dist/vendor/bootstrap-vue/src/utils/router.js +9 -13
  148. package/package.json +10 -8
  149. package/src/components/dashboards/dashboard_layout/grid_layout/grid_layout.vue +21 -19
  150. package/src/scss/gitlab_ui.scss +3 -0
  151. package/src/scss/storybook.scss +3 -0
  152. package/src/scss/themes.scss +84 -0
  153. package/src/tokens/build/css/tokens.css +142 -142
  154. package/src/tokens/build/css/tokens.dark.css +138 -138
  155. package/src/tokens/build/docs/tokens-tailwind-docs.dark.json +580 -580
  156. package/src/tokens/build/docs/tokens-tailwind-docs.json +495 -495
  157. package/src/tokens/build/figma/constants.dark.json +799 -799
  158. package/src/tokens/build/figma/constants.json +799 -799
  159. package/src/tokens/build/js/tokens.dark.js +95 -95
  160. package/src/tokens/build/js/tokens.js +74 -74
  161. package/src/tokens/build/json/tokens.dark.json +1668 -1668
  162. package/src/tokens/build/json/tokens.json +1647 -1647
  163. package/src/tokens/build/scss/_tokens.dark.scss +138 -138
  164. package/src/tokens/build/scss/_tokens.scss +142 -142
  165. package/src/tokens/build/scss/_tokens_custom_properties.scss +73 -73
  166. package/src/tokens/constant/color.blue.tokens.json +182 -0
  167. package/src/tokens/constant/color.brand.tokens.json +252 -0
  168. package/src/tokens/constant/color.data.tokens.json +894 -0
  169. package/src/tokens/constant/color.green.tokens.json +182 -0
  170. package/src/tokens/constant/color.neutral.tokens.json +230 -0
  171. package/src/tokens/constant/color.orange.tokens.json +182 -0
  172. package/src/tokens/constant/color.purple.tokens.json +182 -0
  173. package/src/tokens/constant/color.red.tokens.json +182 -0
  174. package/src/tokens/constant/color.theme.tokens.json +1168 -0
  175. package/src/tokens/deprecated/deprecated.color.tokens.json +134 -1340
  176. package/src/utils/constants.js +9 -0
  177. package/src/vendor/bootstrap-vue/src/components/button/button-close.js +4 -5
  178. package/src/vendor/bootstrap-vue/src/components/button/button.js +7 -8
  179. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-divider.js +1 -2
  180. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-form.js +2 -8
  181. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-group.js +6 -7
  182. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-header.js +3 -4
  183. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-item-button.js +6 -12
  184. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-item.js +2 -3
  185. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-text.js +3 -4
  186. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown.js +19 -26
  187. package/src/vendor/bootstrap-vue/src/components/form/form-text.js +4 -6
  188. package/src/vendor/bootstrap-vue/src/components/form/form.js +4 -6
  189. package/src/vendor/bootstrap-vue/src/components/form-group/form-group.js +66 -19
  190. package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option-group.js +1 -2
  191. package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option.js +1 -4
  192. package/src/vendor/bootstrap-vue/src/components/form-select/form-select.js +13 -14
  193. package/src/vendor/bootstrap-vue/src/components/form-textarea/form-textarea.js +5 -6
  194. package/src/vendor/bootstrap-vue/src/components/modal/modal.js +53 -62
  195. package/src/vendor/bootstrap-vue/src/components/popover/popover.js +4 -10
  196. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-busy.js +1 -2
  197. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-caption.js +2 -3
  198. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-empty.js +5 -6
  199. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-filtering.js +5 -13
  200. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-items.js +12 -21
  201. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-pagination.js +2 -3
  202. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-provider.js +5 -11
  203. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-selectable.js +4 -5
  204. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-sorting.js +14 -21
  205. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-stacked.js +1 -2
  206. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-table-renderer.js +14 -20
  207. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-tbody-row.js +3 -9
  208. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-tbody.js +1 -2
  209. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-tfoot.js +5 -11
  210. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-thead.js +4 -5
  211. package/src/vendor/bootstrap-vue/src/components/table/tbody.js +2 -3
  212. package/src/vendor/bootstrap-vue/src/components/table/td.js +5 -6
  213. package/src/vendor/bootstrap-vue/src/components/table/tfoot.js +1 -2
  214. package/src/vendor/bootstrap-vue/src/components/table/thead.js +1 -2
  215. package/src/vendor/bootstrap-vue/src/components/table/tr.js +1 -2
  216. package/src/vendor/bootstrap-vue/src/components/tabs/tab.js +10 -16
  217. package/src/vendor/bootstrap-vue/src/components/tabs/tabs.js +33 -39
  218. package/src/vendor/bootstrap-vue/src/components/tooltip/tooltip.js +17 -25
  219. package/src/vendor/bootstrap-vue/src/components/transition/bv-transition.js +4 -5
  220. package/src/vendor/bootstrap-vue/src/components/transporter/transporter.js +4 -10
  221. package/src/vendor/bootstrap-vue/src/mixins/dropdown.js +9 -15
  222. package/src/vendor/bootstrap-vue/src/mixins/form-control.js +6 -7
  223. package/src/vendor/bootstrap-vue/src/mixins/form-custom.js +1 -2
  224. package/src/vendor/bootstrap-vue/src/mixins/form-options.js +5 -6
  225. package/src/vendor/bootstrap-vue/src/mixins/form-size.js +1 -2
  226. package/src/vendor/bootstrap-vue/src/mixins/form-state.js +1 -2
  227. package/src/vendor/bootstrap-vue/src/mixins/form-text.js +21 -33
  228. package/src/vendor/bootstrap-vue/src/mixins/id.js +1 -2
  229. package/dist/vendor/bootstrap-vue/src/mixins/model.js +0 -10
  230. package/dist/vendor/bootstrap-vue/src/utils/model.js +0 -33
  231. package/src/tokens/constant/color.tokens.json +0 -3422
  232. package/src/vendor/bootstrap-vue/src/mixins/model.js +0 -5
  233. package/src/vendor/bootstrap-vue/src/utils/model.js +0 -29
@@ -1,6 +1,5 @@
1
1
  import { extend } from '../../vue';
2
2
  import { NAME_DROPDOWN } from '../../constants/components';
3
- import { PROP_TYPE_BOOLEAN, PROP_TYPE_STRING, PROP_TYPE_ARRAY, PROP_TYPE_OBJECT } from '../../constants/props';
4
3
  import { SLOT_NAME_BUTTON_CONTENT, SLOT_NAME_DEFAULT } from '../../constants/slots';
5
4
  import { htmlOrText } from '../../utils/html';
6
5
  import { toString } from '../../utils/string';
@@ -16,48 +15,48 @@ const props = sortKeys({
16
15
  ...props$1,
17
16
  ...props$2,
18
17
  block: {
19
- type: PROP_TYPE_BOOLEAN,
18
+ type: Boolean,
20
19
  required: false,
21
20
  default: false
22
21
  },
23
22
  html: {
24
- type: PROP_TYPE_STRING,
23
+ type: String,
25
24
  required: false,
26
25
  default: undefined
27
26
  },
28
27
  // If `true`, only render menu contents when open
29
28
  lazy: {
30
- type: PROP_TYPE_BOOLEAN,
29
+ type: Boolean,
31
30
  required: false,
32
31
  default: false
33
32
  },
34
33
  menuClass: {
35
- type: [PROP_TYPE_ARRAY, PROP_TYPE_OBJECT, PROP_TYPE_STRING],
34
+ type: [Array, Object, String],
36
35
  required: false,
37
36
  default: undefined
38
37
  },
39
38
  noCaret: {
40
- type: PROP_TYPE_BOOLEAN,
39
+ type: Boolean,
41
40
  required: false,
42
41
  default: false
43
42
  },
44
43
  role: {
45
- type: PROP_TYPE_STRING,
44
+ type: String,
46
45
  required: false,
47
46
  default: 'menu'
48
47
  },
49
48
  size: {
50
- type: PROP_TYPE_STRING,
49
+ type: String,
51
50
  required: false,
52
51
  default: undefined
53
52
  },
54
53
  split: {
55
- type: PROP_TYPE_BOOLEAN,
54
+ type: Boolean,
56
55
  required: false,
57
56
  default: false
58
57
  },
59
58
  splitButtonType: {
60
- type: PROP_TYPE_STRING,
59
+ type: String,
61
60
  required: false,
62
61
  default: 'button',
63
62
  validator: value => {
@@ -65,53 +64,53 @@ const props = sortKeys({
65
64
  }
66
65
  },
67
66
  splitClass: {
68
- type: [PROP_TYPE_ARRAY, PROP_TYPE_OBJECT, PROP_TYPE_STRING],
67
+ type: [Array, Object, String],
69
68
  required: false,
70
69
  default: undefined
71
70
  },
72
71
  splitHref: {
73
- type: PROP_TYPE_STRING,
72
+ type: String,
74
73
  required: false,
75
74
  default: undefined
76
75
  },
77
76
  splitTo: {
78
- type: [PROP_TYPE_OBJECT, PROP_TYPE_STRING],
77
+ type: [Object, String],
79
78
  required: false,
80
79
  default: undefined
81
80
  },
82
81
  splitVariant: {
83
- type: PROP_TYPE_STRING,
82
+ type: String,
84
83
  required: false,
85
84
  default: undefined
86
85
  },
87
86
  text: {
88
- type: PROP_TYPE_STRING,
87
+ type: String,
89
88
  required: false,
90
89
  default: undefined
91
90
  },
92
91
  toggleAttrs: {
93
- type: PROP_TYPE_OBJECT,
92
+ type: Object,
94
93
  required: false,
95
94
  default: () => ({})
96
95
  },
97
96
  toggleClass: {
98
- type: [PROP_TYPE_ARRAY, PROP_TYPE_OBJECT, PROP_TYPE_STRING],
97
+ type: [Array, Object, String],
99
98
  required: false,
100
99
  default: undefined
101
100
  },
102
101
  toggleTag: {
103
- type: PROP_TYPE_STRING,
102
+ type: String,
104
103
  required: false,
105
104
  default: 'button'
106
105
  },
107
106
  // TODO: This really should be `toggleLabel`
108
107
  toggleText: {
109
- type: PROP_TYPE_STRING,
108
+ type: String,
110
109
  required: false,
111
110
  default: 'Toggle dropdown'
112
111
  },
113
112
  variant: {
114
- type: PROP_TYPE_STRING,
113
+ type: String,
115
114
  required: false,
116
115
  default: 'secondary'
117
116
  }
@@ -126,10 +125,8 @@ const BDropdown = /*#__PURE__*/extend({
126
125
  props,
127
126
  computed: {
128
127
  dropdownClasses() {
129
- const {
130
- block,
131
- split
132
- } = this;
128
+ const block = this.block,
129
+ split = this.split;
133
130
  return [this.directionClass, this.boundaryClass, {
134
131
  show: this.visible,
135
132
  // The 'btn-group' class is required in `split` mode for button alignment
@@ -148,9 +145,7 @@ const BDropdown = /*#__PURE__*/extend({
148
145
  }];
149
146
  },
150
147
  toggleClasses() {
151
- const {
152
- split
153
- } = this;
148
+ const split = this.split;
154
149
  return [this.toggleClass, {
155
150
  'dropdown-toggle-split': split,
156
151
  'dropdown-toggle-no-caret': this.noCaret && !split
@@ -158,17 +153,15 @@ const BDropdown = /*#__PURE__*/extend({
158
153
  }
159
154
  },
160
155
  render(h) {
161
- const {
162
- visible,
163
- variant,
164
- size,
165
- block,
166
- disabled,
167
- split,
168
- role,
169
- hide,
170
- toggle
171
- } = this;
156
+ const visible = this.visible,
157
+ variant = this.variant,
158
+ size = this.size,
159
+ block = this.block,
160
+ disabled = this.disabled,
161
+ split = this.split,
162
+ role = this.role,
163
+ hide = this.hide,
164
+ toggle = this.toggle;
172
165
  const commonProps = {
173
166
  variant,
174
167
  size,
@@ -179,11 +172,9 @@ const BDropdown = /*#__PURE__*/extend({
179
172
  let buttonContentDomProps = this.hasNormalizedSlot(SLOT_NAME_BUTTON_CONTENT) ? {} : htmlOrText(this.html, this.text);
180
173
  let $split = h();
181
174
  if (split) {
182
- const {
183
- splitTo,
184
- splitHref,
185
- splitButtonType
186
- } = this;
175
+ const splitTo = this.splitTo,
176
+ splitHref = this.splitHref,
177
+ splitButtonType = this.splitButtonType;
187
178
  const btnProps = {
188
179
  ...commonProps,
189
180
  variant: this.splitVariant || variant
@@ -51,15 +51,11 @@ const BFormInvalidFeedback = /*#__PURE__*/extend({
51
51
  functional: true,
52
52
  props,
53
53
  render(h, _ref) {
54
- let {
55
- props,
56
- data,
57
- children
58
- } = _ref;
59
- const {
60
- tooltip,
61
- ariaLive
62
- } = props;
54
+ let props = _ref.props,
55
+ data = _ref.data,
56
+ children = _ref.children;
57
+ const tooltip = props.tooltip,
58
+ ariaLive = props.ariaLive;
63
59
  const show = props.forceShow === true || props.state === false;
64
60
  return h(props.tag, mergeData(data, {
65
61
  class: {
@@ -1,27 +1,26 @@
1
1
  import { extend, mergeData } from '../../vue';
2
2
  import { NAME_FORM_TEXT } from '../../constants/components';
3
- import { PROP_TYPE_STRING, PROP_TYPE_BOOLEAN } from '../../constants/props';
4
3
 
5
4
  // --- Props ---
6
5
 
7
6
  const props = {
8
7
  id: {
9
- type: PROP_TYPE_STRING,
8
+ type: String,
10
9
  required: false,
11
10
  default: undefined
12
11
  },
13
12
  inline: {
14
- type: PROP_TYPE_BOOLEAN,
13
+ type: Boolean,
15
14
  required: false,
16
15
  default: false
17
16
  },
18
17
  tag: {
19
- type: PROP_TYPE_STRING,
18
+ type: String,
20
19
  required: false,
21
20
  default: 'small'
22
21
  },
23
22
  textVariant: {
24
- type: PROP_TYPE_STRING,
23
+ type: String,
25
24
  required: false,
26
25
  default: 'muted'
27
26
  }
@@ -35,11 +34,9 @@ const BFormText = /*#__PURE__*/extend({
35
34
  functional: true,
36
35
  props,
37
36
  render(h, _ref) {
38
- let {
39
- props,
40
- data,
41
- children
42
- } = _ref;
37
+ let props = _ref.props,
38
+ data = _ref.data,
39
+ children = _ref.children;
43
40
  return h(props.tag, mergeData(data, {
44
41
  class: {
45
42
  'form-text': !props.inline,
@@ -51,15 +51,11 @@ const BFormValidFeedback = /*#__PURE__*/extend({
51
51
  functional: true,
52
52
  props,
53
53
  render(h, _ref) {
54
- let {
55
- props,
56
- data,
57
- children
58
- } = _ref;
59
- const {
60
- tooltip,
61
- ariaLive
62
- } = props;
54
+ let props = _ref.props,
55
+ data = _ref.data,
56
+ children = _ref.children;
57
+ const tooltip = props.tooltip,
58
+ ariaLive = props.ariaLive;
63
59
  const show = props.forceShow === true || props.state === true;
64
60
  return h(props.tag, mergeData(data, {
65
61
  class: {
@@ -1,27 +1,26 @@
1
1
  import { extend, mergeData } from '../../vue';
2
2
  import { NAME_FORM } from '../../constants/components';
3
- import { PROP_TYPE_STRING, PROP_TYPE_BOOLEAN } from '../../constants/props';
4
3
 
5
4
  // --- Props ---
6
5
 
7
6
  const props = {
8
7
  id: {
9
- type: PROP_TYPE_STRING,
8
+ type: String,
10
9
  required: false,
11
10
  default: undefined
12
11
  },
13
12
  inline: {
14
- type: PROP_TYPE_BOOLEAN,
13
+ type: Boolean,
15
14
  required: false,
16
15
  default: false
17
16
  },
18
17
  novalidate: {
19
- type: PROP_TYPE_BOOLEAN,
18
+ type: Boolean,
20
19
  required: false,
21
20
  default: false
22
21
  },
23
22
  validated: {
24
- type: PROP_TYPE_BOOLEAN,
23
+ type: Boolean,
25
24
  required: false,
26
25
  default: false
27
26
  }
@@ -35,11 +34,9 @@ const BForm = /*#__PURE__*/extend({
35
34
  functional: true,
36
35
  props,
37
36
  render(h, _ref) {
38
- let {
39
- props,
40
- data,
41
- children
42
- } = _ref;
37
+ let props = _ref.props,
38
+ data = _ref.data,
39
+ children = _ref.children;
43
40
  return h('form', mergeData(data, {
44
41
  class: {
45
42
  'form-inline': props.inline,
@@ -1,6 +1,6 @@
1
1
  import { NAME_FORM_GROUP } from '../../constants/components';
2
2
  import { IS_BROWSER } from '../../constants/env';
3
- import { PROP_TYPE_BOOLEAN_NUMBER_STRING, PROP_TYPE_STRING, PROP_TYPE_BOOLEAN, PROP_TYPE_ARRAY_OBJECT_STRING } from '../../constants/props';
3
+ import { PROP_TYPE_BOOLEAN_NUMBER_STRING, PROP_TYPE_STRING } from '../../constants/props';
4
4
  import { RX_SPACE_SPLIT } from '../../constants/regex';
5
5
  import { SLOT_NAME_LABEL, SLOT_NAME_INVALID_FEEDBACK, SLOT_NAME_VALID_FEEDBACK, SLOT_NAME_DESCRIPTION, SLOT_NAME_DEFAULT } from '../../constants/slots';
6
6
  import { getBreakpointsUpCached } from '../../utils/config';
@@ -45,19 +45,71 @@ const generateProps = () => sortKeys({
45
45
  props[suffixPropName(breakpoint, 'labelCols')] = makeProp(PROP_TYPE_BOOLEAN_NUMBER_STRING);
46
46
  return props;
47
47
  }, create(null)),
48
- description: makeProp(PROP_TYPE_STRING),
49
- disabled: makeProp(PROP_TYPE_BOOLEAN, false),
50
- feedbackAriaLive: makeProp(PROP_TYPE_STRING, 'assertive'),
51
- invalidFeedback: makeProp(PROP_TYPE_STRING),
52
- label: makeProp(PROP_TYPE_STRING),
53
- labelClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING),
54
- labelFor: makeProp(PROP_TYPE_STRING),
55
- labelId: makeProp(PROP_TYPE_STRING),
56
- labelSize: makeProp(PROP_TYPE_STRING),
57
- labelSrOnly: makeProp(PROP_TYPE_BOOLEAN, false),
58
- tooltip: makeProp(PROP_TYPE_BOOLEAN, false),
59
- validFeedback: makeProp(PROP_TYPE_STRING),
60
- validated: makeProp(PROP_TYPE_BOOLEAN, false)
48
+ description: {
49
+ type: String,
50
+ required: false,
51
+ default: undefined
52
+ },
53
+ disabled: {
54
+ type: Boolean,
55
+ required: false,
56
+ default: false
57
+ },
58
+ feedbackAriaLive: {
59
+ type: String,
60
+ required: false,
61
+ default: 'assertive'
62
+ },
63
+ invalidFeedback: {
64
+ type: String,
65
+ required: false,
66
+ default: undefined
67
+ },
68
+ label: {
69
+ type: String,
70
+ required: false,
71
+ default: undefined
72
+ },
73
+ labelClass: {
74
+ type: [Array, Object, String],
75
+ required: false,
76
+ default: undefined
77
+ },
78
+ labelFor: {
79
+ type: String,
80
+ required: false,
81
+ default: undefined
82
+ },
83
+ labelId: {
84
+ type: String,
85
+ required: false,
86
+ default: undefined
87
+ },
88
+ labelSize: {
89
+ type: String,
90
+ required: false,
91
+ default: undefined
92
+ },
93
+ labelSrOnly: {
94
+ type: Boolean,
95
+ required: false,
96
+ default: false
97
+ },
98
+ tooltip: {
99
+ type: Boolean,
100
+ required: false,
101
+ default: false
102
+ },
103
+ validFeedback: {
104
+ type: String,
105
+ required: false,
106
+ default: undefined
107
+ },
108
+ validated: {
109
+ type: Boolean,
110
+ required: false,
111
+ default: false
112
+ }
61
113
  });
62
114
 
63
115
  // --- Main component ---
@@ -148,9 +200,7 @@ const BFormGroup = {
148
200
  // Optionally accepts a string of IDs to remove as the second parameter
149
201
  // Preserves any `aria-describedby` value(s) user may have on input
150
202
  updateAriaDescribedby(newValue, oldValue) {
151
- const {
152
- labelFor
153
- } = this;
203
+ const labelFor = this.labelFor;
154
204
  if (IS_BROWSER && labelFor) {
155
205
  // We need to escape `labelFor` since it can be user-provided
156
206
  const $input = select(`#${cssEscape(labelFor)}`, this.$refs.content);
@@ -176,9 +226,7 @@ const BFormGroup = {
176
226
  if (this.labelFor) {
177
227
  return;
178
228
  }
179
- const {
180
- target
181
- } = event;
229
+ const target = event.target;
182
230
  const tagName = target ? target.tagName : '';
183
231
 
184
232
  // If clicked an interactive element inside legend,
@@ -196,25 +244,21 @@ const BFormGroup = {
196
244
  }
197
245
  },
198
246
  render(h) {
199
- const {
200
- computedState: state,
201
- feedbackAriaLive,
202
- isHorizontal,
203
- labelFor,
204
- normalizeSlot,
205
- safeId,
206
- tooltip
207
- } = this;
247
+ const state = this.computedState,
248
+ feedbackAriaLive = this.feedbackAriaLive,
249
+ isHorizontal = this.isHorizontal,
250
+ labelFor = this.labelFor,
251
+ normalizeSlot = this.normalizeSlot,
252
+ safeId = this.safeId,
253
+ tooltip = this.tooltip;
208
254
  const id = safeId();
209
255
  const isFieldset = !labelFor;
210
256
  let $label = h();
211
257
  const labelContent = normalizeSlot(SLOT_NAME_LABEL) || this.label;
212
258
  const labelId = labelContent ? this.labelId || safeId('_BV_label_') : null;
213
259
  if (labelContent || isHorizontal) {
214
- const {
215
- labelSize,
216
- labelColProps
217
- } = this;
260
+ const labelSize = this.labelSize,
261
+ labelColProps = this.labelColProps;
218
262
  const labelTag = isFieldset ? 'legend' : 'label';
219
263
  if (this.labelSrOnly) {
220
264
  if (labelContent) {
@@ -1,6 +1,5 @@
1
1
  import { extend } from '../../vue';
2
2
  import { NAME_FORM_SELECT_OPTION_GROUP } from '../../constants/components';
3
- import { PROP_TYPE_STRING } from '../../constants/props';
4
3
  import { SLOT_NAME_FIRST } from '../../constants/slots';
5
4
  import { htmlOrText } from '../../utils/html';
6
5
  import { sortKeys } from '../../utils/object';
@@ -13,7 +12,7 @@ import { BFormSelectOption } from './form-select-option';
13
12
  const props = sortKeys({
14
13
  ...props$1,
15
14
  label: {
16
- type: PROP_TYPE_STRING,
15
+ type: String,
17
16
  required: true
18
17
  }
19
18
  });
@@ -26,16 +25,12 @@ const BFormSelectOptionGroup = /*#__PURE__*/extend({
26
25
  mixins: [normalizeSlotMixin, formOptionsMixin],
27
26
  props,
28
27
  render(h) {
29
- const {
30
- label
31
- } = this;
28
+ const label = this.label;
32
29
  const $options = this.formOptions.map((option, index) => {
33
- const {
34
- value,
35
- text,
36
- html,
37
- disabled
38
- } = option;
30
+ const value = option.value,
31
+ text = option.text,
32
+ html = option.html,
33
+ disabled = option.disabled;
39
34
  return h(BFormSelectOption, {
40
35
  attrs: {
41
36
  value,
@@ -1,17 +1,15 @@
1
1
  import { extend, mergeData } from '../../vue';
2
2
  import { NAME_FORM_SELECT_OPTION } from '../../constants/components';
3
- import { PROP_TYPE_BOOLEAN, PROP_TYPE_ANY } from '../../constants/props';
4
3
 
5
4
  // --- Props ---
6
5
 
7
6
  const props = {
8
7
  disabled: {
9
- type: PROP_TYPE_BOOLEAN,
8
+ type: Boolean,
10
9
  required: false,
11
10
  default: false
12
11
  },
13
12
  value: {
14
- type: PROP_TYPE_ANY,
15
13
  required: true
16
14
  }
17
15
  };
@@ -24,15 +22,11 @@ const BFormSelectOption = /*#__PURE__*/extend({
24
22
  functional: true,
25
23
  props,
26
24
  render(h, _ref) {
27
- let {
28
- props,
29
- data,
30
- children
31
- } = _ref;
32
- const {
33
- value,
34
- disabled
35
- } = props;
25
+ let props = _ref.props,
26
+ data = _ref.data,
27
+ children = _ref.children;
28
+ const value = props.value,
29
+ disabled = props.disabled;
36
30
  return h('option', mergeData(data, {
37
31
  attrs: {
38
32
  disabled
@@ -1,47 +1,48 @@
1
1
  import { extend } from '../../vue';
2
2
  import { NAME_FORM_SELECT } from '../../constants/components';
3
- import { EVENT_NAME_CHANGE } from '../../constants/events';
4
- import { PROP_TYPE_BOOLEAN, PROP_TYPE_STRING, PROP_TYPE_NUMBER } from '../../constants/props';
3
+ import { EVENT_NAME_CHANGE, EVENT_NAME_INPUT } from '../../constants/events';
5
4
  import { SLOT_NAME_FIRST } from '../../constants/slots';
6
5
  import { from } from '../../utils/array';
7
6
  import { attemptFocus, attemptBlur } from '../../utils/dom';
8
7
  import { htmlOrText } from '../../utils/html';
9
8
  import { isArray } from '../../utils/inspect';
10
9
  import { sortKeys } from '../../utils/object';
11
- import { props as props$3, formControlMixin } from '../../mixins/form-control';
12
- import { props as props$4, formCustomMixin } from '../../mixins/form-custom';
13
- import { props as props$5, formSizeMixin } from '../../mixins/form-size';
14
- import { props as props$6, formStateMixin } from '../../mixins/form-state';
15
- import { props as props$1, idMixin } from '../../mixins/id';
16
- import { props as props$2, modelMixin, MODEL_PROP_NAME, MODEL_EVENT_NAME } from '../../mixins/model';
10
+ import { props as props$2, formControlMixin } from '../../mixins/form-control';
11
+ import { props as props$3, formCustomMixin } from '../../mixins/form-custom';
12
+ import { props as props$4, formSizeMixin } from '../../mixins/form-size';
13
+ import { props as props$5, formStateMixin } from '../../mixins/form-state';
17
14
  import { normalizeSlotMixin } from '../../mixins/normalize-slot';
15
+ import { props as props$1, idMixin } from '../../mixins/id';
18
16
  import { optionsMixin } from './helpers/mixin-options';
19
17
  import { BFormSelectOption } from './form-select-option';
20
18
  import { BFormSelectOptionGroup } from './form-select-option-group';
21
19
 
20
+ const MODEL_PROP_NAME = 'value';
21
+ const MODEL_EVENT_NAME = EVENT_NAME_INPUT;
22
+
22
23
  // --- Props ---
23
24
 
24
25
  const props = sortKeys({
25
26
  ...props$1,
27
+ [MODEL_PROP_NAME]: {},
26
28
  ...props$2,
27
29
  ...props$3,
28
30
  ...props$4,
29
31
  ...props$5,
30
- ...props$6,
31
32
  ariaInvalid: {
32
- type: [PROP_TYPE_BOOLEAN, PROP_TYPE_STRING],
33
+ type: [Boolean, String],
33
34
  required: false,
34
35
  default: false
35
36
  },
36
37
  multiple: {
37
- type: PROP_TYPE_BOOLEAN,
38
+ type: Boolean,
38
39
  required: false,
39
40
  default: false
40
41
  },
41
42
  // Browsers default size to `0`, which shows 4 rows in most browsers in multiple mode
42
43
  // Size of `1` can bork out Firefox
43
44
  selectSize: {
44
- type: PROP_TYPE_NUMBER,
45
+ type: Number,
45
46
  required: false,
46
47
  default: 0
47
48
  }
@@ -52,7 +53,11 @@ const props = sortKeys({
52
53
  // @vue/component
53
54
  const BFormSelect = /*#__PURE__*/extend({
54
55
  name: NAME_FORM_SELECT,
55
- mixins: [idMixin, modelMixin, formControlMixin, formSizeMixin, formStateMixin, formCustomMixin, optionsMixin, normalizeSlotMixin],
56
+ mixins: [idMixin, formControlMixin, formSizeMixin, formStateMixin, formCustomMixin, optionsMixin, normalizeSlotMixin],
57
+ model: {
58
+ prop: MODEL_PROP_NAME,
59
+ event: MODEL_EVENT_NAME
60
+ },
56
61
  props,
57
62
  data() {
58
63
  return {
@@ -85,9 +90,7 @@ const BFormSelect = /*#__PURE__*/extend({
85
90
  attemptBlur(this.$refs.input);
86
91
  },
87
92
  onChange(event) {
88
- const {
89
- target
90
- } = event;
93
+ const target = event.target;
91
94
  const selectedValue = from(target.options).filter(o => o.selected).map(o => '_value' in o ? o._value : o.value);
92
95
  this.localValue = target.multiple ? selectedValue : selectedValue[0];
93
96
  this.$nextTick(() => {
@@ -96,20 +99,16 @@ const BFormSelect = /*#__PURE__*/extend({
96
99
  }
97
100
  },
98
101
  render(h) {
99
- const {
100
- name,
101
- disabled,
102
- required,
103
- computedSelectSize: size,
104
- localValue: value
105
- } = this;
102
+ const name = this.name,
103
+ disabled = this.disabled,
104
+ required = this.required,
105
+ size = this.computedSelectSize,
106
+ value = this.localValue;
106
107
  const $options = this.formOptions.map((option, index) => {
107
- const {
108
- value,
109
- label,
110
- options,
111
- disabled
112
- } = option;
108
+ const value = option.value,
109
+ label = option.label,
110
+ options = option.options,
111
+ disabled = option.disabled;
113
112
  const key = `option_${index}`;
114
113
  return isArray(options) ? h(BFormSelectOptionGroup, {
115
114
  props: {