@gitlab/ui 96.3.0 → 97.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 (101) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/components/base/alert/alert.js +1 -1
  3. package/dist/components/base/avatar/avatar.js +4 -4
  4. package/dist/components/base/datepicker/datepicker.js +1 -1
  5. package/dist/components/base/drawer/drawer.js +1 -1
  6. package/dist/components/base/form/form_input/form_input.js +3 -3
  7. package/dist/components/base/form/form_select/form_select.js +3 -3
  8. package/dist/components/base/progress_bar/progress_bar.js +47 -5
  9. package/dist/components/base/toast/toast.js +1 -1
  10. package/dist/components/base/toggle/toggle.js +1 -1
  11. package/dist/components/base/token/token.js +1 -1
  12. package/dist/components/base/token_selector/token_selector.js +17 -7
  13. package/dist/index.css +2 -2
  14. package/dist/index.css.map +1 -1
  15. package/dist/tailwind.css +1 -1
  16. package/dist/tailwind.css.map +1 -1
  17. package/dist/tokens/build/js/tokens.dark.js +2 -1
  18. package/dist/tokens/build/js/tokens.js +2 -1
  19. package/dist/tokens/css/tokens.css +1 -0
  20. package/dist/tokens/css/tokens.dark.css +1 -0
  21. package/dist/tokens/js/tokens.dark.js +1 -0
  22. package/dist/tokens/js/tokens.js +1 -0
  23. package/dist/tokens/json/tokens.dark.json +35 -0
  24. package/dist/tokens/json/tokens.json +35 -0
  25. package/dist/tokens/scss/_tokens.dark.scss +1 -0
  26. package/dist/tokens/scss/_tokens.scss +1 -0
  27. package/dist/tokens/scss/_tokens_custom_properties.scss +1 -0
  28. package/dist/utils/number_utils.js +9 -1
  29. package/dist/vendor/bootstrap-vue/src/constants/components.js +1 -3
  30. package/dist/vendor/bootstrap-vue/src/index.js +0 -2
  31. package/package.json +7 -7
  32. package/src/components/base/alert/alert.vue +1 -1
  33. package/src/components/base/avatar/avatar.vue +4 -4
  34. package/src/components/base/datepicker/datepicker.vue +1 -1
  35. package/src/components/base/drawer/drawer.vue +1 -1
  36. package/src/components/base/form/form_input/form_input.scss +1 -2
  37. package/src/components/base/form/form_input/form_input.vue +3 -3
  38. package/src/components/base/form/form_select/form_select.vue +3 -3
  39. package/src/components/base/modal/modal.scss +1 -2
  40. package/src/components/base/progress_bar/progress_bar.md +25 -0
  41. package/src/components/base/progress_bar/progress_bar.scss +11 -0
  42. package/src/components/base/progress_bar/progress_bar.vue +54 -5
  43. package/src/components/base/toast/toast.js +1 -1
  44. package/src/components/base/toggle/toggle.scss +28 -7
  45. package/src/components/base/toggle/toggle.vue +1 -0
  46. package/src/components/base/token/token.vue +1 -1
  47. package/src/components/base/token_selector/token_selector.scss +8 -3
  48. package/src/components/base/token_selector/token_selector.vue +17 -9
  49. package/src/tokens/build/css/tokens.css +1 -0
  50. package/src/tokens/build/css/tokens.dark.css +1 -0
  51. package/src/tokens/build/js/tokens.dark.js +1 -0
  52. package/src/tokens/build/js/tokens.js +1 -0
  53. package/src/tokens/build/json/tokens.dark.json +35 -0
  54. package/src/tokens/build/json/tokens.json +35 -0
  55. package/src/tokens/build/scss/_tokens.dark.scss +1 -0
  56. package/src/tokens/build/scss/_tokens.scss +1 -0
  57. package/src/tokens/build/scss/_tokens_custom_properties.scss +1 -0
  58. package/src/tokens/contextual/token-selector.tokens.json +20 -0
  59. package/src/utils/number_utils.js +7 -0
  60. package/src/vendor/bootstrap-vue/package.json +3 -42
  61. package/src/vendor/bootstrap-vue/src/components/badge/README.md +2 -2
  62. package/src/vendor/bootstrap-vue/src/components/breadcrumb/README.md +2 -2
  63. package/src/vendor/bootstrap-vue/src/components/button/README.md +7 -9
  64. package/src/vendor/bootstrap-vue/src/components/button-group/README.md +0 -5
  65. package/src/vendor/bootstrap-vue/src/components/collapse/README.md +2 -2
  66. package/src/vendor/bootstrap-vue/src/components/dropdown/README.md +5 -5
  67. package/src/vendor/bootstrap-vue/src/components/form/README.md +21 -26
  68. package/src/vendor/bootstrap-vue/src/components/form-checkbox/README.md +6 -6
  69. package/src/vendor/bootstrap-vue/src/components/form-group/README.md +6 -4
  70. package/src/vendor/bootstrap-vue/src/components/form-input/README.md +4 -4
  71. package/src/vendor/bootstrap-vue/src/components/form-radio/README.md +1 -1
  72. package/src/vendor/bootstrap-vue/src/components/index.d.ts +0 -1
  73. package/src/vendor/bootstrap-vue/src/components/input-group/README.md +4 -9
  74. package/src/vendor/bootstrap-vue/src/components/layout/README.md +3 -3
  75. package/src/vendor/bootstrap-vue/src/components/link/README.md +1 -1
  76. package/src/vendor/bootstrap-vue/src/components/modal/README.md +2 -2
  77. package/src/vendor/bootstrap-vue/src/components/nav/README.md +13 -14
  78. package/src/vendor/bootstrap-vue/src/components/navbar/README.md +5 -6
  79. package/src/vendor/bootstrap-vue/src/components/popover/README.md +4 -4
  80. package/src/vendor/bootstrap-vue/src/components/table/README.md +5 -5
  81. package/src/vendor/bootstrap-vue/src/components/tabs/README.md +2 -2
  82. package/src/vendor/bootstrap-vue/src/components/toast/README.md +5 -5
  83. package/src/vendor/bootstrap-vue/src/components/tooltip/README.md +4 -4
  84. package/src/vendor/bootstrap-vue/src/constants/components.js +0 -2
  85. package/src/vendor/bootstrap-vue/src/directives/toggle/README.md +5 -6
  86. package/src/vendor/bootstrap-vue/src/directives/tooltip/README.md +2 -2
  87. package/src/vendor/bootstrap-vue/src/index.js +0 -4
  88. package/dist/vendor/bootstrap-vue/src/components/progress/index.js +0 -2
  89. package/dist/vendor/bootstrap-vue/src/components/progress/progress-bar.js +0 -128
  90. package/dist/vendor/bootstrap-vue/src/components/progress/progress.js +0 -56
  91. package/src/vendor/bootstrap-vue/nuxt/index.js +0 -164
  92. package/src/vendor/bootstrap-vue/nuxt/plugin.template.js +0 -29
  93. package/src/vendor/bootstrap-vue/src/components/progress/MODIFICATIONS.md +0 -23
  94. package/src/vendor/bootstrap-vue/src/components/progress/README.md +0 -363
  95. package/src/vendor/bootstrap-vue/src/components/progress/index.d.ts +0 -10
  96. package/src/vendor/bootstrap-vue/src/components/progress/index.js +0 -4
  97. package/src/vendor/bootstrap-vue/src/components/progress/package.json +0 -109
  98. package/src/vendor/bootstrap-vue/src/components/progress/progress-bar.js +0 -133
  99. package/src/vendor/bootstrap-vue/src/components/progress/progress-bar.spec.js +0 -270
  100. package/src/vendor/bootstrap-vue/src/components/progress/progress.js +0 -57
  101. package/src/vendor/bootstrap-vue/src/components/progress/progress.spec.js +0 -71
