@gitlab/ui 36.7.0 → 37.1.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.
Files changed (103) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/components/base/alert/alert.js +1 -11
  3. package/dist/components/base/card/card.js +1 -1
  4. package/dist/components/base/drawer/drawer.documentation.js +1 -1
  5. package/dist/components/base/pagination/pagination.js +1 -0
  6. package/dist/components/base/path/data.js +2 -1
  7. package/dist/components/base/path/path.js +5 -4
  8. package/dist/components/base/tabs/tab/tab.js +4 -0
  9. package/dist/components/base/tabs/tabs/tabs.documentation.js +2 -14
  10. package/dist/components/base/tabs/tabs/tabs.js +8 -0
  11. package/dist/components/charts/area/area.documentation.js +1 -7
  12. package/dist/components/charts/legend/legend.js +12 -0
  13. package/dist/components/charts/line/line.documentation.js +2 -5
  14. package/dist/index.css +2 -2
  15. package/dist/index.css.map +1 -1
  16. package/dist/utils/stories_utils.js +13 -1
  17. package/documentation/components_documentation.js +0 -2
  18. package/documentation/documented_stories.js +5 -0
  19. package/package.json +3 -3
  20. package/src/components/base/accordion/accordion.stories.js +2 -1
  21. package/src/components/base/alert/alert.scss +0 -38
  22. package/src/components/base/alert/alert.spec.js +0 -1
  23. package/src/components/base/alert/alert.stories.js +0 -8
  24. package/src/components/base/alert/alert.vue +30 -41
  25. package/src/components/base/badge/badge.stories.js +4 -24
  26. package/src/components/base/card/card.vue +2 -2
  27. package/src/components/base/daterange_picker/daterange_picker.stories.js +10 -35
  28. package/src/components/base/drawer/drawer.documentation.js +1 -1
  29. package/src/components/base/icon/icon.stories.js +2 -5
  30. package/src/components/base/pagination/pagination.spec.js +3 -0
  31. package/src/components/base/pagination/pagination.vue +1 -0
  32. package/src/components/base/path/__snapshots__/path.spec.js.snap +6 -0
  33. package/src/components/base/path/data.js +1 -0
  34. package/src/components/base/path/path.scss +6 -1
  35. package/src/components/base/path/path.spec.js +8 -0
  36. package/src/components/base/path/path.vue +10 -4
  37. package/src/components/base/tabs/tab/tab.vue +4 -0
  38. package/src/components/base/tabs/tabs/tabs.documentation.js +0 -12
  39. package/src/components/base/tabs/tabs/tabs.md +2 -7
  40. package/src/components/base/tabs/tabs/tabs.stories.js +221 -161
  41. package/src/components/base/tabs/tabs/tabs.vue +6 -0
  42. package/src/components/base/toggle/toggle.stories.js +2 -3
  43. package/src/components/charts/area/area.documentation.js +0 -5
  44. package/src/components/charts/area/area.stories.js +127 -127
  45. package/src/components/charts/bar/bar.stories.js +8 -5
  46. package/src/components/charts/heatmap/heatmap.stories.js +13 -16
  47. package/src/components/charts/legend/legend.stories.js +22 -15
  48. package/src/components/charts/legend/legend.vue +9 -0
  49. package/src/components/charts/line/line.documentation.js +0 -2
  50. package/src/components/charts/line/line.md +0 -2
  51. package/src/components/charts/line/line.stories.js +124 -113
  52. package/src/utils/stories_utils.js +6 -0
  53. package/src/utils/stories_utils.spec.js +18 -0
  54. package/dist/components/base/tabs/tab/examples/index.js +0 -13
  55. package/dist/components/base/tabs/tab/examples/tab.basic.example.js +0 -38
  56. package/dist/components/base/tabs/tab/tab.documentation.js +0 -18
  57. package/dist/components/base/tabs/tabs/examples/index.js +0 -60
  58. package/dist/components/base/tabs/tabs/examples/tabs.basic.example.js +0 -38
  59. package/dist/components/base/tabs/tabs/examples/tabs.contentless_tab.example.js +0 -38
  60. package/dist/components/base/tabs/tabs/examples/tabs.counterbadges.example.js +0 -38
  61. package/dist/components/base/tabs/tabs/examples/tabs.custom_title.example.js +0 -38
  62. package/dist/components/base/tabs/tabs/examples/tabs.disabled.example.js +0 -38
  63. package/dist/components/base/tabs/tabs/examples/tabs.justified.example.js +0 -38
  64. package/dist/components/base/tabs/tabs/examples/tabs.no_tabs.example.js +0 -38
  65. package/dist/components/base/tabs/tabs/examples/tabs.scrollable.example.js +0 -47
  66. package/dist/components/base/tabs/tabs/examples/tabs.styles_only.example.js +0 -38
  67. package/dist/components/charts/area/examples/area.basic.example.js +0 -45
  68. package/dist/components/charts/area/examples/area.basic_plus.example.js +0 -53
  69. package/dist/components/charts/area/examples/index.js +0 -19
  70. package/dist/components/charts/legend/examples/index.js +0 -22
  71. package/dist/components/charts/legend/examples/legend.basic.example.js +0 -93
  72. package/dist/components/charts/legend/examples/legend.toggled.example.js +0 -100
  73. package/dist/components/charts/legend/legend.documentation.js +0 -21
  74. package/dist/components/charts/line/examples/index.js +0 -19
  75. package/dist/components/charts/line/examples/line.basic.example.js +0 -45
  76. package/dist/components/charts/line/examples/line.series.example.js +0 -53
  77. package/src/components/base/tabs/tab/examples/index.js +0 -15
  78. package/src/components/base/tabs/tab/examples/tab.basic.example.vue +0 -5
  79. package/src/components/base/tabs/tab/tab.documentation.js +0 -16
  80. package/src/components/base/tabs/tab/tab.md +0 -3
  81. package/src/components/base/tabs/tab/tab.stories.js +0 -12
  82. package/src/components/base/tabs/tabs/examples/index.js +0 -72
  83. package/src/components/base/tabs/tabs/examples/tabs.basic.example.vue +0 -6
  84. package/src/components/base/tabs/tabs/examples/tabs.contentless_tab.example.vue +0 -17
  85. package/src/components/base/tabs/tabs/examples/tabs.counterbadges.example.vue +0 -28
  86. package/src/components/base/tabs/tabs/examples/tabs.custom_title.example.vue +0 -9
  87. package/src/components/base/tabs/tabs/examples/tabs.disabled.example.vue +0 -7
  88. package/src/components/base/tabs/tabs/examples/tabs.justified.example.vue +0 -6
  89. package/src/components/base/tabs/tabs/examples/tabs.no_tabs.example.vue +0 -8
  90. package/src/components/base/tabs/tabs/examples/tabs.scrollable.example.vue +0 -20
  91. package/src/components/base/tabs/tabs/examples/tabs.styles_only.example.vue +0 -22
  92. package/src/components/charts/area/area.md +0 -1
  93. package/src/components/charts/area/examples/area.basic.example.vue +0 -14
  94. package/src/components/charts/area/examples/area.basic_plus.example.vue +0 -25
  95. package/src/components/charts/area/examples/index.js +0 -22
  96. package/src/components/charts/legend/examples/index.js +0 -27
  97. package/src/components/charts/legend/examples/legend.basic.example.vue +0 -55
  98. package/src/components/charts/legend/examples/legend.toggled.example.vue +0 -60
  99. package/src/components/charts/legend/legend.documentation.js +0 -19
  100. package/src/components/charts/legend/legend.md +0 -0
  101. package/src/components/charts/line/examples/index.js +0 -22
  102. package/src/components/charts/line/examples/line.basic.example.vue +0 -14
  103. package/src/components/charts/line/examples/line.series.example.vue +0 -25
