@gitlab/ui 123.12.0 → 124.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 (40) hide show
  1. package/dist/components/base/alert/alert.js +8 -2
  2. package/dist/components/base/form/form_fields/form_fields.js +20 -5
  3. package/dist/components/base/form/form_fields/form_fields_loop.js +75 -0
  4. package/dist/components/base/pagination/pagination.js +3 -8
  5. package/dist/index.css +1 -1
  6. package/dist/index.css.map +1 -1
  7. package/dist/tokens/build/js/tokens.dark.js +17 -1
  8. package/dist/tokens/build/js/tokens.js +17 -1
  9. package/dist/tokens/css/tokens.css +20 -4
  10. package/dist/tokens/css/tokens.dark.css +20 -4
  11. package/dist/tokens/docs/tokens-tailwind-docs.dark.json +515 -3
  12. package/dist/tokens/docs/tokens-tailwind-docs.json +515 -3
  13. package/dist/tokens/figma/constants.tokens.json +203 -4
  14. package/dist/tokens/js/tokens.dark.js +20 -0
  15. package/dist/tokens/js/tokens.js +20 -0
  16. package/dist/tokens/json/tokens.dark.json +499 -3
  17. package/dist/tokens/json/tokens.json +499 -3
  18. package/dist/tokens/scss/_tokens.dark.scss +20 -4
  19. package/dist/tokens/scss/_tokens.scss +20 -4
  20. package/dist/tokens/scss/_tokens_custom_properties.scss +16 -0
  21. package/dist/tokens/tailwind/tokens.cjs +110 -531
  22. package/package.json +1 -1
  23. package/src/components/base/alert/alert.vue +10 -2
  24. package/src/components/base/form/form_fields/form_fields.vue +20 -5
  25. package/src/components/base/form/form_fields/form_fields_loop.vue +44 -0
  26. package/src/components/base/pagination/pagination.vue +0 -8
  27. package/src/tokens/build/css/tokens.css +20 -4
  28. package/src/tokens/build/css/tokens.dark.css +20 -4
  29. package/src/tokens/build/docs/tokens-tailwind-docs.dark.json +515 -3
  30. package/src/tokens/build/docs/tokens-tailwind-docs.json +515 -3
  31. package/src/tokens/build/figma/constants.tokens.json +203 -4
  32. package/src/tokens/build/js/tokens.dark.js +16 -0
  33. package/src/tokens/build/js/tokens.js +16 -0
  34. package/src/tokens/build/json/tokens.dark.json +499 -3
  35. package/src/tokens/build/json/tokens.json +499 -3
  36. package/src/tokens/build/scss/_tokens.dark.scss +20 -4
  37. package/src/tokens/build/scss/_tokens.scss +20 -4
  38. package/src/tokens/build/scss/_tokens_custom_properties.scss +16 -0
  39. package/src/tokens/build/tailwind/tokens.cjs +16 -0
  40. package/src/tokens/constant/font.tokens.json +203 -4
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gitlab/ui",
3
- "version": "123.12.0",
3
+ "version": "124.1.0",
4
4
  "description": "GitLab UI Components",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
@@ -90,7 +90,13 @@ export default {
90
90
  required: false,
91
91
  default: false,
92
92
  },