@@ -691,6 +691,7 @@ $gl-toggle-switch-icon-color-checked-hover: var(--gl-toggle-switch-icon-color-ch
691
691
  $gl-toggle-switch-icon-color-checked-focus: var(--gl-toggle-switch-icon-color-checked-focus);
692
692
  $gl-toggle-switch-icon-color-checked-active: var(--gl-toggle-switch-icon-color-checked-active);
693
693
  $gl-toggle-switch-icon-color-disabled: var(--gl-toggle-switch-icon-color-disabled);
694
+ $gl-token-selector-token-container-token-background-color-focus: var(--gl-token-selector-token-container-token-background-color-focus);
694
695
  $gl-token-foreground-color: var(--gl-token-foreground-color);
695
696
  $gl-token-background-color: var(--gl-token-background-color);
696
697
  $gl-control-background-color-default: var(--gl-control-background-color-default);
@@ -121,4 +121,12 @@ const formatNumberToLocale = function (value) {
121
121
  return new Intl.NumberFormat(locales, options).format(value);
122
122
  };
123
123
 
124
- export { addition, average, engineeringNotation, formatNumberToLocale, modulo, sum };
124
+ // Converts a value (string, number, etc.) to a number
125
+ // Taken from bootstrap-vue
126
+ const toFloat = function (value) {
127
+ let defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : NaN;
128
+ const float = parseFloat(value);
129
+ return Number.isNaN(float) ? defaultValue : float;
130
+ };
131
+
132
+ export { addition, average, engineeringNotation, formatNumberToLocale, modulo, sum, toFloat };
@@ -44,8 +44,6 @@ const NAME_NAVBAR_BRAND = 'BNavbarBrand';
44
44
  const NAME_NAV_ITEM = 'BNavItem';
45
45
  const NAME_NAV_ITEM_DROPDOWN = 'BNavItemDropdown';
46
46
  const NAME_POPOVER = 'BPopover';
47
- const NAME_PROGRESS = 'BProgress';
48
- const NAME_PROGRESS_BAR = 'BProgressBar';
49
47
  const NAME_TAB = 'BTab';
50
48
  const NAME_TABLE = 'BTable';
51
49
  const NAME_TABLE_CELL = 'BTableCell';
@@ -76,4 +74,4 @@ const NAME_TRANSITION = 'BVTransition';
76
74
  const NAME_TRANSPORTER = 'BVTransporter';
77
75
  const NAME_TRANSPORTER_TARGET = 'BVTransporterTarget';
78
76
 
79
- export { NAME_BADGE, NAME_BREADCRUMB, NAME_BREADCRUMB_ITEM, NAME_BREADCRUMB_LINK, NAME_BUTTON, NAME_BUTTON_CLOSE, NAME_BUTTON_GROUP, NAME_COL, NAME_COLLAPSE, NAME_COLLAPSE_HELPER, NAME_DROPDOWN, NAME_DROPDOWN_DIVIDER, NAME_DROPDOWN_FORM, NAME_DROPDOWN_GROUP, NAME_DROPDOWN_HEADER, NAME_DROPDOWN_ITEM, NAME_DROPDOWN_ITEM_BUTTON, NAME_DROPDOWN_TEXT, NAME_FORM, NAME_FORM_BUTTON_LABEL_CONTROL, NAME_FORM_CHECKBOX, NAME_FORM_CHECKBOX_GROUP, NAME_FORM_GROUP, NAME_FORM_INPUT, NAME_FORM_INVALID_FEEDBACK, NAME_FORM_RADIO, NAME_FORM_RADIO_GROUP, NAME_FORM_RATING_STAR, NAME_FORM_ROW, NAME_FORM_SELECT, NAME_FORM_SELECT_OPTION, NAME_FORM_SELECT_OPTION_GROUP, NAME_FORM_TEXT, NAME_FORM_TEXTAREA, NAME_FORM_VALID_FEEDBACK, NAME_INPUT_GROUP, NAME_INPUT_GROUP_ADDON, NAME_INPUT_GROUP_APPEND, NAME_INPUT_GROUP_PREPEND, NAME_INPUT_GROUP_TEXT, NAME_LINK, NAME_MODAL, NAME_NAV, NAME_NAVBAR, NAME_NAVBAR_BRAND, NAME_NAV_ITEM, NAME_NAV_ITEM_DROPDOWN, NAME_POPOVER, NAME_POPOVER_HELPER, NAME_POPOVER_TEMPLATE, NAME_POPPER, NAME_PROGRESS, NAME_PROGRESS_BAR, NAME_TAB, NAME_TABLE, NAME_TABLE_CELL, NAME_TABLE_LITE, NAME_TABLE_SIMPLE, NAME_TABS, NAME_TAB_BUTTON_HELPER, NAME_TBODY, NAME_TFOOT, NAME_TH, NAME_THEAD, NAME_TOAST, NAME_TOASTER, NAME_TOAST_POP, NAME_TOOLTIP, NAME_TOOLTIP_HELPER, NAME_TOOLTIP_TEMPLATE, NAME_TR, NAME_TRANSITION, NAME_TRANSPORTER, NAME_TRANSPORTER_TARGET };
77
+ export { NAME_BADGE, NAME_BREADCRUMB, NAME_BREADCRUMB_ITEM, NAME_BREADCRUMB_LINK, NAME_BUTTON, NAME_BUTTON_CLOSE, NAME_BUTTON_GROUP, NAME_COL, NAME_COLLAPSE, NAME_COLLAPSE_HELPER, NAME_DROPDOWN, NAME_DROPDOWN_DIVIDER, NAME_DROPDOWN_FORM, NAME_DROPDOWN_GROUP, NAME_DROPDOWN_HEADER, NAME_DROPDOWN_ITEM, NAME_DROPDOWN_ITEM_BUTTON, NAME_DROPDOWN_TEXT, NAME_FORM, NAME_FORM_BUTTON_LABEL_CONTROL, NAME_FORM_CHECKBOX, NAME_FORM_CHECKBOX_GROUP, NAME_FORM_GROUP, NAME_FORM_INPUT, NAME_FORM_INVALID_FEEDBACK, NAME_FORM_RADIO, NAME_FORM_RADIO_GROUP, NAME_FORM_RATING_STAR, NAME_FORM_ROW, NAME_FORM_SELECT, NAME_FORM_SELECT_OPTION, NAME_FORM_SELECT_OPTION_GROUP, NAME_FORM_TEXT, NAME_FORM_TEXTAREA, NAME_FORM_VALID_FEEDBACK, NAME_INPUT_GROUP, NAME_INPUT_GROUP_ADDON, NAME_INPUT_GROUP_APPEND, NAME_INPUT_GROUP_PREPEND, NAME_INPUT_GROUP_TEXT, NAME_LINK, NAME_MODAL, NAME_NAV, NAME_NAVBAR, NAME_NAVBAR_BRAND, NAME_NAV_ITEM, NAME_NAV_ITEM_DROPDOWN, NAME_POPOVER, NAME_POPOVER_HELPER, NAME_POPOVER_TEMPLATE, NAME_POPPER, NAME_TAB, NAME_TABLE, NAME_TABLE_CELL, NAME_TABLE_LITE, NAME_TABLE_SIMPLE, NAME_TABS, NAME_TAB_BUTTON_HELPER, NAME_TBODY, NAME_TFOOT, NAME_TH, NAME_THEAD, NAME_TOAST, NAME_TOASTER, NAME_TOAST_POP, NAME_TOOLTIP, NAME_TOOLTIP_HELPER, NAME_TOOLTIP_TEMPLATE, NAME_TR, NAME_TRANSITION, NAME_TRANSPORTER, NAME_TRANSPORTER_TARGET };
@@ -46,8 +46,6 @@ export { BNavItemDropdown } from './components/nav/nav-item-dropdown';
46
46
  export { BNavbar } from './components/navbar/navbar';
47
47
  export { BNavbarBrand } from './components/navbar/navbar-brand';
48
48
  export { BPopover } from './components/popover/popover';
49
- export { BProgress } from './components/progress/progress';
50
- export { BProgressBar } from './components/progress/progress-bar';
51
49
  export { BTable } from './components/table/table';
52
50
  export { BTableLite } from './components/table/table-lite';
53
51
  export { BTableSimple } from './components/table/table-simple';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gitlab/ui",
3
- "version": "96.3.0",
3
+ "version": "97.1.0",
4
4
  "description": "GitLab UI Components",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
@@ -107,13 +107,13 @@
107
107
  },