@@ -1,8 +1,36 @@
1
- import { withKnobs, boolean } from '@storybook/addon-knobs';
2
1
  import { range } from 'lodash';
3
- import { documentedStoriesOf } from '../../../../../documentation/documented_stories';
4
2
  import { GlTabs, GlTab, GlScrollableTabs } from '../../../../index';
5
- import docs from './tabs.md';
3
+ import readme from './tabs.md';
4
+
5
+ const components = {
6
+ GlTabs,
7
+ GlTab,
8
+ };
9
+
10
+ const defaultValue = (prop) => GlTabs.props[prop].default;
11
+
12
+ const generateProps = ({
13
+ justified = defaultValue('justified'),
14
+ actionPrimary = null,
15
+ actionSecondary = null,
16
+ actionTertiary = null,
17
+ } = {}) => ({
18
+ justified,
19
+ actionPrimary,
20
+ actionSecondary,
21
+ actionTertiary,
22
+ });
23
+
24
+ const wrap = (template) => `
25
+ <gl-tabs
26
+ :justified="justified"
27
+ :action-primary="actionPrimary"
28
+ :action-secondary="actionSecondary"
29
+ :action-tertiary="actionTertiary"
30
+ >
31
+ ${template}
32
+ </gl-tabs>
33
+ `;
6
34
 
