@gitlab/ui 134.9.0 → 135.0.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 (102) hide show
  1. package/dist/components/base/animated_icon/base_animated_icon.js +3 -0
  2. package/dist/components/base/color_mode_toggle/color_mode_toggle.js +11 -1
  3. package/dist/components/base/filtered_search/filtered_search.js +9 -0
  4. package/dist/components/base/filtered_search/filtered_search_suggestion.js +3 -0
  5. package/dist/components/base/filtered_search/filtered_search_term.js +9 -0
  6. package/dist/components/base/filtered_search/filtered_search_token.js +15 -0
  7. package/dist/components/base/filtered_search/filtered_search_token_segment.js +27 -0
  8. package/dist/components/base/form/form_combobox/form_combobox.js +18 -0
  9. package/dist/components/base/form/form_date/form_date.js +18 -0
  10. package/dist/components/base/form/form_fields/form_field_validator.js +9 -0
  11. package/dist/components/base/form/form_fields/form_fields_loop.js +3 -0
  12. package/dist/components/base/markdown/markdown.js +3 -0
  13. package/dist/components/base/new_dropdowns/base_dropdown/base_dropdown.js +54 -0
  14. package/dist/components/base/new_dropdowns/disclosure/disclosure_dropdown_item.js +3 -0
  15. package/dist/components/base/new_dropdowns/listbox/listbox.js +3 -0
  16. package/dist/components/base/new_dropdowns/listbox/listbox_group.js +6 -0
  17. package/dist/components/base/new_dropdowns/listbox/listbox_item.js +15 -0
  18. package/dist/components/base/search_box_by_click/search_box_by_click.js +6 -0
  19. package/dist/components/base/segmented_control/segmented_control.js +6 -0
  20. package/dist/components/base/table_lite/table_lite.js +9 -0
  21. package/dist/components/base/tabs/tab/tab.js +3 -0
  22. package/dist/components/base/tabs/tabs/tabs.js +21 -0
  23. package/dist/components/base/toast/toast.js +12 -0
  24. package/dist/components/base/toggle/toggle.js +3 -0
  25. package/dist/components/base/token_selector/token_container.js +12 -0
  26. package/dist/components/base/token_selector/token_selector_dropdown.js +27 -0
  27. package/dist/components/charts/area/area.js +36 -0
  28. package/dist/components/charts/bar/bar.js +15 -0
  29. package/dist/components/charts/chart/chart.js +7 -1
  30. package/dist/components/charts/column/column.js +24 -0
  31. package/dist/components/charts/discrete_scatter/discrete_scatter.js +21 -0
  32. package/dist/components/charts/gauge/gauge.js +21 -0
  33. package/dist/components/charts/heatmap/heatmap.js +33 -0
  34. package/dist/components/charts/legend/legend.js +15 -0
  35. package/dist/components/charts/line/line.js +33 -0
  36. package/dist/components/charts/series_label/series_label.js +6 -0
  37. package/dist/components/charts/shared/tooltip/tooltip.js +6 -0
  38. package/dist/components/charts/shared/tooltip/tooltip_default_format/tooltip_default_format.js +3 -0
  39. package/dist/components/charts/single_stat/single_stat.js +30 -0
  40. package/dist/components/charts/stacked_column/stacked_column.js +55 -0
  41. package/dist/components/regions/empty_state/empty_state.js +3 -0
  42. package/dist/components/shared_components/clear_icon_button/clear_icon_button.js +6 -0
  43. package/dist/components/shared_components/close_button/close_button.js +3 -0
  44. package/dist/components/utilities/animated_number/animated_number.js +9 -0
  45. package/dist/components/utilities/intersperse/intersperse.js +6 -0
  46. package/dist/index.css +1 -1
  47. package/dist/index.css.map +1 -1
  48. package/dist/tokens/tokens_story.js +3 -0
  49. package/package.json +4 -3
  50. package/src/components/base/animated_icon/base_animated_icon.vue +3 -0
  51. package/src/components/base/color_mode_toggle/color_mode_toggle.vue +11 -0
  52. package/src/components/base/filtered_search/filtered_search.vue +9 -0
  53. package/src/components/base/filtered_search/filtered_search_suggestion.vue +3 -0
  54. package/src/components/base/filtered_search/filtered_search_term.vue +9 -0
  55. package/src/components/base/filtered_search/filtered_search_token.vue +15 -0
  56. package/src/components/base/filtered_search/filtered_search_token_segment.vue +27 -0
  57. package/src/components/base/form/form_combobox/form_combobox.vue +18 -0
  58. package/src/components/base/form/form_date/form_date.vue +18 -0
  59. package/src/components/base/form/form_fields/form_field_validator.vue +9 -0
  60. package/src/components/base/form/form_fields/form_fields_loop.vue +3 -0
  61. package/src/components/base/icon/icon.figma.batch.ts +26 -0
  62. package/src/components/base/markdown/markdown.vue +3 -0
  63. package/src/components/base/new_dropdowns/base_dropdown/base_dropdown.vue +54 -0
  64. package/src/components/base/new_dropdowns/disclosure/disclosure_dropdown_item.vue +3 -0
  65. package/src/components/base/new_dropdowns/listbox/listbox.vue +3 -0
  66. package/src/components/base/new_dropdowns/listbox/listbox_group.vue +6 -0
  67. package/src/components/base/new_dropdowns/listbox/listbox_item.vue +15 -0
  68. package/src/components/base/pagination/pagination.scss +1 -0
  69. package/src/components/base/search_box_by_click/search_box_by_click.vue +6 -0
  70. package/src/components/base/segmented_control/segmented_control.vue +6 -0
  71. package/src/components/base/table_lite/table_lite.vue +9 -0
  72. package/src/components/base/tabs/tab/tab.vue +3 -0
  73. package/src/components/base/tabs/tabs/tabs.vue +21 -0
  74. package/src/components/base/toast/toast.vue +12 -0
  75. package/src/components/base/toggle/toggle.vue +3 -0
  76. package/src/components/base/token_selector/token_container.vue +12 -0
  77. package/src/components/base/token_selector/token_selector_dropdown.vue +27 -0
  78. package/src/components/charts/area/area.vue +36 -0
  79. package/src/components/charts/bar/bar.vue +15 -0
  80. package/src/components/charts/chart/chart.vue +7 -1
  81. package/src/components/charts/column/column.vue +24 -0
  82. package/src/components/charts/discrete_scatter/discrete_scatter.vue +21 -0
  83. package/src/components/charts/gauge/gauge.vue +21 -0
  84. package/src/components/charts/heatmap/heatmap.vue +33 -0
  85. package/src/components/charts/legend/legend.vue +15 -0
  86. package/src/components/charts/line/line.vue +33 -0
  87. package/src/components/charts/series_label/series_label.vue +6 -0
  88. package/src/components/charts/shared/tooltip/tooltip.vue +6 -0
  89. package/src/components/charts/shared/tooltip/tooltip_default_format/tooltip_default_format.vue +3 -0
  90. package/src/components/charts/single_stat/single_stat.vue +30 -0
  91. package/src/components/charts/stacked_column/stacked_column.vue +55 -0
  92. package/src/components/regions/empty_state/empty_state.vue +3 -0
  93. package/src/components/shared_components/clear_icon_button/clear_icon_button.vue +6 -0
  94. package/src/components/shared_components/close_button/close_button.vue +3 -0
  95. package/src/components/utilities/animated_number/animated_number.vue +9 -0
  96. package/src/components/utilities/intersperse/intersperse.vue +6 -0
  97. package/src/tokens/build/figma/mode.dark.json +34 -17
  98. package/src/tokens/build/figma/mode.json +34 -17
  99. package/src/tokens/build/json/tokens.dark.json +68 -34
  100. package/src/tokens/build/json/tokens.json +68 -34
  101. package/src/tokens/contextual/toggle.tokens.json +34 -17
  102. package/src/tokens/tokens_story.vue +3 -0
