@gitlab/ui 38.0.1 → 38.2.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 (140) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +1 -1
  3. package/dist/components/base/breadcrumb/breadcrumb.js +10 -5
  4. package/dist/components/base/{filtered_search/examples/filtered_search.single_unique.example.js → breadcrumb/breadcrumb_item.js} +32 -28
  5. package/dist/components/base/dropdown/dropdown.documentation.js +1 -5
  6. package/dist/components/base/dropdown/dropdown_item.documentation.js +2 -3
  7. package/dist/components/base/filtered_search/filtered_search.documentation.js +2 -66
  8. package/dist/components/base/filtered_search/filtered_search.js +51 -20
  9. package/dist/components/base/filtered_search/filtered_search_suggestion.documentation.js +2 -8
  10. package/dist/components/base/filtered_search/filtered_search_suggestion.js +5 -1
  11. package/dist/components/base/filtered_search/filtered_search_suggestion_list.documentation.js +2 -7
  12. package/dist/components/base/filtered_search/filtered_search_suggestion_list.js +4 -0
  13. package/dist/components/base/filtered_search/filtered_search_term.documentation.js +2 -44
  14. package/dist/components/base/filtered_search/filtered_search_term.js +37 -0
  15. package/dist/components/base/filtered_search/filtered_search_token.documentation.js +2 -31
  16. package/dist/components/base/filtered_search/filtered_search_token.js +80 -23
  17. package/dist/components/base/filtered_search/filtered_search_token_segment.documentation.js +2 -46
  18. package/dist/components/base/filtered_search/filtered_search_token_segment.js +48 -0
  19. package/dist/components/base/filtered_search/filtered_search_utils.js +42 -9
  20. package/dist/components/base/form/form_checkbox_tree/form_checkbox_tree.documentation.js +2 -27
  21. package/dist/components/base/form/form_checkbox_tree/form_checkbox_tree.js +16 -1
  22. package/dist/components/charts/series_label/series_label.js +6 -1
  23. package/dist/index.css +1 -1
  24. package/dist/index.css.map +1 -1
  25. package/dist/utils/use_mock_intersection_observer.js +2 -2
  26. package/documentation/components_documentation.js +0 -4
  27. package/documentation/documented_stories.js +10 -1
  28. package/package.json +11 -9
  29. package/src/components/base/avatar_link/avatar_link.stories.js +2 -2
  30. package/src/components/base/breadcrumb/breadcrumb.spec.js +24 -10
  31. package/src/components/base/breadcrumb/breadcrumb.vue +11 -6
  32. package/src/components/base/breadcrumb/breadcrumb_item.spec.js +45 -0
  33. package/src/components/base/breadcrumb/breadcrumb_item.vue +43 -0
  34. package/src/components/base/dropdown/dropdown.documentation.js +0 -3
  35. package/src/components/base/dropdown/dropdown.md +7 -2
  36. package/src/components/base/dropdown/dropdown.stories.js +487 -439
  37. package/src/components/base/dropdown/dropdown_item.documentation.js +0 -1
  38. package/src/components/base/dropdown/dropdown_item.md +0 -6
  39. package/src/components/base/dropdown/dropdown_item.stories.js +107 -35
  40. package/src/components/base/filtered_search/filtered_search.documentation.js +0 -76
  41. package/src/components/base/filtered_search/filtered_search.md +3 -4
  42. package/src/components/base/filtered_search/filtered_search.spec.js +37 -12
  43. package/src/components/base/filtered_search/filtered_search.stories.js +260 -17
  44. package/src/components/base/filtered_search/filtered_search.vue +57 -14
  45. package/src/components/base/filtered_search/filtered_search_suggestion.documentation.js +0 -6
  46. package/src/components/base/filtered_search/filtered_search_suggestion.md +1 -7
  47. package/src/components/base/filtered_search/filtered_search_suggestion.stories.js +26 -18
  48. package/src/components/base/filtered_search/filtered_search_suggestion.vue +6 -0
  49. package/src/components/base/filtered_search/filtered_search_suggestion_list.documentation.js +0 -5
  50. package/src/components/base/filtered_search/filtered_search_suggestion_list.md +1 -7
  51. package/src/components/base/filtered_search/filtered_search_suggestion_list.stories.js +33 -25
  52. package/src/components/base/filtered_search/filtered_search_suggestion_list.vue +5 -0
  53. package/src/components/base/filtered_search/filtered_search_term.documentation.js +0 -41
  54. package/src/components/base/filtered_search/filtered_search_term.md +0 -2
  55. package/src/components/base/filtered_search/filtered_search_term.stories.js +33 -26
  56. package/src/components/base/filtered_search/filtered_search_term.vue +54 -0
  57. package/src/components/base/filtered_search/filtered_search_token.documentation.js +0 -26
  58. package/src/components/base/filtered_search/filtered_search_token.md +1 -3
  59. package/src/components/base/filtered_search/filtered_search_token.spec.js +31 -1
  60. package/src/components/base/filtered_search/filtered_search_token.stories.js +137 -132
  61. package/src/components/base/filtered_search/filtered_search_token.vue +93 -21
  62. package/src/components/base/filtered_search/filtered_search_token_segment.documentation.js +0 -43
  63. package/src/components/base/filtered_search/filtered_search_token_segment.md +0 -2
  64. package/src/components/base/filtered_search/filtered_search_token_segment.stories.js +86 -79
  65. package/src/components/base/filtered_search/filtered_search_token_segment.vue +42 -0
  66. package/src/components/base/filtered_search/filtered_search_utils.js +38 -5
  67. package/src/components/base/form/form.stories.js +2 -0
  68. package/src/components/base/form/form_checkbox_tree/form_checkbox_tree.documentation.js +0 -26
  69. package/src/components/base/form/form_checkbox_tree/form_checkbox_tree.md +0 -4
  70. package/src/components/base/form/form_checkbox_tree/form_checkbox_tree.stories.js +123 -92
  71. package/src/components/base/form/form_checkbox_tree/form_checkbox_tree.vue +13 -1
  72. package/src/components/base/form/form_radio/form_radio.spec.js +21 -8
  73. package/src/components/base/form/form_radio_group/form_radio_group.stories.js +2 -1
  74. package/src/components/base/markdown/markdown.scss +21 -0
  75. package/src/components/base/markdown/markdown_typescale_demo.html +17 -6
  76. package/src/components/base/navbar/navbar.stories.js +2 -1
  77. package/src/components/base/skeleton_loader/skeleton_loader.stories.js +67 -21
  78. package/src/components/base/tabs/tabs/tabs.stories.js +2 -2
  79. package/src/components/charts/series_label/series_label.stories.js +6 -3
  80. package/src/components/charts/series_label/series_label.vue +3 -0
  81. package/src/scss/typescale/typescale.md +0 -2
  82. package/src/scss/typescale/typescale.stories.js +17 -4
  83. package/src/utils/use_mock_intersection_observer.js +3 -3
  84. package/dist/components/base/dropdown/dropdown_divider.documentation.js +0 -8
  85. package/dist/components/base/dropdown/dropdown_form.documentation.js +0 -17
  86. package/dist/components/base/dropdown/dropdown_section_header.documentation.js +0 -8
  87. package/dist/components/base/dropdown/dropdown_text.documentation.js +0 -8
  88. package/dist/components/base/dropdown/examples/dropdown.default.example.js +0 -38
  89. package/dist/components/base/dropdown/examples/dropdown.links.example.js +0 -38
  90. package/dist/components/base/dropdown/examples/dropdown.with_avatar_and_secondary_text.example.js +0 -38
  91. package/dist/components/base/dropdown/examples/dropdown.with_checked_items.example.js +0 -38
  92. package/dist/components/base/dropdown/examples/dropdown.with_clear_all.example.js +0 -38
  93. package/dist/components/base/dropdown/examples/dropdown.with_divider.example.js +0 -38
  94. package/dist/components/base/dropdown/examples/dropdown.with_form.example.js +0 -38
  95. package/dist/components/base/dropdown/examples/dropdown.with_header.example.js +0 -38
  96. package/dist/components/base/dropdown/examples/dropdown.with_highlighted_items.example.js +0 -38
  97. package/dist/components/base/dropdown/examples/dropdown.with_icons.example.js +0 -38
  98. package/dist/components/base/dropdown/examples/dropdown.with_right_align.example.js +0 -38
  99. package/dist/components/base/dropdown/examples/dropdown.with_search.example.js +0 -67
  100. package/dist/components/base/dropdown/examples/dropdown.with_section_headers.example.js +0 -38
  101. package/dist/components/base/dropdown/examples/index.js +0 -85
  102. package/dist/components/base/filtered_search/examples/filtered_search.default.example.js +0 -422
  103. package/dist/components/base/filtered_search/examples/filtered_search.friendly.example.js +0 -423
  104. package/dist/components/base/filtered_search/examples/filtered_search.history.example.js +0 -91
  105. package/dist/components/base/filtered_search/examples/filtered_search.multi_select.example.js +0 -196
  106. package/dist/components/base/filtered_search/examples/index.js +0 -32
  107. package/dist/components/base/form/form_checkbox_tree/examples/form_checkbox_tree.basic.example.js +0 -103
  108. package/dist/components/base/form/form_checkbox_tree/examples/index.js +0 -13
  109. package/src/components/base/dropdown/dropdown_divider.documentation.js +0 -6
  110. package/src/components/base/dropdown/dropdown_divider.md +0 -7
  111. package/src/components/base/dropdown/dropdown_divider.stories.js +0 -16
  112. package/src/components/base/dropdown/dropdown_form.documentation.js +0 -9
  113. package/src/components/base/dropdown/dropdown_form.md +0 -4
  114. package/src/components/base/dropdown/dropdown_form.stories.js +0 -17
  115. package/src/components/base/dropdown/dropdown_section_header.documentation.js +0 -6
  116. package/src/components/base/dropdown/dropdown_section_header.stories.js +0 -17
  117. package/src/components/base/dropdown/dropdown_text.documentation.js +0 -6
  118. package/src/components/base/dropdown/dropdown_text.stories.js +0 -16
  119. package/src/components/base/dropdown/examples/dropdown.default.example.vue +0 -7
  120. package/src/components/base/dropdown/examples/dropdown.links.example.vue +0 -7
  121. package/src/components/base/dropdown/examples/dropdown.with_avatar_and_secondary_text.example.vue +0 -7
  122. package/src/components/base/dropdown/examples/dropdown.with_checked_items.example.vue +0 -6
  123. package/src/components/base/dropdown/examples/dropdown.with_clear_all.example.vue +0 -7
  124. package/src/components/base/dropdown/examples/dropdown.with_divider.example.vue +0 -9
  125. package/src/components/base/dropdown/examples/dropdown.with_form.example.vue +0 -10
  126. package/src/components/base/dropdown/examples/dropdown.with_header.example.vue +0 -7
  127. package/src/components/base/dropdown/examples/dropdown.with_highlighted_items.example.vue +0 -9
  128. package/src/components/base/dropdown/examples/dropdown.with_icons.example.vue +0 -43
  129. package/src/components/base/dropdown/examples/dropdown.with_right_align.example.vue +0 -7
  130. package/src/components/base/dropdown/examples/dropdown.with_search.example.vue +0 -38
  131. package/src/components/base/dropdown/examples/dropdown.with_section_headers.example.vue +0 -10
  132. package/src/components/base/dropdown/examples/index.js +0 -99
  133. package/src/components/base/filtered_search/examples/filtered_search.default.example.vue +0 -298
  134. package/src/components/base/filtered_search/examples/filtered_search.friendly.example.vue +0 -300
  135. package/src/components/base/filtered_search/examples/filtered_search.history.example.vue +0 -50
  136. package/src/components/base/filtered_search/examples/filtered_search.multi_select.example.vue +0 -132
  137. package/src/components/base/filtered_search/examples/filtered_search.single_unique.example.vue +0 -31
  138. package/src/components/base/filtered_search/examples/index.js +0 -38
  139. package/src/components/base/form/form_checkbox_tree/examples/form_checkbox_tree.basic.example.vue +0 -77
  140. package/src/components/base/form/form_checkbox_tree/examples/index.js +0 -15
