@patternfly/react-core 4.258.7 → 4.259.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/esm/components/ApplicationLauncher/ApplicationLauncher.d.ts +2 -0
  3. package/dist/esm/components/ApplicationLauncher/ApplicationLauncher.d.ts.map +1 -1
  4. package/dist/esm/components/ApplicationLauncher/ApplicationLauncher.js +2 -2
  5. package/dist/esm/components/ApplicationLauncher/ApplicationLauncher.js.map +1 -1
  6. package/dist/esm/components/ContextSelector/ContextSelector.d.ts +2 -0
  7. package/dist/esm/components/ContextSelector/ContextSelector.d.ts.map +1 -1
  8. package/dist/esm/components/ContextSelector/ContextSelector.js +4 -3
  9. package/dist/esm/components/ContextSelector/ContextSelector.js.map +1 -1
  10. package/dist/esm/components/Dropdown/Dropdown.d.ts +2 -0
  11. package/dist/esm/components/Dropdown/Dropdown.d.ts.map +1 -1
  12. package/dist/esm/components/Dropdown/Dropdown.js +2 -2
  13. package/dist/esm/components/Dropdown/Dropdown.js.map +1 -1
  14. package/dist/esm/components/Dropdown/DropdownWithContext.d.ts.map +1 -1
  15. package/dist/esm/components/Dropdown/DropdownWithContext.js +2 -2
  16. package/dist/esm/components/Dropdown/DropdownWithContext.js.map +1 -1
  17. package/dist/esm/components/Nav/NavItem.d.ts +2 -0
  18. package/dist/esm/components/Nav/NavItem.d.ts.map +1 -1
  19. package/dist/esm/components/Nav/NavItem.js +2 -2
  20. package/dist/esm/components/Nav/NavItem.js.map +1 -1
  21. package/dist/esm/components/OptionsMenu/OptionsMenu.d.ts +2 -0
  22. package/dist/esm/components/OptionsMenu/OptionsMenu.d.ts.map +1 -1
  23. package/dist/esm/components/OptionsMenu/OptionsMenu.js +2 -2
  24. package/dist/esm/components/OptionsMenu/OptionsMenu.js.map +1 -1
  25. package/dist/esm/components/SearchInput/SearchInput.d.ts +2 -0
  26. package/dist/esm/components/SearchInput/SearchInput.d.ts.map +1 -1
  27. package/dist/esm/components/SearchInput/SearchInput.js +2 -2
  28. package/dist/esm/components/SearchInput/SearchInput.js.map +1 -1
  29. package/dist/esm/components/Select/Select.d.ts +2 -0
  30. package/dist/esm/components/Select/Select.d.ts.map +1 -1
  31. package/dist/esm/components/Select/Select.js +4 -3
  32. package/dist/esm/components/Select/Select.js.map +1 -1
  33. package/dist/esm/components/Tabs/OverflowTab.d.ts +2 -0
  34. package/dist/esm/components/Tabs/OverflowTab.d.ts.map +1 -1
  35. package/dist/esm/components/Tabs/OverflowTab.js +2 -2
  36. package/dist/esm/components/Tabs/OverflowTab.js.map +1 -1
  37. package/dist/esm/components/TimePicker/TimePicker.d.ts +3 -0
  38. package/dist/esm/components/TimePicker/TimePicker.d.ts.map +1 -1
  39. package/dist/esm/components/TimePicker/TimePicker.js +4 -3
  40. package/dist/esm/components/TimePicker/TimePicker.js.map +1 -1
  41. package/dist/esm/next/components/Dropdown/Dropdown.d.ts +2 -0
  42. package/dist/esm/next/components/Dropdown/Dropdown.d.ts.map +1 -1
  43. package/dist/esm/next/components/Dropdown/Dropdown.js +2 -2
  44. package/dist/esm/next/components/Dropdown/Dropdown.js.map +1 -1
  45. package/dist/esm/next/components/Select/Select.d.ts +2 -0
  46. package/dist/esm/next/components/Select/Select.d.ts.map +1 -1
  47. package/dist/esm/next/components/Select/Select.js +2 -2
  48. package/dist/esm/next/components/Select/Select.js.map +1 -1
  49. package/dist/js/components/ApplicationLauncher/ApplicationLauncher.d.ts +2 -0
  50. package/dist/js/components/ApplicationLauncher/ApplicationLauncher.d.ts.map +1 -1
  51. package/dist/js/components/ApplicationLauncher/ApplicationLauncher.js +2 -2
  52. package/dist/js/components/ApplicationLauncher/ApplicationLauncher.js.map +1 -1
  53. package/dist/js/components/ContextSelector/ContextSelector.d.ts +2 -0
  54. package/dist/js/components/ContextSelector/ContextSelector.d.ts.map +1 -1
  55. package/dist/js/components/ContextSelector/ContextSelector.js +4 -3
  56. package/dist/js/components/ContextSelector/ContextSelector.js.map +1 -1
  57. package/dist/js/components/Dropdown/Dropdown.d.ts +2 -0
  58. package/dist/js/components/Dropdown/Dropdown.d.ts.map +1 -1
  59. package/dist/js/components/Dropdown/Dropdown.js +2 -2
  60. package/dist/js/components/Dropdown/Dropdown.js.map +1 -1
  61. package/dist/js/components/Dropdown/DropdownWithContext.d.ts.map +1 -1
  62. package/dist/js/components/Dropdown/DropdownWithContext.js +2 -2
  63. package/dist/js/components/Dropdown/DropdownWithContext.js.map +1 -1
  64. package/dist/js/components/Nav/NavItem.d.ts +2 -0
  65. package/dist/js/components/Nav/NavItem.d.ts.map +1 -1
  66. package/dist/js/components/Nav/NavItem.js +2 -2
  67. package/dist/js/components/Nav/NavItem.js.map +1 -1
  68. package/dist/js/components/OptionsMenu/OptionsMenu.d.ts +2 -0
  69. package/dist/js/components/OptionsMenu/OptionsMenu.d.ts.map +1 -1
  70. package/dist/js/components/OptionsMenu/OptionsMenu.js +2 -2
  71. package/dist/js/components/OptionsMenu/OptionsMenu.js.map +1 -1
  72. package/dist/js/components/SearchInput/SearchInput.d.ts +2 -0
  73. package/dist/js/components/SearchInput/SearchInput.d.ts.map +1 -1
  74. package/dist/js/components/SearchInput/SearchInput.js +2 -2
  75. package/dist/js/components/SearchInput/SearchInput.js.map +1 -1
  76. package/dist/js/components/Select/Select.d.ts +2 -0
  77. package/dist/js/components/Select/Select.d.ts.map +1 -1
  78. package/dist/js/components/Select/Select.js +4 -3
  79. package/dist/js/components/Select/Select.js.map +1 -1
  80. package/dist/js/components/Tabs/OverflowTab.d.ts +2 -0
  81. package/dist/js/components/Tabs/OverflowTab.d.ts.map +1 -1
  82. package/dist/js/components/Tabs/OverflowTab.js +2 -2
  83. package/dist/js/components/Tabs/OverflowTab.js.map +1 -1
  84. package/dist/js/components/TimePicker/TimePicker.d.ts +3 -0
  85. package/dist/js/components/TimePicker/TimePicker.d.ts.map +1 -1
  86. package/dist/js/components/TimePicker/TimePicker.js +4 -3
  87. package/dist/js/components/TimePicker/TimePicker.js.map +1 -1
  88. package/dist/js/next/components/Dropdown/Dropdown.d.ts +2 -0
  89. package/dist/js/next/components/Dropdown/Dropdown.d.ts.map +1 -1
  90. package/dist/js/next/components/Dropdown/Dropdown.js +2 -2
  91. package/dist/js/next/components/Dropdown/Dropdown.js.map +1 -1
  92. package/dist/js/next/components/Select/Select.d.ts +2 -0
  93. package/dist/js/next/components/Select/Select.d.ts.map +1 -1
  94. package/dist/js/next/components/Select/Select.js +2 -2
  95. package/dist/js/next/components/Select/Select.js.map +1 -1
  96. package/dist/umd/react-core.min.js +4 -4
  97. package/package.json +2 -2
  98. package/src/components/ApplicationLauncher/ApplicationLauncher.tsx +4 -0
  99. package/src/components/ContextSelector/ContextSelector.tsx +6 -1
  100. package/src/components/Dropdown/Dropdown.tsx +4 -0
  101. package/src/components/Dropdown/DropdownWithContext.tsx +2 -0
  102. package/src/components/Nav/NavItem.tsx +4 -0
  103. package/src/components/OptionsMenu/OptionsMenu.tsx +4 -0
  104. package/src/components/SearchInput/SearchInput.tsx +4 -0
  105. package/src/components/Select/Select.tsx +6 -1
  106. package/src/components/Tabs/OverflowTab.tsx +4 -0
  107. package/src/components/TextArea/examples/TextArea.md +12 -260
  108. package/src/components/TextArea/examples/TextAreaAutoResizing.tsx +14 -0
  109. package/src/components/TextArea/examples/TextAreaBasic.tsx +7 -0
  110. package/src/components/TextArea/examples/TextAreaDisabled.tsx +6 -0
  111. package/src/components/TextArea/examples/TextAreaHorizontallyResizable.tsx +14 -0
  112. package/src/components/TextArea/examples/TextAreaIconSprite.tsx +41 -0
  113. package/src/components/TextArea/examples/TextAreaInvalid.tsx +15 -0
  114. package/src/components/TextArea/examples/TextAreaReadOnly.tsx +25 -0
  115. package/src/components/TextArea/examples/TextAreaUncontrolled.tsx +6 -0
  116. package/src/components/TextArea/examples/TextAreaValidated.tsx +52 -0
  117. package/src/components/TextArea/examples/TextAreaVerticallyResizable.tsx +14 -0
  118. package/src/components/TimePicker/TimePicker.tsx +6 -1
  119. package/src/components/ToggleGroup/examples/ToggleGroup.md +5 -191
  120. package/src/components/ToggleGroup/examples/ToggleGroupCompact.tsx +30 -0
  121. package/src/components/ToggleGroup/examples/ToggleGroupDefaultMultiple.tsx +43 -0
  122. package/src/components/ToggleGroup/examples/ToggleGroupDefaultSingle.tsx +32 -0
  123. package/src/components/ToggleGroup/examples/ToggleGroupIcon.tsx +42 -0
  124. package/src/components/ToggleGroup/examples/ToggleGroupTextIcon.tsx +42 -0
  125. package/src/demos/Card/Card.md +3 -2
  126. package/src/demos/PrimaryDetail.md +4 -6
  127. package/src/next/components/Dropdown/Dropdown.tsx +4 -0
  128. package/src/next/components/Select/Select.tsx +4 -0
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ import { Checkbox, TextArea } from '@patternfly/react-core';
3
+
4
+ export const TextAreaReadOnly: React.FunctionComponent = () => {
5
+ const [isPlainChecked, setIsPlainChecked] = React.useState(false);
6
+
7
+ return (
8
+ <React.Fragment>
9
+ <div style={{ marginBottom: '12px' }}>
10
+ <Checkbox
11
+ id="isPlain"
12
+ key="isPlain"
13
+ label="Plain read only variant"
14
+ isChecked={isPlainChecked}
15
+ onChange={checked => setIsPlainChecked(checked)}
16
+ />
17
+ </div>
18
+ <TextArea
19
+ aria-label="read only text area example"
20
+ value="read only text area example"
21
+ readOnlyVariant={isPlainChecked ? 'plain' : 'default'}
22
+ />
23
+ </React.Fragment>
24
+ );
25
+ };
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import { TextArea } from '@patternfly/react-core';
3
+
4
+ export const TextAreaUncontrolled: React.FunctionComponent = () => (
5
+ <TextArea defaultValue="default value" aria-label="uncontrolled text area example" />
6
+ );
@@ -0,0 +1,52 @@
1
+ import React from 'react';
2
+ import { Form, FormGroup, TextArea } from '@patternfly/react-core';
3
+
4
+ export const TextAreaValidated: React.FunctionComponent = () => {
5
+ const [value, setValue] = React.useState('');
6
+ const [invalidText, setInvalidText] = React.useState('You must have something to say');
7
+ const [validated, setValidated] = React.useState<'default' | 'error' | 'warning' | 'success' | undefined>('default');
8
+ const [helperText, setHelperText] = React.useState('Share your thoughts.');
9
+ const simulateNetworkCall = (callback: Function) => {
10
+ setTimeout(callback, 2000);
11
+ };
12
+
13
+ const handleTextAreaChange = (value: string) => {
14
+ setValue(value);
15
+ setValidated('default');
16
+ setHelperText('Validating...');
17
+ simulateNetworkCall(() => {
18
+ if (value.length > 0) {
19
+ if (value.length >= 10) {
20
+ setValidated('success');
21
+ setHelperText('Thanks for your comments!');
22
+ } else {
23
+ setValidated('error');
24
+ setInvalidText("You're being too brief, please enter at least 10 characters.");
25
+ }
26
+ } else {
27
+ setValidated('warning');
28
+ setHelperText('You must have something to say');
29
+ }
30
+ });
31
+ };
32
+ return (
33
+ <Form>
34
+ <FormGroup
35
+ label="Comments:"
36
+ type="string"
37
+ helperText={helperText}
38
+ helperTextInvalid={invalidText}
39
+ fieldId="selection"
40
+ validated={validated}
41
+ >
42
+ <TextArea
43
+ value={value}
44
+ onChange={value => handleTextAreaChange(value)}
45
+ isRequired
46
+ validated={validated}
47
+ aria-label="invalid text area example"
48
+ />
49
+ </FormGroup>
50
+ </Form>
51
+ );
52
+ };
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import { TextArea } from '@patternfly/react-core';
3
+
4
+ export const VerticalResizeTextArea: React.FunctionComponent = () => {
5
+ const [value, setValue] = React.useState('');
6
+ return (
7
+ <TextArea
8
+ value={value}
9
+ onChange={value => setValue(value)}
10
+ resizeOrientation="vertical"
11
+ aria-label="text area vertical resize example"
12
+ />
13
+ );
14
+ };
@@ -73,6 +73,8 @@ export interface TimePickerProps
73
73
  setIsOpen?: (isOpen?: boolean) => void;