7
35
  const ScrollableTabsGenerator = {
8
36
  components: {
@@ -33,167 +61,199 @@ const ScrollableTabsGenerator = {
33
61
  `,
34
62
  };
35
63
 
36
- const createBaseStory = () => ({
37
- components: {
38
- GlTabs,
39
- GlTab,
64
+ export const Default = (_args, { argTypes }) => ({
65
+ props: Object.keys(argTypes),
66
+ components,
67
+ template: wrap(`
68
+ <gl-tab title="Tab 1">
69
+ Tab panel 1
70
+ </gl-tab>
71
+ <gl-tab title="Tab 2">
72
+ Tab panel 2
73
+ </gl-tab>
74
+ <gl-tab title="Tab 3">
75
+ Tab panel 3
76
+ </gl-tab>
77
+ <gl-tab title="Tab 4">
78
+ Tab panel 4
79
+ </gl-tab>
80
+ <gl-tab title="Tab 5">
81
+ Tab panel 5
82
+ </gl-tab>
83
+ <gl-tab title="Tab 6">
84
+ Tab panel 6
85
+ </gl-tab>
86
+ <gl-tab title="Tab 7">
87
+ Tab panel 7
88
+ </gl-tab>
89
+ <gl-tab title="Tab 8">
90
+ Tab panel 8
91
+ </gl-tab>
92
+ <gl-tab title="Tab 9">
93
+ Tab panel 9
94
+ </gl-tab>
95
+ <gl-tab title="Tab 10">
96
+ Tab panel 10
97
+ </gl-tab>
98
+ <gl-tab title="Tab 11">
99
+ Tab panel 11
100
+ </gl-tab>
101
+ <gl-tab title="Tab 12">
102
+ Tab panel 12
103
+ </gl-tab>
104
+ <gl-tab title="Tab 13" query-param-value="thirteenth">
105
+ Tab panel 13
106
+ </gl-tab>
107
+ <gl-tab title="Tab 14">
108
+ Tab panel 14
109
+ </gl-tab>`),
110
+ });
111
+ Default.args = generateProps();
112
+
113
+ export const ContentlessTab = (_args, { argTypes }) => ({
114
+ props: Object.keys(argTypes),
115
+ components,
116
+ template: wrap(`
117
+ <gl-tab title="Regular tab">
118
+ <p>Regular tab content.</p>
119
+ <p>The contentless tab is not selectable, as it has no content. This is useful for displaying things that aren't really tabs after the list of tabs.</p>
120
+ </gl-tab>
121
+ <gl-tab title="Another tab">
122
+ <p>Another tab's content.</p>
123
+ </gl-tab>
124
+ <template #tabs-end>
125
+ <li class="gl-tab-nav-item">
126
+ Contentless tab
127
+ </li>
128
+ </template>`),
129
+ });
130
+
131
+ export const EmptyState = (_args, { argTypes }) => ({
132
+ props: Object.keys(argTypes),
133
+ components,
134
+ template: wrap(`
135
+ <template #empty>
136
+ This content is only displayed when there are no tabs. Useful for dynamically added/removed tabs.
137
+ </template>`),
138
+ });
139
+
140
+ export const JustifiedTabs = (_args, { argTypes }) => ({
141
+ props: Object.keys(argTypes),
142
+ components,
143
+ template: wrap(`
144
+ <gl-tab title="Tab 1">
145
+ <p>Tab panel 1</p>
146
+ </gl-tab>
147
+ <gl-tab title="Tab 2">
148
+ <p>Tab panel 2</p>
149
+ </gl-tab>`),
150
+ });
151
+ JustifiedTabs.args = generateProps({ justified: true });
152
+
153
+ export const WithCounterBadges = (_args, { argTypes }) => ({
154
+ props: Object.keys(argTypes),
155
+ components,
156
+ template: wrap(`
157
+ <gl-tab>
158
+ <template #title>
159
+ <span>Tab</span>
160
+ <gl-badge size="sm" class="gl-tab-counter-badge">500</gl-badge>
161
+ <span class="sr-only">items</span>
162
+ </template>
163
+ Tab panel 1
164
+ </gl-tab>
165
+ <gl-tab>
166
+ <template #title>
167
+ <span>Tab</span>
168
+ <gl-badge size="sm" class="gl-tab-counter-badge">250</gl-badge>
169
+ <span class="sr-only">items</span>
170
+ </template>
171
+ Tab panel 2
172
+ </gl-tab>
173
+ <gl-tab>
174
+ <template #title>
175
+ <span>Tab</span>
176
+ </template>
177
+ Tab panel 3
178
+ </gl-tab>`),
179
+ });
180
+
181
+ export const WithActions = (_args, { argTypes }) => ({
182
+ props: Object.keys(argTypes),
183
+ components,
184
+ template: wrap(`
185
+ <gl-tab title="Tab 1">
186
+ Tab panel 1
187
+ </gl-tab>`),
188
+ });
189
+ WithActions.args = generateProps({
190
+ actionPrimary: {
191
+ attributes: {
192
+ variant: 'danger',
193
+ },
194
+ text: 'Primary action',
40
195
  },
41
- props: {
42
- syncActiveTabWithQueryParams: {
43
- type: Boolean,
44
- default: boolean('sync-active-tab-with-query-params', false),
196
+ actionSecondary: {
197
+ attributes: {
198
+ variant: 'success',
199
+ },
200
+ text: 'Secondary action',
201
+ },
202
+ actionTertiary: {
203
+ attributes: {
204
+ variant: 'default',
45
205
  },
206
+ text: 'Tertiary action',
46
207
  },
47
208
  });
48
209
 
49
- documentedStoriesOf('base/tabs/tabs', docs)
50
- .addDecorator(withKnobs)
51
- .add('default', () => ({
52
- ...createBaseStory(),
53
- template: `
54
- <gl-tabs :sync-active-tab-with-query-params="syncActiveTabWithQueryParams">
55
- <gl-tab title="Tab 1">
56
- Tab panel 1
57
- </gl-tab>
58
- <gl-tab title="Tab 2">
59
- Tab panel 2
60
- </gl-tab>
61
- <gl-tab title="Tab 3">
62
- Tab panel 3
63
- </gl-tab>
64
- <gl-tab title="Tab 4">
65
- Tab panel 4
66
- </gl-tab>
67
- <gl-tab title="Tab 5">
68
- Tab panel 5
69
- </gl-tab>
70
- <gl-tab title="Tab 6">
71
- Tab panel 6
72
- </gl-tab>
73
- <gl-tab title="Tab 7">
74
- Tab panel 7
75
- </gl-tab>
76
- <gl-tab title="Tab 8">
77
- Tab panel 8
78
- </gl-tab>
79
- <gl-tab title="Tab 9">
80
- Tab panel 9
81
- </gl-tab>
82
- <gl-tab title="Tab 10">
83
- Tab panel 10
84
- </gl-tab>
85
- <gl-tab title="Tab 11">
86
- Tab panel 11
87
- </gl-tab>
88
- <gl-tab title="Tab 12">
89
- Tab panel 12
90
- </gl-tab>
91
- <gl-tab title="Tab 13" query-param-value="thirteenth">
92
- Tab panel 13
93
- </gl-tab>
94
- <gl-tab title="Tab 14">
95
- Tab panel 14
96
- </gl-tab>
97
- </gl-tabs>
98
- `,
99
- }))
100
- .add('contentless tab', () => ({
101
- ...createBaseStory(),
102
- template: `
103
- <gl-tabs>
104
- <gl-tab title="Regular tab">
105
- <p>Regular tab content.</p>
106
- <p>The contentless tab is not selectable, as it has no content. This is useful for displaying things that aren't really tabs after the list of tabs.</p>
107
- </gl-tab>
108
- <gl-tab title="Another tab">
109
- <p>Another tab's content.</p>
110
- </gl-tab>
111
- <template #tabs-end>
112
- <li class="gl-tab-nav-item">
113
- Contentless tab
114
- </li>
115
- </template>
116
- </gl-tabs>
117
- `,
118
- }))
119
- .add('empty state', () => ({
120
- ...createBaseStory(),
121
- template: `
122
- <gl-tabs>
123
- <template #empty>
124
- This content is only displayed when there are no tabs. Useful for dynamically added/removed tabs.
125
- </template>
126
- </gl-tabs>
127
- `,
128
- }))
129
- .add('justified tabs', () => ({
130
- ...createBaseStory(),
131
- template: `
132
- <gl-tabs justified>
133
- <gl-tab title="Tab 1">
134
- <p>Tab panel 1</p>
135
- </gl-tab>
136
- <gl-tab title="Tab 2">
137
- <p>Tab panel 2</p>
138
- </gl-tab>
139
- </gl-tabs>
140
- `,
141
- }))
142
- .add('with counter badges', () => ({
143
- ...createBaseStory(),
144
- template: `
145
- <gl-tabs>
146
- <gl-tab>
147
- <template #title>
148
- <span>Tab</span>
149
- <gl-badge size="sm" class="gl-tab-counter-badge">500</gl-badge>
150
- <span class="sr-only">items</span>
151
- </template>
152
- Tab panel 1
153
- </gl-tab>
154
- <gl-tab>
155
- <template #title>
156
- <span>Tab</span>
157
- <gl-badge size="sm" class="gl-tab-counter-badge">250</gl-badge>
158
- <span class="sr-only">items</span>
159
- </template>
160
- Tab panel 2
161
- </gl-tab>
162
- <gl-tab>
163
- <template #title>
164
- <span>Tab</span>
165
- </template>
166
- Tab panel 3
167
- </gl-tab>
168
- </gl-tabs>
169
- `,
170
- }))
171
- .add('with scroll', () => ({
172
- ...createBaseStory(),
173
- components: {
174
- ScrollableTabsGenerator,
175
- },
176
- template: '<scrollable-tabs-generator :count="50" />',
177
- }))
178
- .add(
179
- 'with scroll and growing',
180
- () => ({
181
- ...createBaseStory(),
182
- components: {
183
- ScrollableTabsGenerator,
184
- },
185
- data() {
186
- return {
187
- count: 2,
188
- intervalId: 0,
189
- };
190
- },
191
- mounted() {
192
- this.intervalId = setInterval(() => {
193
- this.count += 1;
194
- }, 2000);
210
+ export const WithScroll = (_args, { argTypes }) => ({
211
+ props: Object.keys(argTypes),
212
+ components: {
213
+ ScrollableTabsGenerator,
214
+ },
215
+ template: '<scrollable-tabs-generator :count="50" />',
216
+ });
217
+
218
+ export const WithScrollAndGrowing = (_args, { argTypes }) => ({
219
+ props: Object.keys(argTypes),
220
+ components: {
221
+ ScrollableTabsGenerator,
222
+ },
223
+ data() {
224
+ return {
225
+ count: 2,
226
+ intervalId: 0,
227
+ };
228
+ },
229
+ mounted() {
230
+ this.intervalId = setInterval(() => {
231
+ this.count += 1;
232
+ }, 2000);
233
+ },
234
+ template: '<scrollable-tabs-generator :count="count" />',
235
+ });
236
+ WithScrollAndGrowing.parameters = {
237
+ storyshots: { disable: true },
238
+ };
239
+
240
+ export default {
241
+ title: 'base/tabs/tabs',
242
+ component: GlTabs,
243
+ subcomponents: { GlTab, GlScrollableTabs },
244
+ parameters: {
245
+ bootstrapComponent: 'b-tabs',
246
+ docs: {
247
+ description: {
248
+ component: readme,
195
249
  },
196
- template: '<scrollable-tabs-generator :count="count" />',
197
- }),
198
- { storyshots: false }
199
- );
250
+ },
251
+ },
252
+ argTypes: {
253
+ contentClass: { control: { disable: true } },
254
+ navClass: { control: { disable: true } },
255
+ syncActiveTabWithQueryParams: { control: { disable: true } },
256
+ queryParamName: { control: { disable: true } },
257
+ value: { control: { disable: true } },
258
+ },
259
+ };
@@ -46,11 +46,17 @@ export default {
46
46
  required: false,
47
47
  default: false,
48
48
  },
49
+ /**
50
+ * Sync active tab with query string parameters. Allows for deep linking into specific tabs.
51
+ */
49
52
  syncActiveTabWithQueryParams: {
50
53
  type: Boolean,
51
54
  required: false,
52
55
  default: false,
53
56
  },
57
+ /**
58
+ * Name to use for query string parameter.
59
+ */
54
60
  queryParamName: {
55
61
  type: String,
56
62
  required: false,
@@ -1,5 +1,6 @@
1
1
  import { GlToggle } from '../../../index';
2
2
  import { toggleLabelPosition } from '../../../utils/constants';
3
+ import { disableControls } from '../../../utils/stories_utils';
3
4
  import readme from './toggle.md';
4
5
 
5
6
  const defaultValue = (prop) => GlToggle.props[prop].default;
@@ -53,6 +54,7 @@ export default {
53
54
  },
54
55
  },
55
56
  argTypes: {
57
+ ...disableControls(['name']),
56
58
  labelPosition: {
57
59
  control: {
58
60
  type: 'select',
@@ -69,8 +71,5 @@ export default {
69
71
  type: 'text',
70
72
  },
71
73
  },
72
- name: {
73
- control: { disable: true },
74
- },
75
74
  },
76
75
  };
@@ -1,8 +1,3 @@
1
- import description from './area.md';
2
- import examples from './examples';
3
-
4
1
  export default {
5
2
  followsDesignSystem: false,
6
- description,
7
- examples,
8
3
  };