@@ -1,423 +0,0 @@
1
- import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
2
-
3
- const fakeUsers = [{
4
- id: 1,
5
- name: 'User Alpha',
6
- username: 'alpha'
7
- }, {
8
- id: 2,
9
- name: 'User Beta',
10
- username: 'beta'
11
- }, {
12
- id: 3,
13
- name: 'User Gamma',
14
- username: 'gamma'
15
- }, {
16
- id: 4,
17
- name: 'User Delta',
18
- username: 'delta'
19
- }, {
20
- id: 5,
21
- name: 'User Epsilon',
22
- username: 'epsilon'
23
- }];
24
- const fakeMilestones = [{
25
- id: 1,
26
- title: '12.7',
27
- name: '%12.7'
28
- }, {
29
- id: 2,
30
- title: '12.8',
31
- name: '%12.8'
32
- }, {
33
- id: 3,
34
- title: '12.9',
35
- name: '%12.9'
36
- }, {
37
- id: 4,
38
- title: '12.10',
39
- name: '%12.10'
40
- }, {
41
- id: 5,
42
- title: 'Backlog',
43
- name: 'Backlog'
44
- }];
45
- const fakeLabels = [{
46
- id: 1,
47
- title: 'Bug',
48
- color: '#D9534F',
49
- text_color: '#FFFFFF'
50
- }, {
51
- id: 2,
52
- title: 'Enhancement',
53
- color: '#F0AD4E',
54
- text_color: '#FFFFFF'
55
- }, {
56
- id: 3,
57
- title: 'Backlog',
58
- color: '#cccccc',
59
- text_color: '#333333'
60
- }, {
61
- id: 4,
62
- title: 'Feature',
63
- color: '#A8D695',
64
- text_color: '#333333'
65
- }, {
66
- id: 5,
67
- title: 'Documentation',
68
- color: '#5CB85C',
69
- text_color: '#FFFFFF'
70
- }];
71
- const UserToken = {
72
- props: ['value', 'active'],
73
- inheritAttrs: false,
74
-
75
- data() {
76
- return {
77
- loadingView: false,
78
- loadingSuggestions: false,
79
- users: [],
80
- activeUser: null
81
- };
82
- },
83
-
84
- methods: {
85
- loadView() {
86
- this.loadingView = true;
87
- setTimeout(() => {
88
- this.loadingView = false;
89
- this.activeUser = fakeUsers.find(u => u.username === this.value.data);
90
- }, 1000);
91
- },
92
-
93
- loadSuggestions() {
94
- this.loadingSuggestions = true;
95
- setTimeout(() => {
96
- this.loadingSuggestions = false;
97
- this.users = fakeUsers;
98
- }, 2000);
99
- }
100
-
101
- },
102
- watch: {
103
- // eslint-disable-next-line func-names
104
- 'value.data': function () {
105
- if (this.active) {
106
- this.loadSuggestions();
107
- }
108
- },
109
- active: {
110
- immediate: true,
111
-
112
- handler(newValue) {
113
- if (!newValue) {
114
- this.loadView();
115
- } else {
116
- this.loadSuggestions();
117
- }
118
- }
119
-
120
- }
121
- },
122
- template: `
123
- <gl-filtered-search-token
124
- v-bind="{ ...this.$props, ...this.$attrs }"
125
- v-on="$listeners"
126
- >
127
- <template #view="{ inputValue }">
128
- <gl-loading-icon size="sm" v-if="loadingView" />
129
- <gl-avatar :size="16" :entity-name="inputValue" shape="circle" v-else />
130
- {{ activeUser ? activeUser.name : inputValue }}
131
- </template>
132
- <template #suggestions>
133
- <template v-if="loadingSuggestions">
134
- <gl-loading-icon />
135
- </template>
136
- <template v-else>
137
- <gl-filtered-search-suggestion :key="user.id" v-for="user in users" :value="user.username">
138
- <div class="gl-display-flex">
139
- <gl-avatar :size="32" :entity-name="user.username" />
140
- <div>
141
- <p class="gl-m-0">{{ user.name }}</p>
142
- <p class="gl-m-0">@{{ user.username }}</p>
143
- </div>
144
- </div>
145
- </gl-filtered-search-suggestion>
146
- </template>
147
- </template>
148
- </gl-filtered-search-token>
149
- `
150
- };
151
- const MilestoneToken = {
152
- props: ['value', 'active'],
153
- inheritAttrs: false,
154
-
155
- data() {
156
- return {
157
- loadingView: false,
158
- loadingSuggestions: false,
159
- milestones: []
160
- };
161
- },
162
-
163
- methods: {
164
- loadSuggestions() {
165
- this.loadingSuggestions = true;
166
- setTimeout(() => {
167
- this.loadingSuggestions = false;
168
- this.milestones = fakeMilestones;
169
- }, 2000);
170
- }
171
-
172
- },
173
- watch: {
174
- // eslint-disable-next-line func-names
175
- 'value.data': function () {
176
- if (this.active) {
177
- this.loadSuggestions();
178
- }
179
- },
180
- active: {
181
- immediate: true,
182
-
183
- handler(newValue) {
184
- if (newValue) {
185
- this.loadSuggestions();
186
- }
187
- }
188
-
189
- }
190
- },
191
- template: `
192
- <gl-filtered-search-token
193
- v-bind="{ ...this.$props, ...this.$attrs }"
194
- v-on="$listeners"
195
- >
196
- <template #suggestions>
197
- <gl-filtered-search-suggestion value="None">None</gl-filtered-search-suggestion>
198
- <gl-filtered-search-suggestion value="Any">Any</gl-filtered-search-suggestion>
199
- <gl-filtered-search-suggestion value="Upcoming">Upcoming</gl-filtered-search-suggestion>
200
- <gl-filtered-search-suggestion value="Started">Started</gl-filtered-search-suggestion>
201
- <gl-dropdown-divider v-if="loadingSuggestions || milestones.length" />
202
- <template v-if="loadingSuggestions">
203
- <gl-loading-icon />
204
- </template>
205
- <template v-else>
206
- <gl-filtered-search-suggestion :key="milestone.id" v-for="milestone in milestones"
207
- :value="milestone.name">
208
- {{ milestone.title }}
209
- </gl-filtered-search-suggestion>
210
- </template>
211
- </template>
212
- </gl-filtered-search-token>
213
- `
214
- };
215
- const LabelToken = {
216
- props: ['value', 'active'],
217
- inheritAttrs: false,
218
-
219
- data() {
220
- return {
221
- loadingView: false,
222
- loadingSuggestions: false,
223
- labels: [],
224
- activeLabel: null
225
- };
226
- },
227
-
228
- computed: {
229
- currentValue() {
230
- return this.value.data.toLowerCase();
231
- },
232
-
233
- containerStyle() {
234
- if (this.activeLabel) {
235
- const {
236
- color,
237
- text_color
238
- } = this.activeLabel;
239
- return {
240
- backgroundColor: color,
241
- color: text_color
242
- };
243
- }
244
-
245
- return {};
246
- }
247
-
248
- },
249
- methods: {
250
- loadView() {
251
- this.loadingView = true;
252
- setTimeout(() => {
253
- this.loadingView = false;
254
- this.activeLabel = fakeLabels.find(l => l.title === this.value.data);
255
- }, 100);
256
- },
257
-
258
- loadSuggestions() {
259
- this.loadingSuggestions = true;
260
- setTimeout(() => {
261
- this.loadingSuggestions = false;
262
- this.labels = fakeLabels;
263
- }, 2000);
264
- }
265
-
266
- },
267
- watch: {
268
- // eslint-disable-next-line func-names
269
- 'value.data': function () {
270
- if (this.active) {
271
- this.loadSuggestions();
272
- }
273
- },
274
- active: {
275
- immediate: true,
276
-
277
- handler(newValue) {
278
- if (!newValue) {
279
- this.loadView();
280
- } else {
281
- this.loadSuggestions();
282
- }
283
- }
284
-
285
- }
286
- },
287
- template: `
288
- <gl-filtered-search-token
289
- v-bind="{ ...this.$props, ...this.$attrs }"
290
- v-on="$listeners"
291
- >
292
- <template #view-token="{ inputValue, cssClasses, listeners }">
293
- <gl-token variant="search-value" :class="cssClasses" :style="containerStyle" v-on="listeners">
294
- {{ activeLabel ? activeLabel.title : inputValue }}
295
- </gl-token>
296
- </template>
297
- <template #suggestions>
298
- <gl-filtered-search-suggestion value="None">None</gl-filtered-search-suggestion>
299
- <gl-filtered-search-suggestion value="Any">Any</gl-filtered-search-suggestion>
300
- <gl-dropdown-divider v-if="loadingSuggestions || labels.length" />
301
- <template v-if="loadingSuggestions">
302
- <gl-loading-icon />
303
- </template>
304
- <template v-else>
305
- <gl-filtered-search-suggestion :key="label.id" v-for="label in labels" :value="label.title">
306
- <div class="d-flex">
307
- <span
308
- :style="{ backgroundColor: label.color, height: '16px', width: '16px' }"
309
- class="d-inline-block mr-2"
310
- ></span>
311
- {{ label.title }}
312
- </div>
313
- </gl-filtered-search-suggestion>
314
- </template>
315
- </template>
316
- </gl-filtered-search-token>
317
- `
318
- };
319
- const tokens = [{
320
- type: 'author',
321
- icon: 'pencil',
322
- title: 'Author',
323
- dataType: 'user',
324
- unique: true,
325
- token: UserToken
326
- }, {
327
- type: 'user',
328
- icon: 'user',
329
- title: 'Assignee',
330
- dataType: 'user',
331
- token: UserToken
332
- }, {
333
- type: 'milestone',
334
- icon: 'clock',
335
- title: 'Milestone',
336
- unique: true,
337
- token: MilestoneToken
338
- }, {
339
- type: 'label',
340
- icon: 'labels',
341
- title: 'Label',
342
- token: LabelToken
343
- }, {
344
- type: 'weight',
345
- icon: 'weight',
346
- title: 'Weight',
347
- unique: true,
348
- token: 'gl-filtered-search-token'
349
- }, {
350
- type: 'confidential',
351
- icon: 'eye-slash',
352
- title: 'Confidential',
353
- unique: true,
354
- token: 'gl-filtered-search-token',
355
- options: [{
356
- icon: 'eye-slash',
357
- value: 'Yes',
358
- title: 'Yes'
359
- }, {
360
- icon: 'eye',
361
- value: 'No',
362
- title: 'No'
363
- }]
364
- }];
365
- var script = {
366
- data() {
367
- return {
368
- tokens,
369
- value: [{
370
- type: 'author',
371
- value: {
372
- data: 'beta',
373
- operator: '='
374
- }
375
- }, {
376
- type: 'label',
377
- value: {
378
- data: 'Bug',
379
- operator: '='
380
- }
381
- }, 'raw text']
382
- };
383
- }
384
-
385
- };
386
-
387
- /* script */
388
- const __vue_script__ = script;
389
-
390
- /* template */
391
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('gl-filtered-search',{attrs:{"available-tokens":_vm.tokens,"show-friendly-text":true},model:{value:(_vm.value),callback:function ($$v) {_vm.value=$$v;},expression:"value"}})};
392
- var __vue_staticRenderFns__ = [];
393
-
394
- /* style */
395
- const __vue_inject_styles__ = undefined;
396
- /* scoped */
397
- const __vue_scope_id__ = undefined;
398
- /* module identifier */
399
- const __vue_module_identifier__ = undefined;
400
- /* functional template */
401
- const __vue_is_functional_template__ = false;
402
- /* style inject */
403
-
404
- /* style inject SSR */
405
-
406
- /* style inject shadow dom */
407
-
408
-
409
-
410
- const __vue_component__ = __vue_normalize__(
411
- { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },
412
- __vue_inject_styles__,
413
- __vue_script__,
414
- __vue_scope_id__,
415
- __vue_is_functional_template__,
416
- __vue_module_identifier__,
417
- false,
418
- undefined,
419
- undefined,
420
- undefined
421
- );
422
-
423
- export default __vue_component__;
@@ -1,91 +0,0 @@
1
- import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
2
-
3
- const testTokens = [{
4
- type: 'demotoken',
5
- title: 'Unique',
6
- icon: 'document',
7
- token: 'gl-filtered-search-token',
8
- operators: [{
9
- value: '=',
10
- description: 'is',
11
- default: 'true'
12
- }],
13
- options: [{
14
- icon: 'heart',
15
- title: 'heart',
16
- value: 1
17
- }, {
18
- icon: 'hook',
19
- title: 'hook',
20
- value: 2
21
- }],
22
- unique: true
23
- }];
24
- var script = {
25
- data() {
26
- return {
27
- tokens: testTokens,
28
- value: [],
29
- historyItems: [[{
30
- type: 'demotoken',
31
- value: {
32
- operator: '=',
33
- data: 1
34
- }
35
- }, 'item 1'], ['item 2', {
36
- type: 'demotoken',
37
- value: {
38
- operator: '=',
39
- data: 2
40
- }
41
- }]]
42
- };
43
- },
44
-
45
- methods: {
46
- isString(val) {
47
- return typeof val === 'string';
48
- }
49
-
50
- }
51
- };
52
-
53
- /* script */
54
- const __vue_script__ = script;
55
-
56
- /* template */
57
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_vm._v("\n "+_vm._s(_vm.value)+"\n "),_c('gl-filtered-search',{attrs:{"available-tokens":_vm.tokens,"history-items":_vm.historyItems},scopedSlots:_vm._u([{key:"history-item",fn:function(ref){
58
- var historyItem = ref.historyItem;
59
- return [_vm._l((historyItem),function(token,idx){return [(_vm.isString(token))?_c('span',{key:idx,staticClass:"gl-px-1"},[_vm._v(_vm._s(token))]):_c('span',{key:idx,staticClass:"gl-px-1"},[_c('strong',[_vm._v(_vm._s(token.type))]),_vm._v(" "+_vm._s(token.value.operator)+"\n "),_c('strong',[_vm._v(_vm._s(token.value.data))])])]})]}}]),model:{value:(_vm.value),callback:function ($$v) {_vm.value=$$v;},expression:"value"}})],1)};
60
- var __vue_staticRenderFns__ = [];
61
-
62
- /* style */
63
- const __vue_inject_styles__ = undefined;
64
- /* scoped */
65
- const __vue_scope_id__ = undefined;
66
- /* module identifier */
67
- const __vue_module_identifier__ = undefined;
68
- /* functional template */
69
- const __vue_is_functional_template__ = false;
70
- /* style inject */
71
-
72
- /* style inject SSR */
73
-
74
- /* style inject shadow dom */
75
-
76
-
77
-
78
- const __vue_component__ = __vue_normalize__(
79
- { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },
80
- __vue_inject_styles__,
81
- __vue_script__,
82
- __vue_scope_id__,
83
- __vue_is_functional_template__,
84
- __vue_module_identifier__,
85
- false,
86
- undefined,
87
- undefined,
88
- undefined
89
- );
90
-
91
- export default __vue_component__;
@@ -1,196 +0,0 @@
1
- import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
2
-
3
- const fakeUsers = [{
4
- id: 1,
5
- name: 'User Alpha',
6
- username: 'alpha'
7
- }, {
8
- id: 2,
9
- name: 'User Beta',
10
- username: 'beta'
11
- }, {
12
- id: 3,
13
- name: 'User Gamma',
14
- username: 'gamma'
15
- }, {
16
- id: 4,
17
- name: 'User Delta',
18
- username: 'delta'
19
- }, {
20
- id: 5,
21
- name: 'User Epsilon',
22
- username: 'epsilon'
23
- }];
24
- const UserToken = {
25
- props: ['value', 'active', 'config'],
26
- inheritAttrs: false,
27
-
28
- data() {
29
- return {
30
- users: fakeUsers,
31
- selectedUsernames: this.value.data ? this.value.data.split(',') : [],
32
- activeUser: null
33
- };
34
- },
35
-
36
- computed: {
37
- filteredUsers() {
38
- return this.users.filter(user => user.username.includes(this.value.data));
39
- },
40
-
41
- selectedUsers() {
42
- return this.config.multiSelect ? this.users.filter(user => this.selectedUsernames.includes(user.username)) : this.users.filter(user => user.username === this.activeUser);
43
- }
44
-
45
- },
46
- methods: {
47
- loadView() {
48
- this.activeUser = fakeUsers.find(u => u.username === this.value.data);
49
- },
50
-
51
- loadSuggestions() {
52
- this.users = fakeUsers;
53
- },
54
-
55
- handleSelect(username) {
56
- if (!this.config.multiSelect) {
57
- return;
58
- }
59
-
60
- if (this.selectedUsernames.includes(username)) {
61
- this.selectedUsernames = this.selectedUsernames.filter(user => user !== username);
62
- } else {
63
- this.selectedUsernames.push(username);
64
- }
65
- },
66
-
67
- isLastUser(index) {
68
- return index === this.selectedUsers.length - 1;
69
- }
70
-
71
- },
72
- watch: {
73
- // eslint-disable-next-line func-names
74
- 'value.data': function () {
75
- if (this.active) {
76
- this.loadSuggestions();
77
- }
78
- },
79
- active: {
80
- immediate: true,
81
-
82
- handler(newValue) {
83
- if (!newValue) {
84
- this.loadView();
85
- } else {
86
- this.loadSuggestions();
87
- }
88
- }
89
-
90
- }
91
- },
92
- template: `
93
- <gl-filtered-search-token
94
- v-bind="{ ...this.$props, ...this.$attrs }"
95
- v-on="$listeners"
96
- :multi-select-values="selectedUsernames"
97
- @select="handleSelect"
98
- >
99
- <template #view="{ inputValue }">
100
- <template v-for="(user, index) in selectedUsers">
101
- <gl-avatar :size="16" :entity-name="user.username" shape="circle" />
102
- {{ user.name }}
103
- <span v-if="!isLastUser(index)" class="gl-mx-2">,&nbsp;</span>
104
- </template>
105
- </template>
106
- <template #suggestions>
107
- <gl-filtered-search-suggestion :key="user.id" v-for="user in filteredUsers" :value="user.username">
108
- <div class="gl-display-flex gl-align-items-center">
109
- <gl-icon
110
- v-if="config.multiSelect"
111
- name="check"
112
- class="gl-mr-3 gl-text-gray-700"
113
- :class="{ 'gl-visibility-hidden': !selectedUsernames.includes(user.username) }"
114
- />
115
- <gl-avatar :size="32" :entity-name="user.username" />
116
- <div>
117
- <p class="gl-m-0">{{ user.name }}</p>
118
- <p class="gl-m-0">@{{ user.username }}</p>
119
- </div>
120
- </div>
121
- </gl-filtered-search-suggestion>
122
- </template>
123
- </gl-filtered-search-token>
124
- `
125
- };
126
- const tokens = [{
127
- type: 'assignee',
128
- icon: 'user',
129
- title: 'Assignee',
130
- token: UserToken,
131
- operators: [{
132
- value: '=',
133
- description: 'is',
134
- default: 'true'
135
- }, {
136
- value: '!=',
137
- description: 'is not one of'
138
- }, {
139
- value: '||',
140
- description: 'is one of'
141
- }],
142
- multiSelect: true
143
- }];
144
- var script = {
145
- data() {
146
- return {
147
- tokens,
148
- value: [{
149
- type: 'assignee',
150
- value: {
151
- data: 'alpha,beta',
152
- operator: '='
153
- }
154
- }]
155
- };
156
- }
157
-
158
- };
159
-
160
- /* script */
161
- const __vue_script__ = script;
162
-
163
- /* template */
164
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('gl-filtered-search',{attrs:{"available-tokens":_vm.tokens,"show-friendly-text":true},model:{value:(_vm.value),callback:function ($$v) {_vm.value=$$v;},expression:"value"}})};
165
- var __vue_staticRenderFns__ = [];
166
-
167
- /* style */
168
- const __vue_inject_styles__ = undefined;
169
- /* scoped */
170
- const __vue_scope_id__ = undefined;
171
- /* module identifier */
172
- const __vue_module_identifier__ = undefined;
173
- /* functional template */
174
- const __vue_is_functional_template__ = false;
175
- /* style inject */
176
-
177
- /* style inject SSR */
178
-
179
- /* style inject shadow dom */
180
-
181
-
182
-
183
- const __vue_component__ = __vue_normalize__(
184
- { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },
185
- __vue_inject_styles__,
186
- __vue_script__,
187
- __vue_scope_id__,
188
- __vue_is_functional_template__,
189
- __vue_module_identifier__,
190
- false,
191
- undefined,
192
- undefined,
193
- undefined
194
- );
195
-
196
- export default __vue_component__;