@gitlab/ui 72.12.0 → 72.12.1

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 (209) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/charts.js +14 -0
  3. package/dist/components/base/accordion/accordion.js +73 -0
  4. package/dist/components/base/accordion/accordion_item.js +133 -0
  5. package/dist/components/base/alert/alert.js +222 -0
  6. package/dist/components/base/avatar/avatar.js +160 -0
  7. package/dist/components/base/avatar_labeled/avatar_labeled.js +107 -0
  8. package/dist/components/base/avatar_link/avatar_link.js +47 -0
  9. package/dist/components/base/avatars_inline/avatars_inline.js +119 -0
  10. package/dist/components/base/badge/badge.js +105 -0
  11. package/dist/components/base/banner/banner.js +139 -0
  12. package/dist/components/base/breadcrumb/breadcrumb.js +122 -0
  13. package/dist/components/base/breadcrumb/breadcrumb_item.js +73 -0
  14. package/dist/components/base/broadcast_message/broadcast_message.js +112 -0
  15. package/dist/components/base/broadcast_message/constants.js +5 -0
  16. package/dist/components/base/button/button.js +151 -0
  17. package/dist/components/base/button_group/button_group.js +47 -0
  18. package/dist/components/base/card/card.js +71 -0
  19. package/dist/components/base/carousel/carousel.js +48 -0
  20. package/dist/components/base/carousel/carousel_slide.js +47 -0
  21. package/dist/components/base/collapse/collapse.js +59 -0
  22. package/dist/components/base/datepicker/datepicker.js +386 -0
  23. package/dist/components/base/daterange_picker/daterange_picker.js +288 -0
  24. package/dist/components/base/drawer/drawer.js +127 -0
  25. package/dist/components/base/dropdown/dropdown.js +261 -0
  26. package/dist/components/base/dropdown/dropdown_divider.js +48 -0
  27. package/dist/components/base/dropdown/dropdown_form.js +48 -0
  28. package/dist/components/base/dropdown/dropdown_item.js +131 -0
  29. package/dist/components/base/dropdown/dropdown_section_header.js +48 -0
  30. package/dist/components/base/dropdown/dropdown_text.js +48 -0
  31. package/dist/components/base/filtered_search/common_story_options.js +14 -0
  32. package/dist/components/base/filtered_search/filtered_search.js +388 -0
  33. package/dist/components/base/filtered_search/filtered_search_suggestion.js +89 -0
  34. package/dist/components/base/filtered_search/filtered_search_suggestion_list.js +138 -0
  35. package/dist/components/base/filtered_search/filtered_search_term.js +203 -0
  36. package/dist/components/base/filtered_search/filtered_search_token.js +384 -0
  37. package/dist/components/base/filtered_search/filtered_search_token_segment.js +420 -0
  38. package/dist/components/base/filtered_search/filtered_search_utils.js +242 -0
  39. package/dist/components/base/form/form.js +49 -0
  40. package/dist/components/base/form/form_checkbox/form_checkbox.js +78 -0
  41. package/dist/components/base/form/form_checkbox/form_checkbox_group.js +60 -0
  42. package/dist/components/base/form/form_checkbox_tree/checkbox_tree_node.js +79 -0
  43. package/dist/components/base/form/form_checkbox_tree/form_checkbox_tree.js +138 -0
  44. package/dist/components/base/form/form_checkbox_tree/models/constants.js +12 -0
  45. package/dist/components/base/form/form_checkbox_tree/models/node.js +51 -0
  46. package/dist/components/base/form/form_checkbox_tree/models/tree.js +199 -0
  47. package/dist/components/base/form/form_combobox/constants.js +55 -0
  48. package/dist/components/base/form/form_combobox/form_combobox.js +230 -0
  49. package/dist/components/base/form/form_date/form_date.js +143 -0
  50. package/dist/components/base/form/form_fields/form_field_validator.js +93 -0
  51. package/dist/components/base/form/form_fields/form_fields.js +214 -0
  52. package/dist/components/base/form/form_fields/mappers.js +13 -0
  53. package/dist/components/base/form/form_fields/validators.js +48 -0
  54. package/dist/components/base/form/form_group/form_group.js +97 -0
  55. package/dist/components/base/form/form_input/form_input.js +121 -0
  56. package/dist/components/base/form/form_input_group/form_input_group.js +108 -0
  57. package/dist/components/base/form/form_input_group/form_input_group_mixin.js +41 -0
  58. package/dist/components/base/form/form_radio/form_radio.js +65 -0
  59. package/dist/components/base/form/form_radio_group/form_radio_group.js +78 -0
  60. package/dist/components/base/form/form_select/constants.js +12 -0
  61. package/dist/components/base/form/form_select/form_select.js +82 -0
  62. package/dist/components/base/form/form_text/form_text.js +38 -0
  63. package/dist/components/base/form/form_textarea/form_textarea.js +112 -0
  64. package/dist/components/base/form/input_group_text/input_group_text.js +48 -0
  65. package/dist/components/base/icon/icon.js +111 -0
  66. package/dist/components/base/infinite_scroll/infinite_scroll.js +197 -0
  67. package/dist/components/base/keyset_pagination/keyset_pagination.js +151 -0
  68. package/dist/components/base/label/label.js +163 -0
  69. package/dist/components/base/link/link.js +50 -0
  70. package/dist/components/base/loading_icon/loading_icon.js +111 -0
  71. package/dist/components/base/markdown/markdown.js +52 -0
  72. package/dist/components/base/modal/modal.js +204 -0
  73. package/dist/components/base/nav/nav.js +48 -0
  74. package/dist/components/base/nav/nav_item.js +48 -0
  75. package/dist/components/base/nav/nav_item_dropdown.js +62 -0
  76. package/dist/components/base/navbar/navbar.js +48 -0
  77. package/dist/components/base/new_dropdowns/base_dropdown/base_dropdown.js +453 -0
  78. package/dist/components/base/new_dropdowns/base_dropdown/constants.js +4 -0
  79. package/dist/components/base/new_dropdowns/constants.js +21 -0
  80. package/dist/components/base/new_dropdowns/disclosure/constants.js +8 -0
  81. package/dist/components/base/new_dropdowns/disclosure/disclosure_dropdown.js +370 -0
  82. package/dist/components/base/new_dropdowns/disclosure/disclosure_dropdown_group.js +110 -0
  83. package/dist/components/base/new_dropdowns/disclosure/disclosure_dropdown_item.js +143 -0
  84. package/dist/components/base/new_dropdowns/disclosure/mock_data.js +147 -0
  85. package/dist/components/base/new_dropdowns/disclosure/utils.js +39 -0
  86. package/dist/components/base/new_dropdowns/listbox/listbox.js +767 -0
  87. package/dist/components/base/new_dropdowns/listbox/listbox_group.js +58 -0
  88. package/dist/components/base/new_dropdowns/listbox/listbox_item.js +91 -0
  89. package/dist/components/base/new_dropdowns/listbox/listbox_search_input.js +93 -0
  90. package/dist/components/base/new_dropdowns/listbox/mock_data.js +118 -0
  91. package/dist/components/base/new_dropdowns/listbox/utils.js +34 -0
  92. package/dist/components/base/paginated_list/paginated_list.js +180 -0
  93. package/dist/components/base/pagination/pagination.js +399 -0
  94. package/dist/components/base/path/data.js +34 -0
  95. package/dist/components/base/path/path.js +189 -0
  96. package/dist/components/base/popover/popover.js +110 -0
  97. package/dist/components/base/progress_bar/progress_bar.js +48 -0
  98. package/dist/components/base/search_box_by_click/search_box_by_click.js +235 -0
  99. package/dist/components/base/search_box_by_type/search_box_by_type.js +167 -0
  100. package/dist/components/base/segmented_control/segmented_control.js +109 -0
  101. package/dist/components/base/skeleton_loader/skeleton_loader.js +224 -0
  102. package/dist/components/base/sorting/sorting.js +171 -0
  103. package/dist/components/base/sorting/sorting_item.js +109 -0
  104. package/dist/components/base/table/constants.js +5 -0
  105. package/dist/components/base/table/table.js +89 -0
  106. package/dist/components/base/table_lite/table_lite.js +72 -0
  107. package/dist/components/base/tabs/constants.js +3 -0
  108. package/dist/components/base/tabs/tab/tab.js +83 -0
  109. package/dist/components/base/tabs/tabs/scrollable_tabs.js +143 -0
  110. package/dist/components/base/tabs/tabs/tabs.js +224 -0
  111. package/dist/components/base/toast/toast.js +82 -0
  112. package/dist/components/base/toggle/toggle.js +180 -0
  113. package/dist/components/base/token/token.js +85 -0
  114. package/dist/components/base/token_selector/helpers.js +5 -0
  115. package/dist/components/base/token_selector/token_container.js +165 -0
  116. package/dist/components/base/token_selector/token_selector.js +403 -0
  117. package/dist/components/base/token_selector/token_selector_dropdown.js +199 -0
  118. package/dist/components/base/tooltip/tooltip.js +55 -0
  119. package/dist/components/charts/area/area.js +311 -0
  120. package/dist/components/charts/bar/bar.js +253 -0
  121. package/dist/components/charts/chart/chart.js +215 -0
  122. package/dist/components/charts/column/column.js +226 -0
  123. package/dist/components/charts/discrete_scatter/discrete_scatter.js +203 -0
  124. package/dist/components/charts/gauge/gauge.js +208 -0
  125. package/dist/components/charts/heatmap/heatmap.js +295 -0
  126. package/dist/components/charts/heatmap/index.js +2 -0
  127. package/dist/components/charts/legend/legend.js +228 -0
  128. package/dist/components/charts/line/line.js +308 -0
  129. package/dist/components/charts/series_label/series_label.js +100 -0
  130. package/dist/components/charts/single_stat/single_stat.js +152 -0
  131. package/dist/components/charts/sparkline/sparkline.js +261 -0
  132. package/dist/components/charts/stacked_column/stacked_column.js +335 -0
  133. package/dist/components/charts/tooltip/tooltip.js +251 -0
  134. package/dist/components/experimental/duo/chat/components/duo_chat_conversation/duo_chat_conversation.js +83 -0
  135. package/dist/components/experimental/duo/chat/components/duo_chat_loader/duo_chat_loader.js +100 -0
  136. package/dist/components/experimental/duo/chat/components/duo_chat_message/copy_code_element.js +35 -0
  137. package/dist/components/experimental/duo/chat/components/duo_chat_message/duo_chat_message.js +115 -0
  138. package/dist/components/experimental/duo/chat/components/duo_chat_message_sources/duo_chat_message_sources.js +104 -0
  139. package/dist/components/experimental/duo/chat/components/duo_chat_predefined_prompts/duo_chat_predefined_prompts.js +64 -0
  140. package/dist/components/experimental/duo/chat/constants.js +23 -0
  141. package/dist/components/experimental/duo/chat/duo_chat.js +359 -0
  142. package/dist/components/experimental/duo/chat/mock_data.js +83 -0
  143. package/dist/components/experimental/duo/user_feedback/user_feedback.js +94 -0
  144. package/dist/components/experimental/duo/user_feedback/user_feedback_modal.js +124 -0
  145. package/dist/components/experimental/experiment_badge/constants.js +4 -0
  146. package/dist/components/experimental/experiment_badge/experiment_badge.js +107 -0
  147. package/dist/components/mixins/button_mixin.js +11 -0
  148. package/dist/components/mixins/safe_link_mixin.js +30 -0
  149. package/dist/components/mixins/tooltip_mixin.js +21 -0
  150. package/dist/components/regions/dashboard_skeleton/dashboard_skeleton.js +53 -0
  151. package/dist/components/regions/empty_state/empty_state.js +154 -0
  152. package/dist/components/shared_components/charts/tooltip_default_format.js +53 -0
  153. package/dist/components/shared_components/clear_icon_button/clear_icon_button.js +64 -0
  154. package/dist/components/shared_components/close_button/close_button.js +54 -0
  155. package/dist/components/utilities/animated_number/animated_number.js +131 -0
  156. package/dist/components/utilities/friendly_wrap/friendly_wrap.js +75 -0
  157. package/dist/components/utilities/intersection_observer/intersection_observer.js +88 -0
  158. package/dist/components/utilities/intersperse/intersperse.js +86 -0
  159. package/dist/components/utilities/sprintf/sprintf.js +172 -0
  160. package/dist/components/utilities/truncate/constants.js +7 -0
  161. package/dist/components/utilities/truncate/truncate.js +111 -0
  162. package/dist/components/utilities/truncate_text/constants.js +7 -0
  163. package/dist/components/utilities/truncate_text/truncate_text.js +146 -0
  164. package/dist/config.js +86 -0
  165. package/dist/directives/collapse_toggle.js +1 -0
  166. package/dist/directives/hover_load/hover_load.js +45 -0
  167. package/dist/directives/modal.js +1 -0
  168. package/dist/directives/outside/get_event_like_time_stamp.js +33 -0
  169. package/dist/directives/outside/outside.js +106 -0
  170. package/dist/directives/resize_observer/resize_observer.js +51 -0
  171. package/dist/directives/safe_html/constants.js +6 -0
  172. package/dist/directives/safe_html/safe_html.js +39 -0
  173. package/dist/directives/safe_link/mock_data.js +10 -0
  174. package/dist/directives/safe_link/safe_link.js +65 -0
  175. package/dist/directives/tooltip.js +1 -0
  176. package/dist/index.css +7 -0
  177. package/dist/index.css.map +1 -0
  178. package/dist/index.js +105 -0
  179. package/dist/tokens/common_story_options.js +54 -0
  180. package/dist/tokens/css/tokens.css +1 -1
  181. package/dist/tokens/css/tokens.dark.css +1 -1
  182. package/dist/tokens/js/tokens.dark.js +1 -1
  183. package/dist/tokens/js/tokens.js +1 -1
  184. package/dist/tokens/scss/_tokens.dark.scss +1 -1
  185. package/dist/tokens/scss/_tokens.scss +1 -1
  186. package/dist/utils/breakpoints.js +20 -0
  187. package/dist/utils/charts/config.js +556 -0
  188. package/dist/utils/charts/constants.js +63 -0
  189. package/dist/utils/charts/mock_data.js +211 -0
  190. package/dist/utils/charts/story_config.js +42 -0
  191. package/dist/utils/charts/theme.js +192 -0
  192. package/dist/utils/charts/utils.js +54 -0
  193. package/dist/utils/constants.js +288 -0
  194. package/dist/utils/data_utils.js +21 -0
  195. package/dist/utils/datetime_utility.js +61 -0
  196. package/dist/utils/i18n.js +15 -0
  197. package/dist/utils/is_slot_empty.js +38 -0
  198. package/dist/utils/number_utils.js +124 -0
  199. package/dist/utils/stories_constants.js +29 -0
  200. package/dist/utils/stories_utils.js +13 -0
  201. package/dist/utils/story_decorators/container.js +16 -0
  202. package/dist/utils/string_utils.js +69 -0
  203. package/dist/utils/svgs/svg_paths.js +7 -0
  204. package/dist/utils/test_utils.js +33 -0
  205. package/dist/utils/use_fake_date.js +29 -0
  206. package/dist/utils/use_mock_intersection_observer.js +108 -0
  207. package/dist/utils/utils.js +197 -0
  208. package/dist/utils.js +5 -0
  209. package/package.json +1 -1
