@patternfly/react-docs 7.6.0-prerelease.7 → 7.6.0-prerelease.8

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 (162) hide show
  1. package/package.json +12 -13
  2. package/patternfly-docs/generated/components/about-modal/react.js +149 -0
  3. package/patternfly-docs/generated/components/accordion/react.js +262 -0
  4. package/patternfly-docs/generated/components/action-list/react.js +144 -0
  5. package/patternfly-docs/generated/components/alert/react-demos.js +56 -0
  6. package/patternfly-docs/generated/components/alert/react.js +1433 -0
  7. package/patternfly-docs/generated/components/avatar/react.js +166 -0
  8. package/patternfly-docs/generated/components/back-to-top/react-demos.js +60 -0
  9. package/patternfly-docs/generated/components/back-to-top/react.js +77 -0
  10. package/patternfly-docs/generated/components/backdrop/react.js +64 -0
  11. package/patternfly-docs/generated/components/background-image/react.js +62 -0
  12. package/patternfly-docs/generated/components/badge/react.js +97 -0
  13. package/patternfly-docs/generated/components/banner/react-demos.js +57 -0
  14. package/patternfly-docs/generated/components/banner/react.js +148 -0
  15. package/patternfly-docs/generated/components/brand/react.js +142 -0
  16. package/patternfly-docs/generated/components/breadcrumb/react.js +206 -0
  17. package/patternfly-docs/generated/components/button/react-demos.js +57 -0
  18. package/patternfly-docs/generated/components/button/react.js +826 -0
  19. package/patternfly-docs/generated/components/card/react-demos.js +201 -0
  20. package/patternfly-docs/generated/components/card/react.js +1015 -0
  21. package/patternfly-docs/generated/components/charts/area-chart/-Victory.js +1350 -0
  22. package/patternfly-docs/generated/components/charts/bar-chart/-Victory.js +1334 -0
  23. package/patternfly-docs/generated/components/charts/box-plot-chart/-Victory.js +1282 -0
  24. package/patternfly-docs/generated/components/charts/bullet-chart/-Victory.js +848 -0
  25. package/patternfly-docs/generated/components/charts/colors-for-charts/-Victory.js +192 -0
  26. package/patternfly-docs/generated/components/charts/donut-chart/-Victory.js +426 -0
  27. package/patternfly-docs/generated/components/charts/donut-utilization-chart/-Victory.js +804 -0
  28. package/patternfly-docs/generated/components/charts/legends/-Victory.js +3230 -0
  29. package/patternfly-docs/generated/components/charts/line-chart/-Victory.js +1178 -0
  30. package/patternfly-docs/generated/components/charts/line-chart/ECharts.js +525 -0
  31. package/patternfly-docs/generated/components/charts/patterns/-Victory.js +3382 -0
  32. package/patternfly-docs/generated/components/charts/pie-chart/-Victory.js +377 -0
  33. package/patternfly-docs/generated/components/charts/resize-observer/-Victory.js +2475 -0
  34. package/patternfly-docs/generated/components/charts/sankey-chart/ECharts.js +538 -0
  35. package/patternfly-docs/generated/components/charts/scatter-chart/-Victory.js +1551 -0
  36. package/patternfly-docs/generated/components/charts/skeletons/-Victory.js +4115 -0
  37. package/patternfly-docs/generated/components/charts/sparkline-chart/-Victory.js +955 -0
  38. package/patternfly-docs/generated/components/charts/stack-chart/-Victory.js +1173 -0
  39. package/patternfly-docs/generated/components/charts/threshold-chart/-Victory.js +1166 -0
  40. package/patternfly-docs/generated/components/charts/tooltips/-Victory.js +413 -0
  41. package/patternfly-docs/generated/components/chip/react-deprecated.js +323 -0
  42. package/patternfly-docs/generated/components/clipboard-copy/react.js +373 -0
  43. package/patternfly-docs/generated/components/code-block/react.js +148 -0
  44. package/patternfly-docs/generated/components/code-editor/react.js +659 -0
  45. package/patternfly-docs/generated/components/compass/react-demos.js +147 -0
  46. package/patternfly-docs/generated/components/compass/react.js +440 -0
  47. package/patternfly-docs/generated/components/content/react.js +248 -0
  48. package/patternfly-docs/generated/components/data-list/react-demos.js +90 -0
  49. package/patternfly-docs/generated/components/data-list/react.js +709 -0
  50. package/patternfly-docs/generated/components/date-and-time/calendar-month/react.js +283 -0
  51. package/patternfly-docs/generated/components/date-and-time/date-and-time-picker/react-demos.js +64 -0
  52. package/patternfly-docs/generated/components/date-and-time/date-picker/react-demos.js +83 -0
  53. package/patternfly-docs/generated/components/date-and-time/date-picker/react.js +395 -0
  54. package/patternfly-docs/generated/components/date-and-time/time-picker/react.js +241 -0
  55. package/patternfly-docs/generated/components/description-list/react-demos.js +58 -0
  56. package/patternfly-docs/generated/components/description-list/react.js +743 -0
  57. package/patternfly-docs/generated/components/divider/react.js +126 -0
  58. package/patternfly-docs/generated/components/drag-and-drop/react-demos.js +351 -0
  59. package/patternfly-docs/generated/components/drag-and-drop/react-deprecated.js +184 -0
  60. package/patternfly-docs/generated/components/drag-and-drop/react.js +137 -0
  61. package/patternfly-docs/generated/components/drawer/react.js +598 -0
  62. package/patternfly-docs/generated/components/dual-list-selector/react-deprecated.js +772 -0
  63. package/patternfly-docs/generated/components/dual-list-selector/react.js +594 -0
  64. package/patternfly-docs/generated/components/empty-state/react.js +199 -0
  65. package/patternfly-docs/generated/components/expandable-section/react-demos.js +65 -0
  66. package/patternfly-docs/generated/components/expandable-section/react.js +408 -0
  67. package/patternfly-docs/generated/components/file-upload/multiple-file-upload/react-demos.js +52 -0
  68. package/patternfly-docs/generated/components/file-upload/multiple-file-upload/react.js +398 -0
  69. package/patternfly-docs/generated/components/file-upload/simple-file-upload/react.js +749 -0
  70. package/patternfly-docs/generated/components/forms/checkbox/react.js +222 -0
  71. package/patternfly-docs/generated/components/forms/form/react.js +1106 -0
  72. package/patternfly-docs/generated/components/forms/form-select/react.js +208 -0
  73. package/patternfly-docs/generated/components/forms/radio/react.js +212 -0
  74. package/patternfly-docs/generated/components/forms/text-area/react.js +160 -0
  75. package/patternfly-docs/generated/components/forms/text-input/react.js +216 -0
  76. package/patternfly-docs/generated/components/helper-text/react-demos.js +180 -0
  77. package/patternfly-docs/generated/components/helper-text/react.js +164 -0
  78. package/patternfly-docs/generated/components/hero/react.js +88 -0
  79. package/patternfly-docs/generated/components/hint/react.js +169 -0
  80. package/patternfly-docs/generated/components/icon/react.js +215 -0
  81. package/patternfly-docs/generated/components/input-group/react.js +182 -0
  82. package/patternfly-docs/generated/components/jump-links/react-demos.js +154 -0
  83. package/patternfly-docs/generated/components/jump-links/react.js +212 -0
  84. package/patternfly-docs/generated/components/label/react-demos.js +57 -0
  85. package/patternfly-docs/generated/components/label/react.js +417 -0
  86. package/patternfly-docs/generated/components/list/react.js +175 -0
  87. package/patternfly-docs/generated/components/login-page/react.js +587 -0
  88. package/patternfly-docs/generated/components/masthead/react-demos.js +79 -0
  89. package/patternfly-docs/generated/components/masthead/react.js +291 -0
  90. package/patternfly-docs/generated/components/menus/application-launcher/react-demos.js +769 -0
  91. package/patternfly-docs/generated/components/menus/context-selector/react-demos.js +665 -0
  92. package/patternfly-docs/generated/components/menus/custom-menus/react-demos.js +187 -0
  93. package/patternfly-docs/generated/components/menus/dropdown/react-templates.js +163 -0
  94. package/patternfly-docs/generated/components/menus/dropdown/react.js +998 -0
  95. package/patternfly-docs/generated/components/menus/menu/react.js +1540 -0
  96. package/patternfly-docs/generated/components/menus/menu-toggle/react.js +747 -0
  97. package/patternfly-docs/generated/components/menus/options-menu/react-demos.js +508 -0
  98. package/patternfly-docs/generated/components/menus/select/react-templates.js +257 -0
  99. package/patternfly-docs/generated/components/menus/select/react.js +998 -0
  100. package/patternfly-docs/generated/components/modal/react-deprecated.js +554 -0
  101. package/patternfly-docs/generated/components/modal/react.js +597 -0
  102. package/patternfly-docs/generated/components/navigation/react-demos.js +356 -0
  103. package/patternfly-docs/generated/components/navigation/react.js +409 -0
  104. package/patternfly-docs/generated/components/notification-badge/react.js +196 -0
  105. package/patternfly-docs/generated/components/notification-drawer/react-demos.js +107 -0
  106. package/patternfly-docs/generated/components/notification-drawer/react.js +394 -0
  107. package/patternfly-docs/generated/components/number-input/react.js +210 -0
  108. package/patternfly-docs/generated/components/overflow-menu/react.js +274 -0
  109. package/patternfly-docs/generated/components/page/react-demos.js +149 -0
  110. package/patternfly-docs/generated/components/page/react.js +1352 -0
  111. package/patternfly-docs/generated/components/pagination/react.js +492 -0
  112. package/patternfly-docs/generated/components/panel/react.js +236 -0
  113. package/patternfly-docs/generated/components/popover/react.js +390 -0
  114. package/patternfly-docs/generated/components/progress/react-demos.js +59 -0
  115. package/patternfly-docs/generated/components/progress/react.js +283 -0
  116. package/patternfly-docs/generated/components/progress-stepper/react-demos.js +45 -0
  117. package/patternfly-docs/generated/components/progress-stepper/react.js +219 -0
  118. package/patternfly-docs/generated/components/search-input/react-demos.js +113 -0
  119. package/patternfly-docs/generated/components/search-input/react.js +263 -0
  120. package/patternfly-docs/generated/components/sidebar/react.js +236 -0
  121. package/patternfly-docs/generated/components/simple-list/react.js +200 -0
  122. package/patternfly-docs/generated/components/skeleton/react-demos.js +44 -0
  123. package/patternfly-docs/generated/components/skeleton/react.js +122 -0
  124. package/patternfly-docs/generated/components/skip-to-content/react.js +73 -0
  125. package/patternfly-docs/generated/components/slider/react.js +309 -0
  126. package/patternfly-docs/generated/components/spinner/react.js +111 -0
  127. package/patternfly-docs/generated/components/switch/react.js +163 -0
  128. package/patternfly-docs/generated/components/table/react-demos.js +355 -0
  129. package/patternfly-docs/generated/components/table/react-deprecated.js +1350 -0
  130. package/patternfly-docs/generated/components/table/react.js +3241 -0
  131. package/patternfly-docs/generated/components/tabs/react-demos.js +108 -0
  132. package/patternfly-docs/generated/components/tabs/react.js +1359 -0
  133. package/patternfly-docs/generated/components/text-input-group/react-demos.js +152 -0
  134. package/patternfly-docs/generated/components/text-input-group/react.js +278 -0
  135. package/patternfly-docs/generated/components/tile/react-deprecated.js +242 -0
  136. package/patternfly-docs/generated/components/timestamp/react.js +283 -0
  137. package/patternfly-docs/generated/components/title/react.js +94 -0
  138. package/patternfly-docs/generated/components/toggle-group/react.js +299 -0
  139. package/patternfly-docs/generated/components/toolbar/react-demos.js +66 -0
  140. package/patternfly-docs/generated/components/toolbar/react.js +932 -0
  141. package/patternfly-docs/generated/components/tooltip/react.js +241 -0
  142. package/patternfly-docs/generated/components/tree-view/react.js +429 -0
  143. package/patternfly-docs/generated/components/truncate/react.js +211 -0
  144. package/patternfly-docs/generated/components/wizard/react-demos.js +87 -0
  145. package/patternfly-docs/generated/components/wizard/react-deprecated.js +788 -0
  146. package/patternfly-docs/generated/components/wizard/react.js +986 -0
  147. package/patternfly-docs/generated/developer-guides/open-ui-automation/react.js +285 -0
  148. package/patternfly-docs/generated/foundations-and-styles/layouts/bullseye/react.js +70 -0
  149. package/patternfly-docs/generated/foundations-and-styles/layouts/flex/react.js +506 -0
  150. package/patternfly-docs/generated/foundations-and-styles/layouts/gallery/react.js +94 -0
  151. package/patternfly-docs/generated/foundations-and-styles/layouts/grid/react.js +272 -0
  152. package/patternfly-docs/generated/foundations-and-styles/layouts/level/react.js +87 -0
  153. package/patternfly-docs/generated/foundations-and-styles/layouts/split/react.js +124 -0
  154. package/patternfly-docs/generated/foundations-and-styles/layouts/stack/react.js +112 -0
  155. package/patternfly-docs/generated/index.js +1769 -0
  156. package/patternfly-docs/generated/patterns/card-view/react-demos.js +78 -0
  157. package/patternfly-docs/generated/patterns/filters/react-demos.js +141 -0
  158. package/patternfly-docs/generated/patterns/password-generator/react-demos.js +51 -0
  159. package/patternfly-docs/generated/patterns/password-strength/react-demos.js +61 -0
  160. package/patternfly-docs/generated/patterns/primary-detail/react-demos.js +124 -0
  161. package/patternfly-docs/generated/patterns/right-to-left/react-demos.js +81 -0
  162. package/LICENSE +0 -21