74
74
  /** @beta Opt-in for updated popper that does not use findDOMNode. */
75
75
  removeFindDomNode?: boolean;
76
+ /** z-index of the time picker */
77
+ zIndex?: number;
76
78
  }
77
79
 
78
80
  interface TimePickerState {
@@ -111,7 +113,8 @@ export class TimePicker extends React.Component<TimePickerProps, TimePickerState
111
113
  maxTime: '',
112
114
  isOpen: false,
113
115
  setIsOpen: () => {},
114
- removeFindDomNode: false
116
+ removeFindDomNode: false,
117
+ zIndex: 9999
115
118
  };
116
119
 
117
120
  constructor(props: TimePickerProps) {
@@ -461,6 +464,7 @@ export class TimePicker extends React.Component<TimePickerProps, TimePickerState
461
464
  includeSeconds,
462
465
  /* eslint-enable @typescript-eslint/no-unused-vars */
463
466
  removeFindDomNode,
467
+ zIndex,
464
468
  ...props
465
469
  } = this.props;
466
470
  const { timeState, isTimeOptionsOpen, isInvalid, minTimeState, maxTimeState } = this.state;
@@ -535,6 +539,7 @@ export class TimePicker extends React.Component<TimePickerProps, TimePickerState
535
539
  popper={menuContainer}
