@gitlab/ui 49.0.0 → 49.0.2

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 (131) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/components/base/accordion/accordion.js +2 -8
  3. package/dist/components/base/accordion/accordion_item.js +0 -14
  4. package/dist/components/base/alert/alert.js +4 -22
  5. package/dist/components/base/avatar/avatar.js +0 -7
  6. package/dist/components/base/avatar_labeled/avatar_labeled.js +0 -2
  7. package/dist/components/base/avatars_inline/avatars_inline.js +2 -10
  8. package/dist/components/base/badge/badge.js +0 -8
  9. package/dist/components/base/banner/banner.js +0 -10
  10. package/dist/components/base/breadcrumb/breadcrumb.js +0 -12
  11. package/dist/components/base/breadcrumb/breadcrumb_item.js +0 -2
  12. package/dist/components/base/broadcast_message/broadcast_message.js +0 -3
  13. package/dist/components/base/button/button.js +0 -11
  14. package/dist/components/base/card/card.js +1 -2
  15. package/dist/components/base/datepicker/datepicker.js +7 -42
  16. package/dist/components/base/daterange_picker/daterange_picker.js +0 -23
  17. package/dist/components/base/drawer/drawer.js +0 -13
  18. package/dist/components/base/dropdown/dropdown.js +3 -17
  19. package/dist/components/base/dropdown/dropdown_item.js +2 -8
  20. package/dist/components/base/filtered_search/common_story_options.js +1 -2
  21. package/dist/components/base/filtered_search/filtered_search.js +9 -61
  22. package/dist/components/base/filtered_search/filtered_search_suggestion.js +0 -6
  23. package/dist/components/base/filtered_search/filtered_search_suggestion_list.js +0 -16
  24. package/dist/components/base/filtered_search/filtered_search_term.js +0 -9
  25. package/dist/components/base/filtered_search/filtered_search_token.js +10 -49
  26. package/dist/components/base/filtered_search/filtered_search_token_segment.js +3 -56
  27. package/dist/components/base/filtered_search/filtered_search_utils.js +7 -24
  28. package/dist/components/base/form/form_checkbox/form_checkbox.js +0 -2
  29. package/dist/components/base/form/form_checkbox_tree/checkbox_tree_node.js +0 -4
  30. package/dist/components/base/form/form_checkbox_tree/form_checkbox_tree.js +0 -10
  31. package/dist/components/base/form/form_checkbox_tree/models/node.js +1 -10
  32. package/dist/components/base/form/form_checkbox_tree/models/tree.js +16 -37
  33. package/dist/components/base/form/form_combobox/form_combobox.js +2 -36
  34. package/dist/components/base/form/form_group/form_group.js +2 -7
  35. package/dist/components/base/form/form_input/form_input.js +2 -8
  36. package/dist/components/base/form/form_input_group/form_input_group.js +0 -5
  37. package/dist/components/base/form/form_input_group/form_input_group_mixin.js +0 -8
  38. package/dist/components/base/form/form_radio_group/form_radio_group.js +0 -2
  39. package/dist/components/base/form/form_select/form_select.js +0 -3
  40. package/dist/components/base/form/form_textarea/form_textarea.js +2 -7
  41. package/dist/components/base/icon/icon.js +4 -14
  42. package/dist/components/base/infinite_scroll/infinite_scroll.js +7 -21
  43. package/dist/components/base/keyset_pagination/keyset_pagination.js +0 -9
  44. package/dist/components/base/label/label.js +0 -12
  45. package/dist/components/base/loading_icon/loading_icon.js +7 -10
  46. package/dist/components/base/markdown/markdown.js +1 -0
  47. package/dist/components/base/modal/modal.js +7 -27
  48. package/dist/components/base/new_dropdowns/base_dropdown/base_dropdown.js +14 -34
  49. package/dist/components/base/new_dropdowns/constants.js +4 -2
  50. package/dist/components/base/new_dropdowns/listbox/listbox.js +14 -81
  51. package/dist/components/base/new_dropdowns/listbox/listbox_group.js +0 -2
  52. package/dist/components/base/new_dropdowns/listbox/listbox_item.js +0 -5
  53. package/dist/components/base/new_dropdowns/listbox/utils.js +0 -7
  54. package/dist/components/base/paginated_list/paginated_list.js +0 -15
  55. package/dist/components/base/pagination/pagination.js +14 -72
  56. package/dist/components/base/path/path.js +0 -29
  57. package/dist/components/base/popover/popover.js +0 -5
  58. package/dist/components/base/search_box_by_click/search_box_by_click.js +1 -26
  59. package/dist/components/base/search_box_by_type/search_box_by_type.js +2 -12
  60. package/dist/components/base/segmented_control/segmented_control.js +0 -10
  61. package/dist/components/base/skeleton_loader/skeleton_loader.js +0 -19
  62. package/dist/components/base/skeleton_loading/skeleton_loading.js +0 -3
  63. package/dist/components/base/sorting/sorting.js +1 -9
  64. package/dist/components/base/sorting/sorting_item.js +4 -6
  65. package/dist/components/base/table/table.js +0 -4
  66. package/dist/components/base/tabs/tab/tab.js +2 -6
  67. package/dist/components/base/tabs/tabs/scrollable_tabs.js +0 -21
  68. package/dist/components/base/tabs/tabs/tabs.js +8 -33
  69. package/dist/components/base/toast/toast.js +3 -15
  70. package/dist/components/base/toggle/toggle.js +0 -18
  71. package/dist/components/base/token/token.js +0 -4
  72. package/dist/components/base/token_selector/token_container.js +0 -24
  73. package/dist/components/base/token_selector/token_selector.js +10 -61
  74. package/dist/components/base/token_selector/token_selector_dropdown.js +4 -32
  75. package/dist/components/charts/area/area.js +8 -32
  76. package/dist/components/charts/bar/bar.js +7 -19
  77. package/dist/components/charts/chart/chart.js +1 -22
  78. package/dist/components/charts/column/column.js +8 -18
  79. package/dist/components/charts/discrete_scatter/discrete_scatter.js +2 -13
  80. package/dist/components/charts/gauge/gauge.js +0 -15
  81. package/dist/components/charts/heatmap/heatmap.js +3 -16
  82. package/dist/components/charts/legend/legend.js +2 -24
  83. package/dist/components/charts/line/line.js +8 -34
  84. package/dist/components/charts/series_label/series_label.js +0 -12
  85. package/dist/components/charts/single_stat/single_stat.js +0 -8
  86. package/dist/components/charts/sparkline/sparkline.js +1 -16
  87. package/dist/components/charts/stacked_column/stacked_column.js +8 -26
  88. package/dist/components/charts/tooltip/tooltip.js +0 -6
  89. package/dist/components/mixins/button_mixin.js +0 -1
  90. package/dist/components/mixins/safe_link_mixin.js +0 -1
  91. package/dist/components/mixins/toolbox_mixin.js +0 -1
  92. package/dist/components/mixins/tooltip_mixin.js +1 -2
  93. package/dist/components/regions/empty_state/empty_state.js +0 -12
  94. package/dist/components/utilities/animated_number/animated_number.js +0 -16
  95. package/dist/components/utilities/friendly_wrap/friendly_wrap.js +0 -3
  96. package/dist/components/utilities/intersection_observer/intersection_observer.js +0 -7
  97. package/dist/components/utilities/intersperse/intersperse.js +3 -9
  98. package/dist/components/utilities/sprintf/sprintf.js +9 -23
  99. package/dist/components/utilities/truncate/truncate.js +0 -10
  100. package/dist/config.js +3 -4
  101. package/dist/directives/hover_load/hover_load.js +2 -8
  102. package/dist/directives/outside/get_event_like_time_stamp.js +4 -2
  103. package/dist/directives/outside/outside.js +5 -20
  104. package/dist/directives/resize_observer/resize_observer.js +0 -10
  105. package/dist/directives/safe_html/safe_html.js +5 -6
  106. package/dist/directives/safe_link/mock_data.js +1 -1
  107. package/dist/directives/safe_link/safe_link.js +0 -13
  108. package/dist/utils/breakpoints.js +0 -3
  109. package/dist/utils/charts/config.js +29 -42
  110. package/dist/utils/charts/constants.js +8 -8
  111. package/dist/utils/charts/mock_data.js +2 -2
  112. package/dist/utils/charts/story_config.js +1 -1
  113. package/dist/utils/charts/theme.js +1 -3
  114. package/dist/utils/charts/utils.js +2 -6
  115. package/dist/utils/constants.js +10 -7
  116. package/dist/utils/data_utils.js +5 -4
  117. package/dist/utils/datetime_utility.js +4 -4
  118. package/dist/utils/number_utils.js +7 -11
  119. package/dist/utils/stories_utils.js +1 -1
  120. package/dist/utils/story_decorators/container.js +0 -1
  121. package/dist/utils/string_utils.js +0 -14
  122. package/dist/utils/test_utils.js +3 -2
  123. package/dist/utils/use_fake_date.js +0 -4
  124. package/dist/utils/use_mock_intersection_observer.js +4 -19
  125. package/dist/utils/utils.js +5 -14
  126. package/package.json +3 -3
  127. package/src/components/base/new_dropdowns/base_dropdown/base_dropdown.spec.js +1 -0
  128. package/src/components/base/new_dropdowns/base_dropdown/base_dropdown.vue +13 -7
  129. package/src/components/base/new_dropdowns/listbox/listbox.spec.js +13 -7
  130. package/src/components/base/new_dropdowns/listbox/listbox.vue +12 -16
  131. package/src/components/base/pagination/pagination.vue +2 -2