@@ -13,6 +13,9 @@ var script = {
13
13
  },
14
14
  inject: ['containerClass'],
15
15
  props: {
16
+ /**
17
+ * Map of design tokens to display in the story.
18
+ */
16
19
  tokens: {
17
20
  type: Object,
18
21
  required: false,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gitlab/ui",
3
- "version": "134.9.0",
3
+ "version": "135.0.0",
4
4
  "description": "GitLab UI Components",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
@@ -29,6 +29,7 @@
29
29
  "src/vendor/bootstrap-vue/src/**/*.{js,scss}",
30
30
  "src/vendor/bootstrap/scss/**/*.scss",
31
31
  "!*.figma.{js,ts}",
32
+ "!*.figma.batch.json",
32
33
  "!*.stories.js",
33
34
  "!*.snap",
34
35
  "!*.spec.{js,scss}"
@@ -92,7 +93,7 @@
92
93
  "chokidar": "^4.0.3",
93
94
  "sane": "^5.0.1",
94
95
  "jackspeak": "2.3.6",
95
- "postcss": "8.5.15",
96
+ "postcss": "8.5.16",
96
97
  "json5": "2.2.3",
97
98
  "rollup-plugin-vue/@vue/component-compiler/postcss-modules-sync/generic-names/loader-utils": "3.3.1"
98
99
  },
@@ -157,7 +158,7 @@
157
158
  "pikaday": "^1.8.0",
158
159
  "playwright": "^1.61.1",
159
160
  "playwright-core": "^1.61.1",
160
- "postcss": "8.5.15",
161
+ "postcss": "8.5.16",
161
162
  "postcss-loader": "8.2.1",
162
163
  "postcss-scss": "4.0.9",
163
164
  "react": "18.3.1",
@@ -22,6 +22,9 @@ export default {
22
22
  default: 'current',
23
23
  validator: (value) => Object.keys(animatedIconVariantOptions).includes(value),
24
24
  },
25
+ /**
26
+ * Controls the animated state of the icon.
27
+ */
25
28
  isOn: {
26
29
  type: Boolean,
27
30
  required: false,
@@ -1,5 +1,6 @@
1
1
  <script>
2
2
  import { translate } from '../../../utils/i18n';
3
+ import { buttonSizeOptions } from '../../../utils/constants';
3
4
  import GlButton from '../button/button.vue';
4
5
 
5
6
  export default {
@@ -16,6 +17,15 @@ export default {
16
17
  required: false,
17
18
  default: false,
18
19
  },
20
+ /**
21
+ * Specify the size of the button.
22
+ */
23
+ size: {
24
+ type: String,
25
+ required: false,
26
+ default: 'medium',
27
+ validator: (value) => Object.keys(buttonSizeOptions).includes(value),
28
+ },
19
29
  /**
20
30
  * The label when in dark mode. Screen-reader only.
21
31
  */
@@ -59,6 +69,7 @@ export default {
59
69
  :aria-label="ariaLabel"
60
70
  class="btn-icon"
61
71
  category="tertiary"
72
+ :size="size"
62
73
  :icon="iconName"
63
74
  @click="handleClick"
64
75
  />
@@ -94,11 +94,17 @@ export default {
94
94
  required: false,
95
95
  default: 'Search',
96
96
  },
97
+ /**
98
+ * Title text for the clear button.
99
+ */
97
100
  clearButtonTitle: {
98
101
  type: String,
99
102
  required: false,
100
103
  default: 'Clear',
101
104
  },
105
+ /**
106
+ * Array of history items to display in the search.
107
+ */
102
108
  historyItems: {
103
109
  type: Array,
104
110
  required: false,
@@ -137,6 +143,9 @@ export default {
137
143
  required: false,
138
144
  default: () => ({}),
139
145
  },
146
+ /**
147
+ * When true, renders the filtered search in a non-interactive view-only mode.
148
+ */
140
149
  viewOnly: {
141
150
  type: Boolean,
142
151
  required: false,
@@ -17,6 +17,9 @@ export default {
17
17
  required: false,
18
18
  default: '',
19
19
  },
20
+ /**
21
+ * The value of the suggestion item.
22
+ */
20
23
  value: {
21
24
  required: true,
22
25
  validator: () => true,
@@ -43,6 +43,9 @@ export default {
43
43
  required: false,
44
44
  default: () => ({ data: '' }),
45
45
  },
46
+ /**
47
+ * Placeholder text for the search input.
48
+ */
46
49
  placeholder: {
47
50
  type: String,
48
51
  required: false,
@@ -72,6 +75,9 @@ export default {
72
75
  required: false,
73
76
  default: () => [],
74
77
  },
78
+ /**
79
+ * Position of the cursor in the input.
80
+ */
75
81
  cursorPosition: {
76
82
  type: String,
77
83
  required: false,
@@ -86,6 +92,9 @@ export default {
86
92
  required: false,
87
93
  default: termTokenDefinition.title,
88
94
  },
95
+ /**
96
+ * When true, renders in a non-interactive view-only mode.
97
+ */
89
98
  viewOnly: {
90
99
  type: Boolean,
91
100
  required: false,
@@ -25,6 +25,9 @@ export default {
25
25
  },
26
26
  inheritAttrs: false,
27
27
  props: {
28
+ /**
29
+ * Array of available token definitions.
30
+ */
28
31
  availableTokens: {
29
32
  type: Array,
30
33
  required: false,
@@ -46,6 +49,9 @@ export default {
46
49
  required: false,
47
50
  default: false,
48
51
  },
52
+ /**
53
+ * Array of pre-selected multi-select values.
54
+ */
49
55
  multiSelectValues: {
50
56
  type: Array,
51
57
  required: false,
@@ -67,17 +73,26 @@ export default {
67
73
  required: false,
68
74
  default: false,
69
75
  },
76
+ /**
77
+ * Position of the cursor in the input.
78
+ */
70
79
  cursorPosition: {
71
80
  type: String,
72
81
  required: false,
73
82
  default: 'end',
74
83
  validator: (value) => ['start', 'end'].includes(value),
75
84
  },
85
+ /**
86
+ * When true, renders in a non-interactive view-only mode.
87
+ */
76
88
  viewOnly: {
77
89
  type: Boolean,
78
90
  required: false,
79
91
  default: false,
80
92
  },
93
+ /**
94
+ * Attributes to bind to the input element of the data segment.
95
+ */
81
96
  dataSegmentInputAttributes: {
82
97
  type: Object,
83
98
  required: false,
@@ -70,31 +70,49 @@ export default {
70
70
  required: false,
71
71
  default: false,
72
72
  },
73
+ /**
74
+ * Whether this segment represents a search term.
75
+ */
73
76
  isTerm: {
74
77
  type: Boolean,
75
78
  required: false,
76
79
  default: false,
77
80
  },
81
+ /**
82
+ * Label text for the segment.
83
+ */
78
84
  label: {
79
85
  type: String,
80
86
  required: false,
81
87
  default: 'Search',
82
88
  },
89
+ /**
90
+ * When true, enables multi-select mode.
91
+ */
83
92
  multiSelect: {
84
93
  type: Boolean,
85
94
  required: false,
86
95
  default: false,
87
96
  },
97
+ /**
98
+ * Array of selectable options.
99
+ */
88
100
  options: {
89
101
  type: Array,
90
102
  required: false,
91
103
  default: () => null,
92
104
  },
105
+ /**
106
+ * The field name used for option display text.
107
+ */
93
108
  optionTextField: {
94
109
  type: String,
95
110
  required: false,
96
111
  default: 'title',
97
112
  },
113
+ /**
114
+ * Custom keydown event handler function.
115
+ */
98
116
  customInputKeydownHandler: {
99
117
  type: Function,
100
118
  required: false,
@@ -123,17 +141,26 @@ export default {
123
141
  required: false,
124
142
  default: false,
125
143
  },
144
+ /**
145
+ * The current value of the segment.
146
+ */
126
147
  currentValue: {
127
148
  type: Array,
128
149
  required: false,
129
150
  default: () => [],
130
151
  },
152
+ /**
153
+ * Position of the cursor in the input.
154
+ */
131
155
  cursorPosition: {
132
156
  type: String,
133
157
  required: false,
134
158
  default: 'end',
135
159
  validator: (value) => ['start', 'end'].includes(value),
136
160
  },
161
+ /**
162
+ * When true, renders in a non-interactive view-only mode.
163
+ */
137
164
  viewOnly: {
138
165
  type: Boolean,
139
166
  required: false,
@@ -19,15 +19,24 @@ export default {
19
19
  event: 'input',
20
20
  },
21
21
  props: {
22
+ /**
23
+ * Text for the combobox label.
24
+ */
22
25
  labelText: {
23
26
  type: String,
24
27
  required: true,
25
28
  },
29
+ /**
30
+ * When true, visually hides the label while keeping it accessible to screen readers.
31
+ */
26
32
  labelSrOnly: {
27
33
  type: Boolean,
28
34
  required: false,
29
35
  default: false,
30
36
  },
37
+ /**
38
+ * Array of tokens displayed in the combobox.
39
+ */
31
40
  tokenList: {
32
41
  type: Array,
33
42
  required: true,
@@ -40,15 +49,24 @@ export default {
40
49
  required: false,
41
50
  default: () => [],
42
51
  },
52
+ /**
53
+ * The current value of the combobox.
54
+ */
43
55
  value: {
44
56
  type: [String, Object],
45
57
  required: true,
46
58
  },
59
+ /**
60
+ * The attribute name used to match values against options.
61
+ */
47
62
  matchValueToAttr: {
48
63
  type: String,
49
64
  required: false,
50
65
  default: undefined,
51
66
  },
67
+ /**
68
+ * When true, automatically focuses the combobox on mount.
69
+ */
52
70
  autofocus: {
53
71
  type: Boolean,
54
72
  required: false,
@@ -13,31 +13,49 @@ export default {
13
13
  prop: 'value',
14
14
  },
15
15
  props: {
16
+ /**
17
+ * Unique identifier for the date input.
18
+ */
16
19
  id: {
17
20
  type: String,
18
21
  required: false,
19
22
  default: null,
20
23
  },
24
+ /**
25
+ * Minimum allowed date value.
26
+ */
21
27
  min: {
22
28
  type: String,
23
29
  required: false,
24
30
  default: null,
25
31
  },
32
+ /**
33
+ * Maximum allowed date value.
34
+ */
26
35
  max: {
27
36
  type: String,
28
37
  required: false,
29
38
  default: null,
30
39
  },
40
+ /**
41
+ * Error message displayed when the value is below the minimum.
42
+ */
31
43
  minInvalidFeedback: {
32
44
  type: String,
33
45
  required: false,
34
46
  default: 'Must be after minimum date.',
35
47
  },
48
+ /**
49
+ * Error message displayed when the value exceeds the maximum.
50
+ */
36
51
  maxInvalidFeedback: {
37
52
  type: String,
38
53
  required: false,
39
54
  default: 'Must be before maximum date.',
40
55
  },
56
+ /**
57
+ * The current value of the date picker.
58
+ */
41
59
  value: {
42
60
  type: String,
43
61
  required: false,
@@ -12,16 +12,25 @@
12
12
  export default {
13
13
  name: 'GlFormFieldValidator',
14
14
  props: {
15
+ /**
16
+ * The value to validate.
17
+ */
15
18
  value: {
16
19
  required: true,
17
20
  // ESLint requires "validator" or "type". Any kind of value is valid.
18
21
  validator: () => true,
19
22
  },
23
+ /**
24
+ * Array of validation functions or rules.
25
+ */
20
26
  validators: {
21
27
  type: Array,
22
28
  required: false,
23
29
  default: () => [],
24
30
  },
31
+ /**
32
+ * When true, triggers validation.
33
+ */
25
34
  shouldValidate: {
26
35
  type: Boolean,
27
36
  required: false,
@@ -4,6 +4,9 @@ import Vue from 'vue';
4
4
  export default {
5
5
  name: 'GlFormFieldsLoop',
6
6
  props: {
7
+ /**
8
+ * Field configurations to render in a loop.
9
+ */
7
10
  fields: {
8
11
  type: Object,
9
12
  required: true,
@@ -0,0 +1,26 @@
1
+ import figma from 'figma';
2
+
3
+ // Shared Code Connect template for every icon in the GitLab Product Icons
4
+ // library. One entry per icon is supplied by icon.figma.batch.json; the icon's
5
+ // name is exposed via figma.batch.name.
6
+ //
7
+ // Some icons are framed at a non-default size in Figma (e.g. the 12px trend,
8
+ // severity, and status icons). Those entries carry a `size` field in the batch
9
+ // JSON, which is rendered as `:size="12"`. Icons without a `size` field use the
10
+ // GlIcon default (16) and render no size attribute.
11
+ //
12
+ // `metadata.props.name` lets consuming components (badge, button, etc.) read
13
+ // the chosen icon's name through
14
+ // `instance.getInstanceSwap(prop).executeTemplate().metadata.props.name`,
15
+ // which is how we eventually replace the icon="REPLACE" placeholders.
16
+ const sizeAttr = figma.batch.size ? ` :size="${figma.batch.size}"` : '';
17
+
18
+ export default {
19
+ id: figma.batch.id,
20
+ imports: ["import { GlIcon } from '@gitlab/ui'"],
21
+ example: figma.code`<gl-icon name="${figma.batch.name}"${sizeAttr} />`,
22
+ metadata: {
23
+ nestable: true,
24
+ props: { name: figma.batch.name },
25
+ },
26
+ };
@@ -2,6 +2,9 @@
2
2
  export default {
3
3
  name: 'GlMarkdown',
4
4
  props: {
5
+ /**
6
+ * When true, renders the markdown in a compact style.
7
+ */
5
8
  compact: {
6
9
  type: Boolean,
7
10
  required: false,
@@ -61,59 +61,92 @@ export default {
61
61
  },
62
62
  },
63
63
  props: {
64
+ /**
65
+ * Text displayed on the dropdown toggle button.
66
+ */
64
67
  toggleText: {
65
68
  type: String,
66
69
  required: false,
67
70
  default: '',
68
71
  },
72
+ /**
73
+ * When true, visually hides the toggle text while keeping it accessible to screen readers.
74
+ */
69
75
  textSrOnly: {
70
76
  type: Boolean,
71
77
  required: false,
72
78
  default: false,
73
79
  },
80
+ /**
81
+ * When true, renders the dropdown at 100% width of its parent container.
82
+ */
74
83
  block: {
75
84
  type: Boolean,
76
85
  required: false,
77
86
  default: false,
78
87
  },
88
+ /**
89
+ * Visual category of the dropdown toggle button.
90
+ */
79
91
  category: {
80
92
  type: String,
81
93
  required: false,
82
94
  default: buttonCategoryOptions.primary,
83
95
  validator: (value) => Object.keys(buttonCategoryOptions).includes(value),
84
96
  },
97
+ /**
98
+ * Visual variant of the dropdown toggle button.
99
+ */
85
100
  variant: {
86
101
  type: String,
87
102
  required: false,
88
103
  default: dropdownVariantOptions.default,
89
104
  validator: (value) => Object.keys(dropdownVariantOptions).includes(value),
90
105
  },
106
+ /**
107
+ * Size of the dropdown toggle button.
108
+ */
91
109
  size: {
92
110
  type: String,
93
111
  required: false,
94
112
  default: 'medium',
95
113
  validator: (value) => Object.keys(buttonSizeOptions).includes(value),
96
114
  },
115
+ /**
116
+ * Name of the icon to display in the toggle button.
117
+ */
97
118
  icon: {
98
119
  type: String,
99
120
  required: false,
100
121
  default: '',
101
122
  },
123
+ /**
124
+ * When true, disables the dropdown.
125
+ */
102
126
  disabled: {
103
127
  type: Boolean,
104
128
  required: false,
105
129
  default: false,
106
130
  },
131
+ /**
132
+ * When true, shows a loading state on the toggle button.
133
+ */
107
134
  loading: {
108
135
  type: Boolean,
109
136
  required: false,
110
137
  default: false,
111
138
  },
139
+ /**
140
+ * Additional CSS classes to apply to the toggle element.
141
+ */
112
142
  toggleClass: {
113
143
  type: [String, Array, Object],
114
144
  required: false,
115
145
  default: null,
116
146
  },
147
+ /**
148
+ * When true, hides the caret icon on the toggle button.
149
+ */
117
150
  noCaret: {
118
151
  type: Boolean,
119
152
  required: false,
@@ -127,6 +160,9 @@ export default {
127
160
  required: false,
128
161
  default: null,
129
162
  },
163
+ /**
164
+ * Placement for the dropdown menu.
165
+ */
130
166
  placement: {
131
167
  type: String,
132
168
  required: false,
@@ -143,6 +179,9 @@ export default {
143
179
  },
144
180
  },
145
181
  // ARIA props
182
+ /**
183
+ * ARIA haspopup attribute value for accessibility.
184
+ */
146
185
  ariaHaspopup: {
147
186
  type: [String, Boolean],
148
187
  required: false,
@@ -151,21 +190,33 @@ export default {
151
190
  return ['menu', 'listbox', 'tree', 'grid', 'dialog', true, false].includes(value);
152
191
  },
153
192
  },
193
+ /**
194
+ * ID of the currently active item for accessibility.
195
+ */
154
196
  activeItemId: {
155
197
  type: String,
156
198
  required: false,
157
199
  default: undefined,
158
200
  },
201
+ /**
202
+ * When true, indicates the dropdown has an external label for accessibility.
203
+ */
159
204
  hasExternalLabel: {
160
205
  type: Boolean,
161
206
  required: false,
162
207
  default: false,
163
208
  },
209
+ /**
210
+ * When true, renders a searchable listbox.
211
+ */
164
212
  hasSearchableListbox: {
165
213
  type: Boolean,
166
214
  required: false,
167
215
  default: false,
168
216
  },
217
+ /**
218
+ * When true, renders as a disclosure dropdown.
219
+ */
169
220
  isDisclosure: {
170
221
  type: Boolean,
171
222
  required: false,
@@ -212,6 +263,9 @@ export default {
212
263
  required: false,
213
264
  default: () => ({ mainAxis: DEFAULT_OFFSET }),
214
265
  },
266
+ /**
267
+ * When true, allows the dropdown to take the full width available.
268
+ */
215
269
  fluidWidth: {
216
270
  type: Boolean,
217
271
  required: false,
@@ -14,6 +14,9 @@ export default {
14
14
  ITEM_CLASS,
15
15
  components: { GlLink, GlIcon },
16
16
  props: {
17
+ /**
18
+ * The item object to render as a disclosure dropdown item.
19
+ */
17
20
  item: {
18
21
  type: Object,
19
22
  required: false,
@@ -380,6 +380,9 @@ export default {
380
380
  required: false,
381
381
  default: false,
382
382
  },
383
+ /**
384
+ * Screen-reader-only label for results count.
385
+ */
383
386
  srOnlyResultsLabel: {
384
387
  type: Function,
385
388
  required: false,
@@ -4,10 +4,16 @@ import { uniqueId } from 'lodash-es';
4
4
  export default {
5
5
  name: 'GlListboxGroup',
6
6
  props: {
7
+ /**
8
+ * The display name of the listbox group.
9
+ */
7
10
  name: {
8
11
  type: String,
9
12
  required: true,
10
13
  },
14
+ /**
15
+ * When true, visually hides the group name while keeping it accessible to screen readers.
16
+ */
11
17
  textSrOnly: {
12
18
  type: Boolean,
13
19
  required: false,
@@ -9,26 +9,41 @@ export default {
9
9
  GlIcon,
10
10
  },
11
11
  props: {
12
+ /**
13
+ * When true, marks the item as selected.
14
+ */
12
15
  isSelected: {
13
16
  type: Boolean,
14
17
  default: false,
15
18
  required: false,
16
19
  },
20
+ /**
21
+ * When true, marks the item as focused.
22
+ */
17
23
  isFocused: {
18
24
  type: Boolean,
19
25
  default: false,
20
26
  required: false,
21
27
  },
28
+ /**
29
+ * When true, centers the check icon.
30
+ */
22
31
  isCheckCentered: {
23
32
  type: Boolean,
24
33
  required: false,
25
34
  default: false,
26
35
  },
36
+ /**
37
+ * When true, highlights the item.
38
+ */
27
39
  isHighlighted: {
28
40
  type: Boolean,
29
41
  default: false,
30
42
  required: false,
31
43
  },
44
+ /**
45
+ * When true, disables the item.
46
+ */
32
47
  isDisabled: {
33
48
  type: Boolean,
34
49
  default: false,