@gitlab/ui 72.11.0 → 72.12.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.
- package/CHANGELOG.md +14 -0
- package/dist/tokens/css/tokens.css +1 -1
- package/dist/tokens/css/tokens.dark.css +1 -1
- package/dist/tokens/js/tokens.dark.js +1 -1
- package/dist/tokens/js/tokens.js +1 -1
- package/dist/tokens/scss/_tokens.dark.scss +1 -1
- package/dist/tokens/scss/_tokens.scss +1 -1
- package/package.json +1 -1
- package/src/directives/safe_html/safe_html.js +5 -0
- package/src/directives/safe_html/safe_html.spec.js +17 -0
- package/src/internal/color_contrast/color_contrast.md +8 -0
- package/src/internal/color_contrast/color_contrast.spec.js +34 -0
- package/src/internal/color_contrast/color_contrast.stories.js +41 -0
- package/src/internal/color_contrast/color_contrast.vue +52 -0
- package/src/tokens/color.dark.tokens.stories.js +36 -22
- package/src/tokens/color.data_viz.dark.tokens.stories.js +13 -30
- package/src/tokens/color.data_viz.tokens.stories.js +13 -30
- package/src/tokens/color.theme.dark.tokens.stories.js +15 -30
- package/src/tokens/color.theme.tokens.stories.js +15 -30
- package/src/tokens/color.tokens.stories.js +36 -22
- package/src/tokens/color.transparency.tokens.stories.js +9 -12
- package/src/tokens/common_story_options.js +22 -80
- package/src/utils/constants.js +25 -0
- package/src/utils/utils.js +21 -1
- package/dist/charts.js +0 -14
- package/dist/components/base/accordion/accordion.js +0 -73
- package/dist/components/base/accordion/accordion_item.js +0 -133
- package/dist/components/base/alert/alert.js +0 -222
- package/dist/components/base/avatar/avatar.js +0 -160
- package/dist/components/base/avatar_labeled/avatar_labeled.js +0 -107
- package/dist/components/base/avatar_link/avatar_link.js +0 -47
- package/dist/components/base/avatars_inline/avatars_inline.js +0 -119
- package/dist/components/base/badge/badge.js +0 -105
- package/dist/components/base/banner/banner.js +0 -139
- package/dist/components/base/breadcrumb/breadcrumb.js +0 -122
- package/dist/components/base/breadcrumb/breadcrumb_item.js +0 -73
- package/dist/components/base/broadcast_message/broadcast_message.js +0 -112
- package/dist/components/base/broadcast_message/constants.js +0 -5
- package/dist/components/base/button/button.js +0 -151
- package/dist/components/base/button_group/button_group.js +0 -47
- package/dist/components/base/card/card.js +0 -71
- package/dist/components/base/carousel/carousel.js +0 -48
- package/dist/components/base/carousel/carousel_slide.js +0 -47
- package/dist/components/base/collapse/collapse.js +0 -59
- package/dist/components/base/datepicker/datepicker.js +0 -386
- package/dist/components/base/daterange_picker/daterange_picker.js +0 -288
- package/dist/components/base/drawer/drawer.js +0 -127
- package/dist/components/base/dropdown/dropdown.js +0 -261
- package/dist/components/base/dropdown/dropdown_divider.js +0 -48
- package/dist/components/base/dropdown/dropdown_form.js +0 -48
- package/dist/components/base/dropdown/dropdown_item.js +0 -131
- package/dist/components/base/dropdown/dropdown_section_header.js +0 -48
- package/dist/components/base/dropdown/dropdown_text.js +0 -48
- package/dist/components/base/filtered_search/common_story_options.js +0 -14
- package/dist/components/base/filtered_search/filtered_search.js +0 -388
- package/dist/components/base/filtered_search/filtered_search_suggestion.js +0 -89
- package/dist/components/base/filtered_search/filtered_search_suggestion_list.js +0 -138
- package/dist/components/base/filtered_search/filtered_search_term.js +0 -203
- package/dist/components/base/filtered_search/filtered_search_token.js +0 -384
- package/dist/components/base/filtered_search/filtered_search_token_segment.js +0 -420
- package/dist/components/base/filtered_search/filtered_search_utils.js +0 -242
- package/dist/components/base/form/form.js +0 -49
- package/dist/components/base/form/form_checkbox/form_checkbox.js +0 -78
- package/dist/components/base/form/form_checkbox/form_checkbox_group.js +0 -60
- package/dist/components/base/form/form_checkbox_tree/checkbox_tree_node.js +0 -79
- package/dist/components/base/form/form_checkbox_tree/form_checkbox_tree.js +0 -138
- package/dist/components/base/form/form_checkbox_tree/models/constants.js +0 -12
- package/dist/components/base/form/form_checkbox_tree/models/node.js +0 -51
- package/dist/components/base/form/form_checkbox_tree/models/tree.js +0 -199
- package/dist/components/base/form/form_combobox/constants.js +0 -55
- package/dist/components/base/form/form_combobox/form_combobox.js +0 -230
- package/dist/components/base/form/form_date/form_date.js +0 -143
- package/dist/components/base/form/form_fields/form_field_validator.js +0 -93
- package/dist/components/base/form/form_fields/form_fields.js +0 -214
- package/dist/components/base/form/form_fields/mappers.js +0 -13
- package/dist/components/base/form/form_fields/validators.js +0 -48
- package/dist/components/base/form/form_group/form_group.js +0 -97
- package/dist/components/base/form/form_input/form_input.js +0 -121
- package/dist/components/base/form/form_input_group/form_input_group.js +0 -108
- package/dist/components/base/form/form_input_group/form_input_group_mixin.js +0 -41
- package/dist/components/base/form/form_radio/form_radio.js +0 -65
- package/dist/components/base/form/form_radio_group/form_radio_group.js +0 -78
- package/dist/components/base/form/form_select/constants.js +0 -12
- package/dist/components/base/form/form_select/form_select.js +0 -82
- package/dist/components/base/form/form_text/form_text.js +0 -38
- package/dist/components/base/form/form_textarea/form_textarea.js +0 -112
- package/dist/components/base/form/input_group_text/input_group_text.js +0 -48
- package/dist/components/base/icon/icon.js +0 -111
- package/dist/components/base/infinite_scroll/infinite_scroll.js +0 -197
- package/dist/components/base/keyset_pagination/keyset_pagination.js +0 -151
- package/dist/components/base/label/label.js +0 -163
- package/dist/components/base/link/link.js +0 -50
- package/dist/components/base/loading_icon/loading_icon.js +0 -111
- package/dist/components/base/markdown/markdown.js +0 -52
- package/dist/components/base/modal/modal.js +0 -204
- package/dist/components/base/nav/nav.js +0 -48
- package/dist/components/base/nav/nav_item.js +0 -48
- package/dist/components/base/nav/nav_item_dropdown.js +0 -62
- package/dist/components/base/navbar/navbar.js +0 -48
- package/dist/components/base/new_dropdowns/base_dropdown/base_dropdown.js +0 -453
- package/dist/components/base/new_dropdowns/base_dropdown/constants.js +0 -4
- package/dist/components/base/new_dropdowns/constants.js +0 -21
- package/dist/components/base/new_dropdowns/disclosure/constants.js +0 -8
- package/dist/components/base/new_dropdowns/disclosure/disclosure_dropdown.js +0 -370
- package/dist/components/base/new_dropdowns/disclosure/disclosure_dropdown_group.js +0 -110
- package/dist/components/base/new_dropdowns/disclosure/disclosure_dropdown_item.js +0 -143
- package/dist/components/base/new_dropdowns/disclosure/mock_data.js +0 -147
- package/dist/components/base/new_dropdowns/disclosure/utils.js +0 -39
- package/dist/components/base/new_dropdowns/listbox/listbox.js +0 -767
- package/dist/components/base/new_dropdowns/listbox/listbox_group.js +0 -58
- package/dist/components/base/new_dropdowns/listbox/listbox_item.js +0 -91
- package/dist/components/base/new_dropdowns/listbox/listbox_search_input.js +0 -93
- package/dist/components/base/new_dropdowns/listbox/mock_data.js +0 -118
- package/dist/components/base/new_dropdowns/listbox/utils.js +0 -34
- package/dist/components/base/paginated_list/paginated_list.js +0 -180
- package/dist/components/base/pagination/pagination.js +0 -399
- package/dist/components/base/path/data.js +0 -34
- package/dist/components/base/path/path.js +0 -189
- package/dist/components/base/popover/popover.js +0 -110
- package/dist/components/base/progress_bar/progress_bar.js +0 -48
- package/dist/components/base/search_box_by_click/search_box_by_click.js +0 -235
- package/dist/components/base/search_box_by_type/search_box_by_type.js +0 -167
- package/dist/components/base/segmented_control/segmented_control.js +0 -109
- package/dist/components/base/skeleton_loader/skeleton_loader.js +0 -224
- package/dist/components/base/sorting/sorting.js +0 -171
- package/dist/components/base/sorting/sorting_item.js +0 -109
- package/dist/components/base/table/constants.js +0 -5
- package/dist/components/base/table/table.js +0 -89
- package/dist/components/base/table_lite/table_lite.js +0 -72
- package/dist/components/base/tabs/constants.js +0 -3
- package/dist/components/base/tabs/tab/tab.js +0 -83
- package/dist/components/base/tabs/tabs/scrollable_tabs.js +0 -143
- package/dist/components/base/tabs/tabs/tabs.js +0 -224
- package/dist/components/base/toast/toast.js +0 -82
- package/dist/components/base/toggle/toggle.js +0 -180
- package/dist/components/base/token/token.js +0 -85
- package/dist/components/base/token_selector/helpers.js +0 -5
- package/dist/components/base/token_selector/token_container.js +0 -165
- package/dist/components/base/token_selector/token_selector.js +0 -403
- package/dist/components/base/token_selector/token_selector_dropdown.js +0 -199
- package/dist/components/base/tooltip/tooltip.js +0 -55
- package/dist/components/charts/area/area.js +0 -311
- package/dist/components/charts/bar/bar.js +0 -253
- package/dist/components/charts/chart/chart.js +0 -215
- package/dist/components/charts/column/column.js +0 -226
- package/dist/components/charts/discrete_scatter/discrete_scatter.js +0 -203
- package/dist/components/charts/gauge/gauge.js +0 -208
- package/dist/components/charts/heatmap/heatmap.js +0 -295
- package/dist/components/charts/heatmap/index.js +0 -2
- package/dist/components/charts/legend/legend.js +0 -228
- package/dist/components/charts/line/line.js +0 -308
- package/dist/components/charts/series_label/series_label.js +0 -100
- package/dist/components/charts/single_stat/single_stat.js +0 -152
- package/dist/components/charts/sparkline/sparkline.js +0 -261
- package/dist/components/charts/stacked_column/stacked_column.js +0 -335
- package/dist/components/charts/tooltip/tooltip.js +0 -251
- package/dist/components/experimental/duo/chat/components/duo_chat_conversation/duo_chat_conversation.js +0 -83
- package/dist/components/experimental/duo/chat/components/duo_chat_loader/duo_chat_loader.js +0 -100
- package/dist/components/experimental/duo/chat/components/duo_chat_message/copy_code_element.js +0 -35
- package/dist/components/experimental/duo/chat/components/duo_chat_message/duo_chat_message.js +0 -115
- package/dist/components/experimental/duo/chat/components/duo_chat_message_sources/duo_chat_message_sources.js +0 -104
- package/dist/components/experimental/duo/chat/components/duo_chat_predefined_prompts/duo_chat_predefined_prompts.js +0 -64
- package/dist/components/experimental/duo/chat/constants.js +0 -23
- package/dist/components/experimental/duo/chat/duo_chat.js +0 -359
- package/dist/components/experimental/duo/chat/mock_data.js +0 -83
- package/dist/components/experimental/duo/user_feedback/user_feedback.js +0 -94
- package/dist/components/experimental/duo/user_feedback/user_feedback_modal.js +0 -124
- package/dist/components/experimental/experiment_badge/constants.js +0 -4
- package/dist/components/experimental/experiment_badge/experiment_badge.js +0 -107
- package/dist/components/mixins/button_mixin.js +0 -11
- package/dist/components/mixins/safe_link_mixin.js +0 -30
- package/dist/components/mixins/tooltip_mixin.js +0 -21
- package/dist/components/regions/dashboard_skeleton/dashboard_skeleton.js +0 -53
- package/dist/components/regions/empty_state/empty_state.js +0 -154
- package/dist/components/shared_components/charts/tooltip_default_format.js +0 -53
- package/dist/components/shared_components/clear_icon_button/clear_icon_button.js +0 -64
- package/dist/components/shared_components/close_button/close_button.js +0 -54
- package/dist/components/utilities/animated_number/animated_number.js +0 -131
- package/dist/components/utilities/friendly_wrap/friendly_wrap.js +0 -75
- package/dist/components/utilities/intersection_observer/intersection_observer.js +0 -88
- package/dist/components/utilities/intersperse/intersperse.js +0 -86
- package/dist/components/utilities/sprintf/sprintf.js +0 -172
- package/dist/components/utilities/truncate/constants.js +0 -7
- package/dist/components/utilities/truncate/truncate.js +0 -111
- package/dist/components/utilities/truncate_text/constants.js +0 -7
- package/dist/components/utilities/truncate_text/truncate_text.js +0 -146
- package/dist/config.js +0 -86
- package/dist/directives/collapse_toggle.js +0 -1
- package/dist/directives/hover_load/hover_load.js +0 -45
- package/dist/directives/modal.js +0 -1
- package/dist/directives/outside/get_event_like_time_stamp.js +0 -33
- package/dist/directives/outside/outside.js +0 -106
- package/dist/directives/resize_observer/resize_observer.js +0 -51
- package/dist/directives/safe_html/constants.js +0 -6
- package/dist/directives/safe_html/safe_html.js +0 -35
- package/dist/directives/safe_link/mock_data.js +0 -10
- package/dist/directives/safe_link/safe_link.js +0 -65
- package/dist/directives/tooltip.js +0 -1
- package/dist/index.css +0 -7
- package/dist/index.css.map +0 -1
- package/dist/index.js +0 -105
- package/dist/tokens/common_story_options.js +0 -109
- package/dist/utils/breakpoints.js +0 -20
- package/dist/utils/charts/config.js +0 -556
- package/dist/utils/charts/constants.js +0 -63
- package/dist/utils/charts/mock_data.js +0 -211
- package/dist/utils/charts/story_config.js +0 -42
- package/dist/utils/charts/theme.js +0 -192
- package/dist/utils/charts/utils.js +0 -54
- package/dist/utils/constants.js +0 -270
- package/dist/utils/data_utils.js +0 -21
- package/dist/utils/datetime_utility.js +0 -61
- package/dist/utils/i18n.js +0 -15
- package/dist/utils/is_slot_empty.js +0 -38
- package/dist/utils/number_utils.js +0 -124
- package/dist/utils/stories_constants.js +0 -29
- package/dist/utils/stories_utils.js +0 -13
- package/dist/utils/story_decorators/container.js +0 -16
- package/dist/utils/string_utils.js +0 -69
- package/dist/utils/svgs/svg_paths.js +0 -7
- package/dist/utils/test_utils.js +0 -33
- package/dist/utils/use_fake_date.js +0 -29
- package/dist/utils/use_mock_intersection_observer.js +0 -108
- package/dist/utils/utils.js +0 -177
- package/dist/utils.js +0 -5
package/dist/utils/test_utils.js
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
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 };
|
|
@@ -1,29 +0,0 @@
|
|
|
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('2020-01-10', 0);
|
|
20
|
-
},
|
|
21
|
-
destroyed() {
|
|
22
|
-
MockDate.reset();
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
return {};
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
export { useFakeDate };
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import isMatch from 'lodash/isMatch';
|
|
2
|
-
|
|
3
|
-
/* global jest, beforeEach, afterEach */
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* This class gives us a JSDom friendly DOM observer which we can manually trigger in tests
|
|
7
|
-
*
|
|
8
|
-
* Use this in place of MutationObserver or IntersectionObserver
|
|
9
|
-
*
|
|
10
|
-
* This class is largely influenced from [a test helper][1] in the main GitLab project
|
|
11
|
-
*
|
|
12
|
-
* [1]: https://gitlab.com/gitlab-org/gitlab/blob/a123813c63147392b95cd03c4744ae9db0575b0f/spec/frontend/helpers/mock_dom_observer.js#L95
|
|
13
|
-
*/
|
|
14
|
-
class MockObserver {
|
|
15
|
-
constructor(cb) {
|
|
16
|
-
this.$_cb = cb;
|
|
17
|
-
this.$_observers = [];
|
|
18
|
-
}
|
|
19
|
-
observe(node) {
|
|
20
|
-
let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
21
|
-
this.$_observers.push([node, options]);
|
|
22
|
-
}
|
|
23
|
-
disconnect() {
|
|
24
|
-
this.$_observers = [];
|
|
25
|
-
}
|
|
26
|
-
takeRecords() {}
|
|
27
|
-
|
|
28
|
-
// eslint-disable-next-line camelcase
|
|
29
|
-
$_triggerObserve(nodeParam) {
|
|
30
|
-
let {
|
|
31
|
-
entry = {},
|
|
32
|
-
options = {}
|
|
33
|
-
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
34
|
-
const nodes = this.$_getNodesFromParam(nodeParam);
|
|
35
|
-
nodes.forEach(node => {
|
|
36
|
-
if (this.$_hasObserver(node, options)) {
|
|
37
|
-
this.$_cb([{
|
|
38
|
-
target: node,
|
|
39
|
-
...entry
|
|
40
|
-
}]);
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
// eslint-disable-next-line camelcase
|
|
46
|
-
$_hasObserver(node) {
|
|
47
|
-
let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
48
|
-
return this.$_observers.some(_ref => {
|
|
49
|
-
let [obvNode, obvOptions] = _ref;
|
|
50
|
-
return node === obvNode && isMatch(options, obvOptions);
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
$_getNodesFromParam(nodeParam) {
|
|
54
|
-
if (!nodeParam) {
|
|
55
|
-
return this.$_observers.map(_ref2 => {
|
|
56
|
-
let [node] = _ref2;
|
|
57
|
-
return node;
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
if (!Array.isArray(nodeParam)) {
|
|
61
|
-
return [nodeParam];
|
|
62
|
-
}
|
|
63
|
-
return nodeParam;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
class MockIntersectionObserver extends MockObserver {
|
|
67
|
-
unobserve(node) {
|
|
68
|
-
this.$_observers = this.$_observers.filter(_ref3 => {
|
|
69
|
-
let [obvNode] = _ref3;
|
|
70
|
-
return node !== obvNode;
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
const useMockIntersectionObserver = () => {
|
|
75
|
-
let instances;
|
|
76
|
-
let origObserver;
|
|
77
|
-
beforeEach(() => {
|
|
78
|
-
instances = [];
|
|
79
|
-
origObserver = global.IntersectionObserver;
|
|
80
|
-
global.IntersectionObserver = jest.fn().mockImplementation(function () {
|
|
81
|
-
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
82
|
-
args[_key] = arguments[_key];
|
|
83
|
-
}
|
|
84
|
-
const mockObserver = new MockIntersectionObserver(...args);
|
|
85
|
-
instances.push(mockObserver);
|
|
86
|
-
return mockObserver;
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
afterEach(() => {
|
|
90
|
-
instances = [];
|
|
91
|
-
global.IntersectionObserver = origObserver;
|
|
92
|
-
});
|
|
93
|
-
const trigger = function (observer) {
|
|
94
|
-
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
|
|
95
|
-
args[_key2 - 1] = arguments[_key2];
|
|
96
|
-
}
|
|
97
|
-
observer.$_triggerObserve(...args);
|
|
98
|
-
};
|
|
99
|
-
const getInstances = () => {
|
|
100
|
-
return instances;
|
|
101
|
-
};
|
|
102
|
-
return {
|
|
103
|
-
getInstances,
|
|
104
|
-
trigger
|
|
105
|
-
};
|
|
106
|
-
};
|
|
107
|
-
|
|
108
|
-
export { useMockIntersectionObserver };
|
package/dist/utils/utils.js
DELETED
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
import { isVisible } from 'bootstrap-vue/esm/utils/dom';
|
|
2
|
-
import { COMMA, labelColorOptions, focusableTags } from './constants';
|
|
3
|
-
|
|
4
|
-
function debounceByAnimationFrame(fn) {
|
|
5
|
-
let requestId;
|
|
6
|
-
return function debounced() {
|
|
7
|
-
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
8
|
-
args[_key] = arguments[_key];
|
|
9
|
-
}
|
|
10
|
-
if (requestId) {
|
|
11
|
-
window.cancelAnimationFrame(requestId);
|
|
12
|
-
}
|
|
13
|
-
requestId = window.requestAnimationFrame(() => fn.apply(this, args));
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
function throttle(fn) {
|
|
17
|
-
let frameId = null;
|
|
18
|
-
return function () {
|
|
19
|
-
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
20
|
-
args[_key2] = arguments[_key2];
|
|
21
|
-
}
|
|
22
|
-
if (frameId) {
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
frameId = window.requestAnimationFrame(() => {
|
|
26
|
-
fn(...args);
|
|
27
|
-
frameId = null;
|
|
28
|
-
});
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
function rgbFromHex(hex) {
|
|
32
|
-
const cleanHex = hex.replace('#', '');
|
|
33
|
-
const rgb = cleanHex.length === 3 ? cleanHex.split('').map(val => val + val) : cleanHex.match(/[\da-f]{2}/gi);
|
|
34
|
-
const [r, g, b] = rgb.map(val => parseInt(val, 16));
|
|
35
|
-
return [r, g, b];
|
|
36
|
-
}
|
|
37
|
-
function rgbFromString(color, sub) {
|
|
38
|
-
const rgb = color.substring(sub, color.length - 1).split(COMMA);
|
|
39
|
-
const [r, g, b] = rgb.map(i => parseInt(i, 10));
|
|
40
|
-
return [r, g, b];
|
|
41
|
-
}
|
|
42
|
-
function hexToRgba(hex) {
|
|
43
|
-
let opacity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
44
|
-
const [r, g, b] = rgbFromHex(hex);
|
|
45
|
-
return `rgba(${r}, ${g}, ${b}, ${opacity})`;
|
|
46
|
-
}
|
|
47
|
-
function toSrgb(value) {
|
|
48
|
-
const normalized = value / 255;
|
|
49
|
-
return normalized <= 0.03928 ? normalized / 12.92 : ((normalized + 0.055) / 1.055) ** 2.4;
|
|
50
|
-
}
|
|
51
|
-
function relativeLuminance(rgb) {
|
|
52
|
-
// WCAG 2.1 formula: https://www.w3.org/TR/WCAG21/#dfn-relative-luminance
|
|
53
|
-
// -
|
|
54
|
-
// WCAG 3.0 will use APAC
|
|
55
|
-
// Using APAC would be the ultimate goal, but was dismissed by engineering as of now
|
|
56
|
-
// See https://gitlab.com/gitlab-org/gitlab-ui/-/merge_requests/3418#note_1370107090
|
|
57
|
-
return 0.2126 * toSrgb(rgb[0]) + 0.7152 * toSrgb(rgb[1]) + 0.0722 * toSrgb(rgb[2]);
|
|
58
|
-
}
|
|
59
|
-
function colorFromBackground(backgroundColor) {
|
|
60
|
-
let contrastRatio = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2.4;
|
|
61
|
-
let color;
|
|
62
|
-
const lightColor = rgbFromHex('#FFFFFF');
|
|
63
|
-
const darkColor = rgbFromHex('#1f1e24');
|
|
64
|
-
if (backgroundColor.startsWith('#')) {
|
|
65
|
-
color = rgbFromHex(backgroundColor);
|
|
66
|
-
} else if (backgroundColor.startsWith('rgba(')) {
|
|
67
|
-
color = rgbFromString(backgroundColor, 5);
|
|
68
|
-
} else if (backgroundColor.startsWith('rgb(')) {
|
|
69
|
-
color = rgbFromString(backgroundColor, 4);
|
|
70
|
-
}
|
|
71
|
-
const luminance = relativeLuminance(color);
|
|
72
|
-
const lightLuminance = relativeLuminance(lightColor);
|
|
73
|
-
const darkLuminance = relativeLuminance(darkColor);
|
|
74
|
-
const contrastLight = (lightLuminance + 0.05) / (luminance + 0.05);
|
|
75
|
-
const contrastDark = (luminance + 0.05) / (darkLuminance + 0.05);
|
|
76
|
-
|
|
77
|
-
// Using a default threshold contrast of 2.4 instead of 3
|
|
78
|
-
// as this will solve weird color combinations in the mid tones
|
|
79
|
-
return contrastLight >= contrastRatio || contrastLight > contrastDark ? labelColorOptions.light : labelColorOptions.dark;
|
|
80
|
-
}
|
|
81
|
-
function uid() {
|
|
82
|
-
return Math.random().toString(36).substring(2);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Receives an element and validates that it can be focused
|
|
87
|
-
* @param { HTMLElement } The element we want to validate
|
|
88
|
-
* @return { boolean } Is the element focusable
|
|
89
|
-
*/
|
|
90
|
-
|
|
91
|
-
function isElementFocusable(elt) {
|
|
92
|
-
if (!elt) return false;
|
|
93
|
-
const {
|
|
94
|
-
tagName
|
|
95
|
-
} = elt;
|
|
96
|
-
const isValidTag = focusableTags.includes(tagName);
|
|
97
|
-
const hasValidType = elt.getAttribute('type') !== 'hidden';
|
|
98
|
-
const isDisabled = elt.getAttribute('disabled') === '' || elt.getAttribute('disabled');
|
|
99
|
-
const hasValidZIndex = elt.getAttribute('z-index') !== '-1';
|
|
100
|
-
const isInvalidAnchorTag = tagName === 'A' && !elt.getAttribute('href');
|
|
101
|
-
return isValidTag && hasValidType && !isDisabled && hasValidZIndex && !isInvalidAnchorTag;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* Receives an element and validates that it is reachable via sequential keyboard navigation
|
|
106
|
-
* @param { HTMLElement } The element to validate
|
|
107
|
-
* @return { boolean } Is the element focusable in a sequential tab order
|
|
108
|
-
*/
|
|
109
|
-
|
|
110
|
-
function isElementTabbable(el) {
|
|
111
|
-
if (!el) return false;
|
|
112
|
-
const tabindex = parseInt(el.getAttribute('tabindex'), 10);
|
|
113
|
-
return tabindex > -1;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Receives an array of HTML elements and focus the first one possible
|
|
118
|
-
* @param { Array.<HTMLElement> } An array of element to potentially focus
|
|
119
|
-
* @return { undefined }
|
|
120
|
-
*/
|
|
121
|
-
|
|
122
|
-
function focusFirstFocusableElement(elts) {
|
|
123
|
-
const focusableElt = elts.find(el => isElementFocusable(el));
|
|
124
|
-
if (focusableElt) focusableElt.focus();
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Returns true if the current environment is considered a development environment (it's not
|
|
129
|
-
* production or test).
|
|
130
|
-
*
|
|
131
|
-
* @returns {boolean}
|
|
132
|
-
*/
|
|
133
|
-
function isDev() {
|
|
134
|
-
return !['test', 'production'].includes(process.env.NODE_ENV);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* Prints a warning message to the console in non-test and non-production environments.
|
|
139
|
-
* @param {string} message message to print to the console
|
|
140
|
-
* @param {HTMLElement} element component that triggered the warning
|
|
141
|
-
*/
|
|
142
|
-
function logWarning() {
|
|
143
|
-
let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
144
|
-
let element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
145
|
-
if (message.length && isDev()) {
|
|
146
|
-
console.warn(message, element); // eslint-disable-line no-console
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Stop default event handling and propagation
|
|
152
|
-
*/
|
|
153
|
-
function stopEvent(event) {
|
|
154
|
-
let {
|
|
155
|
-
preventDefault = true,
|
|
156
|
-
stopPropagation = true,
|
|
157
|
-
stopImmediatePropagation = false
|
|
158
|
-
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
159
|
-
if (preventDefault) {
|
|
160
|
-
event.preventDefault();
|
|
161
|
-
}
|
|
162
|
-
if (stopPropagation) {
|
|
163
|
-
event.stopPropagation();
|
|
164
|
-
}
|
|
165
|
-
if (stopImmediatePropagation) {
|
|
166
|
-
event.stopImmediatePropagation();
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Return an Array of visible items
|
|
172
|
-
*/
|
|
173
|
-
function filterVisible(els) {
|
|
174
|
-
return (els || []).filter(el => isVisible(el));
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
export { colorFromBackground, debounceByAnimationFrame, filterVisible, focusFirstFocusableElement, hexToRgba, isDev, isElementFocusable, isElementTabbable, logWarning, relativeLuminance, rgbFromHex, rgbFromString, stopEvent, throttle, toSrgb, uid };
|
package/dist/utils.js
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export { GlBreakpointInstance, breakpoints } from './utils/breakpoints';
|
|
2
|
-
import * as validators from './components/base/form/form_fields/validators';
|
|
3
|
-
export { validators as formValidators };
|
|
4
|
-
import * as mappers from './components/base/form/form_fields/mappers';
|
|
5
|
-
export { mappers as formMappers };
|