@@ -138,11 +138,6 @@ export default {
138
138
  };
139
139
  },
140
140
  },
141
- updated() {
142
- if (this.visible) {
143
- this.popper?.update();
144
- }
145
- },
146
141
  mounted() {
147
142
  this.$nextTick(() => {
148
143
  this.popper = createPopper(this.$refs.toggle.$el, this.$refs.content, this.popperConfig);
@@ -152,11 +147,22 @@ export default {
152
147
  this.popper.destroy();
153
148
  },
154
149
  methods: {
155
- toggle() {
150
+ async toggle() {
156
151
  this.visible = !this.visible;
157
152
 
158
153
  if (this.visible) {
159
- this.popper.update();
154
+ /* Initially dropdown is hidden with `display="none"`.
155
+ When `visible` prop is toggled ON, with the `nextTick` we wait for the DOM update -
156
+ dropdown's `display="block"` is set (adding CSS class `show`).
157
+ After that we can recalculate its position (calling `popper.update()`).
158
+ https://github.com/floating-ui/floating-ui/issues/630:
159
+ "Unfortunately there's not any way to compute the position of an element not rendered in the document".
160
+ Then we `await` while the new dropdown position is calculated and DOM updated accordingly.
161
+ After we can emit the `GL_DROPDOWN_SHOWN` event to the parent which might interact with updated dropdown,
162
+ e.g. set focus..
163
+ */
164
+ await this.$nextTick();
165
+ await this.popper?.update();
160
166
  this.$emit(GL_DROPDOWN_SHOWN);
161
167
  } else {
162
168
  this.$emit(GL_DROPDOWN_HIDDEN);
@@ -247,19 +247,25 @@ describe('GlListbox', () => {
247
247
  });
248
248
 
249
249
  describe('when `searchable` is enabled', () => {
250
- it('should move focus to the first item on search input `ARROW_DOWN`', async () => {
250
+ let searchbox;
251
+
252
+ beforeEach(() => {
251
253
  buildWrapper({ items: mockOptions, searchable: true });
252
254
  findBaseDropdown().vm.$emit(GL_DROPDOWN_SHOWN);
253
- findSearchBox().trigger('keydown', { code: ARROW_DOWN });
255
+ firstItem = findListItem(0);
256
+ searchbox = findSearchBox();
257
+ });
258
+
259
+ it('should move focus to the first item on search input `ARROW_DOWN`', async () => {
260
+ expect(searchbox.element).toHaveFocus();
261
+ searchbox.trigger('keydown', { code: ARROW_DOWN });
254
262
  expect(firstItem.element).toHaveFocus();
255
263
  });
256
264
 
257
265
  it('should move focus to the search input on first item `ARROW_UP', async () => {
258
- buildWrapper({ items: mockOptions, searchable: true });
259
- findBaseDropdown().vm.$emit(GL_DROPDOWN_SHOWN);
260
- const focusSpy = jest.spyOn(wrapper.vm.$refs.searchBox, 'focusInput');
261
- await firstItem.trigger('keydown', { code: ARROW_UP });
262
- expect(focusSpy).toHaveBeenCalled();
266
+ searchbox.trigger('keydown', { code: ARROW_DOWN });
267
+ firstItem.trigger('keydown', { code: ARROW_UP });
268
+ expect(searchbox.element).toHaveFocus();
263
269
  });
264
270
  });
265
271
  });
@@ -293,19 +293,17 @@ export default {
293
293
  return index === 0 ? null : GROUP_TOP_BORDER_CLASSES;
294
294
  },
295
295
  onShow() {
296
- this.$nextTick(() => {
297
- if (this.searchable) {
298
- this.focusSearchInput();
299
- } else {
300
- this.focusItem(this.selectedIndices[0] ?? 0, this.getFocusableListItemElements());
301
- }
302
- /**
303
- * Emitted when dropdown is shown
304
- *
305
- * @event shown
306
- */
307
- this.$emit(GL_DROPDOWN_SHOWN);
308
- });
296
+ if (this.searchable) {
297
+ this.focusSearchInput();
298
+ } else {
299
+ this.focusItem(this.selectedIndices[0] ?? 0, this.getFocusableListItemElements());
300
+ }
301
+ /**
302
+ * Emitted when dropdown is shown
303
+ *
304
+ * @event shown
305
+ */
306
+ this.$emit(GL_DROPDOWN_SHOWN);
309
307
  },
310
308
  onHide() {
311
309
  /**
@@ -366,9 +364,7 @@ export default {
366
364
  focusItem(index, elements) {
367
365
  this.nextFocusedItemIndex = index;
368
366
 
369
- this.$nextTick(() => {
370
- elements[index]?.focus();
371
- });
367
+ elements[index]?.focus();
372
368
  },
373
369
  focusSearchInput() {
374
370
  this.$refs.searchBox.focusInput();
@@ -375,8 +375,8 @@ export default {
375
375
  </script>
376
376
 
377
377
  <template>
378
- <nav aria-label="Pagination">
379
- <ul v-if="isVisible" class="pagination gl-pagination text-nowrap" :class="wrapperClasses">
378
+ <nav v-if="isVisible" class="gl-pagination text-nowrap" aria-label="Pagination">
379
+ <ul class="pagination" :class="wrapperClasses">
380
380
  <li
381
381
  class="page-item"
382
382
  :class="{