@gitlab/ui 32.41.0 → 32.43.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/components/base/form/form_group/examples/form_group/form_group.validation.example.js +3 -3
  3. package/dist/components/base/token_selector/token_selector.documentation.js +2 -106
  4. package/dist/components/base/token_selector/token_selector.js +85 -1
  5. package/dist/components/base/tooltip/tooltip.documentation.js +2 -6
  6. package/dist/components/charts/area/area.js +1 -1
  7. package/dist/components/charts/discrete_scatter/discrete_scatter.js +1 -1
  8. package/dist/components/charts/line/line.js +1 -1
  9. package/dist/components/regions/empty_state/empty_state.js +1 -1
  10. package/dist/utility_classes.css +1 -1
  11. package/dist/utility_classes.css.map +1 -1
  12. package/documentation/documented_stories.js +2 -0
  13. package/package.json +13 -13
  14. package/src/components/base/accordion/accordion.spec.js +0 -4
  15. package/src/components/base/accordion/accordion_item.spec.js +0 -4
  16. package/src/components/base/alert/alert.spec.js +0 -4
  17. package/src/components/base/avatar_labeled/avatar_labeled.spec.js +0 -2
  18. package/src/components/base/avatars_inline/avatars_inline.spec.js +0 -2
  19. package/src/components/base/badge/badge.spec.js +0 -2
  20. package/src/components/base/broadcast_message/broadcast_message.spec.js +0 -4
  21. package/src/components/base/button/button.spec.js +0 -5
  22. package/src/components/base/card/card.spec.js +0 -5
  23. package/src/components/base/carousel/carousel.spec.js +0 -4
  24. package/src/components/base/collapse/collapse.spec.js +0 -4
  25. package/src/components/base/datepicker/datepicker.spec.js +0 -4
  26. package/src/components/base/daterange_picker/daterange_picker.spec.js +0 -5
  27. package/src/components/base/drawer/drawer.spec.js +0 -4
  28. package/src/components/base/dropdown/dropdown.spec.js +0 -2
  29. package/src/components/base/dropdown/dropdown_item.spec.js +0 -2
  30. package/src/components/base/filtered_search/filtered_search.spec.js +0 -10
  31. package/src/components/base/filtered_search/filtered_search_suggestion.spec.js +0 -5
  32. package/src/components/base/filtered_search/filtered_search_suggestion_list.spec.js +0 -5
  33. package/src/components/base/filtered_search/filtered_search_term.spec.js +0 -5
  34. package/src/components/base/filtered_search/filtered_search_token.spec.js +0 -5
  35. package/src/components/base/form/form_checkbox_tree/form_checkbox_tree.spec.js +0 -5
  36. package/src/components/base/form/form_combobox/form_combobox.spec.js +0 -4
  37. package/src/components/base/form/form_group/examples/form_group/form_group.validation.example.vue +3 -3
  38. package/src/components/base/form/form_group/form_group.stories.js +3 -3
  39. package/src/components/base/form/form_input/form_input.spec.js +0 -5
  40. package/src/components/base/form/form_input_group/form_input_group.spec.js +0 -4
  41. package/src/components/base/form/form_radio/form_radio.spec.js +0 -4
  42. package/src/components/base/form/form_radio_group/form_radio_group.spec.js +0 -4
  43. package/src/components/base/form/form_select/form_select.spec.js +0 -5
  44. package/src/components/base/form/form_textarea/form_textarea.spec.js +0 -5
  45. package/src/components/base/icon/icon.spec.js +0 -2
  46. package/src/components/base/infinite_scroll/infinite_scroll.spec.js +0 -1
  47. package/src/components/base/keyset_pagination/keyset_pagination.spec.js +0 -5
  48. package/src/components/base/label/label.spec.js +0 -4
  49. package/src/components/base/link/link.spec.js +0 -5
  50. package/src/components/base/loading_icon/loading_icon.spec.js +0 -4
  51. package/src/components/base/modal/modal.spec.js +0 -1
  52. package/src/components/base/nav/nav.spec.js +0 -4
  53. package/src/components/base/nav/nav_item.spec.js +0 -4
  54. package/src/components/base/nav/nav_item_dropdown.spec.js +0 -4
  55. package/src/components/base/paginated_list/paginated_list.spec.js +0 -6
  56. package/src/components/base/pagination/pagination.spec.js +0 -1
  57. package/src/components/base/path/path.spec.js +0 -5
  58. package/src/components/base/popover/popover.spec.js +0 -5
  59. package/src/components/base/search_box_by_click/search_box_by_click.spec.js +0 -4
  60. package/src/components/base/search_box_by_type/search_box_by_type.spec.js +0 -5
  61. package/src/components/base/segmented_control/segmented_control.spec.js +0 -4
  62. package/src/components/base/skeleton_loader/skeleton_loader.spec.js +0 -5
  63. package/src/components/base/sorting/sorting.spec.js +0 -4
  64. package/src/components/base/sorting/sorting_item.spec.js +0 -4
  65. package/src/components/base/tabs/tabs/scrollable_tabs.spec.js +0 -5
  66. package/src/components/base/toggle/toggle.spec.js +0 -4
  67. package/src/components/base/token/token.spec.js +0 -4
  68. package/src/components/base/token_selector/token_container.spec.js +0 -2
  69. package/src/components/base/token_selector/token_selector.documentation.js +0 -137
  70. package/src/components/base/token_selector/token_selector.md +0 -6
  71. package/src/components/base/token_selector/token_selector.spec.js +0 -5
  72. package/src/components/base/token_selector/token_selector.stories.js +96 -113
  73. package/src/components/base/token_selector/token_selector.vue +89 -1
  74. package/src/components/base/token_selector/token_selector_dropdown.spec.js +0 -5
  75. package/src/components/base/tooltip/tooltip.documentation.js +0 -3
  76. package/src/components/base/tooltip/tooltip.md +3 -5
  77. package/src/components/base/tooltip/tooltip.spec.js +0 -5
  78. package/src/components/base/tooltip/tooltip.stories.js +49 -25
  79. package/src/components/base/tooltip/tooltip.vue +1 -0
  80. package/src/components/charts/area/area.spec.js +8 -24
  81. package/src/components/charts/area/area.vue +9 -12
  82. package/src/components/charts/bar/bar.spec.js +4 -11
  83. package/src/components/charts/chart/chart.spec.js +0 -4
  84. package/src/components/charts/column/column_chart.spec.js +0 -4
  85. package/src/components/charts/discrete_scatter/discrete_scatter.stories.js +1 -0
  86. package/src/components/charts/discrete_scatter/discrete_scatter.vue +5 -8
  87. package/src/components/charts/gauge/gauge.spec.js +2 -24
  88. package/src/components/charts/heatmap/heatmap.spec.js +6 -23
  89. package/src/components/charts/legend/legend.spec.js +8 -14
  90. package/src/components/charts/line/line.spec.js +19 -30
  91. package/src/components/charts/line/line.vue +3 -2
  92. package/src/components/charts/single_stat/single_stat.spec.js +0 -4
  93. package/src/components/charts/sparkline/sparkline.spec.js +9 -15
  94. package/src/components/charts/stacked_column/stacked_column.spec.js +0 -1
  95. package/src/components/regions/empty_state/empty_state.vue +8 -2
  96. package/src/components/shared_components/clear_icon_button/clear_icon_button.spec.js +0 -4
  97. package/src/components/shared_components/close_button/close_button.spec.js +0 -4
  98. package/src/components/utilities/friendly_wrap/friendly_wrap.spec.js +0 -4
  99. package/src/components/utilities/intersection_observer/intersection_observer.spec.js +1 -1
  100. package/src/components/utilities/sprintf/sprintf.spec.js +0 -4
  101. package/src/components/utilities/truncate/truncate.spec.js +10 -15
  102. package/src/directives/hover_load/hover_load.spec.js +0 -1
  103. package/src/directives/outside/outside.spec.js +0 -4
  104. package/src/directives/resize_observer/resize_observer.spec.js +0 -4
  105. package/src/directives/safe_html/safe_html.spec.js +0 -4
  106. package/src/directives/safe_link/safe_link.spec.js +0 -5
  107. package/src/scss/utilities.scss +26 -0
  108. package/src/scss/utility-mixins/sizing.scss +6 -0
  109. package/src/scss/utility-mixins/spacing.scss +4 -0
  110. package/src/scss/utility-mixins/z-index.scss +4 -0
  111. package/dist/components/base/token_selector/examples/index.js +0 -19
  112. package/dist/components/base/token_selector/examples/token_selector.user_defined_tokens.example.js +0 -48
  113. package/dist/components/base/token_selector/examples/token_selector.users.example.js +0 -202
  114. package/dist/components/base/tooltip/examples/index.js +0 -31
  115. package/dist/components/base/tooltip/examples/tooltip.directive_bottom.example.js +0 -38
  116. package/dist/components/base/tooltip/examples/tooltip.directive_default.example.js +0 -38
  117. package/dist/components/base/tooltip/examples/tooltip.directive_left.example.js +0 -38
  118. package/dist/components/base/tooltip/examples/tooltip.directive_right.example.js +0 -38
  119. package/src/components/base/token_selector/examples/index.js +0 -22
  120. package/src/components/base/token_selector/examples/token_selector.user_defined_tokens.example.vue +0 -17
  121. package/src/components/base/token_selector/examples/token_selector.users.example.vue +0 -212
  122. package/src/components/base/tooltip/examples/index.js +0 -36
  123. package/src/components/base/tooltip/examples/tooltip.directive_bottom.example.vue +0 -7
  124. package/src/components/base/tooltip/examples/tooltip.directive_default.example.vue +0 -5
  125. package/src/components/base/tooltip/examples/tooltip.directive_left.example.vue +0 -7
  126. package/src/components/base/tooltip/examples/tooltip.directive_right.example.vue +0 -7