108
108
  "devDependencies": {
109
109
  "@arkweid/lefthook": "0.7.7",
110
- "@babel/core": "^7.25.7",
110
+ "@babel/core": "^7.25.8",
111
111
  "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6",
112
112
  "@babel/plugin-proposal-optional-chaining": "^7.21.0",
113
- "@babel/preset-env": "^7.25.7",
113
+ "@babel/preset-env": "^7.25.8",
114
114
  "@babel/preset-react": "^7.25.7",
115
115
  "@cypress/grep": "^4.0.1",
116
- "@gitlab/eslint-plugin": "20.3.0",
116
+ "@gitlab/eslint-plugin": "20.4.1",
117
117
  "@gitlab/fonts": "^1.3.0",
118
118
  "@gitlab/stylelint-config": "6.2.2",
119
119
  "@gitlab/svgs": "3.117.0",
@@ -157,7 +157,7 @@
157
157
  "esbuild": "^0.18.0",
158
158
  "eslint": "8.57.1",
159
159
  "eslint-import-resolver-jest": "3.0.2",
160
- "eslint-plugin-cypress": "3.5.0",
160
+ "eslint-plugin-cypress": "3.6.0",
161
161
  "eslint-plugin-storybook": "0.9.0",
162
162
  "gitlab-api-async-iterator": "^1.3.1",
163
163
  "glob": "10.3.3",
@@ -174,8 +174,8 @@
174
174
  "module-alias": "^2.2.2",
175
175
  "npm-run-all": "^4.1.5",
176
176
  "pikaday": "^1.8.0",
177
- "playwright": "^1.47.2",
178
- "playwright-core": "^1.47.2",
177
+ "playwright": "^1.48.0",
178
+ "playwright-core": "^1.48.0",
179
179
  "plop": "^2.5.4",
180
180
  "postcss": "8.4.28",
181
181
  "postcss-loader": "^7.0.2",
@@ -156,7 +156,7 @@ export default {
156
156
  }, []);
