@gitlab/ui 132.0.1 → 132.0.3

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 (427) hide show
  1. package/dist/charts.js +13 -0
  2. package/dist/components/base/accordion/accordion.js +69 -0
  3. package/dist/components/base/accordion/accordion_item.js +160 -0
  4. package/dist/components/base/accordion/constants.js +3 -0
  5. package/dist/components/base/alert/alert.js +263 -0
  6. package/dist/components/base/animated_icon/animated_chevron_down_up_icon.js +45 -0
  7. package/dist/components/base/animated_icon/animated_chevron_lg_down_up_icon.js +45 -0
  8. package/dist/components/base/animated_icon/animated_chevron_lg_right_down_icon.js +45 -0
  9. package/dist/components/base/animated_icon/animated_chevron_right_down_icon.js +45 -0
  10. package/dist/components/base/animated_icon/animated_duo_chat_icon.js +45 -0
  11. package/dist/components/base/animated_icon/animated_loader_icon.js +45 -0
  12. package/dist/components/base/animated_icon/animated_notifications_icon.js +45 -0
  13. package/dist/components/base/animated_icon/animated_sidebar_icon.js +45 -0
  14. package/dist/components/base/animated_icon/animated_smile_icon.js +45 -0
  15. package/dist/components/base/animated_icon/animated_sort_icon.js +45 -0
  16. package/dist/components/base/animated_icon/animated_star_icon.js +45 -0
  17. package/dist/components/base/animated_icon/animated_todo_icon.js +45 -0
  18. package/dist/components/base/animated_icon/animated_upload_icon.js +45 -0
  19. package/dist/components/base/animated_icon/base_animated_icon.js +77 -0
  20. package/dist/components/base/attribute_list/attribute_list.js +100 -0
  21. package/dist/components/base/avatar/avatar.js +175 -0
  22. package/dist/components/base/avatar/utils.js +17 -0
  23. package/dist/components/base/avatar_labeled/avatar_labeled.js +198 -0
  24. package/dist/components/base/avatar_link/avatar_link.js +47 -0
  25. package/dist/components/base/avatars_inline/avatars_inline.js +139 -0
  26. package/dist/components/base/badge/badge.js +197 -0
  27. package/dist/components/base/banner/banner.js +149 -0
  28. package/dist/components/base/breadcrumb/breadcrumb.js +282 -0
  29. package/dist/components/base/breadcrumb/breadcrumb_item.js +96 -0
  30. package/dist/components/base/broadcast_message/broadcast_message.js +113 -0
  31. package/dist/components/base/broadcast_message/constants.js +5 -0
  32. package/dist/components/base/button/button.js +419 -0
  33. package/dist/components/base/button_group/button_group.js +53 -0
  34. package/dist/components/base/card/card.js +69 -0
  35. package/dist/components/base/collapse/collapse.js +163 -0
  36. package/dist/components/base/color_mode_toggle/color_mode_toggle.js +92 -0
  37. package/dist/components/base/datepicker/datepicker.js +475 -0
  38. package/dist/components/base/daterange_picker/daterange_picker.js +394 -0
  39. package/dist/components/base/drawer/drawer.js +156 -0
  40. package/dist/components/base/dropdown/dropdown.js +330 -0
  41. package/dist/components/base/dropdown/dropdown_divider.js +48 -0
  42. package/dist/components/base/dropdown/dropdown_form.js +48 -0
  43. package/dist/components/base/dropdown/dropdown_item.js +175 -0
  44. package/dist/components/base/dropdown/dropdown_section_header.js +48 -0
  45. package/dist/components/base/dropdown/dropdown_text.js +48 -0
  46. package/dist/components/base/filtered_search/common_story_options.js +14 -0
  47. package/dist/components/base/filtered_search/filtered_search.js +428 -0
  48. package/dist/components/base/filtered_search/filtered_search_suggestion.js +95 -0
  49. package/dist/components/base/filtered_search/filtered_search_suggestion_list.js +139 -0
  50. package/dist/components/base/filtered_search/filtered_search_term.js +217 -0
  51. package/dist/components/base/filtered_search/filtered_search_token.js +383 -0
  52. package/dist/components/base/filtered_search/filtered_search_token_segment.js +444 -0
  53. package/dist/components/base/filtered_search/filtered_search_utils.js +241 -0
  54. package/dist/components/base/form/form.js +43 -0
  55. package/dist/components/base/form/form_character_count/form_character_count.js +107 -0
  56. package/dist/components/base/form/form_checkbox/form_checkbox.js +342 -0
  57. package/dist/components/base/form/form_checkbox/form_checkbox_group.js +188 -0
  58. package/dist/components/base/form/form_combobox/constants.js +55 -0
  59. package/dist/components/base/form/form_combobox/form_combobox.js +239 -0
  60. package/dist/components/base/form/form_date/form_date.js +143 -0
  61. package/dist/components/base/form/form_fields/form_field_validator.js +93 -0
  62. package/dist/components/base/form/form_fields/form_fields.js +289 -0
  63. package/dist/components/base/form/form_fields/form_fields_loop.js +75 -0
  64. package/dist/components/base/form/form_fields/mappers.js +13 -0
  65. package/dist/components/base/form/form_fields/validators.js +48 -0
  66. package/dist/components/base/form/form_group/form_group.js +119 -0
  67. package/dist/components/base/form/form_input/form_input.js +695 -0
  68. package/dist/components/base/form/form_input_group/form_input_group.js +120 -0
  69. package/dist/components/base/form/form_input_group/form_input_group_mixin.js +41 -0
  70. package/dist/components/base/form/form_radio/form_radio.js +259 -0
  71. package/dist/components/base/form/form_radio_group/form_radio_group.js +189 -0
  72. package/dist/components/base/form/form_select/constants.js +12 -0
  73. package/dist/components/base/form/form_select/form_select.js +96 -0
  74. package/dist/components/base/form/form_textarea/form_textarea.js +166 -0
  75. package/dist/components/base/form/input_group_text/input_group_text.js +43 -0
  76. package/dist/components/base/icon/icon.js +113 -0
  77. package/dist/components/base/illustration/illustration.js +80 -0
  78. package/dist/components/base/infinite_scroll/infinite_scroll.js +196 -0
  79. package/dist/components/base/keyset_pagination/keyset_pagination.js +152 -0
  80. package/dist/components/base/label/label.js +174 -0
  81. package/dist/components/base/link/link.js +330 -0
  82. package/dist/components/base/loading_icon/loading_icon.js +120 -0
  83. package/dist/components/base/markdown/markdown.js +50 -0
  84. package/dist/components/base/modal/modal.js +259 -0
  85. package/dist/components/base/new_dropdowns/base_dropdown/base_dropdown.js +716 -0
  86. package/dist/components/base/new_dropdowns/base_dropdown/constants.js +5 -0
  87. package/dist/components/base/new_dropdowns/base_dropdown/dropdown_container.js +32 -0
  88. package/dist/components/base/new_dropdowns/constants.js +24 -0
  89. package/dist/components/base/new_dropdowns/disclosure/constants.js +8 -0
  90. package/dist/components/base/new_dropdowns/disclosure/disclosure_dropdown.js +400 -0
  91. package/dist/components/base/new_dropdowns/disclosure/disclosure_dropdown_group.js +112 -0
  92. package/dist/components/base/new_dropdowns/disclosure/disclosure_dropdown_item.js +196 -0
  93. package/dist/components/base/new_dropdowns/disclosure/mock_data.js +168 -0
  94. package/dist/components/base/new_dropdowns/disclosure/utils.js +84 -0
  95. package/dist/components/base/new_dropdowns/listbox/listbox.js +997 -0
  96. package/dist/components/base/new_dropdowns/listbox/listbox_group.js +58 -0
  97. package/dist/components/base/new_dropdowns/listbox/listbox_item.js +112 -0
  98. package/dist/components/base/new_dropdowns/listbox/listbox_search_input.js +94 -0
  99. package/dist/components/base/new_dropdowns/listbox/mock_data.js +131 -0
  100. package/dist/components/base/new_dropdowns/listbox/utils.js +33 -0
  101. package/dist/components/base/pagination/pagination.js +397 -0
  102. package/dist/components/base/path/data.js +34 -0
  103. package/dist/components/base/path/path.js +177 -0
  104. package/dist/components/base/popover/popover.js +142 -0
  105. package/dist/components/base/progress_bar/progress_bar.js +117 -0
  106. package/dist/components/base/search_box_by_click/search_box_by_click.js +245 -0
  107. package/dist/components/base/search_box_by_type/search_box_by_type.js +187 -0
  108. package/dist/components/base/segmented_control/segmented_control.js +73 -0
  109. package/dist/components/base/skeleton_loader/skeleton_loader.js +232 -0
  110. package/dist/components/base/sorting/sorting.js +180 -0
  111. package/dist/components/base/table/constants.js +5 -0
  112. package/dist/components/base/table/table.js +187 -0
  113. package/dist/components/base/table_lite/table_lite.js +80 -0
  114. package/dist/components/base/tabs/constants.js +3 -0
  115. package/dist/components/base/tabs/tab/tab.js +113 -0
  116. package/dist/components/base/tabs/tabs/scrollable_tabs.js +162 -0
  117. package/dist/components/base/tabs/tabs/tabs.js +223 -0
  118. package/dist/components/base/toast/index.js +66 -0
  119. package/dist/components/base/toast/toast.js +125 -0
  120. package/dist/components/base/toast/toaster.js +87 -0
  121. package/dist/components/base/toggle/toggle.js +178 -0
  122. package/dist/components/base/token/token.js +97 -0
  123. package/dist/components/base/token_selector/helpers.js +5 -0
  124. package/dist/components/base/token_selector/token_container.js +160 -0
  125. package/dist/components/base/token_selector/token_selector.js +454 -0
  126. package/dist/components/base/token_selector/token_selector_dropdown.js +223 -0
  127. package/dist/components/base/tooltip/tooltip.js +54 -0
  128. package/dist/components/charts/area/area.js +329 -0
  129. package/dist/components/charts/bar/bar.js +207 -0
  130. package/dist/components/charts/chart/chart.js +215 -0
  131. package/dist/components/charts/column/column.js +221 -0
  132. package/dist/components/charts/discrete_scatter/discrete_scatter.js +199 -0
  133. package/dist/components/charts/gauge/gauge.js +205 -0
  134. package/dist/components/charts/heatmap/heatmap.js +299 -0
  135. package/dist/components/charts/heatmap/index.js +2 -0
  136. package/dist/components/charts/legend/legend.js +245 -0
  137. package/dist/components/charts/line/line.js +340 -0
  138. package/dist/components/charts/series_label/series_label.js +101 -0
  139. package/dist/components/charts/shared/tooltip/tooltip.js +369 -0
  140. package/dist/components/charts/shared/tooltip/tooltip_default_format/tooltip_default_format.js +53 -0
  141. package/dist/components/charts/single_stat/single_stat.js +164 -0
  142. package/dist/components/charts/sparkline/sparkline.js +299 -0
  143. package/dist/components/charts/stacked_column/stacked_column.js +380 -0
  144. package/dist/components/dashboards/dashboard_layout/dashboard_layout.js +125 -0
  145. package/dist/components/dashboards/dashboard_layout/grid_layout/grid_layout.js +326 -0
  146. package/dist/components/dashboards/dashboard_layout/validators.js +14 -0
  147. package/dist/components/dashboards/dashboard_panel/dashboard_panel.js +236 -0
  148. package/dist/components/dashboards/mock_data.js +49 -0
  149. package/dist/components/experimental/experiment_badge/constants.js +4 -0
  150. package/dist/components/experimental/experiment_badge/experiment_badge.js +102 -0
  151. package/dist/components/extended/multi_step_form_template/multi_step_form_template.js +87 -0
  152. package/dist/components/index.js +107 -0
  153. package/dist/components/mixins/button_mixin.js +11 -0
  154. package/dist/components/mixins/safe_link_mixin.js +30 -0
  155. package/dist/components/mixins/tooltip_mixin.js +21 -0
  156. package/dist/components/regions/dashboard_skeleton/dashboard_skeleton.js +53 -0
  157. package/dist/components/regions/empty_state/empty_state.js +181 -0
  158. package/dist/components/shared_components/clear_icon_button/clear_icon_button.js +64 -0
  159. package/dist/components/shared_components/clipboard_button/clipboard_button.js +100 -0
  160. package/dist/components/shared_components/close_button/close_button.js +55 -0
  161. package/dist/components/utilities/animated_number/animated_number.js +131 -0
  162. package/dist/components/utilities/friendly_wrap/friendly_wrap.js +75 -0
  163. package/dist/components/utilities/intersection_observer/intersection_observer.js +88 -0
  164. package/dist/components/utilities/intersperse/intersperse.js +104 -0
  165. package/dist/components/utilities/sprintf/sprintf.js +171 -0
  166. package/dist/components/utilities/truncate/constants.js +8 -0
  167. package/dist/components/utilities/truncate/truncate.js +154 -0
  168. package/dist/components/utilities/truncate_text/constants.js +7 -0
  169. package/dist/components/utilities/truncate_text/truncate_text.js +146 -0
  170. package/dist/config.js +53 -0
  171. package/dist/directives/hover_load/hover_load.js +45 -0
  172. package/dist/directives/index.js +8 -0
  173. package/dist/directives/modal.js +1 -0
  174. package/dist/directives/outside/outside.js +149 -0
  175. package/dist/directives/resize_observer/resize_observer.js +58 -0
  176. package/dist/directives/safe_html/constants.js +6 -0
  177. package/dist/directives/safe_html/safe_html.js +39 -0
  178. package/dist/directives/safe_link/mock_data.js +10 -0
  179. package/dist/directives/safe_link/safe_link.js +67 -0
  180. package/dist/directives/tooltip/container.js +7 -0
  181. package/dist/directives/tooltip/tooltip.js +18 -0
  182. package/dist/index.css +7 -0
  183. package/dist/index.css.map +1 -0
  184. package/dist/index.js +2 -0
  185. package/dist/tailwind.css +2 -0
  186. package/dist/tailwind.css.map +1 -0
  187. package/dist/tokens/build/js/tokens.dark.js +1410 -0
  188. package/dist/tokens/build/js/tokens.js +1410 -0
  189. package/dist/tokens/common_story_options.js +29 -0
  190. package/dist/tokens/tokens_story.js +76 -0
  191. package/dist/utils/breakpoints.js +20 -0
  192. package/dist/utils/charts/config.js +616 -0
  193. package/dist/utils/charts/constants.js +69 -0
  194. package/dist/utils/charts/mock_data.js +191 -0
  195. package/dist/utils/charts/story_config.js +24 -0
  196. package/dist/utils/charts/theme.js +200 -0
  197. package/dist/utils/charts/utils.js +54 -0
  198. package/dist/utils/constants.js +331 -0
  199. package/dist/utils/data_utils.js +19 -0
  200. package/dist/utils/datetime_utility.js +61 -0
  201. package/dist/utils/equality_utils.js +84 -0
  202. package/dist/utils/form_options_utils.js +46 -0
  203. package/dist/utils/i18n.js +65 -0
  204. package/dist/utils/is_slot_empty.js +34 -0
  205. package/dist/utils/number_utils.js +132 -0
  206. package/dist/utils/play_utils.js +11 -0
  207. package/dist/utils/set_utils.js +25 -0
  208. package/dist/utils/stories_constants.js +29 -0
  209. package/dist/utils/stories_utils.js +62 -0
  210. package/dist/utils/story_decorators/container.js +19 -0
  211. package/dist/utils/string_utils.js +69 -0
  212. package/dist/utils/svgs/svg_paths.js +7 -0
  213. package/dist/utils/test_utils.js +33 -0
  214. package/dist/utils/url_utils.js +56 -0
  215. package/dist/utils/use_fake_date.js +29 -0
  216. package/dist/utils/use_mock_intersection_observer.js +105 -0
  217. package/dist/utils/utils.js +205 -0
  218. package/dist/utils/vue_utils.js +57 -0
  219. package/dist/utils.js +5 -0
  220. package/dist/vendor/bootstrap-vue/src/bv-config.js +8 -0
  221. package/dist/vendor/bootstrap-vue/src/components/button/button-close.js +81 -0
  222. package/dist/vendor/bootstrap-vue/src/components/button/button.js +204 -0
  223. package/dist/vendor/bootstrap-vue/src/components/button/index.js +2 -0
  224. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-divider.js +44 -0
  225. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-form.js +59 -0
  226. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-group.js +98 -0
  227. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-header.js +63 -0
  228. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-item-button.js +108 -0
  229. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-item.js +97 -0
  230. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-text.js +60 -0
  231. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown.js +270 -0
  232. package/dist/vendor/bootstrap-vue/src/components/dropdown/index.js +8 -0
  233. package/dist/vendor/bootstrap-vue/src/components/form/form-invalid-feedback.js +80 -0
  234. package/dist/vendor/bootstrap-vue/src/components/form/form-text.js +55 -0
  235. package/dist/vendor/bootstrap-vue/src/components/form/form-valid-feedback.js +80 -0
  236. package/dist/vendor/bootstrap-vue/src/components/form/form.js +56 -0
  237. package/dist/vendor/bootstrap-vue/src/components/form/index.js +4 -0
  238. package/dist/vendor/bootstrap-vue/src/components/form-group/form-group.js +347 -0
  239. package/dist/vendor/bootstrap-vue/src/components/form-group/index.js +1 -0
  240. package/dist/vendor/bootstrap-vue/src/components/form-select/form-select-option-group.js +56 -0
  241. package/dist/vendor/bootstrap-vue/src/components/form-select/form-select-option.js +47 -0
  242. package/dist/vendor/bootstrap-vue/src/components/form-select/form-select.js +154 -0
  243. package/dist/vendor/bootstrap-vue/src/components/form-select/helpers/mixin-options.js +63 -0
  244. package/dist/vendor/bootstrap-vue/src/components/form-select/index.js +3 -0
  245. package/dist/vendor/bootstrap-vue/src/components/form-textarea/form-textarea.js +236 -0
  246. package/dist/vendor/bootstrap-vue/src/components/form-textarea/index.js +1 -0
  247. package/dist/vendor/bootstrap-vue/src/components/layout/col.js +155 -0
  248. package/dist/vendor/bootstrap-vue/src/components/layout/form-row.js +34 -0
  249. package/dist/vendor/bootstrap-vue/src/components/layout/index.js +2 -0
  250. package/dist/vendor/bootstrap-vue/src/components/link/index.js +1 -0
  251. package/dist/vendor/bootstrap-vue/src/components/link/link.js +283 -0
  252. package/dist/vendor/bootstrap-vue/src/components/modal/helpers/bv-modal-event.class.js +21 -0
  253. package/dist/vendor/bootstrap-vue/src/components/modal/helpers/modal-manager.js +212 -0
  254. package/dist/vendor/bootstrap-vue/src/components/modal/index.js +1 -0
  255. package/dist/vendor/bootstrap-vue/src/components/modal/modal.js +1059 -0
  256. package/dist/vendor/bootstrap-vue/src/components/popover/helpers/bv-popover-template.js +55 -0
  257. package/dist/vendor/bootstrap-vue/src/components/popover/helpers/bv-popover.js +31 -0
  258. package/dist/vendor/bootstrap-vue/src/components/popover/index.js +1 -0
  259. package/dist/vendor/bootstrap-vue/src/components/popover/popover.js +64 -0
  260. package/dist/vendor/bootstrap-vue/src/components/table/helpers/constants.js +22 -0
  261. package/dist/vendor/bootstrap-vue/src/components/table/helpers/default-sort-compare.js +64 -0
  262. package/dist/vendor/bootstrap-vue/src/components/table/helpers/filter-event.js +40 -0
  263. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-bottom-row.js +43 -0
  264. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-busy.js +86 -0
  265. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-caption.js +57 -0
  266. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-colgroup.js +32 -0
  267. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-empty.js +101 -0
  268. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-filtering.js +292 -0
  269. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-items.js +169 -0
  270. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-pagination.js +51 -0
  271. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-provider.js +210 -0
  272. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-selectable.js +227 -0
  273. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-sorting.js +328 -0
  274. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-stacked.js +42 -0
  275. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-table-renderer.js +241 -0
  276. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-tbody-row.js +349 -0
  277. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-tbody.js +247 -0
  278. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-tfoot.js +69 -0
  279. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-thead.js +233 -0
  280. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-top-row.js +42 -0
  281. package/dist/vendor/bootstrap-vue/src/components/table/helpers/normalize-fields.js +86 -0
  282. package/dist/vendor/bootstrap-vue/src/components/table/helpers/sanitize-row.js +31 -0
  283. package/dist/vendor/bootstrap-vue/src/components/table/helpers/stringify-record-values.js +11 -0
  284. package/dist/vendor/bootstrap-vue/src/components/table/helpers/text-selection-active.js +14 -0
  285. package/dist/vendor/bootstrap-vue/src/components/table/index.js +9 -0
  286. package/dist/vendor/bootstrap-vue/src/components/table/table-lite.js +51 -0
  287. package/dist/vendor/bootstrap-vue/src/components/table/table-simple.js +44 -0
  288. package/dist/vendor/bootstrap-vue/src/components/table/table.js +67 -0
  289. package/dist/vendor/bootstrap-vue/src/components/table/tbody.js +116 -0
  290. package/dist/vendor/bootstrap-vue/src/components/table/td.js +204 -0
  291. package/dist/vendor/bootstrap-vue/src/components/table/tfoot.js +96 -0
  292. package/dist/vendor/bootstrap-vue/src/components/table/th.js +26 -0
  293. package/dist/vendor/bootstrap-vue/src/components/table/thead.js +99 -0
  294. package/dist/vendor/bootstrap-vue/src/components/table/tr.js +121 -0
  295. package/dist/vendor/bootstrap-vue/src/components/tabs/index.js +2 -0
  296. package/dist/vendor/bootstrap-vue/src/components/tabs/tab.js +238 -0
  297. package/dist/vendor/bootstrap-vue/src/components/tabs/tabs.js +690 -0
  298. package/dist/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-popper.js +278 -0
  299. package/dist/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip-template.js +125 -0
  300. package/dist/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip.js +932 -0
  301. package/dist/vendor/bootstrap-vue/src/components/tooltip/index.js +1 -0
  302. package/dist/vendor/bootstrap-vue/src/components/tooltip/tooltip.js +337 -0
  303. package/dist/vendor/bootstrap-vue/src/components/transition/bv-transition.js +118 -0
  304. package/dist/vendor/bootstrap-vue/src/components/transporter/transporter.js +220 -0
  305. package/dist/vendor/bootstrap-vue/src/constants/components.js +55 -0
  306. package/dist/vendor/bootstrap-vue/src/constants/config.js +11 -0
  307. package/dist/vendor/bootstrap-vue/src/constants/env.js +36 -0
  308. package/dist/vendor/bootstrap-vue/src/constants/events.js +56 -0
  309. package/dist/vendor/bootstrap-vue/src/constants/key-codes.js +11 -0
  310. package/dist/vendor/bootstrap-vue/src/constants/popper.js +10 -0
  311. package/dist/vendor/bootstrap-vue/src/constants/props.js +24 -0
  312. package/dist/vendor/bootstrap-vue/src/constants/regex.js +35 -0
  313. package/dist/vendor/bootstrap-vue/src/constants/safe-types.js +15 -0
  314. package/dist/vendor/bootstrap-vue/src/constants/slots.js +36 -0
  315. package/dist/vendor/bootstrap-vue/src/directives/modal/index.js +1 -0
  316. package/dist/vendor/bootstrap-vue/src/directives/modal/modal.js +112 -0
  317. package/dist/vendor/bootstrap-vue/src/directives/tooltip/index.js +1 -0
  318. package/dist/vendor/bootstrap-vue/src/directives/tooltip/tooltip.js +267 -0
  319. package/dist/vendor/bootstrap-vue/src/directives/visible/index.js +1 -0
  320. package/dist/vendor/bootstrap-vue/src/directives/visible/visible.js +187 -0
  321. package/dist/vendor/bootstrap-vue/src/mixins/attrs.js +5 -0
  322. package/dist/vendor/bootstrap-vue/src/mixins/click-out.js +54 -0
  323. package/dist/vendor/bootstrap-vue/src/mixins/dropdown.js +470 -0
  324. package/dist/vendor/bootstrap-vue/src/mixins/focus-in.js +46 -0
  325. package/dist/vendor/bootstrap-vue/src/mixins/form-control.js +73 -0
  326. package/dist/vendor/bootstrap-vue/src/mixins/form-custom.js +26 -0
  327. package/dist/vendor/bootstrap-vue/src/mixins/form-options.js +91 -0
  328. package/dist/vendor/bootstrap-vue/src/mixins/form-selection.js +62 -0
  329. package/dist/vendor/bootstrap-vue/src/mixins/form-size.js +26 -0
  330. package/dist/vendor/bootstrap-vue/src/mixins/form-state.js +50 -0
  331. package/dist/vendor/bootstrap-vue/src/mixins/form-text.js +293 -0
  332. package/dist/vendor/bootstrap-vue/src/mixins/form-validity.js +50 -0
  333. package/dist/vendor/bootstrap-vue/src/mixins/has-listener.js +29 -0
  334. package/dist/vendor/bootstrap-vue/src/mixins/id.js +57 -0
  335. package/dist/vendor/bootstrap-vue/src/mixins/listen-on-document.js +62 -0
  336. package/dist/vendor/bootstrap-vue/src/mixins/listen-on-root.js +120 -0
  337. package/dist/vendor/bootstrap-vue/src/mixins/listen-on-window.js +62 -0
  338. package/dist/vendor/bootstrap-vue/src/mixins/listeners.js +25 -0
  339. package/dist/vendor/bootstrap-vue/src/mixins/model.js +10 -0
  340. package/dist/vendor/bootstrap-vue/src/mixins/normalize-slot.js +30 -0
  341. package/dist/vendor/bootstrap-vue/src/mixins/scoped-style.js +18 -0
  342. package/dist/vendor/bootstrap-vue/src/mixins/use-parent.js +14 -0
  343. package/dist/vendor/bootstrap-vue/src/utils/array.js +27 -0
  344. package/dist/vendor/bootstrap-vue/src/utils/bv-event.class.js +60 -0
  345. package/dist/vendor/bootstrap-vue/src/utils/cache.js +60 -0
  346. package/dist/vendor/bootstrap-vue/src/utils/clone-deep.js +18 -0
  347. package/dist/vendor/bootstrap-vue/src/utils/config-set.js +86 -0
  348. package/dist/vendor/bootstrap-vue/src/utils/config.js +71 -0
  349. package/dist/vendor/bootstrap-vue/src/utils/create-new-child-component.js +133 -0
  350. package/dist/vendor/bootstrap-vue/src/utils/css-escape.js +70 -0
  351. package/dist/vendor/bootstrap-vue/src/utils/dom.js +298 -0
  352. package/dist/vendor/bootstrap-vue/src/utils/element-to-vue-instance-registry.js +28 -0
  353. package/dist/vendor/bootstrap-vue/src/utils/env.js +16 -0
  354. package/dist/vendor/bootstrap-vue/src/utils/events.js +78 -0
  355. package/dist/vendor/bootstrap-vue/src/utils/get-event-root.js +5 -0
  356. package/dist/vendor/bootstrap-vue/src/utils/get-instance-from-directive.js +3 -0
  357. package/dist/vendor/bootstrap-vue/src/utils/get-scope-id.js +9 -0
  358. package/dist/vendor/bootstrap-vue/src/utils/get.js +63 -0
  359. package/dist/vendor/bootstrap-vue/src/utils/html.js +16 -0
  360. package/dist/vendor/bootstrap-vue/src/utils/identity.js +3 -0
  361. package/dist/vendor/bootstrap-vue/src/utils/inspect.js +35 -0
  362. package/dist/vendor/bootstrap-vue/src/utils/locale.js +18 -0
  363. package/dist/vendor/bootstrap-vue/src/utils/loose-equal.js +59 -0
  364. package/dist/vendor/bootstrap-vue/src/utils/loose-index-of.js +13 -0
  365. package/dist/vendor/bootstrap-vue/src/utils/math.js +9 -0
  366. package/dist/vendor/bootstrap-vue/src/utils/memoize.js +14 -0
  367. package/dist/vendor/bootstrap-vue/src/utils/model.js +33 -0
  368. package/dist/vendor/bootstrap-vue/src/utils/noop.js +3 -0
  369. package/dist/vendor/bootstrap-vue/src/utils/normalize-slot.js +51 -0
  370. package/dist/vendor/bootstrap-vue/src/utils/number.js +23 -0
  371. package/dist/vendor/bootstrap-vue/src/utils/object.js +72 -0
  372. package/dist/vendor/bootstrap-vue/src/utils/observe-dom.js +76 -0
  373. package/dist/vendor/bootstrap-vue/src/utils/on-instance-destroy.js +22 -0
  374. package/dist/vendor/bootstrap-vue/src/utils/plugins.js +124 -0
  375. package/dist/vendor/bootstrap-vue/src/utils/props.js +67 -0
  376. package/dist/vendor/bootstrap-vue/src/utils/router.js +150 -0
  377. package/dist/vendor/bootstrap-vue/src/utils/safe-vue-instance.js +14 -0
  378. package/dist/vendor/bootstrap-vue/src/utils/stable-sort.js +28 -0
  379. package/dist/vendor/bootstrap-vue/src/utils/string.js +47 -0
  380. package/dist/vendor/bootstrap-vue/src/utils/stringify-object-values.js +31 -0
  381. package/dist/vendor/bootstrap-vue/src/utils/warn.js +45 -0
  382. package/dist/vendor/bootstrap-vue/src/vue.js +55 -0
  383. package/package.json +4 -3
  384. package/src/components/base/link/link.vue +2 -2
  385. package/src/utils/url_utils.js +66 -0
  386. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-divider.js +5 -2
  387. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-form.js +16 -4
  388. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-group.js +31 -8
  389. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-header.js +15 -4
  390. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-item-button.js +32 -8
  391. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown.js +2 -2
  392. package/src/vendor/bootstrap-vue/src/components/form/form-invalid-feedback.js +35 -8
  393. package/src/vendor/bootstrap-vue/src/components/form/form-valid-feedback.js +35 -8
  394. package/src/vendor/bootstrap-vue/src/components/form-group/form-group.js +2 -2
  395. package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option-group.js +4 -2
  396. package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option.js +9 -3
  397. package/src/vendor/bootstrap-vue/src/components/form-select/form-select.js +16 -9
  398. package/src/vendor/bootstrap-vue/src/components/form-select/helpers/mixin-options.js +10 -3
  399. package/src/vendor/bootstrap-vue/src/components/form-textarea/form-textarea.js +26 -7
  400. package/src/vendor/bootstrap-vue/src/components/layout/col.js +2 -2
  401. package/src/vendor/bootstrap-vue/src/components/modal/modal.js +2 -2
  402. package/src/vendor/bootstrap-vue/src/components/popover/popover.js +23 -7
  403. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-busy.js +5 -2
  404. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-caption.js +10 -3
  405. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-empty.js +25 -6
  406. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-items.js +20 -5
  407. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-pagination.js +11 -4
  408. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-provider.js +27 -7
  409. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-selectable.js +21 -7
  410. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-sorting.js +72 -18
  411. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-stacked.js +6 -3
  412. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-table-renderer.js +72 -17
  413. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-tbody-row.js +18 -6
  414. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-tbody.js +7 -3
  415. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-tfoot.js +27 -7
  416. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-thead.js +21 -6
  417. package/src/vendor/bootstrap-vue/src/components/tabs/tabs.js +2 -2
  418. package/src/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-popper.js +36 -13
  419. package/src/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip-template.js +10 -3
  420. package/src/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip.js +8 -9
  421. package/src/vendor/bootstrap-vue/src/components/transition/bv-transition.js +20 -5
  422. package/src/vendor/bootstrap-vue/src/components/transporter/transporter.js +22 -6
  423. package/src/vendor/bootstrap-vue/src/mixins/listen-on-document.js +1 -2
  424. package/src/vendor/bootstrap-vue/src/mixins/listen-on-root.js +1 -2
  425. package/src/vendor/bootstrap-vue/src/mixins/listen-on-window.js +1 -2
  426. package/src/vendor/bootstrap-vue/src/utils/array.js +0 -1
  427. package/src/vendor/bootstrap-vue/src/utils/locale.js +1 -2
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Adds two numbers together
3
+ * @param {Number|String} a
4
+ * @param {Number|String} b
5
+ */
6
+ const addition = (a, b) => Number(a) + Number(b);
7
+
8
+ /**
9
+ * Returns the sum of all arguments
10
+ * @param {...Number} numbers
11
+ */
12
+ const sum = function () {
13
+ for (var _len = arguments.length, numbers = new Array(_len), _key = 0; _key < _len; _key++) {
14
+ numbers[_key] = arguments[_key];
15
+ }
16
+ return numbers.reduce(addition);
17
+ }; // eslint-disable-line unicorn/no-array-callback-reference
18
+
19
+ /**
20
+ * Returns the average of all arguments
21
+ * @param {...Number} numbers
22
+ */
23
+ const average = function () {
24
+ return sum(...arguments) / arguments.length;
25
+ };
26
+
27
+ /**
28
+ * Returns the modulo of n for a divisor.
29
+ *
30
+ * Maps the integer n into the range [0, divisor) when the divisor is positive,
31
+ * and (divisor, 0] when the divisor is negative.
32
+ *
33
+ * This is useful when indexing into an array, to ensure you always stay within
34
+ * the array bounds.
35
+ *
36
+ * See https://2ality.com/2019/08/remainder-vs-modulo.html.
37
+ *
38
+ * @param {number} n The number to mod.
39
+ * @param {number} divisor The divisor (e.g., the length of an array).
40
+ * @returns {number}
41
+ */
42
+ function modulo(n, divisor) {
43
+ const result = (n % divisor + divisor) % divisor;
44
+ // Never return -0.
45
+ return result === 0 ? 0 : result;
46
+ }
47
+
48
+ /**
49
+ * Convert number to engineering format, using SI suffix
50
+ * @param {Number|String} value - Number or Number-convertible String
51
+ * @param {Number} precision
52
+ * @return {String} number, possibly with a suffix
53
+ */
54
+ const engineeringNotation = function (value) {
55
+ let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
56
+ const invalidValues = [NaN, Infinity, -Infinity];
57
+ const num = Number(value);
58
+ if (invalidValues.includes(num) || invalidValues.includes(Number(precision))) {
59
+ return num.toString();
60
+ }
61
+ const allYourBase = {
62
+ '-24': 'y',
63
+ '-21': 'z',
64
+ '-18': 'a',
65
+ '-15': 'f',
66
+ '-12': 'p',
67
+ '-9': 'n',
68
+ '-6': 'μ',
69
+ '-3': 'm',
70
+ 0: '',
71
+ 3: 'k',
72
+ 6: 'M',
73
+ 9: 'G',
74
+ 12: 'T',
75
+ 15: 'P',
76
+ 18: 'E',
77
+ 21: 'Z',
78
+ 24: 'Y'
79
+ };
80
+ const exponentialNotation = num.toExponential(precision);
81
+ const power = exponentialNotation.split('e').map(Number)[1] || 0;
82
+ if (power < -24 || power > 24) {
83
+ return exponentialNotation;
84
+ }
85
+ const scaledPower = 3 * Math.floor(power / 3);
86
+ const scaledMantissa = (exponentialNotation / 10 ** scaledPower
87
+ // strip trailing decimals from floating point rounding errors
88
+ ).toFixed(precision)
89
+ // strip trailing 0s after a decimal point
90
+ .replace(/\.([1-9]*)0+$/, (_, fractionalDigits) => {
91
+ if (fractionalDigits) {
92
+ return `.${fractionalDigits}`;
93
+ }
94
+ return '';
95
+ });
96
+ return `${scaledMantissa}${allYourBase[scaledPower]}`;
97
+ };
98
+
99
+ /**
100
+ * Formats a number as a locale-based string using `Intl.NumberFormat`.
101
+ *
102
+ * 2333 -> 2,333
103
+ * 232324 -> 232,324
104
+ *
105
+ * @param {Number|string} value - number to be converted
106
+ * @param {{}?} options - options to be passed to
107
+ * `Intl.NumberFormat` such as `unit` and `style`.
108
+ * @param {String|String[]} locales - If set, forces a different
109
+ * language code from the one currently in the document.
110
+ *
111
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat
112
+ *
113
+ * @returns {String}
114
+ */
115
+ const formatNumberToLocale = function (value) {
116
+ let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
117
+ let locales = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
118
+ if (Number.isNaN(Number(value))) {
119
+ return value;
120
+ }
121
+ return new Intl.NumberFormat(locales, options).format(value);
122
+ };
123
+
124
+ // Converts a value (string, number, etc.) to a number
125
+ // Taken from bootstrap-vue
126
+ const toFloat = function (value) {
127
+ let defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : NaN;
128
+ const float = parseFloat(value);
129
+ return Number.isNaN(float) ? defaultValue : float;
130
+ };
131
+
132
+ export { addition, average, engineeringNotation, formatNumberToLocale, modulo, sum, toFloat };
@@ -0,0 +1,11 @@
1
+ import { userEvent } from '@storybook/test';
2
+
3
+ const triggerBlurEvent = async () => userEvent.pointer([{
4
+ keys: '[MouseLeft]',
5
+ coords: {
6
+ x: 0,
7
+ y: 0
8
+ }
9
+ }]);
10
+
11
+ export { triggerBlurEvent };
@@ -0,0 +1,25 @@
1
+ import { isObject } from 'lodash-es';
2
+
3
+ /**
4
+ * Purpose is a substitute of Vue.set but with preserving reactivity
5
+ * New object can be assigned to data property of aa component
6
+ * @param source
7
+ * @param key
8
+ * @param value
9
+ * @returns {*}
10
+ */
11
+ const setObjectProperty = function (source, key) {
12
+ let value = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
13
+ if (!source || !key || !isObject(source)) {
14
+ return {};
15
+ }
16
+ if (typeof key !== 'string') {
17
+ return source;
18
+ }
19
+ return {
20
+ ...source,
21
+ [key]: value
22
+ };
23
+ };
24
+
25
+ export { setObjectProperty };
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Arg types subcategories to be used to organize props within arg tables
3
+ */
4
+
5
+ const ARG_TYPE_SUBCATEGORY_LOOK_AND_FEEL = 'Look & feel';
6
+ const ARG_TYPE_SUBCATEGORY_STATE = 'State';
7
+ const ARG_TYPE_SUBCATEGORY_SEARCH = 'Search';
8
+ const ARG_TYPE_SUBCATEGORY_ACCESSIBILITY = 'Accessibility';
9
+ const ARG_TYPE_SUBCATEGORY_INFINITE_SCROLL = 'Infinite scroll';
10
+
11
+ /**
12
+ * These are used to test varying lengths of series names
13
+ */
14
+ const SERIES_NAME_SHORT = 'SERIES_NAME_SHORT';
15
+ const SERIES_NAME_LONG = 'SERIES_NAME_LONG';
16
+ const SERIES_NAME_LONG_WITHOUT_SPACES = 'SERIES_NAME_LONG_WITHOUT_SPACES';
17
+ const SERIES_NAME = {
18
+ [SERIES_NAME_SHORT]: 'Series ',
19
+ [SERIES_NAME_LONG]: 'Series name long. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed tincidunt interdum sapien ut blandit. Nulla fermentum nisi id euismod vulputate. END',
20
+ [SERIES_NAME_LONG_WITHOUT_SPACES]: 'Series_name_long._Lorem_ipsum_dolor_sit_amet,_consectetur_adipiscing_elit._Sed_tincidunt_interdum_sapien_ut_blandit._Nulla_fermentum_nisi_id_euismod_vulputate._END'
21
+ };
22
+
23
+ /**
24
+ * Reused constants for ListBox
25
+ */
26
+
27
+ const LISTBOX_CONTAINER_HEIGHT = '370px';
28
+
29
+ export { ARG_TYPE_SUBCATEGORY_ACCESSIBILITY, ARG_TYPE_SUBCATEGORY_INFINITE_SCROLL, ARG_TYPE_SUBCATEGORY_LOOK_AND_FEEL, ARG_TYPE_SUBCATEGORY_SEARCH, ARG_TYPE_SUBCATEGORY_STATE, LISTBOX_CONTAINER_HEIGHT, SERIES_NAME, SERIES_NAME_LONG, SERIES_NAME_LONG_WITHOUT_SPACES, SERIES_NAME_SHORT };
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Builds the parameters object disable one or multiple controls.
3
+ */
4
+ const disableControls = function () {
5
+ let controls = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
6
+ return Object.fromEntries(controls.map(control => [control, {
7
+ control: {
8
+ disable: true
9
+ }
10
+ }]));
11
+ };
12
+ const getA11yParameters = function () {
13
+ let {
14
+ skipRules = [],
15
+ temporarySkipRules = []
16
+ } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
17
+ const skippedRules = skipRules.concat(temporarySkipRules).map(id => ({
18
+ id,
19
+ enabled: false
20
+ }));
21
+ return {
22
+ config: {
23
+ rules: skippedRules
24
+ }
25
+ };
26
+ };
27
+
28
+ /**
29
+ * Returns a boolean indicating whether the given prop type includes the given type.
30
+ *
31
+ * Vue itself checks the string tag to avoid cross-realm false negatives, but
32
+ * that isn't necessary under Storybook.
33
+ *
34
+ * @param {(Array|Function)} propType The prop's defined type from a ComponentOptions.props[prop] object.
35
+ * @returns {boolean}
36
+ */
37
+ const isPropType = (propType, Type) => Array.isArray(propType) ? propType.includes(Type) : propType === Type;
38
+
39
+ /**
40
+ * Returns a function which returns the given prop's default value for the given component.
41
+ *
42
+ * If the default value is a function, it executes that function to return the
43
+ * true default value.
44
+ *
45
+ * @param {object} ComponentOptions A Vue ComponentOptions object.
46
+ */
47
+ const propDefaultFactory = ComponentOptions => prop => {
48
+ const {
49
+ type,
50
+ default: defaultValue
51
+ } = ComponentOptions.props[prop];
52
+ if (typeof defaultValue === 'function' && !isPropType(type, Function)) {
53
+ // Note: Vue 2 passes the instance to the `default` function via `this`,
54
+ // whereas Vue 3 passes the raw props to it as an argument. Here, we do
55
+ // neither, since we have access to neither. See
56
+ // https://v3-migration.vuejs.org/breaking-changes/props-default-this.html.
57
+ return defaultValue.call(undefined);
58
+ }
59
+ return defaultValue;
60
+ };
61
+
62
+ export { disableControls, getA11yParameters, propDefaultFactory };
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Return a story decorator function, which wraps the given story in a `div`
3
+ * element with the given `style` attributes.
4
+ *
5
+ * @param {object} style The style attribute to apply to the container.
6
+ * @return {function} The story decorator.
7
+ */
8
+ const makeContainer = function (style) {
9
+ let tag = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'div';
10
+ return Story => ({
11
+ render(h) {
12
+ return h(tag, {
13
+ style
14
+ }, [h(Story())]);
15
+ }
16
+ });
17
+ };
18
+
19
+ export { makeContainer };
@@ -0,0 +1,69 @@
1
+ import emojiRegexFactory from 'emoji-regex';
2
+
3
+ /**
4
+ * Split the given string after each occurrence of each of the given symbols.
5
+ *
6
+ * Symbols are strings, and can be of length one or more. Zero-length symbols
7
+ * are ignored.
8
+ *
9
+ * Unlike with `String::split`, the symbol is left in results, with
10
+ * the split occurring _after_ the symbol.
11
+ *
12
+ * For example:
13
+ *
14
+ * splitAfterSymbols(['/'], 'a/b/c') // ['a/', 'b/', 'c']
15
+ * splitAfterSymbols(['foo'], 'foobar') // ['foo', 'bar']
16
+ *
17
+ * @param {string[]} symbols The symbols to split the string by.
18
+ * @param {string} string The string to split.
19
+ * @returns {string[]} The resulting strings.
20
+ */
21
+ const splitAfterSymbols = (symbols, string) => {
22
+ const textParts = [];
23
+ let textPartStartIndex = 0;
24
+ if (string.length === 0) {
25
+ return [string];
26
+ }
27
+ for (let i = 0; i < string.length;) {
28
+ let symbolFound = false;
29
+ for (let j = 0; j < symbols.length; j += 1) {
30
+ const symbol = symbols[j];
31
+ if (!symbol) {
32
+ // eslint-disable-next-line no-continue
33
+ continue;
34
+ }
35
+ symbolFound = string.slice(i, i + symbol.length) === symbol;
36
+ if (symbolFound) {
37
+ const textPartEndIndex = i + symbol.length;
38
+ const textPart = string.slice(textPartStartIndex, textPartEndIndex);
39
+ textParts.push(textPart);
40
+ textPartStartIndex = textPartEndIndex;
41
+ i = textPartStartIndex;
42
+ break;
43
+ }
44
+ }
45
+ if (!symbolFound) {
46
+ i += 1;
47
+ }
48
+ }
49
+ const final = string.slice(textPartStartIndex);
50
+ if (final) {
51
+ textParts.push(final);
52
+ }
53
+ return textParts;
54
+ };
55
+ const startsWithEmojiRegex = `^(${emojiRegexFactory().source})`;
56
+ const getAvatarChar = name => {
57
+ if (name) {
58
+ // Check if string starts with an emoji (which could be multiple characters and zero-width joined)
59
+ const match = name.match(startsWithEmojiRegex);
60
+ if (match) {
61
+ // Return the first match
62
+ return match[0];
63
+ }
64
+ return name.charAt(0).toUpperCase();
65
+ }
66
+ return '';
67
+ };
68
+
69
+ export { getAvatarChar, splitAfterSymbols };
@@ -0,0 +1,7 @@
1
+ const scrollHandleSvgPath = 'path://M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zM6 4a1 1 0 0 0-1 1v6a1 1 0 0 0 2 0V5a1 1 0 0 0-1-1zm4 0a1 1 0 0 0-1 1v6a1 1 0 0 0 2 0V5a1 1 0 0 0-1-1z';
2
+ const marqueeSelectionSvgPath = 'path://M-6.251 -7L-7 -7L-7 -4.753A0.749 0.749 0 0 0 -5.502 -4.753L-5.502 -5.502L-4.753 -5.502A0.749 0.749 0 0 0 -4.753 -7L-6.251 -7ZM-6.251 -2.0067A0.749 0.749 0 0 1 -5.502 -1.2577L-5.502 1.239A0.749 0.749 0 1 1 -7 1.239L-7 -1.2577A0.749 0.749 0 0 1 -6.251 -2.0067ZM0.8455 0.8455L2.3505 4.3578L4.3578 2.3505L0.8455 0.8455ZM0.2883 -1.023L5.6251 1.264A0.9987 0.9987 0 0 1 5.9387 2.8888L4.943 3.8835L6.7616 5.703A0.749 0.749 0 1 1 5.703 6.7616L3.8835 4.943L2.8888 5.9387A0.9987 0.9987 0 0 1 1.264 5.6251L-1.023 0.2883C-1.3785 -0.5406 -0.5406 -1.3785 0.2883 -1.023ZM-6.251 6.9813L-7 6.9813L-7 4.7343A0.749 0.749 0 1 1 -5.502 4.7343L-5.502 5.4833L-4.753 5.4833A0.749 0.749 0 1 1 -4.753 6.9813L-6.251 6.9813ZM-2.0067 -6.251A0.749 0.749 0 0 1 -1.2577 -7L1.239 -7A0.749 0.749 0 1 1 1.239 -5.502L-1.2577 -5.502A0.749 0.749 0 0 1 -2.0067 -6.251ZM6.2323 -7L6.9813 -7L6.9813 -4.753A0.749 0.749 0 1 1 5.4833 -4.753L5.4833 -5.502L4.7343 -5.502A0.749 0.749 0 1 1 4.7343 -7L6.2323 -7Z';
3
+ const redoSvgPath = 'path://M1.8332 -6.7552A7.0001 7.0001 0 0 0 -5.6875 -4.082L-5.6875 -5.4689A0.6563 0.6563 0 0 0 -7 -5.4689L-7 -1.7501L-3.2812 -1.7501A0.6563 0.6563 0 0 0 -3.2812 -3.0626L-4.7923 -3.0626A5.6876 5.6876 0 1 1 -5.2526 2.1822A0.6563 0.6563 0 0 0 -6.4645 2.6853A7.0001 7.0001 0 1 0 1.8332 -6.7561Z';
4
+ const clearAllSvgPath = 'path://M-1.8332 -6.7552A7.0001 7.0001 0 0 1 5.6875 -4.082L5.6875 -5.4689A0.6563 0.6563 0 1 1 7 -5.4689L7 -1.7501L3.2812 -1.7501A0.6563 0.6563 0 1 1 3.2812 -3.0626L4.7923 -3.0626A5.6876 5.6876 0 1 0 5.2526 2.1822A0.6563 0.6563 0 1 1 6.4645 2.6853A7.0001 7.0001 0 1 1 -1.8332 -6.7561Z';
5
+ const downloadSvgPath = 'path://M3.78 -0.841A0.75 0.75 0 0 0 2.72 -0.841L0.75 1.129L0.75 -6.25A0.75 0.75 0 0 0 -0.75 -6.25L-0.75 1.129L-2.72 -0.841A0.75 0.75 0 0 0 -3.78 0.219L-0.53 3.469L0 4L0.53 3.47L3.78 0.22A0.75 0.75 0 0 0 3.78 -0.841ZM-5.5 1.75A0.75 0.75 0 0 0 -7 1.75L-7 5A2 2 0 0 0 -5 7L5 7A2 2 0 0 0 7 5L7 1.75A0.75 0.75 0 0 0 5.5 1.75L5.5 5A0.5 0.5 0 0 1 5 5.5L-5 5.5A0.5 0.5 0 0 1 -5.5 5L-5.5 1.75Z';
6
+
7
+ export { clearAllSvgPath, downloadSvgPath, marqueeSelectionSvgPath, redoSvgPath, scrollHandleSvgPath };
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Wrapper around setTimeout which executes immediately in visual tests
3
+ * in order to avoid flaky tests
4
+ */
5
+ function setStoryTimeout(fn, timeout) {
6
+ return setTimeout(fn, process.env.IS_VISUAL_TEST ? 0 : timeout);
7
+ }
8
+
9
+ // adopted this method from Bootstraps utils
10
+ // https://github.com/bootstrap-vue/bootstrap-vue/blob/2fd03f0b1d0cc41f9930078ba8b1c16b10e4ac2f/tests/utils.js#L6
11
+ const waitForAnimationFrame = () => new Promise(resolve => {
12
+ requestAnimationFrame(resolve);
13
+ });
14
+ const getResetAnimationsCSS = () => `
15
+ *, *::after, *::before {
16
+ -webkit-transition: none !important;
17
+ -moz-transition: none !important;
18
+ -ms-transition: none !important;
19
+ -o-transition: none !important;
20
+ transition: none !important;
21
+
22
+ -webkit-animation: none !important;
23
+ -moz-animation: none !important;
24
+ -ms-animation: none !important;
25
+ -o-animation: none !important;
26
+ animation: none !important;
27
+ }
28
+
29
+ input, textarea {
30
+ caret-color: transparent !important;
31
+ }`;
32
+
33
+ export { getResetAnimationsCSS, setStoryTimeout, waitForAnimationFrame };
@@ -0,0 +1,56 @@
1
+ const RX_ENCODE_REVERSE = /[!'()*]/g;
2
+ const RX_ENCODED_COMMA = /%2C/g;
3
+ const encodeReserveReplacer = c => `%${c.charCodeAt(0).toString(16)}`;
4
+ const encode = str => encodeURIComponent(String(str)).replace(RX_ENCODE_REVERSE, encodeReserveReplacer).replace(RX_ENCODED_COMMA, ',');
5
+
6
+ /**
7
+ * Converts a query parameter object into a URL query string prefixed with `?`.
8
+ *
9
+ * Uses RFC 3986-compliant encoding which additionally escapes `[!'()*]` and preserves commas,
10
+ * unlike `URLSearchParams` which cannot represent key-only params (`?foo`) or skip `undefined` values.
11
+ *
12
+ * - `undefined` values are omitted entirely.
13
+ * - `null` values produce key-only entries (e.g., `?foo`).
14
+ * - Array values repeat the key for each element (e.g., `?bar=a&bar=b`).
15
+ *
16
+ * @param {Object<string, string | number | null | undefined | Array<string | number | null | undefined>>} obj
17
+ * An object whose keys are query parameter names and values are parameter values.
18
+ * @returns {string} A query string prefixed with `?`, or an empty string if the input
19
+ * is not a plain object or produces no parameters.
20
+ *
21
+ * @example
22
+ * buildQueryString({ page: 1, search: 'hello world' })
23
+ * // => '?page=1&search=hello%20world'
24
+ *
25
+ * @example
26
+ * buildQueryString({ foo: null, bar: undefined })
27
+ * // => '?foo'
28
+ */
29
+ const buildQueryString = obj => {
30
+ if (obj === null || typeof obj !== 'object' || Array.isArray(obj)) {
31
+ return '';
32
+ }
33
+ const query = Object.keys(obj).map(key => {
34
+ const value = obj[key];
35
+ if (value === undefined) {
36
+ return '';
37
+ }
38
+ if (value === null) {
39
+ return encode(key);
40
+ }
41
+ if (Array.isArray(value)) {
42
+ return value.reduce((results, item) => {
43
+ if (item === null) {
44
+ results.push(encode(key));
45
+ } else if (item !== undefined) {
46
+ results.push(`${encode(key)}=${encode(item)}`);
47
+ }
48
+ return results;
49
+ }, []).join('&');
50
+ }
51
+ return `${encode(key)}=${encode(value)}`;
52
+ }).filter(x => x.length > 0).join('&');
53
+ return query ? `?${query}` : '';
54
+ };
55
+
56
+ export { buildQueryString };
@@ -0,0 +1,29 @@
1
+ import MockDate from 'mockdate';
2
+
3
+ /**
4
+ * When applied to a story, this mixin mocks the current date to make
5
+ * visual tests that rely on the date deterministic
6
+ *
7
+ * Usage:
8
+ *
9
+ * import { useFakeDate } from '../../../../tests/utils/use_fake_date';
10
+ * documentedStoriesOf('some|story')
11
+ * .add('default', () => ({
12
+ * mixins: [useFakeDate()],
13
+ * })
14
+ */
15
+ const useFakeDate = () => {
16
+ if (process.env.IS_VISUAL_TEST) {
17
+ return {
18
+ created() {
19
+ MockDate.set('2026-01-10', 0);
20
+ },
21
+ destroyed() {
22
+ MockDate.reset();
23
+ }
24
+ };
25
+ }
26
+ return {};
27
+ };
28
+
29
+ export { useFakeDate };
@@ -0,0 +1,105 @@
1
+ import { isMatch } from 'lodash-es';
2
+
3
+ /* global jest, beforeEach, afterEach */
4
+ /* eslint-disable class-methods-use-this, max-classes-per-file */
5
+
6
+ /**
7
+ * This class gives us a JSDom friendly DOM observer which we can manually trigger in tests
8
+ *
9
+ * Use this in place of MutationObserver or IntersectionObserver
10
+ *
11
+ * This class is largely influenced from [a test helper][1] in the main GitLab project
12
+ *
13
+ * [1]: https://gitlab.com/gitlab-org/gitlab/blob/a123813c63147392b95cd03c4744ae9db0575b0f/spec/frontend/helpers/mock_dom_observer.js#L95
14
+ */
15
+ class MockObserver {
16
+ constructor(cb) {
17
+ this.$_cb = cb;
18
+ this.$_observers = [];
19
+ }
20
+ observe(node) {
21
+ let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
22
+ this.$_observers.push([node, options]);
23
+ }
24
+ disconnect() {
25
+ this.$_observers = [];
26
+ }
27
+ takeRecords() {}
28
+ $_triggerObserve(nodeParam) {
29
+ let {
30
+ entry = {},
31
+ options = {}
32
+ } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
33
+ const nodes = this.$_getNodesFromParam(nodeParam);
34
+ nodes.forEach(node => {
35
+ if (this.$_hasObserver(node, options)) {
36
+ this.$_cb([{
37
+ target: node,
38
+ ...entry
39
+ }]);
40
+ }
41
+ });
42
+ }
43
+ $_hasObserver(node) {
44
+ let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
45
+ return this.$_observers.some(_ref => {
46
+ let [obvNode, obvOptions] = _ref;
47
+ return node === obvNode && isMatch(options, obvOptions);
48
+ });
49
+ }
50
+ $_getNodesFromParam(nodeParam) {
51
+ if (!nodeParam) {
52
+ return this.$_observers.map(_ref2 => {
53
+ let [node] = _ref2;
54
+ return node;
55
+ });
56
+ }
57
+ if (!Array.isArray(nodeParam)) {
58
+ return [nodeParam];
59
+ }
60
+ return nodeParam;
61
+ }
62
+ }
63
+ class MockIntersectionObserver extends MockObserver {
64
+ unobserve(node) {
65
+ this.$_observers = this.$_observers.filter(_ref3 => {
66
+ let [obvNode] = _ref3;
67
+ return node !== obvNode;
68
+ });
69
+ }
70
+ }
71
+ const useMockIntersectionObserver = () => {
72
+ let instances;
73
+ let origObserver;
74
+ beforeEach(() => {
75
+ instances = [];
76
+ origObserver = global.IntersectionObserver;
77
+ global.IntersectionObserver = jest.fn().mockImplementation(function () {
78
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
79
+ args[_key] = arguments[_key];
80
+ }
81
+ const mockObserver = new MockIntersectionObserver(...args);
82
+ instances.push(mockObserver);
83
+ return mockObserver;
84
+ });
85
+ });
86
+ afterEach(() => {
87
+ instances = [];
88
+ global.IntersectionObserver = origObserver;
89
+ });
90
+ const trigger = function (observer) {
91
+ for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
92
+ args[_key2 - 1] = arguments[_key2];
93
+ }
94
+ observer.$_triggerObserve(...args);
95
+ };
96
+ const getInstances = () => {
97
+ return instances;
98
+ };
99
+ return {
100
+ getInstances,
101
+ trigger
102
+ };
103
+ };
104
+
105
+ export { useMockIntersectionObserver };