536
540
  isVisible={isTimeOptionsOpen}
537
541
  removeFindDomNode={removeFindDomNode}
542
+ zIndex={zIndex}
538
543
  />
539
544
  </div>
540
545
  </div>
@@ -14,207 +14,21 @@ import ShareSquareIcon from '@patternfly/react-icons/dist/esm/icons/share-square
14
14
  ## Examples
15
15
 
16
16
  ### Default with multiple selectable
17
- ```js
18
- import React from 'react';
19
- import { ToggleGroup, ToggleGroupItem, Button, Stack, StackItem } from '@patternfly/react-core';
20
-
21
- class DefaultToggleGroupExample extends React.Component {
22
- constructor(props) {
23
- super(props);
24
- this.state = {
25
- isSelected: {
26
- first: false,
27
- second: false,
28
- disableAll: false
29
- }
30
- };
31
- this.handleItemClick = (isSelected, event) => {
32
- const id = event.currentTarget.id;
33
- this.setState(prevState => {
34
- prevState.isSelected[id] = isSelected;
35
- return {
36
- isSelected: prevState.isSelected
37
- };
38
- });
39
- };
40
- this.disableAllClick = () => {
41
- this.setState(prevState => ({ disableAll: !prevState.disableAll }));
42
- };
43
- }
44
-
45
- render() {
46
- const { isSelected } = this.state;
47
-
48
- return (
49
- <Stack hasGutter>
50
- <StackItem>
51
- <Button onClick={this.disableAllClick}>
52
- {this.state.disableAll ? "Enable back" : "Disable all"}
53
- </Button>
54
- </StackItem>
55
- <StackItem>
56
- <ToggleGroup areAllGroupsDisabled={this.state.disableAll} aria-label="Default with multiple selectable">
57
- <ToggleGroupItem text="Option 1" key={0} buttonId="first" isSelected={isSelected.first} onChange={this.handleItemClick} />
58
- <ToggleGroupItem text="Option 2" key={1} buttonId="second" isSelected={isSelected.second} onChange={this.handleItemClick} />
59
- <ToggleGroupItem text="Option 3" key={2} isDisabled/>
60
- </ToggleGroup>
61
- </StackItem>
62
- </Stack>
63
- );
64
- }
65
- }
17
+ ```ts file="./ToggleGroupDefaultMultiple.tsx"
66
18
  ```
67
19
 
68
20
  ### Default with single selectable
69
- ```js
70
- import React from 'react';
71
- import { ToggleGroup, ToggleGroupItem } from '@patternfly/react-core';
72
-
73
- class DefaultAsRadioToggleGroupExample extends React.Component {
74
- constructor(props) {
75
- super(props);
76
- this.state = {
77
- isSelected: ""
78
- };
79
- this.handleItemClick = (isSelected, event) => {
80
- const id = event.currentTarget.id;
81
- this.setState({ isSelected: id });
82
- };
83
- }
84
-
85
- render() {
86
- const { isSelected } = this.state;
87
-
88
- return (
89
- <ToggleGroup aria-label="Default with single selectable">
90
- <ToggleGroupItem text="Option 1" buttonId="firstRadio" isSelected={isSelected === "firstRadio"} onChange={this.handleItemClick} />
91
- <ToggleGroupItem text="Option 2" buttonId="secondRadio" isSelected={isSelected === "secondRadio"} onChange={this.handleItemClick} />
92
- <ToggleGroupItem text="Option 3" buttonId="thirdRadio" isSelected={isSelected === "thirdRadio"} onChange={this.handleItemClick} />
93
- </ToggleGroup>
94
- );
95
- }
96
- }
21
+ ```ts file="./ToggleGroupDefaultSingle.tsx"
97
22
  ```