157
157
  },
158
158
  variantClass() {
159
- // eslint-disable-next-line @gitlab/tailwind -- Not a CSS utility
159
+ // eslint-disable-next-line @gitlab/tailwind-no-interpolation -- Not a CSS utility
160
160
  return `gl-alert-${this.variant}`;
161
161
  },
162
162
  },
@@ -72,17 +72,17 @@ export default {
72
72
  computed: {
73
73
  sizeClasses() {
74
74
  if (isNumber(this.size)) {
75
- // eslint-disable-next-line @gitlab/tailwind -- Not a CSS utility
75
+ // eslint-disable-next-line @gitlab/tailwind-no-interpolation -- Not a CSS utility
76
76
  return `gl-avatar-s${this.size}`;
77
77
  }
78
78
 
79
79
  const { default: defaultSize, ...nonDefaultSizes } = this.size;
80
80
 
81
81
  return [
82
- // eslint-disable-next-line @gitlab/tailwind -- Not a CSS utility
82
+ // eslint-disable-next-line @gitlab/tailwind-no-interpolation -- Not a CSS utility
83
83
  `gl-avatar-s${defaultSize || avatarSizeOptions[1]}`,
84
84
  ...Object.entries(nonDefaultSizes).map(
85
- // eslint-disable-next-line @gitlab/tailwind -- Not a CSS utility
85
+ // eslint-disable-next-line @gitlab/tailwind-no-interpolation -- Not a CSS utility
86
86
  ([breakpoint, size]) => `gl-${breakpoint}-avatar-s${size}`
87
87
  ),
88
88
  ];
@@ -96,7 +96,7 @@ export default {
96
96
  * Gets the remainder after dividing the 'entityId' by the number of available backgrounds.
97
97
  */
98
98
  const type = (this.entityId % IDENTICON_BG_COUNT) + 1;
99
- // eslint-disable-next-line @gitlab/tailwind -- Not a CSS utility
99
+ // eslint-disable-next-line @gitlab/tailwind-no-interpolation -- Not a CSS utility
100
100
  return `gl-avatar-identicon-bg${type}`;
101
101
  },
102
102
  identiconText() {
@@ -245,7 +245,7 @@ export default {
245
245
  'gl-datepicker',
246
246
  'd-inline-block',
247
247
  'gl-w-full',
248
- // eslint-disable-next-line @gitlab/tailwind -- Not a CSS utility
248
+ // eslint-disable-next-line @gitlab/tailwind-no-interpolation -- Not a CSS utility
249
249
  `gl-form-input-${this.computedWidth}`,
250
250
  ];
251
251
  },
@@ -62,7 +62,7 @@ export default {
62
62
  return Boolean(this.$slots.footer);
63
63
  },
64
64
  variantClass() {
65
- // eslint-disable-next-line @gitlab/tailwind -- Not a CSS utility
65
+ // eslint-disable-next-line @gitlab/tailwind-no-interpolation -- Not a CSS utility
66
66
  return `gl-drawer-${this.variant}`;
67
67
  },
68
68
  },
@@ -21,8 +21,7 @@
21
21
  box-shadow: inset 0 0 0 $gl-border-size-1 var(--gl-control-border-color-hover);
22
22
  }
23
23
 
24
- &:read-only,
25
- &:not(:disabled):not(.form-control-plaintext):not([type='color']):read-only {
24
+ &:not(.gl-form-input-not-readonly):not(:disabled):not(.form-control-plaintext):not([type='color']):read-only {
26
25
  background: var(--gl-control-background-color-readonly);
27
26
  box-shadow: none;
28
27
  }
@@ -42,16 +42,16 @@ export default {
42
42
  const { default: defaultWidth, ...nonDefaultWidths } = this.width;
43
43
 
44
44
  return [
45
- // eslint-disable-next-line @gitlab/tailwind -- Not a CSS utility
45
+ // eslint-disable-next-line @gitlab/tailwind-no-interpolation -- Not a CSS utility
46
46
  ...(defaultWidth ? [`gl-form-input-${defaultWidth}`] : []),
47
47
  ...Object.entries(nonDefaultWidths).map(
48
- // eslint-disable-next-line @gitlab/tailwind -- Not a CSS utility
48
+ // eslint-disable-next-line @gitlab/tailwind-no-interpolation -- Not a CSS utility
49
49
  ([breakpoint, width]) => `gl-${breakpoint}-form-input-${width}`
50
50
  ),
51
51
  ];
52
52
  }
53
53
 
54
- // eslint-disable-next-line @gitlab/tailwind -- Not a CSS utility
54
+ // eslint-disable-next-line @gitlab/tailwind-no-interpolation -- Not a CSS utility
55
55
  return [`gl-form-input-${this.width}`];
56
56
  },
57
57
  listeners() {
@@ -34,16 +34,16 @@ export default {
34
34
  const { default: defaultWidth, ...nonDefaultWidths } = this.width;
35
35
 
36
36
  return [
37
- // eslint-disable-next-line @gitlab/tailwind -- Not a CSS utility
37
+ // eslint-disable-next-line @gitlab/tailwind-no-interpolation -- Not a CSS utility
38
38
  ...(defaultWidth ? [`gl-form-select-${defaultWidth}`] : []),
39
39
  ...Object.entries(nonDefaultWidths).map(
40
- // eslint-disable-next-line @gitlab/tailwind -- Not a CSS utility
40
+ // eslint-disable-next-line @gitlab/tailwind-no-interpolation -- Not a CSS utility
41
41
  ([breakpoint, width]) => `gl-${breakpoint}-form-select-${width}`
42
42
  ),
43
43
  ];
44
44
  }
45
45
 
46
- // eslint-disable-next-line @gitlab/tailwind -- Not a CSS utility
46
+ // eslint-disable-next-line @gitlab/tailwind-no-interpolation -- Not a CSS utility
47
47
  return [`gl-form-select-${this.width}`];
48
48
  },
49
49
  },
