@patternfly/react-core 4.202.24 → 4.202.27

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 (36) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/esm/components/Select/Select.d.ts +2 -0
  3. package/dist/esm/components/Select/Select.d.ts.map +1 -1
  4. package/dist/esm/components/Select/Select.js +3 -3
  5. package/dist/esm/components/Select/Select.js.map +1 -1
  6. package/dist/esm/components/Select/SelectToggle.d.ts +2 -0
  7. package/dist/esm/components/Select/SelectToggle.d.ts.map +1 -1
  8. package/dist/esm/components/Select/SelectToggle.js +3 -3
  9. package/dist/esm/components/Select/SelectToggle.js.map +1 -1
  10. package/dist/js/components/Select/Select.d.ts +2 -0
  11. package/dist/js/components/Select/Select.d.ts.map +1 -1
  12. package/dist/js/components/Select/Select.js +3 -3
  13. package/dist/js/components/Select/Select.js.map +1 -1
  14. package/dist/js/components/Select/SelectToggle.d.ts +2 -0
  15. package/dist/js/components/Select/SelectToggle.d.ts.map +1 -1
  16. package/dist/js/components/Select/SelectToggle.js +3 -3
  17. package/dist/js/components/Select/SelectToggle.js.map +1 -1
  18. package/dist/styles/base.css +5 -0
  19. package/dist/umd/react-core.css +4 -4
  20. package/dist/umd/react-core.js +6 -6
  21. package/dist/umd/react-core.min.css +4 -4
  22. package/dist/umd/react-core.min.js +1 -1
  23. package/package.json +6 -6
  24. package/src/components/DataList/examples/DataList.md +10 -1193
  25. package/src/components/DataList/examples/DataListActions.tsx +100 -0
  26. package/src/components/DataList/examples/DataListBasic.tsx +33 -0
  27. package/src/components/DataList/examples/DataListCheckboxes.tsx +200 -0
  28. package/src/components/DataList/examples/DataListCompact.tsx +33 -0
  29. package/src/components/DataList/examples/DataListControllingText.tsx +29 -0
  30. package/src/components/DataList/examples/DataListDraggable.tsx +98 -0
  31. package/src/components/DataList/examples/DataListExpandable.tsx +261 -0
  32. package/src/components/DataList/examples/DataListSelectableRows.tsx +120 -0
  33. package/src/components/DataList/examples/DataListSmGridBreakpoint.tsx +22 -0
  34. package/src/components/DataList/examples/DataListWidthModifiers.tsx +204 -0
  35. package/src/components/Select/Select.tsx +4 -0
  36. package/src/components/Select/SelectToggle.tsx +5 -0