@@ -0,0 +1,180 @@
1
+ import uniqueId from 'lodash/uniqueId';
2
+ import { toggleLabelPosition } from '../../../utils/constants';
3
+ import GlIcon from '../icon/icon';
4
+ import GlLoadingIcon from '../loading_icon/loading_icon';
5
+ import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
6
+
7
+ //
8
+ let uuid = 0;
9
+ var script = {
10
+ name: 'GlToggle',
11
+ components: {
12
+ GlIcon,
13
+ GlLoadingIcon
14
+ },
15
+ model: {
16
+ prop: 'value',
17
+ event: 'change'
18
+ },
19
+ props: {
20
+ name: {
21
+ type: String,
22
+ required: false,
23
+ default: null
24
+ },
25
+ /**
26
+ * The toggle's state.
27
+ * @model
28
+ */
29
+ value: {
30
+ type: Boolean,
31
+ required: false,
32
+ default: null
33
+ },
34
+ /**
35
+ * Whether the toggle should be disabled.
36
+ */
37
+ disabled: {
38
+ type: Boolean,
39
+ required: false,
40
+ default: false
41
+ },
42
+ /**
43
+ * Whether the toggle is in the loading state.
44
+ */
45
+ isLoading: {
46
+ type: Boolean,
47
+ required: false,
48
+ default: false
49
+ },
50
+ /**
51
+ * The toggle's label.
52
+ */
53
+ label: {
54
+ type: String,
55
+ required: true
56
+ },
57
+ /**
58
+ * The toggle's description.
59
+ */
60
+ description: {
61
+ type: String,
62
+ required: false,
63
+ default: undefined
64
+ },
65
+ /**
66
+ * A help text to be shown below the toggle.
67
+ */
68
+ help: {
69
+ type: String,
70
+ required: false,
71
+ default: undefined
72
+ },
73
+ /**
74
+ * The label's position relative to the toggle. If 'hidden', the toggle will add the .gl-sr-only class so the label is still accessible to screen readers.
75
+ */
76
+ labelPosition: {
77
+ type: String,
78
+ required: false,
79
+ default: 'top',
80
+ validator(position) {
81
+ return Object.values(toggleLabelPosition).includes(position);
82
+ }
83
+ }
84
+ },
85
+ data() {
86
+ return {
87
+ labelId: uniqueId('toggle-label-')
88
+ };
89
+ },
90
+ computed: {
91
+ shouldRenderDescription() {
92
+ // eslint-disable-next-line @gitlab/vue-prefer-dollar-scopedslots
93
+ return Boolean(this.$scopedSlots.description || this.description) && this.isVerticalLayout;
94
+ },
95
+ shouldRenderHelp() {
96
+ // eslint-disable-next-line @gitlab/vue-prefer-dollar-scopedslots
97
+ return Boolean(this.$slots.help || this.help) && this.isVerticalLayout;
98
+ },
99
+ toggleClasses() {
100
+ return [{
101
+ 'gl-sr-only': this.labelPosition === 'hidden'
102
+ }, this.shouldRenderDescription ? 'gl-mb-2' : 'gl-mb-3'];
103
+ },
104
+ icon() {
105
+ return this.value ? 'mobile-issue-close' : 'close';
106
+ },
107
+ helpId() {
108
+ return this.shouldRenderHelp ? `toggle-help-${this.uuid}` : undefined;
109
+ },
110
+ isChecked() {
111
+ return this.value ? 'true' : 'false';
112
+ },
113
+ isVerticalLayout() {
114
+ return this.labelPosition === 'top' || this.labelPosition === 'hidden';
115
+ }
116
+ },
117
+ beforeCreate() {
118
+ this.uuid = uuid;
119
+ uuid += 1;
120
+ },
121
+ methods: {
122
+ toggleFeature() {
123
+ if (!this.disabled) {
124
+ /**
125
+ * Emitted when the state changes.
126
+ *
127
+ * @event change
128
+ * @property {boolean} value Whether the toggle is enabled.
129
+ */
130
+ this.$emit('change', !this.value);
131
+ }
132
+ }
133
+ }
134
+ };
135
+
136
+ /* script */
137
+ const __vue_script__ = script;
138
+
139
+ /* template */
140
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"gl-toggle-wrapper gl-display-flex gl-mb-0",class:{
141
+ 'gl-flex-direction-column': _vm.isVerticalLayout,
142
+ 'gl-toggle-label-inline': !_vm.isVerticalLayout,
143
+ 'is-disabled': _vm.disabled,
144
+ },attrs:{"data-testid":"toggle-wrapper"}},[_c('span',{staticClass:"gl-toggle-label gl-flex-shrink-0",class:_vm.toggleClasses,attrs:{"id":_vm.labelId,"data-testid":"toggle-label"}},[_vm._t("label",function(){return [_vm._v(_vm._s(_vm.label))]})],2),_vm._v(" "),(_vm.shouldRenderDescription)?_c('span',{staticClass:"gl-description-label gl-mb-3",attrs:{"data-testid":"toggle-description"}},[_vm._t("description",function(){return [_vm._v(_vm._s(_vm.description))]})],2):_vm._e(),_vm._v(" "),(_vm.name)?_c('input',{attrs:{"name":_vm.name,"type":"hidden"},domProps:{"value":_vm.value}}):_vm._e(),_vm._v(" "),_c('button',{staticClass:"gl-flex-shrink-0",class:{
145
+ 'gl-toggle': true,
146
+ 'is-checked': _vm.value,
147
+ 'is-disabled': _vm.disabled,
148
+ },attrs:{"role":"switch","aria-checked":_vm.isChecked,"aria-labelledby":_vm.labelId,"aria-describedby":_vm.helpId,"aria-disabled":_vm.disabled,"type":"button"},on:{"click":function($event){$event.preventDefault();return _vm.toggleFeature.apply(null, arguments)}}},[(_vm.isLoading)?_c('gl-loading-icon',{staticClass:"toggle-loading",attrs:{"color":"light"}}):_c('span',{class:{ 'toggle-icon': true, disabled: _vm.disabled }},[_c('gl-icon',{attrs:{"name":_vm.icon,"size":16}})],1)],1),_vm._v(" "),(_vm.shouldRenderHelp)?_c('span',{staticClass:"gl-help-label",attrs:{"id":_vm.helpId,"data-testid":"toggle-help"}},[_vm._t("help",function(){return [_vm._v(_vm._s(_vm.help))]})],2):_vm._e()])};
149
+ var __vue_staticRenderFns__ = [];
150
+
151
+ /* style */
152
+ const __vue_inject_styles__ = undefined;
153
+ /* scoped */
154
+ const __vue_scope_id__ = undefined;
155
+ /* module identifier */
156
+ const __vue_module_identifier__ = undefined;
157
+ /* functional template */
158
+ const __vue_is_functional_template__ = false;
159
+ /* style inject */
160
+
161
+ /* style inject SSR */
162
+
163
+ /* style inject shadow dom */
164
+
165
+
166
+
167
+ const __vue_component__ = __vue_normalize__(
168
+ { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },
169
+ __vue_inject_styles__,
170
+ __vue_script__,
171
+ __vue_scope_id__,
172
+ __vue_is_functional_template__,
173
+ __vue_module_identifier__,
174
+ false,
175
+ undefined,
176
+ undefined,
177
+ undefined
178
+ );
179
+
180
+ export default __vue_component__;
@@ -0,0 +1,85 @@
1
+ import { tokenVariants } from '../../../utils/constants';
2
+ import CloseButton from '../../shared_components/close_button/close_button';
3
+ import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
4
+
5
+ //
6
+ var script = {
7
+ name: 'GlToken',
8
+ components: {
9
+ CloseButton
10
+ },
11
+ props: {
12
+ viewOnly: {
13
+ type: Boolean,
14
+ required: false,
15
+ default: false
16
+ },
17
+ /**
18
+ * Token visual variants: default, search-type, and search-value.
19
+ */
20
+ variant: {
21
+ type: String,
22
+ required: false,
23
+ default: 'default',
24
+ validator: variant => tokenVariants.includes(variant)
25
+ }
26
+ },
27
+ computed: {
28
+ variantClass() {
29
+ return `gl-token-${this.variant}-variant`;
30
+ },
31
+ viewOnlyClass() {
32
+ return {
33
+ 'gl-token-view-only': this.viewOnly
34
+ };
35
+ }
36
+ },
37
+ methods: {
38
+ close($event) {
39
+ /**
40
+ * Emitted when x is clicked
41
+ *
42
+ * @event close
43
+ */
44
+ this.$emit('close', $event);
45
+ }
46
+ }
47
+ };
48
+
49
+ /* script */
50
+ const __vue_script__ = script;
51
+
52
+ /* template */
53
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',_vm._g({class:['gl-token', _vm.variantClass, _vm.viewOnlyClass]},_vm.$listeners),[_c('span',{staticClass:"gl-token-content"},[_vm._t("default"),_vm._v(" "),(!_vm.viewOnly)?_c('close-button',{staticClass:"gl-token-close gl-close-btn-color-inherit",on:{"click":_vm.close}}):_vm._e()],2)])};
54
+ var __vue_staticRenderFns__ = [];
55
+
56
+ /* style */
57
+ const __vue_inject_styles__ = undefined;
58
+ /* scoped */
59
+ const __vue_scope_id__ = undefined;
60
+ /* module identifier */
61
+ const __vue_module_identifier__ = undefined;
62
+ /* functional template */
63
+ const __vue_is_functional_template__ = false;
64
+ /* style inject */
65
+
66
+ /* style inject SSR */
67
+
68
+ /* style inject shadow dom */
69
+
70
+
71
+
72
+ const __vue_component__ = __vue_normalize__(
73
+ { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },
74
+ __vue_inject_styles__,
75
+ __vue_script__,
76
+ __vue_scope_id__,
77
+ __vue_is_functional_template__,
78
+ __vue_module_identifier__,
79
+ false,
80
+ undefined,
81
+ undefined,
82
+ undefined
83
+ );
84
+
85
+ export default __vue_component__;
@@ -0,0 +1,5 @@
1
+ import has from 'lodash/has';
2
+
3
+ const tokensValidator = tokens => tokens.every(token => has(token, 'id'));
4
+
5
+ export { tokensValidator };
@@ -0,0 +1,165 @@
1
+ import GlToken from '../token/token';
2
+ import GlButton from '../button/button';
3
+ import { tokensValidator } from './helpers';
4
+ import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
5
+
6
+ var script = {
7
+ name: 'GlTokenContainer',
8
+ components: {
9
+ GlToken,
10
+ GlButton
11
+ },
12
+ props: {
13
+ tokens: {
14
+ type: Array,
15
+ // All tokens need to have an `id` key
16
+ validator: tokensValidator,
17
+ required: true
18
+ },
19
+ state: {
20
+ type: Boolean,
21
+ required: false,
22
+ default: null
23
+ },
24
+ registerFocusOnToken: {
25
+ type: Function,
26
+ required: true
27
+ },
28
+ viewOnly: {
29
+ type: Boolean,
30
+ required: false,
31
+ default: false
32
+ },
33
+ showClearAllButton: {
34
+ type: Boolean,
35
+ required: false,
36
+ default: false
37
+ }
38
+ },
39
+ data() {
40
+ return {
41
+ bindFocusEvent: true,
42
+ focusedTokenIndex: null
43
+ };
44
+ },
45
+ computed: {
46
+ focusedToken() {
47
+ return this.tokens[this.focusedTokenIndex] || null;
48
+ }
49
+ },
50
+ watch: {
51
+ focusedToken(newValue) {
52
+ var _this$$refs$tokens;
53
+ if (newValue === null) {
54
+ return;
55
+ }
56
+ const tokenRef = (_this$$refs$tokens = this.$refs.tokens) === null || _this$$refs$tokens === void 0 ? void 0 : _this$$refs$tokens.find(ref => ref.dataset.tokenId === newValue.id.toString());
57
+ if (tokenRef) {
58
+ // Prevent `handleTokenFocus` from being called when we manually focus on a token
59
+ this.bindFocusEvent = false;
60
+ tokenRef.focus();
61
+ this.bindFocusEvent = true;
62
+ }
63
+ }
64
+ },
65
+ created() {
66
+ this.registerFocusOnToken(this.focusOnToken);
67
+ },
68
+ methods: {
69
+ handleClose(token) {
70
+ this.$emit('token-remove', token);
71
+ this.focusedTokenIndex = null;
72
+ },
73
+ handleLeftArrow() {
74
+ if (this.focusedTokenIndex === 0) {
75
+ this.focusLastToken();
76
+ } else {
77
+ this.focusPrevToken();
78
+ }
79
+ },
80
+ handleRightArrow() {
81
+ if (this.focusedTokenIndex === this.tokens.length - 1) {
82
+ this.focusFirstToken();
83
+ } else {
84
+ this.focusNextToken();
85
+ }
86
+ },
87
+ handleHome() {
88
+ this.focusFirstToken();
89
+ },
90
+ handleEnd() {
91
+ this.focusLastToken();
92
+ },
93
+ handleDelete() {
94
+ this.$emit('token-remove', this.focusedToken);
95
+ if (this.focusedTokenIndex > 0) {
96
+ this.focusPrevToken();
97
+ }
98
+ },
99
+ handleEscape() {
100
+ this.focusedTokenIndex = null;
101
+ this.$emit('cancel-focus');
102
+ },
103
+ handleTab() {
104
+ this.$emit('cancel-focus');
105
+ },
106
+ // Only called when a token is focused by a click/tap
107
+ handleTokenFocus(index) {
108
+ this.focusedTokenIndex = index;
109
+ },
110
+ focusLastToken() {
111
+ this.focusedTokenIndex = this.tokens.length - 1;
112
+ },
113
+ focusFirstToken() {
114
+ this.focusedTokenIndex = 0;
115
+ },
116
+ focusNextToken() {
117
+ this.focusedTokenIndex += 1;
118
+ },
119
+ focusPrevToken() {
120
+ this.focusedTokenIndex -= 1;
121
+ },
122
+ focusOnToken() {
123
+ let tokenIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
124
+ this.focusedTokenIndex = tokenIndex;
125
+ }
126
+ }
127
+ };
128
+
129
+ /* script */
130
+ const __vue_script__ = script;
131
+
132
+ /* template */
133
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"gl-display-flex gl-flex-nowrap gl-align-items-flex-start gl-w-full"},[_c('div',{ref:"tokenContainer",staticClass:"gl-display-flex gl-flex-wrap gl-align-items-center gl-my-n1 gl-mx-n1 gl-w-full",attrs:{"role":"listbox","aria-multiselectable":"false","aria-orientation":"horizontal","aria-invalid":_vm.state === false && 'true'},on:{"keydown":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"left",37,$event.key,["Left","ArrowLeft"])){ return null; }if('button' in $event && $event.button !== 0){ return null; }return _vm.handleLeftArrow.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"right",39,$event.key,["Right","ArrowRight"])){ return null; }if('button' in $event && $event.button !== 2){ return null; }return _vm.handleRightArrow.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"home",undefined,$event.key,undefined)){ return null; }return _vm.handleHome.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"end",undefined,$event.key,undefined)){ return null; }return _vm.handleEnd.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"delete",[8,46],$event.key,["Backspace","Delete","Del"])){ return null; }return _vm.handleDelete.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"esc",27,$event.key,["Esc","Escape"])){ return null; }return _vm.handleEscape.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"tab",9,$event.key,"Tab")){ return null; }if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }$event.preventDefault();return _vm.handleTab.apply(null, arguments)}]}},[_vm._l((_vm.tokens),function(token,index){return _c('div',{key:token.id,ref:"tokens",refInFor:true,staticClass:"gl-token-selector-token-container gl-px-1 gl-py-2 gl-outline-none",attrs:{"data-token-id":token.id,"role":"option","tabindex":"-1"},on:{"focus":function($event){_vm.bindFocusEvent ? _vm.handleTokenFocus(index) : null;}}},[_c('gl-token',{staticClass:"gl-cursor-default",class:token.class,style:(token.style),attrs:{"view-only":_vm.viewOnly},on:{"close":function($event){return _vm.handleClose(token)}}},[_vm._t("token-content",function(){return [_c('span',[_vm._v("\n "+_vm._s(token.name)+"\n ")])]},{"token":token})],2)],1)}),_vm._v(" "),_vm._t("text-input")],2),_vm._v(" "),(_vm.showClearAllButton)?_c('div',{staticClass:"gl-ml-3 gl-p-1"},[_c('gl-button',{attrs:{"size":"small","aria-label":"Clear all","icon":"clear","category":"tertiary","data-testid":"clear-all-button"},on:{"click":function($event){$event.stopPropagation();return _vm.$emit('clear-all')}}})],1):_vm._e()])};
134
+ var __vue_staticRenderFns__ = [];
135
+
136
+ /* style */
137
+ const __vue_inject_styles__ = undefined;
138
+ /* scoped */
139
+ const __vue_scope_id__ = undefined;
140
+ /* module identifier */
141
+ const __vue_module_identifier__ = undefined;
142
+ /* functional template */
143
+ const __vue_is_functional_template__ = false;
144
+ /* style inject */
145
+
146
+ /* style inject SSR */
147
+
148
+ /* style inject shadow dom */
149
+
150
+
151
+
152
+ const __vue_component__ = __vue_normalize__(
153
+ { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },
154
+ __vue_inject_styles__,
155
+ __vue_script__,
156
+ __vue_scope_id__,
157
+ __vue_is_functional_template__,
158
+ __vue_module_identifier__,
159
+ false,
160
+ undefined,
161
+ undefined,
162
+ undefined
163
+ );
164
+
165
+ export default __vue_component__;