98
23
 
99
24
  ### Icons
100
- ```js
101
- import React from 'react';
102
- import { ToggleGroup, ToggleGroupItem } from '@patternfly/react-core';
103
- import UndoIcon from '@patternfly/react-icons/dist/esm/icons/undo-icon';
104
- import CopyIcon from '@patternfly/react-icons/dist/esm/icons/copy-icon';
105
- import ShareSquareIcon from '@patternfly/react-icons/dist/esm/icons/share-square-icon';
106
-
107
- class IconToggleGroupExample extends React.Component {
108
- constructor(props) {
109
- super(props);
110
- this.state = {
111
- isSelected: {
112
- "icons-1": false,
113
- "icons-2": false,
114
- "icons-3": true
115
- }
116
- };
117
- this.handleItemClick = (isSelected, event) => {
118
- const id = event.currentTarget.id;
119
- this.setState(prevState => {
120
- prevState.isSelected[id] = isSelected;
121
- return {
122
- isSelected: prevState.isSelected
123
- };
124
- });
125
- };
126
- }
127
-
128
- render() {
129
- const { isSelected } = this.state;
130
- return (
131
- <ToggleGroup aria-label="Icon variant toggle group">
132
- <ToggleGroupItem icon={<CopyIcon />} aria-label="copy icon button" buttonId="icons-1" isSelected={isSelected["icons-1"]} onChange={this.handleItemClick} />
133
- <ToggleGroupItem icon={<UndoIcon />} aria-label="undo icon button" buttonId="icons-2" isSelected={isSelected["icons-2"]} onChange={this.handleItemClick} />
134
- <ToggleGroupItem icon={<ShareSquareIcon />} aria-label="share square icon button" buttonId="icons-3" isSelected={isSelected["icons-3"]} onChange={this.handleItemClick} />
135
- </ToggleGroup>
136
- );
137
- }
138
- }
25
+ ```ts file="./ToggleGroupIcon.tsx"
139
26
  ```
140
27
 
141
28
  ### Text and icons
142
- ```js
143
- import React from 'react';
144
- import { ToggleGroup, ToggleGroupItem } from '@patternfly/react-core';
145
- import UndoIcon from '@patternfly/react-icons/dist/esm/icons/undo-icon';
146
- import CopyIcon from '@patternfly/react-icons/dist/esm/icons/copy-icon';
147
- import ShareSquareIcon from '@patternfly/react-icons/dist/esm/icons/share-square-icon';
148
-
149
- class TextIconToggleGroupExample extends React.Component {
150
- constructor(props) {
151
- super(props);
152
- this.state = {
153
- isSelected: {
154
- "text-icons-1": false,
155
- "text-icons-2": false,
156
- "text-icons-3": true
157
- }
158
- };
159
- this.handleItemClick = (isSelected, event) => {
160
- const id = event.currentTarget.id;
161
- this.setState(prevState => {
162
- prevState.isSelected[id] = isSelected;
163
- return {
164
- isSelected: prevState.isSelected
165
- };
166
- });
167
- };
168
- }
169
-
170
- render() {
171
- const { isSelected } = this.state;
172
- return (
173
- <ToggleGroup aria-label="Icon variant toggle group">
174
- <ToggleGroupItem icon={<CopyIcon />} text="Copy" aria-label="copy icon button" buttonId="text-icons-1" isSelected={isSelected["text-icons-1"]} onChange={this.handleItemClick} />
175
- <ToggleGroupItem icon={<UndoIcon />} text="Undo" aria-label="undo icon button" buttonId="text-icons-2" isSelected={isSelected["text-icons-2"]} onChange={this.handleItemClick} />
176
- <ToggleGroupItem icon={<ShareSquareIcon />} text="Share" aria-label="share square icon button" buttonId="text-icons-3" isSelected={isSelected["text-icons-3"]} onChange={this.handleItemClick} />
177
- </ToggleGroup>
178
- );
179
- }
180
- }
29
+ ```ts file="./ToggleGroupTextIcon.tsx"
181
30
  ```