93
- // only set to 'assertive' if alert requires immediate user action, otherwise use a default value
93
+ /**
94
+ * Set the aria-live attribute on the alert.
95
+ *
96
+ * Only set to 'assertive' if alert requires immediate user action.
97
+ * Otherwise, rely on the default value.
98
+ *
99
+ */
94
100
  politeness: {
95
101
  type: String,
96
102
  required: false,
@@ -196,6 +202,8 @@ export default {
196
202
 
197
203
  <template>
198
204
  <div
205
+ :role="role"
206
+ :aria-live="politeness"
199
207
  :class="[
200
208
  'gl-alert',
201
209
  { 'gl-alert-sticky': sticky },
@@ -208,7 +216,7 @@ export default {
208
216
  <div v-if="showIcon" class="gl-alert-icon-container">
209
217
  <gl-icon :name="iconName" class="gl-alert-icon" />
210
218
  </div>
211
- <div class="gl-alert-content" :role="role" :aria-live="politeness">
219
+ <div class="gl-alert-content">
212
220
  <h2 v-if="title" class="gl-alert-title">{{ title }}</h2>
213
221
 
214
222
  <div class="gl-alert-body">
@@ -6,6 +6,7 @@ import GlFormGroup from '../form_group/form_group.vue';
6
6
  import GlFormInput from '../form_input/form_input.vue';
7
7
  import { setObjectProperty } from '../../../../utils/set_utils';
8
8
  import GlFormFieldValidator from './form_field_validator.vue';
9
+ import GlFormFieldsLoop from './form_fields_loop.vue';
9
10
 
10
11
  export default {
11
12
  name: 'GlFormFields',
@@ -13,6 +14,7 @@ export default {
13
14
  GlFormGroup,
14
15
  GlFormInput,
15
16
  GlFormFieldValidator,
17
+ GlFormFieldsLoop,
16
18
  },
17
19
  model: {
18
20
  prop: 'values',
@@ -67,6 +69,7 @@ export default {
67
69
  return {
68
70
  fieldDirtyStatuses: {},
69
71
  fieldValidations: {},
72
+ fieldIds: {},
70
73
  };
71
74
  },
72
75
  computed: {
@@ -98,7 +101,7 @@ export default {
98
101
  },
99
102
  fieldsToRender() {
100
103
  return mapValues(this.fields, (field, fieldName) => {
101
- const id = uniqueId('gl-form-field-');
104
+ const id = this.memoizeAndReturnFieldId(field, fieldName);
102
105
 
103
106
  const inputSlotName = `input(${fieldName})`;
104
107
  const groupPassthroughSlotName = `group(${fieldName})-`;
@@ -173,6 +176,18 @@ export default {
173
176
 
174
177
  return val;
175
178
  },
179
+ memoizeAndReturnFieldId(field, fieldName) {
180
+ const memoizedId = this.fieldIds[fieldName];
181
+
182
+ if (memoizedId) {
183
+ return memoizedId;
184
+ }
185
+
186
+ const id = field.id || uniqueId('gl-form-field-');
187
+ this.fieldIds[fieldName] = id;
188
+
189
+ return id;
190
+ },
176
191
  onFieldValidationUpdate(fieldName, invalidFeedback) {
177
192
  this.fieldValidations = setObjectProperty(this.fieldValidations, fieldName, invalidFeedback);
178
193
 
@@ -220,11 +235,11 @@ export default {
220
235
  </script>
221
236
 
222
237
  <template>
223
- <div>
224
- <template v-for="(field, fieldName) in fieldsToRender">
225
- <!-- eslint-disable-next-line vue/valid-v-for -->
238
+ <gl-form-fields-loop :fields="fieldsToRender">
239
+ <template #default="{ field, fieldName }">
226
240
  <gl-form-group
227
241
  v-bind="field.groupAttrs"
242
+ :key="field.id"
228
243
  :label="field.label"
229
244
  :label-for="field.id"
230
245
  :invalid-feedback="fieldValidationProps[fieldName].invalidFeedback"
@@ -259,5 +274,5 @@ export default {
259
274
  <!-- @slot Can be used to add content the form group of a field. The name of the slot is `after(<fieldName>)`.-->
260
275
  <slot :name="field.afterSlotName"></slot>
261
276
  </template>
262
- </div>
277
+ </gl-form-fields-loop>
263
278
  </template>
@@ -0,0 +1,44 @@
1
+ <script>
2
+ import Vue from 'vue';
3
+
4
+ export default {
5
+ name: 'GlFormFieldsLoop',
6
+ props: {
7
+ fields: {
8
+ type: Object,
9
+ required: true,
10
+ },
11
+ },
12
+ render(createElement) {
13
+ const { Fragment } = Vue;
14
+
15
+ // Vue 3, key goes on `Fragment` (<template> element)
16
+ if (Fragment) {
17
+ return createElement(
18
+ 'div',
19
+ Object.entries(this.fields).map(([fieldName, field]) =>
20
+ createElement(
21
+ Fragment,
22
+ { key: field.id },
23
+ this.$scopedSlots.default({
24
+ fieldName,
25
+ field,
26
+ }),
27
+ ),
28
+ ),
29
+ );
30
+ }
31
+
32
+ // Vue 2, key goes on element (rendered via default slot)
33
+ return createElement(
34
+ 'div',
35
+ Object.entries(this.fields).map(([fieldName, field]) =>
36
+ this.$scopedSlots.default({
37
+ fieldName,
38
+ field,
39
+ }),
40
+ ),
41
+ );
42
+ },
43
+ };
44
+ </script>
@@ -168,11 +168,6 @@ export default {
168
168
  default: alignOptions.left,
169
169
  validator: (value) => Object.keys(alignOptions).includes(value),
170
170
  },
171
- disabled: {
172
- type: Boolean,
173
- required: false,
174
- default: false,
175
- },
176
171
  },
177
172
  data() {
178
173
  return {
@@ -312,7 +307,6 @@ export default {
312
307
  },
313
308
  pageIsDisabled(page) {
314
309
  return (
315
- this.disabled ||
316
310
  page < 1 ||
317
311
  (this.isCompactPagination && page > this.value && !this.nextPage) ||
318
312
  (!this.isCompactPagination && page > this.totalPages)
@@ -399,7 +393,6 @@ export default {
399
393
  <nav v-if="isVisible" class="gl-pagination" :aria-label="labelNav">
400
394
  <ul :class="wrapperClasses">
401
395
  <li
402
- :aria-disabled="prevPageIsDisabled"
403
396
  :aria-hidden="prevPageIsDisabled"
404
397
  :class="{
405
398
  disabled: prevPageIsDisabled,
@@ -465,7 +458,6 @@ export default {
465
458
  </li>
466
459
 
467
460
  <li
468
- :aria-disabled="nextPageIsDisabled"
469
461
  :aria-hidden="nextPageIsDisabled"
470
462
  :class="{
471
463
  disabled: nextPageIsDisabled,
@@ -232,10 +232,23 @@
232
232
  --gl-color-brand-pink-01g: #ffb9c9;
233
233
  --gl-font-family-regular: var(--default-regular-font, 'GitLab Sans'),-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Noto Sans',Ubuntu,Cantarell,'Helvetica Neue',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';
234
234
  --gl-font-family-monospace: var(--default-mono-font, 'GitLab Mono'),'JetBrains Mono',Menlo,'DejaVu Sans Mono','Liberation Mono',Consolas,'Ubuntu Mono','Courier New','andale mono','lucida console',monospace;
235
+ --gl-font-size-100: 0.75rem; /** Used for meta text and small labels. */
236
+ --gl-font-size-200: 0.8125rem; /** Used for level 6 headings. */
237
+ --gl-font-size-300: 0.875rem; /** Used for level 5 headings, body text, input labels, and help text. */
238
+ --gl-font-size-400: 1rem; /** Used for level 4 headings, large body text. */
239
+ --gl-font-size-500: clamp(1.125rem, 0.9027777778rem + 0.462962963vw, 1.25rem); /** Used for responsive level 3 headings. */
240
+ --gl-font-size-600: clamp(1.3125rem, 0.8680555556rem + 0.9259259259vw, 1.5625rem); /** Used for responsive level 2 headings. */
241
+ --gl-font-size-700: clamp(1.5rem, 0.8333333333rem + 1.3888888889vw, 1.875rem); /** Used for responsive level 1 headings */
242
+ --gl-font-size-800: clamp(1.75rem, 0.8611111111rem + 1.8518518519vw, 2.25rem); /** Used for a responsive display option that can be applied to a level 1 heading to increase its prominence. */
235
243
  --gl-font-size-xs: 0.625rem;
236
- --gl-font-size-sm: 0.75rem;
237
- --gl-font-size-md: 0.875rem;
238
- --gl-font-size-lg: 1rem;
244
+ --gl-font-size-100-fixed: 0.75rem; /** Used for meta text and small labels. */
245
+ --gl-font-size-200-fixed: 0.8125rem; /** Used for level 6 headings. */
246
+ --gl-font-size-300-fixed: 0.875rem; /** Used for level 5 headings, body text, input labels, and help text. */
247
+ --gl-font-size-400-fixed: 1rem; /** Used for level 4 headings, large body text. */
248
+ --gl-font-size-500-fixed: 1.125rem; /** Used for level 3 headings. */
249
+ --gl-font-size-600-fixed: 1.3125rem; /** Used for level 2 headings. */
250
+ --gl-font-size-700-fixed: 1.5rem; /** Used for level 1 headings */
251
+ --gl-font-size-800-fixed: 1.75rem; /** Used for a display option that can be applied to a level 1 heading to increase its prominence. */
239
252
  --gl-font-weight-100: 100;
240
253
  --gl-font-weight-300: 300;
241
254
  --gl-font-weight-normal: 400;
@@ -584,7 +597,9 @@
584
597
  --gl-border-radius-xl: var(--gl-spacing-scale-4);
585
598
  --gl-border-radius-2xl: var(--gl-spacing-scale-5);
586
599
  --gl-border-radius-3xl: var(--gl-spacing-scale-6);
587
- --gl-font-size-base: var(--gl-font-size-md);
600
+ --gl-font-size-sm: var(--gl-font-size-100);
601
+ --gl-font-size-md: var(--gl-font-size-300);
602
+ --gl-font-size-lg: var(--gl-font-size-400);
588
603
  --gl-shadow-color-default: var(--gl-color-alpha-dark-16); /** Used for the default shadow color. */
589
604
  --gl-alert-neutral-border-top-color: var(--gl-color-alpha-0); /** Used for the border center color of a neutral alert. */
590
605
  --gl-alert-neutral-border-bottom-color: var(--gl-color-alpha-0); /** Used for the border bottom color of a neutral alert. */
@@ -938,6 +953,7 @@
938
953
  --gl-text-color-disabled: var(--gl-color-neutral-400); /** Used for disabled text. */
939
954
  --gl-border-color-section: var(--gl-border-color-default); /** Used for the border color that surrounds content or elements when they appear as a closed container or closed section of the page. */
940
955
  --gl-border-radius-default: var(--gl-border-radius-md);
956
+ --gl-font-size-base: var(--gl-font-size-md);
941
957
  --gl-shadow-sm: 0 0 2px var(--gl-shadow-color-default), 0 1px 4px var(--gl-shadow-color-default); /** Used for surfaces that need to indicate users can manually interact with them. For example, cards in issue board. */
942
958
  --gl-shadow-md: 0 0 1px var(--gl-shadow-color-default), 0 0 2px var(--gl-shadow-color-default), 0 2px 8px var(--gl-shadow-color-default); /** Used for surfaces that need boundary definition and appear on hover. For example, popovers. */
943
959
  --gl-shadow-lg: 0 0 2px var(--gl-shadow-color-default), 0 0 2px var(--gl-shadow-color-default), 0 4px 12px var(--gl-shadow-color-default); /** Used for large surfaces that present additional context to the user. */
@@ -232,10 +232,23 @@
232
232
  --gl-color-brand-pink-01g: #ffb9c9;
233
233
  --gl-font-family-regular: var(--default-regular-font, 'GitLab Sans'),-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Noto Sans',Ubuntu,Cantarell,'Helvetica Neue',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';
234
234
  --gl-font-family-monospace: var(--default-mono-font, 'GitLab Mono'),'JetBrains Mono',Menlo,'DejaVu Sans Mono','Liberation Mono',Consolas,'Ubuntu Mono','Courier New','andale mono','lucida console',monospace;
235
+ --gl-font-size-100: 0.75rem; /** Used for meta text and small labels. */
236
+ --gl-font-size-200: 0.8125rem; /** Used for level 6 headings. */
237
+ --gl-font-size-300: 0.875rem; /** Used for level 5 headings, body text, input labels, and help text. */
238
+ --gl-font-size-400: 1rem; /** Used for level 4 headings, large body text. */
239
+ --gl-font-size-500: clamp(1.125rem, 0.9027777778rem + 0.462962963vw, 1.25rem); /** Used for responsive level 3 headings. */
240
+ --gl-font-size-600: clamp(1.3125rem, 0.8680555556rem + 0.9259259259vw, 1.5625rem); /** Used for responsive level 2 headings. */
241
+ --gl-font-size-700: clamp(1.5rem, 0.8333333333rem + 1.3888888889vw, 1.875rem); /** Used for responsive level 1 headings */
242
+ --gl-font-size-800: clamp(1.75rem, 0.8611111111rem + 1.8518518519vw, 2.25rem); /** Used for a responsive display option that can be applied to a level 1 heading to increase its prominence. */
235
243
  --gl-font-size-xs: 0.625rem;
236
- --gl-font-size-sm: 0.75rem;
237
- --gl-font-size-md: 0.875rem;
238
- --gl-font-size-lg: 1rem;
244
+ --gl-font-size-100-fixed: 0.75rem; /** Used for meta text and small labels. */
245
+ --gl-font-size-200-fixed: 0.8125rem; /** Used for level 6 headings. */
246
+ --gl-font-size-300-fixed: 0.875rem; /** Used for level 5 headings, body text, input labels, and help text. */
247
+ --gl-font-size-400-fixed: 1rem; /** Used for level 4 headings, large body text. */
248
+ --gl-font-size-500-fixed: 1.125rem; /** Used for level 3 headings. */
249
+ --gl-font-size-600-fixed: 1.3125rem; /** Used for level 2 headings. */
250
+ --gl-font-size-700-fixed: 1.5rem; /** Used for level 1 headings */
251
+ --gl-font-size-800-fixed: 1.75rem; /** Used for a display option that can be applied to a level 1 heading to increase its prominence. */
239
252
  --gl-font-weight-100: 100;
240
253
  --gl-font-weight-300: 300;
241
254
  --gl-font-weight-normal: 400;
@@ -595,7 +608,9 @@
595
608
  --gl-border-radius-xl: var(--gl-spacing-scale-4);
596
609
  --gl-border-radius-2xl: var(--gl-spacing-scale-5);
597
610
  --gl-border-radius-3xl: var(--gl-spacing-scale-6);
598
- --gl-font-size-base: var(--gl-font-size-md);
611
+ --gl-font-size-sm: var(--gl-font-size-100);
612
+ --gl-font-size-md: var(--gl-font-size-300);
613
+ --gl-font-size-lg: var(--gl-font-size-400);
599
614
  --gl-shadow-color-default: var(--gl-color-alpha-dark-40); /** Used for the default shadow color. */
600
615
  --gl-alert-neutral-border-top-color: var(--gl-color-neutral-400); /** Used for the border center color of a neutral alert. */
601
616
  --gl-alert-neutral-border-bottom-color: var(--gl-color-alpha-0); /** Used for the border bottom color of a neutral alert. */
@@ -955,6 +970,7 @@
955
970
  --gl-text-color-disabled: var(--gl-color-neutral-400); /** Used for disabled text. */
956
971
  --gl-border-color-section: var(--gl-background-color-default); /** Used for the border color that surrounds content or elements when they appear as a closed container or closed section of the page. */
957
972
  --gl-border-radius-default: var(--gl-border-radius-md);
973
+ --gl-font-size-base: var(--gl-font-size-md);
958
974
  --gl-shadow-sm: 0 0 2px var(--gl-shadow-color-default), 0 1px 4px var(--gl-shadow-color-default); /** Used for surfaces that need to indicate users can manually interact with them. For example, cards in issue board. */
959
975
  --gl-shadow-md: 0 0 1px var(--gl-shadow-color-default), 0 0 2px var(--gl-shadow-color-default), 0 2px 8px var(--gl-shadow-color-default); /** Used for surfaces that need boundary definition and appear on hover. For example, popovers. */
960
976
  --gl-shadow-lg: 0 0 2px var(--gl-shadow-color-default), 0 0 2px var(--gl-shadow-color-default), 0 4px 12px var(--gl-shadow-color-default); /** Used for large surfaces that present additional context to the user. */