@@ -0,0 +1,932 @@
1
+ import React from 'react';
2
+ import { AutoLinkHeader, Example, Link as PatternflyThemeLink } from '@patternfly/documentation-framework/components';
3
+ import { Fragment, useState, useLayoutEffect, useRef } from 'react';
4
+ import EditIcon from '@patternfly/react-icons/dist/esm/icons/edit-icon';
5
+ import CloneIcon from '@patternfly/react-icons/dist/esm/icons/clone-icon';
6
+ import SyncIcon from '@patternfly/react-icons/dist/esm/icons/sync-icon';
7
+ import FilterIcon from '@patternfly/react-icons/dist/esm/icons/filter-icon';
8
+ import SearchIcon from '@patternfly/react-icons/dist/esm/icons/search-icon';
9
+ import RhUiEllipsisVerticalFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-ellipsis-vertical-fill-icon';
10
+ const pageData = {
11
+ "id": "Toolbar",
12
+ "section": "components",
13
+ "subsection": "",
14
+ "deprecated": false,
15
+ "template": false,
16
+ "beta": false,
17
+ "demo": false,
18
+ "newImplementationLink": false,
19
+ "source": "react",
20
+ "tabName": null,
21
+ "slug": "/components/toolbar/react",
22
+ "sourceLink": "https://github.com/patternfly/patternfly-react/blob/main/packages/react-core/src/components/Toolbar/examples/Toolbar.md",
23
+ "relPath": "packages/react-core/src/components/Toolbar/examples/Toolbar.md",
24
+ "propComponents": [
25
+ {
26
+ "name": "Toolbar",
27
+ "description": "",
28
+ "props": [
29
+ {
30
+ "name": "children",
31
+ "type": "React.ReactNode",
32
+ "description": "Content to be rendered as rows in the data toolbar"
33
+ },
34
+ {
35
+ "name": "className",
36
+ "type": "string",
37
+ "description": "Classes applied to root element of the data toolbar"
38
+ },
39
+ {
40
+ "name": "clearAllFilters",
41
+ "type": "() => void",
42
+ "description": "Optional callback for clearing all filters in the toolbar"
43
+ },
44
+ {
45
+ "name": "clearFiltersButtonText",
46
+ "type": "string",
47
+ "description": "Text to display in the clear all filters button"
48
+ },
49
+ {
50
+ "name": "collapseListedFiltersBreakpoint",
51
+ "type": "'all' | 'md' | 'lg' | 'xl' | '2xl'",
52
+ "description": "The breakpoint at which the listed filters in label groups are collapsed down to a summary"
53
+ },
54
+ {
55
+ "name": "colorVariant",
56
+ "type": "ToolbarColorVariant | 'default' | 'no-background' | 'primary' | 'secondary'",
57
+ "description": "Background color variant of the toolbar"
58
+ },
59
+ {
60
+ "name": "customLabelGroupContent",
61
+ "type": "React.ReactNode",
62
+ "description": "Custom content appended to the filter generated label group. To maintain spacing and styling, each node should be wrapped in a ToolbarItem or ToolbarGroup. This property will remove the default \"Clear all filters\" button."
63
+ },
64
+ {
65
+ "name": "hasNoPadding",
66
+ "type": "boolean",
67
+ "description": "Flag indicating the toolbar padding is removed"
68
+ },
69
+ {
70
+ "name": "id",
71
+ "type": "string",
72
+ "description": "Id of the data toolbar"
73
+ },
74
+ {
75
+ "name": "inset",
76
+ "type": "{\n default?: 'insetNone' | 'insetSm' | 'insetMd' | 'insetLg' | 'insetXl' | 'inset2xl';\n sm?: 'insetNone' | 'insetSm' | 'insetMd' | 'insetLg' | 'insetXl' | 'inset2xl';\n md?: 'insetNone' | 'insetSm' | 'insetMd' | 'insetLg' | 'insetXl' | 'inset2xl';\n lg?: 'insetNone' | 'insetSm' | 'insetMd' | 'insetLg' | 'insetXl' | 'inset2xl';\n xl?: 'insetNone' | 'insetSm' | 'insetMd' | 'insetLg' | 'insetXl' | 'inset2xl';\n '2xl'?: 'insetNone' | 'insetSm' | 'insetMd' | 'insetLg' | 'insetXl' | 'inset2xl';\n}",
77
+ "description": "Insets at various breakpoints."
78
+ },
79
+ {
80
+ "name": "isExpanded",
81
+ "type": "boolean",
82
+ "description": "Flag indicating if a data toolbar toggle group's expandable content is expanded"
83
+ },
84
+ {
85
+ "name": "isFullHeight",
86
+ "type": "boolean",
87
+ "description": "Flag indicating the toolbar height should expand to the full height of the container"
88
+ },
89
+ {
90
+ "name": "isStatic",
91
+ "type": "boolean",
92
+ "description": "Flag indicating the toolbar is static"
93
+ },
94
+ {
95
+ "name": "isSticky",
96
+ "type": "boolean",
97
+ "description": "Flag indicating the toolbar should stick to the top of its container. This property applies both the sticky position and styling."
98
+ },
99
+ {
100
+ "name": "isStickyBase",
101
+ "type": "boolean",
102
+ "description": "Flag indicating the toolbar should have sticky positioning to the top of its container",
103
+ "beta": true
104
+ },
105
+ {
106
+ "name": "isStickyStuck",
107
+ "type": "boolean",
108
+ "description": "Flag indicating the toolbar should have stuck styling, when the toolbar is not at the top of the scroll container",
109
+ "beta": true
110
+ },
111
+ {
112
+ "name": "isVertical",
113
+ "type": "boolean",
114
+ "description": "Flag indicating the toolbar has a vertical orientation",
115
+ "beta": true
116
+ },
117
+ {
118
+ "name": "numberOfFiltersText",
119
+ "type": "(numberOfFilters: number) => string",
120
+ "description": "Text to display in the total number of applied filters ToolbarFilter"
121
+ },
122
+ {
123
+ "name": "ouiaId",
124
+ "type": "number | string",
125
+ "description": "Value to overwrite the randomly generated data-ouia-component-id."
126
+ },
127
+ {
128
+ "name": "ouiaSafe",
129
+ "type": "boolean",
130
+ "description": "Set the value of data-ouia-safe. Only set to true when the component is in a static state, i.e. no animations are occurring. At all other times, this value must be false."
131
+ },
132
+ {
133
+ "name": "toggleIsExpanded",
134
+ "type": "() => void",
135
+ "description": "A callback for setting the isExpanded flag"
136
+ }
137
+ ]
138
+ },
139
+ {
140
+ "name": "ToolbarContent",
141
+ "description": "",
142
+ "props": [
143
+ {
144
+ "name": "alignItems",
145
+ "type": "'start' | 'center' | 'baseline' | 'default'",
146
+ "description": "Vertical alignment of children"
147
+ },
148
+ {
149
+ "name": "children",
150
+ "type": "React.ReactNode",
151
+ "description": "Content to be rendered as children of the content row"
152
+ },
153
+ {
154
+ "name": "className",
155
+ "type": "string",
156
+ "description": "Classes applied to root element of the data toolbar content row"
157
+ },
158
+ {
159
+ "name": "clearAllFilters",
160
+ "type": "() => void",
161
+ "description": "Optional callback for clearing all filters in the toolbar"
162
+ },
163
+ {
164
+ "name": "clearFiltersButtonText",
165
+ "type": "string",
166
+ "description": "Text to display in the clear all filters button"
167
+ },
168
+ {
169
+ "name": "isExpanded",
170
+ "type": "boolean",
171
+ "description": "Flag indicating if a data toolbar toggle group's expandable content is expanded",
172
+ "defaultValue": "false"
173
+ },
174
+ {
175
+ "name": "rowWrap",
176
+ "type": "{\n default?: 'wrap' | 'nowrap';\n sm?: 'wrap' | 'nowrap';\n md?: 'wrap' | 'nowrap';\n lg?: 'wrap' | 'nowrap';\n xl?: 'wrap' | 'nowrap';\n '2xl'?: 'wrap' | 'nowrap';\n}",
177
+ "description": "Value to set for content wrapping at various breakpoints"
178
+ },
179
+ {
180
+ "name": "showClearFiltersButton",
181
+ "type": "boolean",
182
+ "description": "Flag indicating that the clear all filters button should be visible",
183
+ "defaultValue": "false"
184
+ },
185
+ {
186
+ "name": "toolbarId",
187
+ "type": "string",
188
+ "description": "Id of the parent Toolbar component"
189
+ },
190
+ {
191
+ "name": "visibility",
192
+ "type": "{\n default?: 'hidden' | 'visible';\n md?: 'hidden' | 'visible';\n lg?: 'hidden' | 'visible';\n xl?: 'hidden' | 'visible';\n '2xl'?: 'hidden' | 'visible';\n}",
193
+ "description": "Visibility at various width breakpoints."
194
+ },
195
+ {
196
+ "name": "visibilityAtHeight",
197
+ "type": "{\n default?: 'hidden' | 'visible';\n md?: 'hidden' | 'visible';\n lg?: 'hidden' | 'visible';\n xl?: 'hidden' | 'visible';\n '2xl'?: 'hidden' | 'visible';\n}",
198
+ "description": "Visibility at various height breakpoints."
199
+ }
200
+ ]
201
+ },
202
+ {
203
+ "name": "ToolbarGroup",
204
+ "description": "",
205
+ "props": [
206
+ {
207
+ "name": "align",
208
+ "type": "{\n default?: 'alignEnd' | 'alignStart' | 'alignCenter';\n md?: 'alignEnd' | 'alignStart' | 'alignCenter';\n lg?: 'alignEnd' | 'alignStart' | 'alignCenter';\n xl?: 'alignEnd' | 'alignStart' | 'alignCenter';\n '2xl'?: 'alignEnd' | 'alignStart' | 'alignCenter';\n}",
209
+ "description": "Applies to a child of a flex layout, and aligns that child (and any adjacent children on the other side of it) to one side of the main axis"
210
+ },
211
+ {
212
+ "name": "alignItems",
213
+ "type": "'start' | 'center' | 'baseline' | 'default' | 'end' | 'stretch'",
214
+ "description": "Vertical alignment of children"
215
+ },
216
+ {
217
+ "name": "alignSelf",
218
+ "type": "'start' | 'center' | 'baseline' | 'default' | 'end' | 'stretch'",
219
+ "description": "Vertical alignment"
220
+ },
221
+ {
222
+ "name": "children",
223
+ "type": "React.ReactNode",
224
+ "description": "Content to be rendered inside the data toolbar group"
225
+ },
226
+ {
227
+ "name": "className",
228
+ "type": "string",
229
+ "description": "Classes applied to root element of the data toolbar group"
230
+ },
231
+ {
232
+ "name": "columnGap",
233
+ "type": "{\n default?:\n | 'columnGapNone'\n | 'columnGapXs'\n | 'columnGapSm'\n | 'columnGapMd'\n | 'columnGapLg'\n | 'columnGapXl'\n | 'columnGap_2xl'\n | 'columnGap_3xl'\n | 'columnGap_4xl';\n md?:\n | 'columnGapNone'\n | 'columnGapXs'\n | 'columnGapSm'\n | 'columnGapMd'\n | 'columnGapLg'\n | 'columnGapXl'\n | 'columnGap_2xl'\n | 'columnGap_3xl'\n | 'columnGap_4xl';\n lg?:\n | 'columnGapNone'\n | 'columnGapXs'\n | 'columnGapSm'\n | 'columnGapMd'\n | 'columnGapLg'\n | 'columnGapXl'\n | 'columnGap_2xl'\n | 'columnGap_3xl'\n | 'columnGap_4xl';\n xl?:\n | 'columnGapNone'\n | 'columnGapXs'\n | 'columnGapSm'\n | 'columnGapMd'\n | 'columnGapLg'\n | 'columnGapXl'\n | 'columnGap_2xl'\n | 'columnGap_3xl'\n | 'columnGap_4xl';\n '2xl'?:\n | 'columnGapNone'\n | 'columnGapXs'\n | 'columnGapSm'\n | 'columnGapMd'\n | 'columnGapLg'\n | 'columnGapXl'\n | 'columnGap_2xl'\n | 'columnGap_3xl'\n | 'columnGap_4xl';\n}",
234
+ "description": "Sets only the column gap at various breakpoints."
235
+ },
236
+ {
237
+ "name": "gap",
238
+ "type": "{\n default?: 'gapNone' | 'gapXs' | 'gapSm' | 'gapMd' | 'gapLg' | 'gapXl' | 'gap_2xl' | 'gap_3xl' | 'gap_4xl';\n md?: 'gapNone' | 'gapXs' | 'gapSm' | 'gapMd' | 'gapLg' | 'gapXl' | 'gap_2xl' | 'gap_3xl' | 'gap_4xl';\n lg?: 'gapNone' | 'gapXs' | 'gapSm' | 'gapMd' | 'gapLg' | 'gapXl' | 'gap_2xl' | 'gap_3xl' | 'gap_4xl';\n xl?: 'gapNone' | 'gapXs' | 'gapSm' | 'gapMd' | 'gapLg' | 'gapXl' | 'gap_2xl' | 'gap_3xl' | 'gap_4xl';\n '2xl'?: 'gapNone' | 'gapXs' | 'gapSm' | 'gapMd' | 'gapLg' | 'gapXl' | 'gap_2xl' | 'gap_3xl' | 'gap_4xl';\n}",
239
+ "description": "Sets both the column and row gap at various breakpoints."
240
+ },
241
+ {
242
+ "name": "isOverflowContainer",
243
+ "type": "boolean",
244
+ "description": "Flag that modifies the toolbar group to hide overflow and respond to available space. Used for horizontal navigation."
245
+ },
246
+ {
247
+ "name": "rowGap",
248
+ "type": "{\n default?:\n | 'rowGapNone'\n | 'rowGapXs'\n | 'rowGapSm'\n | 'rowGapMd'\n | 'rowGapLg'\n | 'rowGapXl'\n | 'rowGap_2xl'\n | 'rowGap_3xl'\n | 'rowGap_4xl';\n md?:\n | 'rowGapNone'\n | 'rowGapXs'\n | 'rowGapSm'\n | 'rowGapMd'\n | 'rowGapLg'\n | 'rowGapXl'\n | 'rowGap_2xl'\n | 'rowGap_3xl'\n | 'rowGap_4xl';\n lg?:\n | 'rowGapNone'\n | 'rowGapXs'\n | 'rowGapSm'\n | 'rowGapMd'\n | 'rowGapLg'\n | 'rowGapXl'\n | 'rowGap_2xl'\n | 'rowGap_3xl'\n | 'rowGap_4xl';\n xl?:\n | 'rowGapNone'\n | 'rowGapXs'\n | 'rowGapSm'\n | 'rowGapMd'\n | 'rowGapLg'\n | 'rowGapXl'\n | 'rowGap_2xl'\n | 'rowGap_3xl'\n | 'rowGap_4xl';\n '2xl'?:\n | 'rowGapNone'\n | 'rowGapXs'\n | 'rowGapSm'\n | 'rowGapMd'\n | 'rowGapLg'\n | 'rowGapXl'\n | 'rowGap_2xl'\n | 'rowGap_3xl'\n | 'rowGap_4xl';\n}",
249
+ "description": "Sets only the row gap at various breakpoints."
250
+ },
251
+ {
252
+ "name": "rowWrap",
253
+ "type": "{\n default?: 'wrap' | 'nowrap';\n sm?: 'wrap' | 'nowrap';\n md?: 'wrap' | 'nowrap';\n lg?: 'wrap' | 'nowrap';\n xl?: 'wrap' | 'nowrap';\n '2xl'?: 'wrap' | 'nowrap';\n}",
254
+ "description": "Value to set for row wrapping at various breakpoints"
255
+ },
256
+ {
257
+ "name": "variant",
258
+ "type": "| ToolbarGroupVariant\n| 'filter-group'\n| 'action-group'\n| 'action-group-inline'\n| 'action-group-plain'\n| 'label-group'",
259
+ "description": "A type modifier which modifies spacing specifically depending on the type of group"
260
+ },
261
+ {
262
+ "name": "visibility",
263
+ "type": "{\n default?: 'hidden' | 'visible';\n md?: 'hidden' | 'visible';\n lg?: 'hidden' | 'visible';\n xl?: 'hidden' | 'visible';\n '2xl'?: 'hidden' | 'visible';\n}",
264
+ "description": "Visibility at various width breakpoints."
265
+ },
266
+ {
267
+ "name": "visibilityAtHeight",
268
+ "type": "{\n default?: 'hidden' | 'visible';\n md?: 'hidden' | 'visible';\n lg?: 'hidden' | 'visible';\n xl?: 'hidden' | 'visible';\n '2xl'?: 'hidden' | 'visible';\n}",
269
+ "description": "Visibility at various height breakpoints."
270
+ }
271
+ ]
272
+ },
273
+ {
274
+ "name": "ToolbarItem",
275
+ "description": "",
276
+ "props": [
277
+ {
278
+ "name": "align",
279
+ "type": "{\n default?: 'alignEnd' | 'alignStart' | 'alignCenter';\n md?: 'alignEnd' | 'alignStart' | 'alignCenter';\n lg?: 'alignEnd' | 'alignStart' | 'alignCenter';\n xl?: 'alignEnd' | 'alignStart' | 'alignCenter';\n '2xl'?: 'alignEnd' | 'alignStart' | 'alignCenter';\n}",
280
+ "description": "Applies to a child of a flex layout, and aligns that child (and any adjacent children on the other side of it) to one side of the main axis"
281
+ },
282
+ {
283
+ "name": "alignItems",
284
+ "type": "'start' | 'center' | 'baseline' | 'default' | 'end' | 'stretch'",
285
+ "description": "Vertical alignment of children"
286
+ },
287
+ {
288
+ "name": "alignSelf",
289
+ "type": "'start' | 'center' | 'baseline' | 'default' | 'end' | 'stretch'",
290
+ "description": "Vertical alignment"
291
+ },
292
+ {
293
+ "name": "children",
294
+ "type": "React.ReactNode",
295
+ "description": "Content to be rendered inside the data toolbar item"
296
+ },
297
+ {
298
+ "name": "className",
299
+ "type": "string",
300
+ "description": "Classes applied to root element of the data toolbar item"
301
+ },
302
+ {
303
+ "name": "columnGap",
304
+ "type": "{\n default?:\n | 'columnGapNone'\n | 'columnGapXs'\n | 'columnGapSm'\n | 'columnGapMd'\n | 'columnGapLg'\n | 'columnGapXl'\n | 'columnGap_2xl'\n | 'columnGap_3xl'\n | 'columnGap_4xl';\n md?:\n | 'columnGapNone'\n | 'columnGapXs'\n | 'columnGapSm'\n | 'columnGapMd'\n | 'columnGapLg'\n | 'columnGapXl'\n | 'columnGap_2xl'\n | 'columnGap_3xl'\n | 'columnGap_4xl';\n lg?:\n | 'columnGapNone'\n | 'columnGapXs'\n | 'columnGapSm'\n | 'columnGapMd'\n | 'columnGapLg'\n | 'columnGapXl'\n | 'columnGap_2xl'\n | 'columnGap_3xl'\n | 'columnGap_4xl';\n xl?:\n | 'columnGapNone'\n | 'columnGapXs'\n | 'columnGapSm'\n | 'columnGapMd'\n | 'columnGapLg'\n | 'columnGapXl'\n | 'columnGap_2xl'\n | 'columnGap_3xl'\n | 'columnGap_4xl';\n '2xl'?:\n | 'columnGapNone'\n | 'columnGapXs'\n | 'columnGapSm'\n | 'columnGapMd'\n | 'columnGapLg'\n | 'columnGapXl'\n | 'columnGap_2xl'\n | 'columnGap_3xl'\n | 'columnGap_4xl';\n}",
305
+ "description": "Sets only the column gap at various breakpoints."
306
+ },
307
+ {
308
+ "name": "gap",
309
+ "type": "{\n default?: 'gapNone' | 'gapXs' | 'gapSm' | 'gapMd' | 'gapLg' | 'gapXl' | 'gap_2xl' | 'gap_3xl' | 'gap_4xl';\n md?: 'gapNone' | 'gapXs' | 'gapSm' | 'gapMd' | 'gapLg' | 'gapXl' | 'gap_2xl' | 'gap_3xl' | 'gap_4xl';\n lg?: 'gapNone' | 'gapXs' | 'gapSm' | 'gapMd' | 'gapLg' | 'gapXl' | 'gap_2xl' | 'gap_3xl' | 'gap_4xl';\n xl?: 'gapNone' | 'gapXs' | 'gapSm' | 'gapMd' | 'gapLg' | 'gapXl' | 'gap_2xl' | 'gap_3xl' | 'gap_4xl';\n '2xl'?: 'gapNone' | 'gapXs' | 'gapSm' | 'gapMd' | 'gapLg' | 'gapXl' | 'gap_2xl' | 'gap_3xl' | 'gap_4xl';\n}",
310
+ "description": "Sets both the column and row gap at various breakpoints."
311
+ },
312
+ {
313
+ "name": "id",
314
+ "type": "string",
315
+ "description": "id for this data toolbar item"
316
+ },
317
+ {
318
+ "name": "isAllExpanded",
319
+ "type": "boolean",
320
+ "description": "Flag indicating if the expand-all variant is expanded or not"
321
+ },
322
+ {
323
+ "name": "isOverflowContainer",
324
+ "type": "boolean",
325
+ "description": "Flag that modifies the toolbar item to hide overflow and respond to available space. Used for horizontal navigation."
326
+ },
327
+ {
328
+ "name": "rowGap",
329
+ "type": "{\n default?:\n | 'rowGapNone'\n | 'rowGapXs'\n | 'rowGapSm'\n | 'rowGapMd'\n | 'rowGapLg'\n | 'rowGapXl'\n | 'rowGap_2xl'\n | 'rowGap_3xl'\n | 'rowGap_4xl';\n md?:\n | 'rowGapNone'\n | 'rowGapXs'\n | 'rowGapSm'\n | 'rowGapMd'\n | 'rowGapLg'\n | 'rowGapXl'\n | 'rowGap_2xl'\n | 'rowGap_3xl'\n | 'rowGap_4xl';\n lg?:\n | 'rowGapNone'\n | 'rowGapXs'\n | 'rowGapSm'\n | 'rowGapMd'\n | 'rowGapLg'\n | 'rowGapXl'\n | 'rowGap_2xl'\n | 'rowGap_3xl'\n | 'rowGap_4xl';\n xl?:\n | 'rowGapNone'\n | 'rowGapXs'\n | 'rowGapSm'\n | 'rowGapMd'\n | 'rowGapLg'\n | 'rowGapXl'\n | 'rowGap_2xl'\n | 'rowGap_3xl'\n | 'rowGap_4xl';\n '2xl'?:\n | 'rowGapNone'\n | 'rowGapXs'\n | 'rowGapSm'\n | 'rowGapMd'\n | 'rowGapLg'\n | 'rowGapXl'\n | 'rowGap_2xl'\n | 'rowGap_3xl'\n | 'rowGap_4xl';\n}",
330
+ "description": "Sets only the row gap at various breakpoints."
331
+ },
332
+ {
333
+ "name": "rowWrap",
334
+ "type": "{\n default?: 'wrap' | 'nowrap';\n sm?: 'wrap' | 'nowrap';\n md?: 'wrap' | 'nowrap';\n lg?: 'wrap' | 'nowrap';\n xl?: 'wrap' | 'nowrap';\n '2xl'?: 'wrap' | 'nowrap';\n}",
335
+ "description": "Value to set for row wrapping at various breakpoints"
336
+ },
337
+ {
338
+ "name": "variant",
339
+ "type": "ToolbarItemVariant | 'pagination' | 'label' | 'label-group' | 'separator' | 'expand-all'",
340
+ "description": "A type modifier which modifies spacing specifically depending on the type of item"
341
+ },
342
+ {
343
+ "name": "visibility",
344
+ "type": "{\n default?: 'hidden' | 'visible';\n md?: 'hidden' | 'visible';\n lg?: 'hidden' | 'visible';\n xl?: 'hidden' | 'visible';\n '2xl'?: 'hidden' | 'visible';\n}",
345
+ "description": "Visibility at various width breakpoints."
346
+ },
347
+ {
348
+ "name": "visibilityAtHeight",
349
+ "type": "{\n default?: 'hidden' | 'visible';\n md?: 'hidden' | 'visible';\n lg?: 'hidden' | 'visible';\n xl?: 'hidden' | 'visible';\n '2xl'?: 'hidden' | 'visible';\n}",
350
+ "description": "Visibility at various height breakpoints."
351
+ }
352
+ ]
353
+ },
354
+ {
355
+ "name": "ToolbarToggleGroup",
356
+ "description": "",
357
+ "props": [
358
+ {
359
+ "name": "align",
360
+ "type": "{\n default?: 'alignEnd' | 'alignStart' | 'alignCenter';\n md?: 'alignEnd' | 'alignStart' | 'alignCenter';\n lg?: 'alignEnd' | 'alignStart' | 'alignCenter';\n xl?: 'alignEnd' | 'alignStart' | 'alignCenter';\n '2xl'?: 'alignEnd' | 'alignStart' | 'alignCenter';\n}",
361
+ "description": "Applies to a child of a flex layout, and aligns that child (and any adjacent children on the other side of it) to one side of the main axis"
362
+ },
363
+ {
364
+ "name": "alignItems",
365
+ "type": "'start' | 'center' | 'baseline' | 'default' | 'end' | 'stretch'",
366
+ "description": "Vertical alignment of children"
367
+ },
368
+ {
369
+ "name": "alignSelf",
370
+ "type": "'start' | 'center' | 'baseline' | 'default' | 'end' | 'stretch'",
371
+ "description": "Vertical alignment"
372
+ },
373
+ {
374
+ "name": "breakpoint",
375
+ "type": "'md' | 'lg' | 'xl' | '2xl'",
376
+ "description": "Controls when filters are shown and when the toggle button is hidden.",
377
+ "required": true
378
+ },
379
+ {
380
+ "name": "children",
381
+ "type": "React.ReactNode",
382
+ "description": "Content to be rendered inside the data toolbar group"
383
+ },
384
+ {
385
+ "name": "className",
386
+ "type": "string",
387
+ "description": "Classes applied to root element of the data toolbar group"
388
+ },
389
+ {
390
+ "name": "clearAllFilters",
391
+ "type": "() => void",
392
+ "description": "Optional callback for clearing all filters in the toolbar toggle group"
393
+ },
394
+ {
395
+ "name": "clearFiltersButtonText",
396
+ "type": "string",
397
+ "description": "Text to display in the clear all filters button of the toolbar toggle group"
398
+ },
399
+ {
400
+ "name": "columnGap",
401
+ "type": "{\n default?:\n | 'columnGapNone'\n | 'columnGapXs'\n | 'columnGapSm'\n | 'columnGapMd'\n | 'columnGapLg'\n | 'columnGapXl'\n | 'columnGap_2xl'\n | 'columnGap_3xl'\n | 'columnGap_4xl';\n md?:\n | 'columnGapNone'\n | 'columnGapXs'\n | 'columnGapSm'\n | 'columnGapMd'\n | 'columnGapLg'\n | 'columnGapXl'\n | 'columnGap_2xl'\n | 'columnGap_3xl'\n | 'columnGap_4xl';\n lg?:\n | 'columnGapNone'\n | 'columnGapXs'\n | 'columnGapSm'\n | 'columnGapMd'\n | 'columnGapLg'\n | 'columnGapXl'\n | 'columnGap_2xl'\n | 'columnGap_3xl'\n | 'columnGap_4xl';\n xl?:\n | 'columnGapNone'\n | 'columnGapXs'\n | 'columnGapSm'\n | 'columnGapMd'\n | 'columnGapLg'\n | 'columnGapXl'\n | 'columnGap_2xl'\n | 'columnGap_3xl'\n | 'columnGap_4xl';\n '2xl'?:\n | 'columnGapNone'\n | 'columnGapXs'\n | 'columnGapSm'\n | 'columnGapMd'\n | 'columnGapLg'\n | 'columnGapXl'\n | 'columnGap_2xl'\n | 'columnGap_3xl'\n | 'columnGap_4xl';\n}",
402
+ "description": "Sets only the column gap at various breakpoints."
403
+ },
404
+ {
405
+ "name": "gap",
406
+ "type": "{\n default?: 'gapNone' | 'gapXs' | 'gapSm' | 'gapMd' | 'gapLg' | 'gapXl' | 'gap_2xl' | 'gap_3xl' | 'gap_4xl';\n md?: 'gapNone' | 'gapXs' | 'gapSm' | 'gapMd' | 'gapLg' | 'gapXl' | 'gap_2xl' | 'gap_3xl' | 'gap_4xl';\n lg?: 'gapNone' | 'gapXs' | 'gapSm' | 'gapMd' | 'gapLg' | 'gapXl' | 'gap_2xl' | 'gap_3xl' | 'gap_4xl';\n xl?: 'gapNone' | 'gapXs' | 'gapSm' | 'gapMd' | 'gapLg' | 'gapXl' | 'gap_2xl' | 'gap_3xl' | 'gap_4xl';\n '2xl'?: 'gapNone' | 'gapXs' | 'gapSm' | 'gapMd' | 'gapLg' | 'gapXl' | 'gap_2xl' | 'gap_3xl' | 'gap_4xl';\n}",
407
+ "description": "Sets both the column and row gap at various breakpoints."
408
+ },
409
+ {
410
+ "name": "isExpanded",
411
+ "type": "boolean",
412
+ "description": "Flag indicating when toggle group is expanded for non-managed toolbar toggle groups."
413
+ },
414
+ {
415
+ "name": "isOverflowContainer",
416
+ "type": "boolean",
417
+ "description": "Flag that modifies the toolbar group to hide overflow and respond to available space. Used for horizontal navigation."
418
+ },
419
+ {
420
+ "name": "labelContainerRef",
421
+ "type": "React.RefObject<any>",
422
+ "description": "Reference to a label container group for filters inside the toolbar toggle group"
423
+ },
424
+ {
425
+ "name": "onToggle",
426
+ "type": "(event: React.MouseEvent) => void",
427
+ "description": "Callback for toggle group click event for non-managed toolbar toggle groups."
428
+ },
429
+ {
430
+ "name": "rowGap",
431
+ "type": "{\n default?:\n | 'rowGapNone'\n | 'rowGapXs'\n | 'rowGapSm'\n | 'rowGapMd'\n | 'rowGapLg'\n | 'rowGapXl'\n | 'rowGap_2xl'\n | 'rowGap_3xl'\n | 'rowGap_4xl';\n md?:\n | 'rowGapNone'\n | 'rowGapXs'\n | 'rowGapSm'\n | 'rowGapMd'\n | 'rowGapLg'\n | 'rowGapXl'\n | 'rowGap_2xl'\n | 'rowGap_3xl'\n | 'rowGap_4xl';\n lg?:\n | 'rowGapNone'\n | 'rowGapXs'\n | 'rowGapSm'\n | 'rowGapMd'\n | 'rowGapLg'\n | 'rowGapXl'\n | 'rowGap_2xl'\n | 'rowGap_3xl'\n | 'rowGap_4xl';\n xl?:\n | 'rowGapNone'\n | 'rowGapXs'\n | 'rowGapSm'\n | 'rowGapMd'\n | 'rowGapLg'\n | 'rowGapXl'\n | 'rowGap_2xl'\n | 'rowGap_3xl'\n | 'rowGap_4xl';\n '2xl'?:\n | 'rowGapNone'\n | 'rowGapXs'\n | 'rowGapSm'\n | 'rowGapMd'\n | 'rowGapLg'\n | 'rowGapXl'\n | 'rowGap_2xl'\n | 'rowGap_3xl'\n | 'rowGap_4xl';\n}",
432
+ "description": "Sets only the row gap at various breakpoints."
433
+ },
434
+ {
435
+ "name": "rowWrap",
436
+ "type": "{\n default?: 'wrap' | 'nowrap';\n sm?: 'wrap' | 'nowrap';\n md?: 'wrap' | 'nowrap';\n lg?: 'wrap' | 'nowrap';\n xl?: 'wrap' | 'nowrap';\n '2xl'?: 'wrap' | 'nowrap';\n}",
437
+ "description": "Value to set for row wrapping at various breakpoints"
438
+ },
439
+ {
440
+ "name": "showClearFiltersButton",
441
+ "type": "boolean",
442
+ "description": "Flag indicating that the clear all filters button should be visible in the toolbar toggle group"
443
+ },
444
+ {
445
+ "name": "toggleIcon",
446
+ "type": "React.ReactNode",
447
+ "description": "An icon to be rendered when the toggle group has collapsed down",
448
+ "required": true
449
+ },
450
+ {
451
+ "name": "variant",
452
+ "type": "| ToolbarGroupVariant\n| 'filter-group'\n| 'action-group'\n| 'action-group-inline'\n| 'action-group-plain'\n| 'label-group'",
453
+ "description": "A type modifier which modifies spacing specifically depending on the type of group"
454
+ },
455
+ {
456
+ "name": "visibility",
457
+ "type": "{\n default?: 'hidden' | 'visible';\n md?: 'hidden' | 'visible';\n lg?: 'hidden' | 'visible';\n xl?: 'hidden' | 'visible';\n '2xl'?: 'hidden' | 'visible';\n}",
458
+ "description": "Visibility at various width breakpoints."
459
+ },
460
+ {
461
+ "name": "visibilityAtHeight",
462
+ "type": "{\n default?: 'hidden' | 'visible';\n md?: 'hidden' | 'visible';\n lg?: 'hidden' | 'visible';\n xl?: 'hidden' | 'visible';\n '2xl'?: 'hidden' | 'visible';\n}",
463
+ "description": "Visibility at various height breakpoints."
464
+ }
465
+ ]
466
+ },
467
+ {
468
+ "name": "ToolbarFilter",
469
+ "description": "",
470
+ "props": [
471
+ {
472
+ "name": "align",
473
+ "type": "{\n default?: 'alignEnd' | 'alignStart' | 'alignCenter';\n md?: 'alignEnd' | 'alignStart' | 'alignCenter';\n lg?: 'alignEnd' | 'alignStart' | 'alignCenter';\n xl?: 'alignEnd' | 'alignStart' | 'alignCenter';\n '2xl'?: 'alignEnd' | 'alignStart' | 'alignCenter';\n}",
474
+ "description": "Applies to a child of a flex layout, and aligns that child (and any adjacent children on the other side of it) to one side of the main axis"
475
+ },
476
+ {
477
+ "name": "alignItems",
478
+ "type": "'start' | 'center' | 'baseline' | 'default' | 'end' | 'stretch'",
479
+ "description": "Vertical alignment of children"
480
+ },
481
+ {
482
+ "name": "alignSelf",
483
+ "type": "'start' | 'center' | 'baseline' | 'default' | 'end' | 'stretch'",
484
+ "description": "Vertical alignment"
485
+ },
486
+ {
487
+ "name": "categoryName",
488
+ "type": "string | ToolbarLabelGroup",
489
+ "description": "Unique category name to be used as a label for the label group",
490
+ "required": true
491
+ },
492
+ {
493
+ "name": "children",
494
+ "type": "React.ReactNode",
495
+ "description": "Content to be rendered inside the data toolbar item",
496
+ "required": true
497
+ },
498
+ {
499
+ "name": "className",
500
+ "type": "string",
501
+ "description": "Classes applied to root element of the data toolbar item"
502
+ },
503
+ {
504
+ "name": "columnGap",
505
+ "type": "{\n default?:\n | 'columnGapNone'\n | 'columnGapXs'\n | 'columnGapSm'\n | 'columnGapMd'\n | 'columnGapLg'\n | 'columnGapXl'\n | 'columnGap_2xl'\n | 'columnGap_3xl'\n | 'columnGap_4xl';\n md?:\n | 'columnGapNone'\n | 'columnGapXs'\n | 'columnGapSm'\n | 'columnGapMd'\n | 'columnGapLg'\n | 'columnGapXl'\n | 'columnGap_2xl'\n | 'columnGap_3xl'\n | 'columnGap_4xl';\n lg?:\n | 'columnGapNone'\n | 'columnGapXs'\n | 'columnGapSm'\n | 'columnGapMd'\n | 'columnGapLg'\n | 'columnGapXl'\n | 'columnGap_2xl'\n | 'columnGap_3xl'\n | 'columnGap_4xl';\n xl?:\n | 'columnGapNone'\n | 'columnGapXs'\n | 'columnGapSm'\n | 'columnGapMd'\n | 'columnGapLg'\n | 'columnGapXl'\n | 'columnGap_2xl'\n | 'columnGap_3xl'\n | 'columnGap_4xl';\n '2xl'?:\n | 'columnGapNone'\n | 'columnGapXs'\n | 'columnGapSm'\n | 'columnGapMd'\n | 'columnGapLg'\n | 'columnGapXl'\n | 'columnGap_2xl'\n | 'columnGap_3xl'\n | 'columnGap_4xl';\n}",
506
+ "description": "Sets only the column gap at various breakpoints."
507
+ },
508
+ {
509
+ "name": "deleteLabel",
510
+ "type": "(category: string | ToolbarLabelGroup, label: ToolbarLabel | string) => void",
511
+ "description": "Callback passed by consumer used to delete a label from the labels[]"
512
+ },
513
+ {
514
+ "name": "deleteLabelGroup",
515
+ "type": "(category: string | ToolbarLabelGroup) => void",
516
+ "description": "Callback passed by consumer used to close the entire label group"
517
+ },
518
+ {
519
+ "name": "expandableLabelContainerRef",
520
+ "type": "React.RefObject<HTMLDivElement | null>",
521
+ "description": "Reference to a label container created with a custom expandable content group, for non-managed multiple toolbar toggle groups."
522
+ },
523
+ {
524
+ "name": "gap",
525
+ "type": "{\n default?: 'gapNone' | 'gapXs' | 'gapSm' | 'gapMd' | 'gapLg' | 'gapXl' | 'gap_2xl' | 'gap_3xl' | 'gap_4xl';\n md?: 'gapNone' | 'gapXs' | 'gapSm' | 'gapMd' | 'gapLg' | 'gapXl' | 'gap_2xl' | 'gap_3xl' | 'gap_4xl';\n lg?: 'gapNone' | 'gapXs' | 'gapSm' | 'gapMd' | 'gapLg' | 'gapXl' | 'gap_2xl' | 'gap_3xl' | 'gap_4xl';\n xl?: 'gapNone' | 'gapXs' | 'gapSm' | 'gapMd' | 'gapLg' | 'gapXl' | 'gap_2xl' | 'gap_3xl' | 'gap_4xl';\n '2xl'?: 'gapNone' | 'gapXs' | 'gapSm' | 'gapMd' | 'gapLg' | 'gapXl' | 'gap_2xl' | 'gap_3xl' | 'gap_4xl';\n}",
526
+ "description": "Sets both the column and row gap at various breakpoints."
527
+ },
528
+ {
529
+ "name": "id",
530
+ "type": "string",
531
+ "description": "id for this data toolbar item"
532
+ },
533
+ {
534
+ "name": "isAllExpanded",
535
+ "type": "boolean",
536
+ "description": "Flag indicating if the expand-all variant is expanded or not"
537
+ },
538
+ {
539
+ "name": "isExpanded",
540
+ "type": "boolean",
541
+ "description": "Flag indicating when toolbar toggle group is expanded for non-managed toolbar toggle groups."
542
+ },
543
+ {
544
+ "name": "isOverflowContainer",
545
+ "type": "boolean",
546
+ "description": "Flag that modifies the toolbar item to hide overflow and respond to available space. Used for horizontal navigation."
547
+ },
548
+ {
549
+ "name": "labelGroupCollapsedText",
550
+ "type": "string",
551
+ "description": "Customizable template string for the label group. Use variable \"${remaining}\" for the overflow label count."
552
+ },
553
+ {
554
+ "name": "labelGroupExpandedText",
555
+ "type": "string",
556
+ "description": "Customizable \"Show Less\" text string for the label group"
557
+ },
558
+ {
559
+ "name": "labels",
560
+ "type": "(string | ToolbarLabel)[]",
561
+ "description": "An array of strings to be displayed as labels in the expandable content",
562
+ "defaultValue": "[]"
563
+ },
564
+ {
565
+ "name": "rowGap",
566
+ "type": "{\n default?:\n | 'rowGapNone'\n | 'rowGapXs'\n | 'rowGapSm'\n | 'rowGapMd'\n | 'rowGapLg'\n | 'rowGapXl'\n | 'rowGap_2xl'\n | 'rowGap_3xl'\n | 'rowGap_4xl';\n md?:\n | 'rowGapNone'\n | 'rowGapXs'\n | 'rowGapSm'\n | 'rowGapMd'\n | 'rowGapLg'\n | 'rowGapXl'\n | 'rowGap_2xl'\n | 'rowGap_3xl'\n | 'rowGap_4xl';\n lg?:\n | 'rowGapNone'\n | 'rowGapXs'\n | 'rowGapSm'\n | 'rowGapMd'\n | 'rowGapLg'\n | 'rowGapXl'\n | 'rowGap_2xl'\n | 'rowGap_3xl'\n | 'rowGap_4xl';\n xl?:\n | 'rowGapNone'\n | 'rowGapXs'\n | 'rowGapSm'\n | 'rowGapMd'\n | 'rowGapLg'\n | 'rowGapXl'\n | 'rowGap_2xl'\n | 'rowGap_3xl'\n | 'rowGap_4xl';\n '2xl'?:\n | 'rowGapNone'\n | 'rowGapXs'\n | 'rowGapSm'\n | 'rowGapMd'\n | 'rowGapLg'\n | 'rowGapXl'\n | 'rowGap_2xl'\n | 'rowGap_3xl'\n | 'rowGap_4xl';\n}",
567
+ "description": "Sets only the row gap at various breakpoints."
568
+ },
569
+ {
570
+ "name": "rowWrap",
571
+ "type": "{\n default?: 'wrap' | 'nowrap';\n sm?: 'wrap' | 'nowrap';\n md?: 'wrap' | 'nowrap';\n lg?: 'wrap' | 'nowrap';\n xl?: 'wrap' | 'nowrap';\n '2xl'?: 'wrap' | 'nowrap';\n}",
572
+ "description": "Value to set for row wrapping at various breakpoints"
573
+ },
574
+ {
575
+ "name": "showToolbarItem",
576
+ "type": "boolean",
577
+ "description": "Flag to show the toolbar item",
578
+ "defaultValue": "true"
579
+ },
580
+ {
581
+ "name": "variant",
582
+ "type": "ToolbarItemVariant | 'pagination' | 'label' | 'label-group' | 'separator' | 'expand-all'",
583
+ "description": "A type modifier which modifies spacing specifically depending on the type of item"
584
+ },
585
+ {
586
+ "name": "visibility",
587
+ "type": "{\n default?: 'hidden' | 'visible';\n md?: 'hidden' | 'visible';\n lg?: 'hidden' | 'visible';\n xl?: 'hidden' | 'visible';\n '2xl'?: 'hidden' | 'visible';\n}",
588
+ "description": "Visibility at various width breakpoints."
589
+ },
590
+ {
591
+ "name": "visibilityAtHeight",
592
+ "type": "{\n default?: 'hidden' | 'visible';\n md?: 'hidden' | 'visible';\n lg?: 'hidden' | 'visible';\n xl?: 'hidden' | 'visible';\n '2xl'?: 'hidden' | 'visible';\n}",
593
+ "description": "Visibility at various height breakpoints."
594
+ }
595
+ ]
596
+ }
597
+ ],
598
+ "cssPrefix": [
599
+ "pf-v6-c-toolbar"
600
+ ],
601
+ "examples": [
602
+ "Toolbar items",
603
+ "With adjusted inset",
604
+ "Vertical toolbar",
605
+ "Sticky toolbar",
606
+ "Dynamic sticky toolbar",
607
+ "With groups of items",
608
+ "Background color variants",
609
+ "Component managed toggle groups",
610
+ "Consumer managed toggle groups",
611
+ "With filters",
612
+ "With custom label group content",
613
+ "Stacked example",
614
+ "Toolbar content wrapping",
615
+ "Toolbar group spacers",
616
+ "Toolbar item spacers"
617
+ ]
618
+ };
619
+ pageData.liveContext = {
620
+ Fragment,
621
+ useState,
622
+ useLayoutEffect,
623
+ useRef,
624
+ EditIcon,
625
+ CloneIcon,
626
+ SyncIcon,
627
+ FilterIcon,
628
+ SearchIcon,
629
+ RhUiEllipsisVerticalFillIcon
630
+ };
631
+ pageData.examples = {
632
+ 'Toolbar items': props =>
633
+ <Example {...pageData} {...props} {...{"code":"import { Fragment, useState } from 'react';\nimport { Toolbar, ToolbarItem, ToolbarContent } from '@patternfly/react-core';\nimport { Button, SearchInput } from '@patternfly/react-core';\n\nexport const ToolbarItems = () => {\n const [searchValue, setSearchValue] = useState('');\n\n const items = (\n <Fragment>\n <ToolbarItem>\n <SearchInput\n aria-label=\"Items example search input\"\n value={searchValue}\n onChange={(_event, value) => setSearchValue(value)}\n onClear={() => setSearchValue('')}\n />\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Action</Button>\n </ToolbarItem>\n <ToolbarItem variant=\"separator\" />\n <ToolbarItem>\n <Button variant=\"primary\">Action2</Button>\n </ToolbarItem>\n </Fragment>\n );\n\n return (\n <Toolbar id=\"toolbar-items-example\">\n <ToolbarContent>{items}</ToolbarContent>\n </Toolbar>\n );\n};\n","title":"Toolbar items","lang":"ts","className":""}}>
634
+
635
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
636
+ {`A toolbar can contain multiple toolbar items, like filters and buttons.`}
637
+ </p>
638
+
639
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
640
+ {`Note: This example does not demonstrate responsive toolbar behavior. Responsive toolbars are shown in the `}
641
+
642
+ <PatternflyThemeLink {...{"to":"/components/toolbar#examples-with-toggle-groups-and-filters","className":""}}>
643
+ {`examples with toggle groups and filters`}
644
+ </PatternflyThemeLink>
645
+ {`.`}
646
+ </p>
647
+ </Example>,
648
+ 'With adjusted inset': props =>
649
+ <Example {...pageData} {...props} {...{"code":"import { Fragment } from 'react';\nimport { Toolbar, ToolbarItem, ToolbarGroup, ToolbarContent } from '@patternfly/react-core';\nimport { Button } from '@patternfly/react-core';\n\nexport const ToolbarInsets: React.FunctionComponent = () => {\n const items = (\n <Fragment>\n <ToolbarGroup variant=\"action-group\">\n <ToolbarItem>\n <Button variant=\"secondary\">Action</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Action</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Action</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Action</Button>\n </ToolbarItem>\n </ToolbarGroup>\n <ToolbarItem variant=\"separator\"></ToolbarItem>\n <ToolbarGroup variant=\"action-group\">\n <ToolbarItem>\n <Button variant=\"secondary\">Action</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"primary\">Action</Button>\n </ToolbarItem>\n </ToolbarGroup>\n <ToolbarItem variant=\"separator\"></ToolbarItem>\n <ToolbarGroup variant=\"action-group\">\n <ToolbarItem>\n <Button variant=\"secondary\">Action</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Action</Button>\n </ToolbarItem>\n </ToolbarGroup>\n </Fragment>\n );\n\n return (\n <Toolbar\n id=\"toolbar-insets\"\n inset={{\n default: 'insetNone',\n md: 'insetSm',\n xl: 'inset2xl',\n '2xl': 'insetLg'\n }}\n >\n <ToolbarContent>{items}</ToolbarContent>\n </Toolbar>\n );\n};\n","title":"With adjusted inset","lang":"ts","className":""}}>
650
+
651
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
652
+ {`To adjust a toolbar’s inset, use the `}
653
+
654
+ <code {...{"className":"ws-code "}}>
655
+ {`inset`}
656
+ </code>
657
+ {` property. You can set the inset value at multiple breakpoints, including "default", "md", "lg, "xl", and "2xl". Inset values include “insetNone”, “insetSm”, “insetMd”, “insetLg”, “insetXl”, and “inset2xl”.`}
658
+ </p>
659
+ </Example>,
660
+ 'Vertical toolbar': props =>
661
+ <Example {...pageData} {...props} {...{"code":"import { Toolbar, ToolbarContent, ToolbarGroup, ToolbarItem } from '@patternfly/react-core';\n\nexport const ToolbarVertical: React.FunctionComponent = () => (\n <Toolbar id=\"toolbar-vertical\" isVertical>\n <ToolbarContent>\n <ToolbarGroup variant=\"action-group-plain\">\n <ToolbarItem>Item 1</ToolbarItem>\n <ToolbarItem>Item 2</ToolbarItem>\n <ToolbarItem>Item 3</ToolbarItem>\n </ToolbarGroup>\n <ToolbarGroup variant=\"action-group-plain\" visibilityAtHeight={{ default: 'hidden', md: 'visible' }}>\n <ToolbarItem>Item 4 (visible above md breakpoint)</ToolbarItem>\n <ToolbarItem visibilityAtHeight={{ default: 'hidden', lg: 'visible' }}>\n Item 5 (visible above lg breakpoint)\n </ToolbarItem>\n <ToolbarItem visibilityAtHeight={{ default: 'hidden', lg: 'visible' }}>\n Item 6 (visible above lg breakpoint)\n </ToolbarItem>\n </ToolbarGroup>\n </ToolbarContent>\n </Toolbar>\n);\n","title":"Vertical toolbar","lang":"ts","className":""}}>
662
+
663
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
664
+ {`A toolbar's orientation may be changed using the `}
665
+
666
+ <code {...{"className":"ws-code "}}>
667
+ {`isVertical`}
668
+ </code>
669
+ {` property. Responsive behavior when height is adjusted may be customized for the `}
670
+
671
+ <code {...{"className":"ws-code "}}>
672
+ {`ToolbarContent`}
673
+ </code>
674
+ {`, `}
675
+
676
+ <code {...{"className":"ws-code "}}>
677
+ {`ToolbarGroup`}
678
+ </code>
679
+ {`, and `}
680
+
681
+ <code {...{"className":"ws-code "}}>
682
+ {`ToolbarItem`}
683
+ </code>
684
+ {` components using their respective `}
685
+
686
+ <code {...{"className":"ws-code "}}>
687
+ {`visibilityAtHeight`}
688
+ </code>
689
+ {` property.`}
690
+ </p>
691
+ </Example>,
692
+ 'Sticky toolbar': props =>
693
+ <Example {...pageData} {...props} {...{"code":"import { Fragment, useState } from 'react';\nimport { Toolbar, ToolbarItem, ToolbarContent, SearchInput, Checkbox } from '@patternfly/react-core';\n\nexport const ToolbarSticky = () => {\n const [isSticky, setIsSticky] = useState(true);\n const [showEvenOnly, setShowEvenOnly] = useState(true);\n const [searchValue, setSearchValue] = useState('');\n const array = Array.from(Array(30), (_, x) => x); // create array of numbers from 1-30 for demo purposes\n const numbers = showEvenOnly ? array.filter((number) => number % 2 === 0) : array;\n\n return (\n <Fragment>\n <div style={{ overflowY: 'scroll', height: '200px' }}>\n <Toolbar id=\"toolbar-sticky\" inset={{ default: 'insetNone' }} isSticky={isSticky}>\n <ToolbarContent>\n <ToolbarItem>\n <SearchInput\n aria-label=\"Sticky example search input\"\n value={searchValue}\n onChange={(_event, value) => setSearchValue(value)}\n onClear={() => setSearchValue('')}\n />\n </ToolbarItem>\n <ToolbarItem alignSelf=\"center\">\n <Checkbox\n label=\"Show only even number items\"\n isChecked={showEvenOnly}\n onChange={(_event, checked) => setShowEvenOnly(checked)}\n id=\"showOnlyEvenCheckbox\"\n />\n </ToolbarItem>\n </ToolbarContent>\n </Toolbar>\n <ul>\n {numbers.map((number) => (\n <li key={number}>{`item ${number}`}</li>\n ))}\n </ul>\n </div>\n <Checkbox\n label=\"Is toolbar sticky\"\n isChecked={isSticky}\n onChange={(_event, checked) => setIsSticky(checked)}\n id=\"isStickyCheckbox\"\n />\n </Fragment>\n );\n};\n","title":"Sticky toolbar","lang":"ts","className":""}}>
694
+
695
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
696
+ {`To lock a toolbar and prevent it from scrolling with other content, use a sticky toolbar.`}
697
+ </p>
698
+
699
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
700
+ {`In the following example, toggle the "is toolbar sticky" checkbox to see the difference between a sticky and non-sticky toolbar.`}
701
+ </p>
702
+ </Example>,
703
+ 'Dynamic sticky toolbar': props =>
704
+ <Example {...pageData} {...props} {...{"code":"import { useLayoutEffect, useState, useRef } from 'react';\nimport { Toolbar, ToolbarItem, ToolbarContent, SearchInput, Checkbox } from '@patternfly/react-core';\n\nconst useIsStuckFromScrollParent = ({\n shouldTrack,\n scrollParentRef\n}: {\n /** Indicates whether to track the scroll top position of the scroll parent element */\n shouldTrack: boolean;\n /** Reference to the scroll parent element */\n scrollParentRef: React.RefObject<any>;\n}): boolean => {\n const [isStuck, setIsStuck] = useState(false);\n\n useLayoutEffect(() => {\n if (!shouldTrack) {\n setIsStuck(false);\n return;\n }\n\n const scrollElement = scrollParentRef.current;\n if (!scrollElement) {\n setIsStuck(false);\n return;\n }\n\n const syncFromScroll = () => {\n setIsStuck(scrollElement.scrollTop > 0);\n };\n syncFromScroll();\n scrollElement.addEventListener('scroll', syncFromScroll, { passive: true });\n return () => scrollElement.removeEventListener('scroll', syncFromScroll);\n }, [shouldTrack, scrollParentRef]);\n\n return isStuck;\n};\n\nexport const ToolbarDynamicSticky = () => {\n const scrollParentRef = useRef<HTMLDivElement>(null);\n const isStickyStuck = useIsStuckFromScrollParent({ shouldTrack: true, scrollParentRef });\n const [showEvenOnly, setShowEvenOnly] = useState(true);\n const [searchValue, setSearchValue] = useState('');\n const array = Array.from(Array(30), (_, x) => x); // create array of numbers from 1-30 for demo purposes\n const numbers = showEvenOnly ? array.filter((number) => number % 2 === 0) : array;\n\n return (\n <div id=\"dynamic-sticky-scroll-parent\" ref={scrollParentRef} style={{ overflowY: 'scroll', height: '200px' }}>\n <Toolbar id=\"toolbar-dynamic-sticky\" inset={{ default: 'insetNone' }} isStickyBase isStickyStuck={isStickyStuck}>\n <ToolbarContent>\n <ToolbarItem>\n <SearchInput\n aria-label=\"Sticky example search input\"\n value={searchValue}\n onChange={(_event, value) => setSearchValue(value)}\n onClear={() => setSearchValue('')}\n />\n </ToolbarItem>\n <ToolbarItem alignSelf=\"center\">\n <Checkbox\n label=\"Show only even number items\"\n isChecked={showEvenOnly}\n onChange={(_event, checked) => setShowEvenOnly(checked)}\n id=\"showOnlyEvenCheckbox\"\n />\n </ToolbarItem>\n </ToolbarContent>\n </Toolbar>\n <ul>\n {numbers.map((number) => (\n <li key={number}>{`item ${number}`}</li>\n ))}\n </ul>\n </div>\n );\n};\n","title":"Dynamic sticky toolbar","lang":"ts","className":""}}>
705
+
706
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
707
+ {`A toolbar may alternatively be made sticky with two properties: `}
708
+
709
+ <code {...{"className":"ws-code "}}>
710
+ {`isStickyBase`}
711
+ </code>
712
+ {` and `}
713
+
714
+ <code {...{"className":"ws-code "}}>
715
+ {`isStickyStuck`}
716
+ </code>
717
+ {` - which allows separate control of the sticky position and sticky styling respectively. In this example, `}
718
+
719
+ <code {...{"className":"ws-code "}}>
720
+ {`isStickyStuck`}
721
+ </code>
722
+ {` is only applied when the sticky element is not at the top of the scroll parent container.`}
723
+ </p>
724
+ </Example>,
725
+ 'With groups of items': props =>
726
+ <Example {...pageData} {...props} {...{"code":"import { Fragment, useState } from 'react';\nimport {\n Button,\n MenuToggle,\n MenuToggleElement,\n Toolbar,\n ToolbarContent,\n ToolbarGroup,\n ToolbarItem,\n Select,\n SelectList,\n SelectOption\n} from '@patternfly/react-core';\nimport EditIcon from '@patternfly/react-icons/dist/esm/icons/edit-icon';\nimport CloneIcon from '@patternfly/react-icons/dist/esm/icons/clone-icon';\nimport SyncIcon from '@patternfly/react-icons/dist/esm/icons/sync-icon';\n\nexport const ToolbarGroups: React.FunctionComponent = () => {\n const firstOptions = ['A', 'B', 'C'];\n const secondOptions = ['1', '2', '3'];\n const thirdOptions = ['I', 'II', 'III'];\n\n const [firstIsExpanded, setFirstIsExpanded] = useState(false);\n const [firstSelected, setFirstSelected] = useState('');\n const [secondIsExpanded, setSecondIsExpanded] = useState(false);\n const [secondSelected, setSecondSelected] = useState('');\n const [thirdIsExpanded, setThirdIsExpanded] = useState(false);\n const [thirdSelected, setThirdSelected] = useState('');\n\n const onToggle = (filterName: string) => {\n switch (filterName) {\n case 'first':\n setFirstIsExpanded(!firstIsExpanded);\n break;\n case 'second':\n setSecondIsExpanded(!secondIsExpanded);\n break;\n case 'third':\n setThirdIsExpanded(!thirdIsExpanded);\n break;\n }\n };\n\n const onFirstSelect = (_event: React.MouseEvent<Element, MouseEvent> | undefined, selection: string) => {\n setFirstSelected(selection);\n setFirstIsExpanded(false);\n };\n\n const onSecondSelect = (_event: React.MouseEvent<Element, MouseEvent> | undefined, selection: string) => {\n setSecondSelected(selection);\n setSecondIsExpanded(false);\n };\n\n const onThirdSelect = (_event: React.MouseEvent<Element, MouseEvent> | undefined, selection: string) => {\n setThirdSelected(selection);\n setThirdIsExpanded(false);\n };\n\n const filterGroupItems = (\n <Fragment>\n <ToolbarItem>\n <Select\n toggle={(toggleRef: React.Ref<MenuToggleElement>) => (\n <MenuToggle\n ref={toggleRef}\n onClick={() => onToggle('first')}\n isExpanded={firstIsExpanded}\n style={\n {\n width: '88px'\n } as React.CSSProperties\n }\n >\n {firstSelected || 'First'}\n </MenuToggle>\n )}\n onSelect={onFirstSelect}\n onOpenChange={(isOpen) => setFirstIsExpanded(isOpen)}\n selected={firstSelected}\n isOpen={firstIsExpanded}\n >\n <SelectList>\n {firstOptions.map((option, index) => (\n <SelectOption key={index} value={option}>\n {option}\n </SelectOption>\n ))}\n </SelectList>\n </Select>\n </ToolbarItem>\n <ToolbarItem>\n <Select\n toggle={(toggleRef: React.Ref<MenuToggleElement>) => (\n <MenuToggle\n ref={toggleRef}\n onClick={() => onToggle('second')}\n isExpanded={secondIsExpanded}\n style={\n {\n width: '120px'\n } as React.CSSProperties\n }\n >\n {secondSelected || 'Second'}\n </MenuToggle>\n )}\n onSelect={onSecondSelect}\n selected={secondSelected}\n onOpenChange={(isOpen) => setSecondIsExpanded(isOpen)}\n isOpen={secondIsExpanded}\n >\n <SelectList>\n {secondOptions.map((option, index) => (\n <SelectOption key={index} value={option}>\n {option}\n </SelectOption>\n ))}\n </SelectList>\n </Select>\n </ToolbarItem>\n <ToolbarItem>\n <Select\n toggle={(toggleRef: React.Ref<MenuToggleElement>) => (\n <MenuToggle\n ref={toggleRef}\n onClick={() => onToggle('third')}\n isExpanded={thirdIsExpanded}\n style={\n {\n width: '96px'\n } as React.CSSProperties\n }\n >\n {thirdSelected || 'Third'}\n </MenuToggle>\n )}\n onSelect={onThirdSelect}\n selected={thirdSelected}\n onOpenChange={(isOpen) => setThirdIsExpanded(isOpen)}\n isOpen={thirdIsExpanded}\n >\n <SelectList>\n {thirdOptions.map((option, index) => (\n <SelectOption key={index} value={option}>\n {option}\n </SelectOption>\n ))}\n </SelectList>\n </Select>\n </ToolbarItem>\n </Fragment>\n );\n\n const iconButtonGroupItems = (\n <Fragment>\n <ToolbarItem>\n <Button variant=\"plain\" aria-label=\"edit\" icon={<EditIcon />} />\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"plain\" aria-label=\"clone\" icon={<CloneIcon />} />\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"plain\" aria-label=\"sync\" icon={<SyncIcon />} />\n </ToolbarItem>\n </Fragment>\n );\n\n const buttonGroupItems = (\n <Fragment>\n <ToolbarItem>\n <Button variant=\"primary\">Action</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Secondary</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"tertiary\">Tertiary</Button>\n </ToolbarItem>\n </Fragment>\n );\n\n const items = (\n <Fragment>\n <ToolbarGroup variant=\"filter-group\">{filterGroupItems}</ToolbarGroup>\n <ToolbarGroup variant=\"action-group-plain\">{iconButtonGroupItems}</ToolbarGroup>\n <ToolbarGroup variant=\"action-group\">{buttonGroupItems}</ToolbarGroup>\n </Fragment>\n );\n\n return (\n <Toolbar id=\"toolbar-group-types\">\n <ToolbarContent>{items}</ToolbarContent>\n </Toolbar>\n );\n};\n","title":"With groups of items","lang":"ts","className":""}}>
727
+
728
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
729
+ {`You can group similar items together to create desired associations and to enable items to respond to changes in viewport width together.`}
730
+ </p>
731
+
732
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
733
+ {`Note: This example does not demonstrate responsive toolbar behavior. Responsive toolbars are shown in the `}
734
+
735
+ <PatternflyThemeLink {...{"to":"/components/toolbar#examples-with-toggle-groups-and-filters","className":""}}>
736
+ {`examples with toggle groups and filters`}
737
+ </PatternflyThemeLink>
738
+ {`.`}
739
+ </p>
740
+ </Example>,
741
+ 'Background color variants': props =>
742
+ <Example {...pageData} {...props} {...{"code":"import { Fragment } from 'react';\nimport { Toolbar, ToolbarItem, ToolbarContent, Button, SearchInput } from '@patternfly/react-core';\n\nexport const ToolbarColorVariant: React.FunctionComponent = () => (\n <Fragment>\n No background\n <Toolbar id=\"toolbar-color-variant-no-background\" colorVariant={'no-background'}>\n <ToolbarContent>\n <ToolbarItem>\n <SearchInput aria-label=\"No backtround variant example search input\" />\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Action</Button>\n </ToolbarItem>\n <ToolbarItem variant=\"separator\" />\n <ToolbarItem>\n <Button variant=\"primary\">Action</Button>\n </ToolbarItem>\n </ToolbarContent>\n </Toolbar>\n Primary background\n <Toolbar id=\"toolbar-color-variant-primary\" colorVariant={'primary'}>\n <ToolbarContent>\n <ToolbarItem>\n <SearchInput aria-label=\"Primary background variant example search input\" />\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Action</Button>\n </ToolbarItem>\n <ToolbarItem variant=\"separator\" />\n <ToolbarItem>\n <Button variant=\"primary\">Action</Button>\n </ToolbarItem>\n </ToolbarContent>\n </Toolbar>\n Secondary background\n <Toolbar id=\"toolbar-color-variant-secondary\" colorVariant={'secondary'}>\n <ToolbarContent>\n <ToolbarItem>\n <SearchInput aria-label=\"Secondary background variant example search input\" />\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Action</Button>\n </ToolbarItem>\n <ToolbarItem variant=\"separator\" />\n <ToolbarItem>\n <Button variant=\"primary\">Action</Button>\n </ToolbarItem>\n </ToolbarContent>\n </Toolbar>\n </Fragment>\n);\n","title":"Background color variants","lang":"ts","className":""}}>
743
+
744
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
745
+ {`To change the background color of a toolbar, use the `}
746
+
747
+ <code {...{"className":"ws-code "}}>
748
+ {`colorVariant`}
749
+ </code>
750
+ {` property on the `}
751
+
752
+ <code {...{"className":"ws-code "}}>
753
+ {`<Toolbar>`}
754
+ </code>
755
+ {`.`}
756
+ </p>
757
+ </Example>,
758
+ 'Component managed toggle groups': props =>
759
+ <Example {...pageData} {...props} {...{"code":"import { Fragment, useState } from 'react';\nimport {\n MenuToggle,\n MenuToggleElement,\n Toolbar,\n ToolbarItem,\n ToolbarContent,\n ToolbarToggleGroup,\n ToolbarGroup,\n SearchInput,\n Select,\n SelectList,\n SelectOption\n} from '@patternfly/react-core';\nimport FilterIcon from '@patternfly/react-icons/dist/esm/icons/filter-icon';\n\nexport const ToolbarComponentManagedToggleGroup: React.FunctionComponent = () => {\n const [inputValue, setInputValue] = useState('');\n const [statusIsExpanded, setStatusIsExpanded] = useState(false);\n const [statusSelected, setStatusSelected] = useState('');\n const [riskIsExpanded, setRiskIsExpanded] = useState(false);\n const [riskSelected, setRiskSelected] = useState('');\n\n const statusOptions = ['New', 'Pending', 'Running', 'Cancelled'];\n const riskOptions = ['Risk', 'Low', 'Medium', 'High'];\n\n const onInputChange = (newValue: string) => {\n setInputValue(newValue);\n };\n\n const onStatusToggle = () => {\n setStatusIsExpanded(!statusIsExpanded);\n };\n\n const onStatusSelect = (_event: React.MouseEvent<Element, MouseEvent> | undefined, selection: string) => {\n setStatusSelected(selection);\n setStatusIsExpanded(false);\n };\n\n const onRiskToggle = () => {\n setRiskIsExpanded(!riskIsExpanded);\n };\n\n const onRiskSelect = (_event: React.MouseEvent<Element, MouseEvent> | undefined, selection: string) => {\n setRiskSelected(selection);\n setRiskIsExpanded(false);\n };\n\n const toggleGroupItems = (\n <Fragment>\n <ToolbarItem>\n <SearchInput\n aria-label=\"Component toggle groups example search input\"\n onChange={(_event, value) => onInputChange(value)}\n value={inputValue}\n onClear={() => {\n onInputChange('');\n }}\n />\n </ToolbarItem>\n <ToolbarGroup variant=\"filter-group\">\n <ToolbarItem>\n <Select\n toggle={(toggleRef: React.Ref<MenuToggleElement>) => (\n <MenuToggle\n ref={toggleRef}\n onClick={() => onStatusToggle()}\n isExpanded={statusIsExpanded}\n style={\n {\n width: '150px'\n } as React.CSSProperties\n }\n >\n {statusSelected || 'Status'}\n </MenuToggle>\n )}\n onSelect={onStatusSelect}\n onOpenChange={(isOpen) => setStatusIsExpanded(isOpen)}\n selected={statusSelected}\n isOpen={statusIsExpanded}\n >\n <SelectList>\n {statusOptions.map((option, index) => (\n <SelectOption key={index} value={option}>\n {option}\n </SelectOption>\n ))}\n </SelectList>\n </Select>\n </ToolbarItem>\n <ToolbarItem>\n <Select\n toggle={(toggleRef: React.Ref<MenuToggleElement>) => (\n <MenuToggle\n ref={toggleRef}\n onClick={() => onRiskToggle()}\n isExpanded={riskIsExpanded}\n style={\n {\n width: '120px'\n } as React.CSSProperties\n }\n >\n {riskSelected || 'Risk'}\n </MenuToggle>\n )}\n onSelect={onRiskSelect}\n selected={riskSelected}\n isOpen={riskIsExpanded}\n onOpenChange={(isOpen) => setRiskIsExpanded(isOpen)}\n >\n <SelectList>\n {riskOptions.map((option, index) => (\n <SelectOption key={index} value={option}>\n {option}\n </SelectOption>\n ))}\n </SelectList>\n </Select>\n </ToolbarItem>\n </ToolbarGroup>\n </Fragment>\n );\n\n const items = (\n <ToolbarToggleGroup toggleIcon={<FilterIcon />} breakpoint=\"xl\">\n {toggleGroupItems}\n </ToolbarToggleGroup>\n );\n\n return (\n <Toolbar id=\"toolbar-component-managed-toggle-groups\" className=\"pf-m-toggle-group-container\">\n <ToolbarContent>{items}</ToolbarContent>\n </Toolbar>\n );\n};\n","title":"Component managed toggle groups","lang":"ts","className":""}}>
760
+
761
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
762
+ {`A toggle group allows you to collapse a set of items into an overlay panel at a certain breakpoint. For example, when a toggle group contains filter controls, its contents will collapse into an overlay panel when the toolbar adapts to a change in the viewport size. The contents can be toggled by selecting the filter icon in the overlay panel.`}
763
+ </p>
764
+ </Example>,
765
+ 'Consumer managed toggle groups': props =>
766
+ <Example {...pageData} {...props} {...{"code":"import { Fragment, useState } from 'react';\nimport {\n MenuToggle,\n MenuToggleElement,\n Toolbar,\n ToolbarItem,\n ToolbarContent,\n ToolbarToggleGroup,\n ToolbarGroup,\n SearchInput,\n Select,\n SelectList,\n SelectOption\n} from '@patternfly/react-core';\nimport FilterIcon from '@patternfly/react-icons/dist/esm/icons/filter-icon';\n\nexport const ToolbarConsumerManagedToggleGroup: React.FunctionComponent = () => {\n const [isExpanded, setIsExpanded] = useState(false);\n const [inputValue, setInputValue] = useState('');\n const [statusIsExpanded, setStatusIsExpanded] = useState(false);\n const [statusSelected, setStatusSelected] = useState('');\n const [riskIsExpanded, setRiskIsExpanded] = useState(false);\n const [riskSelected, setRiskSelected] = useState('');\n\n const toggleIsExpanded = () => {\n setIsExpanded(!isExpanded);\n };\n\n const statusOptions = ['New', 'Pending', 'Running', 'Cancelled'];\n const riskOptions = ['Risk', 'Low', 'Medium', 'High'];\n\n const onInputChange = (newValue: string) => {\n setInputValue(newValue);\n };\n\n const onStatusToggle = () => {\n setStatusIsExpanded(!statusIsExpanded);\n };\n\n const onStatusSelect = (_event: React.MouseEvent<Element, MouseEvent> | undefined, selection: string) => {\n setStatusSelected(selection);\n setStatusIsExpanded(false);\n };\n\n const onRiskToggle = () => {\n setRiskIsExpanded(!riskIsExpanded);\n };\n\n const onRiskSelect = (_event: React.MouseEvent<Element, MouseEvent> | undefined, selection: string) => {\n setRiskSelected(selection);\n setRiskIsExpanded(false);\n };\n\n const toggleGroupItems = (\n <Fragment>\n <ToolbarItem>\n <SearchInput\n aria-label=\"Consumer toggle groups example search input\"\n onChange={(_event, value) => onInputChange(value)}\n value={inputValue}\n onClear={() => {\n onInputChange('');\n }}\n />\n </ToolbarItem>\n <ToolbarGroup variant=\"filter-group\">\n <ToolbarItem>\n <Select\n toggle={(toggleRef: React.Ref<MenuToggleElement>) => (\n <MenuToggle\n ref={toggleRef}\n onClick={() => onStatusToggle()}\n isExpanded={statusIsExpanded}\n style={\n {\n width: '150px'\n } as React.CSSProperties\n }\n >\n {statusSelected || 'Status'}\n </MenuToggle>\n )}\n onSelect={onStatusSelect}\n onOpenChange={(isOpen) => setStatusIsExpanded(isOpen)}\n selected={statusSelected}\n isOpen={statusIsExpanded}\n >\n <SelectList>\n {statusOptions.map((option, index) => (\n <SelectOption key={index} value={option}>\n {option}\n </SelectOption>\n ))}\n </SelectList>\n </Select>\n </ToolbarItem>\n <ToolbarItem>\n <Select\n toggle={(toggleRef: React.Ref<MenuToggleElement>) => (\n <MenuToggle\n ref={toggleRef}\n onClick={() => onRiskToggle()}\n isExpanded={riskIsExpanded}\n style={\n {\n width: '120px'\n } as React.CSSProperties\n }\n >\n {riskSelected || 'Risk'}\n </MenuToggle>\n )}\n onSelect={onRiskSelect}\n selected={riskSelected}\n isOpen={riskIsExpanded}\n onOpenChange={(isOpen) => setRiskIsExpanded(isOpen)}\n >\n <SelectList>\n {riskOptions.map((option, index) => (\n <SelectOption key={index} value={option}>\n {option}\n </SelectOption>\n ))}\n </SelectList>\n </Select>\n </ToolbarItem>\n </ToolbarGroup>\n </Fragment>\n );\n\n const items = (\n <ToolbarToggleGroup toggleIcon={<FilterIcon />} breakpoint=\"xl\">\n {toggleGroupItems}\n </ToolbarToggleGroup>\n );\n\n return (\n <Toolbar\n id=\"toolbar-consumer-managed-toggle-groups\"\n isExpanded={isExpanded}\n className=\"pf-m-toggle-group-container\"\n toggleIsExpanded={toggleIsExpanded}\n >\n <ToolbarContent>{items}</ToolbarContent>\n </Toolbar>\n );\n};\n","title":"Consumer managed toggle groups","lang":"ts","className":""}}>
767
+
768
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
769
+ {`To manually create the expanded state of the toggle group for smaller screen widths:`}
770
+ </p>
771
+
772
+ <ol {...{"className":"pf-v6-c-content--ol pf-m-editorial ws-ol "}}>
773
+
774
+
775
+
776
+ <li {...{"className":"pf-v6-c-content--li pf-m-editorial ws-li "}}>
777
+ {`Add a `}
778
+
779
+ <code {...{"className":"ws-code "}}>
780
+ {`toggleIsExpanded`}
781
+ </code>
782
+ {` callback to the toolbar`}
783
+ </li>
784
+
785
+
786
+
787
+ <li {...{"className":"pf-v6-c-content--li pf-m-editorial ws-li "}}>
788
+ {`Pass a boolean into the `}
789
+
790
+ <code {...{"className":"ws-code "}}>
791
+ {`isExpanded`}
792
+ </code>
793
+ {` property of the toolbar`}
794
+ </li>
795
+
796
+
797
+ </ol>
798
+
799
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
800
+ {`Note: The toggle group is aware of the consumer provided breakpoint, the expandable content is not. If the expandable content is expanded and the screen width surpasses that of the breakpoint, the expandable content is not aware of that and will remain open. Be sure to consider and handle this in your implementation.`}
801
+ </p>
802
+ </Example>,
803
+ 'With filters': props =>
804
+ <Example {...pageData} {...props} {...{"code":"import { Fragment, useState } from 'react';\nimport {\n Button,\n Dropdown,\n DropdownList,\n DropdownItem,\n Toolbar,\n ToolbarItem,\n ToolbarContent,\n ToolbarFilter,\n ToolbarToggleGroup,\n ToolbarGroup,\n Badge,\n MenuToggle,\n MenuToggleElement,\n SearchInput,\n Select,\n SelectList,\n SelectOption\n} from '@patternfly/react-core';\nimport FilterIcon from '@patternfly/react-icons/dist/esm/icons/filter-icon';\nimport EditIcon from '@patternfly/react-icons/dist/esm/icons/edit-icon';\nimport CloneIcon from '@patternfly/react-icons/dist/esm/icons/clone-icon';\nimport SyncIcon from '@patternfly/react-icons/dist/esm/icons/sync-icon';\nimport RhUiEllipsisVerticalFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-ellipsis-vertical-fill-icon';\n\nexport const ToolbarWithFilters: React.FunctionComponent = () => {\n const [inputValue, setInputValue] = useState('');\n const [isStatusExpanded, setIsStatusExpanded] = useState(false);\n const [isRiskExpanded, setIsRiskExpanded] = useState(false);\n const [filters, setFilters] = useState({\n risk: ['Low'],\n status: ['New', 'Pending']\n });\n const [isKebabOpen, setIsKebabOpen] = useState(false);\n\n const onInputChange = (newValue: string) => {\n setInputValue(newValue);\n };\n\n const onSelect = (type: string, event: React.MouseEvent | React.ChangeEvent, selection: string) => {\n const checked = (event.target as HTMLInputElement).checked;\n setFilters((prev) => {\n const prevSelections = prev[type];\n return {\n ...prev,\n [type]: checked ? [...prevSelections, selection] : prevSelections.filter((value) => value !== selection)\n };\n });\n };\n\n const onStatusSelect = (event: React.MouseEvent | React.ChangeEvent, selection: string) => {\n onSelect('status', event, selection);\n };\n\n const onRiskSelect = (event: React.MouseEvent | React.ChangeEvent, selection: string) => {\n onSelect('risk', event, selection);\n };\n\n const onDelete = (type: string, id: string) => {\n if (type === 'Risk') {\n setFilters({ risk: filters.risk.filter((fil: string) => fil !== id), status: filters.status });\n } else if (type === 'Status') {\n setFilters({ risk: filters.risk, status: filters.status.filter((fil: string) => fil !== id) });\n } else {\n setFilters({ risk: [], status: [] });\n }\n };\n\n const onDeleteGroup = (type: string) => {\n if (type === 'Risk') {\n setFilters({ risk: [], status: filters.status });\n } else if (type === 'Status') {\n setFilters({ risk: filters.risk, status: [] });\n }\n };\n\n const onStatusToggle = () => {\n setIsStatusExpanded(!isStatusExpanded);\n };\n\n const onRiskToggle = () => {\n setIsRiskExpanded(!isRiskExpanded);\n };\n\n const onKebabToggle = () => {\n setIsKebabOpen(!isKebabOpen);\n };\n\n const statusMenuItems = (\n <SelectList>\n <SelectOption hasCheckbox key=\"statusNew\" value=\"New\" isSelected={filters.status.includes('New')}>\n New\n </SelectOption>\n <SelectOption hasCheckbox key=\"statusPending\" value=\"Pending\" isSelected={filters.status.includes('Pending')}>\n Pending\n </SelectOption>\n <SelectOption hasCheckbox key=\"statusRunning\" value=\"Running\" isSelected={filters.status.includes('Running')}>\n Running\n </SelectOption>\n <SelectOption\n hasCheckbox\n key=\"statusCancelled\"\n value=\"Cancelled\"\n isSelected={filters.status.includes('Cancelled')}\n >\n Cancelled\n </SelectOption>\n </SelectList>\n );\n\n const riskMenuItems = (\n <SelectList>\n <SelectOption hasCheckbox key=\"riskLow\" value=\"Low\" isSelected={filters.risk.includes('Low')}>\n Low\n </SelectOption>\n <SelectOption hasCheckbox key=\"riskMedium\" value=\"Medium\" isSelected={filters.risk.includes('Medium')}>\n Medium\n </SelectOption>\n <SelectOption hasCheckbox key=\"riskHigh\" value=\"High\" isSelected={filters.risk.includes('High')}>\n High\n </SelectOption>\n </SelectList>\n );\n\n const toggleGroupItems = (\n <Fragment>\n <ToolbarItem>\n <SearchInput\n aria-label=\"With filters example search input\"\n onChange={(_event, value) => onInputChange(value)}\n value={inputValue}\n onClear={() => {\n onInputChange('');\n }}\n />\n </ToolbarItem>\n <ToolbarGroup variant=\"filter-group\">\n <ToolbarFilter\n labels={filters.status}\n deleteLabel={(category, label) => onDelete(category as string, label as string)}\n deleteLabelGroup={(category) => onDeleteGroup(category as string)}\n categoryName=\"Status\"\n >\n <Select\n aria-label=\"Status\"\n role=\"menu\"\n toggle={(toggleRef: React.Ref<MenuToggleElement>) => (\n <MenuToggle\n ref={toggleRef}\n onClick={onStatusToggle}\n isExpanded={isStatusExpanded}\n style={\n {\n width: '140px'\n } as React.CSSProperties\n }\n >\n Status\n {filters.status.length > 0 && <Badge isRead>{filters.status.length}</Badge>}\n </MenuToggle>\n )}\n onSelect={onStatusSelect}\n selected={filters.status}\n isOpen={isStatusExpanded}\n onOpenChange={(isOpen) => setIsStatusExpanded(isOpen)}\n >\n {statusMenuItems}\n </Select>\n </ToolbarFilter>\n <ToolbarFilter\n labels={filters.risk}\n deleteLabel={(category, label) => onDelete(category as string, label as string)}\n categoryName=\"Risk\"\n >\n <Select\n aria-label=\"Risk\"\n role=\"menu\"\n toggle={(toggleRef: React.Ref<MenuToggleElement>) => (\n <MenuToggle\n ref={toggleRef}\n onClick={onRiskToggle}\n isExpanded={isRiskExpanded}\n style={\n {\n width: '140px'\n } as React.CSSProperties\n }\n >\n Risk\n {filters.risk.length > 0 && <Badge isRead>{filters.risk.length}</Badge>}\n </MenuToggle>\n )}\n onSelect={onRiskSelect}\n selected={filters.risk}\n isOpen={isRiskExpanded}\n onOpenChange={(isOpen) => setIsRiskExpanded(isOpen)}\n >\n {riskMenuItems}\n </Select>\n </ToolbarFilter>\n </ToolbarGroup>\n </Fragment>\n );\n\n const toolbarItems = (\n <Fragment>\n <ToolbarToggleGroup toggleIcon={<FilterIcon />} breakpoint=\"xl\">\n {toggleGroupItems}\n </ToolbarToggleGroup>\n <ToolbarGroup variant=\"action-group-plain\">\n <ToolbarItem>\n <Button variant=\"plain\" aria-label=\"edit\" icon={<EditIcon />} />\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"plain\" aria-label=\"clone\" icon={<CloneIcon />} />\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"plain\" aria-label=\"sync\" icon={<SyncIcon />} />\n </ToolbarItem>\n </ToolbarGroup>\n <ToolbarItem>\n <Dropdown\n popperProps={{ position: 'right' }}\n isOpen={isKebabOpen}\n onOpenChange={(isOpen: boolean) => setIsKebabOpen(isOpen)}\n toggle={(toggleRef: React.Ref<MenuToggleElement>) => (\n <MenuToggle\n ref={toggleRef}\n isExpanded={isKebabOpen}\n onClick={onKebabToggle}\n variant=\"plain\"\n aria-label=\"Toolbar with filters example kebab toggle\"\n icon={<RhUiEllipsisVerticalFillIcon />}\n />\n )}\n >\n <DropdownList>\n <DropdownItem>Action</DropdownItem>\n <DropdownItem\n to=\"#default-link2\"\n // Prevent the default onClick functionality for example purposes\n onClick={(ev: any) => ev.preventDefault()}\n >\n Link\n </DropdownItem>\n <DropdownItem isDisabled>Disabled Action</DropdownItem>\n <DropdownItem isDisabled to=\"#default-link4\">\n Disabled Link\n </DropdownItem>\n </DropdownList>\n </Dropdown>\n </ToolbarItem>\n </Fragment>\n );\n\n return (\n <Toolbar\n id=\"toolbar-with-filter\"\n className=\"pf-m-toggle-group-container\"\n collapseListedFiltersBreakpoint=\"xl\"\n clearAllFilters={() => onDelete('', '')}\n >\n <ToolbarContent>{toolbarItems}</ToolbarContent>\n </Toolbar>\n );\n};\n","title":"With filters","lang":"ts","className":""}}>
805
+
806
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
807
+ {`You can add filters to a toolbar to let users filter the content that a toolbar manages. When a toolbar is filtered, it will expand in height to make space for a row of filter labels and a "Clear all filters" button. Upon clearing the applied filters, the toolbar will return to its default height.`}
808
+ </p>
809
+
810
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
811
+ {`The `}
812
+
813
+ <code {...{"className":"ws-code "}}>
814
+ {`<ToolbarFilter>`}
815
+ </code>
816
+ {` component expects applied filters and a delete label handler to be passed in as properties. Pass in a `}
817
+
818
+ <code {...{"className":"ws-code "}}>
819
+ {`deleteLabelGroup`}
820
+ </code>
821
+ {` property to close the entire label group. Once close, the rendering of labels will be handled responsively by the toolbar.`}
822
+ </p>
823
+ </Example>,
824
+ 'With custom label group content': props =>
825
+ <Example {...pageData} {...props} {...{"code":"import { Fragment, useState } from 'react';\nimport {\n Toolbar,\n ToolbarItem,\n ToolbarContent,\n ToolbarFilter,\n ToolbarToggleGroup,\n ToolbarGroup,\n Badge,\n Button,\n MenuToggle,\n MenuToggleElement,\n Select,\n SelectList,\n SelectOption\n} from '@patternfly/react-core';\nimport FilterIcon from '@patternfly/react-icons/dist/esm/icons/filter-icon';\nimport EditIcon from '@patternfly/react-icons/dist/esm/icons/edit-icon';\nimport CloneIcon from '@patternfly/react-icons/dist/esm/icons/clone-icon';\nimport SyncIcon from '@patternfly/react-icons/dist/esm/icons/sync-icon';\n\nexport const ToolbarCustomLabelGroupContent: React.FunctionComponent = () => {\n const [statusIsExpanded, setStatusIsExpanded] = useState<boolean>(false);\n const [riskIsExpanded, setRiskIsExpanded] = useState<boolean>(false);\n const [filters, setFilters] = useState({\n risk: ['Low'],\n status: ['New', 'Pending']\n });\n\n const onDelete = (type: string, id: string) => {\n if (type === 'Risk') {\n setFilters({ risk: filters.risk.filter((fil: string) => fil !== id), status: filters.status });\n } else if (type === 'Status') {\n setFilters({ risk: filters.risk, status: filters.status.filter((fil: string) => fil !== id) });\n } else {\n setFilters({ risk: [], status: [] });\n }\n };\n\n const onDeleteGroup = (type: string) => {\n if (type === 'Risk') {\n setFilters({ risk: [], status: filters.status });\n } else if (type === 'Status') {\n setFilters({ risk: filters.risk, status: [] });\n }\n };\n\n const onSelect = (type: 'Risk' | 'Status', event: React.MouseEvent | React.ChangeEvent, selection: string) => {\n const checked = (event.target as any).checked;\n if (type === 'Risk') {\n setFilters({\n risk: checked ? [...filters.risk, selection] : filters.risk.filter((fil: string) => fil !== selection),\n status: filters.status\n });\n } else if (type === 'Status') {\n setFilters({\n risk: filters.risk,\n status: checked ? [...filters.status, selection] : filters.status.filter((fil: string) => fil !== selection)\n });\n }\n };\n\n const statusMenuItems = (\n <SelectList>\n <SelectOption hasCheckbox key=\"statusNew\" value=\"New\" isSelected={filters.status.includes('New')}>\n New\n </SelectOption>\n <SelectOption hasCheckbox key=\"statusPending\" value=\"Pending\" isSelected={filters.status.includes('Pending')}>\n Pending\n </SelectOption>\n <SelectOption hasCheckbox key=\"statusRunning\" value=\"Running\" isSelected={filters.status.includes('Running')}>\n Running\n </SelectOption>\n <SelectOption\n hasCheckbox\n key=\"statusCancelled\"\n value=\"Cancelled\"\n isSelected={filters.status.includes('Cancelled')}\n >\n Cancelled\n </SelectOption>\n </SelectList>\n );\n\n const riskMenuItems = (\n <SelectList>\n <SelectOption hasCheckbox key=\"riskLow\" value=\"Low\" isSelected={filters.risk.includes('Low')}>\n Low\n </SelectOption>\n <SelectOption hasCheckbox key=\"riskMedium\" value=\"Medium\" isSelected={filters.risk.includes('Medium')}>\n Medium\n </SelectOption>\n <SelectOption hasCheckbox key=\"riskHigh\" value=\"High\" isSelected={filters.risk.includes('High')}>\n High\n </SelectOption>\n </SelectList>\n );\n\n const toggleGroupItems = (\n <Fragment>\n <ToolbarGroup variant=\"filter-group\">\n <ToolbarFilter\n labels={filters.status}\n deleteLabel={(category, label) => onDelete(category as string, label as string)}\n deleteLabelGroup={(category) => onDeleteGroup(category as string)}\n categoryName=\"Status\"\n >\n <Select\n aria-label=\"Status\"\n role=\"menu\"\n toggle={(toggleRef: React.Ref<MenuToggleElement>) => (\n <MenuToggle\n ref={toggleRef}\n onClick={() => setStatusIsExpanded(!statusIsExpanded)}\n isExpanded={statusIsExpanded}\n style={\n {\n width: '140px'\n } as React.CSSProperties\n }\n >\n Status\n {filters.status.length > 0 && <Badge isRead>{filters.status.length}</Badge>}\n </MenuToggle>\n )}\n onSelect={(event, selection) => onSelect('Status', event, selection as string)}\n selected={filters.status}\n isOpen={statusIsExpanded}\n onOpenChange={(isOpen) => setStatusIsExpanded(isOpen)}\n >\n {statusMenuItems}\n </Select>\n </ToolbarFilter>\n <ToolbarFilter\n labels={filters.risk}\n deleteLabel={(category, label) => onDelete(category as string, label as string)}\n deleteLabelGroup={(category) => onDeleteGroup(category as string)}\n categoryName=\"Risk\"\n >\n <Select\n aria-label=\"Risk\"\n role=\"menu\"\n toggle={(toggleRef: React.Ref<MenuToggleElement>) => (\n <MenuToggle\n ref={toggleRef}\n onClick={() => setRiskIsExpanded(!riskIsExpanded)}\n isExpanded={riskIsExpanded}\n style={\n {\n width: '140px'\n } as React.CSSProperties\n }\n >\n Risk\n {filters.risk.length > 0 && <Badge isRead>{filters.risk.length}</Badge>}\n </MenuToggle>\n )}\n onSelect={(event, selection) => onSelect('Risk', event, selection as string)}\n selected={filters.risk}\n isOpen={riskIsExpanded}\n onOpenChange={(isOpen) => setRiskIsExpanded(isOpen)}\n >\n {riskMenuItems}\n </Select>\n </ToolbarFilter>\n </ToolbarGroup>\n </Fragment>\n );\n\n const toolbarItems = (\n <Fragment>\n <ToolbarToggleGroup toggleIcon={<FilterIcon />} breakpoint=\"xl\">\n {toggleGroupItems}\n </ToolbarToggleGroup>\n <ToolbarGroup variant=\"action-group-plain\">\n <ToolbarItem>\n <Button variant=\"plain\" aria-label=\"edit\" icon={<EditIcon />} />\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"plain\" aria-label=\"clone\" icon={<CloneIcon />} />\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"plain\" aria-label=\"sync\" icon={<SyncIcon />} />\n </ToolbarItem>\n </ToolbarGroup>\n </Fragment>\n );\n\n const customLabelGroupContent = (\n <Fragment>\n <ToolbarItem>\n <Button variant=\"link\" onClick={() => {}} isInline>\n Save filters\n </Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"link\" onClick={() => onDelete('', '')} isInline>\n Clear all filters\n </Button>\n </ToolbarItem>\n </Fragment>\n );\n\n return (\n <Toolbar\n id=\"toolbar-with-custom-label-group\"\n className=\"pf-m-toggle-group-container\"\n collapseListedFiltersBreakpoint=\"xl\"\n customLabelGroupContent={customLabelGroupContent}\n >\n <ToolbarContent>{toolbarItems}</ToolbarContent>\n </Toolbar>\n );\n};\n","title":"With custom label group content","lang":"ts","className":""}}>
826
+
827
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
828
+ {`To customize the label groups generated by toolbar filters, use the `}
829
+
830
+ <code {...{"className":"ws-code "}}>
831
+ {`customLabelGroupContent`}
832
+ </code>
833
+ {` property on the `}
834
+
835
+ <code {...{"className":"ws-code "}}>
836
+ {`<Toolbar>`}
837
+ </code>
838
+ {`. This property will remove the default `}
839
+
840
+ <code {...{"className":"ws-code "}}>
841
+ {`clear all filters`}
842
+ </code>
843
+ {` button.`}
844
+ </p>
845
+ </Example>,
846
+ 'Stacked example': props =>
847
+ <Example {...pageData} {...props} {...{"code":"import { Fragment, useState } from 'react';\nimport {\n Button,\n ButtonVariant,\n Select,\n SelectList,\n SelectOption,\n Pagination,\n Dropdown,\n DropdownItem,\n DropdownList,\n Divider,\n MenuToggle,\n MenuToggleCheckbox,\n MenuToggleElement,\n OverflowMenu,\n OverflowMenuContent,\n OverflowMenuControl,\n OverflowMenuGroup,\n OverflowMenuItem,\n Toolbar,\n ToolbarContent,\n ToolbarToggleGroup,\n ToolbarItem\n} from '@patternfly/react-core';\nimport FilterIcon from '@patternfly/react-icons/dist/esm/icons/filter-icon';\nimport RhUiEllipsisVerticalFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-ellipsis-vertical-fill-icon';\n\nexport const ToolbarStacked: React.FunctionComponent = () => {\n // toggle group - three option menus with labels, two icon buttons, Kebab menu - right aligned\n // pagination - right aligned\n const resourceOptions = ['All resources', 'Deployment', 'Pod'];\n const statusOptions = ['New', 'Pending', 'Running', 'Cancelled'];\n\n const [kebabIsOpen, setKebabIsOpen] = useState(false);\n const [resourceIsExpanded, setResourceIsExpanded] = useState(false);\n const [resourceSelected, setResourceSelected] = useState('');\n const [statusIsExpanded, setStatusIsExpanded] = useState(false);\n const [statusSelected, setStatusSelected] = useState('');\n const [isSplitButtonDropdownOpen, setIsSplitButtonDropdownOpen] = useState(false);\n const [page, setPage] = useState(1);\n const [perPage, setPerPage] = useState(20);\n\n const onKebabToggle = () => {\n setKebabIsOpen(!kebabIsOpen);\n };\n\n const onResourceToggle = () => {\n setResourceIsExpanded(!resourceIsExpanded);\n };\n\n const onResourceSelect = (_event: React.ChangeEvent | React.MouseEvent, selection: string) => {\n setResourceSelected(selection);\n setResourceIsExpanded(false);\n };\n\n const onResourceSelectDropdown = () => {\n setResourceIsExpanded(false);\n };\n\n const onStatusToggle = () => {\n setStatusIsExpanded(!statusIsExpanded);\n };\n\n const onStatusSelect = (_event: React.ChangeEvent | React.MouseEvent, selection: string) => {\n setStatusSelected(selection);\n setStatusIsExpanded(false);\n };\n\n const onSetPage = (_event: React.MouseEvent | React.KeyboardEvent | MouseEvent, pageNumber: number) => {\n setPage(pageNumber);\n };\n\n const onPerPageSelect = (\n _event: React.MouseEvent | React.KeyboardEvent | MouseEvent,\n perPage: number,\n page: number\n ) => {\n setPage(page);\n setPerPage(perPage);\n };\n\n const onSplitButtonToggle = () => {\n setIsSplitButtonDropdownOpen(!isSplitButtonDropdownOpen);\n };\n\n const onSplitButtonSelect = () => {\n setIsSplitButtonDropdownOpen(!isSplitButtonDropdownOpen);\n };\n\n const dropdownItems = (\n <>\n <DropdownItem>Action</DropdownItem>\n <DropdownItem\n to=\"#default-link2\"\n // Prevent the default onClick functionality for example purposes\n onClick={(ev: any) => ev.preventDefault()}\n >\n Link\n </DropdownItem>\n <DropdownItem isDisabled>Disabled Action</DropdownItem>\n <DropdownItem isDisabled to=\"#default-link4\">\n Disabled Link\n </DropdownItem>\n </>\n );\n const splitButtonDropdownItems = (\n <>\n <DropdownItem value={0} key=\"action\">\n Action\n </DropdownItem>\n <DropdownItem\n value={1}\n key=\"link\"\n to=\"#default-link2\"\n // Prevent the default onClick functionality for example purposes\n onClick={(ev: any) => ev.preventDefault()}\n >\n Link\n </DropdownItem>\n <DropdownItem value={2} isDisabled key=\"disabled action\">\n Disabled Action\n </DropdownItem>\n <DropdownItem value={3} isDisabled key=\"disabled link\" to=\"#default-link4\">\n Disabled Link\n </DropdownItem>\n </>\n );\n\n const toggleGroupItems = (\n <Fragment>\n <ToolbarItem variant=\"label\" id=\"stacked-example-resource-select\">\n Resource\n </ToolbarItem>\n <ToolbarItem>\n <Select\n toggle={(toggleRef: React.Ref<MenuToggleElement>) => (\n <MenuToggle\n ref={toggleRef}\n onClick={() => onResourceToggle()}\n isExpanded={resourceIsExpanded}\n style={\n {\n width: '150px'\n } as React.CSSProperties\n }\n >\n {resourceSelected || 'Resource'}\n </MenuToggle>\n )}\n onSelect={onResourceSelect}\n selected={resourceSelected}\n onOpenChange={(isOpen) => setResourceIsExpanded(isOpen)}\n isOpen={resourceIsExpanded}\n aria-labelledby=\"stacked-example-resource-select\"\n >\n <SelectList>\n {resourceOptions.map((option, index) => (\n <SelectOption key={index} value={option}>\n {option}\n </SelectOption>\n ))}\n </SelectList>\n </Select>\n </ToolbarItem>\n <ToolbarItem variant=\"label\" id=\"stacked-example-status-select\">\n Status\n </ToolbarItem>\n <ToolbarItem>\n <Select\n toggle={(toggleRef: React.Ref<MenuToggleElement>) => (\n <MenuToggle\n ref={toggleRef}\n onClick={() => onStatusToggle()}\n isExpanded={statusIsExpanded}\n style={\n {\n width: '150px'\n } as React.CSSProperties\n }\n >\n {statusSelected || 'Status'}\n </MenuToggle>\n )}\n onSelect={onStatusSelect}\n onOpenChange={(isOpen) => setStatusIsExpanded(isOpen)}\n selected={statusSelected}\n isOpen={statusIsExpanded}\n >\n <SelectList>\n {statusOptions.map((option, index) => (\n <SelectOption key={index} value={option}>\n {option}\n </SelectOption>\n ))}\n </SelectList>\n </Select>\n </ToolbarItem>\n </Fragment>\n );\n\n const firstRowItems = (\n <Fragment>\n <Toolbar>\n <ToolbarContent>\n <ToolbarToggleGroup variant=\"label-group\" toggleIcon={<FilterIcon />} breakpoint=\"lg\">\n {toggleGroupItems}\n </ToolbarToggleGroup>\n <ToolbarItem>\n <OverflowMenu breakpoint=\"xl\">\n <OverflowMenuContent>\n <OverflowMenuGroup groupType=\"button\">\n <OverflowMenuItem>\n <Button variant={ButtonVariant.primary}>Primary</Button>\n </OverflowMenuItem>\n <OverflowMenuItem>\n <Button variant={ButtonVariant.secondary}>Secondary</Button>\n </OverflowMenuItem>\n </OverflowMenuGroup>\n </OverflowMenuContent>\n <OverflowMenuControl hasAdditionalOptions>\n <Dropdown\n onSelect={onResourceSelectDropdown}\n onOpenChange={(isOpen: boolean) => setKebabIsOpen(isOpen)}\n toggle={(toggleRef: React.Ref<MenuToggleElement>) => (\n <MenuToggle\n ref={toggleRef}\n aria-label=\"Kebab overflow menu\"\n variant=\"plain\"\n onClick={onKebabToggle}\n isExpanded={kebabIsOpen}\n icon={<RhUiEllipsisVerticalFillIcon />}\n />\n )}\n isOpen={kebabIsOpen}\n >\n <DropdownList>{dropdownItems}</DropdownList>\n </Dropdown>\n </OverflowMenuControl>\n </OverflowMenu>\n </ToolbarItem>\n </ToolbarContent>\n </Toolbar>\n </Fragment>\n );\n\n const secondRowItems = (\n <Fragment>\n <Toolbar>\n <ToolbarContent>\n <ToolbarItem>\n <Dropdown\n onSelect={onSplitButtonSelect}\n isOpen={isSplitButtonDropdownOpen}\n onOpenChange={(isOpen: boolean) => setIsSplitButtonDropdownOpen(isOpen)}\n toggle={(toggleRef: React.Ref<MenuToggleElement>) => (\n <MenuToggle\n ref={toggleRef}\n isExpanded={isSplitButtonDropdownOpen}\n onClick={onSplitButtonToggle}\n aria-label=\"Toolbar stacked example split toggle\"\n splitButtonItems={[\n <MenuToggleCheckbox\n key=\"toolbar-stacked-split-button-checkbox-1\"\n id=\"toolbar-stacked-split-button-checkbox-1\"\n aria-label=\"Select all\"\n />\n ]}\n />\n )}\n >\n <DropdownList>{splitButtonDropdownItems}</DropdownList>\n </Dropdown>\n </ToolbarItem>\n <ToolbarItem variant=\"pagination\" align={{ default: 'alignEnd' }}>\n <Pagination\n itemCount={37}\n perPage={perPage}\n page={page}\n onSetPage={onSetPage}\n widgetId=\"pagination-options-menu-top\"\n onPerPageSelect={onPerPageSelect}\n />\n </ToolbarItem>\n </ToolbarContent>\n </Toolbar>\n </Fragment>\n );\n\n return (\n <Fragment>\n {firstRowItems}\n <Divider />\n {secondRowItems}\n </Fragment>\n );\n};\n","title":"Stacked example","lang":"ts","className":""}}>
848
+
849
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
850
+ {`When all of a toolbar's required elements cannot fit in a single line, you can split toolbar items into multiple rows.`}
851
+ </p>
852
+ </Example>,
853
+ 'Toolbar content wrapping': props =>
854
+ <Example {...pageData} {...props} {...{"code":"import { Fragment, useState } from 'react';\nimport { Toolbar, ToolbarItem, ToolbarContent } from '@patternfly/react-core';\nimport { Button, SearchInput } from '@patternfly/react-core';\n\nexport const ToolbarItems = () => {\n const [searchValue, setSearchValue] = useState('');\n\n const items = (\n <Fragment>\n <ToolbarItem>\n <SearchInput\n aria-label=\"Items example search input\"\n value={searchValue}\n onChange={(_event, value) => setSearchValue(value)}\n onClear={() => setSearchValue('')}\n />\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Action</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Action</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Action</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Action</Button>\n </ToolbarItem>\n <ToolbarItem variant=\"separator\" />\n <ToolbarItem>\n <Button variant=\"primary\">Action</Button>\n </ToolbarItem>\n </Fragment>\n );\n\n return (\n <Toolbar id=\"toolbar-items-example\">\n <ToolbarContent rowWrap={{ default: 'nowrap' }}>{items}</ToolbarContent>\n </Toolbar>\n );\n};\n","title":"Toolbar content wrapping","lang":"ts","className":""}}>
855
+
856
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
857
+ {`The toolbar content section will wrap by default, but you can set the `}
858
+
859
+ <code {...{"className":"ws-code "}}>
860
+ {`rowRap`}
861
+ </code>
862
+ {` property to `}
863
+
864
+ <code {...{"className":"ws-code "}}>
865
+ {`noWrap`}
866
+ </code>
867
+ {` to make it not wrap.`}
868
+ </p>
869
+ </Example>,
870
+ 'Toolbar group spacers': props =>
871
+ <Example {...pageData} {...props} {...{"code":"import { Fragment } from 'react';\nimport { Toolbar, ToolbarItem, ToolbarGroup, ToolbarContent } from '@patternfly/react-core';\nimport { Button } from '@patternfly/react-core';\n\nexport const ToolbarGroupSpacers: React.FunctionComponent = () => {\n const groupGapItems = (\n <Fragment>\n <ToolbarGroup>\n <ToolbarItem>\n <Button variant=\"secondary\">Default Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Default Gap</Button>\n </ToolbarItem>\n </ToolbarGroup>\n <ToolbarItem variant=\"separator\"></ToolbarItem>\n <ToolbarGroup gap={{ default: 'gapNone' }}>\n <ToolbarItem>\n <Button variant=\"secondary\">No Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">No Gap</Button>\n </ToolbarItem>\n </ToolbarGroup>\n <ToolbarItem variant=\"separator\"></ToolbarItem>\n <ToolbarGroup gap={{ default: 'gapSm' }}>\n <ToolbarItem>\n <Button variant=\"secondary\">Small Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Small Gap</Button>\n </ToolbarItem>\n </ToolbarGroup>\n <ToolbarItem variant=\"separator\"></ToolbarItem>\n <ToolbarGroup gap={{ default: 'gapXl' }}>\n <ToolbarItem>\n <Button variant=\"secondary\">Extra Large Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Extra Large Gap</Button>\n </ToolbarItem>\n </ToolbarGroup>\n </Fragment>\n );\n\n const groupColumnGapItems = (\n <Fragment>\n <ToolbarGroup columnGap={{ default: 'columnGapNone' }}>\n <ToolbarItem>\n <Button variant=\"secondary\">No Column Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">No Column Gap</Button>\n </ToolbarItem>\n </ToolbarGroup>\n <ToolbarItem variant=\"separator\"></ToolbarItem>\n <ToolbarGroup columnGap={{ default: 'columnGapSm' }}>\n <ToolbarItem>\n <Button variant=\"secondary\">Small Column Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Small Column Gap</Button>\n </ToolbarItem>\n </ToolbarGroup>\n <ToolbarItem variant=\"separator\"></ToolbarItem>\n <ToolbarGroup columnGap={{ default: 'columnGapXl' }}>\n <ToolbarItem>\n <Button variant=\"secondary\">Extra Large Column Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Extra Large Column Gap</Button>\n </ToolbarItem>\n </ToolbarGroup>\n </Fragment>\n );\n\n const groupRowGapItems = (\n <Fragment>\n <ToolbarGroup rowGap={{ default: 'rowGapNone' }} rowWrap={{ default: 'wrap' }}>\n <ToolbarItem>\n <Button variant=\"secondary\">No Row Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">No Row Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">No Row Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">No Row Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">No Row Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">No Row Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">No Row Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">No Row Gap</Button>\n </ToolbarItem>\n <ToolbarItem variant=\"separator\"></ToolbarItem>\n </ToolbarGroup>\n <ToolbarGroup rowGap={{ default: 'rowGapSm' }} rowWrap={{ default: 'wrap' }}>\n <ToolbarItem>\n <Button variant=\"secondary\">Small Row Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Small Row Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Small Row Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Small Row Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Small Row Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Small Row Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Small Row Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Small Row Gap</Button>\n </ToolbarItem>\n <ToolbarItem variant=\"separator\"></ToolbarItem>\n </ToolbarGroup>\n <ToolbarGroup rowGap={{ default: 'rowGapXl' }} rowWrap={{ default: 'wrap' }}>\n <ToolbarItem>\n <Button variant=\"secondary\">Extra Large Row Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Extra Large Row Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Extra Large Row Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Extra Large Row Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Extra Large Row Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Extra Large Row Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Extra Large Row Gap</Button>\n </ToolbarItem>\n <ToolbarItem>\n <Button variant=\"secondary\">Extra Large Row Gap</Button>\n </ToolbarItem>\n </ToolbarGroup>\n </Fragment>\n );\n\n return (\n <>\n Using gap\n <br />\n <br />\n <Toolbar id=\"toolbar-spacers\">\n <ToolbarContent>{groupGapItems}</ToolbarContent>\n </Toolbar>\n Using column gap\n <br />\n <br />\n <Toolbar id=\"toolbar-spacers\">\n <ToolbarContent>{groupColumnGapItems}</ToolbarContent>\n </Toolbar>\n Using row gap\n <br />\n <br />\n <Toolbar id=\"toolbar-spacers\">\n <ToolbarContent>{groupRowGapItems}</ToolbarContent>\n </Toolbar>\n <br />\n </>\n );\n};\n","title":"Toolbar group spacers","lang":"ts","className":""}}>
872
+
873
+ </Example>,
874
+ 'Toolbar item spacers': props =>
875
+ <Example {...pageData} {...props} {...{"code":"import { Fragment } from 'react';\nimport { Toolbar, ToolbarItem, ToolbarGroup, ToolbarContent } from '@patternfly/react-core';\nimport { Button } from '@patternfly/react-core';\n\nexport const ToolbarItemSpacers: React.FunctionComponent = () => {\n const itemGapItems = (\n <Fragment>\n <ToolbarGroup rowWrap={{ default: 'wrap' }}>\n <ToolbarItem gap={{ default: 'gapNone' }}>\n <Button variant=\"secondary\">No Gap</Button>\n <Button variant=\"secondary\">No Gap</Button>\n </ToolbarItem>\n <ToolbarItem variant=\"separator\"></ToolbarItem>\n <ToolbarItem gap={{ default: 'gapSm' }}>\n <Button variant=\"secondary\">Small Gap</Button>\n <Button variant=\"secondary\">Small Gap</Button>\n </ToolbarItem>\n <ToolbarItem variant=\"separator\"></ToolbarItem>\n <ToolbarItem gap={{ default: 'gapXl' }}>\n <Button variant=\"secondary\">Extra Large Gap</Button>\n <Button variant=\"secondary\">Extra Large Gap</Button>\n </ToolbarItem>\n </ToolbarGroup>\n </Fragment>\n );\n\n const itemColumnGapItems = (\n <Fragment>\n <ToolbarGroup rowWrap={{ default: 'wrap' }}>\n <ToolbarItem columnGap={{ default: 'columnGapNone' }}>\n <Button variant=\"secondary\">No Column Gap</Button>\n <Button variant=\"secondary\">No Column Gap</Button>\n </ToolbarItem>\n <ToolbarItem variant=\"separator\"></ToolbarItem>\n <ToolbarItem columnGap={{ default: 'columnGapSm' }}>\n <Button variant=\"secondary\">Small Column Gap</Button>\n <Button variant=\"secondary\">Small Column Gap</Button>\n </ToolbarItem>\n <ToolbarItem variant=\"separator\"></ToolbarItem>\n <ToolbarItem columnGap={{ default: 'columnGapXl' }}>\n <Button variant=\"secondary\">Extra Large Column Gap</Button>\n <Button variant=\"secondary\">Extra Large Column Gap</Button>\n </ToolbarItem>\n </ToolbarGroup>\n </Fragment>\n );\n\n const itemRowGapItems = (\n <Fragment>\n <ToolbarGroup>\n <ToolbarItem rowGap={{ default: 'rowGapNone' }} rowWrap={{ default: 'wrap' }}>\n <Button variant=\"secondary\">No Row Gap</Button>\n <Button variant=\"secondary\">No Row Gap</Button>\n </ToolbarItem>\n <ToolbarItem variant=\"separator\"></ToolbarItem>\n <ToolbarItem rowGap={{ default: 'rowGapSm' }} rowWrap={{ default: 'wrap' }}>\n <Button variant=\"secondary\">Small Row Gap</Button>\n <Button variant=\"secondary\">Small Row Gap</Button>\n </ToolbarItem>\n <ToolbarItem variant=\"separator\"></ToolbarItem>\n <ToolbarItem rowGap={{ default: 'rowGapXl' }} rowWrap={{ default: 'wrap' }}>\n <Button variant=\"secondary\">Extra Large Row Gap</Button>\n <Button variant=\"secondary\">Extra Large Row Gap</Button>\n </ToolbarItem>\n </ToolbarGroup>\n </Fragment>\n );\n\n return (\n <>\n Using gap\n <br />\n <br />\n <Toolbar id=\"toolbar-spacers\">\n <ToolbarContent>{itemGapItems}</ToolbarContent>\n </Toolbar>\n Using column gap\n <br />\n <br />\n <Toolbar id=\"toolbar-spacers\">\n <ToolbarContent>{itemColumnGapItems}</ToolbarContent>\n </Toolbar>\n Using row gap\n <br />\n <br />\n <Toolbar id=\"toolbar-spacers\">\n <ToolbarContent>{itemRowGapItems}</ToolbarContent>\n </Toolbar>\n </>\n );\n};\n","title":"Toolbar item spacers","lang":"ts","className":""}}>
876
+
877
+ </Example>
878
+ };
879
+
880
+ const Component = () => (
881
+ <React.Fragment>
882
+ <AutoLinkHeader {...{"id":"examples","headingLevel":"h2","className":"ws-title ws-h2"}}>
883
+ {`Examples`}
884
+ </AutoLinkHeader>
885
+ {React.createElement(pageData.examples["Toolbar items"])}
886
+ {React.createElement(pageData.examples["With adjusted inset"])}
887
+ {React.createElement(pageData.examples["Vertical toolbar"])}
888
+ {React.createElement(pageData.examples["Sticky toolbar"])}
889
+ {React.createElement(pageData.examples["Dynamic sticky toolbar"])}
890
+ {React.createElement(pageData.examples["With groups of items"])}
891
+ {React.createElement(pageData.examples["Background color variants"])}
892
+ <AutoLinkHeader {...{"id":"examples-with-toggle-groups-and-filters","headingLevel":"h2","className":"ws-title ws-h2"}}>
893
+ {`Examples with toggle groups and filters`}
894
+ </AutoLinkHeader>
895
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
896
+ {`The following examples use toggle groups to allow for more responsive and complex toolbars with multiple items and groups of items. To visualize responsive toolbar behavior in the following examples, resize the browser to a smaller screen width.`}
897
+ </p>
898
+ {React.createElement(pageData.examples["Component managed toggle groups"])}
899
+ {React.createElement(pageData.examples["Consumer managed toggle groups"])}
900
+ {React.createElement(pageData.examples["With filters"])}
901
+ {React.createElement(pageData.examples["With custom label group content"])}
902
+ {React.createElement(pageData.examples["Stacked example"])}
903
+ <AutoLinkHeader {...{"id":"examples-with-spacers-and-wrapping","headingLevel":"h2","className":"ws-title ws-h2"}}>
904
+ {`Examples with spacers and wrapping`}
905
+ </AutoLinkHeader>
906
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
907
+ {`You may adjust the space between toolbar items to arrange them into groups. Read our spacers documentation to learn more about using spacers.`}
908
+ </p>
909
+ <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
910
+ {`Items are spaced “16px” apart by default and can be modified by changing their or their parents' `}
911
+ <code {...{"className":"ws-code "}}>
912
+ {`gap`}
913
+ </code>
914
+ {`, `}
915
+ <code {...{"className":"ws-code "}}>
916
+ {`columnGap`}
917
+ </code>
918
+ {`, and `}
919
+ <code {...{"className":"ws-code "}}>
920
+ {`rowGap`}
921
+ </code>
922
+ {` properties. You can set the property values at multiple breakpoints, including "default", "md", "lg", "xl", and "2xl".`}
923
+ </p>
924
+ {React.createElement(pageData.examples["Toolbar content wrapping"])}
925
+ {React.createElement(pageData.examples["Toolbar group spacers"])}
926
+ {React.createElement(pageData.examples["Toolbar item spacers"])}
927
+ </React.Fragment>
928
+ );
929
+ Component.displayName = 'ComponentsToolbarReactDocs';
930
+ Component.pageData = pageData;
931
+
932
+ export default Component;