182
31
 
183
32
  ### Compact variant
184
- ```js
185
- import React from 'react';
186
- import { ToggleGroup, ToggleGroupItem, ToggleGroupVariant } from '@patternfly/react-core';
187
-
188
- class CompactToggleGroupExample extends React.Component {
189
- constructor(props) {
190
- super(props);
191
- this.state = {
192
- isSelected: {
193
- "compact-1": false,
194
- "compact-2": false
195
- }
196
- };
197
- this.handleItemClick = (isSelected, event) => {
198
- const id = event.currentTarget.id;
199
- this.setState(prevState => {
200
- prevState.isSelected[id] = isSelected;
201
- return {
202
- isSelected: prevState.isSelected
203
- };
204
- });
205
- };
206
- }
207
-
208
- render() {
209
- const { isSelected } = this.state;
210
-
211
- return (
212
- <ToggleGroup isCompact aria-label="Compact variant toggle group">
213
- <ToggleGroupItem text="Option 1" buttonId="compact-1" isSelected={isSelected["compact-1"]} onChange={this.handleItemClick} />
214
- <ToggleGroupItem text="Option 2" buttonId="compact-2" isSelected={isSelected["compact-2"]} onChange={this.handleItemClick} />
215
- <ToggleGroupItem text="Option 3" isDisabled />
216
- </ToggleGroup>
217
- );
218
- }
219
- }
33
+ ```ts file="./ToggleGroupCompact.tsx"
220
34
  ```
@@ -0,0 +1,30 @@
1
+ import React from 'react';
2
+ import { ToggleGroup, ToggleGroupItem } from '@patternfly/react-core';
3
+
4
+ export const ToggleGroupCompact: React.FunctionComponent = () => {
5
+ const [isSelected, setIsSelected] = React.useState({
6
+ 'toggle-group-compact-1': false,
7
+ 'toggle-group-compact-2': false
8
+ });
9
+ const handleItemClick = (isSelected: boolean, event: React.MouseEvent<any> | React.KeyboardEvent | MouseEvent) => {
10
+ const id = event.currentTarget.id;
11
+ setIsSelected(prevIsSelected => ({ ...prevIsSelected, [id]: isSelected }));
12
+ };
13
+ return (
14
+ <ToggleGroup isCompact aria-label="Compact variant toggle group">
15
+ <ToggleGroupItem
16
+ text="Option 1"
17
+ buttonId="toggle-group-compact-1"
18
+ isSelected={isSelected['toggle-group-compact-1']}
19
+ onChange={handleItemClick}
20
+ />
21
+ <ToggleGroupItem
22
+ text="Option 2"
23
+ buttonId="toggle-group-compact-2"
24
+ isSelected={isSelected['toggle-group-compact-2']}
25
+ onChange={handleItemClick}
26
+ />
27
+ <ToggleGroupItem text="Option 3" isDisabled />
28
+ </ToggleGroup>
29
+ );
30
+ };
@@ -0,0 +1,43 @@
1
+ import React from 'react';
2
+ import { ToggleGroup, ToggleGroupItem, Button, Stack, StackItem } from '@patternfly/react-core';
3
+
4
+ export const ToggleGroupDefaultMultiple: React.FunctionComponent = () => {
5
+ const [isSelected, setIsSelected] = React.useState({
6
+ 'toggle-group-multiple-1': false,
7
+ 'toggle-group-multiple-2': false
8
+ });
9
+ const [disableAll, setDisableAll] = React.useState(false);
10
+ const handleItemClick = (isSelected: boolean, event: React.MouseEvent<any> | React.KeyboardEvent | MouseEvent) => {
11
+ const id = event.currentTarget.id;
12
+ setIsSelected(prevIsSelected => ({ ...prevIsSelected, [id]: isSelected }));
13
+ };
14
+ const disableAllClick = () => {
15
+ setDisableAll(!disableAll);
16
+ };
17
+ return (
18
+ <Stack hasGutter>
19
+ <StackItem>
20
+ <Button onClick={disableAllClick}>{disableAll ? 'Enable back' : 'Disable all'}</Button>
21
+ </StackItem>
22
+ <StackItem>
23
+ <ToggleGroup areAllGroupsDisabled={disableAll} aria-label="Default with multiple selectable">
24
+ <ToggleGroupItem
25
+ text="Option 1"
26
+ key={0}
27
+ buttonId="toggle-group-multiple-1"
28
+ isSelected={isSelected['toggle-group-multiple-1']}
29
+ onChange={handleItemClick}
30
+ />
31
+ <ToggleGroupItem
32
+ text="Option 2"
33
+ key={1}
34
+ buttonId="toggle-group-multiple-2"
35
+ isSelected={isSelected['toggle-group-multiple-2']}
36
+ onChange={handleItemClick}
37
+ />
38
+ <ToggleGroupItem text="Option 3" key={2} isDisabled />
39
+ </ToggleGroup>
40
+ </StackItem>
41
+ </Stack>
42
+ );
43
+ };
@@ -0,0 +1,32 @@
1
+ import React from 'react';
2
+ import { ToggleGroup, ToggleGroupItem } from '@patternfly/react-core';
3
+
4
+ export const ToggleGroupDefaultSingle: React.FunctionComponent = () => {
5
+ const [isSelected, setIsSelected] = React.useState('');
6
+ const handleItemClick = (isSelected: boolean, event: React.MouseEvent<any> | React.KeyboardEvent | MouseEvent) => {
7
+ const id = event.currentTarget.id;
8
+ setIsSelected(id);
9
+ };
10
+ return (
11
+ <ToggleGroup aria-label="Default with single selectable">
12
+ <ToggleGroupItem
13
+ text="Option 1"
14
+ buttonId="toggle-group-single-1"
15
+ isSelected={isSelected === 'toggle-group-single-1'}
16
+ onChange={handleItemClick}
17
+ />
18
+ <ToggleGroupItem
19
+ text="Option 2"
20
+ buttonId="toggle-group-single-2"
21
+ isSelected={isSelected === 'toggle-group-single-2'}
22
+ onChange={handleItemClick}
23
+ />
24
+ <ToggleGroupItem
25
+ text="Option 3"
26
+ buttonId="toggle-group-single-3"
27
+ isSelected={isSelected === 'toggle-group-single-3'}
28
+ onChange={handleItemClick}
29
+ />
30
+ </ToggleGroup>
31
+ );
32
+ };
@@ -0,0 +1,42 @@
1
+ import React from 'react';
2
+ import { ToggleGroup, ToggleGroupItem } from '@patternfly/react-core';
3
+ import UndoIcon from '@patternfly/react-icons/dist/esm/icons/undo-icon';
4
+ import CopyIcon from '@patternfly/react-icons/dist/esm/icons/copy-icon';
5
+ import ShareSquareIcon from '@patternfly/react-icons/dist/esm/icons/share-square-icon';
6
+
7
+ export const ToggleGroupIcon: React.FunctionComponent = () => {
8
+ const [isSelected, setIsSelected] = React.useState({
9
+ 'toggle-group-icons-1': false,
10
+ 'toggle-group-icons-2': false,
11
+ 'toggle-group-icons-3': true
12
+ });
13
+ const handleItemClick = (isSelected: boolean, event: React.MouseEvent<any> | React.KeyboardEvent | MouseEvent) => {
14
+ const id = event.currentTarget.id;
15
+ setIsSelected(prevIsSelected => ({ ...prevIsSelected, [id]: isSelected }));
16
+ };
17
+ return (
18
+ <ToggleGroup aria-label="Icon variant toggle group">
19
+ <ToggleGroupItem
20
+ icon={<CopyIcon />}
21
+ aria-label="copy"
22
+ buttonId="toggle-group-icons-1"
23
+ isSelected={isSelected['toggle-group-icons-1']}
24
+ onChange={handleItemClick}
25
+ />
26
+ <ToggleGroupItem
27
+ icon={<UndoIcon />}
28
+ aria-label="undo"
29
+ buttonId="toggle-group-icons-2"
30
+ isSelected={isSelected['toggle-group-icons-2']}
31
+ onChange={handleItemClick}
32
+ />
33
+ <ToggleGroupItem
34
+ icon={<ShareSquareIcon />}
35
+ aria-label="share square"
36
+ buttonId="toggle-group-icons-3"
37
+ isSelected={isSelected['toggle-group-icons-3']}
38
+ onChange={handleItemClick}
39
+ />
40
+ </ToggleGroup>
41
+ );
42
+ };
@@ -0,0 +1,42 @@
1
+ import React from 'react';
2
+ import { ToggleGroup, ToggleGroupItem } from '@patternfly/react-core';
3
+ import UndoIcon from '@patternfly/react-icons/dist/esm/icons/undo-icon';
4
+ import CopyIcon from '@patternfly/react-icons/dist/esm/icons/copy-icon';
5
+ import ShareSquareIcon from '@patternfly/react-icons/dist/esm/icons/share-square-icon';
6
+
7
+ export const ToggleGroupIcon: React.FunctionComponent = () => {
8
+ const [isSelected, setIsSelected] = React.useState({
9
+ 'text-icons-1': false,
10
+ 'text-icons-2': false,
11
+ 'text-icons-3': true
12
+ });
13
+ const handleItemClick = (isSelected: boolean, event: React.MouseEvent<any> | React.KeyboardEvent | MouseEvent) => {
14
+ const id = event.currentTarget.id;
15
+ setIsSelected(prevIsSelected => ({ ...prevIsSelected, [id]: isSelected }));
16
+ };
17
+ return (
18
+ <ToggleGroup aria-label="Text and icon toggle group">
19
+ <ToggleGroupItem
20
+ icon={<CopyIcon />}
21
+ text="Copy"
22
+ buttonId="toggle-group-text-icons-1"
23
+ isSelected={isSelected['toggle-group-text-icons-1']}
24
+ onChange={handleItemClick}
25
+ />
26
+ <ToggleGroupItem
27
+ icon={<UndoIcon />}
28
+ text="Undo"
29
+ buttonId="toggle-group-text-icons-2"
30
+ isSelected={isSelected['toggle-group-text-icons-2']}
31
+ onChange={handleItemClick}
32
+ />
33
+ <ToggleGroupItem
34
+ icon={<ShareSquareIcon />}
35
+ text="Share"
36
+ buttonId="toggle-group-text-icons-3"
37
+ isSelected={isSelected['toggle-group-text-icons-3']}
38
+ onChange={handleItemClick}
39
+ />
40
+ </ToggleGroup>
41
+ );
42
+ };
@@ -426,11 +426,12 @@ class CardViewBasic extends React.Component {
426
426
  aria-label={anySelected ? 'Deselect all' : 'Select all'}
427
427
  isChecked={areAllSelected}
428
428
  onClick={this.splitCheckboxSelectAll.bind(this)}
429
- ></DropdownToggleCheckbox>
429
+ >
430
+ {numSelected !== 0 && `${numSelected} selected`}
431
+ </DropdownToggleCheckbox>
430
432
  ]}
431
433
  onToggle={this.onSplitButtonToggle}
432
434
  >
433
- {numSelected !== 0 && <React.Fragment>{numSelected} selected</React.Fragment>}
434
435
  </DropdownToggle>
435
436
  }
436
437
  isOpen={splitButtonDropdownIsOpen}
@@ -1369,14 +1369,12 @@ class PrimaryDetailCardView extends React.Component {
1369
1369
  aria-label={anySelected ? 'Deselect all' : 'Select all'}
1370
1370
  isChecked={areAllSelected}
1371
1371
  onClick={this.splitCheckboxSelectAll}
1372
- ></DropdownToggleCheckbox>
1372
+ >
1373
+ {numSelected !== 0 && `${numSelected} selected`}
1374
+ </DropdownToggleCheckbox>
1373
1375
  ]}
1374
1376
  onToggle={this.onSplitButtonToggle}
1375
- >
1376
- {numSelected !== 0 && (
1377
- <React.Fragment>{allSelected ? this.state.totalItemCount : numSelected} selected</React.Fragment>
1378
- )}
1379
- </DropdownToggle>
1377
+ ></DropdownToggle>
1380
1378
  }
1381
1379
  isOpen={splitButtonDropdownIsOpen}
1382
1380
  dropdownItems={splitButtonDropdownItems}
@@ -30,6 +30,8 @@ export interface DropdownProps extends MenuProps, OUIAProps {
30
30
  ouiaId?: number | string;
31
31
  /** 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. */
32
32
  ouiaSafe?: boolean;
33
+ /** z-index of the dropdown menu */
34
+ zIndex?: number;
33
35
  }
34
36
 
35
37
  const DropdownBase: React.FunctionComponent<DropdownProps> = ({
@@ -45,6 +47,7 @@ const DropdownBase: React.FunctionComponent<DropdownProps> = ({
45
47
  innerRef,
46
48
  ouiaId,
47
49
  ouiaSafe = true,
50
+ zIndex = 9999,
48
51
  ...props
49
52
  }: DropdownProps) => {
50
53
  const localMenuRef = React.useRef<HTMLDivElement>();
@@ -119,6 +122,7 @@ const DropdownBase: React.FunctionComponent<DropdownProps> = ({
119
122
  popper={menu}
120
123
  appendTo={containerRef.current || undefined}
121
124
  isVisible={isOpen}
125
+ zIndex={zIndex}
122
126
  />
123
127
  </div>
124
128
  );
@@ -26,6 +26,8 @@ export interface SelectProps extends MenuProps, OUIAProps {
26
26
  minWidth?: string;
27
27
  /** @hide Forwarded ref */
28
28
  innerRef?: React.Ref<HTMLDivElement>;
29
+ /** z-index of the select menu */
30
+ zIndex?: number;
29
31
  }
30
32
 
31
33
  const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
@@ -39,6 +41,7 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
39
41
  isPlain,
40
42
  minWidth,
41
43
  innerRef,
44
+ zIndex = 9999,
42
45
  ...props
43
46
  }: SelectProps & OUIAProps) => {
44
47
  const localMenuRef = React.useRef<HTMLDivElement>();
@@ -117,6 +120,7 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
117
120
  popper={menu}
118
121
  appendTo={containerRef.current || undefined}
119
122
  isVisible={isOpen}
123
+ zIndex={zIndex}
120
124
  />
121
125
  </div>
122
126
  );