@@ -16,11 +16,6 @@ describe('search box by type component', () => {
16
16
  const findClearIcon = () => wrapper.findComponent(ClearIcon);
17
17
  const findInput = () => wrapper.findComponent({ ref: 'input' });
18
18
 
19
- afterEach(() => {
20
- wrapper.destroy();
21
- wrapper = null;
22
- });
23
-
24
19
  describe('clear icon component', () => {
25
20
  beforeEach(() => {
26
21
  createComponent({ value: 'somevalue' });
@@ -41,10 +41,6 @@ describe('segmented control', () => {
41
41
  consoleWarnSpy.mockClear();
42
42
  });
43
43
 
44
- afterEach(() => {
45
- wrapper.destroy();
46
- });
47
-
48
44
  const warning = 'Segmented button should always have valid option selected';
49
45
  describe('with options and valid value', () => {
50
46
  beforeEach(() => {
@@ -11,11 +11,6 @@ describe('GlSkeletonLoader', () => {
11
11
  wrapper = shallowMount(GlSkeletonLoader, options);
12
12
  };
13
13
 
14
- afterEach(() => {
15
- wrapper.destroy();
16
- wrapper = null;
17
- });
18
-
19
14
  describe('when default skeleton is used', () => {
20
15
  it('adds `gl-w-full` and `gl-h-full` CSS classes', () => {
21
16
  createComponent();
@@ -47,10 +47,6 @@ describe('sorting component', () => {
47
47
  });
48
48
  };
49
49
 
50
- afterEach(() => {
51
- wrapper.destroy();
52
- });
53
-
54
50
  it('should display default text in dropdown', () => {
55
51
  createComponent();
56
52
 
@@ -27,10 +27,6 @@ describe('sorting item component', () => {
27
27
  });
28
28
  };
29
29
 
30
- afterEach(() => {
31
- wrapper.destroy();
32
- });
33
-
34
30
  it('should render and display the supplied text', () => {
35
31
  createComponent();
36
32
 
@@ -32,11 +32,6 @@ describe('GlScrollableTabs', () => {
32
32
  inputSpy = jest.fn();
33
33
  });
34
34
 
35
- afterEach(() => {
36
- wrapper.destroy();
37
- wrapper = null;
38
- });
39
-
40
35
  const findScrollRightButton = () => wrapper.find('[aria-label="Scroll right"]');
41
36
  const findScrollLeftButton = () => wrapper.find('[aria-label="Scroll left"]');
42
37
  const findNav = () => wrapper.find(`.${NAV_CLASS}`);
@@ -22,10 +22,6 @@ describe('toggle', () => {
22
22
  const findButton = () => wrapper.find('button');
23
23
  const findHelpElement = () => wrapper.find('[data-testid="toggle-help"]');
24
24
 
25
- afterEach(() => {
26
- wrapper.destroy();
27
- });
28
-
29
25
  it('has role=switch', () => {
30
26
  createWrapper();
31
27
 
@@ -17,10 +17,6 @@ describe('Token component', () => {
17
17
  propsData,
18
18
  });
19
19
 
20
- afterEach(() => {
21
- wrapper.destroy();
22
- });
23
-
24
20
  it('emits close when "x" is clicked', () => {
25
21
  wrapper = createComponent();
26
22
  findIcon(wrapper).vm.$emit('click');
@@ -50,8 +50,6 @@ describe('GlTokenContainer', () => {
50
50
  const blurActiveElement = () => document.activeElement?.blur?.();
51
51
 
52
52
  afterEach(() => {
53
- wrapper.destroy();
54
- wrapper = null;
55
53
  blurActiveElement();
56
54
  });
57
55
 
@@ -1,142 +1,5 @@
1
- import examples from './examples';
2
1
  import * as description from './token_selector.md';
3
2
 
4
3
  export default {
5
4
  description,
6
- examples,
7
- propsInfo: {
8
- dropdownItems: {
9
- additionalInfo: 'Items to display in dropdown',
10
- },
11
- selectedTokens: {
12
- additionalInfo:
13
- 'Tokens that are selected. This prop will automatically be added when using `v-model`',
14
- },
15
- allowUserDefinedTokens: {
16
- additionalInfo: 'Should users be allowed to add tokens that are not in `dropdown-items`',
17
- },
18
- loading: {
19
- additionalInfo: 'Dropdown items are loading, can be used when requesting new dropdown items',
20
- },
21
- hideDropdownWithNoItems: {
22
- additionalInfo:
23
- 'Hide the dropdown if `dropdown-items` is empty. Will show `no-results-content` slot if this is `false`',
24
- },
25
- containerClass: {
26
- additionalInfo:
27
- 'CSS classes to add to the main token selector container (`.gl-token-selector`)',
28
- },
29
- menuClass: {
30
- additionalInfo: 'CSS classes to add to dropdown menu `ul` element',
31
- },
32
- textInputAttrs: {
33
- additionalInfo:
34
- 'HTML attributes to add to the text input. Helpful for adding `data-testid` and `data-qa-selector` attributes',
35
- },
36
- state: {
37
- additionalInfo:
38
- 'Controls the validation state appearance of the component. `true` for valid, `false` for invalid, or `null` for no validation state',
39
- },
40
- },
41
- slots: [
42
- {
43
- name: 'no-results-content',
44
- description:
45
- 'Content to display when `dropdown-items` is empty and `allow-user-defined-tokens` is `false`',
46
- default: 'No matches found',
47
- scopedProps: '',
48
- },
49
- {
50
- name: 'user-defined-token-content',
51
- description: 'Content to display when adding a user defined token',
52
- default: 'Add "{{ inputText }}"',
53
- scopedProps: 'inputText (String)',
54
- },
55
- {
56
- name: 'token-content',
57
- description:
58
- 'Content to pass to the token component slot. Can be used to add an avatar to the token',
59
- default: '{{ token.name }}',
60
- scopedProps: 'token (Object)',
61
- },
62
- {
63
- name: 'dropdown-item-content',
64
- description: 'Dropdown item content',
65
- default: '{{ dropdownItem.name }}',
66
- scopedProps: 'dropdownItem (Object)',
67
- },
68
- {
69
- name: 'dropdown-footer',
70
- description:
71
- 'Content to add to the bottom of the dropdown. Can be used in conjunction with `gl-intersection-observer` to load more items as the user scrolls',
72
- },
73
- {
74
- name: 'loading-content',
75
- description: 'Content to display when `loading` prop is `true`',
76
- default: 'Searching...',
77
- scopedProps: '',
78
- },
79
- ],
80
- events: [
81
- {
82
- event: 'text-input',
83
- args: [
84
- {
85
- arg: 'inputText',
86
- description: '(String)',
87
- },
88
- ],
89
- description: 'Fired when user types in the token selector',
90
- },
91
- {
92
- event: 'input',
93
- args: [
94
- {
95
- arg: 'selectedTokens',
96
- description: '(Array)',
97
- },
98
- ],
99
- description: 'Fired when a token is added or removed',
100
- },
101
- {
102
- event: 'focus',
103
- args: [
104
- {
105
- arg: 'event',
106
- description: '(FocusEvent)',
107
- },
108
- ],
109
- description: 'Fired when the token selector is focused',
110
- },
111
- {
112
- event: 'blur',
113
- args: [
114
- {
115
- arg: 'event',
116
- description: '(FocusEvent)',
117
- },
118
- ],
119
- description: 'Fired when the token selector is blurred',
120
- },
121
- {
122
- event: 'token-add',
123
- args: [
124
- {
125
- arg: 'token',
126
- description: '(Object)',
127
- },
128
- ],
129
- description: 'Fired when a token is added',
130
- },
131
- {
132
- event: 'token-remove',
133
- args: [
134
- {
135
- arg: 'token',
136
- description: '(Object)',
137
- },
138
- ],
139
- description: 'Fired when a token is removed',
140
- },
141
- ],
142
5
  };
@@ -1,9 +1,3 @@
1
- # GlTokenSelector
2
-
3
- <!-- STORY -->
4
-
5
- ## Usage
6
-
7
1
  Choose from a provided list of tokens or add a user defined token.
8
2
 
9
3
  ```html
@@ -96,11 +96,6 @@ describe('GlTokenSelector', () => {
96
96
  }
97
97
  });
98
98
 
99
- afterEach(() => {
100
- wrapper.destroy();
101
- wrapper = null;
102
- });
103
-
104
99
  describe('props', () => {
105
100
  describe('dropdownItems', () => {
106
101
  it('renders dropdown items', () => {
@@ -1,130 +1,113 @@
1
- import { withKnobs, object, boolean, radios } from '@storybook/addon-knobs';
2
- import { documentedStoriesOf } from '../../../../documentation/documented_stories';
3
1
  import readme from './token_selector.md';
4
2
  import GlTokenSelector from './token_selector.vue';
5
3
 
6
- const components = {
7
- GlTokenSelector,
8
- };
9
-
10
- const generateProps = () => {
11
- const stateRadiosBoolean = (value) => {
12
- switch (value) {
13
- case 'null':
14
- return null;
15
- case 'true':
16
- return true;
17
- case 'false':
18
- return false;
19
- default:
20
- return null;
21
- }
22
- };
4
+ const template = `
5
+ <div>
6
+ <gl-token-selector
7
+ v-model="selectedTokens"
8
+ v-bind="$props"
9
+ @text-input="handleTextInput"
10
+ @focus="handleFocus" />
11
+ {{ selectedTokens }}
12
+ </div>
13
+ `;
23
14
 
24
- return {
25
- dropdownItems: {
26
- default: object('Dropdown items', [
27
- {
28
- id: 1,
29
- name: 'Vue.js',
30
- },
31
- {
32
- id: 2,
33
- name: 'Ruby On Rails',
34
- class: 'gl-text-white! gl-bg-data-viz-magenta-950!',
35
- },
36
- {
37
- id: 3,
38
- name: 'GraphQL',
39
- },
40
- {
41
- id: 4,
42
- name: 'Redis',
43
- class: 'gl-text-white! gl-bg-data-viz-green-700!',
44
- },
45
- {
46
- id: 5,
47
- name: 'CSS',
48
- class: 'gl-text-red-500!',
49
- style: { backgroundColor: '#97acff' },
50
- },
51
- ]),
15
+ const generateProps = () => ({
16
+ dropdownItems: [
17
+ {
18
+ id: 1,
19
+ name: 'Vue.js',
52
20
  },
53
- allowUserDefinedTokens: {
54
- default: boolean('Allow user defined tokens', false),
21
+ {
22
+ id: 2,
23
+ name: 'Ruby On Rails',
24
+ class: 'gl-text-white! gl-bg-data-viz-magenta-950!',
55
25
  },
56
- loading: {
57
- default: boolean('Loading', false),
26
+ {
27
+ id: 3,
28
+ name: 'GraphQL',
58
29
  },
59
- hideDropdownWithNoItems: {
60
- default: boolean('Hide dropdown with no items', false),
30
+ {
31
+ id: 4,
32
+ name: 'Redis',
33
+ class: 'gl-text-white! gl-bg-data-viz-green-700!',
61
34
  },
62
- state: {
63
- default: stateRadiosBoolean(
64
- radios('Validation state', { true: 'true', false: 'false', null: 'null' }, 'null')
65
- ),
35
+ {
36
+ id: 5,
37
+ name: 'CSS',
38
+ class: 'gl-text-red-500!',
39
+ style: { backgroundColor: '#97acff' },
66
40
  },
67
- };
68
- };
41
+ ],
42
+ });
69
43
 
70
- documentedStoriesOf('base/token_selector', readme)
71
- .addDecorator(withKnobs)
72
- .addParameters({ storyshots: false })
73
- .add('default', () => ({
74
- props: generateProps(),
75
- data() {
76
- return {
77
- filteredDropdownItems: [],
78
- inputText: '',
79
- selectedTokens: [
80
- {
81
- id: 1,
82
- name: 'Vue.js',
83
- },
84
- ],
85
- };
86
- },
87
- components,
88
- mounted() {
89
- document.querySelector('.gl-token-selector input[type="text"]').focus();
90
- },
91
- methods: {
92
- handleTextInput(value) {
93
- this.inputText = value;
44
+ const Template = (args, { argTypes }) => ({
45
+ components: { GlTokenSelector },
46
+ props: Object.keys(argTypes),
47
+ template,
48
+ mounted() {
49
+ document.querySelector('.gl-token-selector input[type="text"]').focus();
50
+ },
51
+ data() {
52
+ return {
53
+ filteredDropdownItems: [],
54
+ inputText: '',
55
+ selectedTokens: [
56
+ {
57
+ id: 1,
58
+ name: 'Vue.js',
59
+ },
60
+ ],
61
+ };
62
+ },
63
+ methods: {
64
+ handleTextInput(value) {
65
+ this.inputText = value;
94
66
 
95
- if (this.inputText === '') {
96
- this.filteredDropdownItems = this.dropdownItems;
67
+ if (this.inputText === '') {
68
+ this.filteredDropdownItems = this.dropdownItems;
97
69
 
98
- return;
99
- }
70
+ return;
71
+ }
100
72
 
73
+ this.filterDropdownItems();
74
+ },
75
+ handleFocus() {
76
+ if (this.inputText !== '') {
101
77
  this.filterDropdownItems();
78
+ } else {
79
+ this.filteredDropdownItems = this.dropdownItems;
80
+ }
81
+ },
82
+ filterDropdownItems() {
83
+ this.filteredDropdownItems = this.dropdownItems.filter((dropdownItem) => {
84
+ return dropdownItem.name.toLowerCase().includes(this.inputText.toLowerCase());
85
+ });
86
+ },
87
+ },
88
+ });
89
+
90
+ export const Default = Template.bind({});
91
+ Default.parameters = { storyshots: { disable: true } };
92
+ Default.args = generateProps();
93
+
94
+ export default {
95
+ title: 'base/token_selector',
96
+ component: GlTokenSelector,
97
+ parameters: {
98
+ knobs: { disable: true },
99
+ docs: {
100
+ description: {
101
+ component: readme,
102
102
  },
103
- handleFocus() {
104
- if (this.inputText !== '') {
105
- this.filterDropdownItems();
106
- } else {
107
- this.filteredDropdownItems = this.dropdownItems;
108
- }
109
- },
110
- filterDropdownItems() {
111
- this.filteredDropdownItems = this.dropdownItems.filter((dropdownItem) => {
112
- return dropdownItem.name.toLowerCase().includes(this.inputText.toLowerCase());
113
- });
103
+ },
104
+ },
105
+ argTypes: {
106
+ state: {
107
+ control: {
108
+ type: 'radio',
109
+ options: [true, false, null],
114
110
  },
115
111
  },
116
- template: `
117
- <div>
118
- <gl-token-selector
119
- v-model="selectedTokens"
120
- :dropdown-items="filteredDropdownItems"
121
- :allow-user-defined-tokens="allowUserDefinedTokens"
122
- :loading="loading"
123
- :hide-dropdown-with-no-items="hideDropdownWithNoItems"
124
- :state="state"
125
- @text-input="handleTextInput"
126
- @focus="handleFocus" />
127
- {{ selectedTokens }}
128
- </div>
129
- `,
130
- }));
112
+ },
113
+ };