@@ -1,7 +1,6 @@
1
1
  // variables
2
2
  $modal-body-height: 80px;
3
3
  $modal-body-line-height: 1.5;
4
- $modal-box-shadow: 0 4px 16px $t-gray-a-24;
5
4
 
6
5
  // mixins
7
6
  @mixin gl-tmp-modal-btn-group-ml {
@@ -38,7 +37,7 @@ body.modal-open {
38
37
  .modal-content {
39
38
  @apply gl-rounded-base;
40
39
  @apply gl-border-0;
41
- box-shadow: $modal-box-shadow;
40
+ @apply gl-shadow-lg;
42
41
  background-color: var(--gl-background-color-overlap);
43
42
  color: var(--gl-text-color-default);
44
43
 
@@ -0,0 +1,25 @@
1
+ The progress bar component can be used to show an amount of progress.
2
+ It comes in 4 variants and supports setting a custom maximum and height.
3
+
4
+ ## Value
5
+
6
+ The `value` prop can be a Number or String. If not given, it will default to `0`.
7
+
8
+ ## Variants
9
+
10
+ The following variants are available:
11
+
12
+ 1. 'primary' (default)
13
+ 2. 'success'
14
+ 3. 'warning'
15
+ 4. 'danger'
16
+
17
+ ## Maximum
18
+
19
+ A custom maximum can be set with the `max` prop. If not given, it will default to `100`.
20
+
21
+ ## Width and Height
22
+
23
+ The `GlProgressBar` will always expand to the maximum width of its parent container.
24
+ The height can be controlled with the `height` prop. The value should be a standard
25
+ CSS dimension (`px`, `rem`, `em`, etc.) and given as a String, e.g. `'20px'`.
@@ -1,5 +1,16 @@
1
1
  .gl-progress-bar {
2
2
  background-color: var(--gl-progress-bar-track-color);
3
+
4
+ .gl-progress {
5
+ @apply gl-flex-col;
6
+ @apply gl-justify-center;
7
+ @apply gl-w-full;
8
+ @apply gl-overflow-hidden;
9
+ @apply gl-text-center;
10
+ @apply gl-whitespace-nowrap;
11
+ transition: transform 0.6s $gl-easing-out-cubic;
12
+ transform-origin: left;
13
+ }
3
14
 
4
15
  .bg-primary {
5
16
  background-color: var(--gl-progress-bar-indicator-color-default) !important;
@@ -1,15 +1,64 @@
1
1
  <script>
2
- import { BProgress } from '../../../vendor/bootstrap-vue/src/components/progress/progress';
2
+ import { progressBarVariantOptions } from '../../../utils/constants';
3
+ import { toFloat } from '../../../utils/number_utils';
3
4
 
4
5
  export default {
5
6
  name: 'GlProgressBar',
6
- components: {
7
- BProgress,
7
+ props: {
8
+ value: {
9
+ type: [Number, String],
10
+ required: false,
11
+ default: 0,
12
+ },
13
+ variant: {
14
+ type: String,
15
+ required: false,
16
+ default: 'primary',
17
+ validator: (value) => Object.keys(progressBarVariantOptions).includes(value),
18
+ },
19
+ max: {
20
+ type: [Number, String],
21
+ required: false,
22
+ default: 100,
23
+ },
24
+ height: {
25
+ type: String,
26
+ required: false,
27
+ default: null,
28
+ },
29
+ },
30
+ computed: {
31
+ progressHeight() {
32
+ return { height: this.height };
33
+ },
34
+ computedValue() {
35
+ return toFloat(this.value, 0);
36
+ },
37
+ computedMax() {
38
+ const max = toFloat(this.max, 100);
39
+ return max > 0 ? max : 100;
40
+ },
41
+ progressBarStyles() {
42
+ return {
43
+ transform: `scaleX(${this.computedValue / this.computedMax})`,
44
+ };
45
+ },
46
+ classes() {
47
+ return ['gl-progress', `bg-${this.variant}`];
48
+ },
8
49
  },
9
- inheritAttrs: false,
10
50
  };
11
51
  </script>
12
52
 
13
53
  <template>
14
- <b-progress v-bind="$attrs" class="gl-progress-bar" />
54
+ <div class="gl-progress-bar progress" :style="progressHeight">
55
+ <div
56
+ :class="classes"
57
+ :style="progressBarStyles"
58
+ role="progressbar"
59
+ aria-valuemin="0"
60
+ :aria-valuemax="String(computedMax)"
61
+ :aria-valuenow="computedValue"
62
+ ></div>
63
+ </div>
15
64
  </template>
@@ -44,7 +44,7 @@ function renderTitle(h, toast, options) {
44
44
  }
45
45
 
46
46
  function showToast(message, options = {}) {
47
- // eslint-disable-next-line @gitlab/tailwind -- Not a CSS utility
47
+ // eslint-disable-next-line @gitlab/tailwind-no-interpolation -- Not a CSS utility
48
48
  const id = `gl-toast-${toastsCount}`;
49
49
  toastsCount += 1;
50
50
  const hide = () => {
@@ -70,12 +70,16 @@ $toggle-height: 2.5 * $grid-size;
70
70
  position: relative;
71
71
  width: $toggle-width;
72
72
  height: $toggle-height;
73
- @apply gl-outline-none;
74
73
  user-select: none;
74
+ box-shadow: inset 0 0 0 $gl-border-size-1 var(--gl-action-strong-neutral-border-color-default);
75
75
  @apply gl-rounded-pill;
76
76
  @apply gl-duration-slow;
77
77
  @apply gl-leading-normal;
78
78
 
79
+ @media (forced-colors: active) {
80
+ border: 1px solid;
81
+ }
82
+
79
83
  &::selection,
80
84
  &::before::selection,
81
85
  &::after::selection {
@@ -85,22 +89,22 @@ $toggle-height: 2.5 * $grid-size;
85
89
  &:hover {
86
90
  color: var(--gl-toggle-switch-icon-color-unchecked-hover);
87
91
  background-color: var(--gl-action-strong-neutral-background-color-hover);
92
+ box-shadow: inset 0 0 0 $gl-border-size-1 var(--gl-action-strong-neutral-border-color-hover);
88
93
  }
89
94
 
90
95
  &:focus {
91
96
  color: var(--gl-toggle-switch-icon-color-unchecked-focus);
92
97
  background-color: var(--gl-action-strong-neutral-background-color-focus);
98
+ @include gl-focus($color: var(--gl-action-strong-neutral-border-color-focus), $important: true);
93
99
  }
94
100
 
95
101
  &:active {
96
102
  color: var(--gl-toggle-switch-icon-color-unchecked-active);
97
103
  background-color: var(--gl-action-strong-neutral-background-color-active);
98
- }
99
-
100
- &:active,
101
- &:focus,
102
- &:focus:active {
103
- @apply gl-focus;
104
+ @include gl-focus(
105
+ $color: var(--gl-action-strong-neutral-border-color-active),
106
+ $important: true
107
+ );
104
108
  }
105
109
 
106
110
  .toggle-loading {
@@ -141,20 +145,30 @@ $toggle-height: 2.5 * $grid-size;
141
145
  &.is-checked {
142
146
  color: var(--gl-toggle-switch-icon-color-checked-default);
143
147
  background-color: var(--gl-action-strong-confirm-background-color-default);
148
+ box-shadow: inset 0 0 0 $gl-border-size-1 var(--gl-action-strong-confirm-border-color-default);
144
149
 
145
150
  &:hover {
146
151
  color: var(--gl-toggle-switch-icon-color-checked-hover);
147
152
  background-color: var(--gl-action-strong-confirm-background-color-hover);
153
+ box-shadow: inset 0 0 0 $gl-border-size-1 var(--gl-action-strong-confirm-border-color-hover);
148
154
  }
149
155
 
150
156
  &:focus {
151
157
  color: var(--gl-toggle-switch-icon-color-checked-focus);
152
158
  background-color: var(--gl-action-strong-confirm-background-color-focus);
159
+ @include gl-focus(
160
+ $color: var(--gl-action-strong-confirm-border-color-focus),
161
+ $important: true
162
+ );
153
163
  }
154
164
 
155
165
  &:active {
156
166
  color: var(--gl-toggle-switch-icon-color-checked-active);
157
167
  background-color: var(--gl-action-strong-confirm-background-color-active);
168
+ @include gl-focus(
169
+ $color: var(--gl-action-strong-confirm-border-color-active),
170
+ $important: true
171
+ );
158
172
  }
159
173
 
160
174
  .toggle-icon {
@@ -168,10 +182,17 @@ $toggle-height: 2.5 * $grid-size;
168
182
  @apply gl-cursor-not-allowed;
169
183
  color: var(--gl-action-disabled-background-color);
170
184
  background-color: var(--gl-action-disabled-background-color);
185
+ box-shadow: inset 0 0 0 $gl-border-size-1 var(--gl-action-disabled-border-color);
171
186
 
172
187
  .toggle-icon {
173
188
  color: var(--gl-action-disabled-background-color);
174
189
  background-color: var(--gl-action-disabled-foreground-color);
175
190
  }
191
+
192
+ &:active,
193
+ &:focus,
194
+ &:focus:active {
195
+ @include gl-focus($color: var(--gl-action-disabled-border-color), $important: true);
196
+ }
176
197
  }
177
198
  }
@@ -179,6 +179,7 @@ export default {
179
179
  }"
180
180
  class="gl-toggle gl-shrink-0"
181
181
  type="button"
182
+ :disabled="disabled"
182
183
  @click.prevent="toggleFeature"
183
184
  >
184
185
  <gl-loading-icon v-if="isLoading" color="dark" class="toggle-loading" />
@@ -35,7 +35,7 @@ export default {
35
35
  },
36
36
  computed: {
37
37
  variantClass() {
38
- // eslint-disable-next-line @gitlab/tailwind -- Not a CSS utility
38
+ // eslint-disable-next-line @gitlab/tailwind-no-interpolation -- Not a CSS utility
39
39
  return `gl-token-${this.variant}-variant`;
40
40
  },
41
41
  viewOnlyClass() {
@@ -1,16 +1,21 @@
1
1
  // This is overridden in the `gitlab-org/gitlab` codebase so we need to increase specificity using `gl-token-selector`
2
2
  .gl-token-selector {
3
3
  &.gl-token-selector-focus-glow {
4
- @include gl-focus($color: $gray-900, $important: true);
4
+ @include gl-focus($color: var(--gl-control-border-color-focus), $important: true);
5
5
 
6
6
  &.is-invalid {
7
- @include gl-focus($color: $red-500, $important: true);
7
+ @include gl-focus($color: var(--gl-control-border-color-error), $important: true);
8
8
  }
9
9
  }
10
+
11
+ &.gl-token-selector-view-only {
12
+ background: var(--gl-control-background-color-readonly) !important;
13
+ box-shadow: none !important;
14
+ }
10
15
  }
11
16
 
12
17
  .gl-token-selector-token-container:focus .gl-token {
13
- @apply gl-bg-gray-300;
18
+ background-color: var(--gl-token-selector-token-container-token-background-color-focus);
14
19
  }
15
20
 
16
21
  .gl-token-selector-input {
@@ -187,13 +187,14 @@ export default {
187
187
  return false;
188
188
  },
189
189
  stateClass() {
190
- if (this.state === null) {
191
- return '!gl-shadow-inner-1-gray-400';
190
+ switch (this.state) {
191
+ case true:
192
+ return 'is-valid';
193
+ case false:
194
+ return 'is-invalid';
195
+ default:
196
+ return '';
192
197
  }
193
-
194
- return this.state
195
- ? 'is-valid !gl-shadow-inner-1-gray-400'
196
- : 'is-invalid !gl-shadow-inner-1-red-500';
197
198
  },
198
199
  hasSelectedTokens() {
199
200
  return this.selectedTokens.length > 0;
@@ -387,8 +388,15 @@ export default {
387
388
  <div>
388
389
  <div
389
390
  ref="container"
390
- class="gl-token-selector gl-form-input form-control form-control-plaintext gl-flex !gl-cursor-text gl-items-center !gl-px-3 !gl-py-2"
391
- :class="[inputFocused ? 'gl-token-selector-focus-glow' : '', containerClass, stateClass]"
391
+ class="gl-token-selector gl-form-input gl-form-input-not-readonly form-control gl-flex !gl-cursor-text gl-items-center !gl-px-3 !gl-py-2"
392
+ :class="[
393
+ {
394
+ 'gl-token-selector-focus-glow': inputFocused,
395
+ 'gl-token-selector-view-only': viewOnly,
396
+ },
397
+ containerClass,
398
+ stateClass,
399
+ ]"
392
400
  @click="handleContainerClick"
393
401
  >
394
402
  <!-- @slot Optional content to display a placeholder when tokens list is empty
@@ -417,7 +425,7 @@ export default {
417
425
  <input
418
426
  ref="textInput"
419
427
  type="text"
420
- class="gl-token-selector-input gl-h-auto gl-w-4/10 gl-grow gl-border-none gl-bg-transparent gl-px-1 gl-font-regular gl-text-base gl-leading-normal gl-text-gray-900 gl-outline-none"
428
+ class="gl-token-selector-input gl-h-auto gl-w-4/10 gl-grow gl-border-none gl-bg-transparent gl-px-1 gl-font-regular gl-text-base gl-leading-normal gl-text-default gl-outline-none"
421
429
  :value="inputText"
422
430
  :autocomplete="autocomplete"
423
431
  :aria-labelledby="ariaLabelledby"
@@ -498,6 +498,7 @@
498
498
  --gl-control-background-color-disabled: var(--gl-color-neutral-10); /* Used for disabled form control (checkbox, input, radio button, textarea) background. */
499
499
  --gl-control-background-color-default: var(--gl-color-neutral-0); /* Used for form control (input, radio button, checkbox, textarea) default background. */
500
500
  --gl-token-background-color: var(--gl-color-neutral-100); /* Used for the token background color. */
501
+ --gl-token-selector-token-container-token-background-color-focus: var(--gl-color-neutral-300); /* Used for the background color of a token in a token-selector when it's token-container is in the focus state. */
501
502
  --gl-tab-selected-indicator-color-default: var(--gl-color-blue-500); /* Used for the selected indicator of a tab. */
502
503
  --gl-spinner-segment-color-light: var(--gl-color-neutral-200); /* Used for the animated segment of a loading spinner on a dark background. */
503
504
  --gl-spinner-segment-color-default: var(--gl-color-neutral-700); /* Used for the animated segment of a loading spinner. */
@@ -498,6 +498,7 @@
498
498
  --gl-control-background-color-disabled: var(--gl-color-alpha-light-4); /* Used for disabled form control (checkbox, input, radio button, textarea) background. */
499
499
  --gl-control-background-color-default: var(--gl-color-alpha-dark-40); /* Used for form control (input, radio button, checkbox, textarea) default background. */
500
500
  --gl-token-background-color: var(--gl-color-neutral-800); /* Used for the token background color. */
501
+ --gl-token-selector-token-container-token-background-color-focus: var(--gl-color-neutral-600); /* Used for the background color of a token in a token-selector when it's token-container is in the focus state. */
501
502
  --gl-tab-selected-indicator-color-default: var(--gl-color-blue-400); /* Used for the selected indicator of a tab. */
502
503
  --gl-spinner-segment-color-light: var(--gl-color-neutral-200); /* Used for the animated segment of a loading spinner on a dark background. */
503
504
  --gl-spinner-segment-color-default: var(--gl-color-neutral-200); /* Used for the animated segment of a loading spinner. */
@@ -691,6 +691,7 @@ export const GL_TOGGLE_SWITCH_ICON_COLOR_CHECKED_HOVER = '#63a6e9'; // Used for
691
691
  export const GL_TOGGLE_SWITCH_ICON_COLOR_CHECKED_FOCUS = '#63a6e9'; // Used for the icon color of a checked toggle switch in the focus state.
692
692
  export const GL_TOGGLE_SWITCH_ICON_COLOR_CHECKED_ACTIVE = '#9dc7f1'; // Used for the icon color of a checked toggle switch in the active state.
693
693
  export const GL_TOGGLE_SWITCH_ICON_COLOR_DISABLED = '#28272d'; // Used for the icon color of a disabled toggle switch.
694
+ export const GL_TOKEN_SELECTOR_TOKEN_CONTAINER_TOKEN_BACKGROUND_COLOR_FOCUS = '#626168'; // Used for the background color of a token in a token-selector when it's token-container is in the focus state.
694
695
  export const GL_TOKEN_FOREGROUND_COLOR = '#ececef'; // Used for the token foreground color.
695
696
  export const GL_TOKEN_BACKGROUND_COLOR = '#3a383f'; // Used for the token background color.
696
697
  export const GL_CONTROL_BACKGROUND_COLOR_DEFAULT = 'rgba(05, 05, 06, 0.4)'; // Used for form control (input, radio button, checkbox, textarea) default background.
@@ -691,6 +691,7 @@ export const GL_TOGGLE_SWITCH_ICON_COLOR_CHECKED_HOVER = '#1068bf'; // Used for
691
691
  export const GL_TOGGLE_SWITCH_ICON_COLOR_CHECKED_FOCUS = '#1068bf'; // Used for the icon color of a checked toggle switch in the focus state.
692
692
  export const GL_TOGGLE_SWITCH_ICON_COLOR_CHECKED_ACTIVE = '#0b5cad'; // Used for the icon color of a checked toggle switch in the active state.
693
693
  export const GL_TOGGLE_SWITCH_ICON_COLOR_DISABLED = '#ececef'; // Used for the icon color of a disabled toggle switch.
694
+ export const GL_TOKEN_SELECTOR_TOKEN_CONTAINER_TOKEN_BACKGROUND_COLOR_FOCUS = '#a4a3a8'; // Used for the background color of a token in a token-selector when it's token-container is in the focus state.
694
695
  export const GL_TOKEN_FOREGROUND_COLOR = '#3a383f'; // Used for the token foreground color.
695
696
  export const GL_TOKEN_BACKGROUND_COLOR = '#dcdcde'; // Used for the token background color.
696
697
  export const GL_CONTROL_BACKGROUND_COLOR_DEFAULT = '#fff'; // Used for form control (input, radio button, checkbox, textarea) default background.
@@ -15349,6 +15349,41 @@
15349
15349
  }
15350
15350
  }
15351
15351
  },
15352
+ "token-selector": {
15353
+ "token-container": {
15354
+ "token": {
15355
+ "background": {
15356
+ "color": {
15357
+ "focus": {
15358
+ "value": "#626168",
15359
+ "$type": "color",
15360
+ "comment": "Used for the background color of a token in a token-selector when it's token-container is in the focus state.",
15361
+ "filePath": "src/tokens/contextual/token-selector.tokens.json",
15362
+ "isSource": true,
15363
+ "original": {
15364
+ "value": {
15365
+ "default": "{color.neutral.300}",
15366
+ "dark": "{color.neutral.600}"
15367
+ },
15368
+ "$type": "color",
15369
+ "comment": "Used for the background color of a token in a token-selector when it's token-container is in the focus state."
15370
+ },
15371
+ "name": "TOKEN_SELECTOR_TOKEN_CONTAINER_TOKEN_BACKGROUND_COLOR_FOCUS",
15372
+ "attributes": {},
15373
+ "path": [
15374
+ "token-selector",
15375
+ "token-container",
15376
+ "token",
15377
+ "background",
15378
+ "color",
15379
+ "focus"
15380
+ ]
15381
+ }
15382
+ }
15383
+ }
15384
+ }
15385
+ }
15386
+ },
15352
15387
  "token": {
15353
15388
  "foreground": {
15354
15389
  "color": {