@@ -0,0 +1,261 @@
1
+ import React from 'react';
2
+ import {
3
+ Button,
4
+ DataList,
5
+ DataListItem,
6
+ DataListItemRow,
7
+ DataListCell,
8
+ DataListAction,
9
+ DataListToggle,
10
+ DataListContent,
11
+ DataListItemCells,
12
+ Dropdown,
13
+ DropdownItem,
14
+ DropdownPosition,
15
+ KebabToggle
16
+ } from '@patternfly/react-core';
17
+ import CodeBranchIcon from '@patternfly/react-icons/dist/esm/icons/code-branch-icon';
18
+ import AngleDownIcon from '@patternfly/react-icons/dist/esm/icons/angle-down-icon';
19
+ import AngleRightIcon from '@patternfly/react-icons/dist/esm/icons/angle-right-icon';
20
+
21
+ export const DataListExpandable: React.FunctionComponent = () => {
22
+ const [isOpen1, setIsOpen1] = React.useState(false);
23
+ const [isOpen2, setIsOpen2] = React.useState(false);
24
+ const [isOpen3, setIsOpen3] = React.useState(false);
25
+ const [allExpanded, setAllExpanded] = React.useState(false);
26
+ const [expanded, setExpanded] = React.useState(['ex-toggle1', 'ex-toggle3']);
27
+
28
+ const onToggleAll = () => {
29
+ setAllExpanded(!allExpanded);
30
+ };
31
+
32
+ React.useEffect(() => {
33
+ if (allExpanded) {
34
+ setExpanded(['ex-toggle1', 'ex-toggle2', 'ex-toggle3']);
35
+ } else {
36
+ setExpanded([]);
37
+ }
38
+ }, [allExpanded]);
39
+
40
+ const onToggle1 = isOpen1 => {
41
+ setIsOpen1(isOpen1);
42
+ };
43
+
44
+ const onSelect1 = () => {
45
+ setIsOpen1(!isOpen1);
46
+ };
47
+
48
+ const onToggle2 = isOpen2 => {
49
+ setIsOpen2(isOpen2);
50
+ };
51
+
52
+ const onSelect2 = () => {
53
+ setIsOpen2(!isOpen2);
54
+ };
55
+ const onToggle3 = isOpen3 => {
56
+ setIsOpen3(isOpen3);
57
+ };
58
+
59
+ const onSelect3 = () => {
60
+ setIsOpen3(!isOpen3);
61
+ };
62
+
63
+ const toggle = id => {
64
+ const index = expanded.indexOf(id);
65
+ const newExpanded =
66
+ index >= 0 ? [...expanded.slice(0, index), ...expanded.slice(index + 1, expanded.length)] : [...expanded, id];
67
+ setExpanded(newExpanded);
68
+ };
69
+ return (
70
+ <React.Fragment>
71
+ <Button onClick={onToggleAll}>
72
+ {allExpanded && <AngleDownIcon />}
73
+ {!allExpanded && <AngleRightIcon />}
74
+ Expand/Collapse All
75
+ </Button>
76
+ <br />
77
+ <br />
78
+ <DataList aria-label="Expandable data list example">
79
+ <DataListItem aria-labelledby="ex-item1" isExpanded={expanded.includes('ex-toggle1')}>
80
+ <DataListItemRow>
81
+ <DataListToggle
82
+ onClick={() => toggle('ex-toggle1')}
83
+ isExpanded={expanded.includes('ex-toggle1')}
84
+ id="ex-toggle1"
85
+ aria-controls="ex-expand1"
86
+ />
87
+ <DataListItemCells
88
+ dataListCells={[
89
+ <DataListCell isIcon key="icon">
90
+ <CodeBranchIcon />
91
+ </DataListCell>,
92
+ <DataListCell key="primary content">
93
+ <div id="ex-item1">Primary content</div>
94
+ <span>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</span>
95
+ <a href="#">link</a>
96
+ </DataListCell>,
97
+ <DataListCell key="secondary content">
98
+ <span>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</span>
99
+ </DataListCell>,
100
+ <DataListCell key="secondary content 2">
101
+ <span>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</span>
102
+ </DataListCell>
103
+ ]}
104
+ />
105
+ <DataListAction
106
+ aria-labelledby="ex-item1 ex-action1"
107
+ id="ex-action1"
108
+ aria-label="Actions"
109
+ isPlainButtonAction
110
+ >
111
+ <Dropdown
112
+ isPlain
113
+ position={DropdownPosition.right}
114
+ isOpen={isOpen1}
115
+ onSelect={onSelect1}
116
+ toggle={<KebabToggle onToggle={onToggle1} />}
117
+ dropdownItems={[
118
+ <DropdownItem key="link">Link</DropdownItem>,
119
+ <DropdownItem key="action" component="button">
120
+ Action
121
+ </DropdownItem>,
122
+ <DropdownItem key="disabled link" isDisabled>
123
+ Disabled Link
124
+ </DropdownItem>
125
+ ]}
126
+ />
127
+ </DataListAction>
128
+ </DataListItemRow>
129
+ <DataListContent
130
+ aria-label="Primary Content Details"
131
+ id="ex-expand1"
132
+ isHidden={!expanded.includes('ex-toggle1')}
133
+ >
134
+ <p>
135
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et
136
+ dolore magna aliqua.
137
+ </p>
138
+ </DataListContent>
139
+ </DataListItem>
140
+ <DataListItem aria-labelledby="ex-item2" isExpanded={expanded.includes('ex-toggle2')}>
141
+ <DataListItemRow>
142
+ <DataListToggle
143
+ onClick={() => toggle('ex-toggle2')}
144
+ isExpanded={expanded.includes('ex-toggle2')}
145
+ id="ex-toggle2"
146
+ aria-controls="ex-expand2"
147
+ />
148
+ <DataListItemCells
149
+ dataListCells={[
150
+ <DataListCell isIcon key="icon">
151
+ <CodeBranchIcon />
152
+ </DataListCell>,
153
+ <DataListCell key="secondary content">
154
+ <div id="ex-item2">Secondary content</div>
155
+ <span>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</span>
156
+ </DataListCell>,
157
+ <DataListCell key="secondary content 2">
158
+ <span>Lorem ipsum dolor sit amet.</span>
159
+ </DataListCell>,
160
+ <DataListCell key="secondary content3">
161
+ <span>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</span>
162
+ </DataListCell>
163
+ ]}
164
+ />
165
+ <DataListAction
166
+ aria-labelledby="ex-item2 ex-action2"
167
+ id="ex-action2"
168
+ aria-label="Actions"
169
+ isPlainButtonAction
170
+ >
171
+ <Dropdown
172
+ isPlain
173
+ position={DropdownPosition.right}
174
+ isOpen={isOpen2}
175
+ onSelect={onSelect2}
176
+ toggle={<KebabToggle onToggle={onToggle2} />}
177
+ dropdownItems={[
178
+ <DropdownItem key="link">Link</DropdownItem>,
179
+ <DropdownItem key="action" component="button">
180
+ Action
181
+ </DropdownItem>,
182
+ <DropdownItem key="disabled link" isDisabled>
183
+ Disabled Link
184
+ </DropdownItem>
185
+ ]}
186
+ />
187
+ </DataListAction>
188
+ </DataListItemRow>
189
+ <DataListContent
190
+ aria-label="Primary Content Details"
191
+ id="ex-expand2"
192
+ isHidden={!expanded.includes('ex-toggle2')}
193
+ >
194
+ <p>
195
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et
196
+ dolore magna aliqua.
197
+ </p>
198
+ </DataListContent>
199
+ </DataListItem>
200
+ <DataListItem aria-labelledby="ex-item3" isExpanded={expanded.includes('ex-toggle3')}>
201
+ <DataListItemRow>
202
+ <DataListToggle
203
+ onClick={() => toggle('ex-toggle3')}
204
+ isExpanded={expanded.includes('ex-toggle3')}
205
+ id="ex-toggle3"
206
+ aria-controls="ex-expand3"
207
+ />
208
+ <DataListItemCells
209
+ dataListCells={[
210
+ <DataListCell isIcon key="icon">
211
+ <CodeBranchIcon />
212
+ </DataListCell>,
213
+ <DataListCell key="tertiary content">
214
+ <div id="ex-item3">Tertiary content</div>
215
+ <span>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</span>
216
+ </DataListCell>,
217
+ <DataListCell key="secondary content">
218
+ <span>Lorem ipsum dolor sit amet.</span>
219
+ </DataListCell>,
220
+ <DataListCell key="secondary content 2">
221
+ <span>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</span>
222
+ </DataListCell>
223
+ ]}
224
+ />
225
+ <DataListAction
226
+ aria-labelledby="ex-item3 ex-action3"
227
+ id="ex-action3"
228
+ aria-label="Actions"
229
+ isPlainButtonAction
230
+ >
231
+ <Dropdown
232
+ isPlain
233
+ position={DropdownPosition.right}
234
+ isOpen={isOpen3}
235
+ onSelect={onSelect3}
236
+ toggle={<KebabToggle onToggle={onToggle3} />}
237
+ dropdownItems={[
238
+ <DropdownItem key="link">Link</DropdownItem>,
239
+ <DropdownItem key="action" component="button">
240
+ Action
241
+ </DropdownItem>,
242
+ <DropdownItem key="disabled link" isDisabled>
243
+ Disabled Link
244
+ </DropdownItem>
245
+ ]}
246
+ />
247
+ </DataListAction>
248
+ </DataListItemRow>
249
+ <DataListContent
250
+ aria-label="Primary Content Details"
251
+ id="ex-expand3"
252
+ isHidden={!expanded.includes('ex-toggle3')}
253
+ hasNoPadding
254
+ >
255
+ This expanded section has no padding.
256
+ </DataListContent>
257
+ </DataListItem>
258
+ </DataList>
259
+ </React.Fragment>
260
+ );
261
+ };
@@ -0,0 +1,120 @@
1
+ import React from 'react';
2
+ import {
3
+ Dropdown,
4
+ DropdownItem,
5
+ DropdownPosition,
6
+ KebabToggle,
7
+ DataList,
8
+ DataListItem,
9
+ DataListCell,
10
+ DataListItemRow,
11
+ DataListItemCells,
12
+ DataListAction
13
+ } from '@patternfly/react-core';
14
+
15
+ export const DataListSelectableRows: React.FunctionComponent = () => {
16
+ const [isOpen1, setIsOpen1] = React.useState(false);
17
+ const [isOpen2, setIsOpen2] = React.useState(false);
18
+ const [selectedDataListItemId, setSelectedDataListItemId] = React.useState('');
19
+
20
+ const onToggle1 = isOpen1 => {
21
+ setIsOpen1(isOpen1);
22
+ };
23
+
24
+ const onSelect1 = () => {
25
+ setIsOpen1(!isOpen1);
26
+ };
27
+
28
+ const onToggle2 = isOpen2 => {
29
+ setIsOpen2(isOpen2);
30
+ };
31
+
32
+ const onSelect2 = () => {
33
+ setIsOpen2(!isOpen2);
34
+ };
35
+
36
+ const onSelectDataListItem = id => {
37
+ setSelectedDataListItemId(id);
38
+ };
39
+
40
+ return (
41
+ <React.Fragment>
42
+ <DataList
43
+ aria-label="selectable data list example"
44
+ selectedDataListItemId={selectedDataListItemId}
45
+ onSelectDataListItem={onSelectDataListItem}
46
+ >
47
+ <DataListItem aria-labelledby="selectable-action-item1" id="item1">
48
+ <DataListItemRow>
49
+ <DataListItemCells
50
+ dataListCells={[
51
+ <DataListCell key="primary content">
52
+ <span id="selectable-action-item1">Single actionable Primary content</span>
53
+ </DataListCell>,
54
+ <DataListCell key="secondary content">Single actionable Secondary content</DataListCell>
55
+ ]}
56
+ />
57
+ <DataListAction
58
+ aria-labelledby="selectable-action-item1 selectable-action-action1"
59
+ id="selectable-action-action1"
60
+ aria-label="Actions"
61
+ isPlainButtonAction
62
+ >
63
+ <Dropdown
64
+ isPlain
65
+ position={DropdownPosition.right}
66
+ isOpen={isOpen1}
67
+ onSelect={onSelect1}
68
+ toggle={<KebabToggle onToggle={onToggle1} />}
69
+ dropdownItems={[
70
+ <DropdownItem key="link">Link</DropdownItem>,
71
+ <DropdownItem key="action" component="button">
72
+ Action
73
+ </DropdownItem>,
74
+ <DropdownItem key="disabled link" isDisabled>
75
+ Disabled Link
76
+ </DropdownItem>
77
+ ]}
78
+ />
79
+ </DataListAction>
80
+ </DataListItemRow>
81
+ </DataListItem>
82
+ <DataListItem aria-labelledby="selectable-actions-item2" id="item2">
83
+ <DataListItemRow>
84
+ <DataListItemCells
85
+ dataListCells={[
86
+ <DataListCell key="primary content">
87
+ <span id="selectable-actions-item2">Selectable actions Primary content</span>
88
+ </DataListCell>,
89
+ <DataListCell key="secondary content">Selectable actions Secondary content</DataListCell>
90
+ ]}
91
+ />
92
+ <DataListAction
93
+ aria-labelledby="selectable-actions-item2 selectable-actions-action2"
94
+ id="selectable-actions-action2"
95
+ aria-label="Actions"
96
+ isPlainButtonAction
97
+ >
98
+ <Dropdown
99
+ isPlain
100
+ position={DropdownPosition.right}
101
+ isOpen={isOpen2}
102
+ onSelect={onSelect2}
103
+ toggle={<KebabToggle onToggle={onToggle2} />}
104
+ dropdownItems={[
105
+ <DropdownItem key="link">Link</DropdownItem>,
106
+ <DropdownItem key="action" component="button">
107
+ Action
108
+ </DropdownItem>,
109
+ <DropdownItem key="disabled link" isDisabled>
110
+ Disabled Link
111
+ </DropdownItem>
112
+ ]}
113
+ />
114
+ </DataListAction>
115
+ </DataListItemRow>
116
+ </DataListItem>
117
+ </DataList>
118
+ </React.Fragment>
119
+ );
120
+ };
@@ -0,0 +1,22 @@
1
+ import React from 'react';
2
+ import { DataList, DataListItem, DataListItemRow, DataListItemCells, DataListCell } from '@patternfly/react-core';
3
+
4
+ export const DataListSmGridBreakpoint: React.FunctionComponent = () => (
5
+ <DataList aria-label="Simple data list example" gridBreakpoint="sm">
6
+ <DataListItem aria-labelledby="simple-item1">
7
+ <DataListItemRow>
8
+ <DataListItemCells
9
+ dataListCells={[
10
+ <DataListCell key="primary content">
11
+ <span id="simple-item1">Primary content</span>
12
+ </DataListCell>,
13
+ <DataListCell key="secondary content">
14
+ Really really really really really really really really really really really really really really long
15
+ description that should be truncated before it ends
16
+ </DataListCell>
17
+ ]}
18
+ />
19
+ </DataListItemRow>
20
+ </DataListItem>
21
+ </DataList>
22
+ );
@@ -0,0 +1,204 @@
1
+ import React from 'react';
2
+ import {
3
+ DataList,
4
+ DataListItem,
5
+ DataListCell,
6
+ DataListCheck,
7
+ DataListAction,
8
+ DataListToggle,
9
+ DataListContent,
10
+ DataListItemCells,
11
+ DataListItemRow,
12
+ Dropdown,
13
+ DropdownItem,
14
+ KebabToggle,
15
+ DropdownPosition,
16
+ Text,
17
+ TextVariants,
18
+ TextContent
19
+ } from '@patternfly/react-core';
20
+
21
+ export const DataListWidthModifiers: React.FunctionComponent = () => {
22
+ const [show, setShow] = React.useState(true);
23
+ const [isOpen1, setIsOpen1] = React.useState(false);
24
+ const [isOpen2, setIsOpen2] = React.useState(false);
25
+
26
+ const onToggle1 = isOpen1 => {
27
+ setIsOpen1(isOpen1);
28
+ };
29
+
30
+ const onSelect1 = () => {
31
+ setIsOpen1(!isOpen1);
32
+ };
33
+
34
+ const onToggle2 = isOpen2 => {
35
+ setIsOpen2(isOpen2);
36
+ };
37
+
38
+ const onSelect2 = () => {
39
+ setIsOpen2(!isOpen2);
40
+ };
41
+
42
+ const previewPlaceholder = {
43
+ display: 'block',
44
+ width: '100%',
45
+ padding: '.25rem .5rem',
46
+ color: '#004e8a',
47
+ backgroundColor: '#def3ff',
48
+ border: '1px solid rgba(0,0,0,.1)',
49
+ borderRadius: '4px'
50
+ };
51
+
52
+ return (
53
+ <>
54
+ <div key="example-1">
55
+ <TextContent>
56
+ <Text component={TextVariants.h4}>Default fitting - example 1</Text>
57
+ </TextContent>
58
+ <DataList aria-label="Width modifier data list example 1">
59
+ <DataListItem aria-labelledby="width-ex1-item1">
60
+ <DataListItemRow>
61
+ <DataListCheck aria-labelledby="width-ex1-item1" name="width-ex1-item1" />
62
+ <DataListItemCells
63
+ dataListCells={[
64
+ <DataListCell key="default">
65
+ <div style={previewPlaceholder}>
66
+ <b id="width-ex1-item1">default</b>
67
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
68
+ </div>
69
+ </DataListCell>,
70
+ <DataListCell key="default2">
71
+ <div style={previewPlaceholder}>
72
+ <b>default</b>
73
+ <p>
74
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut
75
+ labore et dolore magna aliqua.
76
+ </p>
77
+ </div>
78
+ </DataListCell>
79
+ ]}
80
+ />
81
+ </DataListItemRow>
82
+ </DataListItem>
83
+ </DataList>
84
+ </div>
85
+ <div key="example-2">
86
+ <TextContent>
87
+ <Text component={TextVariants.h4}>Flex modifiers - example 2</Text>
88
+ </TextContent>
89
+ <DataList aria-label="Width modifier data list example 2">
90
+ <DataListItem aria-labelledby="width-ex2-item1">
91
+ <DataListItemRow>
92
+ <DataListCheck aria-labelledby="width-ex2-item1" name="width-ex2-item1" />
93
+ <DataListItemCells
94
+ dataListCells={[
95
+ <DataListCell width={2} key="width 2">
96
+ <div style={previewPlaceholder}>
97
+ <b id="width-ex2-item1">width 2</b>
98
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt.</p>
99
+ </div>
100
+ </DataListCell>,
101
+ <DataListCell width={4} key="width 4">
102
+ <div style={previewPlaceholder}>
103
+ <b>width 4</b>
104
+ <p>Lorem ipsum dolor sit amet.</p>
105
+ </div>
106
+ </DataListCell>
107
+ ]}
108
+ />
109
+ <DataListAction
110
+ aria-labelledby="width-ex2-item1 width-ex2-action1"
111
+ id="width-ex2-action1"
112
+ aria-label="Actions"
113
+ isPlainButtonAction
114
+ >
115
+ <Dropdown
116
+ isPlain
117
+ position={DropdownPosition.right}
118
+ isOpen={isOpen1}
119
+ onSelect={onSelect1}
120
+ toggle={<KebabToggle onToggle={onToggle1} />}
121
+ dropdownItems={[
122
+ <DropdownItem key="link">Link</DropdownItem>,
123
+ <DropdownItem key="action" component="button">
124
+ Action
125
+ </DropdownItem>,
126
+ <DropdownItem key="disabled link" isDisabled>
127
+ Disabled Link
128
+ </DropdownItem>
129
+ ]}
130
+ />
131
+ </DataListAction>
132
+ </DataListItemRow>
133
+ </DataListItem>
134
+ </DataList>
135
+ </div>
136
+ <div key="example-3">
137
+ <TextContent>
138
+ <Text component={TextVariants.h4}>Flex modifiers - example 3</Text>
139
+ </TextContent>
140
+ <DataList aria-label="Width modifier data list example 3">
141
+ <DataListItem aria-labelledby="width-ex3-item1" isExpanded={show}>
142
+ <DataListItemRow>
143
+ <DataListToggle
144
+ isExpanded={show}
145
+ id="width-ex3-toggle1"
146
+ aria-controls="width-ex3-expand1"
147
+ onClick={() => setShow(!show)}
148
+ />
149
+ <DataListCheck aria-labelledby="width-ex3-item1" name="width-ex3-item1" />
150
+ <DataListItemCells
151
+ dataListCells={[
152
+ <DataListCell width={5} key="width 5">
153
+ <div style={previewPlaceholder}>
154
+ <b id="width-ex3-item1">width 5</b>
155
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
156
+ </div>
157
+ </DataListCell>,
158
+ <DataListCell width={2} key="width 2">
159
+ <div style={previewPlaceholder}>
160
+ <b>width 2</b>
161
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
162
+ </div>
163
+ </DataListCell>,
164
+ <DataListCell key="default">
165
+ <div style={previewPlaceholder}>default</div>
166
+ </DataListCell>
167
+ ]}
168
+ />
169
+ <DataListAction
170
+ aria-labelledby="width-ex3-item1 width-ex3-action1"
171
+ id="width-ex3-action1"
172
+ aria-label="Actions"
173
+ isPlainButtonAction
174
+ >
175
+ <Dropdown
176
+ isPlain
177
+ position={DropdownPosition.right}
178
+ isOpen={isOpen2}
179
+ onSelect={onSelect2}
180
+ toggle={<KebabToggle onToggle={onToggle2} />}
181
+ dropdownItems={[
182
+ <DropdownItem key="link">Link</DropdownItem>,
183
+ <DropdownItem key="action" component="button">
184
+ Action
185
+ </DropdownItem>,
186
+ <DropdownItem key="disabled link" isDisabled>
187
+ Disabled Link
188
+ </DropdownItem>
189
+ ]}
190
+ />
191
+ </DataListAction>
192
+ </DataListItemRow>
193
+ <DataListContent aria-label="Primary Content Details" id="width-ex3-expand1" isHidden={!show}>
194
+ <p>
195
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et
196
+ dolore magna aliqua.
197
+ </p>
198
+ </DataListContent>
199
+ </DataListItem>
200
+ </DataList>
201
+ </div>
202
+ </>
203
+ );
204
+ };
@@ -123,6 +123,8 @@ export interface SelectProps
123
123
  ) => void;
124
124
  /** Callback for toggle button behavior */
125
125
  onToggle: (isExpanded: boolean, event: React.MouseEvent | React.ChangeEvent | React.KeyboardEvent | Event) => void;
126
+ /** Callback for toggle blur */
127
+ onBlur?: (event?: any) => void;
126
128
  /** Callback for typeahead clear button */
127
129
  onClear?: (event: React.MouseEvent) => void;
128
130
  /** Optional callback for custom filtering */
@@ -917,6 +919,7 @@ export class Select extends React.Component<SelectProps & OUIAProps, SelectState
917
919
  direction,
918
920
  onSelect,
919
921
  onClear,
922
+ onBlur,
920
923
  toggleId,
921
924
  isOpen,
922
925
  isGrouped,
@@ -1263,6 +1266,7 @@ export class Select extends React.Component<SelectProps & OUIAProps, SelectState
1263
1266
  onToggle={this.onToggle}
1264
1267
  onEnter={this.onEnter}
1265
1268
  onClose={this.onClose}
1269
+ onBlur={onBlur}
1266
1270
  variant={variant}
1267
1271
  aria-labelledby={`${ariaLabelledBy || ''} ${selectToggleId}`}
1268
1272
  aria-label={toggleAriaLabel}
@@ -23,6 +23,8 @@ export interface SelectToggleProps extends React.HTMLProps<HTMLElement> {
23
23
  onEnter?: () => void;
24
24
  /** Callback for toggle close */
25
25
  onClose?: () => void;
26
+ /** Callback for toggle blur */
27
+ onBlur?: (event?: any) => void;
26
28
  /** @hide Internal callback for toggle keyboard navigation */
27
29
  handleTypeaheadKeys?: (position: string, shiftKey?: boolean) => void;
28
30
  /** @hide Internal callback to move focus to last menu item */
@@ -247,6 +249,7 @@ export class SelectToggle extends React.Component<SelectToggleProps> {
247
249
  onToggle,
248
250
  onEnter,
249
251
  onClose,
252
+ onBlur,
250
253
  onClickTypeaheadToggleButton,
251
254
  handleTypeaheadKeys,
252
255
  moveFocusToLastMenuItem,
@@ -292,6 +295,7 @@ export class SelectToggle extends React.Component<SelectToggleProps> {
292
295
  className
293
296
  )}
294
297
  aria-label={ariaLabel}
298
+ onBlur={onBlur}
295
299
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
296
300
  onClick={event => {
297
301
  onToggle(!isOpen, event);
@@ -320,6 +324,7 @@ export class SelectToggle extends React.Component<SelectToggleProps> {
320
324
  isTypeahead && styles.modifiers.typeahead,
321
325
  className
322
326
  )}
327
+ onBlur={onBlur}
323
328
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
324
329
  onClick={event => {
325
330
  if (!isDisabled) {